2017-02-18 11 views
-1

У меня проблема. Я изучаю Паскаля всего пару недель, и я мало знаю. Я должен написать программу, которая должна вычислить что-то из 3 введенных чисел. Проблема в том, что все 3 из них должны быть введены в одно редактирование с промежутками между ними. Поэтому в основном у меня есть строка «номер номера номера». Как отделить эти числа от 3 отдельных строк, чтобы я мог преобразовать их в Integer.Разделение чисел в строке. Pascal

+3

'процедура GetNumbers (var x, y, z: Integer); begin WriteLn ('Введите три числа, разделенные пробелом, а затем нажмите enter.'); ReadLn (х, у, г); end; ' –

+0

@LURD Я был бы рад UV вашему решению, если вы сделаете правильный ответ. Единственный текущий ответ на самом деле не является ответом на вопрос, а также слишком сложным. –

+0

@TomBrunberg, спасибо, что побудил меня пройти весь путь, чтобы ответить :-) –

ответ

1

В pascal есть встроенные процедуры для извлечения ввода с консоли.

Самый простой способ получить числовые входные данные, чтобы использовать Read()/ReadLn(), который также может сделать преобразование из строки в числовое значение:

procedure GetNumbers(var x,y,z: Integer); 
begin 
    WriteLn('Enter three numbers separated with space and then press enter.'); 
    ReadLn(x,y,z); 
end; 

Здесь ReadLn() обнаруживает три входа, разделенных пробелом, ждет ключ [Enter] и присваивает целочисленные значения переменным x, y, z.

+0

Спасибо, это очень помогло. Он также работает для массивов? –

+0

Да: 'Тип TMyArr = массив [0..2] из Integer; процедура GetNumbers (var arr: TMyArr); begin WriteLn ('Введите три числа, разделенные пробелом, а затем нажмите enter.'); ReadLn (обр [0], обр [1], обр [2]); end; ' –

+0

И если есть n элементов? Например, массив [1..n], где n может быть до 100 000. –

0

Использование функции копирования в одну сторону. Извините за форматирование, я не могу понять, как правильно вставлять фрагменты кода в эти разделы ответов.

function TMyForm.Add(anEdit : TEdit) : integer; 
var 
    Idx : integer; 
    TempString : string; 

function GetNext : integer; 
begin 
    result := result + StrToInt(copy(TempString, 1, Idx - 1)); 
    TempString := copy(TempString, Idx + 1, MAXINT); 
end; 

begin 
    result := 0; 
    TempString := anEdit.Text; 

    repeat 
     Idx := pos(' ', TempString); 
     if Idx > 0 then 
     result := GetNext; 
    until Idx = 0; 

    if trim(TempString) <> '' then 
     //this is the last piece of it then 
     result := result + StrToInt(trim(TempString)); 
end; 

Необходимо также следить за тем, чтобы введенные значения представляли собой цифры, а не буквы, обычно выполняемые с помощью блоков try..except.

+1

В справочной системе stackoverflow объясняется, как сделать правильное форматирование – lurker

 Смежные вопросы

  • Нет связанных вопросов^_^