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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con el siguiente codigo [C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: problema con el siguiente codigo [C]  (Leído 5,614 veces)
joanj94

Desconectado Desconectado

Mensajes: 64



Ver Perfil
Re: problema con el siguiente codigo [C]
« Respuesta #10 en: 3 Enero 2014, 17:24 pm »

Bien he supuesto que el texto termina con un punto y te he codificado esto, y funciona bien
Código
  1. #include <stdio.h>
  2.  
  3. void sigVocal ();
  4.  
  5. char c;
  6.  
  7. int main (){
  8. c=getchar();
  9. do{
  10. sigVocal();
  11. printf("%c", c);
  12. c=getchar();
  13. }// fin dentro del do
  14. while(c!= '.');
  15. printf("\n");
  16. }//fin main
  17.  
  18. void sigVocal (){
  19. if(c=='a'){c='e';}
  20. else if(c=='e'){c='i';}
  21. else if(c=='i'){c='o';}
  22. else if(c=='o'){c='u';}
  23. else if(c=='u'){c='a';}
  24. else {c=c;}
  25. }//fin sigVocal


« Última modificación: 3 Enero 2014, 17:37 pm por joanj94 » En línea


SoyelRobert

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Re: problema con el siguiente codigo [C]
« Respuesta #11 en: 3 Enero 2014, 17:31 pm »

exactamente, justo lo acabo de sacar yo tambien:


Código
  1. #include <stdio.h>
  2.  
  3. int esVocal (char c);
  4. char sigVocal (char c);
  5.  
  6. int main ()
  7. {
  8. char c;
  9. do{
  10.    if (esVocal(c)) printf("%c", sigVocal(c));
  11.    else printf("%c", c);
  12.  
  13.        }while(scanf("%c", &c)!=EOF);
  14.  
  15. return 0;
  16. }
  17. int esVocal (char c){
  18.  
  19. return
  20. (c=='a'||c=='e'||c=='i'||c=='o'||c=='u');
  21.  
  22. }
  23. char sigVocal (char c){
  24.  
  25. switch(c){
  26. case 'a': c='e'; break;
  27. case 'e': c='i'; break;
  28. case 'i': c='o'; break;
  29. case 'o': c='u'; break;
  30. case 'u': c='a'; break;
  31. }
  32. return (c);
  33. }
  34.  
  35.  

 ;-) gracias

EDIT: no se como ponerlo bonito la verdad :(


« Última modificación: 3 Enero 2014, 17:33 pm por SoyelRobert » En línea

getting louder!
joanj94

Desconectado Desconectado

Mensajes: 64



Ver Perfil
Re: problema con el siguiente codigo [C]
« Respuesta #12 en: 3 Enero 2014, 17:35 pm »

Bueno yo no se meter los colores, pero lo tabulo jajaja

PD: Un consejo los break, goto, y uso de librerias estilo conio.h evitalos si no son requeridos, lo digo porque si es un ejercicio de universidad o lo que sea, muchas veces te pueden penalizar por eso ;) (ademas de garantizar asi una maxima compatibilidad en todos los OS)
En línea


SoyelRobert

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Re: problema con el siguiente codigo [C]
« Respuesta #13 en: 3 Enero 2014, 17:41 pm »

Bueno yo no se meter los colores, pero lo tabulo jajaja

PD: Un consejo los break, goto, y uso de librerias estilo conio.h evitalos si no son requeridos, lo digo porque si es un ejercicio de universidad o lo que sea, muchas veces te pueden penalizar por eso ;) (ademas de garantizar asi una maxima compatibilidad en todos los OS)

exactamente, de hecho todos mis examenes empiezan asi:



sin embargo por breaks y goto no me penalizan.
En línea

getting louder!
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problema con el siguiente codigo [C]
« Respuesta #14 en: 3 Enero 2014, 17:55 pm »

