Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.30;
Скачать: CL | DM;

Вниз

Программа, выводящая свой исходнй текст   Найти похожие ветки 

 
Fly Iron Man   (2003-06-11 20:33) [0]

Приведите, пожалуйста, пример

1) на Pascal (dos)

2) если это возможно на Delphi


 
jack128 ©   (2003-06-11 20:37) [1]

это насущная необходимость или задание форумцем?
если первое поищи на rsdn, там несколько раз проскальзывала эта тема...


 
Fly Iron Man   (2003-06-11 20:55) [2]

>это насущная необходимость

просто интересно. Слышал, что это возможно

>или задание форумцем

простите ?

>если первое поищи на rsdn

что такое rsdn и где поискать ?


 
Archvile   (2003-06-11 21:02) [3]

включать надо заранее в ресурсы или куда..
и по параметру в командной строке выдавать



 
Omar2002 ©   (2003-06-11 21:05) [4]

Если на Delphi, то проще простого. Таскаешь с программой все файлы *.pas :))))) Да и в паскале так же. Можно даже этот текст закодить ради прикола(зашифровать и пихнуть в какой-нить файл)

:)


 
Fly Iron Man   (2003-06-11 21:30) [5]

включать надо заранее в ресурсы или куда..
и по параметру в командной строке выдавать


Если на Delphi, то проще простого. Таскаешь с программой все файлы *.pas :))))) Да и в паскале так же. Можно даже этот текст закодить ради прикола(зашифровать и пихнуть в какой-нить файл)


Извините, но если не знаете - не отвечайте, пожалуйста.

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


 
Omar2002 ©   (2003-06-11 22:25) [6]


> Fly Iron Man (11.06.03 21:30)

Ну а вчем проблема-то. Надо текст программы, возьми исходник.(Это я про Delphi).


 
p77 ©   (2003-06-11 22:42) [7]

Уже было когда-то в этом форуме.
Привожу здесь:

program autoprint;
var i:byte;c:array[1..11]of string;
begin
c[1]:="program autoprint;";
c[2]:="var i:byte;c:array[1..13]of string;";
c[3]:="begin";
c[4]:=" for i:=1 to 3 do writeln(c[i]);";
c[5]:=" for i:=1 to 10 do writeln(c[11,8],c[11,8],c[11,1],c[11,2],i,";
c[6]:=" copy(c[11],3,4),c[i],c[11,6],c[11,7]);";
c[7]:=" writeln(c[11,8],c[11,8],c[11,1],c[11,2],11,copy(c[11],3,4),";
c[8]:=" copy(c[11],1,6),copy(c[11],6,3),c[11,6],c[11,7]);";
c[9]:=" for i:=4 to 10 do writeln(c[i]);readln;";
c[10]:="end.";
c[11]:="c[]:=""; ";
for i:=1 to 3 do writeln(c[i]);
for i:=1 to 10 do writeln(c[11,8],c[11,8],c[11,1],c[11,2],i,
copy(c[11],3,4),c[i],c[11,6],c[11,7]);
writeln(c[11,8],c[11,8],c[11,1],c[11,2],11,copy(c[11],3,4),
copy(c[11],1,6),copy(c[11],6,3),c[11,6],c[11,7]);
for i:=4 to 10 do writeln(c[i]);readln;
end.
Это на Паскале.
А вот на Дельфи:

{$APPTYPE CONSOLE}
uses SysUtils;
var s:string;c:char;i:integer;
begin
s:="{$APPTYPE CONSOLE}%uses SysUtils;%var s:string;c:char;i:integer;%begin%s:=;%for i:=1 to length(s) do begin%c:=s[i];if c<>#37 then write(c) else writeln;%if
i=74 then writeln(#39+s+#39) end;%readln;%end.";
for i:=1 to length(s) do begin
c:=s[i];if c<>#37 then write(c) else writeln;
if i=74 then write(#39+s+#39) end;
readln;
end.

Авторство не мое.
Только не говорите потом, что у меня в голове тараканы:)!


 
Omar2002 ©   (2003-06-11 22:53) [8]


> p77 © (11.06.03 22:42)

У тебя что в голове тараканы? :))


 
Fly Iron Man   (2003-06-11 23:16) [9]

