Példatár a "Programozás alapjai" című tárgyhoz (VIHIA106)

 

A feladatok megoldása megtalálható: http://www.hit.bme.hu/~szandi/progpelda/

 

 

Vezérlési szerkezetek, egyszerű számelméleti algoritmusok

 

A32

Írjon programot, amely kiírja a számokat hármasával 100-ig.

Készítse el a megoldást mindhárom ciklussal!

A58

Írjon programot, amely a bekért három valós számról eldönti, hogy lehetnek-e egy háromszög oldalai!

A23

Az inputon 10 valós számot olvasunk. Írjon programot, amely kiírja a legnagyobb és a legkisebb értéket!

A18

Írjon programot, amely kiszámítja az n-edik Fibonacci számot.

Ehhez tudjuk: F0=0, F1=1, ... Fn=Fn-1+Fn-2, ahol n=2,3,4,5,...

A03

Írjon programot, amely előállítja egy szám

A03a

legkisebb valódi osztóját.

A03b

összes valódi osztóját.

A03c

prímtényezős felbontását.

A38

Írjon programot, amely eldönti egy számról, hogy prím-e?

A04

Írjon programot, amely megadja két egész szám legkisebb közös többszörösét.

A29

Írjunk programot kamatos kamat számítására. Olvassuk be a kamatoztatni kívánt összeget, az évek számát és a kamatlábat.

A37

Írjon programot, amely sok valós számot olvas be a standard inputról, és kiírja a beolvasott számok közül a második legnagyobb értékűt. (Tipp: addig olvassunk, amíg egy betű karaktert nem ütünk, amely nem értelmezhető valós számként; ekkor a valós számot beolvasó scanf függvény visszatérési értéke 0 lesz: erre szervezhetjük a ciklust!)

A40

Írjon programot, amely sok valós számot olvas be a standard inputról, és kiírja a beolvasott számok átlagát.

A47

A számelméletben azokat a számpárokat, amelyekre igaz, hogy az egyik szám önmagánál kisebb osztóinak összege a másik számmal egyenlő (és fordítva), barátságos számoknak hívjuk.

Írjon programot, amely meghatározza az 1000-nél kisebb barátságos számokat!

A52

Írjunk programot, amely két 1-nél nagyobb, egymástól különböző természetes számról eldönti, hogy azok relatív prímek-e! Két szám relatív prím, ha egy közös valódi osztójuk sincs. (Egy szám valódi osztóinak nevezünk minden olyan osztót, amely nem 1 és nem maga a szám.)

A53

Adott a következő diofantoszi egyenlet:  + b = c

Diofantoszi egyenleteknek azokat az egyenleteket nevezzük, amelyeknek minden együtthatója és megoldása egész szám. Esetünket korlátozzuk a csak pozitív számokra. Írjon standard C programot, amely adott pozitív a,b,c együtthatók esetén kiírja az összes x,y megoldáspárt. Az a,b,c együtthatókat a program olvassa be!

 

 

Összetettebb algoritmusok, egyszerű tömbkezelés

 

A64

Írjunk programot, amely bekér egy pozitív, egész számot és kiírja a számjegyeit fordított sorrendben.

A44

Az ókori Egyiptomban a 0 és 1 közötti racionális számokat egységtörtek összegeként adták meg. Tehát:

ahol xi -k különböző pozítív egész számok. Készítsünk programot, amely adott n és m természetes számokra megadja az m/n tört egységtörtekre bontását.

S13

Írjon programot, amely kiszámítja a beolvasott utolsó 10 valós szám átlagát. A számok végét a 0 jelzi, mely már nem számít az átlagba. Értelemszerűen, ha nem érkezik 10 szám, akkor a meglevő számok átlagát kell kiszámolni.

S24

Írjon programot, amely kiírja az első 1000 prímszámot! Az algoritmus használja az Eratosztenész-féle szita elvét. A feladatot oldja meg az index operátor és pointer aritmetika használatával is.

A12

Írjon programot, amelyben egy tömböt három elemmel inicializál.

int a[N]={1,3,5};

A tömb többi eleme a következőképpen számolható:

