IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Работа со строками
PavelM
сообщение 18.03.2008 21:43
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Pavel

Репутация: -  0  +


Добрый день!
Подскажите пожайлуста как это оформить(решить задачку)?
сама задача:
Дана цепочка символов вида "число1+число2*число3". Вычислить числовое значение выражения и напечатать.

цепочка вводится с клавиатуры (строка2+3*5), необходимо сначало определить 1-ю переменную, знак вычисления, 2-ю переменную, знак, 3-ю, и вычислить.на 2 числа вроде работает, а на 3 не хочет.
заранее благодарен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 10)
Client
сообщение 18.03.2008 21:44
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


а что пробовал? выкладывай код, поможем smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PavelM
сообщение 18.03.2008 21:47
Сообщение #3





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Pavel

Репутация: -  0  +


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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 18.03.2008 21:54
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Цитата
Дана цепочка символов вида "число1+число2*число3"
Если только сложение и умножение, то просто находишь позицию '+' и '*', переводишь в число и считаешь
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PavelM
сообщение 18.03.2008 21:56
Сообщение #5





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Pavel

Репутация: -  0  +


а чтоб для всех операций, если кто нить введет не так как задумано?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.03.2008 22:02
Сообщение #6


Гость






Цитата
если кто нить введет не так как задумано?
Он должен получить исчерпывающее сообщение о том, что можно вводить, а что нельзя... Или ты пишешь комбайн "все в одном"? Вроде бы заявлено "+" и "*", но раз ввели "минус" - то так и быть, посчитаем и его?...
 К началу страницы 
+ Ответить 
klem4
сообщение 18.03.2008 22:03
Сообщение #7


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
если


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



--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 19.03.2008 5:08
Сообщение #8


Гость






Ок, только + и *
 К началу страницы 
+ Ответить 
PavelM
сообщение 19.03.2008 5:11
Сообщение #9





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Pavel

Репутация: -  0  +


Да, + и * остальное не нужно
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 19.03.2008 7:12
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


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

Сообщение отредактировано: Client - 19.03.2008 7:13
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PavelM
сообщение 19.03.2008 21:05
Сообщение #11





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Pavel

Репутация: -  0  +


Спасибо огромное!!! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 31.07.2025 22:05
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"