1) Esercizi con while

1. Somma da 1 a N

Dato un intero positivo N, calcolare la somma dei numeri da 1 a N usando un ciclo while.

Mostra soluzione
#include <iostream>
int main(){
  long long N; std::cout << "Inserisci N (>=1): "; std::cin >> N;
  if(N < 1){ std::cout << "N non valido.\n"; return 0; }
  long long i=1, somma=0;
  while(i <= N){ somma += i; ++i; }
  std::cout << "Somma = " << somma << "\n";
}

2. Conta le cifre di un numero

Dato un intero (anche 0), determinare quante cifre ha utilizzando divisioni intere e while.

Mostra soluzione
#include <iostream>
#include <cstdlib>
int main(){
  long long n; std::cout << "Numero: "; std::cin >> n;
  n = std::llabs(n);
  int cifre = (n==0) ? 1 : 0;
  while(n != 0){ ++cifre; n /= 10; }
  std::cout << "Cifre: " << cifre << "\n";
}

3. Verifica numero primo (base)

Dato n > 1, stabilire se è primo provando i divisori da 2 a ⌊√n⌋ con while.

Mostra soluzione
#include <iostream>
int main(){
  long long n; std::cout << "n (>1): "; std::cin >> n;
  if(n <= 1){ std::cout << "Valore non valido.\n"; return 0; }
  if(n==2){ std::cout << "Primo\n"; return 0; }
  if(n%2==0){ std::cout << "Non primo\n"; return 0; }
  long long d=3; bool primo = true;
  while(d*d <= n){
    if(n % d == 0){ primo=false; break; }
    d += 2;
  }
  std::cout << (primo? "Primo":"Non primo") << "\n";
}

4. Somma dei pari fino a N

Dato N, sommare tutti i numeri pari in [1, N] utilizzando un while.

Mostra soluzione
#include <iostream>
int main(){
  long long N; std::cout << "N: "; std::cin >> N;
  if(N < 2){ std::cout << "Somma = 0\n"; return 0; }
  long long i = 2, somma = 0;
  while(i <= N){ somma += i; i += 2; }
  std::cout << "Somma dei pari = " << somma << "\n";
}

2) Esercizi con do...while

1. Inserimento con controllo (numero positivo)

Chiedere un intero ≥ 0 e ripetere la richiesta finché l’utente non inserisce un valore valido.

Mostra soluzione
#include <iostream>
int main(){
  long long n;
  do{
    std::cout << "Inserisci un intero non negativo: ";
    std::cin >> n;
  }while(n < 0);
  std::cout << "Hai inserito: " << n << "\n";
}

2. Menù semplice

Menù con scelte: 1=Somma, 2=Prodotto, 0=Esci. Ripetere finché l’utente non digita 0.

Mostra soluzione
#include <iostream>
int main(){
  int scelta;
  do{
    std::cout << "\n--- MENU ---\n1) Somma\n2) Prodotto\n0) Esci\nScelta: ";
    std::cin >> scelta;
    if(scelta==1){
      double a,b; std::cout << "a b: "; std::cin >> a >> b;
      std::cout << "Somma = " << (a+b) << "\n";
    } else if(scelta==2){
      double a,b; std::cout << "a b: "; std::cin >> a >> b;
      std::cout << "Prodotto = " << (a*b) << "\n";
    } else if(scelta!=0){
      std::cout << "Scelta non valida.\n";
    }
  }while(scelta != 0);
}

3. Indovina il numero (1–100)

Generare un numero casuale in [1,100] e far indovinare all’utente, indicando “troppo alto/basso” finché non indovina.

Mostra soluzione
#include <iostream>
#include <random>
int main(){
  std::random_device rd; std::mt19937 gen(rd());
  std::uniform_int_distribution<int> dist(1,100);
  int segreto = dist(gen), x;
  do{
    std::cout << "Tentativo: "; std::cin >> x;
    if(x < segreto) std::cout << "Troppo basso.\n";
    else if(x > segreto) std::cout << "Troppo alto.\n";
  }while(x != segreto);
  std::cout << "Bravo! Hai indovinato: " << segreto << "\n";
}

4. Media con terminatore (0)

L’utente inserisce una sequenza di numeri reali; l’inserimento termina con 0. Calcolare la media (escludendo lo 0).

Mostra soluzione
#include <iostream>
int main(){
  double x, somma=0.0; long long cnt=0;
  do{
    std::cout << "Numero (0 per terminare): ";
    std::cin >> x;
    if(x != 0){ somma += x; ++cnt; }
  }while(x != 0);
  if(cnt==0) std::cout << "Nessun dato.\n";
  else std::cout << "Media = " << (somma/cnt) << "\n";
}

3) Esercizi con for

1. Tabellina di N (×1 … ×10)

Dato un intero N, stampare la sua tabellina da 1 a 10 usando for.

Mostra soluzione
#include <iostream>
int main(){
  long long N; std::cout << "N: "; std::cin >> N;
  for(int i=1;i<=10;++i){
    std::cout << N << " x " << i << " = " << (N*i) << "\n";
  }
}

2. Fattoriale di N

Calcolare N! con un ciclo for. Gestire il caso di N < 0.

Mostra soluzione
#include <iostream>
int main(){
  long long N; std::cout << "N: "; std::cin >> N;
  if(N < 0){ std::cout << "Fattoriale non definito per N < 0.\n"; return 0; }
  unsigned long long f = 1;
  for(long long i=2;i<=N;++i) f *= i;
  std::cout << N << "! = " << f << "\n";
}

3. Serie di Fibonacci (primi N termini)

Stampare i primi N numeri della sequenza di Fibonacci usando for.

Mostra soluzione
#include <iostream>
int main(){
  long long N; std::cout << "N (>=1): "; std::cin >> N;
  if(N <= 0){ std::cout << "N non valido.\n"; return 0; }
  unsigned long long a=0, b=1;
  for(long long i=1;i<=N;++i){
    std::cout << a << (i<N? " ":"\n");
    auto next = a + b; a = b; b = next;
  }
}

4. Triangolo di asterischi

Data un’altezza H, stampare un triangolo rettangolo di asterischi alto H usando for.

Mostra soluzione
#include <iostream>
int main(){
  int H; std::cout << "Altezza H: "; std::cin >> H;
  if(H <= 0){ std::cout << "Valore non valido.\n"; return 0; }
  for(int r=1;r<=H;++r){
    for(int c=0;c<r;++c) std::cout << '*';
    std::cout << '\n';
  }
}