Practico 5 ejercicio 8 parte b

Practico 5 ejercicio 8 parte b

de Gonzalo Cabrera Quintero -
Número de respuestas: 5

Buenas,

Para la parte b del ejercicio 8, logre escribir un codigo que me detecta cuando se ingresan los espacios en blancos y cuando no, le problema es que solo me funciona si ingreso numeros de una cifra, no logro hacer que me funcione con numeros de mas de 2 cifras. El codigo que escribi es el siguiente:

program Ejercicio8b;

var

num, numfinal, result : integer;

operacion, espacio : char;

begin

(*leer numero ingresado*)

read(num);

repeat

read(espacio)

until espacio <> ' ';

operacion := espacio;

repeat

(*leemos siguiente entrada del usuario*)

read(espacio);

(*detectar si la variable espacio es un espacio en blanco o un numero entero y actuar en consecuencia para asignarle un valor a la variable numfinal*)

if espacio <> ' ' then

numfinal := ord(espacio) - ord('0')

else

begin

repeat

read(espacio)

until espacio <> ' ';

numfinal := ord(espacio) - ord('0');

end;

(*ejecturar operacion*)

case operacion of

'+' : result := num + numfinal;

'-' : result := num - numfinal;

'*' : result := num*numfinal;

'/' : result := num div numfinal;

end;

(*guardar el resultado de la operacion*)

num := result;

(*leer la siguiente entrada del usuario y detectar si ingreso un espacio en blanco o no*)

repeat

read(espacio)

until espacio <> ' ';

(*si lo que ingreso el usuario fue distinto a un espacio en blanco, suponiendo que el usuario ingreso una operacion, asignamos esa operacion a la variable operacion*)

operacion := espacio;

until operacion = '=';

writeln;

write(result);

end.

Por lo que entiendo, el problema estaria en el uso de la funcion ord(x), ya que no funciona para numeros de 2 cifras. Agradeceria mucho un consejo para encarar este problema. Desde ya, muchas gracias!


En respuesta a Gonzalo Cabrera Quintero

Re: Practico 5 ejercicio 8 parte b

de Guillermo Rey Martusciello -
Buenas, como estas? El problema en tu codigo es que estas tratando a los numeros que van a ser tus operandos como de tipo char. Esto hace que si en la entrada estandar tenes: "123 + 2 =" cuando leas por primera vez, en una variable de tipo char, tengas que lo leido sea '1'. En caso de que lo leas en una variable de tipo integer, lo que almacenaria es el entero 123. En resumen, cuando sabes que lo proximo que vas a leer es un entero, leelo en una variable de tipo integer. Recorda tambien que si tenes " 123" y haces un read con una variable de tipo integer, la lectura saltea todos los espacios que haya al inicio y solo almacena el entero 123, en caso de ser una lectura en una variable de tipo char, lo que quedaria almacenado es " ". Cualquier duda que quede, volve a preguntar!
Saludos,
Guille
En respuesta a Guillermo Rey Martusciello

Re: Practico 5 ejercicio 8 parte b

de Gonzalo Cabrera Quintero -

Muchas gracias por la ayuda! voy a probar eso

En respuesta a Gonzalo Cabrera Quintero

Re: Practico 5 ejercicio 8 parte b

de Joaquin Blanco Cran -
buenas! yo lo hice algo distinto gonza, quizas te sirva.

program calculadora;

var
entero, operacion : integer;
caracter: char;

begin

read(entero);
operacion := entero;

repeat

read(caracter)

until caracter <> ' ';

while caracter <> '=' do

begin

read(entero);

case caracter of

'*' : operacion := operacion * entero;
'+' : operacion := operacion + entero;
'/' : operacion := operacion DIV entero;
'-' : operacion := operacion - entero;

end;

repeat

read(caracter)

until caracter <> ' ';

end;

write(operacion)

end.