1. Algoritmus a vazba na program

Asi každý z nás někdy musel řešit nějaký problém. Intuitivně využíváme našich schopností a podnikáme jisté kroky, abychom nalezli možná řešení zmiňovaného problému.

Pokud bychom se podívali zblízka na samý začátek procesu řešení, musíme nejprve jasně formulovat problém. Tento problém bychom měli co nejvíce analyzovat a určit výchozí podmínky, za kterých hodláme problém řešit. Je pro nás také samozřejmostí, že požadujeme výsledky a mnohdy známe i jejich formu.

Nejinak je tomu i při sestavování postupu řešení konkrétní úlohy pomocí počítačového programu. Celý postup řešení problému za využití počítačového programu lze rozdělit do několika fází - viz Obrázek 1.

Vodopádový model

Obrázek 1: Vodopádový model

Tento model zahrnuje následující kroky:

  1. Systémové požadavky
  2. Softwarové požadavky
  3. Analýza - formulace problému, analýza problému, vytvoření postupu řešícího problém, jinak řečeno algoritmus
  4. Návrh programu - sestavení programu v návaznosti na algoritmus
  5. Implementace
  6. Testování
  7. Provoz

Algoritmus lze tedy popsat jako schématický postup (předpis) pro řešení určité skupiny (třídy) úloh, prováděný v konečném počtu přesně definovaných kroků. Z předchozí věty lze odvodit, že základními vlastnostmi algoritmů jsou:

  • Hromadnost - řešit skupinu úloh lišících se parametry nebo počátečními podmínkami (např. průměr z počtu N čísel, kde požadujeme, aby N > 0)

  • Rezultativnost - musí existovat cesta, kterou se dojde od vstupních  k výstupním datům - úloha musí konvergovat k výsledku

  • Konečnost - k výsledkům se musí dojít v rozumně konečné době

  • Determinovanost - v každém kroku algoritmu musí být jednoznačně dáno, jaká činnost bude následovat

Smyslem programování je vytvořit předpis pro jednoznačné a v konečném čase opakovatelně uskutečnitelné řešení konkrétní úlohy, probíhající nad vstupními a výstupními (vytvářenými) daty. Prostředkem programování jsou programovací jazyky. Programovací jazyk představuje tedy pro programátora prostředek vzájemné vazby mezi algoritmickým řešením úlohy a jejím skutečným řešením na úrovni strojového kódu vlastním počítačem.