C++ #7 Esercizi con le Funzioni

Obiettivo: Sono riportati in seguito una serie di esercizi utili per testare le proprie conoscenze nell’ambito dei linguaggi di programmazione strutturata relativamente all’utilizzo delle funzioni.
Gli esercizi,  a complessità crescente, prevedono inizialmente la realizzazione di funzioni con passaggio dei parametri per valore ed in seguito per riferimento.

Per la risoluzione degli esercizi si suggerisce l’utilizzo del compilatore online:


https://www.onlinegdb.com/online_c++_compiler

FUNZIONI CON PASSAGGIO PARAMETRI PER VALORE

1) Implementare una funzione che ricevuto in ingresso il valore del lato di un quadrato restituisca il valore del perimetro. Realizzare un programma che utilizzi tale funzione.

2) Implementare una funzione che ricevuti in ingresso i valori della base e dell’altezza di un rettangolo restituisca il valore del perimetro. Realizzare un programma che utilizzi tale funzione.

3) Implementare una funzione che ricevuto un numero in ingresso restituisca il valore assoluto di tale numero. Realizzare un programma che utilizzi tale funzione.

4) Implementare una funzione che ricevuti due numeri in ingresso restituisca il numero maggiore. Realizzare un programma che utilizzi tale funzione.

5) Implementare una funzione che ricevuti tre numeri in ingresso restituisca il numero maggiore. Realizzare un programma che utilizzi tale funzione.

6) Utilizzare la funzione implementata nell’esercizio 4 (i.e., massimo di due numeri) per determinare il massimo tra quattro numeri. (Consiglio: utilizzare la funzione per determinare il massimo tra il primo ed il secondo numero ed in seguito il massimo tra il terzo ed il quarto numero. Infine utilizzare un’ultima volta la funzione per determinare il massimo dei massimi).

7) Implementare una funzione che ricevuti in ingresso i valori della base e dell’altezza di un rettangolo restituisca il valore dell’area. Realizzare un programma che utilizzi tale funzione.

8) Implementare una funzione che ricevuto in ingresso un carattere restituisca il valore 0 se il carattere ricevuto è una consonante mentre restituisca 1 se il carattere ricevuto è una vocale. Realizzare un programma che utilizzi tale funzione.

9) Implementare una funzione che ricevuto un numero in ingresso restituisca il valore del fattoriale del numero ricevuto. Realizzare un programma che utilizzi tale funzione. Nota bene, il fattoriale di un numero N è N*(N-1)*(N-2)…*1

10) Implementare una funzione che ricevuti in ingresso due interi, calcoli il Minimo Comune Multiplo e restituisca tale valore. Realizzare un programma che utilizzi tale funzione.

11) Implementare una funzione che ricevuti in ingresso due interi, calcoli il Massimo Comune Divisore e restituisca tale valore. Realizzare un programma che utilizzi tale funzione.

12) Implementare una funzione che ricevuto in ingresso un numero intero, restituisca true se è un numero primo, altrimenti restituisca false. Realizzare un programma che utilizzi tale funzione.

13) Implementare una funzione che ricevuto in ingresso il valore dei cateti di un triangolo rettangolo, restituisca il valore dell’ipotenusa (il calcolo della radice quadrata può essere eseguito sfruttando la libreria matematica: math.h). Realizzare un programma che utilizzi tale funzione.

14) Implementare una funzione che ricevuto in ingresso le coordinate x e y di due punti (x1, y1, x2, y2), restituisca la distanza tra due punti (l’elevamento a potenza ed il calcolo della radice quadrata possono essere eseguiti sfruttando la libreria matematica: math.h). Realizzare un programma che utilizzi tale funzione.

FUNZIONI CON PASSAGGIO PARAMETRI PER RIFERIMENTO

15) Implementare una funzione che ricevute due variabili in ingresso permetta di scambiare il valore di tale variabili. Realizzare un programma che utilizzi tale funzione.

16) Implementare una funzione che ricevuto in ingresso il valore della base e dell’altezza di un rettangolo permetta di calcolare area e perimetro. Questi ultimi due valori devono essere passati sfruttando la tecnica del riferimento. Realizzare un programma che utilizzi tale funzione.

17) Implementare una funzione che ricevuto in ingresso il valore dei parametri a, b, e c di una equazione di secondo grado ax2+bx+c=0 calcoli le soluzioni x1 e x2 della suddetta equazione . Questi ultimi due valori devono essere passati sfruttando la tecnica del riferimento. Realizzare un programma che utilizzi tale funzione.

