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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  La palabra mas larga
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: La palabra mas larga  (Leído 11,415 veces)
Jesusm1229

Desconectado Desconectado

Mensajes: 11


Ver Perfil
La palabra mas larga
« en: 14 Junio 2015, 03:06 am »

Buenas, chicos. Primero que todo quiero pedir disculpa por si coloqué este post donde no es; es que soy nuevo y no he leído las reglas del foro. Bueno, a lo que iba: pueden ayudarme con esta parte de un código que consiste en mostrar la palabra mas larga de una oración? he logrado mostrar la cantidad de letras de la mayor pero no la palabra en sí. Tengo una idea con un arreglo bidimensional pero no he podido expreasrla.
PD: no puedo usar la librería string. Gracias

Código
  1. #include<iostream.h>
  2.  
  3. #define max 50
  4.  
  5. void main(){
  6. int i,f,c,cont,mayor;
  7. char frase[max], frasemayor[max/2][max];
  8.  
  9. cout<<"introduzca una frase: ";gets(frase);
  10.  
  11. for(i=0,f=0,c=0,mayor=0;frase[i]!=NULL;)
  12. if(frase[i]!=32)
  13. {while(frase[i]!=32 && frase[i]!=NULL)
  14. frasemayor[f][c++]=frase[i++];
  15.  
  16. if(c>mayor)mayor=c;
  17.  
  18. frasemayor[f][c]=NULL;
  19. f++;c=0;
  20. }
  21. else i++;
  22.  
  23. cout<<mayor<<endl;}



Muchísimas gracias a todos por sus consejos. Considero que el programa funciona de forma eficiente y no me ha dado errores. A continuación voy a postear aquí el resultado esperando que sirva de ayuda para demás estudiantes.

Código:
#include <stdio.h>
#include<iostream.h>

#define max 50

void main(){
int i,f,c,j,mayor,cambio, v ;
char frase[max], frasemayor[max/2][max];
char *p;

cout<<"introduzca una frase: ";gets(frase);

for(i=0,f=0,c=0,mayor=0;frase[i]!=NULL;)
 if(frase[i]!=32)
{while(frase[i]!=32 && frase[i]!=NULL)
frasemayor[f][c++]=frase[i++];

if(c>mayor){mayor=c;p=frasemayor[f];}

frasemayor[f][c]=NULL;
f++;c=0;
}
 else i++;



cout<<"la palabra mas larga es \'";
printf("%s",p);
cout<<"\' y tiene "<<mayor<<" letras"<<endl;

}


« Última modificación: 14 Junio 2015, 23:51 pm por Jesusm1229 » En línea

user-marcos

Desconectado Desconectado

Mensajes: 159


Ver Perfil
Re: La palabra mas larga
« Respuesta #1 en: 14 Junio 2015, 11:45 am »

Prodrías usar algo asi:
Función auxilar para contar el tamaño del vector char
Código
  1. int Size(char c[])
  2. {
  3.  int n;
  4.  bool sal = n = 0;
  5.  
  6.  for(n; sal == false; n++)
  7.    if(c[n] == '\0')
  8.      sal = true;
  9.  return n - 1;
  10. }
  11.  

Usando esta compruebas quien es la mayor:
Código
  1.  mayor = 0;
  2.  for(int j = 1; j < (mayor/2) ; j++)
  3.    if(Size(frasemayor[mayor]) < Size(frasemayor[j]))
  4.      mayor = j;
  5.  


« Última modificación: 14 Junio 2015, 11:46 am por user-marcos » En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: La palabra mas larga
« Respuesta #2 en: 14 Junio 2015, 15:29 pm »

Puedes ir contando los caracteres a medida que recorres la cadena, esto haría que el orden de la complejidad temporal sea de O(n) [orden lineal]

Te dejo un pseudocódigo:

Código:
CalculaPalabraMasLarga(cadena)
begin
cadena max = "";
cadena checking = "";
for i=0 to Length(cadena) do
begin
  if(cadena[i]!=' ')
    begin
      concat(checking, checking[i]);
    end
  else
    begin
      if(Length(checking)>Length(max))
        begin
           max = checking;
        end
      checking = "";
    end
end
return max;
end;

Mod: El pseudocódigo está completo, le había dado guardar sin haber terminado de escribirlo :P

Salu2s
« Última modificación: 14 Junio 2015, 15:34 pm por DarK_FirefoX » En línea

Jesusm1229

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: La palabra mas larga
« Respuesta #3 en: 14 Junio 2015, 15:46 pm »

Puedes ir contando los caracteres a medida que recorres la cadena, esto haría que el orden de la complejidad temporal sea de O(n) [orden lineal]

Te dejo un pseudocódigo:

Código:
CalculaPalabraMasLarga(cadena)
begin
cadena max = "";
cadena checking = "";
for i=0 to Length(cadena) do
begin
  if(cadena[i]!=' ')
    begin
      concat(checking, checking[i]);
    end
  else
    begin
      if(Length(checking)>Length(max))
        begin
           max = checking;
        end
      checking = "";
    end
end
return max;
end;

Mod: El pseudocódigo está completo, le había dado guardar sin haber terminado de escribirlo :P

Salu2s


Gracias a ambos por la ayuda. Pero no entiendo algo, tanto max como checking debería considerarlos cadenas de caracterers, o sea, char a[max] y char b[lenght]?


En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: La palabra mas larga
« Respuesta #4 en: 14 Junio 2015, 16:19 pm »


Gracias a ambos por la ayuda. Pero no entiendo algo, tanto max como checking debería considerarlos cadenas de caracterers, o sea, char a[max] y char b[lenght]?


Exacto! Son cadenas de caracteres donde irás almacenando la cadena mayor durante la ejecución y que será cambiada por otra si se encuentra otra mayor. Y en checking irás formando la cadena mientras lees de la cadena original!

Espero entiendas, sino, pregunta!

Salu2s
En línea

Jesusm1229

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: La palabra mas larga
« Respuesta #5 en: 14 Junio 2015, 16:26 pm »

Exacto! Son cadenas de caracteres donde irás almacenando la cadena mayor durante la ejecución y que será cambiada por otra si se encuentra otra mayor. Y en checking irás formando la cadena mientras lees de la cadena original!

Espero entiendas, sino, pregunta!

Salu2s

Muchas gracias. Voy a ponerme con el código y lo postearé aqui :)
En línea

antkk

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: La palabra mas larga
« Respuesta #6 en: 14 Junio 2015, 16:31 pm »

Habéis probado a usar la función strlen() de la librería cstring?
En línea

Jesusm1229

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: La palabra mas larga
« Respuesta #7 en: 14 Junio 2015, 16:43 pm »

Habéis probado a usar la función strlen() de la librería cstring?

Hola, no, no puedo usar esa librería. Tiene que ser paso por paso..
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: La palabra mas larga
« Respuesta #8 en: 14 Junio 2015, 17:39 pm »

De la misma forma que guardas el entero "mayor", puedes guardar un char* que sea el comienzo de la palabra (o un índice, como prefieras).
Luego basta sacar por pantalla desde el char* o el índice hasta el indice + mayor.
En línea

Jesusm1229

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: La palabra mas larga
« Respuesta #9 en: 14 Junio 2015, 18:11 pm »

Exacto! Son cadenas de caracteres donde irás almacenando la cadena mayor durante la ejecución y que será cambiada por otra si se encuentra otra mayor. Y en checking irás formando la cadena mientras lees de la cadena original!

Espero entiendas, sino, pregunta!

Salu2s

Hola, disculpa que te moleste tanto, pero es que no sé si no estoy dandole el valor correcto a las variables pero no puedo sacar la cadena de caracter mayor. es decir, entiendo que para comparar la longitud de las palabras se debe usar un contador pero me sale un error cuando quiero mostrar los caracteres...
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines