Oppure

Loading
29/01/08 19:11
Dareios
Salve a tutti
sono sempre io, Dareios, sempre pronto a sottoporre domande informatiche sperando che qualcuno mi possa aiutare in qualche modo. cmq ora il problema è:

vorrei realizzare un programma in pascal che calcoli l'area di un quadrato.
fin qui voi direte "roba da nubbi", "certo" rispondo io... peccato che vorrei poter estrarre il valore del lato da un file di testo esterno... mi spiego meglio:

mettiamo caso che io abbia nel mio hard disk un file di testo chiamato "lato" con il numero 2 scritto dentro.
io vorrei poter con un comando del pascal poter estrarre il valore 2 e associarlo alla variabile "lato" del quadrato e poi fare lato*lato e trovare così l'area...
il problema è che non riesco ad estrarre il valore 2 dal file di testo e far capire al turbopascal che lo deve associare alla variabile "lato" per poi fare appunto lato*lato.

il programma che ho scritto io per ora è:

Program area_quadrato_con_assign;
uses crt;
var l:text;
lato :string;
a: real;

begin
clrscr;
assign(l, 'C:\INPUT.TXT');
reset(l);
readln(l, lato);
close(l);
end.


solo che va implementato, perchè non so dove mettere il comando per dirgli di fare l'area e non so neanche dirgli come dare il valore 2 che sta scritto nel file INPUT.TXT alla variabile 'l' (che sarebbe il lato) [l'altra variabile 'lato' l'ho messa perchè ho visto in un esempio che veniva usata con il comando readln, ma non so se serve davvero per il mio scopo.]

grazie a tutti quelli che mi aiuteranno

saluti dareios
aaa
30/01/08 14:51
John
Ciao Dareios.
La faccenda è semplice (le cose in grassetto sono modificate!):

Program area_quadrato_con_assign;
uses crt;
var l:text;
     lato,area:real;

begin
clrscr;
assign(l,'C:\INPUT.TXT');
reset(l);
readln(l, lato);
     area:=lato*lato;
     writeln('Il quadrato di lato ',lato:3:2,' ha un area di ',area:3:2)
     readln;
close(l);
end.


Praticamente se tu sei sicuro che la prima linea di INPUT.TXT sia un numero reale, puoi tranquillamente leggerlo con readln.
come avevi fatto tu era corretto per prevenire la possibilità che il file non contenesse numeri, solo che dopo non si può convertire una stringa in reale!
Se il file conterrà una frase, il mio programma uscirà con un errore, ma è l'unico modo per assegnare alla variabile "lato" la prima riga di INPUT.TXT....

Ciauz!!
:k:
Ultima modifica effettuata da John 30/01/08 14:52
aaa
30/01/08 19:04
Dareios
john posso solo dirti: :love::love::love::love::love::love::love: sei un mitooooooooooooo! il problema era che dovevo il lato come una variabile real. sei un grande john!!!!!!! :k:
aaa
31/01/08 21:35
Due
Se inoltre vuoi prevenire un eventuale errore nel caso in cui nel file ci sia un valore non valido, potresti sfruttare la funzione val() che converte una stringa (latoS) in un numero (lato): se l'operazione è possibile val() assegna a una variabile d'errore (errore) il valore 0.
Quindi si potrebbe fare qualcosa del genere...
program nomeprogramma;
uses crt; 
var l:text; 
    latoS:string; 
    area,lato:real;
    errore:integer;
begin 
clrscr; 
assign(l,'C:\INPUT.TXT'); 
reset(l); 
readln(l, latos);
     val(latoS,lato,errore);
     if errore<>0 then
        begin 
           area:=lato*lato; 
           writeln('Il quadrato di lato',lato:3:2,' ha un area di ',area:3:2)
        end;
     else
        writeln('Attenzione, ',latoS,' non è un valore valido per il lato. Impossibile calcolare l'area.'); 
     readln; 
close(l); 
end.

Purtroppo non ho potuto provare il programma perché sto cambiando computer e non ho ancora reinstallato il compilatore, però dovrebbe funzionare :k:
aaa