Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ программа-палиндром

Автор: Aisha 27.09.2009 3:17

На форуме много вопросов по написанию программ, находящих палиндромы в строке, составляющих палиндромы, находящих числа-палиндромы и т.д. У меня проблема в другом.
Задание звучит следующим образом: написать программу-палиндром. И все. Что, как объяснил преподаватель, означает написание кода программы в виде палиндрома, т. е. сам весь код программы (или построчно) должен читаться слева направо и справа налево одинаково. И эта программа должна еще и работать. mega_chok.gif Причем, не важно, ЧТО она делает, главное - она должна компилироваться. В голове не укладывается, как это может работать. Т.е. еще переменные описать можно:
Program argorp
;Var rav;
а что делать со словами begin и тем более end? unsure.gif

Буду признательна за вашу помощь smile.gif

Автор: RathaR 27.09.2009 4:03

бред какойто... преподаватель посмеяться решил, чтоли? Это уже не програмировать, а фигней маяться...
Темболее это невозможно, хотябы потому что зарезервированые слова таким образом ненапишешь никак...
допустим если end. записать не в отдельной строке, то эта строка должна начинаться со знака ".", а в паскале нельзя ни переменные, ни процедуры, ничего описывать начиная с этого символа, и кроме записей насколько мне изестно он больше нигде не используеться...
да и в этом:

Program argorp
;Var rav;

тип переменной rav уже никак не описать....

Автор: volvo 27.09.2009 4:11

Цитата
Темболее это невозможно, хотябы потому что зарезервированые слова таким образом ненапишешь никак..
Прежде, чем так безапелляционно говорить, ты бы синтаксис Паскаля выучил, а? То, что после end-а с точкой все остальные символы компилятор игнорирует, знаешь? Тогда в чем проблема?
begin write('hello') end . dne )'olleh'(etirw nigeb
Палиндром? Палиндром... Компилируется? Компилируется. Работает? Работает. Претензии есть?

Автор: Lapp 27.09.2009 4:47

Похоже, это единственный способ..

Автор: andriano 27.09.2009 14:01

Беда в том, что утверждение "что после end-а с точкой все остальные символы компилятор игнорирует" не совсем верно. Точнее, в общем случае совсем не верно, ибо существуют компиляторы, поступающие иначе.
С другой стороны, доказательство, что задача не имеет решения по общенаучной традиции считается решением.
Могу предложить решение, которое сработает как раз для компилятора, обрабатывающего текст после точки, но, увы, не для ВР.

begin write('hello') end . // .dne )'olleh'(etirw nigeb

В общем, не получается платформонезависимого решения. Так что второй вариант не теряет актуальности.

Автор: volvo 27.09.2009 14:22

Цитата
ибо существуют компиляторы, поступающие иначе.
Bla-bla-bla... Плевать я хотел на нестандартные компиляторы. СТАНДАРТ языка требует, чтобы все, что идет после точки - игнорировалось. Если этого не делает твой компилятор - то выкинь его в мусорку... Досужие рассуждения о правильности написания трансляторов можешь оставить при себе... Тут раздел ПРАКТИКИ, а не ТЕОРИИ...

Кстати, код, приведенный в третьем сообщении, компилируется любым распространенным компилятором. Можно узнать, каким Паскаль-компилятором он НЕ компилируется? И какой именно компилятор обрабатывает текст после точки? Или это опять "у вас у всех неправильно, только я как всегда самый умный, теоретически такое возможно и все остальное меня не волнует"?

Автор: andriano 27.09.2009 16:15

На конкретный вопрос - конкретный ответ: TMT Pascal.
Что же касается стандарта языка, то здесь существует некоторая неопределенность, связанная с тем, что наиболее распространенные диалекты Паскаля (т.е. BP и Delphi) сами по себе очень далеки от стандарта, описанного Н.Виртом.

Автор: RathaR 27.09.2009 16:39

Помоему искать методы решения глупой задачи - уже глупость (в чем у меня уже была возможность убедиться лично smile.gif ).

З.Ы.

Цитата
begin write('hello') end . // .dne )'olleh'(etirw nigeb

а можно ли это назвать правильным ответом, если "//" будет читаться наоборот как "\\", и скобки тоже самое, тогда надо уже вот так делать smile.gif
begin write('hello') end . // \\.dne ('olleh')etirw nigeb

Автор: TarasBer 27.09.2009 17:36

Цитата(RathaR @ 27.09.2009 13:39) *

З.Ы.
а можно ли это назвать правильным ответом, если "//" будет читаться наоборот как "\\"?


Да ладно. Вы хотите сказать, что 'd' должно читаться как 'b', 'q' как 'p'? '//' наоборот читается как '//'.

По поводу этой задачи также ясно, что не существует решения, честно заканчивающегося на 'end.' - ведь тогда код должен начинаться с '.dne', что недопустимо.

Автор: RathaR 27.09.2009 17:47

Цитата(TarasBer @ 27.09.2009 13:36) *

Да ладно. Вы хотите сказать, что 'd' должно читаться как 'b', 'q' как 'p'? '//' наоборот читается как '//'.

нет, букв это не касаеться, они по своей природе невсегда симетричны smile.gif , а вот знак скобки, слеш, или кавычки это парные символы, поэтому тотже преподаватель которому пришло в голову это задание, может истолковать его решение двояко, мол "Здесь у тебя одни скобки влево, а я когда читаю наоборот, то вижу у тебя одни правые!"

Автор: Вячеслав Людской 28.09.2009 17:26

Мне тоже стало интересно, и я попробовал написать, как предлагает volvo, но программа так не работает. Или я что-то сделал не так?

Код
program gf;
begin
write('hello')
end.
.dne
)'olleh'(etirw
nigeb
;fg margorp


Появляется "Ошибка:лишние символы после конца текста программы"

Автор: Lapp 28.09.2009 17:51

Цитата(Вячеслав Людской @ 28.09.2009 14:26) *
Появляется "Ошибка:лишние символы после конца текста программы"
Какой у тебя компилятор?

Автор: Вячеслав Людской 28.09.2009 17:58

Цитата
Какой у тебя компилятор?


Скажи пожалуйста, что это?

Автор: Lapp 28.09.2009 18:40

Цитата(Вячеслав Людской @ 28.09.2009 14:58) *
Скажи пожалуйста, что это?
Компилятор - это программа, которая делает рабочую программу из паскалевского текста. Часто он бывает вставлен в т.н. "среду разработки" (IDE). Это есть редактор, компилятор, библиотеки и отладчик в одном флаконе, как говорится. Кроме Turbo Pascal, есть также Free Pascal, ABC Pascal и т.п.

Что ты запускаешь, когда собираешься программировать?

Автор: Вячеслав Людской 28.09.2009 18:49

Запускаю Pascal ABC

Автор: Lapp 28.09.2009 19:25

Из этого следует, что компилятор Pascal ABC не поддерживает стандарта Pascal. Так как в стандарте (как уже сказал volvo) есть требование прекращения компиляции после последней точки. Оставим это на совести разработчиков..

Автор: Aisha 14.10.2009 18:19

volvo
спасибо за идею good.gif

Lapp, Вячеслав Людской
главное, что у меня в Turbo работает wink.gif

Rathar, TarasBer
препод, слава те Господи, в такие дебри не полез

Всем-всем, кто проявил интерес, большущее спасибо smile.gif

Автор: Lapp 15.10.2009 7:09

Цитата(Aisha @ 14.10.2009 15:19) *
volvo
спасибо за идею good.gif
volvo +1
Думаю, она это имела в виду)).