Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Código eficiente

Estas en el tema de Código eficiente en el foro de Visual Basic clásico en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 25/05/2005, 13:48
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
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... 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

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...
  #2 (permalink)  
Antiguo 25/05/2005, 14:13
Avatar de reel  
Fecha de Ingreso: febrero-2004
Ubicación: Managua, Nicaragua
Mensajes: 496
Antigüedad: 20 años, 3 meses
Puntos: 1
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
__________________
Leer es Saber, REEL.
Mi Blog

Última edición por reel; 26/05/2005 a las 09:27 Razón: por respecto a C.
  #3 (permalink)  
Antiguo 25/05/2005, 14:38
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
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.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #4 (permalink)  
Antiguo 25/05/2005, 14:41
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Calquiera diría que no es VB, (jeje)
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #5 (permalink)  
Antiguo 25/05/2005, 16:00
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
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.
  #6 (permalink)  
Antiguo 26/05/2005, 08:34
Avatar de reel  
Fecha de Ingreso: febrero-2004
Ubicación: Managua, Nicaragua
Mensajes: 496
Antigüedad: 20 años, 3 meses
Puntos: 1
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
__________________
Leer es Saber, REEL.
Mi Blog
  #7 (permalink)  
Antiguo 26/05/2005, 08:57
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
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
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:19.