Рекурсия |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Рекурсия |
Alex J'Root |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: -1 |
Помогите с одной задачей:
Написать программу, которая по заданной "Сумме" вычисляет и выводит значение этой суммы. <Сумма>::=<Целое>|(<Cумма><Знак_операции><Целое>) <Целое>::=<Цифра>{<Цифра>} <Знак_операции>::=+|- Пример правильной "суммы": 24; 34+45; 7-121+32. |
volvo |
Сообщение
#2
|
Гость |
В чем проблема? Передаешь в рекурсивную функцию строку, если в ней нет ни "+" ни "-", то переводишь переданную строку в число (Val), и возвращаешь как результат; если есть один из этих знаков - ищешь тот, который находится ПРАВЕЕ (ближе к концу строки), все что ДО его вырезаешь и передаешь на очередной уровень рекурсии, все что ПОСЛЕ - преобразуешь в число и ... Ну, знак ты нашел, значит, знаешь что надо сделать с этими двумя частями.
Вот и все... |
Alex J'Root |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: -1 |
Я просто не совсем понимаю что от меня требуеться в этой задаче. Я должен написать программу, потом в программу надо будет ввести выражение (строку). Например, если будет 14+53-15+9 - то это будет правильное выражение, а если 32-+23+321 - то это будет не правильно. Просто выводить true или false выражение?
|
Coach |
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: 0 |
Я просто не совсем понимаю что от меня требуеться в этой задаче. Я должен написать программу, потом в программу надо будет ввести выражение (строку). Например, если будет 14+53-15+9 - то это будет правильное выражение, а если 32-+23+321 - то это будет не правильно. Просто выводить true или false выражение? Ну тебе наверное надо,кроме проверки на правильность еще и вычислить значение ,если сумма верная. |
volvo |
Сообщение
#5
|
Гость |
Нет, тебе надо выводить сумму чисел переданной строки... Т.е.,
writeln(sum('7-121+32')); должно вывести -82 Причем про проверку на правильность в задаче речи нет, так что подразумевается, что передаваться будут именно правильные данные... Сообщение отредактировано: volvo - |
Alex J'Root |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: -1 |
Так, а если выражение такое: 32-+23+321, то просто вывести ошибку?
|
volvo |
Сообщение
#7
|
Гость |
Это уже на твое усмотрение...
|
Alex J'Root |
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: -1 |
Что-то "немножко" не получилось.
Program Rek; |
volvo |
Сообщение
#9
|
Гость |
Что это было?
function strtoint(s: string): integer; |
Alex J'Root |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: -1 |
Я почти разобрался, спасибо. Мне интересно, вот почему здесь 255:
strtoint(copy(s, i + 1, 255)) |
volvo |
Сообщение
#11
|
Гость |
Цитата Мне интересно, вот почему здесь 255: Потому что максимальная длина строки = 255, и с другой стороны:Цитата(TP Help) If Count specifies more characters than remain starting at the Indexth position, only the remainder of the string is returned ... Так зачем же заниматься высчитыванием, сколько там осталось, если можно просто передать 255 и скопируется все до конца строки? |
Alex J'Root |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Мужской Репутация: -1 |
Понял. Спасибо.
|
Текстовая версия | 29.03.2024 19:42 |