Haaste: Sisäkkäiset If-Lauseet
Sisäkkäinen if-lause on yksinkertaisesti if-lause toisen if-lauseen sisällä. Tämän rakenteen avulla voidaan arvioida useita ehtoja peräkkäin ja suorittaa tiettyjä koodilohkoja.
nested_if.h
1234567891011121314if (condition1) { // Code block 1 if (condition2) { // Code block 2 if (condition3) { // Code block 3 } } }
Ulkoinen if-lause toimii portinvartijana, ja sen arvion perusteella se voi avata oven sisäiselle if-lauseelle. Tarkastellaan tilannetta, jossa halutaan määrittää työntekijän palkka suorituksen perusteella.
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; }
Tämä koodi laskee työntekijän uuden palkan suoritettujen tehtävien ja tehtyjen työtuntien perusteella. Palkkaa korotetaan 20 %, jos tehtäviä on yli 15, ja lisäksi 20 %, jos työtunteja on yli 40. Kuten huomaat, nykyinen laskelma on 1200. Tämä voidaan saavuttaa vain käyttämällä sisäkkäisiä if-lauseita; tässä on joitakin yrityksiä saavuttaa sama logiikka ilman niitä.
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; }
Aluksi saattaa vaikuttaa siltä, että se toimii samalla tavalla, mutta tässä tapauksessa työntekijä saa ylimääräisen 20 % palkankorotuksen, riippumatta siitä, onko hän suorittanut yli 15 tehtävää. Suorita koodi ja tarkastele tulostetta, joka näyttää arvon 1200, vaikka tällä kertaa työntekijä ei suorittanut yli 15 tehtävää.
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; }
Tässä tapauksessa saattaa vaikuttaa siltä, että sen pitäisi toimia oikein, mutta valitettavasti se on myös virheellinen, tulos on 1000. Tämä johtuu siitä, että jos työntekijä suorittaa yli 15 tehtävää mutta ei työskentele yli 40 tuntia, hän ei saa mitään. Siksi täytyy käyttää sisäkkäisiä if-lauseita oikean toteutuksen saavuttamiseksi.
Sisäkkäiset if-lauseet ovat erittäin hyödyllisiä päätöksentekoprosessien luomisessa ja monimutkaisten tilanteiden käsittelyssä koodissasi. Suunnittelemalla koodirakenteen huolellisesti ja säilyttämällä luettavuuden voit hyödyntää sisäkkäisiä if-lauseita tehokkaiden ja ylläpidettävien ohjelmien kirjoittamiseen.
Sisäkkäiset if-lauseet ovat välttämättömiä joissakin tapauksissa mutta eivät aina. Kolmannessa osiossa käsittelemme, milloin, miksi ja miten niitä kannattaa välttää.
Swipe to start coding
Olet luomassa elokuvalippujärjestelmää. Lippujen hinnat vaihtelevat asiakkaan iän ja sen mukaan, onko kyseessä viikonloppu vai arkipäivä.
- Käytä sisäkkäisiä if-lauseita määrittääksesi lipun hinnan:
- Jos asiakas on alle 18-vuotias, veloita:
12.0viikonloppuisin8.0arkipäivisin
- Jos asiakas on 18–60-vuotias, veloita:
20.0viikonloppuisin15.0arkipäivisin
- Jos asiakas on yli 60-vuotias, veloita:
16.0viikonloppuisin10.0arkipäivisin
- Jos asiakas on alle 18-vuotias, veloita:
- Palauta lipun hinta funktiosta.
Esimerkki
calculateTicketPrice(16, true) → 12.0
calculateTicketPrice(30, false) → 15.0
calculateTicketPrice(70, true) → 16.0
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 7.69
Haaste: Sisäkkäiset If-Lauseet
Pyyhkäise näyttääksesi valikon
Sisäkkäinen if-lause on yksinkertaisesti if-lause toisen if-lauseen sisällä. Tämän rakenteen avulla voidaan arvioida useita ehtoja peräkkäin ja suorittaa tiettyjä koodilohkoja.
nested_if.h
1234567891011121314if (condition1) { // Code block 1 if (condition2) { // Code block 2 if (condition3) { // Code block 3 } } }
Ulkoinen if-lause toimii portinvartijana, ja sen arvion perusteella se voi avata oven sisäiselle if-lauseelle. Tarkastellaan tilannetta, jossa halutaan määrittää työntekijän palkka suorituksen perusteella.
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; }
Tämä koodi laskee työntekijän uuden palkan suoritettujen tehtävien ja tehtyjen työtuntien perusteella. Palkkaa korotetaan 20 %, jos tehtäviä on yli 15, ja lisäksi 20 %, jos työtunteja on yli 40. Kuten huomaat, nykyinen laskelma on 1200. Tämä voidaan saavuttaa vain käyttämällä sisäkkäisiä if-lauseita; tässä on joitakin yrityksiä saavuttaa sama logiikka ilman niitä.
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; }
Aluksi saattaa vaikuttaa siltä, että se toimii samalla tavalla, mutta tässä tapauksessa työntekijä saa ylimääräisen 20 % palkankorotuksen, riippumatta siitä, onko hän suorittanut yli 15 tehtävää. Suorita koodi ja tarkastele tulostetta, joka näyttää arvon 1200, vaikka tällä kertaa työntekijä ei suorittanut yli 15 tehtävää.
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; }
Tässä tapauksessa saattaa vaikuttaa siltä, että sen pitäisi toimia oikein, mutta valitettavasti se on myös virheellinen, tulos on 1000. Tämä johtuu siitä, että jos työntekijä suorittaa yli 15 tehtävää mutta ei työskentele yli 40 tuntia, hän ei saa mitään. Siksi täytyy käyttää sisäkkäisiä if-lauseita oikean toteutuksen saavuttamiseksi.
Sisäkkäiset if-lauseet ovat erittäin hyödyllisiä päätöksentekoprosessien luomisessa ja monimutkaisten tilanteiden käsittelyssä koodissasi. Suunnittelemalla koodirakenteen huolellisesti ja säilyttämällä luettavuuden voit hyödyntää sisäkkäisiä if-lauseita tehokkaiden ja ylläpidettävien ohjelmien kirjoittamiseen.
Sisäkkäiset if-lauseet ovat välttämättömiä joissakin tapauksissa mutta eivät aina. Kolmannessa osiossa käsittelemme, milloin, miksi ja miten niitä kannattaa välttää.
Swipe to start coding
Olet luomassa elokuvalippujärjestelmää. Lippujen hinnat vaihtelevat asiakkaan iän ja sen mukaan, onko kyseessä viikonloppu vai arkipäivä.
- Käytä sisäkkäisiä if-lauseita määrittääksesi lipun hinnan:
- Jos asiakas on alle 18-vuotias, veloita:
12.0viikonloppuisin8.0arkipäivisin
- Jos asiakas on 18–60-vuotias, veloita:
20.0viikonloppuisin15.0arkipäivisin
- Jos asiakas on yli 60-vuotias, veloita:
16.0viikonloppuisin10.0arkipäivisin
- Jos asiakas on alle 18-vuotias, veloita:
- Palauta lipun hinta funktiosta.
Esimerkki
calculateTicketPrice(16, true) → 12.0
calculateTicketPrice(30, false) → 15.0
calculateTicketPrice(70, true) → 16.0
Ratkaisu
Kiitos palautteestasi!
single