• Nem Talált Eredményt

fejezet - Számok és sorozatok (szerző: Király Roland)

5.1. feladat (Páros és páratlan számok darabszáma – szint: 2). Írjunk az 5.1 programhoz hasonló alkalmazást, amelyben kérjünk be N darab természetes számot. Az adatok beolvasása után a program írja ki a páros és páratlan számok darabszámát, és a páratlan számok összegét a megadott N-ig!

Magyarázat: Amennyiben nem akarunk a bekéréssel bajlódni, elsőként kérjük be az N értékét, és addig ne lépjünk ki a beolvasást végző ciklusból, amíg az N-szer le nem futott.

Ennél kicsit barátságosabb megoldás, ha addig folytatjuk a beolvasást, amíg a felhasználó le nem nyomja a kilépés gombját, amit mi választunk meg. Ekkor N értékérének a bekérésére nem is lesz szükségünk, mivel a beolvasásokat számolhatjuk egy változóban.

5.2. feladat (Számok szorzata – szint: 1). Írjon az 5.2 forráskód alapján programot, mely kiszámolja az első N szám szorzatát! Az N értékét a felhasználó adja meg.

5.3. feladat (Kilométerkövek – szint: 2). Készítsünk az 5.3 példához hasonló programot, amely az országúton haladva látott fákat számolgatja. Természetesen pusztán kedvtelésből…A program használója megadhatja a kiindulási pozícióját, valamint a cél pozíciót, mindkettőt kilométerben.

A program virtuális terében, a képzeletbeli út egyik oldalán 3 m-enként, míg a másik oldalán 5 m-enként vannak fák. Adjuk meg az út során azokat a pozíciókat, ahol az út mindkét oldalán fa található.

Magyarázat: Az egyszerűség kedvéért az út mindig nulláról kezdődik, és a fák is a 0. pozíciótól kezdve helyezkednek el három, valamint öt méterenként.

5.4. feladat (Kiírás ciklusokkal – szint: 1). Készítsen konzolos alkalmazást az 5.4 alapján, amely teleírja a konzol képernyőt csillagokkal, sorról-sorra oda - vissza haladva. Használhat késleltetést is, hogy az eredmény szemléletesebb legyen. A kiírás a bal felső sarokból kezdődjön, és onnan haladjon jobbra, és lefelé, ahogy a folyó írás is halad…

5.5. feladat (Kiírás ciklusban - továbbfejlesztett változat – szint: 1). Írj programot, mely teleírja a konzolképernyőt csillagokkal sorról sorra karakterről karakterre oda - vissza, majd az utolsónak beírt csillagtól kezdve törölje a képernyőt karakterről karakterre haladva fel - le. A kiírás a bal felső sarokból kezdődjön, és jobbra-lefelé tartson. Az 5.5 forrásszövegben láthatunk egy példaprogramot, amely segít a megoldásban.

5.6. feladat (Függvénytábla – szint: 1). Készítsünk mini függvénytáblát az 5.6 példaprogram alapján, melyben szerepelnek függőlegesen a pozitív egész számok 1-től - 20-ig, vízszintesen a szám, annak négyzete, és köbe. A táblának legyen fejléce is!

5.7. feladat (Sorozat szorzás nélkül – szint: 1). Készítsünk programot az 5.7 példaprogram alapján, amely meghatározza az 1 és 1000 közötti pozitív egész számok szorzatát úgy, hogy nem használhatjuk a szorzás műveletét!

5.8. feladat (Autóverseny – szint: 2). Készítsünk programot, mely képzeletbeli autókat versenyeztet. A játékban szereplő két autó 1 és 3 közötti, véletlen számú mezőt tesz meg egy lépésben. Összesen 60 mező áll rendelkezésre a célig. A program írja ki, hogy melyik autó nyert, és a vesztes autó hol tartózkodott a nyertes célba jutásának időpontjában. A versenypályát prezentáljuk csillagokkal ahol a * pontosan 1 mezőt jelent.

5.9. feladat (Kamatos kamatok – szint: 2). Írjunk programot, amely a következő problémát oldja meg: 2 gyermek versenyzik, hogy melyik tud többet spórolni. Az egyik havi kamatos kamattal rakja bankba a megspórolt pénzét. A kamatos kamat hozama 3%. A második fix

kamatozású, éves lekötésbe fekteti a pénzét. Ennek értéke 7%. A program mondja meg, hogy egy év után kinek lesz több pénze, valamint azt, hogy 10 év után ki, és mennyivel jár jobban.

Magyarázat: Ha általánosabbra szeretnénk megírni a programot, készítsük el úgy, hogy a felhasználó megadhatja a kamat kiszámításához szükséges évek számát is.

5.10. feladat (Vektor feltöltése – szint: 1). Írjunk olyan programot, amely véletlen, két számjegyű értékekkel feltölt egy 20 elemű vektort, majd kiírja a képernyőre egymás mellé, vesszővel elválasztva az elemeket.

A kiírás után addig kérjünk be két egész számot (a, b), amíg az ’a’ kisebb lesz, mint ’b’.

Határozzuk meg, hogy hány olyan tömbelem van, amelyik az [a,b] intervallumba esik.

5.11. feladat (Sorozat beolvasása extrákkal – szint: 1). Írjunk az 5.11 forrásszöveg alapján olyan programot, amely egy 10 elemű vektort a következőképp tölt fel billentyűzetről:

• bekérünk egy sorszámot

• ellenőrizzük hogy létezik-e ilyen vektorelem egyáltalán, és az még nem került feltöltésre.

• Ha ezen sorszámú vektorelem már kapott értéket, akkor azt még egyszer ne engedjük feltölteni

• ha minden rendben van, akkor bekérhetjük az értéket is

• ha a sorszám -1, akkor kérjük be az értéket, és minden olyan tömbelem, amely még nem kapott értéket - annak legyen ez az értéke

Ezt ismételgessük addig, amíg minden tömbelem meg nem kapta az értékét. Ekkor lépjünk ki a ciklusból, és írjuk ki a vektor elemeit a képernyőre. A példaprogram kimeneti képernyőjét a 5.1 ábrán láthatjuk.

5.1. ábra. Sorozat beolvasása extrákkal

5.12. feladat (Életkorok extra változat – szint: 1). Készítsünk az 5.12 példához hasonló alkalmazást, amelyben kérjünk be két egész számot billentyűzetről a 10..90 intervallumból.

Amennyiben a beírt számok ezen kívül eső egész számok lennének, úgy addig ismételjük a bekéréseket, amíg megfelelő értékeket nem kapunk. A két számot fogjuk fel mint életkorok, egy apa és a fia életkorait. Adjuk meg, hány éves volt az apa, amikor a fia megszületett.(nem tudni melyik életkort adják meg előbb, a fiút vagy az apáét). Amennyiben az apa fiatalabb volt ekkor mint 18, vagy idősebb mint 50, akkor a program írja ki, hogy „bár ez nehezen hihető”.

A program kimeneti képernyője az 5.2 ábrán látható.

5.2. ábra. Életkorok extra változat

5.13. feladat (Legkisebb elem – szint: 1). Készítsünk programot, mely egy tetszőleges sorozatról eldönti, hogy melyik a legkisebb, vagy akár a legnagyobb eleme.

Magyarázat: A feladat megoldásához használhatunk egy véletlen számokkal feltöltött tömböt, amit egy for ciklus segítségével bejárunk. Az 5.13 forrásszövegben láthatjuk, hogyan oldhatjuk meg a feladatot, a kimeneti képernyőt az 5.3 ábrán találjuk meg.

Első lépésként azt feltételezzük, hogy a sorozat első elem a legkisebb. Ebben az esetben a második elemtől haladva a sorozat vége felé minden elemre megvizsgáljuk, hogy az kisebb-e a legkisebbnek tekinetett elemnél.

Ha igen, akkor ez az elem veszi át a korábbi legkisebb helyét, amennyiben nem, akkor minden marad a régiben.

Igazság szerint ez egy alapvető programozási tétel, melyet minden programozónak ismernie kell. A leíró nyelvi változat a következőképpen néz ki:

minimum = sorozat első elem ismétlés a sorozat végéig

ha minimum > sorozat aktuális elem minimum = sorozat aktuális elem ha vége

sorozat aktuális elem = sorozat következő elem ismétlés vége

5.3. ábra. Legkisebb elem

5.14. feladat (Legkisebb elemek – szint: 1). Készítsünk programot, mely egy tetszőleges sorozatról eldönti, hogy melyik a legkisebb, és a második legkisebb eleme.

Magyarázat: A feladat megoldásához használhatunk egy véletlen számokkal feltöltött tömböt, amit egy for ciklus segítségével bejárunk. Tehát ennek a tömbnek az elemeit kell bejárnunk úgy, hogy minden esetben megvizsgáljuk, melyik a legkisebb elem, ha ennél találunk kisebbet, a korábbi legkisebb elem lesz a második legkisebb, a frissen megtalált elem pedig a legkisebb. Figyelnünk kell továbbá az egyenlőségre.

A minimum kiválasztás programozási tétele a következő:

minimum = sorozat első elem ismétlés a sorozat végéig

ha minimum > sorozat aktuális elem minimum = sorozat aktuális elem ha vége

sorozat aktuális elem = sorozat következő elem ismétlés vége

Ezt a programozási tételt kis módosításokkal alkalmazva megkapjuk a feladat megoldását. A módosítás lényege az, hogy be kell vezetnünk egy újabb változót és egy másik elágazást is kell készítenünk.

5.15. feladat (A hét napjai - kiterjesztett változat – szint: 2). Készítsünk az 5.15 példához hasonló konzolos alkalmazást, amely paraméterként kap egy egész számot (int), majd kiírja a hét azonos sorszámú napját a képernyőre. Az 1-es érték jelenti a hétfőt, a 2-es a keddet, a 7-es a vasárnapot.

Amennyiben a megadott szám nem esik az 1-7 intervallumba, a program írjon hibaüzenetet a képernyőre, majd kérje be újra az számot mindaddig, amíg helyes értéket nem kap. A program kimeneti képét a 5.4 ábrán találjuk meg.

Magyarázat: A megoldás feltételes ciklus utasítás használatát igényli. Ha elkészítettük a számlálós ciklussal operáló verziót, gondolkozzunk el azon is, nem lenne-e érdemesebb hátul tesztelő ciklussal elkészíteni a feladatot.

5.4. ábra. A hét napjai - kiterjesztett változat

5.16. feladat (Szorzótábla – szint: 1). Készítsünk az 5.5 forrásszöveg alapján konzol programot, mely kiírja a szorzótáblát a képernyőre.

Magyarázat: A szorzótáblát két egymásba ágyazott ciklus segítségével jeleníthetjük meg a képernyőn úgy, hogy a belső ciklus mindig az aktuális sort írja ki, a külső pedig megtöri az adott sort. A belső ciklusban megjelenített számok minden esetben a két ciklus változójának a szorzatából áll elő. A kimeneti képernyő az 5.5 ábrán látható.

5.5. ábra. Szorzótábla

5.17. feladat (Faktoriális kiszámítása – szint: 1). Készítsük el az ismert rekurzív faktoriális kiszámítására alkalmas program iteratív változatát, amelynek egy lehetséges változatát az 5.17 példaprogramban láthatjuk!

Magyarázat: A faktoriális kiszámításához használhatjuk a

képletet.

A formula minden n>0 egész szám esetén alkalmazható, és ez alapján a

(a következő érték a 120, majd ezt követi a 720).

Információ: A matematikában egy n nemnegatív egész szám faktoriálisának az n-nél kisebb vagy egyenlő pozitív egész számok szorzatát nevezzük.

A faktoriális értéke nagyon gyorsan növekszik, a 70! értéke: 11 978 571 669 969 891 796 072 783 721 689 098 736 458 938 142 546 425 857 555 362 864 628 009 582 789 845 319 680 000 000 000 000 000 (forrás:

Wikipedia)

A faktoriális kiszámítását használják a kombinatorikában, de ugyanúgy a biológiában és a matematika számos területén, mint a deriválás, a Taylor sorok, valamint a binomiális együtthatók kifejezésénél ( ).

1. A fejezet forráskódjai

5.1. forráskód. Oszthatósági feladat

namespace ciklus2 {

class Program {

static void Main(string[] args) {

int a, b, i, x;

Console.WriteLine("Kérek egy alsó határt:");

a = int.Parse(Console.ReadLine());

Console.WriteLine("Kérek egy felső határt:");

b = int.Parse(Console.ReadLine());

Console.WriteLine("5-tel osztható számok:");

for (i = a; i <= b; i = i + 1) {

if (i % 5 == 0)

Console.WriteLine("{0}", i);

}

Console.ReadLine();

} } }

5.2. forráskód. Szorzatos feladat

namespace cikusok {

class Program {

static void Main(string[] args) {

double i, n, sz = 1;

Console.WriteLine("Kérek egy n számot:");

n = double.Parse(Console.ReadLine());

for (i = 1; i <= n; i = i + 1) {

sz = sz * i;

}

Console.WriteLine("Az első {0} szám szorzata:{1}", n, sz);

Console.ReadLine();

} }

}

using System.Collections.Generic;

{

int x = b-a;

Console.WriteLine("A sorozat lekisebb eleme: {0}", minimum);

Console.ReadLine();

}

5.11. forráskód. A hét napjai - kiterjesztett változat

case 4:Console.WriteLine("Csütörtök.");break;

} }