Por si alguien no sabe que es un choni, para eso está la Frikipedia:
http://www.frikipedia.es/friki/Jessi
El programa lo tengo en este sitio web (Un poco de autobombo).
http://cypascal.blogspot.com.es/2013/04/chonificador-en-cc.html
Pero como siempre también os lo dejo aquí:
DESCRIPCIÓN PROGRAMA:
Este programa convierte un texto escrito correctamente, a otro texto semejante, pero esta vez escrito por un Choni (Llámese Choni, Pituti, Nini, Macarra, Bacala...).
Se introduce el nombre del fichero de texto a convertir y ya está. Este programa sirve para ver el uso de los ficheros de texto, y trabajar con caracteres ASCII.
Y por si algún Choni le da por hacer algo útil:
ESteee PrOgrAmaaa KoNvIerTEEE un texTOOO ESKritOOO KoRreKtaMEnTE, AAA OTRooo TExTOOO shEMEJanTE, pErooo EstAAA VeZ eSKriTooo PoR Un XonIII (LLámeshEEE Xoni, PITuti, NINI, MaKaRrA, BAKaLA...).
ShEEE INTrODUKeee eL NOmbrEEE dEL fIXeRooo deee texTOOO AAA KoNVertIr Y yAAA eSTá. EstEEE pROGRAMAAA shirVEEE Paraaa ver eL UShOOO DEEE LOS fIXErOS dEEE TExTO, Y TRaBaJaR Kon KarAKterEs ASKII.
(¡¡Oh Dios!! ¡Cuántas cosas subrayadas en rojo!)
Las chonificaciones realizadas son:
1º) Alternancia de mayúsculas y minúsculas.
2º) Cambio de C por K (cuando acompaña a A,O y U).
3º) Cambio de QU por Q.
4º) Cambio de CH por X.
5º) Multiplicar el numero de vocales al final de una palabra.
6º) Introduce H entre S y vocal. (Doy fe de que lo he visto por ahí)
Aquí el código:
Código:
/*Programa para convertir de lenguaje de humano, a lenguaje Choni*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE *dat,*dat2;
int const ascii='a'-'A';
char nombre[50],C1,Voc,antVoc,mayus,antS,antQ,imp,leida;
int a;
printf("Nombre del fichero a leer (Con la extension .txt): ");
scanf("%s", &nombre);
if (fopen(nombre,"r")==NULL)
printf("\nEl fichero no existe.\n\n");
else
{
dat=fopen(nombre,"r");
dat2=fopen("SalidaChoni.txt","w");
fscanf(dat,"%c",&C1);
antS=antVoc=antQ=imp=leida=0;
while (!feof(dat))
{
/*Sortea si se pasa de minus a myus*/
mayus=(rand()%7)+1;
imp=0;
/*Chonifica minúsculas a mayúsculas*/
if (((C1<='z')&&(C1>='a'))&&(mayus<5)) C1=C1-ascii;
/*Imprime en fichero de salida*/
/*Mete H entre S y vocal*/
if ((antS==1)&&((C1=='A')||(C1=='E')||(C1=='I')||(C1=='O')||(C1=='U')
||(C1=='a')||(C1=='e')||(C1=='i')||(C1=='o')||(C1=='u')))
{
fprintf(dat2,"%c",'h');
fprintf(dat2,"%c",C1);
imp=1;
}
/*Si la última letra de la palabra es una vocal, la multiplica por 3*/
if ((antVoc==1)&&(C1==' '))
{
fprintf(dat2,"%c",Voc);fprintf(dat2,"%c",'h');
fprintf(dat2,"%c",C1);
imp=1;
}
/*Quita la u a la partícula qu*/
if (antQ==1) imp=1;
/*Pasa de ch a x*/
if ((C1=='C')||(C1=='c'))
{
fscanf(dat,"%c",&C1);
if ((C1=='H')||(C1=='h')) fprintf(dat2,"%c",'X');
else
{
leida=1;
if ((C1=='A')||(C1=='O')||(C1=='U')||(C1=='a')||(C1=='o')||
(C1=='u')) fprintf(dat2,"%c",'K');
else fprintf(dat2,"%c",'C');
if (!feof(dat)) fprintf(dat2,"%c",C1);
}
imp=1;
}
/*Imprime en el caso de que se tenga que imprimir*/
if (imp==0) fprintf(dat2,"%c",C1);
antS=antVoc=antQ=imp=leida=0;
/*Actualiza valor de anteriores*/
if ((C1=='A')||(C1=='E')||(C1=='I')||(C1=='O')||(C1=='U')
||(C1=='a')||(C1=='e')||(C1=='i')||(C1=='o')||(C1=='u'))
{
antVoc=1;
Voc=C1;
}
if ((C1=='q')||(C1=='Q')) antQ=1;
if ((C1=='S')||(C1=='s')) antS=1;
if (leida==0) fscanf(dat,"%c",&C1);
}
fclose(dat);
fclose(dat2);
}
return 0;
}
El código es libre para modificaciones si alguien se sabe más Chonerías.
Salu10.
1ª Edición: Corrección del uso de la K en vez de C.
2ª Edición: Mejora en el uso de las diferentes banderas, pasándolas de enteros a caracteres. Declaración como constante de Ascii en vez de como variable.
3ª Edición: Añade una h al final de las palabras que acaben con vocal.