Programozási alapismeretek 1. gyakorlat, 2. és 5. csoport, 2007/2008 ősz

Adj már egy oboloszt (=fillért) neki,
mert hasznot akar húzni abból, amit tanul.

Euklidész

Célkitűzés

A tárgy gyakorlatának célja, hogy a hallgatók (haladó felhasználói szinten) megismerjenek egy olyan operációs rendszert, amivel eddig nem biztos, hogy találkoztak, a GNU/Linux rendszert. Elkészítenek továbbá egy weblapot és a félév végén az előadáshoz kapcsolódóan elméleti fogalmakkal kapcsolatos feladatok megoldására is sor kerül.

Időpont

Előadás Péntek 12.00-14.00 Északi tömb -1.75, Konferenciaterem
Gyakorlat (2. csoport) Kedd 11.30-13.00 Déli Tömb 00-112
Mentorálás (2. csoport) Kedd 13.00-14.00 Déli Tömb 00-112
Gyakorlat (5. csoport) Csütörtök 10.15-11.45 Déli Tömb 0-409
Mentorálás (5. csoport) Csötürtök 12.00-13.00 Déli Tömb 0-409
Fogadóóra Hétfő 14.00-18.00 Déli Tömb 3-113
Az előadáson és a mentoráláson erősen ajánlott részt venni, a gyakorlatokon megjelenni kötelező!

Elérhetőségek

Előadó Fóthi Ákos
Gyakorlatvezető Riskó Gergely progalap@risko.hu +36-20-340-8772 Déli tömb 3.113
Mentor (2. csoport) Sajó Endre baja@inf.elte.hu
Mentor (5. csoport) Ádám Mórocz morocz@gmail.com

Követelmények

A legalább elégséges gyakorlati jegy megszerzéséhez teljesíteni kell a követelmények mindegyikét, majd a két dolgozat során megszerezhető 120 pontot az alábbiak szerint váltom gyakorlati jegyre:
-40elégtelen
41-60elégséges
61-80közepes
81-100
101-120jeles
111- és legalább 45 pont a házi feladatokbólkitűnő

Határesetben a házi feladatok minősége és az azokból megszerzett pontszám is befolyásolja a gyakorlati jegyet.

Bármilyen csalás felfedezése esetén az érintettek csalás által befolyásolt teljesítése (pl. zárthelyi esetén a dolgozat, házi feladat esetén az adott házi feladat) meg nem írtnak számít és a hallgató a jeles vagy kitűnő jegy megszerzésének lehetőségétől elesik. Különösen kirívó (pl. más valaki jön zh-t írni) vagy ismétlődő esetben a csalás(ok) tényét az egyetem illetékes személyeinek is jelzem.

A gyakorlatot, mivel azon folyamatos számonkérés van, gyakorlati utóvizsgával teljesíteni nem lehet.

Házi feladatok

Általános (formai) követelmények

1. feladat (6 pont)

2007. 09. 26. éjfélig

Töltsd le Riskó Gergely magyar weblapjáról a robotika alól a graph.c nevű C forrásállományt és annak HTML verzióját! A C fájlt tedd közzé a saját pandorás publikus tárterületed progalap alkönyvtárában! Más fájlok ne legyenek ebben a könyvtárban! Készíts egy új fájlt eha.txt néven, amibe írd bele az ETR azonosítódat. Az említett három fájlt csatolva, egy emailben küldd el első feladatként, teljesítve a formai követelményeket! Vedd észre, hogy ehhez igazából mindhárom fájlt fel is kell töltened a pandorára, hiszen csak a pandoráról küldött beadandókkal foglalkozom érdemben.

2. feladatsor (összesen 8 pont)

2007. 09. 26. éjfélig

3. feladatsor (összesen 8 pont)

2007. 10. 03. éjfélig

4. feladatsor (összesen 10 pont)

2007. 10. 10. éjfélig

5. feladatsor (összesen 13 pont)

2007. 10. 19. éjfélig (a kiírás csúszása miatt)

6. feladatsor (összesen 15 pont)

2007. 11. 04. éjfélig

Az elkészített programok lehetőleg működjenek speciális, például szóközt tartalmazó fájlnevekre is!

Csoport ZH megoldások: PDF PostScript LaTeX

Az évfolyam géptermi ZH megoldásai

Minden feladat 12 pontot ért.

1. feladat

Egy fájlban tároljuk, hogy egy csoport hallgatói milyen tárgyakat vettek fel ebben a félévben. A fájl minden sorában egy hallgató neve, EHA kódja, és felvett tárgyainak listája szerepel, ezeket egymástól kettőspont választja el. A tárgyak listájánál vessző az elválasztó jel.

