A ciklusok segítségével valamilyen logikát ismételten végre tudsz hajtani.
A két leggyakoribb típus a while loop (határozatlan ismétlés) és a for loop (határozott, azaz megszámlált ismétlés).
Létezik még a for each ciklus is, amellyel egy későbbi fogalomnál találkozol majd.
A for loop egy fejlécből és egy kódblokkból áll; utóbbi a ciklus törzsét tartalmazza, kapcsos zárójelek közé zárva.
A fejléc három részből áll, amelyeket pontosvessző ; választ el: inicializáló utasítás, feltétel és egy további kifejezés.
Ezek bármelyike lehet üres.
for (init_statement; condition; expression) {
some_statement;
}
boolean, és ez szabályozza, hogy mikor álljon le a ciklus.
A cikluson belüli kód addig fut le, amíg ez a feltétel true értékű.
Amint ez a kifejezés false értékű lesz, a ciklus további iterációi már nem futnak le.A while loop mindaddig végrehajtja a törzsét, amíg a condition ellenőrzése true.
Az alábbi kódrészlet megmutatja, hogyan alakíthatsz át egy for ciklust egy while loop ciklussá.
init_statement;
while(condition) {
some_statement;
expression;
}
Amikor ciklusokkal dolgozol, gyakran szükség van arra, hogy egy számlálóváltozóhoz hozzáadj 1-et vagy kivonj belőle 1-et; ez a változó tartja nyilván az iterációkat.
Ez annyira gyakori, hogy a növelésre és a csökkentésre külön operátorok vannak: ++ és --.
prefix és postfix formában léteznek. A prefix még az utasításban való felhasználás előtt módosítja a változót, a postfix pedig utána. A legtöbb esetben valószínűleg a prefix változatot szeretnéd használni.
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
Az init rész általában beállít egy számlálóváltozót, a condition ellenőrzi, hogy a ciklust folytatni kell-e vagy leállítani, a post rész pedig általában minden ismétlés végén növeli a számlálót.
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
Ez a ciklus a 1-től 9-ig terjedő számokat adja össze (a 9-et is beleértve).
Egy ciklus törzsén belül a break kulcsszóval teljesen leállíthatod a ciklus végrehajtását:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
Ezzel szemben a continue kulcsszó csak az aktuális iteráció végrehajtását állítja le, és a következővel folytatja:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (i%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
A ciklus logikáját általában könnyebb megérteni, ha a break és a continue használatát minimalizálod vagy teljesen elkerülöd.
Mindkét kulcsszó kihagyja a kód bizonyos részeit, és gyakran megnehezíti a nyomon követést.
Ebben a feladatban megtakarítási számlákkal fogsz dolgozni. A megtakarítási számlád egyenlege minden évben a kamatláb alapján frissül. A bank által adott kamatláb a számládon lévő pénz mennyiségétől (az egyenlegtől) függ:
0 dollárnál kisebb egyenleg esetén (az egyenleg még negatívabb lesz).0 dollárnál nagyobb vagy azzal egyenlő, és 1000 dollárnál kisebb egyenleg esetén.1000 dollárnál nagyobb vagy azzal egyenlő, és 5000 dollárnál kisebb egyenleg esetén.5000 dollárnál nagyobb vagy azzal egyenlő egyenleg esetén.Négy részfeladatod van, mindegyik az egyenleggel és annak kamatlábával foglalkozik.
Valósítsd meg az interest_rate függvényt, amely a megadott egyenleg alapján kiszámítja a kamatlábat:
interest_rate(200.75);
// => 0.5
Valósítsd meg a yearly_interest függvényt, amely a megadott egyenleg alapján kiszámítja a kamatot:
yearly_interest(200.75):
// => 1.003750
Valósítsd meg az annual_balance_update függvényt, amely kiszámítja az egyenleg éves frissítését, figyelembe véve a kamatlábat:
annual_balance_update(200.75);
// => 201.75375
Valósítsd meg a years_until_desired_balance függvényt, amely kiszámítja a kívánt egyenleg eléréséhez szükséges minimális évek számát, figyelembe véve, hogy minden évben kamat adódik az egyenleghez.
Ez azt jelenti, hogy az egyenleg egy év után: kezdő egyenleg + a kezdő egyenleg kamata.
A második év utáni egyenleg az egy év utáni egyenleg + az egy év utáni egyenleg kamata.
És így tovább, amíg az aktuális év egyenlege nem lesz nagyobb vagy egyenlő, mint a cél egyenleg.
double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14
Vedd figyelembe, hogy a visszaadott érték egy int.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C++ nyelvet 19 fogalom100 feladat segítségével, valódi emberi mentorálással, mindez ingyen.