• Publicidad

Calculadora sencilla

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Calculadora sencilla

Notapor SunlightRider » 2010-08-26 00:56 @081

Hace unos días comencé con Perl, y hace un rato decidí hacer una calculadora simple. Acá van extractos del código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $numero1 = <>;
  2. $operador = <>;
  3. $numero2 = <>;
  4.  
  5. if ($operador == "+") {
  6.         $total = ($numero1 + $numero2);
  7.         print "$total\n";
  8. }
  9. if ($operador == "-") {
  10.         $total = ($numero1 - $numero2);
  11.         print "$total\n";
  12. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El output me da la salida de todos los if(), siempre entra en todos los if() y no logro darme cuenta de porqué. Solo deseo averiguar qué es lo que está haciendo entrar en cada if(); ya he probado de las maneras que me imaginé en cada momento, pero en todas entraba. Les dejo esto, que me parece una mágnifica excusa para registrarme en el sitio.

Saludos
SunlightRider
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-08-26 00:46 @074

Publicidad

Re: Calculadora sencilla

Notapor netsoul » 2010-08-26 01:48 @117

Creo que para evaluar cadenas se utiliza eq en lugar de ==. Y que para este caso te faltaría sacar el salto de línea \n también. ;)

Otra forma de hacer una calculadora podría ser (no probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print eval <>;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Re: Calculadora sencilla

Notapor explorer » 2010-08-26 11:06 @504

Bienvenido a los foros de Perl en Español, SunlightRider.

Efectivamente, SunlightRider, como te comenta netsoul, el problema es que los operadores de comparación de igualdad que estás usando son numéricos. Eso implica que Perl hará la conversión a número de todas las cadenas de caracteres que les rodean. Así, por ejemplo,

if ($operador == "+") {

se transforma en

if (0 == 0) {

con lo que, siempre es cierto, y la consecuencia del if() se ejecuta.

Si quieres hacer comparaciones de cadenas debes usar la familia de operadores para cadenas: eq, ne, lt, gt, ge, le y cmp.

Y también no olvides lo del retorno de carro: lo que estás leyendo desde el teclado viene acompañado de ese carácter, así que deberás quitárselo antes:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$operador = <>;
chomp $operador; # quitamos el retorno de carro
if ($operador eq '+') {  # es una suma
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Calculadora sencilla

Notapor SunlightRider » 2010-08-26 13:39 @610

Gracias por la bienvenida y las soluciones. Cuando estaba intentando resolver el problema por mi mismo, me imaginé que estaba comparando cadenas de texto y usé "eq" en vez de "==", pero me traía el mismo resultado. Lo que sí no usé fue chomp() para quitar la nueva línea.

[Chomp + eq], logró que todo funcionara.

Saludos
SunlightRider
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-08-26 00:46 @074

Re: Calculadora sencilla

Notapor jax2004 » 2010-08-29 07:19 @347

También podrías poner if() y luego elsif() en el resto para que solo te entre en uno de los if(); así te ahorrarías comparaciones, aunque funcionar, te funcionará igual.
jax2004
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2010-08-18 12:55 @580


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 19 invitados