Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Вывод текста программы в процессе её исполнения... Ваши мнения как это реализовать... 
:(
    Опции темы
val
  Дата 21.10.2003, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Уважаемая публика...
Странная задачка мне вот попалась... Каков должен быть алгоритм программы, которая выводит текст самой себя? В Бейсике есть такой оператор, кажется, LIST, он как раз решает эту задачку... А вот как он работает не понятно...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
maxim1000
Дата 21.10.2003, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



а в чем проблема?
при исполнении программы на Бейсике файл уже загружен в память
и это - не исполняемый файл, а файл с исходниками (ведь он - интерпретатор)
команда LIST просто читает строки из соответствующей области памяти...


--------------------
qqq
PM WWW   Вверх
maxim1000
Дата 21.10.2003, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата
Странная задачка мне вот попалась... Каков должен быть алгоритм программы, которая выводит текст самой себя?

не знаю как нормальные люди это делают, но я просто делал дополнительный массив, который содержал строки программы, а потом выводил их дважды: как элементы массива и как строки программы...


--------------------
qqq
PM WWW   Вверх
val
Дата 21.10.2003, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Цитата
просто делал дополнительный массив, который содержал строки программы

Это решение подойдет, если ты запрограммировал копирование строк прорграммы из памяти в этот массив. И еще... Если, к примеру, если программа написана на С, то выводиться должна эта же С-программа... Насколько я понимаю, во время выполнения в памяти лежит ассем. вариант программы...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
maxim1000
Дата 21.10.2003, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



я специально сделал два ответа, чтобы было ясно, что это - ответы на два разных вопроса
1-й ответ - на вопрос о команде LIST
2-й ответ - решение описанной задачки на компиляторах...
Цитата
Если, к примеру, если программа написана на С, то выводиться должна эта же С-программа...

а в этот массив нужно ручками прописать строки твоей программы
т.е. в самих исходниках программы уже будет дублирование (т.к. строки будут в main и в массиве)
а на экране дублирование нуэно будет сделать с помощью вывода содержимого массива дважды.

Это сообщение отредактировал(а) maxim1000 - 21.10.2003, 12:38


--------------------
qqq
PM WWW   Вверх
val
Дата 21.10.2003, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Цитата
этот массив нужно ручками прописать строки твоей программы

Это решение не подходит по причине изботочности в коде данной программы.
Были более интересные решения такие как инклюдить тект программы в стоку, но... не то...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
val
Дата 21.10.2003, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Вроде бы решали эту задачку с помощью макросов, но как...?!


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
maxim1000
Дата 21.10.2003, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата
Это решение не подходит по причине изботочности в коде данной программы.

это в каком смысле избыточность?
для компилятора "строковая константа" и строка программы - никак несвязанные вещи
Цитата
Были более интересные решения такие как инклюдить тект программы в стоку, но... не то...

вообще-то это "но... не то..." хорошо бы формализовать, т.е. наложить какие-то ограничения
а то ведь, если без ограничений, то можно просто открыть файл с исходником и вывести его на экран


--------------------
qqq
PM WWW   Вверх
stab
Дата 21.10.2003, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Выводит без сохранения табуляции, но это можно поправить, просто лень было. Писалось еще в универе на TP smile.gif

Код

{self printing by cully, 1998}
uses crt;

var
  s1, s2: array[1..128] of String[64];
  p, j: Integer;

function QuotedStr(s: String): String;
var
 i: Integer;
begin
 for i := Length(s) downto 1 do
   if s[i] = '''' then Insert('''', s, i);
 s := '''' + s + '''';
 QuotedStr := s;
end;

procedure WriteS(s: String);
begin
    s1[p] := s;
    s2[p] := 'WriteS(' + QuotedStr(s) + ');';
    Inc(p);
end;

begin
    ClrScr;
    p := 1;
    WriteS('{self printing by cully, 1998}');
    WriteS('uses crt;');
    WriteS('var');
    WriteS('s1, s2: array[1..128] of String[64];');
    WriteS('p, j: Integer;');
    WriteS('function QuotedStr(s: String): String;');
    WriteS('var');
    WriteS('i: Integer;');
    WriteS('begin');
    WriteS('for i := Length(s) downto 1 do');
    WriteS('if s[i] = '''''''' then Insert('''''''', s, i);');
    WriteS('s := '''''''' + s + '''''''';');
    WriteS('QuotedStr := s;');
    WriteS('end;');
    WriteS('procedure WriteS(s: String);');
    WriteS('begin');
    WriteS('s1[p] := s;');
    WriteS('s2[p] := ''WriteS('' + QuotedStr(s) + '');'';');
    WriteS('Inc(p);');
    WriteS('end;');
    WriteS('begin');
    WriteS('ClrScr;');
    WriteS('p := 1;');
    WriteS('for j := 1 to 23 do WriteLn(s1[j]); ReadLn;');
    WriteS('for j := 1 to 27 do WriteLn(s2[j]); ReadLn;');
    WriteS('for j := 24 to 27 do WriteLn(s1[j]); ReadLn;');
    WriteS('end.');
    for j := 1 to 23 do WriteLn(s1[j]); ReadLn;
    for j := 1 to 27 do WriteLn(s2[j]); ReadLn;
    for j := 24 to 27 do WriteLn(s1[j]); ReadLn;
end.



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
setq
Дата 21.10.2003, 22:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











http://home.planet.nl/~faase009/Signindex.html

насколько я понял, первые N программ работают по принципу "избыточности", изложенному выше. но я не углублялся особенно. может там ещё чего есть другое...

искренне ваш, qset
  Вверх
val
Дата 22.10.2003, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Понятно... Тема исчерпана...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
val
Дата 22.10.2003, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Всем спасибо...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.