exactamente, justo lo acabo de sacar yo tambien
Todavía hay un error en el programa, cuando se ejecuta la primera iteracion del bucle:
Código
  1. int main()
  2. {
  3.   char c;
  4.  
  5.   do {
  6.      if (esVocal(c))
  7.         printf("%c", sigVocal(c));
  8.      else
  9.         printf("%c", c);
  10.   }while (scanf("%c", &c) != EOF);
  11.  
  12.   return 0;
  13. }
El valor inicial de la variable "c" es no definido o basura, para procesar la variable solo después de almacenar en ella un valor se debe cambiar el bucle por uno con la condición al principio de este:
Código
  1. int main()
  2. {
  3.   char c;
  4.  
  5.   while (scanf("%c", &c) != EOF)
  6.      if (esVocal(c))
  7.         printf("%c", sigVocal(c));
  8.      else
  9.         printf("%c", c);
  10.  
  11.   return 0;
  12. }

PD: Un consejo los break, goto, y uso de librerias estilo conio.h evitalos si no son requeridos
En el caso del programa de SoyelRobert las sentencias "break;" en la función "sigVocal" son necesarias para tener el efecto deseado, si se eliminaran la función siempre retornaría 'a' como la siguiente vocal.

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
joanj94

Desconectado Desconectado

Mensajes: 64



Ver Perfil
Re: problema con el siguiente codigo [C]
« Respuesta #15 en: 3 Enero 2014, 17:59 pm »


En el caso del programa de SoyelRobert las sentencias "break;" en la función "sigVocal" son necesarias para tener el efecto deseado, si se eliminaran la función siempre retornaría 'a' como la siguiente vocal.

Un saludo

Por eso en el que yo le hice, uso el else if
En línea


leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problema con el siguiente codigo [C]
« Respuesta #16 en: 3 Enero 2014, 18:28 pm »

.............................................
el asunto era crear un programa en C que al tu introducir un texto cambie todas las vocales que aparezcan por la siguiente vocal que le toque, no se trata de introducir una única vocal para que la modifique sino introducir un texto entero donde aparezcan blancos, saltos de linea, etc (cualquier caracter hasta que se acabe el fichero, EOF)

En todo caso hasta que se acabe la cadena o frase, es decir hasta \0. Lo otro sería para ficheros, que no es el caso, supongo.

Citar

Introduzca frase:
leosansan salio una tarde que llovia.

leusensen selou ane terdi qai lluvoe.



Código
  1. /*hay que modificar la condicion del while*/
  2. #include <stdio.h>
  3.  
  4. int esVocal (char c);
  5. char sigVocal (char c);
  6.  
  7. int main (){
  8.    int i;
  9.    char c,frase[100];
  10.    puts ("Introduzca frase:");
  11.        scanf("%100[^\n]s",frase);
  12.        while (getchar ()!='\n');
  13.    do{
  14.        if(esVocal(frase[i])!=0)
  15.            frase[i]=sigVocal (frase[i]);
  16.        i++;
  17.    }while(frase[i]!= '\0');
  18.    printf("\n%s\n",frase);
  19.    return 0;
  20. }
  21.  
  22. int esVocal (char c){
  23.    int si_o_no=0;
  24.    if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
  25.        si_o_no=1;
  26.    else si_o_no=0;
  27.    return si_o_no;
  28. }
  29.  
  30. char sigVocal (char c){
  31.    if(c=='a')
  32.        c='e';
  33.    else if(c=='e')
  34.        c='i';
  35.    else if(c=='i')
  36.        c='o';
  37.    else if(c=='o')
  38.        c='u';
  39.    else if(c=='u')
  40.        c='a';
  41.    return c;
  42. }
  43.  

¡¡¡¡ Saluditos! ..... !!!!


En línea

SoyelRobert

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Re: problema con el siguiente codigo [C]
« Respuesta #17 en: 3 Enero 2014, 18:32 pm »

En todo caso hasta que se acabe la cadena o frase, es decir hasta \0. Lo otro sería para ficheros, que no es el caso, supongo.

