Программа печати сомой себя ...
- viv
- Уже с Приветом
- Сообщения: 816
- Зарегистрирован: Пн апр 10, 2000 4:01 am
- Kisena
- Уже с Приветом
- Сообщения: 1615
- Зарегистрирован: Чт июл 12, 2001 4:01 am
- Откуда: Raleigh, NC
Программа печати сомой себя ...
А среда и язык какой? А то в UNIX'e? например, можно создать файл self:
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">code[quote:70bbd7d1c1]<pre>cat self</pre>[/quote:70bbd7d1c1]
Сменить права на 700 и все. [img:70bbd7d1c1]images/smiles/icon_smile.gif[/img:70bbd7d1c1]
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">code[quote:70bbd7d1c1]<pre>cat self</pre>[/quote:70bbd7d1c1]
Сменить права на 700 и все. [img:70bbd7d1c1]images/smiles/icon_smile.gif[/img:70bbd7d1c1]
-
- Уже с Приветом
- Сообщения: 6549
- Зарегистрирован: Чт апр 15, 1999 4:01 am
Программа печати сомой себя ...
Либо я чего-то не понял, либо одно из двух:
#!/usr/bin/perl
open(programfile, "/usr/printme.pl");
@data = <programfile>;
close(programfile);
print "@data\n";
Или смысл в том, чтобы программа определяла свое имя самостоятельно?
#!/usr/bin/perl
open(programfile, "/usr/printme.pl");
@data = <programfile>;
close(programfile);
print "@data\n";
Или смысл в том, чтобы программа определяла свое имя самостоятельно?
- lxf
- Уже с Приветом
- Сообщения: 13483
- Зарегистрирован: Ср июл 04, 2001 4:01 am
- Откуда: Boston, MA
Программа печати сомой себя ...
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Pavel:
<STRONG>Либо я чего-то не понял, либо одно из двух:
open(programfile, "/usr/printme.pl");
</STRONG><HR></BLOCKQUOTE>
Программа ничего читать не может. В своем теле она должна содержать последовательность операторов вывода, воспроизводящих на выходном устройстве свой собственный исходный текст.
<STRONG>Либо я чего-то не понял, либо одно из двух:
open(programfile, "/usr/printme.pl");
</STRONG><HR></BLOCKQUOTE>
Программа ничего читать не может. В своем теле она должна содержать последовательность операторов вывода, воспроизводящих на выходном устройстве свой собственный исходный текст.
-
- Уже с Приветом
- Сообщения: 6549
- Зарегистрирован: Чт апр 15, 1999 4:01 am
Программа печати сомой себя ...
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by lxf:
<STRONG>
Программа ничего читать не может. В своем теле она должна содержать последовательность операторов вывода, воспроизводящих на выходном устройстве свой собственный исходный текст.</STRONG><HR></BLOCKQUOTE>
А. Значит, не понял..
<STRONG>
Программа ничего читать не может. В своем теле она должна содержать последовательность операторов вывода, воспроизводящих на выходном устройстве свой собственный исходный текст.</STRONG><HR></BLOCKQUOTE>
А. Значит, не понял..
-
- Уже с Приветом
- Сообщения: 6549
- Зарегистрирован: Чт апр 15, 1999 4:01 am
Программа печати сомой себя ...
Тогда сделаем так:
#!/usr/bin/perl
@data = <STDIN>;
print @data;
А запускать ее нужно так:
perl -w имя_программы.pl < имя_программы.pl
Переориентируем стандартный буфер ввода.. И вся недолга.
#!/usr/bin/perl
@data = <STDIN>;
print @data;
А запускать ее нужно так:
perl -w имя_программы.pl < имя_программы.pl
Переориентируем стандартный буфер ввода.. И вся недолга.
- viv
- Уже с Приветом
- Сообщения: 816
- Зарегистрирован: Пн апр 10, 2000 4:01 am
Программа печати сомой себя ...
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Pavel:
<STRONG>Либо я чего-то не понял, либо одно из двух:
#!/usr/bin/perl
open(programfile, "/usr/printme.pl");
@data = <programfile>;
close(programfile);
print "@data\n";
Или смысл в том, чтобы программа определяла свое имя самостоятельно?</STRONG><HR></BLOCKQUOTE>
эта программа
1) явно зависит от своего имени
2) полюзуется системными функциями чтения из файла
<STRONG>Либо я чего-то не понял, либо одно из двух:
#!/usr/bin/perl
open(programfile, "/usr/printme.pl");
@data = <programfile>;
close(programfile);
print "@data\n";
Или смысл в том, чтобы программа определяла свое имя самостоятельно?</STRONG><HR></BLOCKQUOTE>
эта программа
1) явно зависит от своего имени
2) полюзуется системными функциями чтения из файла
- du
- Уже с Приветом
- Сообщения: 1487
- Зарегистрирован: Пн июл 03, 2000 4:01 am
- Откуда: Omsk->VA->CT->VA->FL->(Omsk<->VA)
- Контактная информация:
Программа печати сомой себя ...
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by lxf:
<STRONG>
Программа ничего читать не может. В своем теле она должна содержать последовательность операторов вывода, воспроизводящих на выходном устройстве свой собственный исходный текст.</STRONG><HR></BLOCKQUOTE>
Nu skazem tak:
void main()
{
char prog_txt[] =
"void main()"
"{"
" char prog_txt[] = \"%s\""
" printf(prog_txt, prog_txt);"
"}";
printf(prog_txt, prog_txt);
}
Pohoze na pravdu?
<STRONG>
Программа ничего читать не может. В своем теле она должна содержать последовательность операторов вывода, воспроизводящих на выходном устройстве свой собственный исходный текст.</STRONG><HR></BLOCKQUOTE>
Nu skazem tak:
void main()
{
char prog_txt[] =
"void main()"
"{"
" char prog_txt[] = \"%s\""
" printf(prog_txt, prog_txt);"
"}";
printf(prog_txt, prog_txt);
}
Pohoze na pravdu?
- viv
- Уже с Приветом
- Сообщения: 816
- Зарегистрирован: Пн апр 10, 2000 4:01 am
Программа печати сомой себя ...
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Pavel:
<STRONG>Тогда сделаем так:
#!/usr/bin/perl
@data = <STDIN>;
print @data;
А запускать ее нужно так:
perl -w имя_программы.pl < имя_программы.pl
Переориентируем стандартный буфер ввода.. И вся недолга.</STRONG><HR></BLOCKQUOTE>
в этом варианте большую чась работы выполняет специфичный способ вызова программы ... почему бы тогда уже в качестве программы имя_программы.pl не использовать "hello world"
а в качестве способа ее вызова:
cat имя_программы.pl
тоже работать будет ...
формально говоря lxf - совершенно прав в частности что -
"Программа ничего читать не может."
<STRONG>Тогда сделаем так:
#!/usr/bin/perl
@data = <STDIN>;
print @data;
А запускать ее нужно так:
perl -w имя_программы.pl < имя_программы.pl
Переориентируем стандартный буфер ввода.. И вся недолга.</STRONG><HR></BLOCKQUOTE>
в этом варианте большую чась работы выполняет специфичный способ вызова программы ... почему бы тогда уже в качестве программы имя_программы.pl не использовать "hello world"
а в качестве способа ее вызова:
cat имя_программы.pl
тоже работать будет ...
формально говоря lxf - совершенно прав в частности что -
"Программа ничего читать не может."
- viv
- Уже с Приветом
- Сообщения: 816
- Зарегистрирован: Пн апр 10, 2000 4:01 am
Программа печати сомой себя ...
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by du:
<STRONG>
Nu skazem tak:
void main()
{
char prog_txt[] =
"void main()"
"{"
" char prog_txt[] = \"%s\""
" printf(prog_txt, prog_txt);"
"}";
printf(prog_txt, prog_txt);
}
Pohoze na pravdu?</STRONG><HR></BLOCKQUOTE>
вот результат работы этой программы который я получил откомпилировав и запустив ее
void main(){ char prog_txt[] = "void main(){ char prog_txt[] = "%s" printf(prog_txt, prog_txt);}" printf(prog_txt, prog_txt);}
как видно он очень близок - но не повторяет в точности тело программы
<STRONG>
Nu skazem tak:
void main()
{
char prog_txt[] =
"void main()"
"{"
" char prog_txt[] = \"%s\""
" printf(prog_txt, prog_txt);"
"}";
printf(prog_txt, prog_txt);
}
Pohoze na pravdu?</STRONG><HR></BLOCKQUOTE>
вот результат работы этой программы который я получил откомпилировав и запустив ее
void main(){ char prog_txt[] = "void main(){ char prog_txt[] = "%s" printf(prog_txt, prog_txt);}" printf(prog_txt, prog_txt);}
как видно он очень близок - но не повторяет в точности тело программы
- viv
- Уже с Приветом
- Сообщения: 816
- Зарегистрирован: Пн апр 10, 2000 4:01 am
Программа печати сомой себя ...
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Kisena:
<STRONG>А среда и язык какой? А то в UNIX'e? например, можно создать файл self:
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">code[quote:214cbe7e72]<pre>cat self</pre>[/quote:214cbe7e72]
Сменить права на 700 и все. [img:214cbe7e72]images/smiles/icon_smile.gif[/img:214cbe7e72]</STRONG><HR></BLOCKQUOTE>
)) Вообще язык не оговорен как собственно и среда ... главноя - идея построения алгоритма с использованием базовых конструксий некоторого языка и операторам вывода на экран
ок - возмем для определенности язык C ( стандарт ). Код должен работать в любой среде и от имени программы не зависеть.
Системными функциями/вызовами ( кроме printf(...) конечно ) пользоваться нельзя.
<STRONG>А среда и язык какой? А то в UNIX'e? например, можно создать файл self:
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">code[quote:214cbe7e72]<pre>cat self</pre>[/quote:214cbe7e72]
Сменить права на 700 и все. [img:214cbe7e72]images/smiles/icon_smile.gif[/img:214cbe7e72]</STRONG><HR></BLOCKQUOTE>
)) Вообще язык не оговорен как собственно и среда ... главноя - идея построения алгоритма с использованием базовых конструксий некоторого языка и операторам вывода на экран
ок - возмем для определенности язык C ( стандарт ). Код должен работать в любой среде и от имени программы не зависеть.
Системными функциями/вызовами ( кроме printf(...) конечно ) пользоваться нельзя.
- Melkor
- Уже с Приветом
- Сообщения: 1257
- Зарегистрирован: Ср окт 03, 2001 4:01 am
- Откуда: Valinor->Utumno->Angband
Программа печати сомой себя ...
Вообще, я никогда не понимал, почему эта задача считается сложной, или хотя бы "с подковыкой"...
#include <stdio.h>
char *code[] = {
"#include <stdio.h>",
"char *code[] = {",
"};void main(int argc, char* argv[]){",
"char s0[]={10,0},s1[]={34,0},s2[]={34,44,10,0},s3[]={34,10,0};",
"for(int i=0;i<2;i++) { printf(code[i]);printf(s0); }",
"for(i=0;i<8;i++) { printf(s1);printf(code[i]);printf(s2); }",
"printf(s1);printf(code[i]);printf(s3);",
"for(i=2;i<9;i++) { printf(code[i]);printf(s0); }",
"}"
};void main(int argc, char* argv[]){
char s0[]={10,0},s1[]={34,0},s2[]={34,44,10,0},s3[]={34,10,0};
for(int i=0;i<2;i++) { printf(code[i]);printf(s0); }
for(i=0;i<8;i++) { printf(s1);printf(code[i]);printf(s2); }
printf(s1);printf(code[i]);printf(s3);
for(i=2;i<9;i++) { printf(code[i]);printf(s0); }
}
#include <stdio.h>
char *code[] = {
"#include <stdio.h>",
"char *code[] = {",
"};void main(int argc, char* argv[]){",
"char s0[]={10,0},s1[]={34,0},s2[]={34,44,10,0},s3[]={34,10,0};",
"for(int i=0;i<2;i++) { printf(code[i]);printf(s0); }",
"for(i=0;i<8;i++) { printf(s1);printf(code[i]);printf(s2); }",
"printf(s1);printf(code[i]);printf(s3);",
"for(i=2;i<9;i++) { printf(code[i]);printf(s0); }",
"}"
};void main(int argc, char* argv[]){
char s0[]={10,0},s1[]={34,0},s2[]={34,44,10,0},s3[]={34,10,0};
for(int i=0;i<2;i++) { printf(code[i]);printf(s0); }
for(i=0;i<8;i++) { printf(s1);printf(code[i]);printf(s2); }
printf(s1);printf(code[i]);printf(s3);
for(i=2;i<9;i++) { printf(code[i]);printf(s0); }
}
- du
- Уже с Приветом
- Сообщения: 1487
- Зарегистрирован: Пн июл 03, 2000 4:01 am
- Откуда: Omsk->VA->CT->VA->FL->(Omsk<->VA)
- Контактная информация:
Программа печати сомой себя ...
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Melkor:
[QB]Вообще, я никогда не понимал, почему эта задача считается сложной, или хотя бы "с подковыкой"...
QB]<HR></BLOCKQUOTE>
задача "с подковыкой" - napisat' Windows ne huze chem Microsoft. Predlagau vam ee reshit' na dosuge [img:2828b62aee]images/smiles/icon_smile.gif[/img:2828b62aee]
[QB]Вообще, я никогда не понимал, почему эта задача считается сложной, или хотя бы "с подковыкой"...
QB]<HR></BLOCKQUOTE>
задача "с подковыкой" - napisat' Windows ne huze chem Microsoft. Predlagau vam ee reshit' na dosuge [img:2828b62aee]images/smiles/icon_smile.gif[/img:2828b62aee]
- Melkor
- Уже с Приветом
- Сообщения: 1257
- Зарегистрирован: Ср окт 03, 2001 4:01 am
- Откуда: Valinor->Utumno->Angband
Программа печати сомой себя ...
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by du:
<STRONG>
задача "с подковыкой" - napisat' Windows ne huze chem Microsoft. Predlagau vam ee reshit' na dosuge [img:9ff09323f7]images/smiles/icon_smile.gif[/img:9ff09323f7]</STRONG><HR></BLOCKQUOTE>
Очевидная шутка в ответ - "подковыка" была бы, если бы требовалось написать Windows хуже, чем Microsoft. Но она несмешная, поэтому я так шутить не буду. [img:9ff09323f7]images/smiles/icon_smile.gif[/img:9ff09323f7]
<STRONG>
задача "с подковыкой" - napisat' Windows ne huze chem Microsoft. Predlagau vam ee reshit' na dosuge [img:9ff09323f7]images/smiles/icon_smile.gif[/img:9ff09323f7]</STRONG><HR></BLOCKQUOTE>
Очевидная шутка в ответ - "подковыка" была бы, если бы требовалось написать Windows хуже, чем Microsoft. Но она несмешная, поэтому я так шутить не буду. [img:9ff09323f7]images/smiles/icon_smile.gif[/img:9ff09323f7]
-
- Уже с Приветом
- Сообщения: 1346
- Зарегистрирован: Сб сен 22, 2001 4:01 am
- Откуда: Dallas TX, USA
- Контактная информация:
Программа печати сомой себя ...
По-моему, вот простейшее решение этой задачи:
Пустая программа. Вообще ни одной строчки кода...
И печатает сама себя очень хорошо - только листки подавай (даже принтера не нужно)
[img:f29a294e7f]images/smiles/icon_smile.gif[/img:f29a294e7f] [img:f29a294e7f]images/smiles/icon_smile.gif[/img:f29a294e7f] [img:f29a294e7f]images/smiles/icon_razz.gif[/img:f29a294e7f]
[ 21-10-2001: Message edited by: Volant ]
Пустая программа. Вообще ни одной строчки кода...
И печатает сама себя очень хорошо - только листки подавай (даже принтера не нужно)
[img:f29a294e7f]images/smiles/icon_smile.gif[/img:f29a294e7f] [img:f29a294e7f]images/smiles/icon_smile.gif[/img:f29a294e7f] [img:f29a294e7f]images/smiles/icon_razz.gif[/img:f29a294e7f]
[ 21-10-2001: Message edited by: Volant ]