C házifeladatok II.
- 1. heti házifeladatok
- 2-3. heti házifeladatok
- 4-5. heti házifeladatok
- 6-7. heti házifeladatok
- 8-10. heti házifeladatok
- 11-13. heti házifeladatok
1. heti házi feladat(ok)
- Készítse el a PELDA24.C-hez hasonlóan a valós számok
tömbbe olvasását és visszaírását! Az
int getint(int *)
függvény
int getfloat(float *)
-ra változtatandó! Az int bufp;
lecserélendő char *bufp;
-re! Tegyünk legalább annyi inputellenőrzést
a getfloat-ba, hogy legalább egy numerikus karakter meglétét megkövetelje,
ill. konvertálhatatlan karakterek esetén ürítsük ki a bemeneti puffert a legközelebbi
fehér karakterig!
- Készítse el az alább felsorolt, ismert C függvények mutatós változatát!
A
char *
visszatérésű függvények az eredmény címével térnek vissza!
- Két karakterlánc egyesítése:
void strcat(char s[], char t[]) -- char *strcat(char *, char *)
- Karakterlánc másolása:
void strcpy(char cel[], char forras[]) -- char *strcpy(char *, char *)
Vissza az elejére!
2-3. heti házi feladat(ok)
- Készítse el az alább felsorolt, ismert C függvények mutatós változatát!
A
char *
visszatérésű függvények az eredmény címével térnek vissza!
- Sor beolvasása a szabvány bemnetről:
int getline(char s[], int n) -- int getline(char *, int)
- c karakter törlése a karakterláncból:
void squeeze(char s[], int c) -- char *squeeze(char *, int)
- Karakterlánc egésszé konvertálása:
int atoi(char s[]) -- int atoi(char *)
- Karakterlánc nagybetűssé alakítása:
void strupr(char s[]) -- char *strupr(char *)
- Karakterlánc megfordítása helyben:
void strrev(char s[]) -- char *strrev(char *)
- Karakterlánc feltöltése c karakterrel:
void strset(char s[], int c) -- char *strset(char *, int)
- Az strstr() függvény az index()-től eltérően
a második karakterlánc elsőbeli első előfordulásának címével tér vissza, ill.
NULL mutatóval, ha a második karakterlánc nem található meg az
elsőben.
int index(char s1[], char s2[]) -- char *strstr(char *, char *)
- Készítsen
char *strstrnext(char *, char *)
függvényt,
mely ugyanazt teszi, mint az strstr(), de egy static mutató
segítségével az első hívás után a második karakterlánc következő elsőbeli
előfordulásának címével tér vissza, és ezt mindaddig teszi, míg
NULL mutatót nem kell szolgáltatnia.
- Készítsen programot két mátrix összeadására! A mátrixoknak foglaljon
helyet a memóriában! A mátrixok mérete azonban csak futás időben dől el. A számok
beolvasásához felhasználható az
int getint(int *)
függvény, de feltétlenül
lássuk el minimális inputellenőrzéssel!
Vissza az elejére!
4-5. heti házi feladat(ok)
- Készítsen programot két mátrix összeadására! A mátrixok
mérete itt is futás időben dől el. A programban használjon függvényeket a
mátrix méretének-, a mátrix elemeinek bekéréséhez és a két mátrix
összeadásához! A két utóbbi függvény paraméterként kapja meg a
mátrixokat! A mátrixok összegzését végző rutinnak készítse el a
dinamikus változatát is, azaz a függvény csak a két összeadandó mátrixot
kapja meg paraméterként méreteivel egyetemben, és a visszatérési értéke
legyen a benne dinamikusan foglalt összegmátrix kezdőcíme!
Az int getint(int *)
függvény feltétlenül továbbfejlesztendő pontos,
még az ábrázolási határokat is megvizsgáló inputellenőrzésig. A végső változat pedig
csak akkor írja ki a behozott, konvertált számot a paraméter címre, ha az inputellenőrzés
nem talált hibát.
- Készítsen programot, mely a JANI fordítási időben változtatható
azonosítójú környezeti változóról megállapítja, hogy létezik-e! Ha létezik,
akkor eldönti, hogy értéke 'ló', 'szamár' vagy más. A feladat fokozható
egyrészt úgy, hogy a változó lehetséges értékei is legyenek fordítási időben
módosíthatók, másrészt úgy, hogy ne rögzítsük kettőben a lehetséges értékek
darabszámát!
- Alakítsa át úgy az előző, adott környezeti változó értékvizsgálatával
foglalkozó szoftvert, hogy a szabvány könyvtári környezetkezelő függvényeket
használja feladata ellátására!
Vissza az elejére!
6-7. heti házi feladat(ok)
- Készítsen programot, mely a környezeti változó azonosítóját és
lehetséges értékeit parancssori paraméterekként kapja meg és megállapításai
az előző példában megfogalmazottakkal azonosak! Ha a programot paraméter
nélkül indítják, akkor tájékoztasson használatáról!
- Készítsen szoftvert, mely egész számokat tároló,
egyirányú, láncolt listát hoz létre, és azután megjelenteti a szabvány
kimeneten a lista tartalmát! Végül a program szabadítsa is fel a lista
tárolásához lefoglalt memóriát! A lista elemeinek számát, illetve a
tárolt adatokat véletlenszám-generátorral kell előállítani.
- Fejlessze tovább úgy a programot, hogy lehetőség nyíljék a listában a felhasználó által megadott érték
megkeresésére!
- Alakítsa át úgy a szoftvert, hogy a felhasználó ki tudjon törölni, és be is tudjon szúrni elemeket a listába!
Átnézendő a Microsoft Visual C++ keretrendszerben a prodzsekt, a nyomkövetés, a segítség stb. kezelése!
Vissza az elejére!
8-10. heti házi feladat(ok)
- Készítsen programot, mely eldönti az indító parancssorban megadott azonosítójú
fájlról, hogy ASCII kódú szövegfájl-e, vagy bináris fájl-e! Ha parancssori paraméter nélkül
futtatják a programot, akkor ismertesse a képernyőn a használatát!
- Készítsen programot, mely az indító parancssorban megadott szövegfájlokat
egyesíti a megadás sorrendjében a parancssorban utolsóként előírt azonosítójú
szövegfájlba! Ha parancssori paraméter nélkül indítják a programot, akkor
ismertesse a képernyőn, hogyan kell használni! Ha csak egy fájlazonosító van
a parancssorban, akkor a szabvány bemenet másolandó bele. A fájlok egyesítése
során a folyamat előrehaladásáról tájékoztatni kell a képernyőn! A szabvány bemenet másolása
esetén végül közlendő az eredményfájl mérete!
- Készítsen
char * kozepre(char *mit, int szeles)
függvényt, mely
a saját helyén középre igazítja a mit karakterláncot szeles
szélességben, és visszaadja az eredmény karakterlánc kezdőcímét! A középre igazítást
csak szeles-nél rövidebb karakterlánc esetén kell elvégezni. A kétoldali
párnázó karakter indulásként legyen a szóköz, de legyen fordítási időben ez megváltoztatható!
- Készítsen programot, mely igazított táblázatot hoz létre az
alábbi tartalmú TABLA fájl
Szöveg Forint Egész
Papadopulosz 111222.3 1456
Sodik_sor 2.2 345
szabvány bementkénti átirányításával. Az eredmény táblázat:
+-------------------------------+-------------------+------------+
| Szöveg | Forint | Egész |
+-------------------------------+-------------------+------------+
| Papadopulosz | 111222.30Ft | 1456 |
+-------------------------------+-------------------+------------+
| Sodik_sor | 2.20Ft | 345 |
+-------------------------------+-------------------+------------+
ahol az első oszlop balra-, a második jobbra-, s a harmadik középre
igazított. A tábla egy sorának szerkezete:
| MEZO1| MEZO2Ft | MEZO3 |
ahol MEZO1, MEZO2 és MEZO3 bruttó adatszélességek a mutatott módon.
- Legyen ugyanaz a feladat, mint az előbb, de most az adatokat
lehessen billentyűzetről is megadni!
- Alakítsa át úgy a jegyzet PELDA27.C-beli
int getint(int *)
függvényét, hogy az fogadja a BACKSPACE gombot is a szokásos funkcióval!
Áttanulmányozandó Linux rendszerben (GNU C) a szerkesztés, a program fordítása, kapcsolószerkesztése, futtatása és a segítség!
Vissza az elejére!
11-13. heti házi feladat(ok)
- Készítsen hibakezelést is megvalósító
off_t fajlmeret(char *fajlazonosito)
függvényt, mely megállapítja a paraméter fájl méretét! Próbálja is ki a
rutint egy olyan főprogrammal, mely a kérdéses fájlt parancssori
paraméterként kapja!
- Készítse el újra az alacsony szintű B/K ismereteit felhasználva azt a programot, mely az indító parancssorban
megadott fájlokat egyesíti a megadás sorrendjében a parancssorban utolsóként előírt azonosítójú fájlba! Ha kettőnél
kevesebb parancssori paraméterrel indítják a szoftvert, akkor ismertesse a képernyőn, hogyan kell használni! A fájlok
egyesítése során a folyamat előrehaladásáról tájékoztatni kell most is a képernyőn!
- Egy vállalat két, egyszerű szöveges állományban (bevetel.txt, kiadas.txt) tárolja havi bevételeit és
kiadásait. A bevételeket pozitív, a kiadásokat negatív előjelellel rögzítették. Készítsen olyan programot, amely
új folyamatot indít a kiadások összegzésére, mialatt maga a bevételeket adja össze. A két részeredményt aztán a szülő
folyamatnak kell összeadnia, és meg kell jelenítenie a nyereség/veszteség mértékét!
- Készítsen olyan programot, ami EOF végjelig szövegsorokat olvas a szabvány bemenetről! Menüpontok
segítségével tegye lehetővé, hogy a felhasználó növekvő vagy csökkenő sorrendbe rendezhesse az adatokat! A rendezést az
operációs rendszer sort programjának segítségével kell elvégeztetni, ami a paraméterként kapott szövegfájl
sorait növekvőleg (-r paramétert megadva: csökkenőleg) rendezi, és a szabvány kimenetre írja. A sort-ot az overlay
technika felhasználásával indítsa el!
Vissza az elejére!