Írj UNIX parancsfájlt legtobb.sh néven, aminek első paramétere egy fentebb leírt alakú fájl. A parancsfájl írja ki annak a hallgatónak a nevét, akinek a legtöbb felvett órája van, de legalább 2. Holtverseny esetén mindegy melyik hallgató nevét írja ki a script a holtverseny résztvevői közül.

Tesztfájl
Megoldás

2. feladat

Írj UNIX parancsfájlt tarol.sh néven, ami az 1. paraméterként adott directoryban közvetlenül lévő *.log fájlok közül egy olyat, amelyik mérete nagyobb mint 100 byte, becsomagol a tar paranccsal. Az archív fájl neve legyen ugyanaz, mint az eredeti fájl neve volt, hozzáillesztve a ".tar" végződést. Az eredeti fájlt nem is kell megtartani, le kell törölni. Azt feltehetjük, hogy a paraméterként adott könyvtárban van .log végződésű fájl, de az már nem biztos, hogy 100 bytenál nagyobb méretű is van. Utóbbi esetben nem kell csinálni semmit.

Megoldás

3. feladat

Bergengóciában a hallgatók félév végén A,B,C,D vagy E minősítést kapnak, ahol A megfelel a legrosszabb, E a legjobb érdemjegynek. Írj UNIX parancsfájlt konvert.sh néven, ami ha első paramétere egy magyar osztályzat (1-5 közötti szám), akkor kiírja annak bergengóc megfelelőjét és hogy milyen konvertálás történt a következő alakban:

./konvert.sh 4
4 -> D

Tehát a parancsfájl mindig pontosan 1 sort ír ki, ami az első paraméterrel kezdődik, majd szóközt követően egy kötőjel, aztán "->", majd az első paraméternek megfelelő nagybetű alkotja a sort.

A paramétereknél a következő ellenőrzéseket kell elvégezni, a parancsfájl adjon megfelelő hibaüzenetet, ha:

Megoldás

4. feladat

Írj UNIX parancsfájlt ehak.sh néven, aminek az első paramétere egy olyan fájl, melynek minden sorában egy vezetéknév és egy keresztnév van, ezeket szóköz választja el egymástól. Az is igaz, hogy ez egy névsor (de a rendezettség igazából lényegtelen), minden sorban egy elsőéves proginfós hallgató neve van, feltehetjük, hogy mindenkinek 1 vezeték- és keresztneve van.

A nevekből EHA kódokat képezünk. Egy EHA kód pontosan 7 nagybetűből áll, első 2 betűje a vezetéknév első két betűje (nagybetűkkel), majd őket követi a keresztnév kezdőbetűje, végül mindenki esetén az utolsó 4 karakter a konstans "PAAI" sztring. Természetesen így előfordulhat ütközés, mint például "Riskó Gergely" és "Richter Gabor" esetén.

A parancsfájl hozzon létre egy elsosok.txt nevű fájlt, benne minden sorban az input egy hallgatója, mellette kettősponttal elválasztva az EHA kódja legyen (ebben a fájlban minden hallgató és az EHA kódja szerepeljen, az ütközők is!). Ezt követően egy másik fájlt is létre kell hoznia (a TO-s néninek további feldolgozás céljából), ennek neve legyen hiba.txt, és csak az ütköző EHA kódokat tartalmazza, mindegyiket egyszer.

Tesztfájl
Megoldás

5. feladat

Pénzforgalmunkat egy fájlban tároljuk, amelynek minden sora a következő alakú:

honnan:hova:mennyi

Ahol egy sor jelentése az, hogy a "honnan" számláról a "hova" számlára mekkora összeg került át.

Írj UNIX parancsfájlt szamla.sh néven, aminek 3 paramétere van. Az első egy pénzforgalmat tároló fájl. Második egy számla neve, a harmadik az ezen a számlán lévő kezdeti összeg. A parancsfájl írja ki az adott számlán lévő jelenlegi egyenleget.

Az input 2 egymást követő sora között semmilyen összefüggés nincs. Arra figyelj, hogy ha a számla neve az első oszlopban van, akkor kivettünk pénzt; ha a 2. oszlopban van, akkor befizetés történt az adott számlára.

Mintafutás:

./szamla.sh penz.txt kp_penztarca 1000
8000
Tesztfájl
Megoldás

Segédanyagok

Készülő jegyzet
Fóthi Ákos: Bevezetés a programozáshoz (ELTE Eötvös Kiadó)
Brian W. Kernighan, Rob Pike: The Unix programming environment. Prentice Hall, ISBN 3-446-14273-8
LinuxShell Scripting Tutorial
man oldalak