Szorgalmi feladatként állapítsa meg, mely n értéknél érjük el a gépi ábrázolás határát az adott implementációban. (Tipp: az ábrázolható legnagyobb előjel nélküli számot egyszerűen képezhetjük: ~0)

A13

Írjon programot, amely kiszámítja az ISBN (International Standard Book Number) utolsó elemét (check karaktert). Ha az ISBN szám ISBN 0-8065-0959-7, akkor az utolsó szám a 7‑es, a következő módon állítható elő:

1*0+2*8+3*0+4*6+5*5+6*0+7*9+8*5+9*9 = 249 összeget elosztjuk 11-el, és a maradék megadja a keresett számot, ha nem egyenlő 10-zel, különben X-et kell írni.

Az ISBN számot karakter tömbben ábrázoljuk, és elemeit a scanf("%c",&isbn[i]) utasítással olvassuk be.

A60

N gyerek helyezkedik el egy kör mentén. Az elsőtől elindulva minden M-ediket kiszámolják. A számolásban csak a megmaradtak vesznek részt. Hova álljon Pistike, hogy Ő maradjon utoljára. (Írassuk ki a kiesések sorrendjét.)

A65

Írjunk C programot, amely statisztikát készít a standard bemeneten beolvasott sorban a előforduló számjegykarakterekről. A program számjegyenként írja ki, hogy melyik számjegy hányszor fordult elő. Ügyeljen rá, hogy nem csak számjegyek fordulhatnak elő.

A36

Olvasson be két dátumot (év, hónap, nap) és állapítsa meg a közöttük levő napok számát!

 

 

Függvények, paraméterátadás

 

A26

Írjon függvényt, amely kiszámítja az első N pozitív szám négyzetösszegét!

A24

Írjon függvényt, amely kiszámolja két szám legnagyobb közös osztóját!

A66

Írjunk C programot, amely alkalmas két dátum közötti eltelt napok kiszámítására. A feladatot úgy oldjuk meg, hogy írjunk egy függvényt, amely egy tetszőleges dátumot egy nappal növel. Ezt a függvényt használjuk fel ciklusban, amíg el nem érjük a végdátumot. Ezzel a módszerrel könnyen kiszámítható az is, hogy hány naposak vagyunk, illetve, hogy mikor leszünk adott naposak.

 

 

Számábrázolási kérdések, bitműveletek

 

A09

Írjunk programot, amely megadja, hogy az adott implementációban hány biten ábrázolják az egész típusokat. (A feladatot úgy oldjuk meg, hogy nem használjuk a limits headert!)

A10

Írjon C programot, amely shifteléssel előállítja a 2 hatványait a gépi ábrázolás határáig.

A56

Vizsgálja a következő faktoriális számító programot a túlcsordulás szempontjából!

#include <stdio.h>

int main(void)

{

    int n, i, j;

    printf("n="); scanf("%d",&n);

    i = 1; j = 1;

    while (i <= n)

    {

       j = j * i;

       i = i + 1;

    }

    printf("%d!=%d\n",n,j);

    return 0;

}

Alakítsa át, hogy ne adjon helytelen értéket eredményül. (Ha nem tudja már kiszámítani n!-t, akkor írja ki az implementációban kiszámítható legnagyobb értéket.)

Mekkora a kiszámítható legnagyobb faktoriális az Ön implementációjában?

Ha módjában áll, próbálja ki a C99 szabványban bevezetett long long típussal!

Tájékoztatásul az első 30 faktoriális pontos értéke:

1! = 1

2! = 2

3! = 6

4! = 24

5! = 120

6! = 720

7! = 5040

8! = 40320

9! = 362880

10! = 3628800

11! = 39916800

12! = 479001600

13! = 6227020800

14! = 87178291200

15! = 1307674368000

16! = 20922789888000

17! = 355687428096000

18! = 6402373705728000

19! = 121645100408832000

20! = 2432902008176640000

21! = 51090942171709440000

22! = 1124000727777607680000

23! = 25852016738884976640000

24! = 620448401733239439360000

25! = 15511210043330985984000000

26! = 403291461126605635584000000

27! = 10888869450418352160768000000

28! = 304888344611713860501504000000

29! = 8841761993739701954543616000000

30! = 265252859812191058636308480000000

A08

Írjon programot, amely kiírja az adott implementációban, standard egész aritmetikával kiszámítható összes faktoriálist. Tesztelje a programját különböző platformokon.

A33

Írjon programot, amely megoldja a következő egyenletet különböző n (n=1,2,...) értékekre:

Mint látható a pontos megoldás 1 és 10n . Állapítsuk meg mely n értéknél kapjuk meg a pontos megoldást a különböző lebegőpontos típusok esetében. A vizsgálatot végezzük el minél több implementációban.

A11

Írjon programot, amely kiszámolja, hogy a különböző lebegőpontos típusok közelítőleg hány értékes tizedesjegyet használnak. A programot futtassa különböző platformokon.

A27

Egész számokat olvasunk be, és összeadjuk őket. Ezt addig végezzük, amíg a 0 számot nem olvassuk. Írjuk ki az összeget! Jelezzük, ha az összeg nem ábrázolható az adott implementációban!

A35

Írjon programot, amely kiszámítja  értékét a lehetőségekhez képest legpontosabban. A számításhoz használhatja a következő képletet:

Tájékoztatásul  pontos értéke több tizedes jegyre:

3.141592653589793238462643383279502884197169399375105820974944592

A42

Írjon programot, amely kiszámítja az e számot minél pontosabban a következő sorozat alapján:

A28

Írjon szabványos C programot, amely kiszámítja a következő kifejezést, vagy közli, hogy nem lehet a számítást elvégezni.

Az ai értékeket beolvassa a program, addig amíg ezek pozitív, páros egész számok. A p, ai és az n int-ben ábrázolt pozitív egész számok.

 

A59

Írjon programot, amely beolvas egy kétjegyű számot, ezt átalakítja BCD (Binary Coded Decimal) számmá, amit egy unsigned char típusú változóban tárol. Ezután írja ki a számot %X formátummal a printf függvénnyel, illetve a szám számjegyeit a putchar függvénnyel. Debugerrel nézze meg a memóriában tárolt adatot.

A63

Írjunk programot, amely binárisan kiírja a beolvasott unsigned értéket.

A20

Írjon programot, amely előállítja és kiírja a következő „gyalogló” bitmintát a lehető legnagyobb hosszban:

00000001

00000011

00000111

...

 

 

Függvények, pointerek, tömbök, stringek átadása függvénynek

 

S14

Írjon függvényt, amely egy tömbből kikeresi a paraméterként átadott adatot. A függvény visszatérési értéke legyen az adatra mutató pointer, vagy NULL.

S15

Írjon logikai függvényt, amely egy tömbből kikeresi a minimális és maximális értéket, melyeket a paraméterlistán ad vissza. A függvény logikai hamis, ha a két érték azonos.

S16

Írjon logikai függvényt, amely egy tömbből kikeresi a minimális és maximális értéket. Az ezekre mutató pointereket a paraméterlistán adja vissza. A függvény logikai hamis, ha a két érték azonos. A főprogramban a függvény hívása után írja ki az elemek indexét is.

S26

Készítsen függvényt, ami a paraméterként kapott kétdimenziós tömbnek kicseréli két oszlopát! A kicserélendő két oszlopot szintén paraméterként kapja a függvény.

S21

Írjon olyan programot, amely beolvas egy stringet, majd megfordítja és kiírja.

S22

Írjon programot, amely kiírja a N legnagyobb beolvasott számot. A beolvasás addig történjen, amíg az inputon érkezik beolvasható valós szám (vagy vége lesz, vagy valamilyen nem szám karaktert érkezik). Értelemszerűen, ha nem érkezik N szám, akkor a meglevő számokat kell kiírni.

S25

Az inputon tetszőleges értékű pozítív számokat olvasunk. Egy szám többször is előfordul, de feltehetjük, hogy maximum 1000 különböző értékünk van. Írjon programot, amely megszámolja, hogy melyik érték hányszor fordult elő.

T13

Írjunk programot, amely a standard inputról érkező, szintaktikailag helyes C forrásprogramból kiszűri a megjegyzéseket.

T14

Írjunk programot, amely egy magyar nyelvű szövegben megszámolja, hányszor fordult elő a dupla "ly" betű, azaz a lly karaktersorozat. Teszteléshez használhatja a Magyar Elektronikus könyvtárban elérhető Jókai Mór: Mégsem lesz belőle tekintetes asszony című kisregényét. (helyi másolat)

T18

Egy PostScript fájl egy nyomat megadására szolgál, felfogható programozási nyelvként is, és van tisztán ASCII változata is. Írjon programot amely egy ilyen fájlban található szövegkonstansokat, ún. literálokat kiírja. Literálnak a "("-lel kezdődő és ")"-el végződő karaktersorozatokat nevezzük. Az egymásba ágyazott "(" ")" jelek még literálon belül is előfordulhatnak. Azokat a "(" ,")" jeleket amik nem párban fordulnak elő a következőképpen kell megadni :

\\ ---> \

\( ---> (

\) ---> )

Ha a "\" karakter után más egyéb karakter van, akkor a "\" karaktert figyelmen kívül hagyjuk. Jelezze azt is, ha a fájl végéig nincs meg minden "("-nak a ")" párja!

T19

A PASCAL programozási nyelvben a megjegyzések a (*…*), vagy a {…} karakterpárosok között lehetnek, de a kétféle megoldás nem keveredhet.

Írjunk szabványos C programot, amely az inputról érkező, szintaktikailag helyes PASCAL programból kiszűri a megjegyzéseket!

 

S03

Írjunk olyan REVERSE(char *s) függvényt, amely megfordítja az s karakterláncot.

S04

Írjuk meg a SQUEEZE(char *s, char c) függvényt, amely az összes előforduló c karaktert törli az s karakterláncból.

S05

Írjuk meg a SQUEEZE(char *s1, char *s2) függvény egy másik változatát, amely s1-ből minden olyan karaktert töröl, amely megegyezik bármelyik s2 karakterláncbeli karakterrel.

S06

Írjuk meg az INSERT(char *s1, char *s2, int i) függvényt, amely beszúrja s1-be s2-t az i-edik pozíciótól kezdve. Feltehetjük, hogy s1 képes tárolni az új stringet.

S09

Írjon egy C függvényt, amely a paraméterként kapott stringet lemásolja, úgy, hogy a magánhangzókat megduplázza, beszúrva egy 'v' betűt közéjük. Például:

"ez volt eredetileg"  ===> "evez vovolt everevedevetivileveg"

Feltehetjük, hogy a másolat paraméter képes tárolni az eredményt.

S10

Írjon egy C függvényt, amely a paraméterként kapott stringet módosítja, úgy, hogy a magánhangzókat megduplázza, beszúrva egy 'v' betűt közéjük. Például:

"ez volt eredetileg"  ===> "evez vovolt everevedevetivileveg"

Feltehetjük, hogy a paraméter képes tárolni az eredményt.

 

 

Szöveges fájlkezelés, dinamikus memóriakezelés

 

T11

Írjon programot, amely statisztikát készít a standard inputról érkező szövegről, a forrásban előre megadott kulcsszavak szerint. Például a következőképpen adhatók meg kulcsszavak:

char *kulcs[] = { "for", "while", "do", "if", "return", "switch" };

 

D01

Írja meg az strcat függvényt úgy, hogy az eredményt egy új stringben tárolja, aminek dinamikusan foglal helyet.

D01a

Az új string legyen a visszatérési érték.

char * Mystrcat(char *s1, char *s2);

D01b

Az új stringet a paraméterlistán keresztül adjuk vissza.

F01

Adott egy szövegfile, amely sorokat tartalmaz.

Írjon programot, amely öszekeveri a file sorait. A megoldás során ne olvassa be a memóriába a file-t, hanem egy dinamikus tömb-ben tárolja a sorok kezdetének file-pozicióit! Ezeket keverje össze a rand függvény segítségével, majd az fseek függvényt használva írja ki az összekevert file-t. Az aktuális file poziciót az ftell függvénnyel lehet lekérdezni.

 

 

Listák és bináris fájlkezelés

 

D23

Egész számokat olvasunk be a standard inputról. A beolvasott számokat tegyük egy egyirányban láncolt listába, majd írassuk ki a beolvasott számokat a beolvasás sorrendjében és visszafele (az utoljára olvasottat legelőször) is.

D04

