Kihagyás

Szekvenciális fájlok kezelése

Szekvenciális inputfájl

Egy olyan gyűjtemény, aminek elemeit csak sorban, egymás után lehet kinyerni (mind E halmazbeli).

Jelölés: infile(E)

  • Az ilyen gyűjteményre sorozatként tekintünk
    • A reprezentációja többnyire valóban sorozat
    • Egyetlen művelet engedélyezett: Az első elem "kiolvasása"
      • Más néven leszakítás
  • Az olvasást az st, e, x szimbólumokkal jelöljük
    • ami értékadásra utal, ami a read visszatérési értéke

Szekvenciális outputfájl

Olyan gyűjtemény, amelybe sorban egymás után helyezzük el egy adott E halmazhoz tartozó elemeket

  • Az ilyen gyűjteményre sorozatként tekintünk
    • A reprezentációja többnyire valóban sorozat
  • Két megengedett művelet
    • Kezdetben üres sorozat létrehozása
    • A sorozat végéhez hozzáfűzés
  • Az iniciálást az x := <> értékadás végzi, ahol x:outfile(E) és <> az üres sorozat
  • Az írást az x: write(e) szimbólummal jelöljük, ahol x:outfile(E), e:E
    • Fedi ezt a tevékenységet: x:= x \(\oplus\) <e>

Gyakorlatban előfordul gyakran, hogy több szekvenciális inputfájl alapján kell egy szekvenciális outputfájlt készíteni (az ismert programozási tételek használatával)

Ilyenkor az inputfájlt elemenként dolgozzuk fel (az olvasó műveletre támaszkodva) felsoroljuk, és a megoldást az összegzés algoritmus mintára vezetjük vissza.

Általános Szekvenciális felsorolás

Szekvenciális felsorolás - Példa

  • E* - Inputparaméter típusa (jellemzően csak E)
  • st - Státusz
  • e - E* típusú elem
  • x:read - fájl

Létezik egy előreolvasási stratégia, ahol a ciklusmag végén próbáljuk meg beolvasni, ami ha nem sikerül, tudjuk, hogy a végőén vagyunk

Általános Összegzés fájlkezeléshez

Összegzés - Példa

  • A H halmaz megfelelője egy valamilyen Felsoroló
  • Az összeadást az összefűzés (\(\oplus\)) váltja fel
  • A neutrális elem pedig az üres sorozat (<>)

C# Nyelvi elemek

A beolvasáshoz használható a cringe TextFileStream.dll, vagy implementáljunk egy értelmes StreamReader-t

Az íráshoz a megszokott StreamWriter ajánlott

Feladat - Karakterek átalakítása

Karekterek átalakítása

Szürke tesztelés

Rekordonkénti olvasás

A feladat célja inkább a több tétel egyszerre történő alkalmazása

Pulzusmérés

A részfeladatokat megoldó programokat egy ciklusba kell összevonni, hiszen nem megismételhető felsorolásra épül

A megvalósításhoz szinkron elemeket kell használni


Szimultán feldolgozás közös felsorolón

Itt be lett vezetve egy sírköves feladat (háromszögben plusz), ami két elem közüll a nagyobbal tér vissza

A sárga részek szerepe, hogy a lineáris keresés (ha módosítással is) megfeleljen az összegzéssel

Sportoló feladat (3)

Sportoló feladat (3) - Algoritmus

Az előfeltétel miatt a státusz ellenőrzése elhanyagolható, és elég csak a pulzusra tett feltételt ellenőrizni

Kitérő feladat

Az előadásban itt történik egy kiegészítés a feladatra, hogy az első legalább 100-as pulzus előfordulását is fegyük figyelembe, amivel így módoslulna a specifikáció:

A = (\(x:\) infile(Mérés)), \(c:\mathbb{N}\), min \(: \mathbb{N}\) Mérés=rec(idő \(:\mathbb{S}\), pulzus \(:\mathbb{N}\))

Ef = (\(x = x_{0} \land \nearrow_{ido} \land \exist i \in [1 .. \red{|x|} ]:x_{i}.pluzus \geq 100\))

Uf = (\((c, (., \red{e'}, x'))= {\sum}_{e \in x_{0}}^{e.pulzus<100} \space 1 \land min = MIN_{e\in \red{<e'>\oplus x'}} (e.pulzus)\))

Soronkénti olvasás

Egymásba ágyazott algoritmus minták

Ha érdekes a téma, érdemes a diákat megnézni (nem ad új ismeretanyagot)