Jump to content

Recommended Posts

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;

}

Imagen IPB

 

 

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

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

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

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

#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

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

#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 by el_caxulo
Link to comment
Share on other sites

#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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...