Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

Hasonló dokumentumok
Programozás Minta programterv a 2. házi feladathoz 1.

OAF Gregorics Tibor: Minta dokumentáció a 4. házi feladathoz 1. Feladat. Megoldás

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Programozás Minta programterv a 1. házi feladathoz 1.

EAF II Feladat dokumentáció IV. feladat 4. házi feladathoz

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1.

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1. Készítette: Gregorics Tibor

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

Szekvenciális inputfájl felsorolása

Programozás II gyakorlat. 4. Öröklődés

Programozási tételek újrafelhasználása

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Bevezetés a programozásba I.

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

BME MOGI Gépészeti informatika 4.

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Felhasználó által definiált adattípus

Alkalmazott modul: Programozás

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Programozási nyelvek II. JAVA

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

.Net adatstruktúrák. Készítette: Major Péter

Programozás II. ATM példa Dr. Iványi Péter

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Objektum elvu alkalmaza sok fejleszte se

Programozási feladatok megoldása visszavezetéssel egy osztály-sablon könyvtárra támaszkodva 1

Programozás II. 2. Dr. Iványi Péter

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

BME MOGI Gépészeti informatika 8.

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

AWK programozás, minták, vezérlési szerkezetek

BASH script programozás II. Vezérlési szerkezetek

C# nyelvhez kapcsolódó programozási feladatok

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Informatika terméktervezőknek

Operációs rendszerek gyak.

Pénzügyi algoritmusok

Tervminták II. (Híd, Bejáró, Gyártófüggvény) Halmaz és bejárása Osztály-sablonok

1.AA MEGOLDÓ BERCI AA 1.

Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök

A C# programozási nyelv alapjai

4. Öröklődés. Programozás II

Pénzügyi algoritmusok

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

OOP: Java 8.Gy: Abstract osztályok, interfészek

AWK programozás Bevezetés

és az instanceof operátor

Bevezetés a programozásba Előadás: A const

Programozási tételek újrafelhasználható osztálysablon könyvtára

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

INFORMATIKAI ALAPISMERETEK

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Kalapácsvetés 2016 szöveges

BME MOGI Gépészeti informatika 7.

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Bánsághi Anna 2014 Bánsághi Anna 1 of 35

Feladat. Ternáris fa. Típusspecikáció. Reprezentáció. Absztrakt implementáció. Érdi Gerg EAF II. 4/3.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Programozási nyelvek Java

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Maximum kiválasztás tömbben

Bevezetés, a C++ osztályok. Pere László

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

C++ programozási nyelv

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

Cekla. Készítette Doxygen Tue Sep :13:44

Objektumorientált Programozás IV.

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Programozási nyelvek Java

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

500.AA Megoldo Arisztid 500.A

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

1. Alapok. Programozás II

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

500. CC Megoldó Alfréd CC 500.

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

C# osztályok. Krizsán Zoltán

1. feladat Készítse el szövegszerkesztővel, majd mentse osztály.txt néven a következő tartalmú szöveges fájlt:

C++ programozási nyelv Konstruktorok-destruktorok

Programozás 6. Dr. Iványi Péter

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök. Adatfolyamok Hibalehetőségek

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programozási nyelvek Java

Átírás:

Programozás(A szakirány) II. beadandó feladat 2014.05.05. Farkas András HP6S15 fafee@fafeecorp.com 1. csoport Veszprémi Anna / Hudoba Péter Feladat: Egy szöveges állományban bekezdésekre tördelt szöveg található. Egy bekezdés egy vagy több nem üres sorból áll. A bekezdéseket üres sorok vagy az állomány eleje illetve vége határolja. - Melyik a leggazdagabb bekezdés, azaz hányadik az a legalább három soros bekezdés, ahol a legnagyobb a szavak számának és a sorok számának hányadosa? Megoldási terv: Specifikáció: A = ( f: InFile(K), x: Eredmény) Állapottér átalakítása olyan felsorolóra amely a bekezdések számunkra fontos tulajdonságait adja meg: A = (t: Enor(Bekezdés), x:eredmény) Bekezdés = rec(sordb: N, szdb: N, sorsz: N) Eredmény = rec(sorsz: N, hanyados: R) Ef = (t=t') Uf = ( (l),x.hanyados,x.sorsz = MAX e t ' e.sordb 3 e.hanyados ) Absztrakt program: Feltételes Maximumkeresés: f(i) ~ e.hanyados β(i) ~ e.sordb > 2

