edutecnica

Oggetti in C/C++ : esercizi risolti


Esercizio 1

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.
Esegui il test del programma con un ciclo for .

Esercizio 2

Implementa la classe "Razionale" idonea alla manipolazione di numeri razionali. La classe deve poter sommare, sottrarre, moltiplicare e dividere numeri razionali esternalizzando il risultato. La classe deve poter semplificare automaticamente una frazione riducendola ai minimi termini e deve contenere un metodo che permetta la visualizzazione della frazione nella notazione:
numeratore/denominatore.

Esercizio 3

Scrivi una classe D (data) i cui oggetti possano essere inizializzati come: d(22,08,01); implementare il costruttore, il metodo out() per la stampa a video, il metodo mod(gg,mm,aa) per consentirne la modifica e un metodo val() per consentire la validazione della data .

Esercizio 4

Implementare un algoritmo di crittografia basato su una classe C che codifica una stringa di caratteri in ingresso in una stringa crittata illegibile.
Il sistema deve funzionare attraverso una chiave numerica che prende tutte le occorrenze di ogni lettera della stringa e le sostituisce con la lettera che sta in k (chiave numerica) posizioni più a destra nell'ordine alfabetico.

codice di cesare

Se k è negativa lo spostamento deve avvenire verso sinistra.

Esercizio 5

Scrivi un programma che preveda la classe X che possa essere inizializzata indifferentemente con un numero binario (max 8 bit) o decimale e possa restituire in uscita lo stesso numero, indifferentemente in formato binario (max 8 bit) o decimale.

Esercizio 6

Scrivere una classe C (cronometro) che svolga operazioni di cronometraggio del tempo. Deve essere dotata di metodi start(), stop(), per far partire e fermare il cronometro.
Deve poi, esserci una classe print() per stampare l'intervallo di tempo misurato.

Esercizio 7

Scrivi un programma per manipolare stringhe e numeri che implementi un metodo somma() che chiamato in questi modi:
somma(2,3) restituisce in output 5
somma("coco","nut") restituisce in output 'coconut'.
Il programma deve essere costituito da tre classi la classe O (operazione) che implementa i metodi per la manipolazione dei dati e le due classi derivate dalla classe O; N, per l'acquisizione e la restituzione di numeri e la classe S per l'acquisizione e la restituzione di stringhe.

Esercizio 8

Scrivi un programma che istanziata una classe T permetta ad un oggetto di tale classe di comportarsi indifferentemente come una coda (il primo entrante è il primo uscente) oppure come una pila (il primo entrante è l'ultimo uscente).
La classe T può essere derivata dalla classe V dove viene allocato un vettore di n posti. La classe V, genitrice, sarà dotata di un costruttore che inizializza il vettore e l'indice delle posizioni occupate, di un metodo print() per stampare il vettore e di un metodo set() per inserire un elemento nel vettore. La classe derivata T, può essere dotata soltanto di due metodi getpila() e getcoda(); che permettono di estrarre i dati secondo la modalità della pila oppure quello della coda .

Esercizio 9

Realizza la classe Q (Quadrato) dotata degli attributi lato, posx e posy; questi ultimi due sono le coordinate cartesiane dell'angolo superiore sinistro del quadrato.L'oggetto di classe Q può essere istanziato solo tramite costruttore.
Realizza poi la classe I (insieme) che riceve in ingresso due quadrati e restituisce in uscita l'esito di una loro eventuale intersezione (sovrapposizione); in tal caso l'oggetto di classe I deve restituire l'area dell' intersezione e dell'unione dei due quadrati. (esempio di scambio di dati fra classi non derivate fra loro).

Esercizio 10

Creare una classe Televisore sapendo che lo stato di un televisore è caratterizzato dal fatto di essere acceso o spento, dal volume (che è compreso tra zero e 10), dal canale (che è compreso tra 0 e 99) e dal fatto che sia in modalità silenzioso o meno.
Creare un opportuno costruttore e i seguenti metodi:
● PulsanteAccensione():ad ogni attivazione, setta ed unsetta il valore del pulsante di accensione
● ImpostaCanale(): se la tv è accesa, setta un numero di canale prestabilito passato in input
● CanaleSuccessivo():se la tv è accesa, passa al canale successivo, se possibile
● CanalePrecedente():se la tv è accesa, passa al canale precedente, se possibile
● AumentaVolume():se la tv è accesa, aumenta di 1 il volume, se possibile
● AbbassaVolume():se la tv è accesa, diminuisce di 1 il volume, se possibile
● PulsanteSilenzioso():se la tv è accesa, setta ed unsetta il valore del pulsante Mute
● PrintTv():se la tv è accesa, visualizza lo stato della tv (il valore di tutte le sue proprietà in quell'istante)

Testare la classe con un opportuno main che preveda un menù di scelta utente (vedi schema) attraverso il quale, attivando tutti i suoi metodi, si simuli un telecomando.
** 1 TV ON/OFF
** 2 Imposta canale
** 3 Canale SU
** 4 Canale GIU'
** 5 Volume SU
** 6 Volume GIU'
** 7 Mute ON/OFF
** 8 Stampa TV
** 0 ----> EXIT
Scelta:

Esercizio 11

E' necessario scrivere una applicazione che simula il funzionamento di un frammento del sistema informativo di un operatore di telefonia cellulare. Si devono quindi rappresentare i dati relativi ad una carta SIM ed in particolare;
● Il numero di telefono.
● Il credito disponibile in euro.
● La lista delle telefonate effettuate.
Per ciascuna telefonata deve essere rappresentata la durata in minuti.
La classe SIM dovrà fornire le seguenti funzionalità
● Un metodo per l'inserimento di una telefonata con i dati forniti dall'utente
● Una funzione per il calcolo dei minuti totali di conversazione.
● Una funzione per il calcolo delle telefonate effettuate verso un certo numero
● Una procedura per la stampa dei dati della SIM e l'elenco delle telefonate. .

Esercizio 12

Creare una classe Squadra che rappresenta una squadra di calcio e ha come attributi il numero di partite vinte, il numero di partite perse e il numero di partite pareggiate e i gol fatti e subiti.
Ha opportuni metodi per impostare i parametri e farli visualizzare, inoltre ha:

● il metodo punti() che restituisce quanti punti ha in campionato (ogni partita vinta vale 3 punti, ogni partita pareggiata 1, quelle perse 0)
● un metodo inizioanno() che resetta il numero di partite vinte, pareggiate e perse portandole a zero.
● il metodo goalFatto()
● il motodo goalSubito()

Creare un main per provare la classe creando due istanze Juventus e Milan e si provino ad utilizzare facendo inserire all’utente per entrambe le squadre il numero di partite vinte, perse e pareggiate e quanti gol fatti e subiti e poi confrontando quale delle due ha più punti in campionato e quale delle due ha subito più goal e quale ne ha fatti di più.
NB: si sviluppi usando il paradigma della programmazione ad oggetti ed in particolare rispettando l’information hiding: parametri privati, metodi pubblici.