Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Програма на с++ которая выводит сама себя

Автор: Antyrat
Дата сообщения: 06.11.2006 19:29
Здраствуйте, вот у меня есть коекакая задача, написать програму на с++, которая выводит свой текст на екран монитора, но хит то в том, что програма должна занимать до 80 символов! В принцыпе если ктото такое делал на Паскале то тоже бы подошло! Просто молю о помощи, пробовал сам написать, но она 94 символа занимает!


Жду ответов, с уважением Сергей
Автор: akaGM
Дата сообщения: 06.11.2006 19:35

Цитата:
програма должна занимать до 80 символов!

на экране?

Цитата:
...пробовал сам написать, но она 94 символа занимает!

ага
покажи?
Автор: rain87
Дата сообщения: 06.11.2006 19:37

Цитата:
Просто молю о помощи, пробовал сам написать, но она 94 символа занимает!
очень любопытно посмотреть. вообще-то задача не из тривиальных
Автор: Antyrat
Дата сообщения: 06.11.2006 19:42
ну я писал чтото типа

#include<stdio.>
main(){FILE *a;a=fopen(__FILE__,"r");while(a=getch())printf("%s",a)}
Автор: akaGM
Дата сообщения: 06.11.2006 19:48
ясн...
Автор: Antyrat
Дата сообщения: 06.11.2006 19:54
Легко сказать, но мне же нужно с++ да еще и ко всему без #include<stdio.h> не сработает printf(); я думаю, что просто есть какойто метод оптимальнее, на php к примеру есть класная функцыя show_source(__FILE__); но жаль она не работает на с++!

Может хоть на Паскале знаете ка зделать!
Автор: akaGM
Дата сообщения: 06.11.2006 20:00

Код:
FILE *a;
while(a=getch())printf("%s",a)
Автор: rain87
Дата сообщения: 06.11.2006 21:01
нда. слегка не в том направлении, о котором я подумал
пока что только 84 символа...
Код: #include<stdio.h>
main(){FILE*a=fopen(__FILE__,"r");while(putchar(fgetc(a))!=255);}
Автор: Antyrat
Дата сообщения: 06.11.2006 21:56
ооооооооооооо помойму мы близки к разгадке....))))) Но вот только не понимаю я одного, почемуто вы все схватили мой метод, и начали его модифицыровать! Неужели не существует альтернативы????


Я думаю она гдето близко и вообще от открытия файла както можно отвязатса.. но как?????


Версия на Паскале с таким подходом точно не попадает, ибо нет ГЛОБАЛЬНОЙ переменной __FILE__ !!!!
Автор: tomegadeth
Дата сообщения: 06.11.2006 22:16
rain87 беда в том, что вместе с исполняемым файло, необходимо тащить за собой и исходник, и главное не переименовывать....
Автор: rain87
Дата сообщения: 06.11.2006 22:20

Цитата:
Неужели не существует альтернативы????
ну.. я видел программу на басике, которая выводит сама себя, не используя никаких системных фич вроде __FILE__
но - 1) она была значительно больше 80 символов
2) я её совершенно не помню помню лишь, что использовались специфичные басиковские методы DATA (или STORE, не помню вообще )

поэтому насчёт альтернативы - хз
Автор: tomegadeth
Дата сообщения: 06.11.2006 22:23
хотя символов побольше будет - но с собой таскать сырец не надобно

Код: #include <stdio.h>
char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);}
Автор: KADABRA
Дата сообщения: 06.11.2006 22:24

Цитата:
#include<stdio.h>
main(){for(FILE*a=fopen(__FILE__,"r");putchar(fgetc(a))^255;);}

Это смешно. Это не программа, которая выводит сама себя, а это программа, которая просто выводит файл.
Автор: tomegadeth
Дата сообщения: 06.11.2006 22:30

Код: #include<stdio.h>
main(){char*s="#include<stdio.h>%cmain(){char*s=%c%s%c;printf(s,10,34,s,34,10);}%c";printf(s,10,34,s,34,10);}
Автор: KADABRA
Дата сообщения: 06.11.2006 22:39

Код: #include<stdio.h>
main(){char*a="#include<stdio.h>%cmain(){char*a=%c%s%c;printf(a,10,34,a,34);}";printf(a,10,34,a,34);}
Автор: rain87
Дата сообщения: 06.11.2006 22:41
tomegadeth
во. вот это оно прикольно. только iostream.h не в тему
KADABRA
я лишь модифицировал изначальный код, для уменьшения количества символов
Автор: KADABRA
Дата сообщения: 06.11.2006 22:42
Только в 80 символов не помещается.

Добавлено:
Если не писать инклуд, то может поместится (првда не знаю поймёт ли это какой-то компилятор, кроме гцц, но на гцц работает):


Код:
main() {
char*a="main() {%cchar*a=%c%s%c;printf(a,10,34,a,34,10);%c}";printf(a,10,34,a,34,10);
}

Автор: Kotopes
Дата сообщения: 06.11.2006 22:56
возможно натолкнёт на "правильную" мысль...

#include <stdio.h>
main (int t, int _, char *a){return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)): 1,t<_ ? main(t+1,_,a):3,main(-94,-27+t,a)&&t==2\
?_<13?main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?
main(_,t,"@n'+,#'/*s{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n\
{n+,/+#n+,/# ;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!\
/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!\
/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/\
w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}\
#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a?putchar(31[a]):
main(-65,_,a+1):
main((*a=='/')+t,_,a+1):
0<t?main(2,2,"%s")
:*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"
),a+1);
}
Автор: KADABRA
Дата сообщения: 06.11.2006 22:56
Проверено: работает

Код: main(r){printf(r="main(r){printf(r=%c%s%c,34,r,34,10);}%c",34,r,34,10);}
Автор: tomegadeth
Дата сообщения: 06.11.2006 23:01
KADABRA
гцц понимает а вот визуал студия ругается... но результат в 73 это куль

Добавлено:
куча решений к этой теме....
Автор: KADABRA
Дата сообщения: 06.11.2006 23:09
tomegadeth
Собственно праильно МСВС ругается, без заголовкаов она не знает функцию printf, а гцц видимо автоматически включает некоторые заголовочные файлы.
хотя странно ругается:
itself3_r.c:1: warning: incompatible implicit declaration of built-in function ‘printf’
Автор: Antyrat
Дата сообщения: 07.11.2006 08:43
хмммммммм подході конешно интересніе, но к сожелению етого компилятора нет, надо както попробовать на Турбо с!

Цитата:
Код:main(r){printf(r="main(r){printf(r=%c%s%c,34,r,34,10);}%c",34,r,34,10);}

73 символа. (проверил на гцц 4.1.1 - собирается, хоть и ругается)


Хм... ето по моему не практично, забыл добавить еще одно условие, програма должа быть написана так, что если ктото добавит хоть еще одну букву в програмный код, то она должна его тоже вывести!
Автор: tomegadeth
Дата сообщения: 07.11.2006 09:23
Antyrat ну, тогда только печатать свой исходник (из локального сорца) или добавлять букву по выше приведенной схеме ИМХО
Автор: Antyrat
Дата сообщения: 07.11.2006 20:54
Хм. было бы так просто! Ведь резултата покашто нет, исходник всеравно занимает больше 80 символов, так как Компилятор, где ету прогу надо показать будет ругатса на отсутствие инклудов, что само по себе плохо, так как она работать не будет!

Ну а на паскале или на Ассемблере ни у кого никаких идей не возникало?????
Автор: akaGM
Дата сообщения: 07.11.2006 21:00
Antyrat
да не уложишься ты ни на Паскале ни на асме в 80 символов...
Автор: Antyrat
Дата сообщения: 07.11.2006 21:30
Ну я надеюсь хоть на с++ уложусь.......

Цитата:
да не уложишься ты ни на Паскале ни на асме в 80 символов...

Автор: KADABRA
Дата сообщения: 07.11.2006 21:43
Antyrat
Если будешь показывать на винде - возьми с собой MinGW и им компилируй - тогда в 73 символа поместишься.
Автор: Antyrat
Дата сообщения: 08.11.2006 17:16
В том то и дело что не на винде! темболее буду показывать в Институте, а там только Турбо си =(
Автор: KADABRA
Дата сообщения: 08.11.2006 18:28
Antyrat
Цитата:
В том то и дело что не на винде!

А на чём? Дос/Линукс/Юникс?
Автор: akaGM
Дата сообщения: 08.11.2006 18:41
Турбо С только под дос компилит, ну и бегает соответственно...

------------
гы
а может у них там новый ТурбоС...

Страницы: 12

Предыдущая тема: Разработка программ для обработки сканов книг


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.