Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.
Autor
|
Tema: Código más eficiente (Leído 1,064 veces)
|
prometheus48
Desconectado
Mensajes: 170
Making a Distro...
|
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#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
Mensajes: 110
|
Aquí te dejo mi versión,pero está en C: /*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
|
|
|
|
|
alexis33de
Desconectado
Mensajes: 50
|
Mi versión hecha en Borland  . No leí q decía sin funciones XD, nueva versión !!! #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
Mensajes: 170
Making a Distro...
|
Aun más simplificado #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
Mensajes: 104
Visit las Vegas ;)
|
El último NO es más simplificado que los otros, al contrario. Os dejo el mío  #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
Mensajes: 66
|
Otra más en C  . No se cuan rápido sea, me dio flojera comparar  #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
Mensajes: 104
Visit las Vegas ;)
|
El tuyo no me gusta  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
|
|
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.831
I'Love...!¡.
|
... en CPP #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: #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: ((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 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
|
|
|
|
rir3760
Desconectado
Mensajes: 382
|
Tambien puedes suplantar max(a, max(b, c)) por: ((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í: ((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
Mensajes: 2.831
I'Love...!¡.
|
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
|
|
|
|
tig0
Desconectado
Mensajes: 7
|
ahi va el mio para sacar el maximo de 8 numeros de 16 bits #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 32234 0
|
|
|
|
|
En línea
|
|
|
|
prometheus48
Desconectado
Mensajes: 170
Making a Distro...
|
Lo más simple que he podido: #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
Mensajes: 248
|
Lo más simple que he podido: #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
|
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.
|
|
|
|
|