Különböző feladatokat megvizsgálva azt tapasztalhatjuk, hogy azok két csoportra bonthatók:
Vannak olyan feladatok, problémák, melyek megoldásához adható több-kevesebb iránymutatás, de mindenképpen problémamegoldó gondolkodást, önálló ötleteket kívánnak meg.
Ugyanakkor vannak olyan feladatok, problémák, amelyek megoldására fel tudunk készülni, és a megoldás több hasonló probléma megoldására is használható. A megoldás felbontható meghatározott lépésekre. Ezeket az eljárásokat algoritmusoknak nevezzük.
Az algoritmus: több (gyakran végtelen sok) azonos jellegű, egymástól különböző feladat megoldására használható eljárás, amelynek során utasításszerűen, előre meghatározott számolási lépéseket és döntéseket (utasítás) kell adott sorrendben végrehajtani.
Az algoritmussal szembeni követelmények:
- Véges: véges számú lépés után meg kell tudnia határozni a kiindulási feladat megoldását (ez a szám lehet nagyon nagy is), vagy meg kell mutatnia a feladat nem megoldható voltát.
- Meghatározott (determinisztikus): a megoldáshoz vezető lépéssorozat tisztán, egyértelműen van megadva és szigorúan követhető.
- Input (bemenet): az algoritmus vagy igényel, vagy nem olyan adatokat, amelyeket a kezdetkor (elindulás előtt) meg kell adni. A feladathoz szükséges információ mindig bizonyos meghatározott halmazokból kerül ki.
- Output (kimenet): az algoritmushoz egy vagy több output (válaszok vagy eredmények) tartozhat, de legalább egy biztosan van. Ezek meghatározott kapcsolatban állnak az input-tal.
- Elvégezhetőség: elvárjuk, hogy az algoritmust végre lehessen hajtani.
Az algoritmusok alapelemei az utasítások.
Az utasítások lehetnek:
- Informatív utasítások: amelyek a gépi környezetre, az adatok típusára, a szerkezetre vonatkoznak.
- Végrehajtási utasítások: valamilyen művelet végzését írják elő;
- Értékadó utasítások: valamely változó értékét definiálják aritmetikai- vagy más függvénykifejezés formájában. Definíciós utasításnak is nevezik.
- Feltételes utasítások: végrehajtásuk egy vagy több feltétel teljesülésétől függ.
- Vezérlő utasítások: azok, melyek az utasítások eredeti sorrendjének megváltoztatását irányítják.
- Input/output utasítások:
– az input utasítás információ-bevitelt hajt végre valamelyik periférikus egységről a központi tárba,
– az output utasítás információátvitel a központi tárból perifériára.
- Egyéb utasítások: minden, az előbbiekhez nem sorolható utasítás, pl. az ún. állománykezelők.
Az algoritmusok a bennük előforduló utasítások, valamint azok jellege és tulajdonságai alapján lehetnek:
1. Elemi algoritmusok:
1.1. Soros v. szekvenciális algoritmusok
1.2. Feltételes és elágazásos algoritmusok
1.3. Ciklusok
1.4. Eljárások, szubrutinok
2. Alapvető algoritmusok:
2.1. Egy sorozathoz egy érték rendelése; az összegzés-, az eldöntés-, a kiválasztás-, a lineáris és a bináris keresés-, a megszámlálás- és a maximum-kiválasztás tételei;
2.2. Egy sorozathoz egy sorozat hozzárendelése; a kiválogatás és rendezési tételek;
2.3. Több sorozathoz egy sorozat hozzárendelése; metszetképzés, egyesítés, az összefuttatás és a visszaléptetéses (backtrace) keresés tételei. (Az egyes típusok részletes kifejtésére majd az algoritmusleíró eszközrendszer megismerése után térünk vissza.)
AZ ALGORITMUSLEÍRÓ ESZKÖZÖK
Az algoritmusleíró eszközök használatának célja, hogy a feladatmegoldás menetét világosan bemutassa. Gyakorlatilag géptől független, szemléletes, logikai gondolatmenet. Ez jól jön, ha például többen dolgoznak egy adott feladaton, projekten, könnyebb átlátni ki miért felelős, mit készít el. Saját magunknak is hasznos, ha dokumentáljuk, egy adott feladatot hogyan oldunk meg, milyen változókat mire használunk stb…
Előnyei:
- szemléletes algoritmusleírás könnyen áttekinthető és követhető bárki számára,
- a világos algoritmusszerkezet gyakran sugall korábban nem is sejtett egyszerűsítő megoldásokat, esetleg egy adott probléma valamilyen irányba történő továbbfejlesztésének lehetőségeit is.
A FOLYAMATÁBRA
A folyamatábra a feladatmegoldás lépéseinek sorrendjét – utasítástípusonként különböző geometriai alakzatok felhasználásával – szemlélteti.

