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

Буду признательна за вашу помощь smile.gif
RathaR
бред какойто... преподаватель посмеяться решил, чтоли? Это уже не програмировать, а фигней маяться...
Темболее это невозможно, хотябы потому что зарезервированые слова таким образом ненапишешь никак...
допустим если end. записать не в отдельной строке, то эта строка должна начинаться со знака ".", а в паскале нельзя ни переменные, ни процедуры, ничего описывать начиная с этого символа, и кроме записей насколько мне изестно он больше нигде не используеться...
да и в этом:
Program argorp
;Var rav;

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

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

Кстати, код, приведенный в третьем сообщении, компилируется любым распространенным компилятором. Можно узнать, каким Паскаль-компилятором он НЕ компилируется? И какой именно компилятор обрабатывает текст после точки? Или это опять "у вас у всех неправильно, только я как всегда самый умный, теоретически такое возможно и все остальное меня не волнует"?
andriano
На конкретный вопрос - конкретный ответ: TMT Pascal.
Что же касается стандарта языка, то здесь существует некоторая неопределенность, связанная с тем, что наиболее распространенные диалекты Паскаля (т.е. BP и Delphi) сами по себе очень далеки от стандарта, описанного Н.Виртом.
RathaR
Помоему искать методы решения глупой задачи - уже глупость (в чем у меня уже была возможность убедиться лично smile.gif ).

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

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

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


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

По поводу этой задачи также ясно, что не существует решения, честно заканчивающегося на 'end.' - ведь тогда код должен начинаться с '.dne', что недопустимо.
RathaR
Цитата(TarasBer @ 27.09.2009 13:36) *

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

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

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


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


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

Что ты запускаешь, когда собираешься программировать?
Вячеслав Л.
Запускаю Pascal ABC
Lapp
Из этого следует, что компилятор Pascal ABC не поддерживает стандарта Pascal. Так как в стандарте (как уже сказал volvo) есть требование прекращения компиляции после последней точки. Оставим это на совести разработчиков..
Aisha
volvo
спасибо за идею good.gif

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

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

Всем-всем, кто проявил интерес, большущее спасибо smile.gif
Lapp
Цитата(Aisha @ 14.10.2009 15:19) *
volvo
спасибо за идею good.gif
volvo +1
Думаю, она это имела в виду)).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.