[C con Clase] Preguntas acerca de el tema 6 de C++

Steven Davidson srd4121 en njit.edu
Sab Oct 22 22:58:31 CEST 2011


Hola Marcos,

2011/10/22 Marcos Collado <marquitos.mcm en gmail.com>:
> Muchas gracias Steven ahora lo entendí, perdón por haberte enviado el
> mensaje con ese correo, lo tengo de predeterminado y nunca lo cambie y lo

Me pareció extraño ver tal dirección de correo-e, pero bueno :)

> peor es que no lo uso, bueno al caso que ya lo entendí, ahora tengo otra
> pregunta, como se elevaba un numero a una potencia?
> Sería algo así 2e8? Y otra pregunta teniendo esto:
>

Ni C ni C++ ofrecen la potencia como operador. Si de verdad necesitas
esta operación, o bien la expresas explícitamente a través de
multiplicaciones o bien usas la función estándar 'pow()' que está en
<cmath>.

Esa "e" o incluso "E" significa el exponente de base 10. Esto es para
expresar números de coma flotante de forma científica. Por ejemplo,

2e8 => 2 x 10^8 = 200000000

Si quieres algo así, 3^4, entonces con 'pow()', haríamos esto:

int res = pow( 3, 4 );

Ahora bien, si quieres manejar potencias de 2, entonces puedes usar el
operador << que aplica un desplazamiento o recorrido a la izquierda, a
nivel binario. Esto es,

2^8 => nos desplazamos 8 lugares (dígitos) a la izquierda, agregando
ceros para rellenar.

En C/C++, esto sería,

1 << 8

Esto es análogo al caso del sistema decimal, cuando tenemos potencias
de 10; por ejemplo,

10^8 => un 1 seguido de 8 ceros; es decir, 100000000

En el caso anterior, hacemos prácticamente lo mismo:

2^8 => un 1 seguido de 8 ceros; es decir, 100000000 (en binario), que
en decimal es 256.


Veamos la otra duda.

>           switch(simbolo) //Elegimos dependiendo si ha puesto suma(1) resta(2) multiplicacion (3) o division(4)
>      {
>           case 1: resultado= numero1 + numero2;
>                   break;
>       case 2: resultado= numero1 - numero2;
>               break;
>       case 3: resultado= numero1 * numero2;
>               break;
>       case 4: resultado= numero1 / numero2;
>               break;
>       default: 1;

Puedes eliminar este caso por defecto, ya que no haces nada con la sentencia:

1;

>           }
> Podria poner case +: ... por ejempo
>
>   case +: resultado= numero1 + numero2; ?
> Porque según leí + equivale a numeros de 0 y 1, y entonces el ordenador lo
> leeria como un numero no?
>

En primer lugar, + es un operador, por lo tanto no tiene sentido
escribir: case +; el compilador no lo aceptará, porque espera esta
sintaxis con este patrón:

case <constante_entera> :

+ es un operador y no una "constante entera". Así que, sintácticamente
esto no es aceptable.

Por otro lado, lo que realmente quieres es el carácter '+'. Recuerda
que debes fijarte MUY bien en los tipos de los datos que tratas.
Entonces, tendrías esto:

case '+': ...
case '-': ....
case '*': ...
case '/': ....

o los caracteres que quieras usar.

En cuanto a la segunda pregunta, un carácter efectivamente es
representado como un número entero, el cual a su vez es representado
internamente como una secuencia de 0's y 1's, como todos los números
manejados por el procesador.

Eso sí, el tipo de 'simbolo' debe reflejar que ahora es un carácter.
Recuerda que C++ es un lenguaje FUERTEMENTE tipificado.


Espero ir aclarando estos temas.

Steven




Más información sobre la lista de distribución Cconclase