#include <iostream>
using namespace std;
int main() {
int N, i;
const int C = 10;
cout << "Inserisci un numero: ";
cin >> N;
for (i = 0; i < C; i++) {
if (N % 2 != 0) {
N--;
}
N += 2;
cout << N << "\t";
}
return 0;
}
Proponiamo un’altra esercitazione sul for in C++.
Secondo esempio
Stampare i primi X numeri dispari successivi al numero N.
In realtà questo algoritmo è una variazione al precedente esercizio, in cui stavolta chiederemo noi quanti successivi vogliamo calcolare.
Analizziamo le variabili che ci occorrono.
N – Il numero intero da prendere in input.
i – La variabile contatore da utilizzare nel ciclo for.
X – Quanti numeri dispari visualizzare.
Dopo aver dichiarato le variabili che ci servono, chiediamo di inserire N ed X. Chiaramente in questo caso occorre fare un controllo che X sia maggiore di zero.
Poi controlliamo il numero e se è pari, lo trasformiamo in dispari sottraendo 1. Realizziamo poi un ciclo for che aggiunge 2 al numero X volte.
#include <iostream>
using namespace std;
int main() {
int N, i, X;
cout << "Inserisci un numero: ";
cin >> N;
do {
cout << "Quanti successivi vuoi visualizzare?: ";
cin >> X;
} while (X <= 0);
for (i = 0; i < X; i++) {
if (N % 2 == 0) {
N--;
}
N += 2;
cout << N << "\t";
}
return 0;
}
Questa è una semplice esercitazione sul for in C++, nella prossima lezione proporrò tanti altri esempi.
In questa lezione realizzeremo un algoritmo sui numeri amicabili in C++, ovvero quei due numeri per i quali la somma dei divisori propri dell’uno è uguale all’altro e viceversa.
Per divisori propri si intendono tutti i divisori tranne il numero stesso.
Facciamo un esempio di numeri amicabili, considerando i numeri 220 e 284.
Il numero 220 ha come divisori propri: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 e 110.
Se sommiamo questi divisori otteniamo il numero 284.
Allo stesso modo, prendiamo il numero 284, questo ha come divisori: 1, 2, 4, 71, 142. Sommandoli otteniamo il numero 220.
Prendere in input due numeri e visualizzare sullo schermo se sono amicabili.
Innanzitutto dichiariamo le variabili che ci servono:
a, b – Sono le due variabili intere che indicano i numeri per cui vogliamo verificare l’ipotesi iniziale.
div– Rappresenta il divisore che, partendo da 1, verrà incrementato opportunamente all’interno dei cicli.
s – Rappresenta la variabile che contiene la somma dei divisori.
Dopo aver dichiarato le variabili, chiediamo all’utente di inserirle in input, poi impostiamo il div a 1 e la somma a 0 (ciò si poteva fare anche prima).
Impostiamo nel ciclo while la condizione che div sia minore o uguale al primo numero. Dunque, finché questa condizione è vera, troviamo tutti i divisori di un numero e li sommiamo nella variabile s.
Dopo controlliamo se la somma così ottenuta è uguale al primo numero.
Se ciò è verificato allora procediamo a trovare i divisori del secondo numero e confrontiamo se la loro somma è uguale al primo numero.
Solo se questa condizione è verificata allora i due numeri sono amicabili.
Ecco dunque il codice completo che rappresenta l’algoritmo sui numeri amicabili in C++:
#include <iostream>
using namespace std;
int main() {
int a, b, div, s;
cout << "Inserisci un numero: ";
cin >> a;
cout << "Inserisci il secondo numero: ";
cin >> b;
div = 1;
s = 0;
while (div <= a / 2) {
if (a % div == 0) {
s += div;
}
div++;
}
if (s == b) {
div = 1;
s = 0;
while (div <= b / 2) {
if (b % div == 0) {
s += div;
}
div++;
}
if (s == a) {
cout << "I due numeri sono amicabili";
} else {
cout << "I numeri non sono amicabili";
}
} else {
cout << "I numeri non sono amicabili";
}
return 0;
}
Chiaramente si poteva procedere in altri modi per trovare la soluzione all’algoritmo sui numeri amicabili in C++, proponete pure la vostra nei commenti sotto.
Sviluppiamo un programma sui numeri primi in C++, utilizzando i cicli for, while e do-while spiegati nelle scorse lezioni.
Primo esempio – Numeri primi in C++
Inserire un numero e verificare se può essere un numero primo.
Innanzitutto pensiamo alle variabili che ci servono e le dichiariamo:
n – Il numero da verificare.
div – Il divisore del numero.
i – La variabile contatore del ciclo dor.
conta– Una variabile che conta i divisori.
Dopo aver dichiarato le variabili, assegniamo a div il valore 1, cioè partiamo a dividere per 1. Alla variabile conta assegniamo il valore 0.
Poi chiediamo all’utente di inserire un numero.
Per controllare se è primo realizziamo un ciclo while che termina quando il divisore è minore o uguale alla metà del numero, in quanto dividere un numero per una quantità maggiore della sua metà dà comunque un numero con la virgola. Possiamo anche impostare un’altra condizione in modo da risparmiare molto più tempo, ovvero quando il contatore raggiunge 2.
Infatti un numero primo ha come divisore 1 e se stesso, quindi in tutto ha due divisori. Dato che nell’algoritmo non divideremo il numero per se stesso allora, appena il contatore diventa 2, usciremo dal ciclo, in quanto siamo sicuri che il numero non può essere primo.
Al termine se conta vale 1, cioè se ha trovato solo un divisore, allora il numero è primo.
Ecco dunque l’algoritmo sui numeri primi in C++:
int main() {
int n, div = 1, conta = 0;
do {
cout << "Inserisci un numero: ";
cin >> n;
} while (n < 1);
while (conta <= 1 && div <= n / 2) {
if (n % div == 0) {
// se trova divisori incrementa il contatore dei divisori
conta++;
}
div++;
}
if (conta == 1) {
cout << "Il numero è primo\n";
} else {
cout << "Il numero non è primo\n";
}
return 0;
}
Chiaramente potevano esserci tante altre soluzioni, proponete pure la vostra.
Secondo esempio
Il secondo esempio in realtà è una variante del primo.
Inserire N numeri e contare quanti numeri primi sono stati inseriti.
Chiediamo di inserire N e facciamo un controllo dell’input.
Dopo utilizziamo un ciclo for per inserire gli N numeri. Per ogni numero verifichiamo se è primo con lo stesso metodo dell’esercizio 1.
Poi controlliamo se conta è uguale a 1. Se vero, allora il numero è primo e incrementiamo dunque il contatore dei numeri primi.
Riportiamo i valori di conta e div alla situazione iniziale e continuiamo a iterare. Al termine visualizzo il contatore dei numeri primi.
Ecco dunque l’algoritmo completo sui numeri primi in C++:
#include <iostream>
using namespace std;
int main() {
int n, N, div = 1, conta = 0, contaprimi = 0;
do {
cout << "Quanti numeri vuoi inserire? : \t";
cin >> N;
} while (N <= 0);
for (i = 0; i < N; i++) {
cout << "Inserisci un numero: ";
cin >> n;
while (conta < 3 && div <= n / 2) {
if (n % div == 0)
conta++;
div++;
}
if (conta == 1) {
contaprimi++;
}
conta = 0;
div = 1;
}
cout << "I numeri primi inseriti sono: " << contaprimi;
return 0;
}
In questa lezione costruiremo un convertitore decimale binario in C++, al fine di convertire i numeri del sistema decimale in numeri binari.
Algoritmo per costruire un convertitore decimale binario in C++
Per realizzare questo algoritmo occorre rivedere come avviene la conversione da un sistema all’altro.
Ricordiamo dunque che per passare da un sistema decimale ad uno binario occorre dividere per 2, fino ad arrivare a 0, e considerare i resti delle divisioni.
Facciamo dunque un esempio, supponiamo di convertire il numero 38 da decimale a binario:
Leggendo dal basso verso l’alto si ottiene così la sequenza binaria: 100110, così come potete calcolare anche nel convertitore online che ho realizzato con JavaScript.
Dunque ragioniamo su come realizzarlo adesso in C++.
Potremmo utilizzare gli array, ma sono delle strutture che ancora non vi ho presentato, dunque oggi utilizzeremo le stringhe, lasciando la soluzione con l’array per un’altra lezione.
Le variabili che ci servono per realizzare il convertitore decimale binario in C++ sono:
string b – Che rappresenta la stringa che conterrà il numero binario, derivante dalla conversione.
Dopo aver dichiarato le variabili, inizializziamo b alla stringa vuota.
Poi costruiamo il ciclo while, impostando come condizione che n sia maggiore di zero.
Quindi finché n è positivo cominciamo a dividerlo per 2, se il resto della divisione è zero allora aggiungiamo 0 all’inizio della stringa b. Altrimenti aggiungiamo 1 sempre all’inizio di b.
Abbiamo così ottenuto il nostro numero in binario.
Ecco dunque il listato in C++:
#include <iostream>
#include <string>
using namespace std;
int main() {
int n;
string b = "";
cout << "Inserisci un numero decimale: ";
cin >> n;
while (n > 0) {
if (n % 2 == 0)
b = '0' + b;
else
b = '1' + b;
n = n / 2;
}
cout << b;
return 0;
}
Questa, come vi dicevo, è solo una possibile realizzazione del convertitore decimale binario in C++, proponete pure il vostro metodo.
Ecco dunque il listato completo dell’algoritmo sull’esercizio con il for in C++:
#include <iostream>
using namespace std;
int main() {
int N, min, n, pos, i;
do {
cout << "Quanti numeri vuoi inserire? : \t";
cin >> N;
} while (N <= 0);
cout << "Inserisci un numero : \t";
cin >> min;
pos = 1;
for (i = 1; i < N; i++) {
cout << "Inserisci un numero : \t";
cin >> n;
if (n < min) {
min = n;
pos = i + 1;
}
cout << pos << endl;
}
cout << "Il minimo e' " << min << ", numero ordine: " << pos;
return 0;
}
Esercizio 2
Date N coppie di numeri interi contare e stampare quelle che hanno i valori l’uno l’opposto dell’altro.
Innanzitutto al solito dichiariamo le variabili che ci servono per la realizzazione del seguente algoritmo:
a, b– Variabili che rapprensentano le coppie di numeri.
N – Quantità di coppie di numeri da inserire.
i– La variabile contatore del ciclo for.
Dopo la dichiarazione delle variabili, chiediamo di inserire N e facciamo un controllo che sia maggiore di zero.
Poi con un ciclo for inseriamo le coppie di numeri e controlliamo se a=-b. Solo se questa condizione è vera stampiamo i numeri a e b.
Ecco dunque l’algoritmo completo in C++:
#include <iostream>
using namespace std;
int main() {
int N, a, b, i;
do {
cout << "Quanti numeri vuoi inserire? : \t";
cin >> N;
} while (N <= 0);
for (i = 0; i < N; i++) {
cout << endl << "Inserisci il primo numero : \t";
cin >> a;
cout << "Inserisci il secondo numero : \t";
cin >> b;
if (a == -b) {
cout << endl << "I valori sono opposti: " << a << "\t" << b << endl;
}
}
return 0;
}
Queste sono solo delle possibili soluzioni agli esercizi con il for in C++, proposti in questa lezione, provate pure a trovarne delle altre.
Commenti recenti