http://www.cplusplus.com/reference/
STRUTTURE ITERATIVE E VETTORI
versione 19/12/2012
 
ESERCIZIO
 
Costruire un programma che legge un numero intero e dice se è pari o dispari

 
SOLUZIONE:
/**************************************************************************
 * Nome: pari_dispari.c                                                   *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da strcpy()
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int n;
    char soluzione[20];
    // INPUT
    printf("Digita un numero intero : ");
    scanf("%d", &n);
    // ALGORITMO
    if(n % 2 == 0) 
        strcpy(soluzione,"pari");
    else
        strcpy(soluzione,"dispari");
    // OUTPUT
    printf("%d: %s!\n", n, soluzione);        
    
    // metto in stop il programma prima della sua chiusura
    fflush(stdin);
    getchar();
    return(0);
}

ESERCIZIO
 
Costruire un programma che legge due numeri interi e visualizza il minore

 
SOLUZIONE:
/**************************************************************************
 * Nome: minimo.c                                                   *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system("pause");
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int a,b,minimo;
     // INPUT
    printf("Digita il primo numero intero : ");
    scanf("%d", &a);
    printf("Digita il secondo numero intero : ");
    scanf("%d", &b);
    // ALGORITMO
    if(a < b) 
        minimo=a;
    else
        minimo=b;
    // OUTPUT
    printf("Il minimo tra %d e %d e': %d\n", a , b, minimo);        
    
    // metto in stop il programma prima della sua chiusura
    system("pause");
    return(0);
}

ESERCIZIO
 
Costruire un programma che legge due numeri interi e visualizza il loro Massimo Comune Divisore (il Massimo Comune Divisore MCD di due numeri interi A e B è il più grande intero positivo che divide sia A che B).

 
SOLUZIONE:
Soluzione Intuitiva
/**************************************************************************
 * Nome: mcd.cpp                                                   *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system("pause");
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int A,B,minimo,MCD;
     // INPUT
    printf("Digita il numero intero A: ");
    scanf("%d", &A);
    printf("Digita il numero intero B: ");
    scanf("%d", &B);
    // ALGORITMO: Considero come numero X di partenza il min(A,B)
    // Se il resto della divisione di A per X e di B per X è zero allora
    // X è il MCD altrimenti considero come X il numero intero precedente 
    // e ripeto  
    minimo=(A < B ? A : B);
    for (MCD=minimo ; ((A%MCD)+(B%MCD))>0 ; MCD--);
    // OUTPUT
    printf("Il MCD(%d,%d)=%d\n", A , B, MCD);        
    
    // metto in stop il programma prima della sua chiusura
    system("pause");
    return(0);
}
Soluzione - Algoritmo di Euclide
/**************************************************************************
 * Nome: MCD.cpp - Algoritmo di Euclide                                      *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system("pause");
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int A, B, tA, tB, Resto,MCD;
     // INPUT
    printf("Digita il numero intero A: ");
    scanf("%d", &A);
    printf("Digita il numero intero B: ");
    scanf("%d", &B);
    tA=A;
    tB=B;
    // ALGORITMO: 
    Resto = tA % tB;
    while(Resto != 0)
    {
        tA = tB;
        tB = Resto;
        Resto = tA % tB;
    }
    MCD=tB;
    // OUTPUT
    printf("Il MCD(%d,%d)=%d\n", A , B, MCD);        
    
    // metto in stop il programma prima della sua chiusura
    system("pause");
    return(0);
}

ESERCIZIO
 
Costruire un programma che legge due numeri interi e visualizza il loro minimo comune multiplo (il minimo comune multiplo mcm di due numeri interi A e B è il più piccolo intero positivo multiplo sia di A sia di B).

 
SOLUZIONE:
Soluzione Intuitiva
/**************************************************************************
 * Nome: mcm.cpp                                                          *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system("pause");
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int A,B,massimo,mcm;
     // INPUT
    printf("Digita il numero intero A: ");
    scanf("%d", &A);
    printf("Digita il numero intero B: ");
    scanf("%d", &B);
    // ALGORITMO: Considero come numero X di partenza il max(A,B)
    // Se il resto della divisione di X per A e B è zero allora
    // X è il mcm altrimenti considero come X il numero intero 
    // successivo e ripeto  
    massimo=(A > B ? A : B);
    for (mcm=massimo ; (mcm%A)+(mcm%B)>0 ; mcm++);
    // OUTPUT
    printf("Il mcm(%d,%d)=%d\n", A , B, mcm);        
    
    // metto in stop il programma prima della sua chiusura
    system("pause");
    return(0);
}
Soluzione con Formula di Euclide
/**************************************************************************
 * Nome: mcm.cpp - Formula di Euclide                                     *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system("pause");
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int A,B,minimo,mcm,MCD;
     // INPUT
    printf("Digita il numero intero A: ");
    scanf("%d", &A);
    printf("Digita il numero intero B: ");
    scanf("%d", &B);
    // ALGORITMO: Utilizzo la formula di Euclide che calcola il 
    // mcm(A,B)=A*B/MCD(A,B)
    minimo=(A < B ? A : B);
    for (MCD=minimo ; ((A%MCD)+(B%MCD))>0 ; MCD--);
    mcm=A*B/MCD;
    // OUTPUT
    printf("Il mcm(%d,%d)=%d\n", A , B, mcm);        
    
    // metto in stop il programma prima della sua chiusura
    system("pause");
    return(0);
}

ESERCIZIO
 
Costruire un programma che legge una sequenza di numeri interi finchè non digito zero

 
SOLUZIONE:
Variante 1: uso il DO ... WHILE
/**************************************************************************
 * Nome: chiedi_numeri.c                                                   *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system()
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int n;
    do {
        printf("Digita un numero intero : ");
        scanf("%d", &n);
    } while (n!=0); 
    
    // metto in stop il programma prima della sua chiusura
    system("pause");
    return(0);
}
Variante 2: uso il WHILE
/**************************************************************************
 * Nome: chiedi_numeri-1.c                                                   *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system()
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int n=1; // inizializzazione fittizia per attivare l'iterazione
    while (n!=0) 
    {
        printf("Digita un numero intero : ");
        scanf("%d", &n);
    }   int n;
 
    // metto in stop il programma prima della sua chiusura
    system("pause");
    return(0);
}
Variante 3: uso il FOR
/**************************************************************************
 * Nome: chiedi_numeri-2.c                                                   *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system()
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int n=1; // inizializzazione fittizia per attivare l'iterazione
    for ( ; n!=0; printf("Digita un numero intero : "),scanf("%d", &n) );
    
    // metto in stop il programma prima della sua chiusura
    system("pause");
    return(0);
}
Variante 4: uso la ricorsione
/**************************************************************************
 * Nome: chiedi_numeri-R.c                                                   *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system()
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int n;
    printf("Digita un numero intero : ");
    scanf("%d", &n);
    if (n!=0)
       main(); // Ricorsione: se n <> 0 chiedo un altro numero
    else
       {
          // metto in stop il programma prima della sua chiusura
          system("pause");
          return(0);
       }
}

ESERCIZIO
 
Costruire un programma che legge una sequenza di numeri interi (terminata da zero) e restituisce il valore minimo. Lo zero finale non appartiene alla sequenza.

 
SOLUZIONE:
/**************************************************************************
 * Nome: minimo_sequenza.c                                                   *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system("pause");
#include <limits.h> // Contiene la definizione di INT_MAX (2^31-1)
int main() 
{
    // DICHIARAZIONE VARIABILI/INIZIALIZZAZIONE
    int n,minimo=INT_MAX;
    // INPUT + ALGORITMO
    do {
        printf("Digita un numero intero : ");
        scanf("%d", &n);
        if ( (n < minimo) && (n!=0) )
           minimo=n;
    } while (n!=0);
    // OUTPUT
    printf("Il minimo della sequenza e': %d\n", minimo);        
    
    // metto in stop il programma prima della sua chiusura
    system("pause");
    return(0);
}


ESERCIZIO
 
Costruire un programma che legge un numero N e visualizza tutti i numeri primi <= N

 
SOLUZIONE:
/**************************************************************************
 * Nome: primi.cpp                                              *
 * Autore: Marco Sechi                                              *
 * Data: 31/12/12                                                          *
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h> // Richiesta da system("pause");
/*
 * Nome: main
 * Scopo: Trova i numeri primi <= di un numero N
 * Input: --
 * Output: 0 se il programma termina correttamente
 */
int main() 
{
    int i, d, n;
    bool primo;
    // INPUT E INIZIALIZZAZIONE
    // - leggo il valore massimo
    printf("Immetti un intero ( < 1000):\n");    
    do {
       printf(": --> ");
       scanf("%d", &n);
    } while (n <= 0 || n> 1000);
    // ALGORITMO+OUTPUT
    printf("Elenco numeri primi <= %d -->\n",n);
    printf("%4d;",1);
    for (i=2; i<=n; i++)
    {
        primo=true;
        for (d=2 ; d


ESERCIZIO
 
Testo esercizio
 
SOLUZIONE:
Soluzione C++
Soluzione JavaScript
Soluzione VBA
Soluzione ASP
Soluzione PHP