Hogyan oldható meg Pascalban?
Érettségi emelt szint.
Írja ki a képernyőre, hogy melyik a leghosszabb szó a szoveg.txt állományban, és
az hány karakterből áll! Ha több azonos leghosszabb hosszúságú szó is van a szógyűjte-ményben, akkor azok közül elegendő egyetlen szót kiírnia. A feladatot úgy oldja meg,
hogy tetszőleges hosszúságú szövegállomány esetén működjön, azaz a teljes szöveget ne
tárolja a memóriában!
Nem értem hogy hogyan akarja azt hogy ne tároljam az egész szöveget a memóriában.
Mutatókkal gondolja ?
Nem a forráskód kell csak, az elmélet ... :-)
Nagyon rég volt dolgom Pascal programozással, ezért csak egy kis elméletet írok.
Ha jól gondolom, akkor a a memóriában történő tárolásnál arról van szó, hogy ne tárold el a teljes tartalmát a fájlnak változóban. Hanem lépkedj végig szavanként. Vagyis eltárolod az első szót és megnézed a hosszát, utána megnézed, hogy a második szó hosszabb-e, mint az előző, ha igen akkor lecseréled az előzőre, és így lépkedsz sorba, amíg az összes szót meg nem vizsgáltad.
Így csak két változód lesz. Az egyikben tárolod az eddigi leghosszabb szót, másikban pedig az aktuális szót, aminek hosszát össze kell hasonlítani az eddigi leghosszabb szó szóval. Így a két változód értéke minden esetben csak egy-egy szó lehet.
Igen én is így csináltam, tehát akkor ez a függvény jó kell legyen.Gondolom arra gondolt hogy ne tároljam el az egész beolvasott állományt egy tömbben.
FUNCTION leghosszabbszo(szovegfajl:string) :string;
var the_biggest_word:string;
BEGIN
new(p);
the_biggest_word := '';
ASSIGN(p^.f,szovegfajl);
{$I-}
reset(p^.f);
{$I+}
if IOResult <> 0 then begin
writeln('Nincs ilyen llom ny!');
readln;
halt;
end;
while not eof(p^.f) do
begin
readln(p^.f,p^.wordd);
if(length(p^.wordd) >= length(the_biggest_word)) then
the_biggest_word := p^.wordd;
end;
leghosszabbszo := the_biggest_word;
dispose(p); {Minden mem˘ria felszabadit sa}
END;
12:23
Jó, biztos azt csinálja amit kell, elfogadnák érettségin is. De minek pointer-ekkel, dinamikus memóriafoglalással szórakozni? Minek ilyen rekordot csinálni? Semmi szükség rá.
A the_biggest_word lokális változó mellé felvehettél volna egy f text változót meg egy wordd string típusú változót. A külvilágnak semmi köze hozzá ezért lokális változóknak kell lenni. Ilyen kis programnál nem számít, de van hogy mégis. Nagyobb programnál annál inkább, nagymértékben nehezíti az átláthatóságot, belátni a programhelyességet, hibalehetőség forrása stb.
Ezt kizárólag csak jóstanácsként írtam.
Tudom.
Ez csak egy függvény. A feladat több részből áll, a program sokkal hosszabb és mindenhol ezt használom így nem kell annyi változót deklarálni a program elején ;-)
Meg már így szoktam meg, de a lényeget megcsinálja.
Hú, de agyon van bonyolítva! A feladat egyszerűen egy mezei maximumkiválasztási tétel, csak nem többől, hanem állományból. Magyarul nem előbb beolvasni kell és utána kiválasztani a maximumot, hanem beolvasni soronként, és röptében összehasonlítani a beolvasott sort az eddig tárolt maximummal, és szükség esetén eltárolni a régi helyére. Ennyi az egész, semmi varázslat vagy bonyodalom. Mutatókba aztán tényleg nem érdemes belemenni az érettségin, annyi idő nincs!
Egy jó tanács: az oh.gov.hu-n minden érettségi feladathoz van valamilyen nyelvű mintamegoldás. (Nem írtad az évszámot, azzal okosabb lennék.) Ha szerencséd van, akkor pont Pascal, ha meg nem, akkor is el tudod olvasni és megérteni az algoritmus lényegére vonatkozó kérdéseket.
Még egy tanács:
if IOResult <> 0 then begin
writeln('Nincs ilyen llom ny!');
Ezek szép és fontos dolgok a programozásban, de érettségin nem elvárás, nem adnak érte pontot, ne töltsd vele az idődet. Általában ha azt mondják az érettségin, hogy van ez a file és ilyen és ilyen adatok vannak benne, akkor ezt kész ténynek lehet venni, nem kell ellenőrizni. (Nem azért, mert nem fontos, hanem mert 4 órában egy csomó feladatot kell megoldani, és arra kíváncsiak, hogy a lényeget tudod-e programozásból.)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!