Autor
|
Tema: problema con el siguiente codigo [C] (Leído 8,626 veces)
|
joanj94
Desconectado
Mensajes: 64
|
Bien he supuesto que el texto termina con un punto y te he codificado esto, y funciona bien #include <stdio.h> void sigVocal (); char c; int main (){ do{ sigVocal(); }// fin dentro del do while(c!= '.'); }//fin main void sigVocal (){ if(c=='a'){c='e';} else if(c=='e'){c='i';} else if(c=='i'){c='o';} else if(c=='o'){c='u';} else if(c=='u'){c='a';} else {c=c;} }//fin sigVocal
|
|
« Última modificación: 3 Enero 2014, 17:37 pm por joanj94 »
|
En línea
|
|
|
|
SoyelRobert
Desconectado
Mensajes: 46
|
exactamente, justo lo acabo de sacar yo tambien: #include <stdio.h> int esVocal (char c); char sigVocal (char c); int main () { char c; do{ if (esVocal(c)) printf("%c", sigVocal(c)); else printf("%c", c); }while(scanf("%c", &c)!=EOF); return 0; } int esVocal (char c){ return (c=='a'||c=='e'||c=='i'||c=='o'||c=='u'); } char sigVocal (char c){ switch(c){ case 'a': c='e'; break; case 'e': c='i'; break; case 'i': c='o'; break; case 'o': c='u'; break; case 'u': c='a'; break; } return (c); }
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
Mensajes: 64
|
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
Mensajes: 46
|
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
Mensajes: 1.639
|
exactamente, justo lo acabo de sacar yo tambien Todavía hay un error en el programa, cuando se ejecuta la primera iteracion del bucle: int main() { char c; do { if (esVocal(c)) else }while (scanf("%c", &c ) != EOF ); return 0; }
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: int main() { char c; while (scanf("%c", &c ) != EOF ) if (esVocal(c)) else return 0; }
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
Mensajes: 64
|
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
Mensajes: 1.314
|
............................................. 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. Introduzca frase: leosansan salio una tarde que llovia.
leusensen selou ane terdi qai lluvoe.
/*hay que modificar la condicion del while*/ #include <stdio.h> int esVocal (char c); char sigVocal (char c); int main (){ int i; char c,frase[100]; puts ("Introduzca frase:"); scanf("%100[^\n]s",frase); while (getchar ()!='\n'); do{ if(esVocal(frase[i])!=0) frase[i]=sigVocal (frase[i]); i++; }while(frase[i]!= '\0'); printf("\n%s\n",frase); return 0; } int esVocal (char c){ int si_o_no=0; if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') si_o_no=1; else si_o_no=0; return si_o_no; } char sigVocal (char c){ if(c=='a') c='e'; else if(c=='e') c='i'; else if(c=='i') c='o'; else if(c=='o') c='u'; else if(c=='u') c='a'; return c; }
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
SoyelRobert
Desconectado
Mensajes: 46
|
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: #include <stdio.h> int esVocal (char c); char sigVocal (char c); int main () { char c; FILE *fe; FILE *fs; fe= fopen("C:\entrada.txt", "r"); fs= fopen("C:\salida.txt", "a"); if(fe == NULL) puts("error en apertura de fichero"); else { while (fscanf(fe,"%c", &c) != EOF) if (esVocal(c)) fprintf(fs,"%c", sigVocal(c)); else fprintf(fs,"%c", c); } return 0; } int esVocal (char c){ if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return 1; else return 0; } char sigVocal (char c){ switch(c){ case 'a': c='e'; break; case 'e': c='i'; break; case 'i': c='o'; break; case 'o': c='u'; break; case 'u': c='a'; break; } return (c); }
|
|
|
En línea
|
getting louder!
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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
Mensajes: 1.211
|
Insisto SoyelRobert: int main () { char c; FILE *fe; FILE *fs; fe= fopen("C:\entrada.txt", "r"); fs= fopen("C:\salida.txt", "a"); //... }
Deja 4 espacios después de una llave, asi se pueden identificar bloques fácilmente: int main () { char c; FILE *fe; FILE *fs; fe= fopen("C:\entrada.txt", "r"); fs= fopen("C:\salida.txt", "a"); //... }
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como utilizo el siguiente codigo?
Java
|
DrUbLiC
|
5
|
3,771
|
25 Marzo 2008, 23:18 pm
por DrUbLiC
|
|
|
Como inyectar una SHELL por el siguiente codigo PHP
Bugs y Exploits
|
Jnl
|
1
|
4,215
|
7 Febrero 2012, 01:38 am
por s00rk
|
|
|
Que hace el siguiente codigo bat?
Scripting
|
lucas25cba
|
3
|
4,007
|
26 Septiembre 2012, 06:41 am
por dac
|
|
|
C# me explican el siguiente codigo¿?
.NET (C#, VB.NET, ASP)
|
andrecid
|
2
|
2,015
|
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
|
1,567
|
20 Febrero 2016, 16:36 pm
por maicol_962016
|
|