sip jaja exactante, queria hacerlo para sentencias para la entrada estandar y para textos en caso de tratarse de ficheros:

Código
  1. #include <stdio.h>
  2.  
  3. int esVocal (char c);
  4. char sigVocal (char c);
  5.  
  6. int main ()
  7. {
  8. char c;
  9. FILE *fe;
  10. FILE *fs;
  11.  
  12. fe= fopen("C:\entrada.txt", "r");
  13. fs= fopen("C:\salida.txt", "a");
  14.  
  15. if(fe == NULL) puts("error en apertura de fichero");
  16. else {
  17.    while (fscanf(fe,"%c", &c) != EOF)
  18.        if (esVocal(c))
  19.            fprintf(fs,"%c", sigVocal(c));
  20.        else
  21.            fprintf(fs,"%c", c);
  22.  
  23. }
  24.   return 0;
  25. }
  26. int esVocal (char c){
  27.  
  28.  
  29. if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return 1;
  30. else return 0;
  31.  
  32. }
  33. char sigVocal (char c){
  34.  
  35. switch(c){
  36. case 'a': c='e'; break;
  37. case 'e': c='i'; break;
  38. case 'i': c='o'; break;
  39. case 'o': c='u'; break;
  40. case 'u': c='a'; break;
  41. }
  42. return (c);
  43. }
  44.  

 ::)
En línea

getting louder!
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problema con el siguiente codigo [C]
« Respuesta #18 en: 3 Enero 2014, 19:48 pm »

Por eso en el que yo le hice, uso el else if
En este caso se puede utilizar cualquiera de las dos sentencias de selección (if, switch) sin problemas, que la sentencia switch requiera sentencias "break;" para su correcto funcionamiento no la invalida.

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
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: problema con el siguiente codigo [C]
« Respuesta #19 en: 3 Enero 2014, 19:55 pm »

Insisto SoyelRobert:
Código
  1. int main ()
  2. {
  3. char c;
  4. FILE *fe;
  5. FILE *fs;
  6.  
  7. fe= fopen("C:\entrada.txt", "r");
  8. fs= fopen("C:\salida.txt", "a");
  9.  
  10. //...
  11.  
  12. }

Deja 4 espacios después de una llave, asi se pueden identificar bloques fácilmente:
Código
  1. int main ()
  2. {
  3.    char c;
  4.    FILE *fe;
  5.    FILE *fs;
  6.  
  7.    fe= fopen("C:\entrada.txt", "r");
  8.    fs= fopen("C:\salida.txt", "a");
  9.  
  10.    //...
  11. }

Eso en un editor de código es seleccionar las líneas y apretar TAB. O bien usar el plugin que indenta el código automaticamente (en el Codeblocks se llama "Source code formatter (AStyle)").

Estás prácticas son prácticamente obligadas para cualquier progamador, de hecho algunos lenguajes (como el python) no tienen llaves y se identifican los bloques con la indentación.
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
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como utilizo el siguiente codigo?
Java
DrUbLiC 5 2,793 Último mensaje 25 Marzo 2008, 23:18 pm
por DrUbLiC
Como inyectar una SHELL por el siguiente codigo PHP
Bugs y Exploits
Jnl 1 2,795 Último mensaje 7 Febrero 2012, 01:38 am
por s00rk
Que hace el siguiente codigo bat?
Scripting
lucas25cba 3 2,820 Último mensaje 26 Septiembre 2012, 06:41 am
por dac
C# me explican el siguiente codigo¿?
.NET (C#, VB.NET, ASP)
andrecid 2 1,195 Último mensaje 11 Agosto 2014, 19:43 pm
por andrecid
¿Que opinan de el siguiente codigo que calcula la edad de una persona?
Programación C/C++
maicol_962016 0 829 Último mensaje 20 Febrero 2016, 16:36 pm
por maicol_962016
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines