<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>http://www.kiwiki.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Amonatrix</id>
	<title>Kiwiki - Príspevky používateľa [sk]</title>
	<link rel="self" type="application/atom+xml" href="http://www.kiwiki.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Amonatrix"/>
	<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php/%C5%A0peci%C3%A1lne:Pr%C3%ADspevky/Amonatrix"/>
	<updated>2026-04-16T12:23:47Z</updated>
	<subtitle>Príspevky používateľa</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=4611</id>
		<title>Algoritmy numerickej aproximácie (riešené príklady)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=4611"/>
		<updated>2010-05-27T09:43:48Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: /* Modifikácia zdrojového kódu */&lt;/p&gt;
&lt;hr /&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 1==&lt;br /&gt;
Riešte problém aproximácie dát. K dispozícii máme ''n'' bodov v rovine (ich súradnice ''x'' a ''y''). Úlohou bude vypočítať rovnicu aproximujúcej krivky metódou najmenších štvorcov pre:&lt;br /&gt;
#Lineárnu aproximáciu v tvare &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Logaritmickú aproximáciu v tvare &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Exponenciálnu aproximáciu v tvare &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Mocninovú aproximáciu v tvare &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Porovnajte výsledok funkcie s výsledkom v tabuľkovom procesore, kde do (bodového) grafu zo vstupných bodov pridáte spojnicu trendu typu lineárna, resp. logaritmická, mocninová exponenciálna.&lt;br /&gt;
&lt;br /&gt;
===Vstupné údaje===&lt;br /&gt;
Ako vzorku vstupných bodov budeme uvažovať body z intervalu &amp;lt;1,8&amp;gt;.&lt;br /&gt;
''Pre generovanie vstupných hodnôt použijem funkciu &amp;lt;math&amp;gt;f(x)=x^4-exp(x)&amp;lt;/math&amp;gt;''&lt;br /&gt;
====Vzorový vstup====&lt;br /&gt;
{| class=datatable&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
!&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.50&lt;br /&gt;
|0.58&lt;br /&gt;
|-&lt;br /&gt;
|2.00&lt;br /&gt;
|8.61&lt;br /&gt;
|-&lt;br /&gt;
|3.00&lt;br /&gt;
|60.91&lt;br /&gt;
|-&lt;br /&gt;
|4.00&lt;br /&gt;
|201.40&lt;br /&gt;
|-&lt;br /&gt;
|5.00&lt;br /&gt;
|476.59&lt;br /&gt;
|-&lt;br /&gt;
|6.00&lt;br /&gt;
|892.57&lt;br /&gt;
|-&lt;br /&gt;
|7.00&lt;br /&gt;
|1304.37&lt;br /&gt;
|-&lt;br /&gt;
|8.00&lt;br /&gt;
|1115.04&lt;br /&gt;
|}&lt;br /&gt;
====Vzorový výstup====&lt;br /&gt;
#y = 213.634 x - 467.195&lt;br /&gt;
#y = 784.982 ln x - 572.83&lt;br /&gt;
#y = 0.9628 e^(1.054x)&lt;br /&gt;
#y = 0.2609 x^(4.443)&lt;br /&gt;
&lt;br /&gt;
===Analýza matematických vzťahov===&lt;br /&gt;
Poznámka: v tomto texte nie sú uvádzané celé postupy výpočtu, nakoľko v tomto predmete nie sú primárnym cieľom matematické dôkazy. Študent si postup môže ľahko overiť sám.&lt;br /&gt;
&lt;br /&gt;
====Lineárna aproximácia: y=ax+b====&lt;br /&gt;
Pre lineárnu aproximáciu platia vzťahy:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; b\sum\limits_{i=1}^{n}{{{x}_{i}}}+a\sum\limits_{i=1}^{n}{{{x}^{2}}_{i}}=\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}} \\ &lt;br /&gt;
 &amp;amp; nb+a\sum\limits_{i=1}^{n}{{{x}_{i}}}=\sum\limits_{i=1}^{n}{{{y}_{i}}} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čo môžeme pomocou maticového zápisu zapísať nasledovne:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Logaritmická  aproximácia: &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;====&lt;br /&gt;
Hľadáme najlepšiu aproximáciu pre logaritmickú rovnicu:  &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;. Postup výpočtu je rovnaký ako v prvom prípade.&lt;br /&gt;
Jediná zmena v riešení je tá, že os x je v logaritmickej mierke. Dostávame teda sústavu 2 rovníc:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}} &amp;amp; \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exponenciálna  aproximácia: &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt; si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{e}^{ax}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{e}^{ax}} \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+\ln b\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+B \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opäť dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Mocnimová  aproximácia: &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;  si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{x}^{a}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{x}^{a}} \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+a\ln x\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=B+a\ln x \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}^{2}} &amp;amp; \sum\limits_{i=1}^{n}{\ln {{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešením je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Analýza programátorského riešenia===&lt;br /&gt;
====Návrh dátových štruktúr====&lt;br /&gt;
V úlohe budeme pracovať s bodmi v rovine, ktoré sú charakterizované x a y súradnicou. Preto si vytvoríme štruktúru Bod, ktorá bude takýto bod reprezentovať:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
V zadaní je úlohou vypočítať rovnicu najlepšie aproximujúcej krivky (lineárnej, logaritmickej, exponenciálnej alebo mocninovej). Tieto krivky sú charakterizované (okrem svojej matematickej funkcie, ktorú vyjadríme neskôr) koeficientami ''a'' a ''b''. Na to, aby sme rozlíšili o akú krivku ide, vytvorme si vymenovaný zoznam TYP_KRIVKY, ktorý bude ma 4 symbolické hodnoty:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Význam týchto skratiek si zadefinujme nasledovne:&lt;br /&gt;
*LIN - lineárna krivka (polynóm 1 stupňa) s rovnicou &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
*LOG - logaritmická krivka s rovnicou &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
*EXP - exponenciálna krivka s rovnicou &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
*MOC - mocninová krivka s rovnicou &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
Teraz si môžeme zadefinovať štruktúru Krivka ako trojicu: ''typ'' (TYP_KRIVKY), koeficient ''a''  a koeficient ''b''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Vytvoríme funkciu ''Krivka minSq(Bod *body, int n)'' kde v poli body sú vstupné údaje, n je počet bodov. Funkcia bude vracať dátovú struktúru typu Krivka, kde budú informácie o tvare aproximujúcej krivky.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq_lin(Bod *body, int n)&lt;br /&gt;
{  // y=a+bx&lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
    k.b=(sy-k.a*sx)/n;&lt;br /&gt;
    k.typ=LIN;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podobným spôsobom môžeme vytvoriť ďalšie 3 funkcie minSq_log, minSq_exp minSq_moc. Ukážeme si ale všeobecnejší tvar funkcie minSq, kde pridáme ďalší parameter, ktorý bude hovoriť aký typ aproximácie sa má vypočítať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
{  &lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0,slxly;&lt;br /&gt;
   double slx=0,slxx=0,sly=0,slxy=0,sxly=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         slx+=log(body[i].x);&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sly+=log(body[i].y);&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         slxy+=log(body[i].x) * body[i].y;&lt;br /&gt;
         sxly+=body[i].x * log(body[i].y);&lt;br /&gt;
         slxly+=log(body[i].x) *log(body[i].y);&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
         slxx+=log(body[i].x) * log(body[i].x);&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    switch(typ_proximacie)&lt;br /&gt;
    {&lt;br /&gt;
      case LIN:&lt;br /&gt;
          k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sy-k.a*sx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
          k.a=(n*slxy-sy*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sy-k.a*slx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
          k.a=(n*sxly-sly*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sly-k.a*sx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
          k.a=(n*slxly-sly*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sly-k.a*slx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
    }&lt;br /&gt;
    k.typ=typ_proximacie;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Použitie v programe====&lt;br /&gt;
Pre názornosť nebudeme v programe dáta načítavať z klávesnice, ale vstupné údaje budú zadané priamo v zdrojovom kóde. Modifikácia zdrojového kódu s načítaním vstupných hodnôt je jednoduchá a určite ju každý zvládne sám.&lt;br /&gt;
&lt;br /&gt;
V zdrojovom kóde pribudla ešte funkcia ''vypisRovnicuKrivky'', ktorá vypíše rovnicu krivky v čitateľnom tvare pre človeka. Vo výpise sú vynechané všetky funkcie, ktoré sú boli v tomto príklade vysvetlené a ich zdrojový kód bol napísaný skôr.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Bod {double x,y;};&lt;br /&gt;
enum TYP_KRIVKY{ LIN, LOG, EXP, MOC};&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
&lt;br /&gt;
void vypisRovnicuKrivky(Krivka k)&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;y=&amp;quot;;   &lt;br /&gt;
   switch(k.typ)&lt;br /&gt;
   {&lt;br /&gt;
      case LIN:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; ln x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; e^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x)&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; x^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; )&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
    }     &lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{  const int n=8;&lt;br /&gt;
   Bod body[n]={&lt;br /&gt;
      {1.50,0.58},&lt;br /&gt;
      {2.00,8.61},&lt;br /&gt;
      {3.00,60.91},&lt;br /&gt;
      {4.00,201.40},&lt;br /&gt;
      {5.00,476.59},&lt;br /&gt;
      {6.00,892.57},&lt;br /&gt;
      {7.00,1304.37},&lt;br /&gt;
      {8.00,1115.04}		&lt;br /&gt;
   }; &lt;br /&gt;
  Krivka Q;&lt;br /&gt;
  Q=minSq(body,n,EXP); // LOG, LIN, EXP&lt;br /&gt;
  vypisRovnicuKrivky(Q);&lt;br /&gt;
  getch();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Overenie vypočítaných hodnôt===&lt;br /&gt;
Na nasledujúcich obrázkoch sú vstupné body z príkladu znázornené v tabuľkovom procesore a je vypočítaná najlepšia aproximujúca krivka (MS Excel ju nazýva spojnica trendu).&lt;br /&gt;
&amp;lt;gallery heights=220px widths=400px perrow=2&amp;gt;&lt;br /&gt;
Súbor:min SQ lin.png&lt;br /&gt;
Súbor:min SQ log.png&lt;br /&gt;
Súbor:min SQ exp.png&lt;br /&gt;
Súbor:min SQ moc.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie 2==&lt;br /&gt;
Vytvorte funkciu, ktorá pre zadaná vstupy vypočíta všetky typy aproximácií (lineárnu, logaritmickú, exponenciálnu a mocninovú) a určí ktorá aproximácia je optimálna pre zadané vstupné body.&lt;br /&gt;
&lt;br /&gt;
===Analýza===&lt;br /&gt;
Pri vyhodnocovaní optimálnej aproximácie musíme vypočítať všetky možné aproximačné krivky a zvoliť kritérium voľby najlepšej aproximácie. Kritériom posudzovania môže byť hľadanie minimálych hodnôt:&lt;br /&gt;
*vzdialenosť uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*štvorce vzdialeností uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*plocha medziproximujúcou krivkou a interpolačným polynómom, ktorých prechádza cez uzlové body&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Kriteriom na vyhodnotenie najlepšej aproximovanej krivky bude hľadanie minimálych hodnôt a vzdialeností uzlových (vstupných) bodov od aproximujúcej krivky.&lt;br /&gt;
&lt;br /&gt;
Definovanie štruktúr potrebných pre spracovanie súradníc:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Táto štruktúra pre zjednodušenie poslúži na uloženie všetkých typov aproximácie do jednej premennej typu Aprox:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
struct Aprox{&lt;br /&gt;
    Krivka Lin, Log, Exp, Moc;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcia aproximacie vypočíta všetky 4 typy aproximácií. Návratová hodnota funkcie je typu Aprox:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Aprox aproximacie(Bod *body, int n, Aprox B)   //vypocita vsetky&lt;br /&gt;
                                                 //aproximacie&lt;br /&gt;
{&lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0,slxly;&lt;br /&gt;
   double slx=0,slxx=0,sly=0,slxy=0,sxly=0;&lt;br /&gt;
	for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
	{    sx+=body[i].x;&lt;br /&gt;
		 slx+=log(body[i].x);&lt;br /&gt;
		 sy+=body[i].y;&lt;br /&gt;
		 sly+=log(body[i].y);&lt;br /&gt;
		 sxy+=body[i].x * body[i].y;&lt;br /&gt;
		 slxy+=log(body[i].x) * body[i].y;&lt;br /&gt;
		 sxly+=body[i].x * log(body[i].y);&lt;br /&gt;
		 slxly+=log(body[i].x) *log(body[i].y);&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
         slxx+=log(body[i].x) * log(body[i].x);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		 B.Lin.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
		 B.Lin.b=(sy-B.Lin.a*sx)/n;&lt;br /&gt;
&lt;br /&gt;
		 B.Log.a=(n*slxy-sy*slx)/(n*slxx-slx*slx);&lt;br /&gt;
		 B.Log.b=(sy-B.Log.a*slx)/n;&lt;br /&gt;
&lt;br /&gt;
		 B.Exp.a=(n*sxly-sly*sx)/(n*sxx-sx*sx);&lt;br /&gt;
		 B.Exp.b=(sly-B.Exp.a*sx)/n;&lt;br /&gt;
		 B.Exp.b=exp(B.Exp.b);&lt;br /&gt;
&lt;br /&gt;
		 B.Moc.a=(n*slxly-sly*slx)/(n*slxx-slx*slx);&lt;br /&gt;
		 B.Moc.b=(sly-B.Moc.a*slx)/n;&lt;br /&gt;
	     B.Moc.b=exp(B.Moc.b);&lt;br /&gt;
&lt;br /&gt;
    return B;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na vypísanie najvhodnejšieho typu rovnice je použitá funkcia vypisRovnicuKrivky: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
void vypisRovnicuKrivky(Krivka k)    //vypise rovnicu urciteho typu&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;y = &amp;quot;;&lt;br /&gt;
   switch(k.typ)&lt;br /&gt;
   {&lt;br /&gt;
	  case LIN:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x&amp;quot;;&lt;br /&gt;
		   if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; LINEARNA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	  case LOG:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; ln x&amp;quot;;&lt;br /&gt;
		   if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; LOGARITMICKA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	  case EXP:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; e^(&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x)&amp;quot;&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; EXPONENCIALNA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	  case MOC:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; x^(&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; )&amp;quot;&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; MOCNINOVA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pre zistenie optimálnej aproximovanej krivky pre dané vstupné body je použitý jednoduchý algoritmus daný vo funkcii zistiOptimum. &lt;br /&gt;
*Postup riešenia algoritmu spočíva v zistení vzdialenosti y-onovej súradnice vstupného bodu od aproximovanej y-onovej súradnice, ktorú musíme najskôr vypočítať, a porovnaním ako sú tieto body vzdialené od jednotlivých bodov kriviky pre každý typ, zistíme optimum.  &lt;br /&gt;
*Dosadením x-ových súradníc vstupných bodov do príslušnej rovnice krivky sa vypočíta aproximovaná y-onová súradnica.  Absolútnu hodnotu rozdielu vzdialenosti medzi y-onovými súradnicami(vypočítanými a vstupnými) sčíta a uloží túto sumu do premennej sumLin (pre každý ďalší jeden typ aproximácie do - sumLog, sumExp, sumMoc ). Toto sa opakuje pre každý jeden vstupný bod a pre každú rovnicu krivky. &lt;br /&gt;
*Na záver sa sumy všetkých typov aproximácií porovnajú. Najmenšia suma predstavuje najmenšie odchýlky pre danú krivku v porovnaní so vstupnými bodmi. Funkcia vráti Optimálnu krivku  aproximácie s najmenšou sumou:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka zistiOptimum(Bod *body, int n, Aprox B)&lt;br /&gt;
{&lt;br /&gt;
	double sumLin=0, sumLog=0, sumExp=0, sumMoc=0, 	y1=0,y2=0,y3=0,y4=0, Naj=0;&lt;br /&gt;
	Krivka Optim;&lt;br /&gt;
	for(int i=0; i &amp;lt; n; i++)&lt;br /&gt;
	{&lt;br /&gt;
		y1=((B.Lin.a*body[i].x)+B.Lin.b)-body[i].y;  &lt;br /&gt;
		if(y1&amp;lt;0) y1=-y1;&lt;br /&gt;
		  sumLin+=y1;&lt;br /&gt;
&lt;br /&gt;
		y2=((B.Log.a*(log(body[i].x)))+B.Log.b)-body[i].y;  			&lt;br /&gt;
                if(y2&amp;lt;0) y2=-y2;                           &lt;br /&gt;
		  sumLog+=y2;&lt;br /&gt;
&lt;br /&gt;
		y3=(B.Exp.b*(exp(B.Exp.a*body[i].x)));     &lt;br /&gt;
		y3=log(y3);&lt;br /&gt;
		if(y3&amp;lt;0) y3=-y3;&lt;br /&gt;
		 sumExp+=y3;&lt;br /&gt;
&lt;br /&gt;
		y4=(B.Moc.b*(pow(body[i].x, B.Moc.a)))-body[i].y;&lt;br /&gt;
		if(y4&amp;lt;0) y4=-y4;                           &lt;br /&gt;
		  sumMoc+=y4;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	Naj=min(sumLin,sumLog);&lt;br /&gt;
	Naj=min(Naj,sumExp);&lt;br /&gt;
	Naj=min(Naj,sumMoc);&lt;br /&gt;
	&lt;br /&gt;
	if(Naj==sumLin) {B.Lin.typ=LIN; return B.Lin;}&lt;br /&gt;
	if(Naj==sumLog) {B.Log.typ=LOG; return B.Log;}&lt;br /&gt;
	if(Naj==sumExp) {B.Exp.typ=EXP; return B.Exp;}&lt;br /&gt;
&lt;br /&gt;
	B.Moc.typ=MOC;&lt;br /&gt;
	return B.Moc;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modifikácia zdrojového kódu===&lt;br /&gt;
Pre názornosť nebudeme v programe dáta načítavať z klávesnice, ale vstupné údaje budú zadané priamo v zdrojovom kóde&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cmath&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
   };&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
struct Aprox{&lt;br /&gt;
	Krivka Lin, Log, Exp, Moc;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//Aprox aproximacie(Bod *body, int n, Aprox B)&lt;br /&gt;
//void vypisRovnicuKrivky(Krivka k)&lt;br /&gt;
//Krivka zistiOptimum(Bod *body, int n, Aprox B)&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
	const int n=8;&lt;br /&gt;
	Bod body[n]={&lt;br /&gt;
	  {1.50,0.58},&lt;br /&gt;
	  {2.00,8.61},&lt;br /&gt;
	  {3.00,60.91},&lt;br /&gt;
	  {4.00,201.40},&lt;br /&gt;
	  {5.00,476.59},&lt;br /&gt;
	  {6.00,892.57},&lt;br /&gt;
	  {7.00,1304.37},&lt;br /&gt;
	  {8.00,2715.04}&lt;br /&gt;
	};&lt;br /&gt;
	Aprox B;&lt;br /&gt;
        B = aproximacie(body, n, B);&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Najvhodnejsia: &amp;quot;;&lt;br /&gt;
	vypisRovnicuKrivky(zistiOptimum(body, n, B));&lt;br /&gt;
&lt;br /&gt;
    getch();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vzorový Príklad===&lt;br /&gt;
Program vypočítal, že pre uvedené vstupné body je navhodnejšia Mocninová aproximácia.&lt;br /&gt;
{| class=datatable&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
!&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.50&lt;br /&gt;
|0.58&lt;br /&gt;
|-&lt;br /&gt;
|2.00&lt;br /&gt;
|8.61&lt;br /&gt;
|-&lt;br /&gt;
|3.00&lt;br /&gt;
|60.91&lt;br /&gt;
|-&lt;br /&gt;
|4.00&lt;br /&gt;
|201.40&lt;br /&gt;
|-&lt;br /&gt;
|5.00&lt;br /&gt;
|476.59&lt;br /&gt;
|-&lt;br /&gt;
|6.00&lt;br /&gt;
|892.57&lt;br /&gt;
|-&lt;br /&gt;
|7.00&lt;br /&gt;
|1304.37&lt;br /&gt;
|-&lt;br /&gt;
|8.00&lt;br /&gt;
|2715.04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzor_graf.jpg|center|framed]]&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=4610</id>
		<title>Algoritmy numerickej aproximácie (riešené príklady)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=4610"/>
		<updated>2010-05-27T09:33:54Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: /* Modifikácia zdrojového kódu */&lt;/p&gt;
&lt;hr /&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 1==&lt;br /&gt;
Riešte problém aproximácie dát. K dispozícii máme ''n'' bodov v rovine (ich súradnice ''x'' a ''y''). Úlohou bude vypočítať rovnicu aproximujúcej krivky metódou najmenších štvorcov pre:&lt;br /&gt;
#Lineárnu aproximáciu v tvare &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Logaritmickú aproximáciu v tvare &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Exponenciálnu aproximáciu v tvare &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Mocninovú aproximáciu v tvare &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Porovnajte výsledok funkcie s výsledkom v tabuľkovom procesore, kde do (bodového) grafu zo vstupných bodov pridáte spojnicu trendu typu lineárna, resp. logaritmická, mocninová exponenciálna.&lt;br /&gt;
&lt;br /&gt;
===Vstupné údaje===&lt;br /&gt;
Ako vzorku vstupných bodov budeme uvažovať body z intervalu &amp;lt;1,8&amp;gt;.&lt;br /&gt;
''Pre generovanie vstupných hodnôt použijem funkciu &amp;lt;math&amp;gt;f(x)=x^4-exp(x)&amp;lt;/math&amp;gt;''&lt;br /&gt;
====Vzorový vstup====&lt;br /&gt;
{| class=datatable&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
!&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.50&lt;br /&gt;
|0.58&lt;br /&gt;
|-&lt;br /&gt;
|2.00&lt;br /&gt;
|8.61&lt;br /&gt;
|-&lt;br /&gt;
|3.00&lt;br /&gt;
|60.91&lt;br /&gt;
|-&lt;br /&gt;
|4.00&lt;br /&gt;
|201.40&lt;br /&gt;
|-&lt;br /&gt;
|5.00&lt;br /&gt;
|476.59&lt;br /&gt;
|-&lt;br /&gt;
|6.00&lt;br /&gt;
|892.57&lt;br /&gt;
|-&lt;br /&gt;
|7.00&lt;br /&gt;
|1304.37&lt;br /&gt;
|-&lt;br /&gt;
|8.00&lt;br /&gt;
|1115.04&lt;br /&gt;
|}&lt;br /&gt;
====Vzorový výstup====&lt;br /&gt;
#y = 213.634 x - 467.195&lt;br /&gt;
#y = 784.982 ln x - 572.83&lt;br /&gt;
#y = 0.9628 e^(1.054x)&lt;br /&gt;
#y = 0.2609 x^(4.443)&lt;br /&gt;
&lt;br /&gt;
===Analýza matematických vzťahov===&lt;br /&gt;
Poznámka: v tomto texte nie sú uvádzané celé postupy výpočtu, nakoľko v tomto predmete nie sú primárnym cieľom matematické dôkazy. Študent si postup môže ľahko overiť sám.&lt;br /&gt;
&lt;br /&gt;
====Lineárna aproximácia: y=ax+b====&lt;br /&gt;
Pre lineárnu aproximáciu platia vzťahy:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; b\sum\limits_{i=1}^{n}{{{x}_{i}}}+a\sum\limits_{i=1}^{n}{{{x}^{2}}_{i}}=\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}} \\ &lt;br /&gt;
 &amp;amp; nb+a\sum\limits_{i=1}^{n}{{{x}_{i}}}=\sum\limits_{i=1}^{n}{{{y}_{i}}} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čo môžeme pomocou maticového zápisu zapísať nasledovne:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Logaritmická  aproximácia: &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;====&lt;br /&gt;
Hľadáme najlepšiu aproximáciu pre logaritmickú rovnicu:  &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;. Postup výpočtu je rovnaký ako v prvom prípade.&lt;br /&gt;
Jediná zmena v riešení je tá, že os x je v logaritmickej mierke. Dostávame teda sústavu 2 rovníc:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}} &amp;amp; \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exponenciálna  aproximácia: &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt; si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{e}^{ax}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{e}^{ax}} \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+\ln b\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+B \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opäť dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Mocnimová  aproximácia: &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;  si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{x}^{a}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{x}^{a}} \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+a\ln x\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=B+a\ln x \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}^{2}} &amp;amp; \sum\limits_{i=1}^{n}{\ln {{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešením je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Analýza programátorského riešenia===&lt;br /&gt;
====Návrh dátových štruktúr====&lt;br /&gt;
V úlohe budeme pracovať s bodmi v rovine, ktoré sú charakterizované x a y súradnicou. Preto si vytvoríme štruktúru Bod, ktorá bude takýto bod reprezentovať:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
V zadaní je úlohou vypočítať rovnicu najlepšie aproximujúcej krivky (lineárnej, logaritmickej, exponenciálnej alebo mocninovej). Tieto krivky sú charakterizované (okrem svojej matematickej funkcie, ktorú vyjadríme neskôr) koeficientami ''a'' a ''b''. Na to, aby sme rozlíšili o akú krivku ide, vytvorme si vymenovaný zoznam TYP_KRIVKY, ktorý bude ma 4 symbolické hodnoty:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Význam týchto skratiek si zadefinujme nasledovne:&lt;br /&gt;
*LIN - lineárna krivka (polynóm 1 stupňa) s rovnicou &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
*LOG - logaritmická krivka s rovnicou &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
*EXP - exponenciálna krivka s rovnicou &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
*MOC - mocninová krivka s rovnicou &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
Teraz si môžeme zadefinovať štruktúru Krivka ako trojicu: ''typ'' (TYP_KRIVKY), koeficient ''a''  a koeficient ''b''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Vytvoríme funkciu ''Krivka minSq(Bod *body, int n)'' kde v poli body sú vstupné údaje, n je počet bodov. Funkcia bude vracať dátovú struktúru typu Krivka, kde budú informácie o tvare aproximujúcej krivky.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq_lin(Bod *body, int n)&lt;br /&gt;
{  // y=a+bx&lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
    k.b=(sy-k.a*sx)/n;&lt;br /&gt;
    k.typ=LIN;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podobným spôsobom môžeme vytvoriť ďalšie 3 funkcie minSq_log, minSq_exp minSq_moc. Ukážeme si ale všeobecnejší tvar funkcie minSq, kde pridáme ďalší parameter, ktorý bude hovoriť aký typ aproximácie sa má vypočítať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
{  &lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0,slxly;&lt;br /&gt;
   double slx=0,slxx=0,sly=0,slxy=0,sxly=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         slx+=log(body[i].x);&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sly+=log(body[i].y);&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         slxy+=log(body[i].x) * body[i].y;&lt;br /&gt;
         sxly+=body[i].x * log(body[i].y);&lt;br /&gt;
         slxly+=log(body[i].x) *log(body[i].y);&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
         slxx+=log(body[i].x) * log(body[i].x);&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    switch(typ_proximacie)&lt;br /&gt;
    {&lt;br /&gt;
      case LIN:&lt;br /&gt;
          k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sy-k.a*sx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
          k.a=(n*slxy-sy*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sy-k.a*slx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
          k.a=(n*sxly-sly*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sly-k.a*sx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
          k.a=(n*slxly-sly*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sly-k.a*slx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
    }&lt;br /&gt;
    k.typ=typ_proximacie;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Použitie v programe====&lt;br /&gt;
Pre názornosť nebudeme v programe dáta načítavať z klávesnice, ale vstupné údaje budú zadané priamo v zdrojovom kóde. Modifikácia zdrojového kódu s načítaním vstupných hodnôt je jednoduchá a určite ju každý zvládne sám.&lt;br /&gt;
&lt;br /&gt;
V zdrojovom kóde pribudla ešte funkcia ''vypisRovnicuKrivky'', ktorá vypíše rovnicu krivky v čitateľnom tvare pre človeka. Vo výpise sú vynechané všetky funkcie, ktoré sú boli v tomto príklade vysvetlené a ich zdrojový kód bol napísaný skôr.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Bod {double x,y;};&lt;br /&gt;
enum TYP_KRIVKY{ LIN, LOG, EXP, MOC};&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
&lt;br /&gt;
void vypisRovnicuKrivky(Krivka k)&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;y=&amp;quot;;   &lt;br /&gt;
   switch(k.typ)&lt;br /&gt;
   {&lt;br /&gt;
      case LIN:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; ln x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; e^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x)&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; x^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; )&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
    }     &lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{  const int n=8;&lt;br /&gt;
   Bod body[n]={&lt;br /&gt;
      {1.50,0.58},&lt;br /&gt;
      {2.00,8.61},&lt;br /&gt;
      {3.00,60.91},&lt;br /&gt;
      {4.00,201.40},&lt;br /&gt;
      {5.00,476.59},&lt;br /&gt;
      {6.00,892.57},&lt;br /&gt;
      {7.00,1304.37},&lt;br /&gt;
      {8.00,1115.04}		&lt;br /&gt;
   }; &lt;br /&gt;
  Krivka Q;&lt;br /&gt;
  Q=minSq(body,n,EXP); // LOG, LIN, EXP&lt;br /&gt;
  vypisRovnicuKrivky(Q);&lt;br /&gt;
  getch();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Overenie vypočítaných hodnôt===&lt;br /&gt;
Na nasledujúcich obrázkoch sú vstupné body z príkladu znázornené v tabuľkovom procesore a je vypočítaná najlepšia aproximujúca krivka (MS Excel ju nazýva spojnica trendu).&lt;br /&gt;
&amp;lt;gallery heights=220px widths=400px perrow=2&amp;gt;&lt;br /&gt;
Súbor:min SQ lin.png&lt;br /&gt;
Súbor:min SQ log.png&lt;br /&gt;
Súbor:min SQ exp.png&lt;br /&gt;
Súbor:min SQ moc.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie 2==&lt;br /&gt;
Vytvorte funkciu, ktorá pre zadaná vstupy vypočíta všetky typy aproximácií (lineárnu, logaritmickú, exponenciálnu a mocninovú) a určí ktorá aproximácia je optimálna pre zadané vstupné body.&lt;br /&gt;
&lt;br /&gt;
===Analýza===&lt;br /&gt;
Pri vyhodnocovaní optimálnej aproximácie musíme vypočítať všetky možné aproximačné krivky a zvoliť kritérium voľby najlepšej aproximácie. Kritériom posudzovania môže byť hľadanie minimálych hodnôt:&lt;br /&gt;
*vzdialenosť uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*štvorce vzdialeností uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*plocha medziproximujúcou krivkou a interpolačným polynómom, ktorých prechádza cez uzlové body&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Kriteriom na vyhodnotenie najlepšej aproximovanej krivky bude hľadanie minimálych hodnôt a vzdialeností uzlových (vstupných) bodov od aproximujúcej krivky.&lt;br /&gt;
&lt;br /&gt;
Definovanie štruktúr potrebných pre spracovanie súradníc:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Táto štruktúra pre zjednodušenie poslúži na uloženie všetkých typov aproximácie do jednej premennej typu Aprox:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
struct Aprox{&lt;br /&gt;
    Krivka Lin, Log, Exp, Moc;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcia aproximacie vypočíta všetky 4 typy aproximácií. Návratová hodnota funkcie je typu Aprox:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Aprox aproximacie(Bod *body, int n, Aprox B)   //vypocita vsetky&lt;br /&gt;
                                                 //aproximacie&lt;br /&gt;
{&lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0,slxly;&lt;br /&gt;
   double slx=0,slxx=0,sly=0,slxy=0,sxly=0;&lt;br /&gt;
	for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
	{    sx+=body[i].x;&lt;br /&gt;
		 slx+=log(body[i].x);&lt;br /&gt;
		 sy+=body[i].y;&lt;br /&gt;
		 sly+=log(body[i].y);&lt;br /&gt;
		 sxy+=body[i].x * body[i].y;&lt;br /&gt;
		 slxy+=log(body[i].x) * body[i].y;&lt;br /&gt;
		 sxly+=body[i].x * log(body[i].y);&lt;br /&gt;
		 slxly+=log(body[i].x) *log(body[i].y);&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
         slxx+=log(body[i].x) * log(body[i].x);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		 B.Lin.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
		 B.Lin.b=(sy-B.Lin.a*sx)/n;&lt;br /&gt;
&lt;br /&gt;
		 B.Log.a=(n*slxy-sy*slx)/(n*slxx-slx*slx);&lt;br /&gt;
		 B.Log.b=(sy-B.Log.a*slx)/n;&lt;br /&gt;
&lt;br /&gt;
		 B.Exp.a=(n*sxly-sly*sx)/(n*sxx-sx*sx);&lt;br /&gt;
		 B.Exp.b=(sly-B.Exp.a*sx)/n;&lt;br /&gt;
		 B.Exp.b=exp(B.Exp.b);&lt;br /&gt;
&lt;br /&gt;
		 B.Moc.a=(n*slxly-sly*slx)/(n*slxx-slx*slx);&lt;br /&gt;
		 B.Moc.b=(sly-B.Moc.a*slx)/n;&lt;br /&gt;
	     B.Moc.b=exp(B.Moc.b);&lt;br /&gt;
&lt;br /&gt;
    return B;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na vypísanie najvhodnejšieho typu rovnice je použitá funkcia vypisRovnicuKrivky: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
void vypisRovnicuKrivky(Krivka k)    //vypise rovnicu urciteho typu&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;y = &amp;quot;;&lt;br /&gt;
   switch(k.typ)&lt;br /&gt;
   {&lt;br /&gt;
	  case LIN:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x&amp;quot;;&lt;br /&gt;
		   if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; LINEARNA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	  case LOG:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; ln x&amp;quot;;&lt;br /&gt;
		   if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; LOGARITMICKA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	  case EXP:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; e^(&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x)&amp;quot;&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; EXPONENCIALNA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	  case MOC:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; x^(&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; )&amp;quot;&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; MOCNINOVA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pre zistenie optimálnej aproximovanej krivky pre dané vstupné body je použitý jednoduchý algoritmus daný vo funkcii zistiOptimum. &lt;br /&gt;
*Postup riešenia algoritmu spočíva v zistení vzdialenosti y-onovej súradnice vstupného bodu od aproximovanej y-onovej súradnice, ktorú musíme najskôr vypočítať, a porovnaním ako sú tieto body vzdialené od jednotlivých bodov kriviky pre každý typ, zistíme optimum.  &lt;br /&gt;
*Dosadením x-ových súradníc vstupných bodov do príslušnej rovnice krivky sa vypočíta aproximovaná y-onová súradnica.  Absolútnu hodnotu rozdielu vzdialenosti medzi y-onovými súradnicami(vypočítanými a vstupnými) sčíta a uloží túto sumu do premennej sumLin (pre každý ďalší jeden typ aproximácie do - sumLog, sumExp, sumMoc ). Toto sa opakuje pre každý jeden vstupný bod a pre každú rovnicu krivky. &lt;br /&gt;
*Na záver sa sumy všetkých typov aproximácií porovnajú. Najmenšia suma predstavuje najmenšie odchýlky pre danú krivku v porovnaní so vstupnými bodmi. Funkcia vráti Optimálnu krivku  aproximácie s najmenšou sumou:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka zistiOptimum(Bod *body, int n, Aprox B)&lt;br /&gt;
{&lt;br /&gt;
	double sumLin=0, sumLog=0, sumExp=0, sumMoc=0, 	y1=0,y2=0,y3=0,y4=0, Naj=0;&lt;br /&gt;
	Krivka Optim;&lt;br /&gt;
	for(int i=0; i &amp;lt; n; i++)&lt;br /&gt;
	{&lt;br /&gt;
		y1=((B.Lin.a*body[i].x)+B.Lin.b)-body[i].y;  &lt;br /&gt;
		if(y1&amp;lt;0) y1=-y1;&lt;br /&gt;
		  sumLin+=y1;&lt;br /&gt;
&lt;br /&gt;
		y2=((B.Log.a*(log(body[i].x)))+B.Log.b)-body[i].y;  			&lt;br /&gt;
                if(y2&amp;lt;0) y2=-y2;                           &lt;br /&gt;
		  sumLog+=y2;&lt;br /&gt;
&lt;br /&gt;
		y3=(B.Exp.b*(exp(B.Exp.a*body[i].x)));     &lt;br /&gt;
		y3=log(y3);&lt;br /&gt;
		if(y3&amp;lt;0) y3=-y3;&lt;br /&gt;
		 sumExp+=y3;&lt;br /&gt;
&lt;br /&gt;
		y4=(B.Moc.b*(pow(body[i].x, B.Moc.a)))-body[i].y;&lt;br /&gt;
		if(y4&amp;lt;0) y4=-y4;                           &lt;br /&gt;
		  sumMoc+=y4;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	Naj=min(sumLin,sumLog);&lt;br /&gt;
	Naj=min(Naj,sumExp);&lt;br /&gt;
	Naj=min(Naj,sumMoc);&lt;br /&gt;
	&lt;br /&gt;
	if(Naj==sumLin) {B.Lin.typ=LIN; return B.Lin;}&lt;br /&gt;
	if(Naj==sumLog) {B.Log.typ=LOG; return B.Log;}&lt;br /&gt;
	if(Naj==sumExp) {B.Exp.typ=EXP; return B.Exp;}&lt;br /&gt;
&lt;br /&gt;
	B.Moc.typ=MOC;&lt;br /&gt;
	return B.Moc;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modifikácia zdrojového kódu===&lt;br /&gt;
Pre názornosť nebudeme v programe dáta načítavať z klávesnice, ale vstupné údaje budú zadané priamo v zdrojovom kóde&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cmath&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
   };&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
struct Aprox{&lt;br /&gt;
	Krivka Lin, Log, Exp, Moc;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//Aprox aproximacie(Bod *body, int n, Aprox B)&lt;br /&gt;
//void vypisRovnicuKrivky(Krivka k)&lt;br /&gt;
//Krivka zistiOptimum(Bod *body, int n, Aprox B)&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
	const int n=8;&lt;br /&gt;
	Bod body[n]={&lt;br /&gt;
	  {1.50,0.58},&lt;br /&gt;
	  {2.00,8.61},&lt;br /&gt;
	  {3.00,60.91},&lt;br /&gt;
	  {4.00,201.40},&lt;br /&gt;
	  {5.00,476.59},&lt;br /&gt;
	  {6.00,892.57},&lt;br /&gt;
	  {7.00,1304.37},&lt;br /&gt;
	  {8.00,2715.04}&lt;br /&gt;
	};&lt;br /&gt;
	Aprox B;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Najvhodnejsia: &amp;quot;;&lt;br /&gt;
	vypisRovnicuKrivky(zistiOptimum(body, n, B));&lt;br /&gt;
&lt;br /&gt;
    getch();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vzorový Príklad===&lt;br /&gt;
Program vypočítal, že pre uvedené vstupné body je navhodnejšia Mocninová aproximácia.&lt;br /&gt;
{| class=datatable&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
!&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.50&lt;br /&gt;
|0.58&lt;br /&gt;
|-&lt;br /&gt;
|2.00&lt;br /&gt;
|8.61&lt;br /&gt;
|-&lt;br /&gt;
|3.00&lt;br /&gt;
|60.91&lt;br /&gt;
|-&lt;br /&gt;
|4.00&lt;br /&gt;
|201.40&lt;br /&gt;
|-&lt;br /&gt;
|5.00&lt;br /&gt;
|476.59&lt;br /&gt;
|-&lt;br /&gt;
|6.00&lt;br /&gt;
|892.57&lt;br /&gt;
|-&lt;br /&gt;
|7.00&lt;br /&gt;
|1304.37&lt;br /&gt;
|-&lt;br /&gt;
|8.00&lt;br /&gt;
|2715.04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzor_graf.jpg|center|framed]]&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vzor_graf.jpg&amp;diff=4609</id>
		<title>Súbor:Vzor graf.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vzor_graf.jpg&amp;diff=4609"/>
		<updated>2010-05-27T09:32:08Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=4608</id>
		<title>Algoritmy numerickej aproximácie (riešené príklady)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=4608"/>
		<updated>2010-05-27T09:18:27Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: /* Riešenie v jazyku C */&lt;/p&gt;
&lt;hr /&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 1==&lt;br /&gt;
Riešte problém aproximácie dát. K dispozícii máme ''n'' bodov v rovine (ich súradnice ''x'' a ''y''). Úlohou bude vypočítať rovnicu aproximujúcej krivky metódou najmenších štvorcov pre:&lt;br /&gt;
#Lineárnu aproximáciu v tvare &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Logaritmickú aproximáciu v tvare &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Exponenciálnu aproximáciu v tvare &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Mocninovú aproximáciu v tvare &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Porovnajte výsledok funkcie s výsledkom v tabuľkovom procesore, kde do (bodového) grafu zo vstupných bodov pridáte spojnicu trendu typu lineárna, resp. logaritmická, mocninová exponenciálna.&lt;br /&gt;
&lt;br /&gt;
===Vstupné údaje===&lt;br /&gt;
Ako vzorku vstupných bodov budeme uvažovať body z intervalu &amp;lt;1,8&amp;gt;.&lt;br /&gt;
''Pre generovanie vstupných hodnôt použijem funkciu &amp;lt;math&amp;gt;f(x)=x^4-exp(x)&amp;lt;/math&amp;gt;''&lt;br /&gt;
====Vzorový vstup====&lt;br /&gt;
{| class=datatable&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
!&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.50&lt;br /&gt;
|0.58&lt;br /&gt;
|-&lt;br /&gt;
|2.00&lt;br /&gt;
|8.61&lt;br /&gt;
|-&lt;br /&gt;
|3.00&lt;br /&gt;
|60.91&lt;br /&gt;
|-&lt;br /&gt;
|4.00&lt;br /&gt;
|201.40&lt;br /&gt;
|-&lt;br /&gt;
|5.00&lt;br /&gt;
|476.59&lt;br /&gt;
|-&lt;br /&gt;
|6.00&lt;br /&gt;
|892.57&lt;br /&gt;
|-&lt;br /&gt;
|7.00&lt;br /&gt;
|1304.37&lt;br /&gt;
|-&lt;br /&gt;
|8.00&lt;br /&gt;
|1115.04&lt;br /&gt;
|}&lt;br /&gt;
====Vzorový výstup====&lt;br /&gt;
#y = 213.634 x - 467.195&lt;br /&gt;
#y = 784.982 ln x - 572.83&lt;br /&gt;
#y = 0.9628 e^(1.054x)&lt;br /&gt;
#y = 0.2609 x^(4.443)&lt;br /&gt;
&lt;br /&gt;
===Analýza matematických vzťahov===&lt;br /&gt;
Poznámka: v tomto texte nie sú uvádzané celé postupy výpočtu, nakoľko v tomto predmete nie sú primárnym cieľom matematické dôkazy. Študent si postup môže ľahko overiť sám.&lt;br /&gt;
&lt;br /&gt;
====Lineárna aproximácia: y=ax+b====&lt;br /&gt;
Pre lineárnu aproximáciu platia vzťahy:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; b\sum\limits_{i=1}^{n}{{{x}_{i}}}+a\sum\limits_{i=1}^{n}{{{x}^{2}}_{i}}=\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}} \\ &lt;br /&gt;
 &amp;amp; nb+a\sum\limits_{i=1}^{n}{{{x}_{i}}}=\sum\limits_{i=1}^{n}{{{y}_{i}}} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čo môžeme pomocou maticového zápisu zapísať nasledovne:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Logaritmická  aproximácia: &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;====&lt;br /&gt;
Hľadáme najlepšiu aproximáciu pre logaritmickú rovnicu:  &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;. Postup výpočtu je rovnaký ako v prvom prípade.&lt;br /&gt;
Jediná zmena v riešení je tá, že os x je v logaritmickej mierke. Dostávame teda sústavu 2 rovníc:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}} &amp;amp; \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exponenciálna  aproximácia: &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt; si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{e}^{ax}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{e}^{ax}} \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+\ln b\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+B \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opäť dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Mocnimová  aproximácia: &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;  si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{x}^{a}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{x}^{a}} \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+a\ln x\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=B+a\ln x \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}^{2}} &amp;amp; \sum\limits_{i=1}^{n}{\ln {{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešením je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Analýza programátorského riešenia===&lt;br /&gt;
====Návrh dátových štruktúr====&lt;br /&gt;
V úlohe budeme pracovať s bodmi v rovine, ktoré sú charakterizované x a y súradnicou. Preto si vytvoríme štruktúru Bod, ktorá bude takýto bod reprezentovať:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
V zadaní je úlohou vypočítať rovnicu najlepšie aproximujúcej krivky (lineárnej, logaritmickej, exponenciálnej alebo mocninovej). Tieto krivky sú charakterizované (okrem svojej matematickej funkcie, ktorú vyjadríme neskôr) koeficientami ''a'' a ''b''. Na to, aby sme rozlíšili o akú krivku ide, vytvorme si vymenovaný zoznam TYP_KRIVKY, ktorý bude ma 4 symbolické hodnoty:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Význam týchto skratiek si zadefinujme nasledovne:&lt;br /&gt;
*LIN - lineárna krivka (polynóm 1 stupňa) s rovnicou &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
*LOG - logaritmická krivka s rovnicou &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
*EXP - exponenciálna krivka s rovnicou &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
*MOC - mocninová krivka s rovnicou &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
Teraz si môžeme zadefinovať štruktúru Krivka ako trojicu: ''typ'' (TYP_KRIVKY), koeficient ''a''  a koeficient ''b''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Vytvoríme funkciu ''Krivka minSq(Bod *body, int n)'' kde v poli body sú vstupné údaje, n je počet bodov. Funkcia bude vracať dátovú struktúru typu Krivka, kde budú informácie o tvare aproximujúcej krivky.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq_lin(Bod *body, int n)&lt;br /&gt;
{  // y=a+bx&lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
    k.b=(sy-k.a*sx)/n;&lt;br /&gt;
    k.typ=LIN;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podobným spôsobom môžeme vytvoriť ďalšie 3 funkcie minSq_log, minSq_exp minSq_moc. Ukážeme si ale všeobecnejší tvar funkcie minSq, kde pridáme ďalší parameter, ktorý bude hovoriť aký typ aproximácie sa má vypočítať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
{  &lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0,slxly;&lt;br /&gt;
   double slx=0,slxx=0,sly=0,slxy=0,sxly=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         slx+=log(body[i].x);&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sly+=log(body[i].y);&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         slxy+=log(body[i].x) * body[i].y;&lt;br /&gt;
         sxly+=body[i].x * log(body[i].y);&lt;br /&gt;
         slxly+=log(body[i].x) *log(body[i].y);&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
         slxx+=log(body[i].x) * log(body[i].x);&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    switch(typ_proximacie)&lt;br /&gt;
    {&lt;br /&gt;
      case LIN:&lt;br /&gt;
          k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sy-k.a*sx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
          k.a=(n*slxy-sy*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sy-k.a*slx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
          k.a=(n*sxly-sly*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sly-k.a*sx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
          k.a=(n*slxly-sly*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sly-k.a*slx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
    }&lt;br /&gt;
    k.typ=typ_proximacie;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Použitie v programe====&lt;br /&gt;
Pre názornosť nebudeme v programe dáta načítavať z klávesnice, ale vstupné údaje budú zadané priamo v zdrojovom kóde. Modifikácia zdrojového kódu s načítaním vstupných hodnôt je jednoduchá a určite ju každý zvládne sám.&lt;br /&gt;
&lt;br /&gt;
V zdrojovom kóde pribudla ešte funkcia ''vypisRovnicuKrivky'', ktorá vypíše rovnicu krivky v čitateľnom tvare pre človeka. Vo výpise sú vynechané všetky funkcie, ktoré sú boli v tomto príklade vysvetlené a ich zdrojový kód bol napísaný skôr.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Bod {double x,y;};&lt;br /&gt;
enum TYP_KRIVKY{ LIN, LOG, EXP, MOC};&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
&lt;br /&gt;
void vypisRovnicuKrivky(Krivka k)&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;y=&amp;quot;;   &lt;br /&gt;
   switch(k.typ)&lt;br /&gt;
   {&lt;br /&gt;
      case LIN:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; ln x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; e^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x)&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; x^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; )&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
    }     &lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{  const int n=8;&lt;br /&gt;
   Bod body[n]={&lt;br /&gt;
      {1.50,0.58},&lt;br /&gt;
      {2.00,8.61},&lt;br /&gt;
      {3.00,60.91},&lt;br /&gt;
      {4.00,201.40},&lt;br /&gt;
      {5.00,476.59},&lt;br /&gt;
      {6.00,892.57},&lt;br /&gt;
      {7.00,1304.37},&lt;br /&gt;
      {8.00,1115.04}		&lt;br /&gt;
   }; &lt;br /&gt;
  Krivka Q;&lt;br /&gt;
  Q=minSq(body,n,EXP); // LOG, LIN, EXP&lt;br /&gt;
  vypisRovnicuKrivky(Q);&lt;br /&gt;
  getch();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Overenie vypočítaných hodnôt===&lt;br /&gt;
Na nasledujúcich obrázkoch sú vstupné body z príkladu znázornené v tabuľkovom procesore a je vypočítaná najlepšia aproximujúca krivka (MS Excel ju nazýva spojnica trendu).&lt;br /&gt;
&amp;lt;gallery heights=220px widths=400px perrow=2&amp;gt;&lt;br /&gt;
Súbor:min SQ lin.png&lt;br /&gt;
Súbor:min SQ log.png&lt;br /&gt;
Súbor:min SQ exp.png&lt;br /&gt;
Súbor:min SQ moc.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie 2==&lt;br /&gt;
Vytvorte funkciu, ktorá pre zadaná vstupy vypočíta všetky typy aproximácií (lineárnu, logaritmickú, exponenciálnu a mocninovú) a určí ktorá aproximácia je optimálna pre zadané vstupné body.&lt;br /&gt;
&lt;br /&gt;
===Analýza===&lt;br /&gt;
Pri vyhodnocovaní optimálnej aproximácie musíme vypočítať všetky možné aproximačné krivky a zvoliť kritérium voľby najlepšej aproximácie. Kritériom posudzovania môže byť hľadanie minimálych hodnôt:&lt;br /&gt;
*vzdialenosť uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*štvorce vzdialeností uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*plocha medziproximujúcou krivkou a interpolačným polynómom, ktorých prechádza cez uzlové body&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Kriteriom na vyhodnotenie najlepšej aproximovanej krivky bude hľadanie minimálych hodnôt a vzdialeností uzlových (vstupných) bodov od aproximujúcej krivky.&lt;br /&gt;
&lt;br /&gt;
Definovanie štruktúr potrebných pre spracovanie súradníc:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Táto štruktúra pre zjednodušenie poslúži na uloženie všetkých typov aproximácie do jednej premennej typu Aprox:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
struct Aprox{&lt;br /&gt;
    Krivka Lin, Log, Exp, Moc;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcia aproximacie vypočíta všetky 4 typy aproximácií. Návratová hodnota funkcie je typu Aprox:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Aprox aproximacie(Bod *body, int n, Aprox B)   //vypocita vsetky&lt;br /&gt;
                                                 //aproximacie&lt;br /&gt;
{&lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0,slxly;&lt;br /&gt;
   double slx=0,slxx=0,sly=0,slxy=0,sxly=0;&lt;br /&gt;
	for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
	{    sx+=body[i].x;&lt;br /&gt;
		 slx+=log(body[i].x);&lt;br /&gt;
		 sy+=body[i].y;&lt;br /&gt;
		 sly+=log(body[i].y);&lt;br /&gt;
		 sxy+=body[i].x * body[i].y;&lt;br /&gt;
		 slxy+=log(body[i].x) * body[i].y;&lt;br /&gt;
		 sxly+=body[i].x * log(body[i].y);&lt;br /&gt;
		 slxly+=log(body[i].x) *log(body[i].y);&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
         slxx+=log(body[i].x) * log(body[i].x);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
		 B.Lin.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
		 B.Lin.b=(sy-B.Lin.a*sx)/n;&lt;br /&gt;
&lt;br /&gt;
		 B.Log.a=(n*slxy-sy*slx)/(n*slxx-slx*slx);&lt;br /&gt;
		 B.Log.b=(sy-B.Log.a*slx)/n;&lt;br /&gt;
&lt;br /&gt;
		 B.Exp.a=(n*sxly-sly*sx)/(n*sxx-sx*sx);&lt;br /&gt;
		 B.Exp.b=(sly-B.Exp.a*sx)/n;&lt;br /&gt;
		 B.Exp.b=exp(B.Exp.b);&lt;br /&gt;
&lt;br /&gt;
		 B.Moc.a=(n*slxly-sly*slx)/(n*slxx-slx*slx);&lt;br /&gt;
		 B.Moc.b=(sly-B.Moc.a*slx)/n;&lt;br /&gt;
	     B.Moc.b=exp(B.Moc.b);&lt;br /&gt;
&lt;br /&gt;
    return B;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na vypísanie najvhodnejšieho typu rovnice je použitá funkcia vypisRovnicuKrivky: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
void vypisRovnicuKrivky(Krivka k)    //vypise rovnicu urciteho typu&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;y = &amp;quot;;&lt;br /&gt;
   switch(k.typ)&lt;br /&gt;
   {&lt;br /&gt;
	  case LIN:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x&amp;quot;;&lt;br /&gt;
		   if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; LINEARNA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	  case LOG:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; ln x&amp;quot;;&lt;br /&gt;
		   if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; LOGARITMICKA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	  case EXP:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; e^(&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x)&amp;quot;&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; EXPONENCIALNA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	  case MOC:&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; x^(&amp;quot;;&lt;br /&gt;
		   cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; )&amp;quot;&amp;lt;&amp;lt;&amp;quot;   -&amp;gt; MOCNINOVA&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
		  break;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pre zistenie optimálnej aproximovanej krivky pre dané vstupné body je použitý jednoduchý algoritmus daný vo funkcii zistiOptimum. &lt;br /&gt;
*Postup riešenia algoritmu spočíva v zistení vzdialenosti y-onovej súradnice vstupného bodu od aproximovanej y-onovej súradnice, ktorú musíme najskôr vypočítať, a porovnaním ako sú tieto body vzdialené od jednotlivých bodov kriviky pre každý typ, zistíme optimum.  &lt;br /&gt;
*Dosadením x-ových súradníc vstupných bodov do príslušnej rovnice krivky sa vypočíta aproximovaná y-onová súradnica.  Absolútnu hodnotu rozdielu vzdialenosti medzi y-onovými súradnicami(vypočítanými a vstupnými) sčíta a uloží túto sumu do premennej sumLin (pre každý ďalší jeden typ aproximácie do - sumLog, sumExp, sumMoc ). Toto sa opakuje pre každý jeden vstupný bod a pre každú rovnicu krivky. &lt;br /&gt;
*Na záver sa sumy všetkých typov aproximácií porovnajú. Najmenšia suma predstavuje najmenšie odchýlky pre danú krivku v porovnaní so vstupnými bodmi. Funkcia vráti Optimálnu krivku  aproximácie s najmenšou sumou:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka zistiOptimum(Bod *body, int n, Aprox B)&lt;br /&gt;
{&lt;br /&gt;
	double sumLin=0, sumLog=0, sumExp=0, sumMoc=0, 	y1=0,y2=0,y3=0,y4=0, Naj=0;&lt;br /&gt;
	Krivka Optim;&lt;br /&gt;
	for(int i=0; i &amp;lt; n; i++)&lt;br /&gt;
	{&lt;br /&gt;
		y1=((B.Lin.a*body[i].x)+B.Lin.b)-body[i].y;  &lt;br /&gt;
		if(y1&amp;lt;0) y1=-y1;&lt;br /&gt;
		  sumLin+=y1;&lt;br /&gt;
&lt;br /&gt;
		y2=((B.Log.a*(log(body[i].x)))+B.Log.b)-body[i].y;  			&lt;br /&gt;
                if(y2&amp;lt;0) y2=-y2;                           &lt;br /&gt;
		  sumLog+=y2;&lt;br /&gt;
&lt;br /&gt;
		y3=(B.Exp.b*(exp(B.Exp.a*body[i].x)));     &lt;br /&gt;
		y3=log(y3);&lt;br /&gt;
		if(y3&amp;lt;0) y3=-y3;&lt;br /&gt;
		 sumExp+=y3;&lt;br /&gt;
&lt;br /&gt;
		y4=(B.Moc.b*(pow(body[i].x, B.Moc.a)))-body[i].y;&lt;br /&gt;
		if(y4&amp;lt;0) y4=-y4;                           &lt;br /&gt;
		  sumMoc+=y4;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	Naj=min(sumLin,sumLog);&lt;br /&gt;
	Naj=min(Naj,sumExp);&lt;br /&gt;
	Naj=min(Naj,sumMoc);&lt;br /&gt;
	&lt;br /&gt;
	if(Naj==sumLin) {B.Lin.typ=LIN; return B.Lin;}&lt;br /&gt;
	if(Naj==sumLog) {B.Log.typ=LOG; return B.Log;}&lt;br /&gt;
	if(Naj==sumExp) {B.Exp.typ=EXP; return B.Exp;}&lt;br /&gt;
&lt;br /&gt;
	B.Moc.typ=MOC;&lt;br /&gt;
	return B.Moc;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modifikácia zdrojového kódu===&lt;br /&gt;
Pre názornosť nebudeme v programe dáta načítavať z klávesnice, ale vstupné údaje budú zadané priamo v zdrojovom kóde&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cmath&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
   };&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
struct Aprox{&lt;br /&gt;
	Krivka Lin, Log, Exp, Moc;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//Aprox aproximacie(Bod *body, int n, Aprox B)&lt;br /&gt;
//void vypisRovnicuKrivky(Krivka k)&lt;br /&gt;
//Krivka zistiOptimum(Bod *body, int n, Aprox B)&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
	const int n=8;&lt;br /&gt;
	Bod body[n]={&lt;br /&gt;
	  {1.50,0.58},&lt;br /&gt;
	  {2.00,8.61},&lt;br /&gt;
	  {3.00,60.91},&lt;br /&gt;
	  {4.00,201.40},&lt;br /&gt;
	  {5.00,476.59},&lt;br /&gt;
	  {6.00,892.57},&lt;br /&gt;
	  {7.00,1304.37},&lt;br /&gt;
	  {8.00,2715.04}&lt;br /&gt;
	};&lt;br /&gt;
	Aprox B;&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Najvhodnejsia: &amp;quot;;&lt;br /&gt;
	vypisRovnicuKrivky(zistiOptimum(body, n, B));&lt;br /&gt;
&lt;br /&gt;
    getch();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=4607</id>
		<title>Algoritmy numerickej aproximácie (riešené príklady)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=4607"/>
		<updated>2010-05-27T08:45:44Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: /* Riešenie v jazyku C */&lt;/p&gt;
&lt;hr /&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 1==&lt;br /&gt;
Riešte problém aproximácie dát. K dispozícii máme ''n'' bodov v rovine (ich súradnice ''x'' a ''y''). Úlohou bude vypočítať rovnicu aproximujúcej krivky metódou najmenších štvorcov pre:&lt;br /&gt;
#Lineárnu aproximáciu v tvare &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Logaritmickú aproximáciu v tvare &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Exponenciálnu aproximáciu v tvare &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Mocninovú aproximáciu v tvare &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Porovnajte výsledok funkcie s výsledkom v tabuľkovom procesore, kde do (bodového) grafu zo vstupných bodov pridáte spojnicu trendu typu lineárna, resp. logaritmická, mocninová exponenciálna.&lt;br /&gt;
&lt;br /&gt;
===Vstupné údaje===&lt;br /&gt;
Ako vzorku vstupných bodov budeme uvažovať body z intervalu &amp;lt;1,8&amp;gt;.&lt;br /&gt;
''Pre generovanie vstupných hodnôt použijem funkciu &amp;lt;math&amp;gt;f(x)=x^4-exp(x)&amp;lt;/math&amp;gt;''&lt;br /&gt;
====Vzorový vstup====&lt;br /&gt;
{| class=datatable&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
!&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.50&lt;br /&gt;
|0.58&lt;br /&gt;
|-&lt;br /&gt;
|2.00&lt;br /&gt;
|8.61&lt;br /&gt;
|-&lt;br /&gt;
|3.00&lt;br /&gt;
|60.91&lt;br /&gt;
|-&lt;br /&gt;
|4.00&lt;br /&gt;
|201.40&lt;br /&gt;
|-&lt;br /&gt;
|5.00&lt;br /&gt;
|476.59&lt;br /&gt;
|-&lt;br /&gt;
|6.00&lt;br /&gt;
|892.57&lt;br /&gt;
|-&lt;br /&gt;
|7.00&lt;br /&gt;
|1304.37&lt;br /&gt;
|-&lt;br /&gt;
|8.00&lt;br /&gt;
|1115.04&lt;br /&gt;
|}&lt;br /&gt;
====Vzorový výstup====&lt;br /&gt;
#y = 213.634 x - 467.195&lt;br /&gt;
#y = 784.982 ln x - 572.83&lt;br /&gt;
#y = 0.9628 e^(1.054x)&lt;br /&gt;
#y = 0.2609 x^(4.443)&lt;br /&gt;
&lt;br /&gt;
===Analýza matematických vzťahov===&lt;br /&gt;
Poznámka: v tomto texte nie sú uvádzané celé postupy výpočtu, nakoľko v tomto predmete nie sú primárnym cieľom matematické dôkazy. Študent si postup môže ľahko overiť sám.&lt;br /&gt;
&lt;br /&gt;
====Lineárna aproximácia: y=ax+b====&lt;br /&gt;
Pre lineárnu aproximáciu platia vzťahy:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; b\sum\limits_{i=1}^{n}{{{x}_{i}}}+a\sum\limits_{i=1}^{n}{{{x}^{2}}_{i}}=\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}} \\ &lt;br /&gt;
 &amp;amp; nb+a\sum\limits_{i=1}^{n}{{{x}_{i}}}=\sum\limits_{i=1}^{n}{{{y}_{i}}} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čo môžeme pomocou maticového zápisu zapísať nasledovne:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Logaritmická  aproximácia: &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;====&lt;br /&gt;
Hľadáme najlepšiu aproximáciu pre logaritmickú rovnicu:  &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;. Postup výpočtu je rovnaký ako v prvom prípade.&lt;br /&gt;
Jediná zmena v riešení je tá, že os x je v logaritmickej mierke. Dostávame teda sústavu 2 rovníc:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}} &amp;amp; \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exponenciálna  aproximácia: &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt; si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{e}^{ax}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{e}^{ax}} \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+\ln b\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+B \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opäť dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Mocnimová  aproximácia: &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;  si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{x}^{a}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{x}^{a}} \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+a\ln x\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=B+a\ln x \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}^{2}} &amp;amp; \sum\limits_{i=1}^{n}{\ln {{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešením je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Analýza programátorského riešenia===&lt;br /&gt;
====Návrh dátových štruktúr====&lt;br /&gt;
V úlohe budeme pracovať s bodmi v rovine, ktoré sú charakterizované x a y súradnicou. Preto si vytvoríme štruktúru Bod, ktorá bude takýto bod reprezentovať:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
V zadaní je úlohou vypočítať rovnicu najlepšie aproximujúcej krivky (lineárnej, logaritmickej, exponenciálnej alebo mocninovej). Tieto krivky sú charakterizované (okrem svojej matematickej funkcie, ktorú vyjadríme neskôr) koeficientami ''a'' a ''b''. Na to, aby sme rozlíšili o akú krivku ide, vytvorme si vymenovaný zoznam TYP_KRIVKY, ktorý bude ma 4 symbolické hodnoty:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Význam týchto skratiek si zadefinujme nasledovne:&lt;br /&gt;
*LIN - lineárna krivka (polynóm 1 stupňa) s rovnicou &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
*LOG - logaritmická krivka s rovnicou &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
*EXP - exponenciálna krivka s rovnicou &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
*MOC - mocninová krivka s rovnicou &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
Teraz si môžeme zadefinovať štruktúru Krivka ako trojicu: ''typ'' (TYP_KRIVKY), koeficient ''a''  a koeficient ''b''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Vytvoríme funkciu ''Krivka minSq(Bod *body, int n)'' kde v poli body sú vstupné údaje, n je počet bodov. Funkcia bude vracať dátovú struktúru typu Krivka, kde budú informácie o tvare aproximujúcej krivky.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq_lin(Bod *body, int n)&lt;br /&gt;
{  // y=a+bx&lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
    k.b=(sy-k.a*sx)/n;&lt;br /&gt;
    k.typ=LIN;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podobným spôsobom môžeme vytvoriť ďalšie 3 funkcie minSq_log, minSq_exp minSq_moc. Ukážeme si ale všeobecnejší tvar funkcie minSq, kde pridáme ďalší parameter, ktorý bude hovoriť aký typ aproximácie sa má vypočítať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
{  &lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0,slxly;&lt;br /&gt;
   double slx=0,slxx=0,sly=0,slxy=0,sxly=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         slx+=log(body[i].x);&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sly+=log(body[i].y);&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         slxy+=log(body[i].x) * body[i].y;&lt;br /&gt;
         sxly+=body[i].x * log(body[i].y);&lt;br /&gt;
         slxly+=log(body[i].x) *log(body[i].y);&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
         slxx+=log(body[i].x) * log(body[i].x);&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    switch(typ_proximacie)&lt;br /&gt;
    {&lt;br /&gt;
      case LIN:&lt;br /&gt;
          k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sy-k.a*sx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
          k.a=(n*slxy-sy*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sy-k.a*slx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
          k.a=(n*sxly-sly*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sly-k.a*sx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
          k.a=(n*slxly-sly*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sly-k.a*slx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
    }&lt;br /&gt;
    k.typ=typ_proximacie;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Použitie v programe====&lt;br /&gt;
Pre názornosť nebudeme v programe dáta načítavať z klávesnice, ale vstupné údaje budú zadané priamo v zdrojovom kóde. Modifikácia zdrojového kódu s načítaním vstupných hodnôt je jednoduchá a určite ju každý zvládne sám.&lt;br /&gt;
&lt;br /&gt;
V zdrojovom kóde pribudla ešte funkcia ''vypisRovnicuKrivky'', ktorá vypíše rovnicu krivky v čitateľnom tvare pre človeka. Vo výpise sú vynechané všetky funkcie, ktoré sú boli v tomto príklade vysvetlené a ich zdrojový kód bol napísaný skôr.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Bod {double x,y;};&lt;br /&gt;
enum TYP_KRIVKY{ LIN, LOG, EXP, MOC};&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
&lt;br /&gt;
void vypisRovnicuKrivky(Krivka k)&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;y=&amp;quot;;   &lt;br /&gt;
   switch(k.typ)&lt;br /&gt;
   {&lt;br /&gt;
      case LIN:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; ln x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; e^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x)&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; x^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; )&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
    }     &lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{  const int n=8;&lt;br /&gt;
   Bod body[n]={&lt;br /&gt;
      {1.50,0.58},&lt;br /&gt;
      {2.00,8.61},&lt;br /&gt;
      {3.00,60.91},&lt;br /&gt;
      {4.00,201.40},&lt;br /&gt;
      {5.00,476.59},&lt;br /&gt;
      {6.00,892.57},&lt;br /&gt;
      {7.00,1304.37},&lt;br /&gt;
      {8.00,1115.04}		&lt;br /&gt;
   }; &lt;br /&gt;
  Krivka Q;&lt;br /&gt;
  Q=minSq(body,n,EXP); // LOG, LIN, EXP&lt;br /&gt;
  vypisRovnicuKrivky(Q);&lt;br /&gt;
  getch();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Overenie vypočítaných hodnôt===&lt;br /&gt;
Na nasledujúcich obrázkoch sú vstupné body z príkladu znázornené v tabuľkovom procesore a je vypočítaná najlepšia aproximujúca krivka (MS Excel ju nazýva spojnica trendu).&lt;br /&gt;
&amp;lt;gallery heights=220px widths=400px perrow=2&amp;gt;&lt;br /&gt;
Súbor:min SQ lin.png&lt;br /&gt;
Súbor:min SQ log.png&lt;br /&gt;
Súbor:min SQ exp.png&lt;br /&gt;
Súbor:min SQ moc.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie 2==&lt;br /&gt;
Vytvorte funkciu, ktorá pre zadaná vstupy vypočíta všetky typy aproximácií (lineárnu, logaritmickú, exponenciálnu a mocninovú) a určí ktorá aproximácia je optimálna pre zadané vstupné body.&lt;br /&gt;
&lt;br /&gt;
===Analýza===&lt;br /&gt;
Pri vyhodnocovaní optimálnej aproximácie musíme vypočítať všetky možné aproximačné krivky a zvoliť kritérium voľby najlepšej aproximácie. Kritériom posudzovania môže byť hľadanie minimálych hodnôt:&lt;br /&gt;
*vzdialenosť uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*štvorce vzdialeností uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*plocha medziproximujúcou krivkou a interpolačným polynómom, ktorých prechádza cez uzlové body&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Kriteriom na vyhodnotenie najlepšej aproximovanej krivky bude hľadanie minimálych hodnôt a vzdialeností uzlových (vstupných) bodov od aproximujúcej krivky.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3866</id>
		<title>Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3866"/>
		<updated>2010-04-27T13:16:26Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Bc. Martin Hakala|&lt;br /&gt;
Ing. Peter Kvasnica, PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Diplomový projekt&lt;br /&gt;
|Mechatronika&lt;br /&gt;
}}&lt;br /&gt;
{{Praca_uvod|1|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|slovensky&lt;br /&gt;
|anglicky&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Základ programového prostredia, ktoré sa používa pri realizácii riadiacich úloh tvorí operačný systém. Vlastnosti a chovanie operačného systému určujú praktické možnosti výsledného riadenia a do značnej miery i algoritmy riadiacich aplikácií. Operačný systém dovoľuje spúšťať všetky programy, údaje prehľadne prenášať, uložiť, riadiť a zároveň „paralelne“ používať. Označenie operačný systém je teda súbor programov, ktorý umožňuje efektívnu obsluhu a použitie počítača na plnenie rôznych úloh. &lt;br /&gt;
Tato práca sa preto zaoberá zmapovaním súčasných operačných systémov a ich vzájomným porovnaním z pohľadu doby výpočtu vybraných úloh. V úvode práce opisujeme základnú stavbu a fungovanie operačného systému zo zameraním sa na priebeh jednotlivých procesov v operačnom systéme. Ako vzorku pre testovanie doby výpočtu danej úlohy sme vybrali šesť operačných systémov, ktoré patria v súčasnej dobe medzi najpoužívanejšie na našom trhu. Výsledky tejto práce preto môžu ovplyvniť rozhodovanie používateľa pri výbere operačného systému.&lt;br /&gt;
&lt;br /&gt;
=Operačný systém=&lt;br /&gt;
Operačný systém je najdôležitejší program počítača. Funguje ako prostredník medzi používateľmi a technickým vybavením ( hardvérom ) počítačového systému. Jeho hlavným cieľom je zabezpečiť prístup používateľov k programom a efektívne využívanie daného hardvéru. Architektúra operačného systému je vo všeobecnosti takáto  [3]:&lt;br /&gt;
*Správu procesov ( programy zavedené do pamäte na vykonanie ) - umožňuje vytváranie a ukončovanie procesov. Chráni CPU pred zahltením chybnými programami. &lt;br /&gt;
*Správu operačnej pamäte - zabezpečuje jej efektívne využívanie, kontroluje obsadenosť úsekov pamäte a voľné oblasti prideľuje procesom. Zabezpečuje ochranu pamäte jedného procesu pred ostatnými procesmi. &lt;br /&gt;
*Správu systému súborov sekundárnej pamäte - stará sa o ukladanie údajov, aby si používatelia navzájom nemenili údaje. Proces pokúšajúci sa zapisovať do súboru musí mať na zápis právo pridelené vlastníkom súboru, inak sa mu to nepodarí. &lt;br /&gt;
*Správa vstupno-výstupných zariadení - procesor poskytuje virtuálne ovládače vstupno-výstupných zariadení, ktoré zabezpečujú rovnaký prístup k rovnakým skupinám zariadení. &lt;br /&gt;
*Používateľské rozhranie - zabezpečuje komunikáciu používateľa s procesmi. Môže ísť o textové rozhranie, ktoré s používateľom komunikuje pomocou klávesnice a textu zobrazovaného na monitore a o grafické rozhranie. Grafické rozhranie je intuitívnejšie, používateľ nemusí poznať príkazy naspamäť, ale programy spúšťa i ovláda výberom z ponúk najrôznejších menu a ikôn. Grafická komunikácia s procesmi je často prehľadnejšia a informatívnejšia než textová. &lt;br /&gt;
*Podporu bezpečnosti a spoľahlivosti výpočtového systému - ochraňuje systém proti strate údajov pri výpadku napätia, proti neoprávnenej alebo neodbornej manipulácii, ktorá by mohla poškodiť programové produkty.&lt;br /&gt;
&lt;br /&gt;
==Architektúra operačného systému==&lt;br /&gt;
Vo všeobecnosti rozoznávame tieto súčasti operačného systému: &lt;br /&gt;
# '''Jadro''' ( výkonná časť ) operačného systému – sústava vzájomne prepojených a spolupracujúcich programových modulov nachádzajúcich sa v operačnej pamäti.&amp;lt;br /&amp;gt;Zaisťuje komunikáciu s hardwérom a poskytuje aplikáciám svoje služby, ako správu procesov, správu pamäte, podporu siete a pod.&amp;lt;br /&amp;gt;&lt;br /&gt;
# '''Monitor OS''' ( od slova monitorovať = sledovať ) – zabezpečuje komunikáciu systému s užívateľom.&lt;br /&gt;
# '''Ovládače''' ( drivers ) – obslužné programy vstupno-výstupných zariadení. Zvyčajne predstavujú rozhranie pre komunikáciu so zariadeniami prostredníctvom určitej počítačovej zbernice ku ktorej je pripojený hardvér. Toto rozhranie poskytuje príkazy na posielanie dát od a ku zariadeniu, a tak je nevyhnutné pre operačný systém a softvérové aplikácie. Ovládač je hardvérovo závislý počítačový program, ktorý je špecifický pre určitý OS. Umožňuje iným programom, pracovať transparentne s hardvérovým zariadením a zvyčajne poskytuje nevyhnutné spracúvanie prerušení. Na obr. 1 je znázornená zjednodušená schéma architektúry PC s vonkajšími zariadeniami, na ovládanie ktorých slúžia ovládače.&lt;br /&gt;
&lt;br /&gt;
OS má z hľadiska úrovne programov niekoľko vrstiev. Vrstva na najnižšej úrovni zaisťuje priamy styk s technickými prostriedkami osobného počítača. Táto vrstva sa nazýva BIOS. Služby BIOS-u používa samotné jadro operačného systému. Služby jadra operačného systému následne používajú rôzne nadstavby a hlavne aplikácie spúšťané pod operačným systémom. Často je užívateľské rozhranie vo forme nadstavby operačného systému. Spôsob, akým užívateľ zadáva pokyny pre operačný systém a v akej forme dostáva správy o výsledku prevedenia operácie, je označovaný ako užívateľské rozhranie. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zjednodušená schéma architektúry PC.jpg|framed|center|Obr. 1 Zjednodušená schéma architektúry PC]]&lt;br /&gt;
&lt;br /&gt;
==Základné pojmy==&lt;br /&gt;
Multitasking je vykonávanie viacerých úloh súčasne ( súbežné spracovanie ). Pri jednoprocesorových systémoch sa multitasking simuluje tak, že procesor striedavo vykonáva časti jednotlivých zadaných procesov, a navonok sa tvári, že sa vykonávajú súčasne. Je tomu tak preto, že prepínanie medzi procesmi sa vykonáva automaticky v krátkych časových intervaloch, napr. každú 1ms.  Multitasking sa delí na preemptívny a nepreemptívny. Preemptívny multitasking vnucuje procesom násilné prepínanie na základe údajov časovača. Vďaka tomu počítač nemožno zahltiť jednou aplikáciou, ktorá by nepripustila ostatné procesy k činnosti. Pri nepreemptívnom multitaskingu o prideľovaní procesoru akoby „rozhodujú“ všetky procesy. &lt;br /&gt;
&lt;br /&gt;
K prepnutiu dochádza, keď to práve vykonávaný proces dovolí. Iný proces teda danú úlohu nemôže prerušiť. Až vtedy, keď proces „uzná za vhodné“ že už môže odovzdať riadenie, procesor je pridelený ďalšiemu procesu. Nevýhodou nepreemptívneho multitaskingu je možné zrútenie sa systému v prípade zacyklenia niektorej z úloh. Vtedy je jediným riešením len zásah zvonku ( reštart ).&lt;br /&gt;
Multithreading je súčasné vykonávanie viacerých častí jednotlivého programu. Vnútorná realizácia je podobná ako u multitaskingu.&lt;br /&gt;
Multiprocessoring je schopnosť OS využívať viacero procesorov a medzi ne rozdeľovať vykonávanie viacerých úloh, resp. časti jednotlivej úlohy.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzájomné súvislosti modulov jadra a procesov OS.jpg|framed|center]]&lt;br /&gt;
&lt;br /&gt;
Obr. 2 Vzájomné súvislosti modulov jadra a procesov operačného systému umožňujúceho multitasking   [1]&lt;br /&gt;
&lt;br /&gt;
Orientovaný graf na obr. 2 znázorňuje vzájomnú súvislosť medzi modulmi jadra. Na danom grafe je vidieť, že modul VOLANIE_SLUŽIEB zabezpečuje prístup k modulom BDOS a ČASOVÝ_MODUL. Následne modul BIOS využíva modul SYNCHRONIZÁCIA_PROCESOV a ten využíva moduly INFORMÁCIE O_PROCESOCH a PRIDELOVANIE_PROCESORU. Daný graf dôrazňuje ako modul VOLANIE_SLUŽIEB slúži pre viacej procesov súčastne.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_HTTP&amp;diff=3865</id>
		<title>Protokol HTTP</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_HTTP&amp;diff=3865"/>
		<updated>2010-04-27T13:13:43Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Programovanie]][[Kategória:Algoritmy]]&lt;br /&gt;
                                &lt;br /&gt;
==HTTP==&lt;br /&gt;
Hypertext transfer protocol. Je to primárna metóda prepravovania informácií na world wide webe.&lt;br /&gt;
&lt;br /&gt;
===Ako funguje HTTP===&lt;br /&gt;
&lt;br /&gt;
Môžeme si to predstaviť ako rozhovor medzi klientom a serverom. Klient niečo chce a server mu to dá.&lt;br /&gt;
&lt;br /&gt;
Klient – najčastejšie je to internetový prehliadač(ale môže to byť aj iný program)&lt;br /&gt;
 &lt;br /&gt;
HTTP Server – program bežiaci v serverovne na nejakom PC.( Najpoužívanejším http serverom je program Apache).&lt;br /&gt;
&lt;br /&gt;
HTTP protokol je jazyk  ktorým komunikujú 2 programy.&lt;br /&gt;
&lt;br /&gt;
Klient chce nejakú stránku – pripojí sa na server a požiada ho o URL stránky. &lt;br /&gt;
&lt;br /&gt;
===Verzie HTTP protokolov===&lt;br /&gt;
&lt;br /&gt;
'''HTTP 0.9''' - prvá verzia používaná od roku 1990, dnes sa už nepoužívadotaz: iba metóda GET, bez dodatočných (meta) informácií.&lt;br /&gt;
*odpoveď: požadovaný dokument, takisto bez dodatočných informácií &lt;br /&gt;
*po prenesení odpovede sa spojenie ukončí &lt;br /&gt;
&lt;br /&gt;
'''HTTP 1.0''' - definovaný v RCF 1945 z roku 1996 - mnoho rozšírení od predchádzajúcej verzie; spätne kompatibilný.&lt;br /&gt;
*Dotaz: pridané metódy POST a HEAD voliteľné ďalšie hlavičky v upravenom formáte MIME (napr. k dotazu: Date, Authorization, From, If-Modified-Since, Referer, User-Agent; k telu dotazu: Content-Encoding, Content-Length) taktiež bolo pridané voliteľné telo dotazu (entity body). &lt;br /&gt;
*odpoveď: pridaná hlavička informácia o stave (status) odpovedi. &lt;br /&gt;
Voliteľné ďalšie hlavičky v upravenom formáte MIME [5] (napr. k odpovedi: Date, Location, WWW-Authenticate; k telu odpovedi: Content-Encoding, Content-Length). Voliteľné telo odpovedi (entity body). &lt;br /&gt;
&lt;br /&gt;
'''HTTP 1.1''' - definovaný v RFC 2616 z roku 1999, dnes najčastejšie používaný. Dopĺňa možnosti HTTP/1.0 (hierarchické proxy, kešovanie, trvalé spojenia, virtuálne servery), spätne kompatibilný.&lt;br /&gt;
*dotaz: pridané metódy OPTIONS, PUT, DELETE, TRACE, CONNECT (ktoré sú zriedka používané).&lt;br /&gt;
Takmer dvojnásobný počet hlavičiek oproti HTTP/1.0 &lt;br /&gt;
&lt;br /&gt;
===Príklad HTTP komunikácie===&lt;br /&gt;
&lt;br /&gt;
Uživateľ si chce pozrieť napr. túto stránku: http://phobos.endofinternet.net&lt;br /&gt;
#Uživateľ zadá toto URL do prehliadača(Klient)&lt;br /&gt;
#Klient si vyhodnotí doménu, cez DNS si zistí aké IP adresy si má žiadať&lt;br /&gt;
#Cez TCP protokol naviaže spojenie so serverom na zistenej IP adrese. Až teraz začína http komunikácia.&lt;br /&gt;
#Prehliadač potom pošle na server HTTP volanie:&lt;br /&gt;
#*Get http-protokol.html HTTP/1.1&lt;br /&gt;
#*Host: www.phobos.endofinternet.net &lt;br /&gt;
#*Prázdny riadok&lt;br /&gt;
&lt;br /&gt;
GET je najčastejšia http metóda, kt. znamená „Daj mi toto“.... V tomto prípade chce dostať súbor, kt. sa na serveri vyskytuje v umiestnení http-protokol.html. A Chce to dostať v potokole vo verzii 1.1.&lt;br /&gt;
&lt;br /&gt;
===Druhy žiadostí HTTP===&lt;br /&gt;
&lt;br /&gt;
*GET Zďaleka najbežnejší typ žiadosti. Žiada o zdroj uvedením jeho URL&lt;br /&gt;
&lt;br /&gt;
*POST Podobne ako GET, okrem toho, že je pridané telo správy zvyčajne obsahujúce dvojice kľúč-hodnota z HTML formulára.&lt;br /&gt;
&lt;br /&gt;
*PUT Používa sa na Upload súborov na špecifikované URL na webserveri.&lt;br /&gt;
&lt;br /&gt;
*DELETE Zriedka implementované. Zmazanie zdroja.&lt;br /&gt;
&lt;br /&gt;
*HEAD Podobné GET, okrem toho, že sa nepožaduje telo správy, iba hlavičky. Používa sa na získavanie metainformácií o dokumente.&lt;br /&gt;
&lt;br /&gt;
*TRACE Odošle kópiu obdržanej požiadavky späť odosielateľovi, takže klient môže zistiť, čo na požiadavke menia alebo pridávajú &lt;br /&gt;
servery, ktorými táto prechádza.&lt;br /&gt;
&lt;br /&gt;
*OPTIONS Vracia HTTP metódy, ktoré daný webserver podporuje. Je možné použiť na otestovanie funkcionality servera.&lt;br /&gt;
&lt;br /&gt;
*CONNECT Zriedka implementované, na použitie s proxy serverom, ktorý sa môže zmeniť na SSL tunel.&lt;br /&gt;
&lt;br /&gt;
===Typy odpovedí serveru===&lt;br /&gt;
&lt;br /&gt;
Keď server dostane GET požiadavku, môže odpovedať v zásade tromi spôsobmi:&lt;br /&gt;
#vrátiť požadovaný dokument (kód 200)&lt;br /&gt;
#povedať, že požadovaný dokument je niekde inde (kód začína trojkou)&lt;br /&gt;
#oznámiť problém (kód začína štvorkou nebo päťkou)&lt;br /&gt;
Každý presný typ odpovede je pre jednoduchosť číslovaný trojmiestnym kódom.&lt;br /&gt;
&lt;br /&gt;
*''Je to inde -- 301 moved permanently, 302 moved temporarily'' &lt;br /&gt;
&lt;br /&gt;
Stavové kódy začínajúce trojkou znamenajú, že dokument je inde, alebo že nastala nejaká podobná chyba. Na presmerovanie sa používajú dva kódy, 301 a 302. Kód 301 znamená trvalé presunutie (moved permanently), kód 302 znamená dočasné presunutie (moved temporarily nebo taktiež found)&lt;br /&gt;
&lt;br /&gt;
*''Nezmenené -- 304 not modified'' &lt;br /&gt;
&lt;br /&gt;
Pri validácii kešovaných stránok posiela prehliadač požiadavku s http hlavičkou if-modified-since, ktorá znamená, že dokument chcem, &amp;quot;pokým sa zmenil&amp;quot; od určitej doby. Server takúto otázku vyhodnotí, a pokým sa dokument nezmenil, povie kódom 304, že sa nezmenil, a skončí. Ak sa dokument zmenil, posiela normálna odpoveď 200 OK a pripojí zmenený dokument.&lt;br /&gt;
&lt;br /&gt;
*''Nenájdené -- 404 not found'' &lt;br /&gt;
&lt;br /&gt;
Stavové kódy začínajúce štvorkou znamenajú, že požiadavka nie je v poriadku.Najpopulárnejšia a možno najčastejšia chyba je situácia, keď klient žiada o niečo, čo na serveri nie je. Potom server odpovie stavovým kódom 404 nenájdené.&lt;br /&gt;
&lt;br /&gt;
*''Nemáte oprávnenie -- 403 forbidden'' &lt;br /&gt;
&lt;br /&gt;
S touto odpoveďou sa môžete stretnúť, keď sa snažíte dostať niekam, kam nemáte prístup. Asi najčastejšie sa objavuje u požiadavke na výpis adresáre, ktorý nemá dovolené sa vypisovať.&lt;br /&gt;
&lt;br /&gt;
*''Chyba serveru -- 500 internal server error''&lt;br /&gt;
&lt;br /&gt;
Požiadavky začínajúce päťkou signalizujú problém na serveri. Asi najčastejší odpoveď je 500 Internal server error, teda &amp;quot;vnútorná chyba serveru&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
===Príklad hlavičky===&lt;br /&gt;
&lt;br /&gt;
'''Klientska požiadavka:'''&lt;br /&gt;
&lt;br /&gt;
*''GET / HTTP/1.1'' &lt;br /&gt;
*''Host: www.google.com'' &lt;br /&gt;
*''Prazdny riadok''&lt;br /&gt;
&lt;br /&gt;
'''Odpoveď servera:'''&lt;br /&gt;
&lt;br /&gt;
*''HTTP/1.1 200 OK Content-Length: 3059''&lt;br /&gt;
*''Server: GWS/2.0'' &lt;br /&gt;
*''Date: Sat, 11 Jan 2003 02:44:04 GMT'' &lt;br /&gt;
*''Content-Type: text/html'' &lt;br /&gt;
*''Cache-control: private'' &lt;br /&gt;
*''Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqyX9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com''&lt;br /&gt;
*''Connection: keep-alive'' &lt;br /&gt;
&lt;br /&gt;
===Kde môžeme HTTP vidieť===&lt;br /&gt;
&lt;br /&gt;
Ak by sme chceli http hlavičky sledovať máme 3 možnosti:&lt;br /&gt;
*Pomocou online snifferu &lt;br /&gt;
*Rozšírením prehliadača&lt;br /&gt;
*Vlastným programom&lt;br /&gt;
&lt;br /&gt;
====Online sniffer====&lt;br /&gt;
&lt;br /&gt;
Online sniffer je stránka na adrese napríklad http://web-sniffer.net. Na stránke zadáte URL stránky ktorú si chcete pozrieť. Následne sa vám hlavičky na stránke vypíšu.&lt;br /&gt;
Rozšírenie prehliadača: Môžeme napríklad použiť rozšírenie pre firefox LIVEHTTPHEADERS. &lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
&lt;br /&gt;
je zabezpečená verzia HTTP. Na ochranu dát používa SSL/TLS. Štandardný port služby je TCP port 443. HTTPS je vhodné aj v prípadoch, kedy je autentifikovaný len jeden koniec spojenia -- server. To je typický prípad pri HTTP transakciách cez Internet.&lt;br /&gt;
&lt;br /&gt;
===Transport Layer Security (TLS)===&lt;br /&gt;
&lt;br /&gt;
a jeho predchodca Secure Sockets Layer (SSL) sú protokoly, ktoré slúžia na šifrovanie dát. Protokoly slúžia na bezpečnú komunikáciu cez internet, hlavne na prehliadanie webu, odosielanie e-mailov, výmenu správ (tzv. instant messaging), alebo iné prenosy dát. Medzi TLS a SSL sú drobné rozdiely, ale v podstate protokol ostal ten istý.&lt;br /&gt;
TLS poskytuje koncobodovú autentifikáciu a súkromie v komunikácií cez internet používaním kryptografie. Typický len server je autorizovaný (to znamená že jeho identita je zaručená) zatiaľ čo klient ostáva neautorizovaný. To znamená, že koncový užívateľ, či &lt;br /&gt;
už jednotlivec alebo aplikácia, si môže byť istý s kým komunikuje.&lt;br /&gt;
&lt;br /&gt;
===Certifikáty===&lt;br /&gt;
&lt;br /&gt;
Najslabším miestom HTTPS protokolu je závislosť vysokej bezpečnosti na digitálne podpísaných certifikátoch . Bez podpísaného certifikátu je tento protokol zraniteľný útokom „Man in the middle“. V praxi sú však často používané nepodpísané certifikáty, čím sa stráca bezpečnosť, ktorú HTTPS ponúka.&lt;br /&gt;
&lt;br /&gt;
==Použitá literatúra==&lt;br /&gt;
&lt;br /&gt;
http://www.jakpsatweb.cz/server/http-protokol.html&lt;br /&gt;
&lt;br /&gt;
http://www.sk.wikipedia.org/wiki/HTTPS&lt;br /&gt;
&lt;br /&gt;
http://www.fi.muni.cz/~kas/p090/referaty/2005-jaro/st/xbabinc-www,http_servery.html&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_HTTP&amp;diff=3864</id>
		<title>Protokol HTTP</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_HTTP&amp;diff=3864"/>
		<updated>2010-04-27T13:10:02Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Programovanie]][[Kategória:Algoritmy]]&lt;br /&gt;
                                &lt;br /&gt;
==HTTP==&lt;br /&gt;
Hypertext transfer protocol. Je to primárna metóda prepravovania informácií na world wide webe.&lt;br /&gt;
&lt;br /&gt;
===Ako funguje HTTP===&lt;br /&gt;
&lt;br /&gt;
Môžeme si to predstaviť ako rozhovor medzi klientom a serverom. Klient niečo chce a server mu to dá.&lt;br /&gt;
&lt;br /&gt;
Klient – najčastejšie je to internetový prehliadač(ale môže to byť aj iný program)&lt;br /&gt;
 &lt;br /&gt;
HTTP Server – program bežiaci v serverovne na nejakom PC.( Najpoužívanejším http serverom je program Apache).&lt;br /&gt;
&lt;br /&gt;
HTTP protokol je jazyk  ktorým komunikujú 2 programy.&lt;br /&gt;
&lt;br /&gt;
Klient chce nejakú stránku – pripojí sa na server a požiada ho o URL stránky. &lt;br /&gt;
&lt;br /&gt;
===Verzie HTTP protokolov===&lt;br /&gt;
&lt;br /&gt;
'''HTTP 0.9''' - prvá verzia používaná od roku 1990, dnes sa už nepoužívadotaz: iba metóda GET, bez dodatočných (meta) informácií.&lt;br /&gt;
*odpoveď: požadovaný dokument, takisto bez dodatočných informácií &lt;br /&gt;
*po prenesení odpovede sa spojenie ukončí &lt;br /&gt;
&lt;br /&gt;
'''HTTP 1.0''' - definovaný v RCF 1945 z roku 1996 - mnoho rozšírení od predchádzajúcej verzie; spätne kompatibilný.&lt;br /&gt;
*Dotaz: pridané metódy POST a HEAD voliteľné ďalšie hlavičky v upravenom formáte MIME (napr. k dotazu: Date, Authorization, From, If-Modified-Since, Referer, User-Agent; k telu dotazu: Content-Encoding, Content-Length) taktiež bolo pridané voliteľné telo dotazu (entity body). &lt;br /&gt;
*odpoveď: pridaná hlavička informácia o stave (status) odpovedi. &lt;br /&gt;
Voliteľné ďalšie hlavičky v upravenom formáte MIME [5] (napr. k odpovedi: Date, Location, WWW-Authenticate; k telu odpovedi: Content-Encoding, Content-Length). Voliteľné telo odpovedi (entity body). &lt;br /&gt;
&lt;br /&gt;
'''HTTP 1.1''' - definovaný v RFC 2616 z roku 1999, dnes najčastejšie používaný. Dopĺňa možnosti HTTP/1.0 (hierarchické proxy, kešovanie, trvalé spojenia, virtuálne servery), spätne kompatibilný.&lt;br /&gt;
*dotaz: pridané metódy OPTIONS, PUT, DELETE, TRACE, CONNECT (ktoré sú zriedka používané).&lt;br /&gt;
Takmer dvojnásobný počet hlavičiek oproti HTTP/1.0 &lt;br /&gt;
&lt;br /&gt;
===Príklad HTTP komunikácie===&lt;br /&gt;
&lt;br /&gt;
Uživateľ si chce pozrieť napr. túto stránku: http://phobos.endofinternet.net&lt;br /&gt;
#Uživateľ zadá toto URL do prehliadača(Klient)&lt;br /&gt;
&lt;br /&gt;
#Klient si vyhodnotí doménu, cez DNS si zistí aké IP adresy si má žiadať&lt;br /&gt;
#Cez TCP protokol naviaže spojenie so serverom na zistenej IP adrese. Až teraz začína http komunikácia.&lt;br /&gt;
#Prehliadač potom pošle na server HTTP volanie:&lt;br /&gt;
#*Get http-protokol.html HTTP/1.1&lt;br /&gt;
#*Host: www.phobos.endofinternet.net &lt;br /&gt;
#*Prázdny riadok&lt;br /&gt;
&lt;br /&gt;
GET je najčastejšia http metóda, kt. znamená „Daj mi toto“.... V tomto prípade chce dostať súbor, kt. sa na serveri vyskytuje v umiestnení http-protokol.html. A Chce to dostať v potokole vo verzii 1.1.&lt;br /&gt;
&lt;br /&gt;
===Druhy žiadostí HTTP===&lt;br /&gt;
&lt;br /&gt;
*GET Zďaleka najbežnejší typ žiadosti. Žiada o zdroj uvedením jeho URL&lt;br /&gt;
&lt;br /&gt;
*POST Podobne ako GET, okrem toho, že je pridané telo správy zvyčajne obsahujúce dvojice kľúč-hodnota z HTML formulára.&lt;br /&gt;
&lt;br /&gt;
*PUT Používa sa na Upload súborov na špecifikované URL na webserveri.&lt;br /&gt;
&lt;br /&gt;
*DELETE Zriedka implementované. Zmazanie zdroja.&lt;br /&gt;
&lt;br /&gt;
*HEAD Podobné GET, okrem toho, že sa nepožaduje telo správy, iba hlavičky. Používa sa na získavanie metainformácií o dokumente.&lt;br /&gt;
&lt;br /&gt;
*TRACE Odošle kópiu obdržanej požiadavky späť odosielateľovi, takže klient môže zistiť, čo na požiadavke menia alebo pridávajú &lt;br /&gt;
servery, ktorými táto prechádza.&lt;br /&gt;
&lt;br /&gt;
*OPTIONS Vracia HTTP metódy, ktoré daný webserver podporuje. Je možné použiť na otestovanie funkcionality servera.&lt;br /&gt;
&lt;br /&gt;
*CONNECT Zriedka implementované, na použitie s proxy serverom, ktorý sa môže zmeniť na SSL tunel.&lt;br /&gt;
&lt;br /&gt;
===Typy odpovedí serveru===&lt;br /&gt;
&lt;br /&gt;
Keď server dostane GET požiadavku, môže odpovedať v zásade tromi spôsobmi:&lt;br /&gt;
#vrátiť požadovaný dokument (kód 200)&lt;br /&gt;
#povedať, že požadovaný dokument je niekde inde (kód začína trojkou)&lt;br /&gt;
#oznámiť problém (kód začína štvorkou nebo päťkou)&lt;br /&gt;
Každý presný typ odpovede je pre jednoduchosť číslovaný trojmiestnym kódom.&lt;br /&gt;
&lt;br /&gt;
*''Je to inde -- 301 moved permanently, 302 moved temporarily'' &lt;br /&gt;
&lt;br /&gt;
Stavové kódy začínajúce trojkou znamenajú, že dokument je inde, alebo že nastala nejaká podobná chyba. Na presmerovanie sa používajú dva kódy, 301 a 302. Kód 301 znamená trvalé presunutie (moved permanently), kód 302 znamená dočasné presunutie (moved temporarily nebo taktiež found)&lt;br /&gt;
&lt;br /&gt;
*''Nezmenené -- 304 not modified'' &lt;br /&gt;
&lt;br /&gt;
Pri validácii kešovaných stránok posiela prehliadač požiadavku s http hlavičkou if-modified-since, ktorá znamená, že dokument chcem, &amp;quot;pokým sa zmenil&amp;quot; od určitej doby. Server takúto otázku vyhodnotí, a pokým sa dokument nezmenil, povie kódom 304, že sa nezmenil, a skončí. Ak sa dokument zmenil, posiela normálna odpoveď 200 OK a pripojí zmenený dokument.&lt;br /&gt;
&lt;br /&gt;
*''Nenájdené -- 404 not found'' &lt;br /&gt;
&lt;br /&gt;
Stavové kódy začínajúce štvorkou znamenajú, že požiadavka nie je v poriadku.Najpopulárnejšia a možno najčastejšia chyba je situácia, keď klient žiada o niečo, čo na serveri nie je. Potom server odpovie stavovým kódom 404 nenájdené.&lt;br /&gt;
&lt;br /&gt;
*''Nemáte oprávnenie -- 403 forbidden'' &lt;br /&gt;
&lt;br /&gt;
S touto odpoveďou sa môžete stretnúť, keď sa snažíte dostať niekam, kam nemáte prístup. Asi najčastejšie sa objavuje u požiadavke na výpis adresáre, ktorý nemá dovolené sa vypisovať.&lt;br /&gt;
&lt;br /&gt;
*''Chyba serveru -- 500 internal server error''&lt;br /&gt;
&lt;br /&gt;
Požiadavky začínajúce päťkou signalizujú problém na serveri. Asi najčastejší odpoveď je 500 Internal server error, teda &amp;quot;vnútorná chyba serveru&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
===Príklad hlavičky===&lt;br /&gt;
&lt;br /&gt;
'''Klientska požiadavka:'''&lt;br /&gt;
&lt;br /&gt;
*''GET / HTTP/1.1'' &lt;br /&gt;
*''Host: www.google.com'' &lt;br /&gt;
*''Prazdny riadok''&lt;br /&gt;
&lt;br /&gt;
'''Odpoveď servera:'''&lt;br /&gt;
&lt;br /&gt;
*''HTTP/1.1 200 OK Content-Length: 3059''&lt;br /&gt;
*''Server: GWS/2.0'' &lt;br /&gt;
*''Date: Sat, 11 Jan 2003 02:44:04 GMT'' &lt;br /&gt;
*''Content-Type: text/html'' &lt;br /&gt;
*''Cache-control: private'' &lt;br /&gt;
*''Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqyX9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com''&lt;br /&gt;
*''Connection: keep-alive'' &lt;br /&gt;
&lt;br /&gt;
===Kde môžeme HTTP vidieť===&lt;br /&gt;
&lt;br /&gt;
Ak by sme chceli http hlavičky sledovať máme 3 možnosti:&lt;br /&gt;
*Pomocou online snifferu &lt;br /&gt;
*Rozšírením prehliadača&lt;br /&gt;
*Vlastným programom&lt;br /&gt;
&lt;br /&gt;
====Online sniffer====&lt;br /&gt;
&lt;br /&gt;
Online sniffer je stránka na adrese napríklad http://web-sniffer.net. Na stránke zadáte URL stránky ktorú si chcete pozrieť. Následne sa vám hlavičky na stránke vypíšu.&lt;br /&gt;
Rozšírenie prehliadača: Môžeme napríklad použiť rozšírenie pre firefox LIVEHTTPHEADERS. &lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
&lt;br /&gt;
je zabezpečená verzia HTTP. Na ochranu dát používa SSL/TLS. Štandardný port služby je TCP port 443. HTTPS je vhodné aj v prípadoch, kedy je autentifikovaný len jeden koniec spojenia -- server. To je typický prípad pri HTTP transakciách cez Internet.&lt;br /&gt;
&lt;br /&gt;
===Transport Layer Security (TLS)===&lt;br /&gt;
&lt;br /&gt;
a jeho predchodca Secure Sockets Layer (SSL) sú protokoly, ktoré slúžia na šifrovanie dát. Protokoly slúžia na bezpečnú komunikáciu cez internet, hlavne na prehliadanie webu, odosielanie e-mailov, výmenu správ (tzv. instant messaging), alebo iné prenosy dát. Medzi TLS a SSL sú drobné rozdiely, ale v podstate protokol ostal ten istý.&lt;br /&gt;
TLS poskytuje koncobodovú autentifikáciu a súkromie v komunikácií cez internet používaním kryptografie. Typický len server je autorizovaný (to znamená že jeho identita je zaručená) zatiaľ čo klient ostáva neautorizovaný. To znamená, že koncový užívateľ, či &lt;br /&gt;
už jednotlivec alebo aplikácia, si môže byť istý s kým komunikuje.&lt;br /&gt;
&lt;br /&gt;
===Certifikáty===&lt;br /&gt;
&lt;br /&gt;
Najslabším miestom HTTPS protokolu je závislosť vysokej bezpečnosti na digitálne podpísaných certifikátoch . Bez podpísaného certifikátu je tento protokol zraniteľný útokom „Man in the middle“. V praxi sú však často používané nepodpísané certifikáty, čím sa stráca bezpečnosť, ktorú HTTPS ponúka.&lt;br /&gt;
&lt;br /&gt;
==Použitá literatúra==&lt;br /&gt;
&lt;br /&gt;
http://www.jakpsatweb.cz/server/http-protokol.html&lt;br /&gt;
&lt;br /&gt;
http://www.sk.wikipedia.org/wiki/HTTPS&lt;br /&gt;
&lt;br /&gt;
http://www.fi.muni.cz/~kas/p090/referaty/2005-jaro/st/xbabinc-www,http_servery.html&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=3833</id>
		<title>Algoritmy numerickej aproximácie (riešené príklady)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=3833"/>
		<updated>2010-04-23T14:20:42Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: /* Vzorový výstup */&lt;/p&gt;
&lt;hr /&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 1==&lt;br /&gt;
Riešte problém aproximácie dát. K dispozícii máme ''n'' bodov v rovine (ich súradnice ''x'' a ''y''). Úlohou bude vypočítať rovnicu aproximujúcej krivky metódou najmenších štvorcov pre:&lt;br /&gt;
#Lineárnu aproximáciu v tvare &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Logaritmickú aproximáciu v tvare &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Exponenciálnu aproximáciu v tvare &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Mocninovú aproximáciu v tvare &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Porovnajte výsledok funkcie s výsledkom v tabuľkovom procesore, kde do (bodového) grafu zo vstupných bodov pridáte spojnicu trendu typu lineárna, resp. logaritmická, mocninová exponenciálna.&lt;br /&gt;
&lt;br /&gt;
===Vstupné údaje===&lt;br /&gt;
Ako vzorku vstupných bodov budeme uvažovať body z intervalu &amp;lt;1,8&amp;gt;.&lt;br /&gt;
''Pre generovanie vstupných hodnôt použijem funkciu &amp;lt;math&amp;gt;f(x)=x^4-exp(x)&amp;lt;/math&amp;gt;''&lt;br /&gt;
====Vzorový vstup====&lt;br /&gt;
{| class=datatable&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
!&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.50&lt;br /&gt;
|0.58&lt;br /&gt;
|-&lt;br /&gt;
|2.00&lt;br /&gt;
|8.61&lt;br /&gt;
|-&lt;br /&gt;
|3.00&lt;br /&gt;
|60.91&lt;br /&gt;
|-&lt;br /&gt;
|4.00&lt;br /&gt;
|201.40&lt;br /&gt;
|-&lt;br /&gt;
|5.00&lt;br /&gt;
|476.59&lt;br /&gt;
|-&lt;br /&gt;
|6.00&lt;br /&gt;
|892.57&lt;br /&gt;
|-&lt;br /&gt;
|7.00&lt;br /&gt;
|1304.37&lt;br /&gt;
|-&lt;br /&gt;
|8.00&lt;br /&gt;
|1115.04&lt;br /&gt;
|}&lt;br /&gt;
====Vzorový výstup====&lt;br /&gt;
#y = 213.634 x - 467.195&lt;br /&gt;
#y = 784.982 ln x - 572.83&lt;br /&gt;
#y = 0.9628 e^(1.054x)&lt;br /&gt;
#y = 0.2609 x^(4.443)&lt;br /&gt;
&lt;br /&gt;
===Analýza matematických vzťahov===&lt;br /&gt;
Poznámka: v tomto texte nie sú uvádzané celé postupy výpočtu, nakoľko v tomto predmete nie sú primárnym cieľom matematické dôkazy. Študent si postup môže ľahko overiť sám.&lt;br /&gt;
&lt;br /&gt;
====Lineárna aproximácia: y=ax+b====&lt;br /&gt;
Pre lineárnu aproximáciu platia vzťahy:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; b\sum\limits_{i=1}^{n}{{{x}_{i}}}+a\sum\limits_{i=1}^{n}{{{x}^{2}}_{i}}=\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}} \\ &lt;br /&gt;
 &amp;amp; nb+a\sum\limits_{i=1}^{n}{{{x}_{i}}}=\sum\limits_{i=1}^{n}{{{y}_{i}}} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čo môžeme pomocou maticového zápisu zapísať nasledovne:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Logaritmická  aproximácia: &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;====&lt;br /&gt;
Hľadáme najlepšiu aproximáciu pre logaritmickú rovnicu:  &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;. Postup výpočtu je rovnaký ako v prvom prípade.&lt;br /&gt;
Jediná zmena v riešení je tá, že os x je v logaritmickej mierke. Dostávame teda sústavu 2 rovníc:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}} &amp;amp; \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exponenciálna  aproximácia: &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt; si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{e}^{ax}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{e}^{ax}} \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+\ln b\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+B \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opäť dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Mocnimová  aproximácia: &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;  si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{x}^{a}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{x}^{a}} \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+a\ln x\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=B+a\ln x \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}^{2}} &amp;amp; \sum\limits_{i=1}^{n}{\ln {{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešením je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Analýza programátorského riešenia===&lt;br /&gt;
====Návrh dátových štruktúr====&lt;br /&gt;
V úlohe budeme pracovať s bodmi v rovine, ktoré sú charakterizované x a y súradnicou. Preto si vytvoríme štruktúru Bod, ktorá bude takýto bod reprezentovať:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
V zadaní je úlohou vypočítať rovnicu najlepšie aproximujúcej krivky (lineárnej, logaritmickej, exponenciálnej alebo mocninovej). Tieto krivky sú charakterizované (okrem svojej matematickej funkcie, ktorú vyjadríme neskôr) koeficientami ''a'' a ''b''. Na to, aby sme rozlíšili o akú krivku ide, vytvorme si vymenovaný zoznam TYP_KRIVKY, ktorý bude ma 4 symbolické hodnoty:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Význam týchto skratiek si zadefinujme nasledovne:&lt;br /&gt;
*LIN - lineárna krivka (polynóm 1 stupňa) s rovnicou &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
*LOG - logaritmická krivka s rovnicou &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
*EXP - exponenciálna krivka s rovnicou &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
*MOC - mocninová krivka s rovnicou &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
Teraz si môžeme zadefinovať štruktúru Krivka ako trojicu: ''typ'' (TYP_KRIVKY), koeficient ''a''  a koeficient ''b''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Vytvoríme funkciu ''Krivka minSq(Bod *body, int n)'' kde v poli body sú vstupné údaje, n je počet bodov. Funkcia bude vracať dátovú struktúru typu Krivka, kde budú informácie o tvare aproximujúcej krivky.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq_lin(Bod *body, int n)&lt;br /&gt;
{  // y=a+bx&lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
    k.b=(sy-k.a*sx)/n;&lt;br /&gt;
    k.typ=LIN;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podobným spôsobom môžeme vytvoriť ďalšie 3 funkcie minSq_log, minSq_exp minSq_moc. Ukážeme si ale všeobecnejší tvar funkcie minSq, kde pridáme ďalší parameter, ktorý bude hovoriť aký typ aproximácie sa má vypočítať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
{  &lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0,slxly;&lt;br /&gt;
   double slx=0,slxx=0,sly=0,slxy=0,sxly=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         slx+=log(body[i].x);&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sly+=log(body[i].y);&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         slxy+=log(body[i].x) * body[i].y;&lt;br /&gt;
         sxly+=body[i].x * log(body[i].y);&lt;br /&gt;
         slxly+=log(body[i].x) *log(body[i].y);&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
         slxx+=log(body[i].x) * log(body[i].x);&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    switch(typ_proximacie)&lt;br /&gt;
    {&lt;br /&gt;
      case LIN:&lt;br /&gt;
          k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sy-k.a*sx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
          k.a=(n*slxy-sy*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sy-k.a*slx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
          k.a=(n*sxly-sly*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sly-k.a*sx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
          k.a=(n*slxly-sly*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sly-k.a*slx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
    }&lt;br /&gt;
    k.typ=typ_proximacie;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Použitie v programe====&lt;br /&gt;
Pre názornosť nebudeme v programe dáta načítavať z klávesnice, ale vstupné údaje budú zadané priamo v zdrojovom kóde. Modifikácia zdrojového kódu s načítaním vstupných hodnôt je jednoduchá a určite ju každý zvládne sám.&lt;br /&gt;
&lt;br /&gt;
V zdrojovom kóde pribudla ešte funkcia ''vypisRovnicuKrivky'', ktorá vypíše rovnicu krivky v čitateľnom tvare pre človeka. Vo výpise sú vynechané všetky funkcie, ktoré sú boli v tomto príklade vysvetlené a ich zdrojový kód bol napísaný skôr.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Bod {double x,y;};&lt;br /&gt;
enum TYP_KRIVKY{ LIN, LOG, EXP, MOC};&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
&lt;br /&gt;
void vypisRovnicuKrivky(Krivka k)&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;y=&amp;quot;;   &lt;br /&gt;
   switch(k.typ)&lt;br /&gt;
   {&lt;br /&gt;
      case LIN:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; ln x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; e^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x)&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; x^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; )&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
    }     &lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{  const int n=8;&lt;br /&gt;
   Bod body[n]={&lt;br /&gt;
      {1.50,0.58},&lt;br /&gt;
      {2.00,8.61},&lt;br /&gt;
      {3.00,60.91},&lt;br /&gt;
      {4.00,201.40},&lt;br /&gt;
      {5.00,476.59},&lt;br /&gt;
      {6.00,892.57},&lt;br /&gt;
      {7.00,1304.37},&lt;br /&gt;
      {8.00,1115.04}		&lt;br /&gt;
   }; &lt;br /&gt;
  Krivka Q;&lt;br /&gt;
  Q=minSq(body,n,EXP); // LOG, LIN, EXP&lt;br /&gt;
  vypisRovnicuKrivky(Q);&lt;br /&gt;
  getch();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Overenie vypočítaných hodnôt===&lt;br /&gt;
Na nasledujúcich obrázkoch sú vstupné body z príkladu znázornené v tabuľkovom procesore a je vypočítaná najlepšia aproximujúca krivka (MS Excel ju nazýva spojnica trendu).&lt;br /&gt;
&amp;lt;gallery heights=220px widths=400px perrow=2&amp;gt;&lt;br /&gt;
Súbor:min SQ lin.png&lt;br /&gt;
Súbor:min SQ log.png&lt;br /&gt;
Súbor:min SQ exp.png&lt;br /&gt;
Súbor:min SQ moc.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie 2==&lt;br /&gt;
Vytvorte funkciu, ktorá pre zadaná vstupy vypočíta všetky typy aproximácií (lineárnu, logaritmickú, exponenciálnu a mocninovú) a určí ktorá aproximácia je optimálna pre zadané vstupné body.&lt;br /&gt;
&lt;br /&gt;
===Analýza===&lt;br /&gt;
Pri vyhodnocovaní optimálnej aproximácie musíme vypočítať všetky možné aproximačné krivky a zvoliť kritérium voľby najlepšej aproximácie. Kritériom posudzovania môže byť hľadanie minimálych hodnôt:&lt;br /&gt;
*vzdialenosť uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*štvorce vzdialeností uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*plocha medziproximujúcou krivkou a interpolačným polynómom, ktorých prechádza cez uzlové body&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Vytvoríme funkciu ''Krivka najlepsiaAproximacia(Bod *body, int n)'', ktorá bude mať ako parameter pole štruktúr Bod reprezentujúce vstupné body. Návratová hodnota funkcie bude štruktúra typu ''Krivka''. Údaje tejto štruktúry budú obsahovať informácie o krivke, ktorá je vhodná ako aproximačná krivka pre takéto vstupné body.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=3783</id>
		<title>Algoritmy numerickej aproximácie (riešené príklady)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Algoritmy_numerickej_aproxim%C3%A1cie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=3783"/>
		<updated>2010-04-19T12:42:01Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&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 1==&lt;br /&gt;
Riešte problém aproximácie dát. K dispozícii máme ''n'' bodov v rovine (ich súradnice ''x'' a ''y''). Úlohou bude vypočítať rovnicu aproximujúcej krivky metódou najmenších štvorcov pre:&lt;br /&gt;
#Lineárnu aproximáciu v tvare &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Logaritmickú aproximáciu v tvare &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
#Exponenciálnu aproximáciu v tvare &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Mocninovú aproximáciu v tvare &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Porovnajte výsledok funkcie s výsledkom v tabuľkovom procesore, kde do (bodového) grafu zo vstupných bodov pridáte spojnicu trendu typu lineárna, resp. logaritmická, mocninová exponenciálna.&lt;br /&gt;
&lt;br /&gt;
===Vstupné údaje===&lt;br /&gt;
Ako vzorku vstupných bodov budeme uvažovať body z intervalu &amp;lt;1,8&amp;gt;.&lt;br /&gt;
''Pre generovanie vstupných hodnôt použijem funkciu &amp;lt;math&amp;gt;f(x)=x^4-exp(x)&amp;lt;/math&amp;gt;''&lt;br /&gt;
====Vzorový vstup====&lt;br /&gt;
{| class=datatable&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
!&amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.50&lt;br /&gt;
|0.58&lt;br /&gt;
|-&lt;br /&gt;
|2.00&lt;br /&gt;
|8.61&lt;br /&gt;
|-&lt;br /&gt;
|3.00&lt;br /&gt;
|60.91&lt;br /&gt;
|-&lt;br /&gt;
|4.00&lt;br /&gt;
|201.40&lt;br /&gt;
|-&lt;br /&gt;
|5.00&lt;br /&gt;
|476.59&lt;br /&gt;
|-&lt;br /&gt;
|6.00&lt;br /&gt;
|892.57&lt;br /&gt;
|-&lt;br /&gt;
|7.00&lt;br /&gt;
|1304.37&lt;br /&gt;
|-&lt;br /&gt;
|8.00&lt;br /&gt;
|1115.04&lt;br /&gt;
|}&lt;br /&gt;
====Vzorový výstup====&lt;br /&gt;
#y = 213.634 x - 467.195&lt;br /&gt;
#y = 784.982 ln x - 572.83&lt;br /&gt;
#y = 6.9628 e^(1.054x)&lt;br /&gt;
#y = 0.2609 x^(4.443)&lt;br /&gt;
&lt;br /&gt;
===Analýza matematických vzťahov===&lt;br /&gt;
Poznámka: v tomto texte nie sú uvádzané celé postupy výpočtu, nakoľko v tomto predmete nie sú primárnym cieľom matematické dôkazy. Študent si postup môže ľahko overiť sám.&lt;br /&gt;
&lt;br /&gt;
====Lineárna aproximácia: y=ax+b====&lt;br /&gt;
Pre lineárnu aproximáciu platia vzťahy:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; b\sum\limits_{i=1}^{n}{{{x}_{i}}}+a\sum\limits_{i=1}^{n}{{{x}^{2}}_{i}}=\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}} \\ &lt;br /&gt;
 &amp;amp; nb+a\sum\limits_{i=1}^{n}{{{x}_{i}}}=\sum\limits_{i=1}^{n}{{{y}_{i}}} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čo môžeme pomocou maticového zápisu zapísať nasledovne:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}{{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Logaritmická  aproximácia: &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;====&lt;br /&gt;
Hľadáme najlepšiu aproximáciu pre logaritmickú rovnicu:  &amp;lt;math&amp;gt;y=a*\ln x + b&amp;lt;/math&amp;gt;. Postup výpočtu je rovnaký ako v prvom prípade.&lt;br /&gt;
Jediná zmena v riešení je tá, že os x je v logaritmickej mierke. Dostávame teda sústavu 2 rovníc:&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}} &amp;amp; \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right)} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   b  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\left( \ln {{x}_{i}} \right){{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{{{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; b=\frac{\sum\limits_{i=1}^{n}{{{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exponenciálna  aproximácia: &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{e}^{ax}}&amp;lt;/math&amp;gt; si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{e}^{ax}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{e}^{ax}} \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+\ln b\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=ax+B \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opäť dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}^{2}}_{i}} &amp;amp; \sum\limits_{i=1}^{n}{{{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešenie tejto sústavy rovníc je:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{{{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{{{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{x_{i}^{2}}-{{\left( \sum\limits_{i=1}^{n}{{{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{{{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Mocnimová  aproximácia: &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;====&lt;br /&gt;
Rovnicu &amp;lt;math&amp;gt;y=b{{x}^{a}}&amp;lt;/math&amp;gt;  si upravíme tak, že ju zapíšeme v logaritmickom tvare:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; \ln y=\ln \left( b{{x}^{a}} \right) \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+\ln {{x}^{a}} \\ &lt;br /&gt;
 &amp;amp; \ln y=\ln b+a\ln x\,\,\left[ B=\ln b \right] \\ &lt;br /&gt;
 &amp;amp; \ln y=B+a\ln x \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dostávame sústavu 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}^{2}} &amp;amp; \sum\limits_{i=1}^{n}{\ln {{x}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} &amp;amp; n  \\&lt;br /&gt;
\end{matrix} \right]\cdot \left[ \begin{matrix}&lt;br /&gt;
   a  \\&lt;br /&gt;
   B  \\&lt;br /&gt;
\end{matrix} \right]=\left[ \begin{matrix}&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}  \\&lt;br /&gt;
   \sum\limits_{i=1}^{n}{\ln {{y}_{i}}}  \\&lt;br /&gt;
\end{matrix} \right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Riešením je:&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
  &amp;amp; a=\frac{n\sum\limits_{i=1}^{n}{\ln {{x}_{i}}\ln {{y}_{i}}}-\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}}{n\sum\limits_{i=1}^{n}{{{\left( \ln {{x}_{i}} \right)}^{2}}}-{{\left( \sum\limits_{i=1}^{n}{\ln {{x}_{i}}} \right)}^{2}}} \\ &lt;br /&gt;
 &amp;amp; B=\frac{\sum\limits_{i=1}^{n}{\ln {{y}_{i}}}-a\sum\limits_{i=1}^{n}{\ln {{x}_{i}}}}{n} \\ &lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde &amp;lt;math&amp;gt;B=\ln b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Analýza programátorského riešenia===&lt;br /&gt;
====Návrh dátových štruktúr====&lt;br /&gt;
V úlohe budeme pracovať s bodmi v rovine, ktoré sú charakterizované x a y súradnicou. Preto si vytvoríme štruktúru Bod, ktorá bude takýto bod reprezentovať:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Bod{&lt;br /&gt;
   double x,y;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
V zadaní je úlohou vypočítať rovnicu najlepšie aproximujúcej krivky (lineárnej, logaritmickej, exponenciálnej alebo mocninovej). Tieto krivky sú charakterizované (okrem svojej matematickej funkcie, ktorú vyjadríme neskôr) koeficientami ''a'' a ''b''. Na to, aby sme rozlíšili o akú krivku ide, vytvorme si vymenovaný zoznam TYP_KRIVKY, ktorý bude ma 4 symbolické hodnoty:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
enum TYP_KRIVKY{&lt;br /&gt;
   LIN, LOG, EXP, MOC&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Význam týchto skratiek si zadefinujme nasledovne:&lt;br /&gt;
*LIN - lineárna krivka (polynóm 1 stupňa) s rovnicou &amp;lt;math&amp;gt;y=ax+b&amp;lt;/math&amp;gt;&lt;br /&gt;
*LOG - logaritmická krivka s rovnicou &amp;lt;math&amp;gt;y=a \ln{x} + b&amp;lt;/math&amp;gt;&lt;br /&gt;
*EXP - exponenciálna krivka s rovnicou &amp;lt;math&amp;gt;y=b e^{ax}&amp;lt;/math&amp;gt;&lt;br /&gt;
*MOC - mocninová krivka s rovnicou &amp;lt;math&amp;gt;y=bx^a&amp;lt;/math&amp;gt;&lt;br /&gt;
Teraz si môžeme zadefinovať štruktúru Krivka ako trojicu: ''typ'' (TYP_KRIVKY), koeficient ''a''  a koeficient ''b''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Vytvoríme funkciu ''Krivka minSq(Bod *body, int n)'' kde v poli body sú vstupné údaje, n je počet bodov. Funkcia bude vracať dátovú struktúru typu Krivka, kde budú informácie o tvare aproximujúcej krivky.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq_lin(Bod *body, int n)&lt;br /&gt;
{  // y=a+bx&lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
    k.b=(sy-k.a*sx)/n;&lt;br /&gt;
    k.typ=LIN;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podobným spôsobom môžeme vytvoriť ďalšie 3 funkcie minSq_log, minSq_exp minSq_moc. Ukážeme si ale všeobecnejší tvar funkcie minSq, kde pridáme ďalší parameter, ktorý bude hovoriť aký typ aproximácie sa má vypočítať.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
{  &lt;br /&gt;
   double sx=0,sxx=0,sy=0,sxy=0,slxly;&lt;br /&gt;
   double slx=0,slxx=0,sly=0,slxy=0,sxly=0;&lt;br /&gt;
    for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {    sx+=body[i].x;&lt;br /&gt;
         slx+=log(body[i].x);&lt;br /&gt;
         sy+=body[i].y;&lt;br /&gt;
         sly+=log(body[i].y);&lt;br /&gt;
         sxy+=body[i].x * body[i].y;&lt;br /&gt;
         slxy+=log(body[i].x) * body[i].y;&lt;br /&gt;
         sxly+=body[i].x * log(body[i].y);&lt;br /&gt;
         slxly+=log(body[i].x) *log(body[i].y);&lt;br /&gt;
         sxx+=body[i].x * body[i].x;&lt;br /&gt;
         slxx+=log(body[i].x) * log(body[i].x);&lt;br /&gt;
    }&lt;br /&gt;
    Krivka k;&lt;br /&gt;
    switch(typ_proximacie)&lt;br /&gt;
    {&lt;br /&gt;
      case LIN:&lt;br /&gt;
          k.a=(n*sxy-sy*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sy-k.a*sx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
          k.a=(n*slxy-sy*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sy-k.a*slx)/n;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
          k.a=(n*sxly-sly*sx)/(n*sxx-sx*sx);&lt;br /&gt;
          k.b=(sly-k.a*sx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
          k.a=(n*slxly-sly*slx)/(n*slxx-slx*slx);&lt;br /&gt;
          k.b=(sly-k.a*slx)/n;&lt;br /&gt;
          k.b=exp(k.b);&lt;br /&gt;
          break;&lt;br /&gt;
    }&lt;br /&gt;
    k.typ=typ_proximacie;&lt;br /&gt;
    return k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Použitie v programe====&lt;br /&gt;
Pre názornosť nebudeme v programe dáta načítavať z klávesnice, ale vstupné údaje budú zadané priamo v zdrojovom kóde. Modifikácia zdrojového kódu s načítaním vstupných hodnôt je jednoduchá a určite ju každý zvládne sám.&lt;br /&gt;
&lt;br /&gt;
V zdrojovom kóde pribudla ešte funkcia ''vypisRovnicuKrivky'', ktorá vypíše rovnicu krivky v čitateľnom tvare pre človeka. Vo výpise sú vynechané všetky funkcie, ktoré sú boli v tomto príklade vysvetlené a ich zdrojový kód bol napísaný skôr.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Bod {double x,y;};&lt;br /&gt;
enum TYP_KRIVKY{ LIN, LOG, EXP, MOC};&lt;br /&gt;
struct Krivka{&lt;br /&gt;
   TYP_KRIVKY typ;&lt;br /&gt;
   double a,b;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//Krivka minSq(Bod *body, int n, TYP_KRIVKY typ_proximacie)&lt;br /&gt;
&lt;br /&gt;
void vypisRovnicuKrivky(Krivka k)&lt;br /&gt;
{&lt;br /&gt;
   cout&amp;lt;&amp;lt;&amp;quot;y=&amp;quot;;   &lt;br /&gt;
   switch(k.typ)&lt;br /&gt;
   {&lt;br /&gt;
      case LIN:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case LOG:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; ln x&amp;quot;;&lt;br /&gt;
           if(k.b&amp;gt;0) cout&amp;lt;&amp;lt;&amp;quot;+&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b;&lt;br /&gt;
          break;&lt;br /&gt;
      case EXP:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; e^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; x)&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
      case MOC:&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.b&amp;lt;&amp;lt;&amp;quot; x^(&amp;quot;;&lt;br /&gt;
           cout&amp;lt;&amp;lt;k.a&amp;lt;&amp;lt;&amp;quot; )&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
    }     &lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{  const int n=8;&lt;br /&gt;
   Bod body[n]={&lt;br /&gt;
      {1.50,0.58},&lt;br /&gt;
      {2.00,8.61},&lt;br /&gt;
      {3.00,60.91},&lt;br /&gt;
      {4.00,201.40},&lt;br /&gt;
      {5.00,476.59},&lt;br /&gt;
      {6.00,892.57},&lt;br /&gt;
      {7.00,1304.37},&lt;br /&gt;
      {8.00,1115.04}		&lt;br /&gt;
   }; &lt;br /&gt;
  Krivka Q;&lt;br /&gt;
  Q=minSq(body,n,EXP); // LOG, LIN, EXP&lt;br /&gt;
  vypisRovnicuKrivky(Q);&lt;br /&gt;
  getch();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Overenie vypočítaných hodnôt===&lt;br /&gt;
Na nasledujúcich obrázkoch sú vstupné body z príkladu znázornené v tabuľkovom procesore a je vypočítaná najlepšia aproximujúca krivka (MS Excel ju nazýva spojnica trendu).&lt;br /&gt;
&amp;lt;gallery heights=220px widths=400px perrow=2&amp;gt;&lt;br /&gt;
Súbor:min SQ lin.png&lt;br /&gt;
Súbor:min SQ log.png&lt;br /&gt;
Súbor:min SQ exp.png&lt;br /&gt;
Súbor:min SQ moc.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie 2==&lt;br /&gt;
Vytvorte funkciu, ktorá pre zadaná vstupy vypočíta všetky typy aproximácií (lineárnu, logaritmickú, exponenciálnu a mocninovú) a určí ktorá aproximácia je optimálna pre zadané vstupné body.&lt;br /&gt;
&lt;br /&gt;
===Analýza===&lt;br /&gt;
Pri vyhodnocovaní optimálnej aproximácie musíme vypočítať všetky možné aproximačné krivky a zvoliť kritérium voľby najlepšej aproximácie. Kritériom posudzovania môže byť hľadanie minimálych hodnôt:&lt;br /&gt;
*vzdialenosť uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*štvorce vzdialeností uzlových (vstupných) bodov od aproximujúcej krivky&lt;br /&gt;
*plocha medziproximujúcou krivkou a interpolačným polynómom, ktorých prechádza cez uzlové body&lt;br /&gt;
&lt;br /&gt;
===Riešenie v jazyku C===&lt;br /&gt;
Vytvoríme funkciu ''Krivka najlepsiaAproximacia(Bod *body, int n)'', ktorá bude mať ako parameter pole štruktúr Bod reprezentujúce vstupné body. Návratová hodnota funkcie bude štruktúra typu ''Krivka''. Údaje tejto štruktúry budú obsahovať informácie o krivke, ktorá je vhodná ako aproximačná krivka pre takéto vstupné body.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Probl%C3%A9m_batoha&amp;diff=3646</id>
		<title>Problém batoha</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Probl%C3%A9m_batoha&amp;diff=3646"/>
		<updated>2010-04-08T16:59:08Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Formulácia problému ==&lt;br /&gt;
&lt;br /&gt;
Zlodej, ktorý vylomil zámok na trezore, zistil, že je naplnený n vecami rôznych veľkostí a rôznej ceny. Na lup má ale len batoh kapacity k, problém batohu je práve nájsť takú kombináciu vecí z trezoru, aby sa mu zmestila do batoha a bola čo možno najcennejšia. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Riešenie problému ==&lt;br /&gt;
&lt;br /&gt;
Kľúčové pozorovanie, ktoré vedie k peknému riešeniu: Ak máme maximálne dosiahnuteľné ceny lupu pre všetky celočíselné kapacity batohu pomocou prvých k predmetov, ľahko spočítame maximálne ceny pre prvých k+1 predmetov. A to tak, že skúsime pridať k + 1 - vý predmet do batohu s k predmetmi a kapacitou nižšou o hmotnosť tohto predmetu. Predmet nepridáme, pokiaľ cena takého lupu nie je vyššia od ceny lupu z prvých k predmetov v batohu s rovnakou kapacitou. Prvý predmet je možné vložiť do batohu s kapacitou rovnou aspoň hmotnosti predmetu a cena lupu je maximálna možná. Pre ďalšie predmety to plynie z indukcie.&lt;br /&gt;
&lt;br /&gt;
Vytvoríme tabuľku, kde stĺpce budú popisovať cieľovú nosnosť (kapacitu) batohu, posledný stĺpec bude maximálna nosnosť. &lt;br /&gt;
Riadky budú označovať jednotlivé veci, ktoré môžeme do batohu vložiť. &lt;br /&gt;
Budeme potrebovať n + 1 riadkov, kde n je počet predmetov. Riadok navyše máme pre žiadny vložený predmet. Ďalej budeme potrebovať k + 1 stĺpcov, jeden stĺpec navyše je pre kapacitu batoha o veľkosti 0. &lt;br /&gt;
&lt;br /&gt;
Prvý stĺpec naplníme samými nulami, pretože to zodpovedá batohu s nulovou kapacitou. &lt;br /&gt;
Prvý riadok je taktiež naplnený nulami, zodpovedá to totiž batohu so žiadnym vloženým predmetom. &lt;br /&gt;
Tabuľku vypĺňame zľava doprava a zhora nadol. Do jednotlivých buniek vpisujeme hodnotu tak, že sa pozrieme na aktuálnu nosnosť batohu, potom na hmotnosť predmetu a jeho cenu a tiež sa musíme pozrieť na aktuálnu hodnotu vecí v batohu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Batoh1.jpg|framed|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- V uvedenom príklade začíname s batohom so žiadnym vloženým predmetom. Tým pádom hodnota batohu je nulová.&lt;br /&gt;
Pokračujeme ďalej druhým riadkom postupne v smere rastúcej kapacity.&lt;br /&gt;
Celý riadok môžeme zaplniť touto hodnotou (riadiac sa podľa vzorca, ktorý je uvedený). &lt;br /&gt;
- Prvý predmet má hmotnosť 1, teda sa vojde do batohu danej kapacity, čiže môžeme napísať, že cena takého batohu bude rovná cene predmetu.&lt;br /&gt;
Konkrétne, keď sa pozrieme na prvý predmet a nosnosť batohu 6. Váha prvého predmetu je 5 a jeho cena 10. Zistíme, akú cenu mal batoh s rovnakou kapacitou, ale bez tohto   predmetu a akú cenu by mal s kapacitou batohu nižšou o hmotnosť prvého predmetu s nultým predmetom a k tejto hodnote prirátame cenu prvého predmetu.&lt;br /&gt;
- Vidíme, že druhá hodnota je väčšia, tým pádom napíšeme do bunky číslo 24.&lt;br /&gt;
Takto postupne vypĺňame celú tabuľku. Výsledná hodnota je v pravom dolnom stĺpci.&lt;br /&gt;
&lt;br /&gt;
Označme W={w1,w2,..wn} ako sadu hmotností a V={v1,v2,..vn} ako sadu hodnôt predmetov. Nech k je cieľová kapacita, predstavujúca najväčšiu hmotnosť vecí, ktorú batoh dokáže uniesť. Riešením problému je:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzorec.jpg]]	 a     [[Súbor:Vzorec1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
T. j. riešenie s maximálnou hodnotou a minimálnou váhou. Množina {0,1} indikuje, či predmet je v batohu alebo nie.&lt;br /&gt;
Tento problém by sa dal riešiť rekurzívnou metódou. Táto metóda by bola ale veľmi neefektívna, lebo niektoré podproblémy by sa riešili viackrát.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Označme T[i][j] maximálnu cenu batohu s i predmetmi a nosnosťou o veľkosti j. Pri dynamickom programovaní teda využijeme tento vzorec:&lt;br /&gt;
 ak j – váhy[i-1] &amp;lt; 0, potom T[i][j] =T [i - 1][j],&lt;br /&gt;
 inak T[i][j] = max (T[i-1,j], hodnoty[i-1] + T[i-1,&lt;br /&gt;
 j - váhy[i-1] ), pričom hodnoty je pole hodnôt jednotlivých predmetov a váhy je pole váh jednotlivých predmetov.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Iné prístupy k riešeniu ==&lt;br /&gt;
&lt;br /&gt;
Greedy algoritmus: tento prístup spočíva v tom, že keďže zlodej je veľmi chamtivý (greedy), tak berie predmety v klesajúcom poradí podľa ich ceny. Skončí s batohom, ktorý nie je úplne zaplnený. To, že batoh nie je úplne zaplnený ešte neznamená, že riešenie nie je správne, ale v mnohých prípadoch je to hlavnou príčinou.&lt;br /&gt;
&lt;br /&gt;
Brute force: iný zlodej skúsil vypočítať všetky možnosti výberu vecí. Všetkých možností je ale 2n, takže zložitosť tohto algoritmu by bola exponenciálna. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zložitosť algoritmu ==&lt;br /&gt;
&lt;br /&gt;
Časová zložitosť algoritmu závisí od veľkosti tabuľky. &lt;br /&gt;
Máme tu 2 faktory: &lt;br /&gt;
n + 1 riadkov, kde n je počet predmetov a &lt;br /&gt;
k + 1 stĺpcov, kde k je maximálna kapacita batohu.&lt;br /&gt;
Čiže časová zložitosť tohto algoritmu je O(k*n).&lt;br /&gt;
Číslo k ale nie je konštanta, môže byť oveľa väčšie ako počet vecí, ktoré môžeme do batohu vložiť.&lt;br /&gt;
Tento algoritmus má teda zložitosť rovnú pseudo – polynomiálnemu času.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Využitie ==&lt;br /&gt;
&lt;br /&gt;
Tento problém sa využíval ako základ pre kryptografický systém (ktorý bol odvtedy prelomený). &lt;br /&gt;
Ďalej sa využíva pri problémoch, kde riešenie závisí na výbere nejakého počtu vecí, ktorých hodnota je maximálna (alebo minimálna), a ktorých váha je rovná cieľovej váhe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Program v jazyku C++ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 const n=3;&lt;br /&gt;
 void greedy(double M,double W[n],double C[n],double X[n])&lt;br /&gt;
 { double Z=M;&lt;br /&gt;
 int i;&lt;br /&gt;
 for (i=0; i&amp;lt;n; i++) {&lt;br /&gt;
 if(W[i]&amp;gt;Z)a&lt;br /&gt;
 break;&lt;br /&gt;
 X[i]=1;&lt;br /&gt;
 Z=Z-W[i];&lt;br /&gt;
 }&lt;br /&gt;
 if ((i&amp;lt;n))&lt;br /&gt;
 X[i]=Z/W[i];&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int main()&lt;br /&gt;
 {	&lt;br /&gt;
 double W[n]={10,12,16}, C[n]={60,70,80}, X[n]={0,0,0};	&lt;br /&gt;
 greedy(20,W,C,X);&lt;br /&gt;
 double p=0;&lt;br /&gt;
 for (int i=0 ;i&amp;lt;n; p+=X[i]*C[i],i++)&lt;br /&gt;
 cout&amp;lt;&amp;lt;i&amp;lt;&amp;lt;&amp;quot;\t&amp;quot;&amp;lt;&amp;lt;W[i]&amp;lt;&amp;lt;&amp;quot;\t&amp;quot;&amp;lt;&amp;lt;C[i]&amp;lt;&amp;lt;&amp;quot;\t&amp;quot;&amp;lt;&amp;lt;X[i]&amp;lt;&amp;lt;endl;&lt;br /&gt;
 cout&amp;lt;&amp;lt;&amp;quot;celkom:&amp;quot;&amp;lt;&amp;lt;p&amp;lt;&amp;lt;endl;&lt;br /&gt;
 system(&amp;quot;pause&amp;quot;); }&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3396</id>
		<title>Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3396"/>
		<updated>2010-04-06T21:45:49Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: /* Základné pojmy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Bc. Martin Hakala|&lt;br /&gt;
Ing. Peter Kvasnica, PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Diplomový projekt&lt;br /&gt;
|Mechatronika&lt;br /&gt;
}}&lt;br /&gt;
{{Praca_uvod|1|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|slovensky&lt;br /&gt;
|anglicky&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Základ programového prostredia, ktoré sa používa pri realizácii riadiacich úloh tvorí operačný systém. Vlastnosti a chovanie operačného systému určujú praktické možnosti výsledného riadenia a do značnej miery i algoritmy riadiacich aplikácií. Operačný systém dovoľuje spúšťať všetky programy, údaje prehľadne prenášať, uložiť, riadiť a zároveň „paralelne“ používať. Označenie operačný systém je teda súbor programov, ktorý umožňuje efektívnu obsluhu a použitie počítača na plnenie rôznych úloh. &lt;br /&gt;
Tato práca sa preto zaoberá zmapovaním súčasných operačných systémov a ich vzájomným porovnaním z pohľadu doby výpočtu vybraných úloh. V úvode práce opisujeme základnú stavbu a fungovanie operačného systému zo zameraním sa na priebeh jednotlivých procesov v operačnom systéme. Ako vzorku pre testovanie doby výpočtu danej úlohy sme vybrali šesť operačných systémov, ktoré patria v súčasnej dobe medzi najpoužívanejšie na našom trhu. Výsledky tejto práce preto môžu ovplyvniť rozhodovanie používateľa pri výbere operačného systému.&lt;br /&gt;
&lt;br /&gt;
=Operačný systém=&lt;br /&gt;
Operačný systém je najdôležitejší program počítača. Funguje ako prostredník medzi používateľmi a technickým vybavením ( hardvérom ) počítačového systému. Jeho hlavným cieľom je zabezpečiť prístup používateľov k programom a efektívne využívanie daného hardvéru. Architektúra operačného systému je vo všeobecnosti takáto  [3]:&lt;br /&gt;
*Správu procesov ( programy zavedené do pamäte na vykonanie ) - umožňuje vytváranie a ukončovanie procesov. Chráni CPU pred zahltením chybnými programami. &lt;br /&gt;
*Správu operačnej pamäte - zabezpečuje jej efektívne využívanie, kontroluje obsadenosť úsekov pamäte a voľné oblasti prideľuje procesom. Zabezpečuje ochranu pamäte jedného procesu pred ostatnými procesmi. &lt;br /&gt;
*Správu systému súborov sekundárnej pamäte - stará sa o ukladanie údajov, aby si používatelia navzájom nemenili údaje. Proces pokúšajúci sa zapisovať do súboru musí mať na zápis právo pridelené vlastníkom súboru, inak sa mu to nepodarí. &lt;br /&gt;
*Správa vstupno-výstupných zariadení - procesor poskytuje virtuálne ovládače vstupno-výstupných zariadení, ktoré zabezpečujú rovnaký prístup k rovnakým skupinám zariadení. &lt;br /&gt;
*Používateľské rozhranie - zabezpečuje komunikáciu používateľa s procesmi. Môže ísť o textové rozhranie, ktoré s používateľom komunikuje pomocou klávesnice a textu zobrazovaného na monitore a o grafické rozhranie. Grafické rozhranie je intuitívnejšie, používateľ nemusí poznať príkazy naspamäť, ale programy spúšťa i ovláda výberom z ponúk najrôznejších menu a ikôn. Grafická komunikácia s procesmi je často prehľadnejšia a informatívnejšia než textová. &lt;br /&gt;
*Podporu bezpečnosti a spoľahlivosti výpočtového systému - ochraňuje systém proti strate údajov pri výpadku napätia, proti neoprávnenej alebo neodbornej manipulácii, ktorá by mohla poškodiť programové produkty.&lt;br /&gt;
&lt;br /&gt;
==Architektúra operačného systému==&lt;br /&gt;
Vo všeobecnosti rozoznávame tieto súčasti operačného systému: &lt;br /&gt;
# '''Jadro''' ( výkonná časť ) operačného systému – sústava vzájomne prepojených a spolupracujúcich programových modulov nachádzajúcich sa v operačnej pamäti.&amp;lt;br /&amp;gt;Zaisťuje komunikáciu s hardwérom a poskytuje aplikáciám svoje služby, ako správu procesov, správu pamäte, podporu siete a pod.&amp;lt;br /&amp;gt;&lt;br /&gt;
# '''Monitor OS''' ( od slova monitorovať = sledovať ) – zabezpečuje komunikáciu systému s užívateľom.&lt;br /&gt;
# '''Ovládače''' ( drivers ) – obslužné programy vstupno-výstupných zariadení. Zvyčajne predstavujú rozhranie pre komunikáciu so zariadeniami prostredníctvom určitej počítačovej zbernice ku ktorej je pripojený hardvér. Toto rozhranie poskytuje príkazy na posielanie dát od a ku zariadeniu, a tak je nevyhnutné pre operačný systém a softvérové aplikácie. Ovládač je hardvérovo závislý počítačový program, ktorý je špecifický pre určitý OS. Umožňuje iným programom, pracovať transparentne s hardvérovým zariadením a zvyčajne poskytuje nevyhnutné spracúvanie prerušení. Na obr. 1 je znázornená zjednodušená schéma architektúry PC s vonkajšími zariadeniami, na ovládanie ktorých slúžia ovládače.&lt;br /&gt;
&lt;br /&gt;
OS má z hľadiska úrovne programov niekoľko vrstiev. Vrstva na najnižšej úrovni zaisťuje priamy styk s technickými prostriedkami osobného počítača. Táto vrstva sa nazýva BIOS. Služby BIOS-u používa samotné jadro operačného systému. Služby jadra operačného systému následne používajú rôzne nadstavby a hlavne aplikácie spúšťané pod operačným systémom. Často je užívateľské rozhranie vo forme nadstavby operačného systému. Spôsob, akým užívateľ zadáva pokyny pre operačný systém a v akej forme dostáva správy o výsledku prevedenia operácie, je označovaný ako užívateľské rozhranie. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zjednodušená schéma architektúry PC.jpg]]&lt;br /&gt;
&lt;br /&gt;
Obr. 1 Zjednodušená schéma architektúry PC   [6]&lt;br /&gt;
&lt;br /&gt;
==Základné pojmy==&lt;br /&gt;
Multitasking je vykonávanie viacerých úloh súčasne ( súbežné spracovanie ). Pri jednoprocesorových systémoch sa multitasking simuluje tak, že procesor striedavo vykonáva časti jednotlivých zadaných procesov, a navonok sa tvári, že sa vykonávajú súčasne. Je tomu tak preto, že prepínanie medzi procesmi sa vykonáva automaticky v krátkych časových intervaloch, napr. každú 1ms.  Multitasking sa delí na preemptívny a nepreemptívny. Preemptívny multitasking vnucuje procesom násilné prepínanie na základe údajov časovača. Vďaka tomu počítač nemožno zahltiť jednou aplikáciou, ktorá by nepripustila ostatné procesy k činnosti. Pri nepreemptívnom multitaskingu o prideľovaní procesoru akoby „rozhodujú“ všetky procesy. &lt;br /&gt;
&lt;br /&gt;
K prepnutiu dochádza, keď to práve vykonávaný proces dovolí. Iný proces teda danú úlohu nemôže prerušiť. Až vtedy, keď proces „uzná za vhodné“ že už môže odovzdať riadenie, procesor je pridelený ďalšiemu procesu. Nevýhodou nepreemptívneho multitaskingu je možné zrútenie sa systému v prípade zacyklenia niektorej z úloh. Vtedy je jediným riešením len zásah zvonku ( reštart ).&lt;br /&gt;
Multithreading je súčasné vykonávanie viacerých častí jednotlivého programu. Vnútorná realizácia je podobná ako u multitaskingu.&lt;br /&gt;
Multiprocessoring je schopnosť OS využívať viacero procesorov a medzi ne rozdeľovať vykonávanie viacerých úloh, resp. časti jednotlivej úlohy.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzájomné súvislosti modulov jadra a procesov OS.jpg]]&lt;br /&gt;
&lt;br /&gt;
Obr. 2 Vzájomné súvislosti modulov jadra a procesov operačného systému umožňujúceho multitasking   [1]&lt;br /&gt;
&lt;br /&gt;
Orientovaný graf na obr. 2 znázorňuje vzájomnú súvislosť medzi modulmi jadra. Na danom grafe je vidieť, že modul VOLANIE_SLUŽIEB zabezpečuje prístup k modulom BDOS a ČASOVÝ_MODUL. Následne modul BIOS využíva modul SYNCHRONIZÁCIA_PROCESOV a ten využíva moduly INFORMÁCIE O_PROCESOCH a PRIDELOVANIE_PROCESORU. Daný graf dôrazňuje ako modul VOLANIE_SLUŽIEB slúži pre viacej procesov súčastne.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3395</id>
		<title>Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3395"/>
		<updated>2010-04-06T21:45:35Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: /* Architektúra operačného systému */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Bc. Martin Hakala|&lt;br /&gt;
Ing. Peter Kvasnica, PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Diplomový projekt&lt;br /&gt;
|Mechatronika&lt;br /&gt;
}}&lt;br /&gt;
{{Praca_uvod|1|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|slovensky&lt;br /&gt;
|anglicky&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Základ programového prostredia, ktoré sa používa pri realizácii riadiacich úloh tvorí operačný systém. Vlastnosti a chovanie operačného systému určujú praktické možnosti výsledného riadenia a do značnej miery i algoritmy riadiacich aplikácií. Operačný systém dovoľuje spúšťať všetky programy, údaje prehľadne prenášať, uložiť, riadiť a zároveň „paralelne“ používať. Označenie operačný systém je teda súbor programov, ktorý umožňuje efektívnu obsluhu a použitie počítača na plnenie rôznych úloh. &lt;br /&gt;
Tato práca sa preto zaoberá zmapovaním súčasných operačných systémov a ich vzájomným porovnaním z pohľadu doby výpočtu vybraných úloh. V úvode práce opisujeme základnú stavbu a fungovanie operačného systému zo zameraním sa na priebeh jednotlivých procesov v operačnom systéme. Ako vzorku pre testovanie doby výpočtu danej úlohy sme vybrali šesť operačných systémov, ktoré patria v súčasnej dobe medzi najpoužívanejšie na našom trhu. Výsledky tejto práce preto môžu ovplyvniť rozhodovanie používateľa pri výbere operačného systému.&lt;br /&gt;
&lt;br /&gt;
=Operačný systém=&lt;br /&gt;
Operačný systém je najdôležitejší program počítača. Funguje ako prostredník medzi používateľmi a technickým vybavením ( hardvérom ) počítačového systému. Jeho hlavným cieľom je zabezpečiť prístup používateľov k programom a efektívne využívanie daného hardvéru. Architektúra operačného systému je vo všeobecnosti takáto  [3]:&lt;br /&gt;
*Správu procesov ( programy zavedené do pamäte na vykonanie ) - umožňuje vytváranie a ukončovanie procesov. Chráni CPU pred zahltením chybnými programami. &lt;br /&gt;
*Správu operačnej pamäte - zabezpečuje jej efektívne využívanie, kontroluje obsadenosť úsekov pamäte a voľné oblasti prideľuje procesom. Zabezpečuje ochranu pamäte jedného procesu pred ostatnými procesmi. &lt;br /&gt;
*Správu systému súborov sekundárnej pamäte - stará sa o ukladanie údajov, aby si používatelia navzájom nemenili údaje. Proces pokúšajúci sa zapisovať do súboru musí mať na zápis právo pridelené vlastníkom súboru, inak sa mu to nepodarí. &lt;br /&gt;
*Správa vstupno-výstupných zariadení - procesor poskytuje virtuálne ovládače vstupno-výstupných zariadení, ktoré zabezpečujú rovnaký prístup k rovnakým skupinám zariadení. &lt;br /&gt;
*Používateľské rozhranie - zabezpečuje komunikáciu používateľa s procesmi. Môže ísť o textové rozhranie, ktoré s používateľom komunikuje pomocou klávesnice a textu zobrazovaného na monitore a o grafické rozhranie. Grafické rozhranie je intuitívnejšie, používateľ nemusí poznať príkazy naspamäť, ale programy spúšťa i ovláda výberom z ponúk najrôznejších menu a ikôn. Grafická komunikácia s procesmi je často prehľadnejšia a informatívnejšia než textová. &lt;br /&gt;
*Podporu bezpečnosti a spoľahlivosti výpočtového systému - ochraňuje systém proti strate údajov pri výpadku napätia, proti neoprávnenej alebo neodbornej manipulácii, ktorá by mohla poškodiť programové produkty.&lt;br /&gt;
&lt;br /&gt;
==Architektúra operačného systému==&lt;br /&gt;
Vo všeobecnosti rozoznávame tieto súčasti operačného systému: &lt;br /&gt;
# '''Jadro''' ( výkonná časť ) operačného systému – sústava vzájomne prepojených a spolupracujúcich programových modulov nachádzajúcich sa v operačnej pamäti.&amp;lt;br /&amp;gt;Zaisťuje komunikáciu s hardwérom a poskytuje aplikáciám svoje služby, ako správu procesov, správu pamäte, podporu siete a pod.&amp;lt;br /&amp;gt;&lt;br /&gt;
# '''Monitor OS''' ( od slova monitorovať = sledovať ) – zabezpečuje komunikáciu systému s užívateľom.&lt;br /&gt;
# '''Ovládače''' ( drivers ) – obslužné programy vstupno-výstupných zariadení. Zvyčajne predstavujú rozhranie pre komunikáciu so zariadeniami prostredníctvom určitej počítačovej zbernice ku ktorej je pripojený hardvér. Toto rozhranie poskytuje príkazy na posielanie dát od a ku zariadeniu, a tak je nevyhnutné pre operačný systém a softvérové aplikácie. Ovládač je hardvérovo závislý počítačový program, ktorý je špecifický pre určitý OS. Umožňuje iným programom, pracovať transparentne s hardvérovým zariadením a zvyčajne poskytuje nevyhnutné spracúvanie prerušení. Na obr. 1 je znázornená zjednodušená schéma architektúry PC s vonkajšími zariadeniami, na ovládanie ktorých slúžia ovládače.&lt;br /&gt;
&lt;br /&gt;
OS má z hľadiska úrovne programov niekoľko vrstiev. Vrstva na najnižšej úrovni zaisťuje priamy styk s technickými prostriedkami osobného počítača. Táto vrstva sa nazýva BIOS. Služby BIOS-u používa samotné jadro operačného systému. Služby jadra operačného systému následne používajú rôzne nadstavby a hlavne aplikácie spúšťané pod operačným systémom. Často je užívateľské rozhranie vo forme nadstavby operačného systému. Spôsob, akým užívateľ zadáva pokyny pre operačný systém a v akej forme dostáva správy o výsledku prevedenia operácie, je označovaný ako užívateľské rozhranie. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zjednodušená schéma architektúry PC.jpg]]&lt;br /&gt;
&lt;br /&gt;
Obr. 1 Zjednodušená schéma architektúry PC   [6]&lt;br /&gt;
&lt;br /&gt;
==Základné pojmy==&lt;br /&gt;
Multitasking je vykonávanie viacerých úloh súčasne ( súbežné spracovanie ). Pri jednoprocesorových systémoch sa multitasking simuluje tak, že procesor striedavo vykonáva časti jednotlivých zadaných procesov, a navonok sa tvári, že sa vykonávajú súčasne. Je tomu tak preto, že prepínanie medzi procesmi sa vykonáva automaticky v krátkych časových intervaloch, napr. každú 1ms.  Multitasking sa delí na preemptívny a nepreemptívny. Preemptívny multitasking vnucuje procesom násilné prepínanie na základe údajov časovača. Vďaka tomu počítač nemožno zahltiť jednou aplikáciou, ktorá by nepripustila ostatné procesy k činnosti. Pri nepreemptívnom multitaskingu o prideľovaní procesoru akoby „rozhodujú“ všetky procesy. &lt;br /&gt;
&lt;br /&gt;
K prepnutiu dochádza, keď to práve vykonávaný proces dovolí. Iný proces teda danú úlohu nemôže prerušiť. Až vtedy, keď proces „uzná za vhodné“ že už môže odovzdať riadenie, procesor je pridelený ďalšiemu procesu. Nevýhodou nepreemptívneho multitaskingu je možné zrútenie sa systému v prípade zacyklenia niektorej z úloh. Vtedy je jediným riešením len zásah zvonku ( reštart ).&lt;br /&gt;
Multithreading je súčasné vykonávanie viacerých častí jednotlivého programu. Vnútorná realizácia je podobná ako u multitaskingu.&lt;br /&gt;
Multiprocessoring je schopnosť OS využívať viacero procesorov a medzi ne rozdeľovať vykonávanie viacerých úloh, resp. časti jednotlivej úlohy.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzájomné súvislosti modulov jadra a procesov OS.jpg]]&lt;br /&gt;
Obr. 2 Vzájomné súvislosti modulov jadra a procesov operačného systému umožňujúceho multitasking   [1]&lt;br /&gt;
&lt;br /&gt;
Orientovaný graf na obr. 2 znázorňuje vzájomnú súvislosť medzi modulmi jadra. Na danom grafe je vidieť, že modul VOLANIE_SLUŽIEB zabezpečuje prístup k modulom BDOS a ČASOVÝ_MODUL. Následne modul BIOS využíva modul SYNCHRONIZÁCIA_PROCESOV a ten využíva moduly INFORMÁCIE O_PROCESOCH a PRIDELOVANIE_PROCESORU. Daný graf dôrazňuje ako modul VOLANIE_SLUŽIEB slúži pre viacej procesov súčastne.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3394</id>
		<title>Proces v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3394"/>
		<updated>2010-04-06T21:44:57Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: /* Stav procesu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
==Proces v operačnom systéme==&lt;br /&gt;
Proces je program, ktorý sa práve vykonáva. Je to aktívna, dynamická entita na rozdiel od ( textu ) programu, ktorý je statickou, pasívnou entitou. Vykonávanie sa označuje ako sekvenčne - v každom časovom okamihu sa vykonáva jedna inštrukcia daného procesu a po jej ukončení sa prejde na ďalšiu, alebo sa začne vykonávať iný proces. V danom čase procesu zodpovedá presne jeden program, ale danému programu môže zodpovedať viacero vykonávaných procesov, napr. viacerí používatelia pracujú s textovým editorom, spustili jediný program ( v pamäti sa nachádza iba raz ), ale ide o desať samostatných procesov.&lt;br /&gt;
&lt;br /&gt;
Proces pozostáva z:&lt;br /&gt;
&lt;br /&gt;
# kódu ( textu ) programu - tzv. kódový segment&lt;br /&gt;
# hodnoty registrov ( napr. hodnota registra IP určuje, kde sa vykonávanie nachádza v texte programu )&lt;br /&gt;
# dát procesu:&lt;br /&gt;
#* a)globálne dáta - prístupné všetkým procedúram programu &lt;br /&gt;
#* b)zásobník(y) - implementuje postupnosť volaní jednotlivých procedúr ( call stack )&lt;br /&gt;
#* c)hromada ( heap ) - implementuje dynamicky prideľované a vracané dáta&lt;br /&gt;
# stavu procesu - aktivita vykonávaná procesom&lt;br /&gt;
Presný súhrn týchto charakteristík určuje proces v OS.&lt;br /&gt;
&lt;br /&gt;
==Stav procesu ==&lt;br /&gt;
Proces sa počas vykonávania nachádza v rôznych stavoch, ktoré určujú prípustné operácie s procesom a reakcie procesu na ne. Stavy môžeme popísať konečným automatom, pričom každý OS sa líši v presnej množine stavov procesov a povolených operáciách ( prechodoch ), takže nasledovné rozdelenie možných stavov je zovšeobecnené:&lt;br /&gt;
&lt;br /&gt;
# novovytvorený proces ( NEW ) - tento proces sa práve vytvoril, ale ešte nebol priradený k CPU – neprevzal riadenie . Procesy sú vytvárané inými procesmi: proces - rodič vytvorí proces - potomka. Táto činnosť sa vykonáva systémom vytvor proces ( presný mechanizmus sa líši systém od systému ). Procesy vytvárajú strom, ktorého koreň vzniká pri štarte OS. Keď sa vytvorí potomok môže rodič pokračovať v činnosti, alebo počká na ukončenie potomka. Medzi rodičom a potomkom OS umožňuje zdieľanie zdrojov, ak o to rodič požiada ( napr. potomok môže dostať prístup k otvoreným súborom rodiča ).&lt;br /&gt;
# ležiaci proces ( RUNNING ) - proces, ktorý sa práve vykonáva na CPU. V modernom multiprocesovom OS býva proces po uplynutí určitého času ( časové kvantum ) násilne prevedený zo stavu bežiaci do stavu pripravený, aby aj iné procesy mohli byť vykonávané.&lt;br /&gt;
# pripravený proces ( READY ) - proces, ktorý by sa mohol vykonávať, ale práve nie je priradený k CPU. OS by mal zabezpečiť naplánovanie takéhoto procesu, t.j. jeho priradenie k CPU v dohľadnom čase - toto je základná idea time sharingu.&lt;br /&gt;
# čakajúci proces ( WAITING ) - proces, ktorý sa ( dočasne ) nemôže vykonávať, lebo čaká na výskyt udalosti. Udalosť sa väčšinou ohlasuje formou prerušenia alebo iným vnútorným mechanizmom OS. Príčiny čakania sú rôznorodé:&amp;lt;br /&amp;gt;&lt;br /&gt;
#* čakanie na dokončenie V/V. Proces čaká vo fronte daného V/V  zariadenia, fronty sú organizované pomocou PCB. Po ukončení   V/V nastane prerušenie, počas jeho spracovania proces prejde do stavu pripravený.&lt;br /&gt;
#* čakanie na komunikáciu s iným procesom. Toto sa môže implementovať rôzne, ale komunikáciu ( napr. príjem dát ) od druhého procesu spracuje OS, odovzdá prijaté dáta čakajúcemu procesu a prevedie ho do stavu pripravený&lt;br /&gt;
#* čakanie na uplynutie zadaného času ( sleep )&lt;br /&gt;
#* čakanie na potomka. Proces môže vytvoriť potomka a čakať na jeho ukončenie.&lt;br /&gt;
# ukončený proces ( TERMINATED ) - proces, ktorý vykonal svoje inštrukcie, alebo bol inak ukončený ( systémovým volaním abort ). Po  čase sa takýto proces odstráni zo systému. Po skončenom procese však zostáva určitá množina údajov, kde sú uložené napríklad výstupné údaje, o ktorých sa predpokladá, že môžu byť neskôr vyžadované inými procesmi na prečítanie. Ak tieto údaje ešte existujú, proces sa nachádza v stave tzv. zombie.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Životný cyklus daného procesu spočíva v prechodoch medzi rôznymi stavmi, ktoré je vidieť na obr. 3. Medzi typické prechody patria:&lt;br /&gt;
# &amp;lt;br /&amp;gt;pripustenie ( admit ) novovytvoreného procesu do stavu pripravený,&amp;lt;br /&amp;gt;&lt;br /&gt;
# naplánovanie ( dispatch ) pripraveného procesu: stane sa bežiacim, doteraz bežiaci proces prešiel do stavu pripravený ( čakajúci ),&lt;br /&gt;
# prerušenie bežiaceho procesu po uplynutí časového kvanta a prechod do stavu pripravený,&lt;br /&gt;
# čakanie ( systémové volanie wait ) na výskyt udalosti a prechod zo stavu bežiaci do stavu čakajúci,&lt;br /&gt;
# po výskyte udalosti ( systémové volanie signal ) prechod zo stavu čakajúci do stavu pripravený,&lt;br /&gt;
# ukončenie bežiaceho procesu systémovým volaním exit  a prechod do stavu ukončený.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Životný cyklus procesu.jpg]]&lt;br /&gt;
&lt;br /&gt;
Obr. 3  Životný cyklus procesu [3]&lt;br /&gt;
&lt;br /&gt;
==Informácie OS o procese==&lt;br /&gt;
OS drží všetky informácie o daných procesoch v špeciálnej dátovej štruktúre - tabuľke procesov ( PCB ). PCB pozostáva z položiek, kde každý proces má takýto záznam:&lt;br /&gt;
* identifikátor procesu  PID - celé číslo, jednoznačne určuje proces ( v danom časovom ( okamihu ),&lt;br /&gt;
* stav procesu ( bežiaci, pripravený, .... ),&lt;br /&gt;
* obsah registrov - tieto informácie sú aktuálne len pre nebežiace procesy,&lt;br /&gt;
* informácie pre plánovač procesov ( priorita, fronty, ... ),&lt;br /&gt;
* informácie o pridelenej pamäti,&lt;br /&gt;
* účtovnícke informácie ( čas strávený na CPU a pod. ),&lt;br /&gt;
* stav V/V ( napr. priradené zariadenia, otvorené súbory a pod.).&lt;br /&gt;
Tieto informácie sa niekedy súhrnne nazývajú kontextom procesu.&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
Pod pojmom plánovanie procesov rozumieme činnosť OS, ktorý vyberá medzi procesmi a určuje poradie ich vykonávania. &lt;br /&gt;
Rozlišujeme tri druhy plánovania procesov  [3]:&lt;br /&gt;
&lt;br /&gt;
# dlhodobé - ak je v systéme viacero úloh ( nie procesov, ale používateľom zadaných úloh, napr. výpočtových )  očakávajúcich spustenie, OS musí určiť, ktorá z nich sa má spustiť ako nasledujúca. Jedná sa vlastne o naplánovanie prechodu zo stavu novovytvorený do stavu čakajúci. V multiprocesovom OS ( interaktivita, time-sharing ) väčšinou nie je prípustné, aby zadaná úloha čakala na spustenie neurčitý čas, lebo systém je príliš zaťažený a preto OS musí oznámiť okamžite, že úloha sa spustiť nedá, &lt;br /&gt;
# strednodobé - súvisí s odkladaním úloh do operačnej pamäte ( swapping ),&lt;br /&gt;
# krátkodobé - určenie procesu ( spomedzi pripravených ), ktorý sa má stať bežiacim.&lt;br /&gt;
&lt;br /&gt;
Pri zmene bežiaceho procesu dochádza k multitaskingu. Multitasking trvá určitý čas ( mikrosekundu až milisekundu podľa architektúry a OS ) a preto sa pri návrhu OS musí dať pozor, aby CPU nestrávilo väčšinu svojej produktívnej činnosti pri prepínaní medzi procesmi ( ak dochádza k prepínaniu 100-krát za sekundu a jedno prepnutie trvá 1ms, tak 10% času CPU sa venuje len tejto činnosti ). Poznáme päť základných možností kedy nastáva preplánovanie bežiaceho procesu  [3]:&lt;br /&gt;
&lt;br /&gt;
# bežiaci proces prejde do stavu čakajúci, t.j. vzdá sa procesora, lebo chce počkať na udalosť,&lt;br /&gt;
# bežiaci proces sa iniciatívne vzdá procesora a prejde do stavu pripravený v niektorých OS ( MS Windows ) na to existuje volanie systému yield - vzdaj sa CPU ( daj šancu iným ),&lt;br /&gt;
# bežiaci proces sa ukončí,&lt;br /&gt;
# bežiaci proces dočasne odovzdá riadenie OS počas spracovania prerušenia,&lt;br /&gt;
# niektorý z čakajúcich procesov prejde do stavu pripravený.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:%C5%BDivotn%C3%BD_cyklus_procesu.jpg&amp;diff=3393</id>
		<title>Súbor:Životný cyklus procesu.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:%C5%BDivotn%C3%BD_cyklus_procesu.jpg&amp;diff=3393"/>
		<updated>2010-04-06T21:44:17Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vz%C3%A1jomn%C3%A9_s%C3%BAvislosti_modulov_jadra_a_procesov_OS.jpg&amp;diff=3392</id>
		<title>Súbor:Vzájomné súvislosti modulov jadra a procesov OS.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Vz%C3%A1jomn%C3%A9_s%C3%BAvislosti_modulov_jadra_a_procesov_OS.jpg&amp;diff=3392"/>
		<updated>2010-04-06T21:43:49Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zjednodu%C5%A1en%C3%A1_sch%C3%A9ma_architekt%C3%BAry_PC.jpg&amp;diff=3391</id>
		<title>Súbor:Zjednodušená schéma architektúry PC.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zjednodu%C5%A1en%C3%A1_sch%C3%A9ma_architekt%C3%BAry_PC.jpg&amp;diff=3391"/>
		<updated>2010-04-06T21:41:38Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3390</id>
		<title>Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3390"/>
		<updated>2010-04-06T21:22:29Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Bc. Martin Hakala|&lt;br /&gt;
Ing. Peter Kvasnica, PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Diplomový projekt&lt;br /&gt;
|Mechatronika&lt;br /&gt;
}}&lt;br /&gt;
{{Praca_uvod|1|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|slovensky&lt;br /&gt;
|anglicky&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Základ programového prostredia, ktoré sa používa pri realizácii riadiacich úloh tvorí operačný systém. Vlastnosti a chovanie operačného systému určujú praktické možnosti výsledného riadenia a do značnej miery i algoritmy riadiacich aplikácií. Operačný systém dovoľuje spúšťať všetky programy, údaje prehľadne prenášať, uložiť, riadiť a zároveň „paralelne“ používať. Označenie operačný systém je teda súbor programov, ktorý umožňuje efektívnu obsluhu a použitie počítača na plnenie rôznych úloh. &lt;br /&gt;
Tato práca sa preto zaoberá zmapovaním súčasných operačných systémov a ich vzájomným porovnaním z pohľadu doby výpočtu vybraných úloh. V úvode práce opisujeme základnú stavbu a fungovanie operačného systému zo zameraním sa na priebeh jednotlivých procesov v operačnom systéme. Ako vzorku pre testovanie doby výpočtu danej úlohy sme vybrali šesť operačných systémov, ktoré patria v súčasnej dobe medzi najpoužívanejšie na našom trhu. Výsledky tejto práce preto môžu ovplyvniť rozhodovanie používateľa pri výbere operačného systému.&lt;br /&gt;
&lt;br /&gt;
=Operačný systém=&lt;br /&gt;
Operačný systém je najdôležitejší program počítača. Funguje ako prostredník medzi používateľmi a technickým vybavením ( hardvérom ) počítačového systému. Jeho hlavným cieľom je zabezpečiť prístup používateľov k programom a efektívne využívanie daného hardvéru. Architektúra operačného systému je vo všeobecnosti takáto  [3]:&lt;br /&gt;
*Správu procesov ( programy zavedené do pamäte na vykonanie ) - umožňuje vytváranie a ukončovanie procesov. Chráni CPU pred zahltením chybnými programami. &lt;br /&gt;
*Správu operačnej pamäte - zabezpečuje jej efektívne využívanie, kontroluje obsadenosť úsekov pamäte a voľné oblasti prideľuje procesom. Zabezpečuje ochranu pamäte jedného procesu pred ostatnými procesmi. &lt;br /&gt;
*Správu systému súborov sekundárnej pamäte - stará sa o ukladanie údajov, aby si používatelia navzájom nemenili údaje. Proces pokúšajúci sa zapisovať do súboru musí mať na zápis právo pridelené vlastníkom súboru, inak sa mu to nepodarí. &lt;br /&gt;
*Správa vstupno-výstupných zariadení - procesor poskytuje virtuálne ovládače vstupno-výstupných zariadení, ktoré zabezpečujú rovnaký prístup k rovnakým skupinám zariadení. &lt;br /&gt;
*Používateľské rozhranie - zabezpečuje komunikáciu používateľa s procesmi. Môže ísť o textové rozhranie, ktoré s používateľom komunikuje pomocou klávesnice a textu zobrazovaného na monitore a o grafické rozhranie. Grafické rozhranie je intuitívnejšie, používateľ nemusí poznať príkazy naspamäť, ale programy spúšťa i ovláda výberom z ponúk najrôznejších menu a ikôn. Grafická komunikácia s procesmi je často prehľadnejšia a informatívnejšia než textová. &lt;br /&gt;
*Podporu bezpečnosti a spoľahlivosti výpočtového systému - ochraňuje systém proti strate údajov pri výpadku napätia, proti neoprávnenej alebo neodbornej manipulácii, ktorá by mohla poškodiť programové produkty.&lt;br /&gt;
&lt;br /&gt;
==Architektúra operačného systému==&lt;br /&gt;
Vo všeobecnosti rozoznávame tieto súčasti operačného systému: &lt;br /&gt;
# '''Jadro''' ( výkonná časť ) operačného systému – sústava vzájomne prepojených a spolupracujúcich programových modulov nachádzajúcich sa v operačnej pamäti.&amp;lt;br /&amp;gt;Zaisťuje komunikáciu s hardwérom a poskytuje aplikáciám svoje služby, ako správu procesov, správu pamäte, podporu siete a pod.&amp;lt;br /&amp;gt;&lt;br /&gt;
# '''Monitor OS''' ( od slova monitorovať = sledovať ) – zabezpečuje komunikáciu systému s užívateľom.&lt;br /&gt;
# '''Ovládače''' ( drivers ) – obslužné programy vstupno-výstupných zariadení. Zvyčajne predstavujú rozhranie pre komunikáciu so zariadeniami prostredníctvom určitej počítačovej zbernice ku ktorej je pripojený hardvér. Toto rozhranie poskytuje príkazy na posielanie dát od a ku zariadeniu, a tak je nevyhnutné pre operačný systém a softvérové aplikácie. Ovládač je hardvérovo závislý počítačový program, ktorý je špecifický pre určitý OS. Umožňuje iným programom, pracovať transparentne s hardvérovým zariadením a zvyčajne poskytuje nevyhnutné spracúvanie prerušení. Na obr. 1 je znázornená zjednodušená schéma architektúry PC s vonkajšími zariadeniami, na ovládanie ktorých slúžia ovládače.&lt;br /&gt;
&lt;br /&gt;
OS má z hľadiska úrovne programov niekoľko vrstiev. Vrstva na najnižšej úrovni zaisťuje priamy styk s technickými prostriedkami osobného počítača. Táto vrstva sa nazýva BIOS. Služby BIOS-u používa samotné jadro operačného systému. Služby jadra operačného systému následne používajú rôzne nadstavby a hlavne aplikácie spúšťané pod operačným systémom. Často je užívateľské rozhranie vo forme nadstavby operačného systému. Spôsob, akým užívateľ zadáva pokyny pre operačný systém a v akej forme dostáva správy o výsledku prevedenia operácie, je označovaný ako užívateľské rozhranie. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zjednodušená schéma architektúry PC.jpg]]&lt;br /&gt;
Obr. 1 Zjednodušená schéma architektúry PC   [6]&lt;br /&gt;
&lt;br /&gt;
==Základné pojmy==&lt;br /&gt;
Multitasking je vykonávanie viacerých úloh súčasne ( súbežné spracovanie ). Pri jednoprocesorových systémoch sa multitasking simuluje tak, že procesor striedavo vykonáva časti jednotlivých zadaných procesov, a navonok sa tvári, že sa vykonávajú súčasne. Je tomu tak preto, že prepínanie medzi procesmi sa vykonáva automaticky v krátkych časových intervaloch, napr. každú 1ms.  Multitasking sa delí na preemptívny a nepreemptívny. Preemptívny multitasking vnucuje procesom násilné prepínanie na základe údajov časovača. Vďaka tomu počítač nemožno zahltiť jednou aplikáciou, ktorá by nepripustila ostatné procesy k činnosti. Pri nepreemptívnom multitaskingu o prideľovaní procesoru akoby „rozhodujú“ všetky procesy. &lt;br /&gt;
&lt;br /&gt;
K prepnutiu dochádza, keď to práve vykonávaný proces dovolí. Iný proces teda danú úlohu nemôže prerušiť. Až vtedy, keď proces „uzná za vhodné“ že už môže odovzdať riadenie, procesor je pridelený ďalšiemu procesu. Nevýhodou nepreemptívneho multitaskingu je možné zrútenie sa systému v prípade zacyklenia niektorej z úloh. Vtedy je jediným riešením len zásah zvonku ( reštart ).&lt;br /&gt;
Multithreading je súčasné vykonávanie viacerých častí jednotlivého programu. Vnútorná realizácia je podobná ako u multitaskingu.&lt;br /&gt;
Multiprocessoring je schopnosť OS využívať viacero procesorov a medzi ne rozdeľovať vykonávanie viacerých úloh, resp. časti jednotlivej úlohy.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzájomné súvislosti modulov jadra a procesov OS.jpg]]&lt;br /&gt;
Obr. 2 Vzájomné súvislosti modulov jadra a procesov operačného systému umožňujúceho multitasking   [1]&lt;br /&gt;
&lt;br /&gt;
Orientovaný graf na obr. 2 znázorňuje vzájomnú súvislosť medzi modulmi jadra. Na danom grafe je vidieť, že modul VOLANIE_SLUŽIEB zabezpečuje prístup k modulom BDOS a ČASOVÝ_MODUL. Následne modul BIOS využíva modul SYNCHRONIZÁCIA_PROCESOV a ten využíva moduly INFORMÁCIE O_PROCESOCH a PRIDELOVANIE_PROCESORU. Daný graf dôrazňuje ako modul VOLANIE_SLUŽIEB slúži pre viacej procesov súčastne.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3386</id>
		<title>Proces v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3386"/>
		<updated>2010-04-06T21:16:22Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
==Proces v operačnom systéme==&lt;br /&gt;
Proces je program, ktorý sa práve vykonáva. Je to aktívna, dynamická entita na rozdiel od ( textu ) programu, ktorý je statickou, pasívnou entitou. Vykonávanie sa označuje ako sekvenčne - v každom časovom okamihu sa vykonáva jedna inštrukcia daného procesu a po jej ukončení sa prejde na ďalšiu, alebo sa začne vykonávať iný proces. V danom čase procesu zodpovedá presne jeden program, ale danému programu môže zodpovedať viacero vykonávaných procesov, napr. viacerí používatelia pracujú s textovým editorom, spustili jediný program ( v pamäti sa nachádza iba raz ), ale ide o desať samostatných procesov.&lt;br /&gt;
&lt;br /&gt;
Proces pozostáva z:&lt;br /&gt;
&lt;br /&gt;
# kódu ( textu ) programu - tzv. kódový segment&lt;br /&gt;
# hodnoty registrov ( napr. hodnota registra IP určuje, kde sa vykonávanie nachádza v texte programu )&lt;br /&gt;
# dát procesu:&lt;br /&gt;
#* a)globálne dáta - prístupné všetkým procedúram programu &lt;br /&gt;
#* b)zásobník(y) - implementuje postupnosť volaní jednotlivých procedúr ( call stack )&lt;br /&gt;
#* c)hromada ( heap ) - implementuje dynamicky prideľované a vracané dáta&lt;br /&gt;
# stavu procesu - aktivita vykonávaná procesom&lt;br /&gt;
Presný súhrn týchto charakteristík určuje proces v OS.&lt;br /&gt;
&lt;br /&gt;
==Stav procesu ==&lt;br /&gt;
Proces sa počas vykonávania nachádza v rôznych stavoch, ktoré určujú prípustné operácie s procesom a reakcie procesu na ne. Stavy môžeme popísať konečným automatom, pričom každý OS sa líši v presnej množine stavov procesov a povolených operáciách ( prechodoch ), takže nasledovné rozdelenie možných stavov je zovšeobecnené:&lt;br /&gt;
&lt;br /&gt;
# novovytvorený proces ( NEW ) - tento proces sa práve vytvoril, ale ešte nebol priradený k CPU – neprevzal riadenie . Procesy sú vytvárané inými procesmi: proces - rodič vytvorí proces - potomka. Táto činnosť sa vykonáva systémom vytvor proces ( presný mechanizmus sa líši systém od systému ). Procesy vytvárajú strom, ktorého koreň vzniká pri štarte OS. Keď sa vytvorí potomok môže rodič pokračovať v činnosti, alebo počká na ukončenie potomka. Medzi rodičom a potomkom OS umožňuje zdieľanie zdrojov, ak o to rodič požiada ( napr. potomok môže dostať prístup k otvoreným súborom rodiča ).&lt;br /&gt;
# ležiaci proces ( RUNNING ) - proces, ktorý sa práve vykonáva na CPU. V modernom multiprocesovom OS býva proces po uplynutí určitého času ( časové kvantum ) násilne prevedený zo stavu bežiaci do stavu pripravený, aby aj iné procesy mohli byť vykonávané.&lt;br /&gt;
# pripravený proces ( READY ) - proces, ktorý by sa mohol vykonávať, ale práve nie je priradený k CPU. OS by mal zabezpečiť naplánovanie takéhoto procesu, t.j. jeho priradenie k CPU v dohľadnom čase - toto je základná idea time sharingu.&lt;br /&gt;
# čakajúci proces ( WAITING ) - proces, ktorý sa ( dočasne ) nemôže vykonávať, lebo čaká na výskyt udalosti. Udalosť sa väčšinou ohlasuje formou prerušenia alebo iným vnútorným mechanizmom OS. Príčiny čakania sú rôznorodé:&amp;lt;br /&amp;gt;&lt;br /&gt;
#* čakanie na dokončenie V/V. Proces čaká vo fronte daného V/V  zariadenia, fronty sú organizované pomocou PCB. Po ukončení   V/V nastane prerušenie, počas jeho spracovania proces prejde do stavu pripravený.&lt;br /&gt;
#* čakanie na komunikáciu s iným procesom. Toto sa môže implementovať rôzne, ale komunikáciu ( napr. príjem dát ) od druhého procesu spracuje OS, odovzdá prijaté dáta čakajúcemu procesu a prevedie ho do stavu pripravený&lt;br /&gt;
#* čakanie na uplynutie zadaného času ( sleep )&lt;br /&gt;
#* čakanie na potomka. Proces môže vytvoriť potomka a čakať na jeho ukončenie.&lt;br /&gt;
# ukončený proces ( TERMINATED ) - proces, ktorý vykonal svoje inštrukcie, alebo bol inak ukončený ( systémovým volaním abort ). Po  čase sa takýto proces odstráni zo systému. Po skončenom procese však zostáva určitá množina údajov, kde sú uložené napríklad výstupné údaje, o ktorých sa predpokladá, že môžu byť neskôr vyžadované inými procesmi na prečítanie. Ak tieto údaje ešte existujú, proces sa nachádza v stave tzv. zombie.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Životný cyklus daného procesu spočíva v prechodoch medzi rôznymi stavmi, ktoré je vidieť na obr. 3. Medzi typické prechody patria:&lt;br /&gt;
# &amp;lt;br /&amp;gt;pripustenie ( admit ) novovytvoreného procesu do stavu pripravený,&amp;lt;br /&amp;gt;&lt;br /&gt;
# naplánovanie ( dispatch ) pripraveného procesu: stane sa bežiacim, doteraz bežiaci proces prešiel do stavu pripravený ( čakajúci ),&lt;br /&gt;
# prerušenie bežiaceho procesu po uplynutí časového kvanta a prechod do stavu pripravený,&lt;br /&gt;
# čakanie ( systémové volanie wait ) na výskyt udalosti a prechod zo stavu bežiaci do stavu čakajúci,&lt;br /&gt;
# po výskyte udalosti ( systémové volanie signal ) prechod zo stavu čakajúci do stavu pripravený,&lt;br /&gt;
# ukončenie bežiaceho procesu systémovým volaním exit  a prechod do stavu ukončený.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Životný cyklus procesu.jpg]]&lt;br /&gt;
Obr. 3  Životný cyklus procesu [3]&lt;br /&gt;
&lt;br /&gt;
==Informácie OS o procese==&lt;br /&gt;
OS drží všetky informácie o daných procesoch v špeciálnej dátovej štruktúre - tabuľke procesov ( PCB ). PCB pozostáva z položiek, kde každý proces má takýto záznam:&lt;br /&gt;
* identifikátor procesu  PID - celé číslo, jednoznačne určuje proces ( v danom časovom ( okamihu ),&lt;br /&gt;
* stav procesu ( bežiaci, pripravený, .... ),&lt;br /&gt;
* obsah registrov - tieto informácie sú aktuálne len pre nebežiace procesy,&lt;br /&gt;
* informácie pre plánovač procesov ( priorita, fronty, ... ),&lt;br /&gt;
* informácie o pridelenej pamäti,&lt;br /&gt;
* účtovnícke informácie ( čas strávený na CPU a pod. ),&lt;br /&gt;
* stav V/V ( napr. priradené zariadenia, otvorené súbory a pod.).&lt;br /&gt;
Tieto informácie sa niekedy súhrnne nazývajú kontextom procesu.&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
Pod pojmom plánovanie procesov rozumieme činnosť OS, ktorý vyberá medzi procesmi a určuje poradie ich vykonávania. &lt;br /&gt;
Rozlišujeme tri druhy plánovania procesov  [3]:&lt;br /&gt;
&lt;br /&gt;
# dlhodobé - ak je v systéme viacero úloh ( nie procesov, ale používateľom zadaných úloh, napr. výpočtových )  očakávajúcich spustenie, OS musí určiť, ktorá z nich sa má spustiť ako nasledujúca. Jedná sa vlastne o naplánovanie prechodu zo stavu novovytvorený do stavu čakajúci. V multiprocesovom OS ( interaktivita, time-sharing ) väčšinou nie je prípustné, aby zadaná úloha čakala na spustenie neurčitý čas, lebo systém je príliš zaťažený a preto OS musí oznámiť okamžite, že úloha sa spustiť nedá, &lt;br /&gt;
# strednodobé - súvisí s odkladaním úloh do operačnej pamäte ( swapping ),&lt;br /&gt;
# krátkodobé - určenie procesu ( spomedzi pripravených ), ktorý sa má stať bežiacim.&lt;br /&gt;
&lt;br /&gt;
Pri zmene bežiaceho procesu dochádza k multitaskingu. Multitasking trvá určitý čas ( mikrosekundu až milisekundu podľa architektúry a OS ) a preto sa pri návrhu OS musí dať pozor, aby CPU nestrávilo väčšinu svojej produktívnej činnosti pri prepínaní medzi procesmi ( ak dochádza k prepínaniu 100-krát za sekundu a jedno prepnutie trvá 1ms, tak 10% času CPU sa venuje len tejto činnosti ). Poznáme päť základných možností kedy nastáva preplánovanie bežiaceho procesu  [3]:&lt;br /&gt;
&lt;br /&gt;
# bežiaci proces prejde do stavu čakajúci, t.j. vzdá sa procesora, lebo chce počkať na udalosť,&lt;br /&gt;
# bežiaci proces sa iniciatívne vzdá procesora a prejde do stavu pripravený v niektorých OS ( MS Windows ) na to existuje volanie systému yield - vzdaj sa CPU ( daj šancu iným ),&lt;br /&gt;
# bežiaci proces sa ukončí,&lt;br /&gt;
# bežiaci proces dočasne odovzdá riadenie OS počas spracovania prerušenia,&lt;br /&gt;
# niektorý z čakajúcich procesov prejde do stavu pripravený.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3385</id>
		<title>Proces v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3385"/>
		<updated>2010-04-06T21:11:02Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
==Proces v operačnom systéme==&lt;br /&gt;
Proces je program, ktorý sa práve vykonáva. Je to aktívna, dynamická entita na rozdiel od ( textu ) programu, ktorý je statickou, pasívnou entitou. Vykonávanie sa označuje ako sekvenčne - v každom časovom okamihu sa vykonáva jedna inštrukcia daného procesu a po jej ukončení sa prejde na ďalšiu, alebo sa začne vykonávať iný proces. V danom čase procesu zodpovedá presne jeden program, ale danému programu môže zodpovedať viacero vykonávaných procesov, napr. viacerí používatelia pracujú s textovým editorom, spustili jediný program ( v pamäti sa nachádza iba raz ), ale ide o desať samostatných procesov.&lt;br /&gt;
&lt;br /&gt;
Proces pozostáva z:&lt;br /&gt;
&lt;br /&gt;
# kódu ( textu ) programu - tzv. kódový segment&lt;br /&gt;
# hodnoty registrov ( napr. hodnota registra IP určuje, kde sa vykonávanie nachádza v texte programu )&lt;br /&gt;
# dát procesu:&lt;br /&gt;
#* a)globálne dáta - prístupné všetkým procedúram programu &lt;br /&gt;
#* b)zásobník(y) - implementuje postupnosť volaní jednotlivých procedúr ( call stack )&lt;br /&gt;
#* c)hromada ( heap ) - implementuje dynamicky prideľované a vracané dáta&lt;br /&gt;
# stavu procesu - aktivita vykonávaná procesom&lt;br /&gt;
Presný súhrn týchto charakteristík určuje proces v OS.&lt;br /&gt;
&lt;br /&gt;
==Stav procesu ==&lt;br /&gt;
Proces sa počas vykonávania nachádza v rôznych stavoch, ktoré určujú prípustné operácie s procesom a reakcie procesu na ne. Stavy môžeme popísať konečným automatom, pričom každý OS sa líši v presnej množine stavov procesov a povolených operáciách ( prechodoch ), takže nasledovné rozdelenie možných stavov je zovšeobecnené:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;novovytvorený proces ( NEW ) - tento proces sa práve vytvoril, ale ešte nebol priradený k CPU – neprevzal riadenie . Procesy sú vytvárané inými procesmi: proces - rodič vytvorí proces - potomka. Táto činnosť sa vykonáva systémom vytvor proces ( presný mechanizmus sa líši systém od systému ). Procesy vytvárajú strom, ktorého koreň vzniká pri štarte OS. Keď sa vytvorí potomok môže rodič pokračovať v činnosti, alebo počká na ukončenie potomka. Medzi rodičom a potomkom OS umožňuje zdieľanie zdrojov, ak o to rodič požiada ( napr. potomok môže dostať prístup k otvoreným súborom rodiča ).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;bežiaci proces ( RUNNING ) - proces, ktorý sa práve vykonáva na CPU. V modernom multiprocesovom OS býva proces po uplynutí určitého času ( časové kvantum ) násilne prevedený zo stavu bežiaci do stavu pripravený, aby aj iné procesy mohli byť vykonávané.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;pripravený proces ( READY ) - proces, ktorý by sa mohol vykonávať, ale práve nie je priradený k CPU. OS by mal zabezpečiť naplánovanie takéhoto procesu, t.j. jeho priradenie k CPU v dohľadnom čase - toto je základná idea time sharingu.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;čakajúci proces ( WAITING ) - proces, ktorý sa ( dočasne ) nemôže vykonávať, lebo čaká na výskyt udalosti. Udalosť sa väčšinou ohlasuje formou prerušenia alebo iným vnútorným mechanizmom OS. Príčiny čakania sú rôznorodé:&amp;lt;br /&amp;gt;&lt;br /&gt;
#* čakanie na dokončenie V/V. Proces čaká vo fronte daného V/V  zariadenia, fronty sú organizované pomocou PCB. Po ukončení   V/V nastane prerušenie, počas jeho spracovania proces prejde do stavu pripravený.&lt;br /&gt;
#* čakanie na komunikáciu s iným procesom. Toto sa môže implementovať rôzne, ale komunikáciu ( napr. príjem dát ) od druhého procesu spracuje OS, odovzdá prijaté dáta čakajúcemu procesu a prevedie ho do stavu pripravený&lt;br /&gt;
#* čakanie na uplynutie zadaného času ( sleep )&lt;br /&gt;
#* čakanie na potomka. Proces môže vytvoriť potomka a čakať na jeho ukončenie.&lt;br /&gt;
&lt;br /&gt;
# ukončený proces ( TERMINATED ) - proces, ktorý vykonal svoje inštrukcie, alebo bol inak ukončený ( systémovým volaním abort ). Po  čase sa takýto proces odstráni zo systému. Po skončenom procese však zostáva určitá množina údajov, kde sú uložené napríklad výstupné údaje, o ktorých sa predpokladá, že môžu byť neskôr vyžadované inými procesmi na prečítanie. Ak tieto údaje ešte existujú, proces sa nachádza v stave tzv. zombie.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Životný cyklus daného procesu spočíva v prechodoch medzi rôznymi stavmi, ktoré je vidieť na obr. 3. Medzi typické prechody patria:&lt;br /&gt;
# &amp;lt;br /&amp;gt;pripustenie ( admit ) novovytvoreného procesu do stavu pripravený,&amp;lt;br /&amp;gt;&lt;br /&gt;
# naplánovanie ( dispatch ) pripraveného procesu: stane sa bežiacim, doteraz bežiaci proces prešiel do stavu pripravený ( čakajúci ),&lt;br /&gt;
# prerušenie bežiaceho procesu po uplynutí časového kvanta a prechod do stavu pripravený,&lt;br /&gt;
# čakanie ( systémové volanie wait ) na výskyt udalosti a prechod zo stavu bežiaci do stavu čakajúci,&lt;br /&gt;
# po výskyte udalosti ( systémové volanie signal ) prechod zo stavu čakajúci do stavu pripravený,&lt;br /&gt;
# ukončenie bežiaceho procesu systémovým volaním exit  a prechod do stavu ukončený.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Životný cyklus procesu.jpg]]&lt;br /&gt;
Obr. 3  Životný cyklus procesu [3]&lt;br /&gt;
&lt;br /&gt;
==Informácie OS o procese==&lt;br /&gt;
OS drží všetky informácie o daných procesoch v špeciálnej dátovej štruktúre - tabuľke procesov ( PCB ). PCB pozostáva z položiek, kde každý proces má takýto záznam:&lt;br /&gt;
# identifikátor procesu  PID - celé číslo, jednoznačne určuje proces ( v danom časovom ( okamihu ),&lt;br /&gt;
# stav procesu ( bežiaci, pripravený, .... ),&lt;br /&gt;
# obsah registrov - tieto informácie sú aktuálne len pre nebežiace procesy,&lt;br /&gt;
# informácie pre plánovač procesov ( priorita, fronty, ... ),&lt;br /&gt;
# informácie o pridelenej pamäti,&lt;br /&gt;
# účtovnícke informácie ( čas strávený na CPU a pod. ),&lt;br /&gt;
# stav V/V ( napr. priradené zariadenia, otvorené súbory a pod.).&lt;br /&gt;
Tieto informácie sa niekedy súhrnne nazývajú kontextom procesu.&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
Pod pojmom plánovanie procesov rozumieme činnosť OS, ktorý vyberá medzi procesmi a určuje poradie ich vykonávania. &lt;br /&gt;
Rozlišujeme tri druhy plánovania procesov  [3]:&lt;br /&gt;
&lt;br /&gt;
# dlhodobé - ak je v systéme viacero úloh ( nie procesov, ale používateľom zadaných úloh, napr. výpočtových )  očakávajúcich spustenie, OS musí určiť, ktorá z nich sa má spustiť ako nasledujúca. Jedná sa vlastne o naplánovanie prechodu zo stavu novovytvorený do stavu čakajúci. V multiprocesovom OS ( interaktivita, time-sharing ) väčšinou nie je prípustné, aby zadaná úloha čakala na spustenie neurčitý čas, lebo systém je príliš zaťažený a preto OS musí oznámiť okamžite, že úloha sa spustiť nedá, &lt;br /&gt;
# strednodobé - súvisí s odkladaním úloh do operačnej pamäte ( swapping ),&lt;br /&gt;
# krátkodobé - určenie procesu ( spomedzi pripravených ), ktorý sa má stať bežiacim.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3384</id>
		<title>Proces v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3384"/>
		<updated>2010-04-06T21:10:25Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
==Proces v operačnom systéme==&lt;br /&gt;
Proces je program, ktorý sa práve vykonáva. Je to aktívna, dynamická entita na rozdiel od ( textu ) programu, ktorý je statickou, pasívnou entitou. Vykonávanie sa označuje ako sekvenčne - v každom časovom okamihu sa vykonáva jedna inštrukcia daného procesu a po jej ukončení sa prejde na ďalšiu, alebo sa začne vykonávať iný proces. V danom čase procesu zodpovedá presne jeden program, ale danému programu môže zodpovedať viacero vykonávaných procesov, napr. viacerí používatelia pracujú s textovým editorom, spustili jediný program ( v pamäti sa nachádza iba raz ), ale ide o desať samostatných procesov.&lt;br /&gt;
&lt;br /&gt;
Proces pozostáva z:&lt;br /&gt;
&lt;br /&gt;
# kódu ( textu ) programu - tzv. kódový segment&lt;br /&gt;
# hodnoty registrov ( napr. hodnota registra IP určuje, kde sa vykonávanie nachádza v texte programu )&lt;br /&gt;
# dát procesu:&lt;br /&gt;
#* a)globálne dáta - prístupné všetkým procedúram programu &lt;br /&gt;
#* b)zásobník(y) - implementuje postupnosť volaní jednotlivých procedúr ( call stack )&lt;br /&gt;
#* c)hromada ( heap ) - implementuje dynamicky prideľované a vracané dáta&lt;br /&gt;
# stavu procesu - aktivita vykonávaná procesom&lt;br /&gt;
Presný súhrn týchto charakteristík určuje proces v OS.&lt;br /&gt;
&lt;br /&gt;
==Stav procesu ==&lt;br /&gt;
Proces sa počas vykonávania nachádza v rôznych stavoch, ktoré určujú prípustné operácie s procesom a reakcie procesu na ne. Stavy môžeme popísať konečným automatom, pričom každý OS sa líši v presnej množine stavov procesov a povolených operáciách ( prechodoch ), takže nasledovné rozdelenie možných stavov je zovšeobecnené:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;novovytvorený proces ( NEW ) - tento proces sa práve vytvoril, ale ešte nebol priradený k CPU – neprevzal riadenie . Procesy sú vytvárané inými procesmi: proces - rodič vytvorí proces - potomka. Táto činnosť sa vykonáva systémom vytvor proces ( presný mechanizmus sa líši systém od systému ). Procesy vytvárajú strom, ktorého koreň vzniká pri štarte OS. Keď sa vytvorí potomok môže rodič pokračovať v činnosti, alebo počká na ukončenie potomka. Medzi rodičom a potomkom OS umožňuje zdieľanie zdrojov, ak o to rodič požiada ( napr. potomok môže dostať prístup k otvoreným súborom rodiča ).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;bežiaci proces ( RUNNING ) - proces, ktorý sa práve vykonáva na CPU. V modernom multiprocesovom OS býva proces po uplynutí určitého času ( časové kvantum ) násilne prevedený zo stavu bežiaci do stavu pripravený, aby aj iné procesy mohli byť vykonávané.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;pripravený proces ( READY ) - proces, ktorý by sa mohol vykonávať, ale práve nie je priradený k CPU. OS by mal zabezpečiť naplánovanie takéhoto procesu, t.j. jeho priradenie k CPU v dohľadnom čase - toto je základná idea time sharingu.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;čakajúci proces ( WAITING ) - proces, ktorý sa ( dočasne ) nemôže vykonávať, lebo čaká na výskyt udalosti. Udalosť sa väčšinou ohlasuje formou prerušenia alebo iným vnútorným mechanizmom OS. Príčiny čakania sú rôznorodé:&amp;lt;br /&amp;gt;&lt;br /&gt;
#* čakanie na dokončenie V/V. Proces čaká vo fronte daného V/V  zariadenia, fronty sú organizované pomocou PCB. Po ukončení   V/V nastane prerušenie, počas jeho spracovania proces prejde do stavu pripravený.&lt;br /&gt;
#* čakanie na komunikáciu s iným procesom. Toto sa môže implementovať rôzne, ale komunikáciu ( napr. príjem dát ) od druhého procesu spracuje OS, odovzdá prijaté dáta čakajúcemu procesu a prevedie ho do stavu pripravený&lt;br /&gt;
#* čakanie na uplynutie zadaného času ( sleep )&lt;br /&gt;
#* čakanie na potomka. Proces môže vytvoriť potomka a čakať na jeho ukončenie.&lt;br /&gt;
&lt;br /&gt;
# ukončený proces ( TERMINATED ) - proces, ktorý vykonal svoje inštrukcie, alebo bol inak ukončený ( systémovým volaním abort ). Po  čase sa takýto proces odstráni zo systému. Po skončenom procese však zostáva určitá množina údajov, kde sú uložené napríklad výstupné údaje, o ktorých sa predpokladá, že môžu byť neskôr vyžadované inými procesmi na prečítanie. Ak tieto údaje ešte existujú, proces sa nachádza v stave tzv. zombie.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Životný cyklus daného procesu spočíva v prechodoch medzi rôznymi stavmi, ktoré je vidieť na obr. 3. Medzi typické prechody patria:&lt;br /&gt;
# &amp;lt;br /&amp;gt;pripustenie ( admit ) novovytvoreného procesu do stavu pripravený,&amp;lt;br /&amp;gt;&lt;br /&gt;
# naplánovanie ( dispatch ) pripraveného procesu: stane sa bežiacim, doteraz bežiaci proces prešiel do stavu pripravený ( čakajúci ),&lt;br /&gt;
# prerušenie bežiaceho procesu po uplynutí časového kvanta a prechod do stavu pripravený,&lt;br /&gt;
# čakanie ( systémové volanie wait ) na výskyt udalosti a prechod zo stavu bežiaci do stavu čakajúci,&lt;br /&gt;
# po výskyte udalosti ( systémové volanie signal ) prechod zo stavu čakajúci do stavu pripravený,&lt;br /&gt;
# ukončenie bežiaceho procesu systémovým volaním exit  a prechod do stavu ukončený.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Životný cyklus procesu.jpg]]&lt;br /&gt;
Obr. 3  Životný cyklus procesu [3]&lt;br /&gt;
&lt;br /&gt;
==Informácie OS o procese==&lt;br /&gt;
OS drží všetky informácie o daných procesoch v špeciálnej dátovej štruktúre - tabuľke procesov ( PCB ). PCB pozostáva z položiek, kde každý proces má takýto záznam:&lt;br /&gt;
# identifikátor procesu  PID - celé číslo, jednoznačne určuje proces ( v danom časovom ( okamihu ),&lt;br /&gt;
# stav procesu ( bežiaci, pripravený, .... ),&lt;br /&gt;
# obsah registrov - tieto informácie sú aktuálne len pre nebežiace procesy,&lt;br /&gt;
# informácie pre plánovač procesov ( priorita, fronty, ... ),&lt;br /&gt;
# informácie o pridelenej pamäti,&lt;br /&gt;
# účtovnícke informácie ( čas strávený na CPU a pod. ),&lt;br /&gt;
# stav V/V ( napr. priradené zariadenia, otvorené súbory a pod.).&lt;br /&gt;
Tieto informácie sa niekedy súhrnne nazývajú kontextom procesu.&lt;br /&gt;
&lt;br /&gt;
==Plánovanie procesov==&lt;br /&gt;
Pod pojmom plánovanie procesov rozumieme činnosť OS, ktorý vyberá medzi procesmi a určuje poradie ich vykonávania. &lt;br /&gt;
Rozlišujeme tri druhy plánovania procesov  [3]:&lt;br /&gt;
&lt;br /&gt;
#1.	dlhodobé - ak je v systéme viacero úloh ( nie procesov, ale používateľom zadaných úloh, napr. výpočtových )  očakávajúcich spustenie, OS musí určiť, ktorá z nich sa má spustiť ako nasledujúca. Jedná sa vlastne o naplánovanie prechodu zo stavu novovytvorený do stavu čakajúci. V multiprocesovom OS ( interaktivita, time-sharing ) väčšinou nie je prípustné, aby zadaná úloha čakala na spustenie neurčitý čas, lebo systém je príliš zaťažený a preto OS musí oznámiť okamžite, že úloha sa spustiť nedá, &lt;br /&gt;
#2.	strednodobé - súvisí s odkladaním úloh do operačnej pamäte ( swapping ),&lt;br /&gt;
#3.	krátkodobé - určenie procesu ( spomedzi pripravených ), ktorý sa má stať&lt;br /&gt;
 bežiacim.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3378</id>
		<title>Proces v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3378"/>
		<updated>2010-04-06T20:48:48Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
==Proces v operačnom systéme==&lt;br /&gt;
Proces je program, ktorý sa práve vykonáva. Je to aktívna, dynamická entita na rozdiel od ( textu ) programu, ktorý je statickou, pasívnou entitou. Vykonávanie sa označuje ako sekvenčne - v každom časovom okamihu sa vykonáva jedna inštrukcia daného procesu a po jej ukončení sa prejde na ďalšiu, alebo sa začne vykonávať iný proces. V danom čase procesu zodpovedá presne jeden program, ale danému programu môže zodpovedať viacero vykonávaných procesov, napr. viacerí používatelia pracujú s textovým editorom, spustili jediný program ( v pamäti sa nachádza iba raz ), ale ide o desať samostatných procesov.&lt;br /&gt;
&lt;br /&gt;
Proces pozostáva z:&lt;br /&gt;
&lt;br /&gt;
# kódu ( textu ) programu - tzv. kódový segment&lt;br /&gt;
# hodnoty registrov ( napr. hodnota registra IP určuje, kde sa vykonávanie nachádza v texte programu )&lt;br /&gt;
# dát procesu:&lt;br /&gt;
#* a)globálne dáta - prístupné všetkým procedúram programu &lt;br /&gt;
#* b)zásobník(y) - implementuje postupnosť volaní jednotlivých procedúr ( call stack )&lt;br /&gt;
#* c)hromada ( heap ) - implementuje dynamicky prideľované a vracané dáta&lt;br /&gt;
# stavu procesu - aktivita vykonávaná procesom&lt;br /&gt;
Presný súhrn týchto charakteristík určuje proces v OS.&lt;br /&gt;
&lt;br /&gt;
==Stav procesu ==&lt;br /&gt;
Proces sa počas vykonávania nachádza v rôznych stavoch, ktoré určujú prípustné operácie s procesom a reakcie procesu na ne. Stavy môžeme popísať konečným automatom, pričom každý OS sa líši v presnej množine stavov procesov a povolených operáciách ( prechodoch ), takže nasledovné rozdelenie možných stavov je zovšeobecnené:&lt;br /&gt;
&lt;br /&gt;
# novovytvorený proces ( NEW )&amp;lt;br /&amp;gt;- tento proces sa práve vytvoril, ale ešte nebol priradený k CPU – neprevzal riadenie . Procesy sú vytvárané inými procesmi: proces - rodič vytvorí proces - potomka. Táto činnosť sa vykonáva systémom vytvor proces ( presný mechanizmus sa líši systém od systému ). Procesy vytvárajú strom, ktorého koreň vzniká pri štarte OS. Keď sa vytvorí potomok môže rodič pokračovať v činnosti, alebo počká na ukončenie potomka. Medzi rodičom a potomkom OS umožňuje zdieľanie zdrojov, ak o to rodič požiada ( napr. potomok môže dostať prístup k otvoreným súborom rodiča ).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# bežiaci proces ( RUNNING )&amp;lt;br /&amp;gt;- proces, ktorý sa práve vykonáva na CPU. V modernom multiprocesovom OS býva proces po uplynutí určitého času ( časové kvantum ) násilne prevedený zo stavu bežiaci do stavu pripravený, aby aj iné procesy mohli byť vykonávané.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# pripravený proces ( READY )&amp;lt;br /&amp;gt;- proces, ktorý by sa mohol vykonávať, ale práve nie je priradený k CPU. OS by mal zabezpečiť naplánovanie takéhoto procesu, t.j. jeho priradenie k CPU v dohľadnom čase - toto je základná idea time sharingu.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# čakajúci proces ( WAITING )&amp;lt;br /&amp;gt;- proces, ktorý sa ( dočasne ) nemôže vykonávať, lebo čaká na výskyt udalosti. Udalosť sa väčšinou ohlasuje formou prerušenia alebo iným vnútorným mechanizmom OS. Príčiny čakania sú rôznorodé:&amp;lt;br /&amp;gt;&lt;br /&gt;
#* čakanie na dokončenie V/V. Proces čaká vo fronte daného V/V  zariadenia, fronty sú organizované pomocou PCB. Po ukončení   V/V nastane prerušenie, počas jeho spracovania proces prejde do stavu pripravený.&lt;br /&gt;
#* čakanie na komunikáciu s iným procesom. Toto sa môže implementovať rôzne, ale komunikáciu ( napr. príjem dát ) od druhého procesu spracuje OS, odovzdá prijaté dáta čakajúcemu procesu a prevedie ho do stavu pripravený&lt;br /&gt;
#* čakanie na uplynutie zadaného času ( sleep )&lt;br /&gt;
#* čakanie na potomka. Proces môže vytvoriť potomka a čakať na jeho ukončenie.&lt;br /&gt;
&lt;br /&gt;
# ukončený proces ( TERMINATED )&amp;lt;br /&amp;gt;- proces, ktorý vykonal svoje inštrukcie, alebo bol inak ukončený ( systémovým volaním abort ). Po  čase sa takýto proces odstráni zo systému. Po skončenom procese však zostáva určitá množina údajov, kde sú uložené napríklad výstupné údaje, o ktorých sa predpokladá, že môžu byť neskôr vyžadované inými procesmi na prečítanie. Ak tieto údaje ešte existujú, proces sa nachádza v stave tzv. zombie.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Životný cyklus daného procesu spočíva v prechodoch medzi rôznymi stavmi, ktoré je vidieť na obr. 3. Medzi typické prechody patria:&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3365</id>
		<title>Proces v operačnom systéme</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Proces_v_opera%C4%8Dnom_syst%C3%A9me&amp;diff=3365"/>
		<updated>2010-04-06T20:31:36Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
==Proces v operačnom systéme==&lt;br /&gt;
Proces je program, ktorý sa práve vykonáva. Je to aktívna, dynamická entita na rozdiel od ( textu ) programu, ktorý je statickou, pasívnou entitou. Vykonávanie sa označuje ako sekvenčne - v každom časovom okamihu sa vykonáva jedna inštrukcia daného procesu a po jej ukončení sa prejde na ďalšiu, alebo sa začne vykonávať iný proces. V danom čase procesu zodpovedá presne jeden program, ale danému programu môže zodpovedať viacero vykonávaných procesov, napr. viacerí používatelia pracujú s textovým editorom, spustili jediný program ( v pamäti sa nachádza iba raz ), ale ide o desať samostatných procesov.&lt;br /&gt;
&lt;br /&gt;
Proces pozostáva z:&lt;br /&gt;
&lt;br /&gt;
# kódu ( textu ) programu - tzv. kódový segment&lt;br /&gt;
# hodnoty registrov ( napr. hodnota registra IP určuje, kde sa vykonávanie nachádza v texte programu )&lt;br /&gt;
# dát procesu:&lt;br /&gt;
#* a)globálne dáta - prístupné všetkým procedúram programu &lt;br /&gt;
#* b)zásobník(y) - implementuje postupnosť volaní jednotlivých procedúr ( call stack )&lt;br /&gt;
#* c)hromada ( heap ) - implementuje dynamicky prideľované a vracané dáta&lt;br /&gt;
# stavu procesu - aktivita vykonávaná procesom&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3360</id>
		<title>Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3360"/>
		<updated>2010-04-06T20:26:27Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Bc. Martin Hakala|&lt;br /&gt;
Ing. Peter Kvasnica, PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Diplomový projekt&lt;br /&gt;
|Mechatronika&lt;br /&gt;
}}&lt;br /&gt;
{{Praca_uvod|1|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|slovensky&lt;br /&gt;
|anglicky&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Základ programového prostredia, ktoré sa používa pri realizácii riadiacich úloh tvorí operačný systém. Vlastnosti a chovanie operačného systému určujú praktické možnosti výsledného riadenia a do značnej miery i algoritmy riadiacich aplikácií. Operačný systém dovoľuje spúšťať všetky programy, údaje prehľadne prenášať, uložiť, riadiť a zároveň „paralelne“ používať. Označenie operačný systém je teda súbor programov, ktorý umožňuje efektívnu obsluhu a použitie počítača na plnenie rôznych úloh. &lt;br /&gt;
Tato práca sa preto zaoberá zmapovaním súčasných operačných systémov a ich vzájomným porovnaním z pohľadu doby výpočtu vybraných úloh. V úvode práce opisujeme základnú stavbu a fungovanie operačného systému zo zameraním sa na priebeh jednotlivých procesov v operačnom systéme. Ako vzorku pre testovanie doby výpočtu danej úlohy sme vybrali šesť operačných systémov, ktoré patria v súčasnej dobe medzi najpoužívanejšie na našom trhu. Výsledky tejto práce preto môžu ovplyvniť rozhodovanie používateľa pri výbere operačného systému.&lt;br /&gt;
&lt;br /&gt;
=Operačný systém=&lt;br /&gt;
Operačný systém je najdôležitejší program počítača. Funguje ako prostredník medzi používateľmi a technickým vybavením ( hardvérom ) počítačového systému. Jeho hlavným cieľom je zabezpečiť prístup používateľov k programom a efektívne využívanie daného hardvéru. Architektúra operačného systému je vo všeobecnosti takáto  [3]:&lt;br /&gt;
*Správu procesov ( programy zavedené do pamäte na vykonanie ) - umožňuje vytváranie a ukončovanie procesov. Chráni CPU pred zahltením chybnými programami. &lt;br /&gt;
*Správu operačnej pamäte - zabezpečuje jej efektívne využívanie, kontroluje obsadenosť úsekov pamäte a voľné oblasti prideľuje procesom. Zabezpečuje ochranu pamäte jedného procesu pred ostatnými procesmi. &lt;br /&gt;
*Správu systému súborov sekundárnej pamäte - stará sa o ukladanie údajov, aby si používatelia navzájom nemenili údaje. Proces pokúšajúci sa zapisovať do súboru musí mať na zápis právo pridelené vlastníkom súboru, inak sa mu to nepodarí. &lt;br /&gt;
*Správa vstupno-výstupných zariadení - procesor poskytuje virtuálne ovládače vstupno-výstupných zariadení, ktoré zabezpečujú rovnaký prístup k rovnakým skupinám zariadení. &lt;br /&gt;
*Používateľské rozhranie - zabezpečuje komunikáciu používateľa s procesmi. Môže ísť o textové rozhranie, ktoré s používateľom komunikuje pomocou klávesnice a textu zobrazovaného na monitore a o grafické rozhranie. Grafické rozhranie je intuitívnejšie, používateľ nemusí poznať príkazy naspamäť, ale programy spúšťa i ovláda výberom z ponúk najrôznejších menu a ikôn. Grafická komunikácia s procesmi je často prehľadnejšia a informatívnejšia než textová. &lt;br /&gt;
*Podporu bezpečnosti a spoľahlivosti výpočtového systému - ochraňuje systém proti strate údajov pri výpadku napätia, proti neoprávnenej alebo neodbornej manipulácii, ktorá by mohla poškodiť programové produkty.&lt;br /&gt;
&lt;br /&gt;
==Architektúra operačného systému==&lt;br /&gt;
Vo všeobecnosti rozoznávame tieto súčasti operačného systému: &lt;br /&gt;
# '''Jadro''' ( výkonná časť ) operačného systému – sústava vzájomne prepojených a spolupracujúcich programových modulov nachádzajúcich sa v operačnej pamäti.&amp;lt;br /&amp;gt;Zaisťuje komunikáciu s hardwérom a poskytuje aplikáciám svoje služby, ako správu procesov, správu pamäte, podporu siete a pod.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Monitor OS''' ( od slova monitorovať = sledovať ) – zabezpečuje komunikáciu systému s užívateľom.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;'''Ovládače''' ( drivers ) – obslužné programy vstupno-výstupných zariadení. Zvyčajne predstavujú rozhranie pre komunikáciu so zariadeniami prostredníctvom určitej počítačovej zbernice ku ktorej je pripojený hardvér. Toto rozhranie poskytuje príkazy na posielanie dát od a ku zariadeniu, a tak je nevyhnutné pre operačný systém a softvérové aplikácie. Ovládač je hardvérovo závislý počítačový program, ktorý je špecifický pre určitý OS. Umožňuje iným programom, pracovať transparentne s hardvérovým zariadením a zvyčajne poskytuje nevyhnutné spracúvanie prerušení. Na obr. 1 je znázornená zjednodušená schéma architektúry PC s vonkajšími zariadeniami, na ovládanie ktorých slúžia ovládače.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OS má z hľadiska úrovne programov niekoľko vrstiev. Vrstva na najnižšej úrovni zaisťuje priamy styk s technickými prostriedkami osobného počítača. Táto vrstva sa nazýva BIOS. Služby BIOS-u používa samotné jadro operačného systému. Služby jadra operačného systému následne používajú rôzne nadstavby a hlavne aplikácie spúšťané pod operačným systémom. Často je užívateľské rozhranie vo forme nadstavby operačného systému. Spôsob, akým užívateľ zadáva pokyny pre operačný systém a v akej forme dostáva správy o výsledku prevedenia operácie, je označovaný ako užívateľské rozhranie. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zjednodušená schéma architektúry PC.jpg]]&lt;br /&gt;
Obr. 1 Zjednodušená schéma architektúry PC   [6]&lt;br /&gt;
&lt;br /&gt;
==Základné pojmy==&lt;br /&gt;
Multitasking je vykonávanie viacerých úloh súčasne ( súbežné spracovanie ). Pri jednoprocesorových systémoch sa multitasking simuluje tak, že procesor striedavo vykonáva časti jednotlivých zadaných procesov, a navonok sa tvári, že sa vykonávajú súčasne. Je tomu tak preto, že prepínanie medzi procesmi sa vykonáva automaticky v krátkych časových intervaloch, napr. každú 1ms.  Multitasking sa delí na preemptívny a nepreemptívny. Preemptívny multitasking vnucuje procesom násilné prepínanie na základe údajov časovača. Vďaka tomu počítač nemožno zahltiť jednou aplikáciou, ktorá by nepripustila ostatné procesy k činnosti. Pri nepreemptívnom multitaskingu o prideľovaní procesoru akoby „rozhodujú“ všetky procesy. &lt;br /&gt;
&lt;br /&gt;
K prepnutiu dochádza, keď to práve vykonávaný proces dovolí. Iný proces teda danú úlohu nemôže prerušiť. Až vtedy, keď proces „uzná za vhodné“ že už môže odovzdať riadenie, procesor je pridelený ďalšiemu procesu. Nevýhodou nepreemptívneho multitaskingu je možné zrútenie sa systému v prípade zacyklenia niektorej z úloh. Vtedy je jediným riešením len zásah zvonku ( reštart ).&lt;br /&gt;
Multithreading je súčasné vykonávanie viacerých častí jednotlivého programu. Vnútorná realizácia je podobná ako u multitaskingu.&lt;br /&gt;
Multiprocessoring je schopnosť OS využívať viacero procesorov a medzi ne rozdeľovať vykonávanie viacerých úloh, resp. časti jednotlivej úlohy.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzájomné súvislosti modulov jadra a procesov OS.jpg]]&lt;br /&gt;
Obr. 2 Vzájomné súvislosti modulov jadra a procesov operačného systému umožňujúceho multitasking   [1]&lt;br /&gt;
&lt;br /&gt;
Orientovaný graf na obr. 2 znázorňuje vzájomnú súvislosť medzi modulmi jadra. Na danom grafe je vidieť, že modul VOLANIE_SLUŽIEB zabezpečuje prístup k modulom BDOS a ČASOVÝ_MODUL. Následne modul BIOS využíva modul SYNCHRONIZÁCIA_PROCESOV a ten využíva moduly INFORMÁCIE O_PROCESOCH a PRIDELOVANIE_PROCESORU. Daný graf dôrazňuje ako modul VOLANIE_SLUŽIEB slúži pre viacej procesov súčastne.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3358</id>
		<title>Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3358"/>
		<updated>2010-04-06T20:20:16Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Bc. Martin Hakala|&lt;br /&gt;
Ing. Peter Kvasnica, PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Diplomový projekt&lt;br /&gt;
|Mechatronika&lt;br /&gt;
}}&lt;br /&gt;
{{Praca_uvod|1|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|slovensky&lt;br /&gt;
|anglicky&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Základ programového prostredia, ktoré sa používa pri realizácii riadiacich úloh tvorí operačný systém. Vlastnosti a chovanie operačného systému určujú praktické možnosti výsledného riadenia a do značnej miery i algoritmy riadiacich aplikácií. Operačný systém dovoľuje spúšťať všetky programy, údaje prehľadne prenášať, uložiť, riadiť a zároveň „paralelne“ používať. Označenie operačný systém je teda súbor programov, ktorý umožňuje efektívnu obsluhu a použitie počítača na plnenie rôznych úloh. &lt;br /&gt;
Tato práca sa preto zaoberá zmapovaním súčasných operačných systémov a ich vzájomným porovnaním z pohľadu doby výpočtu vybraných úloh. V úvode práce opisujeme základnú stavbu a fungovanie operačného systému zo zameraním sa na priebeh jednotlivých procesov v operačnom systéme. Ako vzorku pre testovanie doby výpočtu danej úlohy sme vybrali šesť operačných systémov, ktoré patria v súčasnej dobe medzi najpoužívanejšie na našom trhu. Výsledky tejto práce preto môžu ovplyvniť rozhodovanie používateľa pri výbere operačného systému.&lt;br /&gt;
&lt;br /&gt;
=Operačný systém=&lt;br /&gt;
Operačný systém je najdôležitejší program počítača. Funguje ako prostredník medzi používateľmi a technickým vybavením ( hardvérom ) počítačového systému. Jeho hlavným cieľom je zabezpečiť prístup používateľov k programom a efektívne využívanie daného hardvéru. Architektúra operačného systému je vo všeobecnosti takáto  [3]:&lt;br /&gt;
*Správu procesov ( programy zavedené do pamäte na vykonanie ) - umožňuje vytváranie a ukončovanie procesov. Chráni CPU pred zahltením chybnými programami. &lt;br /&gt;
*Správu operačnej pamäte - zabezpečuje jej efektívne využívanie, kontroluje obsadenosť úsekov pamäte a voľné oblasti prideľuje procesom. Zabezpečuje ochranu pamäte jedného procesu pred ostatnými procesmi. &lt;br /&gt;
*Správu systému súborov sekundárnej pamäte - stará sa o ukladanie údajov, aby si používatelia navzájom nemenili údaje. Proces pokúšajúci sa zapisovať do súboru musí mať na zápis právo pridelené vlastníkom súboru, inak sa mu to nepodarí. &lt;br /&gt;
*Správa vstupno-výstupných zariadení - procesor poskytuje virtuálne ovládače vstupno-výstupných zariadení, ktoré zabezpečujú rovnaký prístup k rovnakým skupinám zariadení. &lt;br /&gt;
*Používateľské rozhranie - zabezpečuje komunikáciu používateľa s procesmi. Môže ísť o textové rozhranie, ktoré s používateľom komunikuje pomocou klávesnice a textu zobrazovaného na monitore a o grafické rozhranie. Grafické rozhranie je intuitívnejšie, používateľ nemusí poznať príkazy naspamäť, ale programy spúšťa i ovláda výberom z ponúk najrôznejších menu a ikôn. Grafická komunikácia s procesmi je často prehľadnejšia a informatívnejšia než textová. &lt;br /&gt;
*Podporu bezpečnosti a spoľahlivosti výpočtového systému - ochraňuje systém proti strate údajov pri výpadku napätia, proti neoprávnenej alebo neodbornej manipulácii, ktorá by mohla poškodiť programové produkty.&lt;br /&gt;
&lt;br /&gt;
==Architektúra operačného systému==&lt;br /&gt;
Vo všeobecnosti rozoznávame tieto súčasti operačného systému: &lt;br /&gt;
# '''Jadro''' ( výkonná časť ) operačného systému – sústava vzájomne prepojených a spolupracujúcich programových modulov nachádzajúcich sa v operačnej pamäti.&amp;lt;br /&amp;gt;Zaisťuje komunikáciu s hardwérom a poskytuje aplikáciám svoje služby, ako správu procesov, správu pamäte, podporu siete a pod.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Monitor OS''' ( od slova monitorovať = sledovať ) – zabezpečuje komunikáciu systému s užívateľom.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;'''Ovládače''' ( drivers ) – obslužné programy vstupno-výstupných zariadení. Zvyčajne predstavujú rozhranie pre komunikáciu so zariadeniami prostredníctvom určitej počítačovej zbernice ku ktorej je pripojený hardvér. Toto rozhranie poskytuje príkazy na posielanie dát od a ku zariadeniu, a tak je nevyhnutné pre operačný systém a softvérové aplikácie. Ovládač je hardvérovo závislý počítačový program, ktorý je špecifický pre určitý OS. Umožňuje iným programom, pracovať transparentne s hardvérovým zariadením a zvyčajne poskytuje nevyhnutné spracúvanie prerušení. Na obr. 1 je znázornená zjednodušená schéma architektúry PC s vonkajšími zariadeniami, na ovládanie ktorých slúžia ovládače.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OS má z hľadiska úrovne programov niekoľko vrstiev. Vrstva na najnižšej úrovni zaisťuje priamy styk s technickými prostriedkami osobného počítača. Táto vrstva sa nazýva BIOS. Služby BIOS-u používa samotné jadro operačného systému. Služby jadra operačného systému následne používajú rôzne nadstavby a hlavne aplikácie spúšťané pod operačným systémom. Často je užívateľské rozhranie vo forme nadstavby operačného systému. Spôsob, akým užívateľ zadáva pokyny pre operačný systém a v akej forme dostáva správy o výsledku prevedenia operácie, je označovaný ako užívateľské rozhranie. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zjednodušená schéma architektúry PC.jpg]]&lt;br /&gt;
Obr. 1 Zjednodušená schéma architektúry PC   [6]&lt;br /&gt;
&lt;br /&gt;
==Základné pojmy==&lt;br /&gt;
Multitasking je vykonávanie viacerých úloh súčasne ( súbežné spracovanie ). Pri jednoprocesorových systémoch sa multitasking simuluje tak, že procesor striedavo vykonáva časti jednotlivých zadaných procesov, a navonok sa tvári, že sa vykonávajú súčasne. Je tomu tak preto, že prepínanie medzi procesmi sa vykonáva automaticky v krátkych časových intervaloch, napr. každú 1ms.  Multitasking sa delí na preemptívny a nepreemptívny. Preemptívny multitasking vnucuje procesom násilné prepínanie na základe údajov časovača. Vďaka tomu počítač nemožno zahltiť jednou aplikáciou, ktorá by nepripustila ostatné procesy k činnosti. Pri nepreemptívnom multitaskingu o prideľovaní procesoru akoby „rozhodujú“ všetky procesy. &lt;br /&gt;
&lt;br /&gt;
K prepnutiu dochádza, keď to práve vykonávaný proces dovolí. Iný proces teda danú úlohu nemôže prerušiť. Až vtedy, keď proces „uzná za vhodné“ že už môže odovzdať riadenie, procesor je pridelený ďalšiemu procesu. Nevýhodou nepreemptívneho multitaskingu je možné zrútenie sa systému v prípade zacyklenia niektorej z úloh. Vtedy je jediným riešením len zásah zvonku ( reštart ).&lt;br /&gt;
Multithreading je súčasné vykonávanie viacerých častí jednotlivého programu. Vnútorná realizácia je podobná ako u multitaskingu.&lt;br /&gt;
Multiprocessoring je schopnosť OS využívať viacero procesorov a medzi ne rozdeľovať vykonávanie viacerých úloh, resp. časti jednotlivej úlohy.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzájomné súvislosti modulov jadra a procesov OS.jpg]]&lt;br /&gt;
Obr. 2 Vzájomné súvislosti modulov jadra a procesov operačného systému umožňujúceho multitasking   [1]&lt;br /&gt;
&lt;br /&gt;
Orientovaný graf na obr. 2 znázorňuje vzájomnú súvislosť medzi modulmi jadra. Na danom grafe je vidieť, že modul VOLANIE_SLUŽIEB zabezpečuje prístup k modulom BDOS a ČASOVÝ_MODUL. Následne modul BIOS využíva modul SYNCHRONIZÁCIA_PROCESOV a ten využíva moduly INFORMÁCIE O_PROCESOCH a PRIDELOVANIE_PROCESORU. Daný graf dôrazňuje ako modul VOLANIE_SLUŽIEB slúži pre viacej procesov súčastne.&lt;br /&gt;
&lt;br /&gt;
=Proces v operačnom systéme=&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3357</id>
		<title>Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Ur%C4%8Denie_doby_v%C3%BDpo%C4%8Dtu_vybran%C3%BDch_%C3%BAloh_v_prostred%C3%AD_s%C3%BA%C4%8Dasn%C3%BDch_opera%C4%8Dn%C3%BDch_syst%C3%A9mov&amp;diff=3357"/>
		<updated>2010-04-06T20:19:41Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Bc. Martin Hakala|&lt;br /&gt;
Ing. Peter Kvasnica, PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Diplomový projekt&lt;br /&gt;
|Mechatronika&lt;br /&gt;
}}&lt;br /&gt;
{{Praca_uvod|1|Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov|Operačný systém|Proces v operačnom systéme|Porovnanie vybratých operačných systémov}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|slovensky&lt;br /&gt;
|anglicky&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Základ programového prostredia, ktoré sa používa pri realizácii riadiacich úloh tvorí operačný systém. Vlastnosti a chovanie operačného systému určujú praktické možnosti výsledného riadenia a do značnej miery i algoritmy riadiacich aplikácií. Operačný systém dovoľuje spúšťať všetky programy, údaje prehľadne prenášať, uložiť, riadiť a zároveň „paralelne“ používať. Označenie operačný systém je teda súbor programov, ktorý umožňuje efektívnu obsluhu a použitie počítača na plnenie rôznych úloh. &lt;br /&gt;
Tato práca sa preto zaoberá zmapovaním súčasných operačných systémov a ich vzájomným porovnaním z pohľadu doby výpočtu vybraných úloh. V úvode práce opisujeme základnú stavbu a fungovanie operačného systému zo zameraním sa na priebeh jednotlivých procesov v operačnom systéme. Ako vzorku pre testovanie doby výpočtu danej úlohy sme vybrali šesť operačných systémov, ktoré patria v súčasnej dobe medzi najpoužívanejšie na našom trhu. Výsledky tejto práce preto môžu ovplyvniť rozhodovanie používateľa pri výbere operačného systému.&lt;br /&gt;
&lt;br /&gt;
=Operačný systém=&lt;br /&gt;
Operačný systém je najdôležitejší program počítača. Funguje ako prostredník medzi používateľmi a technickým vybavením ( hardvérom ) počítačového systému. Jeho hlavným cieľom je zabezpečiť prístup používateľov k programom a efektívne využívanie daného hardvéru. Architektúra operačného systému je vo všeobecnosti takáto  [3]:&lt;br /&gt;
*Správu procesov ( programy zavedené do pamäte na vykonanie ) - umožňuje vytváranie a ukončovanie procesov. Chráni CPU pred zahltením chybnými programami. &lt;br /&gt;
*Správu operačnej pamäte - zabezpečuje jej efektívne využívanie, kontroluje obsadenosť úsekov pamäte a voľné oblasti prideľuje procesom. Zabezpečuje ochranu pamäte jedného procesu pred ostatnými procesmi. &lt;br /&gt;
*Správu systému súborov sekundárnej pamäte - stará sa o ukladanie údajov, aby si používatelia navzájom nemenili údaje. Proces pokúšajúci sa zapisovať do súboru musí mať na zápis právo pridelené vlastníkom súboru, inak sa mu to nepodarí. &lt;br /&gt;
*Správa vstupno-výstupných zariadení - procesor poskytuje virtuálne ovládače vstupno-výstupných zariadení, ktoré zabezpečujú rovnaký prístup k rovnakým skupinám zariadení. &lt;br /&gt;
*Používateľské rozhranie - zabezpečuje komunikáciu používateľa s procesmi. Môže ísť o textové rozhranie, ktoré s používateľom komunikuje pomocou klávesnice a textu zobrazovaného na monitore a o grafické rozhranie. Grafické rozhranie je intuitívnejšie, používateľ nemusí poznať príkazy naspamäť, ale programy spúšťa i ovláda výberom z ponúk najrôznejších menu a ikôn. Grafická komunikácia s procesmi je často prehľadnejšia a informatívnejšia než textová. &lt;br /&gt;
*Podporu bezpečnosti a spoľahlivosti výpočtového systému - ochraňuje systém proti strate údajov pri výpadku napätia, proti neoprávnenej alebo neodbornej manipulácii, ktorá by mohla poškodiť programové produkty.&lt;br /&gt;
&lt;br /&gt;
==Architektúra operačného systému==&lt;br /&gt;
Vo všeobecnosti rozoznávame tieto súčasti operačného systému: &lt;br /&gt;
# '''Jadro''' ( výkonná časť ) operačného systému – sústava vzájomne prepojených a spolupracujúcich programových modulov nachádzajúcich sa v operačnej pamäti.&amp;lt;br /&amp;gt;Zaisťuje komunikáciu s hardwérom a poskytuje aplikáciám svoje služby, ako správu procesov, správu pamäte, podporu siete a pod.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Monitor OS''' ( od slova monitorovať = sledovať ) – zabezpečuje komunikáciu systému s užívateľom.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;br /&amp;gt;'''Ovládače''' ( drivers ) – obslužné programy vstupno-výstupných zariadení. Zvyčajne predstavujú rozhranie pre komunikáciu so zariadeniami prostredníctvom určitej počítačovej zbernice ku ktorej je pripojený hardvér. Toto rozhranie poskytuje príkazy na posielanie dát od a ku zariadeniu, a tak je nevyhnutné pre operačný systém a softvérové aplikácie. Ovládač je hardvérovo závislý počítačový program, ktorý je špecifický pre určitý OS. Umožňuje iným programom, pracovať transparentne s hardvérovým zariadením a zvyčajne poskytuje nevyhnutné spracúvanie prerušení. Na obr. 1 je znázornená zjednodušená schéma architektúry PC s vonkajšími zariadeniami, na ovládanie ktorých slúžia ovládače.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OS má z hľadiska úrovne programov niekoľko vrstiev. Vrstva na najnižšej úrovni zaisťuje priamy styk s technickými prostriedkami osobného počítača. Táto vrstva sa nazýva BIOS. Služby BIOS-u používa samotné jadro operačného systému. Služby jadra operačného systému následne používajú rôzne nadstavby a hlavne aplikácie spúšťané pod operačným systémom. Často je užívateľské rozhranie vo forme nadstavby operačného systému. Spôsob, akým užívateľ zadáva pokyny pre operačný systém a v akej forme dostáva správy o výsledku prevedenia operácie, je označovaný ako užívateľské rozhranie. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zjednodušená schéma architektúry PC.jpg]]&lt;br /&gt;
Obr. 1 Zjednodušená schéma architektúry PC   [6]&lt;br /&gt;
&lt;br /&gt;
==Základné pojmy==&lt;br /&gt;
Multitasking je vykonávanie viacerých úloh súčasne ( súbežné spracovanie ). Pri jednoprocesorových systémoch sa multitasking simuluje tak, že procesor striedavo vykonáva časti jednotlivých zadaných procesov, a navonok sa tvári, že sa vykonávajú súčasne. Je tomu tak preto, že prepínanie medzi procesmi sa vykonáva automaticky v krátkych časových intervaloch, napr. každú 1ms.  Multitasking sa delí na preemptívny a nepreemptívny. Preemptívny multitasking vnucuje procesom násilné prepínanie na základe údajov časovača. Vďaka tomu počítač nemožno zahltiť jednou aplikáciou, ktorá by nepripustila ostatné procesy k činnosti. Pri nepreemptívnom multitaskingu o prideľovaní procesoru akoby „rozhodujú“ všetky procesy. &lt;br /&gt;
&lt;br /&gt;
K prepnutiu dochádza, keď to práve vykonávaný proces dovolí. Iný proces teda danú úlohu nemôže prerušiť. Až vtedy, keď proces „uzná za vhodné“ že už môže odovzdať riadenie, procesor je pridelený ďalšiemu procesu. Nevýhodou nepreemptívneho multitaskingu je možné zrútenie sa systému v prípade zacyklenia niektorej z úloh. Vtedy je jediným riešením len zásah zvonku ( reštart ).&lt;br /&gt;
Multithreading je súčasné vykonávanie viacerých častí jednotlivého programu. Vnútorná realizácia je podobná ako u multitaskingu.&lt;br /&gt;
Multiprocessoring je schopnosť OS využívať viacero procesorov a medzi ne rozdeľovať vykonávanie viacerých úloh, resp. časti jednotlivej úlohy.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vzájomné súvislosti modulov jadra a procesov OS.jpg]]&lt;br /&gt;
Obr. 2 Vzájomné súvislosti modulov jadra a procesov operačného systému umožňujúceho multitasking   [1]&lt;br /&gt;
&lt;br /&gt;
:Orientovaný graf na obr. 2 znázorňuje vzájomnú súvislosť medzi modulmi jadra. Na danom grafe je vidieť, že modul VOLANIE_SLUŽIEB zabezpečuje prístup k modulom BDOS a ČASOVÝ_MODUL. Následne modul BIOS využíva modul SYNCHRONIZÁCIA_PROCESOV a ten využíva moduly INFORMÁCIE O_PROCESOCH a PRIDELOVANIE_PROCESORU. Daný graf dôrazňuje ako modul VOLANIE_SLUŽIEB slúži pre viacej procesov súčastne.&lt;br /&gt;
&lt;br /&gt;
=Proces v operačnom systéme=&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2912</id>
		<title>Protokol DNS</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2912"/>
		<updated>2010-03-23T21:25:37Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
==DNS==&lt;br /&gt;
Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.&lt;br /&gt;
&lt;br /&gt;
Každý počítač má na internete svoju vlastnú adresu, tzv. IP, v číselnom formáte. Je obtiažne pamätať si číselné adresy počítačov, na ktorých si chceme prezerať WWW stránky, a preto existuje služba DNS, ktorá &amp;quot;prekladá&amp;quot; číselne IP adresy zo zle zapamätateľného číslicového tvaru na mená, ktoré sa užívateľom pamätajú podstatne lepšie, a naopak. &lt;br /&gt;
Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad) -  napr. webová prezentácia www.slovaknet.sk je umiestnená na serveri s IP adresou 62.168.63.222.&lt;br /&gt;
V širšom poňatí je možné DNS chápať ako '''distribuovanú databázu doménových mien''', v užšom ponímaní je možné DNS chápať ako '''aplikačný protokol''', prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.&lt;br /&gt;
&lt;br /&gt;
V DNS sa nenachádza iba adresa servera, kde je prezentácia umiestená, ale záznam obsahuje aj adresy poštového servera, FTP servera, domén 3. úrovne atď.&lt;br /&gt;
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky &amp;quot;A-Z&amp;quot;, &amp;quot;a-z&amp;quot;, &amp;quot;0-9&amp;quot;, &amp;quot;-&amp;quot; a &amp;quot;_&amp;quot;. (max 255 znakov)&lt;br /&gt;
:DNS si môžete predstaviť ako strom domén:&lt;br /&gt;
[[Súbor:strom DNS.jpg]]&lt;br /&gt;
&lt;br /&gt;
Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server.Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla. &lt;br /&gt;
&lt;br /&gt;
Najvyššiu úroveň stromu domén - domény najvyššej úrovne ('''top-level domains''', '''TLD''') spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre domény najvyššej úrovne (&amp;quot;.com&amp;quot;, &amp;quot;.net&amp;quot;, &amp;quot;.sk&amp;quot; atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch. ( v súčastnosti ich je 13) . Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii každého DNS servera.   &lt;br /&gt;
&lt;br /&gt;
===Základné rozdelenenie DNS serverov : ===&lt;br /&gt;
&lt;br /&gt;
'''Primárny DNS''' server je server, ktorý obsahuje a obsluhuje údaje o doméne a je pre danú doménu autoritatívny. Odpovede primárneho DNS servera sú považované za vždy aktuálne a platné. Odkazy na DNS servery domény sú uložené v nadradenom DNS serveri. Ukazovatele na DNS servery druhej úrovne (&amp;quot;mojadomena.sk&amp;quot;) sú uložené v DNS pre doménu najvyššej úrovne (&amp;quot;.sk&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
'''Sekundárny DNS''' server je server, ktorý pomocou pravidelného kopírovania údajov o doménach z primárneho DNS servera vytvára záložný DNS server pre danú doménu. Úlohou primárneho DNS servera je tiež upozorniť svoje sekundárne DNS servery pri zmene záznamov v DNS. Jeden primárny DNS server môže používať niekoľko sekundárnych DNS serverov, vždy však najmenej jeden.&lt;br /&gt;
&lt;br /&gt;
==Ako pracuje DNS==&lt;br /&gt;
&lt;br /&gt;
Protokol DNS pracuje jednoduchým spôsobom: dotaz - odpoveď. To znamená, že klient pošle serveru dotaz a server na dotaz odpovie. Služba sa pri svojom fungovaní opiera o služby transportných protokolov. DNS používa ako '''TCP''', tak protokol '''UDP''', pričom dotaz aj odpoveď sú prenášané vždy rovnakým transportným protokolom. Pri dotaze na preklad mena na adresu sa používa protokol UDP &lt;br /&gt;
Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne (subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na podriadené DNS servery, ktoré ich spravujú.&lt;br /&gt;
&lt;br /&gt;
====Protokol TCP (Transmission Control Protocol) ====&lt;br /&gt;
Poskytuje spoľahlivé  zasielanie dát po sieti. Kontaktuje prijímateľa pred vyslaním dát. Vďaka TCP môžu programy na počítačoch v sieti vytvárať medzi sebou spojenia (connections), ktorými je možné posielať dáta. Protokol pritom zaručuje, že dáta odoslané z jedného konca spojenia budú prijaté na druhej strane spojenia v rovnakom poradí a bez chýbajúcich častí.&lt;br /&gt;
&lt;br /&gt;
====Protokol UDP (User Datagram Protocol) ====&lt;br /&gt;
Zasiela dáta iným spôsobom ako TCP. Nezisťuje, či boli odoslané dáta prijaté adresátom, preto je nespoľahlivý. connection less protokol (nekontaktuje prijímateľa pred vyslaním dát). UDP protokol prenáša datagramy medzi počítačmi v sieti, ale na rozdiel od TCP nezaručuje, že prenášaný paket sa nestratí, že sa nezmení poradie paketov, ani že sa niektorý paket nedoručí viackrát. Vďaka tomu je UDP pre ľahké a časovo citlivé účely rýchlejší a efektívnejší. Jeho bezstavová povaha je tiež užitočná pre servery, ktoré odpovedajú na malé požiadavky mnohých klientov. UDP sa používa napríklad pre DNS, streamované médiá, prenos hlasu alebo videa (VoIP) a online hry.&lt;br /&gt;
&lt;br /&gt;
==Zloženie správy==&lt;br /&gt;
DNS paket pozostáva z piatich sekcií: &lt;br /&gt;
&lt;br /&gt;
'''1. HEADER''' - Záhlavie paketu : Obsahuje identifikátor správy, ktorý generuje klient a server ju skopíruje do odpovede.&lt;br /&gt;
&lt;br /&gt;
'''2. QUESTION''' - Sekcia dotaz : Sekcia dotaz je obsiahnutá ako v pakete dotazu, tak aj v pakete odpovede na dotaz. Obsahuje pole doménové meno, typ dotazu a triedu dotazu&lt;br /&gt;
&lt;br /&gt;
'''3. ANSWER''' - Sekcia odpoveď: Sekcia odpoveď - obsahuje odpoveď na dotaz. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
'''4. AUTHORITY''' - Autoritatívne name servery: Sekcia autoritatívne name servery obsahuje mená name serverov uvedených v zdrojových vetách typu NS. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
'''5. ADDITIONAL''' - Doplnkové informácie: Sekcia doplnkové informácie obsahuje obvykle IP adresy autoritatívnych name serverov. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
===Typy DNS záznamov===&lt;br /&gt;
:Najčastejšie používané sú nasledujúce typy zdrojových záznamov:&lt;br /&gt;
*'''A''' - záznam alebo záznam adresy mapuje hostname na 32-bitovú IPv4 adresu.&lt;br /&gt;
*'''AAAA''' - záznam alebo záznam IPv6 adresy mapuje hostname na 128-bitovú IPv6 adresu.&lt;br /&gt;
*'''CNAME''' -  záznam alebo záznam kanonické meno spôsobuje, že jeden názov domény je aliasom pre iný. Takáto doména má platné všetky subdomény a DNS záznamy originálu.&lt;br /&gt;
*'''MX''' - záznam alebo mail exchange záznam mapuje meno domény na zoznam mail exchange serverov pre danú doménu.&lt;br /&gt;
*'''NS''' - záznam alebo name server záznam mapuje názov domény na zoznam DNS serverov pre danú doménu. Delegácie závisia na NS zázname.&lt;br /&gt;
*'''SOA''' - záznam (start of authority record) alebo začiatok záznamu autority špecifikuje DNS server poskytujúci autoritatívnu informáciu o internetovej doméne.&lt;br /&gt;
&lt;br /&gt;
===Zónový súbor===&lt;br /&gt;
Informácie o doménach a adresách sú uložené v tzv. '''zónových súboroch'''. Jeden zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto domény.O funknčnosť služby doménových mien na strane klienta sa stará resolver. &lt;br /&gt;
'''Resolver''' je sada funkcií (gethostbyname(3), gethostbyaddr(3), atd.), ktoré 	využívajú pri resolvovaní samotné užívateľské aplikácie. Fungovanie resolvera je 	možné nastaviť v súboroch /etc/host.conf, /etc/resolv.conf, /etc/hosts&lt;br /&gt;
:Príklady zónového súboru:&lt;br /&gt;
[[Médiá:príklad zónového súboru.jpg]]&lt;br /&gt;
&lt;br /&gt;
V príklade je uvedená implicitná životnosť jeden týždeň, ďalej SOA záznam popísaný vyžšie, určujúci, že se záznam týka domény kdesi.cz, ktorého správcu je možné kontaktovať na emailu franta@kdesi.cz. Následujúce odkazy na dva DNS servery, ktoré o doméne poskytujú autoritativne informácie – jeden miestni a druhý externý. Ďalej MX záznamy, určujúce kam sa bude doručovat elektronická pošta pre túto doménu. Dalšie dva riadky obsahujú A a AAAA záznamy určujúce adresy počítača cosi.kdesi.cz. Za nimi je definována IPv4 adresa pre server.kdesi.cz a konečne je mu přidelána prezývka www.kdesi.cz.&lt;br /&gt;
&lt;br /&gt;
==Postup hladania IP adresy k menu www.wikipedia.org:==&lt;br /&gt;
&lt;br /&gt;
#Uživatel zadal  www.wikipedia.org , resolver v počítači sa obrátil na lokálny DNS server s dotazom na IP adresu pre www.wikipedia.org.&lt;br /&gt;
#Lokálny DNS server túto informáciu nepozná. Má však k dispozícií adresy koreňových serverov. Na jeden z nich se obráti ( povedzme na 193.0.14.129) a dotaz mu prepošle.&lt;br /&gt;
#Koreňový server tiež nepozná odpoveď. Vie však, že existuje doména najvyššiej úrovňe .org, a aké sú jej autoritatívne servery, ktorej adresy žiadateli poskytne.&lt;br /&gt;
#Lokálny server jeden z nich vyberie (povedzme, že zvolí tld1.ultradns.net s IP adresou 204.74.112.1) a pošle mu dotaz na IP adresu k menu www.wikipedia.org.&lt;br /&gt;
#Oslovený server informáciu opeť nepozná, ale poskytne IP adresy autoritatívnych serverov pre doménu wikipedia.org. sú to ns0.wikimedia.org (207.142.131.207), ns1.wikimedia.org (211.115.107.190) a ns2.wikimedia.org (145.97.39.158).&lt;br /&gt;
#Lokálny server opeť jeden z nich vyberie a pošle mu dotaz na IP adresu ke menu www.wikipedia.org.&lt;br /&gt;
#Kedže toto meno sa už nachádza v doméne wikipedia.org, dostane od jeho servera nesporne autoritatívnu odpoveď, že hladaná IP adresa znie 145.97.39.155&lt;br /&gt;
#Lokálny DNS server túto odpoveď predá uživateľskému počítaču, ktorý sa naň pýtal.&lt;br /&gt;
[[Médiá:hladnaie IP adresy.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Domény:==&lt;br /&gt;
*Národná doména: .sk &lt;br /&gt;
*Európská únia: .eu&lt;br /&gt;
*Nadnárodné domény: .com, .net, .org, .bif, ...&lt;br /&gt;
*Európske domény: .at, .be, .co.uk, .cz, .de,.hu, ...&lt;br /&gt;
*Svetové domén: .nu, .as, .cc, .cx, .je, .dj, .tv, ...&lt;br /&gt;
*Ostatné domeny napr: .coop, .pro, .museum, .aero, sú určené pre registráciu len presne špecifikovaným subjektom. &lt;br /&gt;
&lt;br /&gt;
TLD - .sk, ktorá je vyhradená pre slovenský internet (Doména .sk) vznikla v roku 1993 a jej správou je poverená spoločnosť SK-NIC, a.s. (www.sk-nic.sk)&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2911</id>
		<title>Protokol DNS</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2911"/>
		<updated>2010-03-23T21:25:05Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
==DNS==&lt;br /&gt;
Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.&lt;br /&gt;
&lt;br /&gt;
Každý počítač má na internete svoju vlastnú adresu, tzv. IP, v číselnom formáte. Je obtiažne pamätať si číselné adresy počítačov, na ktorých si chceme prezerať WWW stránky, a preto existuje služba DNS, ktorá &amp;quot;prekladá&amp;quot; číselne IP adresy zo zle zapamätateľného číslicového tvaru na mená, ktoré sa užívateľom pamätajú podstatne lepšie, a naopak. &lt;br /&gt;
Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad) -  napr. webová prezentácia www.slovaknet.sk je umiestnená na serveri s IP adresou 62.168.63.222.&lt;br /&gt;
V širšom poňatí je možné DNS chápať ako '''distribuovanú databázu doménových mien''', v užšom ponímaní je možné DNS chápať ako '''aplikačný protokol''', prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.&lt;br /&gt;
&lt;br /&gt;
V DNS sa nenachádza iba adresa servera, kde je prezentácia umiestená, ale záznam obsahuje aj adresy poštového servera, FTP servera, domén 3. úrovne atď.&lt;br /&gt;
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky &amp;quot;A-Z&amp;quot;, &amp;quot;a-z&amp;quot;, &amp;quot;0-9&amp;quot;, &amp;quot;-&amp;quot; a &amp;quot;_&amp;quot;. (max 255 znakov)&lt;br /&gt;
:DNS si môžete predstaviť ako strom domén:&lt;br /&gt;
[[Súbor:strom DNS.jpg]]&lt;br /&gt;
&lt;br /&gt;
Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server.Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla. &lt;br /&gt;
&lt;br /&gt;
Najvyššiu úroveň stromu domén - domény najvyššej úrovne ('''top-level domains''', '''TLD''') spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre domény najvyššej úrovne (&amp;quot;.com&amp;quot;, &amp;quot;.net&amp;quot;, &amp;quot;.sk&amp;quot; atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch. ( v súčastnosti ich je 13) . Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii každého DNS servera.   &lt;br /&gt;
&lt;br /&gt;
===Základné rozdelenenie DNS serverov : ===&lt;br /&gt;
&lt;br /&gt;
'''Primárny DNS''' server je server, ktorý obsahuje a obsluhuje údaje o doméne a je pre danú doménu autoritatívny. Odpovede primárneho DNS servera sú považované za vždy aktuálne a platné. Odkazy na DNS servery domény sú uložené v nadradenom DNS serveri. Ukazovatele na DNS servery druhej úrovne (&amp;quot;mojadomena.sk&amp;quot;) sú uložené v DNS pre doménu najvyššej úrovne (&amp;quot;.sk&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
'''Sekundárny DNS''' server je server, ktorý pomocou pravidelného kopírovania údajov o doménach z primárneho DNS servera vytvára záložný DNS server pre danú doménu. Úlohou primárneho DNS servera je tiež upozorniť svoje sekundárne DNS servery pri zmene záznamov v DNS. Jeden primárny DNS server môže používať niekoľko sekundárnych DNS serverov, vždy však najmenej jeden.&lt;br /&gt;
&lt;br /&gt;
==Ako pracuje DNS==&lt;br /&gt;
&lt;br /&gt;
Protokol DNS pracuje jednoduchým spôsobom: dotaz - odpoveď. To znamená, že klient pošle serveru dotaz a server na dotaz odpovie. Služba sa pri svojom fungovaní opiera o služby transportných protokolov. DNS používa ako '''TCP''', tak protokol '''UDP''', pričom dotaz aj odpoveď sú prenášané vždy rovnakým transportným protokolom. Pri dotaze na preklad mena na adresu sa používa protokol UDP &lt;br /&gt;
Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne (subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na podriadené DNS servery, ktoré ich spravujú.&lt;br /&gt;
&lt;br /&gt;
====Protokol TCP (Transmission Control Protocol) ====&lt;br /&gt;
Poskytuje spoľahlivé  zasielanie dát po sieti. Kontaktuje prijímateľa pred vyslaním dát. Vďaka TCP môžu programy na počítačoch v sieti vytvárať medzi sebou spojenia (connections), ktorými je možné posielať dáta. Protokol pritom zaručuje, že dáta odoslané z jedného konca spojenia budú prijaté na druhej strane spojenia v rovnakom poradí a bez chýbajúcich častí.&lt;br /&gt;
&lt;br /&gt;
====Protokol UDP (User Datagram Protocol) ====&lt;br /&gt;
Zasiela dáta iným spôsobom ako TCP. Nezisťuje, či boli odoslané dáta prijaté adresátom, preto je nespoľahlivý. connection less protokol (nekontaktuje prijímateľa pred vyslaním dát). UDP protokol prenáša datagramy medzi počítačmi v sieti, ale na rozdiel od TCP nezaručuje, že prenášaný paket sa nestratí, že sa nezmení poradie paketov, ani že sa niektorý paket nedoručí viackrát. Vďaka tomu je UDP pre ľahké a časovo citlivé účely rýchlejší a efektívnejší. Jeho bezstavová povaha je tiež užitočná pre servery, ktoré odpovedajú na malé požiadavky mnohých klientov. UDP sa používa napríklad pre DNS, streamované médiá, prenos hlasu alebo videa (VoIP) a online hry.&lt;br /&gt;
&lt;br /&gt;
==Zloženie správy==&lt;br /&gt;
DNS paket pozostáva z piatich sekcií: &lt;br /&gt;
&lt;br /&gt;
'''1.HEADER''' - Záhlavie paketu : Obsahuje identifikátor správy, ktorý generuje klient a server ju skopíruje do odpovede.&lt;br /&gt;
&lt;br /&gt;
'''2.QUESTION''' - Sekcia dotaz : Sekcia dotaz je obsiahnutá ako v pakete dotazu, tak aj v pakete odpovede na dotaz. Obsahuje pole doménové meno, typ dotazu a triedu dotazu&lt;br /&gt;
&lt;br /&gt;
'''3.ANSWER''' - Sekcia odpoveď: Sekcia odpoveď - obsahuje odpoveď na dotaz. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
'''4.AUTHORITY''' - Autoritatívne name servery: Sekcia autoritatívne name servery obsahuje mená name serverov uvedených v zdrojových vetách typu NS. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
'''5.ADDITIONAL''' - Doplnkové informácie: Sekcia doplnkové informácie obsahuje obvykle IP adresy autoritatívnych name serverov. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
===Typy DNS záznamov===&lt;br /&gt;
:Najčastejšie používané sú nasledujúce typy zdrojových záznamov:&lt;br /&gt;
*'''A''' - záznam alebo záznam adresy mapuje hostname na 32-bitovú IPv4 adresu.&lt;br /&gt;
*'''AAAA''' - záznam alebo záznam IPv6 adresy mapuje hostname na 128-bitovú IPv6 adresu.&lt;br /&gt;
*'''CNAME''' -  záznam alebo záznam kanonické meno spôsobuje, že jeden názov domény je aliasom pre iný. Takáto doména má platné všetky subdomény a DNS záznamy originálu.&lt;br /&gt;
*'''MX''' - záznam alebo mail exchange záznam mapuje meno domény na zoznam mail exchange serverov pre danú doménu.&lt;br /&gt;
*'''NS''' - záznam alebo name server záznam mapuje názov domény na zoznam DNS serverov pre danú doménu. Delegácie závisia na NS zázname.&lt;br /&gt;
*'''SOA''' - záznam (start of authority record) alebo začiatok záznamu autority špecifikuje DNS server poskytujúci autoritatívnu informáciu o internetovej doméne.&lt;br /&gt;
&lt;br /&gt;
===Zónový súbor===&lt;br /&gt;
Informácie o doménach a adresách sú uložené v tzv. '''zónových súboroch'''. Jeden zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto domény.O funknčnosť služby doménových mien na strane klienta sa stará resolver. &lt;br /&gt;
'''Resolver''' je sada funkcií (gethostbyname(3), gethostbyaddr(3), atd.), ktoré 	využívajú pri resolvovaní samotné užívateľské aplikácie. Fungovanie resolvera je 	možné nastaviť v súboroch /etc/host.conf, /etc/resolv.conf, /etc/hosts&lt;br /&gt;
:Príklady zónového súboru:&lt;br /&gt;
[[Médiá:príklad zónového súboru.jpg]]&lt;br /&gt;
&lt;br /&gt;
V príklade je uvedená implicitná životnosť jeden týždeň, ďalej SOA záznam popísaný vyžšie, určujúci, že se záznam týka domény kdesi.cz, ktorého správcu je možné kontaktovať na emailu franta@kdesi.cz. Následujúce odkazy na dva DNS servery, ktoré o doméne poskytujú autoritativne informácie – jeden miestni a druhý externý. Ďalej MX záznamy, určujúce kam sa bude doručovat elektronická pošta pre túto doménu. Dalšie dva riadky obsahujú A a AAAA záznamy určujúce adresy počítača cosi.kdesi.cz. Za nimi je definována IPv4 adresa pre server.kdesi.cz a konečne je mu přidelána prezývka www.kdesi.cz.&lt;br /&gt;
&lt;br /&gt;
==Postup hladania IP adresy k menu www.wikipedia.org:==&lt;br /&gt;
&lt;br /&gt;
#Uživatel zadal  www.wikipedia.org , resolver v počítači sa obrátil na lokálny DNS server s dotazom na IP adresu pre www.wikipedia.org.&lt;br /&gt;
#Lokálny DNS server túto informáciu nepozná. Má však k dispozícií adresy koreňových serverov. Na jeden z nich se obráti ( povedzme na 193.0.14.129) a dotaz mu prepošle.&lt;br /&gt;
#Koreňový server tiež nepozná odpoveď. Vie však, že existuje doména najvyššiej úrovňe .org, a aké sú jej autoritatívne servery, ktorej adresy žiadateli poskytne.&lt;br /&gt;
#Lokálny server jeden z nich vyberie (povedzme, že zvolí tld1.ultradns.net s IP adresou 204.74.112.1) a pošle mu dotaz na IP adresu k menu www.wikipedia.org.&lt;br /&gt;
#Oslovený server informáciu opeť nepozná, ale poskytne IP adresy autoritatívnych serverov pre doménu wikipedia.org. sú to ns0.wikimedia.org (207.142.131.207), ns1.wikimedia.org (211.115.107.190) a ns2.wikimedia.org (145.97.39.158).&lt;br /&gt;
#Lokálny server opeť jeden z nich vyberie a pošle mu dotaz na IP adresu ke menu www.wikipedia.org.&lt;br /&gt;
#Kedže toto meno sa už nachádza v doméne wikipedia.org, dostane od jeho servera nesporne autoritatívnu odpoveď, že hladaná IP adresa znie 145.97.39.155&lt;br /&gt;
#Lokálny DNS server túto odpoveď predá uživateľskému počítaču, ktorý sa naň pýtal.&lt;br /&gt;
[[Médiá:hladnaie IP adresy.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Domény:==&lt;br /&gt;
*Národná doména: .sk &lt;br /&gt;
*Európská únia: .eu&lt;br /&gt;
*Nadnárodné domény: .com, .net, .org, .bif, ...&lt;br /&gt;
*Európske domény: .at, .be, .co.uk, .cz, .de,.hu, ...&lt;br /&gt;
*Svetové domén: .nu, .as, .cc, .cx, .je, .dj, .tv, ...&lt;br /&gt;
*Ostatné domeny napr: .coop, .pro, .museum, .aero, sú určené pre registráciu len presne špecifikovaným subjektom. &lt;br /&gt;
&lt;br /&gt;
TLD - .sk, ktorá je vyhradená pre slovenský internet (Doména .sk) vznikla v roku 1993 a jej správou je poverená spoločnosť SK-NIC, a.s. (www.sk-nic.sk)&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=U%C5%BE%C3%ADvate%C4%BE:Amonatrix&amp;diff=2910</id>
		<title>Užívateľ:Amonatrix</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=U%C5%BE%C3%ADvate%C4%BE:Amonatrix&amp;diff=2910"/>
		<updated>2010-03-23T21:22:08Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;
meno=Tomáš Holanec&lt;br /&gt;
titul=študent bez titulu&lt;br /&gt;
viem=čo viem, a keď neviem naučím sa&lt;br /&gt;
na kiwiki som=niekto, kto by mal koordinovať pridávanie nových článkov na predmete programovanie (študentské prezentácie).&lt;br /&gt;
kontakt=tholanec[zavinac]gmail[bodka]com&lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;br /&gt;
*som asistent asistenta asistentov&lt;br /&gt;
*zatiaľ všetko&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Vyznamenanie_kiwikian_1}}&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Referen%C4%8Dn%C3%BD_model_ISO/OSI&amp;diff=2909</id>
		<title>Referenčný model ISO/OSI</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Referen%C4%8Dn%C3%BD_model_ISO/OSI&amp;diff=2909"/>
		<updated>2010-03-23T21:17:35Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
&lt;br /&gt;
==ISO/OSI==&lt;br /&gt;
&lt;br /&gt;
:ISO – International Standard Organization&lt;br /&gt;
:OSI – Open System Interconnection&lt;br /&gt;
:Vznikol v r.1978; prvý štandard 1979&lt;br /&gt;
:Cieľ: Vytvoriť univerzálny otvorený systém&lt;br /&gt;
OSI je sieťový model, predstavený organizáciou ISO ako štandard, ktorý zjednocuje komunikačné rozhrania, komunikačné jazyky počítačov a sietí a ich prekladače tak, aby sa každé zariadenie pripojené do siete dorozumelo s ľubovoľným ďalším zariadením. &lt;br /&gt;
OSI model sa delí na 7 vrstiev, z ktorých každá opisuje určitú sieťovú funkciu, nevyhnutnú na prenos informácii.&lt;br /&gt;
Delenie na vrstvy zjednodušuje vývoj čiastkových vlastností a funkcií siete, ako aj zjednodušuje nachádzanie a odstraňovanie problémov. &lt;br /&gt;
Okrem OSI modelu existujú aj iné sieťové modely, napríklad TCP/IP. &lt;br /&gt;
:Sedem vrstiev:&lt;br /&gt;
*Fyzická, Spojová, Transportná, Relačná, Prezentačná, Aplikačná.&lt;br /&gt;
[[Súbor:vrstvyOSI.jpg]]&lt;br /&gt;
&lt;br /&gt;
Spodné tri vrstvy su typu klient-klient (peer-to-peer).&lt;br /&gt;
Nasledujúce štyri sú typu end-to-end.&lt;br /&gt;
Každá vrstva môže používať služby len vrstvy ležiacej priamo pod ňou.&lt;br /&gt;
Každá vrstva môže zmenit a pridať hlavičku do dátového balíka (paketu).&lt;br /&gt;
&lt;br /&gt;
===Fyzická vrstva (1)===&lt;br /&gt;
Špecifikuje ako sa posiela bit. &lt;br /&gt;
Do fyzickej vrstvy patria fyzikálne a elektrické špecifikácie zariadení.&lt;br /&gt;
Patrí sem rozloženie pinov, špecifikácia napätí, a typov kábla.&lt;br /&gt;
*Príklady: koaxiálny kábel, optická linka; vysielače, príjmače.&lt;br /&gt;
&lt;br /&gt;
===Spojová vrstva (2)===&lt;br /&gt;
Poskytuje funkcionalitu a prostriedky na prenos dát medzi sieťovými entitami a prípadné opravenie chýb, ktoré sa vyskytnú na fyzickej vrstve&lt;br /&gt;
*Príklady:  protokoly HDLC a ADCCP &lt;br /&gt;
&lt;br /&gt;
===Sieťová vrstva (3)===&lt;br /&gt;
Služba zabezpečuje: &lt;br /&gt;
--Smerovanie paketov, zistenie optimálnej cesty &lt;br /&gt;
--Doručenie paketu na špecifikované miesto&lt;br /&gt;
Používa IP adresovanie a protokoly TCP/IP. Stará sa o smerovanie (routing), kontrolu toku dát. Router je najvýznamnejším sieťovým zariadením. Funguje ako smerovač dát, neposiela ich všade, ale iba do toho segmentu siete, kde sa nachádza príjemca.&lt;br /&gt;
*Príklady: protokoly IP, ICMP&lt;br /&gt;
&lt;br /&gt;
===Transportná vrstva (4)===&lt;br /&gt;
Služba: &lt;br /&gt;
--Poskytuje transparentný prenos dát medzi koncovými používateľmi &lt;br /&gt;
–-Má na starosti spoľahlivosť daného spojenia &lt;br /&gt;
–-Rozdelenie jedného transportného pripojenia na viaceré sieťové pripojenia &lt;br /&gt;
–-Dokáže sledovať a znova posielať pakety, ktoré neboli správne doručené &lt;br /&gt;
*Príklady: TCP a UDP&lt;br /&gt;
&lt;br /&gt;
===Relačná vrstva (5)===&lt;br /&gt;
Služba zabezpečuje: &lt;br /&gt;
–-Smerovanie paketov, zistenie optimálnej cesty &lt;br /&gt;
–-Úlohou je vytvoriť, prevádzkovať a ukončiť reláciu medzi dvoma aplikáciami. &lt;br /&gt;
–-Táto vrstva definuje užívateľké kontá, určuje kto má kedy zasielať dáta a vytvára rôzne možnosti relácie.&lt;br /&gt;
*Príklady: NFS, SQL, X-win, ASP&lt;br /&gt;
&lt;br /&gt;
===Prezentačná vrstva (6)===&lt;br /&gt;
Táto vrstva OSI modelu sa zaoberá formátom a zrozumiteľnou reprezentáciou dát pre prijímajúce zariadenie. &lt;br /&gt;
Ak je to potrebné, dokáže transformovať dáta rozličných formátov &lt;br /&gt;
Protokol: definuje formát údajov, a pravidlá na preklad medzi jednotlivými formátmi &lt;br /&gt;
Plní 3 funkcie :&lt;br /&gt;
:formátovanie dát (prezentácia)&lt;br /&gt;
:šifrovanie dát&lt;br /&gt;
:kompresia dát&lt;br /&gt;
*Príklady: MPEG, MIDI, ASCI&lt;br /&gt;
&lt;br /&gt;
===Aplikačná vrstva (7)===&lt;br /&gt;
Úlohou aplikačnej vrstvy, je poskytovať prístup užívateľským aplikáciam k sieti. &lt;br /&gt;
Aplikačná vrstva je spojivom medzi ostatnými vrstvami OSI modelu a aplikáciami &lt;br /&gt;
Príklady: FTP, Telnet, HTTP, E-mail, DNS&lt;br /&gt;
&lt;br /&gt;
==OSI vs. TCP/IP==&lt;br /&gt;
OSI model je v porovnaní s modelom TCP/IP starší. &lt;br /&gt;
TCP/IP model môžme považovať za nadstavbu, ktorá mala vyriešiť problémy zvniknuté po vybudovaní prvých sietí. Technické špecifikácie IEEE a OSI v 2.vrstve sú veľmi podobné a sú kompatibilné.&lt;br /&gt;
Najvýznamnejší rozdiel medzi modelmi TCP/IP a OSI je aplikačná vrstva, keďže TCP/IP do nej integruje niekoľko vrstiev OSI modelu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:OSIvsTCP.jpg]]&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:OSIvsTCP.jpg&amp;diff=2908</id>
		<title>Súbor:OSIvsTCP.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:OSIvsTCP.jpg&amp;diff=2908"/>
		<updated>2010-03-23T21:13:33Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:VrstvyOSI.jpg&amp;diff=2907</id>
		<title>Súbor:VrstvyOSI.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:VrstvyOSI.jpg&amp;diff=2907"/>
		<updated>2010-03-23T21:13:01Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Referen%C4%8Dn%C3%BD_model_ISO/OSI&amp;diff=2906</id>
		<title>Referenčný model ISO/OSI</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Referen%C4%8Dn%C3%BD_model_ISO/OSI&amp;diff=2906"/>
		<updated>2010-03-23T21:10:19Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
&lt;br /&gt;
==ISO/OSI==&lt;br /&gt;
&lt;br /&gt;
:ISO – International Standard Organization&lt;br /&gt;
:OSI – Open System Interconnection&lt;br /&gt;
:Vznikol v r.1978; prvý štandard 1979&lt;br /&gt;
:Cieľ: Vytvoriť univerzálny otvorený systém&lt;br /&gt;
OSI je sieťový model, predstavený organizáciou ISO ako štandard, ktorý zjednocuje komunikačné rozhrania, komunikačné jazyky počítačov a sietí a ich prekladače tak, aby sa každé zariadenie pripojené do siete dorozumelo s ľubovoľným ďalším zariadením. &lt;br /&gt;
OSI model sa delí na 7 vrstiev, z ktorých každá opisuje určitú sieťovú funkciu, nevyhnutnú na prenos informácii.&lt;br /&gt;
Delenie na vrstvy zjednodušuje vývoj čiastkových vlastností a funkcií siete, ako aj zjednodušuje nachádzanie a odstraňovanie problémov. &lt;br /&gt;
Okrem OSI modelu existujú aj iné sieťové modely, napríklad TCP/IP. &lt;br /&gt;
:Sedem vrstiev:&lt;br /&gt;
*Fyzická, Spojová, Transportná, Relačná, Prezentačná, Aplikačná.&lt;br /&gt;
[[Súbor:vrstvyOSI.jpg]]&lt;br /&gt;
&lt;br /&gt;
Spodné tri vrstvy su typu klient-klient (peer-to-peer).&lt;br /&gt;
Nasledujúce štyri sú typu end-to-end.&lt;br /&gt;
Každá vrstva môže používať služby len vrstvy ležiacej priamo pod ňou.&lt;br /&gt;
Každá vrstva môže zmenit a pridať hlavičku do dátového balíka (paketu).&lt;br /&gt;
&lt;br /&gt;
===Fyzická vrstva (1)===&lt;br /&gt;
Špecifikuje ako sa posiela bit. &lt;br /&gt;
Do fyzickej vrstvy patria fyzikálne a elektrické špecifikácie zariadení.&lt;br /&gt;
Patrí sem rozloženie pinov, špecifikácia napätí, a typov kábla.&lt;br /&gt;
*Príklady: koaxiálny kábel, optická linka; vysielače, príjmače.&lt;br /&gt;
&lt;br /&gt;
===Spojová vrstva (2)===&lt;br /&gt;
Poskytuje funkcionalitu a prostriedky na prenos dát medzi sieťovými entitami a prípadné opravenie chýb, ktoré sa vyskytnú na fyzickej vrstve&lt;br /&gt;
*Príklady:  protokoly HDLC a ADCCP &lt;br /&gt;
&lt;br /&gt;
===Sieťová vrstva (3)===&lt;br /&gt;
Služba zabezpečuje: &lt;br /&gt;
--Smerovanie paketov, zistenie optimálnej cesty &lt;br /&gt;
--Doručenie paketu na špecifikované miesto&lt;br /&gt;
Používa IP adresovanie a protokoly TCP/IP. Stará sa o smerovanie (routing), kontrolu toku dát. Router je najvýznamnejším sieťovým zariadením. Funguje ako smerovač dát, neposiela ich všade, ale iba do toho segmentu siete, kde sa nachádza príjemca.&lt;br /&gt;
*Príklady: protokoly IP, ICMP&lt;br /&gt;
&lt;br /&gt;
===Transportná vrstva (4)===&lt;br /&gt;
Služba: &lt;br /&gt;
--Poskytuje transparentný prenos dát medzi koncovými používateľmi &lt;br /&gt;
–-Má na starosti spoľahlivosť daného spojenia &lt;br /&gt;
–-Rozdelenie jedného transportného pripojenia na viaceré sieťové pripojenia &lt;br /&gt;
–-Dokáže sledovať a znova posielať pakety, ktoré neboli správne doručené &lt;br /&gt;
*Príklady: TCP a UDP&lt;br /&gt;
&lt;br /&gt;
===Relačná vrstva (5)===&lt;br /&gt;
Služba zabezpečuje: &lt;br /&gt;
–-Smerovanie paketov, zistenie optimálnej cesty &lt;br /&gt;
–-Úlohou je vytvoriť, prevádzkovať a ukončiť reláciu medzi dvoma aplikáciami. &lt;br /&gt;
–-Táto vrstva definuje užívateľké kontá, určuje kto má kedy zasielať dáta a vytvára rôzne možnosti relácie.&lt;br /&gt;
*Príklady: NFS, SQL, X-win, ASP&lt;br /&gt;
&lt;br /&gt;
===Prezentačná vrstva (6)===&lt;br /&gt;
Táto vrstva OSI modelu sa zaoberá formátom a zrozumiteľnou reprezentáciou dát pre prijímajúce zariadenie. &lt;br /&gt;
Ak je to potrebné, dokáže transformovať dáta rozličných formátov &lt;br /&gt;
Protokol: definuje formát údajov, a pravidlá na preklad medzi jednotlivými formátmi &lt;br /&gt;
Plní 3 funkcie :&lt;br /&gt;
:formátovanie dát (prezentácia)&lt;br /&gt;
:šifrovanie dát&lt;br /&gt;
:kompresia dát&lt;br /&gt;
*Príklady: MPEG, MIDI, ASCI&lt;br /&gt;
&lt;br /&gt;
===Aplikačná vrstva (7)===&lt;br /&gt;
Úlohou aplikačnej vrstvy, je poskytovať prístup užívateľským aplikáciam k sieti. &lt;br /&gt;
Aplikačná vrstva je spojivom medzi ostatnými vrstvami OSI modelu a aplikáciami &lt;br /&gt;
Príklady: FTP, Telnet, HTTP, E-mail, DNS&lt;br /&gt;
&lt;br /&gt;
==OSI vs. TCP/IP==&lt;br /&gt;
OSI model je v porovnaní s modelom TCP/IP starší. &lt;br /&gt;
TCP/IP model môžme považovať za nadstavbu, ktorá mala vyriešiť problémy zvniknuté po vybudovaní prvých sietí. &lt;br /&gt;
Technické špecifikácie IEEE a OSI v 2.vrstve sú veľmi podobné a sú kompatibilné.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:OSIvsTCP.jpg]]&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=U%C5%BE%C3%ADvate%C4%BE:Amonatrix&amp;diff=2904</id>
		<title>Užívateľ:Amonatrix</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=U%C5%BE%C3%ADvate%C4%BE:Amonatrix&amp;diff=2904"/>
		<updated>2010-03-23T20:30:23Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: Vytvorená stránka „&amp;lt;properties&amp;gt; meno=Tomáš Holanec titul=študent bez titulu viem=čo viem, a keď neviem naučím sa na kiwiki som=niekto, kto by mal koordinovať pridávanie nových člá…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;
meno=Tomáš Holanec&lt;br /&gt;
titul=študent bez titulu&lt;br /&gt;
viem=čo viem, a keď neviem naučím sa&lt;br /&gt;
na kiwiki som=niekto, kto by mal koordinovať pridávanie nových článkov na predmete programovanie (študentské prezentácie).&lt;br /&gt;
kontakt=tholanec[zavinac]gmail[bodka]com&lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;br /&gt;
*zatiaľ všetko&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2865</id>
		<title>Protokol DNS</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2865"/>
		<updated>2010-03-22T22:16:42Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
==DNS==&lt;br /&gt;
Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.&lt;br /&gt;
&lt;br /&gt;
Každý počítač má na internete svoju vlastnú adresu, tzv. IP, v číselnom formáte. Je obtiažne pamätať si číselné adresy počítačov, na ktorých si chceme prezerať WWW stránky, a preto existuje služba DNS, ktorá &amp;quot;prekladá&amp;quot; číselne IP adresy zo zle zapamätateľného číslicového tvaru na mená, ktoré sa užívateľom pamätajú podstatne lepšie, a naopak. &lt;br /&gt;
Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad) -  napr. webová prezentácia www.slovaknet.sk je umiestnená na serveri s IP adresou 62.168.63.222.&lt;br /&gt;
V širšom poňatí je možné DNS chápať ako '''distribuovanú databázu doménových mien''', v užšom ponímaní je možné DNS chápať ako '''aplikačný protokol''', prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.&lt;br /&gt;
&lt;br /&gt;
V DNS sa nenachádza iba adresa servera, kde je prezentácia umiestená, ale záznam obsahuje aj adresy poštového servera, FTP servera, domén 3. úrovne atď.&lt;br /&gt;
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky &amp;quot;A-Z&amp;quot;, &amp;quot;a-z&amp;quot;, &amp;quot;0-9&amp;quot;, &amp;quot;-&amp;quot; a &amp;quot;_&amp;quot;. (max 255 znakov)&lt;br /&gt;
:DNS si môžete predstaviť ako strom domén:&lt;br /&gt;
[[Súbor:strom DNS.jpg]]&lt;br /&gt;
&lt;br /&gt;
Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server.Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla. &lt;br /&gt;
&lt;br /&gt;
Najvyššiu úroveň stromu domén - domény najvyššej úrovne ('''top-level domains''', '''TLD''') spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre domény najvyššej úrovne (&amp;quot;.com&amp;quot;, &amp;quot;.net&amp;quot;, &amp;quot;.sk&amp;quot; atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch. ( v súčastnosti ich je 13) . Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii každého DNS servera.   &lt;br /&gt;
&lt;br /&gt;
===Základné rozdelenenie DNS serverov : ===&lt;br /&gt;
&lt;br /&gt;
'''Primárny DNS''' server je server, ktorý obsahuje a obsluhuje údaje o doméne a je pre danú doménu autoritatívny. Odpovede primárneho DNS servera sú považované za vždy aktuálne a platné. Odkazy na DNS servery domény sú uložené v nadradenom DNS serveri. Ukazovatele na DNS servery druhej úrovne (&amp;quot;mojadomena.sk&amp;quot;) sú uložené v DNS pre doménu najvyššej úrovne (&amp;quot;.sk&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
'''Sekundárny DNS''' server je server, ktorý pomocou pravidelného kopírovania údajov o doménach z primárneho DNS servera vytvára záložný DNS server pre danú doménu. Úlohou primárneho DNS servera je tiež upozorniť svoje sekundárne DNS servery pri zmene záznamov v DNS. Jeden primárny DNS server môže používať niekoľko sekundárnych DNS serverov, vždy však najmenej jeden.&lt;br /&gt;
&lt;br /&gt;
==Ako pracuje DNS==&lt;br /&gt;
&lt;br /&gt;
Protokol DNS pracuje jednoduchým spôsobom: dotaz - odpoveď. To znamená, že klient pošle serveru dotaz a server na dotaz odpovie. Služba sa pri svojom fungovaní opiera o služby transportných protokolov. DNS používa ako '''TCP''', tak protokol '''UDP''', pričom dotaz aj odpoveď sú prenášané vždy rovnakým transportným protokolom. Pri dotaze na preklad mena na adresu sa používa protokol UDP &lt;br /&gt;
Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne (subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na podriadené DNS servery, ktoré ich spravujú.&lt;br /&gt;
&lt;br /&gt;
====Protokol TCP (Transmission Control Protocol) ====&lt;br /&gt;
Poskytuje spoľahlivé  zasielanie dát po sieti. Kontaktuje prijímateľa pred vyslaním dát. Vďaka TCP môžu programy na počítačoch v sieti vytvárať medzi sebou spojenia (connections), ktorými je možné posielať dáta. Protokol pritom zaručuje, že dáta odoslané z jedného konca spojenia budú prijaté na druhej strane spojenia v rovnakom poradí a bez chýbajúcich častí.&lt;br /&gt;
&lt;br /&gt;
====Protokol UDP (User Datagram Protocol) ====&lt;br /&gt;
Zasiela dáta iným spôsobom ako TCP. Nezisťuje, či boli odoslané dáta prijaté adresátom, preto je nespoľahlivý. connection less protokol (nekontaktuje prijímateľa pred vyslaním dát). UDP protokol prenáša datagramy medzi počítačmi v sieti, ale na rozdiel od TCP nezaručuje, že prenášaný paket sa nestratí, že sa nezmení poradie paketov, ani že sa niektorý paket nedoručí viackrát. Vďaka tomu je UDP pre ľahké a časovo citlivé účely rýchlejší a efektívnejší. Jeho bezstavová povaha je tiež užitočná pre servery, ktoré odpovedajú na malé požiadavky mnohých klientov. UDP sa používa napríklad pre DNS, streamované médiá, prenos hlasu alebo videa (VoIP) a online hry.&lt;br /&gt;
&lt;br /&gt;
==Zloženie správy==&lt;br /&gt;
DNS paket pozostáva z piatich sekcií: &lt;br /&gt;
*'''1.HEADER''' - Záhlavie paketu : Obsahuje identifikátor správy, ktorý generuje klient a server ju skopíruje do odpovede.&lt;br /&gt;
&lt;br /&gt;
*'''2.QUESTION''' - Sekcia dotaz : Sekcia dotaz je obsiahnutá ako v pakete dotazu, tak aj v pakete odpovede na dotaz. Obsahuje pole doménové meno, typ dotazu a triedu dotazu&lt;br /&gt;
&lt;br /&gt;
*'''3.ANSWER''' - Sekcia odpoveď: Sekcia odpoveď - obsahuje odpoveď na dotaz. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''4.AUTHORITY''' - Autoritatívne name servery: Sekcia autoritatívne name servery obsahuje mená name serverov uvedených v zdrojových vetách typu NS. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''5.ADDITIONAL''' - Doplnkové informácie: Sekcia doplnkové informácie obsahuje obvykle IP adresy autoritatívnych name serverov. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
===Typy DNS záznamov===&lt;br /&gt;
:Najčastejšie používané sú nasledujúce typy zdrojových záznamov:&lt;br /&gt;
*'''A''' - záznam alebo záznam adresy mapuje hostname na 32-bitovú IPv4 adresu.&lt;br /&gt;
*'''AAAA''' - záznam alebo záznam IPv6 adresy mapuje hostname na 128-bitovú IPv6 adresu.&lt;br /&gt;
*'''CNAME''' -  záznam alebo záznam kanonické meno spôsobuje, že jeden názov domény je aliasom pre iný. Takáto doména má platné všetky subdomény a DNS záznamy originálu.&lt;br /&gt;
*'''MX''' - záznam alebo mail exchange záznam mapuje meno domény na zoznam mail exchange serverov pre danú doménu.&lt;br /&gt;
*'''NS''' - záznam alebo name server záznam mapuje názov domény na zoznam DNS serverov pre danú doménu. Delegácie závisia na NS zázname.&lt;br /&gt;
*'''SOA''' - záznam (start of authority record) alebo začiatok záznamu autority špecifikuje DNS server poskytujúci autoritatívnu informáciu o internetovej doméne.&lt;br /&gt;
&lt;br /&gt;
===Zónový súbor===&lt;br /&gt;
Informácie o doménach a adresách sú uložené v tzv. '''zónových súboroch'''. Jeden zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto domény.O funknčnosť služby doménových mien na strane klienta sa stará resolver. &lt;br /&gt;
'''Resolver''' je sada funkcií (gethostbyname(3), gethostbyaddr(3), atd.), ktoré 	využívajú pri resolvovaní samotné užívateľské aplikácie. Fungovanie resolvera je 	možné nastaviť v súboroch /etc/host.conf, /etc/resolv.conf, /etc/hosts&lt;br /&gt;
:Príklady zónového súboru:&lt;br /&gt;
[[Médiá:príklad zónového súboru.jpg]]&lt;br /&gt;
&lt;br /&gt;
V príklade je uvedená implicitná životnosť jeden týždeň, ďalej SOA záznam popísaný vyžšie, určujúci, že se záznam týka domény kdesi.cz, ktorého správcu je možné kontaktovať na emailu franta@kdesi.cz. Následujúce odkazy na dva DNS servery, ktoré o doméne poskytujú autoritativne informácie – jeden miestni a druhý externý. Ďalej MX záznamy, určujúce kam sa bude doručovat elektronická pošta pre túto doménu. Dalšie dva riadky obsahujú A a AAAA záznamy určujúce adresy počítača cosi.kdesi.cz. Za nimi je definována IPv4 adresa pre server.kdesi.cz a konečne je mu přidelána prezývka www.kdesi.cz.&lt;br /&gt;
&lt;br /&gt;
==Postup hladania IP adresy k menu www.wikipedia.org:==&lt;br /&gt;
&lt;br /&gt;
#Uživatel zadal  www.wikipedia.org , resolver v počítači sa obrátil na lokálny DNS server s dotazom na IP adresu pre www.wikipedia.org.&lt;br /&gt;
#Lokálny DNS server túto informáciu nepozná. Má však k dispozícií adresy koreňových serverov. Na jeden z nich se obráti ( povedzme na 193.0.14.129) a dotaz mu prepošle.&lt;br /&gt;
#Koreňový server tiež nepozná odpoveď. Vie však, že existuje doména najvyššiej úrovňe .org, a aké sú jej autoritatívne servery, ktorej adresy žiadateli poskytne.&lt;br /&gt;
#Lokálny server jeden z nich vyberie (povedzme, že zvolí tld1.ultradns.net s IP adresou 204.74.112.1) a pošle mu dotaz na IP adresu k menu www.wikipedia.org.&lt;br /&gt;
#Oslovený server informáciu opeť nepozná, ale poskytne IP adresy autoritatívnych serverov pre doménu wikipedia.org. sú to ns0.wikimedia.org (207.142.131.207), ns1.wikimedia.org (211.115.107.190) a ns2.wikimedia.org (145.97.39.158).&lt;br /&gt;
#Lokálny server opeť jeden z nich vyberie a pošle mu dotaz na IP adresu ke menu www.wikipedia.org.&lt;br /&gt;
#Kedže toto meno sa už nachádza v doméne wikipedia.org, dostane od jeho servera nesporne autoritatívnu odpoveď, že hladaná IP adresa znie 145.97.39.155&lt;br /&gt;
#Lokálny DNS server túto odpoveď predá uživateľskému počítaču, ktorý sa naň pýtal.&lt;br /&gt;
[[Médiá:hladnaie IP adresy.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Domény:==&lt;br /&gt;
*Národná doména: .sk &lt;br /&gt;
*Európská únia: .eu&lt;br /&gt;
*Nadnárodné domény: .com, .net, .org, .bif, ...&lt;br /&gt;
*Európske domény: .at, .be, .co.uk, .cz, .de,.hu, ...&lt;br /&gt;
*Svetové domén: .nu, .as, .cc, .cx, .je, .dj, .tv, ...&lt;br /&gt;
*Ostatné domeny napr: .coop, .pro, .museum, .aero, sú určené pre registráciu len presne špecifikovaným subjektom. &lt;br /&gt;
&lt;br /&gt;
TLD - .sk, ktorá je vyhradená pre slovenský internet (Doména .sk) vznikla v roku 1993 a jej správou je poverená spoločnosť SK-NIC, a.s. (www.sk-nic.sk)&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Referen%C4%8Dn%C3%BD_model_ISO/OSI&amp;diff=2864</id>
		<title>Referenčný model ISO/OSI</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Referen%C4%8Dn%C3%BD_model_ISO/OSI&amp;diff=2864"/>
		<updated>2010-03-22T22:13:39Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: Vytvorená stránka „Kategória:Informatika Kategória:Počítačové siete Kategória:Protokoly {{Draft}} Návrat na stránku Algoritmy a programovanie.  ==ISO/OSI==  :ISO – …“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
&lt;br /&gt;
==ISO/OSI==&lt;br /&gt;
&lt;br /&gt;
:ISO – International Standard Organization&lt;br /&gt;
:OSI – Open System Interconnection&lt;br /&gt;
:Vznikol v r.1978; prvý štandard 1979&lt;br /&gt;
:Cieľ: Vytvoriť univerzálny otvorený systém&lt;br /&gt;
OSI je sieťový model, predstavený organizáciou ISO ako štandard, ktorý zjednocuje komunikačné rozhrania, komunikačné jazyky počítačov a sietí a ich prekladače tak, aby sa každé zariadenie pripojené do siete dorozumelo s ľubovoľným ďalším zariadením. &lt;br /&gt;
OSI model sa delí na 7 vrstiev, z ktorých každá opisuje určitú sieťovú funkciu, nevyhnutnú na prenos informácii.&lt;br /&gt;
Delenie na vrstvy zjednodušuje vývoj čiastkových vlastností a funkcií siete, ako aj zjednodušuje nachádzanie a odstraňovanie problémov. &lt;br /&gt;
Okrem OSI modelu existujú aj iné sieťové modely, napríklad TCP/IP. &lt;br /&gt;
:Sedem vrstiev:&lt;br /&gt;
*Fyzická, Spojová, Transportná, Relačná, Prezentačná, Aplikačná.&lt;br /&gt;
[[Súbor:vrstvyOSI.jpg]]&lt;br /&gt;
&lt;br /&gt;
Spodné tri vrstvy su typu klient-klient (peer-to-peer).&lt;br /&gt;
Nasledujúce štyri sú typu end-to-end.&lt;br /&gt;
Každá vrstva môže používať služby len vrstvy ležiacej priamo pod ňou.&lt;br /&gt;
Každá vrstva môže zmenit a pridať hlavičku do dátového balíka (paketu).&lt;br /&gt;
&lt;br /&gt;
===Fyzická vrstva (1)===&lt;br /&gt;
Špecifikuje ako sa posiela bit. &lt;br /&gt;
Do fyzickej vrstvy patria fyzikálne a elektrické špecifikácie zariadení.&lt;br /&gt;
Patrí sem rozloženie pinov, špecifikácia napätí, a typov kábla.&lt;br /&gt;
Príklady: koaxiálny kábel, optická linka; vysielače, príjmače.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2863</id>
		<title>Protokol DNS</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2863"/>
		<updated>2010-03-22T22:00:07Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
==DNS==&lt;br /&gt;
Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.&lt;br /&gt;
&lt;br /&gt;
Každý počítač má na internete svoju vlastnú adresu, tzv. IP, v číselnom formáte. Je obtiažne pamätať si číselné adresy počítačov, na ktorých si chceme prezerať WWW stránky, a preto existuje služba DNS, ktorá &amp;quot;prekladá&amp;quot; číselne IP adresy zo zle zapamätateľného číslicového tvaru na mená, ktoré sa užívateľom pamätajú podstatne lepšie, a naopak. &lt;br /&gt;
Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad) -  napr. webová prezentácia www.slovaknet.sk je umiestnená na serveri s IP adresou 62.168.63.222.&lt;br /&gt;
V širšom poňatí je možné DNS chápať ako distribuovanú databázu doménových mien, v užšom ponímaní je možné DNS chápať ako aplikačný protokol, prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.&lt;br /&gt;
&lt;br /&gt;
V DNS sa nenachádza iba adresa servera, kde je prezentácia umiestená, ale záznam obsahuje aj adresy poštového servera, FTP servera, domén 3. úrovne atď.&lt;br /&gt;
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky &amp;quot;A-Z&amp;quot;, &amp;quot;a-z&amp;quot;, &amp;quot;0-9&amp;quot;, &amp;quot;-&amp;quot; a &amp;quot;_&amp;quot;. (max 255 znakov)&lt;br /&gt;
:DNS si môžete predstaviť ako strom domén:&lt;br /&gt;
[[Súbor:strom DNS.jpg]]&lt;br /&gt;
&lt;br /&gt;
Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server.Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla. &lt;br /&gt;
&lt;br /&gt;
Najvyššiu úroveň stromu domén - domény najvyššej úrovne ('''top-level domains''', '''TLD''') spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre domény najvyššej úrovne (&amp;quot;.com&amp;quot;, &amp;quot;.net&amp;quot;, &amp;quot;.sk&amp;quot; atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch. ( v súčastnosti ich je 13) . Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii každého DNS servera.   &lt;br /&gt;
&lt;br /&gt;
===Základné rozdelenenie DNS serverov : ===&lt;br /&gt;
&lt;br /&gt;
'''Primárny DNS''' server je server, ktorý obsahuje a obsluhuje údaje o doméne a je pre danú doménu autoritatívny. Odpovede primárneho DNS servera sú považované za vždy aktuálne a platné. Odkazy na DNS servery domény sú uložené v nadradenom DNS serveri. Ukazovatele na DNS servery druhej úrovne (&amp;quot;mojadomena.sk&amp;quot;) sú uložené v DNS pre doménu najvyššej úrovne (&amp;quot;.sk&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
'''Sekundárny DNS''' server je server, ktorý pomocou pravidelného kopírovania údajov o doménach z primárneho DNS servera vytvára záložný DNS server pre danú doménu. Úlohou primárneho DNS servera je tiež upozorniť svoje sekundárne DNS servery pri zmene záznamov v DNS. Jeden primárny DNS server môže používať niekoľko sekundárnych DNS serverov, vždy však najmenej jeden.&lt;br /&gt;
&lt;br /&gt;
==Ako pracuje DNS==&lt;br /&gt;
&lt;br /&gt;
Protokol DNS pracuje jednoduchým spôsobom: dotaz - odpoveď. To znamená, že klient pošle serveru dotaz a server na dotaz odpovie. Služba sa pri svojom fungovaní opiera o služby transportných protokolov. DNS používa ako '''TCP''', tak protokol '''UDP''', pričom dotaz aj odpoveď sú prenášané vždy rovnakým transportným protokolom. Pri dotaze na preklad mena na adresu sa používa protokol UDP &lt;br /&gt;
Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne (subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na podriadené DNS servery, ktoré ich spravujú.&lt;br /&gt;
&lt;br /&gt;
====Protokol TCP (Transmission Control Protocol) ====&lt;br /&gt;
Poskytuje spoľahlivé  zasielanie dát po sieti. Kontaktuje prijímateľa pred vyslaním dát. Vďaka TCP môžu programy na počítačoch v sieti vytvárať medzi sebou spojenia (connections), ktorými je možné posielať dáta. Protokol pritom zaručuje, že dáta odoslané z jedného konca spojenia budú prijaté na druhej strane spojenia v rovnakom poradí a bez chýbajúcich častí.&lt;br /&gt;
&lt;br /&gt;
====Protokol UDP (User Datagram Protocol) ====&lt;br /&gt;
Zasiela dáta iným spôsobom ako TCP. Nezisťuje, či boli odoslané dáta prijaté adresátom, preto je nespoľahlivý. connection less protokol (nekontaktuje prijímateľa pred vyslaním dát). UDP protokol prenáša datagramy medzi počítačmi v sieti, ale na rozdiel od TCP nezaručuje, že prenášaný paket sa nestratí, že sa nezmení poradie paketov, ani že sa niektorý paket nedoručí viackrát. Vďaka tomu je UDP pre ľahké a časovo citlivé účely rýchlejší a efektívnejší. Jeho bezstavová povaha je tiež užitočná pre servery, ktoré odpovedajú na malé požiadavky mnohých klientov. UDP sa používa napríklad pre DNS, streamované médiá, prenos hlasu alebo videa (VoIP) a online hry.&lt;br /&gt;
&lt;br /&gt;
==Zloženie správy==&lt;br /&gt;
DNS paket pozostáva z piatich sekcií: &lt;br /&gt;
*'''1.HEADER''' - Záhlavie paketu : Obsahuje identifikátor správy, ktorý generuje klient a server ju skopíruje do odpovede.&lt;br /&gt;
&lt;br /&gt;
*'''2.QUESTION''' - Sekcia dotaz : Sekcia dotaz je obsiahnutá ako v pakete dotazu, tak aj v pakete odpovede na dotaz. Obsahuje pole doménové meno, typ dotazu a triedu dotazu&lt;br /&gt;
&lt;br /&gt;
*'''3.ANSWER''' - Sekcia odpoveď: Sekcia odpoveď - obsahuje odpoveď na dotaz. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''4.AUTHORITY''' - Autoritatívne name servery: Sekcia autoritatívne name servery obsahuje mená name serverov uvedených v zdrojových vetách typu NS. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''5.ADDITIONAL''' - Doplnkové informácie: Sekcia doplnkové informácie obsahuje obvykle IP adresy autoritatívnych name serverov. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
===Typy DNS záznamov===&lt;br /&gt;
:Najčastejšie používané sú nasledujúce typy zdrojových záznamov:&lt;br /&gt;
*'''A''' - záznam alebo záznam adresy mapuje hostname na 32-bitovú IPv4 adresu.&lt;br /&gt;
*'''AAAA''' - záznam alebo záznam IPv6 adresy mapuje hostname na 128-bitovú IPv6 adresu.&lt;br /&gt;
*'''CNAME''' -  záznam alebo záznam kanonické meno spôsobuje, že jeden názov domény je aliasom pre iný. Takáto doména má platné všetky subdomény a DNS záznamy originálu.&lt;br /&gt;
*'''MX''' - záznam alebo mail exchange záznam mapuje meno domény na zoznam mail exchange serverov pre danú doménu.&lt;br /&gt;
*'''NS''' - záznam alebo name server záznam mapuje názov domény na zoznam DNS serverov pre danú doménu. Delegácie závisia na NS zázname.&lt;br /&gt;
*'''SOA''' - záznam (start of authority record) alebo začiatok záznamu autority špecifikuje DNS server poskytujúci autoritatívnu informáciu o internetovej doméne.&lt;br /&gt;
&lt;br /&gt;
===Zónový súbor===&lt;br /&gt;
Informácie o doménach a adresách sú uložené v tzv. '''zónových súboroch'''. Jeden zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto domény.O funknčnosť služby doménových mien na strane klienta sa stará resolver. &lt;br /&gt;
'''Resolver''' je sada funkcií (gethostbyname(3), gethostbyaddr(3), atd.), ktoré 	využívajú pri resolvovaní samotné užívateľské aplikácie. Fungovanie resolvera je 	možné nastaviť v súboroch /etc/host.conf, /etc/resolv.conf, /etc/hosts&lt;br /&gt;
:Príklady zónového súboru:&lt;br /&gt;
[[Médiá:príklad zónového súboru.jpg]]&lt;br /&gt;
&lt;br /&gt;
V príklade je uvedená implicitná životnosť jeden týždeň, ďalej SOA záznam popísaný vyžšie, určujúci, že se záznam týka domény kdesi.cz, ktorého správcu je možné kontaktovať na emailu franta@kdesi.cz. Následujúce odkazy na dva DNS servery, ktoré o doméne poskytujú autoritativne informácie – jeden miestni a druhý externý. Ďalej MX záznamy, určujúce kam sa bude doručovat elektronická pošta pre túto doménu. Dalšie dva riadky obsahujú A a AAAA záznamy určujúce adresy počítača cosi.kdesi.cz. Za nimi je definována IPv4 adresa pre server.kdesi.cz a konečne je mu přidelána prezývka www.kdesi.cz.&lt;br /&gt;
&lt;br /&gt;
==Postup hladania IP adresy k menu www.wikipedia.org:==&lt;br /&gt;
&lt;br /&gt;
#Uživatel zadal  www.wikipedia.org , resolver v počítači sa obrátil na lokálny DNS server s dotazom na IP adresu pre www.wikipedia.org.&lt;br /&gt;
#Lokálny DNS server túto informáciu nepozná. Má však k dispozícií adresy koreňových serverov. Na jeden z nich se obráti ( povedzme na 193.0.14.129) a dotaz mu prepošle.&lt;br /&gt;
#Koreňový server tiež nepozná odpoveď. Vie však, že existuje doména najvyššiej úrovňe .org, a aké sú jej autoritatívne servery, ktorej adresy žiadateli poskytne.&lt;br /&gt;
#Lokálny server jeden z nich vyberie (povedzme, že zvolí tld1.ultradns.net s IP adresou 204.74.112.1) a pošle mu dotaz na IP adresu k menu www.wikipedia.org.&lt;br /&gt;
#Oslovený server informáciu opeť nepozná, ale poskytne IP adresy autoritatívnych serverov pre doménu wikipedia.org. sú to ns0.wikimedia.org (207.142.131.207), ns1.wikimedia.org (211.115.107.190) a ns2.wikimedia.org (145.97.39.158).&lt;br /&gt;
#Lokálny server opeť jeden z nich vyberie a pošle mu dotaz na IP adresu ke menu www.wikipedia.org.&lt;br /&gt;
#Kedže toto meno sa už nachádza v doméne wikipedia.org, dostane od jeho servera nesporne autoritatívnu odpoveď, že hladaná IP adresa znie 145.97.39.155&lt;br /&gt;
#Lokálny DNS server túto odpoveď predá uživateľskému počítaču, ktorý sa naň pýtal.&lt;br /&gt;
[[Médiá:hladnaie IP adresy.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Domény:==&lt;br /&gt;
*Národná doména: .sk &lt;br /&gt;
*Európská únia: .eu&lt;br /&gt;
*Nadnárodné domény: .com, .net, .org, .bif, ...&lt;br /&gt;
*Európske domény: .at, .be, .co.uk, .cz, .de,.hu, ...&lt;br /&gt;
*Svetové domén: .nu, .as, .cc, .cx, .je, .dj, .tv, ...&lt;br /&gt;
*Ostatné domeny napr: .coop, .pro, .museum, .aero, sú určené pre registráciu len presne špecifikovaným subjektom. &lt;br /&gt;
&lt;br /&gt;
TLD - .sk, ktorá je vyhradená pre slovenský internet (Doména .sk) vznikla v roku 1993 a jej správou je poverená spoločnosť SK-NIC, a.s. (www.sk-nic.sk)&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2862</id>
		<title>Protokol DNS</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2862"/>
		<updated>2010-03-22T21:53:39Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
==DNS==&lt;br /&gt;
Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.&lt;br /&gt;
&lt;br /&gt;
Každý počítač má na internete svoju vlastnú adresu, tzv. IP, v číselnom formáte. Je obtiažne pamätať si číselné adresy počítačov, na ktorých si chceme prezerať WWW stránky, a preto existuje služba DNS, ktorá &amp;quot;prekladá&amp;quot; číselne IP adresy zo zle zapamätateľného číslicového tvaru na mená, ktoré sa užívateľom pamätajú podstatne lepšie, a naopak. &lt;br /&gt;
Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad) -  napr. webová prezentácia www.slovaknet.sk je umiestnená na serveri s IP adresou 62.168.63.222.&lt;br /&gt;
V širšom poňatí je možné DNS chápať ako distribuovanú databázu doménových mien, v užšom ponímaní je možné DNS chápať ako aplikačný protokol, prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.&lt;br /&gt;
&lt;br /&gt;
V DNS sa nenachádza iba adresa servera, kde je prezentácia umiestená, ale záznam obsahuje aj adresy poštového servera, FTP servera, domén 3. úrovne atď.&lt;br /&gt;
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky &amp;quot;A-Z&amp;quot;, &amp;quot;a-z&amp;quot;, &amp;quot;0-9&amp;quot;, &amp;quot;-&amp;quot; a &amp;quot;_&amp;quot;. (max 255 znakov)&lt;br /&gt;
:DNS si môžete predstaviť ako strom domén:&lt;br /&gt;
[[Súbor:strom DNS.jpg]]&lt;br /&gt;
&lt;br /&gt;
Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server.Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla. &lt;br /&gt;
&lt;br /&gt;
Najvyššiu úroveň stromu domén - domény najvyššej úrovne ('''top-level domains''', '''TLD''') spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre domény najvyššej úrovne (&amp;quot;.com&amp;quot;, &amp;quot;.net&amp;quot;, &amp;quot;.sk&amp;quot; atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch. ( v súčastnosti ich je 13) . Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii každého DNS servera.   &lt;br /&gt;
&lt;br /&gt;
===Základné rozdelenenie DNS serverov : ===&lt;br /&gt;
&lt;br /&gt;
'''Primárny DNS''' server je server, ktorý obsahuje a obsluhuje údaje o doméne a je pre danú doménu autoritatívny. Odpovede primárneho DNS servera sú považované za vždy aktuálne a platné. Odkazy na DNS servery domény sú uložené v nadradenom DNS serveri. Ukazovatele na DNS servery druhej úrovne (&amp;quot;mojadomena.sk&amp;quot;) sú uložené v DNS pre doménu najvyššej úrovne (&amp;quot;.sk&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
'''Sekundárny DNS''' server je server, ktorý pomocou pravidelného kopírovania údajov o doménach z primárneho DNS servera vytvára záložný DNS server pre danú doménu. Úlohou primárneho DNS servera je tiež upozorniť svoje sekundárne DNS servery pri zmene záznamov v DNS. Jeden primárny DNS server môže používať niekoľko sekundárnych DNS serverov, vždy však najmenej jeden.&lt;br /&gt;
&lt;br /&gt;
==Ako pracuje DNS==&lt;br /&gt;
&lt;br /&gt;
Protokol DNS pracuje jednoduchým spôsobom: dotaz - odpoveď. To znamená, že klient pošle serveru dotaz a server na dotaz odpovie. Služba sa pri svojom fungovaní opiera o služby transportných protokolov. DNS používa ako '''TCP''', tak protokol '''UDP''', pričom dotaz aj odpoveď sú prenášané vždy rovnakým transportným protokolom. Pri dotaze na preklad mena na adresu sa používa protokol UDP &lt;br /&gt;
Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne (subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na podriadené DNS servery, ktoré ich spravujú.&lt;br /&gt;
&lt;br /&gt;
====Protokol TCP (Transmission Control Protocol) ====&lt;br /&gt;
Poskytuje spoľahlivé  zasielanie dát po sieti. Kontaktuje prijímateľa pred vyslaním dát. Vďaka TCP môžu programy na počítačoch v sieti vytvárať medzi sebou spojenia (connections), ktorými je možné posielať dáta. Protokol pritom zaručuje, že dáta odoslané z jedného konca spojenia budú prijaté na druhej strane spojenia v rovnakom poradí a bez chýbajúcich častí.&lt;br /&gt;
&lt;br /&gt;
====Protokol UDP (User Datagram Protocol) ====&lt;br /&gt;
Zasiela dáta iným spôsobom ako TCP. Nezisťuje, či boli odoslané dáta prijaté adresátom, preto je nespoľahlivý. connection less protokol (nekontaktuje prijímateľa pred vyslaním dát). UDP protokol prenáša datagramy medzi počítačmi v sieti, ale na rozdiel od TCP nezaručuje, že prenášaný paket sa nestratí, že sa nezmení poradie paketov, ani že sa niektorý paket nedoručí viackrát. Vďaka tomu je UDP pre ľahké a časovo citlivé účely rýchlejší a efektívnejší. Jeho bezstavová povaha je tiež užitočná pre servery, ktoré odpovedajú na malé požiadavky mnohých klientov. UDP sa používa napríklad pre DNS, streamované médiá, prenos hlasu alebo videa (VoIP) a online hry.&lt;br /&gt;
&lt;br /&gt;
==Zloženie správy==&lt;br /&gt;
DNS paket pozostáva z piatich sekcií: &lt;br /&gt;
*'''1.HEADER''' - Záhlavie paketu : Obsahuje identifikátor správy, ktorý generuje klient a server ju skopíruje do odpovede.&lt;br /&gt;
&lt;br /&gt;
*'''2.QUESTION''' - Sekcia dotaz : Sekcia dotaz je obsiahnutá ako v pakete dotazu, tak aj v pakete odpovede na dotaz. Obsahuje pole doménové meno, typ dotazu a triedu dotazu&lt;br /&gt;
&lt;br /&gt;
*'''3.ANSWER''' - Sekcia odpoveď: Sekcia odpoveď - obsahuje odpoveď na dotaz. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''4.AUTHORITY''' - Autoritatívne name servery: Sekcia autoritatívne name servery obsahuje mená name serverov uvedených v zdrojových vetách typu NS. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''5.ADDITIONAL''' - Doplnkové informácie: Sekcia doplnkové informácie obsahuje obvykle IP adresy autoritatívnych name serverov. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
===Typy DNS záznamov===&lt;br /&gt;
:Najčastejšie používané sú nasledujúce typy zdrojových záznamov:&lt;br /&gt;
*'''A''' - záznam alebo záznam adresy mapuje hostname na 32-bitovú IPv4 adresu.&lt;br /&gt;
*'''AAAA''' - záznam alebo záznam IPv6 adresy mapuje hostname na 128-bitovú IPv6 adresu.&lt;br /&gt;
*'''CNAME''' -  záznam alebo záznam kanonické meno spôsobuje, že jeden názov domény je aliasom pre iný. Takáto doména má platné všetky subdomény a DNS záznamy originálu.&lt;br /&gt;
*'''MX''' - záznam alebo mail exchange záznam mapuje meno domény na zoznam mail exchange serverov pre danú doménu.&lt;br /&gt;
*'''NS''' - záznam alebo name server záznam mapuje názov domény na zoznam DNS serverov pre danú doménu. Delegácie závisia na NS zázname.&lt;br /&gt;
*'''SOA''' - záznam (start of authority record) alebo začiatok záznamu autority špecifikuje DNS server poskytujúci autoritatívnu informáciu o internetovej doméne.&lt;br /&gt;
&lt;br /&gt;
===Zónový súbor===&lt;br /&gt;
Informácie o doménach a adresách sú uložené v tzv. '''zónových súboroch'''. Jeden zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto domény.O funknčnosť služby doménových mien na strane klienta sa stará resolver. &lt;br /&gt;
'''Resolver''' je sada funkcií (gethostbyname(3), gethostbyaddr(3), atd.), ktoré 	využívajú pri resolvovaní samotné užívateľské aplikácie. Fungovanie resolvera je 	možné nastaviť v súboroch /etc/host.conf, /etc/resolv.conf, /etc/hosts&lt;br /&gt;
:Príklady zónového súboru:&lt;br /&gt;
[[Médiá:príklad zónového súboru.jpg]]&lt;br /&gt;
&lt;br /&gt;
V príklade je uvedená implicitná životnosť jeden týždeň, ďalej SOA záznam popísaný vyžšie, určujúci, že se záznam týka domény kdesi.cz, ktorého správcu je možné kontaktovať na emailu franta@kdesi.cz. Následujúce odkazy na dva DNS servery, ktoré o doméne poskytujú autoritativne informácie – jeden miestni a druhý externý. Ďalej MX záznamy, určujúce kam sa bude doručovat elektronická pošta pre túto doménu. Dalšie dva riadky obsahujú A a AAAA záznamy určujúce adresy počítača cosi.kdesi.cz. Za nimi je definována IPv4 adresa pre server.kdesi.cz a konečne je mu přidelána prezývka www.kdesi.cz.&lt;br /&gt;
&lt;br /&gt;
==Postup hladania IP adresy k menu www.wikipedia.org:==&lt;br /&gt;
&lt;br /&gt;
#Uživatel zadal  www.wikipedia.org , resolver v počítači sa obrátil na lokálny DNS server s dotazom na IP adresu pre www.wikipedia.org.&lt;br /&gt;
#Lokálny DNS server túto informáciu nepozná. Má však k dispozícií adresy koreňových serverov. Na jeden z nich se obráti ( povedzme na 193.0.14.129) a dotaz mu prepošle.&lt;br /&gt;
#Koreňový server tiež nepozná odpoveď. Vie však, že existuje doména najvyššiej úrovňe .org, a aké sú jej autoritatívne servery, ktorej adresy žiadateli poskytne.&lt;br /&gt;
#Lokálny server jeden z nich vyberie (povedzme, že zvolí tld1.ultradns.net s IP adresou 204.74.112.1) a pošle mu dotaz na IP adresu k menu www.wikipedia.org.&lt;br /&gt;
#Oslovený server informáciu opeť nepozná, ale poskytne IP adresy autoritatívnych serverov pre doménu wikipedia.org. sú to ns0.wikimedia.org (207.142.131.207), ns1.wikimedia.org (211.115.107.190) a ns2.wikimedia.org (145.97.39.158).&lt;br /&gt;
#Lokálny server opeť jeden z nich vyberie a pošle mu dotaz na IP adresu ke menu www.wikipedia.org.&lt;br /&gt;
#Kedže toto meno sa už nachádza v doméne wikipedia.org, dostane od jeho servera nesporne autoritatívnu odpoveď, že hladaná IP adresa znie 145.97.39.155&lt;br /&gt;
#Lokálny DNS server túto odpoveď predá uživateľskému počítaču, ktorý sa naň pýtal.&lt;br /&gt;
[[Médiá:hladnaie IP adresy.jpg]]&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2859</id>
		<title>Protokol DNS</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2859"/>
		<updated>2010-03-22T20:01:45Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
==DNS==&lt;br /&gt;
Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.&lt;br /&gt;
&lt;br /&gt;
Každý počítač má na internete svoju vlastnú adresu, tzv. IP, v číselnom formáte. Je obtiažne pamätať si číselné adresy počítačov, na ktorých si chceme prezerať WWW stránky, a preto existuje služba DNS, ktorá &amp;quot;prekladá&amp;quot; číselne IP adresy zo zle zapamätateľného číslicového tvaru na mená, ktoré sa užívateľom pamätajú podstatne lepšie, a naopak. &lt;br /&gt;
Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad) -  napr. webová prezentácia www.slovaknet.sk je umiestnená na serveri s IP adresou 62.168.63.222.&lt;br /&gt;
V širšom poňatí je možné DNS chápať ako distribuovanú databázu doménových mien, v užšom ponímaní je možné DNS chápať ako aplikačný protokol, prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.&lt;br /&gt;
&lt;br /&gt;
V DNS sa nenachádza iba adresa servera, kde je prezentácia umiestená, ale záznam obsahuje aj adresy poštového servera, FTP servera, domén 3. úrovne atď.&lt;br /&gt;
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky &amp;quot;A-Z&amp;quot;, &amp;quot;a-z&amp;quot;, &amp;quot;0-9&amp;quot;, &amp;quot;-&amp;quot; a &amp;quot;_&amp;quot;. (max 255 znakov)&lt;br /&gt;
:DNS si môžete predstaviť ako strom domén:&lt;br /&gt;
[[Súbor:strom DNS.jpg]]&lt;br /&gt;
&lt;br /&gt;
Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server.Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla. &lt;br /&gt;
&lt;br /&gt;
Najvyššiu úroveň stromu domén - domény najvyššej úrovne ('''top-level domains''', '''TLD''') spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre domény najvyššej úrovne (&amp;quot;.com&amp;quot;, &amp;quot;.net&amp;quot;, &amp;quot;.sk&amp;quot; atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch. ( v súčastnosti ich je 13) . Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii každého DNS servera.   &lt;br /&gt;
&lt;br /&gt;
==Základné rozdelenenie DNS serverov : ==&lt;br /&gt;
&lt;br /&gt;
'''Primárny DNS''' server je server, ktorý obsahuje a obsluhuje údaje o doméne a je pre danú doménu autoritatívny. Odpovede primárneho DNS servera sú považované za vždy aktuálne a platné. Odkazy na DNS servery domény sú uložené v nadradenom DNS serveri. Ukazovatele na DNS servery druhej úrovne (&amp;quot;mojadomena.sk&amp;quot;) sú uložené v DNS pre doménu najvyššej úrovne (&amp;quot;.sk&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
'''Sekundárny DNS''' server je server, ktorý pomocou pravidelného kopírovania údajov o doménach z primárneho DNS servera vytvára záložný DNS server pre danú doménu. Úlohou primárneho DNS servera je tiež upozorniť svoje sekundárne DNS servery pri zmene záznamov v DNS. Jeden primárny DNS server môže používať niekoľko sekundárnych DNS serverov, vždy však najmenej jeden.&lt;br /&gt;
&lt;br /&gt;
==Ako pracuje DNS==&lt;br /&gt;
&lt;br /&gt;
Protokol DNS pracuje jednoduchým spôsobom: dotaz - odpoveď. To znamená, že klient pošle serveru dotaz a server na dotaz odpovie. Služba sa pri svojom fungovaní opiera o služby transportných protokolov. DNS používa ako '''TCP''', tak protokol '''UDP''', pričom dotaz aj odpoveď sú prenášané vždy rovnakým transportným protokolom. Pri dotaze na preklad mena na adresu sa používa protokol UDP &lt;br /&gt;
Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne (subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na podriadené DNS servery, ktoré ich spravujú.&lt;br /&gt;
&lt;br /&gt;
====Protokol TCP (Transmission Control Protocol) ====&lt;br /&gt;
Poskytuje spoľahlivé  zasielanie dát po sieti. Kontaktuje prijímateľa pred vyslaním dát. Vďaka TCP môžu programy na počítačoch v sieti vytvárať medzi sebou spojenia (connections), ktorými je možné posielať dáta. Protokol pritom zaručuje, že dáta odoslané z jedného konca spojenia budú prijaté na druhej strane spojenia v rovnakom poradí a bez chýbajúcich častí.&lt;br /&gt;
&lt;br /&gt;
====Protokol UDP (User Datagram Protocol) ====&lt;br /&gt;
Zasiela dáta iným spôsobom ako TCP. Nezisťuje, či boli odoslané dáta prijaté adresátom, preto je nespoľahlivý. connection less protokol (nekontaktuje prijímateľa pred vyslaním dát). UDP protokol prenáša datagramy medzi počítačmi v sieti, ale na rozdiel od TCP nezaručuje, že prenášaný paket sa nestratí, že sa nezmení poradie paketov, ani že sa niektorý paket nedoručí viackrát. Vďaka tomu je UDP pre ľahké a časovo citlivé účely rýchlejší a efektívnejší. Jeho bezstavová povaha je tiež užitočná pre servery, ktoré odpovedajú na malé požiadavky mnohých klientov. UDP sa používa napríklad pre DNS, streamované médiá, prenos hlasu alebo videa (VoIP) a online hry.&lt;br /&gt;
&lt;br /&gt;
==Zloženie správy==&lt;br /&gt;
DNS paket pozostáva z piatich sekcií: &lt;br /&gt;
*'''1.HEADER''' - Záhlavie paketu : Obsahuje identifikátor správy, ktorý generuje klient a server ju skopíruje do odpovede.&lt;br /&gt;
&lt;br /&gt;
*'''2.QUESTION''' - Sekcia dotaz : Sekcia dotaz je obsiahnutá ako v pakete dotazu, tak aj v pakete odpovede na dotaz. Obsahuje pole doménové meno, typ dotazu a triedu dotazu&lt;br /&gt;
&lt;br /&gt;
*'''3.ANSWER''' - Sekcia odpoveď: Sekcia odpoveď - obsahuje odpoveď na dotaz. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''4.AUTHORITY''' - Autoritatívne name servery: Sekcia autoritatívne name servery obsahuje mená name serverov uvedených v zdrojových vetách typu NS. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''5.ADDITIONAL''' - Doplnkové informácie: Sekcia doplnkové informácie obsahuje obvykle IP adresy autoritatívnych name serverov. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
===Typy DNS záznamov===&lt;br /&gt;
:Najčastejšie používané sú nasledujúce typy zdrojových záznamov:&lt;br /&gt;
*'''A''' - záznam alebo záznam adresy mapuje hostname na 32-bitovú IPv4 adresu.&lt;br /&gt;
*'''AAAA''' - záznam alebo záznam IPv6 adresy mapuje hostname na 128-bitovú IPv6 adresu.&lt;br /&gt;
*'''CNAME''' -  záznam alebo záznam kanonické meno spôsobuje, že jeden názov domény je aliasom pre iný. Takáto doména má platné všetky subdomény a DNS záznamy originálu.&lt;br /&gt;
*'''MX''' - záznam alebo mail exchange záznam mapuje meno domény na zoznam mail exchange serverov pre danú doménu.&lt;br /&gt;
*'''NS''' - záznam alebo name server záznam mapuje názov domény na zoznam DNS serverov pre danú doménu. Delegácie závisia na NS zázname.&lt;br /&gt;
*'''SOA''' - záznam (start of authority record) alebo začiatok záznamu autority špecifikuje DNS server poskytujúci autoritatívnu informáciu o internetovej doméne.&lt;br /&gt;
&lt;br /&gt;
==Zónový súbor==&lt;br /&gt;
Informácie o doménach a adresách sú uložené v tzv. '''zónových súboroch'''. Jeden zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto domény.O funknčnosť služby doménových mien na strane klienta sa stará resolver. &lt;br /&gt;
'''Resolver''' je sada funkcií (gethostbyname(3), gethostbyaddr(3), atd.), ktoré 	využívajú pri resolvovaní samotné užívateľské aplikácie. Fungovanie resolvera je 	možné nastaviť v súboroch /etc/host.conf, /etc/resolv.conf, /etc/hosts&lt;br /&gt;
:Príklady zónového súboru:&lt;br /&gt;
[[Médiá:príklad zónového súboru.jpg]]&lt;br /&gt;
&lt;br /&gt;
V príklade je uvedená implicitná životnosť jeden týždeň, ďalej SOA záznam popísaný vyžšie, určujúci, že se záznam týka domény kdesi.cz, ktorého správcu je možné kontaktovať na emailu franta@kdesi.cz. Následujúce odkazy na dva DNS servery, ktoré o doméne poskytujú autoritativne informácie – jeden miestni a druhý externý. Ďalej MX záznamy, určujúce kam sa bude doručovat elektronická pošta pre túto doménu. Dalšie dva riadky obsahujú A a AAAA záznamy určujúce adresy počítača cosi.kdesi.cz. Za nimi je definována IPv4 adresa pre server.kdesi.cz a konečne je mu přidelána prezývka www.kdesi.cz.&lt;br /&gt;
&lt;br /&gt;
==Postup hladania IP adresy k menu www.wikipedia.org:==&lt;br /&gt;
&lt;br /&gt;
#Uživatel zadal  www.wikipedia.org , resolver v počítači sa obrátil na lokálny DNS server s dotazom na IP adresu pre www.wikipedia.org.&lt;br /&gt;
#Lokálny DNS server túto informáciu nepozná. Má však k dispozícií adresy koreňových serverov. Na jeden z nich se obráti ( povedzme na 193.0.14.129) a dotaz mu prepošle.&lt;br /&gt;
#Koreňový server tiež nepozná odpoveď. Vie však, že existuje doména najvyššiej úrovňe .org, a aké sú jej autoritatívne servery, ktorej adresy žiadateli poskytne.&lt;br /&gt;
#Lokálny server jeden z nich vyberie (povedzme, že zvolí tld1.ultradns.net s IP adresou 204.74.112.1) a pošle mu dotaz na IP adresu k menu www.wikipedia.org.&lt;br /&gt;
#Oslovený server informáciu opeť nepozná, ale poskytne IP adresy autoritatívnych serverov pre doménu wikipedia.org. sú to ns0.wikimedia.org (207.142.131.207), ns1.wikimedia.org (211.115.107.190) a ns2.wikimedia.org (145.97.39.158).&lt;br /&gt;
#Lokálny server opeť jeden z nich vyberie a pošle mu dotaz na IP adresu ke menu www.wikipedia.org.&lt;br /&gt;
#Kedže toto meno sa už nachádza v doméne wikipedia.org, dostane od jeho servera nesporne autoritatívnu odpoveď, že hladaná IP adresa znie 145.97.39.155&lt;br /&gt;
#Lokálny DNS server túto odpoveď predá uživateľskému počítaču, ktorý sa naň pýtal.&lt;br /&gt;
[[Médiá:hladnaie IP adresy.jpg]]&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Hladnaie_IP_adresy.jpg&amp;diff=2858</id>
		<title>Súbor:Hladnaie IP adresy.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Hladnaie_IP_adresy.jpg&amp;diff=2858"/>
		<updated>2010-03-22T19:59:49Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Pr%C3%ADklad_z%C3%B3nov%C3%A9ho_s%C3%BAboru.jpg&amp;diff=2857</id>
		<title>Súbor:Príklad zónového súboru.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Pr%C3%ADklad_z%C3%B3nov%C3%A9ho_s%C3%BAboru.jpg&amp;diff=2857"/>
		<updated>2010-03-22T19:57:58Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: bola nahraná nová verzia „Súbor:Príklad zónového súboru.jpg“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2856</id>
		<title>Protokol DNS</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2856"/>
		<updated>2010-03-22T19:45:35Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
==DNS==&lt;br /&gt;
Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.&lt;br /&gt;
&lt;br /&gt;
Každý počítač má na internete svoju vlastnú adresu, tzv. IP, v číselnom formáte. Je obtiažne pamätať si číselné adresy počítačov, na ktorých si chceme prezerať WWW stránky, a preto existuje služba DNS, ktorá &amp;quot;prekladá&amp;quot; číselne IP adresy zo zle zapamätateľného číslicového tvaru na mená, ktoré sa užívateľom pamätajú podstatne lepšie, a naopak. &lt;br /&gt;
Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad) -  napr. webová prezentácia www.slovaknet.sk je umiestnená na serveri s IP adresou 62.168.63.222.&lt;br /&gt;
V širšom poňatí je možné DNS chápať ako distribuovanú databázu doménových mien, v užšom ponímaní je možné DNS chápať ako aplikačný protokol, prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.&lt;br /&gt;
&lt;br /&gt;
V DNS sa nenachádza iba adresa servera, kde je prezentácia umiestená, ale záznam obsahuje aj adresy poštového servera, FTP servera, domén 3. úrovne atď.&lt;br /&gt;
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky &amp;quot;A-Z&amp;quot;, &amp;quot;a-z&amp;quot;, &amp;quot;0-9&amp;quot;, &amp;quot;-&amp;quot; a &amp;quot;_&amp;quot;. (max 255 znakov)&lt;br /&gt;
:DNS si môžete predstaviť ako strom domén:&lt;br /&gt;
[[Súbor:strom DNS.jpg]]&lt;br /&gt;
&lt;br /&gt;
Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server.Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla. &lt;br /&gt;
&lt;br /&gt;
Najvyššiu úroveň stromu domén - domény najvyššej úrovne ('''top-level domains''', '''TLD''') spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre domény najvyššej úrovne (&amp;quot;.com&amp;quot;, &amp;quot;.net&amp;quot;, &amp;quot;.sk&amp;quot; atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch. ( v súčastnosti ich je 13) . Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii každého DNS servera.   &lt;br /&gt;
&lt;br /&gt;
==DNS servery rozdeľujeme na dva základné druhy: ==&lt;br /&gt;
&lt;br /&gt;
'''Primárny DNS''' server je server, ktorý obsahuje a obsluhuje údaje o doméne a je pre danú doménu autoritatívny. Odpovede primárneho DNS servera sú považované za vždy aktuálne a platné. Odkazy na DNS servery domény sú uložené v nadradenom DNS serveri. Ukazovatele na DNS servery druhej úrovne (&amp;quot;mojadomena.sk&amp;quot;) sú uložené v DNS pre doménu najvyššej úrovne (&amp;quot;.sk&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
'''Sekundárny DNS''' server je server, ktorý pomocou pravidelného kopírovania údajov o doménach z primárneho DNS servera vytvára záložný DNS server pre danú doménu. Úlohou primárneho DNS servera je tiež upozorniť svoje sekundárne DNS servery pri zmene záznamov v DNS. Jeden primárny DNS server môže používať niekoľko sekundárnych DNS serverov, vždy však najmenej jeden.&lt;br /&gt;
&lt;br /&gt;
==Ako pracuje DNS==&lt;br /&gt;
&lt;br /&gt;
Protokol DNS pracuje jednoduchým spôsobom: dotaz - odpoveď. To znamená, že klient pošle serveru dotaz a server na dotaz odpovie. Služba sa pri svojom fungovaní opiera o služby transportných protokolov. DNS používa ako '''TCP''', tak protokol '''UDP''', pričom dotaz aj odpoveď sú prenášané vždy rovnakým transportným protokolom. Pri dotaze na preklad mena na adresu sa používa protokol UDP &lt;br /&gt;
Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne (subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na podriadené DNS servery, ktoré ich spravujú.&lt;br /&gt;
&lt;br /&gt;
====Protokol TCP (Transmission Control Protocol) ====&lt;br /&gt;
Poskytuje spoľahlivé  zasielanie dát po sieti. Kontaktuje prijímateľa pred vyslaním dát. Vďaka TCP môžu programy na počítačoch v sieti vytvárať medzi sebou spojenia (connections), ktorými je možné posielať dáta. Protokol pritom zaručuje, že dáta odoslané z jedného konca spojenia budú prijaté na druhej strane spojenia v rovnakom poradí a bez chýbajúcich častí.&lt;br /&gt;
&lt;br /&gt;
====Protokol UDP (User Datagram Protocol) ====&lt;br /&gt;
Zasiela dáta iným spôsobom ako TCP. Nezisťuje, či boli odoslané dáta prijaté adresátom, preto je nespoľahlivý. connection less protokol (nekontaktuje prijímateľa pred vyslaním dát). UDP protokol prenáša datagramy medzi počítačmi v sieti, ale na rozdiel od TCP nezaručuje, že prenášaný paket sa nestratí, že sa nezmení poradie paketov, ani že sa niektorý paket nedoručí viackrát. Vďaka tomu je UDP pre ľahké a časovo citlivé účely rýchlejší a efektívnejší. Jeho bezstavová povaha je tiež užitočná pre servery, ktoré odpovedajú na malé požiadavky mnohých klientov. UDP sa používa napríklad pre DNS, streamované médiá, prenos hlasu alebo videa (VoIP) a online hry.&lt;br /&gt;
&lt;br /&gt;
==Zloženie správy==&lt;br /&gt;
DNS paket pozostáva z piatich sekcií: &lt;br /&gt;
*'''1.HEADER''' - Záhlavie paketu : Obsahuje identifikátor správy, ktorý generuje klient a server ju skopíruje do odpovede.&lt;br /&gt;
&lt;br /&gt;
*'''2.QUESTION''' - Sekcia dotaz : Sekcia dotaz je obsiahnutá ako v pakete dotazu, tak aj v pakete odpovede na dotaz. Obsahuje pole doménové meno, typ dotazu a triedu dotazu&lt;br /&gt;
&lt;br /&gt;
*'''3.ANSWER''' - Sekcia odpoveď: Sekcia odpoveď - obsahuje odpoveď na dotaz. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''4.AUTHORITY''' - Autoritatívne name servery: Sekcia autoritatívne name servery obsahuje mená name serverov uvedených v zdrojových vetách typu NS. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''5.ADDITIONAL''' - Doplnkové informácie: Sekcia doplnkové informácie obsahuje obvykle IP adresy autoritatívnych name serverov. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
===Typy DNS záznamov===&lt;br /&gt;
:Najčastejšie používané sú nasledujúce typy zdrojových záznamov:&lt;br /&gt;
*'''A''' - záznam alebo záznam adresy mapuje hostname na 32-bitovú IPv4 adresu.&lt;br /&gt;
*'''AAAA''' - záznam alebo záznam IPv6 adresy mapuje hostname na 128-bitovú IPv6 adresu.&lt;br /&gt;
*'''CNAME''' -  záznam alebo záznam kanonické meno spôsobuje, že jeden názov domény je aliasom pre iný. Takáto doména má platné všetky subdomény a DNS záznamy originálu.&lt;br /&gt;
*'''MX''' - záznam alebo mail exchange záznam mapuje meno domény na zoznam mail exchange serverov pre danú doménu.&lt;br /&gt;
*'''NS''' - záznam alebo name server záznam mapuje názov domény na zoznam DNS serverov pre danú doménu. Delegácie závisia na NS zázname.&lt;br /&gt;
*'''SOA''' - záznam (start of authority record) alebo začiatok záznamu autority špecifikuje DNS server poskytujúci autoritatívnu informáciu o internetovej doméne.&lt;br /&gt;
&lt;br /&gt;
==Zónový súbor==&lt;br /&gt;
Informácie o doménach a adresách sú uložené v tzv. '''zónových súboroch'''. Jeden zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto domény.O funknčnosť služby doménových mien na strane klienta sa stará resolver. &lt;br /&gt;
'''Resolver''' je sada funkcií (gethostbyname(3), gethostbyaddr(3), atd.), ktoré 	využívajú pri resolvovaní samotné užívateľské aplikácie. Fungovanie resolvera je 	možné nastaviť v súboroch /etc/host.conf, /etc/resolv.conf, /etc/hosts&lt;br /&gt;
:Príklady zónového súboru:&lt;br /&gt;
[[Médiá:príklad zónového súboru.jpg]]&lt;br /&gt;
&lt;br /&gt;
V príklade je uvedená implicitná životnosť jeden týždeň, ďalej SOA záznam popísaný vyžšie, určujúci, že se záznam týka domény kdesi.cz, ktorého správcu je možné kontaktovať na emailu franta@kdesi.cz. Následujúce odkazy na dva DNS servery, ktoré o doméne poskytujú autoritativne informácie – jeden miestni a druhý externý. Ďalej MX záznamy, určujúce kam sa bude doručovat elektronická pošta pre túto doménu. Dalšie dva riadky obsahujú A a AAAA záznamy určujúce adresy počítača cosi.kdesi.cz. Za nimi je definována IPv4 adresa pre server.kdesi.cz a konečne je mu přidelána prezývka www.kdesi.cz.&lt;br /&gt;
&lt;br /&gt;
==Postup hladania IP adresy k menu www.wikipedia.org:==&lt;br /&gt;
&lt;br /&gt;
#Uživatel zadal  www.wikipedia.org , resolver v počítači sa obrátil na lokálny DNS server s dotazom na IP adresu pre www.wikipedia.org.&lt;br /&gt;
#Lokálny DNS server túto informáciu nepozná. Má však k dispozícií adresy koreňových serverov. Na jeden z nich se obráti ( povedzme na 193.0.14.129) a dotaz mu prepošle.&lt;br /&gt;
#Koreňový server tiež nepozná odpoveď. Vie však, že existuje doména najvyššiej úrovňe .org, a aké sú jej autoritatívne servery, ktorej adresy žiadateli poskytne.&lt;br /&gt;
#Lokálny server jeden z nich vyberie (povedzme, že zvolí tld1.ultradns.net s IP adresou 204.74.112.1) a pošle mu dotaz na IP adresu k menu www.wikipedia.org.&lt;br /&gt;
#Oslovený server informáciu opeť nepozná, ale poskytne IP adresy autoritatívnych serverov pre doménu wikipedia.org. sú to ns0.wikimedia.org (207.142.131.207), ns1.wikimedia.org (211.115.107.190) a ns2.wikimedia.org (145.97.39.158).&lt;br /&gt;
#Lokálny server opeť jeden z nich vyberie a pošle mu dotaz na IP adresu ke menu www.wikipedia.org.&lt;br /&gt;
#Kedže toto meno sa už nachádza v doméne wikipedia.org, dostane od jeho servera nesporne autoritatívnu odpoveď, že hladaná IP adresa znie 145.97.39.155&lt;br /&gt;
#Lokálny DNS server túto odpoveď predá uživateľskému počítaču, ktorý sa naň pýtal.&lt;br /&gt;
[[Médiá:hladnaie IP adresy.jpg]]&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Pr%C3%ADklad_z%C3%B3nov%C3%A9ho_s%C3%BAboru.jpg&amp;diff=2855</id>
		<title>Súbor:Príklad zónového súboru.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Pr%C3%ADklad_z%C3%B3nov%C3%A9ho_s%C3%BAboru.jpg&amp;diff=2855"/>
		<updated>2010-03-22T19:43:25Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Strom_DNS.jpg&amp;diff=2854</id>
		<title>Súbor:Strom DNS.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Strom_DNS.jpg&amp;diff=2854"/>
		<updated>2010-03-22T18:09:02Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2853</id>
		<title>Protokol DNS</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2853"/>
		<updated>2010-03-22T18:04:41Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
==DNS==&lt;br /&gt;
Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.&lt;br /&gt;
&lt;br /&gt;
Každý počítač má na internete svoju vlastnú adresu, tzv. IP, v číselnom formáte. Je obtiažne pamätať si číselné adresy počítačov, na ktorých si chceme prezerať WWW stránky, a preto existuje služba DNS, ktorá &amp;quot;prekladá&amp;quot; číselne IP adresy zo zle zapamätateľného číslicového tvaru na mená, ktoré sa užívateľom pamätajú podstatne lepšie, a naopak. &lt;br /&gt;
Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad) -  napr. webová prezentácia www.slovaknet.sk je umiestnená na serveri s IP adresou 62.168.63.222.&lt;br /&gt;
V širšom poňatí je možné DNS chápať ako distribuovanú databázu doménových mien, v užšom ponímaní je možné DNS chápať ako aplikačný protokol, prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.&lt;br /&gt;
&lt;br /&gt;
V DNS sa nenachádza iba adresa servera, kde je prezentácia umiestená, ale záznam obsahuje aj adresy poštového servera, FTP servera, domén 3. úrovne atď.&lt;br /&gt;
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky &amp;quot;A-Z&amp;quot;, &amp;quot;a-z&amp;quot;, &amp;quot;0-9&amp;quot;, &amp;quot;-&amp;quot; a &amp;quot;_&amp;quot;. (max 255 znakov)&lt;br /&gt;
:DNS si môžete predstaviť ako strom domén:&lt;br /&gt;
[[Súbor:strom DNS.jpg]]&lt;br /&gt;
&lt;br /&gt;
Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server.Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla. &lt;br /&gt;
&lt;br /&gt;
Najvyššiu úroveň stromu domén - domény najvyššej úrovne ('''top-level domains''', '''TLD''') spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre domény najvyššej úrovne (&amp;quot;.com&amp;quot;, &amp;quot;.net&amp;quot;, &amp;quot;.sk&amp;quot; atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch. ( v súčastnosti ich je 13) . Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii každého DNS servera.   &lt;br /&gt;
&lt;br /&gt;
==DNS servery rozdeľujeme na dva základné druhy: ==&lt;br /&gt;
&lt;br /&gt;
'''Primárny DNS''' server je server, ktorý obsahuje a obsluhuje údaje o doméne a je pre danú doménu autoritatívny. Odpovede primárneho DNS servera sú považované za vždy aktuálne a platné. Odkazy na DNS servery domény sú uložené v nadradenom DNS serveri. Ukazovatele na DNS servery druhej úrovne (&amp;quot;mojadomena.sk&amp;quot;) sú uložené v DNS pre doménu najvyššej úrovne (&amp;quot;.sk&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
'''Sekundárny DNS''' server je server, ktorý pomocou pravidelného kopírovania údajov o doménach z primárneho DNS servera vytvára záložný DNS server pre danú doménu. Úlohou primárneho DNS servera je tiež upozorniť svoje sekundárne DNS servery pri zmene záznamov v DNS. Jeden primárny DNS server môže používať niekoľko sekundárnych DNS serverov, vždy však najmenej jeden.&lt;br /&gt;
&lt;br /&gt;
==Ako pracuje DNS==&lt;br /&gt;
&lt;br /&gt;
Protokol DNS pracuje jednoduchým spôsobom: dotaz - odpoveď. To znamená, že klient pošle serveru dotaz a server na dotaz odpovie. Služba sa pri svojom fungovaní opiera o služby transportných protokolov. DNS používa ako '''TCP''', tak protokol '''UDP''', pričom dotaz aj odpoveď sú prenášané vždy rovnakým transportným protokolom. Pri dotaze na preklad mena na adresu sa používa protokol UDP &lt;br /&gt;
Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne (subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na podriadené DNS servery, ktoré ich spravujú.&lt;br /&gt;
&lt;br /&gt;
====Protokol TCP (Transmission Control Protocol) ====&lt;br /&gt;
Poskytuje spoľahlivé  zasielanie dát po sieti. Kontaktuje prijímateľa pred vyslaním dát. Vďaka TCP môžu programy na počítačoch v sieti vytvárať medzi sebou spojenia (connections), ktorými je možné posielať dáta. Protokol pritom zaručuje, že dáta odoslané z jedného konca spojenia budú prijaté na druhej strane spojenia v rovnakom poradí a bez chýbajúcich častí.&lt;br /&gt;
&lt;br /&gt;
====Protokol UDP (User Datagram Protocol) ====&lt;br /&gt;
Zasiela dáta iným spôsobom ako TCP. Nezisťuje, či boli odoslané dáta prijaté adresátom, preto je nespoľahlivý. connection less protokol (nekontaktuje prijímateľa pred vyslaním dát). UDP protokol prenáša datagramy medzi počítačmi v sieti, ale na rozdiel od TCP nezaručuje, že prenášaný paket sa nestratí, že sa nezmení poradie paketov, ani že sa niektorý paket nedoručí viackrát. Vďaka tomu je UDP pre ľahké a časovo citlivé účely rýchlejší a efektívnejší. Jeho bezstavová povaha je tiež užitočná pre servery, ktoré odpovedajú na malé požiadavky mnohých klientov. UDP sa používa napríklad pre DNS, streamované médiá, prenos hlasu alebo videa (VoIP) a online hry.&lt;br /&gt;
&lt;br /&gt;
==Zloženie správy==&lt;br /&gt;
DNS paket pozostáva z piatich sekcií: &lt;br /&gt;
*'''1.HEADER''' - Záhlavie paketu : Obsahuje identifikátor správy, ktorý generuje klient a server ju skopíruje do odpovede.&lt;br /&gt;
&lt;br /&gt;
*'''2.QUESTION''' - Sekcia dotaz : Sekcia dotaz je obsiahnutá ako v pakete dotazu, tak aj v pakete odpovede na dotaz. Obsahuje pole doménové meno, typ dotazu a triedu dotazu&lt;br /&gt;
&lt;br /&gt;
*'''3.ANSWER''' - Sekcia odpoveď: Sekcia odpoveď - obsahuje odpoveď na dotaz. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''4.AUTHORITY''' - Autoritatívne name servery: Sekcia autoritatívne name servery obsahuje mená name serverov uvedených v zdrojových vetách typu NS. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*'''5.ADDITIONAL''' - Doplnkové informácie: Sekcia doplnkové informácie obsahuje obvykle IP adresy autoritatívnych name serverov. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
===Typy DNS záznamov===&lt;br /&gt;
:Najčastejšie používané sú nasledujúce typy zdrojových záznamov:&lt;br /&gt;
*'''A''' - záznam alebo záznam adresy mapuje hostname na 32-bitovú IPv4 adresu.&lt;br /&gt;
*'''AAAA''' - záznam alebo záznam IPv6 adresy mapuje hostname na 128-bitovú IPv6 adresu.&lt;br /&gt;
*'''CNAME''' -  záznam alebo záznam kanonické meno spôsobuje, že jeden názov domény je aliasom pre iný. Takáto doména má platné všetky subdomény a DNS záznamy originálu.&lt;br /&gt;
*'''MX''' - záznam alebo mail exchange záznam mapuje meno domény na zoznam mail exchange serverov pre danú doménu.&lt;br /&gt;
*'''NS''' - záznam alebo name server záznam mapuje názov domény na zoznam DNS serverov pre danú doménu. Delegácie závisia na NS zázname.&lt;br /&gt;
*'''SOA''' - záznam (start of authority record) alebo začiatok záznamu autority špecifikuje DNS server poskytujúci autoritatívnu informáciu o internetovej doméne.&lt;br /&gt;
&lt;br /&gt;
==Zónový súbor==&lt;br /&gt;
Informácie o doménach a adresách sú uložené v tzv. '''zónových súboroch'''. Jeden zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto domény.O funknčnosť služby doménových mien na strane klienta sa stará resolver. &lt;br /&gt;
'''Resolver''' je sada funkcií (gethostbyname(3), gethostbyaddr(3), atd.), ktoré 	využívajú pri resolvovaní samotné užívateľské aplikácie. Fungovanie resolvera je 	možné nastaviť v súboroch /etc/host.conf, /etc/resolv.conf, /etc/hosts&lt;br /&gt;
:Príklady zónového súboru:&lt;br /&gt;
[[Médiá:príklad zónového súboru.jpg]]&lt;br /&gt;
&lt;br /&gt;
V príklade je uvedená implicitná životnosť jeden týždeň, ďalej SOA záznam popísaný vyžšie, určujúci, že se záznam týka domény kdesi.cz, ktorého správcu je možné kontaktovať na emailu franta@kdesi.cz. Následujúce odkazy na dva DNS servery, ktoré o doméne poskytujú autoritativne informácie – jeden miestni a druhý externý. Ďalej MX záznamy, určujúce kam sa bude doručovat elektronická pošta pre túto doménu. Dalšie dva riadky obsahujú A a AAAA záznamy určujúce adresy počítača cosi.kdesi.cz. Za nimi je definována IPv4 adresa pre server.kdesi.cz a konečne je mu přidelána prezývka www.kdesi.cz.&lt;br /&gt;
&lt;br /&gt;
==Pozrime sa, ako by postupovalo hladanie IP adresy k menu www.wikipedia.org:==&lt;br /&gt;
&lt;br /&gt;
#Uživatel zadal  www.wikipedia.org , resolver v počítači sa obrátil na lokálny DNS server s dotazom na IP adresu pre www.wikipedia.org.&lt;br /&gt;
#Lokálny DNS server túto informáciu nepozná. Má však k dispozícií adresy koreňových serverov. Na jeden z nich se obráti ( povedzme na 193.0.14.129) a dotaz mu prepošle.&lt;br /&gt;
#Koreňový server tiež nepozná odpoveď. Vie však, že existuje doména najvyššiej úrovňe .org, a aké sú jej autoritatívne servery, ktorej adresy žiadateli poskytne.&lt;br /&gt;
#Lokálny server jeden z nich vyberie (povedzme, že zvolí tld1.ultradns.net s IP adresou 204.74.112.1) a pošle mu dotaz na IP adresu k menu www.wikipedia.org.&lt;br /&gt;
#Oslovený server informáciu opeť nepozná, ale poskytne IP adresy autoritatívnych serverov pre doménu wikipedia.org. sú to ns0.wikimedia.org (207.142.131.207), ns1.wikimedia.org (211.115.107.190) a ns2.wikimedia.org (145.97.39.158).&lt;br /&gt;
#Lokálny server opeť jeden z nich vyberie a pošle mu dotaz na IP adresu ke menu www.wikipedia.org.&lt;br /&gt;
#Kedže toto meno sa už nachádza v doméne wikipedia.org, dostane od jeho servera nesporne autoritatívnu odpoveď, že hladaná IP adresa znie 145.97.39.155&lt;br /&gt;
#Lokálny DNS server túto odpoveď predá uživateľskému počítaču, ktorý sa naň pýtal.&lt;br /&gt;
[[Médiá:hladnaie IP adresy.jpg]]&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2852</id>
		<title>Protokol DNS</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2852"/>
		<updated>2010-03-22T17:44:44Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
==DNS==&lt;br /&gt;
Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.&lt;br /&gt;
&lt;br /&gt;
Každý počítač má na internete svoju vlastnú adresu, tzv. IP, v číselnom formáte. Je obtiažne pamätať si číselné adresy počítačov, na ktorých si chceme prezerať WWW stránky, a preto existuje služba DNS, ktorá &amp;quot;prekladá&amp;quot; číselne IP adresy zo zle zapamätateľného číslicového tvaru na mená, ktoré sa užívateľom pamätajú podstatne lepšie, a naopak. &lt;br /&gt;
Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad) -  napr. webová prezentácia www.slovaknet.sk je umiestnená na serveri s IP adresou 62.168.63.222.&lt;br /&gt;
V širšom poňatí je možné DNS chápať ako distribuovanú databázu doménových mien, v užšom ponímaní je možné DNS chápať ako aplikačný protokol, prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.&lt;br /&gt;
&lt;br /&gt;
V DNS sa nenachádza iba adresa servera, kde je prezentácia umiestená, ale záznam obsahuje aj adresy poštového servera, FTP servera, domén 3. úrovne atď.&lt;br /&gt;
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky &amp;quot;A-Z&amp;quot;, &amp;quot;a-z&amp;quot;, &amp;quot;0-9&amp;quot;, &amp;quot;-&amp;quot; a &amp;quot;_&amp;quot;. (max 255 znakov)&lt;br /&gt;
:DNS si môžete predstaviť ako strom domén:&lt;br /&gt;
[[Súbor:strom DNS.jpg]]&lt;br /&gt;
&lt;br /&gt;
Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server.Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla. &lt;br /&gt;
&lt;br /&gt;
Najvyššiu úroveň stromu domén - domény najvyššej úrovne ('''top-level domains''', '''TLD''') spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre domény najvyššej úrovne (&amp;quot;.com&amp;quot;, &amp;quot;.net&amp;quot;, &amp;quot;.sk&amp;quot; atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch. ( v súčastnosti ich je 13) . Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii každého DNS servera.   &lt;br /&gt;
&lt;br /&gt;
==DNS servery rozdeľujeme na dva základné druhy: ==&lt;br /&gt;
&lt;br /&gt;
'''Primárny DNS''' server je server, ktorý obsahuje a obsluhuje údaje o doméne a je pre danú doménu autoritatívny. Odpovede primárneho DNS servera sú považované za vždy aktuálne a platné. Odkazy na DNS servery domény sú uložené v nadradenom DNS serveri. Ukazovatele na DNS servery druhej úrovne (&amp;quot;mojadomena.sk&amp;quot;) sú uložené v DNS pre doménu najvyššej úrovne (&amp;quot;.sk&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
'''Sekundárny DNS''' server je server, ktorý pomocou pravidelného kopírovania údajov o doménach z primárneho DNS servera vytvára záložný DNS server pre danú doménu. Úlohou primárneho DNS servera je tiež upozorniť svoje sekundárne DNS servery pri zmene záznamov v DNS. Jeden primárny DNS server môže používať niekoľko sekundárnych DNS serverov, vždy však najmenej jeden.&lt;br /&gt;
&lt;br /&gt;
==Ako pracuje DNS==&lt;br /&gt;
&lt;br /&gt;
Protokol DNS pracuje jednoduchým spôsobom: dotaz - odpoveď. To znamená, že klient pošle serveru dotaz a server na dotaz odpovie. Služba sa pri svojom fungovaní opiera o služby transportných protokolov. DNS používa ako '''TCP''', tak protokol '''UDP''', pričom dotaz aj odpoveď sú prenášané vždy rovnakým transportným protokolom. Pri dotaze na preklad mena na adresu sa používa protokol UDP &lt;br /&gt;
Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne (subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na podriadené DNS servery, ktoré ich spravujú.&lt;br /&gt;
&lt;br /&gt;
====Protokol TCP (Transmission Control Protocol) ====&lt;br /&gt;
Poskytuje spoľahlivé  zasielanie dát po sieti. Kontaktuje prijímateľa pred vyslaním dát. Vďaka TCP môžu programy na počítačoch v sieti vytvárať medzi sebou spojenia (connections), ktorými je možné posielať dáta. Protokol pritom zaručuje, že dáta odoslané z jedného konca spojenia budú prijaté na druhej strane spojenia v rovnakom poradí a bez chýbajúcich častí.&lt;br /&gt;
&lt;br /&gt;
====Protokol UDP (User Datagram Protocol) ====&lt;br /&gt;
Zasiela dáta iným spôsobom ako TCP. Nezisťuje, či boli odoslané dáta prijaté adresátom, preto je nespoľahlivý. connection less protokol (nekontaktuje prijímateľa pred vyslaním dát). UDP protokol prenáša datagramy medzi počítačmi v sieti, ale na rozdiel od TCP nezaručuje, že prenášaný paket sa nestratí, že sa nezmení poradie paketov, ani že sa niektorý paket nedoručí viackrát. Vďaka tomu je UDP pre ľahké a časovo citlivé účely rýchlejší a efektívnejší. Jeho bezstavová povaha je tiež užitočná pre servery, ktoré odpovedajú na malé požiadavky mnohých klientov. UDP sa používa napríklad pre DNS, streamované médiá, prenos hlasu alebo videa (VoIP) a online hry.&lt;br /&gt;
&lt;br /&gt;
==Zloženie správy==&lt;br /&gt;
DNS paket pozostáva z piatich sekcií: &lt;br /&gt;
*1.	'''HEADER''' - Záhlavie paketu : Obsahuje identifikátor správy, ktorý generuje klient a server ju skopíruje do odpovede.&lt;br /&gt;
&lt;br /&gt;
*2.	'''QUESTION''' - Sekcia dotaz : Sekcia dotaz je obsiahnutá ako v pakete dotazu, tak aj v pakete odpovede na dotaz. Obsahuje pole doménové meno, typ dotazu a triedu dotazu&lt;br /&gt;
&lt;br /&gt;
*3.	'''ANSWER''' - Sekcia odpoveď: Sekcia odpoveď - obsahuje odpoveď na dotaz. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*4.	'''AUTHORITY''' - Autoritatívne name servery: Sekcia autoritatívne name servery obsahuje mená name serverov uvedených v zdrojových vetách typu NS. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
*5.	'''ADDITIONAL''' - Doplnkové informácie: Sekcia doplnkové informácie obsahuje obvykle IP adresy autoritatívnych name serverov. Túto sekciu obsahuje len paket s odpoveďou.&lt;br /&gt;
&lt;br /&gt;
==Zónový súbor==&lt;br /&gt;
Informácie o doménach a adresách sú uložené v tzv. '''zónových súboroch'''. Jeden zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto domény.O funknčnosť služby doménových mien na strane klienta sa stará resolver. &lt;br /&gt;
'''Resolver''' je sada funkcií (gethostbyname(3), gethostbyaddr(3), atd.), ktoré 	využívajú pri resolvovaní samotné užívateľské aplikácie. Fungovanie resolvera je 	možné nastaviť v súboroch /etc/host.conf, /etc/resolv.conf, /etc/hosts&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2851</id>
		<title>Protokol DNS</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Protokol_DNS&amp;diff=2851"/>
		<updated>2010-03-22T17:09:58Z</updated>

		<summary type="html">&lt;p&gt;Amonatrix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Informatika]]&lt;br /&gt;
[[Kategória:Počítačové siete]]&lt;br /&gt;
[[Kategória:Protokoly]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
Návrat na stránku [[Algoritmy a programovanie]].&lt;br /&gt;
==DNS==&lt;br /&gt;
  Služba doménových mien (resp. Domain Name Service) tvorí dnes neodmysliteľnú súčasť Internetu. Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.&lt;br /&gt;
     Každý počítač má na internete svoju vlastnú adresu, tzv. IP, v číselnom formáte. Je obtiažne pamätať si číselné adresy počítačov, na ktorých si chceme prezerať WWW stránky, a preto existuje služba DNS, ktorá &amp;quot;prekladá&amp;quot; číselne IP adresy zo zle zapamätateľného číslicového tvaru na mená, ktoré sa užívateľom pamätajú podstatne lepšie, a naopak. &lt;br /&gt;
Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad) -  napr. webová prezentácia www.slovaknet.sk je umiestnená na serveri s IP adresou 62.168.63.222.&lt;br /&gt;
     V širšom poňatí je možné DNS chápať ako distribuovanú databázu doménových mien, v užšom ponímaní je možné DNS chápať ako aplikačný protokol, prostredníctvom ktorého si počítače v sieti vymieňajú formalizované informácie o doménových menách.&lt;/div&gt;</summary>
		<author><name>Amonatrix</name></author>
		
	</entry>
</feed>