18) Implementare una funzione che ricevuto in ingresso il valore dei parametri a, b, e c di una equazione di secondo grado ax2+bx+c=0 calcoli le soluzioni x1 e x2 della suddetta equazione. Questi ultimi due valori devono essere passati sfruttando la tecnica del riferimento. Realizzare un programma che utilizzi tale funzione. La funzione deve restituire 1 nel caso di valori del delta maggiori o uguali a zero (soluzioni reali), mentre deve restituire 0 per valori del delta minori di zero (soluzioni non reali).

19) Implementare una funzione che ricevuti in ingresso il valore del numeratore e denominatore di due differenti frazioni, calcoli numeratore e denominatore della frazione ottenuta moltiplicando le due precedenti frazioni. Questi ultimi due valori devono essere passati sfruttando la tecnica del riferimento. Realizzare un programma che utilizzi tale funzione.

20) Implementare una funzione che ricevuti in ingresso il valore del numeratore e denominatore di una frazione, riduce la frazione ai minimi termini. Realizzare un programma che utilizzi tale funzione.

21) Implementare una funzione che ricevuti in ingresso il valore del numeratore e denominatore di due differenti frazioni, calcoli numeratore e denominatore della frazione ottenuta sommando le due precedenti frazioni. Questi ultimi due valori devono essere passati sfruttando la tecnica del riferimento. Realizzare un programma che utilizzi tale funzione.

FUNZIONI CON PASSAGGIO DI ARRAY

22) Implementare una funzione che ricevuto in ingresso un array e la sua dimensione inserisca al suo interno tutti zero. Realizzare un programma che utilizzi tale funzione.

23) Implementare due differenti funzioni. Una prima funzione che ricevuti in ingresso un array e la sua dimensione, inserisca al suo interno valori scelti dall’utente. Una seconda funzione che ricevuti in ingresso un array e la sua dimensione riporti i valori contenuti nell’array. Realizzare un programma che utilizzi tali funzioni di input e output.

24) Implementare una funzione che ricevuti in ingresso un array e la sua dimensione calcoli il valore massimo presente all’interno dell’array e lo restituisca. Realizzare un programma che utilizzi tale funzione.

25) Implementare una funzione che ricevuti in ingresso un array, la sua dimensione, calcoli quante volte è presente all’interno dell’array il valore zero e lo restituisca. Realizzare un programma che utilizzi tale funzione.

26) Implementare una funzione che ricevuti in ingresso un array, la sua dimensione, ed un interno N, calcoli quante volte il valore N è presente all’interno dell’array e lo restituisca. Realizzare un programma che utilizzi tale funzione.

ANALISI DI CODICE

1) Esercizi di analisi di codice (passaggio per valore e per riferimento)

2) Esercizi di analisi di codice (passaggio per valore)

3) Esercizi di analisi di codice (passaggio per riferimento)

4) Esercizi di analisi di codice (passaggio di array a funzioni)

5) Esercizi di analisi di codice (variabili locali e globali)

ATTIVITA COOPERATIVA

1) Analisi di Codice difficoltà Easy

2) Analisi di Codice difficoltà Medium

3) Analisi di Codice difficoltà Hard

ESERCIZI DI PREPARAZIONE ALLA VERIFICA
1) Implementare una funziona che ricevuti in ingresso tre valori reali che rappresentano i lati di un triangolo restituisca 1 se i valori dei lati formano un triangolo (somma di due lati > il terzo) altrimenti restituisca 0. Realizzare un programma che utilizzi tale funzione. EASY

2) Implementare una funziona che ricevuti in ingresso due numeri interi: base ed esponente (entrambi ≥ 0) calcoli e restituisca il valore della potenza utilizzando un ciclo. Realizzare un programma che utilizzi tale funzione. MEDIUM

3) Scrivi una funzione che, ricevuto in ingresso (per valore) un numero di secondi, calcoli quante ore, minuti e secondi esso rappresenta. I tre risultati devono essere restituiti tramite parametri passati per riferimento. Realizza poi un programma completo che utilizzi questa funzione. EASY

4) Scrivi una funzione che, ricevuti in ingresso tre numeri interi per riferimento (a, b, c), li riordini in ordine crescente modificando direttamente le variabili originali (a deve contenere il valore più piccolo, b quello intermedio e c il più grande. La funzione non deve restituire valori tramite return, ma aggiornare i parametri passati. Realizza poi un programma completo che utilizzi questa funzione e stampi i numeri prima e dopo l’ordinamento. MEDIUM

5) Scrivi un programma che prenda in input due array di numeri interi della stessa dimensione. Il programma deve confrontare i valori maggiori presenti nei due array.
Se il numero maggiore del primo array è maggiore del numero maggiore del secondo array, il programma deve restituire 1. Altrimenti, deve restituire 2. Realizza poi un programma completo che utilizzi questa funzione e stampi i numeri prima e dopo l’ordinamento. EASY




