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!
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;
}
Mi version, usar system pause? :-X
#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;
}
Mi versión hecha en Borland ;D. 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;
}
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]
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;
}
Otra más en C ;D. No se cuan rápido sea, me dio flojera comparar :laugh:
#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
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 ^^
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 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!¡.
Cita de: BlackZeroX (Astaroth) en 1 Enero 2012, 22:25 PM
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
Cita de: rir3760 en 2 Enero 2012, 01:33 AM
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!¡.
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
Citar32234
0
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;}
Cita de: prometheus48 en 3 Enero 2012, 20:29 PM
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.
Ya,
Lo se, esta vez lo que quise era hacerlo lo mas simple posible, vamos sigo el principio KISS
Salud a ti tambien.
Y Salu2 a todos!
mi version: :D
int main()
{
int vals[] = {0x1456,0x1120,0x2480,0x2345,0x121,0x1900,0x967,0x1356};
__asm
{
mov ecx,0x8;
xor esi,esi
xor eax,eax
l: mov edx,vals[esi]
cmp edx,eax
jl m
mov eax,edx
m: add esi,0x04
loop l
}
return 0;
}
output eax: 0x2480 :D
aver si alguien se anima a publicar un reto :3
como antes...
Cita de: RHL - 该0在 en 4 Enero 2012, 01:35 AM
aver si alguien se anima a publicar un reto :3
See.. se aprenden varias cosas al "diseccionar" un problema como se hizo en este hilo. ;D
Saludos