|    
			
				25/04/2005, 12:38
			
			
			  | 
  |   |  |  |  Fecha de Ingreso: agosto-2003 Ubicación: Zaragoza 
						Mensajes: 25
					 Antigüedad: 22 años, 2 meses Puntos: 0 |  | 
  |  Pascal, funciones y otras cosillas  
  HolaOs comento, para las practicas de la universidad me han mando que haga un programa que haga varios calculos introduciendo un radio y una altura. Los calculos los realizo con funciones asi como dar valores al radio y la altura.
 Os coloco el codigo para que lo veais:
 
 program Calculos;
 const
 pi=3.1415926;
 function cambiarRadio:real;
 var
 r:real;
 begin
 {$I-}
 Repeat
 writeln('');
 writeln('Nuevo Radio');
 readln(r);
 UNtil (IOResult=0) and (r>0);
 cambiarRadio:=r;
 End;
 function cambiarAltura:real;
 var
 al:real;
 begin
 {$I-}
 Repeat
 writeln('');
 writeln('Nueva Altura');
 readln(al);
 Until (IOResult=0) and (al>0);
 cambiarAltura:=al;
 End;
 function mensaje:integer;
 var
 n:integer;
 Begin
 {$I-}
 Repeat
 writeln('');
 writeln('Elige la opcion');
 writeln('1.Cambiar el radio considerado para los calculos');
 writeln('2.Modificar el valor de la altura');
 writeln('3.Calcular el perimetro de la circunferencia');
 writeln('4.Calcular el area de la circulo');
 writeln('5.Calcular el volumen de la esfera');
 writeln('6.Calcular el volumen del cilindro');
 writeln('7.Calcular todos los valores anteriores a la vez');
 writeln('8.Salir del programa');
 readln(n);
 Until (IOResult=0) or (n<>0) or (n=1) or (n=2) or (n=3) or (n=4) or (n=5) or (n=6) or (n=7) or (n=8);
 mensaje:=n;
 End;
 function perimetro(r:real):real;
 var
 pe : real;
 begin
 pe:= 2*pi*r;
 perimetro:=pe;
 end;
 function area(r:real):real;
 var
 a : real;
 begin
 a:= pi*sqr(r);
 area:=a;
 end;
 function vole(r:real):real;
 var
 voe : real;
 begin
 voe:= 4/3*pi*(r*r*r);
 vole:=voe;
 end;
 function cili(r:real;al:real):real;
 var
 cil : real;
 begin
 cil:=(2*pi*r)*al;
 cili:=cil;
 end;
 var
 
 n :integer;
 ra, al, per, ar, vo, ci: real;
 Begin
 Repeat
 n:=mensaje;
 Case n of
 1:  ra:=cambiarRadio;
 
 2:  al:=cambiarAltura;
 3:  begin
 
 per:=perimetro(ra);
 writeln('');
 writeln('El perimetro es ',per:2:2);
 writeln('');
 
 
 end;
 4:  begin
 ar:=area(ra);
 writeln('');
 writeln('El area es ',ar:2:2);
 writeln('');
 end;
 5:  begin
 vo:=vole(ra);
 writeln('');
 writeln('El volumen es ',vo:2:2);
 writeln('');
 end;
 6:  begin
 ci:=cili(ra,al);
 writeln('');
 writeln('El volumen es ',ci:2:2);
 writeln('');
 end;
 7:  begin
 ra:=cambiarRadio;
 al:=cambiarAltura;
 writeln('');
 per:=perimetro(ra);
 writeln('El perimetro de la circunferencia es ',per:2:2);
 ar:=area(ra);
 writeln('El area del circulo es ',ar:2:2);
 vo:=vole(ra);
 writeln('El volumen de la esfera es ',vo:2:2);
 ci:=cili(ra,al);
 writeln('El volumen del cilindro es ',ci:2:2);
 writeln('');
 end;
 End;
 Until n=8;
 End.
 
 El problema viene con unos de los requisitos, se recalculara el valor solicitado en caso de haber cambiado el radio y/o la altura desde la ultima vez que se calculo. Eso es lo que me resulta complicado, he probado colocando una variable auxiliar, contadores pero no he conseguido nada
 
 ¿Me podeis ayudar?
 
 Gracias
     |