Kurzusok
/
Crystal
Crystal
/
Feladatok
/
A kamat érdekes
A kamat érdekes

A kamat érdekes

Tanulófeladat

Bevezetés

A ciklus olyan vezérlési szerkezet, amely lehetővé teszi, hogy a kód egy adott feltétel alapján ismételten lefusson.

While-ciklusok

A while-ciklus olyan vezérlési szerkezet, amely lehetővé teszi, hogy a kód egy adott feltétel alapján ismételten lefusson. A while-cikluson belüli kód mindaddig fut, amíg a feltétel igaz értéket ad. A while-ciklusokat gyakran akkor használjuk, amikor előre nem ismert az iterációk száma, de bármilyen helyzetben bevethetők, ahol ciklusra van szükség.

A feltétel kiértékelése a cikluson belüli kód végrehajtása előtt történik, ami azt jelenti, hogy ha a feltétel hamis, a cikluson belüli kód soha nem fut le.

i = 0
while i < 3
  puts i
  i += 1
end

# Output:
# 0
# 1
# 2

Ha egy string fölött szeretnél iterálni, a string hosszán is végigmehetsz ciklussal.

str = "Hello"
i = 0
while i < str.size
  puts str[i]
  i += 1
end

# Output:
# H
# e
# l
# l
# o

Until-ciklusok

Az until-ciklusok ugyanúgy működnek, mint a while-ciklusok, azzal a különbséggel, hogy a cikluson belüli kód addig fut, amíg a feltétel igaz nem lesz. Ez ugyanaz a különbség, mint az if és az unless között.

i = 0
until i == 3
  puts i
  i += 1
end

Végtelen ciklusok

A while-ciklusok gyakori hibája a „végtelen ciklus”, amelyből soha nem lép ki a program. Egy végtelen ciklust okozhat, ha egy feltétel soha nem értékelődik igazra vagy hamisra. Ez gyakran programozói hiba következménye; például elfelejtjük léptetni a ciklusváltozót. De néha épp a végtelen ciklus a legvilágosabb módja annak, hogy megvalósítsuk a program logikáját. Vagy épp létfontosságú a végtelen ismétlés; például egy HTTP-szerver megvárja a bejövő kapcsolatot, kiszolgálja, majd a következő kapcsolatra vár.

Break

A break kulcsszót arra használhatod, hogy idő előtt kilépj egy ciklusból. Ez kényelmes lehet, ha bizonyos feltételek teljesülése esetén idő előtt szeretnél kilépni a ciklusból.

i = 0
while i <= 3
  puts i
  i += 1
  if i == 2
    break
  end
end

# Output:
# 0
# 1

Next

A next kulcsszóval a ciklus következő iterációjára ugorhatsz. Ez kényelmes lehet, ha a ciklus bizonyos iterációit ki szeretnéd hagyni.

i = 0
while i <= 3
  i += 1
  if i == 2
    next
  end
  puts i
end

# Output:
# 1
# 3

Típusok ciklus közben

A változó típusa a ciklus során megváltozhat. A következő példában az a típusa Int32 | String, mert a ciklus első részében Int32 vagy String is lehet. Az a változó csak a ciklus első részében viseli az Int32 | String típust, mivel a ciklus indulásakor Int32-t tartalmaz, a második iterációban pedig String-et. Ezt a többtípusos rendszert később részletesen elmagyarázzuk. De mivel biztosak vagyunk benne, hogy a ciklus második része csak String-et tartalmaz majd, az a típusa a ciklus második részében String. Futásidőben soha nem tartalmaz egyszerre Int32-t és String-et.

i = 0
a = 4
while i < 3
  p typeof(a)
  # => Int32 | String
  a = "4"
  p typeof(a)
  # => String
  i += 1
end

A Crystalben egy metódus utolsó kifejezése adja vissza az értékét. Néha azonban az utolsó kifejezés előtt kell visszaadnod egy értéket. Erre a return kulcsszót használhatod, amely a mögötte álló kifejezés értékét adja vissza. A return kulcsszó után írt kód nem fut le.

def speed_limit(road_number)
    if road_number == 1
        return 50
        puts "This will not be executed"
    elsif road_number == 2
        return 80
        puts "This will not be executed"
    end
    100
end

p speed_limit(1) # => 50
p speed_limit(2) # => 80
p speed_limit(3) # => 100
Note

A return kulcsszót el kell hagyni, ha egy metódus utolsó kifejezése épp az az érték, amelyet vissza kell adni.

Utasítások

Ebben a feladatban megtakarítási számlákkal fogsz dolgozni. A megtakarítási számlád egyenlege minden évben a kamatlába alapján frissül. A bank által adott kamatláb a számládon lévő pénz összegétől (az egyenlegtől) függ:

  • 3,213% negatív egyenleg esetén (az egyenleg még negatívabb lesz).
  • 0,5% a 1000 dollárnál kisebb pozitív egyenleg esetén.
  • 1,621% a 1000 dollárnál nagyobb vagy azzal egyenlő, és 5000 dollárnál kisebb pozitív egyenleg esetén.
  • 2,475% az 5000 dollárnál nagyobb vagy azzal egyenlő pozitív egyenleg esetén.

Négy részfeladat vár rád, mindegyik az egyenlegeddel és annak kamatlábával foglalkozik.

1. Számítsd ki a kamatlábat

Valósítsd meg a SavingsAccount.interest_rate() metódust, amely argumentumként egy egyenleget kap. A metódus adja vissza a megadott egyenleghez tartozó kamatlábat.

SavingsAccount.interest_rate(200.75)
# => 0.5

2. Számítsd ki a kamatot

Valósítsd meg a SavingsAccount.interest() metódust, amely argumentumként egy egyenleget kap. A metódus adja vissza a megadott egyenleghez tartozó kamatot.

SavingsAccount.interest(200.75)
# => 1.00375

3. Számítsd ki az éves egyenlegfrissítést

Valósítsd meg a SavingsAccount.annual_balance_update() metódust, amely argumentumként egy egyenleget kap. A metódus adja vissza az egy év utáni egyenleget.

SavingsAccount.annual_balance_update(200.75)
# => 201.75375

4. Számítsd ki, hány év kell a kívánt egyenleg eléréséhez

Valósítsd meg a SavingsAccount.years_before_desired_balance() metódust, amely argumentumként egy egyenleget és egy cél-egyenleget kap. A metódus adja vissza, hány évbe telne elérni a cél-egyenleget.

balance = 200.75
target_balance = 214.88
SavingsAccount.years_before_desired_balance(balance, target_balance)
# => 14
Note

Amikor egyszerű kamatot számítunk egy tőkeegyenlegre, az egyenleget megszorozzuk a kamatlábbal, és a kettő szorzata adja a kamat összegét.

A kamatos kamat ezzel szemben rendszeres kamatozással működik. Minden egyes alkalmazáskor kiszámítjuk a kamat összegét, és hozzáadjuk a tőkeegyenleghez, így a későbbi kamatszámítások már nagyobb tőkeegyenlegre vonatkoznak.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Crystal Exercism

Készen állsz elkezdeni a(z) A kamat érdekes feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Crystal nyelvet 26 fogalom142 feladat segítségével, valódi emberi mentorálással, mindez ingyen.