Ejercicio 9 Practico 8

Ejercicio 9 Practico 8

de Agustin Mederos Shalum -
Número de respuestas: 1

Buenas, tengo un tema con el final del programa, se supone que al ingresar -1 debe parar, pero el programa para de tomar entradas cuando ingreso dos veces el -1, no estaria resultando nada para corregirlo, si alguien me puede ayudar lo agradezco!

program esMultiplo;

var n, m : integer;

function esMultiplo(num, mult : integer) : boolean;
begin
if num > mult then
    if (num mod mult = 0) then
        begin
        esmultiplo := true;
                writeln(num, ' ', mult);
                writeln('Si');
        end
        else
            begin
                    writeln(num, ' ', mult);
                    writeln('No');
            end;
else
    if (num mod mult = 0) then
        begin
            esmultiplo := true;
            writeln(mult, ' ', num);
            writeln('Si');
        end
        else
            begin
                writeln(mult, ' ', num);
                writeln('No');
            end;
end;

begin
writeln;
repeat
write('Ingrese dos numero o ingrese -1 dos veces: ');
readln(n, m);
if (n >= m) then
    esMultiplo(n, m)
else
    esMultiplo(m, n);
until n = -1;
writeln;
end.

image%20%281%29.png
 
Dejo el codigo en texto por si quieren probarlo y en foto por la indentacion. (La mejor solucion que encontre es pedirle al usuario que ingrese dos veces el valor -1)
En respuesta a Agustin Mederos Shalum

Re: Ejercicio 9 Practico 8

de Luis Sierra -
hola agustín,

antes de ver tu pregunta, observa que el subprograma esMultiplo que programaste tiene varios problemas:
* se pide que el subprograma sea una función, pero tú escribiste un procedimiento,
* violas la recomendación de estilo: No hacer entrada y salida dentro de funciones (read, write, etc), como puedes ver en la Guía teórica Funciones y Procedimientos,
* el análisis de casos es incorrecto: estoy seguro que si invocas esMultiplo (2,4) se escribirá en pantalla 'No', en vez de devolver True.

yendo a tu pregunta, observa que tu única lectura está en la línea 37, y ahí lees dos enteros. por lo tanto, tu programa siempre lee una cantidad par
de números, pero todas las entradas tienen una cantidad impar de números: "que lea ... parejas de enteros positivos ... terminar con el valor -1". claramente, no puedes leer de a dos enteros. asegúrate de leer una cantidad impar de elementos; quizá te conviene leer de a uno. revisa el esquema de la lectura con centinela de la Guía teórica para Repetición.

trata de avanzar en esos dos problemas diferentes que tiene tu código, la función mal escrita, y la lectura de una cantidad par de entradas (cuando hay que leer una cantidad impar). vuelve a consultar por cualquier duda.

saludos
luis