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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ahorrar lineas de codigo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ahorrar lineas de codigo  (Leído 3,256 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
ahorrar lineas de codigo
« en: 25 Junio 2013, 19:08 pm »

Saludos tengo el siguiente codigo que me hace un simple ordenamiento burbuja de un vector:

Código
  1. int main()
  2. {
  3.    int v[MAX],i,j,n,aux,;
  4.    printf("Dame el numero de elementos del vector\n");
  5.    scanf("%d",&n);
  6.    for(i=0;i < n;i++)
  7.    {
  8.        printf("Dame el elemento numero %d:\n",i+1);
  9.        scanf("%d",&v[i]);
  10.        system("cls");
  11.    }
  12.    for(i=1;i < n;i++)
  13.    {
  14.        for(j=0;j < n-i;j++)
  15.        {
  16.            if(v[j] > v[j+1])
  17.            {
  18.                aux = v[j+1];
  19.                v[j+1] = v[j];
  20.                v[j] = aux;
  21.            }
  22.        }
  23.    }
  24. return 0;
  25. }
pero tengo la duda de si en vez de usar dos fors podria meter el metodo de ordenamiento en el for que me pide que ingrese los elementos del vector para ahorrar lineas de codigo

gracias


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: ahorrar lineas de codigo
« Respuesta #1 en: 25 Junio 2013, 21:22 pm »

no, necesitas 2 for porque buble sort es de tiempo exponencial... el por ley tiene que pasar n veces por cada uno de sus n miembros... de los algoritmos de ordenamiento buble sort a pesar de ser el de más simple implementacion, es el más lento de todos


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ahorrar lineas de codigo
« Respuesta #2 en: 25 Junio 2013, 21:42 pm »

En C++ hay una forma más corta usando la función sort:

Código
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. const int n = 10;
  8.  
  9. int main()
  10. {
  11.    vector<int> Numeros;
  12.    int aux;
  13.  
  14.    for(int i=0;i < n;i++)
  15.    {
  16.        cout<<"Dame el elemento numero "<<i+1<<": "<<endl;
  17.        cin>>aux;
  18.        Numeros.push_back(aux);
  19.    }
  20.  
  21.    sort(Numeros.begin(),Numeros.end()); // Ordenar desde el principio al final
  22.  
  23.    return 0;
  24. }

Aparte de eso, no se me ocurre ninguna forma de acortar tu código. Como mucho podrías sacar el mayor número del vector, pero eso no te serviría para ahorrar código.
« Última modificación: 25 Junio 2013, 21:45 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: ahorrar lineas de codigo
« Respuesta #3 en: 25 Junio 2013, 23:11 pm »

Hola.

Si usas C y tenés que aplicar el método de la burbuja si o si, podes ahorrar un ciclo en el ordenamiento y la variable auxilar de este modo:
Código
  1. int main()
  2. {
  3.  int v[MAX];
  4.  int i, n;
  5.  
  6.  printf("Dame el numero de elementos del vector: ");
  7.  scanf("%d",&n);
  8.  for(i=0;i < n;i++) {
  9.    printf("\nDame el elemento numero %d:",i+1);
  10.    scanf("%d",&v[i]);
  11.  }
  12.  
  13.  for (i=0; i < n; i++) {
  14.    if (i < 1) continue;
  15.    if (v[i] < v[i-1]) {
  16.      v[i]   ^= v[i-1];
  17.      v[i-1] ^= v[i];
  18.      v[i]   ^= v[i-1];
  19.      i = 0;
  20.    }
  21.  }
  22.  ...
  23. }
  24.  
Pero, al menos yo, no veo manera de mezclar el ingreso de datos con el ordenamiento.

Saludos. :)
« Última modificación: 25 Junio 2013, 23:18 pm por ecfisa » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: ahorrar lineas de codigo
« Respuesta #4 en: 27 Junio 2013, 03:23 am »

tengo la duda de si en vez de usar dos fors podria meter el metodo de ordenamiento en el for que me pide que ingrese los elementos del vector para ahorrar lineas de codigo
Puedes combinar la ordenacion y la entrada de datos para reducir el numero de lineas pero, como ya te comentaron, eso no afecta el rendimiento del algoritmo.

Por ejemplo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX_ELEM  16U
  5.  
  6. void swap(int *p, int *q);
  7.  
  8. int main(void)
  9. {
  10.   int num[MAX_ELEM];
  11.   unsigned num_elem;
  12.   unsigned i;
  13.   unsigned j;
  14.  
  15.   printf("Numero de elementos del vector: ");
  16.   fflush(stdout);
  17.   if (scanf("%u", &num_elem) != 1 || num_elem > MAX_ELEM)
  18.      return EXIT_FAILURE;
  19.  
  20.   for (i = 0; i < num_elem; i++){
  21.      printf("Valor del elemento %d: ", i + 1);
  22.      fflush(stdout);
  23.      if (scanf("%d", num + i) != 1)
  24.         return EXIT_FAILURE;
  25.  
  26.      for (j = i; j > 0 && num[j] < num[j - 1]; j--)
  27.         swap(num + j, num + j - 1);
  28.   }
  29.  
  30.   for (i = 0; i < num_elem; i++)
  31.      printf(" %d", num[i]);
  32.   putchar('\n');
  33.  
  34.   return EXIT_SUCCESS;
  35. }
  36.  
  37. void swap(int *p, int *q)
  38. {
  39.   int aux;
  40.  
  41.   aux = *p;
  42.   *p = *q;
  43.   *q = aux;
  44. }

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Lineas de código valoradas en millones « 1 2 »
Foro Libre
Mafmaestro 12 6,309 Último mensaje 17 Julio 2013, 23:29 pm
por Mafmaestro
[SOURCE] Advanced Cloc: Lector de líneas de código
.NET (C#, VB.NET, ASP)
z3nth10n 4 4,464 Último mensaje 9 Enero 2014, 15:06 pm
por z3nth10n
Cada año se crean 5.000 millones de líneas de código COBOL
Noticias
wolfbcn 0 1,170 Último mensaje 13 Noviembre 2014, 13:37 pm
por wolfbcn
Codigo en C para saltar lineas
Programación C/C++
Jerrytoon 3 2,621 Último mensaje 28 Enero 2015, 23:37 pm
por sabeeee
Reducir líneas de código
Programación C/C++
rarrav26 2 2,062 Último mensaje 7 Abril 2015, 20:04 pm
por rarrav26
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines