Pascal/Turbo Pascal - Explicación de impresión

 
Vista:

Explicación de impresión

Publicado por Nicolas (1 intervención) el 16/04/2022 15:36:57
Holaaaaa! Tengo el siguiente programa, el cual imprime -2, pero no puedo entender como se llega al resultado. agradezco desde ya cualquier ayuda.

Program funciones;
function restar(a:integer; b:integer):integer;
begin
restar:= a-b;
end;
var
c,d:integer;
begin
c:=8;
d:=9;
write (restar(restar(c,d) ,restar(d,c)));
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Explicación de impresión

Publicado por David (224 intervenciones) el 16/04/2022 17:36:27
No sé que es exactamente lo que te piden pero creo que el error puede estar en esta línea:

write (restar(restar(c,d) ,restar(d,c))); ya que llamas dos veces a la función
yo creo que lo correcto sería write(restar(c,d),' ',restar(d,c));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 287
Oro
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Explicación de impresión

Publicado por dario (87 intervenciones) el 17/04/2022 03:26:34
Hola, el codigo te debe quedar asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Program funciones;
 
function restar(a:integer; b:integer):integer;
begin
    restar:= a-b;
end;
{-----------------------------------------}
 
var
    c,d:integer;
begin
    c:=56;
    d:=10;
    write(restar(c,d));
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Explicación de impresión

Publicado por joack (4 intervenciones) el 19/10/2022 09:06:33
La respuesta a porque el resultado es -2 es sencillo

si traducimos la function a una expresión matemática nos daría como resultado: "A - B = ?" donde A y B son los valores pasados por parámetro y "?" es el resultado de la expresión.
Ahora bien, desglosando un poquito el código podemos ver la siguiente línea que está en tu código:

1
write (restar(restar(c,d) ,restar(d,c)));

vemos que a la function restar (la externa) se le esta pasando como primer parámetro el resultado de invocar a restar con los parámetros C y D, y como segundo parámetro le pasamos el resultado de invocar a restar pero con los parámetros D y C (esta vez están invertidos).

Si C es igual a 8 y D es igual a 9 entonces podemos determinar lo siguiente:

Tenemos una resta de A - B con un resultado que sabemos que es -2
ahora el primer parametro (en este caso A) dijimos que es la resta entre C y D, entonces podemos determinar que A = 8 - 9
el segundo parametro ( B en este caso) determinamos que era la resta entre D y C, entonces podemos determinar que B = 9 - 8

Si juntamos todo entonces nos queda algo como esto:

A => 8 - 9 , B => 9 - 8

A - B = - 2 => reemplazamos A y B por los valores correspondientes
(8 - 9) - (9 - 8) = - 2
-1 - 1 = - 2
-2 = -2

Traduciendolo a codigo podriamos tener algo como esto para que se entienda más fácil:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Program funciones;
 
function restar(a:integer; b:integer):integer;
begin
    restar:= a-b;
end;
{-----------------------------------------}
 
var
    c,d:integer;
    resultOne, resultTwo: integer;
begin
    c:=8;
    d:=9;
 
    resultOne:= restar(c,d); {este restar debería resultar en un -1}
    resultTwo:= restar(d,c); {este restar debería resultar en un  1}
 
    write (restar(resultOne ,resultTwo)); {este restar final deberá imprimir por pantalla -2}
end.

Espero que te haya servido de algo la explicación. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar