У меня проблема. Я изучаю Паскаля всего пару недель, и я мало знаю. Я должен написать программу, которая должна вычислить что-то из 3 введенных чисел. Проблема в том, что все 3 из них должны быть введены в одно редактирование с промежутками между ними. Поэтому в основном у меня есть строка «номер номера номера». Как отделить эти числа от 3 отдельных строк, чтобы я мог преобразовать их в Integer.Разделение чисел в строке. Pascal
ответ
В 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.
Спасибо, это очень помогло. Он также работает для массивов? –
Да: 'Тип TMyArr = массив [0..2] из Integer; процедура GetNumbers (var arr: TMyArr); begin WriteLn ('Введите три числа, разделенные пробелом, а затем нажмите enter.'); ReadLn (обр [0], обр [1], обр [2]); end; ' –
И если есть n элементов? Например, массив [1..n], где n может быть до 100 000. –
Использование функции копирования в одну сторону. Извините за форматирование, я не могу понять, как правильно вставлять фрагменты кода в эти разделы ответов.
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.
В справочной системе stackoverflow объясняется, как сделать правильное форматирование – lurker
'процедура GetNumbers (var x, y, z: Integer); begin WriteLn ('Введите три числа, разделенные пробелом, а затем нажмите enter.'); ReadLn (х, у, г); end; ' –
@LURD Я был бы рад UV вашему решению, если вы сделаете правильный ответ. Единственный текущий ответ на самом деле не является ответом на вопрос, а также слишком сложным. –
@TomBrunberg, спасибо, что побудил меня пройти весь путь, чтобы ответить :-) –