🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.lenguajes.c++
14 messages
14 total messages Started by ELfun Sun, 23 Aug 2009 11:06
Duda IF ?
#89
Author: ELfun
Date: Sun, 23 Aug 2009 11:06
6 lines
1350 bytes
Hola, os agradecería que me comentaseis si es correcto esta forma de
usar IF

if ((var ==3) || (var7 ==7) || (var ==15)){
 printf ("La variable es 3 , 7 o 15");
}
Re: Duda IF ?
#168
Author: josedaniel.garcia
Date: Mon, 24 Aug 2009 08:42
39 lines
2412 bytes
No entiendo bien la pregunta. ¿Sintácticamente correcto? ¿Correcto
desde el punto de vista de estilo?

Primero. La segunda condición debería ser (var==7) ¿verdad?

Segundo. Si se quiere comparar con muchos valores parece un poco
largo.

Alternativa 1:

switch (var) {
  case 3:
  case 7:
  case 15:
	std::cout << "El valor es 3, 7 o 15" << std::endl;
}

Alternativa 2: Personalmente me gusta más

int v[] = {3, 7, 15};
int * end = v + sizeof(v)/sizeof(v[0]);
if ( end != std::find(v, end, var)) {
	std::cout << "El valor es ";
	std::copy(v, end, std::ostream_iterator<int>(std::cout, " "));
}


On 23 ago, 13:06, ELfun <virtial.di...@gmail.com> wrote:
> Hola, os agradecería que me comentaseis si es correcto esta forma de
> usar IF
>
> if ((var ==3) || (var7 ==7) || (var ==15)){
>  printf ("La variable es 3 , 7 o 15");
>
>
>
> }- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -
Re: Duda IF ?
#169
Author: Pascal J. Bourguignon
Date: Mon, 24 Aug 2009 09:28
27 lines
2055 bytes
ELfun <virtial.disco@gmail.com> writes:

> Hola, os agradecer�a que me comentaseis si es correcto esta forma de
> usar IF
>
> if ((var ==3) || (var7 ==7) || (var ==15)){
>  printf ("La variable es 3 , 7 o 15");
> }

Si es correcto.


Yo escribir�a :

    #include <ciso646>
    #include <iostream>

    void f(int var){

       if((var==3) or (var==7) or (var==15)){
           std::cout<<"La variable es 3, 7 o 15."<<std::endl;
       }

    }

-- 
__Pascal Bourguignon__
Re: Duda IF ?
#170
Author: ELfun
Date: Mon, 24 Aug 2009 10:12
44 lines
2635 bytes
On 24 ago, 10:42, "josedaniel.garcia"
<josedaniel.garcia.u...@gmail.com> wrote:
> No entiendo bien la pregunta. ¿Sintácticamente correcto? ¿Correcto
> desde el punto de vista de estilo?
>
> Primero. La segunda condición debería ser (var==7) ¿verdad?
Si, fue un error al teclear....
>
> Segundo. Si se quiere comparar con muchos valores parece un poco
> largo.
>
> Alternativa 1:
>
> switch (var) {
>   case 3:
>   case 7:
>   case 15:
>         std::cout << "El valor es 3, 7 o 15" << std::endl;
>
> }
>
> Alternativa 2: Personalmente me gusta más
>
> int v[] = {3, 7, 15};
> int * end = v + sizeof(v)/sizeof(v[0]);
> if ( end != std::find(v, end, var)) {
>         std::cout << "El valor es ";
>         std::copy(v, end, std::ostream_iterator<int>(std::cout, " "));
>
> }
>
OK, es lo que quería saber las diferentes alternativas, pero me surge
otra pregunta de las tres posibles soluciones cual es la que genera
menos código maquina por el compilador?..

> On 23 ago, 13:06, ELfun <virtial.di...@gmail.com> wrote:
>
> > Hola, os agradecería que me comentaseis si es correcto esta forma de
> > usar IF
>
> > if ((var ==3) || (var7 ==7) || (var ==15)){
> >  printf ("La variable es 3 , 7 o 15");
>
Re: Duda IF ?
#171
Author: Pascal J. Bourguignon
Date: Mon, 24 Aug 2009 11:56
40 lines
2631 bytes
ELfun <virtial.disco@gmail.com> writes:
> OK, es lo que quer�a saber las diferentes alternativas, pero me surge
> otra pregunta de las tres posibles soluciones cual es la que genera
> menos c�digo maquina por el compilador?..

Depende de los valores con que comparas, y del compilador.

Si tienes valores agrupados:

    if(a==1){
        ...
    }else if((a==2) or (a==3)){
        ...
    }else if(a==4){
        ...
    }else{
        ...
    }

entonces con un switch el compilador podra generar una tabla de
saltos, basicamente algo como:
    
   if((a<1)or(a<4)){
      ...
   }else{
      (tabla[a])();
   }

Pero con valores como la que muestras, lo mas probable es que el
compilador generara exactamente el mismo codigo con un if o con un
switch.


Lo mejor es comprobarlo t� mismo, con:

       g++ -S -o file.s file.c++
       cat file.s

-- 
__Pascal Bourguignon__
Re: Duda IF ?
#172
Author: Pedro Maicas
Date: Mon, 24 Aug 2009 18:06
29 lines
2518 bytes
On Mon, 24 Aug 2009 03:12:55 -0700 (PDT), ELfun <virtial.disco@gmail.com>
wrote:

>OK, es lo que quer�a saber las diferentes alternativas, pero me surge
>otra pregunta de las tres posibles soluciones cual es la que genera
>menos c�digo maquina por el compilador?..

esa pregunta hoy en d�a carece de sentido, en otro tiempos 
casi se podr�a asegurar que if es menos eficiente que switch,
pero ahora y los compiladores han llegado a unos niveles que 
ni te lo imaginas. Simplemente hazlo de la manera que te 
quede m�s claro, desde luego si son mas de dos o tres valores
parece claro que queda mejor con switch, aunque este tiene
la limitacion de que a comparacion ha de ser con valores constantes.

En el if adem�s est� el tema de la evaluacion en cortocircuito,
el if que has puesto en tu primer mensaje t�picamente evalua
la primera condicion y si es cierta ya no evalua las siguientes,
cosa que con varios if no sucede.

Por otro lado el fuente gana en claridad si pones espacios en 
blanco en las expresiones, al compialdor le da lo mismo pero al 
sufrido programador no.

Saludos :-)           -Pedro-

  http://www.maicas.net/ 

  e-mail en www.maicas.net
Re: Duda IF ?
#173
Author: josedaniel.garcia
Date: Tue, 25 Aug 2009 07:33
70 lines
3812 bytes
Creo que la pregunta no es cual génera menos código máquina. Parece
que esa pregunta hace la asunción de que a menos código máquina menos
tiempo de ejecución. Eso no tiene por qué ser cierto siempre.

La pregunta correcta es cuál ejecuta más rápido. La mejor manera de
saberlo es compilar las solcuiones y medir en la máquina destino.

Mi impresión inicial es que si vas a comparar con 3 o 4 valores da
igual, excepto que se trate de una comparación que se encuentre muy
anidada dentro de bucles. Ahora bien si se trata de una cantidad
enorme de valores, tiene sentido usar la solución basada en vector.


On 24 ago, 12:12, ELfun <virtial.di...@gmail.com> wrote:
> On 24 ago, 10:42, "josedaniel.garcia"<josedaniel.garcia.u...@gmail.com> wrote:
> > No entiendo bien la pregunta. ¿Sintácticamente correcto? ¿Correcto
> > desde el punto de vista de estilo?
>
> > Primero. La segunda condición debería ser (var==7) ¿verdad?
>
> Si, fue un error al teclear....
>
>
>
>
>
> > Segundo. Si se quiere comparar con muchos valores parece un poco
> > largo.
>
> > Alternativa 1:
>
> > switch (var) {
> >   case 3:
> >   case 7:
> >   case 15:
> >         std::cout << "El valor es 3, 7 o 15" << std::endl;
>
> > }
>
> > Alternativa 2: Personalmente me gusta más
>
> > int v[] = {3, 7, 15};
> > int * end = v + sizeof(v)/sizeof(v[0]);
> > if ( end != std::find(v, end, var)) {
> >         std::cout << "El valor es ";
> >         std::copy(v, end, std::ostream_iterator<int>(std::cout, " "));
>
> > }
>
> OK, es lo que quería saber las diferentes alternativas, pero me surge
> otra pregunta de las tres posibles soluciones cual es la que genera
> menos código maquina por el compilador?..
>
>
>
> > On 23 ago, 13:06, ELfun <virtial.di...@gmail.com> wrote:
>
> > > Hola, os agradecería que me comentaseis si es correcto esta forma de
> > > usar IF
>
> > > if ((var ==3) || (var7 ==7) || (var ==15)){
> > >  printf ("La variable es 3 , 7 o 15");- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -
Re: Duda IF ?
#174
Author: josedaniel.garcia
Date: Tue, 25 Aug 2009 07:41
44 lines
2568 bytes
El token or es una representación alternativa para ||. La razón de la
existencia de estas representaciones alternativas es la no existencia
de algunos caracteres en algún sistema.

Si ese es el problema el código propuesto se debería teclear como:

%: include <ciso646>
%: include <iostream>

void f(int var) <%
  if ((var==3) or (var==7) or (var==15)) <%
    std::cout << "L avariable es 3, 7 o 15." <<std::endl;
  %>
%>

Pero vamos en cualquier máquina moderna esto no es necesario.

On 24 ago, 11:28, p...@informatimago.com (Pascal J. Bourguignon)
wrote:
> ELfun <virtial.di...@gmail.com> writes:
> > Hola, os agradecería que me comentaseis si es correcto esta forma de
> > usar IF
>
> > if ((var ==3) || (var7 ==7) || (var ==15)){
> >  printf ("La variable es 3 , 7 o 15");
> > }
>
> Si es correcto.
>
> Yo escribiría :
>
>     #include <ciso646>
>     #include <iostream>
>
>     void f(int var){
>
>        if((var==3) or (var==7) or (var==15)){
>            std::cout<<"La variable es 3, 7 o 15."<<std::endl;
>        }
>
>     }
>
> --
> __Pascal Bourguignon__
Re: Duda IF ?
#175
Author: Pascal J. Bourguignon
Date: Tue, 25 Aug 2009 08:49
11 lines
2042 bytes
"josedaniel.garcia" <josedaniel.garcia.uc3m@gmail.com> writes:

> El token or es una representaci�n alternativa para ||. La raz�n de la
> existencia de estas representaciones alternativas es la no existencia
> de algunos caracteres en alg�n sistema.

Quizas.  Yo lo uso porque me parecen m�s leible 'or' y 'and' que '||' y '&&'.


-- 
__Pascal Bourguignon__
Re: Duda IF ?
#176
Author: Pedro Maicas
Date: Tue, 25 Aug 2009 16:57
21 lines
2050 bytes
On Tue, 25 Aug 2009 10:49:42 +0200, pjb@informatimago.com (Pascal J.
Bourguignon) wrote:

>
>Quizas.  Yo lo uso porque me parecen m�s leible 'or' y 'and' que '||' y '&&'.

Todav�a recuerdo cuando aprendi C y descubr� el
maravilloso #define, lo primero que hice fu� redefenir
todas las palabras clave del lenguaje para hacerlo m�s 'legible',
y por supuesto nunca llegu� a usar las definicione aquellas :-)

Esto del 'or' yo ni lo sab�a, pero me parece que de legible tiene
poco (para mi) , no me queda claro si se refiere a || o a | ,
y es muy diferente si se trata de una cosa o de la otra.


Saludos :-)           -Pedro-

  http://www.maicas.net/ 

  e-mail en www.maicas.net
Re: Duda IF ?
#177
Author: josedaniel.garcia
Date: Wed, 26 Aug 2009 07:24
21 lines
2512 bytes
On 25 ago, 10:49, p...@informatimago.com (Pascal J. Bourguignon)
wrote:
> "josedaniel.garcia" <josedaniel.garcia.u...@gmail.com> writes:
> > El token or es una representación alternativa para ||. La razón de la
> > existencia de estas representaciones alternativas es la no existencia
> > de algunos caracteres en algún sistema.
>
> Quizas.  Yo lo uso porque me parecen más leible 'or' y 'and' que '||' y '&&'.
>
> --
> __Pascal Bourguignon__

El problema es que aunque a ti y a mi nos parezca más legible, se
aparta bastante del uso común en la comunidad C++. Por ejemplo, no
encontrarás libros de C++ que lo usen. Esto hace que tu código no lo
pueda leer facilmente todo el mundo (ergo, problemas de
mantenimiento). Como comentaba la razón, fundamental es ayudar en el
caso de sistemas que no tienen en su juego de caracteres || o && (cosa
difícil pero posible).
Re: Duda IF ?
#178
Author: oscareto74
Date: Fri, 28 Aug 2009 15:46
14 lines
1895 bytes
On 23 ago, 06:06, ELfun <virtial.di...@gmail.com> wrote:
> Hola, os agradecería que me comentaseis si es correcto esta forma de
> usar IF
>
> if ((var ==3) || (var7 ==7) || (var ==15)){
>  printf ("La variable es 3 , 7 o 15");

Te sugiero que en vez de evaluar var==3, usaras 3==var... esto por si
se te olvida un =, entonces tal vez te arroje un warning pero
compilará con una asignación (siempre verdadera) en vez de con una
evaluación...

Por lo demás, no le veo ningún inconveniente...
Re: Duda IF ?
#180
Author: znôrt
Date: Sat, 05 Dec 2009 21:34
12 lines
1515 bytes
On Sun, 23 Aug 2009 13:06:36 +0200, ELfun <virtial.disco@gmail.com> wrote:

> Hola, os agradecería que me comentaseis si es correcto esta forma de
> usar IF
>
> if ((var ==3) || (var7 ==7) || (var ==15)){
>  printf ("La variable es 3 , 7 o 15");
> }

correcto!
Re: Duda IF ?
#181
Author: znôrt
Date: Sun, 06 Dec 2009 12:38
31 lines
2053 bytes
On Mon, 24 Aug 2009 10:42:05 +0200, josedaniel.garcia  
<josedaniel.garcia.uc3m@gmail.com> wrote:

> Alternativa 2: Personalmente me gusta más
>
> int v[] = {3, 7, 15};
> int * end = v + sizeof(v)/sizeof(v[0]);
> if ( end != std::find(v, end, var)) {
> 	std::cout << "El valor es ";
> 	std::copy(v, end, std::ostream_iterator<int>(std::cout, " "));
> }

personalmente, me encuentro esto en un fuente y busco al programador para  
matarlo. y después lo despido, por terrorista y por no entender que los  
ciclos de la cpu humana, el selebro, son los más escasos y valiosos de  
todos :D

nah, aqui probando el opera mail y viendo qué se cuece en este reducto  
prehistórico. aprovecho para saludar a pedro maicas. cuánto tiempo, viejo!  
:D
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads