strukturalt programozas c#

of 103 /103
Készítette: Subecz Zoltán, Szolnoki Főiskola, http://suzo.uw.hu, [email protected] Strukturált programozás C# Console módban Házi feladat: Néhány példához folyamatábrát és algoritmust - pszeudokódot készíteni. Többhöz pszeudokódot és kevesebbhez folyamatábrát. Tartalomjegyzék Bevezetés............................................................ 2 1. Alapok............................................................ 4 2. Tömbök........................................................... 21 3. Néhány kiegészítő példa.......................................... 29 4. Karakter típus................................................... 35 5. Karakterláncok ( Stringek )......................................38 6. Metódusok, Eljárások, függvények.................................45 7. ArrayList – List ( lista ).......................................54 8. Struktúra ( Rekord, Struct ).....................................57 9. Fájlkezelés...................................................... 59 10. Kivételkezelés.................................................. 65 11.Lépésenkénti futtatás-Nyomkövetés................................70 12. Egyéb........................................................... 71 Ajánlott irodalom: - James Foxall: Tanuljuk meg a Visual C# 2008 használatát 24 óra alatt Kiskapu Kiadó A Főiskola könyvtárában és a Jegyzetboltban is megtalálható. http://csharptk.ektf.hu Reiter István: C#: http://people.inf.elte.hu/reiter_i/sharp.html http://devportal.hu/content/CSharpjegyzet.aspx Illés Zoltán könyve: Google: illés zoltán c# filetype:pdf http://compalg.inf.elte.hu/~tony/Informatikai-Konyvtar/09-Programozas %20C-sharp%20nyelven/Programozas-Csharp-nyelven-Konyv.pdf 1

Author: csirkemell

Post on 26-Dec-2015

245 views

Category:

Documents


20 download

Embed Size (px)

TRANSCRIPT

Ksztette: Subecz Zoltn, Szolnoki Fiskola, http://suzo.uw.hu, [email protected]

Strukturlt programozsC# Console mdban

Hzi feladat:Nhny pldhoz folyamatbrt s algoritmust - pszeudokdot kszteni.Tbbhz pszeudokdot s kevesebbhez folyamatbrt.TartalomjegyzkBevezets21. Alapok42. Tmbk213. Nhny kiegszt plda294. Karakter tpus355. Karakterlncok ( Stringek )386. Metdusok, Eljrsok, fggvnyek457. ArrayList List ( lista )548. Struktra ( Rekord, Struct )579. Fjlkezels5910. Kivtelkezels6511.Lpsenknti futtats-Nyomkvets7012. Egyb71

Ajnlott irodalom:

- James Foxall: Tanuljuk meg a Visual C# 2008 hasznlatt 24 ra alattKiskapu KiadA Fiskola knyvtrban s a Jegyzetboltban is megtallhat.

http://csharptk.ektf.hu

Reiter Istvn: C#:http://people.inf.elte.hu/reiter_i/sharp.htmlhttp://devportal.hu/content/CSharpjegyzet.aspx

Ills Zoltn knyve:Google: ills zoltn c# filetype:pdfhttp://compalg.inf.elte.hu/~tony/Informatikai-Konyvtar/09-Programozas%20C-sharp%20nyelven/Programozas-Csharp-nyelven-Konyv.pdf

C# mesteri szinten 21 nap alatt.rarInterneten tbb helyrl letlthet. => Googlepl.http://eduzso.freeiz.com/files/masodik_ev/I/prog1-2/C%20mesteri%20szinten%2021%20nap%20alatt/

http://dragon.ektf.hu/ebooks/ => Magasszint Programozsi Nyelvek I. Feladatgyjtemny

Chuck Sphar-Stephen Randy Davis: C# 2008Tantusz Knyvek sorozat, Panem Kiad

http://hu.wikipedia.org/wiki/C_Sharp_programoz%C3%A1si_nyelvhttp://csharp.lap.huhttp://nyelvek.inf.elte.hu/leirasok/Csharp/index.phpBevezets

Sok fajta programozsi nyelv van. Ilyen nyelv az SQL is, amit mr megismertek. Vannak specilis cl programozsi nyelvek, amelyeket egy rszterletre fejlesztettek ki, s vannak ltalnos cl programozsi nyelvek. http://hu.wikipedia.org/wiki/Programoz%C3%A1si_nyelvhttp://hu.wikipedia.org/wiki/Programoz%C3%A1si_nyelvek_kateg%C3%B3ri%C3%A1k_szerinthttp://wiki.prog.hu/wiki/Programoz%C3%A1si_nyelvhttp://wiki.prog.hu/wiki/Programoz%C3%A1si_nyelvek_list%C3%A1jahttp://wiki.hup.hu/index.php/Programoz%C3%A1si_nyelvhttp://programozas.lap.hu

A C# korszer, modern a Microsoft ltal kifejlesztett programozsi nyelv. A C# napjaink egyik kedvelt programozsi nyelve. A Windows programozshoz fejlesztettk ki. Mivel a teljes Windows programozsra alkalmas, ezrt ilyen nagy mret. Nhny msik npszer nyelv:Pascal nyelv: http://hu.wikipedia.org/wiki/Pascalhttp://pascal.lap.hu/Egy ingyenes Pascal fejleszt s fordt:www.freepascal.org

C++ nyelv: http://hu.wikipedia.org/wiki/C%2B%2Bhttp://cplusplus.lap.hu/Egy ingyenes C++ fejleszt s fordt:Dev C++: http://www.bloodshed.net/devcpp.html

A C# nem egybl a processzor szmra azonnal futtathat natv kdot fordt, hanem egy gynevezett kztes kdot a .NET keretrendszer szmra.(Teht hasonlan mkdik, mint a Java )

A C# (a Visual Basic mellett) a .NET keretrendszer egyik f programozsi nyelve.

A .NET az XP-ben mg nincs alapbl benne, de a Vistban mr benne van. A C# teleptsekor automatikusan felteszi a .NET keretrendszert XP-nl is. De ha egy msik gpen szeretnnk futtatni programunkat, amelyiken XP van, akkor a .NET keretrendszert eltte fel kell telepteni. Az .NET ingyenesen letlthet a www.microsoft.com honlaprl.A .NET keretrendszernek is van tbb verzija.Keresbe berva: .net framework => megadja a pontos letltsi helyet.

.net framework 3.0 => Windows XP SP2 kell hozz.net framework 4.0 => Windows XP SP3 kell hozz

A .NET keretrendszerben is benne van a C# fordt. (C# compiler) (csc.exe). gy a programjaink fordtst a Visual Studio fejlesztkrnyezet nlkl is meg tudnnk oldani. ( Lsd. 1. fejezet: Alapok vge )gy az 500Mb felteleptse helyett (Visual Studio) elg lenne a 3Mb ( .NET ) felteleptse is.A grafikus programok ksztst is meg tudnnk oldani a Visual Studio fejlesztkrnyezet nlkl is.De mivel a grafikus programok ksztshez nagyon hasznos a grafikus fejleszt krnyezet, ezrt otthonra is teleptsk fel az ingyenes C# fejleszt krnyezetet:http://www.microsoft.com/visualstudio/en-us/products/2008-editions/expressInnen elg csak a Visual C# 2008 Express Edition t feltelepteni.

http://hu.wikipedia.org/wiki/C_Sharp_programoz%C3%A1si_nyelvoldalrl:

C#

A C# a Microsoft ltal a .NET keretrendszer rszeknt kifejlesztett objektumorientlt programozsi nyelv. A nyelv alapjul a C++ s a Java szolglt. A C#-ot gy terveztk, hogy meglegyen az egyensly a fejleszt nyelvi szabadsga s a gyors alkalmazsfejleszts lehetsge kztt.

A C# nagyon hasonlt a Java nyelvhez, de knnyebb a hasznlata.

A C# az a programozsi nyelv, ami a legkzvetlenebb mdon tkrzi az alatta mkd, minden .NET programot futtat .NET keretrendszert, valamint ersen fgg is attl: nincsen nem menedzselt, natv mdban fut C# program. A primitv adattpusai objektumok, a .NET tpusok megfeleli. Szemtgyjtst hasznl, valamint az absztrakciinak tbbsge (osztlyok, interfszek, delegltak, kivtelek) a .NET futtatrendszert hasznlja kzvetlen mdon.

A C-hez hasonlan a kis- s nagybetk itt is klnbznek, teht ValtozoNev s a valtozonev kt klnbz dolgot jelent majd.(ez a pascalosok szmra lehet majd zavar, de meg lehet szokni)

1. Alapok

Bevezets: A C# futtatst, fordtst 2 mdon tehetjk meg:a, A C# fejleszt krnyezettel.b, A fejlesztkrnyezet nlkli csc.exe-vel Mivel a .NET keretrendszerben is benne van a C# fordt. (C# compiler) (csc.exe). Ezrt a programjaink fordtst a C# fejlesztkrnyezet nlkl is meg tudnnk oldani.A Visual Studio C# fejlesztkrnyezetet nem is kellene hozz feltelepteni csak a .NET keretrendszert.Aki akarja, vlaszthatja a fordtsnak ezt a mdjt rn is.( 1. fejezet vgn megnzzk.)a, A C# fejleszt krnyezettel:C# indtsa utn:File men/ New Project / Console ApplicationAdjunk nevet a projectnek, elrsi utat, majd kattintsunk az OK gombra

VAGY: File men/ New Project / Console Application utn:File men => Save All => Knyvtr kivlasztsa

Ez, vagy ehhez hasonl jelenik meg a szerkeszti ablakban:

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace ConsoleApplication1{ class Program { static void Main(string[] args) { } }}

Ebbl elszr sok minden elhagyhat, de benne is maradhat minden.

1/1. pldaLegegyszerbb fut C# program:

class proba { static void Main() {

} }

class: osztly megadsa ( majd az Objektumorientlt Programozs, OOP tantrgyban lesz rszletesen. )nevet kell adni az osztlynak, itt probaOsztlydeklarci megadsa. Publikus, azaz brmely ms projekt szabadon hasznlhatja az osztlyt.

void: eljrs ( az OOP-ben metdusnak hvjk )static: az OOP-hez ( class, osztly ) kapcsold fogalom. Majd ott megnzzk.

{}: rszek sszefogsa, csoportosts

Main(): a program f eljrsa ( metdusa ).Ez a program belpsi pontja, ahol a program vgrehajtsa megkezddik.

Futtats: Debug men/Start Debuging, vagy F5, vagy Start Debuging ikon az eszkztron.

fut - nem r ki semmit - visszaugrik a szerkeszt kpernyre.

1/2. Pldarassuk ki a kpernyre, hogy Hello, s vrjon billentyletsre.

class proba2 { static void Main() { System.Console.WriteLine("Hello"); System.Console.ReadLine(); } }

System egy elre definilt nvtr ( namespace )Nvtr: OOP-ben lesz rla szA rendszer ltal tartalmazott utastsokat itt trolja.Console: A System nvtr egy osztlya, amit a Console Alkalmazsoknl (Console Applications ) az Inpu/Outputra hasznlunk.A Console egy rendszerobjektum, ami egy parancssort jelkpez. A Console objektum WriteLine metdusnak meghvsa a paramterknt tadott szveget kirja a parancssorba.

WriteLine: A Console osztly eljrsa ( metdusa ), a paramterknt tadott szveget kirja a parancssorba.+ soremels!ReadLine: hasonlan: egy sor szveget olvas be a billentyzetrl.itt hasznlata: Enter letsre vr.A System.Console.ReadLine(); utasts nlkl: kirn a szveget a kpernyre, de visszaugrana a szerkeszt kpernyre.

Ha a program elejre kirjuk, hogy using System;, akkor az utastsok el nem kell kirni, hogy System.:

using System; class proba2 { static void Main() { Console.WriteLine("hello"); Console.ReadLine(); } }

1/3. Plda rjuk ki egyms al 3 sorba: Hello1, Hello2, Hello3

using System; class proba2 {static void Main() { Console.WriteLine("Hello1\nHello2\nHello3"); Console.ReadLine(); }}

Az egyszersg miatt a Main()-en kvli rszt nem rom ki.

1/4. PldaVegynk fel 2 egsz vltozt: b=5,a=3rassuk ki 5 sorba: Hello1,a-vltoz,Hello2,b-vltoz,Hello3

static void Main() { int b=5,a=3;// A tisztn OOP nyelvekben (mint a C# s a Java), minden objektum// adattagok + metdusok// Egy egyszer vltoz is.// Ha itt berjuk, hogy a.akkor egybl mutatja a metdusait. Console.WriteLine("Hello1\n"+a+"\nHello2\n"+b+"\nHello3"); Console.ReadLine(); }

1/5.pldarassuk ki 10-szer egyms al, hogy Hello, majd Enter lets utn kpernytrls, majd rassuk ki 1-tl 15-ig az egszeket egyms al.

static void Main() { int a; for(a=1;aa= 7 b=3 (2 sorban)Console.WriteLine("a= {0}\nb= {1}",a,b);// mint az elzConsole.WriteLine(a/b); // -> 2Console.WriteLine((double) a/b); // -> 2,333333333333333

double c;c = 7;Console.WriteLine(c/b); //-> 2,333333333333333

c = a / b; Console.WriteLine(c); //-> 2Console.WriteLine((double) c); //-> 2

c = (double) a / b;Console.WriteLine(c); //-> 2,333333333333333

Console.ReadLine(); }

1/13.pldaSzmtsuk ki 1-tl 25-ig a szmok tlagt, s rassuk ki.

static void Main() { int a,osszeg = 0; for (a = 1; a Kosarlabda.zip => jatekos.txt fjl tartalmt rassa ki a kpernyre- Az elz pldban a fjl soraiban az adatok tabultorral vannak tagolva. (Ez Jegyzettmbben is lthat!)Olvassa be az adatokat egy tmbbe. (Sztring tpus tmb) (Split-el darabolni)A tmbnek annyi sora legyen, mint amennyi adatsor van a fjlban. ( Ezt programmal szmoltassa meg elszr)Majd szmtsa ki a magassgok tlagt, s rassa ki az tlagot.

10. Kivtelkezels

A C# nyelv a futsidej hibk kiszrsre alkalmas eszkzt is tartalmaz, mely eszkzsegtsgvel a programjainkba hibakezel (kivtel kezel) kdrszleteket pthetnk.A kivtel kezel eljrsok lnyege, hogy elkerljk a futs kzbeni hibk esetn felbukkanhibazeneteket, s megvdjk programjainkat a vratlan lellstl.

A try s a catch

A try parancs segtsgvel a programok egyes rszeihez hibakezel rutinokat rendelhetnk,melyek hiba esetn az ltalunk megrt hibakezel eljrsokat hajtjk vgre, s ami nagyonfontos, megakadlyozzk a program lellst.A catch segtsgvel azokat a kivteleket kaphatjuk el, melyek a try blokkban keletkeznek. Itthatrozhatjuk meg, hogy milyen rutinok fussanak le s hogyan kezeljk a felmerl hibkat.

Kivtelkezels nlkl a program a hiba helyn megszakad.

Kivtelkezels:A program futsa nem szakad meg hibs mkds esetn, hanem egy msik programrszlet hajtdik vgre.

10.1 Pldausing System;class elso{ static void Main() { try { Console.WriteLine("Hello1"); int[] tomb1 = new int[10]; tomb1[15] = 3;// A 10 elem tmb 15. elemre hivatkozunk Console.WriteLine("Hello2"); } catch (Exception e) { Console.WriteLine("hiba: " + e.Message); } finally { Console.WriteLine("Hello3"); Console.ReadKey(); } }}A kvetkezt rja ki:Hello1hiba: Index was outside the bounds of the arrayHello3

A finally blokkban elhelyezett kd mindig lefut, fggetlenl az eltte keletkezett hibktl.(kivve ha a program vgzetes hibval ll le.)Az elz programban ez is j:---------------------- catch (Exception) { Console.WriteLine("hiba: "); }----------------------

Ilyenkor a kirs:

Hello1hiba: Hello3

vagy (Exception) nlkl:

---------------------------------- catch { Console.WriteLine("hiba: "); }----------------------------------A kirats ugyanaz.

A catch blokkban definilt hibakezel rsz lefut, vagyis a kpernyn megjelenik a hibazenet.Abban az esetben, ha nem hasznljuk a hibakezel eljrsokat, a programunk lell, s ahiba kezelst a .NET vagy az opercis rendszer veszi t. Ebbl a pldbl is jl lthatmilyen nagy szksg lehet a kivtelkezelre, ha jl mkd programokat akarunk rni.Fokozottan rvnyes ez azokra a programokra, ahol a felhasznl adatokat visz be.A kvetkez programban erre lthatunk pldt. Amennyiben az inputrl nem megfeleladatok rkeznek, mkdsbe lp a kivtel-kezels, a catch blokkban elkapjuk a hibt skirjuk az okt a kpernyre.

10.2 Plda

using System;class Program{ static void Main() { try { Console.WriteLine("Adj meg egy egszet!"); int i = Convert.ToInt32(Console.ReadLine()); } catch (Exception e) { Console.WriteLine(e.Message); } Console.ReadLine(); }}

Ha a beolvassnl nem egsz szmot adunk meg, hanem pl. egy szveget, akkor a kvetkez hibazenetet kapjuk:Input string was not in a correct format.

10.2/B PldaMint az elz plda, de addig olvassuk be az adatot, amg nem egsz jn.Ha egsz jn, akkor rjuk ki a ktszerest.

class Program{ static void Main() { bool ujra = true; Console.WriteLine("Adj meg egy egszet!"); while (ujra) { try { int i = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("A szm ktszerese: "+2 * i); ujra = false; } catch (Exception e) { Console.WriteLine("Nem egszet adtl meg! Prblkozz jra!"); } } Console.ReadLine(); }}

Az elz pldban a try blokkban elfordul brmely hiba esetn ugyanaz a hibazenet jelenik meg a kpernyn.A catch blokkban lehetsgnk van a klnbz okok miatt keletkezett hibksztvlasztsra, a hiba tpusnak meghatrozsra.

A System nvtrben rengeteg kivtel tpust definiltak. A fontosabbakat az albbitblzatban foglaltuk ssze:

Kivtel neve Lersa

MemberAccesException Tagfggvny hozzfrsi hiba

ArgumentException Hibs tagfggvny-paramter

ArgumentNullException Null rtk tagfggvny paramter

ArithmeticException Matematikai mvelet-hiba

ArrayTypeMismatchException Tmbtpus hibja (rtk trolskor)

DivideByZeroException Nullval val oszts

FormatException Hibs paramter-formtum

IndexOutOfRangeException Tmb tl, vagy alulindexelse

InvalidCastException rvnytelen tpus talakts

NotFiniteNumberException A keletkezet rtk nem vges (hibs szmalak)

NullReferenceException Null rtkre val hivatkozs

NotSupportedException Nem tmogatott tagfggvny

OutOfMemoryException Elfogyott a memria

OverflowException Tlcsorduls (checked esetn)

StackOverflowException Verem tlcsorduls

TypeInitializationException Hibs tpus bellts (static konstruktornl)

10.3 Plda

A Matematikai mvelet-hibra egy plda:

using System;class Program{ static void Main() { int a = 0; double c; try { c = 10 / a + 30; } catch (ArithmeticException ar) { Console.WriteLine("Aritmetikai hiba : "+ar); Console.ReadLine(); }

}}

0-val val osztsra egybknt egy hibazenet ablak jelenik meg.

Kivtelek feldobsa - throw

A C# nyelv lehetsget ad a sajt magunk ltal definilt kivtelek hasznlatra is. A kivtelekdobsa a throw kulcsszval trtnik.Nemcsak a keretrendszer lthatja azt, hogy a normlis utasts vgrehajtst nem tudja folytatni, ezrt kivtelt generl, s ezzel adja t a vezrlst, hanem maga a programoz is. Hogy a programoz mikor ltja szksgesnek a kivtel generlst, az r van bzva.

10.4 Plda

using System;class Program{ static void Main() { Console.WriteLine("Adj meg egy nem negatv szmot!"); double i=Convert.ToDouble(Console.ReadLine()); try {

if (i>=0) Console.WriteLine("A szm gyke= "+Math.Sqrt(i)); else throw new Exception(); // ha i=0) Console.WriteLine("A szm gyke= "+Math.Sqrt(i)); else throw new Exception("Hibs szmot rtl be."); // ha i Windows => => Locals: minden loklis vltozt mutat=> Watch: egyesvel meg lehet adni vltozkat

Trspontok elhelyezse.Debug men => Toggle BreakpointA kurzor helynl elhelyez egy trspontot.A trspontoknl megll a program vgrehajtsa.

12. Egyb

Halmaz HashSet

using System.Collections.Generic;

static void Main(string[] args) { HashSet szamok = new HashSet(); Console.WriteLine(szamok.Count); szamok.Add(5); Console.WriteLine(szamok.Count); szamok.Add(5); Console.WriteLine(szamok.Count); szamok.Add(7); szamok.Add(9); Console.WriteLine(szamok.Count); foreach (int i in szamok) { Console.Write(" {0}", i); } Console.WriteLine(); int a = 7; if (szamok.Contains(a)) Console.WriteLine("Benne van."); else Console.WriteLine("Nincs benne."); szamok.Remove(5); Console.WriteLine(szamok.Count);

// Vannak halmaz mveletek: // Unio: szamok.UnionWith // Metszet: szamok.IntersectWith // Tmbb letet konvertlni: // int[] tomb = hash.ToArray()

// s sok egyb mvelet. Console.ReadLine(); }

Queue Sor

Sorba => => Sorbl

FIFO modell: First In First OutAmit elszr betettnk a sorba, azt tudjuk onnan kivenni.Fbb mveletek:Enqueue A sorba betesz egy rtketDequeue Sorbl kivesz egy rtket.

using System;using System.Collections;class Program{ static void Main() { Queue sor = new Queue(); sor.Enqueue("Hello1"); sor.Enqueue("Szia"); sor.Enqueue(153); foreach (object o in sor) Console.WriteLine(o); Console.WriteLine("\nA sor elemeinek a szma= " + sor.Count); sor.Dequeue(); foreach (object o in sor) Console.WriteLine(o); Console.WriteLine("\nA sor elemeinek a szma= " + sor.Count); Console.ReadLine(); }}

Kirja: Hello1Szia153.Szia153

Valban az elsnek betett elemet trlte ki.

Felsorols tpus - Enum

A felsorolt tpus olyan adatszerkezet, amely meghatrozott rtkek nvvel elltott halmazt kpviseli. Felsorolt tpust az enum kulcssz segtsgvel deklarlunk, a Main()-en kvl.

A felsorols minden tagjnak megfeleltethetnk egy egsz (numerikus) rtket. Ha mst nem adunk meg, akkor alaprtelmezs szerint a szmozs nulltl kezddik s deklarci szerinti sorrendben (rtsd: balrl jobbra) eggyel nvekszik.

class Program { enum szinek { piros, kk, zld, srga }; enum betuk { a = 'a', b = 'b' }; enum jszinek { piros = 4, kk = 7, zld = 8, srga = 12 }; static public void Main() { szinek sajatszin = szinek.zld; Console.WriteLine(sajatszin+" "+(int)sajatszin+"\n"); // kirja a sznt //ciklus a szneken trtn vgighaladsra for (jszinek i = jszinek.piros; i