Hardware és software alapismeretek

A hardver és a szoftver jelentőségének változása

 

A számítástechnika hajnalában (1950-es évek) a hardvernek sokkal nagyobb volt a jelentősége, hiszen akkoriban magának a számítógépnek, mint szerkezetnek az öszzeállítása és működtetése jelentette a legnagyobb problémát. Akkoriban csak a hozzáértő szakemberek jutottak számítógép közelébe, így nem is volt cél, hogy kimondottan felhasználóbarát programokat írjanak.

http://poskola.fw.hu/algoritmus/images/hw-sw_jelent_valt.gif

Ahogy a technológia fejlődött, úgy a számítógép (a hardver) egyre megbízhatóbbá és olcsóbbá vált, így fokozatosan eljutott a kisebb cégekhez, s mára a hétköznapi emberig. Tehát a felhaszánlók köre megváltozott: profi szakemberek helyett most gyermekek, tanárok, orvosok, titkárnők, pékek, és takarítónők ülnek a gépek előtt, és minden joggal elvárják, hogy a számítógépet a saját különböző céljaikra a lehető legkényelmesebben lehessen felhasználni, a legkevesebb tanulással.

De mivel a számítógép hardvere csupán egy halom vas és műanyag, ami önmagától semmi értelmes dologra nem képes, a fent említett hatalmas felhasználói igényeket a programoknak (szoftvereknek) kell biztosítani. A számítástechnika története során tehát a hangsúly áthelyeződött a hardverről a szoftverre. Mára a szoftvergyártás (vagyis a programozás) jelentős iparággá nőtt.

 

A hardver és a szoftver kapcsolata: a számítógépek működése

Számítógépek

A számítástechnika fejlődése során számtalan különböző próbálkozás született arra, hogy miként lehetne a számításokat valamilyen géppel elvégeztetni. Mindközűl a Neumann-elvű gépek bizonyultak a legsikeresebbnek, a modern elektronika pedig megteremtette a digitális technológia alkalmazásának műszaki feltételeit.

A Neumann-elvű számítógépek lényege, hogy mind az adatok, mind az elvégzendő feladat (kódolt utasítások formájában) a memóriában van eltárolva. A digitális szó azt jelenti, hogy mindent számokként ábrázolunk, és azokat dolgozzuk fel.

A ma körülöttünk lévő számítógépek mind ilyen elven működnek, legyen az PC, Macintosh, nagygép, laptop, palmtop, vagy akár mobiltelefon, CD játszó, vagy mikrohullámú sütő processzora. Ezért ettől a ponttól számítógépen Neumann-elvű digitális számítógépet értünk.

A programvégrehajtás menete

A memória

minden rekesze sorszámmal (címmel) rendelkezik, így a memória bármely rekesze megcímezhető, és így a processzor által közvetlenül elérhető.

A CPU (központi feldolgozó és vezérlő egység, a ,,processzor'')

feladata, hogy végighaladjon a program utasításain, és az előírt sorrendben végrehajtsa azokat. Az utasítások műveleteket végeznek az adatokon.

http://poskola.fw.hu/algoritmus/images/utasitas_vegrehajtas.gif

1.     a soron következő utasítás gépi kódja lehívódik a memórióból a CPU-ba

2.     dekódolás: megállapítja, hogy milyen adatokkal milyen műveletet kell elvégezni

3.     beolvassa a memóriából a szükséges adatokat, végrehajtja az előírt utasítást, 
az eredményt pedig visszaírja a memóriába 

 

Szoftver alapismeretek

 

A szoftver a számítógépet muködtetö-, a számítógépen futtatható programok, valamint a számítógépen tárolt adatok és a kapcsolódó dokumentációk összessége.

 

Szoftver (angol: software) : alatt a legszukebb értelemben elektronikus adatfeldolgozó berendezések (például számítógépek) memóriájában elhelyezkedö, azokat muködtetö programokat értünk. Körülbelül ez volt a John W. Tukey által 1958-ban bevezetett angol software kifejezés eredeti értelme is.

 

A szoftver nemcsak elektronikus memóriatartalomként realizálódik, hanem életciklusának megfelelöen többféle formában jelenik meg, fogalma ezekre a megvalósulási formákra is kiterjed.

így a szoftver fogalmába tágabb értelemben beletartozik:

 

A szoftver olyan termék, ami nem készül el határidöre, többe kerül mint tervezték, és -legalábbis részben- nem azt végzi amit kellene!

 

Szoftver licensz: Felhasználói szerzödés!(Nem tulajdonszerzés!)

Atulajdonosi szoftverek I.:

Atulajdonosi szoftverek II.:

  • Kereskedelmi programok
  • Freeware programok
  • Shareware programok
  • Public domain:
  • trial
  • limited edition
  • collectors edition
  • ad-powered
  • email-ware
  • abandon ware
  • free
  • copyleft
  • semi-free

 

A szoftvereket funkciójuk szerint 3 fö csoportba soroljuk:

·         Rendszerszoftver

·         Rendszerközeli szoftver

·         Felhasználói szoftver

 

Rendszerszoftver

A rendszerszoftver: olyan szoftver ami feltétlenül szükséges a hardware muködéséhez.

Típusai:

1.     Operációs rendszer (OS-operating system)

o    Kernel (mindíg fut, a RAM-ban van)

o    Segédprogramok (Utilities): pl.: driver (muködéshez szükséges)

2.     Egyéb, beépített programok (Kellékek): hangrögzítö, jegyzettömb, parancssor, stb. ( kényelmi és kiegészítö szolgáltatásokat nyújtanak)

Az operációs rendszerfelelös a számítógép alapvetö muködtetéséért.Az operációs rendszer feladatai közé tartozik a hardver és a felhasználó közötti kapcsolat megteremtése, a háttétárakhoz kapcsolódó adatkezelö muveletek biztosítása és a perifériák kezelése, felhasználói szoftverek futtatása.

Az operációs rendszereket több szempontból osztályozhatjuk. 

