7. gyakorlat Sorozatok, Fájlkezelés
Házi ellenőrzés - f0124 Írj programot, amelyben a felhasználónak egy, a program által meghatározott számot kell kitalálnia! A felhasználó tippjét a program vagy elfogadja, vagy megmondja, hogy a gondolt szám annál kisebb vagy nagyobb, és kéri a következő tippet! Melyik fajta ciklust érdemes használni?
Házi ellenőrzés - f0171 Egy könyvelő minden év végén statisztikát készít az általa kezelt cégek havi eredményességéről. A cégek havi bevétele és kiadása alapján kiszámolja a: minimális, maximális és átlagos havi bevételt minimális, maximális és átlagos havi kiadást minimális, maximális és átlagos havi pénzügyi eredményt a relatív pénzügyi eredményesség (profit) alapján a hónapok rangsorát
Önálló feladat f0050, f0052 Egy számtani sorozat első tagja A, differenciája D. Számítsa ki a sorozat N-dik tagját! Egy mértani sorozat első tagja A, hányadosa Q. Számítsa ki a sorozat N- dik tagját! <math.h>-ban van egy double pow(double,double) függvény, ami kiszámítja az első paraméterben kapott alap második paraméterben kapott kitevőjű hatványát
Feladat - f0193 Írj egy programot, ami bekéri egy torta piskótájanak sugarát és magasságát, majd kiszámolja a torta 1cm vastag bevonásához szükséges krém térfogatát 5%-os ráhagyással dolgozva. (A torta alját nem kell bekrémezni, csak az oldalát és a tetejét.) A sugarat és a magasságot stdin-ről olvasd be, majd az eredményt stdoutra írd ki! Mi lenne az algoritmus?
Feladat - f0193 1) Írjunk egy függvényt, ami sugárból és magasságból kiszámítja a henger térfogatát! 2) Olvassuk be a sugarat és térfogatot! 3) Számítsuk ki a torta térfogatát! 4) Számítsuk ki a torta térfogatát 1cm vastag bevonattal együtt (ha az alját nem kell bevonni)! 5) Vonjuk ki a két térfogatot egymásból!
Standard IO C-ben a kimenet/bemenet streamek segítségével történik Eddig három ilyen streamet ismertünk meg: stdin stdout stderr A printf és scanf a standard streameket dolgozza fel Ha nem ezt szeretnénk használni, másik függvény kell
Saját streamek Saját streamek használatához az fscanf és az fprintf függvényeket kell használni A paraméterezésük majdnem teljesen ugyan az Első paraméter (formátumok előtt) a streamre való hivatkozás Ezekkel is olvashatunk/írhatunk standard streameket fprintf(stdout, "..."); fscanf(stdin, "...",...);
Feladat - f0193 Írjuk át az előző feladat megoldását úgy, hogy fscanf és fprintf segítségével kezeljük a standard be- és kimeneteket!
Fájlkezelés C-ben C-ben (meg egyébként sok más nyelvben is) a fájlok is streamek Az fprintf és fscanf függvényeket kell használni, ahol az első paraméterben egy fájlra mutató hivatkozást adunk meg fprintf(fileki, " "); fscanf(filebe, " ", );
Fájlkezelés C-ben Fájlokat megnyitni az fopen() függvénnyel tudunk Visszatérési értéke FILE* típusú (fájlra mutató pointer) Ezt kell majd átadni a fprintf és fscanf függvénynek FILE* filebe = fopen("be.txt", "rt"); FILE* fileki = fopen("ki.txt", "wt"); Két paramétere van Első a fájl elérési útvonala és neve Második megnyitás módja
Fájlmegnyitási módok A megnyitási mód két részből áll Első rész: r read, olvasásra nyitja meg a fájlt w write, olvasásra nyitja meg a fájlt a append, hozzáfűzésre nyitja meg a fájlt Második rész: b binary, bináris módban nyitja meg t text, szöveges módban nyitja meg (alapértelmezett, nem kell kitenni)
Megjegyzések fájlkezeléshez Read módban már léteznie kell a fájlnak Write módban nem kell léteznie, de írhatónak kell lennie az adott könyvtárnak Az fopen() visszatérési értéke jelzi, hogy sikeres volt-e a megnyitás A fájl végét egy bizonyos EOF konstans jelzi feof(file) igazat ad vissza, ha elértük a fájl végét
Feladat - f0193 Írjuk át az előző feladat megoldását úgy, hogy fscanf és fprintf segítségével fájlból olvassunk és fájlba írjunk!
Feladat f0201 Írj egy programot, ami kiszámolja, majd irányszöggel és nagysággal megadja a hasonlóképpen megadott fizikai erők sorozatának eredőjét a kétdimenziós térben. Az erők sorozatának végét egy 0 nagyságú erő jelzi. A bemenetet a bemenet.txt fájból olvasd be A kimenetet a kimenet.txt fájlba írd ki
Feladat - f0224 Általánosítsd a Fibonacci sorozatot: tekintsük azt a k-ad rendű Fibonacci sorozatot, melynek első k eleme 1 (azaz a[0]=..a[k-1]=1), a többi elemét pedig az előző k elem összegeként kapjuk, (azaz a[n]=a[n-1]+...+a[n-k]). Írj programot, mely bekér egy k és egy n természetes számot, és kiszámítja a k-ad rendű Fibonacci-sorozat n-ik elemét! Készíts kétféle algoritmust két külön függvényben, és mindkettővel számoltasd ki az eredményt: Az első egy rekurzív algoritmus legyen. A másik átgondolt, ciklust használó algoritmus legyen. Hasonlítsd össze a két megoldás futásidejét különféle k és n értékekre.
Feladat - f0225 Írj egy programot ami sorbarendezi a bekért értékeket! A program inputjának első eleme egy egész szám, a sorozat elemeinek száma, ezt követi a megadott számú valós érték. A program kimenetének első eleme egy egész szám, a sorozat elemeinek száma, utána pedig a sorozat elemei növekvő sorrendben, 3 tizedesjegy pontossággal. A kimeneten az értékek egy-egy szóközzel vannak elválasztva. Ötlet?
Ötlet Hozzunk létre egy tömböt Ahogy olvassuk be az elemeket, egyből tegyük a helyére a tömbben beolvasás után a tömb rendezett lesz Beszúró rendezés? Csináljunk egy függvényt, ami megkapja a tömb aktuális állapotát, a beszúrandó elemet,
Tömbök néhány fontos jellemzője Két tömb nem adható értékül egymásnak Mint ahogy a char str[20]; str = Hello World! ; sem működött Ha azt akarom hogy egy tömb elemei átkerüljenek egy másik tömbbe, akkor azt egyesével kell átmásolni (ciklussal) Ha függvény paraméterben átadok tömböt, akkor az azon történő módosítások az eredeti tömböt érintik Magyarázat későbbi órán
Jövő héten Következő héten múlt óraihoz hasonló, algoritmikus, tömbös feladatok lesznek ZH-n, ezúttal 10 pontért. Két hét múlva algoritmikus feladatok (hasonlóak a korábbi ZHn látottakhoz) lesznek, főként sorozatokhoz és tömbökhöz kapcsolódóan