Консультация № 176449
03.02.2010, 03:31
0.00 руб.
0 7 3
зaдaчa по строкaм.
Ввести строку,состоящую из 2х числе. Преобразовать в числа,сложит и вывести.
Например
Дана строка '25 24'
Нужно каждое число,занести в свой массив.
Т.е у:='25',а к:='24',потом сложить их

Обсуждение

давно
Профессор
401888
1232
03.02.2010, 07:03
общий
это ответ
Здравствуйте, Мальков Иван Сергеевич!
Решение задачи в приложении.

Приложение:
uses crt;
var s:string;{вводимая строка}
sum,y,k,cy,ck:integer;{сумма, слагаемые, коды ошибок при преобразовании}
p:byte;{позиция пробела}
begin
clrscr;
repeat{в цикле вводим строку, проверяем пока не введем правильно}
writeln('Введите строку из двух целых чисел, разделенных пробелом:');
readln(s);
p:=pos(' ',s);{определяем позицию пробела}
val(copy(s,1,p-1),y,cy);{пытаемся преобразовать в целое число часть строки до пробела}
if cy<>0 then writeln('Введены не целые числа!');{если код ошибки не равен нулю}
val(copy(s,p+1,length(s)-p),k,ck);{тоже с частью строки после пробела}
if ck<>0 then writeln('Введены не целые числа!');
until(cy=0)and(ck=0);{если нормально ввели, заканчиваем}
sum:=y+k;{складываем}
write(y,'+',k,'=',sum);{выводим}
readln
end.
давно
Мастер-Эксперт
319965
1463
03.02.2010, 10:58
общий
это ответ
Здравствуйте, Мальков Иван Сергеевич.

Предлагаю менее навязчивый для пользователя вариант, который не заставляет его вводить числа до состояния правильности:

var
s,x,y:string;
no,code,xx,yy:integer;
begin
Writeln('Input numbers:');
Readln(s);
no:=Pos(' ',s);
x:=Copy(s,1,no-1);
y:=Copy(s,no+1,Length(s)-no);
Val(x,xx,code);
if code>0 then Writeln('Incorrect first number')
else begin
Val(y,yy,code);
if code>0 then Writeln('Incorrect second number')
else begin
Writeln('Sum equals to ',xx+yy);
end
end;
Readln;
end.
Неизвестный
03.02.2010, 11:43
общий
Можно ЕЩЕ ПРОЩЕ:
Код:
Read(y, k); {ReadLn(y,k);}
легко считает два числа, а если отключить контроль операций ввода-вывода, то и ошибку легко отследить
давно
Профессионал
304622
583
03.02.2010, 14:04
общий
Пупорев Юрий Борисович:
Хе-хе! Я своим студентам давал такую задачу. Только я ещё val запретил использовать. Чтоб каждый символ сами преобразовывали и в число добавляли.
давно
Профессионал
304622
583
03.02.2010, 14:08
общий
Boriss:
Нет. Очевидно, что преподаватель поставил условием задачи, чтобы исходные данные находились в string-переменной. Тема у них сейчас такая.
Неизвестный
03.02.2010, 15:16
общий
это ответ
Здравствуйте, Мальков Иван Сергеевич.
Собственно решение задачи приведено ниже.
Для удобства пользователя можно еще накрутить вокруг функционального кода много проверок.
Функция TrimLeft - удаляет лидирующие пробелы
Функция GetNumber - возвращает первое число из строки.


Приложение:
{
Ввести строку,состоящую из 2х числе. Преобразовать в числа,сложит и вывести.
Например:
Дана строка '25 24'
Нужно каждое число,занести в свой массив.
Т.е у:='25',а к:='24',потом сложить их
}
Uses
Crt;
Var
St: String;
a, b: Integer;
p: Byte;

function TrimLeft(st: String; ch: Char): String;
var
p: Byte;
begin
p := Pos(ch, st);
while (p = 1) do begin
Delete(st, 1, 1);
p := Pos(ch, st);
end;
TrimLeft := st;
end;

function GetNumber(st: String): Integer;
var
result, c : Integer;
begin
p := Pos(' ', st);
if (p = 0) then
Val(Copy(st, 1, Length(st)), result, c)
else
Val(Copy(st, 1, p-1), result, c);
GetNumber := result;
end;

begin
ClrScr;
repeat {Ввод двух чисел разделенных пробелом (или пробелами)}
Write('Введите два целых числа разделенные пробелом: ');
ReadLn(St);
St := TrimLeft(St, ' '); {в случае ошибочного ввода лишних пробелов перед числом они будут удалены}
p := Pos(' ', St);
if (p = 0) then
WriteLn('Ошибка ввода: Не найден разделить между числами. Повторите ввод.');
until (p > 0);
a := GetNumber(St); {Получить первое число}
Delete(St, 1, p); {Удалить первое число, чтобы добраться до второго}
St := TrimLeft(St, ' '); {Удалить лишние лидирующие пробелы, если таковые имеются}
b := GetNumber(St); {Получить второе число}
Write('Результат: ',a,' + ',b,' = ', a + b);
repeat until keypressed;
end.
давно
Академик
320937
2216
03.02.2010, 16:28
общий
Мальков Иван Сергеевич:
Результат должен быть в виде числа или в виде строки? То есть '25 24'->'49' или 49?
Форма ответа