Írjunk C programot, amely az inputról érkező sorokat fordított sorrendben írja ki az outputra. A megoldáshoz célszerű az fgets és fputs függvényeket használni. Feltehetjük, hogy a sorok nem hosszabbak 80 karakternél.

D13

Írjunk egy C programot, amely egy szöveget olvas a standard inputról. A szövegben valószínűleg vannak ismétlődő szavak, melyeket whitespace karakterek határolnak, így a scanf(”%s”,szo) utasítással olvashatjuk be őket. A beolvasott szavakat struktúrában tároljuk, amelynek elemei a szavak, valamint azok előfordulási száma.

D13a

A struktúrákból láncolt listát képezünk. Írjuk ki a szavakat előfordulási számukkal együtt.

D13b

Módosítsuk a feladatban megírt programot úgy, hogy a listába a szavak eleve az ABC sorrendben kerüljenek bele.

D13c

A feladatot láncolt lista helyett dinamikus tömb használatával oldjuk meg.

D20

Adott egy egyirányú lánc típusdefiníciója:

typedef struct adat {

   int kulcs;

   double adat;

   struct adat *kov;

   } adat_s, *padat;

Írjon keretprogramot, amely feltölti a láncot a paraméterként megadott (pld. D20.txt) nevű szöveges file-ból.

D20a

Írjon függvényt, amely megadja a lánc elemeinek számát!

D20b

Írjon függvényt, amely kitöröl (kiláncol és felszabadít) minden olyan elemet a láncból, melynek kulcs mezője kisebb, mint egy paraméterként megadott érték.

D20c

Írjon függvényt, amely összeadja azon láncelemek adat mezőjét, melyek kulcs mezője csak egyszer fordult elő!

D20d

Írjon függvényt, amely lemásolja az egyirányú láncot egy kétirányú láncba!

D22

A standard inputról sorokat olvasunk. Minden sor szerkezete azonos, és feltehetjük, hogy egyik sor sem hibás. A sor elején betűk állnak, amelyek egy helységnevet reprezentálnak. A helységnevek végét egy space karakterrel érzékelhetjük. 20 betűnél hosszabb helységnevünk biztos, hogy nincs. A helységnév után annak irányítószáma áll, majd vége is van a sornak. Nem tudjuk előre, hogy mennyi helységnevet fogunk olvasni, de azt tudjuk, hogy befér a memóriába.

D22a

Olvassuk be az adatokat egy egyirányú láncolt listába, de a lista az irányítószám szerint legyen rendezett, azaz már a beolvasás során kerüljenek helyükre az adatok. Így tulajdonképpen megyénként tudjuk csoportosítani a helységneveket. Egy kiíratással ellenőrizzük megoldásunk helyességét!

D22b

Feladatunkat módosítsuk úgy, hogy használjunk ún. strázsákat. Ennek lényege, hogy a listában van két olyan elem, amelyet csak arra használunk, hogy a lista elejét és végét ne kelljen külön kezelni. Ez akkor lehetséges, ha a rendezés szempontjából fel lehet venni abszolút minimumot, ill. maximumot. Esetünkben ez teljesül, hiszen biztos, hogy minden irányítószám 999 és 10000 között van.

D22c

Feladatunkat módosítsuk úgy, hogy a lista két irányban legyen láncolva.

D22d

A feladatot tovább módosítva, oldjuk meg, hogy a rendezés ne csak irányítószám szerint, hanem a helységnevek szerint is történjen meg. Így logikailag két listát kezelünk, de valójában tároljuk ezeket közös adatszerkezetben! Ne foglalkozzunk az ékezetes betűkkel.

D22e

A helységnevek szerinti rendezés terjedjen ki az ékezetes betűkre is.

D30

Az OTP POS (Point Of Sale) termináljainak forgalmát a következő szerkezetű szöveges POS.TXT nevű fájlban rögzítik soronként:

            számlaszám                         : 18 karakter

            eladóhely azonosítója                     : 20 karakter

            forgalom                                : valós szám

            dátum                                     : 11 karakter, (1993.11.25.)

            idő                                           :  8 karakter, (11:53:23)

 

A fájlban az adatok rendezetlenül szerepelnek.

 

Írjon C programot, amely a POS.TXT file alapján számlaszám szerint rendezve kiírja az 1996. november 28-i vásárlások adatait!

Feltételezheti, hogy a feladat megoldásához elegendő memória áll rendelkezésére.

F02a

Írjon programot, amely előállít egy bináris file-t, amely az egész számokat tartalmazza folyamatosan 0-tól 999-ig.

F02b

 Keverje össze az előállított file-t, 1000-szer ismételve a következő tevékenységet:

1)  sorsol két véletlen számot 0 és 999 között (r1,r2),

2)  a file r1-edik helyén levő adatot felcseréli az r2-edik helyen levő adattal.

F02c

Készítsen programot, amely az összekevert file-t vizsgálva megállapítja hány szám maradt az eredeti helyén.

F08

Adott egy szövegfile (pld. "gyumi.txt") amelyben soronként gyümölcsök és azok súlya szerepel.

Írjon egy programot, amely elvégzi a következő műveleteket:

- beolvassa a file tartalmát egy alkalmas tömbbe

- kiírja a tömb tartalmát egy adott nevű (pld. "gyumi.bin") bináris file-ba

- visszaolvassa a bináris file tartalmát a tömbbe

 

 

Rekurzív algoritmusok, bináris fák

 

P01

Írjon programot, amely rekurzívan kiszámolja két szám legnagyobb közös osztóját!

P16

Az úgynevezett Schröder szám megadja, hogy egy n n méretű négyzethálón mennyi elemi lépéssel juthatunk el a bal alsó sarokból a jobb felsőbe mindig a főátlón, vagy alatta haladva. Tudjuk, hogy S0=1, valamint

Írjon függvényt, amely kiszámítja az n-edik Schröder számot!

P15

Írjunk programot, amely megoldja a 'Hanoi tornyai' néven ismert feladványt. Adott három pálcika, az egyiken különböző nagyságú korongok. A legnagyobb korong van legalul, a legkisebb legfelül. Mozgassuk át a korongokat egy másik pálcikára úgy, hogy végül ott is a legnagyobb legyen legalul, de a mozgatás során egyszer se forduljon elő, hogy egy nagyobb korong egy kisebb tetejére kerül.

P20

Írjon programot, amely whitespace-ekkel határolt szavakat olvas a standard inputról és fordított sorrendben visszaírja azokat!

P03

Írjunk egy függvényt, amely a * és ? wildcard karaktereket kezelve eldönti egy stringről, hogy illeszkedik-e egy adott mintára. A függvény teszteléséhez írjunk programot.

P10

Írjunk programot, amely generálja az összes olyan 'a' és 'b' karakterekből álló adott hosszúságú (max.40) szót, amely nem tartalmaz két egymást követő 'b' betűt.

P11

Írjunk programot, amely beolvas egy karaktersorozatot (pld. EOLN-ig), majd kiírja a beolvasott betűk összes permutációját (az esetleges ismétlődéseket is vizsgálja).

Például:

abc --> abc, bca, cab, cba, bac, acb.

P09

Írjon olyan eljárást. mely a Pascal háromszög egy sorát írja ki. Az eljárás paramétere a sor száma. Emlékeztetőül: a Pascal háromszög n. sora (n=0,1,2,...) tartalmazza az  mennyiségeket, ahol k=0,1,2,...n. A következőképpen kezdődik a Pascal háromszög:

                                    1

                             1             1

                      1             2             1

               1             3             3             1

        1             4             6             4             1

1             5             10            10            5             1

Oldjuk meg a feladatot ciklussal és rekurzióval is. Figyeljük meg a rekurzív megoldás előnyét!

P02

Írjon programot, amely whitespace-ekkel határolt szavakat olvas a standard inputról.

P02a

Tegyük bináris fába a szavakat, tárolva az esetleges ismétlődéseket.

P02b

Írjuk ki az így kapott bináris fa alapján a beolvasott szavakat ABC sorrendben.

P02c

Keressünk egy szót a bináris fában.

P02d

Mentsük el egy állományba a bináris fát.

P02e

Írjunk függvényt, amely meghatározza a bináris fában az

a) elemek számát

b) szintek számát

c) levelek számát

d) egygyermekes csomópontok számát

e) kétgyermekes csomópontok számát

