Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Campi di record dinamici
Forum - Pascal - Campi di record dinamici

Avatar
antcru (Normal User)
Newbie


Messaggi: 2
Iscritto: 08/03/2011

Segnala al moderatore
Postato alle 9:33
Mercoledì, 28/03/2012
Ciao a tutti,
vorrei sapere se è possibile riferirsi ai campi di un record memorizzato in un array senza specificare esplicitamente il campo.
Mi spiego.
Passo ad una procedura un array che contiene record(ad es. un array di record persone)
Nella pocedura inserisco il nome e scrivo readln(arr.nome)
ora non vorrei utilizzare
Codice sorgente - presumibilmente Plain Text

  1. arr[i].nome ma arr[i]........

in modo che se alla procedura passo invece che un array di persone un array di macchine quando inserisco la targa posso scrivere
Codice sorgente - presumibilmente Plain Text

  1. arr[i]....

e lui sa che è
Codice sorgente - presumibilmente Plain Text

  1. arr[i].targa

.

Spero essermi spiegato :)

Grazie

Ultima modifica effettuata da antcru il 28/03/2012 alle 9:36
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 14:50
Mercoledì, 28/03/2012
Ciao !
Con il turbo pascal, quello che vuoi fare, non è possibile.
Una soluzione al problema, è utilizzare il free pascal.
Quest' ultimo ti mette a disposizione l' overload delle funzioni

PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 18:05
Giovedì, 29/03/2012
Potresti usare un oggetto.

Codice sorgente - presumibilmente Delphi

  1. Tpersone = object
  2.       strnome:string;
  3.    public
  4.       cognome:string;
  5.       telefono:string;
  6.       ... altri campi del record ...
  7.       property nome read strnome write strnome; default;
  8. end;
  9.  
  10. arr=array[1..1000] of Tpersone;
  11. ...



Ora scrivere arr [ i ]  o scrivere arr[ i ].nome è assolutamente equivalente

Ultima modifica effettuata da Phi il 29/03/2012 alle 18:07
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:10
Giovedì, 29/03/2012
Definire un singolo oggetto non è sufficiente.
Bisogna implementare una serie di oggetti, attivando il meccanismo dell' ereditarietà.

In questo modo, ciascun tipo, avrà i propri metodi.

PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 15:46
Venerdì, 30/03/2012
Testo quotato


In questo modo, ciascun tipo, avrà i propri metodi.



Cosa intedi ? Non ho capito.

Comunque mi sono reso conto che il property default può essere solo un array, quindi bisogna scrivere:
Codice sorgente - presumibilmente Delphi

  1. Tpersone = object
  2.         strnome:array of string;
  3.         cognome:array of string;
  4.         telefono:array of string;
  5.         ... altri campi del record ...
  6.         procedure setnome(i:longint; s:string);
  7.         function getnome(i:longint) : string;
  8.         property nome[i:longint]:string read getnome write setnome;default;
  9. end;
  10.  
  11. procedure Tpersone.setnome(i:longint; s:string);
  12. begin
  13.         strnome[i]:=s;
  14. end;
  15.  
  16. function Tpersone.getnome(i:longint) : string;
  17. begin
  18.         result:=self.strnome[i];
  19. end;
  20.  
  21. arr:Tpersone



Ma a sto punto non penso ne valga la pena

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:44
Venerdì, 30/03/2012
Testo quotato

Postato originariamente da Phi:

Testo quotato


In questo modo, ciascun tipo, avrà i propri metodi.



Cosa intedi ? Non ho capito.



Intendo sfruttare il meccanismo di ridefinizione dei metodi offerta dall' ereditarietà.
Il funzionamento è semplice:
Definisco un oggetto padre, dichiarando i metodi virtuali.
Quindi dichiaro altri oggetti, che ereditano dalla classe padre.
A programma in esecuzione, si creano gli oggetti effettivi.

Invio un programma d' esempio.


Poggi Marco ha allegato un file: oggetti.zip (41805 bytes)
Clicca qui per scaricare il file
PM Quote