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++

Trovare il maggiore e quante volte ricorre in C++

Trovare il maggiore e quante volte ricorre in C++

Sviluppiamo un altro esempio per trovare il maggiore e quante volte ricorre in C++.

Trovare il maggiore e quante volte ricorre in C++, implementazione

Realizziamo l’algoritmo chiedendo all’utente quanti numeri vuole inserire.

Innanzitutto definiamo le variabili che ci servono per lo sviluppo del seguente algoritmo:

int N – Indica la quantità dei numeri da inserire. Su questa variabile faremo il controllo dell’input affinchè N sia maggiore di zero.

int n – Indica il numero che di volta in volta viene inserito.

int max – è la variabile dove memorizziamo il valore maggiore.

conta_max – è la variabile dove memorizziamo quante volte ricorre il massimo, cioè il valore maggiore.

int i – Infine i è la variabile contatore per il ciclo while, che inizializziamo a zero.


Procediamo adesso con lo sviluppo dell’algoritmo in C++.

Innanzitutto chiediamo quanti numeri vogliamo inserire, cioè il nostro N, e facciamo un controllo dell’input.

Quindi chiediamo di inserire un numero e lo assegniamo alla variabile max.

Perciò inizializziamo la variabile conta_max a 1.

Dopo utilizziamo il ciclo while, impostando la condizione i<N e all’interno implementiamo le istruzioni che servono per la ricerca del valore massimo.

Poi si inserisce un altro numero e lo si confronta col max. Se questo valore è maggiore allora si trova un nuovo max e dunque alla variabile conta_max assegno nuovamente il valore 1. Altrimenti se si trova un valore uguale al max, la variabile conta_max viene incrementata di 1.

Ecco dunque il codice completo:

#include <iostream>
using namespace std;

int main() {
	int i, N, max, n, conta_max;
    
        do{
    	        cout<<"Quanti numeri vuoi inserire? : \t";
		cin>>N;
	}while (N<=0);

	i=0;
	cout<<"Inserisci il primo numero: \t";
	cin>>max;
        conta_max=1;
	
	while(i<N-1) {
		cout<<"Inserisci il numero: \t";
		cin>>n;
	        if(n>max){
			max=n;
                        //se trova un nuovo max riporta la variabile a 1
			conta_max=1;
		}	
		else if (n==max)
			conta_max++;
		i++;
	}

	cout<<"Il massimo e' "<<max<<" ed e' stato inserito "<<conta_max<<" volte."<<endl;
return 0;
}

Possiamo anche evitare la variabile contatore i se usiamo la condizione while(N>1) e decrementiamo di volta in volta N di 1.

Ecco quindi una seconda soluzione:

#include <iostream>
using namespace std;

int main() {
	int N, max, n, conta_max=1;
    
        do{
    	        cout<<"Quanti numeri vuoi inserire? : \t";
		cin>>N;
	}while (N<=0);

	cout<<"Inserisci il primo numero: \t";
	cin>>max;
	
	while(N>1) {
		cout<<"Inserisci il numero: \t";
		cin>>n;
	        if(n>max){
			max=n;
			conta_max=1; 
                       //se trova un nuovo max riporta la variabile a 1
		}	
		else if (n==max)
			conta_max++;
		N--;
	}

	cout<<"Il massimo e' "<<max<<" ed e' stato inserito "<<conta_max<<" volte."<<endl;
return 0;
}

Questo era solo un esempio di possibile implementazione dell’algoritmo per trovare il maggiore e quante volte ricorre in C++.

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++