/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Sugerencias Para Realizar Un Algoritmo
Ir a página 1, 2  Siguiente
 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
kykyou



Registrado: 02 Sep 2004
Mensajes: 67
Ubicación: santiago, Chile..

MensajePublicado: 01/10/2004 3:04 pm
Título: Sugerencias Para Realizar Un Algoritmo

hola nuevamente Surprised
gracias por su ayuda en el anterior..
ahora necesito hacer un programa en c que ordene en forma creciente y decreciente 5 numeros enteros...
me imagino que se puede hacer con un "do" restringiendo.
para realizar el algoritmo tengo que crear dos funciones. una llamada "meyor(int, int)" y otra llamada "menor(int, int)", les agradeceria mucho que me dieran sugerencias de como realizar este algoritmo ya que esta muy complicado...
gracias! Wink
Volver arriba
Demidam



Registrado: 07 Ago 2004
Mensajes: 59

MensajePublicado: 02/10/2004 5:50 am
Título: Pues se me ocurre algo, a ver si te funciona:

Debrias almacenar los 5 numeros en un array, luego definir otros 2 donde se almacenaran los datos ordenados creciente y decrecientemente.
Pones un bucle for para comparar el primer numero con los demas (comparas el primero con el segundo y cojes el menor y lo comparas con el tercero y coges el menor, asi hasta el 5) y el menor lo almacenas en la primera posicion del segundo array, y luego haces otro bucle for para q esto te lo haga con los demas numeros y te los almacene en las demas posiciones del segundo array.
Y para ordenarlos al reves = lo unico q tienes q poner es el segundo array pero con las posiciones al reves(el 1 pasa al 5, el 2 al 4, etc.)

Salu2

P.D.--->Ya me diras si te ha servido
Volver arriba
kykyou



Registrado: 02 Sep 2004
Mensajes: 67
Ubicación: santiago, Chile..

MensajePublicado: 02/10/2004 6:28 am
Título: Re: Pues se me ocurre algo, a ver si te funciona:

hola! no me quedo muy claro lo que me dijiste, pero bueno...
ya se sacar el mayor y el menor, eso es lo facil, pero la complicacion esta en sacar los intermedios porque no puedo usar algoritmos muy avanzados.

te escribo como saco el nº mayor y el nº menosr Wink
Código:

#include<stdio.h>
#include<math.h>
#include<conio.h>

int mayor (int a, int b)
{
    if (a>b || a==b)
    {
        return(a);
     }
     else
     {
         return(b);
      }
}

int menor (int a, int b)
{
    if (a>b || a==b)
    {
        return(a);
     }
     else
     {
         return(b);
      }
}


void main()
{
int n1,n2,n3,n4,n5, p1,p2,p3,p4,p5;
printf("\ningrese 5 numeros enteros para su ordenamiento");
scanf("%d",&n1);
scanf("%d",&n2);
scanf("%d",&n3);
scanf("%d",&n4);
scanf("%d",&n5);
clrscr();
p5=mayor(mayor(mayor(mayor(n1,n2),n3),n4),n5);
p1=menor(menor(menor(menor(n1,n2,),n3),n4),n5);
/* pero no s sacar los numeros intermedios*/
printf("\n\nlos numeros oredenados de forma crecientes quedas :  %d,%d,%d,%d,%d", p1,p2,p3,p4,p5);
printf("\n\ny de forma decreciente : %d,%d,%d,%d,%d", p5,p4,p3,p2,p1);
printf("\n\nPara continuar presione cualquier tecla ");
getch();
}




mi problema es que no se me ocurre como sacar los numeros intermedios.

gracias de todos modos Surprised
Volver arriba
Demidam



Registrado: 07 Ago 2004
Mensajes: 59

MensajePublicado: 02/10/2004 1:57 pm
Título:

Wenass, antes q nada creo q no se sabes de arrays pero te ahorrais mucho tiempo, si no tienes n idea puedes mirar en el curso de gorka de esta web.
Para hacerlo a tu modo sta mu facil, una vez q has sacado el mayor y el menor descartas esos 2 numeros y cojes los otros 3 y vuelves a mirar cual es el mayor y el menor de esos 3, el mayor sera el 2 mayor de los 5 y el menor el 4 y el q keda es el 3.

Salu2
Volver arriba
kykyou



Registrado: 02 Sep 2004
Mensajes: 67
Ubicación: santiago, Chile..

MensajePublicado: 02/10/2004 2:02 pm
Título:

gracias! lo hare como me dices. Very Happy
Volver arriba
Demidam



