elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Chonificador (Pasa de legible a Choni)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [C] Chonificador (Pasa de legible a Choni)  (Leído 7,709 veces)
cypascal

Desconectado Desconectado

Mensajes: 42


Ver Perfil WWW
[C] Chonificador (Pasa de legible a Choni)
« en: 30 Abril 2013, 00:12 am »

Bueno, pues como nunca se sabe cuando vamos a necesitar escribir como un auténtico Choni, y como aprender Choni es muy complicado y puede causar problemas secundarios, dejo el siguiente programa para facilitaros esa tarea comunicativa, que tan difícil puede resultar.

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.


« Última modificación: 1 Mayo 2013, 15:25 pm por cypascal » En línea

Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES
mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: [C] Chonificador (Pasa de legible a Choni)
« Respuesta #1 en: 30 Abril 2013, 17:45 pm »

Si la C va seguida de I o E no la cambies a K.

Sa1uDoS


En línea

cypascal

Desconectado Desconectado

Mensajes: 42


Ver Perfil WWW
Re: [C] Chonificador (Pasa de legible a Choni)
« Respuesta #2 en: 30 Abril 2013, 18:32 pm »

Gracias Mr.Blood, tienes toda la razón.
Modifico el mensaje inicial con la corrección (creo que esta vez ya bien)

Salu10.
En línea

Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [C] Chonificador (Pasa de legible a Choni)
« Respuesta #3 en: 30 Abril 2013, 20:33 pm »

Mola, parece muy depurado. Me ha traducido esto:
Citar
Cosa grande y hermosa

A:

Citar
KoShaaa GRaNdeee y hERmOsha

¿Cosas que cambiaría? Un código más independiente y modular... Puedes crearte una función que te genere una cadena "traducida". Y luego esa cadena la puedes escribir en un archivo o mostrarla por pantalla.

Las variables que no cambies deberían ser declaradas como constantes. Además las banderas (AntVoc) pueden ser declaradas como char en vez de int, te ahorras bastantes bytes de memoria.

Por último:

Código
  1. if ((C1=='C')||(C1=='c'))
  2.            {
  3.                fscanf(dat,"%c",&C1);                      
  4.                if ((C1=='H')||(C1=='h')) fprintf(dat2,"%c",'X');

Hay un problema con esto, que pasa si en ese fscanf se llega al final del archivo?
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
flony


Desconectado Desconectado

Mensajes: 584



Ver Perfil
Re: [C] Chonificador (Pasa de legible a Choni)
« Respuesta #4 en: 1 Mayo 2013, 04:37 am »

me da estos errores, alguna libreria esta como fuera de moda, uso visual c++ 2012
Citar
error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.   c:\users\administrador\documents\visual studio 2012\projects\project2\project2\source.cpp   20
En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [C] Chonificador (Pasa de legible a Choni)
« Respuesta #5 en: 1 Mayo 2013, 11:32 am »

Lo pone ahi,  cambia fopen por fopen_s
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
cypascal

Desconectado Desconectado

Mensajes: 42


Ver Perfil WWW
Re: [C] Chonificador (Pasa de legible a Choni)
« Respuesta #6 en: 1 Mayo 2013, 15:21 pm »

@Amchacon:
Gracias por los consejos. Cambio Ascii para declararlo como constante en vez de variable, y las banderas las paso todas a caracteres.


Lo que no acabo de ver es el fallo que comentas en la siguiente parte:

Código:
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');
                    fprintf(dat2,"%c",C1);
                }
                imp=1;
            }

Creo que si se lee un final de fichero no pasa nada, ya que la variable imp (indica si se ha imprimido caracter o no) se pone a 1, y por lo tanto, se considera como si se hubiera imprimido, y ya no se vuelve a imprimir antes de llegar a la comprobación de final de fichero del while.

@Flony: Yo uso el IDE DevCpp. He probado con fopen_s y me dice que no existe. No se sí habrá que llamar a otra biblioteca.

Vuelvo a editar para correcciones.

Salu10.
En línea

Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [C] Chonificador (Pasa de legible a Choni)
« Respuesta #7 en: 1 Mayo 2013, 17:44 pm »

me da estos errores, alguna libreria esta como fuera de moda, uso visual c++ 2012

Citar
error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.   c:\users\administrador\documents\visual studio 2012\projects\project2\project2\source.cpp   20
No es un error. Es un "detallito" del compilador de Microsoft.

Este indica que un conjunto de funciones parte de la biblioteca estándar de C pueden ser peligrosas (si lo son o no depende del código fuente) y, en su lugar, recomienda alternativas que son extensiones del compilador.

Ello sucede (en Visual C++ 2008, habrá que revisar las siguientes versiones) aun cuando se utilice la opción "/Za" que, al menos en teoría, desactiva las extensiones del compilador.

La solución es:

A) Si se trata de desarrollar un programa en C estándar solo hay que definir la macro _CRT_SECURE_NO_WARNINGS o bien hacer caso omiso al mensaje de advertencia (después de todo la única función realmente insegura es gets).

B) Si se trata de un programa para MS Windows utilizando solo ese compilador basta con cambiar el uso de fopen por fopen_s.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Re: [C] Chonificador (Pasa de legible a Choni)
« Respuesta #8 en: 5 Mayo 2013, 18:37 pm »

He hecho un arreglo en PHP  ;-)

http://zonaisc.com/web/?q=node/17
« Última modificación: 6 Junio 2013, 21:38 pm por BlackM4ster » En línea

- Pásate por mi web -
https://codeisc.com
cypascal

Desconectado Desconectado

Mensajes: 42


Ver Perfil WWW
Re: [C] Chonificador (Pasa de legible a Choni)
« Respuesta #9 en: 5 Mayo 2013, 23:07 pm »

Está muy bién, yo ya lo he probado jeje, subo el enlace a mi blog.
En línea

Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
que pasa, que pasa???
Software
Evangelin 1 2,086 Último mensaje 17 Septiembre 2003, 14:56 pm
por Badcode
Hacer código compatible y legible.
Electrónica
Meta 0 2,618 Último mensaje 10 Febrero 2015, 18:21 pm
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines