Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Visual Basic clásico (http://www.forosdelweb.com/f69/)
-   -   Código eficiente (http://www.forosdelweb.com/f69/codigo-eficiente-301691/)

MaxExtreme 25/05/2005 13:48

Código eficiente
 
Cita:

Iniciado por reel
Me vas disculpar MaxExtrem todo hiba bien, hasta que dijistes un línea de código contra 3.

Me parece que te equivocas, porque al compilar eso a un exe o lo que sea, se debe trasformar (proceso de compilar) en lenguaje máquina. Se de transformar cada una las condicones que has puesto a lenguaje máquina, y en lenguaje de máquina podrían ser una mas instruciones para procesador. Así que no puedes decir que esa línea de código representa una sola instrucción en el procesador.

Así que un programa, independiende del lenguaje, sera eficiente siempre y cuando haga buen uso de nuestro gran amigo el CPU.

Saludes

Él estaba hablando de número de líneas (que además era 6 contra 1). Y si hablamos de rendimiento, no tiene nada que ver:
C++ compila a lenguaje máquina, VB lo hace "semi"
C++ tiene un rendimiento mayor a VB en mucho sea el código que sea...
Los compiladores saben perfectamente cómo compilar un bucle de ése tipo de la mejor manera posible. En cambio, lo que hace ese bucle de VB es menos ortodoxo y habría que ver qué código quedaba... En cualquier caso hay más posibilidades de que lo compile bien porque el for es un bucle natural, no la que se monta en VB para hacer algo un poco más difícil.

Y no, no me equivoco, sé perfectamente que una línea no equivale a una instrucción de ASM... (que he programado en ASM...). Y si no díselo a los programas de C que ocupan eso, 1 línea... :cool: Aquí tienes un ejemplo, ofuscado con el preprocesador incluido (retorcido para que no se lea bien):

Código:

#define D define
#D Y return
#D R for
#D e while
#D I printf
#D l int
#D W if
#D C y=v+111;H(x,v)*y++= *x
#D H(a,b)R(a=b+11;a<b+89;a++)
#D s(a)t=scanf("%d",&a)
#D U Z I
#D Z I("123\
45678\n");H(x,V){putchar(".XO"[*x]);W((x-V)%10==8){x+=2;I("%d\n",(x-V)/10-1);}}
l V[1600],u,r[]={-1,-11,-10,-9,1,11,10,9},h[]={11,18,81,88},ih[]={22,27,72,77},
bz,lv=60,*x,*y,m,t;S(d,v,f,_,a,b)l*v;{l c=0,*n=v+100,j=d<u-1?a:-9000,w,z,i,g,q=
3-f;W(d>u){R(w=i=0;i<4;i++)w+=(m=v[h[i]])==f?300:m==q?-300:(t=v[ih[i]])==f?-50:
t==q?50:0;Y w;}H(z,0){W(E(v,z,f,100)){c++;w= -S(d+1,n,q,0,-b,-j);W(w>j){g=bz=z;
j=w;W(w>=b||w>=8003)Y w;}}}W(!c){g=0;W(_){H(x,v)c+= *x==f?1:*x==3-f?-1:0;Y c>0?
8000+c:c-8000;}C;j= -S(d+1,n,q,1,-b,-j);}bz=g;Y d>=u-1?j+(c<<3):j;}main(){R(;t<
1600;t+=100)R(m=0;m<100;m++)V[t+m]=m<11||m>88||(m+1)%10<2?3:0;I("Level:");V[44]
=V[55]=1;V[45]=V[54]=2;s(u);e(lv>0){Z do{I("You:");s(m);}e(!E(V,m,2,0)&&m!=99);
W(m!=99)lv--;W(lv<15&&u<10)u+=2;U("Wait\n");I("Value:%d\n",S(0,V,1,0,-9000,9000
));I("move: %d\n",(lv-=E(V,bz,1,0),bz));}}E(v,z,f,o)l*v;{l*j,q=3-f,g=0,i,w,*k=v
+z;W(*k==0)R(i=7;i>=0;i--){j=k+(w=r[i]);e(*j==q)j+=w;W(*j==f&&j-w!=k){W(!g){g=1
;C;}e(j!=k)*((j-=w)+o)=f;}}Y g;}

Eso es el juego del Othello en C :risa: :risa:

Si quieres realmente velocidad, en C++ declaro las variables "i" y "j" como "register", que le indican al compilador como sugerencia que las almacene en un registro...

reel 25/05/2005 14:13

Código:

for(int i=0, int j=999, bool a=false ; a==false && i<=j ; i+=2, j/=2)
{
// Aquí podemos incluir nuestro código de verdad
// sin molestar al resto
}

[/HTML]

Ahora este?

Código:

int i,j;
bool a;

j = 999;

a = false;

for(i=0;a==false && i<=j;i+=2,j/=2);

Lo único que puedo decir que ma perere demasiada ligereza medir la calidad de un programa por sus líneas de código.

Sin duda tienens razón el compilador de Visual Basic no es muy bueno que se diga, sin duda las aplicaciones compiladas en C (icluyendo todos sus sabores) son mejores.

Lo que no me parecio fue la comparación de la lineas de código, un buen programador no se fija eso núnca.

Espero que estés de acuerdo conmigo.

Saludes :adios:

Eternal Idol 25/05/2005 14:38

La comparacion esa es muy logica, se compara la potencia y versatilidad, la simplicidad para realizar una tarea. No la calidad de un programa que obviamente no va a ocupar un par de lineas.

GeoAvila 25/05/2005 14:41

Calquiera diría que no es VB, (jeje)

MaxExtreme 25/05/2005 16:00

Cita:

Iniciado por reel
Código:

int i,j;

j = 999;

bool a;

bool = false;

for(i=0;a==false && i<=j;i+=2,j/2);


Ese código es incorrecto... Aparte de que se hace todo en el bucle para dar independencia de las variables declaradas en él mismo.

Debería ser así:

Código:

int i,j;
bool a;
for(i=0,j=999,a=false;a==false&&i<=j;i+=2,j/=2){/* ... */ }

Pero no estábamos diciendo que un programa sea mejor por las líneas de código...

Estábamos diciendo la capacidad de expresarse en un determinado lenguaje. En VB no te puedes expresar con total capacidad.

reel 26/05/2005 08:34

MaxExtreme

Si es ese código es incorrecto, pues te lo dices a ti mismo porque lo tome de tu ejemplo.

Ahora, toda en la vida es ralativo ... hasta la verdad, tu eres una persona muy cerrada y te cuesta dar la mano a tus semejantes ... bueno eso me parece ...

Etonces ... si tu lo dices así es.

Saludes :adios:

MaxExtreme 26/05/2005 08:57

Cita:

Iniciado por reel
MaxExtreme

Si es ese código es incorrecto, pues te lo dices a ti mismo porque lo tome de tu ejemplo.

Ahora, toda en la vida es ralativo ... hasta la verdad, tu eres una persona muy cerrada y te cuesta dar la mano a tus semejantes ... bueno eso me parece ...

Etonces ... si tu lo dices así es.

Saludes :adios:

No querido...

A "correcto" me refería a bien escrito, y no, por ejemplo: te has comido el "=" de "j/=2", pones "bool = false", inicializas la "j" fuera e "i" dentro, la "a" no la inicializas...

Además que ese código no dice nada nuevo a lo que había escrito...

Me cuesta dar la mano a semejantes que me sueltan "Si es ese código es incorrecto, pues te lo dices a ti mismo porque lo tome de tu ejemplo." y se quedan tan anchos." cuando en realidad su código ni es el mío y está clarísimamente mal. :pensando:


La zona horaria es GMT -6. Ahora son las 23:28.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.