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

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

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

 
 Ответить  Открыть новую тему 
> Строки, вычисление выражения
vovka239
сообщение 3.12.2009 21:57
Сообщение #1


Новичок
*

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

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


Помогите пожалуйста решить задачу:
Дана последовательность литер, имеющая следующий вид: +-d1+-d2+-d3+-dn(где di - цифра от 0 до
9). Последовательность заканчивается знаком "=". Вычислить значение алгебраической суммы.
С чего надо начать? Я вообще не въезжаю smile.gif Дотянул до последнего дня, ещё и спать охота...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 4.12.2009 0:29
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(vovka239 @ 3.12.2009 21:57) *
С чего надо начать?
Просматриваешь строку в цикле. Нечетный символ - знак (+, - или =). Четный - цифра. По ходу вычисляешь сумму.


Добавлено через 9 мин.
Что-то типо так:
m:=0;
i:=1;
while (i<=Length(s))and(s[i]<>'=') do begin
if s[i]='+' then m:=m+Ord(s[i+1])-48 else m:=m-Ord(s[i+1])+48;
i:=i+2
end;



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
vovka239
сообщение 4.12.2009 2:01
Сообщение #3


Новичок
*

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

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


Непонимаю...
Там ещё массив должен быть? Или цикл for?
Короче пока забью, всё равно щас не сделаю... может позже что придумаю.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 4.12.2009 2:10
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(vovka239 @ 4.12.2009 2:01) *
Там ещё массив должен быть? Или цикл for?
Нет, ни массива, ни for не нужно (вместо for я сделал while). Опиши переменные и добавь ввод самой строки с начальными данными. Ну и вывод результата, конечно.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 4.12.2009 12:57
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

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


Цитата(vovka239 @ 4.12.2009 2:01) *
Там ещё массив должен быть?
В данном случае массив символов - это строка. Другого массива не нужно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
vovka239
сообщение 17.12.2009 10:09
Сообщение #6


Новичок
*

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

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


Сори за столь долгое молчание в теме, задачу всё ещё не сделал, и петух клюнул в одно место smile.gif
по поводу кода:
Цитата
m:=0;
i:=1;
while (i<=Length(s))and(s[i]<>'=') do begin
if s[i]='+' then m:=m+Ord(s[i+1])-48 else m:=m-Ord(s[i+1])+48;
i:=i+2
end;

откуда взялось +-48? мне непонятно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 17.12.2009 10:58
Сообщение #7


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(vovka239 @ 17.12.2009 10:09) *
откуда взялось +-48? мне непонятно...

ASCII код символа 0 есть 48 ($30). Далее по порядку: 1 - 49, 2 - 50.. При переводе символа в цифру нужен пересчет.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
vovka239
сообщение 17.12.2009 12:45
Сообщение #8


Новичок
*

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

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


Примерно так?
program Project2;

uses
SysUtils;
var
m:integer;
i:integer;
s:string;
begin
m:=0;
i:=1;
writeln('Vvedite s');
read(s[i]);
begin
while (i<=Length(s))and(s[i]<>'=') do begin
if s[i]='+' then m:=m+Ord(s[i+1])-48 else m:=m-Ord(s[i+1])+48;
i:=i+2;
end ;
Writeln(m);
readln;
end;
end.

А почему у меня не выводится результат, а просто вылетает программа? Ведь readln прописал как положено вроде.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 17.12.2009 12:55
Сообщение #9


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Замени
read(s[i]);
на
readLn(s[i]);


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
vovka239
сообщение 17.12.2009 13:29
Сообщение #10


Новичок
*

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

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


Всё-равно вылетает... glare.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.12.2009 14:11
Сообщение #11


Гость






Ничего не вылетает, если подумать, что ты хочешь ввести, и куда ты это пытаешься ввести. Убери 3 символа - все запустится...
 К началу страницы 
+ Ответить 
andriano
сообщение 17.12.2009 19:53
Сообщение #12


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

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


Цитата(Lapp @ 17.12.2009 10:58) *
ASCII код символа 0 есть 48 ($30). Далее по порядку: 1 - 49, 2 - 50.. При переводе символа в цифру нужен пересчет.
Дабы не возникало лишних вопросов:
m:=m+(Ord(s[i+1])-Ord('0'))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 18.12.2009 2:55
Сообщение #13


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(vovka239 @ 17.12.2009 13:29) *
Всё-равно вылетает... glare.gif
Поясняй, где, что, как и куда вылетает.
-1


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
vovka239
сообщение 21.12.2009 22:19
Сообщение #14


Новичок
*

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

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


Цитата
Замени
read(s[i]);
на
readLn(s[i]);

Заменил, всё-равно не пашет. Запускаю программу, Ввожу "+", жму интер, оно мне выдаёт 0, снова "+" или "-", интер и всё, закрывается...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 22.12.2009 5:31
Сообщение #15


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(vovka239 @ 21.12.2009 22:19) *
Заменил, всё-равно не пашет. Запускаю программу, Ввожу "+", жму интер, оно мне выдаёт 0, снова "+" или "-", интер и всё, закрывается...

Моя ошибка, извини. Я не заметил, что ты читаешь посимвольно. Нужно не
ReadLn(s[i]);
, а вот так:
ReadLn(s);
- то есть ты должен читать всю строку сразу, а не по одному символу.

Теперь твои ошибки.. Одну уже сказал, вторая, видимо, вытекает из нее. При вводе нужно набирать всю строку - энтер нужно нажимать один раз в самом конце строки (и еще один раз после вывода результата). То есть ты вводишь:

+2+5-4+3-1= (и жмешь энтер)

Получаешь:

5

Жмешь энтер еще раз, чтобы выйти из проги.

Строка всегда должна начинаться со знака (+ или -), содержать только однозначные числа и заканчиваться знаком "=".

Вот тебе на всякий случай полный код, без излишеств и правильно отформатированный.
program Project2;
var
i,m: integer;
s: string;
begin
m:=0;
i:=1;
Write('Vvedite s: ');
ReadLn(s);
while (i<=Length(s))and(s[i]<>'=') do begin
if s[i]='+' then m:=m+Ord(s[i+1])-48 else m:=m-Ord(s[i+1])+48;
i:=i+2;
end ;
Writeln(m);
readln;
end.

Успехов.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
vovka239
сообщение 22.12.2009 12:32
Сообщение #16


Новичок
*

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

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


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

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

 



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