Visualizzazione post con etichetta 4AS. Mostra tutti i post
Visualizzazione post con etichetta 4AS. Mostra tutti i post

lunedì 20 gennaio 2014

Introduzione alle Liste: Concetti e prime regole per l'inserimento in Testa di un Nodo

Argomento
Liste

Pre  Requisiti

  • Strutture o Record
  • Puntatori
  • Modalità di Passaggio dei parametri ad una funzione: per valore/per riferimento
L'argomento di questa sera è legato alla gestione delle strutture dati Dinamiche

Per Dinamico si intende una struttura che varia il numero di elementi in Run Time ovvero durante l'esecuzione del programma.

La prima struttura che verrà presa in considerazione è la Lista Semplice. Elemento fondamentale per la costruzione di una Lista, è il NODO. Un NODO è un Record (Struct per il linguaggio C) composta da due parti:
  • la parte informativa o dati
  • la parte puntatore, che fa riferimento al NODO successivo
Una Lista quindi, è una Catena di NODI agganciati l'uno con l'altro, in cui la dinamicità consiste nell'aggiungere o nell'eliminare NODI, ogniqualvolta sarà necessario durante l'esecuzione del programma.

Tra le operazioni fondamentali previste per la Gestione delle Liste abbiamo l'inserimento. Vi sono diversi tipi di inserimento:
  • in Testa
  • in Coda
  • in Mezzo
Questa sera si è introdotto l'inserimento in Testa.
Sono stati definiti gli elementi fondamentali, affinché ne fossero comprese le varie fasi ed i  passi necessari.

Si è insistito su quello che dal punto di vista pratico-implementativo è la Lista:  
  • Lista Vuota: Puntatore di Testa inizializzato a NULL
  • il Puntatore di Testa o di Inizio Lista
  • i passi necessari per realizzare l'aggancio di un NODO in Testa
    • Creazione Nuovo Nodo
    • Assegnazione del/i dato/i alla parte informativa
    • Assegnazione della Testa alla parte Puntatore del Nuovo Nodo
    • Assegnazione del puntatore al Nuovo Nodo alla Testa della Lista
  • E' stato simulato l'inserimento di 5 Nodi, coinvolgendo la classe.
Dalla simulazione sono stati identificati i passi che venivano ripetuti ed è stato fatto notare alla classe come, l'utilizzo di un costrutto iterativo, aggiungendo una richiesta di continuazione ad inserire da rivolgere all'utente, avrebbe potuto trasformare la simulazione in un algoritmo per l'inserimento.
Riflettendo con la classe si è giunti alla conclusione che individuando le parti richieste per l'inserimento di un nuovo NODO ed isolandole, si avrebbe potuto creare una funzione di Inserimento in Testa alla quale passare il puntatore di Testa come parametro ma per riferimento.

Si è poi iniziato a vedere come organizzare la visualizzazione dei valori contenuti all'interno dei Nodi della Lista.

Seguiranno Appunti sul Codice.

venerdì 17 gennaio 2014

Lezione

Vengono spiegati i parametri del main: argc ed argv

Vengono forniti degli esempi su come utilizzare e lavorare con tali parametri.

Viene richiesto di esercitarsi sull'utilizzo dei due parametri:

Visualizzare argc e le stringhe memorizzate nell'array argv
Controllare un parametro inserito all'atto del l'avvio del programma

Argomenti correlati:

Puntatori semplici e doppi
Array di puntatori
Array di stringhe

giovedì 9 gennaio 2014

LezioneLaboratorio

Ripasso Programmazione ad Oggetti C++
Vengono Forniti i Materiali della Lezione da prelevare nell'Area Condivisa

Vengono richiesti i compiti assegnati per le vacanze di Natale

Esercitazione di Laboratorio  e Interrogazione

Viene richiesto di costruire la classe INTERI sulla Base delle Classe Frazione già Fornita. In particolare:

  • Ridefinizione degli operatori
  • Valutare l'utilizzo delle funzioni friend
  • Valutare l'utilizzo del puntatore This


giovedì 19 dicembre 2013

Lezione Laboratorio

Argomento:
   Funzioni Friend
   Ridefinizione degli operatori

Gli argomenti trattati sono stati affrontati nell'ambito dello sviluppo della classe frazione. La classe verrà   
fornita in allegato a tutta la classe. Di tale classe viene richiesta la documentazione come esercitazione. 

Viene fornito inoltre un programma che gestisce test, di questo programma si richiede la documentazione e la trasformazione del programma in oggetti. 

Le attività proposte verranno valutate come attività di laboratorio


lunedì 16 dicembre 2013

Verifica 16/12/2013

Esercizio 1 (Punti 7)
Progettare una classe Persona composta da:

Proprietà
Metodi
  • Nome
  • Cognome
  • CittaNascita
  • DataNascita
  • InserisciDati
  • VisualizzaDati
  • AggiornaDati
  • VisualizzaDatiAnagrafici

Nel progetto si dovranno prevedere le seguenti documentazioni:
  • Motivazione sulla scelta dei tipi di dato da associare alle variabili
  • Motivazione su:
    • Presenza/assenza, numero, tipo e significato di eventuali parametri previsti i metodi implementati.
    • Motivo per cui i membri della classe debbano essere Pubblici/Privati/Protetti
Criteri di Valutazione
  1. Realizzazione classe in linguaggio C++                                                                                          (punti: 4)
  2. Documentazione delle proprietà (Scopo, nome significativo, tipo adeguato)                             (punti: 1)
  3. Documentazione dei metodi (Scopo, descrizione parametri)                                                        (punti: 2)

Esercizio 2 (Punti 10)


Progettare una classe dipendente, derivata dalla classe persona dell’esercizio precedente. Tale classe dovrà contenere le seguanti proprietà:
Proprietà
Metodi
  • Mansione (Esempio: Impiegato, Dirigente, Operaio, Funzionario, ecc)
  • Stipendio
  • InserisciDati
  • VisualizzaDati
  • AggiornaDati
  • ControllaStipendio

in aggiunta a tutto quello che verrà ereditato dalla classe persona
Specifica/Vincolo di Progetto: Considerando che lo stipendio di un dipendente debba rispettare la seguente regola: StipendioOperaio<StipendioImpiegato<StipendioFunzionario<=StipendioDirigente. Il metodo dovrà controllare che gli stipendi inseriti per ogni dipendente siano coerenti con la mansione e ne rispettino la regola prima fornita.

N.B. Il metodo ControllaStipendio  va studiato attentamente, come sarà necessario fare le dovute ipotesi sugli stipendi, affinché le condizioni poste (StipendioOperaio<StipendioImpiegato<StipendioFunzionario<=StipendioDirigente) vengano rispettate. In aggiunta, il controllo dovrà essere eseguito utilizzando le eccezioni.
Nel progetto si dovranno prevedere le seguenti documentazioni:
  • Motivazione sulla scelta dei tipi di dato da associare alle variabili
  • Motivazione su:
    • Presenza/assenza, numero, tipo e significato di eventuali parametri previsti i metodi implementati.
    • Motivo per cui i membri della classe debbano essere Pubblici/Privati/Protetti
Criteri di Valutazione

  1. Realizzazione classe in linguaggio C++                                                                                          (punti: 4)
  2. Documentazione delle proprietà (Scopo, nome significativo, tipo adeguato)                             (punti: 1)
  3. Documentazione dei metodi (Scopo, descrizione parametri)                                                        (punti: 2)
  4. Progettazione metodo ControlloStipendio                                                                                       (punti: 3)

mercoledì 27 novembre 2013

Lezione

Generazione di numeri Pseudo Casuali

Strumenti utilizzati

Funzioni: srand(), rand(), time()
Librerie : stdlib.h, studio.h time.h

Esempio: Lancio del Dado.  Per Casa: produrre diagramma di flusso e codifica

Evoluzione esempio: gioco del dado con l'inserimento del valore utente. Per Casa: produrre diagramma di flusso e codifica

Evoluzione: fornire la possibilità  di ripetere la partita. Per Casa: produrre diagramma di flusso e codifica

Evoluzione: Contare quante partite vengono giocate  Per Casa: produrre diagramma di flusso e codifica

Viene richiesto di commentare il codice scritto alla lavagna

Evoluzione: lancio di due dadi: Per Casa: produrre diagramma di flusso e codifica

venerdì 15 novembre 2013

Lezione Laboratorio

Sintesi sugli argomenti trattati sulla Programmazione ad Oggetti affrontati dall'inizio dell'anno

Classi
Oggetti
Costruttori (overloading delle funzioni)
Distruttore
Ereditarietà
Polimorfismo (puntatori, funzioni virtual)
Classi Astratte (funzioni pure)
Puntatore This

lunedì 11 novembre 2013

Verifica

      Esercizio 1 (Punti 2)
      Definire una funzione con prototipo e corpo alla quale passare come parametro il puntatore di un array         ad interi. Nel corpo della funzione si dovrà consentire all’utente di fornire la dimensione dell’array, fornita       la dimensione si dovrà far caricare l’array  all’utente. Terminato il caricamento da parte dell’utente la             funzione restituirà la dimensione dell’array inserita dall’utente.
     
      Esercizio 2 (Punti 2)
      Definire una funzione con prototipo e corpo alla quale passare come parametro il puntatore di un array         ad interi e gli eventuali ulteriori parametri. Nel corpo si dovrà visualizzare il contenuto dell’array passato         come parametro.
      
      Esercizio 3 (Punti 2)
      Scrivere il main che richiami ordinatamente le precedenti funzioni e termini l’esecuzione con un saluto.
Esercizio 4 (Punti 2)
Realizza una classe 'contatore' che contiene una variabile intera 'valore' come attributo e due metodi, il primo è un costruttore senza parametri che inizializza 'valore' a 0 il secondo incrementa semplicemente 'valore ' di 1 tutte le volte che viene invocato.
Eseguire il test del programma con un ciclo for .

venerdì 8 novembre 2013

Lezione

Vengono ripresi i concetti di:

  1. Ereditarietà
  2. Polimofismo
    1. funzioni virtual
Vengono introdotti i concetti di:
  1. Classe Astratta
    1. funzioni/metodi puri (senza corpi)
  2. Interfacce
    1. tutti metodi puri

giovedì 7 novembre 2013

Lezione Laboratorio

Ripasso per preparazione alla verifica

Ripassati i concetti fondamentali sulla programmazione ad oggetti:

  1. Classi
  2. Oggetti
  3. Funzioni sovrapposte
  4. Costruttori/Distruttore
  5. Ereditarietà
  6. Polimorfismo
Vengono proposti i seguenti esercizi/esercitazione: dati i seguenti prototipi:
  1. int* f();
  2. int g(int*&);
  3. void h(int*,int*)
  4. void l(int*);
  • descriverne i parametri e le modalità di passaggio
  • definirne i corpi delle funzioni
  • creare un main che ne contenga le chiamate
  • pubblicare in un post del blog personale i risultati dell'esercitazione
Altri esercizi
  1. scrivere una funzione alla quale passare un array come parametro sotto forma di puntatore
  2. produrre un main che ne esegua la chiamata
  3. scrivere una funzione alla quale passare una struttura come parametro sotto forma di puntatore
  4. produrre un main che ne esegua la chiamata 
  5. scrivere una funzione alla quale passare un oggetto come parametro sotto forma di puntatore 
  6. produrre un main che ne esegua la chiamata

mercoledì 6 novembre 2013

Lezione

Esercitazione in preparazione della verifica

Architettura computer
Traduttori
Classificazione reti
Topologie LAN
Correzione porzioni codice C
Scrittura funzioni

lunedì 4 novembre 2013

Lezione Laboratorio

Polimorfismo

Il completamento di una parte consistente legata ai puntatori, ci da la possibilità di riprendere la OOP ed in particolare affrontare uno degli argomenti cruciali: Il Polimorfismo.

L'argomento è stato affrontato riprendendo il concetto di ereditarietà e le relative regole di derivazione. Si è mostrato come un metodo di una classe derivata possa sostituirne uno ereditato dalla classe padre. Si è cercato di fornire i concetti relativi all'importanza del polimorfismo e del legame esistente tra puntatori ed oggetti. Si è passati a fornire il concetto di funzione virtual e si è fornito un esempio avente come scopo di mostrare il funzionamento del polimorfismo e l'adattamento degli oggetti ad altri oggetti in fase di esecuzione (run time). Si è proposto di verificare e modificare in laboratorio l'esempio proposto.

In Laboratorio si è mostrato ad alcuni studenti come costruire un Blog e si è richiesto di salvare i lavori prodotti in laboratorio in Drive e di produrre post da inserire nel Blog che descrivano l'attività svolta. Si è chiesto inoltre di inviare una mail con i lavori di laboratorio. Si è proposto di realizzare dei link tra i post degli studenti della classe al fine di creare una rete di collaborazione.

Il prossimo argomento saranno le funzioni o metodi puri e le classi astratte. Verranno proposti altri esempi sul Polimorfismo.

venerdì 1 novembre 2013

Lezione Laboratorio

Presenti soltanto 3 studenti nelle prime 2 ore assenti tutti nell'ultima

giovedì 17 ottobre 2013

Lezione Laboratorio 4A

Durata: 3 ore

Argomento: Puntatori. Array di Puntatori. Puntatori a Strutture. Array di Strutture gestite con Puntatori.

Attività: durante la prima ora e' stato ripresa la gestione degli array mediante puntatori ed è stato proposto                  un  esempio che ne evidenziasse la gestione. Si è passati alla gestione delle strutture mediante i                      puntatori  e si è mostrato l'utilizzo dell'operatore ->, attraverso il quale si accede ai campi delle                      strutture. Si è continuato con gli array di strutture gestiti con puntatori.
               Nella seconda ora viene richiesta la gestione di un elenco di studenti utilizzando ed applicando i                      concetti mostrati durante la lezione. Durante l'esercitazione ad alcuni studenti è stato proposto di                    apportare delle modifiche al codice proposto.

Contenuti della lezione.
Durante la lezione sono stati proposti una serie di esempi tipo attraverso i quali sono stati evidenziati i concetti fondamentali che portano alla gestione di array a dimensione variabile.

Per la prossima lezione si prevede di affrontare l'argomento sui puntatori passati come parametri di funzioni si per valore che per riferimento.

Cosa bisogna imparare dalla lezione: 

lunedì 14 ottobre 2013

Laboratorio 4A

Durata: 2 ore

Argomento: Puntatori. Viene iniziata l'algebra dei puntatori.

Attività: durante la prima ora e' stato fatto un ripasso sui concetti relativi ai puntatori, trattati nella          
             lezione precedente. Nella seconda ora viene proposta la realizzazione di una calcolatrice 
             utilizzando esclusivamente variabili di tipo puntatore. Agli studenti che avrebbero terminato il 
             programma in anticipo e' stato proposto di realizzare la stessa calcolatrice realizzando una   
             classe. Durante l'esercitazione ad alcuni studenti e' stato proposto di apportare delle 
             modifiche al codice proposto.

Contenuti della lezione.
Durante la lezione e' stato proposto un esempio in cui sono state utilizzate variabili di tipo puntatore che venivano sommate. È stato mostrato come utilizzare gli oggetti cin e cout e come visualizzare indirizzi e dati associati ad un puntatore. È stato introdotto l'operatore delete da abbinare all'operatore news. 

È stato anticipato l'argomento della prossima lezione: gli array a dimensione variabile gestiti attraverso gli operatori new e delete.

Cosa bisogna imparare dalla lezione: 
prendere coscienza di cosa accade quando si mescolano variabili di tipo puntatore. Comprendere il senso degli operatori new e delete