Esercizi costruttore copia

Es 1. Creare la classe Dado che permette di rappresentare un dado a sei facce e che memorizza la faccia superiore del dado; all’iinterno della classe creare il metodo lancia che permette i lanciare il dado e cambiare la facce superiore. Creare all’interno della classe un costruttore copia che dato un dado ne crea un altro con il valore della faccia superiore aumentato di uno, qualora il valore della faccia superiore del dado da copiare sia 6, il nuovo dado avrà come faccia superiore 1.
Creare un main in cui si crea un dado e poi creare altri tre dadi con i valori della faccia superiore successivi a quello del dado iniziale.
Soluzione C++

Es 2. Creare la classe Alieno, gli alieni si riproducono per clonazione, ogni alieno è caratterizzato da un numero intero che rappresenta la sua generazione e da un numero che rappresenta la generazione dell’alieno da cui è stato clonato; ogni alieno è caratterizzato inoltre dal numero di arti e di occhi. Un alieno clonato da un altro avrà lo stesso numero di arti e di occhi di quello originale.
Creare la classe Alieno con l’opportuno costruttore copia.
Creare poi un alieno e tre generazioni di alieni successivi.

8 Esercizi in C++ con sole sequenze di istruzioni

I seguenti esercizi svolti di programmazione in C++ sono semplici esercizi introduttivi, pensati come i primi esercizi da svolgere dopo aver imparato i primissimi rudimenti del C++ e prevedono di realizzare semplici programmi utilizzando solo sequenze di istruzioni, variabili e loro lettura e scrittura, senza l’ausilio di ulteriori costrutti quali if, while, do while e for, per esercizi su quegli argomenti si rimanda alle specifiche pagine esercizi con la selezione (if), esercizi con l’iterazione definita (for), esercizi con l’iterazione indefinita (while e do while).

Esercizio 1 – Sconto
Fatto inserire all’utente un Calcolo percentuale di sconto, prezzo pieno prezzo scontato e sconto.
(Se usi i numeri interi attenzione alle divisioni in C++)
Soluzione esercizio 1 in C++

Esercizio 2 – Quadrato e cubo
Fatto inserire all’utente un numero scrivere un programma che calcoli e comunichi all’utente il quadrato e il cubo del numero inserito.
Soluzione esercizio 2 in C++

Esercizio 3 – Parallelepipedo
Fatto inserire all’utente le dimensioni di un parallelepipedo scrivere un programma che ne calcoli e restituisca all’utente il volume e l’area delle superfici.
Soluzione esercizio 3 in C++

Esercizio 4- Caramelle
Dato un numero di caramelle da dividere per un certo numero di amici, che ne devono ricevere tutti lo stesso numero, dire quante caramelle verranno date a testa e quante ne rimangono non distribuite.
(Attenzione alle divisioni in C++)
Soluzione esercizio 4 in C++

Esercizio 5 – Scambio di 3 variabili
Richiedi all’utente di inserire tre numeri interi e memorizzali in tre variabili chiamate a b c, fai un programma che ne scambi il contenuto in modo che alla fine dell’esecuzione ogni variabile contenga quanto inizialmente presente nella variabile chiamata con la lettera precedente in ordine alfabetico, ad esclusione della a che conterrà il contenuto di quanto inizialmente presente in c.
Soluzione esercizio 5 in C++

Esercizio 6 – Carattere precedente
Fatto inserire all’utente un carattere stampare il carattere precedente nella tabella ASCII.
(L’esercizio prevede la conoscenza del tipo di variabili char)
Soluzione esercizio 6 in C++

Esercizio 7 – Ordine alfabetico
Fatta inserire all’utente una lettera minuscola dell’alfabeto dire la sua posizione in ordine alfabetico (ad esempio se viene inserita la a viene restituito 1 se viene inserita la b viene restituito 2).
Soluzione esercizio 7 in C++

Esercizio 8 – Scambio di due variabili senza variabili aggiuntive
Fai inserire due valori all’utente e memorizzali nelle variabili x e y, poi scambiane il contenuto senza usare altre variabili.
Soluzione esercizio 8 in C++

Come si fa la radice quadrata in C++

In questo articolo vedremo come calcolare la radice quadrata in C++ con la funzione predefinita e già pronta nelle librerie di C++.

Per poter calcolare la radice quadrata è necessario importare la libreria delle funzioni matematiche cmath, per importare la liberria è necessario inserire all’inizio del programma l’istruzione

#include<cmath>

Una volta importata la libreria si può usare tranquillamente la funzione sqrt per calcolare la radice quadrata, la funzione sqrt prende come parametro un numero con la virgola e ne restituisce un altro con la virgola.

Il seguente programma di esempio fa inserire all’utente un numero con la virgola e ne calcola e restituisce la radice quadrata.

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
   float n;
   cin>>n;
   float r=sqrt(n);
   cout<<r;
}

Prova il programma per calcolare la radice quadrata di un numero scritto qui sopra.

Curiosità: Perchè la funzione per calcolare la radice quadrata si chiama sqrt?

Si chiama così perché in inglese radice quadrata si dice square root, square vuol dire quadrato e root vuol dire radice, tenendo solo le consonanti viene fuori effettivamente sqrt, sapendolo si può anche ricordare più facilmente il nome di questa funzione.

immagine col codice per generare un numero casuale compreso tra 1 e 100 in C++

Numero casuale da 1 a 100, come generarlo in C++

La generazione di un numero casuale da 1 a 100 o random (all’inglese) in C++ è alla portata anche dei programmatori alle prime armi.
Qui sotto il codice del programma che lo realizza, seguita dalla sua spiegazione.

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

//IL PROGRAMMA SCRIVE UN NUMERO INTERO CASUALE COMPRESO TRA 1 E 100

int main()
{
 srand(time(NULL));//inizializza i valori
 cout<<rand()%100+1<<endl; //STAMPA UN NUMERO COMPRESO TRA 1 E 100
}

Perché rand()%100+1 ?

Partiamo dal fatto che la funzione rand() genera un numero casuale tra 0 e RAND_MAX (32767).
Con l’istruzione rand()%100 si calcola un numero casuale tra 0 e 99, (ricordo che il simbolo % serve per calcolare il resto della divisione intera),
infine rand()%100+1 calcola un numero casuale tra 1 e 100 perchè somma 1 a un numero casuale tra 0 e 99 quindi sostanzialmente trasla avanti di un’unità l’intervallo dei numeri casuali calcolati.

Come funziona? Qualche nota tecnica

All’inizio del programma le istruzioni #include<ctime> e #include<cstdlib> permettono di importare le librerie cstdlib e ctime che ci mettono a disposizione le funzioni per generare numeri casuali che useremo.

L’istruzione srand (time(NULL)) inizializza il generatore di numeri casuali, se volete approfondire leggete qui sotto, altrimenti saltate pure le prossime righe.

La funzione time(NULL) ritorna il valore in secondi  tra il momento di avvio del programma e il 1/1/1970.
L’istruzione srand (time(NULL)) inizializza il generatore di numeri casuali che verrà usato dalla funzione rand() in modo che a ogni esecuzione generi numeri diversi, l’istruzione srand deriva il suo nome dall’abbreviazione di start random e inizializza la generazione di numeri casuali a partire dal valore che le viene passato.

immagine col codice per generare un numero casuale compreso tra 1 e 100 in C++

Generare numeri casuali in un intervallo

Vai su questo link se invece vuoi imparare a generare numeri casuali interi in un intervallo.

Esercizi sui numeri casuali

Ora se hai capito mettiti alla prova con alcuni esercizi sui numeri casuali che troverai seguendo il link.

28 Esercizi con matrici (array bidimensionali)

Seguono 28 esercizi con gli array bidimensionali (o matrici) in C++, affrontabili anche con altri linguaggi di programmazione quali ad esempio: C, Java, Python, Pascal.
Gli esercizi tuttavia sono svolti in C++, le soluzioni sono linkate sotto ogni esercizio.

Per ripassare la teoria vai all’articolo matrici (array bidimensionali)  in C++.
Se invece cerchi esercizi con gli array classici vai alla pagina esercizi con array.

Es 0. Letta un array bidimensionale 9 per 9 e letto un ulteriore numero n, verificare se n è presente all’interno della matrice.
(Soluzione C++)

Es 1. Memorizzare in un array bidimensionale 10 x 10 la tavola pitagorica, quella delle tabelline, e stampare il contenuto della matrice (nella prima riga si dovrà trovare la tabellina del 1: 1 2 3 4 5 6 7 8 9 10).
(Soluzione C++)

Es 2. Memorizzare in un array bidimensionale 10 x 10 dei numeri casuali compresi tra zero e nove, stamparne il contenuto e dire quanti zeri sono memorizzati all’interno dell’array (per ripassare come generare numeri vai al link).
(Soluzione C++)

Es 3. Memorizzare in un array bidimensionale 5 per 5 tutti zeri tranne nelle celle della diagonale principale dove memorizzare uno (non usare l’inizializzazione con parentesi grafe nemmeno per gli zeri)
ovvero:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
(Soluzione C++, Soluzione C++ alternativa)

Es 4. Memorizzare una matrice di dimensioni 6×6 e verificare se è “somma-palindroma-per-riga” ovvero se la somma degli elementi nella prima riga è uguale alla somma degli elementi nell’ultima, se la somma degli elementi della seconda è uguale a quella degli elementi della penultima, ecc.
(soluzione C++ con array di appoggio, soluzione C++ senza array di appoggio)

Es 5. Data una matrice 4×4 di interi trovare la riga o la colonna con somma più alta.
(soluzione C++)

Es 6. Data una matrice 5×5 di interi e due numeri interi n e m verificare se tutte le celle della matrice hanno valori compresi tra n e m.
(soluzione C++)

Es 7. Verificare se una matrice 8×8 di interi è una “scacchiera” ovvero se vi sono presenti solo 0 e 1 alternati tra loro.
(soluzione C++)

Es 8. Data una matrice 9×9 verificare se la somma delle celle delle due diagonali è uguale.
(soluzione C++)

Es 9. Data una matrice 6×6 verificare se è simmetrica rispetto alla diagonale principale.
(per diagonale principale si intende quella che va dall’elemento [0][0] all’elemento [5][5])
Una matrice si dice simmetrica rispetto rispetto alla diagonale principale se è uguale alla sua trasposta.
La trasposta di una matrice si ottiene prendendo in ordine le righe della matrice originale e facendole diventare le colonne della matrice trasposta.
(soluzione C++)

Es 10. Data una matrice 5×5 di interi verificare se rispetta la seguente proprietà: il contenuto di ogni cella non deve essere maggiore di quello delle celle nelle righe e/o nelle colonne successive.
(soluzione C++)

Es 11. Verificare se una matrice 6×6 è la matrice identità (la matrice identità è formata da zeri su tutte le celle tranne quelle della diagonale dove ci sono uni).
(soluzione C++)

Es 12. Verificare se in una matrice 5×5 in ogni cella è memorizzato il prodotto dei suoi indici di riga e di colonna.
(soluzione C++)

Es 13. Verificare se in una matrice 5×5 ogni cella è uguale alla somma delle celle che la precedono sulla stessa riga.
(soluzione C++)

Es 14. Verificare se tutte le celle dei “bordi” di una matrice 6×6 contengono lo stesso valore (per bordi di una matrice si intendono la prima e l’ultima riga e la prima e l’ultima colonna).
(soluzione C++)

Es 15. Date due matrici 4×4 calcolarne la somma (la somma tra matrici si calcola sommando i contenuti delle celle nella stessa posizione).
(soluzione C++)

Es 16. Data una matrice 5×5 verificare se la somma delle celle sopra la diagonale principale è maggiore della somma delle celle sotto la diagonale principale.
(soluzione C++)

Es 17. Memorizzare in una matrice 8×8 delle cornici una di zeri e di uni alternate tra loro, usando al massimo due for, alla fine stampare la matrice.
(soluzione C++)

Es 18. Data una matrice m1 5×5 memorizzare in ogni cella di una matrice m2 5×5 la somma di tutte le celle della matrice m1 che non abbiano gli stessi indici di riga o colonna della cella in oggetto.
(soluzione C++)

Es 19. Data una matrice 8×8 riempirla con numeri casuali compresi tra zero e uno, e verificare se in ogni riga c’è un numero di uni pari a quello della riga precedente.
(soluzione C++)

Es 20. Una matrice 5×5 rappresenta il numero di punti realizzati da dei giocatori di basket in un piccolo torneo, in ogni riga c’è il totale dei punti realizzati da un giocatore in per ogni partita, in ogni colonna ci sono i punti realizzati dai giocatori in una specifica partita.
Stampare il numero di punti realizzati nella partita in cui sono stati fatti più punti dal giocatore che nel totale delle partite ha realizzato più punti.
(Per semplicità si consideri che non ci siano giocatori con lo stesso numero di punti o partite con lo stesso numero di punti totali).
(soluzione C++)

