Iteráció

Léptetéses ciklus kidolgozott feladat

A feladat ismertetése:

Olvassunk be n darab számot, és írjuk ki az átlagukat!

Megoldás:

Algoritmuskeresés:
Az átlagszámítás matematikából ismert képlete alapján a megoldás elsô ránézésre roppant egyszerû: (a1+a2+ ... +an) / n
Csakhogy a számláló meghatározásának ez a módja a számítógép számára nem kezelhetô!

Próbálkozzunk más módon!
Legyen például n = 3 a beolvasandó elemek száma, és dolgozzuk fel a következô számokat: 5 , 2 , 8 !
Hogyan adjuk össze ezt a három számot?
5 + 2 = 7
            7 + 8 = 15
Így az átlag : 15 / 3 = 5

Bôvítsük! Amíg nem olvastunk be számot, addig legyen az összeg 0.
Így az összeadás :
0 + 5 = 5
            5 + 2 = 7
                        7 + 8 = 15
Ily módon, ha beolvasunk egy számot, azt rögtön hozzáadjuk az ôt megelôzô számok összegéhez, és az n. szám után kialakul a számláló.

Milyen változóink lesznek?
- a számsorozat következô elemét a szám nevû változóba olvassuk be
- db-ben számoljuk, hogy eddig hány elemet olvastunk be
- összeg-ben gyûjtjük a beolvasott számok összegét
- és n darab számot akarunk beolvasni

A megoldás:

Példa - Átlagszámítás

Kövessük végig „kézzel”, hogy mi is történik az algoritmus végrehajtása során!
(Ez a módszer sokszor hasznos lehet, ha algoritmusainkat ellenôrizni akarjuk, vagy egy számunkra ismeretlen algoritmust szeretnénk megérteni.)

Készítsünk táblázatot, melyben a legfontosabb változóinkat tüntetjük fel, és kövessük az algoritmus menetét konkrét adatokkal, a táblázatban jelezve az adott változók értékének módosulásait!

Most vegyük az elôbbi 5, 2, 8 sorozatot! (A táblázatban ? jelöli, ha a változó értéke nem ismert, vastagon dôlt betûvel szedtük azon értéket, amely az adott utasítás hatására megváltozott.)

utasítás                      n       db       szám       összeg
be n                            3        ?           ?              ?
összeg = 0                   3        ?           ?              0
db = 1 (ciklus indul)     3        1           ?              0
db<=n igaz:
  be szám                     3        1           5              0
  összeg=összeg+szám   3        1           5              5
ciklusmag vége:
  db=db+1                    3        2           5              5
db<=n igaz:
  be szám                     3        2           2              5
  összeg=összeg+szám   3        2           2              7
ciklusmag vége:
  db =db+1                   3        3           2              7
db<=n igaz:
  be szám                     3        3           8              7
  összeg=összeg+szám   3        3           8            15
ciklusmag vége:
  db =db+1                   3        4           8            15
db<=n HAMIS:
ki összeg/n         kiírja az 5-t (15/3).

(Egy ilyen táblázat a hibakeresésben is sokat segíthet, persze tömörebb formában, csak a változókat írva, az utasításokat nem ,s mindig csak annak a változónak az oszlopát bôvítjük, amelyik értéke változott.)


Itt az ideje, hogy feltegyünk magunknak néhány kérdést!
- Jó az algoritmusunk?
Azt legalábbis elmondhatjuk róla, hogy van olyan adat, amire helyesen mûködik. Csakhogy ez kevés!
- Hol lehetnek benne kritikus pontok?
Mi történik például akkor , ha n-nek véletlenül 0-t adunk meg?

utasítás      n db szám összeg
be n            0  ?     ?        ?
összeg = 0   0  ?     ?        0
db = 1         0  1     ?        0
db<=n HAMIS:
ki összeg/n
     azaz 0/0 mûveletet kellene elvégeznünk!

Így a jó megoldásban arra is figyeljünk, hogy ha egy osztást kell az algoritmusunkban elvégeznünk, ahol az osztó beolvasott, vagy az algoritmus során valamely képlettel meghatározott érték, a 0-val való osztás elkerülése érdekében egy szelekció beépítésével biztosítsuk az osztás végrehajthatóságát!

Az erre is figyelô megoldásunk például a következô lehet:

Javított átlagszámítás stuki

Vissza a Léptetéses ciklushoz

Vissza a Kidolgozott feladatokhoz

Vissza a másik Átlagszámításos feladathoz