Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа со строками
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
PavelM
Добрый день!
Подскажите пожайлуста как это оформить(решить задачку)?
сама задача:
Дана цепочка символов вида "число1+число2*число3". Вычислить числовое значение выражения и напечатать.

цепочка вводится с клавиатуры (строка2+3*5), необходимо сначало определить 1-ю переменную, знак вычисления, 2-ю переменную, знак, 3-ю, и вычислить.на 2 числа вроде работает, а на 3 не хочет.
заранее благодарен.
Client
а что пробовал? выкладывай код, поможем smile.gif
PavelM
program raschet;
var
str:string[50];
zs:string[4];
si:char;
a1,a2,a3:real;
i,is,p1,p2,p3:integer;
begin
writeln('введите строку с выражением');
readln(str);
zs:='+-*/';
si:=' ';
for i:=1 to 4 do
if pos(zs[i],str)>0 then
begin
is:=pos(zs[i],str);
si:=zs[i];
end;
if si=' ' then writeln('неправильное выражение')
else
begin
val(copy(str,1,is-1),a1,p1);
val(copy(str,is+1,length(str)-is),a2,p2);
{val(copy(str,is+1,length(str)-is),a3,p3);}
end;
writeln(a1);
writeln(p1);
writeln(a2);
writeln(p2);
end.
Client
Цитата
Дана цепочка символов вида "число1+число2*число3"
Если только сложение и умножение, то просто находишь позицию '+' и '*', переводишь в число и считаешь
PavelM
а чтоб для всех операций, если кто нить введет не так как задумано?
volvo
Цитата
если кто нить введет не так как задумано?
Он должен получить исчерпывающее сообщение о том, что можно вводить, а что нельзя... Или ты пишешь комбайн "все в одном"? Вроде бы заявлено "+" и "*", но раз ввели "минус" - то так и быть, посчитаем и его?...
klem4
Цитата
если


Ну кроме операций еще много чего можно ввести, функции, скобки, константы ... Так что ты четко реши что тебе нужно реализовать и вперед.

Гость
Ок, только + и *
PavelM
Да, + и * остальное не нужно
Client
uses crt;
var
a,b,c,k:integer;
d:longint;
s:string;
begin
clrscr;
readln(s);
while pos(' ',s)>0 do delete(s,pos(' ',s),1); // удаляем пробелы
writeln(s);
val(copy(s,1,pos('+',s)-1),a,k); // если хочешь, то можешь отслеживать ошибки
delete(s,1,pos('+',s));
val(copy(s,1,pos('*',s)-1),b,k);
delete(s,1,pos('*',s));
val(s,c,k);
writeln(a,' ',b,' ',c); //это, так, для проверки
writeln(a+b*c);
readkey
end.
Так же можешь проверить если '+' находится после '*', то выдать сообщение об ошибке или
writeln(a*b+c);
но это уже как хочешь smile.gif
PavelM
Спасибо огромное!!! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.