Problema tontísimo (mucho) con Pascal

varuk

Vamos a ver, tengo que hacer una chuminada con Pascal, usando el "Free Pascal". Bueno, el programa es basicamente una calculadora:

program FEDA_es_ADEF;

Var

    operando1,operando2: Integer;
    operador: Char;


Begin


    Writeln('Escribe la operacion que deseas realizar');
    Read(operando1);
    Read(operando2);
    Read(operador);

    Readln;

    CASE operador OF

    '+': Writeln('El resultado es: ',operando1+operando2);
    '-': Writeln('El resultado es: ',operando1-operando2);
    '*': Writeln('El resultado es: ',operando1*operando2);
    '/': Writeln('El resultado es: ',operando1 DIV operando2);

    ELSE Writeln('Operador incorrecto');

    Readln;

    End;


End.

Bien, cuando lo ejecuto y lo pruebo, al meter uno de los 4 carácteres de suma, resta, multiplicación o división el programa automaticamente me salta con este error:

Pues eso, que he probado a cambiar lo del operador y ponerle, por ejemplo, que al meter un número haga las operaciones. Vamos, que falla con los operadores de turno.
¿Alguna idea del fallo?

Gracias gente.

NeB1

Nunca he programado en pascal, pero prueba esto:

caso 1
caso 2
varuk

He comprobado cosas y he visto que si pongo la operación así:

  • 5 1

El resultado me da 6. Bien.

Sin embargo, si lo pongo asi:

5 + 1

Me da el error. No sé... sólo me sale bien si pongo el operador al principio.

TeNSHi

Yo tampoco tengo ni idea de pascal pero eso es que te esta haciendo la operación en inorden:

Raiz (centro) - izquierda - derecha, si pones 5 + 1 hace + 5 1, lo cual es normal que te de error.

NeB1

No es porque le está cogiendo los saltos de carro del buffer?

    Read(operando1);
    Readln;
    Read(operando2);
    Readln;
    Read(operador);
    Readln;

Si haces eso que tal va?

atom

Simplemente te has equivocado en el orden de lectura de operandos, intentas hacer la operación 5+1 y el programa está leyendo:

    Read(operando1);
    Read(operando2);
    Read(operador);

Lo correcto sería:

    Read(operando1);
    Read(operador);
    Read(operando2);

O también lo puedes resumir en una línea:

    Read(operando1, operador, operando2);

Así me funciona:

program FEDA_es_ADEF;

Var

    operando1,operando2: Integer;
    operador: Char;


Begin

    Writeln('Escribe la operacion que deseas realizar');
    Read(operando1, operador, operando2);

    Readln;

    CASE operador OF

    '+': Writeln('El resultado es: ',operando1+operando2);
    '-': Writeln('El resultado es: ',operando1-operando2);
    '*': Writeln('El resultado es: ',operando1*operando2);
    '/': Writeln('El resultado es: ',operando1 DIV operando2);

    ELSE Writeln('Operador incorrecto');

    Readln;

    End;


End.
paulvandyk

El problema está en que te esta leyendo el + como un digito de un numero entero.

Si pones 1 + 2 (separados por espacios)

read(operando1); -> lee 1
read(operando); -> lee el espacio
read(operando2); -> lee el + = ERROR!!!!!!

Es decir, los números que puede leer son del número de dígitos que soporte int. Pero los char solo lee uno, sea cual sea.

¿Soluciones?

Sino quieres modificarlo pues ponlo asi: Numero1(espacio)+Numero2 Ej: 1 +2

Puedes modificarlo como tu has dicho. +1 2

O paso por paso: (en el orden que quieras).

writeln('dame el primer número' );
readln(operando1);
writeln('dame el segundo número' );
readln(operando2);
writeln('+ , - , /, *);
readln(operando);

NeB1

Ostras claro q estás introduciendo 5 + 4 y tienes otro orden de entrada de datos, que fuerte xDDD y yo rallandome

C

Dificultades para hacer una calculadora en Pascal, vais bien.

C

#9, nadie nació sabiendo.

Yo con 30 años y 10 de experiencia soy el puto amo. Pero cuando tenía 9 años necesité copiar los programas del manual del Amstrad para empezar a enterarme de las cosas.

Haber si ahora vamos a ir de listos todos con los nuevos.

varuk

Muchas gracias gente ^.

B

#10 No va de listo, simplemente tiene un problema mental muy serio que le genera bastante conflicto a diario: siente la necesidad de ir diciéndole a todo el mundo lo estúpida/retrasada/ignorante/etc que es para sentirse superior. O quizá lo hace simplemente para dar por culo, lo cual sería aun más enfermizo. Lo que si está claro es que solo lo hace por inet. De hacer lo mismo en vivo y en directo (y no a través de una pantallita y su teclado lleno de roña) no tendría tiempo de andar posteando en Mediavida porque se pasaría el santo día dando/recibiendo hostias.

Vamos, que es un enfermo de MMORPG y el manga/anime que cuando se aburre se dedica a trollear sin juicio. Lo que no entiendo es como conserva aún su cuenta.


EDIT

#13 Pues espera sentado. Al parecer ya le banearon con anterioridad y ahora que vuelve a tener cuenta se pasa el día trolleando. Ese chaval no tiene remedio

NeB1

#12 jajaja como os pasais. Seguramente no tiene mucho más nivel que los que postean habitualmente por aquí, estoy seguro que pronto se le pasará esa tonteria.

Usuarios habituales