Registrado: 07 Ago 2004
Mensajes: 59

MensajePublicado: 03/10/2004 10:45 am
Título:

Weno me he picado con el problema y aky te dejo lo q me ha salido al final.

Código:

#include <stdio.h>

#define numeros      5

int main()
{

int i, j;
int a[numeros];
int b[numeros];
int c[numeros];
int d[numeros];
int e[numeros];

for (i=0; i<5; i++)
   {
   printf("Introduzca el numero %i que quiere ordenar\n", i+1);
   scanf("%i", &a[i]);
   }


for(i=0; i<5; i++)
   {
   if(a[i]>a[i+1])
      {
      b[i]=a[i];
      b[i+1]=a[i+1];
      a[i]=b[i];
      a[i+1]=b[i+1];

      }
   else
      {
      b[i]=a[i+1];
      b[i+1]=a[i];
      a[i]=b[i];
      a[i+1]=b[i+1];
      }
   }

for(i=0; i<5; i++)
   {
   if(b[i]>b[i+1])
      {
      c[i]=b[i];
      c[i+1]=b[i+1];
      b[i]=c[i];
      b[i+1]=c[i+1];

      }
   else
      {
      c[i]=b[i+1];
      c[i+1]=b[i];
      b[i]=c[i];
      b[i+1]=c[i+1];
      }
   }


for(i=0; i<5; i++)
   {
   if(c[i]>c[i+1])
      {
      d[i]=c[i];
      d[i+1]=c[i+1];
      c[i]=d[i];
      c[i+1]=d[i+1];

      }
   else
      {
      d[i]=c[i+1];
      d[i+1]=c[i];
      c[i]=d[i];
      c[i+1]=d[i+1];
      }
   }


for(i=0; i<5; i++)
   {
   if(d[i]>d[i+1])
      {
      e[i]=d[i];
      e[i+1]=d[i+1];
      d[i]=e[i];
      d[i+1]=e[i+1];

      }
   else
      {
      e[i]=d[i+1];
      e[i+1]=d[i];
      d[i]=e[i];
      d[i+1]=e[i+1];
      }
   }

printf("En orden creciente los numeros son:\n");

for (i=0; i<5; i++)
   {
   printf("El numero %i es %i\n", i+1, e[i]);
   }

int f[numeros]={ e[4], e[3], e[2], e[1], e[0]};
printf("En orden decreciente los numeros son:\n");

for (i=0; i<5; i++)
   {
   printf("El numero %i es %i\n", i+1, f[i]);
   }

}


Salu2
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 03/10/2004 3:36 pm
Título:

Hola.
Creo que os complicais demasiado la vida. Hay muchos métodos de ordenación. El más simple es el de la burbuja (aunque es el más lento). Te pongo un ejemplo:

Código:
#include<stdio.h>

void ordena_crec(int *num, int n_elem)
{
   int i, j, temp;

   for (i = 0; i < n_elem; i++)
      for (j = i+1; j < n_elem; j++)
         if (num[i] > num[j]) {
            temp = num[i];
            num[i] = num[j];
            num[j] = temp;
         }
}



void ordena_dec(int *num, int n_elem)
{
   int i, j, temp;

   for (i = 0; i < n_elem; i++)
      for (j = i+1; j < n_elem; j++)
         if (num[i] < num[j]) {
            temp = num[i];
            num[i] = num[j];
            num[j] = temp;
         }
}

void imprime_vector(int *num, int n_elem)
{
   int i;
   for (i = 0; i < n_elem; i++)
      printf("%i\t",num[i]);
}


int main()
{
   int i;
   int numeros[] = { 3, 1, 7, 9, 5, 2, 14, 4};
   int n_elementos;

   n_elementos = sizeof(numeros)/sizeof(int);

   printf("\nCreciente:\n");
   ordena_crec(numeros, n_elementos);
   imprime_vector(numeros, n_elementos);

   printf("\n\nDecreciente:\n");
   ordena_dec(numeros, n_elementos);
   imprime_vector(numeros, n_elementos);

   return 0;
}


Un saludo.
Volver arriba
Yahoo Messenger
Demidam



Registrado: 07 Ago 2004
Mensajes: 59

MensajePublicado: 04/10/2004 12:52 am
Título:

Wenass, nos complicamos la vida xq somos principiantes (por lo menos yo) y antes q buscar x ahi algun metodo de ordenacion ya creado prefiero intentar comerme la cabeza, aunke el programa sea peor o algo tosco, aun asi, yo lo intente con 2 for pero no lo consegui xq me lie un poco.

