Oppure

Loading
23/11/09 23:24
oligopistasia
Ragazzi, ho bisogno di un aiuto.

ho scritto un codice che ad ogni iterazione (ciclo for) mi da due risultati (x e y). Il problema è che non riesco a far registrare questi valori (e il numero dell'iterazione in cui sono stati calcolati) su di un file. Ho provato mettendo l'assign a inizio programma, all'interno del ciclo etc, ma niente.

ecco un pezzo del codice

var myfile:text; (+ tutte le altre che ometto)

begin
...
....
for i:=1 to itmax do
begin
assign(myfile, 'c:\Risultati.txt');
xaus3:=xaus2-(((f1(xaus2, gamma, delta))*(xaus2-xaus1))/((f1(xaus2, gamma, delta))-(f1(xaus1, gamma, delta))));
yaus3:=yaus2-(((f2(xaus3, yaus2, phi, talfa, gamma, gammamin))*(yaus2-yaus1))/((f2(xaus3, yaus2, phi, talfa, gamma, gammamin))-(f2(xaus3, yaus1, phi, talfa, gamma, gammamin))));
rewrite(myfile);
write(myfile,'Iterazione numero ');
write(myfile,'x= ');
write(myfile,'y= ');
close(myfile);
readln;
xaus1:=xaus2;
xaus2:=xaus3;
yaus1:=yaus2;
yaus2:=yaus3;
i:=i+1;
end;
...
....

end.

Inoltre, se anche riuscissi a creare il file (cosa che al momento non do per scontato), come devo modificare i vari write in modo che, a fianco del testo, mi compaiano i valori numerici? forse così?

write(myfile,'y= ', yaus3);


Infinitamente grato a chi è in grado di darmi qualche dritta:hail::hail:
aaa
28/11/09 18:55
giuseppe93
non ho ben capito qual è il problema... se vuoi scrivere una variabile integer in un file ti basta fare write(file,varibile)
il problema è che a questo punto devi dichiarere il file con file of integer, quindi non puoi mettrci dentro stringhe, quindi secondo me ti conviene dichiarlo come text, poi convertire tutte le varibile in stringhe e quindi inserirle
aaa
28/11/09 22:10
oligopistasia
Allora, cercherò di essere il più chiaro possibile.
Il programma deve calcolare, dopo un certo numero di iterazioni, due valori (x e Y). Purtroppo (perchè alla fine sembra essere questo il grande problema) ad ogni iterazione mi serve avere il risultato di x e y, il numero dell'iterazione e lo scarto tra il valore appena trovato e quello relativo all'iterazione precedente. E questi dati vorrei salvarli su di un file (formato qualsiasi, mi basta poterli leggere). I problemi sono due: con il programma scritto mi si crea un file (di testo) vuoto; i risultati non riesco comunque a vederli perchè, non appena do l'ultimo parametro e vaccio partire, con invio, il programma, la finestra dos mi si chiude. Ecco qua il testo del programma (con [...] parte tralasciata perchè non importano, dato che il programma, all'atto della compilazione, non da errori):

program Esercitazione_1;

uses crt;

var itmax, i: integer;
[...] x_0, y_0, toll, scartx, scarty: double;
myfile: file of text;


begin

assign(myfile, 'c:\risultati.txt');
rewrite(myfile);
writeln('Inserire valore gammamin in gradi, primi e secondi');
readln( gradi, primi, secondi);
[...]
scartx:=x1-x0;
scarty:=y1-y0;
i:=1;

while i<itmax do
begin
i:=i+1;
x2:=x1-[...]
y2:=y1-[...]
readln(x2);
readln(y2);
readln(i);
scartx:=x2-x1;
scarty:=y2-y1;
write(myfile,'Numero di iterazioni ',i);
write(myfile,'x= ',x2);
write(myfile,'y= ',y2);
x0:=x1;
x1:=x2;
y0:=y1;
y1:=y2;
end;

close(myfile);

readln;

end.


Ho provato ad indicare myfile: file of integer, ma all'atto della compilazione mi segnala errori, quindi forse l'alternativa valida è quella che mi suggerisci, solo che non ho idea di come si faccia8-|

PS: grazie per l'aiuto;)
aaa
29/11/09 20:56
giuseppe93
non puoi fare write(myfile,"testo",integer) perchè è come se stessi cercando di scrivere una stringa in un file che può contenere solo variabiabili integer quindi prova a scrivere solo write(myfile,x2)
aaa
29/11/09 21:54
oligopistasia
Niente da fare...:_doubt:
Ho provato anche a dichiarare

myfile: file of integer

myfile: file of double

ma niente, nessun errore in fase di compilazione ma nessun risultato nel file creato (e sempre finestra di dos che si chiude appena do invio dopo l'inserimento dell'ultimo dato).
Qualche idea?
aaa
30/11/09 19:37
giuseppe93
per capire fino a dove arriva l'esecuzione del programma prova a mettere un po' di readline sparsi.
aaa
01/12/09 14:02
oligopistasia
Per tagliare la testa al toro ho provato a scrivere un programma stupidissimo

program provascritturafile;

var myfile: text;
x,n : real;
i: integer;

begin

assign (myfile, '/…');
rewrite(myfile);
writeln('Inserire n');
readln(n);
for i:=1 to 5 do
begin
x:=88/n;
write(myfile, x);
close (myfile);
i:=i+1;
n:=n+1;
end;


end.

alla compilazione al solito nessun errore, crea il file e scrive addirittura un risultato. Peccato che sia quello relativo alla prima iterazione.
per capirci, se metto n=2 ho:

per i=1, x=44
per i=2, x=88/3
per i=3, x=22
per i=4, x=88/5
per i=5, x=44/3

ma nel file trovo solo 44

Il problema sembra quindi essere la scrittura ad ogni passaggio di ciclo iterativo. Credo esista un comando per dire di aggiungere un dato ad un file già aperto...qualcuno ne sa qualcosa? PS: grazie ancora per l'aiuto!!!!!
aaa
01/12/09 14:52
giuseppe93
no in verità ti scrive solo il primo risultato perchè tu chiudi il file con close(myfile) dentro al ciclo. dovresti metterlo fuori dal ciclo for,

program provascritturafile;

var myfile: text;
x,n : real;
i: integer;

begin

assign (myfile, '/…');
rewrite(myfile);
writeln('Inserire n');
readln(n);
for i:=1 to 5 do
begin
x:=88/n;
write(myfile, x);

i:=i+1;
n:=n+1;
end;

close (myfile);
end.
aaa