Форум: "Потрепаться";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизРаспечатка собственного кода программы Найти похожие ветки
← →
Aristarh © (2004-03-30 22:56) [0]Можно ли сделать так, чтобы программа распечатывала свой исходный код.
Естественно, доступа к исходникам быть не должно, один экзешник.
← →
SPeller © (2004-03-30 22:59) [1]Тексты зашифруй и в ресурс. Можешь воспользоваться методикой Dmitry O., зашифровать текст в БМП и вставить в прогу. Потом на лету расшифровать и выдать на печать :-))
← →
Aristarh © (2004-03-30 23:02) [2]>SPeller © (30.03.04 22:59) [1]
Это задание на экзамен в одном учебном заведении.
Экзамен по с++ (консоль)
← →
Gero © (2004-03-30 23:11) [3]program Kursovaya;
{$APPTYPE CONSOLE}
Var
q : Char ;
i : Integer ;
s : Array [ 1 .. 17 ] Of String ;
begin
q := """" ;
s [ 1 ] := " ;" ;
s [ 2 ] := " s [ " ;
s [ 3 ] := " ] := " ;
s [ 4 ] := " q := " ;
s [ 5 ] := "Var" ;
s [ 6 ] := " q : Char ;" ;
s [ 7 ] := " i : Integer ;" ;
s [ 8 ] := " s : Array [ 1 .. 17 ] Of String ;" ;
s [ 9 ] := "Begin" ;
s [ 10 ] := " For i := 5 To 9 Do" ;
s [ 11 ] := " WriteLn ( s [ i ] ) ;" ;
s [ 12 ] := " WriteLn ( s [ 4 ] , q , q , q , q , s [ 1 ] ) ;" ;
s [ 13 ] := " For i := 1 To 17 Do" ;
s [ 14 ] := " WriteLn ( s [2] , i , s [3] , q , s [i] , q , s [1] ) ;" ;
s [ 15 ] := " For i := 10 To 17 Do" ;
s [ 16 ] := " WriteLn ( s [ i ] )" ;
s [ 17 ] := "End ." ;
For i := 5 To 9 Do
WriteLn ( s [ i ] ) ;
WriteLn ( s [ 4 ] , q , q , q , q , s [ 1 ] ) ;
For i := 1 To 17 Do
WriteLn ( s [2] , i , s [3] , q , s [i] , q , s [1] ) ;
For i := 10 To 17 Do
WriteLn ( s [ i ] );
Readln;
end.
← →
SPeller © (2004-03-30 23:11) [4]Хм... В любом случае надо как-то хранить их внутри бинарника. С++ компиляторы максимум ресурсы позволят включить, поэтому остаётся либо через ресурсы, либо никак. Можно, конечно, извратиться и дизассемблированный код выдать, но, полагаю, что это будет совсем не то чего ждут.
← →
SPeller © (2004-03-30 23:12) [5]ЗЫ: Кончено, если прога посолиднее, чем та что привел Gero © (30.03.04 23:11) [3]
← →
syte_ser78 © (2004-03-31 14:25) [6]
> [3] Gero © (30.03.04 23:11)
> program Kursovaya;
>
> {$APPTYPE CONSOLE}
Меня тоже этот вопрос интересовал. Твой исходник не выведет
s [ 1 ] := " ;" ;
s [ 2 ] := " s [ "
и т.д.
← →
Verg © (2004-03-31 15:05) [7]Так на С или на PASCAL?
← →
Rouse_ © (2004-03-31 15:18) [8]Удалено модератором
← →
Verg © (2004-03-31 15:22) [9]
#include <stdlib.h>
char* program[] = {
"#include <stdlib.h>",
"char* program[] = {",
" NULL};",
"printquotas(char *s) {",
" printf(\"\\t\\\"\");",
" while(*s){",
" if(*s == "\"") printf(\"\\\\\\\"\");",
" else if(*s == "\\\\") printf(\"\\\\\\\\\");",
" else putchar(*s);",
" ++s;",
" }",
" printf(\"\\\",\\n\");",
"}",
"int main(){",
" int i;",
" puts(program[0]);",
" puts(program[1]);",
" for(i=0; program[i]; i++) printquotas(program[i]);",
" for(i=2; program[i]; i++) puts(program[i]);",
" getchar();",
"}",
NULL};
printquotas(char *s) {
printf("\t\"");
while(*s){
if(*s == """) printf("\\\"");
else if(*s == "\\") printf("\\\\");
else putchar(*s);
++s;
}
printf("\",\n");
}
int main(){
int i;
puts(program[0]);
puts(program[1]);
for(i=0; program[i]; i++) printquotas(program[i]);
for(i=2; program[i]; i++) puts(program[i]);
getchar();
}
Ага, значит проксик глючит - WinGate
← →
KSergey © (2004-03-31 15:23) [10]> [2] Aristarh © (30.03.04 23:02)
> Это задание на экзамен в одном учебном заведении.
Да уж... Это же репу сломишь на таком экзамене...
Сделать конечно можно, по-моему такие "забавы прогеров" ходят годов с... (как компы появились).
В инете эпизодически всптывают воспоминания "как это было" или вновь наваятые примеры на всех, наверное, языках...
Вот только для экзамена... А времени сколько?
← →
Aristarh © (2004-03-31 16:54) [11]>KSergey © (31.03.04 15:23) [10]
>А времени сколько?
180 минут грязного времени.
За вычетом времени на организационные моменты и проверку результатов.
← →
SPeller © (2004-03-31 16:58) [12]Тогда уж лучше пишешь за пару минут утилитку, которая в нужных файлах в начале и в конце каждой строки ставит двойный кавычки и заводит некую строковыю переменную, содержащую всю эту строку, и подключаешь через инклуд. Пишешь нужный код, который потом должен появиться на экране, запускаешь утилитку, компилишь. И всё.
← →
ДедушкаКо © (2004-03-31 17:12) [13]вроде от Кнута пошло
← →
Verg © (2004-03-31 17:15) [14]
> ДедушкаКо © (31.03.04 17:12) [13]
> вроде от Кнута пошло
ДА кто его читает нынче? Ты оглянись, Деда!
Достоевского, понимаешь, к черту, а тут "какой-то" Кнут...
← →
Piter © (2004-03-31 19:53) [15]SPeller (30.03.04 23:11) [4]
В любом случае надо как-то хранить их внутри бинарника. С++ компиляторы максимум ресурсы позволят включить, поэтому остаётся либо через ресурсы, либо никак. Можно, конечно, извратиться и дизассемблированный код выдать, но, полагаю, что это будет совсем не то чего ждут.
Как же ты не понимаешь... программа должна вывести саму себя!!! Не вывести что-то хранящееся где-то, а именно операторами вывода вывести программу на экран, понятно?
Это сложная задача... с первого взгляда создается ощущение, что это невозможно, пишешь:
PROGRAM Prg;
BEGIN
writeln("PROGRAM Prg");
writeln("BEGIN");
writeln("writeln(""PROGRAM Prg"");");
writeln("writeln(""BEGIN"");");
writeln("writeln("writeln(""PROGRAM Prg"");");").....
и понимаешь что попадаешь в бесконечную рекурсию... таким способом никогда себя не выведешь... но все таки можно это сделать...
← →
Gero © (2004-03-31 19:59) [16]
> [6] syte_ser78 © (31.03.04 14:25)
> Твой исходник не выведет
>
> s [ 1 ] := " ;" ;
> s [ 2 ] := " s [ "
> и т.д.
А Вы проверьте.
Кстати, исходник не мой.
← →
P.N.P. © (2004-03-31 20:06) [17]main(a){printf(a,34,a="main(a)
{printf(a,34,a=%c%s%c,34);}",34);}
© Рашид Тархеев и Влад Таиров
← →
Ihor Osov'yak © (2004-03-31 20:10) [18]В общем то видел где-то в инете сайт, на котором юыли собраны решения этой забачи на примерно двух десятках языков..
PS. Лично я не понимаю пользы от такого рода задач. Если уж на развитие сообразительности - ради бога, математика, физика, етс..
А такого рода задачи на экзаменах - маразм, имхо..
← →
Verg © (2004-03-31 20:21) [19]
> Ihor Osov"yak © (31.03.04 20:10) [18]
Главное забыл - логика
> А такого рода задачи на экзаменах - маразм, имхо..
Эт-точно :)))) При том полный маразм.
← →
P.N.P. © (2004-03-31 20:36) [20]
> При том полный маразм
Не согласен - если человек 6(?) лет учился думать головой
то почему же тогда маразм? Это вполне нормально, если к тому же
работодатели поджидают за порогом (у нас так :))
← →
Aristarh © (2004-04-01 15:21) [21]>Не согласен - если человек 6(?) лет учился думать головой
Курс с++ 5 месяцев.
← →
KSergey © (2004-04-01 15:27) [22]> [17] P.N.P. © (31.03.04 20:06)
> main(a){printf(a,34,a="main(a)
> {printf(a,34,a=%c%s%c,34);}",34);}
> © Рашид Тархеев и Влад Таиров
Занятно..
Я конечно не знаю для каких условий они ее писали, вот только где гарантия, что в буфере, переданном через аргумент, будет место под результирующий буфер?
← →
KSergey © (2004-04-01 15:28) [23]> [20] P.N.P. © (31.03.04 20:36)
> работодатели поджидают за порогом (у нас так :))
Бывает же...
← →
_Alanjuk (2004-04-01 15:29) [24]Pascal.
Но различны размеры файла и того, что он выводит на экран.Const
a="Const";
b="Var i:byte";
c="t: array[1..15] of string";
d="begin";
Var i:byte;
t: array[1..15] of string;
begin
t[1]:="writeln(a)";
t[2]:="writeln(#97#61#39,a,#39#59)";
t[3]:="writeln(#98#61#39,b,#39#59)";
t[4]:="writeln(#99#61#39,c,#39#59)";
t[5]:="writeln(#100#61#39,d,#39#59)";
t[6]:="writeln(b,#59)";
t[7]:="writeln(c,#59)";
t[8]:="writeln(d)";
t[9]:="for i:=1 to 15 do begin";
t[10]:="writeln(#116#91,i,#93#58#61#39,t[i],#39#59)";
t[11]:="end";
t[12]:="for i:=1 to 15 do begin";
t[13]:="writeln(t[i],#59)";
t[14]:="end";
t[15]:="end.";
writeln(a);
writeln(#97#61#39,a,#39#59);
writeln(#98#61#39,b,#39#59);
writeln(#99#61#39,c,#39#59);
writeln(#100#61#39,d,#39#59);
writeln(b,#59);
writeln(c,#59);
writeln(d);
for i:=1 to 15 do begin;
writeln(#116#91,i,#93#58#61#39,t[i],#39#59);
end;
for i:=1 to 15 do begin;
writeln(t[i],#59);
end;
end.;
← →
KSergey © (2004-04-01 15:31) [25]> [22] KSergey © (01.04.04 15:27)
> будет место под результирующий буфер?
Чета я недодумал как обычно...
Да там, похоже, вообще места достаточного не выдерено. Расчет на то, что вокруг будет пусто... Мдя...
← →
Kerk © (2004-04-01 15:34) [26]на gwbasic"е намного короче можно:
10 LIST
← →
KSergey © (2004-04-01 15:35) [27]> [26] Kerk © (01.04.04 15:34)
Да, помнится на басике все признавали, что это просто ;)
← →
SPeller © (2004-04-01 15:41) [28]
> Piter © (31.03.04 19:53) [15]
> Как же ты не понимаешь...
Да я то всё понимаю. А вот ты нет. Я думал что будет понятно что той утилитке нужно скормить файл с тем кодом, который и является кодом программы. Могу на пальцах объяснить. Пишем программу (ту, которая потом на экран выведет свой текст). Сохраняем её в файле MyPuperProgram.cpp, и запускаем утилитку, скармливая ей файл MyPuperProgram.cpp. Она генерит файл , в котором теперь содержится объявление строковой переменной, и её значением является текст, который был в файле MyPuperProgram.cpp. Теперь подключаем inc файл к программе (#include "MyPuperProgram.inc") и вуаля! cout >> MyPuperStr;
← →
SPeller © (2004-04-01 15:43) [29]Очепятался..
> Она генерит файл , в котором теперь
Она генерит файл MyPuperProgram.inc, в котором теперь...
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.031 c