C++ #4 Esercizi con numeri random

Obiettivo: Sono riportati in seguito una serie di esercizi utili per testare le proprie conoscenze nell’ambito dei linguaggi di programmazione strutturata relativamente all’utilizzo dei numeri randomici (numeri casuali).
Gli esercizi,  a complessità crescente, prevedono inizialmente la semplice generazione di numeri random ed infine applicazioni più complesse che richiedono l’impiego di cicli iterativi e blocchi condizionali. 

Per la risoluzione degli esercizi si suggerisce l’utilizzo del compilatore online:


https://www.onlinegdb.com/online_c++_compiler

ESERCIZI CON NUMERI RANDOMICI

1) Realizzare un programma che simuli il lancio di un dado a sei facce e riporti il risultato.

2) Realizzare un programma che simuli il lancio di una moneta e riporti il risultato (testa o croce).

3) Realizzare un programma che simuli il lancio di un dado a 20 facce (utile per i giocatori di Dungeons and Dragons) e riporti il risultato.

4) Realizzare un programma che permetta all’utente di definire il numero di facce di un dado e ne simuli il lancio riportando il risultato.

ESERCIZI CON NUMERI RANDOMICI E BLOCCHI CONDIZIONALI

5) Realizzare un programma che simuli il lancio di due dadi a sei facce e dopo avere riportato il risultato indichi se è uscita una coppia di numeri uguali.

6) Realizzare un programma per simulare il gioco dei dadi. Prima del lancio, il giocatore deve indovinare se il numero risulti maggiore di 3 oppure minore di 4. La scelta tra le due opzioni può essere effettuata attraverso un semplice menu (ad esempio: “premi 0 per puntare su un numero minore di 4” / “premi 1 nel caso in cui il numero risulti maggiore di 3”). Il programma deve visualizzare il risultato del lancio del dado e indicare se l’utente ha indovinato la previsione oppure no.

7) Realizzare un programma per simulare il gioco dei dadi per due differenti giocatori. Prima del lancio del dado, ciascun giocatore deve scegliere un numero compreso tra 1 e 6. Il programma deve simulare il lancio di un dado generando un numero casuale tra 1 e 6 e visualizzare il risultato ottenuto. Al termine del lancio, il programma deve confrontare il numero estratto con le scelte dei due giocatori e indicare il vincitore:
– vince il giocatore che ha indovinato il numero esatto;
– nel caso in cui entrambi i giocatori indovinino, la partita termina in pareggio;
– se nessuno dei due indovina, il programma deve segnalare che non ci sono vincitori.

ESERCIZI CON NUMERI RANDOMICI E CICLI ITERATIVI

8) Realizzare un programma che simuli 5 lanci di un dato a sei facce e determini quante volte è uscito il numero 6.

9) Migliorare il programma di simulazione del gioco dei dadi sviluppato nell’esercizio 6. Introdurre un ciclo definito che permetta di giocare per 5 volte ed un contatore delle vittorie.

10) Migliorare il programma di simulazione del gioco dei dadi sviluppato nell’esercizio 7. Introdurre un ciclo definito che permetta di giocare per 5 volte ed un contatore delle vittorie. Al termine delle 5 partite il programma deve indicare quale dei due giocatori ha vinto.

11) Realizzare un programma che permetta di simulare l’estrazione del lotto attraverso la generazione di 5 numeri casuali nel range 1-90. Attenzione i numeri non possono essere ripetuti e devono risultare equiprobabili.

12) Realizzare un programma che generato un numero naturale nel range 0-10, permetta all’utente di indovinare il numero generato. Il programma deve terminare quando il numero viene indovinato (CICLO INDEFINITO).

12bis) Realizzare un programma che generato un numero naturale nel range 0-10, permetta all’utente di indovinare il numero generato. Il programma deve terminare quando il numero viene indovinato (CICLO INDEFINITO). Ad ogni iterazione, nel caso in cui l’utente non abbia individuato, deve essere fornito un feedback all’utilizzatore in cui si riporta se il numero generato risulta maggiore o inferiore al numero inserito.

13) Realizzare un programma che:
– Chieda all’utente il numero di lanci da effettuare con un dato a sei facce
– Generi tanti numeri randomici nel range 1-6 pari al numero di lanci indicato dall’utente. (CICLO DEFINITO)
– Ripete la procedura fino a che l’utente non inserisce un numero negativo (CICLO INDEFINITO).
E’ importante considerare che la soluzione di questo programma prevede l’utilizzo di due cicli innestati.

