Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: manutmac en 13 Noviembre 2012, 15:28 pm



Título: no entiendo porque pero no funciona ( ordenar array )
Publicado por: manutmac en 13 Noviembre 2012, 15:28 pm
Lo que quiero es que me cambie las posiciones del array pero no funciona y no se por que. Necesito asi para poder asi ordenarlas segun un segundo criterio en caso de igualdad de longitud de la palabra




#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {

const char *const pnames[200] = {"Muhittin", "Mufit", "Serkan", "Kaan",
"Izzet", "Muzaffer", "Umid", "Sami", "Uykura", "Kayhan", "Yakup", "Mert",
"Cetin", "Ilknur", "Gokhan", "Salah", "Irem", "Korhan", "Isin", "Berk",
"Tacettin", "Duygu", "Figen", "Funda", "Fuat", "Arda","Muhsin", "Guray",
"Necati", "Kadriye", "Gurbuz", "Hamide", "Volkan", "Selami", "Esra",
"Cumhur", "Can", "Aleyna", "Salih", "Kamuran", "Ferhan", "Furuze",
"Sukufe", "Sidre", "Cahit", "Sercan", "Jale", "Bilge", "Tijen", "Tufan",
"Zeliha", "Cevdet", "Burak", "Ufuk", "Zarife", "Bengisu", "Melda", "Zafer",
"Yelda", "Didar", "Hande", "Cumali", "Dilek", "Kemal", "Hasan", "Ismail",
"Fatma", "Burcu", "Siyami", "Busra", "Gizem", "Ramize", "Sezai", "Polat",
"Melike", "Umut", "Serencan", "Uzeyir", "Kamile", "Deniz", "Veysel",
"Emrehan", "Gulcan", "Ender", "Furkan", "Veli", "Muhtesem", "Necmettin",
"Osman", "Perihan", "Didem", "Tunc", "Irmak","Petek", "Sebahat", "Halime",
"Mahir", "Leyla", "Eda", "Ali", "Ibrahim", "Berivan", "Ilter", "Metin",
"Bozkurt", "Olgun", "Hudai", "Esin", "Taylan", "Memduh", "Selimcan",
"Ayse", "Baran", "Keriman", "Tankurt", "Feramuz", "Abdullah", "Ferda",
"Kuntay", "Ceyhan", "Edip", "Nuri", "Mahide", "Selda", "Murathan",
"Celebi", "Talha", "Mehtap", "Ece", "Abdurrahman", "Baki", "Anil", "Unsal",
"Melahat", "Sezgin", "Miran", "Cansel", "Sibel", "Aliye", "Derya", "Naime",
"Gulden", "Konar","Soner", "Gulistan", "Mestan", "Galip", "Lamia", "Hakan",
"Ugur", "Ege", "Husnu", "Sumbul", "Mustafa", "Simge", "Selva", "Mehmet",
"Irfan", "Cezmi", "Turgut", "Konur", "Aysegul", "Mesut", "Ceren", "Adem",
"Ferhat", "Murat", "Yunus", "Beyhan", "Erdem", "Sunusi", "Ata", "Sencer",
"Handan", "Cihan", "Levent", "Aykut", "Ferit", "Demir", "Kerim", "Feraye",
"Caner", "Baris", "Ozlem", "Ihsan", "Meltem","Kurthan", "Okan", "Huseyin",
"Sezgi", "Celik", "Cemal", "Sinan", "Sefa", "Cigdem", "Leman", "Nejla",
"Gurkan", "Gulsum", "Damla",};

int length[200];
int pos[200];
int aux;

for( int i=0; i<200; i++)
length = strlen(pnames);
for( int i=0; i<200; i++)
pos = i;

for(int i = 0; i < 200; i++){
        for(int j = 0; j < 199; j++){
        if(length[j]>length[j+1]){
        aux=pos[j];
        pos[j]=pos[j+1];
        pos[j+1]=aux;}
             }
    }
       for( int i=0; i<200; i++)
        printf("%i ", pos);


system("\npause");


return 0;

}


Título: Re: no entiendo porque pero no funciona ( ordenar array )
Publicado por: naderST en 13 Noviembre 2012, 16:11 pm
Código
  1. length = strlen(pnames);
  2.  

Recuerda que length es un arreglo y debes indicar la posición.


Título: Re: no entiendo porque pero no funciona ( ordenar array )
Publicado por: manutmac en 13 Noviembre 2012, 16:57 pm
si esta puesto, pero no se por que no se muestra en el mensaje


Título: Re: no entiendo porque pero no funciona ( ordenar array )
Publicado por: naderST en 13 Noviembre 2012, 17:23 pm
Código
  1. for( int i=0; i<200; i++)
  2. length[i] = strlen(pnames[i]);
  3. for( int i=0; i<200; i++)
  4. pos[i] = i;
  5.  

Asumo que esto es lo que estas tratando de hacer...

PD: Veo que estas programando en C y no puedes declarar i en el for(), es decir, debes declararlo fuera:
Código
  1. int i = 0;
  2. for( ... ){
  3. }


