Capitolo 1 - Operazioni di base (condizioni e cicli)
Es. 1
Ciao per n volte
Scrivere Ciao per un numero di volte definito dall'utente. Inserire il controllo che il numero di volte
sia positivo
Es. 2
Calcolo della n-esima potenza
Dati di input base ed esponente, calcolare con l'uso di un for la n-esima potenza (base elevato alla
esponente).
Es. 3
Minimo e massimo di una sequenza, senza vettori
Calcolare il minimo ed il massimo di una sequenza di n numeri, senza utilizzare nessun vettore.
Es. 4
Media di voti
Calcolare la media dei voti di uno studente. La sequenza dei voti inseriti termina con 0.
Controllare il caso in cui la sequenza sia vuota.
Es. 5
Quanti positivi e quanti negativi?
Chiedere all'utente N numeri e contare quanti sono i numeri positivi ed i negativi.
Es. 6
Quanti pari e quanti dispari?
Richiesti in ingresso n numeri (n specificato dall'utente) contare i numeri pari ed i numeri dispari.
Es. 7
Media di numeri positivi
Dati N numeri in ingresso, calcolare la media dei numeri positivi.
Es. 8
Massimo con while/do while
Calcola il massimo tra una sequenza di 10 numeri con while o do while
Es. 9
Positivi/negativi con percentuale
Data una sequenza di N numeri interi, contare quanti sono positivi e quanti negativi. Comunicare il
numero dei positivi e dei negativi, e la percentuale dei positivi e dei negativi rispetto al totale dei
numeri.
Es. 10
Quanti valori e la loro somma
Progettare un algoritmo che legga una sequenza di valori numerici fino alla lettura di un valore 0 e
scriva quanti valori sono stati letti e la loro somma. (utilizzare il post_condizionale do while)
Es. 11
Somma dei primi n numeri
Scrivi un algoritmo per il calcolo della somma dei primi n numeri (partendo da 0) utilizzando 3
variabili.
Es. 12
Somma finche la somma e' minore di 100
Progettare un algoritmo che legga una sequenza di valori numerici fino a che la loro somma e' minore di
100, scriva la somma ottenuta e quanti sono i valori letti.
Es. 13
Quanti multipli di k?
Progettare un algoritmo che, dato un valore numerico k, legga n numeri e conti quanti di questi sono
multipli di k scrivendo il risultato.
Es. 14
Quanto spendo per l'acquisto di N libri?
Si vuole calcolare la spesa per l'acquisto di N libri (N in input). Introdurre da input il prezzo di
ogni libro e applicare sul totale il 4% in piu' per le spese di spedizione. Visualizzare la spesa
finale.
Es. 15
Massimo e minimo con errore
Chiedere in input un numero intero N (ciclare fino a quando N sia positivo).
Se ho superato i 3 tentativi di inserire un N positivo dare un errore, altrimenti chiedere in input N
numeri interi e al termine del ciclo visualizzare il numero massimo e il numero minimo tra quelli
inseriti.
Es. 16
Media positivi e media totale, con errori
Chiedere in ingresso all'utente una sequenza di numeri interi. La sequenza termina quando l'utente
inserisce il numero 0. Calcolare e visualizzare la media dei numeri positivi e pari e la media di tutti
i numeri. Considerare tutti i possibili casi di errore (Il primo numero è zero, non ci sono numero pari
e positivi).
Es. 17
Numero primo?
Chiedere in ingresso un numero intero. Visualizzare se il numero è primo oppure no
Es. 18
Massimo Comune Divisore (MCD)
Chiedere in ingresso due numeri interi. Calcolare il massimo comune divisore e visualizzarlo
Es. 19
Numeri pari inferiori a n
Leggi in ingresso un numero n e visualizza tutti i numeri pari inferiori a tale numero (fino a 0).
Es. 20
Giuseppe e Lorenzo
Bisogna contare quanti studenti di una classe si chiamano Giuseppe e quanti Lorenzo. Si riceve in
ingresso la sequenza dei nomi degli studenti. Tale sequenza termina quando l’utente inserisce il valore
FINE.
Stampare al termine i seguenti valori:
Lo studente Giuseppe e' presente X volte.
Lo studente Lorenzo e' presente Y volte.
Es. 21
Media di positivi o somma negativi
Dati in input una sequenza di interi (la sequenza termina quando l’utente inserisce lo zero), calcolare
la media solo dei numeri positivi (lo zero non va considerato nel calcolo della media).
Se nella
sequenza è presente il numero 100, non bisogna calcolare la media ma la somma dei numeri negativi
presenti nell’intera sequenza.
Es.
se la sequenza è -4 5 8 12 -12 0 la media è 8,333
Se la sequenza è -3 -5 -6 -10 0 la media è zero
Se la sequenza è -3 -4 -10 30 100 -5 0 devo visualizzare la somma Negativi -22
Es. 22
Numeri compresi tra 1 e N, multipli di M
Si realizzi un programma che dati due interi N ed M richiesti in input calcoli l'insieme dei numeri
compresi tra 1 ed N che sono multipli di M.
Stamparli in ordine crescente.
Esempio:
N=10
M=3
il programma stampa: 3 6 9
Es. 23
Numero elementi maggiori di x
Scrivere un programma che acquisisca da tastiera un intero x e altri N interi e restituisca il numero di
elementi maggiori di x presenti ricevuti in ingresso.
es.
se in ingresso di specifica x=10 e N=4 ela sequenza dei numeri è 3 6 12 21, il programma restituisce 2
se in ingresso di specifica x=4 e N=5 e la sequenza dei numeri è 3 6 2 1 2 , il programma restituisce 1
Es. 24
Indovina il numero
Scrivere un programma che implementi il gioco nel quale l'utente deve indovinare un numero segreto con
una quantità massima di tentativi. Utilizzare una funzione generaNumero che permette di generare
casualmente un numero di 4 cifre, mentre la funzione indovinaNumero consente :
di inserire un numero all'utente
confronta il numero da individuare con quello inserito e visualizza il messaggio "troppo grande" o
"troppo piccolo"
se il numero inserito è corretto la funzione ritorna vero oppure falso
Il programma principale controlla se i tentativi ammessi sono esauriti, se il numero segreto è stato
individuato o meno e ripropone una nuova partita
Facoltativo: Aggiornare il gioco inserendo anche 3 livelli di difficoltà (facile, medio e difficile),
diminuendo il numero di tentativi a seconda della difficoltà.
Es. 25
Calcolo del fattoriale
Si scriva una funzione denominata fatt, che calcoli il fattoriale di un numero intero
dato. Per via della velocità di crescita della funzione, il valore restituito deve essere
codificato in un double, nonostante sia a tutti gli effetti un valore intero.
Tale funzione deve essere chiamata in un programma che ha richiesto in ingresso un numero intero e che
visualizzi il valore del fattoriale calcolato dalla funzione fatt
Es. 26
Calcolo dell'imposta progressiva
Su una somma di denaro deve essere pagata un imposta progressiva secondo lo schema:
da 0 a 5000 euro una imposta (tassa) del 10%
da 5.000 a 15.000 euro una tassa del 20%
oltre i 15.000 una tassa del 30%
Dopo aver acquisito in input l'importo bisogna calcolare l'imposta complessiva tenendo conto che la
parte fino a 5000 ha una tassazione del 10% quella che ecede i 5000 avrà il 20% e così via.
Esempio se l'importo è 12.000 l'importo è calcolato come il 10% di 5000 a cui va aggiunto il 20% dei
7000 euro
rimanenti
L'output è rappresentata dall'imposta finale da pagare
Es. 27
Volo low cost
Un volo aereo low cost per sola andata con destinazione Londra ha prezzi diversi a seconda dei mesi
dell'anno e precisamente:
da gennaio a giugno 26 euro
da luglio, agosto o settembre 40 euro
da ottobre a dicembre 30 euro
Fornito in ingresso il mese di partenza calcolare il costo del biglietto.
Es. 28
Sequenza ordinata crescente?
Data una sequenza di N numeri interi verificare se la sequenza è ordinata in ordine crescente.
Ad esempio se la sequenza di numeri è:
5 10 20 30 41 il programma visualizza il messaggio: "Ordinata"
5 21 32 4 27 89 il programma visualizza il messaggio: "Non ordinata"
Nel caso in cui N sia uguale a 1 la sequenza si considera ordinata
SUGGERIMENTO: Chiedere in input un valore prima del ciclo (rappresenta il primo numero), chiedere un
solo numero dentro il ciclo e confrontarlo con il precedente
Es. 29
Reddito superiore a 30.000€
Siano dati in input dall'utente il nome, il reddito di N contribuenti (N fornito dall'utente).
Stampare i nomi dei contribuenti con reddito superiore a 30.000 euro
Es. 30
Percentuali M, F e maggiorenni
Siano dati in input le età e il sesso ('M' o 'F') di N studenti di una classe (N fornito dall'utente).
Visualizzare la percentuale delle femmine, quella dei maschi rispetto al totale degli studenti della
classe e la percentuale di maggiorenni in classe.
Es. 31
Prodotto numeri pari
Caricare un vettore di dimensione 10 con numeri interi.
Moltiplicare tra loro tutti i numeri pari
presenti nel vettore e visualizzare il risultato
Es. 32
Tabella pitagorica
scrivere in C++ un esercizio che realizza la tabellina pitagorica: (ogni numero è il prodotto della riga
per la colonna).
Suggerimento: utilizzare un for dentro un for dove ogni for ha un indice diverso
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 20 40 50 60 70 80 90 100
Es. 33
Parti della tabellina pitagorica
Svolgere un esercizio che:
stampa la parte del triangolo superiore della tabellina pitagorica
stampa la diagonale maggiore della tabellina pitagorica
stampa la diagonale minore della tabellina pitagorica
stampa la parte del triangolo inferiore della tabellina pitagorica
Es. 34
Differenza costante
Dati n valori numerici (controllare che siano crescenti altrimenti restituisce un errore), progettare un
algoritmo che scriva se i numeri forniti a partire dal secondo differiscono
ognuno dal precedente di un valore costante.
In caso affermativo l’algoritmo deve scrivere il valore
della differenza, in caso negativo l’algoritmo deve scrivere il valore massimo delle differenze tra i
numeri.
Es. 35
Menu di figure geometriche
Realizzare un menu che stampi a video delle figure geometriche fatte di asterischi.
Le forme geometriche sono:
quadrato di asterischi (pieno)
quadrato di asterischi (vuoto, cioè sono disegnati solo i bordi)
rettangolo pieno
rettangolo vuoto
La scelta della figura e la sua dimensione va chiesta in input all'utente.
Es. 36
Presenze giornaliere in albergo
Sono forniti 12 valori in input. Ogni valore rappresenta il numero di presenze giornaliere del mese
corrispondente in un albergo.
Ad esempio il valore 300 che è il primo numero in ingresso, indica che nel mese di gennaio ci sono state
300 presenze giornaliere nell’albergo in questione. Se il secondo valore in input è 250, indica che ci
sono state nel mese di febbraio 250 presenze giornaliere e così via.
Calcolare:
la media di presenze nel corso dell'intero anno
il numero totale di presenze nei mesi estivi (6,7,8) che rappresentano il mese di luglio, agosto e
settembre
Il mese in cui è stato registrato il massimo di presenze
il mese in cui è registrato il numero minimo di presenze
la media delle presenze escludendo i mesi estivi
Es. 37
Sequenza di numeri casuali
Genera una sequenza di N numeri casuali tra 1 e 10000 e visualizzare la quantità dei numeri pari e i
numeri dispari che sono generati. (N positivo e richiederlo per un numero massimo di tentativi)
Importante la funzione srand(time(NULL)) deve essere chiamata una sola volta fuori dal ciclo.
Es. 38
Minimo e massimo di numeri casuali
Genera casualmente N numeri compresi tra 1 e 1000 (N maggiore di 0 altrimenti ricicla
finche è maggiore di zero o non superi un numero massimo di tentativi definito in una
costante). Calcolare l’elemento minimo e massimo e visualizzarli.
Es. 39
Negozio con sconti
Un negoziante per incrementare le sue vendite, prevede di applicare uno sconto in base al
numero dei pezzi acquistati. Se il cliente compra un pezzo viene applicato il 15% di
sconto, il 20% per 2 pezzi, il 30% per 3; in tutti gli altri casi lo sconto è del 40%.
In input
deve quindi essere inserito il prezzo unitario del prodotto e la quantità acquistata. Il prezzo
unitario viene fornito all’inizio del programma, mentre la quantità acquistata è il valore
intero di un switch. Prima del switch visualizzare il menu in cui si descrivono le offerte.
Cioè:
se acquisti un pezzo lo sconto è 15% (premi 1)
se acquisti due pezzi lo sconto è 20% (premi 2)
se acquisti tre pezzi lo sconto è 30% (premi 3)
per qualunque altro numero di pezzi o sconto è del 40%
Visualizzare lo sconto complessivo applicato e l’importo effettivo che il cliente deve pagare.
Il menù deve essere messo all’interno di un ciclo in modo che il cliente possa acquistare (in ogni
ciclo) un prodotto
con un prezzo differente.
Il ciclo termina quanto il cliente seleziona la stringa “FINE-SPESA”
Es. 40
Prodotto di x per i
Si realizzi un programma che legga da input un intero N ed un float x > 0.
Si calcoli e
visualizzi la somma dei prodotti di x per i, con i che varia da 1 ad N (ovvero, il valore somma =
x*1 + x*2 + ... + x*N).
Ad es. se x=3 e N=5, bisogna fare le seguenti operazioni:
3*1 + 3*2 + 3*3 + 3*4 + 3*5
Es. 41
Somma pari e dispari con condizioni
Scrivere un programma che chieda all'utente una sequenza di interi positivi verificando che l'utente
inserisca alternativamente un numero pari e un numero dispari, cominciando con un numero pari.
La sequenza termina quando l'utente immette un valore minore o uguale a zero, se immette due pari
consecutivamente o se immette due dispari consecutivamente.
Terminata la lettura dei valori il programma deve stampare la somma di TUTTI i valori pari e poi la
somma di TUTTI i valori dispari appartenenti alla sequenza (il valore che fa terminare la sequenza di
inserimento non va contato nella somma).
Se la sequenza è vuota, cioè il primo numero non è pari e maggiore di zero, allora il programma stampa
solo un avvertimento.
Dammi un intero: -3
La sequenza di numeri e' vuota
-------------------------------------
Dammi un intero: 3
La sequenza di numeri e' vuota
-------------------------------------
Dammi un intero: 12
Dammi un intero: 5
Dammi un intero: 8
Dammi un intero: 7
Dammi un intero: 11
Il totale dei valori pari e' 20
Il totale dei valori dispari e' 12
-------------------------------------
Dammi un intero: 6
Dammi un intero: 3
Dammi un intero: 0
Il totale dei valori pari e' 6
Il totale dei valori dispari e' 3
-------------------------------------
Es. 42
Triangolo rettangolo
Scrivere un programma che chieda all'utente un intero n compreso tra 2 e 15, e stampi un triangolo
rettangolo di asterischi con altezza n, come negli esempi riportati sotto.
Se il numero fornito
dall'utente non è compreso nell'intervallo indicato, il programma lo deve chiedere di nuovo.
Dammi un intero compreso tra 2 e 25, estremi inclusi: 5
*
**
***
****
*****
-------------------------------------
Dammi un intero compreso tra 2 e 25, estremi inclusi: 1
Dammi un intero compreso tra 2 e 25, estremi inclusi: 2
*
**
-------------------------------------
Dammi un intero compreso tra 2 e 25, estremi inclusi: 100
Dammi un intero compreso tra 2 e 25, estremi inclusi: 10
*
**
***
****
*****
******
*******
********
*********
**********
-------------------------------------
Capitolo 2 - Array (vettori)
Es. 0
Raddoppia gli elementi
Inserisci 10 numeri interi usando un vettore, modifica questi elementi raddoppiandoli, poi stampa gli elementi modificati.
Es. 1
Minimo, massimo e media di un vettore
Scrivere un programma in cui si carica un vettore di dimensione costante. Successivamente calcolare il
min, max e media e visualizzarlo
Es. 2
Minimo e massimo vettore numeri casuali
Dichiarare un vettore di lunghezza M (costante) Genera casualmente N numeri compresi tra 1 e 1000 (N
deve essere maggiore di 0 e minore o uguale ad M, altrimenti cicla finche non superi un numero massimo
di tentativi definito in una costante) e memorizzali nel vettore. Calcolare l’elemento minimo e massimo
del vettore.
Es. 3
Media di numeri in POSIZIONE pari e dispari
Caricare un vettore di numeri interi. Stampare la media di tutti i numeri in posizione pari e la media
di tutti i numeri in posizione dispari.
Es. 4
Visualizza solo una volta
Leggi da input N numeri interi e memorizzali in un array.
Stampa i valori dell'array in sequenza senza stampare lo stesso numero due volte
es. se il vettore contiene [15, 3, 5, 3, 11, 5, 15, 5, 15,11]
deve essere stampato [15, 3, 5, 11]
Es. 5
Media dispari e media pari
Caricare un vettore di interi. Stampare la media di tutti i numeri dispari e la media di tutti i numeri
pari presenti nel vettore
Es. 6
Lancio dei dadi
Calcolare la frequenza di n lanci di un dado.
Utilizzare il vettore.
Es. 7
E' presente il nome?
Caricare un vettore di stringhe di dimensioni 15.
Chiedere all'utente un nome e verificare se il nome è presente nel vettore.
Es. 8
Operazioni sui vettori
Definire un vettore di dimensione massima 100 poi chiedere all’utente la dimensione n del vettore e
caricarlo di valori interi.
Creare poi un menu (switch) per far scegliere all’utente una delle seguenti alternative:
1) Visualizza il vettore;
2) Visualizza il vettore dall'ultimo elemento al primo;
3) Dato in input un numero intero, dire se è presente nel vettore e in quale posizione. Se è
presente, interrompere la ricerca;
4) Ricerca del minimo del vettore;
5) Ricerca del massimo del vettore;
6) Media degli elementi del vettore;
7) Ribalta il contenuto del vettore;
0) Uscita.
Es. 9
Copiare elementi positivi
Caricare un vettore V1 di lunghezza N. Copiare gli elementi positivi presenti nel vettore V1 nel vettore
V2.
Stampare gli elementi di V2.
Visualizzare gli elementi di V2 in ordine inverso
Es. 10
Copiare 2 vettori in un terzo
Caricare due vettori V1 e V2, rispettivamente di lunghezza N ed M.
Caricare in un terzo vettore V3
(di lunghezza N+M) il primo vettore e il secondo vettore.
Es. 11
Operazioni numeri casuali - vettori
Generare in modo casuale un insieme di 12 valori interi compresi tra 1 e 100 e memorizzarli in un
vettore (A).
Visualizzare gli elementi di A.
Successivamente copiare tali elementi (incrementati
di 1) in un altro vettore (B) in ordine inverso.
Visualizzare gli elementi di B.
Es. 12
Stipendi di N dipendenti
Dati gli stipendi di N dipendenti, realizzare un programma che li memorizzi in un vettore e visualizzi:
posizione dello stipendio massimo
la media delgi stipendi
incrementare tutti gli stipendi del 10%
Es. 13
Presenze mensili in un albergo
In un array di 12 elementi sono memorizzate le presenza mensili in un albergo nel corso dell'anno.
Calcola:
la media di presenze nel corso dell'intero anno
il numero totale di presenze nei mesi estivi (6,7,8) che rappresentano il mese di luglio, agosto e
settembre
Il mese in cui è stato registrato il massimo di presenze
il mese in cui è registrato il numero minimo di presenze
la media delle presenze escludendo i mesi estivi
Es. 14
Aumentare in percentuale gli elementi di un vettore
Dato un vettore precaricato.
Chiedere all'utente una percentuale e aumentare i numeri del vettore di
quella percentuale.
Es. 15
Elemento massimo vettore di stringhe
Dato un vettore di stringhe, trovare l'elemento massimo
Es. 16
Vettore tutto uguale?
Caricare un vettore con N numeri interi.
Visualizzare un messaggio che indica che il vettore sia
formato
da tutti numeri uguali oppure no.
Svolgere l'esercizio prima utilizzando un ciclo for e poi un while cioè uscendo dal ciclo quando trovo
due elementi diversi.
Es. 17
Vettori paralleli età e nomi studenti
Caricare due vettori di lunghezza 10 contenenti uno l'età degli studenti e l'altro i nomi.
Visualizzare il nome dello studente con l'età massima
Es. 18
Vettori paralleli e operazioni basilari
Caricare due vettori di lunghezza N (costante) uno con i nomi di studenti e l'altro con le rispettive
età
Dopo aver caricato visualizzare i nomi degli studenti maggiorenni.
Successivamente visualizzare il nome dello studente con età max, quello con età min e l'età media tra
tutti gli studenti.
Es. 19
Media di positivi/negativi a seconda dei numeri nella sequenza
Dati in input una sequenza di N interi da inserire in un vettore di lunghezza M (costante).
Calcolare
la media solo dei numeri positivi.
Se nella sequenza è presente il numero 100, non bisogna
calcolare la media ma la somma dei numeri negativi presenti nell’intera sequenza.
Es.
Se la sequenza è -4 5 8 12 -12 0 la media è 8,333
Se la sequenza è -3 -5 -6 -10 0 la media è zero
Se la sequenza è -3 -4 -10 30 100 -5 0 devo visualizzare la somma Negativi -22
Es. 20
Unione alternata di due vettori in un terzo
Caricare due vettori di interi V1 e V2, rispettivamente di lunghezza N ed M.
Caricare in un terzo
vettore V3 (di lunghezza N+M) gli elementi del vettore V1 alternandoli con gli elementi di V2.
Cioè V3 deve contenere il primo elemento di V1, poi il primo elemento di V2, poi il secondo elemento di
V1, il seconde elemento di V2 e così via.
Stare attenti al fatto che le dimensioni dei due vettori
non
sono uguali, quindi uno potrebbe terminare gli elementi e l'altro no.
In tal caso ricopiare tutti gli
elementi rimanenti.
Es.
V1 contiene [1,3,10,30,20] V2 contiene [44,25,3]
V3 deve essere [1,44,3,25,10,3,30,20]
Es. 21
Visualizzare duplicati
Leggi N numeri e inseriscili in un vettore. Dopo il caricamento, visualizza solo i numeri che sono duplicati (presenti due volte).
Es. VET1[20, 3, 40, 5, 20, 7, 40]
visualizzare 20, 40
Es. 22
Shift a destra di un vettore
Esercizio in cui si carica un vettore di interi. Scrivere una funzione che richiede in ingresso un numero intero e lo inserisce nella prima posizione shiftando di una posizione tutti gli altri elementi
es.
se il vettore di partenza ho 10 elementi e ne ho messi 3
4 5 6
devo inserire il numero 7 nella prima posizione.
Il vettore risultante è:
7 4 5 6.
Gli elementi del vettore adesso sono 4
Es. 23
Inverti contenuto di un vettore senza vettori aggiuntivi
Caricare un vettore di interi di dimensione N. Invertire gli elementi del vettore senza utilizzare vettori
ulteriori.
Es. Se il vettore A=[3,5,1,7,8,5], dopo l’inversione A=[5,8,7,1,5,3].
Es. 24
Merge vettori ordinati
Scrivere una funzione C++ che, a partire da due vettori numerici ORDINATI (il primo di lunghezza costante L1 e il secondo di lunghezza costante L2, le lunghezze possono essere anche diverse) forniti come argomenti, ne costruisca un terzo avente dimensione pari alla somma delle due dimensioni e contenente tutti gli elementi dei due vettori in una sequenza
ordinata
(per esempio, da {1, 2, 4} e {1, 3, 9} si deve ottenere {1, 1, 2, 3, 4, 9}).
NON SERVE USARE ALGORITMI DI ORDINAMENTO, QUINDI NON VANNO USATI!
Es. 25
Dividi un vettore in due parti
Dato un vettore Vet1 di N interi, costruisci altri due vettori VET 2 e VET3 di dimensioni opportune, contenenti rispettivamente gli elementi di VET1 non maggiori e maggiori di un intero X fornito in ingresso dall'utente. Visualizzare Vet2 e Vet3.
Es.
N=7
VET1=[15, 2, 30, 20, 40, 30, 7]
il numero X=20
VET2=[15, 2, 20, 7]
VET3=[30, 40, 30]
Utilizzare una funzione copia che riceve in ingresso il vettore di partenza, il vettore in cui bisogna copiare gli elementi, il numero N, un intero vale 0 se devo copiare i maggiori di N, 1 se devo copiare quelli minori uguali a N. La funzione restituisce il numero di elemento copiati nel secondo vettore.
Utilizzare la funzione copia sia per creare VET1 che VET2.
utilizzare una sola versione per la versione stampa
Es. 26
Calcolo di un numero binario a partire da un numero decimale
Dato in input un numero intero N positivo, tramite uno switch case in cui si definisce la nuova base (2,8,16) salvare le cifre della trasformazione in un vettore di interi.
Visualizzare le sue cifre nella nuova base in ordine inverso.
Ricordarsi che le cifre sono i resti della divisione per la base e che il ciclo termina quando il quoziente è uguale a 0
Es. Il numero 13 è l'input, in binario è 1101.
Per quanto riguarda i numeri esadecimali prima di stampare i numeri 10,11,12,13,14,15 trasformali rispettivamente in A, B, C, D, E
Es. 27
Conversione da esadecimale, ottale o binario in decimale
Scrivi un programma che permetta la trasformazione di un numero esadecimale, ottale o binario in numero decimale.
Es. 28
Supermercato vettori paralleli
Hai in input due vettori paralleli contenenti i dati relativi ad un supermercato.
PRODOTTO è un vettore di stringhe che contiene i nomi dei prodotti
PREZZO è un vettore di float che contiene i prezzi del corrispondente prodotto
Si supponga che i due vettori siano stati già caricati. Svolgere i punti dell'esercizio seguente in sequenza ( a piacere svolgere i punti utilizzando un menu). I punti dell'esercizio sono i seguenti:
chiedere in ingresso una percentuale all'utente e incrementare tutti i prezzi della percentuale specificata
chiedere in ingresso un prodotto e visualizzare il suo prezzo e controllare che il prodotto non esista
Chiedere all'utente un prezzo e ricopiare in un terzo vettore (di nome PREZZOBIS) i prezzi che superano il prezzo ricevuto in ingresso. Stampare il vettore PREZZOBIS.
Es. 29
Libro vettori paralleli
Creare un vettore parallelo di libro e del relativo prezzo. Caricarlo
Dichiarare la lunghezza con una unghezza massima e chiedendo all'utente quanti libri vuole gestire.
chiedere in ingresso un libro e restituire il relativo prezzo se il libro non è presente visualizzzare un messaggio di errore.
Se il libri iniziano con la A va applicato uno scontro del 5%. Visualizzare i prezzi modificati visualizzare i valori modificati.
Es. 30
Intersezione di due vettori
Siano dati due vettori di interi inseriti da tastiera. La lunghezza dei due vettori è inserita dall’utente da tastiera. I due vettori possono avere lunghezze diverse, ma possono contenere al massimo 30 numeri.
Si scriva un programma in linguaggio C per generare un terzo vettore che contiene l’intersezione tra due vettori. Tale vettore deve contenere i numeri presenti in entrambi i vettori dati.
Ad esempio, si assuma che siano stati inseriti i due vettori:
1 6 15 20 25
2 20 18 6
Il programma deve visualizzare la sequenza 6 20.
Es. 31
Calcolo delle occorrenze
Scrivere un programma in linguaggio C che legge N numeri interi da tastiera e li memorizza
in un vettore.
Il numero N viene inserito dall’utente ed è minore di 20. Il programma
deve visualizzare, per ogni cifra contenuta nel vettore, il numero di occorrenze.
Ad esempio, si supponga N=7 e si consideri la sequenza di numeri 1 6 15 6 2 15 15.
Il
programma deve visualizzare:
numero 1 occorrenze 1
numero 2 occorrenze 1
numero 6 occorrenze 2
numero 15 occorrenze 3
Es. 32
Concorso di intelligenza
In un concorso di intelligenza, N giudici esprimono il loro giudizio su K candidati.
Il
giudizio è un valore numerico tra 0 e 5.
Si scriva un programma in linguaggio C per determinare il candidato più intelligente,
ed il giudice più severo.
Es. 33
Studente con età massima
Caricare di vettori di lunghezza 10 contenenti uno l'età degli studenti e l'altro i nomi.
Visualizzare il nome dello studente con l'età massima.
Es. 34
Esercizio sui numeri binari
Si ricevono come dati in ingresso due vaori interi positivi minori di 32. Memorizza in due array le rappresentazioni dei numeri in base 2.
Effettua poi la somma dei due numeri binari e inserisci il risultato sempre in binario in un terzo array. Visualizza il risultato.
Utilizza le funzioni opportune e commenta il codice
Es. 35
Trasforma numeri casuali in vettore
Generare casualmente 10 numeri (compresi tra 1 e 1000) memorizzali in un array, chiedere un valore di
input (X) all’utente che deve essere compreso tra 1 e 1000 (cicla finchè il valore di input non soddisfi la
condizione).
Scorrere gli elementi del vettore trasformandoli in 0 se è minore o uguale a X, in 1001 se è
maggiore a X. Successivamente visualizzare il vettore.
Esempio: se il vettore dopo la generazione dei numeri casuali è [200, 4,25, 400, 45,49] e il numero X = 100,
il vettore deve trasformarsi in : [1001, 0, 0, 1001, 0, 0]
Es. 36
Funzione derive | diff
Scrivere una funzione C++ con il seguente prototipo
void derive (float data[], int dim, float diff[]);
che a partire dal vettore data di dimensione dim costruisca il vettore diff.
In particolare, il vettore diff conterrà la differenza tra 2 elementi adiacenti di data:
diff[0] conterrà la differenza tra il secondo elemento di data ed il primo
diff[1] conterrà la differenza tra il terzo elemento di data ed il secondo
...
Scrivere un programma per testare la funzione sopra, caricando i valori del vettore da tastiera
Es. 37
Prodotto Scalare
Scrivere una funzione avente il seguente prototipo
float prodottoScalare (float a[], float b[], int dim)
dove dim rappresenta la dimensione sia di a che di b.
La funzione calcola e restituisce il prodotto scalare tra a e b, ovvero la somma dei prodotti tra gli elementi corrispondenti (il primo con il primo, il secondo con il secondo, ecc) dei due vettori.
Es. 38
Somma valori sopra una soglia minima
Scrivere un programma che, dopo aver richiesto all’utente il numero di valori interi che intende inserire,
carica i valori interi in un array chiedendoli in input all’utente,
lo stampa
chiede all’utente di inserire una soglia minima
calcola la somma di tutti i valori che superano tale soglia e la visualizza all’utente.
Prevedere una funzione per le operazioni 1, 2 e 4 elencante sopra.
Capitolo 3 - Funzioni
Es. 1
Funzioni basic che carica e stampa un vettore
Scrivere una funzione che riceve in ingresso un vettore e la sua lunghezza e lo carica con i valori specificati dall'utente
Scrivere un'altra funzione che riceve in ingresso un vettore, la sua lunghezza e visualizzi gli elementi del vettore
Nel main dichiarare un vettore di lunghezza N.
Chiamare prima la funzione che carica il vettore e successivamente quella che stampa il vettore
Es. 2
Funzione conta in intervallo e prodotto fra valori in intervallo
Dato un vettore di valori numerici, scrivere una
funzione C++ che conti quanti elementi del vettore
sono compresi tra un valore minimo e un valore
massimo e restituisca anche il loro prodotto
Scrivere
un programma C++ che, utilizzando la funzione
precedente e costruendo il vettore a partire
da valori acquisiti da tastiera, visualizzi il risultato
del conteggio e il prodotto dopo avere richiesto all’utente i valori minimo e massimo.
Es. 3
Vettoriale di ogni numero del vettore
Dichiarare un vettore di lunghezza costante. Caricarlo con numeri specificati dall'utente con una funzione.
Scrivere una fuznione che ricevuto in input un intero restituisce il suo fattoriale.
Scrivere una funzione che prende in input il vettore di partenza, A un altro vettore della stessa lunghezza B e mette nel vettore B ogni fattoriale dell'elemto corrispondente.
Esempio se nellla posizione 0 di A è presente 5, nella posizione 0 di B deve essere presente il suo fattoriale e così via.
Dopo avere calcolato tutti i fattoriali, chiamare la funzione stampa del vettore fattoriale
Es. 4
Funzioni sui vettori
Dato un vettore di interi, creare un programma che abbia oltre al caricamento e alla visualizzazione del vettore, le seguenti funzioni:
la funzione che restituisce la media degli elementi del vettore
la funzione che restituisce quanti elementi pari ci sono nel vettore
la funzione che calcola il massimo
la funzione che calcola il minimo
Le funzioni sono chiamate nel main e devono essere stampati i relativi valori.
Le funzioni devono essere definite alla fine del file e prima del main bisogna definire i prototipi
AGGIUNGERE due funzioni che calcolano il minimo e il massimo utilizzando i seguenti prototipi:
void minmax(int v[], int l, int &min, int &max)
int minmax1(int v[], int l, int &min) la funzione nel return restiutisce il max
Es. 5
Esercizio sui vettori e ricerca del minimo con le funzioni
scrivere una funzione carica che riceve in input un vettore e la sua lunghezza e carica gli elementi del vettore.
scrivere una funzione stampa che riceve in input un vettore e la sua lunghezza e visualizza gli elementi del vettore
Scrivere una funzione cerca_minimo che riceve in input un vettore, la sua lunghezza e restituisce l'elemento minimo
Nel main chiamare dichiarare un vettore, poi chiamare la funzione carica, poi la funzione stampa e poi visualizzare l'elemto minimo restituisco dalla funzione cerca minimo
Es. 6
Funzioni sui vettori e uso di menu [CON FILE]
Scrivere una funzione carica vettore che riceve in ingresso un vettore di interi e la sua dimensione (e lo carica con i dati di input).
Scrivere una funzione stampa vettore che riceve in ingresso un vettore di interi e la sua dimensione (e lo stampa a video), stampa su file che riceve in ingresso un vettore, la sua dimensione e il file in cui deve essere salvato.
Scrivere una funzione sposta che riceve in input un vettore di interi V1, la sua dimensione, un vettore di interi V2, la sua dimensione e sposta tutti gli elementi di V1 in V2 solo se sono multipli di 3.
La funzione restituisce il numero di elementi che vengono ricopiati in V2.
Nel main dichiarare due vettori VETT1 e VETT2 e creare un menu. Le funzioni previste nel menu sono:
carica il vettore Vett1 da file
carica VETT1 da console
stampare il vettore VETT1 su console
stampare il vettore VETT1 su file
chiamare la funzione copia che restituisce il numeri di elementi copiati
stampare il vettore VETT2 su console
stampare il vettore VETT2 su file
Naturalmente vanno aggiunti tutti i controlli che non è possibile effettuare la funzione stampa di VETT1 se non è prima stato caricato, che non è possibile stampare VETT2 se non è stato prima copiato e così via.
La stampa VETT1 e stampa VETT2 devono chiamare la stessa funzione, analogamente la stampa su file (quest'ultima deve avere cme parametro anche il nome del file dove memorizzare il vettore)
Es. 7
Calcolatrice con le funzioni
Chiedere all'utente l'operazione che vuole eseguire (+,-,*,:, potenza).
Utilizzare un switch e all'interno di ogni case chiedere i valori di input e chiamare la funzione corrispondente che esegue l'operazione specificata. Visualizzare il risultato (devono essere utilizzate 5 funzioni).
Es. 8
Calcolatrice completa
chiedere carattere per l'operazione, fare un switch.
Chiedere i dati di input nel switch e passarli come parametrei alla funzone corrispondente.
Il risultato dell'operazione viene stampato nel switch.
aggiungere l'operazione logaritmo e radice quadrata
Es. 9
Funzione primo carattere di una stringa
creare una funzione che stampa il primo carattere di una stringa
Definire una funzione che chiede in ingresso una stringa e visualizza il primo carattere della stringa
chiamare la funzione nel main.
Es. 10
Funzione unisci vettori
Creare tre vettori nel main. Il primo(vett1) con dimensione 10, il secondo (vett2) con dimensione 20 e il terzo con dimensione 10+20 (vett3)
Scrivere una funzione che carica un vettore, una funzione che unisce gli elementi di due vettori e una funzione che stampa il vettore
Nel main chiamare la funzione che carica utilizzando vett1, poi richiamare la stessa funzione per caricare vett2, poi la funzione che unisce vett1 e vett2 e una funzione che stampa vett3.
Es. 11
Funzioni indice età minima
Dichiarare nel main due vettori paralleli (uno che contiene le età e uno che contiene i corrispondenti nomi)
Scrivere una funzione che carica entrambi i vettori.
Scrivere una funzione che riceve in ingresso un vettore di interi che restituisce l'INDICE del vettore in cui si trova l'lemento minimo.
nel main chiamare la funzione che carica i vettori e successivamante chiamare la funzione che restuisce l'indice minimo.
Tale indice viene usato nel main per visualizzare il nome dello studente con l'età minima
Es. 12
Somma di stringhe e somma di numeri
Definire una funzione che chiede in ingresso due numeri e stampa la somma
Definire una funzione che chiede in ingresso due numeri e stampa la differenza
Definire un'altra funzione che chiede in ingresso due stringhe e ne fa la concatenzazione e la visualizza
chiamare le tre funzioni nel main
Es. 13
Funzioni numero primo
Scrivere una funzione che chiede in ingresso un numero (intero) positivo all'utente e lo restituisce. La funzione si chiama carica.
Scrivere un'altra funzione che calcola se il numero è primo e restituisce true se il numero è primo, false altrimenti.
Chiamare le due funzioni scritte nel main e visualizzare se il numero è primo oppure no.
Es. 14
Occorrenza lettera in parola
Data una parola p e una lettera x (entrambe da chiedere a video) dire quante volte la lettera x compare nella parola p.
Esempi:
parola___________lettera__________quante volte?
auguri___________u________________2
auguri___________a________________1
anastasia_________a________________4
pippo____________p________________3
pippo____________a________________0
Es. 15
Funzioni automobili con prezzo superiore
Si dichiarino tre vettori paralleli contenenti ciascuno la targa delle automobili, il modello e il relativo prezzo.
Scrivere una funzione che carichi i tre vettori.
Nel main chiamare la funzione carica e chiedere in ingresso un prezzo.
Scrivere e chiamare una funzione che restituisce la targa e il modello di tutte le automobili con prezzo superiore.
Es. se i dati in input sono:
Targa[0] = AZ123ER , Modello[0]= FIAT, Prezzo[0]=12.330
Targa [1] = WE876TR, Modello[1]= CITROEN, Prezzo[1]=13.100
Targa [2] = KJ789W, Modello[2]= FERRARI, Prezzo[2]=30.000
Targa [3] = GV999YE, Modello[3]= FIAT, Prezzo[3]=10.500
e come prezzo ha inserito 13.000
il risultato dopo l'esecuzione del problema deve essere il seguente:
targa:WE876TR, modello:CITROEN, prezzo:13.100
targa:KJ789W, modello:FERRARI, prezzo:30.000
Es. 16
Minimo, massimo e media per riferimento
scrivere una funzione che carica il vettore.
Scrivere una funzione che restituisce il minimo, il massimo e la media degli elementi del vettore utilizzando i parametri per riferimenti
Es. 17
Supermercato
Un supermercato ha bisogno di gestire il magazzino utilizzando un primo vettore per memorizzare i codici dei diversi prodotti ed un secondo vettore per memorizzare di ogni prodotto la quantità disponibile.
I due vettori sono paralleli, nel senso che relativamente relativamente a una data posizione troviamo il codice del prodotto nel vettore dei codici e la sua quantità nel vettore delle quantità.
Scrivi un programma che in base alla scelta dell’utente esegua le seguenti operazioni:
◗ carica i due vettori
◗ visualizza i prodotti (solo codici)
◗ trova la quantità di un dato prodotto
◗ trova i prodotti con giacenza inferiore ad un numero N inserito.
Utilizzare le funzioni (le operazioni di stampa si svolgono solo nel main).
Utilizzare un file separato per tutte le funzioni
Es. 18
Copia maggiori di num in V2, i minori in V3
Caricare N numeri in un vettore V1 di N elementi con una funzione.
Creare una nuova funzione che riceve in ingresso 3 vettori v1, v2 e v3 e un numero NUM.
La funzione copia i valori maggiori di NUM che si trovano in V1 nel vettore V2, e quelli minomri di num nel vettore V3.
Creare una funzione che stampi un vettore.
Nel main chiamare la funzione carica passando il parametro V1, poi chimare la funzione che sposta da V1 a V2 e V3 e la funzione che stampa (chiamandola 3 volte rispettivamente con V1, V2, V3).
Es. 19
Campionato di calcio
I dati relativi al campionato di calcio sono memorizzati in 3 vettori paralleli:
SQUADRE contengono il nome della squadra
SERIE conentogono ilvalore 'A' o 'B'
PUNTI contengono il punteggio ottenuto in campionato
Scrivere un programma che preveda la seguenti richieste:
a)stampare un tabulato contente l'elenco delle squadre di cacio di serie A nella forma
ELENCO SQUADRE SERIE A
SQUADRA PUNTI
...... ........
b)dato in inout il nome di una squadra stampare la serie in cui milita e i punti realizzati. Se la squadra non esiste stampare una segnalazione di errore.
c)costruire e stampare un altro vettore SQUADREB che contiene solo le squadre di serie B
d)cercare e stampare il nome della squadra campione di serie A
Es. 20
Funzione scambia (swap)
Scrivere una funzione che riceve in ingresso due numeri interi e ne scambia il valore.
Chiamare nel main la funzione dopo aver chiesto in input i valori.
Visualizzare i valori restituiti dalla funzione scambia
Es. 21
Erboristeria
I prodotti trattati in una erobristeria sono memorizzati in 5 vettori paralleli:
CODICE (del prodotto)
NOME (del prodotto)
CASA (casa produttrice)
TIPOLOGIA (tipo prodotto: medicinale, cosmetico, dietetico,..)
PREZZO (prezzo del prodotto)
Dopo aver caricato i vettori in una funzione, e scritto una funzione stampa che visualizza tutti gli elementi dei vettori paralleli, sviluppare le seguenti funzioni (si ricordi che tutte le funzioni non richiedono in input dati all'utente).
Tutto ciò che serve viene richiesto nel main.
restituisce il dati relativi al prodotto di prezzo massimo di una data classe fornita in input. La funzione restituisce false se la classe non esiste
restituisce i dati relativi ad un dato prodotto il cui codce è fornito in input (La funzione restituisce flase se il codice non esiste)
creazione di un nuovo vettore contenente i nomi dei prodotti di una determinata classe ricevuta in input. Il nuovo vettore creato deve essere stampato utilizzando una fuznione che effettua la funzione stampa
riceve in input una percentuale di aumento di prezzo e una classe di prodotti e aumenta il prezzo della percentuale specificata per i prodotti di quella classe. Stampare il vettore dopo la modifica
restituisce la media dei prodotti di una categoria ricevuta in input
stampa dei dati relativi ai prodotti con il prezzo dei prodotti compreso in una certa fascia, i cui estremi sono forniti in input nella forma:
CODICE NOME CASA CLASSE PREZZO
------ ..... ..... ....... .................
Es. 22
Studente e città di nascita
Creare due vettori paralleli contenenti rispettivamente il nome di uno studente e la città di nascita.
Scrivere una funzione che carica i vettori e una funzione che dato in ingresso oltre che i vettori e la lunghezza anche il nome di uno studente, restituisca il nome della città in cui è nato nel main. Chiamare queste funzioni nel main.
Es. 23
Minimo e massimo di una sequenza, senza vettori
I dati di N contribuenti sono caricati in 3 vettori paralleli di seguito elencati: CODICEFISCALE, CITTA_DI_RESIDENZA, REDDITO.
N deve essere specificato dall'utente.
Dopo aver caricato i vettori in una funzione, e scritto una funzione stampa che visualizza tutti gli elementi dei vettori paralleli, sviluppare le seguenti funzioni (si ricordi che tutte le funzioni non richiedono in input dati all'utente. Tutto ciò che serve viene richiesto nel main):
1. restituire il reddito minimo tra i contribuenti che appartengono ad una determinata città (passata come parametro alla funzione)
2. stampa dei dati relativi ai contribuenti con il reddito compreso in una certa fascia, i cui estremi sono forniti in input . La forma di stampa è la seguente:
CODICEFISCALE CITTA_DI_RESIDENZA REDDITO
.............. ................... ................
3. ricopiare i codici fiscali dei contribuenti di una città ricevuta come parametro in un vettore di nome CODFISC_CITTA e stampare il vettore CODFISC_CITTA utilizzando una funzione stampa_codici
4. incrementare i redditi del 10% di tutti i contribuenti che hanno un codice fiscale che inizia con FA
5. copiare il vettore dei redditi in un vettore di redditi ordinato in modo crescente. Stampare il vettore ottenuto utilizzando una funzione stampa_redditi
Tutte le funzioni devono essere chiamate nel main e inserite in un menu dentro ad un ciclo (prevedendo anche la possibilità di uscire). Il caricamento deve essere previsto anche fuori dal ciclo.
Es. 24
Funzioni stipendi N dipendenti
Dati gli stipendi di N dipendenti (con N chiesto in ingresso all'utente, il che non vuol dire che il vettore è dinamico), realizzare un programma che carichi il vettore, visualizzi la posizione dello stipendio massimo, incrementi lo stipendio di tutti i dipendenti del 10% e visualizzi il vettore degli stipendi dopo che è stato modificato
Es. 25
Funghi in città
Creare due vettori paralleli contenenti rispettivamente il nome di un fungo e la città in cui è stato trovato.
Scrivere una funzione che carica i vettori e una funzione che dato in ingresso oltre che i vettori e la lunghezza anche il nome di un fungo, restituisca il nome della città in cui è presente. Chiamare queste funzioni nel main.
Es. 26
Azienda agricola
Creare 4 vettori parallei che contengono i dati di un'aziende agricole.. Il primo vettore NOME contiene il nome dell'azienda, il secondo (DIMENSIONE) contiene i metri quadri del suo campo, il terzo (NOME_PROD) contiene il nome del prodotto e e il quarto (QUANTITA) la produzione giornaliera in quintali.
Esempio il primo elemento di NOME contiene MYAzienda SPA, il primo elemento del vettore DIMENSIONE 200, il primo elemento di NOME_PROD contiene pomodori, il primo elemento di QUANTITA contiene il valore 240.
Le dimensioni dei vettori sono dichiarate con un lunghezza massima e sarà l'utente a definire la lunghezza necessaria.
Si ricordi che le funzioni non chiedono dati di input all'utente ma li ricevono come parametri. Il termine visulizza indica che il cout viene eseguito nella funzione e che restituisce indica che la funzione ha un valore di ritorno.
Nel main predisporre un menu che cicla permettendo di eseguire una qualqune delle funzionalità descritte in basso.
il caricamento del vettore deve essere eseguito prima di inziare il ciclo e deve essere possibile rieseguirlo durante il ciclo.
I valori restituiti dalle funzioni si visualizzno nel main.
MAX_PROD_GIORN è una funzione che restituisce il nome dell'azienda con la massima produzione giornaliera
scrivere una funzione stampa che allinei i dati in modo leggibile.
stampa che riceve in ingresso un azienda agricola e visualizza tutti i prodotti e le relative quantità stampate
scrivere una funzione AVG che restituisce la produzione media dei due prodotti ricevuti in ingresso (ad esempio pomodori ed arance). Vanno controllati e gestiti tutti i casi in cui i valori specificati come parametri non siano presenti nei vettori
Più difficile:
MAX_PROD_GIORN_PRODOTTO è una funzione che restituisce il nome del prodotto che ha come somma max tra le produzioni giornaliere (es. si calcola la somma della quantità di arance prodotte in tutte le aziende, la somma delle pere, dei pomodori e così via e si calcoli il podotto con la somma massima)
Es. 27
Numeri primi
Scrivere una funzione (verifica_primo) che riceve in ingresso un numero intero e restituisce un valore booleano. Il valore restituito è true se il numero è primo, è false se il numero non è primo.
Scrivere un main in cui si chiede in input un intero all'utente , si chiama la funzione verifica_primo e si visualizza il messaggio " il numero x è primo" oppure "il numero x non è primo".
Estendere il progetto del punto precedente (senza cancellare nulla) e nel main dichiarare un vettore di interi di dimensione massima fissata.
Chiedere all'utente la dimensione reale del vettore e caricare il vettore con i numeri forniti dall'utente (il caricamento deve essere effettuato all'interno di una funzione).
Richiamare la funzione verifica_primo per ogni elemento del vettore e visualizzare solo i numeri primi
Es. 28
Gioco dell'oca
Il gioco dell'oca è un tipico gioco per bambini che include un tabellone con un percorso a caselle.
I giocatori lanciano due dadi a turno e, partendo dalla casella 1, spostano un proprio contrassegno in avanti di tante caselle quanti sono i punti corrispondenti alla somma dei dadi ottenuta: vince il giocatore che raggiunge per primo la casella finale.
Si consideri un particolare gioco dell'oca in cui valgono le seguenti regole:
il percorso è costituito da 100 caselle;
in alcune caselle è indicato un numero positivo: se un giocatore arriva in una di queste caselle, il contrassegno viene immediatamente spostato in avanti di tante caselle pari al numero indicato (ad esempio, se un giocatore arriva alla casella 90 e in essa è indicato il numero 3, il contrassegno viene automaticamente spostato alla casella 93);
in alcune caselle è indicato un numero negativo: se un giocatore arriva ad una di queste caselle, il contrassegno viene immediatamente spostato indietro di tante caselle pari al numero indicato (ad esempio, se un giocatore arriva alla casella 90 e in essa è indicato il numero -3, il contrassegno viene automaticamente spostato alla casella 87);
anche in seguito ad uno spostamento (vedi punti precedenti) si può arrivare ad una casella con un numero indicato: in questo caso il contrassegno viene spostato nuovamente e così via fino a quando si arriva ad una casella senza indicazione di spostamento;
per vincere, un giocatore deve arrivare esattamente alla casella 100: se il punteggio è maggiore di 100, si deve tornare indietro di tante caselle quanti sono i punti in eccesso (ad esempio, se un giocatore parte dalla casella 95 e totalizza 7, il suo contrassegno termina nella casella 98 - sempre che in questa casella non sia indicato uno spostamento).
Scrivere un programma C++ che simuli il gioco dell'oca tra due giocatori.
Ipotesi di Soluzione:
Prima di tutto, il programma acquisisce da tastiera per ogni casella il relativo spostamento (0 indica nessun spostamento, un numero positivo indica uno spostamento in avanti, un numero negativo indica uno spostamento all'indietro). Il programma deve verificare che lo spostamento non porti al di fuori delle caselle del percorso, altrimenti deve ripeterne l'acquisizione. Gli spostamenti devono essere memorizzati in un opportuno vettore.
Partendo dal giocatore 1, il programma chiede poi a turno ai giocatori il numero ottenuto dal lancio dei dadi, ripetendo l'acquisizione se il numero non è compreso tra 2 e 12: dopo ogni acquisizione, calcola e stampa la casella di arrivo finale.
Il programma termina quando uno dei due giocatori arriva alla casella 100, stampando il vincitore (giocatore 1 o giocatore 2).
Es. 29
cifrare e decifrare un testo con l'algoritmo di Cesare
Scrivere due funzioni: una che cifra e un'altra che decifra il testo.
Le funzioni hanno come parametri di ingresso la chiave, il testo da cifrare (o decifrare) e restituiscono il testo cifrato o decifrato.
Nel main chiedere all'utente il testo e la chiave e stampare il risultato corrispondente
Es. 30
Precipitazioni in provincia di Pisa
Vogliamo gestire i valori, espressi in millimetri, delle precipitazioni nei vari mesi dell’anno nella zona della provincia di Pisa. Il programma deve prevedere nel main un menu con le seguenti operazioni
● inserimento
● media precipitazioni
● mese più piovoso
● mese meno piovoso
● mesi oltre soglia
● media precipitazioni periodo
● uscita dal menu
Prevedere le seguenti funzioni:
1. void inserisciPrecipitazioni (int v[ ], int dim)
per inserire i valori mensili nel vettore chiedendoli all’utente in input
2. int valoreMedio (int v[ ], int dim)
per calcolare il valore medio delle precipitazioni
3. int meseMax (int v[ ], int dim)
per cercare il mese con il valore massimo di precipitazioni
4. int meseMin (int v[ ], int dim)
per cercare il mese con il valore minimo di precipitazioni
5. void mesiOltreValore (int v[ ], int dim, int soglia)
per visualizzare i mesi i cui valori sono superiori ad un valore dato, ovvero soglia
6. int mediaPeriodo(int v[ ], int dim, int inizio, int fine)
per calcolare la media delle precipitazioni dei mesi compresi tra il mese “inizio” ed il mese “fine”
(nota: “fine” deve essere maggiore o uguale a “inizio” ed entrambi devono essere mesi validi, in caso contrario la funzione restituisce -1)
Es. 31
contaIntervallo
Dato un vettore di valori interi, scrivere una funzione C++ contaIntervallo che conti il numero di elementi compresi tra un valore minimo e uno massimo forniti come argomenti alla funzione stessa.
Scrivere un programma che carichi il vettore chiedendo i valori da tastiera, chieda all’utente il valore minimo e massimo e utilizzi la funzione contaIntervallo per visualizzare poi il risultato del conteggio.
Capitolo 4 - Array bidimensionali (Matrici)
Es. 1
Diagonale principale e secondaria
svolgere un esercizio che carica una matrice quadrata (4x4) di interi e visualizza prima la diagonale principale e poi quella secondaria.
Es. 2
Triangolo superiore ed inferiore di una matrice
dichiarare una matrice NxN quadrata precaricata.
Visualizzare il triangolo superiore.
Utilizzare i cicli in modo da effetture un numero di operazioni minori di NxN
Visualizzare il triangolo inferiore. In questo caso per dare una forma che ricordi il triangolo inferiore utilizzare i cicli completi
Es. 3
Funzioni con matrici
scrivere una funzione che carica una matrice NxM con i valori specificati dall'utente.
scrivere una funzione che visualizza i valori della matrice
scrivere una funzione che visualizza il triangolo superiore
scrivere una funzione che visualizza il triangolo inferiore
Nel main dichiarare la matrice e chiamare le varie funzioni eseguite.
Es. 4
Matrice dominante
Verificare se una matrice quadrata di interi (NxN) è diagonalmente dominante
(cioè se la somma dei valori assoluti degli elementi su ciascuna riga, escluso l'elemento sulla diagonale principale, è minore del valore assoluto dell'elemento corrispondente sulla diagonale principale).
Questa condizione deve valere per ogni riga.
Per il valore assoluto utilizzare la funzione abs della libreria math.h .
Es. 5
Matrice ordinata
Una matrice si definisce «ordinata per righe» se
gli elementi di ogni riga sono disposti in ordine
crescente da sinistra verso destra e tutti gli elementi
di ogni riga, esclusa la prima, sono maggiori
di ciascuno degli elementi della riga precedente.
Scrivere una funzione C/C++ che restituisca
true, se una matrice fornita come argomento è
ordinata per righe, false altrimenti.
Es. 6
Matrice simmetrica
Scrivere una funzione C/C++ che determini, producendo
come risultato true o false, se una matrice
quadrata di N × N elementi è simmetrica,
cioè se gli elementi in posizione simmetrica rispetto
alla diagonale principale sono tutti uguali.
Precaricare la matrice e chiamare la funzione per verificare se è simmetrica
Es. 7
Prodotto tra matrici quadrate
Il prodotto tra due matrici A e B, quadrate e aventi la stessa dimensione, è una matrice quadrata C della stessa dimensione: l’elemento di coordinate
(i, j) della matrice C è la somma dei prodotti degli elementi corrispondenti della i-esima riga di A e della j-esima colonna di B:
C(i, j) = A(i, 0) * B(0, j) + A(i, 1) * B(1, j) + …
Scrivere una funzione C++ che determini il prodotto tra due matrici quadrate.
Es. 8
Voti studenti
Si crei un vettore di stringhe di nome materie ed un vettore di stringhe che contiene i nomi degli studenti.
Si crei inoltre una matrice di float che contiene i voti che ogni studente ha nella corrispondente materia.
la matrice e i vettori devono essere interpretati secondo l'esempio.
La matrice ha dimensioni RIGHE x COLONNE
il vettore delle materie ha dimensione pari alle COLONNE. Il vettore dei nomi studenti ha dimensione pari a RIGHE
Creare un menu con switch case in cui l'utente può scegliere le seguenti operazioni:
carica: caricare la matrice e i corrispondenti vettori (realizzarlo in una funzione)
voto medio: creare una funzione che dato il nome di uno studente, cercare la sua posizione nel vettore degli studenti e calcolare la media dei suoi voti. La funzione restituisce 0 se lo studente non è stato trovato, la media altrimenti. Nel main bisogna stampare "lo studente Mario ha la media pari a xx,xx" oppure "lo studente Mario non è presente"
Chiedere in input una materia. Chiamare una funzione che restituisca il vettori con gli studenti che hanno un voto pari a quello massimo in quella materia e un vettore di nomi di studenti che hanno il voto minimo in quella materia. Es. se il voto massimo in italiano è 9 e il voto minimo in italiano è 3 devo restituire due vettori, uno che contiene i nomi che hanno voto 9 e uno che contiene i nomi degli studenti con voto 3.
Il prototipo della funzione è il seguente:
bool min_max(string MaterieVett[ ], string colonn, Float VOTI[ ][c],int righe, string studenti[], string materia_min_max, string studentiMax[], int & max, string studentiMin[], int & min ,int &LunghezzaVettMax, int & LunghezzaVettMin);
La funzione restituisce false se non esiste la materia.
Nel vettore studentiMin[] ci sono i nomi degli studeti che hanno il voto minimo (la lunghezza del vettore è LunghezzaVettMin. Analogamente per il massimo).
Quando si rierca la materia nel vettore delle materie non bast utilizzare una uguaglianza in quanto Italiano e italiano devono essere considerate uguali, quindi si usa una funzione che riceve in ingresso due stringhe, applica toUpper ad ogni carattere e restituisce true o false in base al fatto che le stringhe siano uguali.
Nel main bisogna visualizzare per ogni elementi dei vettori min e max
lo studente Mario ha il voto massimo (7) in italiano
lo studente Giuseppe ha il voto minimo(5) in italiano
Media_migliore: visualizzare il nome dello studente che ha la media migliore (la funzione media_migliore restituisce l’indice dello studente che ha la media più alta e la media stessa. Nel main bisogna visualizzare: lo studente Mario ha la media 8
Visualizza promossi. chiamare una funzione che inserisce all'interno di un vettore i nomi degli studenti che hanno tutte sufficienze. La funzione restituisce il numero di studenti presenti nel vettore. Nel main chiamare una funzione stampa vettore a cui si passa come parametro un vettore di stringhe e la lunghezza del vettore
Visualizza rimandati. Chiama una funzione che inserisce all'interno di un vettore i nomi degli studenti che hanno da 1 a 3 insufficienze. La funzione restituisce ilnumero di elementi presenti nel vettore. Nel main chiamare una funzione stampa vettore a cui si passa come parametro un vettore di stringhe e la lunghezza del vettore
Il progetto deve essere suddiviso in più file (il main in un file e le funzioni in un altro)
Inserire i controlli per cui non possono essere eseguite le funzionalità di voto medio se non è stata effettuata l'operazione di caricamento
Prevedere tutti i controlli sui dati di input (funzione che controlla che ogni stringa relativa al nome dello studente o al nome delle materie sia formata da caratteri alfabetici)
AGGIUNGERE I CONTROLLI CHE IL NOME E IL COGNOME DELLO STUDENTE SIANO CON LA LETTERA MAIUSCOLA E TUTTI I CONTROLLI SUI NUMERI (VALORE INSERITO NEL SWITCH E NEI VOTI)
Es. 9
Funzione di cifratura e decifratura alle matrici
Creare una funzione che riceve in ingresso un carattere, una chiave e restituisce una chiave cifrata secondo l'algoritmo di Cesare.
Analogamente per una funzione di decifratura.
Dichiarare una matrice di caratteri precaricata con un messaggio e ad ogni elemento della matrice applicare la funzione cifratura e inserirlo in una matrice parallela.
Effettuare l'operazione inversa alla matrice cifrata.
Chiamare una funzione stampa_matrice prima alla matrice originale, a quella cifrata e a quella decifrata
Es. 10
Prodotto righe minore del successivo
Leggere in input due interi positivi n e m e gli elementi di una matrice A di ordine n*m di numeri interi.
Verificare se il prodotto di ogni riga è minore o uguale a quello della riga successiva.
Stampare “sì” (una sola volta) se la condizione è verificata, stampare “no” (una sola volta) altrimenti.
Visualizzare l'elemento minimo, massimo e medio della matrice.
Utilizzare le funzioni opportune e commentare il codice.
Es. 11
Funzioni di somma riga, colonna e media di tutti i valori
Scrivere un programma per la gestione di alcuni valori interi in una matrice. Il programma deve consentire di:
Inserire i valori nella matrice
Stampare a video la matrice
Calcolare i totali per ogni riga
Calcolare i totali per ogni colonna
Calcolare la media di tutti i valori
Prevedere una opportuna funzione per ognuna delle operazioni elencate sopra. Il programma deve iniziare visualizzando all’utente un menu con tutte le operazioni possibili.
Es. 12
Matrice quadrata da due vettori
Scrivere una funzione C++ che a partire da due vettori di valori numerici interi della stessa dimensione, costruisca una matrice quadrata in cui ogni singolo elemento di coordinate (r, c) sia ottenuto moltiplicando l’r-esimo elemento del primo vettore per il c-esimo elemento del secondo vettore.
Per esempio, dati i vettori
[1, 2, 3] e [5, 4, 6]
La matrice risultato dovrà essere
1*5 1*4 1*6
2*5 2*4 2*6
3*5 3*4 3*6
Scrivere un programma C++ che, dopo aver richiesto all’utente l’inserimento dei due vettori, visualizzi gli elementi della matrice ottenuta come risultato dell’applicazione della funzione precedente.
Pertanto, definire e utilizzare le funzioni per:
Caricare un vettore
Stampare una matrice
Ottenere la matrice quadrata a partire dai due vettori
Es. 13
Minimi e massimi di riga
Scrivere una funzione C++ che, a partire da una matrice numerica di r x c elementi, costruisca due vettori di r elementi ciascuno contenenti rispettivamente i valori minimi e massimi di ogni riga della matrice.
Scrivere un programma che, dopo aver richiesto all’utente l’inserimento degli elementi della matrice, costruisca i due vettori applicando la funzione sopra, stampando alla fine i due vettori ottenuti.
Esempio:
2 99 -2 0
5 -8 8 15
6 3 55 4
Vettore minimi di riga = [-2, -8, 3]
Vettore massimi di riga = [99, 15, 55]
Es. 14
Minimi e massimi di colonna
Scrivere una funzione C++ che, a partire da una matrice numerica di r x c elementi, costruisca due vettori di c elementi ciascuno contenenti rispettivamente i valori minimi e massimi di ogni colonna della matrice.
Scrivere un programma che, dopo aver richiesto all’utente l’inserimento degli elementi della matrice, costruisca i due vettori applicando la funzione sopra, stampando alla fine i due vettori ottenuti.
Esempio:
2 99 -2 0
5 -8 8 15
6 3 55 4
Vettore minimi di colonna = [ 2, -8, -2, 0]
Vettore massimi di colonna = [6, 99, 55, 15]
Es. 15
Vettori somma negativi (riga) e positivi (colonna) da matrice
Scrivere un programma che consenta di
caricare una matrice r *c di interi
stampare la matrice
stampare solo le righe dispari
costruire un vettore contenente per ogni riga la somma dei numeri negativi
costruire un vettore contenente per ogni colonna la somma dei numeri positivi
Prevedere una funzione per ognuna delle cinque operazioni elencante sopra.
Capitolo 5 - Struct
Es. 1
Squadra di calcio
Realizza un programma che, partendo da un array che contiene i dati personali dei giocatori di una squadra di calcio, permetta di calcolare il totale dei goal segnati specificando:
--- i goal segnati dagli attaccanti (numero di maglia da 7 a 11)
--- i goal segnati dai centrocampisti(numero di maglia da 4 a 6)
--- i goal segnati dai difensori (numero di maglia da 2 a 3) (subiti nel caso del portiere con numero 1)
Es. 2
Piante
Caricare in ingresso N piante aromatiche di cui bisogna memorizzare la specie, la città in cui è stato trovata per la prima volta e la sua dimensione media (float).
Richiedere in ingresso la specie di una pianta, visualizzare la sua dimensione media e la città in cui è stato trovata.
(Visualizzare un msg di errore nel caso in cui la pianta non esista, se la pianta esiste fermare il ciclo non appena viene trovata)
++++++++++++++++
Facendo riferimento alla struct dell'esercizio sopra e avendo dichiarato un vettore di tipo piante di lunghezza costante, realizzare un ciclo con un menu, in cui l'utente può selezionare le seguenti operazioni:
0) esci dal ciclo
1) aggiungi pianta
2) ricerca la pianta specificata dall'utente (la ricerca si ferma se si trova la pianta)
3) visualizza le piante presenti
Es. 3
Vettore di studenti
Scrivere un programma C++ che, a partire da un vettore di strutture di studenti di dimensione N (definito dall'utente), (struttura di tipo studente che contiene nome ed età) e caricato dall'utente, copi in un secondo vettore i soli elementi del primo vettore compresi tra l'età minima e l'età massima; Visualizzare gli elementi del secondo vettore.
Es. 4
Autosalone con struttura annidata
Definire la struttura dati Automobile che descrive un’automobile in base a marca, cilindrata, anno di immatricolazione e acquirente (l’acquirente è caratterizzato dai soli nome e cognome). Acquirente è un'altra struttura.
Bisogna quindi dichiarare una struttura annidata.
Scrivere una funzione C++ Carica che ricevuto in ingresso un vettore di automobili, la sua lunghezza, permette il caricamento da tastiera.
Scrivere una funzione (crea_vett_acquirenti) che ricevuto in ingresso un vettore di automobili, la sua lunghezza e una cilindrata, restituisca in un vettore di acquirenti il nome e il cognome degli acquirenti che hanno auto con quella cilindrata
Nel main dopo aver dichiarato il vettore di automobili, caricarlo con l'opportuna funzione
Chiedere all'utente una cilindrata, chiamare la funzione crea_vet_acquirenti e visualizzare nel main il nome e il cognome degli acquirenti che hanno tale cilindrata.
esempio di definizione delle strutture:
struct Acquirente {
string nome;
string cognome;
};
struct Automobile {
string marca;
int cilindrata;
int anno;
Acquirente x;
};
esempio di dichiarazione di un vettore di Automobili:
Automobile V[10];
stampa dell'acquirente della seconda automobile presente nel vettore:
cout<<(V[1].x).nome;
Es. 5
Fantacalcio (uso annidato di struct)
Definire la struttura dati Squadra che descrive una squadra di calcio ideale con il relativo allenatore.
Una squadra è identificata da nome, colore della maglia, punteggio corrente e allenatore.
L’allenatore
è una persona caratterizzata da nome e cognome più il numero dei titoli vinti (un numero intero).
Scrivere un programma C++ che, dichiarata una array Fantacalcio di tipo Squadra (per comodità se ne fissi la dimensione a 10 elementi), consenta di inserire da tastiera i dati delle squadre e dei relativi allenatori e di visualizzare il solo
cognome degli allenatori di squadre che hanno più di 30 punti in classifica, oltre al numero totale di allenatori che hanno vinto almeno un titolo.
Suddividere il programma in più file.
Utilizzare una funzione che carica il vettore, un'altra funzione che visualizza il cognome degli allenatori che hanno più di 30 punti in classifica, e un'altra funzione che restituisce il numero totale degli allenatori che hanno vinto almeno un titolo.
Nel main chiamare la funzione che carica il vettore, quella che visualizza gli allenatori e visualizzare in numero degli allenatori restituito dalla terza funzione.
Es. 6
gestione Stack (Pila e coda)
Il seguente programma utilizza il vettore per realizzare una struttura dati Pila e Coda:
####parte n. 1 Pila####
Creare un programma che gestisce una struttura dati Pila.
La Pila ha una dimensione massima prefissata (si supponga N). Le operazioni che si possono effettuare sulla pila sono inserite in un menu (possono essere eseguite più volte) e sono le seguenti:
Svuota_Pila: rimuove tutti gli elementi presenti nella pila
Push: inserisce l'elemento ricevuto come parametro in testa alla pila (se non ho superato le dimensioni massime, altrimenti restituisce un errore)
Pop: rimuove il primo elemento in testa alla lista (se esiste, altrimenti restituisce un errore)
Stampa Pila: visualizza tutti gli elementi presenti nella pila
####parte n. 2 Coda####
Estendere il programma precedente inserendo la gestione della struttura dati Coda.
La Coda ha una dimensione massima prefissata (si supponga M). Le operazioni che si possono effettuare sulla coda sono inserite nel menu (possono essere eseguite più volte) e sono le seguenti:
Svuota_Coda: rimuove tutti gli elementi presenti nella Coda
Push: inserisce l'elemento ricevuto come parametro in fondo alla coda (se non ho superato le dimensioni massime, altrimenti restituisce un errore)
Pop: rimuove il primo elemento in testa alla coda (se esiste, altrimenti restituisce un errore) e scorre tutti gli elementi successivi in modo da non lasciare posizioni vuote
Stampa Coda: visualizza tutti gli elementi presenti nella Coda
Le due strutture dati devono essere inserite all'interno di un unico progetto e i file e le funzioni devono essere organizzati in modo opportuno. Tutto deve essere debitamente commentato
Es. 7
Collezione di Film
Si vuole gestire una collezione di Film, per ognuno dei quali si vuole memorizzare: il titolo (string), la durata (int) e il prezzo (float).
Questi dati sono memorizzati in 3 vettori. Chiedere all'utente il numero dei film che vuole inserire.
Il programma preveda il seguente menù (l'utente può rieseguire più volte se stesse funzioni):
1) Caricamento
2) Visualizzazione
3) Ricerca
4) Costo max e min
5) Copia film che superano un certo prezzo
6) (opzionale) Nuovo_inserimento
7) Fine programma
Per ogni voce di menù (eccetto l’ultima) prevedere una chiamata ad una funzione.
Si ricordi che tutte le funzioni non richiedono in input dati all'utente.
Tutto ciò che serve viene richiesto nel main e viene passato in input alle funzioni (tranne che per la funzione carica).
Le funzioni non stampano nulla al proprio interno tranne che per la funzione stampa o ove esplicitamente indicato.
Spiegazione delle voci di menù:
1) [funzione: carica] Caricamento manuale dei film da tastiera (titolo, durata e prezzo) (opzionale controllare che il titolo non esista già, in tal caso non inserirlo)
2) [funzione: stampa] Visualizzazione stile elenco di tutti i film (titolo, durata e prezzo)
3) [funzione: cerca] Riceve in ingresso il titolo del film da cercare. Tale titolo viene richiesto all'utente nel main e :
◦◦◦◦◦◦ se non esiste scrivere (nel main) un messaggio …
◦◦◦◦◦◦ se esiste scrivere (nel main) il relativo prezzo
4) [funzione: minmax] Visualizzazione nel main dei dati del film (titolo, durata, prezzo) che costa di più e quello che costa di meno (si suppone che tutti i film abbiano costi diversi)
5) [funzione: copia_film] La funzione copia in altri tre vettori i dati dei film che superano il prezzo ricevuto in ingresso come parametro. Se nessun film supera il prezzo specificato la funzione visualizza un messaggio di errore, altrimenti dove avere effettuato la copia chiama al suo interno la funzione stampa già definita in precedenza.
6) [funzione opzionale Nuovo_inserimento] Inserimento di un nuovo film(con tutti i suoi dati) in una posizione x e spostamento degli altri nelle posizioni successive. Si ipotizzi che il numero di elementi del vettore utilizzati dall'utente sia sufficiente per effettuare questa operazione.
Es. 8
Matrice di studenti
Caricare una matrice di studenti (struttura con nome e età) di dimensione righe per colonne.
Ogni riga contiene gli studenti di una classe.
Scrivere una funzione che inserisce in un vettore l'età media della classe e le visualizzi (utilizzando la funzione stampa vettore)
Scrivere una funzione che inserisce in un altro vettore l'età massima degli studenti tra gli studenti di una classe e le visualizzi (utilizzando la funzione stampa vettore)
Es. 9
Club Filatelico
I dati degli N soci di un club filatelico sono memorizzati in un vettore di dimensione N (costante). Per ogni socio i dati sono:
Nome,
Cognome,
Anno di edizione,
numero francobolli
Scrivere un programma che, dopo aver caricato i dati dei soci (funzione carica), permette di:
calcolare (funzione calcola) e stampare la quantità media di francobolli di un anno di edizione fornito in input
stampare l'anno di edizione e il numero di francobolli (funzione cerca_anno_e_numero) posseduti da un socio di cui è fornito in input il nome e il cognome (segnalare se non esiste)
Ricopiare (funzione copia_collezionisti) in un vettore (e poi visualizzarli con una funzione stampa) solo i nomi
dei collezionisti che hanno un numero di francobolli maggiori di 1000
Definire un menu e richiedere in input i dati necessari nel main e visualizzare gli output sempre nel main(nelle funzioni non richiedere in input dati e non stamparli se non strettamente necessari).
Il progetto deve essere formato da 3 file (main, le funzioni e i prototipi).
Al termine dello svolgimento delle esercizio effettuare lo zip dell'intera cartella che deve avere il Cognome dello studente.
Es. 10
Rubrica telefonica
Si realizzi un programma in linguaggio C++ in grado di gestire una rubrica di nomi e numeri
telefonici.
La rubrica deve contenere fino a 100 voci diverse. Ciascuna voce è composta da
un nome (max 40 caratteri) e da un numero di telefono (max 20 caratteri).
Il programma deve fornire all’utente un menù di scelta, con le seguenti voci:
1) Aggiungi nuova voce in rubrica (controllare che il numero telefonico non esista già, in tal caso non è possibile inserire l'elemento)
2) Ricerca esatta per nome
4) Stampa completa rubrica
0) Esci dal programma
Una volta che l’utente ha scelto l’operazione desiderata (1-3), il programma acquisirà i
dati necessari dall’utente ed eseguirà il comando.
Nota: nella rubrica non possono esistere
due voci con lo stesso numero.
Es. 11
Campionato di calcio
Si realizzi un programma in C++ in grado di gestire le squadre di calcio del campionato 2015/2016.
Ogni squadra contiene le seguenti informazioni:
nome
colore maglia
punteggio in classifica
nome allenatore.
Il numero delle squadre del campionato non è stabilito a priori, ma viene fissato dall'utente in fase di esecuzione.
Organizzare il programma utilizzando le funzioni e definire i parametri secondo quanto richiesto dalle funzionalità successive.
Il programma deve fornire all’utente un menù di scelta (che può essere richiamato più volte), con le seguenti voci:
1) Caricare le squadre con le relative informazioni (utilizzare una funzione)
2) Visualizzare il nome della squadra che è in rispettivamente in testa e in coda alla classifica (la ricerca dei nomi delle squadre deve essere effettuata in una funzione e le visualizzazioni all'interno del main)
3) Visualizzare il nome dell'allenatore della squadra che ha un punteggio di esattamente 30 punti. (Scrivere una funzione che effettui la ricerca e che restituisca il nome dell'allenatore. Nel caso in cui non esiste nessuna squadra con quel punteggio, nel main bisogna visualizzare un messaggio che indica che non è stato trovato alcuna squadra)
4) esci
Una volta che l’utente ha scelto l’operazione desiderata (1-4), il programma acquisirà i
dati necessari dall’utente ed eseguirà il comando.
E' richiesto che il progetto venga strutturato in più file.
Es. 12
Autosalone
Si realizzi un programma in C++ in grado di gestire le automobili presenti in un autosalone.
Ogni automobile contiene le seguenti informazioni:
Marca, cilindrata, anno di immatricolazione, nome acquirente
Il numero delle automobili non è stabilito a priori, ma viene fissato dall'utente in fase di esecuzione.
Organizzare il programma utilizzando le funzioni e definire i parametri secondo quanto richiesto dalle funzionalità successive.
Il programma deve fornire all’utente un menù di scelta (che può essere richiamato più volte), con le seguenti voci:
1) caricare i dati di tutte le auto presenti nell'autosalone
2) visualizzare la marca dell'auto con cilindrata minima (usare le funzioni ma le visualizzazioni devono essere fatte nel main)
3) visualizzare il numero totale di auto che sono state immatricolate nell'anno specificato dall'utente (se l'anno non esiste visualizzare un errore nel main)
4) ricopiare in un altro vettore solo le automobili che abbiano una cilindrata maggiore di 2000 e visualizzare i dati presenti nel nuovo vettore
5) esci
Una volta che l’utente ha scelto l’operazione desiderata (1-5), il programma acquisirà i
dati necessari dall’utente ed eseguirà il comando.
E' richiesto che il progetto venga strutturato in più file.
Es. 13
Cartoline
Realizzare un programma in linguaggio C+ per registrare le cartoline scambiate tra un
gruppo di amici (massimo 20 amici).
L’elenco delle cartoline è memorizzato in un file di testo, (il numero di linee del file è la prima informazione presente nel file stesso).
Le righe successive contengono ciascuna tre elementi: il nome del mittente, il nome del
destinatario ed il nome della località da cui la cartolina è stata inviata.
I nomi degli amici
e delle località devono essere privi di spazi.
Il programma carica i dati del file in una struttura dati in memoria centrale a scelta del programmatore.
Viene richiesto in input all'utente il nome di un amico e il programma deve visualizzare il numero di cartoline che questa persona ha inviato oppure ha ricevuto (gestire anche il caso in cui l'amico non sia presente).
Visualizzare la località più presente e quella meno presente nelle cartoline
Es. 14
Cartellino del lavoratore
Il problema esposto deve essere realizzato in linguaggio C++. Ogni problema deve essere corredato di commenti e lo zip deve contenere l'intera cartella
Le funzioni devono essere inserite in un file opportuno, così come i prototipi delle funzioni.
Le funzioni già fatte e le strutture già utilizzate nel main possono essere ricopiate da esempi precedenti.
Inserire il controllo che i numeri della matrice debbono essere interi.
Si ricordi che tutte le funzioni non richiedono in input dati all'utente.
Tutto ciò che serve viene richiesto nel main .
Scrivere il documento di test prima di scrivere il codice.
Si vuole gestire le ore di lavoro svolte, in una settimana, da alcune persone.
Prevedere una matrice e 2 vettori, come nell’esempio mostrato in figura:
Realizzare un programma in C++ che preveda il seguente menù:
1) Caricamento
2) Media
3) Assenze
4) Buchi
5) Persone che lavorano di più e di meno
6) Ore di una persona in un giorno
7) Scambio
8) Ordina
9) Fine programma
Spiegazione delle voci di menù:
1) [funzione: Caricamento] Caricamento manuale (da tastiera) dei 2 vettori (Giorni e Persone) e della matrice (Ore)
2) [funzione: Media] Richiamare una funzione che stampa il nome di ogni persona con la media giornaliera delle ore lavorate (da tale persona).
3) [funzione: Assenze] Richiamare una funzione che stampi il nome delle persone che non hanno lavorato (zero ore) per almeno 3 giorni
4) [funzione: Buchi] Richiamare una funzione che stampi il nome delle persone che hanno sempre lavorato tutti i giorni (per ogni giorno le ore sono maggiori di zero)
5) [funzione: Piuemeno] Richiamare una funzione che restituisca la posizione (indice) della persona che in totale ha fatto più ore e la posizione di quello che ne ha fatte di meno (si suppone che ce sia una sola, per ciascun caso. Nel main stampare i nomi di tali persone
6) [funzione: OreXY] Stampa delle ore fatte da una certa persona in un certo giorno.
Nel main chiedere il nome di una persona e il nome di un giorno.
Richiamare la funzione. Nel main stampare il risultato
7) [funzione: Scambio] Nel main chiedere i nomi di 2 giorni.
Richiamare la funzione per scambiare le ore di tali giorni (per tutte le persone).
8) [funzione: Ordina] Richiamare una funzione che stampi il nome delle persone in ordine crescente in base al numero di ore svolte durante la settimana
Dove ritenuto necessario utilizzare funzioni anche se non è espressamente indicato
Es. 15
Supermercato
Dobbiamo gestire i prodotti di un supermercato e i loro prezzi.
Definire una struttura con il campo nome e
prezzo. Creare un array di nome ARTICOLI di lunghezza costante(N).
Caricare l’array con N elementi.
Creare
un menu in cui è possibile eseguire le seguenti operazioni ( il menu deve essere eseguito più volte fino a
quando l’utente non decide di uscire):
[1]chiedere in ingresso una percentuale all'utente e incrementare tutti i prezzi della
percentuale specificata
[2]chiedere in ingresso un prodotto e visualizzare il suo prezzo (se il prodotto viene trovato
il ciclo deve essere interrotto)
[3]visualizzare il prezzo medio calcolato tra quelli che costano più di 10 euro
[4]visualizzare i dati di tutti gli articoli presenti nel vettore
[5]Chiedere all'utente un prezzo e ricopiare in un terzo vettore (di nome PREZZOBIS) i
prezzi che superano il prezzo ricevuto in ingresso. Stampare il vettore PREZZOBIS.
Es. 16
Residenti
Scrivere un programma che acquisisca da tastiera i dati di un certo numero di persone e restituisca:
il numero di persone residenti nella provincia di Pisa
il numero di residenti nella città di Pisa
i dati della persona che è residente nella città di Pisa da più tempo.
In particolare, il numero di persone viene richiesto inizialmente all’utente. Inoltre, per ogni persona viene richiesto il nome, il cognome e la residenza, della quale interessa solamente la città, la provincia e l’anno in cui è stata richiesta.
Realizzare il programma senza l’uso di vettori.
Es. 17
Dipendenti
Scrivere un programma che consenta di gestire i dipendenti di un'azienda tramite l'uso di un vettore, che rappresenta il registro dei dipendenti dell'azienda stessa.
Ogni dipendente è caratterizzato
dal numero di matricola (un intero)
dal cognome
dall’anno di nascita
dal numero di ore lavorate nel mese corrente
Prevedere le seguenti funzioni:
caricaDipendenti, che consente di inserire i dati di tutti i dipendenti dell'azienda. La matricola viene assegnata dal programma: sarà 1 per il primo dipendente inserito, 2 per il secondo, ecc...
stampaDipendente, che consente di stampare i dati del dipendente con matricola m
dipendenteMax, che restituisce i dati del dipendente che ha lavorato più ore nel mese corrente
dipendenteMin, che restituisce i dati del dipendente che ha lavorato meno ore nel mese corrente
mediaOre, che restituisce la media delle ore lavorate da un dipendente
cercaDip, che prende il cognome di un dipendente e restituisce true se esiste almeno un dipendente con quel cognome e false altrimenti.
La funzione main consentirà all'utente di eseguire una delle seguenti operazioni
Inserire i dati di tutti i dipendenti, dopo aver richiesto il numero di dipendenti dell'azienda
Visualizzare i dati del dipendente con matricola m acquisita da tastiera
Visualizzare i dati del dipendente che ha lavorato più ore nel mese corrente
Visualizzare i dati del dipendente che ha lavorato meno ore nel mese corrente
Visualizzare in numero medio di ore lavorate dai dipendenti
Verificare se nell'azienda è presente almeno un dipendente con un dato cognome inserito da tastiera.
Es. 18
Squadra di calcio e allenatore
Definire una struttura che descriva una squadra di calcio con il relativo allenatore.
Una squadra è identificata da
Nome
Città di appartenenza
Punteggio corrente
Allenatore.
L’allenatore è invece caratterizzato da
Nome
Cognome
Numero di titoli vinti.
Scrivere un programma C++ che, dopo aver dichiarato una tabella Fantacalcio per gestire i dati delle squadre e aver chiesto all’utente il numero di squadre da inserire
Consentirà all’utente di inserire i dati delle squadre e dei relativi allenatori
Visualizzerà il nome delle squadre che hanno più di N punti in classifica (N verrà chiesto nel main all’utente)
Calcolerà e visualizzerà il numero di allenatori che hanno vinto almeno un titolo.
Prevedere una funzione per il caricamento dei dati, una per la visualizzazione al punto 2 e un’altra ancora per il calcolo del numero di allenatori al punto 3.
Es. 19
Collezione di libri
Scrivere un programma per gestire una collezione di Libri.
Ogni libro è caratterizzato da:
titolo
numero di pagine
prezzo
Il programma dopo aver chiesto all’utente il numero di libri che vuole inserire, offrirà un menu con le seguenti operazioni:
Caricamento, che consente l’inserimento da tastiera di tutti i dati dei libri
Visualizzazione, che visualizza tutti i dati di tutti i libri
Ricerca, che chiede all’utente il titolo del libro da cercare e visualizza il prezzo se il libro è presente. Per la ricerca, implementare una funzione che prenda, oltre al vettore e alla dimensione, anche il titolo come parametro e restituisca il prezzo del libro (se presente) oppure zero.
Più costoso e più economico, che visualizza i dati sia del libro più costoso che di quello più economico
Incremento del prezzo di una percentuale, che chiede all’utente una percentuale e, richiamando una apposita funzione, incrementa il prezzo dei libri di quella percentuale.
Uscita menu
NOTA: tutte le operazioni elencate sopra devono essere implementate attraverso apposite funzioni.
Es. 20
Informazioni su auto
Scrivere un programma per gestire le informazioni di alcune auto.
Il programma dopo aver chiesto all’utente il numero di autoche vuole inserire, offrirà un menu con le seguenti operazioni:
Caricamento, che consente l’inserimento da tastiera di tutti i dati delle auto (marca, modello, consumo al km, prezzo dell'allestimento base)
Visualizzazione, che visualizza tutti i dati di tutte le auto
Ricerca delle auto di una certa marca, che chiede all’utente la marca e stampa i dati di tutte le automobili di quella marca
Ricerca del prezzo di una determinata auto, che chiede all'utente marca e modello e restituisce il prezzo. (Assumiamo che sia presente al più una automobile di una determinata marca e di un determinato modello.)
Ricerca delle auto dato il prezzo, che chiede all'utente un prezzo e visualizzerà le auto con prezzo maggiore al prezzo inserito
Ricerca delle auto dato il consumo, che chiede all'utente un valore di consumo e visualizzerà le auto con consumo inferiore a quello inserito
Uscita menu
NOTA: tutte le operazioni elencate sopra devono essere implementate attraverso apposite funzioni.
Es. 21
Studenti e ricerca
Considerate la seguente struttura:
struct Studente
{
int matricola;
string nome;
string telefono;
};
Scrivere in C++ le seguenti funzioni:
inserisciStudenti, che consente di inserire i dati degli studenti in un vettore vs solo in ordine crescente di matricola. Pertanto, se l’utente inserisce una matricola uguale o inferiore a quella precedentemente inserita, sarà visualizzato un messaggio di errore e sarà nuovamente richiesta la matricola.
ricercaPerMatricola, che preso un vettore di studenti vs ordinato in base alla matricola, e un numero di matricola m, cerca lo studente in vs con matricola m. Se lo studente è presente in vs, allora restituisce il nome, altrimenti restituisce la stringa “NESSUNO”;
ricercaPerNome, che preso un vettore di studenti vs ordinato in base alla matricola, e un nome n, stampi i dati di tutti gli studenti in vs con nome n.
Il programma mostrerà all’utente un menu con le tre operazioni che è possibile effettuare, oltre che alla possibilità di terminare l’esecuzione.
Indicare quale algoritmo di ricerca avete implementato nelle due funzioni, motivando la risposta. Per ognuna delle due soluzioni, riportare inoltre le vostre osservazioni sull’efficienza degli algoritmi usati.
Capitolo 6 - Stringhe
Es. 1
Trasformazione di un array di caratteri da maiuscolo a minuscolo e viceversa
Chiedere all'utente un insieme di caratteri alfabetici da memorizzare in un vettore precedentemente dichiarato con una lunghezza costante. La sequenza di caratteri termina quanto l'utente inserisce il carattere '!'
Il caricamento dei caratteri nel vettore si interrompe in 3 casi:
l'utente ha specificato il carattere '!' quindi indica che la sequenza di caratteri è terminata. Il programma inizia la sua elaborazione utilizzando i caratteri presenti nel vettore che precedono il '!'
la lunghezza della sequenza di caratteri supera la dimensione del vettore, in questo il programma termina segnalando un errore
l'utente inserisce un carattere non alfabetico cioè diverso da a,b.....z e diverso da A,B,....Z Anche in questo caso il programma termina con una segnalazione di errore
Nel caso prosecuzione corretta del programma le operazioni da svolgere sono le seguenti:
Modificare ogni carattere del vettore sostituendo il carattere minuscolo con il corrispondente maiuscolo e viceversa (utilizzare la codifica ASCII)
Visualizzare i caratteri del vettore dopo la modifica
Es. 2
Operazioni con stringhe
Prima di iniziare l'esercizio ricordare che
per misurare la lunghezza di una stringa si utilizza la funzione int length():
esempio
int i;
string saluto=”ciao”;
i = saluto.length(); //produce ... i = 4
Scrivere un programma che riceva in input una stringa ed permette di eseguire le seguenti operazioni tramite un menu (ricordare che la stringa può contenere anche il carattere "spazio" che deve essere ignorato. La stringa viene richiesta in input prima di iniziare il menu):
1)richiedere in input un carattere e restituire quante volte il carattere è presente nella stringa (utilizzare la codifica ASCII). Esempio se la stringa in input è "Buon Natale a tutti" e il carattere specificato dall'utente è 'a' bisogna restituire "il carattere a è presente 3 volte"
2) restituisce TRUE se tutti i caratteri della stringa sono maiuscoli, false altrimenti
3) sostituisce tutti i caratteri maiuscoli con minuscole e viceversa. es. la stringa "Buon Natale a tutti" diventa "bUON nATALE A TUTTI"
4)esci
Es. 3
Ripasso uso delle stringhe
Scrivere un programma che dopo aver acquisito una stringa da tastiera verifichi se questa è palindroma, stampando un opportuno messaggio all'utente.
Una stringa si dice palindroma quando si
legge allo stesso modo da destra e da sinistra, per esempio anna.
Il programma deve svolgere le seguenti operazioni:
Visualizzare la stringa inserita
Aggiornare la stringa in modo che tutti i caratteri siano minuscoli e visualizzarla
Verificare se la stringa è palindroma stampando un opportuno messaggio all'utente.
Es. anna
i topi non avevano nipoti
Eran i mesi di seminare
O mordo tua nuora, o aro un autodromo
suggerimento per gestire gli spazi senza utilizzare while interni:
while(i < k && palin){
if(nm[i] == ' ' && nm[k] == ' '){
i++; k--;
}else if(nm[i] == ' '){
i++;
}else if(nm[k] == ' '){
k--;
}else if(nm[i] != nm[k]){
palin = false;
}else{
i++; k--;
}
}
Il main chiede ciclicamente una frase all'utente chiama la funzione palindroma e invia un msg se è palindroma o no.
Il ciclo termina quando l'utente indica che vuole terminare (specifica un carattere particolare).
Es. 4
Conta parole
Scrivere una funzione C/C++ che determini il numero di parole presenti in una stringa tenendo conto dei vari caratteri di separazione (spazi, punteggiatura, ecc..).
Scrivere il corrispondente main che attiva la funzione.
All'interno del main visualizzare il numero di parole.
Non utilizzare funzioni predefinite.
Il conteggio delle parole deve essere realizzato mediante un algoritmo manuale
Es. 5
De Bello Gallico
Nel De bello gallico Giulio Cesare racconta di
avere utilizzato un codice segreto per comunicare
in forma scritta con i propri generali: ogni
singola lettera del messaggio veniva sostituita
con la lettera che la seguiva nell’ordinamento alfabetico
(A→ B, B→C, …, Z→A), i simboli delle
cifre numeriche e i segni di punteggiatura erano
lasciati invariati.
Scrivere due programmi C++: il
primo deve codificare secondo la regola di Cesare
una stringa di testo inserita dall’utente e visualizzare
il risultato, il secondo deve accettare
una stringa segreta e decodificarla visualizzando
il testo originale.
Es. 6
ContaCaratteri
Scrivere una funzione ContaCaratteri che riceve in ingresso due stringhe e restituisce come valore di ritorno quanti caratteri della prima stringa sono presenti nella seconda (per esempio, il risultato restituito se i due valori in ingresso sono "PIPPO" e "PIPPICALZELUNGHE" è 4)
Scrivere una funzione Substr che riceve in ingresso due stringhe s1 e s2 e restituisce 0 se s1 e sottostringa di s2, -1 altrimenti. Una stringa è sottostringa di un'altra se è contenuta nell'altra. Ad esempio "cane" è sottostringa di "canestro", fila e sottostringa di "infilare"
Scrivere un programma in cui inserire un menu da cui è possibile chiamare la funzione Contacaratteri o Substr dopo aver chiesto in input i valori necessari all'utente
Es. 7
Normalizza frase
Scrivere un programma in linguaggio C++ che legga una frase introdotta da tastiera. La frase è terminata dall’introduzione del carattere di invio. La frase contiene sia caratteri maiuscoli che caratteri minuscoli, e complessivamente al più 100 caratteri. Il programma deve svolgere le seguenti operazioni:
1) visualizzare la frase inserita
2) costruire una nuova frase in cui il primo carattere di ciascuna parola nella frase di partenza è stato reso maiuscolo. Tutti gli altri caratteri devono essere resi minuscoli.
Il programma deve memorizzare la nuova frase in una opportuna variabile
3) visualizzare la nuova frase.
Ad esempio la frase cHe bElLA gIOrnaTa diviene Che Bella Giornata.
Es. 8
Sostituisci carattere
Scrivere un programma in linguaggio C++ che legga una frase introdotta da tastiera.
La frase
è terminata dall’introduzione del carattere di invio e contiene complessivamente al più 100
caratteri. Il programma deve svolgere le seguenti operazioni:
1) visualizzare la frase inserita
2) costruire una nuova frase in cui tutte le occorrenze del carattere ’.’ sono sostituite con il carattere di ritorno di linea ’\n’. Il programma deve memorizzare la nuova frase in una opportuna variabile
3) visualizzare la nuova frase.
Es. 9
Codifica la frase
Scrivere un programma in linguaggio C++ che legga una frase introdotta da tastiera.
La
frase è terminata dall’introduzione del carattere di invio. La frase contiene sia caratteri deve svolgere le seguenti operazioni:
visualizzare la frase inserita.
costruire una nuova frase tale che ogni lettera vocale presente nella frase di partenza
sia seguita dalla lettera ’f’ (se la vocale è minuscola) o dalla lettera ’F’ (se la vocale è
maiuscola) nella nuova frase. Il programma deve memorizzare la nuova frase in una
opportuna variabile.
visualizzare la nuova frase.
Ad esempio, la frase VacAnze di NaTAle diviene VafcAFnzef dif NafTAFlef.
Es. 10
Underscore
Data una frase in ingresso, sostituire tutti gli spazi con underscore (trattino basso). Visualizzare la frase risultante
Es. 11
Inverti maiuscole e minuscole
Partendo da una frase in ingresso, visualizzare una frase uguale a quella di partenza dove le lettere maiuscolo sono state trasformate in minuscole.
Utilizzare le funzioni isupper e islower e toupper e tolower
Per quelli che sono in difficoltà di seguito la soluzione.
int main(int argc, char** argv) {
// Variabili di input
string frase1;
// Variabili
int l;
char x;
string frase2 = "";
// Input
cout << "Inserire una frase: ";
getline(cin, frase1);
// Calcolo lunghezza stringa
l = frase1.length();
// Ciclo di conversione
for(int i=0; i < l; i++){
// Estrazione carattere
x = frase1.at(i);
// Controllo se il carattere è MAISCUOLO
if(isupper(x))
x = (int)x + 32;
// Aggiunta del carattere estratto alla stringa di output
frase2 = frase2 + x;
}
// Output
cout << frase2 << endl;
}
Es. 12
Verifica se le stringhe sono uguali
Ricevere in ingresso due stringhe.
Verificare se sono uguali. Due stringhe sono uguali se hanno le stesse lettere nella stessa posizione indipendemente dal fatto che siano maiuscole o minuscole
es. AdRiaNa è uguale a aDRIana
(suggerimento: traformare le due stringhe tutte in maiuscolo o tutte in minuscolo e fare il confronto)
Es. 13
Sostituisci spazi con _
Data una frase in ingresso (utilizzare il getline) sostituire gli spazii con il carattere _.
Visualizzare la stringa risultante.
Per quelli che sono in difficoltà trovate la soluzione.
int main(int argc, char** argv) {
string frase;
int i;
cout<<"Inserisci una frase:";
getline(cin,frase);
for (i=0; i<=frase.length(); i++)
{
if (frase.at(i)==' '){
frase.at(i)='_';}
}
stampo la frase.
Capitolo 7 - Ordinamento e ricerca su vettori
Es. 1
Ricerca binaria
Scrivere una funzione (prima su carta e poi al PC, vi viene più facile), che riceve in input un vettore di interi, la sua lunghezza e un numero intero da cercare.
La funzione restituisce true se l'intero è presente, false altrimenti.
L'elemento viene cercato nel vettore utilizzando l'algoritmo di ricerca binaria (cercate di scrivere la funzione da soli, se avete problemi fate riferimento al libro a pag. 204)
Nel main far caricare all'utente il vettore, chiamare una funzione che verifichi se il vettore è ordinato in modo crescente, decrescente oppure che non è ordinato.
Se non è ordinato visualizzo un msg di errore, altrimenti chiedere all'utente un numero intero da cercare nel vettore e chiamare la funzione ricerca_binaria_crescente se il vettore è ordinato in senso crescente, ricerca_binaria_decrescente se il vettore è ordinato in senso decrescente.
Es. 2
Exchange sort su un vettore di strutture
Definire una struttura studente con campo nome e anno di nascita.
Caricare il vettore con i dati.
scrivere una funzione che ordina il vettore con exchange sort in funzione dell'anno scolastico e un'altra funzione exchange sort che ordina il vettore in funzione del nome.
Es. 3
Ricerca di un elemento in vettore
Si scriva una funzione in C++, denominata cerca, che ricerchi la presenza di un elemento in
un vettore di interi.
La funzione riceve in ingresso tre parametri:
1. un vettore di interi nel quale ricercare il valore;
2. un un valore intero N che indica quanti elementi contiene il vettore;
3. il valore intero x che deve essere ricercato.
La funzione deve restituire un valore intero, ed in particolare:
se il valore x è presente nel vettore, allora la funzione restituisce l’indice della posizione
alla quale si trova tale valore;
se il valore x è presente più volte, si restituisca l’indice della prima occorrenza;
se il valore x non è presente nel vettore, si restituisca -1.
Chiamare la funzione in un programma. I dati di input e di output devono essere richiestie visualizzati nel main
Es. 4
Cerco un intero con la ricerca binaria
Caricare un vettore di N elementi. Chiedere in ingresso un numero intero.
Applicare l'algoritmo di ricerca binaria per verificare se il numero intero è presente oppure no.
Es. 5
Ordinamento con selection sort e bubble sort
Caricare un vettore di N elementi. Ordinarlo utilizzando il selection sort e il bubble sort
(inserire i due algoritmi di ordinamento in due funzioni diverse)
Es. 6
Minimo e massimo di una sequenza, senza vettori
Scrivere un programma C++ per gestire i clienti di una agenzia immobiliare.
Ogni cliente è caratterizzato da:
codice cliente (un intero diverso per ogni cliente)
nome
città di residenza
numero di immobili affidati all'agenzia immobiliare.
Scrivere in C++ le seguenti funzioni:
inserisciClienti, che consente di inserire i dati dei clienti in un vettore. Prevedere tutti i controlli dei dati inseriti. Per il codice basta controllare che sia > di 0; assumiamo per semplicità che l'utente inserisca tutti codici diversi.
ordinaCodice, che ordina in base al codice il vettore dei clienti preso in input.
ricercaPerCodiceOrd, che preso un vettore v di clienti, ordinato in base al codice, ed un codice c, cerca il cliente con codice c nel vettore v. Se il cliente è presente , allora restituisce l'indice, altrimenti restituisce -1;
ricercaPerCodiceNonOrd, che preso un vettore v di clienti non ordinato ed un codice c, cerca il cliente con codice c nel vettore v. Se il cliente è presente , allora restituisce l'indice, altrimenti restituisce -1;
ricercaPerCitta, che preso un vettore di clienti v, ordinato in base al codice, e una città ci, stampi i dati di tutti i clienti in v con residenza ci.
Il main, dopo aver chiesto all'utente il numero di clienti da inserire, chiamando le opportune funzioni, consentirà di:
caricare i dati dei clienti
cercare i dati di un cliente, chiedendo il relativo codice (NOTA: che il vettore non è ordinato!)
ordinare il vettore in base al codice
cercare i dati di un cliente, chiedendo il relativo codice (NOTA: questa volta il vettore è ordinato!)
cercare i clienti con residenza in una città richiesta da tastiera.
Per le funzioni di ricerca, scegliere di volta in volta, la funzione più efficiente per eseguire il tipo di ricerca richiesta.
Es. 7
Mergesort
Un sito web del turismo tiene un elenco aggiornato delle stazioni sciistiche e del manto nevoso (in cm, un intero).
Si deve realizzare un programma che chieda in ingresso, per un insieme di località, il nome della località e l’altezza del manto nevoso (un intero).
A tal fine si definisca una apposita struttura dati stazione.
Si definisca un array di MAXDIM elementi di tipo stazione, e si chiedano all’utente i dati relativi a n <= MAXDIM località (nome e neve), memorizzandoli nell’array (il valore di n viene chiesto all’utente).
Si realizzi una funzione compare(stazione s1, stazione s2) che restituisce -1, 0 o 1 a seconda che il manto nevoso in s1 sia rispettivamente minore, uguale o maggiore al manto nevoso in s2.
Si modifichi l’algoritmo MergeSort visto a lezione, e lo si utilizzi per ordinare le località in base alla neve presente (suggerimento: si usi la funzione compare(…) ) .
Si stampi a video l’elenco ordinato delle località.
Es. 8
Minimo e massimo di una sequenza, senza vettori
Si vogliono organizzare i dati relativi ai risultati di una corsa campestre.
Gli iscritti saranno al più 100, ma potranno anche essere meno.
Per ogni partecipante si vuole memorizzare il nominativo (si assume che sia differente per ogni partecipante), il sesso (M/F), l’anno di nascita e il tempo in secondi impiegato per portare a termine la prova.
Realizzare un programma C++ che, una volta definita un’opportuna struttura per memorizzare i dati, visualizzi un menu con le seguenti operazioni possibili:
Inserimento
Visualizzazione dei dati ordinati in base al tempo della prova
Visualizzazione dei dati ordinati in base all’anno di nascita (dal più giovane al più anziano)
Visualizzazione dei dati ordinati in base al nominativo
Ricerca di un nominativo
Uscita
Il programma dovrà comportarsi come segue:
Quando l’utente inserirà la scelta 1, relativa all’inserimento, il programma chiederà all’utente il numero di partecipanti che vuole inserire, chiamando solo dopo la funzione che consentirà di inserire i dati dei partecipanti in un vettore.
Subito dopo l’inserimento, i dati saranno ordinati in base al tempo della prova, in base all’anno di nascita ed in base al nominativo dei partecipanti.
I dati ordinati in base ai tre criteri saranno memorizzati in tre vettori diversi. Il primo ordinamento sarà effettuato implementando l’algoritmo Selection Sort, il secondo implementando il Bubble Sort ed il terzo con il Merge Sort.
Quando l’utente inserirà la scelta 2, il programma visualizzerà i dati dei partecipanti ordinati in base al tempo di prova.
Quando l’utente inserirà la scelta 3, il programma visualizzerà i dati dei partecipanti ordinati in base all’anno di nascita.
Quando l’utente inserirà la scelta 4, il programma visualizzerà i dati dei partecipanti ordinati in base al nominativo.
Quando l’utente inserirà la scelta 5, il programma chiederà il nominativo da cercare ed effettuerà la ricerca nel modo più efficiente, visualizzando i dati relativi al partecipante cercato.
Quando l’utente inserirà la scelta 6, il programma stampa un messaggio di saluto e termina.
Attenzione:
Nel menu le operazioni 2, 3, 4 e 5 saranno consentite solo dopo l’inserimento.
L’operazione di inserimento può essere eseguita anche più volte.
Gli ordinamenti saranno eseguiti una sola volta dopo l’inserimento.
Bisogna effettuare i dovuti controlli dei dati inseriti da tastiera.
Capitolo 8 - File di testo
Es. 1
Parola bomba in un file di testo
Scrivere un programma che legge da un file di testo e verifica se in ogni riga è presenta la parola bomba anche se sono inframmezzate da altre lettere.
Una volta individuata la parola il programma restituisce a video la posizione di ogni singolo caratteri che la costituiscono.
es. aehBstOMjjdjsjdBkkA visualizza 47811721
nella riga aehBstMOjjdksjdABkkk risposta 0
Es. 2
File prenotazioni dei biglietti in un teatro
Organizzare esercizio con un menu:
per visualizzare la situazione dei posti liberi/prenotati/riservati nel teatro;
effettuare una prenotazione;
riservare un posto
dovete usare una matrice perche i posti sono 10 file ciascuna di 20 posti disponibili.
Il file iniziale sarà tutto formato da zeri e quando si prenota si mette a 1.
Es. 3
Positivi e negativi
Data una sequenza di numeri interi forniti dall'utente (il valore 0 interrompe la digitazione), memorizzare i numeri positivi nel file positivi.txt e quelli negativi nel file negativi.txt
Aggiungere la funzione per la lettura del file
Es. 4
Multipli di 5
Data una sequenza di numeri interi forniti dall'utente (il valore 0 interrompe la digitazione) memoizzare i soli multipli di 5 nel file di testo multipli5.txt.
Aggiungere all'esercizio anche la lettura del file
Es. 5
Algoritmo di Cesare con files
Creare una funzione che riceve in ingresso un carattere, una chiave e restituisce una chiave cifrata secondo l'algoritmo di Cesare (lo avete fatto a sistemi altrimenti lo cercate su internet).
es, se il carattere è 'c' e la chiave è 4, il carattere restituito è 'g'.
Analogamente per una funzione di decifratura:
se il carattere è 'g' e la chiave è 4, il carattere restituito è 'c'.
Dichiarare una matrice di caratteri il cui contenuto viene letto da un file (il file contiene un carattere per riga) con un messaggio e ad ogni elemento della matrice applicare la funzione cifratura e inserirlo in una matrice parallela.
stampare la matrice parallela e salvarla in un altro file
scrivere una funzione di decifratura che trasferisce tutti i caratteri della matrice cifrata in una terza matrice on cui ogni carattere ritorna originale.
Verificare che la matrice di partenza sia uguale alla terza matrice
NOTA IMPORTANTE: per leggere carattere per carattere da un file si usa get.
es. se il file ha il riferimento myFIle dopo essere stato aperto, devo usare il metodo myFile.get(c) dove è una variabile di tipo carattere
Es. 6
Titoli e attori di film
Scrivi un programma che legga due file che contengono ripettivamente i titoli di film e gli attori di ogni film.
Creare un file unico in cui sia presente per ogni titolo gli attori corrispondenti
Per separare gli attori da un film all'altro si usa il carattere #
il primo file contiene: (titoli di film)
titolo_film_1
titolo_film_2
titolo_film_3
il secondo file contiene: (attori di ogni film)
attore_1_film_1
attore_2_film_1
#
attore_1_film_2
attore_2_film_2
attore_3_film_2
#
attore_1_film_3
creare un file unico (terzo file) in cui sia presente per ogni titolo gli attori corrispondenti:
titolo_film_1: attore_1_film_1 attore_2_film_1
titolo_film_2: attore_1_film_2 attore_2_film_2 attore_3_film_2
titolo_film_3: attore_1_film_3
Es. 7
La biblioteca
Una biblioteca ha identificato tutti i libri della propria
collezione mediante un codice numerico.
Si
deve realizzare un programma che consenta di
effettuare le seguenti operazioni memorizzando
le informazioni relative a un libro (codice, titolo,
autore, anno di pubblicazione) in un vettore di strutture:
aggiunta di un nuovo libro alla collezione;
visualizzazione dell’elenco dei libri della collezione;
ricerca delle informazioni relative a un libro a partire dal codice;
ricerca delle informazioni relative a un libro a partire dal titolo;
salvataggio della collezione in un file di testo;
caricamento della collezione da un file di testo.
PS. Mi raccomando inserire anche il controllo che il codice del libro sia univoco
Si ipotizzi che i dati siano tutti in sequenza (uno per ogni riga) e che ogni stringa sia formata da una sola parola. (Aggiungere successivamente la lettura di stringhe formate da più parole)
es. nel file ci sono i dati di 3 libri diversi
1
Casa
Mario
2018
2
Fiori
Luigi
2015
3
Computer
Maria
2012
Definire il progetto utilizzando anche il file dei prototipi e delle funzioni.
Questo è l'esempio del file di input:
in_biblioteca.txt
Il programmino allegato (
biblioteca.cpp) stampa a video quello che legge dal file.
Bisogna effettuare tutti i controlli in quanto non è detto che il file di input contenga tutte le informazioni corrette.
Es. 8
Files e vettori ORDINATI
Scrivere una funzione C++ che, a partire da due vettori numerici (il primo di lunghezza costante L1 e il secondo di lunghezza costante L2) ordinati forniti come argomenti, ne costruisca un terzo avente dimensione pari alla somma delle due dimensioni e contenente tutti gli elementi dei due vettori in una sequenza
ordinata (per esempio, da {1, 2, 4} e {1, 3, 9} si deve ottenere {1, 1, 2, 3, 4, 9}).
Scrivere una funzione analoga che legga il contenuto del vettore da un file (ogni vettore ha un suo file).
In fase di caricamento bisogna verificare che il vettore sia crescente.
Scrivere un programma C++ che permetta all'utente di scegliere il caricamento da console o da file.
Successivamente utilizzando la funzione precedente crei il terzo vettore in modo ordinato e poi visualizzi il vettore risultato.
riassumendo:
definire la funzione che carica un vettore in modo ordinato da console
definire la funzione che carica un vettore in modo ordinato da file
definire la funzione che ricopia i due vettori nel terzo in modo ordinato
definire la funzione visualizza un vettore (il vettore finale)
definire le interfacce di ogni funzione e commentarle dettagliatamente
Es. 9
Gestione dei quadri [matrici]
Si scriva un programma di gestione dei quadri di vari artisti del 20 esimo secolo. Per ogni quadro bisogna gestire:
codice identificativo del quadro(string);
anno del quadro (un intero);
museo di esposizione (string)
stato di conservazione (1 in buone condizioni, 0 da restaurare)
Esistono N * M quadri e sono presenti di M artisti.
Nel main realizzare un ciclo in cui è possibile:
caricare i dati dei quadri prelevandoli da un file (inserirli in una matrice)
Caricare da video degli autori (inserendoli in un vettore)
Visualizzare a video i dati dei quadri per un particolare autore. Gestire il caso in cui l'autore non è presente.
Salvare in un file i dati dei quadri che devono essere restaurati.
Inserire in un vettore tutti i quadri di un museo ricevuto come parametro. Tali quadri devono essere ordinati per anno di creazione e inseriti in un file.
Es. 10
Files e ordinamento
Leggere da un file di input una sequenza di numeri interi e inserirli in un vettore di massimo 100 elementi.
Ordinare il vettore con un algoritmo a scelta e ricopiare il vettore ordinato in un file di output.
Es. 11
Uso di append (studenti)
Scrivere un programma C++ che consenta di scrivere in un file studenti.txt i dati di alcuni studenti.
In particolare, il programma chiederà all'utente il numero di studenti da inserire e, per ogni studente chiederà il nome, il cognome e l'anno di nascita.
I dati di ogni studente saranno scritti su un'unica riga separati da uno spazio, ovvero Cognome Nome AnnoNascita.
Nel file ci sarà una riga per ogni studente.
Ad ogni esecuzione del programma i dati già presenti sul file non dovranno essere sovrascritti, al contrario i dati dei nuovi studenti saranno aggiunti alla fine del file.
Es. 12
Prove orali studenti
Scrivere un programma per gestire i dati relativi alle prove orali di alcuni studenti.
Ogni prova orale è caratterizzata da:
nome dello studente,
cognome dello studente,
voto,
quadrimestre.
I dati relative alle interrogazioni saranno memorizzati in maniera permanente in un file di testo di nome orali.txt.
Nel file, i dati di ogni interrogazione saranno memorizzati in una riga diversa in cui ogni dato è separato dall'altro da un punto e virgola.
Il programma, dopo aver caricato in un vettore gli eventuali dati già presenti nel file orali.txt, offrirà un menu con le seguenti operazioni:
Caricamento, che consente l’inserimento da tastiera dei dati relativi ad una interrogazione. In particolare, una volta scelta questa opzione, il programma chiederà all'utente i dati relativi alla nuova interrogazione. I dati inseriti saranno mantenuti in memoria centrale (nel vettore) e solo alla fine, quando l'esecuzione del programma terminerà, saranno memorizzati sul file in memoria di massa.
Visualizzazione che, dopo aver chiesto all'utente il quadrimestre (valori possibili 1, 2, 3 per entrambi i quadrimestri), visualizza i dati di tutte le prove, sia quelli caricate dal file, sia quelle caricate dall'utente durante l'ultima esecuzione del programma.
Media, che chiede il nome e cognome dello studente e visualizza i dati di tutti gli orali, la media per ogni quadrimestre e quella complessiva.
Uscita menu, che dopo aver memorizzato i dati sul file, termina l'esecuzione del programma.
Prevedere apposite funzioni/procedure per la realizzazione del programma.
Es. 13
Gattile
Si scriva un programma per la gestione di un gattile.
Per ogni gatto bisogna memorizzare:
Un codice identificativo del gatto (string);
L’età del gatto in anni (un intero);
Il peso del gatto reale in Kg (un float);
Il peso del gatto ottimale in Kg (un float);
Nel gattile esistono N * M gatti e sono presenti M volontari che si occupano ciascuno di nutrire N gatti.
Nel main realizzare un ciclo in cui è possibile:
1. caricare i dati dei gatti prelevandoli da un file (funzione carica_gatti con gli opportuni parametri compreso il nome del file). (nome del file gatti.txt)
2. Caricare da video i dati dei volontari (funzione carica_volontari)
3. Visualizzare a video i dati dei gatti per un particolare volontario. (funzione visualizza_gatti_di_un_volontario, la funzione riceve come parametri ovviamente anche la matrice e il vettore dei volontari). Gestire il caso in cui il volontario non è presente.
4. Salvare in un file i dati dei gatti che devono essere visitati da un medico cioè sono in sottopeso (funzione gatti_da_visitare)
5. Inserire in un vettore tutti i gatti dal peso perfetto (peso reale è uguale a quello ottimale) (funzione peso_perfetto). Il vettore deve risultare ordinato per età in modo crescente. Visualizzare a video i dati di tali gatti.
Capitolo 9 - Ricorsione
Es. 1
Somma interi pari tra 2 e N
Scrivere una funzione ricorsiva che calcoli e restituisca la somma degli interi pari tra 2 e N. (N in input alla funzione).
Es. 2
MCD con l'algoritmo di Euclide
Scrivere una funzione ricorsiva che implementi il seguente algoritmo che calcola il massimo comune divisore:
Per trovare il MCD(m, n) si effettua la divisione tra m e n; sia r il resto della divisione:
se r = 0 allora n è il MCD, altrimenti il MCD(m, n) è uguale a MCD(n, r).
Es. 3
Inverti stringa con la ricorsione
Scrivere una funzione ricorsiva che riceve in ingresso una frase visualizzi a video la stringa invertita.
Prototipo: string invertiStringa (string frase,int lung);
Es: ciao mondo -> odnom oaic
Es. 4
Matrice ricorsiva
Una matrice NxN si dice unitaria se contiene solo cifre pari a 1 sulla diagonale, 0 altrimenti.
Scrivere una funzione ricorsiva che restituisce true se è unitaria, false altrimenti
Come si controlla ogni elemento della matrice?
Partendo dalla riga 0 e colonna 0 possiamo procedere per linee orizzontali. Quando la colonna arriva al valore N (es. 3) la riga aumenta di 1 e la colonna ripassa a zero.
In pratica se j==N allora i=i+1 e J=0;
Casi base: se i>N siamo giunti alla fine della matrice senza incontrare errori quindi unitaria,
Es. 5
Ricerca binaria ricorsiva
Scrivere una funzione ricorsiva che verifichi se in un vettore (che si ipotizza ordinato) sia presente un numero utilizzando l'algoritmo di ricerca binaria.
il prototipo della funzione è:
bool ricerca_binaria_ricorsiva(int v[], int numero_da_cercare, int limite_inferiore, int limite_superiore);
La funzione restituisce false se non è stato trovato l'intero, false altrimenti.
Ricordarsi che con la ricorsione bisogna richiamare la stessa funzione con il limite_superiore e inferiore in modo opportuno
Es. 6
Successione di Fibonacci
La successione di Fibonacci (detta anche successione aurea), indicata con F_{n} o con Fib(n), in matematica indica una successione di interi positivi in cui ciascun numero a cominciare dal terzo è la somma dei due precedenti, dove i primi due sono (per definizione) F_{1}=1 e F_{2}=1.
es. i numeri della successione sono: 1,1,2,3,5,8,13,21,34,55,89,144,...
Dato un numero N (controllare che N sia >=3) visualizzare i numeri della successione F(N).
Es. 7
Inverti vettore
Dato un vettore di n interi, scrivere una funzione ricorsiva C++ che ne scambi gli elementi fino a metterli in ordine inverso rispetto alla posizione iniziale (senza dichiarare vettori aggiuntivi).
Es. 8
Fattoriale iterativo e ricorsione
Scrivere un programma che realizzi il fattoriale con una funzione in modo iterativo, il fattoriale con una funzione ricorsiva, la somma dei primi n numeri con una funzione in modo iterativo e con una funzione ricorsiva.
Attivare ognuna delle funzioni da un main con un switch case
Es. 9
Esercizio sull'iterazione e ricorsione
Scrivere un programma in C++ da cui è possibile attivare le seguenti funzioni:
funzione che restituisce il fattoriale di un numero intero ricevuto in ingresso (versione iterativa)
funzione che restituisce il fattoriale di un numero intero ricevuto in ingresso (versione ricorsiva)
funzione che restituisce la somma dei primi N numeri (N ricevuto in ingresso). Versione iterativa
funzione che restituisce la somma dei primi N numeri (N ricevuto in ingresso). Versione ricorsiva
Es. 10
Prodotto tra due numeri
Ricordando che una prodotto tra due numeri (a e b) può essere realizzata come una somma:
a*b =0; se b=0
a*b = a*(b-1)+a; se b>0
Scrivere una funzione ricorsiva che calcola il prodotto tra due numeri interi. Prototipo: int prodotto(a, b).
utilizzare il seguente schema per la ricorsione:
CONDIZIONE DI TERMINAZIONE:
prodotto (a, b) = 0; se b=0
PASSO RICORSIVO:
prodotto (a, b) =prodotto (a, b-1)+a; se b>0
Es. 11
Contacifre
Scrivere una funzione ricorsiva che dato un numero decimale restituisca il numero di cifre che compongono il numero stesso (ricordarsi che 235 è composta da 3 cifre. Ogni volta che riesco a dividere per 10 ottengo una cifra. Quale è la condizione di terminazione?)
Es. 12
Numero binario (con la ricorsione)
Scrivere una funzione ricorsiva che calcola il corrispondente in base 2 di un numero decimale inserito utilizzando la ricorsione.
Suggerimento: utilizzare gli operatori / e %
Identificare la condizione di terminazione
Importante: la funzione deve essere void., quindi non usare il return all'interno.
Estendere la funzione mettendo come parametro anche la base (in modo tale da fare le trasformazioni da decimale in tutte le basi)
Es. 13
Visualizza e salva vettore in modalità ricorsiva
QUANDO SI SALVA IL VETTORE NEI FILE BISOGNA APRIRE IL FILE FUORI DALLA FUNZIONE RICORSIVA E CHIUDERLO ALL'USCITA DELLA FUNZIONE RICORSIVA.
IL PROTOTIPO DELLA FUNZIONE SALVA VIENE COSI' MODIFICATO:
SALVA(INT V[], INT L, OFSTREAM & F)
CIOE' SI AGGIUNGE IL FILE APERTO PASSATO COME RIFERIMENTO
Scrivere un programma in cui si chiama una funzione carica che preleva da un file gli elementi di un vettore (la funzione restisce -1 se non è possibile accedere al file, -2 se il numero di elementi presenti nel file è maggiore della dimensione del vettore, il numero di elementi caricati nel vettore altrimenti)
Inserire un ciclo in cui tramite un switch si possono eseguire le operazioni seguenti:
1) funzione ricorsiva che visualizza a video gli N elementi dell’array dall'indice 0 all'indice N-1.
2)funzione ricorsiva che visualizza a video gli N elementi dell’array dall'indice N-1 all'indice 0.
3) funzione ricorsiva che scrive su file gli N elementi dell’array dall'indice 0 all'indice N-1.
4) funzione ricorsiva che scrive su file gli N elementi dell’array dall'indice N-1 all'indice 0.
5) funzione ricorsiva che restituisce la somma dei numeri presenti nel vettore
I file devono essere inseriti in una cartella e devono essere passati come parametri alle rispettive funzioni che li utilizzano
Es. 14
Funzione ricorsiva
Scrivere una funzione ricorsiva POT(n) per il calcolo dei numeri F(n) definiti dalle seguenti relazioni:
se n=1
F(n) = 2
se n ≥ 2
F(n) = 2F(n − 1)
Si scriva la funzione C++ che realizza tale specifica SOLUZIONE. Cosa calcola per N=5?
Es. 15
Stringa palindroma
Scrivere la versione iterativa e quella ricorsiva di una funzione che calcola se una stringa è palindroma
la versione ricorsiva determina se una stringa è palindroma confrontando ad ogni invocazione i due caratteri estremi della stringa individuati dagli indici forniti come argomento
Prototipo:
bool palindroma(string s, int inizio, int fine);
Nell’invocazione iniziale gli indici forniti come argomento dovranno specificare l’intera stringa: palindroma("ciao", 0, 3)
Es. 16
Minimo di un vettore [ricorsivo]
Scrivere una funzione ricorsiva che ricevuto in ingresso un vettori di interi visualizzi l'elemento minimo.
Es. 17
Esercizi vari ricorsione
Gli esercizi successivi devono essere svolti su un foglio di protocollo. Per ogni esercizio identificare la condizione di terminazione e la condizione di iterazione.
Aggiungere tutti i commenti ritenuti necessari per spiegare lo svolgimento
1. Scrivere una funzione ricorsiva che dato un numero intero visualizzi il numero in ordine inverso. Esempio se il numero in input è 245, deve essere visualizzato 542.
2. Scrivere una funzione ricorsiva che ricevuta in input una stringa e un carattere e restituisca il numero di occorrenze del carattere nella stringa. Ad esempio se la stinga sia “mamma mia” e il carattere è m, la funzione deve restituire 4
Deve essere anche disegnata in modo chiaro la sequenza di attivazione di RDA supponendo che i dati in input siano “mamma mia” e ‘m’
3. Scrivere una funzione ricorsiva Fibonacci(n) per il calcolo dei numeri della successione di Fibonacci definiti dalle seguenti relazioni:
F(0) = 0 ,
F(1) = 1;
F(N)= F(N-1)+ F(N-2); per ogni N>1
Quali sono gli elementi della sequenza di Fibonacci per N= 12?
4. Scrivere una funzione iterativa che riceva in input vettore di stringhe, la lunghezza del vettore, e una stringa da cercare e scriva l’algoritmo di ricerca binaria restituendo true nel caso in cui la stringa sia stata trovata, false altrimenti
5. Data una matrice quadrata NxN scrivere una funzione ricorsiva che restituisce true se la matrice ricevuta in ingresso è simmetrica rispetto alla diagonale principale, false altrimenti
Il prototipo della funzione è:
const int N=4;
bool simmetrica(int matr[][N], int i, int j)
Es. 18
Calcolo ricorsivo secondo una relazione
Scrivere una funzione ricorsiva RIC(n) per il calcolo dei numeri F(n) definiti dalle seguenti relazioni:
F(0) = 10
F(1) = 20
F(n) = 3F(n − 1) + 4 ____________se n ≥ 2 (punti 2,0)
Quanto vale la funzione per F(10)?
Es. 19
Numero di occorrenze di carattere nella stringa [ricorsivo]
Scrivere una funzione ricorsiva che ricevuta in input una stringa e un carattere e restituisca il numero di occorrenze del carattere nella stringa. Ad esempio se la stringa sia “nonno giovanni ” e il carattere è n, la funzione deve restituire 45
Es. 20
Numero di elementi positivi
Scrivere una funzione ricorsiva che, avendo in input un
array di n interi non negativi, l'indice iniziale del vettore e l'indice finale del vettore, dia in output il numero degli
elementi positivi presenti nel vettore.
Es. 21
Funzione ricorsiva da una funzione matematica
Scrivere una funzione ricorsiva:
T(0) = 0; T(1) = 1
T(n) = 2T(n-2)+5 se n>=2
Es. 22
Potenza fra 2 numeri
Scrivere in C++ la procedura ricorsiva che effettua la potenza tra due numeri
Es. 23
Minimo vettore di interi [ricorsivo]
Scrivere in C++ una procedura ricorsiva che calcoli l'elemento minimo di un vettore di interi.
Il prototipo della procedura è il seguente:
int minRic(int a [ ], int from, int to)
Es. 24
Prodotto da formula ricorsiva
Scrivere un programma che calcoli il prodotto tra due numeri interi a e b mediante una formula ricorsiva.
a*b = a*(b-1)+a; se b>0
a*b =0; se b=0.
Es. 25
Quoziente di divisione tra naturali
Scrivere un programma che calcoli il quoziente della divisione tra naturali.
Suggerimento: x/y = (x - y + y)/y = 1 + (x - y)/y.
Utilizzare una funzione ricorsiva.
Es. 26
Visualizza vettore
Scrivere una funzione ricorsiva
int visualizzaa (int v[ ], int n);
che visualizzi un vettore di interi.
Es. 27
Prodotto tra 10 e n
Scrivere una funzione ricorsiva che calcoli il prodotto tra il numero 10 e un numero n passato come parametro.
Es. 28
2 alla n
Scrivere una funzione ricorsiva che calcoli la potenza 2^n.
Es. 29
Ricorsione da funzione matematica
Scrivere una funzione C++ che implementi la funzione F(N) così definita:
F(N)=1 se N <= 0,
F(N)=-1+4*F(N-1) + F(N-2), altrimenti.