Egy kis programozáselmélet:
Programozás: az a folyamat, amely során a programozó eljut a feladat megértésétől a számítógépen futó program kódolásáig, majd a dokumentálásáig
Program: utasítások sorozata
C#-ban, a Pythonhoz hasonlóan, a megadott utasítások ,,fentről lefelé’’ soronként hajtódnak végre. (szekvenciális programozás, interpreter)
Szintaktikai hiba: azt jelenti, hogy a programot nem a programnyelv szabályai szerint írtuk meg. (Nem zártunk be egy zárójelet, nem tettünk vesszőt, stb.)
Szemantikai hiba: azt jelenti, hogy elvi hibát vétettünk. A program el fog indulni, csak nem a helyes eredményt adja. (Pl. négyzetre emelésnél nem önmagával szoroztuk a számot, hanem mondjuk 2-vel, de ettől még érvényes művelet, csak nem ezt akartuk.)
Mire is jó a C# (“c” sharp)?
Az egyik legelterjedtebb programozási nyelv
Mobil, asztali, web és adatbázis alkalmazásokhoz
Web szolgáltatásokhoz, oldalakhoz
Jól felépített struktúra, objektumorientáltság
A C#-ban nem olyan egyszerű elkezdeni a programozást, mint Pythonban. Kell pár alap sort beírnunk, amelyek látszólag “semmit sem csinálnak”, azonban nélkülözhetetlenek a program lefutásához.
using System; - ezzel érjük el, hogy alap parancsokat használjunk. A pontosvessző a végén szükséges minden olyan sor végén, amelyet nem kapcsos zárójel követ.
üres sor - a program futásában nem játszik szerepet, de érdemes néha használni az jobb átláthatóság miatt
public class Program - minden kódnak egy osztályban kell lennie, mi egész végig csak ebben az egy osztályban fogunk dolgozni
(és 10.) {} - a kapcsos zárójelek azt jelzik, hogy ami ezeken belül van, az kapcsolódik az előtte leírt kódrészhez (ebben az esetben a Program osztályhoz) ezt a jelölést más helyeken is láthatjuk majd (pl.: elágazásoknál, ciklusoknál)
public static void Main() - ez egy metódus, vagy függvény, csak az a kód fut le a programban, amely ezen belül van
komment - ezt a kettős “/” karakterrel lehet előidézni, több sort pedig a következő paranccsal lehet írni:
Ez így elég soknak és bonyolultnak tűnhet a Pythonhoz képest, de annyira nem kell tőle félni, mert ezeken az órákon sosem fogunk ezeken módosítani. Vehetjük úgy ezeket, mint a program szükséges alapkövei. (A pontosvesszőt és a kapcsos zárójelet érdemes megjegyezni)
Első Program: Hello World!
Ennek az egyszerű programnak nagy hagyománya van a programozók körében, ugyanis szinte mindenki ezt írja be, hogy ellenőrizze, hogy helyesen telepített-e mindent, és hogy minden rendben van-e.
Az egyetlen új sor a kötelezőkön kívül a:
Console.WriteLine(“Hello World!”);
Ez pont annyit tesz, hogy kiírja, hogy Hello World!, ahogyan azt a képen is lehet látni. A Console.Writeline(); írat ki a konzolra (a kijelzőre). Ez az utasítás megegyezik a Pythonban használatos print() paranccsal. A Hello World!-öt kettős idézőjelekbe kell tenni, ez mutatja, hogy egy karakterláncot akarunk kiírni.
Olyan adat, amely értéke módosítható (mint pl. matekban az x). C#-ban több típusa is van:
int - egész számokat tárol el, mint pl.: 13, 56, 12276, -61
double - lebegőpontos (tizedes tört) számokat tárol el, mint pl.: -0.59, 12.98
char - egyetlen karaktert tárol el, mint pl.: “a”, “X”
string - egy egész karakterláncot, vagy szöveget tárol el, pl.: “Hello World”
bool - logikai változó, két értéket vehet fel: True (1), False (0)
Minden változót úgy hozzuk létre, hogy először megadjuk a típusát, majd a nevét, a név (pár speciális karakter kivételével) bármi lehet, de törekedjünk az ékezetek mellőzésére. Pl.:
Emellett lehet egyből értéket is adni nekik, pl.:
string neved = “Kis Pista”;
A felhasználótól is tudunk a program futása közben bekérni adatot. Ezt a következő paranccsal tehetjük meg:
(a zárójelbe ne írj semmit, ha előtte akarsz kiírni valamit, azt a hagyományos paranccsal, előtte tedd meg)
Sokszor ütközhetünk olyan akadályba, hogy át kell alakítani egy változó értékének adatttípusát, erre a metódusok a következők:
nem string → string: nem_string_valtozo.ToString()
nem int → int: Int32.Parse(nem_int_valtozo)
nem double → double: Double.Parse(nem_double_valtozo)
Amikor kiírásban nem csak egy dolgot akarunk kiírni, hanem egymás után többet, azt + jelekkel tudjuk megoldani. Tehát például:
Programozás közben elengedhetetlen műveleteket használni. Ezt legtöbbször a számokat eltároló változókkal fogjuk végezni. A négy alapművelet teljesen olyan, mint a Pythonban. egyszerűen leírjuk, pl.:
Emellett még fontos megemlíteni a maradékos osztást, amivel a két számot elosztva kapott maradékot írja ki a program. Ezt a műveletet %-lel tudjuk jelezni:
Ha pedig valami bonyolultabb műveletet akarunk elvégezni, akkor arra a Math osztályt fogjuk használni:
Fontos megemlíteni, hogy ezek a speciális műveletek általában csak double típusú (lásd a változóknál) változókra értelmezettek, erre érdemes odafigyelni.
Ugyanúgy, mint Pythonban, C#-ban is megtalálhatóak a logikai elágazások. Ezt, a Pythonhoz hasonlóan, az “if” parancs használatával oldjuk meg. Itt is egy (vagy több) logikai feltételt adunk meg, és az alapján dönti el a program, hogy melyik utasítást hajtja végre.
Fontos megérteni, hogy a program először a feltételt nézi, és annak logikai értéke alapján dönti el, hogy melyik programrészt futtatja le, tehát ez az alá-fölérendeltségi viszony nagyon fontos. Ezt a viszonyt (ahogy a Pythonnál is) behúzással tudjuk kifejezni.
A relációkból van néhány, amivel már a Pythonban is megismerkedhettünk. Ezek az alábbiak:
egyenlő: == (ha csak egy darab = van, az átváltoztatja a változó értékét, nem pedig vizsgálja azt)
kisebb/nagyobb egyenlő: <= vagy >=
Az alábbi példán láthatjuk, hogy hogyan dönt, és mit futtat le. Ha mindkét bekéréskor ugyanazt a számot adjuk meg a programnak, akkor “A két szám egyenlő!”-t, ha pedig nem, akkor “A két szám nem egyenlő!”-t fog kiírni.
Fontos még megemlíteni az “else if” lehetőséget, amikor nem csak két lehetőséget akarunk szétválasztani, hanem a hamis ágon további eseteket is szeretnénk megvizsgálni. Erre látható az alábbi példa, amin látható (és ismételhető) egy-két korábban tanult dolog is:
Fontos még az “és” és a “vagy” kifejezése, amit && (alt gr+C) illetve || (alt gr+W)-vel teszünk meg. Például:
Ciklusok (for, while és do…while):
Ismételten a Pythonhoz hasonlóan, a C# is rendelkezik ciklusokkal.
Egy kis ismétlés, hogy mik is azok a ciklusok. Ezek olyan műveletek, amelyek több, egymáshoz hasonló tevékenységet írnak le rövidebb alakban. Tehát képesek ugyanazon programrészletet többször lefuttatni. Ezt többféleképpen képesek végrehajtani, különböző parancsok segítségével. Ilyen parancsok közül sok van, most a három legalapvetőbbet fogjuk megnézni.
Pythonban megismerkedtünk a “for i in range” paranccsal, a C# “for” parancsa ehhez nagyon hasonló. Ezt akkor használjuk, amikor azt akarjuk megadni, hogy a program hányszor fusson le. A felépítése így áll össze:
for ( változó definiálása ; logikai tényező ; változó léptéke )
Változó definiálása: először meg kell határoznunk egy változót, amivel dolgozunk a cikluson belül. Ezt a változót gyakran “i”-nek nevezik el. Meg tudjuk adni “i” kezdőértékét is, amellyel a programrész először le fog futni.
Logikai tényező: Ezzel határozzuk meg, hogy hányszor fusson le a programrész. Ezt általában úgy használjuk, hogy megadjuk, hogy melyik számnál maradjon kisebb az előző részben definiált változó (általában “i”).
Változó léptéke: Itt állíthatjuk be, hogy milyen léptékkel mozogjon a változó. A beállítás módjai a példában láthatóak lesznek.
Amint látható, ebben az esetben “i” változót használtunk, amit a ciklus kezdetén 1-nek definiáltunk. A második blokkban látható, hogy logikai tényezőnek azt állítottuk be, hogy addig fusson a program, amíg “i” kisebb vagy egyenlő 20-al. A harmadik blokkban pedig az látható, hogy 1-es léptéket adtunk meg, tehát “i”-hez minden ciklus végén 1-et adunk hozzá. (Az 1-es léptéket úgy is ki lehet fejezni, hogy a harmadik blokkba “i++”-t írunk, ez a programozók között nagyon elterjedt.)
A while ciklus már nem a lefutás számát határozza meg, hanem egy feltételhez köti azt. Ezt akkor használjuk, amikor nem tudjuk pontosan, hogy hányszor kell lefutnia a programnak, csak azt, tudjuk meghatározni, hogy minek kell teljesülnie a cél eléréséhez.
Felépítésben nagyon egyszerű:
Példa a “while” ciklusra:
Ebben az esetben látható, hogy bekértünk a felhasználótól egy számot, és egészen addig, amíg az nem lesz 50, minden lefutáskor egyet hozzáadunk és kiíratjuk a programmal a számot.
Ez lesz a kimenete (ha 40 a bemenet):
Látható, hogy amikor az ‘a’ értéke 49 volt a ciklus elején, akkor futott le utoljára a program, ugyanis ahhoz egyet hozzáadva, és azt kiírva adta ki az 50-es számot.
A do…while ciklus nagyon hasonló a sima while ciklushoz, annyiban különbözik, hogy az első alkalommal mindenképpen lefuttatja a programot. Ez hasznos lehet akkor, amikor arra teszünk feltételt, amit a felhasználó fog megadni, például egy jelszó esetében. Akkor is ezt érdemes használni, amikor ellenőrizni kell, hogy a felhasználó megfelelő számot adott-e meg, például ha mindenképp természetes számot akarunk bekérni, és újra fel kell dobnia a bekérő ablakot, ha a felhasználó nem azt ad meg. Erre példa:
Amint láthatjuk, ennek a ciklusnak a formátuma úgy néz ki, hogy odaírjuk a “do” parancsot, majd kapcsos zárójelek közé beírjuk, amit tennie kell, majd a kapcsos zárójel után a “while” parancs után zárójelbe odaírjuk a feltételt, aminek teljesülnie kell ahhoz, hogy újra fusson a program. Ebben az esetben tehát ha a megadott szám kisebb, mint 0, akkor nem természetes, tehát a programnak új számot kell kérnie.
Majd ugye miután bekértük a természetes számot, írhatjuk az utolsó pontosvessző utáni sorba a program további részét, tehát hogy mit akarunk kezdeni ezzel a számmal.