[ NetZero @ 07.02.2003. 14:57 ] @
Hello all.
Neki dan sam se sjetio da sam negdje čitao raspravu (jako davno) o tome da li je moguće napisati c program kojemu bi jedina svrha bila ispisivati svoj vlastiti kod iz kojeg se sastoji. Da li je to moguće, i ako jeste, kako?
[ ventura @ 07.02.2003. 15:16 ] @
Sto ne bi bilo moguce?
[ NetZero @ 07.02.2003. 15:31 ] @
Pa ne znam, zato i pitam :) Usput, pitao sam i _kako_ je moguće, pa ako znaš odgovor, cijenio bi da mi daš kakav primjer.
[ chupcko @ 07.02.2003. 15:34 ] @
char *s="char *s=%c%s%c; main(){printf(s,34,s,34);}"; main(){printf(s,34,s,34);}

ovo je moja mala verzija napisana sada, mogu i punu, veliku da iskopam...

www.ioccc.org je majka
[ NetZero @ 07.02.2003. 16:11 ] @
Kewl
[ glupi @ 07.02.2003. 20:58 ] @
Citat:
char *s="char *s=%c%s%c; main(){printf(s,34,s,34);}"; main(){printf(s,34,s,34);}

ako sam shvatio ti si ovdje zapravo sam napisao ispis(sadrzaj) programa? Da li bi mogao tako isto napravit i sa programom od kojih 100 linija koda (bez da cijeli kod kopiras i ispises)?
[ -zombie- @ 07.02.2003. 22:58 ] @

a zasto bi pisao program od 100 linija koda kome bi "jedina svrha bila...", kada i ovaj od jedne linije koda radi posao..

Citat:
NetZero:
da li je moguće napisati c program kojemu bi jedina svrha bila ispisivati svoj vlastiti kod iz kojeg se sastoji.

[ Dragi Tata @ 07.02.2003. 23:09 ] @
Citat:
chupcko:
char *s="char *s=%c%s%c; main(){printf(s,34,s,34);}"; main(){printf(s,34,s,34);}

ovo je moja mala verzija napisana sada, mogu i punu, veliku da iskopam...



Ludo. Jedino što fali je #include <stdio.h>.


[ Reljam @ 08.02.2003. 03:44 ] @
U C-u valjda nije bilo neophodno da se includuju headeri, pogotovu za printf i slicne funckije - samo se dobija gomila warninga. C++ se naravno zali, ali obican C ne. Tako da teorijski, ovo resenje bez #include-a je ok.
[ chupcko @ 08.02.2003. 06:46 ] @
Naravno to je bilo prvo moguce resenje i zadovoljio sam se tim da make na obicnom linuxu odradi posao.
I jos je bitan jedan vazan uslov, mora biti ascii masina, posto se koristi cinjenica da je kod za "
034 (narvno neko ce pitati kakvi jos kodovi postoje pored ascii ...).
Cisto onako, radio sam na nekom IBM mainframe-u (neki c uz kombinaciju sa db2) koji koristi EBCDC kod.

Naime kao sto rekoh pun kod je sledeci:

/* CHUPCKO */

#include <stdio.h>

void main(void)
{
char b='\\';
char c='\'';
char s='\"';
char n='\n';
char *f="/* CHUPCKO */%c%c#include <stdio.h>%c%cvoid main(void)%c{%c char b=%c%c%c%c;%c char c=%c%c%c%c;%c char s=%c%c%c%c;%c char n=%c%cn%c;%c char *f=%c%s%c;%c printf(f,n,n,n,n,n,n,c,b,b,c,n,c,b,c,c,n,c,b,s,c,n,c,b,c,n,s,f,s,n,n,n);%c}%c";
printf(f,n,n,n,n,n,n,c,b,b,c,n,c,b,c,c,n,c,b,s,c,n,c,b,c,n,s,f,s,n,n,n);
}

Ovo resenje em ima include em ne zaviis od ascii masine...
[ jc denton @ 08.02.2003. 07:16 ] @
Da li bi neko od ovih sto razumeju ovaj prvi primer, bio ljubazan da objasni kako to radi za nas koji ne razumemo?
[ sspasic @ 08.02.2003. 07:18 ] @
Evo zbirke takvih programa... u svakom jeziku koga mozete da se setite...

http://www.nyx.net/~gthompso/quine.htm
[ BobMarley @ 08.02.2003. 13:19 ] @
i to je onda nekakav vjecni loop ?
[ NetZero @ 08.02.2003. 15:30 ] @
@Dragi Tata:

Da, ono što je i sam Reljan spomenuo, ovaj source, kad se kompajlira, radi i sa i bez include direktive.
[ NetZero @ 08.02.2003. 15:33 ] @
Citat:
sspasic:
Evo zbirke takvih programa... u svakom jeziku koga mozete da se setite...

http://www.nyx.net/~gthompso/quine.htm


Super je link, tnx! Sad znamo i da se takvi programčići zovu quine-ovi, + što ima masu primjera. Zbilja cool.
[ NetZero @ 08.02.2003. 15:33 ] @
Citat:
sspasic:
Evo zbirke takvih programa... u svakom jeziku koga mozete da se setite...

http://www.nyx.net/~gthompso/quine.htm


Super je link, tnx! Sad znamo i da se takvi programčići zovu quine-ovi, + što ima masu primjera. Zbilja cool.
[ zeco @ 20.06.2003. 19:04 ] @
Kako je svaki *.c file zapravo text file u programu se može postaviti FILE pokazivač koji pokazuje na dotičnu .c datoteku i ispisuje njezin(zapravo svoj) sadržaj na zaslon.