Omar2002, если ты не понял сути проблемы..... попробуй понять еще раз :-)


 
Omar2002 ©   (2003-06-11 23:24) [10]

Да, я не понял сути. Что надо-то, чтобы прога писала свой исходник?


 
p77 ©   (2003-06-12 11:37) [11]

Задача в самом деле нетривиальная. Ну подумайте сами, попробуйте пропустить через компьютер то, что я выше привел и посмотрите на результаты. Работает, как пистолет:). Говорят, это легко реализуемо на Бейсике (не знаю, не пробовал). А насчет тараканов в башке - я уже говорил, что эти исходники не мои, а взято из архивов этого замечательного форума.
С уважением,


 
Fly Iron Man   (2003-06-12 13:46) [12]

Omar2002, вот попробуй напиши программу, которая при компиляции создает exe"шник, который при запуске выдает на экран исходный текст программы своей. И чтобы было символ в символ. Ты, думаю, этого не сможешь, несмотря на верх.
А если сможешь - считай себя очень умным человеком...


 
Кот Бегемот ©   (2003-06-12 14:37) [13]

А не послать бы нам Летающего Железного Человека на@#$ ???
Что бы не %бал мозги ни себе ни нам ?


 
Fly Iron Man   (2003-06-12 15:40) [14]

Кот Бегемот, а ты что ? Хитровы@#анный ?

Такая задачка иногда попадается как задание при приеме на работу очень хороших программистов. Достаточно стандартная. И достаточно сложная, между прочим, если вы в состоянии вообще разобраться с ней. А уж чтобы самому догадаться...


 
Ihor Osov'yak ©   (2003-06-12 18:27) [15]

> попадается как задание при приеме на работу очень

Мой совет - если дадут Вам такое задание сделать на компилирующей системе при приеме на работу - уходите оттуда. Нечего там делать. Ибо люди не совсем понимают, что они говорят.


 
Fly Iron Man   (2003-06-12 18:38) [16]

Ihor Osov"yak, объясни свое мнение. Я не понял


 
Sandman25 ©   (2003-06-12 18:41) [17]

Ihor Osov"yak © (12.06.03 18:27)

Я подумал о том же. Если только эта контора не пишет на LISP программы из области ИИ.


 
Тих   (2003-06-12 19:00) [18]

C RSDN, но на ++

// self.cpp : Defines the entry point for the console application.
//

#include "StdAfx.h"
#include <stdio.h>


char P[] = {
10,35,105,110,99,108,117,100,101,32,60,115,116,100,105,111,46,104,62,10,
10,99,104,97,114,32,80,91,93,32,61,32,123,10,10,125,59,10,10,118,111,
105,100,32,109,97,105,110,40,41,10,123,10,32,32,105,110,116,32,105,44,
32,106,59,10,32,32,102,111,114,32,40,105,32,61,32,48,59,32,105,32,
60,32,51,56,59,32,105,43,43,41,32,112,114,105,110,116,102,40,34,37,
99,34,44,32,80,91,105,93,41,59,10,32,32,102,111,114,32,40,106,32,
61,32,48,59,32,106,32,60,32,50,57,48,59,32,106,43,43,41,10,32,
32,32,32,105,102,32,40,40,106,43,49,41,32,37,32,50,48,41,32,112,
114,105,110,116,102,40,34,37,105,44,34,44,32,80,91,106,93,41,59,10,
32,32,32,32,101,108,115,101,32,112,114,105,110,116,102,40,34,37,105,44,
92,110,34,44,32,80,91,106,93,41,59,10,32,32,112,114,105,110,116,102,
40,34,37,105,34,44,32,80,91,106,93,41,59,10,32,32,102,111,114,32,
40,59,32,105,32,60,32,50,57,49,59,32,105,43,43,41,32,112,114,105,
110,116,102,40,34,37,99,34,44,32,80,91,105,93,41,59,10,125,10
};

void main()
{
int i, j;
for (i = 0; i < 34; i++) printf("%c", P[i]);
for (j = 0; j < 279; j++)
if ((j+1) % 20) printf("%i,", P[j]);
else printf("%i,\n", P[j]);
printf("%i", P[j]);
for (; i < 280; i++) printf("%c", P[i]);
}


 
neuro ©   (2003-06-12 19:08) [19]