Título: Re: no entiendo porque pero no funciona ( ordenar array )
Publicado por: manutmac en 13 Noviembre 2012, 20:56 pm
no debe ser el problema por que tambien lo he intentado hacer asi, pero en el codigo no hay problemas no? no entiendo que pasa.
Muchas gracias de todas formas


Título: Re: no entiendo porque pero no funciona ( ordenar array )
Publicado por: naderST en 13 Noviembre 2012, 22:07 pm
Tu algoritmo de ordenamiento tiene ciertos detalles, por ejemplo no haces el intercambio en el arreglo length. Hay varios algoritmos de ordenamiento, te recomiendo investigues sobre ellos. Aquí te dejo un ejemplo haciendo uso del ordenamiento de burbuja:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. const char *const pnames[200] = {"Muhittin", "Mufit", "Serkan", "Kaan",
  5. "Izzet", "Muzaffer", "Umid", "Sami", "Uykura", "Kayhan", "Yakup", "Mert",
  6. "Cetin", "Ilknur", "Gokhan", "Salah", "Irem", "Korhan", "Isin", "Berk",
  7. "Tacettin", "Duygu", "Figen", "Funda", "Fuat", "Arda","Muhsin", "Guray",
  8. "Necati", "Kadriye", "Gurbuz", "Hamide", "Volkan", "Selami", "Esra",
  9. "Cumhur", "Can", "Aleyna", "Salih", "Kamuran", "Ferhan", "Furuze",
  10. "Sukufe", "Sidre", "Cahit", "Sercan", "Jale", "Bilge", "Tijen", "Tufan",
  11. "Zeliha", "Cevdet", "Burak", "Ufuk", "Zarife", "Bengisu", "Melda", "Zafer",
  12. "Yelda", "Didar", "Hande", "Cumali", "Dilek", "Kemal", "Hasan", "Ismail",
  13. "Fatma", "Burcu", "Siyami", "Busra", "Gizem", "Ramize", "Sezai", "Polat",
  14. "Melike", "Umut", "Serencan", "Uzeyir", "Kamile", "Deniz", "Veysel",
  15. "Emrehan", "Gulcan", "Ender", "Furkan", "Veli", "Muhtesem", "Necmettin",
  16. "Osman", "Perihan", "Didem", "Tunc", "Irmak","Petek", "Sebahat", "Halime",
  17. "Mahir", "Leyla", "Eda", "Ali", "Ibrahim", "Berivan", "Ilter", "Metin",
  18. "Bozkurt", "Olgun", "Hudai", "Esin", "Taylan", "Memduh", "Selimcan",
  19. "Ayse", "Baran", "Keriman", "Tankurt", "Feramuz", "Abdullah", "Ferda",
  20. "Kuntay", "Ceyhan", "Edip", "Nuri", "Mahide", "Selda", "Murathan",
  21. "Celebi", "Talha", "Mehtap", "Ece", "Abdurrahman", "Baki", "Anil", "Unsal",
  22. "Melahat", "Sezgin", "Miran", "Cansel", "Sibel", "Aliye", "Derya", "Naime",
  23. "Gulden", "Konar","Soner", "Gulistan", "Mestan", "Galip", "Lamia", "Hakan",
  24. "Ugur", "Ege", "Husnu", "Sumbul", "Mustafa", "Simge", "Selva", "Mehmet",
  25. "Irfan", "Cezmi", "Turgut", "Konur", "Aysegul", "Mesut", "Ceren", "Adem",
  26. "Ferhat", "Murat", "Yunus", "Beyhan", "Erdem", "Sunusi", "Ata", "Sencer",
  27. "Handan", "Cihan", "Levent", "Aykut", "Ferit", "Demir", "Kerim", "Feraye",
  28. "Caner", "Baris", "Ozlem", "Ihsan", "Meltem","Kurthan", "Okan", "Huseyin",
  29. "Sezgi", "Celik", "Cemal", "Sinan", "Sefa", "Cigdem", "Leman", "Nejla",
  30. "Gurkan", "Gulsum", "Damla",};
  31.  
  32. int main()
  33. {
  34.    int length[200], pos[200];
  35.    int i, aux, j;
  36.  
  37.    for(i=0;i<200;i++)
  38.    {
  39.        pos[i] = i;
  40.        length[i] = strlen(pnames[i]);
  41.    }
  42.  
  43.    for(i=1;i<200;i++)
  44.        for(j=0;j<(200-i);j++)
  45.            if(length[j]>length[j+1])
  46.            {
  47.                aux = pos[j];
  48.                pos[j] = pos[j+1];
  49.                pos[j+1] = aux;
  50.  
  51.                aux = length[j];
  52.                length[j] = length[j+1];
  53.                length[j+1] = aux;
  54.            }
  55.  
  56.    for(i=0;i<200;i++)
  57.        printf("%s\n", pnames[pos[i]]);
  58.    return 0;
  59. }
  60.  

Puedes revisar el siguiente enlace para más información de los algoritmos de ordenamiento:

http://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento


Título: Re: no entiendo porque pero no funciona ( ordenar array )
Publicado por: manutmac en 14 Noviembre 2012, 17:50 pm
ok, muchas gracias. Ahora lo entendi. Si no pongo el length no se va ordenando y la pos no cambia tampoco. Me ofusque. Muchas gracias de verdad