Es 21. Letta una matrice M di dimensione 4×2 e una matrice N di dimensioni 2×4 calcolare la matrice P data dal calcolo del prodotto tra le matrici M e N. La matrice P avrà tante righe quante la prima e tante colonne quanto la seconda matrice, per calcolare il contenuto della cella P[i][j] si calcola il prodotto tra vettori tra la riga i-esima della prima matrice per la colonna j-esima della seconda matrice.
Il prodotto tra due vettori V e W si calcola facendo la somma dei prodotti delle celle che si trovano nelle stessa posizioni nei due vettori (se V e W hanno dimensione 3, il loro prodotto sarà V[0]*W[0]+V[1]*W[1]+V[2]*W[2].
(soluzione C++)

Es 22. Letta una matrice M di dimensione 5×5 e un numero naturale n, calcolare la potenza ennesima di M, usando il prodotto tra matrici come spiegato nell’esercizio precedente.

Es 23. Scrivi un programma che letta una matrice 6 per 6 trasla gli elementi delle righe pari avanti di una colonna, riportando l’ultimo elemento della riga come primo.

Es 24. Scrivi un programma che verifica se in una matrice 7 per 7 ci sono prevalentemente zeri.

Es 25. Scrivi un programma che calcola la somma degli elementi maggiori di ogni riga di una matrice  6 per 6.

Es 26. Letta una matrice 8 per 8, si calcoli il prodotto degli elementi che si trovano sotto la diagonale principale della matrice.

Es 27. Trovare l’elemento minimo di una matrice 8 per 8 e dire tutte le coordinate delle celle in cui si trova quel valore.

15 Esercizi con le stringhe in C++

Seguono alcuni esercizi di programmazione sulle stringhe, risolvibili in C++, ma anche in altri linguaggi di programmazione come C, Pascal, Java o Python.
In C++ si possono risolvere sia usando la classe e la libreria String, sia lavorando con le stringhe come array di caratteri char, nel qual caso si consideri tranquillamente che le stringhe negli esercizi proposti siano al massimo lunghe al massimo 20 caratteri.
Per ripassare la teoria prima di affrontare gli esercizi si rimanda alla pagina: stringhe come array di caratteri in C++.

  1. A.Leggi una stringa e trasformane le lettere minuscole in maiuscole.
    Soluzione in C++
    B. Leggi una stringa e trasformane le lettere minuscole in maiuscole e viceversa.
    Soluzione in C++
  2. Leggi una stringa e determina quanto è lunga.
    Soluzione in C++
  3. Leggi una stringa e un carattere e conta quante volte quel carattere è contenuto nella stringa.
    Soluzione in C++
  4. Leggi una stringa e determina quante vocali contiene.
    Soluzione in C++
  5. Leggi due stringhe e verifica quale è più lunga.
    Soluzione in C++
  6. Leggi due stringhe e stampa per quante lettere fanno rima.
    Soluzione in C++
  7. Leggi una stringa e verifica se è palindroma.
    Soluzione in C++
  8. Leggi una stringa e verifica se contiene doppie.
    Soluzione in C++
  9. Leggi una stringa e verifica che non ci siano caratteri ripetuti in essa.
    Soluzione in C++
  10. Leggi una stringa e stampa qual è il carattere ripetuto più volte all’interno della stringa.
    Soluzione in C++
  11. Date due stringhe verificare quanti caratteri hanno in comune, se un carattere compare due volte in entrambe le stringhe lo si conti due volte.
    (soluzione C++)
  12. Date due stringhe verificare quanti caratteri diversi tra loro hanno in comune, se un carattere compare due volte in entrambe le stringhe lo si conti una volta.
    (soluzione C++)
  13. Leggere una stringa e contare quanto caratteri diversi tra loro contiene.
    (soluzione C++)
  14. Leggi due stringhe e verifica se una è una sottostringa dell’altra (ovvero se è contenuta nell’altra).
    (soluzione C++)
  15. Leggi una stringa e verifica che sia composta solo da caratteri che compaiono più volte.
    (soluzione C++)

Esercizio 4 do while – iterazione indefinita (nuova serie)

Testo esercizio sull’iterazione indefinita:

Leggere una serie di numeri interi passati dall’utente, fermandosi al primo numero che rende la serie non crescente e restituendo quanti numeri erano stati inseriti.

Video con la spiegazione della soluzione dell’esercizio in C++

Codice della soluzione

es 4 do while nuovo iterazione indefinita
Codice eseguibile della soluzione dell’esercizio in C++

 

Codice eseguibile della soluzione dell’esercizio in C++

Esercizio 3 iterazione indefinita while (nuova serie)

Testo esercizio:
Mario è uno studente che ha una quantità di soldi stabilita dall’utente, ogni giorno Mario all’intervallo può acquistare al bar della scuola una pastina che costa 1 euro o un panino che costa 1,5 euro.
Il programma continua a chiedere all’utente cosa mangerà Mario quel giorno finché ha abbastanza soldi o non ha la possibilità di soddisfare il suo appetito con quello che vuole.
Al termine del programma scrivere in output il numero di giorni in cui Mario ha mangiato e quante volte ha mangiato una pastina e quante un panino.

Video spiegazione

Codice Soluzione

es 3 while nuovo iterazione indefinita
Codice soluzione in C++ eseguibile

Codice soluzione in C++ eseguibile

esercizio 7 iterazione indefinita in C++

esercizio 7 sul while (iterazione indefinita)
testo esercizio:
Si scriva un programma in C++ che letto un numero naturale N tramite sottrazioni successive di 128 lo porti a un numero compreso tra 0 e 127 inclusi e scriva in output il carattere ASCII corrispondente.
Nelle prove si ricordi che i caratteri della tabella ASCII tra 0 e 31 non sono caratteri stampabili.

soluzione video in C++:

codice eseguibile soluzione esercizio C++

es 6 iterazione indefinita while C++ carattere per sottrazioni successive
codice C++ soluzione esercizio