Pascal/Turbo Pascal - Amigos cuadraticos en subprograma

 
Vista:

Amigos cuadraticos en subprograma

Publicado por Lyel (1 intervención) el 19/05/2018 23:05:02
Buenas, estoy empezando a aprender a usar subprogramas y nos mandaron de tarea usarlos en este ejercicio

2. Se dice que dos números X y Y son cuadráticamente amigos, si al elevar al cuadrado cada uno de ellos, la suma de los dígitos del cuadrado de X es igual a Y y viceversa. Ejemplo X= 16 y Y = 13 son amigos cuadráticos pues 16 al cuadrado es 256 y 2+5+6 = 13 y por su parte 13 al cuadrado es 169 y 1+6+9 = 16.
Realice un programa en Pascal que , usando subprogramas, muestre los números dados, sus cuadrados y que determine si dos números dados, son o NO cuadráticamente amigos .Nota :
Los números deben leerse en el programa principal hacia el subprograma y este debe devolver los resultados, para que el programa principal los muestre.

Ya me corre el programa pero a la hora de llamar al procedimiento creo que no esta tomando bien los datos y no muestra la salida ,solamente me pide X y Y y ahi se queda,aqui les dejo el codigo

program cuadradamigos;
uses crt;
var
x,y,suma1,suma2,cuadrado1,cuadrado2:integer;

PROCEDURE cuadraticos(x1,y1:integer;var suma11,suma22,cuadrado11,cuadrado22:integer);
var
digitos,division,division2,digitos2:integer;
begin

cuadrado11:=x1*x1;
suma11:=0;
while (division<>0) do
begin
digitos:=cuadrado11 mod 10;
division:=cuadrado11 div 10;
suma11:= suma11+digitos;
end;

cuadrado22:=y1*y1;
suma22:=0;
while (division2<>0) do
begin
digitos2:= cuadrado22 mod 10;
division2:=cuadrado22 div 10;
suma22:=suma22+digitos2;


end;


end;



begin
Writeln('Introduzca su primer numero x');
readln(x);
Writeln('Introduzca su segundo numero y');
readln(y);

cuadraticos(x,y,suma1,suma2,cuadrado1,cuadrado2);

if (suma1=y) and (suma2=x) then
Writeln('Sus numeros ',x,cuadrado1,' ',y,cuadrado2,'son cuadraticamente amigos')
else
Writeln('Sus numeros',x,' ',y,'no son cuadrataticamente amigos');


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
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

Amigos cuadraticos en subprograma

Publicado por dario (38 intervenciones) el 20/05/2018 05:56:00
Hola, espero esto te sirva.
Salu2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
uses crt;
var
	num1,num2:integer;
	cuad1,cuad2,c1,c2:integer;
{------------- Funciones -------------}
function sumaDigitos(n:integer):integer;
var
	a,s:integer;
begin
	s:=0;
	while n <> 0 do begin
		a:=n mod 10;
		s:= s + a;
		n:=n div 10;
	end;
	sumaDigitos:=s;
end;
{-------------------------------------}
begin
	clrscr;
	write('Ingrese primer numero: ');
	readln(num1);
	write('Ingrese segundo numero: ');
	readln(num2);
 
	cuad1:=num1 * num1;
	cuad2:=num2 * num2;
 
	writeln;
	writeln('El cuadrado de ',num1,' es ',cuad1);
	writeln('El cuadrado de ',num2,' es ',cuad2);
 
	c1:=sumaDigitos(cuad1);
	c2:=sumaDigitos(cuad2);
 
	if (c1 = num2) and (c2 = num1) then
		writeln('Los numeros ',num1,' y ',num2,' son cuadraticamente amigos')
	else
		writeln('Los numeros no son cuadraticamente amigos');
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Amigos cuadraticos en subprograma

Publicado por Lyel2 (2 intervenciones) el 20/05/2018 19:40:11
Muchas gracias amigo!!,tu codigo esta genial,incluso se me hace mas facil leer el tuyo que el mio propio!! haha,pero me gustaria entender el error que hay en mi procedure, este error hace que cuando corra el programa no corre completamente, solo pide los datos de entrada, seria genial si me ayudaras a identificar que estoy haciendo mal en el subprograma.
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

Amigos cuadraticos en subprograma

Publicado por dario (38 intervenciones) el 21/05/2018 04:41:09
Hola, tienes un bucle infinito en tu PROCEDURE, while (division <> 0). La variable division nunca cambia, asi que siempre va a ser <> 0 y nunca saldra.
Mejor es usar una funcion, tal como te lo hice.
Salu2.
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