[phpBB Debug] PHP Notice: in file /includes/session.php on line 1007: Cannot modify header information - headers already sent by (output started at /mnt/data/accounts/p/pws/data/www/kreveta/article.php:1)
[phpBB Debug] PHP Notice: in file /includes/session.php on line 1007: Cannot modify header information - headers already sent by (output started at /mnt/data/accounts/p/pws/data/www/kreveta/article.php:1)
[phpBB Debug] PHP Notice: in file /includes/session.php on line 1007: Cannot modify header information - headers already sent by (output started at /mnt/data/accounts/p/pws/data/www/kreveta/article.php:1)
Programování na papíře I. - Kreveta.NET

Programování na papíře I.

Vystavil Storn

26.02.2010

4
Smyslem tohoto článku by mělo být, říci základní informace, nejenom o programování, ale seznámit vás se základními vlastnosti programu a počítače, nehledě na programovací jazyk či zkušenosti s programováním. V tomto článku zjistíte co to program vlastně je, jak ho získáme, či jak je program zpracováván počítačem a vykonáván


Na prvním místě bych chtěl uvést, že tento mini seriál není určen jen pro úplné začátečníky, ale i zkušení programátoři by se zde mohli ledacos dozvědět. Tématem tohoto článku by měly být základy programování a s jejich pomocí vytvořené programy.

Co je to počítač?


Jako první si musíme uvědomit co je samotný počítač, při tvorbě programu se nemůžeme spoléhat na to že si v hlavě něco vymyslíme a počítač to provede, jak říká vždy můj profesor „počítač je rychlej blbec“. Počítač jako takový, je systém komponent a pro jeho funkci potřebujeme dvě části, tzv. Hardware a Software. Obě složky počítače jsou stejně důležité, lépe řečeno, jedna bez druhé jsou k ničemu. Softwarem se ovládá hardware, který následně vykonává funkce, které jsme do kódu zapsali. Když necháme stranou Operační paměť, Grafickou kartu, Chipset a další součásti počítače zaměřme se na procesor, nebo-li CPU (Central Procesor Unit – volně přeloženo Základní výpočetní jednotka).

Procesor


V procesoru se provádí všechny výpočty a tím pádem, samotné programy. Procesor je hardwarové zařízení, elektronické, a skládá se z milionů tranzistorů, vyráběné nanometrovou technologií. Když se na toto zařízení podíváme, a vynecháme konkrétní součásti, tak princip fungování procesoru je takovýto:



Důležité je uvědomit si, že do CPU přichází základní dva typy přenosů, prvními jsou tak zvané instrukce, neboli příkazy pro procesor co má vykonat a druhými jsou data, tedy konkrétní hodnoty se kterými bude procesor pracovat. V programovacím jazyce by jsme celý příkaz pro procesor zapsali takto.

Instrukce(data)

Po dekódování instrukce si procesor zjistí co bude dělat, příkaz vykoná a uloží zpět do operační paměti. Důležité je uvědomit si že instrukce do procesoru (většinou, pokud vynecháme programy napsané pro více jádrové procesory) přicházejí jedna po druhé, v přesném zadání jak jsme je zapsali a v takovém taky vycházejí z procesoru, kdyby tato logika nebyla zachována, celý proces by mohl pokaždé vést k jiným výsledkům. Kdybychom měli program co nejprve vynásobí dvě čísla a následně přičte jiné, a prohodili jsme instrukce, dozajisté by jsme dostali jiné výsledky. Když pochopíme celý tento děj, práci procesoru, jak nakládá s programem, bude samotné programování jednodušší a hlavně optimalizace kódu kuli výkonu nám bude jasnější. Nyní se dostáváme k důležité části, k samotnému programu a programování.

Co je to program a programování?


Program je soubor instrukcí, v přesné posloupnosti za sebou, s nějakým cílem. V praxi to znamená, že když napíšeme nějaký program tak chceme, aby fungoval tak jak chceme. Program jako takový je soubor zapsaný ve strojovém kódu. Strojový kód jsou již překódované informace pro procesor, aby pochopil, co se po něm chce, tento kód můžeme pozorovat, když jakýkoli .exe soubor otevřeme v textovém editoru, například poznámkovém bloku. Pokud se podíváme na tento kód, bude nám nesrozumitelný, plný obdélníčků, ale čas od času můžeme pozorovat i části textu. Z toho, je nám jasné, že tohle asi to programování nebude. Program, se píše (programuje), v tzv. zdrojovém kódu. Definice tohoto kódu závisí na programovacím jazyce, to znamená, že každý programovací jazyk má trochu jinak pojmenované funkce, ale o tom déle. Při ukládání programu se provádí takzvaný překlad, myšleno, převodem instrukcí ze zdrojového kódu do strojového.

Zdrojový kód závisí na programovacím jazyce, strojový kód je univerzální a ze všech překladačů musí být stejný. To také znamená, že ve strojovém kódu nelze provádět již změny a nelze ho zpětně převést na původní, zdrojový kód!

Programování


Jak již jsem psal, programování je pojmenování pro tvorbu programu (pro psaní programu) . Při psaní kódu musíme vždy myslet na několik věcí. Primární funkce programu je to základní co po programu chceme, pokud tedy tvoříme kalkulačku, nikdy nesmíme zapomenout na to, že to bude program, který bude počítat s čísly o x desetiných místech a tomu musíme přizpůsobit jak samotný program a jeho funkce tak i grafický design programu. Další, neméně podstatnou částí a pravidlem při psaní kódu programu je takzvaná optimalizace. Nikdy nesmíme zapomenout na to jak funguje procesor, že cokoli napíšeme je zpracováno, a proto se musíme snažit používat co nejméně funkcí, nebo používat funkce méně náročné. Programování a technika celkově je o logice, vše v počítači chodí naprosto logicky a ne, že by se tam něco dělo a my jen koukali, jak to dopadne. Vše je postavené tak aby program vždy dopracoval do konce, pokud je správně napsán. Průběh programu se nikdy nemění a je vždy stejný, jediné co můžeme ovlivnit, jsou proměnné a tím pádem výsledky programu.

Důležitou věcí v programu jé tak zvané větvení, nebo-li odskoky do podprogramu. Žádný složitější program se bez nich neobejde, tady se dostáváme k základnímu dělení programů na takzvané přímé a již zmíněné slovo, větvené programy. Příklad přímého programu by mohl být například takovýto:

Dim a As Integer
Dim b As Integer
a = 5
b = 1
Dim vysledek As Integer
vysledek = a + b
Print int(vysledek)

Tento ukázkový kód je psaný pomocí programovacího jazyka Visual Basic a jeho jedinou funkcí je sečíst dvě čísla a vypsat výsledek, blíže si příklad popíšeme dále. Pokud si ale vzpomeneme na práci procesoru, tak víme, že instrukce se vykonává jedna za druhou a v tomto případě nic nebrání v postupu programu. To znamená, že se jedná o přímý program.

Druhou možností je takzvaný, větvený program. Ten dostaneme ve chvíli kdy se v kódu odkazujeme na jinou než následující instrukci, to se děje například během podmínek když (IF) nebo různých cyklů (FOR, WHERE, atp.). Příklad kódu by mohl být takovýto:

Dim a As Integer
Dim b As Integer
Dim vysledek As Integer
a = 5
b = 1
If a < b then
vysledek = a + b
Else
Vysledek = a – b
End if
Print int(vysledek)

Pokud se podíváme na kód nyní, už vidíme, že nám přibila podmínka IF. Tímto konkrétním dotazem zjišťujeme, zda je hodnota a menší než hodnota b, pokud je, výsledkem je součet čísel, pokud není, výsledkem je rozdíl. Při prvním pohledu si opět myslíme, že jde o přímý program, ale opak je pravdou.

V tomto programu už máme jeden odskok, normálně jsou instrukce brané z paměti pomocí inkrementace, to znamená, že se automaticky zvyšuje číslo adresy instrukcí. Například v tomto programu bychom měli (teoreticky) instrukci a = 5 na adrese 1 a instrukci b = 1 na adrese 2, atd… Ale program ve chvíli kdy je splněná podmínka se musí vracet zpět na poslední známou adresu a odtud pokračovat. Zní to hrůzostrašně, ale funguje to.

Můj profesor tento děj vysvětluje s oblibou na tomto příkladu. Když člověk ráno vstane, jde do kuchyně a chce si udělat čaj, vyndá hrnek z police, nalije vodu do konvice, vyndá sáček s čajem a zaleje vodou. Člověk je inteligentní tvor, a pokud se nám stane, že jsme večer předtím do noci programovali a naše drahá polovička to ví, tak nám může udělat laskavost a po probuzení už bude voda v konvici a sáček v hrnku na stole, přijdeme, zalijeme, hotovo.
Počítač oproti nám, neumím sám o sobě myslet a program jak jsem psal, je přesně daný soubor instrukcí, a pokud by se stalo v programu kde příjde, vyndá hrnek, postaví vodu, vyndá sáček a zaleje čaj to, že hrnek nebude v polici? Například podmínkou If zjistíme, že hrnek není tam, kde by měl být a vydáme se ho hledat, tak když ho nalezneme, na stole a sáček už připravený? Počítač nemůže pokračovat dál, na tohle není naprogramovaný a neví, co má dělat, tak se vrátí před If, tedy vyndá pytlík, vyleje vodu, vrátí hrnek do police, následně vyndá hrnek z police, postaví na vodu, vyndá sáček, zaleje, a udělá čaj.


Takže asi takto fungujou větvené programy. Všechny tyto informace jsou nezbytné pro optimalizaci výsledného kódu, a pokud víme víc o průběhu samotného programu, můžeme program napsat efektivněji, s tím, že bude pracovat podstatně rychleji, než kdybychom si mysleli že procesor, myslí za nás.

Hodnocení +99Líbí
Přečteno 4906-krát

Komentáře

Přidat nový



Pro přispívání musíte být přihlášen


Zapsal PepiCzech - 07.04.2010 16:47



Banane4joy: Zrovna tak. Chtělo by to pokračování :)



Zapsal banane4joy - 26.02.2010 14:52



Pro mě, jako absolutního laika v teorii a amatéra v praxi, velmi zajímavé počtení.
Víc než jsem předpokládal :))



Zapsal Tior - 26.02.2010 13:26



Vtipný, že náš profesor taky, asi na to mají metodický příručky:D. Ale článek pěkný a dobře srozumitelný.



Zapsal Šuny - 26.02.2010 09:51



Myslím, že všichni profesoři na gymplu, to maj naučený stejně... i naše profesorka to tak říkala... :) článek celkem pěknej, ale pro mě nepoužitelnej :).




Poslední komentáře

Sousední akvárko

Nejčtenější

Nejlepší

Web Kreveta.net je unikátní sbírkou článků mapují proces tvorby her. Vedle návodů naleznete v krevetím akvárku i rozhovory s vývojáři, recenze, soutěže. Portál Kreveta.net připravují (řazeno abecedně): Akhera, Banane4joy, Bullet_catcher, Burák, Fire.js, Ikkju, Izual, Likandro, Makan, PepiCzech, StorN, Tior.
Akvárko vymaloval Tior, o chod filtrace se stará StorN (design a kód).
Copyright © 2010 Kreveta.net. Všechna práva vyhrazena.