Oppure

Loading
30/06/10 4:17
Ciao a tutti!

writeln('La cella ( ',ascissa,',',ordinata,' ) aveva valore ',campo_array[ascissa,ordinata]);
			campo_array[ascissa,ordinata]:=nuovo_valore;
			writeln('La cella ( ',ascissa,',',ordinata,' ) ha valore ',campo_array[ascissa,ordinata]);


ricevo in output:
La cella ( 6,25 ) aveva valore 2
La cella ( 6,25 ) ha valore 0


se poi cerco di modificare di nuovo la stessa si ripresenta lo stesso output
La cella ( 6,25 ) aveva valore 2
La cella ( 6,25 ) ha valore 0


è come se l'array non si modificasse..o almeno come se si modificasse solo temporaneamente..è assurdo! idee??
30/06/10 15:21
a_butta
puoi postare più codice?
aaa
30/06/10 18:44
TheKaneB mi ha illuminato. In pratica questo array è contenuto in un'oggetto che io passo come parametro ad un metodo di un altro oggetto. Il problema sta nel fatto che passando un oggetto come parametro esso viene semplicemente copiato all'interno del metodo ma in realtà l'originale resta invariato. Quindi TheKaneB mi ha suggerito di passare un puntatore all'oggetto così che venga modificato l'originale. Il problema è che ora da problemi a riconoscere un puntatore della classe a cui appartiene tale oggetto. Elabora la ^ come un char :S

in pratica io scrivo

procedure pacmen.sposta(t:^oggetto);


e il compilatore mi risponde con il solito " ')' expected but "Char constant" found"...
Ultima modifica effettuata da 30/06/10 18:51
30/06/10 20:02
Poggi Marco
Non riesci a gestire i puntatori?

In alternativa, passa l' argomento alla funzione per parametro ( usa il qualificatore var ).
Ecco come:
  
procedure pacmen.sposta(var t:oggetto);

In questo modo, l' oggetto t ha lo stesso indirizzo dell' oggetto originale, quindi, qualsiasi modifica su t, si perquote sull' argomento passato.
Ultima modifica effettuata da Poggi Marco 30/06/10 20:02
aaa
30/06/10 23:43
Ok, grazie. Ha funzionato! Ma se volessi utilizzare i puntatori come dovrei fare???
01/07/10 20:10
Poggi Marco
Di nulla.

Se intendi usare i puntatori, il mio consiglio è quello di crearti un tipo apposito in questo modo:
 type Poggetto=^oggetto; 


Nell' intestazione della funzione andrà:
 procedure pacmen.sposta(t:Poggetto); (* t è un puntatore di tipo oggetto *)

Mentre nella chiamata alla funzione:

...
 p.sposta(@t) (* dove p è un oggetto pacman, mentre t è di tipo oggetto*)
              (* da notare l' operatore '@', serve a ottenere l' indirizzo della
                 variabile *)
...


oppure

 ...
 p.sposta(pt) (* dove p è un oggetto pacman, mentre t è di tipo oggetto*)
              (* mentre pt è di tipo Poggetto *)

 ...
aaa
01/07/10 20:45
Grazie di nuovo per l'aiuto. Valuterò in seguito quale dei due metodi conviene usare. Sono comunque propenso ad utilizzare il primo da te spiegato. Non ho ancora molta dimestichezza con i puntatori. Comunque avrei altri 2 problemi "misteriosi" che non c'entrano nulla con questo topic. Li posto qui o ne apro uno nuovo?
01/07/10 21:43
Poggi Marco
Di nulla.
Apri pure un nuovo topic per i tuoi dubbi, in modo che anche altri utenti possano risponderti. Il forum serve a questo scopo.
aaa