Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.
Закрыт 7 лет назад .
Написать программу на PHP, которая будет выводить свой исходный код, будучи запущенной через веб-сервер. Функции highlight_string , highlight_file , show_source и константу __FILE__ использовать запрещено! Примечание: программа НЕ должна быть квайном. Как бы вы решали такое задание?
В первую очередь интересует именно идея (впрочем, от кода тоже не откажусь :))
Источник: ru.stackoverflow.com
Создаем свой ЯЗЫК ПРОГРАММИРОВАНИЯ. Лексер, Парсер, Абстрактное синтаксическое дерево (AST)
программа которая выводит свой код
Куайн (квайн, англ. quine) — компьютерная программа, которая выводит свой код на Pascal
Вот посидел подумал. Сделал свою версию Квайна
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Куайн, квайн (англ. quine)
доброго времени суток! узнал что существует такая вещь как куайн, прочитал статью на вики.
Программа которая печатает свой код
Помогите разобраться с «printf» и «char* c» в этой программе, пожалуйста. #include int.
Программа, которая выводит на экран код двухбайтового целого числа
Программа, которая выводит на экран код двухбайтового целого числа.
Программа, которая выводит на экран код однобайтового целого числа
Программа, которая выводит на экран код однобайтового целого числа.
А что эту фигню писать-то? Все здешние программисты, полагаю, умеют писать квайны, но предпочитают не заниматься написанием бесполезных программ. Но это не точно.
Чтобы не быть голословным, Вот Вам мой квайн. Только что написал на скорую руку, для кодировки CP866:
Я запустил твою программу в паскаль онлайн. https://rextester.com/l/pascal_online_compiler
выдает ошибку
Error(s):
Process killed, because it ran longer than 10 seconds. Is your code waiting for keyboard input which is not supplied?
None 4.623152 3976
const s: array[1..9] of string = (
‘const s: array[1..9] of string = (‘,
‘var i: integer;’,
‘begin’,
‘writeln(s[1]);’,
‘for i := 1 to 8 do writeln(#39, s[i], #39#44);’,
‘writeln(#39, s[9], #39#41#59);’,
‘for i := 2 to 9 do writeln(s[i]);’,
‘readln’,
‘end.’
Добавлено через 7 минут
Не выдает код первоначальной программы.
Кстати, по ссылке, достаточно нажать на «+» рядом с Show Input, и ввести пустую строку в открывшемся поле ввода (просто нажать Enter), чтобы программа сразу посчитала это, как нажатие Enter-а пользователем (как реакцию на ReadLn), и завершилась корректно, а не с ошибкой как выше показано. Тогда и там все заработает.
ДМ 2 курс, вычислимость — как написать quine — программу, которая выводит свой исходный код, и зачем
thutq, ты даже не понял, почему ты не смог запустить вариант Cyborg Drone на своём онлайн-компиляторе?
ладно. специально для тебя я поправил его код так, чтобы программа не останавливалась в конце, чтобы ты спокойно мог запустить его код в онлайн компиляторе https://rextester.com/l/pascal_online_compiler
Добавлено через 44 секунды
Называется найдите отличия
там код не совпадает
Добавлено через 1 минуту
Если не заметили не выводит первую стоку с названием программы
А где вы в #3 или #12 увидели «первую стоку с названием программы»?
Не надо здесь спорить с собственными фантазиями, это контрпродуктивно.
Добавлено через 2 минуты
Ээх, а так все хорошо начиналось, «подумал», «свою версию», «квайн». Тьфу.
сам придумал, да? и теперь эта строчка не совпадает с тем, что выводит программа? вот же какая проблема!
Что же теперь с этой проблемой делать, прямо ума не приложу!
ладно. извини, что я пытался помешать тебе жить в своём выдуманном мире с розовыми пони и программами, печатающими свой код, но я исправлюсь, и больше этого не повторится.
Вот из учебника взял из Букваря где учат программы писать—
Добавлено через 6 минут
Не я придумал в Учебнике так написано
thutq,
дочитайте учебник до фразы «заголовок program является необязательным». Если в этом учебнике нет такой фразы, возьмите актуальный учебник.
Впрочем, делайте что хотите, все уже давно всё поняли.
Добавлено через 22 минуты
Пользуясь тем, что тема находится в разделе Free Pascal, было бы ошибкой не обратиться к его официальной документации:
https://www.freepascal.org/doc. se110.html
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Компьютерная программа, которая позволяет
Решите задачу, если можно с обьяснениями http://savepic.ru/4298124m.jpg Будьте любезны.
Вывести код программы или Квайн
В какой то книге по С# видел очень простой пример реализации этого. То что предлагает Wiki не то.
Почему не выводит отсортированную матрицу по сумме эл-тов строк(свой код есть)
Условие задачи такое: расположить строки матрицы в порядке убывания суммы модулей.
Почему не выводит отсортированную матрицу по сумме эл-тов строк(свой код есть)
Условие задачи такое: расположить строки матрицы в порядке убывания суммы модулей.
Куайны (бесполезная программа в программе)
Куайн (от анг. quine) — программа, результатом работы которой является собственный исходный код. Сразу оговоримся: программы, которые обращаются к файлам или производят считывание с клавиатуры куайнами не являются. Более серьезное ограничение: программы, которые могут напрямую получить доступ к своему исходному коду (средствами языка), также не являются куайнами.
А существуют ли они?
Несмотря на простую формулировку задания, потратив немного времени на ее решение, возникает вопрос: существуют ли вообще такие программы? Ответ: Да!
Более того, куайн существует в любом языке, способном выводить произвольную вычисляемую строку! Впервые эта идея была описана Полом Братли и Жаном Милло. А первым куайном считается программа, написанная на языке Atlas Autocode Хэмишем Дюаром.
А на современных языках?
JavaScript:
Pascal:
Итак. Мы убедились, что такие программы существуют, а теперь немного теории о том, как их сделать.
Грабли
Интуитивно понятно, что нужно вывести значение переменной, в которой хранится частичный код программы. Почему частичный? Потому что само присваивание переменной тоже должно оказаться в значении переменной. Иными словами, значение переменной должно копировать само себя, из-за чего возникает бесконечная рекурсия. Неприятный момент.
Чтобы исправить положение, вообще не будем вносить в переменную сам факт присваивания. То есть:
После, во время вывода подставим значение с в её же определение.
Хорошо, но возникает проблема с кавычками. Языки, в которых определены одинарные и двойные кавычки, справляются с проблемой хорошо (мы говорим о том, что можно создать переменную q=» ‘ «, а потом вывести ее значение в ее определение), но что делать, например, с языком С? Экранирование, очевидно, не поможет, так как его тоже надо экранировать… В этом случае, можно задать кавычки кодом символа и вывести его.
Теперь остается проблема вставки строки в выходную строку с. Здесь вспомним про printf и всю его мощь.
Чаще всего методы взятия подстроки умеют брать её до конца:
Практика
Куайны (бесполезная программа в программе)
Куайн (от анг. quine) — программа, результатом работы которой является собственный исходный код. Сразу оговоримся: программы, которые обращаются к файлам или производят считывание с клавиатуры куайнами не являются. Более серьезное ограничение: программы, которые могут напрямую получить доступ к своему исходному коду (средствами языка), также не являются куайнами.
Пример на Бейсике:
10 LIST
Пример на Форте:
SOURCE TYPE
А существуют ли они?
Несмотря на простую формулировку задания, потратив немного времени на ее решение, возникает вопрос: существуют ли вообще такие программы? Ответ: Да!
Более того, куайн существует в любом языке, способном выводить произвольную вычисляемую строку! Впервые эта идея была описана Полом Братли и Жаном Милло. А первым куайном считается программа, написанная на языке Atlas Autocode Хэмишем Дюаром.
А на современных языках?
JavaScript:
function f()f();
Pascal:
program autobiografija (output); var c : array[1..14] of string[60]; i : integer; begin c[ 1]:=’program autobiografija (output); ‘; c[ 2]:=’ var c : array[1..14] of string[60]; ‘; c[ 3]:=’ i : integer; ‘; c[ 4]:=’begin ‘; c[ 5]:=’for i := 1 to 4 do writeln(c[i]); ‘; c[ 6]:=’for i := 1 to 13 do writeln(c[14,1],c[14,2],i:2,c[14,5], ‘; c[ 7]:=’ c[14,6],c[14,7],c[14,8],c[i],c[14,8],c[14,9]); ‘; c[ 8]:=’for i := 1 to 8 do write(c[14,i]); ‘; c[ 9]:=’for i := 1 to 8 do write(c[14,i]); ‘; c[10]:=’for i := 8 to 60 do write(c[14,i]); ‘; c[11]:=’writeln(c[14,8],c[14,9]); ‘; c[12]:=’for i := 5 to 13 do writeln(c[i]); ‘; c[13]:=’end. ‘; c[14]:=’c[14]:=»; ‘; for i := 1 to 4 do writeln(c[i]); for i := 1 to 13 do writeln(c[14,1],c[14,2],i:2,c[14,5], c[14,6],c[14,7],c[14,8],c[i],c[14,8],c[14,9]); for i := 1 to 8 do write(c[14,i]); for i := 1 to 8 do write(c[14,i]); for i := 8 to 60 do write(c[14,i]); writeln(c[14,8],c[14,9]); for i := 5 to 13 do writeln(c[i]); end.
Итак. Мы убедились, что такие программы существуют, а теперь немного теории о том, как их сделать.
Грабли
Интуитивно понятно, что нужно вывести значение переменной, в которой хранится частичный код программы. Почему частичный? Потому что само присваивание переменной тоже должно оказаться в значении переменной. Иными словами, значение переменной должно копировать само себя, из-за чего возникает бесконечная рекурсия. Неприятный момент.
Чтобы исправить положение, вообще не будем вносить в переменную сам факт присваивания. То есть:
char c[]=»char c[]=;»;
После, во время вывода подставим значение с в её же определение.
Хорошо, но возникает проблема с кавычками. Языки, в которых определены одинарные и двойные кавычки, справляются с проблемой хорошо (мы говорим о том, что можно создать переменную q=» ‘ «, а потом вывести ее значение в ее определение), но что делать, например, с языком С? Экранирование, очевидно, не поможет, так как его тоже надо экранировать… В этом случае, можно задать кавычки кодом символа и вывести его.
Теперь остается проблема вставки строки в выходную строку с. Здесь вспомним про printf и всю его мощь.
printf(«%.2s», с+1);
Чаще всего методы взятия подстроки умеют брать её до конца:
printf(«%s», с+1);