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:
- Il costrutto di selezione si traduce con la parola chiave
if. - La clausola
elsedel costrutto di selezione è obbligatoria. - Il numero di
casedella strutturaswitchdeve essere > 3. - L’istruzione
whilepuò essere utilizzata solo all’inizio del ciclo. - Il ciclo
forsi usa quando è noto a priori il numero di iterazioni. - L’istruzione di incremento deve stare dentro il corpo del
for.
▶▼
Mostra soluzioni V/FNascondi soluzioni V/F
- V
- F
- F
- F
- V
- F — può stare nel 3° campo del
foro 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. 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. 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)
- A)
- 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. 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. In C, è previsto il fall-through automatico tra le clausole dello
switch. Questo significa che:- A) il
caseverificato non esclude i restanti - B) il
caseverificato esclude tutti gli altri - C) il
caseverificato termina l’esecuzione dell’intera istruzione - D) lo
switchdeve necessariamente prevedere undefault
- A) il
- 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
- A)
- 7. La differenza tra i cicli
whileedo...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. In C, il ciclo postcondizionale si rappresenta con l’istruzione:
- A)
do...while - B)
while - C)
default - D)
switch - E)
case - F)
if...else
- A)
- 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
- A)
- 10. Qual è il valore della variabile
ialla fine del ciclofor(i=0; i<5; i++)?- A) 7
- B) 5
- C) 4
- D) 6
Vero o falso (11–20)
switchè un’istruzione di selezione. [V/F]- In un costrutto
switch, la presenza dell’istruzionebreakè sempre necessaria. [V/F] - Il ciclo
forprevede una variabile indice. [V/F] - Entrambi i costrutti
whileedo...whileiterano per vero. [V/F] - Il ciclo
do...whileè sempre da preferire alwhile. [V/F] - L’istruzione
ifprevede sempre unelse. [V/F] - Il blocco di un’istruzione
ifnon può contenere un ciclo al suo interno. [V/F] - Il costrutto
fornon prevede una condizione. [V/F] - Il costrutto
forpuò essere sempre trasformato in un costruttowhile. [V/F] - L’istruzione
breakè necessaria per evitare di eseguire altricase. [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
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";
}
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");
}
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";
}
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";
}
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";
}
}
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";
}
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"; }
}
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";
}
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";
}
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";
}
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";
}
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";
}
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";
}
}
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";
}
}
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";
}
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";
}
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";
}
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');
}
}
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'); }
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');
}
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";
}
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";
}
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";
}
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";
}
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"); }
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;
}
}
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";
}
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";
}
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";
}
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;
}
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";
}
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";
}
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";
}
}
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";
}
}
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";
}
}
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";
}
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";
}
}
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";
}
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');
}
}
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";
}
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";
}
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";
}
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";
}
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');
}
}
}
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";
}
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";
}
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";
}
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";
}
}
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";
}
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";
}
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)
- What is an app?
- What can you do with an app?
- What is a mobile app?
- What is stand-alone software?
- What is an operating system?
- What is multi-tasking?
▶▼Mostra risposteNascondi risposte
- A software that performs specific tasks.
- Run actions like editing, browsing, messaging, etc.
- Software running on handheld devices with an OS.
- Software that does not depend on other apps/services.
- Software that manages hardware and runs applications.
- 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
whilevsdo...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.