RIPASSIAMO INSIEME — MAPPA (modificabile)


MostraNascondi mappa

Selezione (if/else)

if (Condizione) {
  /* Istruzioni se Condizione è true */
} else {
  /* Istruzioni se Condizione è false */
}

Ciclo precondizionale (while)

while (Condizione) {
  /* Istruzioni */
}

Ciclo postcondizionale (do…while)

do {
  /* Istruzioni */
} while (Condizione);

Ciclo iterativo definito (for)

for (Inizializzazione; Condizione; Incremento) {
  /* Istruzioni */
}

Selezione multipla (switch)

switch (Espressione) {
  case valore1: /* ... */ break;
  /* ... */
  default: /* ... */
}

TEST — Conoscenze (V/F e completamenti)

V/F (1–6) — Indica se le affermazioni sono vere o false:

  1. Il costrutto di selezione si traduce con la parola chiave if.
  2. La clausola else del costrutto di selezione è obbligatoria.
  3. Il numero di case della struttura switch deve essere > 3.
  4. L’istruzione while può essere utilizzata solo all’inizio del ciclo.
  5. Il ciclo for si usa quando è noto a priori il numero di iterazioni.
  6. L’istruzione di incremento deve stare dentro il corpo del for.


Mostra soluzioni V/FNascondi soluzioni V/F
  1. V
  2. F
  3. F
  4. F
  5. V
  6. F — può stare nel 3° campo del for o nel corpo.

Completamenti (7–8):

7) while (… … == 0) {
     cin >> …………;   // a
     cin >> …………;   // b
     r = a % b;
   }

8) La parola chiave usata nella selezione multipla è ________ .


Mostra soluzioni 7–8Nascondi soluzioni 7–8

7) Algoritmo di Euclide (MCD). Il ciclo procede finché r != 0; si esce quando r == 0.

8) switch.

Metti a punto le tue CONOSCENZE — D7 (Risposta multipla)

Risposta singola (1–10) — Scegli l’alternativa corretta (A–F).

  1. 1. L’istruzione for(x=0; x<0; x++):
    • A) provoca un errore
    • B) esegue il blocco una volta soltanto
    • C) non è corretta
    • D) non esegue mai il blocco interno
  2. 2. Tra le seguenti istruzioni ce n’è una priva di errori, mentre le altre presentano errori. Qual è quella corretta?
    • A) while(x = 0)
    • B) while(s < 5)
    • C) while(x < 4 AND x < 6)
    • D) while(x == 'c' OR x == "b")
    • E) while(NOT z = 0)
    • F) while(if >= 6)
  3. 3. Un blocco è…
    • A) un insieme di istruzioni all’interno di un ciclo
    • B) costituito dalle direttive del preprocessore
    • C) un insieme di istruzioni racchiuso tra parentesi graffe
    • D) l’insieme delle istruzioni condizionali
  4. 4. Un gruppo di istruzioni si dicono “in cascata” se:
    • A) contengono al loro interno un blocco
    • B) contengono almeno una else if
    • C) hanno un ciclo all’interno
    • D) hanno un costrutto switch
  5. 5. In C, è previsto il fall-through automatico tra le clausole dello switch. Questo significa che:
    • A) il case verificato non esclude i restanti
    • B) il case verificato esclude tutti gli altri
    • C) il case verificato termina l’esecuzione dell’intera istruzione
    • D) lo switch deve necessariamente prevedere un default
  6. 6. All’interno dell’istruzione switch, in quale ramo occorre inserire il caso non previsto?
    • A) do...while
    • B) while
    • C) default
    • D) switch
    • E) case
    • F) if...else
  7. 7. La differenza tra i cicli while e do...while è:
    • A) nessuna: è solo un modo differente di scrivere i cicli
    • B) il while è più veloce da eseguire
    • C) la condizione viene esaminata in momenti differenti rispetto al blocco
    • D) nel primo si itera per vero, mentre nel secondo per falso
  8. 8. In C, il ciclo postcondizionale si rappresenta con l’istruzione:
    • A) do...while
    • B) while
    • C) default
    • D) switch
    • E) case
    • F) if...else
  9. 9. In C, il ciclo precondizionale si rappresenta con l’istruzione:
    • A) do...while
    • B) while
    • C) default
    • D) switch
    • E) case
    • F) if...else
  10. 10. Qual è il valore della variabile i alla fine del ciclo for(i=0; i<5; i++)?
    • A) 7
    • B) 5
    • C) 4
    • D) 6

Vero o falso (11–20)

  1. switch è un’istruzione di selezione. [V/F]
  2. In un costrutto switch, la presenza dell’istruzione break è sempre necessaria. [V/F]
  3. Il ciclo for prevede una variabile indice. [V/F]
  4. Entrambi i costrutti while e do...while iterano per vero. [V/F]
  5. Il ciclo do...while è sempre da preferire al while. [V/F]
  6. L’istruzione if prevede sempre un else. [V/F]
  7. Il blocco di un’istruzione if non può contenere un ciclo al suo interno. [V/F]
  8. Il costrutto for non prevede una condizione. [V/F]
  9. Il costrutto for può essere sempre trasformato in un costrutto while. [V/F]
  10. L’istruzione break è necessaria per evitare di eseguire altri case. [V/F]


