Esercitazione sul for in C++

Esercitazione sul for in C++

Proponiamo in questa lezione un’esercitazione sul for in C++, al fine di apprendere meglio il funzionamento di questo costrutto.

Primo esercizio – Esercitazione sul for in C++

Scrivi i dieci numeri pari successivi al numero intero N.

Quindi analizziamo le variabili che ci serviranno:

N – Il numero intero da prendere in input.

i – La variabile contatore da utilizzare nel ciclo for.

C – La costante che rappresenta in questo caso il valore 10.

Quindi dopo aver dichiarato le variabili, impostiamo la costante C.

Dopo chiediamo in input il numero N. Se N è dispari lo rendiamo pari semplicemente sottraendo il numero 1.

Dunque con il ciclo for calcoliamo i 10 numeri pari successivi ad N.

Ecco dunque il codice completo:

#include <iostream>
using namespace std;

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.

Ecco dunque il codice completo:

#include <iostream>
using namespace std;

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.

Alcuni link utili

Indice argomenti linguaggio C++

1- Introduzione al linguaggio C++

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++

Numeri amicabili in C++

Numeri amicabili in C++

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.

Ecco dunque che i numeri 220 e 284 sono amicabili

Algoritmo per i numeri amicabili in C++

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;

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.

Alcuni link utili

Indice argomenti linguaggio C++

1- Introduzione al linguaggio C++

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++

Numeri primi in C++

Numeri primi in C++

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 e' primo\n ";
	} else
 {
	   cout<<"Il numero non e' 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, i=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;	
}

Alcuni link utili

Indice argomenti linguaggio C++

1- Introduzione al linguaggio C++

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++

Convertitore decimale binario in C++

Convertitore decimale binario in C++

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:

38:2=19  resto 0

19:2=9 resto 1

9:2=4 resto 1

4:2=2 resto 0

2:2=1 resto 0

1:2=0 resto 1

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:

int n – Che rappresenta il numero da convertire.

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>
using namespace std;

main() {
	int n;
	
	string b;
	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;	
		
}

Questa, come vi dicevo, è solo una possibile realizzazione del convertitore decimale binario in C++, proponete pure il vostro metodo.

Alcuni link utili

Indice argomenti linguaggio C++

1- Introduzione al linguaggio C++

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++

Esercizi con il for in C++

Esercizi con il for in C++

In questa lezione presento dei semplici esercizi con il for in C++, con lo scopo di esercitarci su quanto appreso finora.

Primo esercizio – Esercizi con il for in C++

Dati N numeri determinare il minimo, cioè il valore più piccolo tra quelli incontrati, indicandone il numero d’ordine.

Quindi definiamo le variabili che ci servono:

N – La variabile intera che rappresenta la quantità dei numeri da inserire.

min – La variabile intera che contiene il valore minimo.

i – La variabile contatore per il ciclo for. Ovviamente il contatore deve essere un intero.

pos – La variabile intera che indica il numero d’ordine del valore minimo.

Dopo avere dichiarato le variabili occorre prendere in input N e controllare che sia maggiore di zero.

Poi inseriamo il primo numero e lo assegniamo alla variabile min.

Quindi realizziamo un ciclo for per i che va da 1 a N che di volta in volta ricerca il valore minimo.

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.

Alcuni link utili

Indice argomenti linguaggio C++

1- Introduzione al linguaggio C++

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++

Esempi con while in C++

Esempi con while in C++

In questa lezione proponiamo altri esempi con il while in C++, prima di passare al ciclo for.

Esempi con while in C++

Scrivere un programma che, leggendo due numeri interi, sottrae il minore dal maggiore finché la loro differenza diventa inferiore a 3 unità, visualizzando sullo schermo il risultato di ogni iterazione.

Per la realizzazione del seguente algoritmo in C++, ci serviranno le seguenti variabili:

int a, b – Le variabili che contengono i due valori che dobbiamo inserire in input.

int d – La variabile che contiene la differenza tra le due variabili.

int temp – La variabile che serve per lo scambio dei valori, qualora a fosse minore di b.

Innanzitutto inseriamo i valori interi a e b e dopo controlliamo se a è maggiore di b. Se ciò è vero effettuiamo uno scambio di variabili ponendo in a il valore di b e in b il valore di a. Così posso effettuare la sottrazione: d=a-b.

Poi impostiamo la condizione del while. Finchè d è maggiore o uguale a 3 continuiamo a sottrarre il numero b a d. Ad ogni iterazione stampiamo il risultato ottenuto.

Ecco dunque una possibile risoluzione dell’algoritmo proposto in C++:

#include <iostream>
using namespace std;

int main() {
	int a, b, d, temp;
	
	cout<<"Inserisci a: ";
	cin>>a;
	
	cout<<"Inserisci b: ";
	cin>>b;
	
	if (a<b){
		temp=a;
		a=b;
		b=temp;	
	}

	d=a-b;
	
	while (d>=3) {
		d=d-b;
		cout<<d<<endl;
	}
        return 0;
}

Secondo esempio

Leggere da tastiera una sequenza di lunghezza ignota a priori di numeri interi positivi, il programma termina quando si inserisce un numero negativo. Per ogni numero introdotto stampare la media progressiva.

Innanzitutto dichiariamo le varibili necessarie:

int n – Rappresenta il numero inserito di volta in volta

int s – Rappresenta la variabile per la somma dei numeri

int i – Rappresenta il contatore dei numeri inseriti. Necessario per il calcolo della media.

float m – Rappresenta la media dei numeri inseriti.

Dopo aver dichiarato le variabili, inseriamo un numero e assegniamo alla somma il valore di questo numero.

Poi creiamo il ciclo while dove impostiamo la condizione n>0. All’interno del ciclo sommiamo i numeri e calcoliamo la media stampandola di volta in volta. Per stampare il valore decimale della media, facciamo un’operazione di casting, come spiegato nella lezione: casting in c++.

Ecco dunque una possibile risoluzione:

#include <iostream>
using namespace std;

int main() {
	int n, s, i=1;
	
	float m;
	
	cout<<"Inserisci n: ";
	cin>>n;
	
	s=n;
	
	while(n>0) {
		cout<<"Inserisci n: ";
		cin>>n;
		i++;
		s+=n;
		m=float(s)/i;
		cout<<"Media: "<<m<<endl;
	}
        return 0;
}

Questi sono solo alcuni esempi con il while in C++, nella prossima lezione affronteremo il ciclo for e compareremo i due costrutti, al fine di capire quando preferire l’uno all’altro.

Alcuni link utili

Indice argomenti linguaggio C++

1- Introduzione al linguaggio C++

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++