Salu2

P.D.--->De todas maneras gracias, aunke, sabrias como puedo agrupar todos los for q he puesto a mi manera???
Volver arriba
kykyou



Registrado: 02 Sep 2004
Mensajes: 67
Ubicación: santiago, Chile..

MensajePublicado: 04/10/2004 2:06 am
Título:

hola!!!
ya lo hice Wink
a mi, por el consejo que me dio demidam, me salio asi y funciona!!!!

Código:


#include<stdio.h>
#include<math.h>
#include<conio.h>

int mayor (int a, int b)
{
    if (a>b || a==b)
    {
        return(a);
     }
     else
     {
         return(b);
      }
}

int menor (int a, int b)
{
    if (a<b || a==b)
    {
        return(a);
     }
     else
     {
         return(b);
      }
}

int m(int a, int x)
{
if(a>=x)
   {
      return(0);
   }
   else
   {
      return(a);
   }
}






void main()
{
int n1,n2,n3,n4,n5, p1,p2,p3,p4,p5;
printf("\ningrese 5 numeros enteros para su ordenamiento");
scanf("%d",&n1);
scanf("%d",&n2);
scanf("%d",&n3);
scanf("%d",&n4);
scanf("%d",&n5);
clrscr();
p5=mayor(mayor(mayor(mayor(n1,n2),n3),n4),n5);
p4=mayor(mayor(mayor(mayor(m(n1,p5),m(n2,p5)),m(n3,p5)),m(n4,p

5)),m(n5,p5));
p3=mayor(mayor(mayor(mayor(m(n1,p4),m(n2,p4)),m(n3,p4)),m(n4,p

4)),m(n5,p4));
p2=mayor(mayor(mayor(mayor(m(n1,p3),m(n2,p3)),m(n3,p3)),m(n4,p

3)),m(n5,p3));
p1=menor(menor(menor(menor(n1,n2),n3),n4),n5);

printf("\n\nlos numeros oredenados de forma crecientes quedas :

 %d,%d,%d,%d,%d", p1,p2,p3,p4,p5);
printf("\n\ny de forma decreciente : %d,%d,%d,%d,%d", p5,p4,p3

,p2,p1);
printf("\n\nPara continuar presione cualquier tecla ");
getch();

}



bueno...se que la funcion m podria perfectamente remaplasar a la funcion mayor, pero en estos momentos no tengo tiempo para cambiarlo Surprised
gracias por ayudarme Wink
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 04/10/2004 10:45 am
Título:

Hola de nuevo.
Veamos cómo agrupar los for.
Si observas detenidamente el código, los bucles for utilizan los arrays sucesivos, es decir, el primero, utiliza a y b, el segundo, b y c. Por otro lado, son 5 arrays, puesto que pedimos 5 números. Juntemos todos los arrays en uno sólo: en lugar de hacer
Código:
int a[numeros];
int b[numeros];
int c[numeros];
int d[numeros];
int e[numeros];

Utilizamos el siquiente array:
Código:
int valores[numeros][numeros];

El primer índice, corresponde a cada array; así, valores[0] corresponde al array "a", valores[1] corresponde al array "b", etc.

Podemos utilizar dos bucles for: El primero (externo), recorre los arrays, y el segundo (interno) los elementos. El código quedaría así:
Código:
int na; /* numero de array */

for (na = 0; na < 4; na++)
  for(i=0; i<5; i++)
   {
   if(valores[na][i]>valores[na][i+1])
      {
      valores[na+1][i]=valores[na][i];
      valores[na+1][i+1]=valores[na][i+1];
      valores[na][i]=valores[na+1][i];
      valores[na][i+1]=valores[na+1][i+1];

      }
   else
      {
      valores[na+1][i]=valores[na][i+1];
      valores[na+1][i+1]=valores[na][i];
      valores[na][i]=valores[na+1][i];
      valores[na][i+1]=valores[na+1][i+1];
      }
   }

El resultado es algo enrevesado y difícil de leer. Podemos utilizar #defines para simplificar el código, y darle más legibilidad:

Código:
#define A valores[na]
#define B valores[na+1]
int na; /* numero de array */

for (na = 0; na < 4; na++)
   for(i=0; i<5; i++)
   {
   if(A[i]>A[i+1])
      {
      B[i]=A[i];
      B[i+1]=A[i+1];
      A[i]=B[i];
      A[i+1]=B[i+1];

      }
   else
      {
      B[i]=A[i+1];
      B[i+1]=A[i];
      A[i]=B[i];
      A[i+1]=B[i+1];
      }
   }


He probado el programa (sin modificarlo), pero la ordenación no funciona bien. Prueba con los siguientes números: 4, 8, 96, 5, 1.
El resultado que me da es:
Cita:
En orden creciente los numeros son:
El numero 1 es 1
El numero 2 es 8
El numero 3 es 96
El numero 4 es 5
El numero 5 es 4
En orden decreciente los numeros son:
El numero 1 es 4
El numero 2 es 5
El numero 3 es 96
El numero 4 es 8
El numero 5 es 1


Habría que darle un repasillo.

Un saludo.
Volver arriba
Yahoo Messenger
Demidam



Registrado: 07 Ago 2004
Mensajes: 59

MensajePublicado: 04/10/2004 12:26 pm
Título:

Lo primero gracias x contestar, acabo de leer el capitulo de arrays multidimensionales(toy siguiendo el curso de gorka) y mas o menos lo entiendo.
Lo de los numeros, los he probado con mi algoritmo y me va perfectamente, a lo mejor es q has puesto algo mal, no se, a ver si lo miro mañana q hoy no tengo tiempo.

Salu2
Volver arriba
Demidam



Registrado: 07 Ago 2004
Mensajes: 59

MensajePublicado: 07/10/2004 4:38 am
Título:

He intentado agrupar todos los for pero el resultado me dan numeros raros, a ver si me podeis decir donde sta el error q no lo encuentro:
Código:

#include <stdio.h>

#define numeros      5

int main()
{

int i, j;
int a[numeros][numeros];

for (i=0; i<5; i++)
   {
   printf("Introduzca el numero %i que quiere ordenar\n", i+1);
   scanf("%i", &a[1][i]);
   }

for(j=0; j<4; j++)
   {
   for(i=0; i<5; i++)
      {
      if(a[j][i]>a[j][i+1])
         {
         a[j+1][i]=a[j][i];
         a[j+1][i+1]=a[j][i+1];
         a[j][i]=a[j+1][i];
         a[j][i+1]=a[j+1][i+1];
         }

      else
         {
         a[j+1][i]=a[j][i+1];
         a[j+1][i+1]=a[j][i];
         a[j][i]=a[j+1][i];
         a[j][i+1]=a[j+1][i+1];
         }
      }
   }



printf("En orden creciente los numeros son:\n");

for (i=0; i<5; i++)
   {
   printf("El numero %i es %i\n", i+1, a[4][i]);
   }

int f[numeros]={ a[4][4], a[4][3], a[4][2], a[4][1], a[4][0]};
printf("En orden decreciente los numeros son:\n");

for (i=0; i<5; i++)
   {
   printf("El numero %i es %i\n", i+1, f[i]);
   }

}


Salu2
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 07/10/2004 9:29 am
Título:

¿Cómo funciona el algoritmo? Con tantos índices y subíndices me pierdo...

Un saludo
Volver arriba
Yahoo Messenger
Demidam



Registrado: 07 Ago 2004
Mensajes: 59

MensajePublicado: 07/10/2004 1:56 pm
Título:

Lo siento, pero no suelo poner comentarios, a ver si me acostumbro.
El primer subindice, en teoria, es para sustituir a los arrays a,b,c,d y e y agruparlos en 1 y el segundo son los 5 numeros q ingresas.
Entonces lo q he echo, es coger el primer bucle y donde ponia b he puesto j+1 y donde ponia a he puesto j.

Salu2
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 08/10/2004 8:38 am
Título:

Ok. Eso lo entiendo. Lo que me refiero es a que expliques el funcionamiento dle algoritmo.
Por ejemplo, el método de la burbuja funciona así: comparas el primer elemento con los restantes, del array, y compruebas si es mayor que el valor que comparas; si es así, intercambias los valores. Cuando has terminado de comparar el primer elemento con los otros, el primer elemento es el menor del conjunto. Seguidamente, comparas el segundo con los restantes, y realizamos el mismo proceso. Luego con el tercero, el cuarto, etc. De este modo, los valores se van ordenando en el mismo array. Se le conoce como método de la burbuja porque los valores van "subiendo" posiciones igualmente que las burbujas suben en los líquidos.

Este método es el más simple, pero es muy lento, ya que se recorre el array muchas veces y se realizan muchas comparaciones.

Un saludo.
Volver arriba
Yahoo Messenger
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 2Todas las horas están en GMT - 8 Horas
Ir a página 1, 2  Siguiente

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com