Текущий архив: 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.53 MB
Время: 0.007 c