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? : ";
        cin >> N;
    } while (N <= 0);

    i = 0;
    cout << "Inserisci il primo numero: ";
    cin >> max;
    conta_max = 1;

    while (i < N - 1) {
        cout << "Inserisci il numero: ";
        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 è " << max << " ed è 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? : ";
        cin >> N;
    } while (N <= 0);

    cout << "Inserisci il primo numero: ";
    cin >> max;

    while (N > 1) {
        cout << "Inserisci il numero: ";
        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 è " << max << " ed è 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++

Esercitazione sul while e do-while in C++

Esercitazione sul while e do-while in C++

In questa lezione propongo un’esercitazione sul while e do-while in C++, in modo da imparare meglio ad utilizzare entrambi i cicli.

Primo esercizio – Esercitazione sul while e do-while in C++

Leggere una sequenza di numeri reali, determinare quanti valori sono interi, cioè senza la parte decimale ed effettuarne il conteggio di entrambi. Terminare la lettura quando si incontra un valore uguale a 9999.

Per risolvere questo algoritmo innanzitutto dichiariamo le variabili che ci servono:

float n – Rappresentano i numeri che di volta in volta inserirò.

int interi = 0 – Il contatore dei numeri interi.

int decimali = 0 – Il contatore dei numeri decimali.

Dopo aver fatto ciò, diamo un messaggio in output che spiega come terminare il programma.

Dunque realizziamo un ciclo do while, che termina quando la condizione n!=9999 diventa falsa. All’interno del ciclo inserisco un numero e controllo se corrisponde al numero intero n con l’operatore di casting. Se tale condizione è vera allora incremento il contatore degli interi, altrimenti incremento il contatore dei decimali.

Al termine visualizzo quanti numeri decimali e quanti interi sono stati inseriti.

Ecco dunque il codice completo.

#include <iostream>
using namespace std;

int main() {
    float n;
    int interi = 0, decimali = 0;
    
    cout << "Inserisci dei numeri, digita 9999 per terminare l'immissione!" << endl;
    
    while (true) {
        cout << "Inserisci un numero: ";
        cin >> n;
        
        if (n == 9999) {
            break;
        }
        
        if (n == int(n)) {
            interi++;
        } else {
            decimali++;
        }
    }
    
    cout << "Interi: " << interi << endl;
    cout << "Decimali: " << decimali << endl;
    
    return 0;
}

Adesso provate voi a risolvere lo stesso esercizio con il while e provate a comparare i due metodi.


Secondo esercizio

Continuiamo la nostra esercitazione sul while e do-while in C++, proponendo un altro esercizio.

Leggere da tastiera un numero imprecisato di coppie di numeri interi. Terminare la lettura quando almeno uno dei due termini risulta uguale a zero. Contare le coppie che hanno il prodotto multiplo di un numero intero K.

Realizziamo questo algoritmo con il while e lascio a voi la realizzazione con il do while per comparare i due metodi.

Abbiamo bisogno delle seguenti variabili:

int a, b  – Rappresentano le coppie di numeri che di volta in volta inserirò.

int k – Rappresenta l’intero per cui occorre calcolare se il prodotto della coppia è un suo multiplo.

int count = 0 – Il contatore dei numeri multipli dell’intero k.

int p – La variabile che contiene il prodotto delle coppie.

Dopo aver dichiarato le variabili, procediamo a prendere in input i dati necessari. Dunque, visto che utilizziamo il while, occorre prendere in input una coppia di numeri. Poi impostiamo la seguente condizione: while (a != 0 && b != 0) cioè finché a e b sono diversi da 0, continuo ad inserire i numeri, faccio il prodotto e controllo se questo è multiplo di k. Se è multiplo allora incremento la variabile i.

Infine visualizzo in output il risultato ottenuto.

Ecco dunque il codice completo:

#include <iostream>
using namespace std;

int main() {
    int k;
    int count = 0;

    cout << "Inserisci il multiplo: ";
    cin >> k;

    int a, b;
    cout << "Inserisci il primo numero: ";
    while (cin >> a) {
        cout << "Inserisci il secondo numero: ";
        if (!(cin >> b)) {
            break; // Se l'input non è un numero, esci dal ciclo
        }
        if (a == 0 || b == 0) {
            break; // Se uno dei numeri è zero, esci dal ciclo
        }
        int p = a * b;
        if (p % k == 0) {
            count++;
        }
        cout << "Inserisci il primo numero: ";
    }

    cout << "Multipli di " << k << " sono " << count << endl;
    return 0;
}

Come vi dicevo sviluppate adesso voi lo stesso algoritmo con il ciclo do-while. Quale secondo voi è la soluzione migliore?

Questa è solo una semplice esercitazione sul while e do-while in C++, nelle prossime lezioni faremo 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++

Esercizi sul ciclo do-while in C++

Esercizi sul ciclo do-while in C++

In questa lezione risolveremo alcuni esercizi sul ciclo do-while in C++, al fine di comprendere meglio come poterlo utilizzare nei nostri algoritmi.

Primo esercizio sul ciclo do-while in C++

Scrivere un programma che mostra a video i numeri pari compresi tra 0 e 100 in ordine decrescente, cioè da 100 a 0.

Per la realizzazione del seguente algoritmo inizializziamo una variabile n a 100. Dopo, con un ciclo do-while che itera finché n è maggiore o uguale a zero, stampiamo n e dopo lo decrementiamo di 2.

Ecco dunque il codice completo:

#include <iostream>
using namespace std;

main() {
    int n=100;

    do {
         cout<<n<<"\t";
         n-=2;
    } while (n>=0);

   return 0;
}

Lo stesso esercizio sviluppato con il ciclo while:

#include <iostream>
using namespace std;

main() {
    int n=100;

    while (n>=0){
        cout<<n<<"\t";
         n-=2;
    }

   return 0;
}


Secondo esercizio

Leggere e sommare una quantità indefinita di numeri reali finché‚ la loro somma diventa uguale a zero.

Innanzitutto dichiariamo una variabile float per i numeri reali e inizializziamo la somma a zero. Dopo, con un ciclo do-while, inseriamo i numeri e li sommiamo. Appena la somma diventa zero usciamo fuori dal ciclo.

#include <iostream>
using namespace std;

main() { 
    float n;
    int s=0;

    do {
        cout<<"Inserisci un numero: ";
        cin>>n;
        s+=n;
    } while(s!=0);

    cout<<"La somma e': "<<s;
    return 0;
}

Provate adesso a sviluppare lo stesso esercizio con il ciclo while, state attenti ad impostare bene l’algoritmo.

Terzo esercizio sul ciclo do-while in C++

Realizzare un algoritmo che accetta in input solo un numero il cui valore assoluto sia compreso tra 5 e 10. Al termine stampare il numero inserito.

Il programma richiede di impostare bene la condizione che richiede il numero, nel caso in cui non sia compreso nell’intervallo specificato.

Quindi utilizzo ad esempio il not: while(!(abs(n)>=5 && abs(n)<=10)), ma questo, come vedremo in seguito, non è l’unico modo.

Ecco dunque l’esempio completo:

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

main() {
    float n;

    do {
        cout<<"Inserisci un numero: ";
        cin>>n;
    } while(!(abs(n)>=5 && abs(n)<=10));

    cout<<n;
    return 0;
}

Quindi la condizione poteva anche essere impostata in questo modo:

while(abs(n)<5 || abs(n)>10);


Quarto esercizio sul ciclo do-while in C++

Inserire una serie di numeri interi e sommarli. Interrompere l’immissione al sesto valore pari e visualizzare quindi in output la somma ottenuta.

Per realizzare questo algoritmo innanzitutto utilizziamo una variabile intera n, che rappresenta i numeri in input, una variabile p che serve a contare i numeri pari inseriti e una variabile s per sommare tutti i valori inseriti.

Quindi impostiamo la condizione, finché n è diverso da 6, e all’interno del ciclo do-while chiediamo di inserire un numero in input e se pari incrementiamo il contatore dei pari.

#include <iostream>
using namespace std;

main() {
    int n, p=0, s=0;

    do {
        cout<<"Inserisci un numero: ";
        cin>>n;
        s+=n;
        if(n%2==0)
            p++;
    } while(p!=6);

    cout<<"Somma: "<<s;
    return 0;
}

Lo stesso algoritmo si poteva risolvere con un ciclo while.

Ecco quindi, di seguito, una possibile soluzione con il while:

#include <iostream>
using namespace std;

main() {
    int n, p=0, s=0;

    while(p!=6){
        cout<<"Inserisci un numero: ";
        cin>>n;
        s+=n;
        if(n%2==0)
           p++;
    }

   cout<<"Somma: "<<s;
   return 0;
}

Questi sono solo alcuni semplici esercizi sul ciclo do-while in C++, nelle prossime lezioni, approfondiremo ancora l’argomento.

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

Problem solving esempi

Problem solving esempi

In questa lezione svilupperemo alcuni esempi di algoritmi proposti alle olimpiadi di problem solving per la scuola superiore di primo grado in linguaggio C++.

Problem solving – primo esempio

Consideriamo dunque questo programma scritto in pseudolinguaggio:

procedure ALFA;
variables A, B, K, K1, H integer;
A ← 2;
K ← 7;
input B;
H ← A + K + B;
K1 ← A + B;
B ← A + H + K1;
output H, B, K1;
endprocedure;

Il valore di input per B è 10, determinare dunque i valori di output per H, B e K1.

Risoluzione del problema

Calcoliamo i vari passaggi:

A ← 2; A=2

K ← 7; K=7

input B; B=10 //inseriamo il valore richiesto dal problema

H ← A + K + B; H=2+7+10=19

K1 ← A + B; K1=2+10=12

B ← A + H + K1; B=2+19+12=33

Quindi i valori visualizzati in output sono:

H=19; K1=12; B=33

Adesso risolviamo questo algoritmo in C++.

L’algoritmo è molto semplice da realizzare, infatti si tratta di una struttura sequenziale che non ricorre a nessuna istruzione condizionale o iterativa.

#include <iostream>
using namespace std;

int main() {
    int A, K, K1, B, H;
    A = 2;
    K = 7;

    cout << "Inserisci B, metti 10 per provare l'esempio specifico: ";
    cin >> B;

    H = A + K + B;
    K1 = A + B;
    B = A + H + K1;

    cout << "H vale: " << H << endl;
    cout << "B vale: " << B << endl;
    cout << "K1 vale: " << K1 << endl;

    return 0;
}

Quindi compilate ed eseguite, l’output sarà proprio quello che abbiamo specificato nell’esempio sopra.

Problem solving – Secondo esempio

Consideriamo adesso questo programma scritto in pseudolinguaggio:

procedure BETA;
variables A, B, C, M, N integer;
input A, B, C;
M ← A;
N ← A;
if B > M
     then M ← B;
else N ← B;
endif;
if C > M
     then M ← C;
else N ← C;
endif;
output M, N;
endprocedure;

I valori di input per A, B e C sono rispettivamente 15, 21, 19. Determinare dunque i valori di output per M e N.

Risoluzione

input A, B, C; Inseriamo A=15, B=21, C=19

M ← A; M=15;

N ← A; N=15;

if B > M si ha quindi 21>15 vero

then M ← B; allora M=21;

else N ← B; //chiaramente non viene eseguita questa istruzione

endif;

if C > M si ha quindi 19>21 falso

then M ← C; //questa istruzione non viene eseguita

else N ← C; N=19

endif;

output M, N; visualizza in output 21,19

Adesso implementiamo l’algoritmo in C++. Stavolta occorrono le istruzioni condizionali, ma la struttura è molto semplice.

#include <iostream>
using namespace std;

void beta() {
    int A, B, C, M, N;
    
    cout << "Inserisci A: ";
    cin >> A;
    cout << "Inserisci B: ";
    cin >> B;
    cout << "Inserisci C: ";
    cin >> C;
    
    M = A;
    N = A;
    
    if (B > M)
        M = B;
    else
        N = B;
    
    if (C > M)
        M = C;
    else
        N = C;
    
    cout << "M: " << M << endl;
    cout << "N: " << N << endl;
}

int main() {
    beta(); // Chiamata alla procedura beta
    return 0;
}

Questi sono solo alcuni esempi di problem solving proposti alle olimpiadi nella scuola secondaria di primo grado.

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

Alcuni tutorial in C

Somma elementi diagonale principale di una matrice

Sommare elementi della cornice esterna di una matrice in C

Somma di due matrici in C

Sommare dei numeri di una matrice in C

Prodotto tra matrici in C

Come ricercare gli elementi in una matrice in C

Inserire dati in una matrice in C

Tavola pitagorica in C

Operatori di assegnazione in C++

Operatori di assegnazione in C++

In questa lezione studieremo in dettaglio gli operatori di assegnazione in C++.

Per assegnare un valore ad una variabile si usa l’operatore di assegnazione: l’uguale (=).

Ad esempio:

int lato;

lato = 5 //sto assegnando un valore alla variabile lato

Ma attenzione! L’assegnazione ha sempre questa formula:

variabile = espressione;

Dove espressione può essere un singolo valore oppure anche un calcolo, come ad esempio:

area = base * altezza;

Dunque scrivere ad esempio:

base*altezza=area

Non ha senso, è dunque errata!


Operatore di assegnazione composti in C++

Oltre all’operatore di assegnazione semplice esistono anche gli operatori di assegnazione composti, che consentono di modificare il valore di una variabile con una sola operazione.

+= //aggiunge e assegna

a = a + b si può scrivere a += b

-= //sottrae e assegna

a = a – b si può scrivere a -= b

*= //moltiplica e assegna

a = a * b si può scrivere a *= b

/= //divide e assegna

a = a / b si può scrivere a /= b

%= //calcola il resto della divisione e assegna

a=a % b si può scrivere a%=b

<<= //sposta a sinistra e assegna

Sposta a sinistra il primo operando di tanti bit quanti specificati nel secondo operando. Assegna al primo operando il risulto ottenuto.

>= //sposta a destra e assegna

Sposta a destra il primo operando di tanti bit quanti specificati nel secondo operando. Assegna al primo operando il risulto ottenuto.

&= //assegnazione AND bit per bit

Realizza l’AND bit per bit del primo e del secondo operando. Assegna al primo operando il risultato ottenuto.

^= //assegnazione OR bit per bit

Ottiene l’OR bit per bit del primo e del secondo operando. Assegna al primo operando il risultato ottenuto.

|= //assegnazione OR inclusivo bit per bit

Ottiene l’OR inclusivo bit per bit del primo e del secondo operando. Assegna al primo operando il risultato ottenuto.

In questa lezione sugli operatori di assegnazione in C++, abbiamo introdotto i concetti di base di questi operatori. Nelle prossime lezioni vedremo come applicarli in esempi pratici.

Alcuni link utili

Indice tutorial linguaggio C++

Esercizi con gli array in C++

Esercitazione sugli array in C++

Array in C++

Passaggio di parametri per valore o per riferimento

Equazioni di secondo grado in C++

Le variabili globali e loali in C++

Uso delle funzioni in C++

Funzioni in C++

Definizione di funzioni in C++

Libreria cmath

Come usare il for in C++

Massimo tra n numeri in C++

Iterazioni in C++

Ciclo while in C++

Ciclo do while

Operatori logici in C++

Esercizi con switch case in C++

If else in C++

Casting in C++

Tutorial C++

Successione di Fibonacci in C++

Massimo fra tre numeri in C++

Massimo fra tre numeri in C++

Realizziamo un algoritmo per il calcolo del massimo fra tre numeri in C++, cioè dell’elemento più grande dei tre inseriti in input.

Proponiamo varie soluzioni al fine di confrontarle.

Prima soluzione massimo fra tre numeri in C++

La prima soluzione in poche parole traduce il diagramma di flusso che ho presentato in questo tutorial: massimo fra tre numeri.

In questa soluzione si tralascia, per il momento, il caso in cui i tre numeri possano essere uguali.

Chiediamo l’inserimento dei tre numeri e poi valutiamo:

a > b se è vero inseriamo un if annidato dove ci chiediamo se a è anche maggiore di c:

a > c se è vero dunque a è il maggiore;

altrimenti il maggiore chiaramente è c.

Se invece b > a è vero, inseriamo un if annidato dove controlliamo se anche b è maggiore di c.

b > c se è vero dunque b è il maggiore;

altrimenti il maggiore ovviamente sarà c.

Ecco dunque l’algoritmo in C++:

#include<iostream>
using namespace std;

int main() {
    int a, b, c;
    
    cout << "Inserisci il primo numero: ";
    cin >> a;
    cout << "Inserisci il secondo numero: ";
    cin >> b;
    cout << "Inserisci il terzo numero: ";
    cin >> c;
    
    if (a > b) {
        if (a > c) {
            cout << "Il numero maggiore è: " << a;
        } else {
            cout << "Il numero maggiore è: " << c;
        }
    } else {
        if (b > c) {
            cout << "Il numero maggiore è: " << b;
        } else {
            cout << "Il numero maggiore è: " << c;
        }
    }
    return 0;
}

Seconda soluzione – maggiore fra tre numeri in C++

La seconda soluzione implementa il secondo algoritmo presentato sempre in questa lezione: massimo fra tre numeri.

Questa soluzione è più snella della seconda e fa uso di una variabile max dove memorizzare il valore.

#include<iostream>
using namespace std;

int main() {
    int a, b, c, max;
    
    cout << "Inserisci il primo numero: ";
    cin >> a;
    cout << "Inserisci il secondo numero: ";
    cin >> b;
    cout << "Inserisci il terzo numero: ";
    cin >> c;
    
    max = a;    
    
    if (b > max) {
        max = b;
    }
    if (c > max) {
        max = c;
    }

    cout << "Il numero maggiore è: " << max;
    return 0;
}

Potrei direttamente scrivere:

cout<<“Inserisci il primo numero: “; cin>>max;

Evitando così l’uso di una variabile.

Terza soluzione

Nella terza soluzione si fa uso degli operatori logici ed in particolare dell’and.

Aggiungiamo anche il caso in cui i tre numeri siano uguali e quindi visualizziamo un messaggio opportuno in ouput.

#include<iostream>
using namespace std;

int main() {
    int a, b, c;
    
    cout << "Inserisci il primo numero: ";
    cin >> a;
    cout << "Inserisci il secondo numero: ";
    cin >> b;
    cout << "Inserisci il terzo numero: ";
    cin >> c;
    
    if (a == b && a == c) {
        cout << "I tre numeri sono uguali ";
    } else if (a > b && a > c) {
        cout << "Il numero maggiore è: " << a;
    } else if (b > c) {
        cout << "Il numero maggiore è: " << b;
    } else {
        cout << "Il numero maggiore è: " << c;
    }
    
    return 0;
}

Ecco alcune possibili risoluzioni dell’algoritmo per la ricerca del valore massimo fra tre inseriti 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++

Alcuni tutorial in C

Somma elementi diagonale principale di una matrice

Sommare elementi della cornice esterna di una matrice in C

Somma di due matrici in C

Sommare dei numeri di una matrice in C

Prodotto tra matrici in C

Come ricercare gli elementi in una matrice in C

Inserire dati in una matrice in C

Tavola pitagorica in C