Autor
|
Tema: como ordenar 3 palabras alfabeticamente (Leído 24,157 veces)
|
fernandoprog1
Desconectado
Mensajes: 29
|
/*Este programa escribe dos palabras introducidas por el usuario por orden alfabético.*/ #include <stdlib.h> #include <string.h> #include <stdio.h> int main() { char pal1[20], pal2[20]; printf(“escriba una palabra : “ ); printf(“\n Escriba otra palabra : “ ); printf(“\n Las palabras ordenadas alfabeticamente son : \n” ); //strcmp compara lexicográficamente dos cadenas. //si pal1<pal2 devuelve un número negativo. //si pal1>pal2 devuelve un numero positivo. //si pal1=pal2 devuelve 0. else { return 0; }
como logro ordenar 3 palabras alfabéticamente nesecito ayuda=)
|
|
|
En línea
|
|
|
|
engel lex
|
puedes usar cualquier metodo de ordenamiento... te recomiendo ordenamiento por burbuja, seguro en wiki consigues mucha info
|
|
|
En línea
|
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
Desconectado
Mensajes: 29
|
que tipo de método puedo aplicar ??
|
|
|
En línea
|
|
|
|
user-marcos
Desconectado
Mensajes: 159
|
Las letras se pueden comparar igual que los números, de hecho son números que corresponden a una tabla ascii. Por lo tanto puedes comprar letra por letra: if(pal1[i] > pal2[i])
|
|
|
En línea
|
|
|
|
engel lex
|
sería util usar un array para esto, si no, es muy trabajoso se hace de la siguiente forma, colocaré una sección de codigo sin más, pruebala y si tierre errores corrigela; int i, j, n; char palabras[3][20]; char intercambio[20]; /* aqui el resto del codigo, leer entradas, etc */ 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 } }
el funcionamiento es más o menos esto, si ves el gif hasta el final entiendes el por qué esos 2 ciclos en 3 -1 (largo -1) de la wiki
|
|
« Última modificación: 9 Junio 2015, 17:53 pm por engel lex »
|
En línea
|
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.
|
|
|
Regexp
Desconectado
Mensajes: 22
|
Tal como dice engel lex, con cualquier algoritmo de ordenamiento sirve porque las letras están en orden alfabético en la tabla Ascii, en otras palabras 'a' < 'x' y así. Si quieres verlo con strcmp puedes, dado que n=strcmp( str1, str2 ) devuelve: n=0, si las cadenas de caracteres son iguales n>0, si el primer carácter en el que las cadenas son diferentes tiene mayor valor en la tabla ascii en str1 n<0, si el primer carácter en el que las cadenas son diferentes tiene mayor valor en str2 Por ejemplo si str1="abcz"; str2="abcx", el primer caracter en el que difieren es en el 4 (contando desde 1), y como bien sabemos 'z'>'x', entonces strcmp(str1, str2)>0 Un problema interesante es si las cadenas difieren justamente en una mayúscula o minúscula, por ejemplo "ABCD" y "ABCa", te dará un problema, dado que strcmp devolvería negativo, causando que el algoritmo tenga problemas en el ordenamiento. La solución mas sencilla a esto sería convertir la cadena completa en todo a mayúsculas o todo a minúsculas, recorrer cada letra de cada palabra con la función toupper, o tolower, es decir: palabras [x ][y ]=tolower( palabras [x ][y ] )
De resto te podría recomendar el quick sort, pero a efectos de tres palabras la diferencia en tiempo de ejecución sería mínima, casi imposible de percibir. También puedes hacer tu función strcmp específica para este problema, no es más que tratar una cadena de caracteres como un numero representado en la base "cantidad de caracteres admitidos en las cadenas", 255 con la tabla Ascii básica o 26 sólo con letras. Cada espacio del arreglo viene siendo la cifra correspondiente, donde str[0] es la cifra de mayor importancia (la primera letra). Viéndolo así, simplemente basta con extrapolar el algoritmo para determinar si un numero es mayor que otro que aprendiste en la escuela a algo un poco más general. Un numero es menor que otro si el primero se encuentra a la izquierda del segundo en la recta numérica. Espero sea de ayuda. Saludos
|
|
« Última modificación: 10 Junio 2015, 01:21 am por Regexp »
|
En línea
|
No todo el que deambula está perdido
|
|
|
fernandoprog1
Desconectado
Mensajes: 29
|
#include <stdio.h> #include <stdlib.h> int main() { char pal1[20], pal2[20], pal3[20]; printf("ingrese una palabra:"); printf("ingrese la segunda palabra:"); printf("ingrese la tercera palabra:"); ("\n Las palabras ordenadas alfabeticamente son: \n"); { } else { } { } else { } { } else { } { } else { } { } else{ } { } else{ } return 0; }
nesecito hacer las comparaciones alfabéticas de esta manera pero no logro poder hacerla !
|
|
« Última modificación: 10 Junio 2015, 01:42 am por fernandoprog1 »
|
En línea
|
|
|
|
Regexp
Desconectado
Mensajes: 22
|
¿Estás obligado a hacerlo sin arreglos?
Los algoritmos de ordenamiento NO son un problema trivial, han sido estudiados ampliamente y son algo bastante complejos. El algoritmo de burbuja es el más "intuitivo" y sencillo de implementar. Si te fijas, son dos for anidados, cada uno recorre la cantidad de elementos a ordenar, es decir 3x3, conforme el numero de palabras crece digamos a N, la cantidad de iteraciones es N2. Es decir, tendrías que hacer... MUY cuidadosamente 9 condicionales para este caso.
Eso lo convierte en una solución muy tediosa de hacer. No te lo recomiendo. A menos que estés obligado porque así te lo han pedido tus profesores (o así dice el libro/ejercicio), hazlo con arreglos.
Saludos
|
|
|
En línea
|
No todo el que deambula está perdido
|
|
|
engel lex
|
Sigo apoyando lo que dice Regexp pero corrijo algo burbuja no es n 2, es n! Ya que cada ciclo mayor resuelve uno :p Silo quieres hacer a fuerza bruta, son 6 casos En pseudo código.... Si(p1>p2 y p2>p3){ imprimir p1, p2, p3 } Si(p1>p3 y p3>p2){ Imprimir p1, p3, p2 } Etc
|
|
|
En línea
|
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
Desconectado
Mensajes: 29
|
si el profesor me dijo que tengo que hacer varios if.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ordenar alfabeticamente en php con numeros
« 1 2 »
PHP
|
dominioswww
|
10
|
8,268
|
17 Junio 2008, 03:02 am
por WHK
|
|
|
Como ordenar alfabéticamente palabras en C++
Programación C/C++
|
loko5755
|
4
|
22,424
|
5 Mayo 2014, 12:04 pm
por eferion
|
|
|
Ordenar una lista alfabeticamente
Programación C/C++
|
maferavagar
|
1
|
5,009
|
17 Mayo 2015, 14:56 pm
por ivancea96
|
|
|
¿como ordenar alfabeticamente array bidimensional?
Programación C/C++
|
Drewermerc
|
3
|
3,308
|
21 Abril 2016, 18:05 pm
por Drewermerc
|
|
|
Nadie me explica como ordenar alfabeticamente mas de tres palabras
Programación C/C++
|
JulianDronger
|
1
|
1,899
|
23 Febrero 2019, 01:44 am
por MCKSys Argentina
|
|