como ordenar 3 palabras alfabeticamente

Iniciado por fernandoprog1, 9 Junio 2015, 15:44 PM

0 Miembros y 2 Visitantes están viendo este tema.

Regexp

#10
Cita de: engel lex en 10 Junio 2015, 02:22 AM
Sigo apoyando lo que dice Regexp pero corrijo algo burbuja no es n2, es n! Ya que cada ciclo mayor resuelve uno :p
[...]

Sino mal recuerdo es O(N2), o al menos, en el peor de todos los casos. El caso "medio" es un poco menor, pero para valores muy grandes de N, en una ecuación de segundo grado A*N2+B*N+C puede aproximarse simplemente a N2. Como dirían por ahí, hay infinitos más grandes que otros. http://www.c.conclase.net/orden/?cap=burbuja

De ser N! sería totalmente imposible de usar :rolleyes:, dado que N! es aún mayor que la exponencial desde un cierto N.

N! >= 2N, para toda N>=4, prueba por inducción

Cuando lo que se busca es que los algoritmos tiendan a tener complejidad logarítmica, dado que

log(N)<=N<=eN, para toda N>=1, prueba por crecimiento y decrecimiento de las funciones.

El caso N2 es especial, para valores pequeños de N, no es problemático... en cuanto crece.. el algoritmo no escala.

En cuanto a hacerlo por condicionales... la mejor manera sería como ha dicho nuestro compañero engel lex, por fuerza bruta, en tal caso para N elementos pueden existir N-1 posibles cadenas que vienen después (o antes, dependiendo de la implementación), y así, al ser sólo 3 cadenas de caracteres, tendrías 3*2*1=3!=6 posibles secuencias de cadenas ordenadas.

Saludos
No todo el que deambula está perdido

engel lex

Sorry, tienes razón, confundí conceptos ;)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

engel lex

responde por el foro, para eso el tema està abierto -.-

Citarno entendí que me quisite decir con ese código yo probe con eso pero no puedo hacer andar la comparación entre las 3, me hace solo 2 comparaciones,
puedes ayudarme?

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>



int main()

{

char pal1[20], pal2[20], pal3[20];

printf("ingrese una palabra:");

gets(pal1);

printf("ingrese la segunda palabra:");

gets(pal2);
printf("ingrese tercera palabra");
gets(pal3);

("\n Las palabras ordenadas alfabeticamente son: \n");


if(strcmp (pal1,pal3)<0)                  //(pal1, pal2)<0)

{
  pal1>pal3 & pal3>pal1;
  printf ("%s\n",pal1, pal3);

}

else{
    pal3<pal1 & pal1<pal3;
   printf ("%s\n",pal3, pal1);

}

if(strcmp (pal1,pal2)<0)                  //(pal1, pal2)<0)

{
  pal1>pal2 & pal1>pal2;
  printf ("%s\n",pal1, pal2);

}

else{
    pal2<pal1 & pal1<pal2;
   printf ("%s\n",pal2, pal1);
}

return 0;

}

cuando dije

Si(p1>p2 y p2>p3){
  imprimir p1, p2, p3
}


p1 > p2 es una comparación de strings, sería strcmp, "y" es comparador binario y es "&&", dejando el código de esta manera

if(strcmp (pal1, pal2)<0 && strcmp (pal2, pal3)<0){
   printf("%s, %s, %s\n",pal1,pal2,pal3);
}


y claramente los casos no los entendiste...
son 6 posibles casos
p1>p2>p3
p1>p3>p2
p2>p1>p3
p2>p3>p1
p3>p2>p1
p3>p1>p2


entonces los expreso como
Si(p1>p2 y p2>p3)
lo que se convierte en código como
if(strcmp(p1,p2)>0 && strcmp(p2,p3)

espero se entienda
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

fernandoprog1

Gracias engel lex, ahora entendí perfectamente! el código que muestro aquie anda perfectamente y compara alfabéticamente 3 palabras, ahora si quiero comprar 4  palabras quedaría algo asi  p1>p2>p3>p4 ????



#include <stdio.h>

#include <string.h>

#include <stdlib.h>



int main()



{



char pal1[20], pal2[20], pal3[20];

printf("\nINGRESE PRIMER PALABRA:  \n");

gets(pal1);

printf("\nINGRESE SEGUNDA PALABRA:  \n");

gets(pal2);

printf(" \nINGRESE TERCERA PALABRA:  \n");

gets(pal3);



("\n  LAS PALABRAS ORDENADAS ALFABETICAMENTE SON:  \n");


printf("\n\n");
if(strcmp (pal1, pal2)<0 && strcmp (pal2, pal3)<0){

printf("%s, %s, %s\n",pal1,pal2,pal3);
}
if(strcmp (pal1, pal3)<0 && strcmp (pal3, pal2)<0){

printf("%s, %s, %s\n",pal1,pal3,pal2);
}

if(strcmp (pal2, pal1)<0 && strcmp (pal1, pal3)<0){

printf("%s, %s, %s\n",pal2,pal1,pal3);
}

if(strcmp (pal2, pal3)<0 && strcmp (pal3, pal1)<0){

printf("%s, %s, %s\n",pal2,pal3,pal1);
}

if(strcmp (pal3, pal2)<0 && strcmp (pal2, pal1)<0){

printf("%s, %s, %s\n",pal3,pal2,pal1);
}

if(strcmp (pal3, pal1)<0 && strcmp (pal1, pal2)<0){

printf("%s, %s, %s\n",pal3,pal1,pal2);
}


return 0;


}

engel lex

si, sería así siendo ahora 24 casos si no me equivoco
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

fernandoprog1

Gracias engel lex, ahora para no tener que usar tantos if que puedo hacer ?

engel lex

lee mi segunda respuesta (la que tiene código)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

fernandoprog1

#17
este es el programa que me mostraste engel lex , ahora una ves que me lo compila me pide los 3 datos pero no me muestra nada, por que pasa eso ?




#include <stdlib.h>

#include <string.h>

#include <stdio.h>


int main()

{




int i, j, n;

char palabras[3][20];
char intercambio[20];

printf("ingrese primer palabra");
gets(palabras);
printf("ingrese segunda palabra");
gets(palabras);
printf("ingresse tercera palabra");
gets(palabras);


for(i=0;i<3-1;i++)

for(j=0;j<3-1-i;j++)

  {

n=strcmp (palabras[j], palabras[j+1]);//se comparan

if(n > 0)

{

strcpy (intercambio,palabras[j]);//coloco el valor en un espacio temporal

strcpy (palabras[j],palabras[j+1]);//copio el otro al valor ya salvado

strcpy (palabras[j+1],intercambio);//coloco el primero en el final

}

  }

}

тαптяα

Te faltan los printfs..

printf("%s, %s, %s\n",pal3,pal1,pal2);

engel lex

reccomiendo revisar un tutorial sobre arrays (o arreglos) en c++

Código (cpp) [Seleccionar]
printf("ingrese primer palabra");
gets(palabras[0]);
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.