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

Banner Pubblicitario

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

Banner pubblicitario

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