Mostra soluzioni D7Nascondi soluzioni D7

Soluzioni 1–10: D, B, C, B, A, C, C, A, B, B.

Soluzioni 11–20 (V/F): V, F, F, V, F, F, F, F, V, V.

Allena le tue ABILITÀ — consegne

1) Ordinare due numeri —
Leggi due interi e visualizzali in ordine crescente.

Mostra soluzione 1)Nascondi soluzione 1)
#include <iostream>
using namespace std;
int main(){
  long long a,b; cout << "Due interi: ";
  if(!(cin>>a>>b)) return 0;
  if(a>b) swap(a,b);
  cout << a << " " << b << "\n";
}

2) Pari o dispari —
Scrivi un programma che legga un intero e dica se è pari o dispari.

Mostra soluzione 2)Nascondi soluzione 2)
#include <iostream>
using namespace std;
int main(){
  long long n; cout << "Numero: ";
  if(!(cin>>n)) return 0;
  cout << (n%2==0 ? "Pari\n" : "Dispari\n");
}

3) Triangolo —
Date le tre misure a,b,c, controlla la validità e stabilisci se è equilatero, isoscele o scaleno.

Mostra soluzione 3)Nascondi soluzione 3)
#include <iostream>
using namespace std;
int main(){
  double a,b,c; cout << "a b c: ";
  if(!(cin>>a>>b>>c)) return 0;
  if(a<=0||b<=0||c<=0 || a+b<=c || a+c<=b || b+c<=a){
    cout << "Triangolo non valido\n"; return 0;
  }
  if(a==b && b==c) cout << "Equilatero\n";
  else if(a==b || a==c || b==c) cout << "Isoscele\n";
  else cout << "Scaleno\n";
}

4) Potenza —
Leggi X,N; se 2 ≤ N ≤ 50 stampa X^N, altrimenti errore.

Mostra soluzione 4)Nascondi soluzione 4)
#include <iostream>
using namespace std;
int main(){
  long long X; int N; cout << "X N: ";
  if(!(cin>>X>>N)) return 0;
  if(N<2 || N>50){ cout << "Errore: N fuori intervallo\n"; return 0; }
  long long p=1; for(int i=0;i<N;++i) p*=X;
  cout << "X^N = " << p << "\n";
}

5) Conversione —
Data una quantità in lire e un selettore: 'E'→euro (= lire/2000), 'D'→dollari (= lire/2500). Altri: errore.

Mostra soluzione 5)Nascondi soluzione 5)
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
  long long lire; char sel; cout << "Lire e selettore (E/D): ";
  if(!(cin>>lire>>sel)) return 0;
  cout.setf(ios::fixed); cout<<setprecision(4);
  switch(toupper(sel)){
    case 'E': cout << lire/2000.0 << " euro\n"; break;
    case 'D': cout << lire/2500.0 << " dollari\n"; break;
    default:  cout << "Selettore non valido\n";
  }
}

6) Valori assoluti —
Dati A,B, calcola max(|A|,|B|) + 2·min(|A|,|B|).

Mostra soluzione 6)Nascondi soluzione 6)
#include <iostream>
#include <cmath>
using namespace std;
int main(){
  double A,B; cout << "A B: "; if(!(cin>>A>>B)) return 0;
  double a=fabs(A), b=fabs(B);
  cout << max(a,b) + 2*min(a,b) << "\n";
}

7) Equazione di 2° grado —
Dati a,b,c, calcola le radici gestendo i casi degeneri.

Mostra soluzione 7)Nascondi soluzione 7)
#include <iostream>
#include <cmath>
using namespace std;
int main(){
  double a,b,c; cout << "a b c: "; if(!(cin>>a>>b>>c)) return 0;
  if(a==0){
    if(b==0) cout << (c==0? "Infinite":"Nessuna") << " soluzione\n";
    else cout << "x = " << (-c/b) << "\n";
    return 0;
  }
  double d=b*b-4*a*c;
  if(d<0) cout << "Nessuna reale\n";
  else if(d==0) cout << "x = " << (-b/(2*a)) << "\n";
  else{ double r=sqrt(d);
        cout << "x1 = " << (-b+r)/(2*a) << ", x2 = " << (-b-r)/(2*a) << "\n"; }
}

8) Scontrino —
Importo speso: applica lo sconto
a) <€50 → −10% • b) €50–€100 → −20% • c) >€100 → −30%.

Mostra soluzione 8)Nascondi soluzione 8)
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
  double imp; cout << "Importo: "; if(!(cin>>imp)) return 0;
  double s = (imp<50?0.10 : (imp<=100?0.20:0.30));
  cout.setf(ios::fixed); cout<<setprecision(2);
  cout << "Da pagare: €" << imp*(1-s) << "\n";
}

9) Imponibile —
Letti quantità, prezzo unitario, sconto% e soglia, applica lo sconto solo se quantità > soglia.

Mostra soluzione 9)Nascondi soluzione 9)
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
  int q, soglia; double pu, s%;
  cout << "q pu s(%) soglia: ";
  if(!(cin>>q>>pu>>s%>>soglia)) return 0;
  double tot = q*pu;
  if(q>soglia) tot *= (1 - s%/100.0);
  cout.setf(ios::fixed); cout<<setprecision(2);
  cout << "Totale: €" << tot << "\n";
}

10) Min–Max —
Dati tre interi, stampa maggiore, minore e maggiore−minore.

Mostra soluzione 10)Nascondi soluzione 10)
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
  long long a,b,c; cout << "Tre interi: ";
  if(!(cin>>a>>b>>c)) return 0;
  long long mn=min(a,min(b,c)), mx=max(a,max(b,c));
  cout << "Maggiore=" << mx << ", Minore=" << mn
       << ", Diff=" << (mx-mn) << "\n";
}

11) Sistema lineare —
Risolvi a·x+b·y=c, a'·x+b'·y=c' con Cramer; gestisci Δ≠0, indeterminato, impossibile.

Mostra soluzione 11)Nascondi soluzione 11)
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
  double a,b,c, ap,bp,cp;
  cout << "a b c  a' b' c': ";
  if(!(cin>>a>>b>>c>>ap>>bp>>cp)) return 0;
  double D=a*bp-b*ap, Dx=c*bp-b*cp, Dy=a*cp-c*ap;
  if(D!=0) cout.setf(ios::fixed), cout<<setprecision(6),
    cout<<"x="<<Dx/D<<", y="<<Dy/D<<"\n";
  else if(Dx==0 && Dy==0) cout<<"Sistema indeterminato\n";
  else cout<<"Sistema impossibile\n";
}

12) Giorni del mese —
Dato un mese (1–12), visualizza quanti giorni ha (assumi febbraio=28).

Mostra soluzione 12)Nascondi soluzione 12)
#include <iostream>
using namespace std;
int main(){
  int m; cout << "Mese (1-12): "; if(!(cin>>m)) return 0;
  int g=-1;
  switch(m){
    case 1:case 3:case 5:case 7:case 8:case 10:case 12: g=31; break;
    case 4:case 6:case 9:case 11: g=30; break;
    case 2: g=28; break;
    default: cout<<"Mese non valido\n"; return 0;
  }
  cout << "Giorni: " << g << "\n";
}

13) Calcolatrice —
Dati due interi e una scelta 1:+ 2:− 3:× 4:÷, visualizza il risultato (gestisci divisione per 0).

Mostra soluzione 13)Nascondi soluzione 13)
#include <iostream>
using namespace std;
int main(){
  long long a,b; int op; cout << "a b op(1:+ 2:- 3:* 4:/): ";
  if(!(cin>>a>>b>>op)) return 0;
  switch(op){
    case 1: cout << a+b << "\n"; break;
    case 2: cout << a-b << "\n"; break;
    case 3: cout << a*b << "\n"; break;
    case 4: if(b==0) cout<<"Errore: div/0\n"; else cout<< a/(double)b << "\n"; break;
    default: cout << "Operazione non valida\n";
  }
}

14) Rettangolo —
Date base a e altezza b, a scelta stampa: 1) perimetro, 2) area, 3) diagonale.

Mostra soluzione 14)Nascondi soluzione 14)
#include <iostream>
#include <cmath>
using namespace std;
int main(){
  double a,b; int s; cout << "a b scelta(1 perim,2 area,3 diag): ";
  if(!(cin>>a>>b>>s)) return 0;
  switch(s){
    case 1: cout << "Perimetro=" << 2*(a+b) << "\n"; break;
    case 2: cout << "Area=" << a*b << "\n"; break;
    case 3: cout << "Diagonale=" << sqrt(a*a+b*b) << "\n"; break;
    default: cout << "Scelta non valida\n";
  }
}

15) Sconto per quantità —
Dato il numero di pezzi e il totale fattura, applica lo sconto (tabella modificabile).

Mostra soluzione 15)Nascondi soluzione 15)
#include <iostream>
#include <iomanip>
using namespace std;
// 🔧 Adatta qui i valori se la tua tabella è diversa
int scontoPerPezzi(int n){
  if(n<=1) return 0;
  if(n==2) return 10;
  if(n==3) return 20;
  if(n==4) return 25;
  if(n==5) return 30;
  if(n<=10) return 35;
  return 40;  // >10
}
int main(){
  int pezzi; double totale;
  cout << "Pezzi e totale: ";
  if(!(cin>>pezzi>>totale)) return 0;
  int s = scontoPerPezzi(pezzi);
  double pay = totale*(1.0 - s/100.0);
  cout.setf(ios::fixed); cout<<setprecision(2);
  cout << "Sconto " << s << "% → Da pagare €" << pay << "\n";
}

16) Biglietto mostra —
Prezzo in base all’età: <5: €0 • 6–10: €2 • 11–17: €3 • 18–26: €5 • >26: €7.

Mostra soluzione 16)Nascondi soluzione 16)
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
  int eta; cout << "Eta': "; if(!(cin>>eta)) return 0;
  double prezzo=7;
  if(eta<5) prezzo=0;
  else if(eta<=10) prezzo=2;
  else if(eta<=17) prezzo=3;
  else if(eta<=26) prezzo=5;
  else prezzo=7;
  cout.setf(ios::fixed); cout<<setprecision(2);
  cout << "Prezzo: €" << prezzo << "\n";
}

17) Agenzia immobiliare —
Date superficie (m²), zona e provvigione X%, calcola il prezzo totale.
Tabella (€/m²): Centro 1500 • Zona1 1200 • Zona2 1400 • Zona3 1300 • Periferia 1000.
Mostra soluzione 17)Nascondi soluzione 17)
#include <iostream>
#include <cctype>
#include <iomanip>
#include <string>
using namespace std;

double prezzoZona(const string& s){
  string z=s; for(char& c: z) c=toupper(c);
  if(z=="C"||z=="CENTRO") return 1500;
  if(z=="Z1"||z=="ZONA1") return 1200;
  if(z=="Z2"||z=="ZONA2") return 1400;
  if(z=="Z3"||z=="ZONA3") return 1300;
  if(z=="P" ||z=="PERIFERIA") return 1000;
  return -1; // non valida
}

int main(){
  double mq, x; string zona;
  cout << "Superficie(m^2) Zona(C/Z1/Z2/Z3/P) Provvigione%: ";
  if(!(cin>>mq>>zona>>x)) return 0;
  double pz = prezzoZona(zona);
  if(pz<0 || mq<=0){ cout << "Dati non validi\n"; return 0; }
  double base = mq*pz;
  double totale = base*(1.0 + x/100.0);
  cout.setf(ios::fixed); cout<<setprecision(2);
  cout << "Prezzo base €" << base << "  →  Totale con provvigione €" << totale << "\n";
}

18) Valori assoluti —
Dato N, leggi N numeri e visualizza l’assoluto di ciascuno.
Mostra soluzione 18)Nascondi soluzione 18)
#include <iostream>
#include <cmath>
using namespace std;
int main(){
  int N; cout << "N: "; if(!(cin>>N) || N<=0) return 0;
  for(int i=1;i<=N;++i){
    double v; cin>>v;
    cout << fabs(v) << (i<N? ' ':'\n');
  }
}

19) 100 numeri pari —
Visualizza i primi 100 numeri pari.
Mostra soluzione 19)Nascondi soluzione 19)
#include <iostream>
using namespace std;
int main(){ for(int i=1;i<=100;++i) cout<<(2*i)<<(i<100?' ':'\n'); }

20) N numeri pari —
Generalizzazione dell’esercizio precedente: stampa i primi N numeri pari.
Mostra soluzione 20)Nascondi soluzione 20)
#include <iostream>
using namespace std;
int main(){
  int N; cout << "N: "; if(!(cin>>N) || N<=0) return 0;
  for(int i=1;i<=N;++i) cout << (2*i) << (i<N?' ':'\n');
}

21) Somma dispari —
Leggi N interi (N < 100) e stampa la somma dei soli numeri dispari.
Mostra soluzione 21)Nascondi soluzione 21)
#include <iostream>
using namespace std;
int main(){
  int N; cout << "N (<100): "; if(!(cin>>N) || N<=0 || N>=100) return 0;
  long long som=0;
  for(int i=0;i<N;++i){ long long v; cin>>v; if(v%2!=0) som+=v; }
  cout << "Somma dispari = " << som << "\n";
}

22) Confronti con X —
Dato N e un valore X, conta: a) quanti > X; b) quanti < X; c) quanti = X.
Mostra soluzione 22)Nascondi soluzione 22)
#include <iostream>
using namespace std;
int main(){
  int N; long long X; cout << "N e X: ";
  if(!(cin>>N>>X) || N<=0) return 0;
  int gt=0, lt=0, eq=0;
  for(int i=0;i<N;++i){
    long long v; cin>>v;
    if(v>X) ++gt; else if(v<X) ++lt; else ++eq;
  }
  cout << "Maggiore: " << gt << ", Minore: " << lt << ", Uguale: " << eq << "\n";
}

23) Max e min —
Dato N, leggi N numeri e stampa massimo e minimo.
Mostra soluzione 23)Nascondi soluzione 23)
#include <iostream>
#include <limits>
using namespace std;
int main(){
  int N; cout << "N: "; if(!(cin>>N) || N<=0) return 0;
  long long mn=LLONG_MAX, mx=LLONG_MIN, v;
  for(int i=0;i<N;++i){ cin>>v; if(v<mn) mn=v; if(v>mx) mx=v; }
  cout << "Min=" << mn << "  Max=" << mx << "\n";
}

24) Sequenza fino a 0 —
Leggi una sequenza di interi terminata da 0 (lo zero non si conta). Stampa massimo, minimo e le rispettive posizioni (1-based) nella sequenza.
Mostra soluzione 24)Nascondi soluzione 24)
#include <iostream>
#include <limits>
using namespace std;
int main(){
  long long v; long long mn=LLONG_MAX, mx=LLONG_MIN;
  int pos=0, posMin=-1, posMax=-1;
  while(cin>>v && v!=0){
    ++pos;
    if(v<mn){ mn=v; posMin=pos; }
    if(v>mx){ mx=v; posMax=pos; }
  }
  if(pos==0) cout << "Nessun dato\n";
  else cout << "Min=" << mn << " (pos " << posMin
             << "), Max=" << mx << " (pos " << posMax << ")\n";
}

25) Numero primo —
Stabilisci se un intero n è primo.
Mostra soluzione 25)Nascondi soluzione 25)
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(long long n){
  if(n<2) return false;
  if(n%2==0) return n==2;
  for(long long d=3; d*d<=n; d+=2) if(n%d==0) return false;
  return true;
}
int main(){ long long n; cout<<"n: "; if(!(cin>>n)) return 0;
  cout << (isPrime(n)? "Primo\n":"Non primo\n"); }

26) Primi N numeri primi —
Dato N, stampa i primi N numeri primi.
Mostra soluzione 26)Nascondi soluzione 26)
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(long long n){
  if(n<2) return false;
  if(n%2==0) return n==2;
  for(long long d=3; d*d<=n; d+=2) if(n%d==0) return false;
  return true;
}
int main(){
  int N; cout << "N: "; if(!(cin>>N) || N<=0) return 0;
  int cnt=0; long long x=2;
  while(cnt<N){
    if(isPrime(x)){ ++cnt; cout << x << (cnt<N?' ':'\n'); }
    ++x;
  }
}


27) Somma dei primi N primi —
Con N da tastiera, calcola la somma dei primi N numeri primi.
Mostra soluzione 27)Nascondi soluzione 27)
#include <iostream>
using namespace std;
bool primo(long long n){
  if(n<2) return false; if(n%2==0) return n==2;
  for(long long d=3; d*d<=n; d+=2) if(n%d==0) return false;
  return true;
}
int main(){
  int N; cout << "N: "; if(!(cin>>N) || N<=0) return 0;
  long long som=0, x=2; int cnt=0;
  while(cnt<N){ if(primo(x)){ som+=x; ++cnt; } ++x; }
  cout << "Somma = " << som << "\n";
}

28) Statistiche —
Leggi N reali e visualizza: minimo, massimo, media.
Mostra soluzione 28)Nascondi soluzione 28)
#include <iostream>
#include <limits>
#include <iomanip>
using namespace std;
int main(){
  int N; cout << "N: "; if(!(cin>>N) || N<=0) return 0;
  double mn= numeric_limits<double>::infinity();
  double mx=-numeric_limits<double>::infinity(), som=0, v;
  for(int i=0;i<N;++i){ cin>>v; som+=v; if(v<mn) mn=v; if(v>mx) mx=v; }
  cout.setf(ios::fixed); cout<<setprecision(3);
  cout << "min=" << mn << "  max=" << mx << "  media=" << som/N << "\n";
}

29) Cifre —
Dato un intero positivo <1000, stampa centinaia, decine, unità.
Mostra soluzione 29)Nascondi soluzione 29)
#include <iostream>
using namespace std;
int main(){
  int n; cout << "n (<1000): "; if(!(cin>>n) || n<0 || n>=1000) return 0;
  int c = n/100, d=(n/10)%10, u=n%10;
  cout << "Centinaia=" << c << ", Decine=" << d << ", Unita'=" << u << "\n";
}

30) Scostamento massimo —
Dati N reali, calcola la media e indica valore e indice (1-based) del dato con massimo scostamento assoluto dalla media.
Mostra soluzione 30)Nascondi soluzione 30)
#include <iostream>
#include <cmath>
using namespace std;
int main(){
  int N; cout << "N: "; if(!(cin>>N) || N<=0) return 0;
  double *a=new double[N], som=0;
  for(int i=0;i<N;++i){ cin>>a[i]; som+=a[i]; }
  double media=som/N, bestDev=-1, bestVal=0; int bestIdx=-1;
  for(int i=0;i<N;++i){
    double dev=fabs(a[i]-media);
    if(dev>bestDev){ bestDev=dev; bestVal=a[i]; bestIdx=i+1; }
  }
  cout << "Media=" << media << "  Max scost=" << bestDev
       << " (val=" << bestVal << ", indice=" << bestIdx << ")\n";
  delete[] a;
}

31) Solo + e − —
Per positivi X e Y: calcola prodotto (somma ripetuta) e quoziente intero (sottrazioni ripetute). Evita divisione per 0.
Mostra soluzione 31)Nascondi soluzione 31)
#include <iiostream>
using namespace std;
int main(){
  long long X,Y; cout << "X Y (>=0): "; if(!(cin>>X>>Y)) return 0;
  // prodotto X*Y via somme
  long long prod=0; for(long long i=0;i<Y;++i) prod+=X;
  cout << "Prodotto = " << prod << "\n";
  // quoziente intero X/Y via sottrazioni
  if(Y==0){ cout << "Quoziente: indeterminato (divisione per 0)\n"; return 0; }
  long long q=0, r=X; while(r>=Y){ r-=Y; ++q; }
  cout << "Quoziente = " << q << "  Resto = " << r << "\n";
}

32) Potenza an
Scrivi due versioni: (A) usa moltiplicazioni per calcolare a^n con a,n ≥ 0; (B) supponi di conoscere solo somma e sottrazione (realizza moltiplicazione come somma ripetuta, poi potenza).
Mostra soluzione 32)Nascondi soluzione 32)
#include <iostream>
using namespace std;

// ---- (A) con moltiplicazioni
long long pow_mul(long long a, long long n){
  long long p=1; for(long long i=0;i<n;++i) p*=a; return p;
}

// ---- (B) solo + e −
long long mul_add(long long x, long long y){
  long long r=0; for(long long i=0;i<y;++i) r+=x; return r;
}
long long pow_add(long long a, long long n){
  long long p=1;
  for(long long i=0;i<n;++i) p = mul_add(p,a);
  return p;
}

int main(){
  long long a,n; cout << "a n (>=0): "; if(!(cin>>a>>n)) return 0;
  cout << "(A) a^n = " << pow_mul(a,n) << "\n";
  cout << "(B) a^n = " << pow_add(a,n) << "\n";
}

33) Potenza con esponente negativo —
Dati reale N e intero M, calcola N^M. Se M<0, restituisci 1/(N^{|M|}) (gestisci il caso N=0).
Mostra soluzione 33)Nascondi soluzione 33)
#include <iostream>
#include <iomanip>
using namespace std;
double powpos(double a, long long m){
  double p=1; for(long long i=0;i<m;++i) p*=a; return p;
}
int main(){
  double N; long long M; cout << "N (reale) e M (intero): ";
  if(!(cin>>N>>M)) return 0;
  cout.setf(ios::fixed); cout<<setprecision(6);
  if(M==0){ cout << "Risultato = 1\n"; return 0; }
  if(M>0)  cout << "Risultato = " << powpos(N,M) << "\n";
  else{
    if(N==0){ cout << "Indefinito (0 con esponente negativo)\n"; }
    else     cout << "Risultato = " << 1.0/powpos(N,-M) << "\n";
  }
}

34) Scomposizione in fattori primi —
Dato N e poi N interi, per ognuno stampa la scomposizione in fattori primi.
Mostra soluzione 34)Nascondi soluzione 34)
#include <iiostream>
using namespace std;
int main(){
  int N; cout << "Quanti numeri? "; if(!(cin>>N) || N<=0) return 0;
  while(N--){
    long long x; cin>>x; cout << x << " = ";
    if(x==0){ cout << "0\n"; continue; }
    long long n = (x<0? -x : x); if(x<0) cout << "-1 * ";
    long long d=2; bool first=true;
    while(n>1){
      int cnt=0; while(n%d==0){ n/=d; ++cnt; }
      if(cnt>0){
        if(!first) cout << " * ";
        cout << d; if(cnt>1) cout << "^" << cnt;
        first=false;
      }
      ++d; if(d*d>n) d=n;
    }
    cout << "\n";
  }
}

35) Fattoriali —
Dato N, poi N interi n≥0, stampa n! per ciascuno (avvisa se troppo grande).
Mostra soluzione 35)Nascondi soluzione 35)
#include <iiostream>
using namespace std;
int main(){
  int N; cout << "Quanti n? "; if(!(cin>>N) || N<=0) return 0;
  while(N--){
    int n; cin>>n;
    if(n<0){ cout << "n negativo\n"; continue; }
    // attenzione: overflow oltre ~20!
    unsigned long long f=1;
    for(int i=2;i<=n;++i) f*=i;
    cout << n << "! = " << f << (n>20? "  (possibile overflow)":"") << "\n";
  }
}

36) Quattro somme —
Dato N e poi N interi, calcola le somme di: positivi, negativi, pari, dispari.
Mostra soluzione 36)Nascondi soluzione 36)
#include <iiostream>
using namespace std;
int main(){
  int N; cout << "N: "; if(!(cin>>N) || N<=0) return 0;
  long long sp=0, sn=0, spari=0, sdisp=0, v;
  for(int i=0;i<N;++i){
    cin>>v; if(v>=0) sp+=v; else sn+=v;
    if(v%2==0) spari+=v; else sdisp+=v;
  }
  cout << "Somma positivi=" << sp
       << "  negativi=" << sn
       << "  pari=" << spari
       << "  dispari=" << sdisp << "\n";
}

37) Quadrati con dispari —
Stampa i quadrati 1²,2²,...,N² usando la proprietà n² = 1+3+5+...+(2n−1).
Mostra soluzione 37)Nascondi soluzione 37)
#include <iiostream>
using namespace std;
int main(){
  int N; cout << "N: "; if(!(cin>>N) || N<=0) return 0;
  long long som=0, odd=1;
  for(int n=1;n<=N;++n){
    som += odd; odd += 2;      // aggiungo il n-esimo dispari
    cout << n << "^2 = " << som << "\n";
  }
}

38) Superare un limite —
Dato A>0 e un limite L, considera la successione x₀ = A+1, x_{k+1}=x_k+1. Trova il più piccolo k tale che x_k > L e stampa k e x_k.
Mostra soluzione 38)Nascondi soluzione 38)
#include <iiostream>
using namespace std;
int main(){
  long long A,L; cout << "A (>0) e L: "; if(!(cin>>A>>L) || A<=0) return 0;
  long long x = A+1; long long k=0;
  while(x<=L){ ++k; ++x; }
  cout << "k minimo = " << k << ", x_k = " << x << "\n";
}


