Problema Turbo pascal: Help!

Sonix1
salve, non riesco a capire questo problema: dato un lato di un quadrato trovare l'area e il perimetro di questi e sapendo che il risultato deve essere un numero positivo.

ecco come ho fatto io:

uses crt;
var x,area,perimetro:integer;
begin
clrscr;
write('introduci misura lato: ');
readln(x);
writeln;
area:= x*x;
perimetro:= x*4;
writeln('l''area è: ',area);
writeln('il perimetro è: ',perimetro);
readln
end.


la stringa appena scritta va bene?

Risposte
_luca.barletta
mi sembra un po' restrittivo dichiararle integer quelle variabili

_luca.barletta
per quanto riguarda la sintassi... non vedo tp da 10 anni

Sonix1
"luca.barletta":
mi sembra un po' restrittivo dichiararle integer quelle variabili


e come le dovrei dichiararle?

_luca.barletta
tipo real, cioè reali, con un controllo che non venga immesso un numero negativo

Sonix1
mo ci provo

_luca.barletta
la penultima riga dovrebbe essere

readln();

Sonix1
niente! :(

_luca.barletta
perchè metti una writeln a vuoto?

Sonix1
per far uscire un pò più di spazio.

_luca.barletta
qual è l'errore che ti ritorna?

Sonix1
nessuno, ma se nella stringa dove sta scritto writeln('introduci numero'),se io immetto un numero negativo dovrebbe bloccarsi mentre se non lo immetto dovrebbe fare il suo ciclo normale. ho provato a fare con If ma non dà risultati.

_luca.barletta
il controllo che devi fare non è un banale if, ogni volta che immetti un numero negativo dovrebbe richiederti di inserire il numero, quindi devi usare un ciclo iterativo condizionato

Sonix1
me lo puoi spiegare perpiacere? il prof non c'è ne ha mai parlato. :(

_luca.barletta
devi usare una stuttura del genere:

Repeat 
   istruzione 1; 
   istruzione 2;
   ... 
   istruzione n; 
 Until condizione;


in pratica ripeti le n istruzioni finchè non diventa vera la condizione specificata dopo until (condizione di uscita)

Sonix1
riproviamo! :)

Sonix1
niente ora si blocca :( te lo faccio vedere:

uses crt;
var x,area,perimetro:real;
continue:integer;
begin
repeat
writeln('introduci misura lato: ');
readln(x);
readln(continue);
writeln;
area:=x*x;
perimetro:=x*4;
writeln('area = ',area:6:2,' cm quadrati');
writeln('perimetro= ',perimetro:6:2,' cm');
readln;
until (continue= -x);
writeln('non è possibile continuare');
readln
end.

_luca.barletta
No, l'istruzione che devi ripetere è la lettura del lato e basta, la condizione di uscita è x>0

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.