Kezdőoldal » Számítástechnika » Programozás » Hogyan oldható meg Pascalban?

Hogyan oldható meg Pascalban?

Figyelt kérdés

É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 ... :-)


2011. szept. 22. 11:11
 1/7 anonim ***** válasza:
100%

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.

2011. szept. 22. 11:34
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

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;

2011. szept. 22. 12:23
 3/7 anonim ***** válasza:

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.

2011. szept. 22. 14:11
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:

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.

2011. szept. 22. 15:36
 5/7 anonim ***** válasza:

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.

2011. szept. 23. 21:25
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
nem többől --> nem tömbből
2011. szept. 23. 21:25
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

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.)

2011. szept. 23. 21:34
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!