39) Successione —
Dato A, stampa i primi 100 valori della successione: A, A+10, A+15, A+20, …
Mostra soluzione 39)Nascondi soluzione 39)
#include <iostream>
using namespace std;
int main(){
  long long A; cout << "A: "; if(!(cin>>A)) return 0;
  for(int i=0;i<100;++i){
    cout << (A + (i==0?0:10 + 5*(i-1))) << (i<99?' ':'\n');
  }
}

40) Successioni varie —
Genera le successioni indicate:
a) 1,3,5,7,…99
b) 1,4,9,16,25,…2500
c) 1,-2,3,-4,5,-6,…-100
d) 1/2,2/3,3/4,…99/100
Mostra soluzione 40)Nascondi soluzione 40)
#include <iostream>
using namespace std;
int main(){
  // a)
  for(int i=1;i<100;i+=2) cout<<i<<" "; cout<<"\n";
  // b)
  for(int i=1;i*i<=2500;++i) cout<<i*i<<" "; cout<<"\n";
  // c)
  for(int i=1;i<=100;++i) cout<<(i%2? i:-i)<<" "; cout<<"\n";
  // d)
  for(int i=1;i<100;++i) cout<<i<<"/"<<(i+1)<<" "; cout<<"\n";
}

41) Somma con potenze —
Leggi N numeri e calcola SOMMA = a1 + a2^2 + a3^2 + ...
Mostra soluzione 41)Nascondi soluzione 41)
#include <iostream>
using namespace std;
int main(){
  int N; cin>>N; long long som=0;
  for(int i=1;i<=N;++i){
    long long v; cin>>v;
    som += (i==1 ? v : v*v);
  }
  cout << "Somma=" << som << "\n";
}

42) Somma a coppie —
Leggi N numeri e calcola SOMMA=(a1*a2)+(a3*a4)+...
Mostra soluzione 42)Nascondi soluzione 42)
#include <iostream>
using namespace std;
int main(){
  int N; cin>>N; long long som=0;
  for(int i=1;i<=N;i+=2){
    long long a,b; cin>>a>>b; som+=a*b;
  }
  cout << "Somma=" << som << "\n";
}

43) Somma a terne —
Leggi N numeri e calcola SOMMA=(a1*a2*a3)+(a4*a5*a6)+...
Mostra soluzione 43)Nascondi soluzione 43)
#include <iostream>
using namespace std;
int main(){
  int N; cin>>N; long long som=0;
  for(int i=1;i<=N;i+=3){
    long long a,b,c; cin>>a>>b>>c; som+=a*b*c;
  }
  cout << "Somma=" << som << "\n";
}

44) Triangolo di Tartaglia —
Stampa le prime N righe del triangolo di Tartaglia.
Mostra soluzione 44)Nascondi soluzione 44)
#include <iostream>
using namespace std;
int main(){
  int N; cin>>N;
  for(int r=0;r<N;++r){
    long long val=1;
    for(int c=0;c<=r;++c){
      if(c>0) val = val*(r-c+1)/c;
      cout<<val<<(c<r?' ':'\n');
    }
  }
}

45) Temperature —
Dato l’elenco delle città con min/max temperatura, stampa la città col minimo più basso e quella col massimo più alto.
Mostra soluzione 45)Nascondi soluzione 45)
#include <iostream>
#include <string>
using namespace std;
int main(){
  int N; cin>>N;
  string minC,maxC; int tmin=1000,tmax=-1000;
  for(int i=0;i<N;++i){
    string nome; int mn,mx; cin>>nome>>mn>>mx;
    if(mn<tmin){ tmin=mn; minC=nome; }
    if(mx>tmax){ tmax=mx; maxC=nome; }
  }
  cout << "Citta' piu' fredda: " << minC
       << " (" << tmin << ")\n";
  cout << "Citta' piu' calda: " << maxC
       << " (" << tmax << ")\n";
}

46) Somma ripetuta —
Calcola la somma di X e Y, considerando Y volte l’aggiunta di X.
Mostra soluzione 46)Nascondi soluzione 46)
#include <iostream>
using namespace std;
int main(){
  long long X,Y; cin>>X>>Y;
  long long som=0;
  for(long long i=0;i<Y;++i) som+=X;
  cout<<"Risultato="<<som<<"\n";
}

47) Polinomio —
Dato grado n e coefficienti a_n...a_0 più X, calcola il polinomio.
Mostra soluzione 47)Nascondi soluzione 47)
#include <iostream>
using namespace std;
int main(){
  int n; double X; cin>>n>>X;
  double som=0;
  for(int i=n;i>=0;--i){
    double a; cin>>a;
    som = som*X + a;  // schema di Horner
  }
  cout<<"Valore="<<som<<"\n";
}