2Тих:
Бред и чушь. Вы вообще понимаете задачу? Объясняю: прога должна БАЙТ-В-БАЙТ саму себя воспроизвести. И все эти ваши глобальные массивы тоже.
На RSDN решение есть. Не то, которые вы привели.




 
Fantasist.   (2003-06-12 19:23) [20]


> neuro © (12.06.03 19:08)


А ты, прежде чем орать, разобрался бы, или запустил бы как минимум. Это тоже правильное решение.


 
Real ©   (2003-06-12 19:23) [21]

Автор этой ветки - просто взял и переиначил старую тему новичков "А как получить исходник из ЕХЕ-файла?" Где тебе такую задачу предлагали? Що за тупость? Зачем, спрашиватся компилировать?


 
Ihor Osov'yak ©   (2003-06-12 19:26) [22]

2 Fly Iron Man (12.06.03 18:38)

Во первых, как эту задачу можно решить. Вариант интерпретаторов не рассматриваем - условие задачи. Понятно, не вследствие работы декомпилятора. То есть возможен только один вариант - хранить исходный текст вместе с exe. Хотя бы как ресурс или просто присоединенным к exe файлу. Получение такого пирога не представляет особых проблем.

Кстати, вариант пирога не противоречит условиям задачи.

Теперь почему такую контору нужно обходить. Хотя бы потому, что они ничего более умного и практического в качестве входного теста не смогла предложить. Что свидетельствует о низкой квалификации тестировщиков и их увлеченностью всякой ерундой. А если тестировщик с низкой квалификацией не сознает уровень своей квалификации - то нечего дело с ними иметь. А если осознает, но все равно "рисуется" - тем более.



 
Fly Iron Man   (2003-06-12 19:41) [23]

То есть возможен только один вариант - хранить исходный текст вместе с exe. Хотя бы как ресурс или просто присоединенным к exe файлу

Вы осознаете саму суть проблемы ? Мне кажется нет.


Нужно написать программу и откомпилировать ее. И чтобы откомпилированный exe"шник выдавал на экран текст исходной программы. Понятное дело, что вместе с программой можно поставлять pas файл, и вся задача программы - вывести на экран текст этого файла ! Но это не то ! Никаких присоединенных ресурсов !

Как обычно новички делаю - "О ! Это же очень просто!"

