C/Visual C - Ordenamiento en C

 
Vista:

Ordenamiento en C

Publicado por Carlos (3 intervenciones) el 15/03/2007 03:42:49
Hola, necesito ayuda URGENTE con el codigo para un programa que me importe un erchivo plano (xxx;xxx) de mil datos; este debe llenar un vector y ademas ordenarlo por alguna de las dos columnas.

Hasta ahora tengo esta estructura, pero no logro llenar el vector, aqui lo ordeno supuestamente por seleccion directa:

#include <stdio.h>
#define N 10

void main()
{
int i,sw=0,num=0,c=0,l;//Menor,k,j;
int Vec[N] = {0};

while((l=getchar())!=EOF)
{
if(l==59)
sw=1;

if((sw==0)&&(l!=59))
{
if(l!=10)
{
l-=48;
num=(num*10)+l;
}
else
{
Vec[c]=num;
sw=0;
num=0;
c++;
}
}
/*else
{
sw=0;
printf("\n");
}*/
}

//Mostrar vector desordenado
printf("Vector desordenado:\n");
for(i=0;i<N;i++)
printf("%d\n",Vec[i]);

/* for(i=0;i<N;i++)
{
Menor = Vec[i];
k = i;
for(j=i+1;j<N;j++)
{
if (Vec[j] < Menor)
{
Menor = Vec[j];
k = j;
}
}

Vec[k] = Vec[i];
Vec[i] = Menor;
}

//Mostrar vector ordenado
printf("\nVector ordenado por Selección Directa.\n");
for(i=0;i<N;i++)
printf("%d\n",Vec[i]);*/
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ordenamiento en C

Publicado por Nelek (816 intervenciones) el 15/03/2007 08:16:33
Hola,

En primer lugar...

Cuando tu programes, hazlo como quieras, pero ganarias en rapidez de respuesta si, cuando haces preguntas en un foro como este, reescribieras el codigo para hacerlo mas claro y legible a los que pueden llegar a echarte una mano.

Yo, en mi programa, uso tambien variables cortas y demas, pero cuando pregunto aqui, lo reescribo usando cosas mas legibles. En lugar de poner " CObDt* pOd " (Puntero a Objeto de Datos), pues pongo CMyObject* pObj

En segundo lugar (y ya en relacion a tu codigo), unas preguntas:

Cuando dices 1000 datos te refieres a 1000 lineas con el formato "(xxx;xxx)"? Es decir 1000 veces 9 caracteres, donde los parentesis delimitan el dato compuesto por dos grupos de tres caracteres o numeros, separados entre si por el punto y coma. O el largo de cada uno es indefinido y se sabe por los parentesis?

Por otro lado...

int Vec[N] = {0}; <--- no se hasta que punto tengo razon pero esa declaracion creo que se da de tortas.

Si quieres incializar a cero un vector de N elementos has de hacerlo con:
int Vec[N];
for (int i = 0; i < N; i++)
Vec[i] = 0;

Si es un vector de pocos elementos y cuya inicializacion es conocida entonces se hace:
int Vec[] = {0,1,2,3,4,5,6,7,8,9};
Aqui le estoy diciendo que hay 10 elementos y que sus valores inciales son los especificados. Pero el numero de elementos queda fijado al numero de elementos que hay entre las llaves.

Por lo que tu declaracion... Por un lado dices que quieres un vector de N elementos, pero por otro le estas diciendo que el vector es de 1 elemento cuyo valor es 0.

O al menos eso es lo que yo creo/tengo entendido, que puede que este equivocado totalmente, en cuyo caso...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ordenamiento en C

Publicado por Carlos (3 intervenciones) el 16/03/2007 18:25:20
Hola, te aclaro: de la forma int Vec[N] = {0}; si incializo un vector con valores de cero, ya que esto me ayuda a limpiarlo de cualquier residuo que traiga en memoria, no se si a vos te a pasado pero a mi si que el vector llega con unos valores que no tienen nada que ver con mi programa.

El vector esta dimencionado de la forma int Vec[N]; por que antes de iniciar el programa principal ya habia declarado una variable N (#define N 10) que me permite utilizar esta variable en cualquier espacio del programa sin necesidad de declararla en ningun otro lugar; ademas esta es de 10 por que si el codigo me funciona para 10 datos me funciona para mil.

Por otro lado, la idea del programa es precisamente que el vector tome los datos del archivo plano, por eso no lo inicio con valores como vos me decis que lo declare; ademas, la verdad, no estoy acostumbrado a utilizar los foros por lo que pense que el codigo estaba claro.

El formato del archivo es:

383;Abbb
863;Cddd
790;Abbb
762;Cddd
113;Abbb
312;Cddd
878;Abbb
319;Cddd
393;Abbb
726;Cddd

Hasta el EOF.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ordenamiento en C

Publicado por Carlos (3 intervenciones) el 16/03/2007 18:32:13
El programa se llama de la siguiente manera por dos:

E:\Algoritmos\Debug\ordenar.exe<plano.txt

Asi el me imprime en pantalla el vector con los valores sea ordenado o no; el codigo ascii de ; es 59 y de salto de linea es 10, lo que en c se debe colocar como \n y ';'.

#include <stdio.h>
#define N 10

void main()
{
int i,sw=0,num=0,c=0,l;//Menor,k,j;
int Vec[N] = {0};

//este codigo captura al archivo plano y llena el vector.

while((l=getchar())!=EOF)
{
if(l==59)
sw=1;

if((sw==0)&&(l!=59))
{
if(l!=10)
{
l-=48;
num=(num*10)+l;
}
else
{
Vec[c]=num;
sw=0;
num=0;
c++;
}
}
/*else
{
sw=0;
printf("\n");
}*/
}

//Mostrar vector desordenado
printf("Vector desordenado:\n");
for(i=0;i<N;i++)
printf("%d\n",Vec[i]);

// este es el procedimiento de la funcion hace el ordenamiento del vector por el metodo de Selección Directa.

/* for(i=0;i<N;i++)
{
Menor = Vec[i];
k = i;
for(j=i+1;j<N;j++)
{
if (Vec[j] < Menor)
{
Menor = Vec[j];
k = j;
}
}

Vec[k] = Vec[i];
Vec[i] = Menor;
}

//Mostrar vector ordenado
printf("\nVector ordenado por Selección Directa.\n");
for(i=0;i<N;i++)
printf("%d\n",Vec[i]);*/
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar