27.Prednaska/Cvicenie: Rozdiel medzi revíziami

Z Pascal
Prejsť na: navigácia, hľadanie
 
(2 intermediate revisions by 2 users not shown)
Riadok 2: Riadok 2:
 
[[27.Prednaska|< 27.Prednáška]] | [[27.Prednaska/Ulohy|riešené úlohy]]
 
[[27.Prednaska|< 27.Prednáška]] | [[27.Prednaska/Ulohy|riešené úlohy]]
  
...
 
  
=== Domáca úloha ===
+
 
 +
=== Rozcvička ===
  
  
Riadok 23: Riadok 23:
 
{{Prog}}
 
{{Prog}}
 
  4 -> 0 -> 5 -> 6 -> 0 -> 7 -> 8 -> 0 -> nil
 
  4 -> 0 -> 5 -> 6 -> 0 -> 7 -> 8 -> 0 -> nil
 +
|}
 +
 +
 +
 +
=== Cvičenie ===
 +
 +
 +
* definovať vrchol ako objekt - pracujeme s triedou '''TVrchol''' - definujeme v '''Unit1.pas'''
 +
:plus metódu '''Text''', ktorá hodnotu vo vrchole vráti ako string
 +
TVrchol = class
 +
  Info: Integer;
 +
  Next: TVrchol;
 +
  constructor Create(I: Integer; N: TVrchol);
 +
  function Text: string;
 +
end;
 +
 +
* definovať triedu '''TZoznam''' (v Unit1.pas) okrem '''Z''' a '''K''' aj metódu '''PridajZ''' - pridá vrchol na začiatok
 +
TZoznam = class
 +
  Z, K: TVrchol;
 +
  procedure PridajZ(I: Integer);
 +
end;
 +
 +
* definovať metódu '''Vypis'''. Pozor na to, aby sa celý zoznam popri výpise nevymazal
 +
 +
* metóda '''TZoznam.PridajK''' - pridá vrchol na koniec zoznamu(aby sme predišli chybám, je dobre si situáciu nakresliť)
 +
 +
* metóda '''TZoznam.VyhodZ''' - vyhodí prvý vrchol zoznamu. Znova pozor na špeciálne prípady
 +
 +
* deštruktor '''Dispose''' (aj pomocou '''VyhodZ''')
 +
 +
* trieda '''TZoznam''' môže mať viac konštruktorov - zatiaľ sme používali bez parametrov, ak chceme aj s parametrom (a aby fungoval aj bez parametrov) musíme zadefinovať oba
 +
class TZoznam
 +
  constructor Create;
 +
  constructor Create(N: Integer);    ''// vytvorí zoznam čísel 1 -> 2 -> ... N ->''
 +
  ...
 +
 +
* ak chceme to otestovať pre veľké '''N''' - aby mal zmysel výpis metódou '''Vypis''' aj pre veľké N (napr. 1000000), upravíme túto metódu - výpis maximálne prvých 100 prvkov (ak pridlhý zoznam, tak len prvých 100)
 +
 +
* metóda '''Pocet''', ktorá zistí počet prvkov zoznamu
 +
 +
* konštruktor s parametrom otvoreným poľom
 +
constructor TZoznam.Create(A: array of Integer);
 +
var
 +
  I: Integer;
 +
begin
 +
  for I := 0 to High(A) do
 +
    PridajK(A[I]);
 +
end;
 +
 +
: iná možnosť napísať for-cyklus
 +
constructor TZoznam.Create(A: array of Integer);
 +
var
 +
  I: Integer;
 +
begin
 +
  for I in A do
 +
    PridajK(I);
 +
end;
 +
 +
* konštruktor, ktorý dostáva iný zoznam ako parameter a vytvorí kópiu tohto zoznamu
 +
 +
* procedúra '''Append''' - pripojí iný zoznam na koniec svojho - robí pritom kópiu prvkov
 +
 +
* druhá - rýchlejšia verzia procedury '''Append''' - nerobí kópi prvkov, ale priamo si ho pripojí - iný zoznam pri tom zruší
 +
 +
 +
{{Podnadpis|ďalšie námety}}
 +
 +
 +
* ďalšie konštruktory: textový/binárny súbor, reťazec s číslami oddelenými medzerami, iný zoznam v opačnom poradí prvkov
 +
* deštruktor uloží zoznam do súboru
 +
* funkcia '''VyrobPole''' vráti dynamické pole z hodnôt zoznamu
 +
* udržiavať zoznam utriedený - pridávať na správne miesto (za menší pred väčší)
 +
* minimálny prvok presťahuje na začiatok
 +
* '''VyhodK''' - vyhodí posledný prvok
 +
* '''VyhodIty(Index: Integer)''' - vyhodí prvok s indexom '''Index'''
 +
* '''Vyhod(I: Integer)''' - vyhodí prvok s daným Info
 +
* '''Prevrat''' - prevráti poradie prvkov v zozname
 +
* '''Najdi(I: Integer): Integer''' - zistí index
 +
* procedurálny typ ...
 +
* metódy dvojsmerného spájaného zoznamu
 +
* metódy cyklického spájaného zoznamu
 +
 +
 +
=== Domáca úloha ===
 +
 +
1. Vytvorte triedu '''TSlovnik''', ktorá do spájaného zoznamu načíta zo súboru (napr. '''slovnik.txt''') zoznam dvojíc slov (slovenské anglické), napr.
 +
{{Prog}}
 +
pes dog
 +
