elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:46  


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Código más eficiente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Código más eficiente  (Leído 1,064 veces)
prometheus48

Desconectado Desconectado

Mensajes: 170


Making a Distro...


Ver Perfil
Código más eficiente
« en: 1 Enero 2012, 15:59 »

Hola,

Estaba yo con el ordenador y de repente se me ocurrió hacer un programa el cual te pide 3 números y después te dice cuál es el más grande.
Pero no solo eso, lo que quería era hacer un programa en C++, que sea lo mas rápido posible, que gaste muy pocos recursos y que ocupe muy poca memoria.
Osea, un programa simple, pero programado de tal forma que sea perfecto.
Hice un código muy simple intentando llamar lo menos posible a funciones,
bueno, aquí va mi código, espero que alguien me diga como mejorarlo, o que posteen
su propia versión

Código
#include <iostream>
 
 
 
int main()
{
   int a,b,c;
   std::cout<<"Type 3 numbers ";
   std::cin>>a;
   std::cin>>b;
   std::cin>>c;
   if(a>b and a>c)
   {
          std::cout<<"The biggest number is \n" <<a<<std::endl;
          std::cin.get();
   }
   if(b>a and b>c)
   {
          std::cout<<"The biggest number is  \n"<<b<<std::endl;
          std::cin.get();
   }
   if(c>a and c>b)
   {
          std::cout<<"The biggest number is \n"<<c<<std::endl;
          std::cin.get();
   }      
   system("PAUSE");
   return EXIT_SUCCESS;
}
[/code==cpp]  
Salu2!


En línea

"Si tú tienes una manzana, y yo otra, y las intercambiamos, tu sigues teniendo una manzana, y yo sigo teniendo una manzana.
Pero, si tu tienes una idea, y yo otra, y nos las intercambiamos, tu tienes dos ideas, y yo tengo dos ideas"
The knowledge is free
folostia

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: Código más eficiente
« Respuesta #1 en: 1 Enero 2012, 16:46 »

Aquí te dejo mi versión,pero está en C:

Código:
/*el mayor de tres números*/
#include <stdio.h>
#include <stdlib.h>

int main(){
    int mayor,num1,num2;
    printf("Escribe tres numeros: ");
    scanf("%i %i %i", &max,&num1,&num2);
   
    if (max < num1){
        max=num1;
    }
    if (max < num2){
        max=num2;
    }   
    printf("\nEl mayor es: %i",max);
    system("PAUSE");
    return 0;
}


En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
Leyer


Desconectado Desconectado

Mensajes: 772


[]


Ver Perfil WWW
Re: Código más eficiente
« Respuesta #2 en: 1 Enero 2012, 16:55 »

Mi version, usar system pause? :-X

Código
#include <iostream>
using namespace std;
int main(int argc,char *argv[]){
int n1,n2,n3;
cout<<"Type 3 numbers\n";
cin>>n1>>n2>>n3;
int _M=(n1>n2)?(n1>n3)?n1:n3:(n2>n3)?n2:n3;
       cout<<"The biggest number is " <<_M;
       cin.get();
       cin.get();
return 0;
}
 
« Última modificación: 1 Enero 2012, 17:02 por Leyer » En línea

alexis33de

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Código más eficiente
« Respuesta #3 en: 1 Enero 2012, 16:56 »

Mi versión hecha en Borland  ;D. No leí q decía sin funciones XD, nueva versión !!!
Código
#include <iostream.h>
#include <conio.h>
 
int main()
{
int numeros[2];
   int max=0;
  cout<<"coloque los 3 numeros";
   for(int i=0;i<3;i++)
   {
    cin>>numeros[i];
        max=numeros[0];
       if(numeros[i]>max)
  {
    max=numeros[i];
         }
 
   }
  cout<<max;
  getch();
  return 0;
}
« Última modificación: 1 Enero 2012, 17:21 por alexis33de » En línea
prometheus48

Desconectado Desconectado

Mensajes: 170


Making a Distro...


Ver Perfil
Re: Código más eficiente
« Respuesta #4 en: 1 Enero 2012, 17:07 »

Aun más simplificado
Código
 
#include <iostream>
 
 
 
