elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con la ejecución de un algoritmo en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con la ejecución de un algoritmo en C  (Leído 4,620 veces)
BeFree

Desconectado Desconectado

Mensajes: 11



Ver Perfil
Problema con la ejecución de un algoritmo en C
« en: 19 Junio 2013, 19:33 pm »

Hola, tengo que hacer un algoritmo que ordene N números naturales generados en forma aleatoria. Tiene que ejecutarse para 1000, 10000 y 100000. Escribí un código y al ejecutarlo lo hace sin problemas para 1000 y 10000, pero para 100000 no me muestra el resultado, y no puedo hallar el error.
Si me pueden ayudar se los agradecería. Ah trabajo en un entorno linux, que es una virtualización sobre window.

Acá les dejo el código que escribí:

//Secuencial - OrdenacionSectp5.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

/*Declaración de variables globales*/
unsigned long int MAX=100000;

/*Generar datos*/
void CagarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i,j;
   int duplicado;
   unsigned long int num;
 
   for(i=0; i<N; i++)
   {
      num=1+rand()%N;
      duplicado=0;

       for(j=0; j<=i; j++)
      {
         if(num==v[j])
         {
            duplicado=1;
            break;
         }
      }
      if(duplicado==1)
         i--;
      else
         v=num;
   }
}

/*Ordenar Datos de menor a mayor mediante método burbuja*/
void OrdenarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i,j;
   unsigned long int buffer;

   for(i=0; i<N-1; i++)
  {
     for(j=i+1; j<N; j++)
    {
        if(v>v[j])
       {
          buffer=v[j];
          v[j]=v;
          v=buffer;
       }
    }
  }
}

/*Muestra los datos cargados*/
void MostrarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i;
   
   printf("\n============================================");
   printf("\nNúmeros cargados:\n ");
   for(i=0; i<N; i++)
     printf("-%ld", v);
}

/*Principal*/
int main()
{
   unsigned long int ordenar[MAX];
   time_t inicio, fin;

   srand(time(NULL));
   CagarDatos(ordenar, MAX);
   inicio=time(NULL);
   OrdenarDatos(ordenar, MAX);
   MostrarDatos(ordenar, MAX);

/*Finalización*/
   printf("\n============================================");
   printf("\nLa cantidad de datos ordenados es: %ld", MAX);
   fin=time(NULL);
   printf("\nEl programa ha tardado: %.f segundos", difftime(fin,inicio));
   printf("\n=========================================\n\n");
   return 0;
}


En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: Problema con la ejecución de un algoritmo en C
« Respuesta #1 en: 19 Junio 2013, 22:33 pm »

Hola BeFree .

El problema no está en tu código, sino en el método de ordenamiento elegido (Bubble Sort), su eficiencia es de órden exponencial.

Al elevar el número de elementos a cien mil tenes que armarte de paciencia, salir de paseo...y seguramente cuando vuelvas estará el resultado. Cambia por el método: Shell Sort o por Quick Sort.

Saludos. :)


En línea

BeFree

Desconectado Desconectado

Mensajes: 11



Ver Perfil
Re: Problema con la ejecución de un algoritmo en C
« Respuesta #2 en: 19 Junio 2013, 22:51 pm »

Hola ecfisa, el tema es que el ejercicio lo tengo que hacer con ese método...pero bueno si es así me tocará seguir esperando. Gracias por responder  :)
En línea

lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: Problema con la ejecución de un algoritmo en C
« Respuesta #3 en: 19 Junio 2013, 23:40 pm »

Supongo que tu código es diferente al que has copiado perque el que has copiado tiene varios fallos. Por ejemplo:

Código:
v=num;

debería ser:

Código:
v[i]=num;

El código completo corregido debería ser este:

Código:
//Secuencial - OrdenacionSectp5.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

/*Declaración de variables globales*/
unsigned long int MAX=100000;

/*Generar datos*/
void CagarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i,j;
   int duplicado;
   unsigned long int num;
  
   for(i=0; i<N; i++)
   {
      num=1+rand()%N;
      duplicado=0;

       for(j=0; j<=i; j++)
      {
         if(num==v[j])
         {
            duplicado=1;
            break;
         }
      }
      if(duplicado==1)
         i--;
      else
         v[i]=num;
   }
}

/*Ordenar Datos de menor a mayor mediante método burbuja*/
void OrdenarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i,j;
   unsigned long int buffer;

   for(i=0; i<N-1; i++)
  {
     for(j=i+1; j<N; j++)
    {
        if(v[i]>v[j])
       {
          buffer=v[j];
          v[j]=v[i];
          v[i]=buffer;
       }
    }
  }
}

/*Muestra los datos cargados*/
void MostrarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i;
  
   printf("\n============================================");
   printf("\nNúmeros cargados:\n ");
   for(i=0; i<N; i++)
     printf("-%ld", v);
}

/*Principal*/
int main()
{
   unsigned long int ordenar[MAX];
   time_t inicio, fin;

   srand(time(NULL));
   CagarDatos(ordenar, MAX);
   inicio=time(NULL);
   OrdenarDatos(ordenar, MAX);
   MostrarDatos(ordenar, MAX);

/*Finalización*/
   printf("\n============================================");
   printf("\nLa cantidad de datos ordenados es: %ld", MAX);
   fin=time(NULL);
   printf("\nEl programa ha tardado: %.f segundos", difftime(fin,inicio));
   printf("\n=========================================\n\n");
   return 0;
}

Pues eso que bubblesort es lentillo.

Edit funcionar, funciona:
Código:
============================================
La cantidad de datos ordenados es: 100000
El programa ha tardado: 142 segundos
=========================================
Que conste que mi ordenador tiene una atom.
« Última modificación: 19 Junio 2013, 23:51 pm por lapras » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con la ejecución de un algoritmo en C
« Respuesta #4 en: 20 Junio 2013, 01:50 am »

Hola, tengo que hacer un algoritmo que ordene N números naturales generados en forma aleatoria. Tiene que ejecutarse para 1000, 10000 y 100000. Escribí un código y al ejecutarlo lo hace sin problemas para 1000 y 10000, pero para 100000 no me muestra el resultado, y no puedo hallar el error.
Ese problema puede generarse debido a la declaración del array "ordenar" en la función principal:
Código
  1. unsigned long int MAX=100000;
  2.  
  3. /* ... */
  4.  
  5. /*Principal*/
  6. int main()
  7. {
  8.   unsigned long int ordenar[MAX];
  9.  
  10. /* ... */
Un tema relacionado donde se explica el porque es Error al ejecutar un programa en C que he compilado [Windows 8]

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con la ejecución de un algoritmo en C
« Respuesta #5 en: 20 Junio 2013, 14:48 pm »

Hola, tengo que hacer un algoritmo que ordene N números naturales generados en forma aleatoria. Tiene que ejecutarse para 1000, 10000 y 100000. Escribí un código y al ejecutarlo lo hace sin problemas para 1000 y 10000, pero para 100000 no me muestra el resultado, y no puedo hallar el error.


Como indicó lapras, no hay error sino "lentitud" en el proceso, tanto de generación como en el de ordenación, más en este último.

Para que veas lo que pasa he incluido un par de printf y así compruebas que incluso en el caso de 100000 está el programa "trabajando". Te lo dejo con MAX=100 porque con los printf y la limpieza de pantalla, el proceso se ralentiza enormemente:


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5.  
  6. /*Declaración de variables globales*/
  7. unsigned long int MAX=100;
  8.  
  9. /*Generar datos*/
  10. void CagarDatos(unsigned long int v[], unsigned long int N)
  11. {
  12.   unsigned long int i,j;
  13.   int duplicado;
  14.   unsigned long int num;
  15.  
  16.   for(i=0; i<N; i++)
  17.   {
  18.      num=1+rand()%N;
  19.      duplicado=0;
  20.        printf("Generando: %d",i+1);
  21.        system("cls");
  22.       for(j=0; j<=i; j++)
  23.      {
  24.         if(num==v[j])
  25.         {
  26.            duplicado=1;
  27.            break;
  28.         }
  29.      }
  30.      if(duplicado==1)
  31.         i--;
  32.      else
  33.         v[i]=num;
  34.   }
  35. }
  36.  
  37. /*Ordenar Datos de menor a mayor mediante método burbuja*/
  38. void OrdenarDatos(unsigned long int v[], unsigned long int N)
  39. {
  40.   unsigned long int i,j;
  41.   unsigned long int buffer;
  42.  
  43.   for(i=0; i<N-1; i++)
  44.  {
  45.     for(j=i+1; j<N; j++)
  46.    {
  47.        if(v[i]>v[j])
  48.       {
  49.          printf("Ordenando: %d",i+1);
  50.          system("cls");
  51.          buffer=v[j];
  52.          v[j]=v[i];
  53.          v[i]=buffer;
  54.       }
  55.    }
  56.  }
  57. }
  58.  
  59. /*Muestra los datos cargados*/
  60. void MostrarDatos(unsigned long int v[], unsigned long int N)
  61. {
  62.   unsigned long int i;
  63.  
  64.   printf("\n============================================");
  65.   printf("\nNúmeros cargados:\n ");
  66.   for(i=0; i<N; i++)
  67.     printf("-%ld", v);
  68. }
  69.  
  70. /*Principal*/
  71. int main()
  72. {
  73.   unsigned long int ordenar[MAX];
  74.   time_t inicio, fin;
  75.  
  76.   srand(time(NULL));
  77.   CagarDatos(ordenar, MAX);
  78.   inicio=time(NULL);
  79.   OrdenarDatos(ordenar, MAX);
  80.   MostrarDatos(ordenar, MAX);
  81.  
  82. /*Finalización*/
  83.   printf("\n============================================");
  84.   printf("\nLa cantidad de datos ordenados es: %ld", MAX);
  85.   fin=time(NULL);
  86.   printf("\nEl programa ha tardado: %.f segundos", difftime(fin,inicio));
  87.   printf("\n=========================================\n\n");
  88.   return 0;
  89. }
  90.  

Saluditos!
   

En línea

BeFree

Desconectado Desconectado

Mensajes: 11



Ver Perfil
Re: Problema con la ejecución de un algoritmo en C
« Respuesta #6 en: 21 Junio 2013, 04:20 am »

Hola leosansan, si hice esa comprobación. Gracias por responder  :)
En línea

BeFree

Desconectado Desconectado

Mensajes: 11



Ver Perfil
Re: Problema con la ejecución de un algoritmo en C
« Respuesta #7 en: 21 Junio 2013, 04:35 am »

Supongo que tu código es diferente al que has copiado perque el que has copiado tiene varios fallos. Por ejemplo:

Código:
v=num;

debería ser:

Código:
v[i]=num;

El código completo corregido debería ser este:

Código:
//Secuencial - OrdenacionSectp5.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

/*Declaración de variables globales*/
unsigned long int MAX=100000;

/*Generar datos*/
void CagarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i,j;
   int duplicado;
   unsigned long int num;
  
   for(i=0; i<N; i++)
   {
      num=1+rand()%N;
      duplicado=0;

       for(j=0; j<=i; j++)
      {
         if(num==v[j])
         {
            duplicado=1;
            break;
         }
      }
      if(duplicado==1)
         i--;
      else
         v[i]=num;
   }
}

/*Ordenar Datos de menor a mayor mediante método burbuja*/
void OrdenarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i,j;
   unsigned long int buffer;

   for(i=0; i<N-1; i++)
  {
     for(j=i+1; j<N; j++)
    {
        if(v[i]>v[j])
       {
          buffer=v[j];
          v[j]=v[i];
          v[i]=buffer;
       }
    }
  }
}

/*Muestra los datos cargados*/
void MostrarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i;
  
   printf("\n============================================");
   printf("\nNúmeros cargados:\n ");
   for(i=0; i<N; i++)
     printf("-%ld", v);
}

/*Principal*/
int main()
{
   unsigned long int ordenar[MAX];
   time_t inicio, fin;

   srand(time(NULL));
   CagarDatos(ordenar, MAX);
   inicio=time(NULL);
   OrdenarDatos(ordenar, MAX);
   MostrarDatos(ordenar, MAX);

/*Finalización*/
   printf("\n============================================");
   printf("\nLa cantidad de datos ordenados es: %ld", MAX);
   fin=time(NULL);
   printf("\nEl programa ha tardado: %.f segundos", difftime(fin,inicio));
   printf("\n=========================================\n\n");
   return 0;
}

Pues eso que bubblesort es lentillo.

Edit funcionar, funciona:
Código:
============================================
La cantidad de datos ordenados es: 100000
El programa ha tardado: 142 segundos
=========================================
Que conste que mi ordenador tiene una atom.

///////////////
A mi me tardo más tiempo casi 6 min, y tengo un i5, pero supongo que tiene que ver con la virtualización!! Gracias por la ayuda
En línea

BeFree

Desconectado Desconectado

Mensajes: 11



Ver Perfil
Re: Problema con la ejecución de un algoritmo en C
« Respuesta #8 en: 21 Junio 2013, 04:39 am »

Hola, tengo que hacer un algoritmo que ordene N números naturales generados en forma aleatoria. Tiene que ejecutarse para 1000, 10000 y 100000. Escribí un código y al ejecutarlo lo hace sin problemas para 1000 y 10000, pero para 100000 no me muestra el resultado, y no puedo hallar el error.
Si me pueden ayudar se los agradecería. Ah trabajo en un entorno linux, que es una virtualización sobre window.

Acá les dejo el código que escribí:

//Secuencial - OrdenacionSectp5.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

/*Declaración de variables globales*/
unsigned long int MAX=100000;

/*Generar datos*/
void CagarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i,j;
   int duplicado;
   unsigned long int num;
 
   for(i=0; i<N; i++)
   {
      num=1+rand()%N;
      duplicado=0;

       for(j=0; j<=i; j++)
      {
         if(num==v[j])
         {
            duplicado=1;
            break;
         }
      }
      if(duplicado==1)
         i--;
      else
         v=num;
   }
}

/*Ordenar Datos de menor a mayor mediante método burbuja*/
void OrdenarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i,j;
   unsigned long int buffer;

   for(i=0; i<N-1; i++)
  {
     for(j=i+1; j<N; j++)
    {
        if(v>v[j])
       {
          buffer=v[j];
          v[j]=v;
          v=buffer;
       }
    }
  }
}

/*Muestra los datos cargados*/
void MostrarDatos(unsigned long int v[], unsigned long int N)
{
   unsigned long int i;
   
   printf("\n============================================");
   printf("\nNúmeros cargados:\n ");
   for(i=0; i<N; i++)
     printf("-%ld", v);
}

/*Principal*/
int main()
{
   unsigned long int ordenar[MAX];
   time_t inicio, fin;

   srand(time(NULL));
   CagarDatos(ordenar, MAX);
   inicio=time(NULL);
   OrdenarDatos(ordenar, MAX);
   MostrarDatos(ordenar, MAX);

/*Finalización*/
   printf("\n============================================");
   printf("\nLa cantidad de datos ordenados es: %ld", MAX);
   fin=time(NULL);
   printf("\nEl programa ha tardado: %.f segundos", difftime(fin,inicio));
   printf("\n=========================================\n\n");
   return 0;
}

------------------------------------------------------------------------------------------------

Hola, pude resolver el problema...Ahora tengo otro, me pide que los números desordenados generados en forma aleatoria se guarden en un archivo de texto...y estuve dándole vueltas al asunto y no lo pude resolver, a ver si alguien me puede dar una mano!!  :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con algoritmo de compresion
Programación Visual Basic
Daedalus 2 1,908 Último mensaje 14 Abril 2006, 01:31 am
por Cicklow
Problema con un algoritmo
Programación General
9Sergio 4 5,311 Último mensaje 8 Julio 2011, 19:40 pm
por qgpjr
problema algoritmo java o dfd
Ejercicios
Kacoae 1 4,884 Último mensaje 19 Julio 2015, 03:12 am
por lvs
Necesito ayuda acerca del tiempo de ejecución de un algoritmo
Programación General
DarkSorcerer 3 3,843 Último mensaje 21 Enero 2014, 21:05 pm
por engel lex
Ayuda con tiempo de ejecucion de un algoritmo
Programación General
vicjar 0 1,572 Último mensaje 12 Abril 2016, 06:48 am
por vicjar
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines