Eserciziario
In questa sezione propongo alcuni esercizi da svolgere per allenamento dopo aver letto la guida. Per ogni capitolo o insieme di capitoli vengono forniti spunti per elaborare delle applicazioni più o meno complesse. Il led vicino ad ogni esercizio ne specifica la difficoltà:
-
Semplice: l'esercizio implica la semplice conoscenza degli argomenti, e spesso è simile agli
esempi proposti nella guida -
Medio: l'esercizio implica una conoscenza approfondita degli argomenti e si discosta come richieste
dagli esempi svolti, pur rimanendo fedele alle stesse linee guida seguite -
Complesso: l'esercizio implica una perfetta conoscenza degli argomenti e la competenza operativa
nel saper individuare all'interno del problema schemi ricorrenti assimilabili agli algoritmi e ai modi di risoluzione già affrontati, in
modo da poterli rielaborare per ottenere il risultato -
Avanzato: l'esercizio implica una perfetta conoscenza degli argomenti, un'ottima competenza
operativa, oltre a flessibilità mentale e capacità di rielaborazione dei contenuti per approdare a risultati nuovi e più
complessi, eventualmente usando anche informazioni provenienti da altri ambiti dell'informatica o di qualsiasi altra materia -
Professionale: non considero consegne di questo livello come un esercizio, ma piuttosto come una
libera applicazione della propria capacità di programmazione. Una richiesta classificata come "professionale" prevede che chi vi si
cimenti conosca come prerequisito ogni cosa spiegata nella guida, e abbia inoltre un proprio bagaglio di conoscenze in ambito informatico.
Essa fornisce le linee guida per la costruzione di un vero e proprio programma, e molto spesso implica la creazione di nuovi schemi
e algoritmi
Esercizi sul capitolo A4
Sfruttando la struttura gerarchica dei namespace e delle classi schematizza (totalmente o in parte) i seguenti gruppi di elementi:
-
Figure geometriche -
Regni dei viventi -
Discipline matematiche -
Mezzi di trasporto
Esercizi sul capitolo A6
Scrivere semplici applicazioni console che eseguano i seguenti compiti:
-
Dato un numero intero, restituire il suo successivo; -
Dato un numero razionale, restituire il suo doppio; -
Dato un numero reale, restituire la radice quadrata; -
Dato un numero complesso, restituire la radice quadrata;
Esercizi sui capitoli A8, A9, A10, A11, A12, A13, A14, A15 e A16
Eseguire le seguenti consegne:
-
Scrivere un programma che richieda come input una stringa e visualizzare un messaggio di errore nel caso
questa stringa sia diversa dalla parola "Ornitorinco". -
Scrivere una struttura che rappresenti un generico oggetto di massa e volume noti. Calcolarne quindi
la densità mediante interazione con l'utente. -
Scrivere un programma che richieda i voti di un quadrimestre (max 10) e calcolarne la media senza usare
un ciclo For. -
Scrivere un programma che, inserito un numero intero N da tastiera, calcoli la somma di tutti i numeri
naturali compresi tra 1 e N. Ricordarsi di controllare che N sia maggiore di 1 e visualizzare un messaggio di errore in caso contrario. -
Scrivere un programma che crei un array a due dimensioni (matrice) e vi inserisca, richiedendoli da
tastiera, numeri reali qualsiasi. Calcoli quindi la somma di tutti i dati immessi. -
Scrivere un programma che costruisca un array di X elementi, con X inserito da tastiera, che richieda
l'immissione di questi, sempre da tastiera, e che li ordini, quindi, senza usare alcuna funzione fornita dal Framework. -
Scrivere un programma che memorizzi più alunni mediante un array di strutture. Ogni struttura
rappresenta un alunno e contiene Nome, Cognome e un l'elenco dei voti ottenuti. Il programma offre la possibilità di: calcolare la media
e la deviazione standard (facoltativa) di uno solo o tutti gli alunni, od, eventualmente, di un gruppo ristretto di questi. -
Creare una matrice di strutture. Questa matrice rappresenta la disposizione di un territorio di
costruzione e ogni suo elemento costituisce un lotto edificabile: dato che la posizione varia e con essa anche i vantaggi possibili, richiedere
di immettere in ogni posto della matrice queste informazioni raggruppate sottoforma di struttura: Valore (valore del lotto), Superficie (area
di terreno occupata), Clienti (il numero di persone che desiderano acquistare il lotto), Tempo (il tempo, in mesi, che occorre per costruire
un edificio su tutta la superficie disponibile), CostoEdificio (il costo per la realizzazione vera e propria della costruzione
sul lotto). Una volta ottenuti i dati, calcolare la media dei valori, il tempo teorico che si impiegherebbe a edificare l'area intera, il costo
totale per la costruzione dei lotti. Inoltre, rilevare in quali strutture si hanno i Valori e i Costi più alti e riferire se essi sono
vicini oppure sparsi per il territorio. -
Calcolare il determinante di una matrice quadrata di ordine N, con N immesso da tastiera
Esercizi sui capitoli A18, A19 e A20
Eseguire le seguenti consegne:
-
Scrivere una funzione che, dato un numero intero come parametro, restituisca questo elevato alla
sesta potenza. -
Scrivere una procedura che pulisca lo schermo console (usare il metodo Console.Clear()) e visualizzi
il messaggio "Premere un pulsante per continuare...". -
Scrivere una funzione che, dato un qualsiasi numero di parametri di tipo Single, ne calcoli la
deviazione standard. -
Scrivere una funzione che, data una stringa, restituisca la stessa stringa, ma invertita. Suggerimento:
una stringa può essere considerata e usata come un array di caratteri. -
Scrivere una funzione che restituisca le soluzioni di un'equazione di secondo grado, una volta forniti
i coefficienti come parametri (di cui gli ultimi due opzionali). -
Scrivere una funzione ricorsiva che calcoli la potenza di esponente intero o frazionario (sia
positivo che negativo) di un numero reale.
Esercizi sui capitoli A21, A22, A23 e A24
Eseguire le seguenti consegne:
-
Scrivere una classe che rappresenti un cliente di una videoteca. Ricordarsi di usare sempre proprietà
per esporre campi pubblici. -
Scrivere una classe che rappresenti un libro. -
Scrivere un programma che, similmente a quelli già mostrati, memorizzi alunni e voti e permetta
di calcolare la media e la moda. Stavolta, però, anziché usare array e strutture, disporre l'applicazione in modo da impiegare
classi e liste. Per calcolare la media e la moda, utilizzare funzioni definite come membri di classe. -
Scrivere una classe che rappresenti una frase (stringa). La classe dovrà mettere a disposizione
almeno questi membri:
- Una proprietà che restituisca l'insieme delle parole presenti nella stringa. Suggerimento: considerare teoricamente che ogni parola è seprata dalle altre da spazi
- Due proprietà che restituiscano rispettivamente la parola più lunga e quella più corte presenti nella stringa
- Una funzione che, accettando un parametro di tipo char, calcoli il numero di volte che quel carattere appare nella stringa
- Una funzione che restituisca la stringa invertita
-
Scrivere una classe che rappresenti una cartella. Le sue proprietà specificheranno: nome della
cartella, percorso della cartella di livello superiore, dimensione in bytes, numero di files contenuti, numero di sottocartelle contenute.
Inoltre, dovrà esporre due collezioni di elementi: la prima rappresenta l'insieme di tutte le sottocartelle, che verranno rappresentate
dalla stessa classe; la seconda rappresenta l'insieme di tutti i files presenti al primo livello della cartella (memorizzati in una collezione
di stringhe). Suggerimento.
Esercizi sui capitoli A25, A26 e A27
Eseguire le seguenti consegne:
-
Considerando la classe Libro, creata nell'esercizio numero 2 del paragrafo precedente, scrivere una
classe factory che crei oggetti Libro, precludendo, nello stesso tempo, all'utente la possibilità di istanziare nuovi oggetti
Libro senza usufruire della classe factory -
Definire l'utilità dell'utilizzo degli specificatori di accesso Private, Friend, Protected
e Public su un costruttore, ed esemplificare un caso particolare per ognuno, in cui sia evidente il vantaggio offerto rispetto agli
altri casi
Esercizi sul capitolo A28
-
Creare una semplice struttura Int32Array, che contenga come unica proprietà un array di Int32,
quindi creare l'operatore +, che sommi due di queste strutture e ne restituisca una terza contenente come proprietà un array dato
dalla concatenazione dei due array esposti dagli operandi -
Creare una struttura che rappresenti un numero complesso, e definire in essa tutte le operazioni
aritmetiche e di confronto possibili -
Creare una classe che rappresenti un polinomio, dunque esporre tutti gli operatori artimetici consentiti
tra polinomi, concentrandosi in modo particolare sulla moltiplicazione e sulla divisione. Suggerimento. -
Creare una struttura che rappresenti un qualsiasi numero intero, ma con una peculiarità
questo numero non deve avere limitazioni di range. Infatti, i comuni tipi esposti dal framework (Int16, Int32, Int64, Decimal) posso assumere
valori che variano tra un minimo e un massimo (da -2n-1+1 a +2n-1-1, dove n è il numero di bit di memoria
occupati dal dato). Questa struttura non deve avere tali limitazioni, e deve perciò essere descritta da una stringa, che ha lunghezza
teoricamente illimitata (in realtà può arrivare fino a un massimo di oltre 2 miliardi di caratteri). Ad esempio, si potrà
assegnare un valore alla struttura così
Dim Num As New Numero("6790512639") 'oppure Num.Value = "6790512639"A questa struttura aggiungere, poi:- Tutti gli operatori aritmetici
- Tutti gli operatori di confronto numerici
- Tutti gli operatori di conversione da e verso i tipi Int16, UInt16, Int32, UInt32, Int64 e UInt64
- Tutti gli operatori di conversione da e verso i tipi Single, Double e Decimal
Esercizi sui capitoli A29, A30 e A31
-
Applicare l'ereditarietà per scrivere una classe derivata da Person che rappresenti un
libero professionista -
Applicare il polimorfismo a questa classe per modificare la proprietà FullName ponendo come
prefisso ad essa l'abbreviazione onorifica della professione (es.: "dott.", "ing.", "avv.", "on.", ...) -
Applicare l'overloading per definire, sempre in questa classe, alcune nuove versioni di ToString,
ad esempio consentendo di inserire una stringa di formato, o di scegliere se visualizzare o no l'abbreviazione della professione -
Scrivere una classe derivata da ArrayList che permetta la gestione di una collezione di Person.
Questa classe espoerrà, tra le sue proprietà pubbliche, anche le seguenti:
- AverageAge : restituisce l'età media di tutte le persone nella lista
- Youngest : restituisce la Person più giovane della collezione
- Oldest : restituisce la Person più vecchia della collezione
- MostCommonName : restituisce il nome più comunemente usato per le persone nella lista
-
Applicare il polimorfismo a quest'ultima classe per modificare i seguenti metodi:
- Add : in modo che consenta di aggiungere una nuova persona inserendo nome, cognome e data di nascita direttamente come parametri
- Remove : in modo che consenta di rimuovere una persona specificando solo nome e cognome tra i parametri
- Contains, IndexOf : in modo che consentano l'individuazione di una persona specificando solo nome e cognome tra i parametri
- ToString : in modo che trasformi la lista di Person in una stringa a più righe, ognuna individuante una persona
-
Applica l'overloading al caso precedente, rendendo i metodi ausiliari anziché obbligatori.
Aggiungere, inoltre, due funzioni di nome Recount, sottoposte a overloading: l'una accetterà come parametro un intero, rappresentante
un anno, e restituirà il numero delle persone nate in quell'anno; l'altra accetterà come parametro una stringa, e restituirà
il numero delle persone il cui nome contiene quella stringa (senza far differenza tra maiuscole e minuscole) -
Scrivere un sistema di lettura e scrittura dei tag ID3 v2.3, basato sulle classi, utilizzando
ereditarietà e, dove occorre, polimorfismo e overloading. Suggerimento 1.
Suggerimento 2.
Esercizi sul capitolo A34
-
Scrivere una funzione che esegua la stessa operazione matematica su tutti gli elementi di una array
di Single, e restituisca l'array modificato. L'operazione da eseguire deve, ovviamente, essere rappresentata da un delegate -
Riptere lo stesso esercizio, ma su un array di stringhe -
Implementare il metodo dicotomico -
Creare un programma di gestione files che possa modificare, copiare, spostare e rinominare elementi
in massa. Suggerimento.
The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.



