C/Visual C - ayuda!!!

 
Vista:

ayuda!!!

Publicado por bosterito (5 intervenciones) el 25/04/2006 18:03:20
necesito hacer un programa que dado un vector de 20 elementos clasifica simultaneamente en orden creciente sus componentes pares y en orden decreciente los impares.

#include<stdio.h>
#include<conio.h>
main(){
int V[20];
int i;
for(i=0;i<20;i++){
printf("dame un numero");
scanf("%d", v[i]);
}

hasta aqui llegue yo no tengo ni idea decomo seguir pienso q hay que recorrer el array con un For pero no se como hacerlo para clasificarlo simultaneamente. ayuda porfa!!!!
puedo usar la burbuja...

for(i=0;i<10;i++){
if(i!=9){
printf("%d ", vector[i]);}
else{
printf("%d ", vector[i]);}
}
for(i=0;i<10-1;i++){
for(j=0;j<10-1-i;j++){
if(vector[j]>vector[j+1]){
aux=vector[j+1];
vector[j+1]=vector[j];
vector[j]=aux;
printf("\n Cambios: ");
for(k=0;k<10;k++){
printf("%d ", vector[k]);}
}
}
}
printf("\n");
for(i=0;i<10;i++){
if(i!=9){
printf("%d ", vector[i]);
}
else
{
printf("%d ", vector[i]);
}
}
}
pero sigo sin enterarme de como armarlo alguien me ayuda con el codigo?????.....un saludo
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:ayuda!!!

Publicado por Nelek (816 intervenciones) el 26/04/2006 10:15:44
mmm, me he dado cuenta que te lei mal y lo hice de otra manera, lee hasta el final

no puedo ayudarte con tu metodo pero se me ha ocurrido otra cosa, prueba a ver si funciona (no voy a compilar el programa por falta de tiempo, pero espero que te sirva como orientacion)

VOriginal [20]; VBufferGeneral[20];VBufferPares[20];VBufferImpares[20];
bool bConseguido;
int contador = 0;
int posicion = 0;
//incializas los vectores con numeros introducidos o ceros segun sea pertinente
while (contador < 20)
{ for (i = 0; i < 20; i++)
{ int menor, aux;
if (i == 0) //primera pasada
menor = VOriginal[i] //coges el primer elemento
else //las demas
{ if (VOrig[i] != NULL) //Si la posicion guarda un elemento valido
{ aux = VOrig[i]; //coges el numero correspondiente
if (aux < menor) //compruebas si es mas pequeño que el otro
{ menor = aux; // lo almacenas en la variable para chequear a la siguiente pasada
VBufGen[contador] = menor; //lo guardas en el buffer general
posicion = i; //guardas la posicion en que estaba
}
}
}
} //Aqui se acaba el for
VOrig[posicion] = NULL; //Anulas el valor de la posicion guardada
contador++; //Incrementamos el contador
}
Cuando el vector buffer esta lleno (contador == 20) se acaba el metodo y ya tienes todos los numeros ordenados de menos a mayor. Luego solo quedaria separarlos en pares o impares

contadorPar = 0;
contadorImpar = 0;
for (j = 0; j < 20; j++)
{ int res = -1; //Valor no valido para que el metodo sea el que decide
res = VBufGen[j] % 2; //extraes el resto de dividir por dos el elemento que toca en el vector con los numeros ordenados
if (res == 0) //resto == 0 -> numero par
{ VBufPar [contadorPar] = VBufGen [j]; //Guardas el numero par en el vector de pares
contadorPar++; //aumentamos la posicion
}
else if (res == 1) // resto 1 -> numero impar
{ VBufImpar[contadorImpar] = VBufGen [j]; //Guardas el numero impar en el vector de impares
contadorImpar++; //aumentamos la posicion
}
}


Como dije arriba, me acabo de dar cuenta que lo del orden ha de ser en direcciones diferentes (creciente para uno y decreciente para el otro), asi que lo unico que tienes que hacer es:

Lo primero separa en pares o impares
Despues usa el metodo de arriba para ordenar los "crecientes"
Luego usa un metodo equivalente cambiando los menores por mayores para ordenar los decrecientes
Por ultimo almacenalos como quieras, en un solo vector, en dos, primero los pares, los impares...

Espero que te ayude
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