48) Ore lavoro —
Dato numero dipendenti e ore settimanali lavorate, calcola stipendio lordo (ore × tariffa).
Mostra soluzione 48)Nascondi soluzione 48)
#include <iostream>
using namespace std;
int main(){
  int N; double tariffa; cin>>N>>tariffa;
  for(int i=0;i<N;++i){
    string nome; double ore; cin>>nome>>ore;
    cout<<nome<<" → Stipendio="<<ore*tariffa<<"\n";
  }
}

49) Conteggio studenti —
Dato elenco (nome + classe 1–5), calcola quanti studenti per ogni classe.
Mostra soluzione 49)Nascondi soluzione 49)
#include <iostream>
#include <map>
using namespace std;
int main(){
  int N; cin>>N; map<int,int> conta;
  for(int i=0;i<N;++i){
    string nome; int cl; cin>>nome>>cl; conta[cl]++;
  }
  for(auto &p:conta) cout<<"Classe "<<p.first<<": "<<p.second<<" studenti\n";
}

50) Conteggio classe+sezione —
Dato elenco (nome, classe, sezione), calcola quanti studenti per ogni coppia classe–sezione.
Mostra soluzione 50)Nascondi soluzione 50)
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main(){
  int N; cin>>N; map<string,int> conta;
  for(int i=0;i<N;++i){
    string nome, sez; int cl; cin>>nome>>cl>>sez;
    conta[to_string(cl)+sez]++;
  }
  for(auto &p:conta) cout<<p.first<<": "<<p.second<<" studenti\n";
}

51) Data di Pasqua —
Dato un anno, calcola la data della Pasqua (algoritmo tabellare).
Mostra soluzione 51)Nascondi soluzione 51)
#include <iostream>
using namespace std;
int main(){
  int y; cin>>y;
  int a=y%19, b=y/100, c=y%100, d=b/4, e=b%4;
  int f=(b+8)/25, g=(b-f+1)/3, h=(19*a+b-d-g+15)%30;
  int i=c/4, k=c%4, l=(32+2*e+2*i-h-k)%7;
  int m=(a+11*h+22*l)/451;
  int mese=(h+l-7*m+114)/31;
  int giorno=((h+l-7*m+114)%31)+1;
  cout<<"Pasqua: "<<giorno<<"/"<<mese<<"/"<<y<<"\n";
}

Traguardo COMPETENZE — Compito di realtà “Father & songs”

Obiettivo: progettare un sistema che cataloghi brani/supporti, consenta ricerche rapide (genere, autore, titolo) e individui il supporto fisico nella collezione.

Dati iniziali: supporti (MC, LP33, 45, CD); brani (titolo, autore, anno, durata, genere, supporto, posizione).

Mostra modello di soluzioneNascondi modello di soluzione

Vincoli

Vincolo Descrizione
V1 Ogni brano ha un genere (dominio finito).
V2 Per ogni brano: titolo, autore, anno, durata, supporto, posizione.
V3 Ricerca case-insensitive per titolo/autore/genere.
V4 Supporto ∈ {MC, LP33, 45, CD}; posizione obbligatoria.

Pseudocodice

ALGORITMO Acquisizione_discografia
VAR: totale_brani, i; titolo, autore, anno, durata, genere, supporto, posizione
INIZIO
  LEGGI(totale_brani)
  PER i ← 1 A totale_brani FAI
    LEGGI(titolo, autore, anno, durata, genere, supporto, posizione)
    INSERISCI_RECORD(...)
  FINE PER
FINE

Test di verifica

Test Risultato atteso Esito
Ricerca per titolo inesistente Nessun brano OK
Ricerca per titolo esistente ≥ 1 record OK
Supporto non valido Errore di validazione Bloccato

CLIL – Applications and apps (Q/A)

  1. What is an app?
  2. What can you do with an app?
  3. What is a mobile app?
  4. What is stand-alone software?
  5. What is an operating system?
  6. What is multi-tasking?

Mostra risposteNascondi risposte
  1. A software that performs specific tasks.
  2. Run actions like editing, browsing, messaging, etc.
  3. Software running on handheld devices with an OS.
  4. Software that does not depend on other apps/services.
  5. Software that manages hardware and runs applications.
  6. Running multiple applications at the same time.

Rifletti sul tuo apprendimento — Checklist

I. Conoscenze (spuntare ciò che è vero)

  • So distinguere problema, algoritmo, variabili/costanti.
  • Conosco if, while, do...while, for, switch.
  • So usare I/O in C/C++ (cin, cout).

II. Abilità

  • Traduco un testo in algoritmo e poi in codice.
  • Scelgo il ciclo adatto (pre/post/definito) motivando la scelta.
  • Verifico il codice con casi-limite (zero, negativi, overflow).

III. Prossimi passi

  • Ripasso: differenza while vs do...while.
  • Esercizio mirato: numeri primi / MCD.
  • Mini–progetto: menù, validazioni, report.

Mostra suggerimentiNascondi suggerimenti

Rubrica rapida (autovalutazione 0–2):

  • 0 = non so farlo / ho bisogno di guida
  • 1 = lo faccio con aiuti
  • 2 = lo faccio in autonomia e spiego le scelte

Concentra il ripasso sulle voci con punteggio 0–1 e scegli un esercizio sopra da ripetere con casi-limite.