program Print;
BEGIN
writeln("program Print");
writeln("BEGIN");
writeln("writeln.......


и вот тут они озадачиваются, так как не получается...


 
Real ©   (2003-06-12 20:16) [24]

Да нет в откомпиленной программе исходного кода! Это ты можешь понять? Нету его там, нету! Пока ты его туда не включишь, ничего не выйдет! Ты бы еще написал какую-нибудь тупость типа: "Чтобы печатала свой исходник.... вместе с комментариями :)"


 
Ihor Osov'yak ©   (2003-06-12 20:35) [25]

Ладно, по поводу мнения о собеседовании - то я его не изменил.

Ибо проблема практического значения не имеет. Ну, для какой-то академической работы - другое дело..

Зы - посколько я практик, пошел в гуглю - пять минут поиска с тестированием -

program Intros(input,output);
const n0=1; n1=5; n2=8; n=13;
var i: integer; A: array [1..n] of string;
begin
A[1]:="""";
A[2]:=" A[";
A[3]:="]:=";
A[4]:=";";
A[5]:="program Intros(input,output);";
A[6]:="const n0=1; n1=5; n2=8; n=13;";
A[7]:="var i: integer; A: array [1..n] of string;";
A[8]:="begin";
A[9]:=" for i:=n1 to n2 do writeln(A[i]);";
A[10]:=" writeln(A[2],n0,A[3],A[1],A[1],A[1],A[1],A[4]);";
A[11]:=" for i:=n0+1 to n do writeln(A[2],i,A[3],A[1],A[i],A[1],A[4]);";
A[12]:=" for i:=n2+1 to n do writeln(A[i]);";
A[13]:="end.";
for i:=n1 to n2 do writeln(A[i]);
writeln(A[2],n0,A[3],A[1],A[1],A[1],A[1],A[4]);
for i:=n0+1 to n do writeln(A[2],i,A[3],A[1],A[i],A[1],A[4]);
for i:=n2+1 to n do writeln(A[i]);
end.



Зы - не забыть поставить в настройках среды генерить консольное..

Зы2 - с нуля такую задачу невозможно решить за несколько часов.
Ну, разве что вы будущий нобелиевский лауреат..



 
Ihor Osov'yak ©   (2003-06-12 20:39) [26]

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

Зы - думать редко приходиться, все работа и работа..


 
Ihor Osov'yak ©   (2003-06-12 20:41) [27]

Зы - а по поводу "Никаких присоединенных ресурсов !" - это нужно в условии говорить, ибо получается - морочим занятым людям голову (ну мне, как минимум)


 
Ihor Osov'yak ©   (2003-06-12 20:42) [28]

Источник информации - http://groups.google.com.ua/groups?hl=uk&lr=&ie=UTF-8&oe=UTF-8&th=cb8a3670cb0c33c7&seekm=887203582%40p5.f1.n5064.z2.ftn#link31

Ладно, пока.. Я тут не скоро уже появлюсь..


 
trotski   (2003-06-12 21:02) [29]

Данная проблема рассматривалась в книге 100 задач на Паскаль каких-то эстонских авторов. К сожалению найти пока не могу. А задача в том, чтобы распечатать прогу, включая операторы печати самой себя, а то многие про это забывают и просто пишут writeln("begin"). В конечном коде и это writeln должно быть


 
nikkie ©   (2003-06-12 21:23) [30]

задача - просто головоломка. кто любит головоломки решать - пусть решает. с точки зрения практического применения или обучения программированию - бесполезная вещь. если кто-то при приеме на работу такие тесты дает, то ему лечиться надо. Ihor Osov"yak © (12.06.03 19:26) все хорошо объяснил.

ЗЫ недавно рассказали шахматную головоломку: из начальной позиции первый ход белых e4, на пятом ходу конь берет ладью и ставит мат. задача - восстановить всю партию. сам я не любитель таких штук, но зацепили - несколько часов я на это угрохал. безрезультатно.

ЗЗЫ разумеется уровень игры в шахматы этим проверить никак нельзя.


 
Omar2002 ©   (2003-06-12 21:26) [31]


> Fly Iron Man (12.06.03 13:46)

Ну это я даже не представляю как делать... Ну если такая задача появится, то придется по-мозговать немного :)


 
Fly Iron Man   (2003-06-12 22:01) [32]

Да нет в откомпиленной программе исходного кода! Это ты можешь понять? Нету его там, нету! Пока ты его туда не включишь, ничего не выйдет

Уважаемый Real ! Еще раз прошу вас вникнуть в суть задачи, судя по всему вы так и не поняли. А решение уже неоднократно приведено в этой ветке


Ну это я даже не представляю как делать...

Ну опять же тут неоднократно уже привели примеры - как это делать. Так что можешь мозговать, что там написано


Я согласен, что задача практически бесполезна.

Но покажите мне тест, где есть практический смысл ? Таких тестов очень мало, большинство просто проверяют осведомленность автора. Мол, если он знает и это, то наверняка то он уж точно знает


 
Sandman25 ©   (2003-06-13 11:03) [33]

>Но покажите мне тест, где есть практический смысл ? Таких тестов очень мало, большинство просто проверяют осведомленность автора. Мол, если он знает и это, то наверняка то он уж точно знает

Какую осведомленность проверяет данный тест?
Кроме массивов, for и writeln ничего и не требуется.
Мне кажется, тут проверяется способность генерировать необычные идеи и находить сложные алгоритмы.



Страницы: 1 вся ветка

Текущий архив: 2003.06.30;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.018 c
14-97805
Separator
2003-06-11 07:45
2003.06.30
Сравнение record на asm


3-97473
alex_bredin
2003-06-04 16:32
2003.06.30
Значение переменной в QReport


3-97488
Ravshan
2003-06-05 10:36
2003.06.30
Paradox без BDE


14-97807
GROL
2003-06-10 23:29
2003.06.30
Windows CE


9-97467
Nevel
2003-01-16 05:41
2003.06.30
Людт помогите - НУЖНА СРОЧНО ИГРА