bastiaaan Posted July 10, 2011 Report Share Posted July 10, 2011 disculpen, no encontre el lugar apropiado donde colocar el tema, pero necesito ayuda Chicos, les queria pedir ayuda, resulta que tengo que hacer en lenguaje C un programa que cuente el numero de letras de cada palabra y que escoga la palabra con menor letras y la con mayor, y ademas sumar todas las letras de todas las palabras y sacar el promedio. Ej: Hola po como estay 4 Hola 2 Po 4 Como 5 Estay menor Po = 2, mayor Estay = 5 prmedio 15/4 = 3.75 yo se que para contar las letras de las palabras se ocupa el strlen, este cuentas las letras. aqui mostrare el pequeño programa que tengo, yo siempre voy paso a paso, y no he avanzado mas porque no he logrado contar cada una de las palabras #include<stdio.h> #include<string.h> #include<stdlib.h> main(){ char s[50]; int n,x; printf("Ingrese la frase: \n"); scanf("%s", &s); n = strlen(s); printf("La cadena: \"%s\" tiene %d caracteres.\n", s, n); system("pause"); return 0; } No logro que me cuente cada palabra sino que solamente la primera =/ Por favor, ayudenme ya que necesito presentarlo el lunes =/ Link to comment Share on other sites More sharing options...
wtfbenja Posted July 10, 2011 Report Share Posted July 10, 2011 prueba con esto /* strlen example */ #include <stdio.h> #include <string.h> int main () { char szInput[256]; printf ("Enter a sentence: "); gets (szInput); printf ("The sentence entered is %u characters long.\n",(unsigned)strlen(szInput)); return 0; } creo que con eso funciona. y si te refieres a comparar mayor y menor letra con strcmp(palabra1,palabra2) retorna un valor negativo o positivo dependiendo si la palabra2 es mayor o menos que la palabra1 y un 0 si son iguales. pero si te refieres a cantidad de letras con strlen haces todo =) saludos. Link to comment Share on other sites More sharing options...
el_caxulo Posted July 10, 2011 Report Share Posted July 10, 2011 esto es lo que necesitas ---> http://c.conclase.net/librerias/?ansifun=strtok tienes que partir la cadena, contar los caracteres de cada palabra. Link to comment Share on other sites More sharing options...
bastiaaan Posted July 10, 2011 Author Report Share Posted July 10, 2011 prueba con esto /* strlen example */ #include <stdio.h> #include <string.h> int main () { char szInput[256]; printf ("Enter a sentence: "); gets (szInput); printf ("The sentence entered is %u characters long.\n",(unsigned)strlen(szInput)); return 0; } creo que con eso funciona. y si te refieres a comparar mayor y menor letra con strcmp(palabra1,palabra2) retorna un valor negativo o positivo dependiendo si la palabra2 es mayor o menos que la palabra1 y un 0 si son iguales. pero si te refieres a cantidad de letras con strlen haces todo =) saludos. gracias compadre, eso me ilumino, con el gets pude sumar todas las palabras y que me imprimiera todas las frases, ahora lo unico malo que me cuetna tambien los espacios xd Link to comment Share on other sites More sharing options...
el_caxulo Posted July 10, 2011 Report Share Posted July 10, 2011 en mi post anterior esta la solucion :rolleyes: pero al parecer te quieres ir por el camino mas facil , si es asi podrias recorrer la cadena tu mismo y contar la cadena manualmente y cuando encuentre un ' ' no cuente esa letra. despues me gustaria ver como haces para saber que palabra es la menor y cual es la mayor :ROLF: Link to comment Share on other sites More sharing options...
bastiaaan Posted July 10, 2011 Author Report Share Posted July 10, 2011 #include<stdio.h> #include<string.h> #include<stdlib.h> main(){ char *s[50], s2[4] = " \n\t", *ptr; int p,n, suma2, suma= 0, suma1 = 0, cont; float prom; printf("Ingrese la frase: \n"); /* aqui se ingresa la frase */ gets(s); printf("\nHay %d palabras en la frase.\n", NumPalabras(s)); p = NumPalabras(s); ptr = strtok( s, s2 ); // Primera llamada => Primer token printf( "La cadena: \"%s\"", ptr ); printf(" tiene %d caracteres \n", strlen(ptr)); suma1 = suma1 + strlen(ptr); while( (ptr = strtok( NULL, s2 )) != NULL)// Posteriores llamadas if (strlen(ptr) > 0) { printf( "La cadena: \"%s\" tiene %d caracteres\n", ptr,strlen(ptr)); suma = suma + strlen(ptr) ;} printf("El total de caracteres ingresados es : %d\n", suma+suma1); suma2 = suma+suma1; prom = suma2 / p; printf("El promedio es: %f\n", prom); system("pause"); return 0; } Eso es lo que llevo, me cuenta las palabras, las letras, pero ahora no logro sacar el promedio de las 2, por ejemplo ingreso. "Hola que tal" = 10 y 3 palabras, entonces seria 10/3 = 3,3333333, pero me resulta 5 :S, para empezar a verificar datos, puse en la parte del printf("El promedio es: %f\n", prom); en vez de prom pongo p para verificar el resultado de el NumPalabras(s) y me aparece 2, es decir, ahi esta el problema... Alguien podria guiarme, ayudarme o asesorarme ? Link to comment Share on other sites More sharing options...
el_caxulo Posted July 10, 2011 Report Share Posted July 10, 2011 (edited) intenta casteando "prom = (double)(suma2 / p);" edit: tendrias que poner la funcion numPalabras para revizarla, ya que al parecer no esta contando bien las palabras. Edited July 10, 2011 by el_caxulo Link to comment Share on other sites More sharing options...
bastiaaan Posted July 10, 2011 Author Report Share Posted July 10, 2011 intenta casteando "prom = (double)(suma2 / p);" edit: tendrias que poner la funcion numPalabras para revizarla, ya que al parecer no esta contando bien las palabras. Gracias compadre por darte la molestia de responder, ya logre obtener el promedio, ahora solo me falta ver que palabra es mayor y que palabra es menor, pero no se me ocurre como hacerlo, nose si con strcmp se puede ya que por lo que he visto solo compara 2 cadenas, entonces que pasa si yo ingreso "Hola amigo que cuentas" quiero que me diga Que es la palabra menor y Cuentas la palabra mayor. =/ si sabes como ayudarme te lo agradeceria. #include<stdio.h> #include<string.h> #include<stdlib.h> main(){ char *s[50], s2[4] = " \n\t", *ptr; int p = 0,n , suma= 0, suma1 = 0, cont; float prom, suma2 ; printf("Ingrese la frase: \n"); /* aqui se ingresa la frase */ gets(s); p = NumPalabras(s); printf("\nHay %d palabras en la frase.\n", p); ptr = strtok( s, s2 ); // Primera llamada => Primer token printf( "La cadena: \"%s\"", ptr ); printf(" tiene %d caracteres \n", strlen(ptr)); suma1 = suma1 + strlen(ptr); while( (ptr = strtok( NULL, s2 )) != NULL)// Posteriores llamadas if (strlen(ptr) > 0) { printf( "La cadena: \"%s\" tiene %d caracteres\n", ptr,strlen(ptr)); suma = suma + strlen(ptr) ;} printf("El total de caracteres ingresados es : %d\n", suma+suma1); suma2 = (suma+suma1); prom = suma2/p; printf("El promedio es: %1.2f\n", prom); system("pause"); return 0; } int NumPalabras(char* s) { static int cont = 1; if(*s == '\0') return 0; if(*s == ' ') cont = 1; if(*s != ' ' && cont == 1){ cont = 0; return 1 + NumPalabras((++s));} else return 0 + NumPalabras((++s)); } Link to comment Share on other sites More sharing options...
el_caxulo Posted July 11, 2011 Report Share Posted July 11, 2011 (edited) #include<stdio.h> #include<string.h> #include<stdlib.h> //variables que contienen el valor menor y mayor. int menor; int mayor; /* variable que almacena el tamaño de la cadena, ya que al llamar muchas veces a la funcion strlen realentiza el programa. */ int aux_suma; main(){ char *s[50], s2[4] = " \n\t", *ptr; int p = 0,n , suma= 0, suma1 = 0, cont; float prom, suma2; printf("Ingrese la frase: \n"); /* aqui se ingresa la frase */ gets(s); p = NumPalabras(s); printf("\nHay %d palabras en la frase.\n", p); ptr = strtok( s, s2 ); //en la primera pasada, el primer valor, es mi valor menor y mayor menor = strlen(ptr); mayor = menor; suma1 = suma1 + strlen(ptr); while( (ptr = strtok( NULL, s2 )) != NULL) { aux_suma = strlen(ptr); if( aux_suma > 0 ) { suma = suma + aux_suma; //determino si el tamaño de la cadena es menor a mi variable menor. if( aux_suma < menor ) menor = aux_suma; //determino si el tamaño de la cadena es mayor a mi variable mayor. if( aux_suma > mayor ) mayor = aux_suma; } } printf("El total de caracteres ingresados es : %d\n", suma+suma1); suma2 = (suma+suma1); prom = suma2/p; printf("El promedio es: %1.2f\n", prom); /* tengo almacenada en la varible menor la cantidad de letras que tiene la palabra con menos caracters y en la mayor la que contiene mas caracteres, imprimo por pantalla. */ //imprimo la menor printf( "\n la palabra con menos caracteres tiene %d caracteres. \n" , menor ); //imprimo la mayor printf( "\n la palabra con mas caracteres tiene %d caracteres. \n" , mayor ); system("pause"); return 0; } int NumPalabras(char* s) { static int cont = 1; if(*s == '\0') return 0; if(*s == ' ') cont = 1; if(*s != ' ' && cont == 1){ cont = 0; return 1 + NumPalabras((++s));} else return 0 + NumPalabras((++s)); } puse en negrita las cosas que le agregue a tu codigo y subraye los comentarios. PD: no compile el codigo. Edited July 11, 2011 by el_caxulo Link to comment Share on other sites More sharing options...
bastiaaan Posted July 11, 2011 Author Report Share Posted July 11, 2011 #include<stdio.h> #include<string.h> #include<stdlib.h> //variables que contienen el valor menor y mayor. int menor; int mayor; /* variable que almacena el tamaño de la cadena, ya que al llamar muchas veces a la funcion strlen realentiza el programa. */ int aux_suma; main(){ char *s[50], s2[4] = " \n\t", *ptr; int p = 0,n , suma= 0, suma1 = 0, cont; float prom, suma2; printf("Ingrese la frase: \n"); /* aqui se ingresa la frase */ gets(s); p = NumPalabras(s); printf("\nHay %d palabras en la frase.\n", p); ptr = strtok( s, s2 ); //en la primera pasada, el primer valor, es mi valor menor y mayor menor = strlen(ptr); mayor = menor; suma1 = suma1 + strlen(ptr); while( (ptr = strtok( NULL, s2 )) != NULL) { aux_suma = strlen(ptr); if( aux_suma > 0 ) { suma = suma + aux_suma; //determino si el tamaño de la cadena es menor a mi variable menor. if( aux_suma < menor ) menor = aux_suma; //determino si el tamaño de la cadena es mayor a mi variable mayor. if( aux_suma > mayor ) mayor = aux_suma; } } printf("El total de caracteres ingresados es : %d\n", suma+suma1); suma2 = (suma+suma1); prom = suma2/p; printf("El promedio es: %1.2f\n", prom); /* tengo almacenada en la varible menor la cantidad de letras que tiene la palabra con menos caracters y en la mayor la que contiene mas caracteres, imprimo por pantalla. */ //imprimo la menor printf( "\n la palabra con menos caracteres tiene %d caracteres. \n" , menor ); //imprimo la mayor printf( "\n la palabra con mas caracteres tiene %d caracteres. \n" , mayor ); system("pause"); return 0; } int NumPalabras(char* s) { static int cont = 1; if(*s == '\0') return 0; if(*s == ' ') cont = 1; if(*s != ' ' && cont == 1){ cont = 0; return 1 + NumPalabras((++s));} else return 0 + NumPalabras((++s)); } puse en negrita las cosas que le agregue a tu codigo y subraye los comentarios. PD: no compile el codigo. vale perrin se agradece, lo unico conflictivo, que borraste la lista de palabras por ejemplo Hola tiene 4 caracteres. chao tiene 4 caracteres. =/ y eso me causa conflicto ahora para imprimirlas =/. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now