P08

A morze ABC-t egy keresőfába szeretnénk tárolni, amely alkalmas lesz a beolvasott morze kódot könnyen dekódolni. A deklarációk a következők:

  struct morzebetu {                     

                char ch;          /* a betű */

                struct morzebetu * pont;  /*a következő kód, ha ponttal folytatjuk*/

                struct morzebetu * vonal; /*a következő kód, ha vonallal folytatjuk*/

  };

  typedef struct morzebetu *pmorzebetu;     /* a morzebeture mutató pointer */

  pmorzebetu morze;               /* a gyökérelem */

P08a

Írjon függvényt, amely a standard input első sorát olvasva felépíti a keresőfát. (A még nem definiált betűk helyén szóköz szerepel.) Például:

S... O--- T- E. A.- M--

P08b

Írjon függvényt, amely az így felépített keresőfa alapján dekódolja a második sort. Például (SOETEET ESTE):

... --- . - . . -  . ... - .

P08c

Írjon függvényt, amely megszámolja a keresőfában a nem definiált morze kódokat (szóközök).

P08d

Írjon függvényt, amely kiírja a teljes keresőfát. (A morze kódokat és karaktereket.)

 

S07

Írjon programot, amely kiírja a standard outputra az összes paraméterét egy-egy szöközzel elválasztva, majd egy newline karakterrel lezárva (echo).

 

Fésűs listák

 

D31

Írjon programot, amely Neptun kódokat és osztályzatokat olvas az inputról soronként. Az adatokat tegye egy kétirányú láncolt listába. A lista elején és végén használjon strázsákat.

D31a

Módosítsa a fenti programot úgy, hogy a lista Neptun kód szerint legyen rendezve.

D31b

Módosítsa a fenti programot úgy, hogy megengedhetünk azonos Neptun kóddal több osztályzatot is. Írja ki a kiszámított átlagot Neptun kódonként.

D31c

Módosítsuk a D31 feladatot úgy, hogy az input sorban Neptun kód, tantárgy, osztályzat van. Ebből készítsünk egy fésűs szerkezetet, melyben a Neptun kódokra fűzzük fel az egyes tantárgyakhoz tartozó osztályzatokat.

Írjuk ki az egyes Neptun kódokhoz tartozó átlagokat.

Írjuk ki, hogy ki kapott egy adott tantárgyból jelest.

 

Függvényparaméterek

 

S08

Írjon programot, amely segítségével egy menüből (a menü legyen egy indexelt felsorolás, ahol az index értéke azonosítja a kiválasztott menüpontot) választhatunk egy egyváltozós függvényt. Ezután a program számítsa ki a kiválasztott függvény értékét egy adott pontban. A függvények között legyen szabványos könyvtári (pld. sin, cos, tan) függvény, és saját függvény is. Tároljuk a függvények címeit és neveit valamilyen belső tömbös adatszerkezetben.

 

 

Parancssori paraméterek

 

A15

Írjon programot, amely elvégzi az argumentumban megadott aritmetikai alapműveletet!

            Például:         expr 2 + 3

            Kiírja:       5

A kezelt aritmetikai műveleteket tetszés szerint meghatározhatja (pld. +-*/%).

D02

Írjon programot, amely elvégzi az argumentumban megadott méretű mátrixok szorzását, majd kiírja az eredményt!

            Például:         mat 6 3 7 8 5

Dinamikusan előállít egy 6x3-as mátrixot, amelyet [0,1] intervallumba eső véletlen számokkal tölt fel, majd megszorozza egy 3x7-es, ugyanilyen véletlen mátrix-szal, majd az eredményt egy 7x8-assal stb., amíg van paraméter.

T10

Írjon C programot, amely 2, paraméterként megadott, szöveg típusú file sorait két oszlopban kiírja a standard kimenetre úgy, hogy az első file sorai a baloldali oszlopba balra igazítva, a második file sorai pedig a jobboldali oszlopba jobbra igazítva kerüljenek. Feltételezheti hogy mindkét file sorai rövidebbek mint 50 karakter, és a papír szélessége 120 karakter. A két file sorainak száma különbözhet.

 

 

                                                                                                                   2012-09-17 szandi@hit.bme.hu