A felhasználók száma szerint lehet:

Példák:

Kulcsszavak:

GUI-Graphical User Interface: Grafikus kezelöi felület (pl.:Windows asztal)

Drag and Drop: A „fogd és vidd”, „húzd és ejtsd” (drag and drop)

 

Rendszerközeli szoftver

A rendszerközeli szoftverek az operációs rendszermuködéséhez nem elengedhetetlenül szükségesek, de annak használatát megkönnyítik, a rendszer biztonságát jelentös mértékben megnövelik.
2 csoportját különböztetjük meg:

Az ilyen típusú szoftverek egyik legismertebb fejlesztöje Peter Norton. Az ö nevéhet fuzödik többek közt a Norton Commander, a Norton Utilites termékek kifejlesztése, melyet napjainkban a Symantec Corporation fejleszt tovább. 
Az új operácíós rendszerek a rendszerközeli szoftveekr egyre több funkcióját veszik át

Fordítóprogramjait és fejlesztöi környezetét.


 

 

Felhasználói szoftver

Felhasználói szoftvernek nevezzük azokat a programokat, melyek egy meghatározott felhasználói igényt elégítenek ki.
Megkülönböztetünk általános célú és egyedi célú felhasználói szoftvereket.
általános célú szoftver:
 ide sorolhatjuk a játék programokat, a szövegszerkesztöket, a nyilvántartó- és grafikai programokat.
összességében a szoftveripar legnagyobb üzletága a felhasználói szoftverek fejlesztése.
Felhasználói szoftverek:


Szövegszerkesztö

Write, WordPad, Word, WordPerfect

http://poskola.fw.hu/sw/images/sw_alk_logo/WordIcon.jpg http://poskola.fw.hu/sw/images/sw_alk_logo/wpicon.jpg

Kiadványszerkesztö

Corel Ventura, Microsoft Publisher

http://poskola.fw.hu/sw/images/sw_alk_logo/corelicon.gif http://poskola.fw.hu/sw/images/sw_alk_logo/pbicon.jpg

Táblázatkezelö

Microsoft Excel, Quattro

http://poskola.fw.hu/sw/images/sw_alk_logo/exelicon.jpg http://poskola.fw.hu/sw/images/sw_alk_logo/qproicon.png

Adatbáziskezelö

Microsoft Acces, Informix, Starbase, Magic

http://poskola.fw.hu/sw/images/sw_alk_logo/accessicon.jpghttp://poskola.fw.hu/sw/images/sw_alk_logo/informixicon.jpg

Grafikai programok

Paint, Paint Brush, CorelDraw, Adobe Pohotshop

http://poskola.fw.hu/sw/images/sw_alk_logo/coreldrawico.jpg http://poskola.fw.hu/sw/images/sw_alk_logo/photoshopico.jpg

Prezentációs programok

Microsoft Powerpoint, Graphics, Star Impress

 

Böngészöprogramok

Internet Explorer, Netscape Navigator, Opera

 

Levelezö- és csoportmunka programok

Microsoft Outlook Express, Pegazus Mail

 

Tervezö rendszerek

Microstation, AutoCAD

 

Multimédiás programok

Macromedia Flash, Adobe Premierre

 

Játék- és egyedi célú programok

2D és 3D-s játékok, ügyviteli rendszerprogramok

 

Egyedi célú szoftverek: speciális igényeket kielégítö, konkrét cél édekében készülö, általános célra nem alkalmazható programok tartoznak ide.
A szoftverek fejlesztése nagyon gyors ütemben zajlik, egy éven belül egy verziónak akár több új változata is megjelenhet.Szükség van a szoftverek különféle verzióinak a megkülönböztetésére, ennek megsegítésére bevezették az úgynevezett verziószámok használatát.általában a programok elsö publikus változata az 1.0 verziószámot kapja, majd a különféle továbbfejlesztésektöl kaphat új verziószámot, pl.:1.1, 1.5... stb.
A sorszámozásra nincs általános szabály, a programozók szubjektív módon adják termékeiknek a verziószámot.Ha a szoftveren nagyobb fejlesztéseket hajtanak végre, akkor azt általában az egész számjegy megváltoztatásával jelzik.
A Microsoft 1995-töl kezdödöen bevezette a programok egye verzióinak évszámokkal történö megkülönböztetését.
Pl.: Office irodai programcsomag újabb verziói az Office 95, Office 97, Office 2000
Ezt a jelölési formát késöbb más szotfver cég is átvette.

Programkészítés lépései

 

A "jó" programozó


 

 

Az algoritmus

Az algoritmus szó eredete a koraközépkori arab matematikáig nyúlik vissza. Muhammad Ibn Músza Al-Hvarizmi csillagász, matematikus Kr.e. a IX. században élt a mai Üzbegisztán területén. A De Numero Indorum (A hindu számokról) című könyvén a pontatlan latin fordítás következtében neve Algorithmus-ra változott.

Az algebra szó az arab eredű "al-jabr" szóból származik, mely Muhammad ibn Músza l-Hvárizmi perzsa matematikus Kitab al-Jabr wa-l-Muqabala (ejtsd: "Hisab al-dzsabr walmukabala" ,szó szerint "A rövidítés és törlés tudománya") című, 820-ban írt értekezésének címében található.

http://poskola.fw.hu/algoritmus/images/algorizmi.png

http://poskola.fw.hu/algoritmus/images/ts.png

http://poskola.fw.hu/algoritmus/images/regi.JPG

http://poskola.fw.hu/algoritmus/images/astronomi.png

Muhammad ibn Músza l-Hvárizmi

Abū ʿAbdallāh Muḥammad ibn Mūsā al-Khwārizmī

Persian/Arabic:

أبو عبد الله محمد بن موسى الخوارزمي

Page from a Latin translation, beginning with "Dixit algorizmi"

A stamp issued September 6, 1983 in the Soviet Union, commemorating al-Khwārizmī's (approximate) 1200th birthday.

A page from Al-Khwārizmī's al-Kitāb al-mukhtaṣar fī ḥisāb al-jabr wa-l-muqābala.

The Astronomical Tables of al-Khwārizmī.

Nevének néhány írásmódja.

 

 

Ma az algoritmus szó nem a könyv írójának nevét idézi, hanem így hívnak minden, valamely módon és sorrendben végrehajtandó számolási eljárást a matematikában.

Algoritmizálás

Az algoritmus olyan pontos előírás, amely megmondja, hogy egy adott típushoz tartozó összes feladat (problémaosztály) megoldásához milyen műveleteket kell meghatározott sorrendben elvégezni (vagyis pontosan megmondja, hogy miként kell megoldani a problémát).Kívánalmak:

Az egyes lépésekben elvégezhető műveletek Neumann-elvű számítógépek esetében:

Leírása:

 

 

Algoritmus-leíró eszközök

 

Folyamatábra

A folyamatábra segítségével a program folyamatát részletesen ábrázolni tudjuk.

 

http://poskola.fw.hu/algoritmus/images/folyamatabra1.jpg

Minden folyamatábra egy START szimbólumot tartalmaz. A START a kezdőszimbólum, ebből pontosan egy van minden folyamatábrában.

http://poskola.fw.hu/algoritmus/images/folyamatabra2.jpg

A STOP a folyamatábra záró szimbóluma. Ebből elvileg csak egy van, de többet is lehet használni.

http://poskola.fw.hu/algoritmus/images/folyamatabra3.jpg

Az értékadás szimbóluma.

http://poskola.fw.hu/algoritmus/images/folyamatabra4.jpg

Ki: output. A megadott kifejezés eredménye kiíródik a képernyőre.

http://poskola.fw.hu/algoritmus/images/folyamatabra5.jpg

Be: input. A megadott változók értékeit a program sorban bekéri a billentyűzetről.

http://poskola.fw.hu/algoritmus/images/folyamatabra6.jpg

Feltételes elágazás. Ha a megadott feltétel igaz, akkor az IGAZ ágon kell továbbhaladni. Ha a feltétel hamis, akkor a HAMIS ágon. Mindig két ág van. A rombusz belsejébe egy egyértelműen eldönthető logikai kifejezést kell írni.

http://poskola.fw.hu/algoritmus/images/folyamatabra7.jpg

Számlálós ciklus. A ciklusváltozó (i) felveszi a kezdőértéket, amennyiben ez kisebb vagy egyenlő, mint a végérték, az ismétlés ágon kell haladni. Mielőtt visszatérnénk a szimbólumba, a ciklusváltozó értéke automatikusan 1-gyel nő. Az ismétlés ágon kell elhelyezni a ciklusmag utasításait. Amennyiben a ciklusváltozó értéke meghaladja a végértéket, a ciklus futása befejeződik, és a másik ágon folytatódik a program végrehajtása.

http://poskola.fw.hu/algoritmus/images/folyamatabra9.jpg

Nem csatlakozó folyamatok (nem szimbólum)

http://poskola.fw.hu/algoritmus/images/folyamatabra8.jpg

Folyamatok csatlakozási pontja (nem szimbólum)

http://poskola.fw.hu/algoritmus/images/folyamatabra10.jpg

Algoritmus megszakítása egy ponton

http://poskola.fw.hu/algoritmus/images/folyamatabra11.jpg

Algoritmus folytatása egy ponttól

Struktogram

Dobozolós módszer. Csak strukturált algoritmusok írhatók le segítségével. Hátrány, hogy előre kell dönteni a téglalap méretéről.

http://poskola.fw.hu/algoritmus/images/struktogram1.jpg

Az értékadás szimbóluma.

http://poskola.fw.hu/algoritmus/images/struktogram2.jpg

Input. A megadott változók értékeit a gép sorban bekéri a billentyűzetről.

http://poskola.fw.hu/algoritmus/images/struktogram3.jpg

Output. A megadott kifejezés eredménye kiíródik a képernyőre.

http://poskola.fw.hu/algoritmus/images/struktogram4.jpg

Feltételes elágazás. A megadott feltétel igaz értéke esetén a jobb oldali rész-blokkba zárt utasításblokk hajtódik végre. "Nem" esetén a bal oldali blokk utasításai hajtódnak végre. Az Igen és a Nem ágak felcserélhetők, ezért mindig jelölni kell, melyik melyik.

http://poskola.fw.hu/algoritmus/images/struktogram5.jpg

Számlálós ciklus.

http://poskola.fw.hu/algoritmus/images/struktogram6.jpg

Előltesztelős ciklus. Amíg a feltétel igaz, addig hajtja végre a ciklusmagot.

http://poskola.fw.hu/algoritmus/images/struktogram7.jpg

Hátultesztelős ciklus.

Leíró nyelv

Nincsenek szigorúan kötött szabályok, mivel nem egységes a kódrendszere. Nyelvi eszközökkel, mondatszerűen írjuk le a program-szerkezetet. Deklarációnál felsoroljuk, melyik változó, milyen típusú.

ALGORITMUS KEZD

AKEZD

...

...

ALGORITMUS VÉGE

AVÉGE

Értékadás

v:=érték

Kiíratás

ki: kifejezés

Beolvasás

be: változólista

Elágazás

HA feltétel AKKOR ... HVÉGE

Számlálós ciklus

CIKLUS cv:=ké-től vé-ig ... CVÉGE

Előltesztelős ciklus

CIKLUS AMÍG feltétel ...

CVÉGE

Hátultesztelős ciklus

CIKLUS ...

AMÍG feltétel

 


 

 

Legfontosabb fogalmak:

folyamatábra, értékadás, input, output, számlálós ciklus, ciklusváltozó, struktogram, előltesztelős ciklus, hátultesztelős ciklus, leíró nyelv

Kérdések, feladatok:

Hasonlítsd össze a folyamatábra és a struktogram elemeit!

Melyik az a folyamatábra-szimbólum, amely csak egyszer fordul elő az ábrán?

