Programa que imprime su código

Iniciado por N0body, 28 Agosto 2011, 21:48 PM

0 Miembros y 1 Visitante están viendo este tema.

N0body

Uno de los ejercicios propuestos por un profesor de programación, fue el de hacer un programa que imprima su código. (Obviamente sin leer ningún archivo)
Aquí una posible solución, se puede hacer mucho más corto, quitando las tabulaciones y los saltos de línea, pero así queda más visual de corroborar.


#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
int i,n;
char palabra[] = "#include <stdio.h>\n#include <string.h>\n\nint main(int argc, char **argv)\n{\n\tint i, n;\n\tchar palabra[] = \tn=strlen (palabra);\n\tpalabra[102]='\\0';\n\tprintf (\"%s \",palabra);\n\tpalabra[102]=' ';\n\tprintf (\"\\\"\");\n\tfor (i=0;i<n;i++)\n\t\tswitch (palabra[i])\n\t\t\t{\n\t\t\t\tcase '\\n':\n\t\t\t\tprintf (\"\\\\n\");\n\t\t\t\tbreak;\n\t\t\t\tcase '\\t':\n\t\t\t\tprintf (\"\\\\t\");\n\t\t\t\tbreak;\n\t\t\t\tcase '\\\\':\n\t\t\t\tprintf (\"\\\\\\\\\");\n\t\t\t\tbreak;\n\t\t\t\tcase '\\\"':\n\t\t\t\tprintf (\"\\\\\\\"\");\n\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\tprintf (\"%c\",palabar[i]);\n\t\t\t}\n\tprintf (\"\\\";\\n\");\n\tprintf (\"%s\", palabra+103);\n\treturn 0\n}";
n=strlen (palabra);
palabra[102]='\0';
printf ("%s ",palabra);
palabra[102]=' ';
printf ("\"");
for (i=0;i<n;i++)
switch (palabra[i])
{
case '\n':
printf ("\\n");
break;
case '\t':
printf ("\\t");
break;
case '\\':
printf ("\\\\");
break;
case '\"':
printf ("\\\"");
break;
default:
printf ("%c",palabra[i]);
}
printf ("\";\n");
printf ("%s", palabra+103);
return 0;
}

satu

Eso se llamaba "quine" o algo así, no?? Es curioso
Breakbeat como forma de vida

N0body

CitarEso se llamaba "quine" o algo así, no?? Es curioso
Fijándome, así es, gracias por el dato. Acá pongo el link de la wikipedia: http://en.wikipedia.org/wiki/Quine_%28computing%29

madpitbull_99

Los chicos de Visual Basic hicieron un reto que trataba de mostrar el codigo fuente del programa ejecutado:

[Reto] Show My Source Code.





«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red