A jeleket a folyamatábra elkészítése során meghatározott szabályok szerint lehet felhasználni. A legfontosabb szabályokat az alábbiakban foglalhatjuk össze:
- a szimbólumok nagysága változhat a beírt szövegnek megfelelően, de a méretek arányait a felismerhetőség korlátozza;
- a szimbólumok állását megváltoztatni, azokat elforgatni tilos, mert ezzel a felismerhetőség csökken;
- a folyamatok iránya, ha nincs külön megjelölve, mindig balról jobbra és felülről lefelé értelmezendő. Eltérő esetekben nyílhegyeket alkalmazunk az új irány megjelölésére;
- a szimbólumok funkciójával kapcsolatos információkat, utasításokat a rajzjelek belsejében helyezzük el;
- a folyamatvonalak kapcsolódhatnak egymásba, ilyenkor a becsatlakozó vonalak végére nyílhegyet teszünk. A kapcsolódó folyamatvonalak mindig merőlegesek egymásra,
- a folyamatvonalak kereszteződhetnek, de csak merőlegesen. A kereszteződés nem jelent logikai kapcsolatot. (Alkalmazott jelölése (→)
Nézzünk egy egyszerű példát. Adott egy osztály, x darab tanulóval. Számoljuk meg, hányan lettek kitűnőek. Bekérjük az osztály létszámát, majd minden diák átlagát. Azt, hogy hány darab kitűnő van a DB változó fogja tárolni, aminek az értéke kezdetben 0. Ha egy átlag nagyobb, mint 4.5, akkor ennek a DB változónak az értékét növeljük eggyel. Ha elfogytak a diákok, akkor a végén kiíratjuk, hányan vannak a kitűnők, azaz mennyi a DB értéke.

A MONDATSZERŰ LEÍRÁS
Az algoritmus egymást követő lépéseit mondatokkal vagy mondatszerű szerkezetek egymásutánjával próbáljuk leírni. Két fajtája különböztethető meg:
- Mondatok sorozata írja le a feladat megoldását. Ezeket a mondatokat sorszámmal látjuk el. Erre azért van szükség, mert a programok legnagyobb részénél el kell térni a soros (szekvenciális) végrehajtástól feltétel nélkül vagy feltételtől függően, és ilyenkor hivatkozhatunk a megfelelő sorszámra.
- Szemléletesebb az, amikor mondatok helyett csak ún. mondatszerű szerkezetek egymásutánjával írjuk le a feladat megoldását. Ennél a leírási módnál az algoritmus szerkezeti egységeit bekezdéses struktúra segítségével szemléltetjük.

A STRUKTOGRAM
Az algoritmus elemeit egy téglalapba írjuk. A feladatmegoldás struktúrájának (szerkezetének) megfelelően ebbe a téglalapba további téglalapokat illesztünk, és a végrehajtási utasításokat ezekbe írjuk bele. Egymás utáni végrehajtás esetén a téglalapot két vagy több téglalapra osztjuk.

Hibakeresés
Programozás során nagyon fontos, hogy megtaláljuk a kódunkban a hibákat. A Visual Studio szerencsére jelzi nekünk, ha valahol probléma van. Értelmezzük a kapott hibaüzenetet, és javítsuk ki. Ha a hibaüzenet nem segít, akkor használhatunk debuggert. A debugger lehetővé teszi, hogy lépésről-lépésre kövessük a program futását, és megfigyeljük a változók értékét. Ez segíthet abban, hogy megtaláljuk a hiba forrását.
A C# -ban a try-catch blokkok a kivételkezelés egyik alapvető eszközei.
A try blokkba kerülnek azok a kódrészletek, amelyeknél előfordulhat egy kivétel (exception), vagyis valamilyen hibahelyzet. Amennyiben ilyen kivétel történik a try blokkban, azonnal végrehajtódik a catch blokk, amelyben a kivételt a programozó kezelheti.
A catch blokkban megadható, hogy milyen típusú kivételt kezeljen a program. Ha a try blokkban egy adott típusú kivétel történik, akkor a hozzárendelt catch blokk végrehajtódik. A catch blokkban lehetőség van a kivétel logolására, megjelenítésére, illetve annak megoldására.
A try-catch blokkok segítségével megakadályozhatjuk, hogy a program összeomoljon, amennyiben hiba lép fel és kezeljük a hibát.
Dokumentáció
Nézzük meg, mi szokott szerepelni egy program dokumentációjában:
program célja: a dokumentáció tartalmazza a program célját, amely magyarázza, hogy miért készült a program és milyen problémát kíván megoldani.
felhasználói útmutató, hardver igény
architektúra: leírás arról, hogyan épül fel a program, milyen komponensek alkotják, hogyan kommunikálnak egymással.
kód dokumentáció: leírja a kódban található függvények, osztályok, metódusok, és változók működését
teszt dokumentáció: a program tesztelésével kapcsolatos, leírja hogyan kell tesztelni a programot, milyen tesztelési eseteket kell végrehajtani, vagy hajtott végre a fejlesztő
hibajavítás dokumentáció: tájékoztathat a korábbi hibákról és azok javításáról, frissítésekről
verziókezelés: program verziója, a verziófrissítésekkel és azokkal kapcsolatos információk
