Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Modifica array
Forum - Pascal - Modifica array

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Ciao a tutti!

Codice sorgente - presumibilmente Plain Text

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



ricevo in output:
Codice sorgente - presumibilmente Plain Text

  1. La cella ( 6,25 ) aveva valore 2
  2. La cella ( 6,25 ) ha valore 0



se poi cerco di modificare di nuovo la stessa si ripresenta lo stesso output
Codice sorgente - presumibilmente Plain Text

  1. La cella ( 6,25 ) aveva valore 2
  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??

PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 17:21
Mercoledì, 30/06/2010
puoi postare più codice?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 20:44
Mercoledì, 30/06/2010
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

Codice sorgente - presumibilmente Pascal

  1. procedure pacmen.sposta(t:^oggetto);



e il compilatore mi risponde con il solito " ')' expected but "Char constant" found"...

Ultima modifica effettuata da il 30/06/2010 alle 20:51
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:02
Mercoledì, 30/06/2010
Non riesci a gestire i puntatori?

In alternativa, passa l' argomento alla funzione per parametro ( usa il qualificatore var ).
Ecco come:
Codice sorgente - presumibilmente Pascal

  1. 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 il 30/06/2010 alle 22:02
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:43
Giovedì, 01/07/2010
Ok, grazie. Ha funzionato! Ma se volessi utilizzare i puntatori come dovrei fare???

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:10
Giovedì, 01/07/2010
Di nulla.

Se intendi usare i puntatori, il mio consiglio è quello di crearti un tipo apposito in questo modo:
Codice sorgente - presumibilmente Pascal

  1. type Poggetto=^oggetto;



Nell' intestazione della funzione andrà:
Codice sorgente - presumibilmente Pascal

  1. procedure pacmen.sposta(t:Poggetto); (* t è un puntatore di tipo oggetto *)


Mentre nella chiamata alla funzione:

Codice sorgente - presumibilmente Plain Text

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



oppure

Codice sorgente - presumibilmente Plain Text

  1. ...
  2.  p.sposta(pt) (* dove p è un oggetto pacman, mentre t è di tipo oggetto*)
  3.               (* mentre pt è di tipo Poggetto *)
  4.  
  5.  ...


PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:45
Giovedì, 01/07/2010
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?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 23:43
Giovedì, 01/07/2010
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.

PM Quote