Vous êtes sur la page 1sur 55

A projekt az Eurpai Uni tmogatsval,

az Eurpai Szocilis Alap


trsfinanszrozsval valsult meg.
A TISZK rendSZer TovbbfejleSZTSe
PeTrIK TISZK
TMOP-2.2.3-07/1-2F-2008-0011
SzAkmAcSoportoS AlApoz gyAkorlAtok
informAtikA tErlEtrE
Bevezets a Visual c# 2008
hasznlatba
11. vfolyam
tAnUli JEgyzEt
BEVEZETS A VISUAL C# 2008
HASZNLATBA
INformATIkAI gyAkorLATok
11. VfoLyAm
tanuli jegyzet
SZAKMACSOPORTOS ALAPOZ GYAKORLATOK INFORMATIKA TERLETRE INFORMATIKAI GYAKORLATOK
TmoP-2.2.3-07/1-2f-2008-0011
a kiadvny a tMOP-2.2.3-07/1-2F-2008-0011 azonost szm projekt keretben jelenik meg.
Szerz: Cziglczky Gbor
Lektor: Madarsz Pter
Bort s tipogrfa: j Magyarorszg Fejlesztsi Terv Arculati kziknyv alapjn
A m egsze vagy annak rszletei az zletszer felhasznls eseteit ide nem rtve oktatsi s tudomnyos clra korltozs nlkl,
szabadon felhasznlhatk.
A tananyagfejleszts mdszertani irnytsa: Observans Kft. Budapest, 2009.
Igazgat: Bertalan Tams
Trdels: Kirly s Trsai Kkt. Cgvezet: Kirly Ildik
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 3
TarTalomjegyzk
Bevezets ............................................................................................................................................................................. 5
A VISuAL C# ExPRESS 2008 BESZERZSE, TELEPTSE, FELFEdEZSE ................................................................ 7
A Visual C# 2008 krnyezet letltse, teleptse ................................................................................................................ 7
A Visual C# 2008 krnyezet megismerse, testre szabsa ................................................................................................. 9
A Sg hasznlata .............................................................................................................................................................. 12
WIndOWS FORMS ALKALMAZS KSZTSE ............................................................................................................ 13
Windows Forms alkalmazs ksztse .............................................................................................................................. 13
AdATOK BEOLVASSA S KIRSA, ALAPVET AdATTPuSOK, TPuSKOnVERZIK,
MATEMATIKAI S LOGIKAI MVELETEK ................................................................................................................... 18
Kr kerletnek s terletnek kiszmtsa ...................................................................................................................... 18
Logikai mveletek .............................................................................................................................................................. 19
A ListBox hasznlata ......................................................................................................................................................... 20
Feladatok ............................................................................................................................................................................ 21
VEZRLSI SZERKEZETEK: ELGAZSOK, CIKLuSOK ........................................................................................... 23
elgazsok ......................................................................................................................................................................... 23
Ciklusok ............................................................................................................................................................................. 26
Feladatok ............................................................................................................................................................................ 29
SSZETETT AdATTPuSOK: REKORd, TMB, FELTLTS SZVEGFjLBL ..................................................... 30
Beolvass szvegfjlbl, kirs szvegfjlba ..................................................................................................................... 30
Struktra s rekord egytt ................................................................................................................................................. 33
Feladatok ............................................................................................................................................................................ 34
ALAPVET PROGRAMOZSI TTELEK MEGVALSTSA ...................................................................................... 35
Programozsi ttelek megvalstsa .................................................................................................................................. 35
sszegzs ttele ................................................................................................................................................................. 36
Megszmlls ttele ........................................................................................................................................................... 36
Minimum- s maximumkivlaszts ttele ........................................................................................................................ 37
lineris keress .................................................................................................................................................................. 37
Programozsi ttelek Struktra tpus adatokra ............................................................................................................... 39
Feladatok ............................................................................................................................................................................ 40
HIBK, HIBAZEnETEK S KEZELSK ...................................................................................................................... 42
Szintaktikai hibk javtsa ................................................................................................................................................. 42
Szemantikai hibk javtsa ................................................................................................................................................ 43
sszetett feladat ................................................................................................................................................................. 44
Feladatok ............................................................................................................................................................................ 44
KIVTELEK KEZELSE, ELLEnRZTT AdATBEVITEL .......................................................................................... 45
Kivtelek kezelse fjlkezels sorn .................................................................................................................................. 45
Ellenrztt adatbevitel kivtelkezelssel ........................................................................................................................... 48
4 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
sszetett feladat ................................................................................................................................................................. 49
Feladatok ............................................................................................................................................................................ 49
PROjEKTFELAdAT: PROGRAM KSZTSE ................................................................................................................... 50
A feladatok kzs rsze ..................................................................................................................................................... 50
Segtsg a feladatok megoldshoz .................................................................................................................................... 50
lottsorsols ...................................................................................................................................................................... 51
Osztlypnz nyilvntartsa ............................................................................................................................................... 52
PROjEKTFELAdAT: PROGRAM BEMuTATSA ............................................................................................................. 53
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 5
BevezeTs
napjainkban a vizulis fejlesztkrnyezetek virgkorukat lik, a programozk jelents rsze integrlt
fejlesztkrnyezetekben (IdE = Integrated development Environment) rja programjait. ppen ezrt
nagyon fontos, hogy mr a kzpiskolban megismerkedjetek legalbb egy ilyen programfejleszt esz-
kzzel.
Ez a tananyag megismertet a Microsoft ingyenesen letlthet s hasznlhat Visual Studio Express
2008 programcsomagjval, azon bell pedig a Visual C# Express 2008-as verzijval. A C# egy rendk-
vl hatkony, arnylag knnyen tanulhat programozsi nyelv, amellyel egyszeren s gyorsan tudunk
Windows alatt fut programokat, vagy akr webes alkalmazsokat is fejleszteni.
Fontos tudni azonban, hogy ezt a tananyagot olyanoknak ajnlom, akik mr programoztak valamely
programozsi nyelven. Az sem jelent htrnyt, ha mr tallkoztl vizulis fejlesztkrnyezettel.
Cl
A Visual C# 2008 kezelfelletnek s alapvet komponenseinek megismerse.
Egyszerbb Windows Forms alkalmazsok fejlesztse.
A C# nyelvi elemeinek megismerse.
Hibajelensgek szlelse, elhrtsuk, bolondbiztos programok ksztse.
A tanult ismeretek alkalmazsa egy kisebb csoportban elksztett projektfeladaton keresztl, az
egyttmkds fejlesztse, a csoportos szoftverfejleszts kiprblsa.
Az elkszlt produktumok rtkelse klnfle szempontok szerint.
kvetelmny
Tudd feltelepteni s hasznlatba venni a Visual C# 2008 krnyezetet.
Tudj megtervezni s elkszteni egy Windows Forms alkalmazst felhasznli felletvel s a
mgtte lev kddal egytt. Ismerd az alapvet komponensek hasznlatt, valamint a C# nyelv
legfontosabb elemeit.
Legyl kpes a programodban a hibkat megtallni, s azokat kijavtani a hibakeres eszkzk
segtsgvel.
Legyl kpes kis csapatban a trsaiddal egyttmkdve megtervezni, majd elkszteni egy
programot, ezt kveten pedig a tbbieknek bemutatni azt.
6 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
jelmagyarzat
A tanuli jegyzetben a tananyag fontos elemeit, a pldkat s a tanulsi tippeket klnbz ikonok jel-
lik.
Ikon jelents
A fejezet clmeghatrozsa. Figyelmesen olvasd el, gy megismered a fejezet fkuszpont-
jait.
Az ikon fontos, jl megjegyzend, megtanuland ismereteket jelez.
Az ikon mellett olyan gondolatbreszt, krdseket, felvetseket, problmkat tallsz,
amelyek megvlaszolsval elmlylhetsz a tmban.
Az ismeretek elsajttst megknnytik a pldk. Az ikon mellett rdekessgeket, pld-
kat, gyakorlati letbl vett esetlersokat tallsz.
Az ikon a hzi feladatot, otthoni munkt jelli.
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 7
A VISUAL C# ExPrESS 2008 BESZErZSE,
TELEPTSE, fELfEdEZSE
Ennek a tmakrnek az a clja, hogy az iskolai vagy az otthoni szmtgpen zembe tudd
helyezni a Microsoft Visual C# 2008-as verzijt, kpes legyl eligazodni a fejleszti kr-
nyezetben, sajt ignyeid szerint testre szabni, s segtsget krni a Sgtl.
a vIsual C# 2008 krnyezeT leTlTse,
TelepTse
A Microsoft Visual C# 2008 weboldala:
http://www.microsoft.com/express/vcsharp/ (2010.01.19.)
A weboldalon az adott programozsi nyelvvel kapcsolatos informcikat a msodlagos
mensorban, mg az ltalnos informcikat a Support menpontban tallod meg.
1.1. Milyen konfgurcij szmtgp szksges a Visual C# 2008 Express futtatshoz?
Keresdmegahardverkvetelmnyeketafentmegadottoldalon!
Tltsd ki a tblzatot!
Windows xP Windows vista / 7
Windows server 2008 /
2008 R2
Processzor (CPu)
.
Memria (RAM)
1.2. Afentitblzatalapjnaziskolai/otthonigpmegfelel-eaC#2008hardver-sszoftver-
kvetelmnyeinek?
Ha nem, rd le, melyik miatt nem felel meg!
igen nem
8 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
1.1.bra.AC#teleptse
1.3. Teleptsd fel a Visual C# 2008-at az iskolai szmtgpre, amennyiben alkalmas a
futtatsra,smgnincsenrajta!Gyjtsdssze,hogyafentlthatkomponensenkvl
mgmittltlesteleptaszmtgpre!
Amennyiben az iskolai gp mr tartalmaz felteleptett C# 2008-at, akkor teleptsd fel az
otthoni gpedre!
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 9
a vIsual C# 2008 krnyezeT megIsmerse, TesTre
szaBsa
1.2.bra.WindowsFormsalkalmazsltrehozsa
1.4. KattintsunkaCreatepontra,shozzunkltreegyjWindowsFormsalkalmazst!Nevezzk
ElsoProgramomnak!Mentskelamerevlemezvalamelyikmappjba!
A projekt (Project) tartalmazza az sszes forrsllomnyt s a hozzjuk tartoz formokat,
ezek alkotjk a lefordtsra vr programunkat. A Solution eggyel magasabb szintet jelent,
tbb projektet is egysgbe foghat, azonban a mi pldinkban mindig csak egyet tartalmaz
majd.
1.5. Akvetkezoldalontallhatbrnnevezdmegakezelfelletlegfontosabbelemeit!
nem biztos, hogy telepts utn a kezelfellet sszes szksges eleme lthat. Amennyi-
ben valami hinyzik, a View menben be tudod kapcsolni!
10 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
1.3.bra.Akezelfelletelemei
1.6. Melyikelemnekmiafeladata?
rd be az res oszlopba a krdses elemhez tartoz feladatlers betjelt!
1. toolbox a)
A Solutionhz tartoz projektek s azok llom-
nyait tartalmaz ablak
2. error list b)
Az objektumok tulajdonsgait s esemnyeit
tartalmaz ablak
3. Form design nzet c)
A Windows alkalmazs fejlesztshez felhasz-
nlhat komponensek gyjtemnye
4. Properties d)
A form grafkai megtervezst megknnyt
ablak
5. Solution Explorer e) Hibk, fgyelmeztetsek, zenetek ablaka
1.7. rdle,hogyantudunkvltaniaFormkinzete(Design)skdjakztt!
A videkban lthattad, hogy mikpp lehet fogd s vidd (drag and drop) mdszerrel trendezni a ke-
zelfellet elemeit.
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 11
1.8. A tanult mdszerrel rendezd t tbbflekppen a kezeli felletet! Az egyes llapotokat
rktsd meg kpernyfelvtellel (Alt + PrintScreen), s ezeket mentsd kln kpfjlokba,
majdaddbeatanrodnak!
1.4.bra.Afellettestreszabsa
1.9. Mirevalakisrajzszgikonazeszkzpalettkjobbfelssarkban?
12 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
a sg hasznlaTa
1.5.bra.ASg
1.10. GyjtsdkiaSgblaC#Express2008legfontosabbjtsaitcmszavakban!(Whatsnew
inVisualC#Express)
1.11. KeressaSgbanpldttmbkdeklarcijra,srjleidelegalbbktpldt!(arrays,
examples)
1.12. ASgSearchfunkcijthasznlvakeressraforeachkulcsszra!rdleapldakdot,
amittallsz!
Az interneten risi mennyisg informcit, mintakdot tallhatsz a Microsoft MSdn
Library weboldaln:
http://msdn.microsoft.com/en-us/library/default.aspx (2010. 01. 19.)
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 13
WINdoWS formS ALkALmAZS kSZTSE
Ennek a tmakrnek az a clja, hogy el tudd kszteni leted (valsznleg) els Windows
Forms alkalmazst. Tudj megtervezni egy felhasznli felletet, a komponenseket ig-
nyesen elhelyezni, igaztani, alapvet tulajdonsgaikat belltani (rszben tervezsi, rsz-
ben futsi idben). Legyl kpes esemnykezel metdusokba kdot rni, a megrt kdot
thelyezni, illetve eltvoltani.
WiNDoWSForMSAlKAlMAzSKSzTSE
2.1. Kszts j Windows Forms alkalmazst a Visual C# 2008-ban! Tervezd meg a kvetkez
brn lthat program felhasznli fellett, gy, hogy minl jobban hasonltson a kpen
ltottakra!Emlkeztetl feltntettk,hogy melyikvezrlelemetmilyennvalatttallod
meg.
2.1.bra.PldaWindowsFormsalkalmazs
Fontos megjegyezni, hogy ebben a fejezetben ennek a programnak csak a felhasznli fellett ksztjk
el, a mgtte lv kdokat a ksbbi fejezetek feladataiban rjuk meg.
Ateljesfeladat:
Az adat.txt llomnyban orszgok neve s terletk szerepel. Az adatok betltst s listba rst az
5.2. feladatban rjuk majd meg. A 6. fejezetben tanuljuk a programozsi tteleket, ezek segtsgvel a
14 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
6.2. feladatban kiszmoljuk a terletek tlagt, megszmoljuk a kivlasztott felttelnek megfelel elemek
szmt, illetve fjlba is kirjuk azokat. Meghatrozzuk tovbb a legkisebb, illetve legnagyobb terlet
orszgot, illetve megkeresnk egy, a felhasznl ltal megadott nev llamot, amennyiben szerepel az
adatok kztt.
2.2. Amikorelkszltlakomponensekfelraksvalselrendezsvel,lltsdbeazalbbfelsorolt
tulajdonsgokatafejlesztikrnyezetben,aPropertiesablakban!
A formon:
Felirat: Plda Windows Forms alkalmazs
Mret: amekkora terleten knyelmesen elfrnek a komponensek
FormBorderStyle : FixedSingle (ne lehessen tmretezni)
MaximizeBox : false (ne lehessen teljes kpernyre nagytani)
Mind a ngy cmkn a megfelel feliratot (pl.: Forrsfjl neve:)
Mind a hat gombon a megfelel feliratot (pl.: Terletek tlaga)
A megfelel szerkesztmezk Text tulajdonsgba rd be a fjlok nevt, a harmadik mezt
hagyd resen!
a listn nem kell semmit belltani
lltsd be a csoportost (GroupBox) feliratt, s gyelj arra, hogy a kt RadioButton kompo-
nens a csoporton bell legyen! gyelj r, hogy valamelyik rdigomb Checked tulajdonsgt
igazra lltsd (gy be lesz jellve)!
A kombinlt lista Items tulajdonsgnl kattints a -ra, majd a megjelen ablakba rd be kt
kln sorba a Minimum s a Maximum szavakat. A DropDownStyle tulajdonsgot lltsd
dropdownList-re, gy a felhasznl csak kivlasztani tud a listbl, a benne lv szveget nem
tudja szerkeszteni.
A jellngyzet bejellt ( Checked) tulajdonsgt tetszs szerint llthatod.
Szeretnnk elrni, hogy a kombinlt listbl indulskor automatikusan vlasszuk ki az els ele-
met (klnben a program gy indul, hogy res). Ezt csak kdbl tehetjk meg. rjuk meg a form
Load esemnykezel metdust, ami akkor fut le, amikor az alkalmazs ablaka megjelenik a
kpernyn. rjuk bele az albbi sort:
comboBox1.SelectedIndex = 0;
a Selectedindex tulajdonsg azt adja meg, hogy a kombinlt lista hnyadik sorszm eleme a
kijellt.
A C#-ban mindent (tmbt, listt) nulltl kezdve szmoznak, ezrt az els elemre min-
denhol gy kell majd hivatkozni.
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 15
2.3. Mentsd el az elkszlt programodat, s helyezd biztonsgba, mert a ksbbi fejezetekben
ez alapjn fogunk dolgozni! Add be a projektet sszecsomagolva a tanrod ltal megadott
helyreis!
2.4. Ksztsnk egy teljesen j projektet, amellyel gyakorolhatjuk a klnfle tulajdonsgok
belltst!
2.2.bra.Tulajdonsgokgyakorlsa,kezdetivltozat
Mentsk el a projektet Tulajdonsagok_Gyakorlas nven!
Vltoztassuk meg a Properties ablakban a form nevt Form_Gyakorlas-ra! nzzk meg a kd-
ban, mi vltozott!
Helyezznk el a formra egy cmkt s kt gombot!
Az els gomb vltoztassa meg a sajt feliratt a Form belltsa, illetve a msik gomb feliratt
a Cmke belltsa szvegre!
Ha lefuttatjuk a programot, akkor a gombokon lev szvegnek csak egy rsze ltszik.
Melyik tulajdonsgot kell megvltoztatni, hogy ezt a hibt kijavthassuk? Amennyiben
sikerlt rjnnnk, javtsuk a hibt!
Az els gombra kattintva vltoztassuk meg a form feliratt a Tulajdonsgok gyakorlsa sz-
vegre!
Amennyiben az eddigiek alapjn az albbi kdot rjuk, nem mkdik:
Form _ Gyakorlas.Text = Tulajdonsgok gyakorlsa;
Prbljunk rjnni, hogy miknt lehetne mgis megoldani!
Az egyik lehetsges megolds, hogy a form sajt magra a neve helyett a this szcskval
hivatkozhat:
this.Text = Tulajdonsgok gyakorlsa;
Az elzek alapjn az els gombra kattintva lltsuk be a form httrsznt CornfowerBlue
sznre!
16 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
2.3.bra.Tulajdonsgokgyakorlsasznbelltsutn
Most a msodik gomb kvetkezik. Rkattintskor elsknt tiltsuk le az els gombot!
Kvetkez lpsben tiltsuk le a cmke automatikus mretezst, s lltsuk be a cmke mrett
100*50 pixelre!
Mivel gy nem ltunk semmit, a cmke httrsznt lltsuk t valamilyen tetszleges (a form
httrszntl klnbz) sznre!
A cmke pozcijt vltoztassuk meg gy, hogy az ablak bal szltl s tetejtl egyarnt 10
pixel tvolsgra legyen!
A cmkre val kattintskor a cmke felirata helyezkedjen el vzszintesen s fgglegesen egy-
arnt kzpen!
A cmkn lev szveg igaztst a TextAlign tulajdonsg hatrozza meg. nzz utna, hogy
ennek rtkt miknt lehet kdbl belltani!
Tipp: a fejleszti krnyezet automatikus kdkiegszts funkcija segthet ebben.
A cmkre kattintskor nveljk meg a bet mrett 2 ponttal!
Sajnos ez sem megy olyan egyszeren. Az albbi rtkads ugyanis nem mkdik:
label1.Font.Size = label1.Font.Size + 2;
Ehelyett az albbi, kicsit kompliklt utastst kell hasznlni:
label1.Font = new Font(label1.Font.FontFamily, label1.Font.
Size + 2);
Ennek jelentse: a cmke bettpusnak egy olyan j bettpus objektumot adunk rtkl,
amelynek betstlusa olyan, mint ami korbban volt, csak a betmret lett a korbbinl 2
ponttal nagyobb.
utolsknt tegynk egy jabb gombot a formra, s a cmke Click esemnykezel metdusnak
kdjt egy az egyben mozgassuk t az j gomb Click metdusnak trzsbe! Egsztsk ki,
hogy a cmke mrett nvelje meg mindkt irnyban 10 pixellel!
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 17
2.4.bra.Tulajdonsgokgyakorlsahromgombbal
A cmke res Click esemnykezel metdust nem trlhetjk ki a kdbl, helyette a
Properties ablak Events gombjra val kattints utn trljk ki a label1_Click hivatkozst.
Ezutn futtatva a programot, majd megnzve a kdot, lthatjuk, hogy az res esemnyke-
zel metdust trlte a fejleszti krnyezet.
2.5. Ksztsolyanprogramot,amelytartalmazngyklnbzhttercmkt,s
kattintskormindegyikasajthttrsznresznezitaformhttrsznt!
2.6. Az gyesebbek ksztsk el gy is a programot, hogy helyezzenek el ngy
tetszleges httrszn cmkt, amelyek rjuk kattintskor cserljenek
httrszntaformmal!
18 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
ADATOK BEOLVASSA S KIRSA, ALAPVET
AdATTPUSok, TPUSkoNVErZIk,
MATEMATIKAI S LOGIKAI MVELETEK
Ennek a tmakrnek az a clja, hogy kicsi, egyszerbb programok elksztse kzben be-
gyakorold a vltozk deklarlsnak mdjt, az rtkadsokat, az egyes adattpusokat s
a velk vgezhet mveleteket. Mivel grafkus programokat runk, szrevtlenl megta-
nulod, hogyan kommuniklj a felhasznlval a grafkus komponensek segtsgvel.
kr kerleTnek s TerleTnek kIszmTsa
3.1. KsztsjWindowsFormsalkalmazstaVisualC#2008-ban!Helyezdelakomponenseket
azalbbikphezhasonlmdon,slltsdbeatulajdonsgaikat!Aprogramolvassabeegy
krsugartsszmtsakiakerlett,terlett!
3.1.bra.Akrkerlettsterlettszmolalkalmazs
Kattints dupln a gombra, ekkor megnylik a kdszerkeszt, benne a gomb res Click esemny-
kezel metdusval.
deklarld a kr sugart trol vltozt! Ez lehet egsz vagy vals szm. A szerkesztmez tartal-
mt konvertld t a megfelel tpusra, s add rtkl a vltoznak!
int r = int.Parse(textBox1.Text);
Figyeljnk arra, hogy explicit tpuskonverzinl az rtkads mindkt oldaln azonos tpu-
s vltozk legyenek! Pldul vals tpus esetn:
double r = double.Parse(textBox1.Text);
deklarlj mg kt vltozt, amelybe szmold ki a kerletet s a terletet. Mivel a kr kerletnek s
terletnek kplete tartalmazza a -t, ezrt mindenkppen vals tpus vltozkra lesz szksg!
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 19
A C#-ban rengeteg matematikai fggvny s konstans megtallhat beptve. gy pldul
a rtkt a Math.PI segtsgvel kaphatod meg.
nzd meg, hogy milyen fggvnyek rhetk el mg a Math osztlyban!
A kerlet s terlet kiszmtsa:
double k = 2 * r * Math.PI;
double t = r * r * Math.PI;
Mr csak a kirats van htra. rd ki a kt cmkre a megfelel szvegeket, s utnuk a kt vltoz
rtkt. Figyelj arra, hogy ehhez a k s t rtkt szvegg kell konvertlnod!
label3.Text = A kr kerlete: + k.ToString();
label4.Text = A kr terlete: + t.ToString();
Trld ki a kt cmkt, s jelentsd meg az eredmnyeket zenetablakban!
MessageBox.Show(A kr kerlete: + k.ToString());
MessageBox.Show(A kr terlete: + t.ToString());
A kt kiratsi md kztt alapvet klnbsg, hogy az els esetben a szveget egy tulaj-
donsgnak adjuk rtkl, a msodiknl pedig egy metdusnak adjuk t paramterl!
Figyeljnk az eltr szintaxisra!
nzz utna, hogy hogyan lehet megoldani, hogy csak kt tizedes jegyig rja ki a vals
szmokat!
loGiKAiMVElETEK
3.2. KsztsjWindowsFormsalkalmazstaVisualC#2008-ban!Helyezdelakomponenseket
az albbi kphez hasonl mdon, s lltsd be a tulajdonsgaikat! A program segtsgvel
gyakoroljukalogikaimveleteketskzbenmegtanuljukajellngyzethasznlatt.
3.2.bra.logikaimveletekgyakorlsa
20 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
A jellngyzet rendelkezik Checked tulajdonsggal, ami igaz rtket vesz fel, amikor bejellt lla-
potban van. A jellngyzetek egymstl fggetlenl lehetnek bejellve. A kvetkez fejezetben rdi-
gombokat hasznlunk majd az egymst kizr lehetsgek vizsglatra.
sszetett felttelek megfogalmazshoz az albbi opertorok llnak rendelkezsnkre:
&& (logikai S), || (logikai VAGy), ! (logikai nEM).
Az llapot vltsa gomb Click esemnykezel metdusba rjunk olyan kdot, amely a jell-
ngyzetek llapott vltoztatja ellenkezjre a logikai nEM mvelet segtsgvel:
checkBox1.Checked = !checkBox1.Checked;
checkBox2.Checked = !checkBox2.Checked;
A kt rtkads eredmnyekppen a jellngyzetek Checked tulajdonsga ellenkezjre vltozik
(ha igaz volt, hamiss, s fordtva).
A Logikai S mvelet gombra kattintskor deklarljuk egy logikai vltozt, melynek rtke legyen
a kt jellngyzet Checked tulajdonsga a logikai S mvelettel sszekapcsolva! Az eredmnyt jele-
ntsk meg zenetablakban!
bool l = checkBox1.Checked && checkBox2.Checked;
MessageBox.Show(A logikai S eredmnye: +l.ToString());
A msik nyomgombra csinljuk meg ugyanezt a logikai VAGy mvelettel!
bool l = checkBox1.Checked || checkBox2.Checked;
MessageBox.Show(A logikai VAGY eredmnye: + l.ToString());
a lIsTBox hasznlaTa
3.3. KsztsjWindowsFormsalkalmazstaVisualC#2008-ban!Helyezdelakomponenseket
azalbbikphezhasonlmdon,slltsdbeatulajdonsgaikat!
3.3.bra.EgyszermintapldaalistBoxhasznlatra
A ListBox egy nagyon fontos s gyakran hasznlt komponensnk. Segtsgvel egy listt tudunk
kirni a kpernyre gy, hogy az informcikat soronknt tudjuk belerni.
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 21
ngy egyszer mvelettel kezelhetjk a listt:
1. Egy sor hozzadsa a listhoz:
listBox1.Items.Add(s);
Megjegyzs: az Add paramternek string tpus adatnak kell lennie!
2. Kijellt elem sorszma (-1 az eredmny, ha nincs ilyen):
int x = listBox1.SelectedIndex;
Megjegyzs: csak gy, mint a ComboBox esetn!
3. Adott sorszm elem trlse:
listBox1.Items.RemoveAt(sorszm);
Megjegyzs: itt is nulltl indul a szmozs!
4. Minden elem trlse a listbl:
listBox1.Items.Clear();
A fentiek alapjn prbljuk meg nllan megrni ezt a kis programot. A Hozzad gombra kattintva
a lista feletti szerkesztmez tartalmt adja a listhoz, majd trlje a mez tartalmt! A Kijellt trlse
rtelemszeren trlje ki a lista kijellt elemt, az alatta lev gomb pedig tvoltsa el a lista valamennyi
elemt!
FElADAToK
3.4. Egsztsd ki a 3.1. feladatban megrt programot gy, hogy a kerlet s a terlet mellett a
sugarategygmbsugarakntkezelveszmoljakiannakfelszntstrfogatt!Azeredmnyt
jelentsdmegcmknvagyzenetablakban!
3.5. rja3.1.feladatalapjnprogramot,amelybekriegytglalapktoldalhosszsgt,sezek
alapjnkiszmoljaakerlettsterlett!Azeredmnyeketvezesseaprogramegylistban,
azalbbibrnlthathozhasonlan!
3.4.bra.Tglalapkerlett,terlettszmolprogramlistval
22 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
3.6. rj programot, amely beolvassa a msodfok egyenlet hrom paramtert (a, b, c), majd
a megoldkplet segtsgvel megadja a kt megoldst! (Egyelre az egyszersg kedvrt
tegykfel,hogyvanmegoldsaazegyenletnek.)
A ngyzetgykt szmt fggvny a Math.Sqrt.
Mivel az elgazsokat mg nem tanultuk, ezrt nem tudjuk kezelni azt a helyzetet, ha nin-
csen vals megolds. Ksbb, a 8.3-as feladatban kibvtjk ezt a programot, gy, hogy
minden lehetsges esetet megfelelen kezeljen.
3.7. rjprogramot,amelybekriegyderkszghromszgktbefogjnakhosszt,
sebblkiszmoljaaztfoghosszt(Pitagorasz-ttellel)!Azeredmnytismt
vagycmkn,vagyzenetablakbanjelentskmeg!
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 23
VEZrLSI SZErkEZETEk: ELgAZSok,
CIkLUSok
Ennek a tmakrnek az a clja, hogy egyszer programok elksztse kzben begyakorold
a legfontosabb vezrlsi szerkezetek, az elgazsok s a ciklusok hasznlatt. A fejezet v-
gre megtanulsz egy- s ktirny, valamint tbbirny elgazst rni, s tisztban leszel
a ciklusok fajtival, helyes szintaktikjukkal s alkalmazhatsgukkal is.
elgazsok
4.1. A3.1feladatbanelksztett,akrkerlettsterlettszmolprogramotfogjukmdostani.
Keresdelazelksztettprogramot,msoldleamappjtazjknyvtrba,nyisdmeg,s
hajtsdvgrerajtaaszksgesmdostsokat,annakrdekben,hogyhasonltsonazalbbi
brnlthatra!
4.1.bra.Elgazs:krvagyngyzet?
A rdigombokat csoportba kell foglalni (a GroupBox komponens segtsgvel), mert gy az egy cso-
portban levk kzl pontosan egy lehet bejellt llapotban. Ennek segtsgvel tudunk olyan lehetsgek
kzl vlasztani, amelyek egymst kizrjk.
Helyezznk el a formon egy GroupBox komponenst, s tegynk bele kt rdigombot!
Hrom dolgot szeretnnk megvalstani a programban:
Ha rkattintunk a kr, illetve a ngyzet felirat rdigombra, a beviteli mez feletti felirat
vltozzon a megfelelre.
A gombra kattints utn a kivlasztott alakzat kerlett s terlett szmoljuk ki.
Amennyiben a felhasznl nem rt be semmit a szvegmezbe, a gombra kattints ne csinljon
semmit. A jelenlegi verziban a program vgrehajtsa kivtelt dobva lell.
A rdigomb kijellsnek megvltozsakor a CheckedChanged esemny kvetkezik be. rjuk meg
ezeket a metdusokat, amelyek vltoztassk meg a cmke feliratt:
label1.Text = A kr sugara:;
A msik hasonlan rand, a ngyzet oldalhosszra vonatkozan.
Annak ellenrzse, hogy melyik alakzatot vlasztottk ki, nagyon egyszer. A rdigomb Checked
tulajdonsga logikai rtk, s mivel egyszerre csak az egyiket tudjuk bejellni, ezrt elegend egy kt-
24 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
irny elgazst hasznlni. Helyezzk t a kr kerlett s terlett szmol programrszt az elgazs
egyik gba, majd a msik gba tmsolva rjuk t gy, hogy ngyzetre szmoljon!
int r = int.Parse(textBox1.Text);
double k;
double t;
if (radioButton1.Checked)
{
k = 2 * r * Math.PI;
t = r * r * Math.PI;
label3.Text = A kr kerlete: + k.ToString();
label4.Text = A kr terlete: + t.ToString();
}
else
{
k = 4 * r;
t = r * r;
label3.Text = A ngyzet kerlete: + k.ToString();
label4.Text = A ngyzet terlete: + t.ToString();
}
Figyeljk meg, hogy a pldban sztvlasztottuk a vltozk deklarcijt s az rtkad-
sokat. Egy blokkon bell ne deklarljuk jra a vltozkat, mert fordtsi hibt kapunk!
Mr csak az utols problmt kell megoldanunk. Tegyk az egsz fenti kdot egy elgazsba, amely
megvizsglja, hogy a szvegmez tartalma nem res!
if (textBox1.Text != )
{

}
C#-ban az albbi sszehasonlt opertorokat hasznlhatjuk:
< (kisebb), <= (kisebb vagy egyenl), > (nagyobb), >= (nagyobb vagy egyenl), == (egyen-
lsgvizsglat), != (nemegyenlsg-vizsglat).
Bvtsd ki ezt az utols egyirny elgazst ktirnyv, hogy ha mgsem rt be semmit
a felhasznl, udvarias zenetben fgyelmeztesse erre a program!
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 25
4.2. rjunk programot, amely egy megadott szmrl megllaptja, hogy a felhasznl ltal
megadott intervallumba esik-e! A vlaszt cmkre rjuk ki! Tervezzk meg a fellett az
albblthatmdon!
4.2.bra.intervallumosprogram
A programban kt elgazsra lesz szksgnk. Az egyik ellenrzi, hogy valban intervallumrl van-e
sz (als hatr kisebb vagy egyenl, mint a fels hatr), a msik pedig azt vizsglja, hogy a szm a meg-
adott intervallumba esik-e.
int ah = int.Parse(textBox1.Text);
int fh = int.Parse(textBox2.Text);
int szam = int.Parse(textBox3.Text);
if (ah <= fh)
{
if (szam >= ah && szam <= fh)
{
label4.Text = Benne van az intervallumban.;
}
else
{
label4.Text = Nincs benne az intervallumban.;
}
}
else
{
label4.Text = Ez nem intervallum!;
}
A pldakdban is ltszik a logikai mveletek hasznlata. A (szam >= ah && szam <=
fh) jelentse: egyszerre kell teljeslnie annak a felttelnek, hogy a szm rtke nagyobb
vagy egyenl, mint az als hatr, s kisebb vagy egyenl, mint a fels hatr.
26 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
4.3. rjunkprogramot,amelyegyszmmalbertjegyetszvegesenismegjelentegycmkn!A
programottervezzkmegazalbblthatmdon!
4.3.bra.Tbbirnyelgazsgyakorlsa
Programunkban tbbirny elgazsra van szksg. Egy egsz tpus vltozba vegyk ki a bert
szmot, s a megfelel jegyhez rjuk ki a cmkre a szveges megnevezst. A default g segtsgvel
hibazenetet is tudunk adni, ha nem egy s t kztti szmot rt be a felhasznl.
int jegy = int.Parse(textBox1.Text);
switch (jegy)
{
case 1: label2.Text = Elgtelen; break;
case 2: label2.Text = Elgsges; break;
case 3: label2.Text = Kzepes; break;
case 4: label2.Text = J; break;
case 5: label2.Text = Jeles; break;
default: label2.Text = Nem osztlyzat!; break;
}
CIklusok
4.4. Kvetkez programunkban a formot fogjuk mozgatni, szmll s elltesztel ciklus
segtsgvel, felvltva. A formon csak egyetlen gomb legyen, melynek felirata mondjuk
indt! legyen. Ennek lenyomsra aformot tegyk abalfels sarokba, majd mozgassuk
krbeakpernyszlein!Egykrmegtteleutnlljonmegabalfelssarokban!
Emlkeztet: a form tulajdonsgaira a this kulcsszval tudunk hivatkozni.
Els lpsknt helyezzk t a formot a bal fels sarokba. A kvetkez utastsokat a gomb Click
metdusba kell rnunk.
this.Left = 0;
this.Top = 0;
Szksgnk lesz arra, hogy a form meddig mehet a kpernyn, hogy mg ppen benne maradjon.
Ehhez a kperny vzszintes felbontsbl ki kell vonnunk a form szlessgt, a fgglegesbl pedig a
magassgt. Ezt az albbi kt utastssal tehetjk meg:
int kepszel = Screen.PrimaryScreen.Bounds.Width this.Width;
int kepmag = Screen.PrimaryScreen.Bounds.Height this.Height;
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 27
Elszr egy szmll ciklussal mozgassuk a formot vzszintesen a kp szlig! Ciklusvltoznak
hasznlhatjuk a this.Left rtket, hiszen ez hatrozza meg a form bal fels sarknak tvolsgt a
kperny bal szltl.
for (this.Left = 0; this.Left < kepszel; this.Left++) {}
Figyeljk meg a fenti pldban, hogy a ciklus magja res, viszont a C# for ciklusnak
sajtossga miatt (a left rtket minden lpsben nveli) mgis mkdik gy is!
Most hasznljunk egy while ciklust a lefel mozgatshoz!
while (this.Top < kepmag)
{
this.Top++;
}
Termszetesen ez a ciklus is brmikor trhat szmll ciklusra. A visszafel mozgatst hasonl cik-
lusokkal tudjuk megcsinlni, csak nvels helyett cskkentennk kell a tulajdonsgok rtkt, s addig
megynk, amg a nullt el nem rik.
for (this.Left = kepszel; this.Left > 0; this.Left--) { }
while (this.Top > 0)
{
this.Top--;
}
4.5. rjunk olyan programot, amely ismtelt adatbevitellel (ciklusban) kr be a felhasznltl
szmokat, majd ezeket sztvlogatja prosakra s pratlanokra! Ehhez tervezzk meg az
albbibrnlthatalkalmazst!
4.4.bra.Adatbevitelciklusban,sztvlogats
Eddig nem volt szksgnk arra, hogy ciklusban egyms utn tbb adatot olvassunk be. A minden-
napi letben azonban ez gyakran elfordul. A szvegmez erre nem alkalmas, ezrt a Visual Basic-tl
klcsnvesszk az InputBox metdust.
28 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
Egy Visual Basic modul hasznlathoz kt bellts szksges.
Kattintsunk jobb gombbal a Solution Explorer ablakban a References pontra, s v-
lasszuk az Add reference menpontot. A megjelen ablakban vlasszuk a Mic-
rosoft.VisualBasic sort, s kattintsunk az OK gombra. (Lsd: 4.5. bra.)
A Form1.cs kdban, legfell tallunk j pr using kezdet sort. Adjuk hozz az
albbi sort:
using Microsoft.VisualBasic;
4.5.bra.VisualBasicreferenciahozzadsa
Most mr hasznlhatjuk az InputBox fggvnyt, amely beolvas egy stringet egy felbukkan ablak
segtsgvel.
Az InputBox hasznlata:
string s = Interaction.InputBox(krds,felbukkan ablak
felirata,alaprtelmezett vlasz,x koordinta,
y koordinta);
Meg kell teht adnunk a krdst, amit feltesz a felhasznlnak, az ablak feliratt, az alap-
rtelmezett vlaszt (ez eddig hrom string tpus paramter), majd a megjelen ablak x
s y koordintjt.
A beolvass addig tart, amg a felhasznl a 0 rtket nem adja meg (egybknt lehet ez a felbukkan
ablak alaprtelmezett paramtere is). Ennek megoldshoz hasznlhatunk htultesztel ciklust, ugyanis
egy adatot mindenkppen be kell olvasnunk, s akkor kell folytatnunk, ha a bert rtk nem 0.
Mivel a nulla rtket nem szeretnnk eltrolni a listban, szksgnk van egy elgazsra, ami kiszri
ezt. Tovbb egy elgazssal meg kell vizsglnunk, hogy a szm pros-e, azaz kettvel osztva nullt ad-e
maradkul.
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 29
Az oszthatsgi vizsglathoz a % (maradk) mveletet hasznlhatjuk:
if (szam % 2 == 0) { }
Ha a szm kettvel val osztsi maradka egyenl nullval, az azt jelenti, hogy pros.
nzzk ezek utn a kdot:
int szam;
do
{
string s = Interaction.InputBox(Krem a kvetkez
szmot:,Adatbevitel,0,100,100);
szam = int.Parse(s);
if (szam!=0)
{
if (szam % 2 == 0)
{
listBox1.Items.Add(s);
}
else
{
listBox2.Items.Add(s);
}
}
} while (szam!=0);
A ciklusvltozt mindenkppen deklarlnunk kell a ciklus eltt, mert klnben nem
hasznlhatjuk a ciklusfelttelben.
Amennyiben a szm pros, az egyik, ha nem, akkor a msik listhoz adjuk hozz.
FElADAToK
4.6 rjunk programot, amely egy dolgozat pontszma alapjn megadja a jegyet szmmal s
szvegesenis!Aponthatrok:010:1,1120:2,2130:3,3140:4,s4150:5.Egycmkre
rjukkiazeredmnyt!
4.7. rjukkiegylistBoxba0-tl100-igaszmokat4-esvel!
4.8. rj programot, amely egy bekr egy vszmot, s megmondja rla, hogy
szkv-e!(Szkvaz,amelynggyeloszthatsszzzalnem,vagynggyels
ngyszzzalisoszthat.)Avlasztittisegycmkrerjuk!
30 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
SSZETETT AdATTPUSok: rEkord, TmB,
fELTLTS SZVEgfjLBL
Ennek a tmakrnek az a clja, hogy az adatbevitel gyorstsa rdekben szveges fjlok-
bl olvass be adatokat, illetve nagy mennyisg eredmnyt hasonl formban llts el.
Kzben megtanulhatod az sszetett adattpusok kezelst, s kpes leszel rekordokbl ll
tmbket feltlteni, adataikat megjelenteni.
BEolVASSSzVEGFjlBl,KirSSzVEGFjlBA
5.1. rjuk t a 4.5. feladatban ksztett programot, hogy ne billentyzetrl, hanem a mellkelt
szamok.txtfjlblolvassabeazadatokat,sazokatvlogassasztprosakraspratlanokra!
Az alkalmazs kezelfelletn nem sokat kell vltoztatnunk, csak egy j gombot kell
felvennnk.
5.1.bra.Beolvassfjlbl,sztvlogats,kirsfjlba
Hasznljunk a feladat megoldshoz tmbt!
Az eddigi programjainkban a vltozkat mindig az esemnykezel metdusokban dek-
larltuk, gy ezek csak azokban a metdusokban voltak hasznlhatk. Az gy deklarlt
vltozkat nevezzk loklis vltozknak.
Ezzel szemben a tmbt, a tmb maximlis s tnyleges elemszmt clszer gy felven-
ni, hogy minden esemnykezel metdusbl el lehessen rni, azaz globlis vltozknt
kell ket deklarlni.
A globlis vltozkat minden esemnykezel eljrs el, a public Form1() sor el clszer rni.
const int MAX = 100;
int[] szamok = new int[MAX];
int n;
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 31
a const kulcsszval gynevezett konstanst deklarlhatunk, amelynek egyszer adhatunk rtket, s
azt az rtket a program sorn nem vltoztathatjuk meg.
Mivel fjlbl olvasunk be, nem tudjuk elre megmondani, hogy hny elemnek kell helyet foglalnunk.
Ezrt vesznk fel egy legfeljebb MAx elem vektort, s az n rtkt hasznljuk arra, hogy tudjuk, hny
elem van valjban benne.
A fjlbl val beolvasshoz a korbbi feladat htultesztel ciklust elltesztelv kell talaktanunk.
Fontos azt is megjegyezni, hogy a szvegfjlbl mindig string tpus rtket tudunk beolvasni (hasonl-
an az InputBoxhoz), ezrt konvertlnunk kell.
n = 0;
string fnev = szamok.txt;
if (File.Exists(fnev))
{
StreamReader f = File.OpenText(fnev);
while (!f.EndOfStream && n<MAX)
{
string sor = f.ReadLine();
szamok[n] = int.Parse(sor);
if (szamok[n] % 2 == 0)
{
listBox1.Items.Add(sor);
}
else
{
listBox2.Items.Add(sor);
}
n++;
}
f.Close();
button2.Enabled = true;
}
else
{
MessageBox.Show(A megadott fjl nem ltezik.);
}
A szvegfjlokat a projekt knyvtrban a bin\Debug mappba kell bemsolnunk, mert
klnben nem tallja meg a program futtatsakor. Termszetesen a fjlneveket megadhat-
juk tvonallal egytt is, ekkor azonban fennll a veszlye, hogy a program ms mappba
helyezsekor nem fogja megtallni a szvegfjlt.
A fent lthat kdrszlet feltlti a tmbt a beolvasott szmokkal, s egyttal sztvlogatja ket, s
elhelyezi a ListBoxokban. A while ciklus felttelt azrt bvtettk ki az n<MAx felttellel, mert gy
akkor sincsen problma, ha a fjlban tbb elem van, mint amennyinek helyet foglaltunk. Az n rtkt
pedig azrt nveljk a beolvass utn, mert a tmb indexelse 0-tl indul, msrszt pedig gy ez a vlto-
z a beolvasott elemek tnyleges darabszmt jelenti. A fjlba rskor lthatjuk is, hogy 0-tl n-1-ig kell
vgigmennnk az indexeken.
Clszer a msodik gombot letiltani, hiszen nincs mit fjlba rni, ha mg nem olvastuk be az adatokat.
A fjl bezrsa utn azonban mr engedlyezhetjk a nyomgombot.
32 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
A fjlba rs lnyegesen egyszerbb. Egy szmll ciklussal vgigmegynk a tmb elemein, s ame-
lyik pros, azt kirjuk a szvegfjlba. nagyon fontos, hogy a vgn ne felejtsk el lezrni a fjlt, mert
klnben lehetnek olyan sorok, amelyek nem kerlnek bele!
Amennyiben nem adunk meg tvonalat, az elkszlt szvegfjlokat ugyangy a bin\Debug
mappban kell keresnnk, mint a beolvasskor.
string fnev = paros.txt;
StreamWriter f = File.CreateText(fnev);
for (int i = 0; i < n; i++)
{
if (szamok[i] % 2 == 0)
{
f.WriteLine(szamok[i]);
}
}
f.Close();
MessageBox.Show(A pros szmokat fjlba rtam.);
Amennyiben a tmbnk valamennyi eleme fel lenne tltve adatokkal, az elemek feldolgo-
zshoz hasznlhatnnk a foreach ciklust, ami mindenkppen vgigmegy az egsz tm-
bn. Ciklusvltozknt nem indexet, hanem olyan tpus vltozt hasznl, mint amilyen
tpus elemekbl a tmb ll, s a futs sorn azzal lehet hivatkozni a tmb elemeire.
A fenti ciklust gy rhatnnk foreach segtsgvel:
foreach (int elem in szamok)
{
if (elem % 2 == 0)
{
f.WriteLine(elem);
}
}
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 33
STruKTrASrEKorDEGyTT
5.2. Nyissuk meg a 2.1. feladatban megtervezett programot, s rjuk meg a fjlbl trtn
beolvasst!AzeredmnytjelentskmegalistBoxban!Amellkeltszvegfjlban(adat.txt)
azorszgoknevesterleteklnsorbantallhat.
5.2.bra.Beolvasottadatokmegjelentse
A feladat nagyon hasonlt az elzhz. Elszr deklarljuk a struktratpust s a tmbt, termsze-
tesen mindegyiket globlisknt.
struct Rekord
{
public string orszag;
public int terulet;
}
const int MAX = 100;
Rekord[] v = new Rekord[MAX];
int n;
A feltlts is hasonlan megy, kt apr klnbsggel. Az egyik, hogy a fjl nevt egy szvegdobozba
rja a felhasznl, s amennyiben ezt elmulasztja, akkor fgyelmeztetjk erre. A msik, hogy mivel a
tmb elemei rekordok, ezrt kln-kln kell beolvasni a kt mez rtkt, gy kt ReadLine() kell a
ciklusba. A beolvasott adatokat rjuk ki a ListBoxba!
34 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
n = 0;
listBox1.Items.Clear();
if (textBox1.Text != )
{
if (File.Exists(textBox1.Text))
{
StreamReader f = File.OpenText(textBox1.Text);
while (!f.EndOfStream && n<MAX)
{
v[n].orszag = f.ReadLine();
string sor = f.ReadLine();
v[n].terulet = int.Parse(sor);
listBox1.Items.Add(v[n].orszag + terlete: + v[n].terulet.
ToString());
n++;
}
f.Close();
}
else
{
MessageBox.Show(A megadott nev fjl nem ltezik!);
}
}
else
{
MessageBox.Show(Nem adott meg fjlnevet!);
}
A kirsnl a mintban az sszetartoz adatokat egy sorba rjuk ki: az orszg neve mellett mindjrt a
terlett is megjelentjk. Mivel a + opertor szm s szveg tpus adatokat kzvetlenl nem tud ssze-
fzni, ezrt a terletet string tpusv kell konvertlni a ToString() fggvnnyel.
FElADAToK
5.3. Bvtskkiaz5.1feladatbanmegrtprogramot,gy,hogybeolvasskzbenszmoljakia
pratlanszmoktlagt!Azeredmnytrjukkiakpernyre!
5.4. Egy szvegfjlban (aru.txt) gymlcsk nevei vannak, a kvetkez sorban tallhat, hogy
hnykgllrendelkezsrebellk,aharmadikbanpedigazrszerepel.olvassukbeezeket
egy struktrbl ll tmbbe, majd szmoljuk ki a kszlet sszrtkt (azaz adjuk ssze a
kg*rrtkeket)!Azeredmnytjelentskmegakpernyn!
5.5. Az5.2feladatprogramjbanrjukmegaztaprogramrszletet,amelykiszmtja
azorszgokterletnektlagt!Azeredmnytittisrjukki!
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 35
ALAPVET PROGRAMOZSI TTELEK
mEgVALSTSA
Ennek a tmakrnek az a clja, hogy megismerkedj az alapvet programozsi ttelekkel,
illetve megtanuld, hogyan kell ket megvalstani C# nyelven. Kzben gyakorolhatod,
hogyan kell feltteleket megfogalmazni, illetve alkalmazni az eddig tanult vezrlsi szer-
kezeteket.
programozsI TTelek megvalsTsa
6.1. rjuk t az 5.1. feladatban ksztett programot, s egsztsk ki a programozsi ttelek
megvalstsval! Az eredmnyeket minden feladatnl rjuk ki a kpernyre MessageBox
segtsgvel! Az alkalmazs kezelfelletn nem sokat kell vltoztatnunk, csak nhny j
gombot kell felvennnk. Vegyk fel ezeket a gombokat, a feliratukat lltsuk be az albbi
brnlthatmdon!
6.1.bra.Kiegsztveprogramozsittelekkel
Ha vgeztnk az alkalmazs kezelfelletnek talaktsval, a ngy gombhoz meg kell rnunk a
megfelel esemnykezel eljrst.
Melyik feladatot melyik programozsi ttel segtsgvel kell megoldani?
Az els feladat az elemek tlagnak meghatrozsa. Mivel ehhez ssze kell adni az elemeket, majd a
vgn el kell osztani ket a darabszmmal, ezrt a feladathoz az sszegzs ttele hasznlhat.
36 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
sszegzs TTele
Ebben a feladatban nincsen semmi specialits, az elemeink egyszer egsz szmok, s tmbben vannak.
Az alap algoritmuson nem kell sokat vltoztatni.
Mivel az tlag mindenkppen vals rtk, ezrt clszer mr az sszegzshez is vals
szmknt felvennnk, gy megsszuk a vgn a tpusknyszertst.
Az sszegzs ttelt felhasznlva az tlagszmts, a szamok nev tmbre felrva:
double atlag = 0;
for (int i = 0; i < n; i++)
{
atlag += szamok[i];
}
atlag = atlag / n;
az atlag += szamok[i] egyenrtk az atlag = atlag + szamok[i] utas-
tssal.
Termszetesen gondoskodnunk kell arrl is, hogy a kiszmtott rtk megjelenjen a kpernyn. Ez
trtnhet egy cmkre kiratva, illetve zenetablakba, az albbi mdon:
MessageBox.Show(A tmb elemeinek tlaga: + atlag.ToString());
megszmlls TTele
A megszmlls ttelnek megvalstsban egyetlen dolgot kell mindig a feladat szveghez igazta-
nunk: a v[i] adott tulajdonsg felttelt kell lecserlnnk a kvnt logikai kifejezsre. Mivel
ebben a feladatban a 80-nl nagyobb elemek darabszmt kell megszmolnunk, ezrt a felttel a kvet-
kezkppen nz ki: szamok[i] > 80.
Lssuk teht a megszmlls megvalstst:
int db = 0;
for (int i = 0; i < n; i++)
{
if (szamok[i] > 80)
{
db++;
}
}
MessageBox.Show(A 80-nl nagyobb elemek szma: + db.ToString());
a db++ egyenrtk a db = db + 1 utastssal.
A kirats az elzhz hasonlan trtnik.
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 37
MiNiMuM-SMAxiMuMKiVlASzTSTTElE
Mivel a kt programozsi ttel kztt mindssze egyetlen relcis jel llsa a klnbsg, ezrt egytt
valsthatjuk meg ket.
jegyezzk meg, hogy a ttelben nem a maximum rtkt, hanem a helyt(indext) tartjuk
nyilvn, gy knnyebben tudjuk ms tpus rtket tartalmaz tmbre is alkalmazni azt.
rjuk meg a harmadik gomb esemnykezeljt, gy, hogy egyetlen ciklusban meghatrozzuk egy-
szerre a minimum s a maximum rtkt is!
int min = 0;
int max = 0;
for (int i = 1; i < n; i++)
{
if (szamok[i] < szamok[min])
{
min = i;
}
if (szamok[i] > szamok[max])
{
max = i;
}
}
Mint lthat, elegend volt felvenni mg egy plusz vltozt, s a ciklusban megismtelni az elgazst,
ellenkez relcis jellel.
Mivel, a min s a max vltozk a legkisebb s legnagyobb elem helyt (indext) jelzik,
ezrt kiratskor a szamok[min] s szamok[max] rtkt kell kiratni:
MessageBox.Show(A legkisebb elem: + szamok[min].ToString()
+ , a legnagyobb elem: + szamok[max].ToString());
Vajon mit jelenthet a minimum s a maximum akkor, amikor nem szm, hanem szveges
tpus adatokra alkalmazzuk?
lInerIs keress
utols programozsi ttelnk a keress. Az egyetlen nehzsge abbl addik, amit a megszmllsnl
mr lttunk, hogy valamilyen tulajdonsggal rendelkez elemet kereshetnk vele. Ebben a feladatban
viszont egy adott elemet kell megkeresnnk, amit eltte a felhasznltl olvasunk be.
Emlkeztet: a beolvassra alkalmas lehet az InputBox fggvny, amit a Visual Basictl
vettnk klcsn.
38 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
int adott = int.Parse(Interaction.InputBox(Krem az adott elemet:,
Adatbevitel, , 50, 50));
Amennyiben megvan az adott szm, a keress knnyen felrhat. Akkor kell megllnunk, ha a tmb
ppen vizsglt eleme egyenl a beolvasott rtkkel, ezrt a ciklusfelttelbe ennek tagadst kell rnunk,
a != opertor felhasznlsval.
int i = 0;
while (i < n && szamok[i] != adott)
{
i++;
}
bool l = (i < n);
A keress eredmnyt csak akkor lehet kirni, ha a logikai vltoz rtke igaz a ciklus le-
futsa utn. Ezrt minden lineris keress utn meg kell vizsglni az l rtkt, s az annak
megfelel zenetet kell kiratni:
if (l)
{
MessageBox.Show(Az adott elem benne van a tmbben.);
}
else
{
MessageBox.Show(Az adott elem nincs benne a tmbben.);
}
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 39
programozsI TTelek sTrukTra Tpus
ADAToKrA
6.2. Nyissukmegaz5.2.feladatbanelksztettprogramot,srjukmegatbbigombesemnykezel
metdust,azazatbbiprogramozsittelt!gyeljnkarra,hogyazeredmnyekminden
feladatnljelenjenekmegakpernyn!
6.2.bra.ittazidejetartalommalmegtlteniazalkalmazskezelfellett
Emlkeztetl a feladatban hasznlt adattpusok s vltozk a kvetkezk:
struct Rekord
{
public string orszag;
public int terulet;
}
const int MAX = 100;
Rekord[] v = new Rekord[MAX];
int n;
Segtsg a feladat megoldshoz:
tlagszmts: mivel a terletek tlagt kell kiszmolni, ezrt az sszegzsben a v[i].terulet
szerepel.
A megszmllsban a rdigombokkal tudjuk kivlasztani, hogy mit is akarunk meg-
szmolni, emiatt a felttel kicsit bonyolultabb. Vagy az elst jelltk be, s akkor a
100 000-nl nagyobb terleteket szmoljuk, vagy a msodikat s akkor a 100 000-
nl kisebb vagy azzal egyenlket kell beleszmolnunk. gy a kicsit sszetett felttel:
40 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
if ((radioButton1.Checked && v[i].terulet > 100000) || (radioButton2.
Checked && v[i].terulet <= 100000)) { }
Az elz feladatban mr csinltunk olyat, hogy minimumot s maximumot is kivlasztunk. Ebben
a feladatban viszont a kt lehetsg kzl vlasztani kell a kombinlt lista segtsgvel. Ezrt az
els feladatban megrt elgazsokat egy jabb elgazsba kell begyazni, az albbi mdon:
if (comboBox1.SelectedIndex == 0)
{
// ide jn a minimumkivlaszts elgazsa
}
else
{
// ide pedig a maximumkivlaszts
}
A lineris keressnl kt dologra kell odafgyelni. Az egyik, hogy a felhasznl most szvegdo-
bozba rja be a keresett orszg nevt, ezrt azt nem hagyhatja resen, ezt egy elgazssal meg kell
vizsglni. A msik, hogy amennyiben a jellngyzetet bekattintjuk, akkor a megtallt orszg
sort ki is kell jellni a listban, a kvetkezkppen:
if (checkBox1.Checked)
{
listBox1.SelectedIndex = ind;
}
A Kirs gomb fjlba rja azon feltteleknek megfelel orszgokat, amelyet valamelyik rdi-
gombbal kivlasztottunk. gy ugyanazt a felttelt kell hasznlnunk, mint amit a megszmlls-
nl:
if ((radioButton1.Checked && v[i].terulet > 100000) || (radioButton2.
Checked && v[i].terulet <= 100000)) { }
FElADAToK
6.3. rjuk t gy a 6.2. feladatban megrt programot, hogy a rdigombokkal
kivlasztott felttelnek megfelel (100.000-nl nagyobb, illetve legfeljebb
akkoraterlet)orszgoknakmegfelelsorokategymsiklistBoxbaisrjaki,
azbrnlthatmdon!
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 41
6.3.bra.A6.2feladat,kiegsztveafelttelnekmegfelelkivlogatssal
42 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
HIBk, HIBAZENETEk S kEZELSk
Ennek a tmakrnek az a clja, hogy megismerkedj a programozs sorn elkvethet hibk
fajtival, ismerd s rtsd meg a programozsi krnyezet legfontosabb hibazeneteit, s
kpes legyl ezeket a hibkat kijavtani. Amennyiben a programod rosszul mkdik, tudd,
hogy milyen eszkzk llnak rendelkezsedre a hiba helynek s fajtjnak feldertshez
s javtshoz.
szInTakTIkaI hIBk javTsa
7.1. NyissukmegaSzintaktikai_Hibasnevprojektet!Prbljukmeglefordtani!Azttapasztal-
juk,hogyafejlesztikrnyezetngyszintaktikaihibtjelezenneksorn,pedigaprogram
ennljvaltbbettartalmaz.javtsukkiahibkatlpsrllpsre!
A hibajavts aranyszablya, hogy lehetleg egyszerre csak egy hibt prbljunk meg ja-
vtani, s minden javts utn fordtsuk jra a programot! Elfordulhat ugyanis, hogy egy
hiba javtsa tbb hibazenettl is megszabadt bennnket.
1. empty character literal
Az els hiba abbl addik, hogy a textbox1.text tulajdonsga string tpus, mi pedig egy
res karakterrel () prbljuk meg sszehasonltani, ilyen pedig nem is ltezik. Cserljk ki res
sztringre (dupla idzjel: )!
2. Syntax error, ( expected
Ez a hibazenet elg egyrtelm, egy nyit zrjelet hinyol az if kulcssz utn. rjuk oda!
3. Invalid expression term else
Ha fgyelmesebben megnzzk a kdot, az else kulcsszt vltoznvknt hasznljuk, s kt sor-
ral lejjebb az is kiderl, hogy eredetileg elso-t akartunk rni. javtsuk ki a hibs vltoznevet!
4. Operator && cannot be applied to operands of type string and
bool
Ezt az zenetet egy nehezebben felderthet hiba okozza. Sz szerint azt jelenti, hogy az S logi-
kai mveletet nem lehet alkalmazni string s bool tpus operandusok esetn. jelen esetben
az res string () s a (textBox2.Text != ) kifejezsek kztt szeretn ezt a mveletet
elvgezni. Ennek oka, hogy a textBox1.Text utn egyetlen darab egyenlsgjel szerepel, ami
rtkads s nem egyenlsgvizsglat. Radsul itt az a felttel kell, hogy egyik szvegdoboz sem
res. rjunk egy felkiltjelet az egyedl ll egyenlsgjel el!
5. Cannot implicitly convert type int to string
A kt vltoz (elso s masodik) sszege egsz tpus, s egy string tpus vltoznak sze-
retnnk rtkl adni. Cserljk az eredm vltoz tpust int-re!
6. Cannot implicitly convert type int to string
jbl felbukkant a hibazenet, a kvetkez sorban. Most viszont az eredm vltozt kell string
tpusv konvertlnunk, hogy rtkl tudjuk adni a textBox3 Text tulajdonsgnak. Tegyk
meg, rjuk utna a .ToString() fggvnyhvst!
7. The name MassageBox does not exist in the current context
Az utols hiba egyszer elgpels: javtsuk ki a hibsan rt szt MessageBox-ra!
A javtsok utn a program mr lefordthat s futtathat.
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 43
Lthat, hogy egy rvid kis programban is rengeteg apr hibt lehet vteni. Kis odaf-
gyelssel s a fordt zeneteinek rtelmezsvel azonban ezeket knnyedn ki tudjuk
javtani.
szemanTIkaI hIBk javTsa
Sokkal nehezebb dolgunk van, ha olyan hibt kell kijavtanunk, amelynek okt nem tudjuk, vagy amely-
rl a fordt nem tud bvebb informcit adni. Ha a program lefordthat, de nem azt csinlja, amit sze-
retnnk, vagy nem csinl semmit, akkor nincs ms vlasztsunk, mint hogy megprbljuk kitallni, mi
lehet a baj. A tovbbiakban egy ilyen programot fogunk kijavtani.
7.2. Nyissuk meg a Szemantikai_Hibas nev projektet! A program egy szmokat tartalmaz
vektort tlt fel szvegfjlbl, s kiszmolja a szmok tlagt. Br a program lefordthat,
afordtssornegyfgyelmeztetsjelenikmeg,amelyaprogrambantallhategyikslyos
szemantikaihibraprbljafelhvniafgyelmnket.
Fordtsuk le, s futtassuk a programot. Kattintsunk a Beolvass fjlbl gombra! Kis vrakozs utn
a program elszll, azaz kivtelt dob. Kezdjk el kijavtani a programot!
1. NullReferenceException was unhandled
Az objektumhivatkozs nincs belltva semmilyen objektumpldny-
ra.
Ha magyar nyelv Windows verzit hasznlunk, akkor ez a fenti hibazenet is magyarul je-
lenik meg. A hibt a szamok[n] tmbelemre val hivatkozs okozza. Ha jobban meg-
nzzk, a tmbt deklarltuk, de nem inicializltuk. Ptoljuk, bvtsk ki a deklarcit:
int[] szamok = new int[MAX];
gy a fgyelmeztets is eltnik.
2. ObjectDisposedException was unhandled
Nem lehet bezrt TextReader objektumbl olvasni.
Elg egyrtelm a hibazenet: bezrjuk a fjlt, mikzben olvasunk belle, mivel az f.Close() a
cikluson bellre kerlt. Helyezzk t a cikluson kvlre!
3. FormatException was unhandled
Nem megfelel a bemeneti karakterlnc formtuma.
Ez olyankor fordulhat el, amikor a beolvasott adatot nem tudja talaktani szm formtumra.
nzzk meg a loklis vltozk rtkt mutat Locals ablakot! A sor vltoz rtke 12e, amit
nem tud egsz szmm talaktani s a tmbbe tenni. javtsuk ki a hibs rtket a szvegfjlban!
4. IndexOutOfRangeException was unhandled
Az index a tmb hatrain kvlre mutatott.
Vigyk az n vltoz fl az egrmutatt valahol a kdban! Lthatjuk, hogy n=10 esetn ll le a
program ezzel a hibazenettel. A hiba oka az, hogy a MAX rtke mindssze 10, gy a tmb indexei
0 s 9 kz eshetnek, gy a 10. elemre mr nem tudunk hivatkozni. nveljk meg a MAX rtkt
100-ra!
Ezekkel a mdostsokkal a beolvass mr le tud futni. Prbljuk ki az tlagszmtst!
5. A gombra kattintva nem trtnik semmi. Ezek a legnehezebben felderthet hibk. Helyezznk
el trspontot az tlagszmts elejre s futtassuk lpsenknt a programot! Hamar rjhetnk,
hogy a for ciklus felttele hibs, s ezrt vgre sem hajtja a ciklusmagot. Cserljk ki a felttelt
i<n-re!
44 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
6. Most mr fut az tlagszmts, de a ciklus minden lpsben kir egy tlagot, ami radsul nem is
tnik trtszmnak. A kiratst tegyk a cikluson kvlre!
7. A program ltszlag jl mkdik, de a kirt tlag kevesebb, mint a valdi tlag. Ezt persze nehz szre-
venni, gy knnyen maradhat hiba a programunkban. Ha jobban megnzzk, akkor a cikluson bell osz-
tunk az n rtkvel, ami semmikppen nem helyes. Trljk ezt ki, s a cikluson kvl osszunk vele:
atlag /= n;
8. Mr majdnem minden j, de egyetlen apr, tnyleg nehezen felderthet hiba maradt a program-
ban. Ha trspontot tesznk a programban az tlagszmtshoz, s megnzzk a tmb tartalmt,
rjhetnk, hogy a 0. elem resen maradt benne. Ennek oka, hogy feltltskor a ciklusban rossz
helyen nveljk az n rtkt. Tegyk az utastst a ciklusmag vgre!
Kijavtottunk minden hibt a programban, az eredmny most mr helyesen 65,65.
SSzETETTFElADAT
7.3. Nyissuk meg a Harmadik_Hibas nev projektet! A program gy sorsol vletlenszeren t
szmot1s90kztt,hogyazokkzttnelegyenktegyformartk.Vegyesentallhatk
benneszintaktikaisszemantikaihibkis.Keresskmegsjavtsukkiezeket!
A programban szerepel vletlenszm-generls is. Ehhez elszr ltre kell hozni egy
Random tpus objektumot:
Random r = new Random();
Majd utna generlni kell a kvetkez vletlen szmot adott als s fels hatr kztt, az
albbi mdon:
int x;

x = r.Next(also _ hatar, felso _ hatar+1);


FElADAToK
7.4. NzzutnaazinternetenvagyaSgban,hogya7.2.feladatbanemltetteken
kvlmilyenkivtelek(Exception)fordulhatnakelaprogramokfutsasorn!
Szedjsszeprat!
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 45
KIVTELEK KEZELSE, ELLENRZTT
AdATBEVITEL
Ennek a tmakrnek az a clja, hogy megtanulj olyan nyelvi elemeket, melyeknek segt-
sgvel a hibs adatbevitelbl ered hibkat ki tudod kszblni. Tudd kezelni, ha a rossz
formtum adatot ad meg a felhasznl, illetve knyszerteni tudod arra, hogy csak bizo-
nyos felttelnek megfelel rtket rhasson be.
KiVTElEKKEzElSEFjlKEzElSSorN
8.1. Nyissuk meg a 6.1. feladatban elksztett rgi projektnket! Alaktsuk t a felhasznli
fellettazalbbibrnlthatmdon,hogyaszvegfjloknevtszvegmezksegtsgvel
megtudjukadni!
8.1.bra.Aprogramunkmegjultfellete
Ebben a programban kt esetben lehet problma: a fjlbl beolvass sorn, illetve ha az adott elem
keressnl nem adunk meg semmit, illetve rosszat (pldul bett) runk be. Elszr egsztsk ki a
fjlbl beolvasst!
Fjlbl beolvassnl a File.Exists segtsgvel mr kivdtk a leggyakoribb hibt, a
nem ltez fjl problmjt. Viszont szmos ms hiba is elfordulhat, ezrt az a legszeren-
cssebb, ha egy ltalnos kivtelkezel blokkot runk, amellyel minden hiba kezelhet.
A fjlbl val beolvasst helyezzk t a try blokkba! Azrt, hogy a vltozk deklarcijval kapcso-
latban ne lehessen hatskri problma, a fjlvltozt mg a try blokk eltt deklarljuk!
StreamReader f = File.OpenText(fnev);
46 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
try
{
while (!f.EndOfStream && n < MAX)
{
string sor = f.ReadLine();
szamok[n] = int.Parse(sor);
if (szamok[n] % 2 == 0)
{
listBox1.Items.Add(sor);
}
else
{
listBox2.Items.Add(sor);
}
n++;
}
}
Tulajdonkppen nem csinltunk mst, csak a fjlkezel sorokat begyaztuk egy kivtelkezel blokkba.
Kivtel kezelshez legalbb egy catch blokknak szerepelnie kell. a fnally blokk
opcionlis, csak akkor kell, ha valamit mindenkppen vgre szeretnnk hajtani, ha volt
kivtel, ha nem.
a catch blokkban nem ktelez kivtelvltozt hasznlni, ebben az esetben is minden kivtelt el fog
kapni.
catch
{
MessageBox.Show(Hiba trtnt a fjlbl beolvass sorn.);
}
a fnally blokkban azt szoktuk csinlni, hogy amennyiben a fjlt mg nem zrtuk be, akkor ezt
megtesszk:
fnally
{
if (f != null)
{
f.Close();
}
}
Prbljuk ki a programot! Ha a szamok.txt fjlt tltjk be, akkor a program kivtelt dob, mert van a
fjlban egy hibs rtk. Amennyiben a szamok2.txt-t adjuk meg, hibtlanul lefut a beolvass.
Az adott elem keressnl egyszerbb a helyzet: tudjuk, hogy ha hibs formj rtket runk be, ak-
kor el fog szllni a programunk, mghozz FormatException kivtellel. Ezt kell csak lekezelnnk.
A beolvasst s a lineris keresst is bele kell foglalnunk a kivtelkezel blokkba.
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 47
Hatskrrel s rtkadssal kapcsolatos gondokat okozna az albbi kdrszlet:
try
{
int adott = int.Parse(Interaction.InputBox(Krem az adott
elemet:, Adatbevitel, , 50, 50));
}
catch
bool l = false; // ide jnne a lineris keress
A kt problma:
az adott vltozt a try blokkban deklarltuk, ezrt csak ott lenne hasznlhat. A
deklarcit gy mindenkppen ki kne vennnk a kivtelkezels el.
Ennl komolyabb problma, hogy amennyiben kivtel trtnik, az adott vltoz nem
kap rtket, s gy nem tudjuk felhasznlni a lineris keressben.
Ezek miatt rdemesebb a teljes kdrszletet elhelyezni a try blokkban.
try
{
int adott = int.Parse(Interaction.InputBox(Krem az adott elemet:,
Adatbevitel, , 50, 50));
bool l = false;
int i = -1;
while (l == false && i < n)
{
i++;
if (szamok[i] == adott)
{
l = true;
}
}
if (l)
{
MessageBox.Show(Az adott elem benne van a tmbben.);
}
else
{
MessageBox.Show(Az adott elem nincs benne a tmbben.);
}
}
catch (FormatException)
{
MessageBox.Show(Hibs rtket adott meg!);
}
48 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
EllENrzTTADATBEViTElKiVTElKEzElSSEl
8.2. rjunkprogramot,amelyosztlyzatokatolvasbe,sazoktlagtszmoljaki!Hasznljunk
ellenrztt adatbevitelt (csak 1 s 5 kztti szmokat lehessen berni), s vgjelig trtn
beolvasst(vgjel:0)!Kivtelkezelsseloldjukmeg,hogynelehessenhibsrtketberni!
8.2.bra.jegyekbeolvassa
Mivel az ellenrztt adatbevitel s a vgjelig trtn beolvass is htultesztel ciklust ignyel, ezrt
ezeket egymsba kell gyazni a programban. Clszer a hasznlt vltozkat ezek eltt deklarlni, s
kezdrtket adni nekik.
double atl = 0;
int db = 0;
int szam;
Az ellenrztt adatbevitelt a prezentciban mr lehetett ltni, itt csak annyit kell rajta vltoztatni, hogy
a 0-t is meg kell engedni, klnben nem fog mkdni a vgjelig trtn beolvass:
do
{
try
{
string s = Interaction.InputBox(Krem a kvetkez osztlyzatot:,
Adatbevitel, 0, 100, 100);
szam = int.Parse(s);
}
catch (FormatException)
{
MessageBox.Show(Hibs adatbevitel!);
szam = -1;
}
} while (szam < 0 || szam > 5);
A konvertls miatt elhelyeztnk egy kivtelkezel blokkot is. Itt is a FormatException-t kapjuk
el, s a szam vltozt azrt lltjuk a catch blokkban -1-re, mert gy az ellenrztt adatbevitel ciklus-
felttele teljesl, s hibs adat bersa esetn jra beolvassa azt.
gyazzuk ezt be egy vgjelig trtn beolvassra, s utna szmoljunk tlagot, majd jelentsk meg
a kpernyn az eredmnyt!
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 49
do
{
// ide jn az ellenrztt adatbevitel
if (szam != 0)
{
atl += szam;
db++;
}
} while (szam != 0);
if (db != 0)
{
atl /= db;
}
label1.Text = tlag: + atl.ToString();
Az tlag szmolsakor fgyelembe kell vennnk, hogy a vgjelknt bert 0 rtk ne szmtson bele az
tlagba, illetve ami fontosabb, hogy a darabszmot se nveljk vele.
SSzETETTFElADAT
8.3. Bvtskkiegykorbbiprogramunkat,amelybekriamsodfokegyenleta,b,cegytthatit,
smeghatrozzaazegyenletgyktvagygykeit,amennyibenezlehetsges!Aprogramban
kezeljnklemindenlehetsgesesetet(a=0,diszkriminnsnegatv,nulla,illetvepozitv)is!
Hasznljunkkivtelkezelst!
FElADAToK
8.4. rj programot, amely bekr kt egsz szmot s kirja a hnyadosukat s a
maradkot!Hasznljkivtelkezelst!
A fenti feladatban a nullval osztst is kezelni kell!
50 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
ProjEkTfELAdAT: ProgrAm kSZTSE
Ennek a tmakrnek az a clja, hogy az eddigi ismereteidet felhasznlva csoportmunkban
ksztsd el egy nagyobb llegzet feladat megoldst. Ennek sorn a csapatmunka mellett
el tudsz sajttani j pr olyan technikt, amely segt abban, hogy ksbb, egy cgnl dol-
gozva kpes legyl msokkal egyttmkdve megoldani nagyobb feladatokat.
AFElADAToKKzSrSzE
Amit a feladatok megoldshoz mindenkppen meg kell valstani:
A program: el kell kszteni Visual C# Express 2008 programozsi krnyezetben egy olyan prog-
ramot, amely megoldja valamelyik kitztt feladatot. Csak szintaktikailag tkletes, fordtsra s
futtatsra alkalmas program elfogadhat! Kezeljnk le minden olyan hibalehetsget, amely prob-
lmt okozhat a program mkdsben, ahol szksges, hasznljunk kivtelkezelst!
Bemutat (prezentci), plakt vagy ismertet: egy olyan anyagot is el kell kszteni, amelybl
nem csak a program funkcija, hasznlatnak mdja derl ki, hanem amely marketing clokat
is szolgl, azaz kiemeli a program hasznlatnak elnyeit, mintegy megprblja eladni a prog-
ramot. Ennek segtsgvel kell a csoport valamelyik tagjnak bemutatni a tbbieknek az elkszlt
produktumot.
Fontos megjegyezni, hogy a mintaprogramok kizrlag tmpontot nyjtanak a feladat el-
ksztshez, nem egy az egyben kell ket reproduklni, az csak a minimum! Az elkszlt
programok legyenek szebbek s jobbak a mintaprogramoknl!
SEGTSGAFElADAToKMEGolDSHoz
a listBox elemeit a listBox1.Items[i] tmbhivatkozs segtsgvel rhetjk el, gy vgig tu-
dunk menni az elemein ahhoz, hogy fjlba tudjuk ket rni. A lista elemeinek szmt a listBox1.
Items.Count tulajdonsg trolja.
Kommentet (megjegyzst) az albbi kt mdon tudunk elhelyezni a programban:
// ez csak a sor vgig tart
/* ez tetszleges szm soron keresztl tarthat */
Annak rdekben, hogy knnyebben tudjatok egytt dolgozni, az egyes funkcikat rdemes para-
mterek nlkli eljrsokba (metdusokba) rni. Ezek formja:

private void Nev()
{
// ide jn a metdus trzse
}
Metdusok meghvsa (pl. Click esemnykezelbl):
Nev();
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 51
loTTsorsols
9.1.bra.lottsorsolstszimullprogram
Ksztsnk programot, amely lottsorsolst szimull!
Kvetelmnyek:
Egy hzs alkalmval egy szm csak egyszer fordulhasson el! Alapesetben tslottt szimull-
junk, azaz t vletlenszmot lltsunk el 1 s 90 kztt.
Rendezzk a kihzott szmokat nvekv sorrendbe! A rendezsi algoritmust az Interneten tall-
hatjuk meg, pldul az albbi cmen:
Minimumkivlasztsos rendezs: http://tenger.web.elte.hu/fash/rendezesek/minkiv.htm (2010. 01.
12.)
A kihzott szmokat az brn lthat mdon egy ListBoxba vezessk, amelynek tartalmt fjlba
lehet menteni, illetve onnan betlteni s folytatni a sorsolsokat!
Tovbbfejlesztsilehetsgek:
Oldjuk meg, hogy lehessen vlasztani ts- s hatoslott kztt (azaz lehessen hat vletlenszmot
is sorsolni 1 s 45 kztt)!
Lehessen vlasztani, hogy melyik fjlba mentsen a program, illetve melyik llomnybl tltse be
az adatokat!
A program olvasson be szmokat a felhasznltl, s ellenrizze, hogy az utols sorsols alkalm-
val hny szmot sikerlt eltallni!
52 BEVEZETS A VISuAL C# 2008 HASZnLATBA TAnuLI jEGyZET 11. VFOLyAM
oszTlypnz nyIlvnTarTsa
9.2.bra.osztlypnz-nyilvntartprogram
Ksztsnk programot, amely segt az osztlyfnknek az osztlypnzt nyilvntartani!
Kvetelmnyek:
Ktfle tranzakcit engedjnk meg: be- s kifzetst. ne engedjnk meg olyan kifzetst, amelynek
nincsen fedezete!
Minden tranzakcihoz olvassuk be a nevet s az sszeget. ne engedjnk meg negatv szmot, s
kivtelkezelssel kezeljk a hibs adat bevitelt!
A vgrehajtott mveleteket az brn lthat mdon egy ListBoxba vezessk, aminek tartalmt
fjlba lehet menteni, illetve onnan betlteni s folytatni a tranzakcik feldolgozst!
Tovbbfejlesztsilehetsgek:
Troljuk el a be- s kifzetsek jogcmt s dtumt is! A jogcmeket egy kln listbl lehessen
vlasztani, amelyet tudunk bvteni is!
Lehessen vlasztani, hogy melyik fjlba mentsen a program, illetve melyik llomnybl tltse be
az adatokat!
A program ksztsen kimutatst, hogy az egyes tanulk sszesen mennyit fzettek be!
PETRIK TISZK tMOP-2.2.3-07/1-2F-2008-0011 53
ProjEkTfELAdAT: ProgrAm BEmUTATSA
Ennek a tmakrnek az a clja, hogy tmutatst adjon a program bemutatshoz, s meg-
adja az rtkels szempontjait.
A projektfeladat lezrsaknt be kell mutatni az elkszlt mveket. Az ra menete: a csapatok egyms
utn ismertetik a megoldsukat a tbbi csapattal, akik a tanrtl kapott rtkellapon pontozhatjk a
projektfeladatokat. Az ra vgn vagy kvetkez rra a pontszmok sszestsre kerlnek, s akkor
kiderl, hogy az osztly melyik csapat programjt rtkelte a legjobbnak!
A bemutat sorn nagyon fgyeljnk az rnkra, ne lpjk tl a rnk es idkeretet, mert
akkor a tbbi csapattl vesszk el a bemutats lehetsgt!
Azrtkelsszempontjai:
Kls: mennyire szp, jl hasznlhat, intuitv a program kezeli fellete.
Helyes mkds: a program a lehetsges hibkat jl kezeli, j eredmnyt ad minden esetben, nem
lehet kiakasztani.
Extrk: mennyire trt el a mintaprogramtl, illetve valstotta meg a javasolt tovbbfejlesztseket.
Itt lehet djazni, ha a program nem pusztn msolata a mintaprogramnak, hanem attl j rtelem-
ben eltr, ignyes, egyedi munka.
tlthat, szp kd: jl tagolt, kvethet, megjegyzsekkel elltott, teht egy kls ember szmra
knnyedn tovbbfejleszthet.
Marketing: mennyire ignyes, elegns bemutatt, illetve plaktot terveztek a program npszers-
tsre, milyen volt az elad, mennyire mutatta be a program rtkeit, mennyire hangslyozta az
erssgeket.
Nemzeti Fejlesztsi gynksg
MFT infovonal: 06 40 638 638
nfu@nfu.gov.hu www.nfu.hu