Felsoroló: enor(bekezdes) F: InFile(string) sor: StringStream st: Status akt: Bekezdés vége: L First(), Next(), Current(), End() First() ~ akt.sorsz=0 st,sor,f: read() Next() Next() ~ ld. kiemelve Current() ~ ret: akt End() ~ ret: vege A Next() műveletnek a következő feladatot kell végrehajtania: Adott egy sorokra tördelt szöveges állomány, ahonnan már kiolvastuk az első sort (ez van a sor változóban, ha sikeres volt ez a korábbi olvasás, egyébként st=abnorm), illetve ezen előző bekezdés sorszáma (akt.sorsz); és a soron következő bekezdést kell feldolgoznunk. Először átolvassuk a bekezdés előtti üres sorokat, ha nincs több nem üres sor, akkor vége változót igazra állítjuk. Ha találunk, akkor a vége változó hamisra áll, az akt.sorsz értékét eggyel növeljük, és az akt többi mezőjét inicializáljuk, majd kitöltjük a következők szerint: A külső tételnek a bekezdés sorainak számára, illetve szavainak számára van szüksége. A bekezdés sorait soronként olvasva az akt.sordb-t mindig eggyel növeljük, illetve a sorokon belül megszámoljuk hogy hány valamilyen whitespace-l elválasztott szó szerepel, az akt.szdb-t mindig eggyel növelve. A bekezdés feldolgozása végén vagy a bekezdést követő (első) üres sort olvassuk be utoljára (ami bekerül a sor változóba), vagy elértük az állomány végét (st=abnorm).

A Next = (f: InFile(String), sor: String, st: Status, vége: L, akt: Bekezdés) Ef Next = ( f = f ' sor=sor 1 st=st 1 akt=akt 1 ) Uf Next = ( st 2, sor 2, f '= select sor (sor 1, f ' ) (st=abnorm sor üres) (vége=(st 2 =norm)) vége akt.sorsz=akt 1. sorsz+1 akt.sordb,st,sor, f = 1 sor (sor 1, f ' ) st=norm sor üres akt.szdb, st, sor, f = szavak (sor) sor (sor 1, f ') )

Implementáció: Program váz: A program több állományból áll: main.cpp, enor.h, enor.cpp, misc.h. main.cpp enor.h enor.cpp misc.h int main() struct Bekezdes enum Status class Enor Enor() ~Enor() void First() Bekezdes Current() bool End() void Read() void Next() struct Eredmeny bool cconvert() void bfflush() Függvények kapcsolódási szerkezete:

Felsoroló osztálya: class Enor{ private: std::ifstream f; std::stringstream sor; Status st; Bekezdes akt; bool vege; void Read(); }; public: Enor(const std::string &str); ~Enor(){f.close();} void First() {Read(); Next();} void Next(); Bekezdes Current() const { return akt;} bool End() const { return vege;} A szöveges állomány soronkénti olvasását a getline(f, sor) utasítás végzi, amely a Read() metódusba van beágyazva úgy, hogy stringstream típusú adatként adja vissza, illetve beállítja az olvasás st státuszát. A stringstream típusú sor szavainak olvasása a >> operátorral történik. Akkor üres a sor, ha sztringként értelmezve az üres sztringgel egyenlő. A megvalósításban a szavak() függvény nem került önálló alprogramba. Használat: A program a feldolgozandó fájl elérési útjának bekérésével indul. Amennyiben nem létező fájlt adunk meg, a program a nevet újra bekéri. A feladat elvégzése után az eredmény az alapértelmezett kimenetre íródik ki, majd a program megkérdezi hogy szeretnénk-e tovább (újra) lefuttatni. Eldöntendő kérdésekre a program 'nem'-ként az N, n, 0 karaktereket fogadja el, 'igen'-ként pedig bármi mást.

Tesztelési terv A megoldásban egy külső feltételes maximumkeresés és kettő darab számlálás szerepel. Külső szint: 1. Nincs megtalálandó bekezdés, mert egyik sem áll legalább 3 nem üres sorból. ures.txt 2. Egyetlen, több mint 3 soros bekezdés van a fájlban. egy.txt 3. Több megfelelő bekezdésből kell a megfelelőt megtalálni, ami mögött még van kevesebb mint 3 soros. sok1.txt / sok2.txt 4. A megfelelő bekezdés a legeslegutolsó, de előtte van jóval szógazdagabb de csupán 2 soros bekezdés. utolso.txt 5. A fájl csak whitespacekből és újsorjelekből áll. Ekkor a program megtalálja a legalább 3 soros bekezdést, és a hányados nulla. buta.txt A felsoroló szintje: Ezek az esetek arra vannak kihegyezve hogy a program a szabályoknak megfelelően viselkedik-e extra üres sorok illetve kizárólag whitespaceket tartalmazó sorok esetén. 1. A fájl nem tartalmaz üres sort. egy.txt 2. A fájl eleje / vége üres sorokból áll. sok1.txt 3. Egy-egy bekezdés belsejében van 'üres' tehát csak whitespace-t tartalmazó sor. sok2.txt 4. A fájl csak whitespacekből és újsorjelekből áll. Ekkor a program megtalálja a legalább 3 soros bekezdést, és a hányados nulla. buta.txt A felsorolt esetek a fehérdoboz tesztet is lefedik a program összes függvénye számára.