Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Sfida: Istruzioni If Annidate | Introduzione alle Istruzioni Condizionali
Istruzioni Condizionali in C++

Sfida: Istruzioni If Annidate

Un'istruzione if annidata è semplicemente un'istruzione if all'interno di un'altra istruzione if. Questa struttura consente di valutare più condizioni, una dopo l'altra, ed eseguire specifici blocchi di codice.

nested_if.h

nested_if.h

1234567891011121314
if (condition1) { // Code block 1 if (condition2) { // Code block 2 if (condition3) { // Code block 3 } } }

L'istruzione if esterna funziona come un portiere e, in base alla sua valutazione, può consentire l'accesso a un'altra istruzione if interna. Si consideri uno scenario in cui si desidera determinare lo stipendio di un lavoratore in base alle sue prestazioni.

main.cpp

main.cpp

12345678910111213141516171819202122232425
#include <iostream> int main() { int current_salary = 1000; int completed_tasks = 17; int hours_worked = 37; // If the number of completed tasks is greater than 15, if (completed_tasks > 15) { // add an 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; // And if the number of hours worked is more than 40 if (hours_worked > 40) { // add an additional 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; } } std::cout << current_salary << std::endl; }

Questo codice calcola il nuovo stipendio di un dipendente in base al numero di compiti completati e alle ore lavorate, con un aumento del 20% se i compiti sono superiori a 15 e un ulteriore aumento del 20% se le ore lavorate sono superiori a 40. Come puoi vedere, il calcolo attuale è 1200. Questo risultato può essere ottenuto solo utilizzando istruzioni if annidate; di seguito alcuni tentativi di ottenere la stessa logica senza di esse.

main.cpp

main.cpp

12345678910111213141516171819202122232425
#include <iostream> int main() { int current_salary = 1000; int completed_tasks = 9; int hours_worked = 41; // If the number of completed tasks is greater than 15, if (completed_tasks > 15) { // add an 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; } // If the number of hours worked is more than 40 if (hours_worked > 40) { // add an 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; } std::cout << current_salary << std::endl; }

All'inizio potrebbe sembrare che funzioni allo stesso modo, ma in questo caso il lavoratore riceverà un aumento extra del 20% indipendentemente dal fatto che abbia completato più di 15 compiti. Esegui il codice e osserva l'output, che mostra un valore di 1200, anche se questa volta il lavoratore non ha completato più di 15 compiti.

main.cpp

main.cpp

1234567891011121314151617181920212223
#include <iostream> int main() { int current_salary = 1000; int completed_tasks = 19; int hours_worked = 39; // If the number of completed tasks is greater than 15 // AND the number of of hours worked is more than 40 if (completed_tasks > 15 && hours_worked > 40) { // add an 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; // add an 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; std::cout << current_salary << std::endl; } std::cout << current_salary << std::endl; }

In quel caso, potrebbe sembrare che debba funzionare come previsto, ma purtroppo è anch'esso errato, l'output è 1000. Questo perché se il lavoratore completa più di 15 compiti ma non lavora più di 40 ore, non riceverà nulla. Quindi, è necessario utilizzare istruzioni if annidate per ottenere la corretta implementazione.

Le istruzioni if annidate sono particolarmente utili per creare processi decisionali e gestire scenari complessi nel codice. Progettando attentamente la struttura del codice e mantenendo la leggibilità, è possibile sfruttare la potenza delle istruzioni if annidate per scrivere programmi efficienti e facilmente manutenibili.

Note
Nota

Le istruzioni if annidate sono necessarie in alcuni casi ma non sempre. Nella terza sezione discuteremo quando, perché e come evitarle.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 5
single

single

Sfida: Istruzioni If Annidate

Scorri per mostrare il menu

Un'istruzione if annidata è semplicemente un'istruzione if all'interno di un'altra istruzione if. Questa struttura consente di valutare più condizioni, una dopo l'altra, ed eseguire specifici blocchi di codice.

nested_if.h

nested_if.h

1234567891011121314
if (condition1) { // Code block 1 if (condition2) { // Code block 2 if (condition3) { // Code block 3 } } }

L'istruzione if esterna funziona come un portiere e, in base alla sua valutazione, può consentire l'accesso a un'altra istruzione if interna. Si consideri uno scenario in cui si desidera determinare lo stipendio di un lavoratore in base alle sue prestazioni.

main.cpp

main.cpp

12345678910111213141516171819202122232425
#include <iostream> int main() { int current_salary = 1000; int completed_tasks = 17; int hours_worked = 37; // If the number of completed tasks is greater than 15, if (completed_tasks > 15) { // add an 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; // And if the number of hours worked is more than 40 if (hours_worked > 40) { // add an additional 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; } } std::cout << current_salary << std::endl; }

Questo codice calcola il nuovo stipendio di un dipendente in base al numero di compiti completati e alle ore lavorate, con un aumento del 20% se i compiti sono superiori a 15 e un ulteriore aumento del 20% se le ore lavorate sono superiori a 40. Come puoi vedere, il calcolo attuale è 1200. Questo risultato può essere ottenuto solo utilizzando istruzioni if annidate; di seguito alcuni tentativi di ottenere la stessa logica senza di esse.

main.cpp

main.cpp

12345678910111213141516171819202122232425
#include <iostream> int main() { int current_salary = 1000; int completed_tasks = 9; int hours_worked = 41; // If the number of completed tasks is greater than 15, if (completed_tasks > 15) { // add an 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; } // If the number of hours worked is more than 40 if (hours_worked > 40) { // add an 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; } std::cout << current_salary << std::endl; }

All'inizio potrebbe sembrare che funzioni allo stesso modo, ma in questo caso il lavoratore riceverà un aumento extra del 20% indipendentemente dal fatto che abbia completato più di 15 compiti. Esegui il codice e osserva l'output, che mostra un valore di 1200, anche se questa volta il lavoratore non ha completato più di 15 compiti.

main.cpp

main.cpp

1234567891011121314151617181920212223
#include <iostream> int main() { int current_salary = 1000; int completed_tasks = 19; int hours_worked = 39; // If the number of completed tasks is greater than 15 // AND the number of of hours worked is more than 40 if (completed_tasks > 15 && hours_worked > 40) { // add an 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; // add an 20% increase to the current salary current_salary = current_salary + current_salary * 0.2; std::cout << current_salary << std::endl; } std::cout << current_salary << std::endl; }

In quel caso, potrebbe sembrare che debba funzionare come previsto, ma purtroppo è anch'esso errato, l'output è 1000. Questo perché se il lavoratore completa più di 15 compiti ma non lavora più di 40 ore, non riceverà nulla. Quindi, è necessario utilizzare istruzioni if annidate per ottenere la corretta implementazione.

Le istruzioni if annidate sono particolarmente utili per creare processi decisionali e gestire scenari complessi nel codice. Progettando attentamente la struttura del codice e mantenendo la leggibilità, è possibile sfruttare la potenza delle istruzioni if annidate per scrivere programmi efficienti e facilmente manutenibili.

Note
Nota

Le istruzioni if annidate sono necessarie in alcuni casi ma non sempre. Nella terza sezione discuteremo quando, perché e come evitarle.

Compito

Scorri per iniziare a programmare

Stai creando un sistema di biglietteria cinematografica. I prezzi dei biglietti variano in base all'età del cliente e se si tratta di un fine settimana o di un giorno feriale.

  1. Utilizza istruzioni if annidate per determinare il prezzo del biglietto:
    • Se il cliente ha meno di 18 anni, applica:
      • 12.0 nei fine settimana
      • 8.0 nei giorni feriali
    • Se il cliente ha tra 18 e 60 anni, applica:
      • 20.0 nei fine settimana
      • 15.0 nei giorni feriali
    • Se il cliente ha più di 60 anni, applica:
      • 16.0 nei fine settimana
      • 10.0 nei giorni feriali
  2. Restituisci il prezzo del biglietto dalla funzione.

Esempio

calculateTicketPrice(16, true) → 12.0
calculateTicketPrice(30, false) → 15.0
calculateTicketPrice(70, true) → 16.0

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 5
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

some-alt