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