int main()
{
   int a,b,c;
   std::cout<<"Type 3 numbers ";
   std::cin>>a>>b>>c;
   if(a>b and a>c)std::cout<<"The biggest number is \n" <<a;
   std::cin.get();
   if(b>a and b>c)std::cout<<"The biggest number is  \n"<<b;
   std::cin.get();
   if(c>a and c>b) std::cout<<"The biggest number is \n"<<c;
   std::cin.get();
   return 0;
}
[/code=cpp]
En línea

"Si tú tienes una manzana, y yo otra, y las intercambiamos, tu sigues teniendo una manzana, y yo sigo teniendo una manzana.
Pero, si tu tienes una idea, y yo otra, y nos las intercambiamos, tu tienes dos ideas, y yo tengo dos ideas"
The knowledge is free
Sagrini

Desconectado Desconectado

Mensajes: 104

Visit las Vegas ;)


Ver Perfil WWW
Re: Código más eficiente
« Respuesta #5 en: 1 Enero 2012, 18:20 »

El último NO es más simplificado que los otros, al contrario.
Os dejo el mío ;)
Código
#include <stdio.h>
 
int main ()
{
int a, b, c; printf ("Escribe tres numeros: "); scanf ("%d %d %d", &a, &b, &c);
if (a<b) a=b; if (a<c) a=c; printf ("El mayor numero ingresado es %d\n\n", a);
getchar (); return 0;
}
 
 
En línea

Un saludo. Sagrini
ace332

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Código más eficiente
« Respuesta #6 en: 1 Enero 2012, 18:23 »

Otra más en C  ;D. No se cuan rápido sea, me dio flojera comparar :laugh:
Código
#include <stdio.h>
 
#define permutar(a,b) {int t=a;a=b;b=t;}
 
int main()
{
 int a,b,c;
 scanf("%d%d%d",&a,&b,&c);
 if(b<a)permutar(a,b);
 if(c<b)permutar(b,c);
 printf("%d\n",c);
 return 0;
}
 

PD: Ahora que lo veo mejor... es el sort burbuja para 3 elementos

Saludos
« Última modificación: 1 Enero 2012, 18:35 por GarbageCollector » En línea
Sagrini

Desconectado Desconectado

Mensajes: 104

Visit las Vegas ;)


Ver Perfil WWW
Re: Código más eficiente
« Respuesta #7 en: 1 Enero 2012, 20:46 »

El tuyo no me gusta :P Tanta llamada a funciones te retrasa mucho. El mío te supera (por milésimas, pero lo hace) en cuestión de tiempo y ciclos ^^
En línea

Un saludo. Sagrini
alexis33de

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Código más eficiente
« Respuesta #8 en: 1 Enero 2012, 20:49 »

Y como se saca los tiempos, no se como se hace en mi compilador  ;D , seria bueno q alguien coloque los tiempos d todos los codigod  :rolleyes:
En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Código más eficiente
« Respuesta #9 en: 1 Enero 2012, 22:25 »

...
en CPP
Código
 
#include <cstdlib>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
/// EntryPoint
int main(int argc, char *argv[])
{
   int a = 16,
       b = 1500,
       c = 14;
 
   cout << "El maximo valor fue: " << max(a,max(b, c)) << endl;
   cin.get();
 
   return EXIT_SUCCESS;
}
 
 

en C-ANSI:

Código
 
#include <stdio.h>
#include <stdlib.h>
#define max(a,b) a>b?a:b
 
/// EntryPoint
int main(int argc, char *argv[])
{
   int a = 16,
       b = 15,
       c = 14;
 
   printf("El maximo valor fue: %d", max(a, max(b, c)));
   getchar();
 
   return EXIT_SUCCESS;
}
 
 

Tambien puedes suplantar max(a, max(b, c)) por:

Código
 
((a>((b>c)?b:c))?a:((b>c)?b:c))
///o tambien por (Son identicos solo quite los parentesis cosa NO recomendada!&#161;):
a>b>c?b:c?a:b>c?b:c
 
 

En ambos codigos... pero no se entiende muy bien que digamos, mejor deja max(a, max(b, c)) ya que se entiende muchisimo mejor!¡.

Dulces Lunas!¡.
« Última modificación: 1 Enero 2012, 22:59 por BlackZeroX (Astaroth) » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Código más eficiente
« Respuesta #10 en: 2 Enero 2012, 01:33 »

Tambien puedes suplantar max(a, max(b, c)) por:

Código
 
((a>((b>c)?b:c))?a:((b>c)?b:c))
///o tambien por (Son identicos solo quite los parentesis cosa NO recomendada!¡):
a>b>c?b:c?a:b>c?b:c
 
 
No. Esto porque el operador ">" tiene mayor prioridad que "?:" y por ello sin paréntesis esta se procesaría así:
Código:
((a > b) > c) ? b ...

Como ya comentaste mejor una función (C++) o macro (C) para obtener el máximo.

Un saludo
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Código más eficiente
« Respuesta #11 en: 2 Enero 2012, 06:39 »

No. Esto porque el operador ">" tiene mayor prioridad que "?:" y por ello sin paréntesis esta se procesaría así:

Creo que dice claramente NO RECOMENDADA...

Dulces Lunas!¡.
En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
tig0

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Código más eficiente
« Respuesta #12 en: 3 Enero 2012, 20:03 »

ahi va el mio para sacar el maximo de 8 numeros de 16 bits
Código
#include <iostream>
#include <ctime>
 
typedef __declspec(align(8)) struct
{
short _t[4];
}sal;
 
int main()
{
 
sal k, j, e;
k._t[0] = 2;
k._t[1] = 2342;
k._t[2] = 5712;
k._t[3] = 32234;
j._t[0] = 30353;
j._t[1] = 2762;
j._t[2] = 23484;
j._t[3] = 9853;
clock_t start = clock();
 
__asm {
movq mm0, k
movq mm1, j
pmaxsw mm1, mm0
pshufw mm0, mm1, 0x4e
pmaxsw mm1, mm0
pshufw mm0, mm1, 0x11
pmaxsw mm1, mm0
pshufw mm0, mm1, 0x11
pmaxsw mm1, mm0
movq e, mm0
}
clock_t end = clock();
short x = 0;
 
std::cout<< e._t[0] << std::endl << end - start << std::endl;
std::cin.get();
return 0;
}

output
Citar
32234
0
En línea
prometheus48

Desconectado Desconectado

Mensajes: 170


Making a Distro...


Ver Perfil
Re: Código más eficiente
« Respuesta #13 en: 3 Enero 2012, 20:29 »

Lo más simple que he podido:
Código
#include <iostream>
int main()
{int a,b,c;
std::cout<<"Escribe 3 numeros";
std::cin>>a>>b>>c;
int n=(a>b)?(a>c)?a:c:(b>c)?b:c;
std::cout<<"El numero mas grande es"<<n;return 0;}
En línea

"Si tú tienes una manzana, y yo otra, y las intercambiamos, tu sigues teniendo una manzana, y yo sigo teniendo una manzana.
Pero, si tu tienes una idea, y yo otra, y nos las intercambiamos, tu tienes dos ideas, y yo tengo dos ideas"
The knowledge is free
Unbr0ken

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Código más eficiente
« Respuesta #14 en: 3 Enero 2012, 22:40 »

Lo más simple que he podido:
Código
#include <iostream>
int main()
{int a,b,c;
std::cout<<"Escribe 3 numeros";
std::cin>>a>>b>>c;
int n=(a>b)?(a>c)?a:c:(b>c)?b:c;
std::cout<<"El numero mas grande es"<<n;return 0;}

No porque tu código no posea indentación es más eficiente, tampoco porque no declares el nombre de espacios "std" y lo uses en cada llamada a una de sus funciones internas ganará eficiencia.

Salud.
En línea

Cita de: Snowcrash
Discutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre.

NO resuelvo dudas vía MP, para algo está el foro.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
manera mas eficiente de ...
PHP
pedraxito 5 800 Último mensaje 1 Agosto 2007, 10:03
por Sanjuu
intercambio de datos modo eficiente
Programación C/C++
joseyana2007 8 730 Último mensaje 12 Noviembre 2008, 02:38
por joseyana2007
[Urgente] Hacer algoritmo eficiente
Programación General
Ragnarok 10 2,205 Último mensaje 17 Junio 2009, 23:47
por Shrick
¿Cual forma es más eficiente ?
Programación C/C++
carloseow 3 1,297 Último mensaje 27 Noviembre 2009, 22:07
por vertexSymphony
¿Cuál pedazo de código es más eficiente? (estructura if...else anidada o no)
Programación General
Aikanáro Anário 5 1,081 Último mensaje 13 Junio 2011, 01:32
por Edu
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines