Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Pascal Avanzato

  1. #1

    Pascal Avanzato

    Ciao, leggendo degli spezzoni di codice delle IOI ho trovato un sacco di costrutti Pascal dei quali i libri che ho non parlano, roba del tipo

    codice:
    type r=record
    codice:
    with y do
    codice:
    new(x);
    codice:
    ^INTEGER
    codice:
    set of
    codice:
    (i in a*b)
    codice:
    v:-c;
    [ho indicato solo il punto problematico per brevità, se lo richiede posto l'intero codice]

    Qualcuno saprebbe dirmi la loro funzione, o meglio ancora indicarmi in buon manuale online in cui sono spiegati?

    Grazie a tutti anticipatamente

  2. #2
    Utente di HTML.it L'avatar di cso
    Registrato dal
    Aug 2004
    Messaggi
    2,050
    Se non sai cosa sono i primi due allora c'è poca speranza che qualcuno te li possa spiegare qui (senza offesa) e di manuali pascal se ne trovano pochi e incompleti.

    I record sono delle strutture che ti permettono di utilizzare i file (almeno per quanto mi riguarda) ma possono essere trattate come strutture dati.

    E' un argomento molto vasto cmq vedi un po' se riesci a reffarti con il mio codice:
    codice:
    PROGRAM HTML;
    
    CONST N=100;
    
    TYPE generico=RECORD
         appoggio:string[30];
         END;
         
    classe=ARRAY[1..N] of generico;
    
    VAR c:classe;
        i:INTEGER;
        conf:TEXT;
        
    BEGIN
    
    {$I-} {**fa in modo da non bloccare il programma se trova un errore}
    
    ASSIGN(conf,'C:\nome_file.ext'); {**assegna alla var conf il file nome_file.ext}
    RESET(conf); {**resetta il "puntatore" del file}
    i:=1;
    WHILE (NOT EOF(conf)) DO {**End Of File va avanti fino a quando non arriva alla fine del file}
                          begin
    		      Readln(conf,c[i].appoggio); {**prende la riga I del file e la      }
                          i:=i+1;                     {**mette nel primo elemento di appoggio}
                          end;
    c[2].appoggio:='ciao ciao';
    Writeln(conf,c[2].appoggio); {**scrive nel file 'ciao ciao'}
    RESET(conf);
    CLOSE(conf); {**chiude il file}
    {$I+}        {**chiude l'eccezione}
    
    IF IOResult<>0 THEN {**se ci sono stati problemi con il file (non esiste oppure è in sola lettura)}
    	       begin
    	       WriteLn('scrivi quello che vuoi');
    	       end;
    END.
    adesso nel codice ci saranno un po' di errori e ho farcito il tutto con un po' di ca**ate ma il concetto è questo.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,285

    Re: Pascal Avanzato

    Originariamente inviato da WarriorXP
    codice:
    type r=record
    Qui viene dichiarato un record: si tratta di una struttura dati che raggruppa al proprio interno più variabili.

    Ad esempio, puoi definire un record di questo tipo
    codice:
    type
      TContatto = record
        Nome: string;
        Cognome: string; 
      end;
    Qui si definisce un record avente due campi di tipo testuale.

    Dichiarando una variabile C di tipo TContatto puoi scrivere i valori in questo modo:
    codice:
    var
      C: TContatto;
    begin
      C.Nome := 'Manuela';
      C.Cognome := 'Arcuri';
    end;
    Il record può essere passato anche come parametro a procedure e funzioni, o memorizzato in un'area di memoria allocata dinamicamente.

    Originariamente inviato da WarriorXP
    codice:
    with y do
    Questa scrittura viene spesso usata proprio con record, oppure oggetti, ma io generalmente la evito a meno che non sia strettamente necessaria perchè può portare a blocchi di codice fuorvianti e provocare effetti collaterali.

    Permette di trattare qualsiasi identificatore incluso nel blocco come campo; tenendo presente l'esempio di prima:
    codice:
    with C do
    begin
      Nome := 'Manuela';
      Cognome := 'Arcuri';
    end;
    Originariamente inviato da WarriorXP
    codice:
    new(x);
    L'istruzione New viene usata per allocare dinamicamente memoria per accomodare un certo tipo di dato. Attraverso un "puntatore", è possibile riferirsi a tale area di memoria allocata.

    Originariamente inviato da WarriorXP
    codice:
    ^INTEGER
    Dichiara appunto un "tipo puntatore", un tipo di dati che contiene l'indirizzo di una locazione di memoria cui è accomodato un valore intero (Integer).

    Originariamente inviato da WarriorXP
    codice:
    set of
    codice:
    (i in a*b)
    La prima istruzione dichiara un tipo "insieme", che funziona in tutto e per tutto come gli insiemi che si studiano alle elementari. Si tratta di una struttura dati molto comoda e presente quasi unicamente nel Pascal, a livello di supporto integrato nella sintassi del linguaggio stesso.

    A ciascun insieme dichiarato è possibile aggiungere elementi, toglierli o verificare se un determinato elemento è contenuto all'interno di un insieme, attraverso l'operatore in (che nella seconda istruzione è utilizzato per verificare l'appartenenza di un elemento i all'interno del prodotto cartesiano degli insiemi a e b.

    Originariamente inviato da WarriorXP
    codice:
    v:-c;
    Questo mi sembra semplicemente...un errore di sintassi.

    Purtroppo non posso essere maggiormente esplicativo a riguardo dei costrutti che hai citato, perchè si possono scrivere libri interi a riguardo; sarà poi tuo il compito di approfondire.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4

    Re: Re: Pascal Avanzato

    Originariamente inviato da alka

    Purtroppo non posso essere maggiormente esplicativo a riguardo dei costrutti che hai citato, perchè si possono scrivere libri interi a riguardo; sarà poi tuo il compito di approfondire.

    Ciao!
    Ti dirò, mi sei già stato fin troppo d'aiuto... Non so come ringraziarti!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.