macka cat
 +
...
 +
|}
 +
* trieda '''TSlovnik''' je spájaným zoznamom, ktorý bude mať vrcholy utriedené podľa anglických slovíčok, napr.
 +
{{Prog}}
 +
TVrchol = class
 +
  Slov, Angl: string;
 +
  Next: TVrchol;
 +
  ...
 +
end;
 +
&nbsp;
 +
TSlovnik = class
 +
  Z: Tvrchol;
 +
  constructor Create(Subor: string);
 +
  procedure Vloz(S, A: string);    ''// vloží do zoznamu na správne miesto ďalšiu dvojicu slov''
 +
  ...
 +
end;
 
|}
 
|}

Aktuálna revízia z 22:47, 7. marec 2013

27. Cvičenie


< 27.Prednáška | riešené úlohy


Rozcvička

1. pre spájaný zoznam

type
  PVrchol = ^TVrchol;
  TVrchol = record
    Info: Integer;
    Next: PVrchol;
  end;
  • napísať procedúru Urob(Z: PVrchol), ktorá za každý vrchol s párnou hodnotou vloží nový vrchol s nulovou hodnotou, napr. zo zoznamu
4 -> 5 -> 6 -> 7 -> 8 -> nil
vyrobí zoznam
4 -> 0 -> 5 -> 6 -> 0 -> 7 -> 8 -> 0 -> nil


Cvičenie

  • definovať vrchol ako objekt - pracujeme s triedou TVrchol - definujeme v Unit1.pas
plus metódu Text, ktorá hodnotu vo vrchole vráti ako string
TVrchol = class
  Info: Integer;
  Next: TVrchol;
  constructor Create(I: Integer; N: TVrchol);
  function Text: string;
end;
  • definovať triedu TZoznam (v Unit1.pas) okrem Z a K aj metódu PridajZ - pridá vrchol na začiatok
TZoznam = class
  Z, K: TVrchol;
  procedure PridajZ(I: Integer);
end;
  • definovať metódu Vypis. Pozor na to, aby sa celý zoznam popri výpise nevymazal
  • metóda TZoznam.PridajK - pridá vrchol na koniec zoznamu(aby sme predišli chybám, je dobre si situáciu nakresliť)
  • metóda TZoznam.VyhodZ - vyhodí prvý vrchol zoznamu. Znova pozor na špeciálne prípady
  • deštruktor Dispose (aj pomocou VyhodZ)
  • trieda TZoznam môže mať viac konštruktorov - zatiaľ sme používali bez parametrov, ak chceme aj s parametrom (a aby fungoval aj bez parametrov) musíme zadefinovať oba
class TZoznam
  constructor Create;
  constructor Create(N: Integer);     // vytvorí zoznam čísel 1 -> 2 -> ... N ->
  ...
  • ak chceme to otestovať pre veľké N - aby mal zmysel výpis metódou Vypis aj pre veľké N (napr. 1000000), upravíme túto metódu - výpis maximálne prvých 100 prvkov (ak pridlhý zoznam, tak len prvých 100)
  • metóda Pocet, ktorá zistí počet prvkov zoznamu
  • konštruktor s parametrom otvoreným poľom
constructor TZoznam.Create(A: array of Integer);
var
  I: Integer;
begin
  for I := 0 to High(A) do
    PridajK(A[I]);
end;
iná možnosť napísať for-cyklus
constructor TZoznam.Create(A: array of Integer);
var
  I: Integer;
begin
  for I in A do
    PridajK(I);
end;
  • konštruktor, ktorý dostáva iný zoznam ako parameter a vytvorí kópiu tohto zoznamu
  • procedúra Append - pripojí iný zoznam na koniec svojho - robí pritom kópiu prvkov
  • druhá - rýchlejšia verzia procedury Append - nerobí kópi prvkov, ale priamo si ho pripojí - iný zoznam pri tom zruší



ďalšie námety



  • ďalšie konštruktory: textový/binárny súbor, reťazec s číslami oddelenými medzerami, iný zoznam v opačnom poradí prvkov
  • deštruktor uloží zoznam do súboru
  • funkcia VyrobPole vráti dynamické pole z hodnôt zoznamu
  • udržiavať zoznam utriedený - pridávať na správne miesto (za menší pred väčší)
  • minimálny prvok presťahuje na začiatok
  • VyhodK - vyhodí posledný prvok
  • VyhodIty(Index: Integer) - vyhodí prvok s indexom Index
  • Vyhod(I: Integer) - vyhodí prvok s daným Info
  • Prevrat - prevráti poradie prvkov v zozname
  • Najdi(I: Integer): Integer - zistí index
  • procedurálny typ ...
  • metódy dvojsmerného spájaného zoznamu
  • metódy cyklického spájaného zoznamu


Domáca úloha

1. Vytvorte triedu TSlovnik, ktorá do spájaného zoznamu načíta zo súboru (napr. slovnik.txt) zoznam dvojíc slov (slovenské anglické), napr.

pes dog
macka cat
...
  • trieda TSlovnik je spájaným zoznamom, ktorý bude mať vrcholy utriedené podľa anglických slovíčok, napr.
TVrchol = class
  Slov, Angl: string;
  Next: TVrchol;
  ...
end;
 
TSlovnik = class
  Z: Tvrchol;
  constructor Create(Subor: string);
  procedure Vloz(S, A: string);     // vloží do zoznamu na správne miesto ďalšiu dvojicu slov
  ...
end;