Hogyan ábrázoljuk a ciklusokat folyamatábrával?

Hogyan működik a számlálós ciklus?

Mi a különbség az elől- és a hátultesztelős ciklusok között?

Struktogram esetén miből tudjuk, hogy értékadásról van szó?

Hogyan írjuk le leíró nyelvvel a feltételes elágazást?

Gyakorlati feladatok:

Feladat1: Egy osztályban 27 tanuló érettségizett. Olvassuk be a tanulók egyéni átlagát! Számítsuk ki úgy az osztályátlagot, hogy az 1,5-nél gyengébben teljesítőket kihagyjuk!
Megoldás folyamatábrával!

 

Feladat 2: Tetszőleges egyismeretlenes egyenlet megoldása: AX+B=0

Megoldás folyamatábrával!

DEKLARÁCIÓK
A,B,X: Valós
KEZD
  BE: A,B
  HA A=0 AKKOR
    KI: ’Hibás bemenő A’
  KÜLÖNBEN
    KI: ’X=’,-B/A
VÉGE.

 

Feladat 3: Két elem cseréje:

DEKLARÁCIÓK:
A,B,C: Típus
KEZD
  BE: A,B
  C:=A
  A:=B
  B:=C
VÉGE.

Feladat 4: Két szám legnagyobb közös osztója

Megoldás folyamatábrával!

A nagyobbik számot csökkenteni kell a kisebbikkel, és a kapott értékre át kell írni. Ezt addig kell folytatni, amíg egyenlő számot nem kapunk. Ez az érték a két szám legnagyobb közös osztója.

Pl.
27/21
27        21
6          21
6          15
6          9
6          3
3          3


DEKLARÁCIÓK
  A,B: Egész
KEZD
  BE: A,B
  HA (A<=0) OR (B<=0) AKKOR
    KI: ’Hibás bemenő adatok!’
  KÜLÖNBEN
    CIKLUS amíg A<>B
      HA A>B AKKOR
        A:=A-B
      KÜLÖNBEN
        B:=B-A
    CVÉGE
    KI: ’A közös nevezőjük:’, A
  HAVÉGE
VÉGE.

Feladat 5. Másodfokú egyenlet megoldása

Megoldás folyamatábrával!

Önálló feladatok : A megoldás folyamatábrával, struktogrammal és leírónyelven is elkészítendő.

1.     Adott A[n,m] matrix. keressük meg a mátrixnak azr az elemét, amelyik a legtöbb sorban előfordul.

2.     Készíts programot a háromszög területének kiszámítására, ha adott

o    a három oldal

o    két oldal és egy szög

o    egy oldal és két szög

3.     Határozd meg egy természetes szám osztóinak összegét.

4.     Egy bankszámlára egymás után érkeznek a befizetések előre nem tudjuk hány). Állapítsuk meg, honnan jött a legnagyobb befizetés. Mekkora volt az átlagos befizetés?

 

A programkészítés elvei

 

Egy számítógép által érthető nyelven írt algoritmust programnak nevezünk

Algoritmus tervezése:

Az algoritmus tervezésének alapja a dekompozíció, a feladatot részekre kell bontani, a részeket meg kell oldani, majd a megoldott részeket kell összeállítani, hogy együtt működhessenek. 
A részekre bontásnál két irányzatot különböztetünk meg:

A felülről lefelé való programtervezés irányelvei:

Az alulról felfelé tervezés lényege:

 

Objektumorientált szemléletmód 1

Objektumorientált szemléletmód 2

Objektumorientált szemléletmóddal kapcsolatos fogalmak

Az öröklődés: Az utód osztályban csak az ős osztálytól való eltéréseket kell megadni!

Ős osztály

Résztvevő

Név, születési dátum

Dolgozik, tanul

Utód osztály

Tanár

Tanuló

Tantárgy, beosztás

Évfolyam, szak

dolgozik

tanul

 

 

Adatok jellemzői

 

Adat: A számítástechnikában adatnak (angol nyelven data) nevezzük a számokkal leírható dolgokat, melyek számítástechnikai eszközökkel rögzíthetők, feldolgozhatóak, és megjeleníthetők. Az adat nagyon tág fogalom: gyakorlatilag bármilyen jel potenciálisan adatnak tekinthető (Wikipédia)

Példák számítógéppel kezelt adattípusokra: Szövegek, számok, mérési adatok, álló és mozgóképek, hangok, stb.

 

Minden program utasításai adatokon dolgoznak, ezért ismeretük alapvető fontosságú!

Minden adattípusnál meg kell nézni, hogy milyen értékeket képes tárolni, hogyan ábrázolja a számítógép, és végül milyen műveleteket végezhetünk velük.

 

Adattípusok: (Csak a leggyakoribbak!.)

Egyszerű (elemi)

Összetett

Egész

Tömb

Karakter

Rekord

String

Láncolt lista

Logikai

Bináris fa

Valós

Objektum

 

Mutató

 

 

 

 

 

 

Egyszerű adattípusok : Az egyszerű adattípusok esetén a tárolt adat tovább nem bontható részekre.Ilyen a szám, logikai, karakter adatok

pl.: 129; -32; 12.765865; @; a; A; b; B; c; C.....stb.

Összetett adattípusok: Összetett adattípus esetén több adat tárolását feltételezzük. Ilyen a rekord, a tömb, a sor, a verem, a lista, sztring, stb.

pl.:
TETSZŐLEGES SZÖVEG(string): "Over The Rainbow"; 
EGY POLGÁR ADATAI(Record): Okos Pista, 2001,02,15, Szolnok, magyar;
HETI LOTTÓSZÁMOK(Tömb): 23,34,65,36,67

 

Elemi (egyszerű) adattípusok

1. Logikai (boolean) típus

 

felvehető értékek

ábrázolás

false (hamis)

0

true  (igaz)

nem 0, legtöbbször 1

 

műveletek

asm

C/C++, Java

tagadás (negálás, invertálás) 

not

!

és

and

&&

vagy

or

||

kizáró vagy

xor

^

2. Numerikus (számok) típusok

2.1 Egész, (fixpontos,) integer típus

Ábrázolása kettes számrendszerben történik. Egy kettes számrendszerbeli számjegy - egy bit. 
Az ábrázolható számtartomány attól függ, hogy hány biten (n) történik a tárolás:

 

ábrázolható számtartomány

előjel nélküli

0 .. 2n-1

előjeles

-2n-1 .. 2n-1-1

Például egy n=16 bites előjeles egész esetében ez -215..215-1, vagyis -32768..32785. 
A mai gépek általában 8, 16, 32, 64 biten tárolják az egész számokat.

 

Műveletek egész számokkal

műveleti jel

megjegyzés

negálás

-

összeadás, kivonás, szorzás

+ - *

(egész) osztás

/

7/2=3

maradék (modulus) képzés

%

7%2=1

növelés (inkrementálás),  
csökkentés (dekrementálás)

++  
--

x++ jelentése: x = x + 1 
x-- jelentése: x = x - 1

 

 Bitműveletek

műveleti jel

tagadás (negálás, invertálás)

not

~

és

and

&

vagy

or

|

kizáró vagy

xor

^

shift (eltolás) balra

shl

<< 

shift (eltolás) jobbra

shr

>> 

2.2 Valós (lebegőpontos) típus

 

neve

egyszeres pontosságú

float

dupla pontosságú

double

Gépi ábrázolása normál alakban:  Például:  0.00123 = 0.123 * 10-2  (megadása 0.123e-2)

 Műveletek: +  -  *  / 
Összehasonlítás: a kerekítések és az ábrázolási pontatlanságok miatt használjuk az |a - b| < epsilon formulát!

3. Alfabetikus (betű alapú) típusok

3.1 CHAR (karakter típus)

Ábrázolás (méret): 
ASCII kódtábla szerint 1 bájton 0-255 kódú jelek.
UNICODE-16 szerint 2 bájt
UNICODE-32 szerint 4 bájt
UNICODE-64 szerint 8 bájt
Intervallum: ASCII 0-255 kódú jelek. Tartalmazzák az angol ábc kis és nagybetűit, néhány ékezetes betűt (pl nem az Ő,Ű betűket). A tartalmazott betűket sem abc sorrendben, mert külön tartományt képez a kis és a nagybetűk. Ezen kívül tartalmazzák az írásjeleket, és néhány speciális karaktert. (
http://hu.wikipedia.org/wiki/ASCII címen meg lehet nézni az egyes karaktereket)
Műveletek: nincs karakterspecifikus művelet. 
Relációs műveletek: vannak, (kód alapján) de ez nem logikus csak egy résztartományon belül. (pl. A<B<a)

 

3.2 String (szöveg) típus

Ábrázolása: karaktertömb/karakterfüzér.

Stringkonstans: dupla aposztrófok között: "Ez itt egy sor\n"

Adatainkat tárolási helyei a számítógépben: RAM vagy valamilyen háttértár

Tárolás módja a RAM - ban:

1.     Változó: Megcímzett memória terület. Tároló ahol az adatainkat tároljuk.

2.     Konstans: azonosítóval rendelkező állandó adat. pl.: PI

Tárolás módja háttértáron: Fájlként. pl: level.txt; nevsor.mdb; fizetés.xls...

"A változók a memóriában tárolódnak, vagyis minden azonosítóhoz hozzárendeljük a 
memória egy szeletét, melyet a rendszer lefoglalva tart a változó teljes életciklusa alatt. 
(Néhány változó típus esetén, mint a pointerek, valamivel bonyolultabb a helyzet, de a .NET 
rendszerben nem kell törıdnünk a memória kezelésével, mivel a .NET felügyeli, lefoglalja és 
felszabadítja a memóriát.)" (Hernyák)

Tankönyvből megtanulandó fogalmak: változó deklaráció,definíció; lokális, globális változó, kezdőérték, privát, publikus változó


 C# elemi adattípusok

Egyszerű adattípusok :

C# adattípus

.NET

Mérete(byte)

Legkisebb érték

Legnagyobb érték

sbyte

System.Sbyte

1

-128

127

byte

System.Byte

1

0

255

short

System.Int16

2

-32 768

32 767

ushort

System.UInt16

2

0

65 535

int

System.Int32

4

-2 147 483 648

2 147 483 647

uint

System.UInt32

4

0

4 294 967 295

long

System.Int64

8

-9 223 372 036 854 775 808

9 223 372 036 854 775 807

ulong

System.UInt64

8

0

18 446 744 073 709 551 615

char

System.Char

2

0

65 535

float

System.Single

4

1,5*10-45

3,4*1038

double

System.Double

8

5,0*10-324

1,7*10308

bool

System.Boolean

1

false (0)

true (1)

decimal

System.Decimal

16

1,0*10-28

kb. 7,9*1028

 


 

 

Műveletek adatokkal

 

Operátorok

Amikor programozunk, utasításokat adunk a számítógépnek. Ezek az utasítások kifejezésekből állnak, a kifejezések pedig operátorokból és operandusokból, illetve ezek kombinációjából jönnek létre. Az operandus általában az adat, az operátor pedig a műveleti jel.

Utasítás = kifejezések valamint adatok és operátorok kombinációja

pl.: 
Ez egy utasítás: Console.WriteLine("Az eredmény : "+ (bekertszam1/5) );//a processzor végre tudja hajtani!!
Ez egy kifejezés: (bekertszam1/5)
Ez egy operátor; "+"
 
Ez egy operandus : bekertszam1
 
Ez egy adat: 5

Precedencia

Precedencia = Műveleti sorrend.

A C# nyelv precedencia szerint 14 kategóriába sorolja az operátorokat (a kisebb sorszámút fogja a fordító hamarabb kiértékelni):
1. Zárójel, metódushívás
2. Pozitív és negatív operátorok (x = -5), logika- és bináris tagadás, postfix, prefix inkrementáló és dekrementáló operátorok, explicit típuskonverzió
3. Szorzás, maradékos és maradék nélküli osztás
4. Összeadás, kivonás
5. Bit-eltoló (>> és <<) operátorok
6. Kisebb (vagy egyenlő), nagyobb (vagy egyenlő), as, is
7. Egyenlő és nem egyenlő operátorok
8. Logikai ÉS
9. Logikai XOR
10. Logikai VAGY
11. Feltételes ÉS
12. Feltételes VAGY
13. Feltételes operátor ( ? : )
14. Értékadó operátor, illetve a “rövid formában” használt operátorok (pl: x +=y)

pl.:

2+3*5 = 17
(2+3)*5 = 25

Asszociativitas: (balról-jobbra)

4 / 2 * 6 = 12

EGYSZERŰ ADATTÍPUSOK JELLEMZŐ MŰVELETEI:

Logikai: NOT, AND, OR, XOR

Valós: +, -, *, /, =, <, >, <>, <=, >=

Egész: +, -, *, =, <, >, <>, <=, >=, / – az eredményt a gép kerekíti, % (maradékos osztás maradéka – pl. 5%2=1, 4%2=0)

String: + (összekapcsolás), <> (a két string nem egyenlő), a betűk ABC sorrendje szerint: <, >, <=, >=

Karakter: a betűk ABC sorrendje szerint: <, >, <>, <=, >=

 

 

Típuskonverzió: Adatok átalakítása ( például karaktert számmá)
A felhasználói input kezelésére lehetőséget biztosítanak a Console.Read() ,és a Console.ReadLine()metódusok.
Mindkettő esetében adatokat olvasunk be a billentyőzetről, s ha kiegészítjük a két metódust a Convert osztály konverziós függvényeivel, nemcsak string típusú adatokat, hanem szám típusú, vagy logikai értékeket is beolvashatunk a felhasználótól.

Néhány konverziós függvény a Convert osztályból: 

Convert.ToInt16( );
Convert.ToInt32( );
 
Convert.ToByte( );
Convert.ToString( );
 
Convert.ToDateTime( );
stb.

Mi történik az alábbi minta programban?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace konverzio
{
class Program
{
static void Main(string[] args)
{
Console .WriteLine ("Kérem az átalakítandó számot: ");
string strSzam = Console.ReadLine();
Console.WriteLine(Convert.ToString(Convert.ToInt32(strSzam, 10), 2));
Console.WriteLine("Kérem a megjelenítendő karakter ASCII kódját: ");
int iSzam = Convert.ToInt16(Console.ReadLine());
Console.WriteLine(Convert.ToChar(iSzam));
for (int i = 0; i < 256; i++)
{
Console.Write("\t"+i+"\t"+ Convert.ToChar(i)+"\n");
}
Console.ReadKey(); } } }

 

Adattípusok (4)

Összetett adattípusok: karakterlánc (string) adattípus felépítése, ábrázolása, helyfoglalása, felhasználása.

 

Sztring: Karakterlánc, másképpen szöveg.

A sztring kezelésének lényege, hogy a szöveg karaktereit sorban, sorszám szerint elérhetően tároljuk.

Például: 
string strSzoveg = "Kelkáposzta";//tároljuk a "Kelkáposzta" szót
Az egyes karakterek számozása 0-val kezdődik, tehát a "K" a 0., az "e" az 1., ....
 
Így, a
 
Console.Writeline(strSzoveg[2])
Kifejezés az "l" betűt adja.

A sztringek kezelésére sok függvény áll rendelkezésre, lekédezhetjük a hosszát, karakter, szövegrészletet kereshetünk benne, cserélhetünk sztring részleteket, stb. A mellékelt példákban a legfontosabb függvények előfordulnak.

Otthoni feladatok:

1.     Kérj be tetszőleges szöveget, majd írasd ki a hosszát.

2.     Kérj be tetszőleges szöveget, majd mindek karakterét cseréld nagybetűsre.

3.     Kérj be tetszőleges szöveget, majd írasd ki visszafelé.

 

példák:

1.,
static void Main(string[] args)
{
string strSzoveg = "Kelkáposzta";
string strSzoveg2;
Console.WriteLine("Karaktercsere, k--X");
Console.WriteLine(strSzoveg);
strSzoveg2=strSzoveg. Replace("k", "X");
Console.Write(strSzoveg2);
Console.WriteLine("\n****************");
Console.WriteLine("Karakter törlés adott helyről, 3-tól 2 db karakter");
Console.WriteLine(strSzoveg);
strSzoveg2 = strSzoveg.Remove(3, 2);
Console.Write(strSzoveg2);
Console.WriteLine("\n****************");
Console.ReadKey();
}

2.,

static void Main(string[] args)
{
string strSzoveg = "123456789";
string strSzoveg2 = "12344456789";
Console.WriteLine(strSzoveg);
for (int i = 1; i < strSzoveg .Length ;i++ )//string mint vektor
Console.Write(strSzoveg[i]);
Console.WriteLine();
int iEredmeny = strSzoveg.CompareTo(strSzoveg2);//Összehasonlítás
Console.WriteLine(iEredmeny);
Console.Write("Adj meg egy rövid szöveget, amit beszúrok egy stringbe!: ");
string strBeszur = Console.ReadLine();
strSzoveg =strSzoveg .Insert (1,strBeszur );//beszúrás
Console.WriteLine(strSzoveg);
Console.WriteLine("Most szöveget keresünk szövegben!");
string strSzovega = "Boci Boci Tarka, Se Füle se Farka, oda megyünk lakni, ahol tejet kapni!";
string strSzovegb;
Console.Write("Kérem a keresendő szövegrészletet!");//keresés szövegben
strSzovegb= (Console .ReadLine ());
strSzovega = strSzovega.ToUpper();
Console.Write(strSzovega);
strSzovegb = strSzovegb.ToUpper();
if (strSzovega .IndexOf (strSzovegb )>-1)
Console .WriteLine ("Ez benne van!!!!");
else
Console .WriteLine ("Nincs ilyen részlete a szövegnek");
Console.WriteLine("Trimmeljük a szöveget, elejéről és a végéről is levágunk szövegrészletet!");
char chrElso = Convert.ToChar(strSzovega[0]);
Console .WriteLine (strSzovega .TrimStart (chrElso ));

Console.Write("Karakter keresése!");
char[] keres = new[] {'B'};
int iDarab = strSzovega.IndexOfAny(keres);
Console.WriteLine(iDarab);
Console.ReadKey();
}

3.,

static void Main(string[] args)
{
/*Kérj be 2 sztringet, állapítsd meg,
 
* hogy része-e a második az elsőnek,
 
* s ha igen, hanyadik pozíción kezdődik benne!
 
*/
Console.WriteLine("Kérem az első stringet!");
string strSzoveg1=Console .ReadLine ();
string strSzöveg1Upper = strSzoveg1.ToUpper();
strSzöveg1Upper = strSzöveg1Upper.Replace(" ", "");
Console.WriteLine("Kérem a második stringet!");
string strSzoveg2 = Console.ReadLine();
string strSzöveg2Upper = strSzoveg2.ToUpper();
strSzöveg2Upper = strSzöveg2Upper.Replace(" ", "");
if (strSzöveg1Upper.IndexOf(strSzöveg2Upper) > -1)
Console.WriteLine("Szerepel benne");
else
Console.WriteLine("Nem szerepel benne!");
Console.ReadKey();
}

 

Adattípusok (4)

Összetett adattípusok: karakterlánc (string) adattípus felépítése, ábrázolása, helyfoglalása, felhasználása.

 

Sztring: Karakterlánc, másképpen szöveg.

A sztring kezelésének lényege, hogy a szöveg karaktereit sorban, sorszám szerint elérhetően tároljuk.

Például: 
string strSzoveg = "Kelkáposzta";//tároljuk a "Kelkáposzta" szót
Az egyes karakterek számozása 0-val kezdődik, tehát a "K" a 0., az "e" az 1., ....
 
Így, a
 
Console.Writeline(strSzoveg[2])
Kifejezés az "l" betűt adja.

A sztringek kezelésére sok függvény áll rendelkezésre, lekédezhetjük a hosszát, karakter, szövegrészletet kereshetünk benne, cserélhetünk sztring részleteket, stb. A mellékelt példákban a legfontosabb függvények előfordulnak.

Otthoni feladatok:

1.     Kérj be tetszőleges szöveget, majd írasd ki a hosszát.

2.     Kérj be tetszőleges szöveget, majd mindek karakterét cseréld nagybetűsre.

3.     Kérj be tetszőleges szöveget, majd írasd ki visszafelé.

 

példák:

1.,
static void Main(string[] args)
{
string strSzoveg = "Kelkáposzta";
string strSzoveg2;
Console.WriteLine("Karaktercsere, k--X");
Console.WriteLine(strSzoveg);
strSzoveg2=strSzoveg. Replace("k", "X");
Console.Write(strSzoveg2);
Console.WriteLine("\n****************");
Console.WriteLine("Karakter törlés adott helyről, 3-tól 2 db karakter");
Console.WriteLine(strSzoveg);
strSzoveg2 = strSzoveg.Remove(3, 2);
Console.Write(strSzoveg2);
Console.WriteLine("\n****************");
Console.ReadKey();
}

2.,

static void Main(string[] args)
{
string strSzoveg = "123456789";
string strSzoveg2 = "12344456789";
Console.WriteLine(strSzoveg);
for (int i = 1; i < strSzoveg .Length ;i++ )//string mint vektor
Console.Write(strSzoveg[i]);
Console.WriteLine();
int iEredmeny = strSzoveg.CompareTo(strSzoveg2);//Összehasonlítás
Console.WriteLine(iEredmeny);
Console.Write("Adj meg egy rövid szöveget, amit beszúrok egy stringbe!: ");
string strBeszur = Console.ReadLine();
strSzoveg =strSzoveg .Insert (1,strBeszur );//beszúrás
Console.WriteLine(strSzoveg);
Console.WriteLine("Most szöveget keresünk szövegben!");
string strSzovega = "Boci Boci Tarka, Se Füle se Farka, oda megyünk lakni, ahol tejet kapni!";
string strSzovegb;
Console.Write("Kérem a keresendő szövegrészletet!");//keresés szövegben
strSzovegb= (Console .ReadLine ());
strSzovega = strSzovega.ToUpper();
Console.Write(strSzovega);
strSzovegb = strSzovegb.ToUpper();
if (strSzovega .IndexOf (strSzovegb )>-1)
Console .WriteLine ("Ez benne van!!!!");
else
Console .WriteLine ("Nincs ilyen részlete a szövegnek");
Console.WriteLine("Trimmeljük a szöveget, elejéről és a végéről is levágunk szövegrészletet!");
char chrElso = Convert.ToChar(strSzovega[0]);
Console .WriteLine (strSzovega .TrimStart (chrElso ));

Console.Write("Karakter keresése!");
char[] keres = new[] {'B'};
int iDarab = strSzovega.IndexOfAny(keres);
Console.WriteLine(iDarab);
Console.ReadKey();
}

3.,

static void Main(string[] args)
{
/*Kérj be 2 sztringet, állapítsd meg,
 
* hogy része-e a második az elsőnek,
 
* s ha igen, hanyadik pozíción kezdődik benne!
 
*/
Console.WriteLine("Kérem az első stringet!");
string strSzoveg1=Console .ReadLine ();
string strSzöveg1Upper = strSzoveg1.ToUpper();
strSzöveg1Upper = strSzöveg1Upper.Replace(" ", "");
Console.WriteLine("Kérem a második stringet!");
string strSzoveg2 = Console.ReadLine();
string strSzöveg2Upper = strSzoveg2.ToUpper();
strSzöveg2Upper = strSzöveg2Upper.Replace(" ", "");
if (strSzöveg1Upper.IndexOf(strSzöveg2Upper) > -1)
Console.WriteLine("Szerepel benne");
else
Console.WriteLine("Nem szerepel benne!");
Console.ReadKey();
}

 

Program elemei

Változó: Megcímzett, névvel ellátott memóriaterület a számítógép RAM-jában. 
Konstans: Állandó, nem változtatható érték.
Azonosító: Olyan jelsorozat, amellyel a változó tartalmára hivatkozhatunk és megváltoztathatjuk azt.
Értékadás: Az a művelet, melynek során a változó értéke megváltozik. Jele C#: „ = ” – egyenlő.
Kezdőérték: A változó és a konstans induló értéke
Deklaráció: Az algoritmus azon pontja, ahol a változót először elhelyezzük (típust adunk neki).
Definiálás, inícializálás
 : Értékadó művelet.
Kifejezés:
Műveletek:

Változók: (Változók a C# nyelvben)

Fogalma: A változók olyan névvel ellátott memóriaterületek, amelyekben típustól függő értékeket tárolhatunk. Ezt a memóriaterületet számunkra a fordító (compiler) foglalja le, amelyre a program törzsében a változó azonosítójával hivatkozhatunk.
Minden változót, használat előtt deklarálni kell.

Jellemzői:

1.     Neve (azonosítója): Csak betűvel (az angol ABC szerint) és aláhúzásjellel kezdődhet, és betűvel, számmal vagy aláhúzásjellel folytatódhat. Hossza legalább 1 karakter. Kis- és nagybetű általában nem különböző (a C-ben igen).

2.     Típusa:

o    Logikai, szám (egész, valós), szöveg, karakter, stb.

o    Azonos típusok összehasonlíthatóak egymással.

o    A típus meghatározza, hogy milyen műveletek végezhetők vele.

o    Meghatározza a méretét (memóriában)

3.     Értéke: Egy a megadott típusban elhelyezkedő elem. Pl.

o    logikai (TRUE és FALSE lehet, hossza: 1 bit)

o    egész (-végtelen és +végtelen közötti egész szám)

o    valós (-végtelen és +végtelen közötti tört vagy egész szám),

o    string (’SzöVeG’ – maximum 255 karakter hosszúságú szöveg lehet, de lehet akár 1, akár 0 karakter hosszúságú is – a C-ben nincs valódi string, így nem csak 255 karakternyi, hanem bármilyen hosszúságú szöveget egy „0” karakter zárja),

o    karakter (’X’ – lehet speciális jel, számjegy, betű vagy üres karakter)

4.     Értelmezett műveletek

Típusok:

Kifejezés:

Változók literálok, műveleti jelek kombinációja.

pl.: int iSzam= iBe + 10;

literál: konkrét érték (pl.: 2, "s", true)

 

 

Ciklus (iteráció)

 

Fogalma: Utasítás(ok) többszöri végrehajtása.

Típusai:

Elöltesztelő(WHILE) ciklus:

Ha a feltétel nem teljesül akkor egyszer sem hajtódik végre a ciklusmag.

http://poskola.fw.hu/algoritmus/pages/vezszerk/ciklus/elol_1.png

Például: Olvassunk be számokat és írassuk ki a négyzetgyöküket mindaddig, amíg negatív számot nem adunk meg.

http://poskola.fw.hu/algoritmus/pages/vezszerk/ciklus/whilwpld.png

 

Növekményes, elöltesztelő, előírt lépésszámú (FOR) ciklus

http://poskola.fw.hu/algoritmus/pages/vezszerk/ciklus/for_1.png

Hátultesztelő ciklus(Repeat)

http://poskola.fw.hu/algoritmus/pages/vezszerk/ciklus/hatul1.png

Gyakorló feladatok:

1.     Írassuk ki 1 - től 20 ig a számokat és négyzetüket!

2.     Írassuk ki 99-től csökkenő sorrendben az összes pozitív, 3-mal osztható egész számot!

3.     Írassuk ki az első tíz, hárommal osztható szám felét!

4.     Írassuk ki 101-től 50 ig csökkenő sorrendben az öttel osztható számok kétszeresét!

5.     Írjuk ki az első n páratlan szám négyzetét!

6.     Határozzuk meg az elsőN természetes szám összegét!

7.     Határozzuk meg az első N természetes szám szorzatát(N faftoriális)!

8.     Írjuk ki az első N négyzetszám átlagát!

9.     Számítsa ki a gép 10 tetszőleges szám összegét, szorzatát, és átlagát!

10. Írjuk ki az N-nél nem nagyobb páratlan számok összegét!

11. Készítsünk N-es szorzótáblát(1*N=, 2*N=, ...)!

12. Készítsen a gép számtani sorozatot (adott az első elem, a differencia és az elemszám)!

13. Oldjuk meg az előző feladatot mértani sorozattal!

14. Tegyünk X forintot évi P%-os kamatra bankba. Írassuk ki hogyan alakul a megtakarítás az évek folyamán!

15. Egy beolvasott számról döntsük el, hogy -30 és 40 között van-e?

 

Szelekció

Típusai: Egyszerű, Összetett, Többszörös

Egyszerű

HA feltétel AKKOR utasítás VÉGE;

http://poskola.fw.hu/algoritmus/pages/vezszerk/szelekcio/szelekcio1.jpg

Összetett

HA feltétel AKKOR utasítás_1 KÜL ÖNBEN utasítás_2 VÉGE;

http://poskola.fw.hu/algoritmus/pages/vezszerk/szelekcio/szelekcio2.png

Többszörös

ELÁGAZÁS

MIKOR feltétel_1: utasítás_1;

MIKOR feltétel_2: utasítás_2;

MIKOR feltétel_3: utasítás_3;

VÉGE;

http://poskola.fw.hu/algoritmus/pages/vezszerk/szelekcio/szelekcio3.png

Gyakorló feladatok, példák: