Convertire da binario a decimale in C++

Convertire da binario a decimale in C++

In questa lezione implementeremo degli algoritmi per convertire da binario a decimale in C++, cioè il viceversa dell’algoritmo proposto nella lezione precedente.

Prima soluzione per convertire da binario a decimale in C++

Quindi utilizziamo innanzitutto un algoritmo che fa uso della funzione pow dell’header cmath, che dunque dobbiamo includere.

Allora per prima cosa prendiamo in input il numero binario da convertire. Dopo finché questo numero è maggiore di zero, eseguiamo delle istruzioni.

Se il resto della divisione di b per 10 è diverso da zero vuol dire che siamo in presenza di un 1. Altrimenti siamo in presenza di uno zero e facciamo sicuramente a meno di moltiplicarlo.

Quindi solo se il resto è 1 eseguiamo l’operazione d=d+pow(2,i), dove i viene inizializzato a zero e incrementato in ogni caso ad ogni iterazione.

Il numero binario ad ogni iterazione viene comunque diviso per 10.

Ecco dunque il codice dell’algoritmo per convertire da binario a decimale in C++:

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int b, d = 0, i = 0;
    
    cout << "Inserisci il numero binario da convertire: ";
    cin >> b;
    
    while (b > 0) {
        d += (b % 10) * pow(2, i);
        b /= 10;
        i++;
    }
    
    cout << "Il numero in decimale vale: " << d << endl;
    
    return 0;
}

Facciamo adesso un esempio prendendo in input il numero binario 101.

while(b > 0) {   // è vera in quanto 101 è maggiore di 0

      if(b % 10 != 0) {   (101 % 10 != 0) risulta vera quindi eseguiamo l’operazione

    d = d + pow(2,i);  // d = 0 + 2^0 = 1
}
b = b / 10;  // dividiamo b per 10, essendo una divisione tra interi b = 10
i++; //incrementiamo i che diventa 1

 }

Seconda iterazione:

while(b > 0) {   // è vera in quanto 110 è maggiore di 0

   if(b % 10 != 0) {  // (10 % 10 != 0) risulta falsa quindi non eseguiamo l’operazione

        d = d + pow(2,i); 
   }
b = b / 10;  // dividiamo b per 10, essendo una divisione tra interi b = 1
i++; //incrementiamo i che diventa 2

}

Terza iterazione:

while(b > 0) {   //è vera in quanto 1 è maggiore di 0

    if(b % 10 != 0) {   // (110 % 10 != 0) risulta falsa quindi non eseguiamo l’operazione

        d = d + pow(2,i);  // d = 1 + 2^2 = 5
    }
b = b / 10;  // dividiamo b per 10, essendo una divisione tra interi b = 0
i++; //incrementiamo i che diventa 3

}

Non viene fatta nessun’altra iterazione in quanto b > 0 diventa falsa.

Quindi stampiamo il numero decimale così ottenuto.

 


Seconda soluzione

La seconda soluzione, all’algoritmo per convertire da binario a decimale in C++, prevede invece di prendere in input cifra per cifra e dopo convertirla.

Inizialmente quindi inseriamo la lunghezza del numero binario.

Dopo con un ciclo while che itera finché n è diverso da 0, chiediamo di inserire ciascuna cifra facendo anche un controllo dell’input.

Quindi moltiplichiamo d per 2 e aggiungiamo il valore di b. Di volta in volta aggiorniamo quindi la variabile d.

Ecco dunque l’algoritmo completo:

#include <iostream>
using namespace std;

int main() {
    int d = 0, b, n;
    
    cout << "Inserisci il numero di bit da convertire: ";
    cin >> n;    
    
    while (n != 0) {
        do {
            cout << "Inserisci il bit, solo 0 o 1: ";
            cin >> b;
        } while (b != 0 && b != 1);
        
        d = d * 2 + b;
        n--;        
    }

    cout << "Valore decimale: " << d << endl;
    
    return 0;
}

Terza soluzione

Infine realizziamo una terza soluzione per convertire da binario a decimale in C++.

In questa soluzione utilizzeremo la funzione pow dell’header cmath e la funzione strlen dell’header string per trovare la lunghezza della stringa.

Utilizziamo il tipo di dato char per memorizzare il numero binario.

Inseriamo la sequenza di bit e dopo calcoliamo la lunghezza di b con la funzione strlen.

Infatti la lunghezza mi serve per determinare il numero di iterazioni da effettuare.

All’interno del ciclo while quindi di volta in volta controlliamo il carattere contenuto in b, se è 1 allora possiamo elevare 2 a len-1 (ricordiamo che le potenze partono da 0 fino a len-1) e aggiungerlo al valore precedente di d.

In ogni caso decrementiamo la lunghezza e incrementiamo l’indice i che serve a scorrere il numero binario.

Ecco quindi il codice completo della seconda soluzione per convertire da binario a decimale in C++:

#include <iostream>
#include <cstring>
#include <cmath>

using namespace std;

int main() {
    int d = 0, len;

    char b[10];

    cout << "Inserisci la sequenza di bit: ";
    cin >> b;
    len = strlen(b);

    int i = 0; // Inizializza l'indice i a 0

    while (len != 0) {
        if (b[i] == '1')
            d = d + pow(2, (len - 1));

        len--;
        i++; // Incrementa l'indice i
    }

    // Stampo a video la conversione
    cout << "\nValore decimale: " << d << "\n";

    return 0;
}

Adesso spieghiamo passo passo l’algoritmo:

Inseriamo b = 110

len = strlen(b);  // len = 3

while(len != 0) {  //vera

if (b[i] == ‘1’)  //vera  b[0] = 1 partendo da destra

d = d + pow(2,(len – 1));  //d = 0 + 2^2 = 4

len–; //len = 2

}

while(len != 0) {  //vera

if (b[i] == ‘1’)  //vera  b[1]=1

d = d + pow(2,(len – 1));  //d = 4 + 2^1 = 6

len–; //len = 1

i++; //i = 2

}

while(len != 0) {  //vera

if (b[i] == ‘1’)  //falsa

d = d  +pow(2,(len – 1));

len–; //len = 2

i++; //i = 1

}

Quindi stamperà d = 6.

Abbiamo visto quanti metodi diversi ci possono essere per convertire da binario a decimale 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++

for annidati

for annidati

Esercitiamoci con i for annidati, al fine di approfondire l’argomento.

Primo esercizio sui for annidati

Realizzare un programma in C++, che visualizzi 6 righe dove ciascuna riga contiene i numeri da 1 a 6, come da esempio sotto:
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6

Realizzare questo algoritmo è piuttosto semplice.

Innanzitutto inizializziamo le due variabili contatore i e j e la costante n.

Poi realizziamo i due cicli for annidati e per ogni iterazione del ciclo esterno eseguiamo un ciclo interno da 1 a 6, che di volta in volta stampa il valore di j.

#include <iostream>
using namespace std;

int main() {
    int i, j, n;
    n = 6;

    // Stampare una tabella di numeri da 1 a n per n righe
    for (i = 1; i <= n; i++) {
        for (j = 1; j <= n; j++) {
            cout << "\t" << j;
        }
        cout << endl;
    }
    return 0;
}

Modifichiamo adesso il programma proponendo un secondo esempio.

Secondo esempio

Realizziamo un programma in C++, che visualizzi 6 righe così come da esempio:
1 2 3 4 5 6
2 3 4 5 6
3 4 5 6
4 5 6
5 6
6

Innanzitutto dichiariamo le variabili i, j ed n. Dopo utilizziamo i due cicli for annidati. Il primo lo facciamo partire da 0 fino ad n-1, mentre il secondo da j ad n-i, così ogni volta sommiamo i + j.

Stampiamo così il risultato ad ogni iterazione del ciclo interno.

Ecco di seguito la possibile soluzione:

#include <iostream>
using namespace std;

int main() {
    int i, j, n;
    n = 6;

    // Stampare una tabella di numeri crescenti da i+1 a n per n righe
    for (i = 0; i < n; i++) {
        for (j = 1; j <= n - i; j++) {
            cout << "\t" << j + i;
        }
        cout << endl;
    }
    return 0;
}

Terzo esempio

Variamo l’esercizio precedente, producendo l’output come da esempio:
1 2 3 4 5 6
2 3 4 5 6 +
3 4 5 6 + +
4 5 6 + + +
5 6 + + + +
6 + + + + +

Cioè facciamo in modo da far apparire un simbolo al posto dei caratteri mancanti. Basta modificare il ciclo interno impostando j<=n e all’interno del ciclo controllare se j<=n-i allora stampare j+i, altrimenti stampare il carattere +.

Ecco dunque il codice di esempio:

#include <iostream>
using namespace std;

int main() {
    int i, j, n;
    n = 6;

    // Stampare una tabella di numeri crescenti da i + 1 a n per n righe
    // Inserire un "+" quando si supera la colonna n - i
    for (i = 0; i < n; i++) {
        for (j = 1; j <= n; j++) {
            if (j <= n - i) {
                cout << "\t" << j + i;
            } else {
                cout << "\t" << "+";
            }
        }
        cout << endl;
    }
    return 0;
}

Questi sono alcuni esempi sui cicli for annidati, nelle prossime lezioni 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++

Tavola pitagorica

Tavola pitagorica

In questa lezione realizzeremo la tavola pitagorica in linguaggio C++, in modo da applicare i cicli for annidati che abbiamo studiato nelle precedenti lezioni.

La tavola pitagorica è utilizzata in ambito scolastico per imparare le tabelline e ha, di solito, 10 righe e 10 colonne. Ciascuna riga o colonna viene detta tabellina.

Mi ricordo che nei miei vecchi quaderni di scuola si trovava nell’ultima pagina ed era formata da 12 righe e 12 colonne. Quindi l’ultima tabellina era quella del 12.

Ho già presentato un esempio della tavola pitagorica in C, utilizzando le matrici, visibile al link tavola pitagorica in C. Infatti una tavola pitagorica è una matrice di numeri naturali.

Ma in questa lezione vi propongo una soluzione molto semplice che fa un uso indiretto delle matrici, che affronteremo andando avanti nel tutorial.

Tavola pitagorica in C++

Realizziamo una tavola pitagorica di 10 righe e 10 colonne che visualizzi le tabelline dall’1 al 10.

Innanzitutto dichiariamo le variabili i e j e la costante n, pari a 10, perché 10 sono sia le righe che le colonne.

Dopo, per risolvere questo algoritmo, utilizzeremo due cicli for annidati, un ciclo esterno e uno interno che vanno da 1 a 10.

Poi, ad ogni ciclo esterno moltiplicheremo il contatore del ciclo esterno per quello del ciclo interno che varia da 1 a 10.

Cioè essendo i l’indice del ciclo esterno e j l’indice del ciclo interno, moltiplicheremo i x j:

Prima iterazione ciclo esterno i=1:

prima iterazione ciclo interno j=1: 1 x 1 = 1

seconda iterazione ciclo interno j=2: 1 x 2 = 2

terza iterazione ciclo interno j=3: 1 x 3 = 3

quarta iterazione ciclo interno j=4: 1 x 4 = 4

quinta iterazione ciclo interno j=5: 1 x 5 = 5

sesta iterazione ciclo interno j=6: 1 x 6 = 6

settima iterazione ciclo interno j=7: 1 x 7 = 7

ottava iterazione ciclo interno j=8: 1 x 8 = 8

nona iterazione ciclo interno j=9: 1 x 9 = 9

decima iterazione ciclo interno j=10: 1 x 10 = 10

Utilizziamo dunque endl per andare a capo e procediamo con la seconda iterazione del ciclo esterno dove i questa volta è uguale a 2 e j assumerà nuovamente i valori da 1 a 10.

 

Ecco dunque il codice che realizza la tavola pitagorica:

#include <iostream>
using namespace std;

main(){
	int i,j;
        const int n=10;
	
	for(i=1;i<=n;i++) {
		for(j=1;j<=n;j++)
			cout<<"\t"<<i*j;		
		cout<<endl;
	}
        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++

Cicli for annidati C++

Cicli for annidati C++

In questa lezione affronteremo i cicli for annidati in C++, cioè le iterazioni eseguite dentro un’altra iterazione.

Facciamo subito degli esempi per capire meglio il funzionamento.

Esempio sui cicli for annidati C++

Produrre un programma che mostri un rettangolo di 6 asterischi come base e 3 come altezza.

Quindi per risolvere questo problema abbiamo bisogno di due cicli, uno più esterno ed uno più interno.

Quando quello più esterno viene eseguito la prima volta, in quello più interno stamperemo i 6 asterischi, faremo cioè la prima riga.

Dopo andiamo a capo con un endl ed eseguiamo il ciclo esterno la seconda volta. Il ciclo interno è eseguito nuovamente 6 volte.

E così anche per la terza riga.

Abbiamo bisogno di due contatori, uno per il for esterno, l’altro per quello interno. Chiamiamo questi contatori per convenzione i e j.

Ecco dunque il codice di esempio per i cicli for annidati in C++:

#include <iostream>
using namespace std;

int main() {
    int i, j;

    for (i = 0; i < 3; i++) { 
        for (j = 0; j < 6; j++) {
            cout << " * ";
        }
        cout << endl;
    }           
    
    return 0;
}

Ecco l’algoritmo spiegato passo passo:

Prima iterazione ciclo esterno:

i=0  Nel ciclo interno j verrà incrementato di 1, sei volte (j=0, j=1, j=2, j=3, j=4, j=5), quindi stamperà * * * * *

Seconda iterazione ciclo esterno:

i=1 Sempre nel ciclo interno j verrà incrementato di 1, sei volte (j=0, j=1, j=2, j=3, j=4, j=5), quindi stamperà * * * * *

Terza iterazione ciclo esterno:

i=2 Allo stesso modo nel ciclo interno j verrà incrementato di 1, sei volte (j=0, j=1, j=2, j=3, j=4, j=5), quindi stamperà * * * * *

Il ciclo termina perché i diventa 3 e la condizione i<3 non è più verificata.

Il risultato sarà dunque questo, un rettangolo di asterischi:

* * * * *
* * * * *
* * * * *


Secondo esempio for annidati

Modifichiamo l’algoritmo precedente stampando adesso un triangolo.

Produrre un programma che mostri un triangolo rettangolo di asterischi avente come altezza 4, come da figura sotto:

*
**
***
****

Quindi intuiamo che il ciclo più esterno deve essere eseguito 4 volte e quello più interno la prima volta 1, la seconda 2, la terza 3, la quarta 4.

#include <iostream>
using namespace std;

int main() {
    int i, j;

    const int h = 4;
    
    for (i = 0; i < h; i++) { 
        for (j = 0; j < 1 + i; j++) {
            cout << " * ";
        }
        cout << endl;   
    }        
    
    return 0;
}

Nella prima iterazione del ciclo esterno:

i=0 Nel ciclo interno j verrà incrementato di 1, una volta (j=0), poiché nell’iterazione successiva j diventerebbe 1 e la condizione 1<1+i non è più verificata. Quindi stamperà *

La seconda iterazione del ciclo esterno porterà:

i=1 e nel ciclo interno j verrà incrementato due volte di 1 (j=0, j=1), quindi stamperà * *

Nella terza iterazione del ciclo esterno:

i=2 e j verrà incrementato tre volte di 1 (j=0, j=1, j=2), quindi stamperà * * *

Nella quarta iterazione del ciclo esterno:

i=3 e j verrà incrementato di 1, tre volte (j=0, j=1, j=2,j=3), quindi stamperà * * * *

Il ciclo termina perché i diventa 4 e la condizione i<4 non è più verificata.

Dunque il risultato sarà dunque, un triangolo rettangolo di asterischi:

*
* *
* * *
* * * *

Terzo esempio

Produrre un programma che mostri un triangolo rettangolo di asterischi avente come altezza 4, come da figura sotto:

****
***
**
*

Quindi intuiamo che il ciclo più esterno deve essere sempre eseguito 4 volte mentre quello più interno questa volta dobbiamo iniziare da h-i, ovvero da destra e decrementare j di volta in volta.

#include <iostream>
using namespace std;

int main() {
    int i, j;

    const int h = 4;
    
    // Stampare un triangolo rettangolo rovesciato con asterischi
    for (i = 0; i < h; i++) { 
        for (j = h - i; j > 0; j--) {
            cout << "*";
        }
        cout << endl;   
    }        
    
    return 0;
}

Quarto esempio

Produrre un programma che mostri una figura come quella sotto:

 *******
  *****
   ***
    *
    *
   ***
  *****
 *******
#include <iostream>
using namespace std;

int main() {
    int i, j, n;
    n = 8;
    
    for (i = 0; i < n; i++) {
        for (j = 1; j <= n; j++) {
            if (j < n - i && j > i || j <= i && j >= n - i) {
                cout << "*";
            } else {
                cout << " ";
            }
        }
        
        cout << endl;
    }
    
    return 0;
}

Quinto esempio

Produrre un programma che mostri una figura come quella sotto:

*       *
**     **
***   ***
**** ****
***   ***
**     **
*       *
#include <iostream>
using namespace std;

int main() {
    int i, j, n;
    n = 8;

    for (i = 0; i < n; i++) {
        for (j = 0; j <= n; j++) {
            if (j <= n - i && j >= i || j >= i && j <= n - i) {
                cout << " ";
            } else {
                cout << "*";
            }
        }
        cout << endl;
    }
    return 0;
}

Sesto esempio

Variamo ancora la figura da creare, creando un triangolo isoscele.

Produrre un programma che mostri un triangolo isoscele di asterischi avente come base 9, come da figura sotto:

    *
   ***
  *****
 *******
*********
#include <iostream>
using namespace std;

int main() {
    int i, j, x;
    
    const int n = 9;
    
    x = n / 2 + 1; // Troviamo l'altezza
    
    // Stampare una piramide di asterischi
    for (i = 0; i < x; i++) { 
        for (j = 0; j < x + i; j++) {
            if (x - j - 1 > i) {
                cout << " ";
            } else {
                cout << "*";
            }
        }
        cout << endl;    
    }            
    
    return 0;
}

Poniamo x uguale alla metà della base più 1, ottenendo in questo caso 5 che rappresenta la nostra altezza.

Poi inseriamo i due cicli for. Il ciclo esterno va da 0 ad x-1, il ciclo interno da 0 a x+i-1. Il ciclo interno verrà eseguito una volta in più ad ogni iterazione del ciclo esterno. Quindi esaminiamo nel dettaglio le iterazioni.

Prima iterazione ciclo esterno:

i=0 Nel ciclo interno j è incrementato di 1, cinque volte (j=0, j=1, j=2, j=3, j=4). Ogni volta si controlla se questa condizione è vera x-j-1>i e dunque si stampa il carattere vuoto, altrimenti si stampa l’asterisco.

5-0-1>0 cioè 4>0 vera spazio bianco

5-1-1>0 cioè 3>0 vera spazio bianco

5-2-1>0 cioè 2>0 vera spazio bianco

5-3-1>0 cioè 1>0 vera spazio bianco

5-4-1>0 cioè 0>0 falsa asterisco

Quindi stamperà 4 spazi bianchi e un     *

Seconda iterazione ciclo esterno:

i=1 Sempre nel ciclo interno j riparte da 0 ed è incrementato di 1, sei volte. Analizziamo anche questa volta la condizione x-j-1>i

5-0-1>1 cioè 4>1 spazio bianco

5-1-1>1 cioè 3>1 spazio bianco

5-2-1>1 cioè 2>1 spazio bianco

5-3-1>1 cioè 1>1 asterisco

5-4-1>1 cioè 0>1 asterisco

5-5-1>1 cioè -1>1 asterisco

Quindi stamperà tre spazi bianchi e tre   * * *

E così via! In output visualizzeremo un triangolo isoscele. 

Analogamente potevamo anche ragionare in questo modo:

#include <iostream>
using namespace std;

int main() {
    int i, j, x;
    const int n = 9;
    x = n / 2;

    // Stampare una piramide rovesciata di asterischi
    for (i = 0; i <= x; i++) {
        for (j = 0; j <= x + i; j++) {
            if (j > x - i - 1) {
                cout << "*";
            } else {
                cout << " ";
            }
        }
        cout << endl;
    }
    return 0;
}

Settimo esempio

Costruiamo un rombo come da figura sotto:

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *
#include <iostream>
using namespace std;

int main() {
    int i, j, x;
    const int n = 9;
    x = n / 2;

    // Stampare un diamante di asterischi
    for (i = 0; i <= n; i++) {
        for (j = 0; j <= x + i; j++) {
            if (j > x - i - 1 && i <= x) {
                cout << "*";
            } else if (i >= x && j >= i - n / 2 && j < n - (i - n / 2)) {
                cout << "*";
            } else {
                cout << " ";
            }
        }
        cout << endl;
    }
    return 0;
}

Nella prossima lezione svilupperemo altri esempi sui cicli for annidati 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++

Altri esempi sul for in C++

Altri esempi sul for in C++

In questa lezione propongo altri esempi sul for in C++, al fine di consolidare quanto studiato nelle lezioni precedenti.

Primo esempio sul for in C++

Dato un elenco di N numeri, scegliere quelli che sono maggiori di 10 e minori di 100. Di questi calcolare la somma e visualizzare il risultato in output.

Innanzitutto dichiariamo le variabili che ci servono per la risoluzione dell’algoritmo:

N – Indica quanti numeri vogliamo inserire.

i – La variabile contatore del ciclo for.

n – Il numero che viene inserito N volte.

s – La variabile per la somma dei numeri maggiori di 10 e minori di 100.

Dopo aver dichiarato le variabili ed aver inserito le costanti A e B, chiediamo di inserire il valore di N, facendo al solito un controllo dell’input.

Poi realizziamo il ciclo for dove per ogni numero inserito controlliamo se è vera la condizione richiesta. Se è vera aggiorniamo la variabile somma aggiungendo il valore di n.

Al termine stampiamo il valore della somma in output.

Ecco dunque l’algoritmo in C++:

#include <iostream>
using namespace std;

int main() {
    int N, i, n, s = 0;
    const int A = 10;
    const int B = 100;
    
    do { 
        cout << "Quanti numeri vuoi inserire?: ";
        cin >> N;
    } while (N <= 0);
    
    for (i = 0; i < N; i++) {
        cout << "Inserisci un numero: ";
        cin >> n;
        if (n > A && n < B) {
            s += n;
        }
    }
    
    if (s == 0) {
        cout << "Non hai inserito numeri maggiori di 10 e minori di 100";
    } else {
        cout << "Somma: " << s;
    }
    
    return 0;
}

Secondo esempio sul for in C++

Inserire N voti (compresi tra 4 e 10), calcolare e stampare la loro media. Se la media è maggiore o uguale a 6 stampare il messaggio “Promosso” altrimenti il messaggio “Puoi fare di meglio! Riprova!

In questo secondo esempio sul for in C++, serviranno queste variabili:

N – Il numero di voti da inserire.

m – La media dei voti, di tipo float.

i – La variabile contatore per il ciclo for.

s – Per la somma dei voti.

Quindi chiediamo di inserire gli N voti facendo un controllo dell’input.

Poi con un ciclo for inseriamo i numeri, facendo anche qui un controllo dell’input, in quanto ciascun voto deve essere maggiore o uguale a 4 e inferiore o uguale a 10.

Quindi li sommiamo e facciamo la media.

Dopo in base alla media ottenuta, visualizziamo il messaggio in output.

Ecco dunque una possibile risoluzione dell’esempio sul ciclo for in C++:

#include <iostream>
using namespace std;

int main() {
    int N, i, n, s = 0;
    float m;

    do { 
        cout << "Quanti numeri vuoi inserire?: ";
        cin >> N;
    } while (N <= 0 || N > 10);

    for (i = 0; i < N; i++) {
        do {
            cout << "Inserisci un numero (compreso tra 4 e 10): ";
            cin >> n;
        } while (n < 4 || n > 10);
        s += n;        
    }   
    
    m = float(s) / N;
    
    if (m >= 6) {
        cout << "Promosso, la tua media: " << m;
    } else {
        cout << "Puoi fare di meglio. Riprova!";
    }
    
    return 0;
}

Potremmo modificare questi algoritmi proposti inserendo noi i dati in input e quindi disegnare le figure con le misure desiderate.

Abbiamo dunque proposto altri esempi sul for in C++, fate pure le vostre considerazioni e scrivete 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++

Massimo dei numeri pari e dei dispari

Massimo dei numeri pari e dei dispari

In questa lezione svilupperemo un algoritmo per il calcolo del massimo, cioè del valore più grande, dei numeri pari e dispari.

Inserire N numeri interi e determinare il massimo dei numeri pari e di quelli dispari.

Realizziamo l’algoritmo in modo tale da inserire sia numeri positivi che negativi.

Innanzitutto dichiariamo le variabili necessarie:

N – La quantità di numeri da inserire.

n – Rappresenta i numeri da inserire di volta in volta.

i – Il contatore utilizzato nel ciclo for.

max_p – Questa variabile contiene il massimo tra tutti i valori pari.

max_d – La variabile che contiene il valore massimo dei numeri dispari.

conta_p – Il contatore dei numeri pari, se non si inseriscono numeri pari lo impostiamo a 0.

conta_d – Il contatore dei numeri dispari, se non si inseriscono numeri dispari lo impostiamo a 0.

Dopo aver dichiarato le variabili chiediamo quanti numeri vogliamo inserire, cioè il valore della variabile N. Quindi facciamo un controllo dell’input per far in modo di inserire solo valori maggiori di zero.

Successivamente chiediamo di inserire il primo numero e controlliamo se è pari. Se lo è assegniamo a max_p il valore di n e portiamo conta_p a 1 e conta_d a 0.

Se invece il numero è dispari assegniamo a max_d il valore di n e portiamo conta_d a 1 e conta_p a 0.

Poi con un ciclo for chiediamo i numeri rimanenti e per ciascun numero chiediamo se è pari o dispari. Controlliamo anche il valore dei contatori (conta_p e conta_d) per capire se è la prima volta che inseriamo un numero pari o dispari e quindi comportarci di conseguenza.

Dopo con un if controlliamo il valore dei contatori per visualizzare in output il messaggio opportuno.

Ecco dunque l’algoritmo in C++ per il calcolo dei numeri pari e dei dispari, così come l’ho pensato:

#include <iostream>
using namespace std;

int main() {
    int N, n, i, max_p, max_d, conta_p, conta_d;

    do { 
        cout << "Quanti numeri vuoi inserire?: ";
        cin >> N;
    } while (N <= 0);

    cout << "Inserisci un numero: ";
    cin >> n;

    if (n % 2 == 0) {
        max_p = n;
        conta_p = 1;
        conta_d = 0;
    } else {
        max_d = n;
        conta_d = 1;
        conta_p = 0;
    }

    for (i = 0; i < N - 1; i++) {
        cout << "Inserisci un numero: ";
        cin >> n;

        if (n % 2 == 0 && conta_p == 1) { 
            if (n > max_p) {
                max_p = n;
            }
        } else if (n % 2 == 0 && conta_p == 0) {
            max_p = n;
            conta_p = 1;
        } else if (n % 2 != 0 && conta_d == 1) {
            if (n > max_d) {
                max_d = n;
                conta_d = 1;
            }
        } else {
            max_d = n;
        }
    }

    if (conta_p == 1 && conta_d == 1) {
        cout << "Pari\t" << max_p << endl << "Dispari\t" << max_d;
    } else if (conta_p == 1 && conta_d == 0) {
        cout << "Pari\t" << max_p << endl << "Non hai inserito dispari!";
    } else {
        cout << "Non hai inserito numeri pari!" << endl << "Dispari\t" << max_d;
    }

    return 0;
}

Questa è solo una possibile soluzione all’algoritmo per il calcolo del massimo dei pari e dei dispari, proponete pure la vostra e discutiamone assieme.

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