Foro de elhacker.net

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



Título: Por que no se ordena?
Publicado por: manutmac en 15 Noviembre 2012, 21:23 pm
este problema me esta matando, soy el mismo de otras veces quiero ordenarlo alfabeticamente. No veo fallos pero no se ordena. aqui os dejo mi intento

#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 pos[200];
    int i, aux, j;
 
    for(i=0;i<200;i++)
        pos[i ] = i;
 
    for(i=1;i<200;i++)
        for(j=0;j<(200-i);j++)
            if(pnames[j]>pnames[j+1])
            {
                aux = pos[j];
                pos[j] = pos[j+1];
                pos[j+1] = aux;
 
            }
 
    for(i=0;i<200;i++)
        printf("%s\n", pnames[pos[ i ] ] );
system("pause");
    return 0;
}


Título: Re: Por que no se ordena?
Publicado por: rir3760 en 15 Noviembre 2012, 21:36 pm
El problema se debe a que estas comparando las direcciones de memoria con:
Código
  1. if (pnames[j] > pnames[j + 1]){
  2.   aux = pos[j];
  3.   pos[j] = pos[j + 1];
  4.   pos[j + 1] = aux;
  5. }

En su lugar debes utilizar la función "strcmp" (prototipo en <string.h>):
Código
  1. if (strcmp(pnames[pos[j]], pnames[pos[j + 1]]) > 0){
  2.   aux = pos[j];
  3.   pos[j] = pos[j + 1];
  4.   pos[j + 1] = aux;
  5. }

Un saludo


Título: Re: Por que no se ordena?
Publicado por: manutmac en 16 Noviembre 2012, 23:43 pm
muchas gracias ahora funciona a la perfeccion.  ;D