14) Realizzare un programma che generi numeri casuali compresi tra 1 e 6. L’estrazione deve proseguire finché il numero generato è pari; il programma termina quando viene estratto un numero dispari.

15a) Realizzare un programma che simuli il lancio di tre dadi (numeri casuali compresi tra 1 e 6). L’estrazione deve proseguire fino a che la somma dei numeri generati non diventa maggiore di 10. (Per somme maggiori di 10 il ciclo deve terminare)

15b) Realizzare un programma che simuli il lancio di tre dadi, generando per ciascun dado un numero casuale compreso tra 1 e 6. Dopo ogni lancio, il programma deve verificare se almeno uno dei tre dadi mostra il valore 6: in tal caso l’utente deve effettuare un nuovo lancio dei tre dadi. Il gioco termina quando nessuno dei tre dadi assume il valore 6.

15c) Realizzare un programma che simuli il lancio di tre dadi, generando per ciascun dado un numero casuale compreso tra 1 e 6. Dopo ogni lancio, il programma deve verificare se a tutti e tre i numeri hanno un valore dispari. In tal caso l’utente deve effettuare un nuovo lancio dei tre dadi. Il gioco termina quando almeno uno dei numeri estratti non è dispari.

15d) Realizzare un programma che simuli il lancio di tre dadi, generando per ciascun dado un numero casuale compreso tra 1 e 6. Dopo ogni lancio, il programma deve verificare se almeno due dei tre i numeri hanno un valore maggiore di 3. In tal caso l’utente deve effettuare un nuovo lancio dei tre dadi.

SEMPLICI PROGETTI:
16) Scrivere un programma in C++ che simuli la riproduzione di una playlist musicale. La playlist è composta da 5 brani.
1) Blinding Lights – The Weeknd
2) As It Was – Harry Styles
3) Bad Guy – Billie Eilish
4) Flowers – Miley Cyrus
5) Levitating – Dua Lipa
L’utente sceglie quante canzoni vuole riprodurre in sequenza. Il programma genera tanti numeri casuali quante sono le canzoni da riprodurre e, per ogni numero generato, indica la canzone corrispondente.

17a) Realizzare un programma che simuli una partita a sette e mezzo. L’obiettivo del gioco è avvicinarsi il più possibile a sette e mezzo attraverso l’estrazione di numeri casuali. Ad ogni turno di gioco, il giocatore può scegliere se estrarre un numero oppure no. Ogni nuovo numero estratto si somma alla somma dei numeri precedentemente estratti. Il programma si deve fermare quando l’utente sceglie di smettere di giocare oppure quando supera il valore sette e mezzo. Nel caso in cui l’utente superi tale valore si riporti la scritta: “Hai Sballato”, differentemente nel caso in cui l’utente raggiunga il valore sette e mezzo si riporti la scritta “Hai vinto”. Il giocatore inizia sempre con un valore del banco pari a 0.5. In questa versione del gioco è possibile generare solo valori interi.

17b) Realizzare un programma che simuli una partita a due giocatori a sette e mezzo. L’obiettivo del gioco è avvicinarsi il più possibile a sette e mezzo attraverso l’estrazione di carte (nel nostro caso numeri) casuali. Il gioco prevede l’utilizzo di carte da gioco italiane le quali prevedono 4 differenti semi (bastoni, spade, coppe e denari) e 10 differenti tipologie di carte per ogni seme (asso, due, tre, quattro, cinque, sei, sette, fante, cavallo e re). Mentre le figure (fante, cavallo e re) valgono 0.5 le altre carte hanno valore pari al valore del simbolo rappresentato (un asso vale uno, un due vale due, etc…)
Ad ogni turno di gioco, il giocatore può scegliere se estrarre un numero oppure no. Ogni nuovo numero si somma alla somma dei numeri precedentemente estratti. Nel caso in cui l’utente superi il valore 7.5 l’utente ha automaticamente perso.
Il giocatore1 è sempre il primo ad iniziare la partita e può continuare ad estrarre carte fino a che non desidera fermarsi oppure supera il valore 7.5. Terminato il turno del giocatore1 inizia a giocare il giocatore2 che ugualmente può continuare ad estrarre carte fino a che non desidera fermarsi oppure supera il valore 7.5.
Terminato il turno del giocatore 2 il programma deve indicare chi ha vinto e chi ha perso.

17c) Si utilizzi un ciclo indefinito per permettere ai due giocatori dell’esercizio 16b di effettuare più partite in sequenza. Nel dettaglio, implementare una sfida alla meglio delle 5 partite, in questo caso vince la sfida il giocatore che vince per primo a 3 partite.