<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>http://www.kiwiki.info/index.php?action=history&amp;feed=atom&amp;title=Bin%C3%A1rny_strom_-_Morseova_abeceda_%28rie%C5%A1en%C3%A9_pr%C3%ADklady%29</id>
	<title>Binárny strom - Morseova abeceda (riešené príklady) - História úprav</title>
	<link rel="self" type="application/atom+xml" href="http://www.kiwiki.info/index.php?action=history&amp;feed=atom&amp;title=Bin%C3%A1rny_strom_-_Morseova_abeceda_%28rie%C5%A1en%C3%A9_pr%C3%ADklady%29"/>
	<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Morseova_abeceda_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;action=history"/>
	<updated>2026-05-03T16:30:17Z</updated>
	<subtitle>História úprav pre túto stránku na wiki</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Morseova_abeceda_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=6681&amp;oldid=prev</id>
		<title>Juraj na 20:30, 16. august 2010</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Morseova_abeceda_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=6681&amp;oldid=prev"/>
		<updated>2010-08-16T20:30:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sk&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Staršia verzia&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Verzia zo dňa a času 20:30, 16. august 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Riadok 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Riadok 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategória:Študijné materiály]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategória:Programovanie]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategória:jazyk C]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Draft}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Draft}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Skripta programovanie (zbierka úloh)}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Skripta programovanie (zbierka úloh)}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Juraj</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Morseova_abeceda_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=2981&amp;oldid=prev</id>
		<title>Juraj: Vytvorená stránka „Kategória:Študijné materiály Kategória:Programovanie Kategória:jazyk C {{Draft}} {{Skripta programovanie (zbierka úloh)}}  ==Zadanie&lt;ref&gt;http://cec.truni…“</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Morseova_abeceda_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=2981&amp;oldid=prev"/>
		<updated>2010-03-28T18:27:06Z</updated>

		<summary type="html">&lt;p&gt;Vytvorená stránka „&lt;a href=&quot;/index.php/Kateg%C3%B3ria:%C5%A0tudijn%C3%A9_materi%C3%A1ly&quot; title=&quot;Kategória:Študijné materiály&quot;&gt;Kategória:Študijné materiály&lt;/a&gt; &lt;a href=&quot;/index.php/Kateg%C3%B3ria:Programovanie&quot; title=&quot;Kategória:Programovanie&quot;&gt;Kategória:Programovanie&lt;/a&gt; &lt;a href=&quot;/index.php/Kateg%C3%B3ria:Jazyk_C&quot; title=&quot;Kategória:Jazyk C&quot;&gt;Kategória:jazyk C&lt;/a&gt; {{Draft}} {{Skripta programovanie (zbierka úloh)}}  ==Zadanie&amp;lt;ref&amp;gt;http://cec.truni…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategória:Študijné materiály]]&lt;br /&gt;
[[Kategória:Programovanie]]&lt;br /&gt;
[[Kategória:jazyk C]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
{{Skripta programovanie (zbierka úloh)}}&lt;br /&gt;
&lt;br /&gt;
==Zadanie&amp;lt;ref&amp;gt;http://cec.truni.sk/stoffov/dynamicke-udajove-struktury/Cast2/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
Vytvorte program na dekódovanie správy napísanej v Morseovej abecede. Správu prečítajte z textového súboru.&lt;br /&gt;
==Analýza úlohy==&lt;br /&gt;
Pri dekódovaní využijeme binárny vyhľadávací strom. V jeho vrcholoch budú uložené jednotlivé písmená abecedy, v koreni je ako špeciálny znak medzera. Pre potreby tohto príkladu si upravíme dátovú štruktúru binárny strom nasledovne&lt;br /&gt;
*dátová časť bude jeden znak (znak kódovanej abecedy)&lt;br /&gt;
*smerníky ''lavy'' a ''pravy'' nahradíme smerníkmi ''bodka'' a ''ciarka''. Smerníky majú i naďalej význam ľavého a pravého potomka, ale pre ľahšiu orientáciu v kódovacom strome si ich premenujeme.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct TUzol{&lt;br /&gt;
       char  znak;&lt;br /&gt;
       TUzol *bodka, *ciarka;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Zo súboru čítame postupnosti bodiek a čiarok. Znak bodka znamená presun ukazovateľa na ľavý podstrom, znak čiarka na pravý podstrom.&lt;br /&gt;
[[Súbor:morse_bin_strom.gif|framed|center|Bnárny strom reprezentujúci kódovanie morseovej abecedy]]&lt;br /&gt;
===Dekódovanie Morseovej abecedy===&lt;br /&gt;
Ak prečítame zo súboru kód '''--..''' pôjdeme z koreňa vpravo, vpravo, vľavo, vľavo. Skončíme vo vrchole s písmenom '''z'''. Takýmto spôsobom pre každý prečítaný kód nájdeme rýchlo zodpovedajúce písmeno. Princíp dekódovanie je v nasledujúcom pseudokóde:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure dekoduj(TUzol strom)&lt;br /&gt;
begin&lt;br /&gt;
   p - pomocný prvok TUzol&lt;br /&gt;
   c - premenná typu znak&lt;br /&gt;
   p = strom // p je pomocná premenná s ktorou prechádzame strom&lt;br /&gt;
   pokiaľ sa zo súboru načítal znak (do premennej c)&lt;br /&gt;
   begin&lt;br /&gt;
      ak je c znak '.'&lt;br /&gt;
        tak  p=p-&amp;gt;bodka // presunieme sa na ľavý podstrom&lt;br /&gt;
      inak&lt;br /&gt;
         ak je c znak '-'&lt;br /&gt;
           tak  p=p-&amp;gt;ciarka // presunieme sa na pravý podstrom&lt;br /&gt;
         inak // načátali sme oddeľovací znak&lt;br /&gt;
         begin&lt;br /&gt;
            vypíš hodnotu uzla p&lt;br /&gt;
            p=strom //v ďalšom cykle budeme dekódovať ďalší znaka  musíme začať od koreňa stromu&lt;br /&gt;
         end&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Pred čítaním kódu ďalšieho písmena nastavíme ukazovateľ opäť na koreň stromu!&lt;br /&gt;
&lt;br /&gt;
Pre jednoduchosť budeme predpokladať, že na vstupe je správa v dohodnutom formáte - za kódom písmena ako oddeľovač nasleduje vždy znak /, za každým slovom aspoň dva znaky //.&lt;br /&gt;
&lt;br /&gt;
Vytvorený program má tri časti - vytvorenie dekódovacieho stromu, otvorenie súboru pre čítanie a postupné dekódovanie správy.&lt;br /&gt;
==Vzorový príklad==&lt;br /&gt;
===Vzorový vstup===&lt;br /&gt;
 -../-.--/-./.-/--/../-.-./-.-/.//.../-/.-./..-/-.-/-/..-/.-./-.--/&lt;br /&gt;
===Vzorový výstup===&lt;br /&gt;
 dynamicke struktury&lt;br /&gt;
==Riešenie v jazyku C==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fstream.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct TUzol{&lt;br /&gt;
       char  znak;&lt;br /&gt;
       TUzol *bodka, *ciarka;&lt;br /&gt;
};&lt;br /&gt;
//------------------------------------------------------------------------------&lt;br /&gt;
TUzol *vytvor(char z, TUzol *b, TUzol *c)&lt;br /&gt;
{&lt;br /&gt;
  TUzol *novy = new TUzol;&lt;br /&gt;
  &lt;br /&gt;
  novy-&amp;gt;znak = z;&lt;br /&gt;
  novy-&amp;gt;bodka  = b;&lt;br /&gt;
  novy-&amp;gt;ciarka = c;&lt;br /&gt;
  return(novy);&lt;br /&gt;
}&lt;br /&gt;
//------------------------------------------------------------------------------&lt;br /&gt;
void dekoduj(TUzol *strom)&lt;br /&gt;
{&lt;br /&gt;
   ifstream fr;&lt;br /&gt;
   fr.open(&amp;quot;sprava.txt&amp;quot;);&lt;br /&gt;
      &lt;br /&gt;
   TUzol *p;&lt;br /&gt;
   char c;&lt;br /&gt;
   p = strom;&lt;br /&gt;
&lt;br /&gt;
   while (fr&amp;gt;&amp;gt;c ) &lt;br /&gt;
   {&lt;br /&gt;
     if (c == '.') &lt;br /&gt;
        p = p-&amp;gt;bodka;&lt;br /&gt;
     else &lt;br /&gt;
        if (c == '-') &lt;br /&gt;
           p = p-&amp;gt;ciarka;&lt;br /&gt;
        else &lt;br /&gt;
        {&lt;br /&gt;
          cout&amp;lt;&amp;lt;p-&amp;gt;znak;&lt;br /&gt;
          p = strom;&lt;br /&gt;
        }&lt;br /&gt;
  }&lt;br /&gt;
  fr.close();&lt;br /&gt;
}&lt;br /&gt;
//------------------------------------------------------------------------------&lt;br /&gt;
void vypis(TUzol *v) &lt;br /&gt;
{&lt;br /&gt;
   if (v != NULL) {&lt;br /&gt;
     vypis(v-&amp;gt;bodka);&lt;br /&gt;
     cout&amp;lt;&amp;lt;v-&amp;gt;znak;&lt;br /&gt;
     vypis(v-&amp;gt;ciarka);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
//------------------------------------------------------------------------------&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  TUzol *strom = NULL;&lt;br /&gt;
  &lt;br /&gt;
  /* vytvorenie dekódovacieho stromu */&lt;br /&gt;
  strom = vytvor(' ',&lt;br /&gt;
           vytvor('e',&lt;br /&gt;
             vytvor('i',&lt;br /&gt;
               vytvor('s', vytvor('h', NULL, NULL), vytvor('v', NULL, NULL)),&lt;br /&gt;
               vytvor('u', vytvor('f', NULL, NULL), NULL)),&lt;br /&gt;
             vytvor('a',&lt;br /&gt;
               vytvor('r', vytvor('l', NULL, NULL), NULL),&lt;br /&gt;
               vytvor('w', vytvor('p', NULL, NULL), vytvor('j', NULL, NULL)))),&lt;br /&gt;
           vytvor('t',&lt;br /&gt;
             vytvor('n',&lt;br /&gt;
               vytvor('d', vytvor('b', NULL, NULL), vytvor('x', NULL, NULL)),&lt;br /&gt;
               vytvor('k', vytvor('c', NULL, NULL), vytvor('y', NULL, NULL))),&lt;br /&gt;
             vytvor('m',&lt;br /&gt;
                vytvor('g', vytvor('z', NULL, NULL), vytvor('q', NULL, NULL)),&lt;br /&gt;
                vytvor('o', NULL, NULL))));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 cout&amp;lt;&amp;lt;&amp;quot;Sprava: &amp;quot;;&lt;br /&gt;
 dekoduj(strom);&lt;br /&gt;
 return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Vysvetlenie zdrojového kódu===&lt;br /&gt;
====Hlavný program main====&lt;br /&gt;
Ako prvé je potrebné vytvoriť binárny strom (riadok 56). Ďalší krok je vytvoriť kódovací strom Morseovej abecedy ako je na obrázku. Na to použijeme funkciu vytvor. Zaujímavý je spôsob jej použitia. Funkcia vytvor má 3 parametre: znak, ktorý predstavuje dekódovanú postupnosť bodiek a čiarok. Ďalej sú to dva smerníky na potomkov aktuálneho uzla. Ľavý potomok (bodka) a pravý potomok (ciarka).&lt;br /&gt;
&lt;br /&gt;
Na riadku 59 je prvý krát použitá funkcia ''vytvor''. Pri tomto volaní vytvárame koreň stromu. Znak obsiahnutý v koreni je medzera. (' '). Druhým parametrom funkcie má byť uzol ktorý je ľavý potomok. Namiesto vytvorenia nového uzla a jeho následného vloženia do stromu ''strom'', opäť použijeme funkciu vytvor, pomocou ktorej vytvárame znak 'e'. Druhý parameter funkcie (pravý potomok uzla - ciarka) je znak 't' - riadok 67.&lt;br /&gt;
V nasledujúcom kóde je uvedený ekvivalentný zápis pri vytváraní stromu. V tomto príklade nebude použité vnáranie funkcie ''vytvor''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
 TUzol *strom = NULL;&lt;br /&gt;
&lt;br /&gt;
 TUzol *h = vytvor('h',NULL,NULL);&lt;br /&gt;
 TUzol *v = vytvor('v',NULL,NULL);&lt;br /&gt;
 TUzol *f = vytvor('f',NULL,NULL);&lt;br /&gt;
 TUzol *s = s=vytvor('s',h,v);&lt;br /&gt;
 TUzol *u = u=vytvor('u',f,NULL);&lt;br /&gt;
 TUzol *i = vytvor('i',s,u); &lt;br /&gt;
 &lt;br /&gt;
 TUzol *l = vytvor('j',NULL,NULL);&lt;br /&gt;
 TUzol *p = vytvor('p',NULL,NULL);&lt;br /&gt;
 TUzol *j = vytvor('j',NULL,NULL); &lt;br /&gt;
 TUzol *r = vytvor('r',l,NULL);&lt;br /&gt;
 TUzol *w = vytvor('w',p,j);&lt;br /&gt;
 TUzol *a = a=vytvor('a',r,w);&lt;br /&gt;
 TUzol *e = a=vytvor('e',i,a);&lt;br /&gt;
 &lt;br /&gt;
 TUzol *b = vytvor('b',NULL,NULL);&lt;br /&gt;
 TUzol *x = vytvor('x',NULL,NULL);&lt;br /&gt;
 TUzol *c = vytvor('c',NULL,NULL);&lt;br /&gt;
 TUzol *y = s=vytvor('y',NULL,NULL);&lt;br /&gt;
 TUzol *z = s=vytvor('z',NULL,NULL);&lt;br /&gt;
 TUzol *q = s=vytvor('q',NULL,NULL);&lt;br /&gt;
 &lt;br /&gt;
 TUzol *d = u=vytvor('d',b,x);&lt;br /&gt;
 TUzol *k = vytvor('k',c,y);   &lt;br /&gt;
 TUzol *g = vytvor('g',z,q);   &lt;br /&gt;
 TUzol *o = s=vytvor('o',NULL,NULL);&lt;br /&gt;
&lt;br /&gt;
 TUzol *m = u=vytvor('m',g,o);&lt;br /&gt;
 TUzol *n = vytvor('n',d,k);   &lt;br /&gt;
 TUzol *t = vytvor('t',n,m); &lt;br /&gt;
 &lt;br /&gt;
 strom=  vytvor(' ',e,t);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Funkcia vytvor====&lt;br /&gt;
'''Opis funkcie'''&lt;br /&gt;
Funkcia vytvorí a vráti nový uzol binárneho stromu. Hodnota časti ''znak'' nového uzla bude použitá z 1. parametra funkcie. &lt;br /&gt;
&lt;br /&gt;
'''Parametre funkcie'''&lt;br /&gt;
*z - znak, ktorý bude obsahovať nový uzol. Tento znak je zakódované písmeno v kódovacom strome Morseovej abecedy.&lt;br /&gt;
*b - smerník na ľavého potomka nového uzla. Určuje ďalší kódový znak v kódovacom strome. Ďalší znak pokračuje kódom '.' (bodka)&lt;br /&gt;
*c - smerník na pravého potomka nového uzla. Určuje ďalší kódový znak v kódovacom strome. Ďalší znak pokračuje kódom '-' (čiarka)&lt;br /&gt;
&lt;br /&gt;
Poznámka: ak má nový uzol potomkov (podľa kódovacieho stromu napríklad znak 'e' má potomkov 'i' a 'a'). Tieto uzly už musia byť vytvorené. Smerníky na tieto existujúce uzly sú v parametroch funkcie ''vytvor''.&lt;br /&gt;
&lt;br /&gt;
'''Návratová hodnota'''&lt;br /&gt;
&lt;br /&gt;
Funkcia vráti smerník na novo vytvorený uzol kódovacieho stromu Morseovej abecedy.&lt;br /&gt;
====Funkcia dekoduj====&lt;br /&gt;
Na začiatku funkcie je otvorený súbor so vstupnými údajmi. Potom nasleduje samotné dekódovanie. Princíp dekódovania bol vysvetlený v časti [[#Dekódovanie Morseovej abecedy|Dekódovanie Morseovej abecedy]]&lt;br /&gt;
==Odkazy==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
* http://en.wikipedia.org/wiki/Morse_code&lt;/div&gt;</summary>
		<author><name>Juraj</name></author>
		
	</entry>
</feed>