Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.009 c
14-97851
Andrey02
2003-06-12 19:31
2003.06.30
путь к Мои Документы


1-97734
Evil_forever
2003-06-17 19:15
2003.06.30
отсчёт Time


14-97878
Alien
2003-06-06 19:55
2003.06.30
Глюк с BorderStyle


14-97889
Silentium!
2003-06-12 14:01
2003.06.30
SystemTray


3-97502
Akademik
2003-06-05 12:51
2003.06.30
Нет каскадного удаления в таблицах Paradox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский