2011. november 24., csütörtök

Tároljunk adatot, használjunk változót!

Nyilván szeretnék programunkban különböző műveleteket végezni adatokkal, ezt ugye úgy a legcélszerűbb, ha eltároljuk a szükséges adatokat. Erre használhatjuk a különböző változókat, melyek a memória egy-egy apró kis részei. Olyanok mint a fiókok, beléjük rakhatjuk a megfelelő típusú adatokat.
Megfelelő típus? Ilyesmiről ugye eddig nem volt szó. Ugye dolgozhatunk számokkal, szövegekkel és hasonló dolgokkal, ezeket hívjuk típusoknak. A következő típusok fordulnak elő a leggyakrabban:

int, vagyis integer, ezek az egész számok

double, ezek a valós számok, alias a tizedestörtek

char, ami a character rövidítése, jelentése karakter, egy ilyen változóba egy-egy betűt tudunk eltárolni

string, karakterfolyam, vagyis szöveg, ebben tudjuk elhelyezni a hosszabb szövegeket

bool, teljes nevén boolean. Ez egy logikai változó, mely elég aranyos. Kétféle értéket vehet fel, igaz/hamis, igen/nem,true/false,0/1 így szoktuk jellemezni. Mi maradjunk a true(igaz)/false(hamis) felállásnál.

Talán ezek a leglényegesebbek. Szóval egyelőre érjétek be ennyivel. Most pedig lássuk, hogy mit tudunk csinálni ezekkel a változókkal.
Létre tudjuk hozni őket, ez úgy történik, hogy megadjuk a változó típusát, majd nevét, aztán pedig jön egy ";" ez a jel megtalálható minden utasítás (vagyis a változó létrehozás után is) végén.
int egesz;  //most létrehoztunk egy egész típusú változót
Ennek tudunk értéket is adni, a következő módon:
egesz=10; //most az egesz nevű fiókunkba beleraktuk a 10es számot
A létrehozást (ezt itt igazából deklarálásnak hívják) és az értékadást, egyszerre is elvégezhetjük.
int egesz=10; //ez ugyanaz a két fenti parancs, csak egyben.
A double-t nem részletezem, mert ugyanígy működik, csak abba a fiókba valós számokat is tehetünk.
A következő a karakter:
char karakter='a'; //nagyjából ez is ugyanúgy működik, de itt az értéket (vagyis a betűt) sima idézőjelbe (' ') kell tenni. A szöveg ettől annyiban tér el, hogy ott dupla idézőjelet (" ") kell használni, vagyis:
string szoveg="Ide mar tobb szoveget be tudunk irni" //azért  nem használok a kódban ékezetet, mert a C++ kicsit nehezen eszi meg őket, ezen egyelőre tegyük túl magunkat, majd később foglalkozunk vele.
Már csak a logikai barátunk maradt, nézzük meg őt is!
bool igaz=true; //ez egy igaz logikai változó
bool hamis=false; //ez pedig egy hamis

Ez a bejegyzés most csak ennyiről akart szólni, de azért legyen itt még egy kis példa. Ez ugyanaz a program lesz, mint az első programunk volt, annyi különbséggel, hogy itt a szöveget nem egyből kiíratjuk, hanem előbb eltároljuk egy szöveg típusú változóban, majd magát a változót íratjuk ki.

#include <iostream>

using namespace std;

int main()

{
string szoveg=  "Hello World!"; //belerakjuk a szöveget a változóba
cout<<szoveg; //kiíratjuk a változó tartalmát

return 0;

}

2011. november 23., szerda

C++ bevezető

Meggondoltam magam és mégis írok gyorsan egy kis C++ gyorstalpalót. Ez most tényleg gyors lesz, csak röviden ismertetem a lényeget. Én C++ programíráshoz a CodeBlocks nevű IDE-t (Integrated Development Environment) használom, mely innen letölthető. Egyébként bármely szövegszerkesztő megfelel a célnak, de egy megfelelő IDE-vel egyszerűbb az írt program futtatása és a hibák megtalálása. Most pedig egy egyszerű példaprogram:

#include <iostream>

using namespace std;

int main()
{
  cout<<"Hello World!";

return 0;
}

Ez a már szinte hagyománnyá vált kezdő program a programozók körében. Semmi mást nem csinál, csak kiírja a konzolra a Hello World! szöveget.

Itt látható a végeredmény

Most pedig következzék a magyarázat a kódhoz. Most igyekszem részletesen írni, később ez lehet változni fog, de ezt még meglátjuk. Először is a "//" dupla perjel az egysoros megjegyzéseket jelenti, ezeket nem fogja lefordítani és végrehajtani a számítógép. Ezért a programkód mellé odaírtam így megjegyzésben a lényeget. Ha valami nem érthető, vagy ha a jobbak esetleg hibát találnak valahol, kérem szóljanak!

Az #include kulcsszó azt jelenti, hogy kérünk szépen magunknak egy könyvtárat. A könyvtárakban vannak a már a készítők által régen megírt elemek, amiket mi fel tudunk használni.
Az #include <iostream>  azt jelenti, hogy mi a programunkban használni szeretnénk az <iostream> nevű könyvtárat. Mit is csinál a programunk? Kiír egy szöveget a konzolra, az iostream pedig pont ehhez kell. A szóban az IO, az input/output-ra utal, melynek jelentése bemenet/kimenet.
A kód következő részében megadjuk, hogy mely névteret szeretnénk használni. Erről sokat nem tudok mondani, mert nekem sem tanítottak még róla semmit, de eddig nem is volt rá szükségem, ugyanis eddig minden, amire szükségem volt, az std névtérben volt. Szóval a "using namespace std;" azt jelenti, hogy az std névteret (namespace) szeretnénk használni (using). Ez nekünk bőven elég lesz egyelőre.
Ezután következik ténylegesen a programunk, melyet a main metódus foglal magában. A metódusokról majd később írok, egyelőre elég azt tudni, hogy a következő képen néznek ki: valami(){}. A valami a metódus nevére utal (jelen esetben main), ezután a sima zárójelben tudunk megadni bemeneti értékeket a metódusnak. Ez  most mivel üres, azt jelenti, hogy nem adunk át értéket a metódusnak. A sima zárójel után következik a kapcsos zárójel, ezek mindig a blokkokat jelölik, a blokkon belül találjuk majd az utasításokat. Mivel a programunkat a main metódus foglalja magába, így a programunk a main metódus blokkjában lévő kód.
Na, most már tényleg a lényeg jön, amit a programunk csinál.  cout<<"Hello World!"; ez azt jelenti, hogy "írd ki légyszíves a konzolra azt, hogy Hello World!" A parancs amit használunk a cout, ebben is benne van a fentebb említett out(put), ez jelenti azt, hogy kifelé megy a dolog, ezután jön kettő darab < jel, melynek az iránya is jelzi, hogy hova is megy, amit akarunk. A szöveg felől mutat a kimenet felé, vagyis tényleg kifelé küldjük a dolgot. Ezután már csak a kiírandó szöveg van aposztrófok között. Az aposztrófok jelzik, hogy egy szöveget (string-et) íratunk ki.
Ez volt a lényeg, ugyan a program végén még ott van a return 0; is, de ez megint csak a metódusos dologhoz tartozik, szóval később fogom kivesézni. Egyelőre elég annyi, hogy illik odaírni, hogy szépen lefusson a programunk. A programot a "}" jel zárja, amely a main metódus blokkjának záró zárójelpárja.


Összefoglaló a programkód kommentelésével:

#include <iostream> //kérjük szépen az <iostream> könyvtárat a bemenet és kimenet használatához

using namespace std; //az std névteret szeretnénk használni, mert abban van, ami nekünk kell

int main() //meghívjuk a main metódust, melynek nincs bemenő paramétere

{            //ezzel a zárójellel indul a main metódus blokkja, vagyis innen kezdődik a programunk

  cout<<"Hello World!";  //küld ki a konzolra, hogy Hello World!

return 0; //a main metódus dobjon vissza egy 0át, vagyis minden rendben

}           //a main metódus blokkját lezáró zárójelpár, vagyis itt van vége a programunknak
Legközelebb jönnek a vezérlési szerkezetek, elágazások, ciklusok!

Elindult

Egy hirtelen ötlettől vezérelve nyitottam most ezt az új blogot. A célom az egésszel, hogy egy kicsit hatékonyabbá tegyem a saját tanulásomat, ami sosem árt. A blog nagyjából arról fog szólni, hogy felteszem azokat a dolgokat, amiket a suliban, vagy otthon tanulok. Ez azért is lesz jó (nekem), mert közben gyakorolok és mert később jó lesz visszaolvasni ismétlésnek. Az egészet pedig azért teszem nyilvánossá, hogy mások is tanulhassanak belőle, na meg persze azért is, hogy az idelátogatók esetleg kijavíthassák a helytelen dolgokat a blogokon. Mikre is lehet majd itt számítani? Mivel mérnök informatikus szakon vagyok, így leginkább ezzel kapcsolatos dolgok lesznek. Programozás, számítástechnika, matematika (na, ez a része még nem tudom hogy lesz, mert ebből elég gáz vagyok) és egyéb dolgok még amik eszembe jutnak. Mivel azonban már az első félévem vége felé járok, nem tudok mindent az elejéről kezdeni. Azonban, ha lesznek érdeklődők, akkor szívesen rakok fel már régebbi anyagokat is. Most igazából programozásról írhatnék, ugyanis C++ előadáson voltam ma, azonban nem sok újat tanultunk. Ami viszonylag új volt ma, vagyis csak félig új, az az inicializálás és a struct. Most azonban semmi energiám nincs írni, ráadásul még tanulnom is kéne a holnapi diszkrét matek zéhára. Ennek a témája egyébként a bázisok közötti áttérés lesz. A lényeg végül is, hogy egy eddig használt bázis helyett, egy másik bázisban szeretnénk felírni egy vektort, akkor hogy fogjuk megkapni ennek a vektornak az új koordináta mátrixát, a régi koordinátamátrix és az új bázis ismeretében. Őszintén szólva fogalmam sincs egyelőre az egészről. A matekkal az a legnagyobb bajom egyelőre, hogy mindig az zéhák után jövök rá, hogy mit kellett volna csinálni. Na, de majd csak belejövök.