Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Ordenamiento (https://www.clubdelphi.com/foros/showthread.php?t=70031)

richi1010 26-09-2010 04:56:57

Ordenamiento
 
Necesito orden cadenas por el método de la burbuja, tengo este códogo pero no las ordena, me podrian decir que puedo hacer?? de antemano gracias.

Código:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define MAXCAD 5
#define LONGCAD 20

char cArr[MAXCAD][LONGCAD];
int iContaPasada, iContaComp;
int  i, j;
char cArrAux[LONGCAD];


void main(void)
{
srand (time(NULL));   

for(i=0; i<MAXCAD; i++)
{   
    for(j=0; j<LONGCAD; j++)
      cArr[i][j]=(rand()%9);
   
}
for(i=0; i<MAXCAD; i++)
{
    printf("\n");
    for(j=0; j<LONGCAD; j++)
   
        printf("%d",cArr[i][j]);
   
}
    for (iContaPasada=0; iContaPasada<MAXCAD-1; iContaPasada++)
            {
            for(iContaComp=0; iContaComp<LONGCAD-1; iContaComp++)
            {
                    if (strcmp(cArr[iContaComp],cArr[iContaComp+1])>0)
                    {                                               
                        strcpy(cArrAux,cArr[iContaComp]);
                        strcpy(cArr[iContaComp],cArr[iContaComp+1]);
                        strcpy(cArr[iContaComp+1],cArrAux);
                    }
                    }
                    }

    printf("\n");

    for(i=0; i<MAXCAD; i++)
        {
    printf("\n");
    for(j=0; j<LONGCAD; j++)
   
        printf("%d",cArr[i][j]);
    } 

getch();
}


Ñuño Martínez 26-09-2010 18:37:02

No lo he comprobado, pero creo que la condición de los bucles de ordenación no está bien del todo. Creo que sobra el "menos uno", pero no estoy seguro.

Lord Delfos 26-09-2010 19:27:30

Bueno, no tengo C++ instalado, pero me parece que la condición del segundo for está mal.

Debería ser < MAXCAD - 1 en ambos casos. ¿O me estoy equivocando?

richi1010 26-09-2010 20:04:41

Ya intente los dos casos que me dijeron, pero en ambos me da error, no se que hacer , pero gracias por responder.

Lord Delfos 26-09-2010 22:06:14

Amigo richi1010, para que podamos ayudarte pregunto: ¿Cuál es el error que da? ¿En qué linea?

Saludongos.

richi1010 26-09-2010 22:08:31

el problema es que a la hora de imprimir los datos, no salen ordenados y me da oras cadenas diferentes a las que genero al principi, y supongo que es en los strcmp

escafandra 27-09-2010 01:52:31

Código:

char** Nombres;

// Cargamos en Nombres las cadenas...
// Nombres[0] = "Cadena1"
//.......


// Ordenar

char  *c;
int  n, m = 1;

// Ordena por orden alfabético
for(m=1;m;) for(n=0,m=0; n<NNombres-1; n++)
  if(stricmp(Nombres[n], Nombres[n+1])>0 && *Nombres[n+1])
  { c=Nombres[n]; Nombres[n]=Nombres[n+1]; Nombres[n+1]=c; m=1;}

Saludos.

richi1010 28-09-2010 06:19:35

Muchas gracias por su ayuda, solo me queda una última duda, como le pongo el nulo a mis cadenas??????
Gracias

escafandra 28-09-2010 18:18:42

Cita:

Empezado por richi1010 (Mensaje 377708)
...como le pongo el nulo a mis cadenas??????

¿Te refieres al nulo finnal de cadena?

Se pone sólo cuando las declaras o usas las funciones de tratamiento de cadena strcpy, strcat, wsprintf....
Siempre lo puedes poner a mano considerando que una cadena es un array:

Código:

cadena[n] = 0;
Saludos.


La franja horaria es GMT +2. Ahora son las 04:44:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi