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.