27.Prednaska/Cvicenie: Rozdiel medzi revíziami

Z Pascal
Prejsť na: navigácia, hľadanie
 
(One intermediate revision by the same user 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 ===
 +
 +
 +
1. pre spájaný zoznam
 +
{{Prog}}
 +
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
 +
{{Prog}}
 +
4 -> 5 -> 6 -> 7 -> 8 -> nil
 +
|}
 +
:vyrobí zoznam
 +
{{Prog}}
 +
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.
 
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.
Riadok 11: Riadok 112:
 
  pes dog
 
  pes dog
 
  macka cat
 
  macka cat
  ...  
+
  ...
 
|}
 
|}
* trieda '''TSlovnik''' je spájaným zoznamom, ktorý bude mať vrcholy utriedené podľa anglických slovíčok, napr.  
+
* trieda '''TSlovnik''' je spájaným zoznamom, ktorý bude mať vrcholy utriedené podľa anglických slovíčok, napr.
 
{{Prog}}
 
{{Prog}}
 
  TVrchol = class
 
  TVrchol = class

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;