Szoftvertechnológia I. segédanyagok

Eredmények

csharp.pdf Reiter István ELTE-s hallgató könyyve a Devportalról
csharp_jegyzet.doc Egyetemi jegyzet:
     
Visual Studio letöltés: innét, a Visual Studio IDE 2017 Community változatára lesz szükség

Követelmények

1. Hét - Bevezetés

Előadás anyaga:


Szofttech első előadás.pptx Rövid összefoglaló a fordítókról, értelmezőkről és a köztes nyelvekről.
TípusMemóriaigényLeírás
byte1 byteElőjel nélküli 8 bites egész szám(0..255)
char2Egy Unicode karakter
bool1 Logikai típus, értéke igaz(1 vagy True)vagy hamis(0 vagy False)
sbyte1Előjeles, 8 bites egész szám (-128..127)
short 2 Előjeles, 16 bites egész szám (-32768..32767)
ushort2Előjel nélküli, 16 bites egész szám(0..65535)
int4 Előjeles, 32 bites egész szám (–2147483648.. 2147483647).
uint4Előjel nélküli, 32 bites egész szám(0..4294967295)
float4Egyszeres pontosságú lebegőpontos szám (kb. 7 decimális számjegy pontosság)
double8Kétszeres pontosságú lebegőpontos szám (kb. 15-16 decimális számjegy pontosság)
decimal16Fix pontosságú 28+1 jegyű szám
long8Előjeles, 64 bites egész szám
ulong8Előjel nélküli, 64 bites egész szám
stringN/AUnicode karakterek szekvenciája

Gyakorlatra:

Az alapok - a fejlesztőkörnyezet bemutatása
(Szerintem már túl vagytok rajta, de azért feltöltöttem)

[1] [2] [3] [4] [5] [6]
(összesen 30 perc)

Másodfokú egyenlet megoldása
(típuskonverzióra és feltételes elágazásra példa)
Űrlaptervezés 3:48
Típuskonverzió 2:02
Gyökök számítása 4:24
Egyforma gyökök elrejtése 2:37
(Össesen 13 perc)

Kör kerületésnek és területének kiszámolása
[első lépések] 6:25
[értékek kerekítése]* 3:24
[kivételkezelés]* 3:02
(Össesen 13 perc)

  Sprint kérdések:

  1. Elemi változótípusok memóriaigénye és értékkészlete a fenti lista alapján. (int, uint, long és ulong esetén elég a nagyságrend.) Például:
    • Melyik elemi változótípus alkalmas szöveg tárolására?
    • Írj egy elemi változótípust, mely tört szám tárolására alkalmas!
    • Írj egy elemi változótípust, mely csak egész szám tárolására alkalmas!
    • Milyen értékeket vehet fel egy bool típusú változó?
    • Milyen értékeket vehet fel egy byte típusú változó?
    • Hány byte memóriát foglal egy int/bool/char/stb. típusú változó?
    • stb.
  2. Mi hiányzik ahhoz, hogy az alábbi kódrészlet működjön?

    double a = ____________ (textBox1.Text);
  3. Mi hiányzik ahhoz, hogy az alábbi kódrészlet működjön?

    double b=3.14;
    textBox1.Text = b.____________;
  4. Hogyan rendelhetünk legegyszerűbben esemény-kiszolgáló függvényt egy gomb kattintás eseményéhez?
  5. Mely billentyűkombinációkkal válthatsz kód és tervezőnézet között Visual Studio-ban?
  6. Milyen előnyei, illetve hátrányai vannak köztes nyelvek használatának?
  7. A fentiekhez hasonló kérdések a Word dokumentum és a típusokat tartalmazó táblázat alapján.

2. hét

Sprtint kérdések:

Alábbi, illetve hasonló kódrészletek futási eredménye:

1.  byte a=0; Console.WriteLine(a);

2.  byte b = 0; b++;  Console.WriteLine(b);

3.  byte c = 255; c++; Console.WriteLine(c);

4.  byte d = 255; d+=5; Console.WriteLine(d);

5.  short f = 32767; f++; Console.WriteLine(f);

6.  double g1 = 1; double g2 = 0; double g3 = g1 / g2; Console.WriteLine(g3);

7.  double h1 = -13; double h2 = 0; double h3 = h1 / h2; Console.WriteLine(h3);

8.  float i1 = -13; float i2 = 0; float i3 = i1 / i2; Console.WriteLine(i3);

9.  (X) decimal j1 = -13; decimal j2 = 0; decimal j3 = j1 / j2; Console.WriteLine(i3);

10. Console.WriteLine(byte.MaxValue);

11. Console.WriteLine(int.MaxValue);

12. Console.WriteLine(double.MaxValue);

13. double k = double.PositiveInfinity; Console.WriteLine(k / k);

14. if (k==double.PositiveInfinity) Console.WriteLine("Tényleg végtelen");

15. double l1 = 5.6; int l2 = (int)l1; Console.WriteLine(l2);

16. double l3 = 5.6; int l4 = (int)Math.Round(l3); Console.WriteLine(l4);

17. string s = i1.ToString();

18. (X) byte m = null;

19. byte? m = null; Console.WriteLine(m);

valamint

  1. Mi a különbség az "=" és az "==" operátorok között?
  2. Írd le azt a néhány kódsort, mely Gomb néven osztályt származtat a Button osztályból!
  3. i=1; i++; Messagebox.Show(i.ToString()); Mi jelenik meg a képernyőn?
  4. Egészítsd ki az alábbi kódrészletet: int x = 13; label1.Text=x.__________________
  5. Egészítsd ki az alábbi kódrészletet: int tipp = _____________(textbox1.Text);

 

Tippek:

 

 

3. hét

Kiegészítő videók:

2a Speech-2.m4v
3a Timer Bemutatasa-3.m4v
3b Sajat Osztaly-4.m4v
3c Egyszeru Orokles-5.m4v
3d Szarmaztatas-6.m4v
3e Konstruktor-7.m4v
3f Projekt Felépítése-8.m4v
3g Cs Fájl-9.m4v

Sprint kérések:

  1. Mire való az űrlap konstruktorában az InitializeComponent() metódushívás?
  2. Írd le azt a néhány kódsort, mely Gomb néven osztályt származtat a Button osztályból!
  3. Mikor fut le egy osztály konstruktora?
  4. Hogyan készítesz konstruktort egy osztályhoz?
  5. Írd le azt a néhány kódsort, mely létrehozza a Button osztály egy példányát, majd elhelyezi az űrlapon!
  6. Írd le azt a néhány kódsort, mely SajátGomb néven származtat egy osztályt a Button osztályból!
  7. Írj példát for ciklusra!

1. feladat gyakorlatra - tanári segítséggel:

  1.  Hozz létre KÓDBÓL "gomb" néven egy példányt a Button osztályból, és add hozzá az űrlap vezérlőinek listájához!
  2.  Állíts be méretet a gombnak!
  3. Állítsd be a gomb Left és Top tulajdonságát úgy, hogy pont középre kerüljön az ablakban!
  4. Rakj ki 10 gombot egymás mellé az űrlapra for ciklusból!
  5. Egészítsd ki az előző feladatot úgy, hogy 10x10 gomb legye kint!
  6. Csinálj szorzótáblát; jelenítsd meg a gombokon a számokat.
  7. Származtass VillogóGomb néven osztályt a Button osztályból! (A kódot írhatod a Form1 osztály alá.)
  8. Hozz létre konstruktort a VillogóGomb osztályban! (ctor - tab - tab)
  9. A konstruktorban rendelj eseménykiszolgálót a MouseEnter és a MouseLeave eseményekhez!  (+=  - tab - tab)
  10.  Az eseménykiszolgálókban állítsd be a gomb színét.
  11. Cseréld le a szorzótábla gombjait VillogóGomb-ra!
  12. :)

Gyakorló feladat: színeződő gomb - önálló munka

  1. Származtass osztályt a Button osztályból SzíneződőGomb néven!
  2. Konstruktorbán a SzíneződőGomb méretezze át magát 20x20 pixelesre a Button osztálytól örökölt Height és Width tulajdonságának beállításával!
  3. A SzíneződőGomb konstruktorában rendelj eseménykiszolgáló függvényt a kattintás (Click) eseményhez!
  4. Kattintásra a SzíneződőGomb színezze magát fukszia színűre.

Gyakorló feladat: számoló gomb - önálló munka

  1. Származtass osztályt a Button osztályból SzámolóGomb néven!
  2. A SzámolóGomb osztályt bővítsd konstruktorral!
  3. Konstruktorbán a SzámolóGomb méretezze át magát 20x20 pixelesre a Button osztálytól örökölt Height és Width tulajdonságának beállításával!
  4. Bővítsd a Számolódomb osztályt int típusú „szám” nevű mezővel!
  5. A Számolódomb konstruktorában rendelj eseménykiszolgáló függvényt a kattintás (Click) eseményhez!
  6. Az előbb létrehozott eseménykiszolgáló függvényben növeld egyel a „szám” mező értékét, majd jelenítsd meg az új értéke a gomb felirataként (Text tulajdonság beállítása.)
  7. Végül helyezz el az űrlapon 10x10 számológombot.
  8. Módosítsd a SzámolóGomb osztályt úgy, hogy az 1-es értékről induljon a számolás!
  9. Módosítsd a SzámolóGomb osztályt úgy, hogy az 5-ös szám után az 1-es jelenjen meg!

Gyakorló feladat: gombok kirakása véletlenszerűen

  1. Szervezz for ciklust 100 iterációs lépéssel. Minden lépésben rakj ki egy gombot a képernyőn véletlenszerű, de az ablakba eső pozícióba.
  2. A méret is legyen véletlen.
  3. A szín is.

Gyakorló feladat: gombok kirakása háromszögben (ismétlés)

  1. Rakd ki egy 10x10-es gombokból álló mátrix gombjait úgy, hogy csak a főátlóban lévők és a főátló alattiak jelenjenek meg!

Gyakorló feladat: gombok kirakása "karácsonyfában" (ismétlés)

  1. Helyezz el gombokat 10 sorban úgy, hogy minden sorban egyel több gomb legyen: az elsőbe egy, a másodikban kettő, a harmadikban három, stb. Tipp: a belső ciklus bennmaradási feltételében felhasználhatod a külső ciklus ciklusváltozójának értékét.
  2. Minden gomb legyen 20x20 pixel méretű.
  3. Told el a gombok Left tulajdonságon keresztül beállított vízszintes koordinátáját úgy, hogy a gombokból álló háromszög bal széle az ablak középvonalába essen. Tipp: az ablak szélességét a Width tulajdonságán keresztül tudod kiolvasni. Ha a gombok Left tulajdonságának beállításánál Width/2 értéket hozzáadsz a korábban számított értékhez.
  4. Minden sorban egyre jobban húzd balra a koordinátákat úgy, hogy kijöjjön a karácsonyfa.

4. hét - Első ZH

A ZH gépteremben történő önálló feladatmegoldás Visual Studió környezetben. Az elkészült solution-t Moodle rendszeren keresztül kell leadni ZIP állományba tömörítve. (RAR, 7z és egyéb formátumokat nem fogadunk el.) Fontos, hogy a teljes solution mappát betömörítsétek, különben a leadott munka nem értélhető. A ZH-k ideje alatt a géptermek Internet elérése korlátozva lesz. Ha a leadott projekt nem fordítható le, a részfeladatokra adott pontok összegéből 10% levonásra kerül. A megjegyzésben szereplő kódrészleteket nem értékeljük.

5. hét - Képkirakós játék

Képkirakós játék:

lo.zip Kiinduló képek  
1 Vonszolható gomb kíserlet Előadás anyaga  
2 mozgatható képkocka származtatása    
3 5x5 keépkocka kirakasa    
4 kód csinosítása    
kepkirakos megoldas.zip Megoldás  
 
Sprint kérdések:
  1. Hány közvetlen őse lehet C#-ban egy osztálynak?
  2. Hol lehet átírni, hogy melyik űrlappal induljon az alkalmazás?
  3. Írd le azt a kódrésztelet, amit 10x10 gombot kirak az űrlapra!
  4. Sorolj fel 5-öt a Form osztály tulajdonságai közül!
  5. Sorolj fel 2-öt a Form osztály metódusai közül!
  6. Sorolj fel 5-öt a Form osztály eseményai közül!
  7. Melyik osztálytól ötököl a Példa osztály?
    class Példa {...}
  8. Mikor következnek be az alábbi események pl. egy gomb esetén?
    - MouseUp
    - MouseDown
    - MouseMove
    - MouseEnter
    - MouseLeave
  9. Példaként adott az alábbi esemény-kiszolgáló függvény. Milyen információt hordoz az e paraméter?

void b_MouseDown(object sender, MouseEventArgs e)
{
...
}

A feladatmegoldás lépései gyakorlatra:

Első fázis – új osztály származtatása

  1. Származtass osztályt a PictureBox osztályból Képkocka néven!
  2. Az új Képkocka osztályt bővítsd konstruktorral!
  3. A konstruktorban a Képkocka osztály színezze magát fukszia színűre, valamint állítsa be saját szélességét és magasságát 76 pixelre!
  4. Fordítsd le az alkalmazást. Pl. futtasd és állítsd le. Fordítás után a Tollbox-on meg kell jelennie a Képkocka vezérlőnek, melyet a többihez hasonlóan tervező nézetben is elhelyezhetsz a űrlapon. Próbáld ki!

Második fázis – mozgatható gomb

  1. A Képkocka konstruktorában rendelj esemélykiszolgáló függvényeket a MouseDown, a MouseUp és a MouseMove eseményekhez! (Ezeket a Képkocka osztály a PictureBox osztálytól örökölte.)
  2. A Képkocka osztályt bővítsd egy ox és egy oy nevű int típusú változóval! Ebben tároljuk majd azt a koordinátát, ahol az egér a gomb lenyomásakor tartózkodott a gombon belül.
  3. A Képkocka osztályt bővítsd egy mozoge nevű bool típusú változóval, melynek kezdőértéke false!
  4. A MouseDown eseményhez tartozó eseménykiszolgálóban állítsd be ox és oy értékét e.X illetve e.Y érékére, és állítsd a mozoge változó értékét igazra!
  5. A MouseUp eseményhez tartozó eseménykiszolgálóban nincs más teendő, mint a mozoge változó értékét hamisra állítani.
  6. A MouseMove eseményhez tartozó eseménykiszolgálóban csak akkor csinálunk valamit, ha a mozoge változó értéke igaz. Hozd létre a feltételes szerkezetet! (if..)
  7. Ha a fenti feltétel teljesül, tolja el (+=) a Képkocka az X koordinátáját (Left tulajdonság) ox-e.X képponttal, valamint az Y koordinátáját (Top tulajdonság) oy-e.Y képponttal!
  8. Próbáld ki, mit csináltál: az előző fázis végén tervezőben kihelyezett gombnak most vonszolhatónak kéne lennie.

Harmadik fázis – lovas kirakós

  1. Először rakj ki 5x5 Képkockát egymástól 76 pixeles távolságra! (Két egymásba ágyazott ciklus a Form1 konstruktorában.)
  2. Vezess be egy int típusú, sorszám nevű változót a ciklusok előtt!
  3. A sorszám változó értékét a belső ciklus törzsének utolsó lépéseként növeld egyel! Így, amikor kiraksz egy Képkockát, rendelkezésedre áll egy változó, melyből tudod, hogy épp hányadik képkockát rakod ki.
  4. Töltsd le a lo.zip állományt, és csomagold ki egy mappába. A mappában lévő képetek másold be az projekten belül lévő bin/debug mappába, ide hozza majd létre a fordító a futtatható .exe állományt. Ha az alkalmazásban nem adsz elérési utat egy fájlnévhez, alapértelmezésben az .exe mellett keresi.
  5. Töltsd be a Képkocka Load metódusa segítségével a megfelelő lódarabot!

Negyedik fázis – képkockák összekeverése

  1. Építsd be az alkalmazásba a keverő funkciót a handout utolsó oldalán lévő kódrészlet alapján!

Handout:  Pascel_es_lo.docx fibo_handout.docx

6. hét - Feleltválasztós játék

Feletválasztós játék

jatek.csv Kérdések - pontosvesszővel tagolt sorokban    
jatek2.txt Kérdések - külön sorokba fejtve    
Handout.docx Előadás handout    
Jatek.zip Megoldás    
feleletválasztós 1 5:31    
feleletválasztós 2 5:41    
feleletválasztós 3 2:44    
feleletválasztós 4 5:01    
feleletválasztós 5 4:32    
feleletválasztós 6 2:28    

Sprint kérdések:

  1. A StreamReader osztály mely tulajdonságából tudható meg, hogy tudunk-e még olvasni a fájlból?
  2. Írd le azt a kódrészletet, mely megnyit egy tetszőleges szövegfájlt olvasásra, majd soronként beolvassa a tartalmát!
  3. Írd le azt a kódrészletet, mely ciklusból kirak egy űrlapra egymás alá 10 gombot!
  4. Mi a hiba a következő kódrészletbe:  StreamReader sr = new StreamReader("c:\tmp\valami.txt");
  5. Mit jelöl a @ karakter stringek előtt?
  6. Hogyan lehet string típust int-é konvertálni? (Írj példát!)
  7. Hogyan lehet int típust string-é konvertálni? (Írj példát!)
Felelt választós játék felépítése lépésről lépésre:
  1. Töltsd le a honlapról a jatek2.txt állományt, és vizsgáld meg a tartalmát!
  2. A fájlt húzd be a projektbe és a Properties ablakban a Copy to output directory beállítást állítsd „Copy if newer”-re!
  3. Hozz létre UserControl-t KérdésUserControl néven. A KérdésUserControl-ban helyezz el négy gombot és egy címkét a kérdésnek! A fenti vezérlők Modifiers tulajdonságát állítsd public-ra!
  4. A Form1 osztály konstruktorában a StreamReader osztály segítségével nyiss d meg a jatek2.txtfájlt.
  5. A StreamReader osztály segítségével nyisd meg a fájlt, és egy while ciklus segítségével olvass be cikluslépésenként hat sort találó nevű és megfelelő típusú változókba:
  6. A ciklus törzsében hozz létre példányt a KérdésUserControl-ból, és add az űrlap vezélőiek listájához!
  7. Oldd meg, hogy a KérdésUserControl-ból létrehozott példányok egymás alá kerüljenek!
  8. Állítsd be KérdésUserControl-ból létrehozott példányban lévő címke és gomb szövegét értelemszerűen!
  9. Hozz létre egy publikus egész típusú változót a KérdésUserControl osztályban JóVálasz néven. Ebből tudja majd ellenőrizni a KérdésUserControl, hogy a felhasználó jó gombra kattintott-e.
  10. A sorokat olvasó ciklus törzsében a KérdésUserControl JóVálasz változóját is állítsd be!
  11. KérdésUserControl-ban rendelj eseménykiszolgálókat a gombokhoz. Minden eseménykiszolgáló színezze pirosra a hozzá tartozó gombot!
  12. Ezután a helyes válaszhoz tartozó gombot színezd zöldre!

7. hét - Kígyó

Videók - a feladatmegoldás pár lépésben eltér az előadáson elhangzottaktól

Kígyó 1. 9:00
Kígyó 2 9:55
Kígyó 3. 4:36
Kígyó 4. 5:29
Kígyó 5. 3:18
Kígyó 6. 2:12
Kígyó 7. 1:58
Kígyó 8. 2:10
Kígyó 9. 5:43

kígyó handout.docx (néhány lépésben egyszerűbb, mint a videón szereplő megoldás.)

Aki nem tudott bemenni az előadásra, kérem nézze meg a videókat! Gyakorlaton egyénileg építsétek fel a játékot az alábbi útmutató alapján!

Lépések a kígyós játék felépítéséhez:

  1. Származtass a Button osztálytól egy új osztályt KígyóElem néven!
  2. A KígyóElem osztályt bővítsd egy méret statikus egész konstanssal, melynek értéke legyen 20.
  3. A KígyóElem osztályt bővítsd konstruktorral, melyben az a fenti konstansnak megfelelően 20x20 képpontosra méretezi magát.
  4. A Form1 osztályt bővítsd fejX és fejY változókkal, melyekben az utoljára kirakott kígyófej koordinátáit tárolod! Állíts be értelemszerű kezdőéréket! (Pl. 100, 100)
  5. A Form1 osztályt bővítsd irányX és irányY változókkal, melyekben kígyó haladási irályát tárolod! (-1,0,1 értékeket vehet fel.) Állíts be kezdőértéket!
  6. A Form1 osztályt bővítsd sorszám nevű, 0 kezdőértékű változóval!
  7. A Form1-en helyezz el egy engedélyezett számlálót fél másodperces intervallummal, majd rendelj a Tick eseményéhez esemény-kiszolgáló függvényt!
  8. Az esemény-kiszolgálóban hozz létre egy új példányt a KígyóElem osztályból, majd az iránynak és a méretnek megfelelően változtasd a fejX és fejY változók értékeit! Ezután már mozogni kell a kígyóknak.
  9.  Rendelj esemény-kiszolgálót az űrlap KeyDown eseményhez. 
  10. Változtasd a kígyó irányát az esemény-kiszolgáló paramétereként kapott e.KeyValue (vagy KeyCode) értéke alapján!
  11. Valósítsd meg az ütközésvizsgálatot! Járd be az űrlap Controls listáját foreach ciklussal, és vizsgálj meg minden KígyóElemet ke néven. Ha van olyan, melynek Top illetve Left tulajdonságai megegyeznek a fejY illetve fejX változók értékeivel, a kígyó farkába harapott.
  12. Rövidüljön a kígyó. Ehhez először bővítsd egy hossz nevő változóval az osztályt, melyben a kígyó aktuális hosszát tárolod! Ha az űrlapon lévő vezérlől száma meghaladja a hossz változó értékét, vedd ki az űrlap Controls listájának nulladik elemét!
  13. A kígyóelem konstruktorában páros és a páratlan sorszámú kígyóelemeket színezd eltérően!

Sprint kérdések

  1. Egy űrlapon csak a Button osztály példányai vannak. Írd le azt a foreach ciklust, mely bejárja az űrlap Controls listáját és minden gomb Visible tulajdonságát hamis értékűre állítja!
  2. Hogyan lehet az űrlap Contrlos listájának egy meghatároztt sorszámú elemét törölni?
  3. Hogyan lehet megtudni, hogy egy lista hány elemet tartalmaz?
  4. Írd le azt a kódrészletet, mely egy számról eldönti, hogy páros-e!
  5. Származtass egy osztályt a Button osztályból, mely automatikusan átmétetezi magát 30x30 pixelesre!

7. hét - Eddigiek összefoglaása - felkészülés a ZH-ra

Az előadás konzutéció jelleggel történik, hallgatói kérdésekre alapozva. Készüljetek kérdésekkel!

Rávezető feladat a fájlkezeléshez - billentyűzet a képernyőn gombokból

A fájl billentyűk elhelyezkedését, méretét, és a rajtuk lévő feliratot tartalmazza. Olvasd fel a fájlt, és rakd ki gombokból a billentyűzetet!

kbd_hun.txt Gombok koordinátái

Néhány feladat gyakorlásra:
  1.  Kattintásra színeződő gomb.
    (a) Származtass osztályt a Button osztályból KibeButton néven!
    (b) Példányosításakor színezze fehérre magát! (Ezt a KibeButton konstruktorában lehet megoldani.)
    (c) Példányosításakor saját szélességét és magasságát 20-20 képpontra!
    (d) Rendelj eseménykiszolgáló függvényt a kattintás eseményhez!
    (e) Kattintáskor, ha a gomb színe fehér, színezze magát feketére -ha fekete, fehérre!
  2.  Számoló gomb, melyen a szám kattintásra növekszik.
    (a) Származtass osztályt a Button osztályból SzámlálóGomb néven!
    (b) Az osztályhoz adj egy int típusú változót, melyben a számértéket tárolod 0 kezdőértékkel.!
    (c) Példányosításakor saját szélességét és magasságát 20-20 képpontra!
    (d) Rendelj eseménykiszolgáló függvényt a kattintás eseményhez!
    (e) Kattintásra növeld a változó értékét, majd jelenítsd meg a gomb feliratában!
    (f) 9 után a 0 következzen!
  3. (a) Származtass osztályt a Label osztályból VillogóCimke néven!
    (b) Az oszályban hozz létre példányt a Timer osztályból!
    (c) A konstruktorból állítsd indítsd el az időzítőt, és rendelj a Tick eseményéhez eseménykiszolgáló függvényt!
    (d) Az eseménykiszolgálóban villogtasd a címkét: ha címke látható, rejtsd el, ha el van rejtve, tedd láthatóvá!
    (e) Állítsd be a villogás sebességét 1 másodpercre!
  4. Egérfóbiás gomb.
    (a) Származtass osztályt a Button osztályból, mely megváltoztatja a színét ha fölé ér az egér, majd visszanyeri eredeti színét az egér távozásakor.
  5.  A második feladatban szereplő gombokból rakj ki kódból egy 10x10-es mátrixot.
  6. Memóriajáték 

    MemoriaJatek.doc Feladatlap a megoldás menetével
    kepek_es_tabla.zip Kinduló fáljok
    0_Bevezető 1:29
    1_a 1:46
    1_b 3:23
    1_b2 1:33
    1_c 0:45
    1_d 1:16
    1_ef 1:37
    2_a 3:42
    2_bc 2:53
    2_de 2:06
    3_a 1:42
    3_b 0:41
    3_c 1:55
    3_de 2:18
    4_abcd 3:00
    4_ef 3:37

Sprint kérdések:

  1. Egy űrlapon csak a Button osztály példányai vannak. Írd le azt a foreach ciklust, mely bejárja az űrlap Controls listáját és minden gomb Visible tulajdonságát hamis értékűre állítja!
  2. Mit jelent  @ karakter a stringek előtt?
  3. Hogyan lehet elnidítani egy Timer-t?
  4. Írd le azt a kódrészletet, ami egy véletlenszám generátor segítségével meghatározott pozícióba helyez el egy gombot az űrlapon!

 

 

8. hét - Második ZH

ZH a gyakorlatokon. A ZH időtartama alatt a gépterem Internet kapcsolata nem él. Ennek megfelelően, a kígyós feladathoz hasonlóan megfogalmazott lépéslistát követve kell megoldani a feladatsort. Minden olyan nyelvi elemre és osztályra szükség lehet, amely az előadásokon szereplő példafeladatokban előfordult. A felkészüléshez azt javaslom, hogy próbáljátok egyénileg felépíteni az eddig vett feladatokat a mellékelt útmutatók alapján. Ha elakadtok, a videók segítenek. (Az útmutatókat folyamatosan töltöm fel a korábbi feladatok mellé.)

A gyakorlást érdemes idejében elkezdeni, mert nem lehet az utolsó pillanatban pánikszerűen bemagolni. Fontos hogy azokkal a hibákkal, amiket az elején mindenki elkövet találkozzatok, és élesben ne kövessétek el. A ZH-n egy kézzel írott A4-es oldalnyi emlékeztető használható.

Tippek a gyakorlatokon tapasztalt tipikus hibák alapján:

Jó felkészülést!
A tárgy oktatói

9. hét - EMOry game - online előadás

Az előadás az alábbi videók önálló feldolgozására épül, nem kontaktóra formájában kerül megtartásra.

EmoryGame
EMORY 1 bevezető 0:55
EMORY 2 settings 3:08
EMORY 3 kép osztály 1 4:43
EMORY 4 kép osztály 2 3:11
EMORY 5 felfordítás 2:12
EMORY 6 timer 2:08
EMORY 7 4x4 1:35
EMORY 8 keverés 6:25
EMORY 9 keverés 2 2:38
EMORY 10 epilógus 1:03
Kepek.zip  
EMOry.zip  

Sprint kérsések az epilógusban + két témakör:

  1. Vesszővel tagolt szövegfájlok feldolgozása
  2. Többablakos alkalmazások készítése; felhasználó válaszától függő kilépés. Bővebben a lap tetején található C# jegyzet 70-75. oldalai foglalkoznak a témával.

Step-by-step:

  1. Add a honlapon található képeket a projekthez egy almappába.

  2. Származtass osztályt a Kártya néven a PictureBox osztályból, mely a konstruktorában átvesz három egész típusú paramétert: a kártya sor és oszlop pozícióját, valamint a kártyán szereplő kép sorszámát. A konstruktorban oldd meg, hogy a kártya el is helyezze magát!

  3. Bővítsd az osztályt egy egész típusú képSzám nevű változóval, mely  a konstruktorban átvett kép sorszám értékét tárolja. A konstruktort bővítsd úgy, hogy tárolja is a képSzám változóban a megfelelő átvett paramétert.

  4. Bővítsd a kártya osztályt Felfordít() metódussal, mely a PictureBox-tó örökölt Load() metóduson keresztül betölti a megfelelő képet.

  5. Bővítsd a kártya osztályt Lelfordít() metódussal, mely a PictureBox-tó örökölt Load() metóduson keresztül betölti a megfelelő  „card_back” képet!  

  6. Tesztelési célból a konstruktor a Felfordít() metódust hívja!

  7. A Form1 konstrutktorában rakj ki 4x4 Kártyát, most minden kártyára kerülhet más kép.

  8. A kártya osztályban Timer segítségével oldd meg, hogy a felfordított kártya pár másodperc múlva leforduljon!  

  9. A kártya osztályban oldd meg, hogy a kártya kattintásra leforduljon!  

  10. A Form1 osztályban hozz létre egy 16 elemű egészekből álló tömböt!

  11. A Form1 osztályban hozz létre egy Keverés() nevű függvényt! A függvény helyezze el 1 és 8 között a számokat a tömb elemeiben úgy, hogy minden szám kétszer szereplejen.

  12. A kártyákat kirakó ciklus most már a tömb alapján adja át a kártyához tartozó kép sorszámát!

  13. Oldd meg, hogy a Keverés() metódus a tömb elemeinek cserélgetésével bekeverje a tömböt!

  14. A Fomr1 kártyákat kipakoló ciklusának törzsében rendelj közös eseménykiszolgálót a kártyák kattintás eseményéhez.

  15. A From1 osztályt bővítsd utolsóKártya nevű kártya típusú referenciával. Ebben fogjuk tárolni, hogy melyik kártyát kattintottuk meg utoljára!

  16. A közös eseménykiszolgálóban oldd meg, hogy ha az utoljára megkattintott két kártya sorszáma megegyezik, mindkét kártya tűnjön el!

 

10. hét - GDI grafika - IFS fraktál

Grafika.doc Rövid összefoglaló a GDI grafikáról  
IFS fraktl.doc Előadás handout: IFS fraktál algoritmus  
  1. Mikor következik be a Paint esemény?
  2. Írd le azt a kódrészletet, amely egy egészekből álló 2x2-es tömböt hoz létre az alábbi elemekkel:
    1 2
    3 4
  3. Írd le azt a kódrészletet, mely egy tetszőleges színű vonaldarabot rajzol a képernyőre!
  4. Írd le azt a kódrészletet, mely egy tetszőleges színű kört rajzol a képernyőre!
  5. Hozz létre egy 500x500 pixeles bitmap-et, és rajzolj rá vonalat!
  6. Írd le azt a szövegekből álló tömböt, mely a hét napjait tartalmazza!

 

11. hét

Bantumi  
BANTUMI 1 játékszabály 1:22
BANTUMI 2 5:45
BANTUMI 3 getter setter 5:30
BANTUMI 4 miert kell build 0:48
BANTUMI 5 tovabbadás 1 4:09
BANTUMI 6 tovabbadás 2 1:49
BANTUMI 7 event 5:29
BANTUMI 8 nyerés 3:11
BANTUMI 10 búcsú 3:34
Teki_es_Bantumi_handout.docx  
Segédanyagok a delegáltak és
eseménkiszolgálók megértéséhez
 
delegaltak.doc  
szines_rajzolos.zip Az előző dokumentumban szereplő feladat megoldása

Sprint

  1. Ismétlés: Írd le azt a programrészletet, mely létrehoz egy tíz egész típusú elemből álló tömböt, melynek elemeit véletlen számokkal tölti fel!
  2. Írj példát teljesen kifejtett getter-setter metódusra!
  3. Mire való a setter metódus? (Akár a videóban szereplő példán keresztül szemléltetve.)
  4. Mikor lesz az osztály egy változójából tulajdonság? (Azaz a mi esetünkben mikor jelenik meg a properties ablakban?)

12. hét

  1. Írj példát teljesen kifejtett getter-setter metódusra!
  2. Írd le azt a programrészletet, mely létrehoz egy tíz egész típusú elemből álló tömböt, melynek elemeit véletlen számokkal tölti fel!
  3. Mi a különbség a Form osztály Show() és ShowDialog() metódusa közt?
  4. Írj példát az OpenFileDialog osztály használatára, mely el udja dönteni, hogy választott-e fájlt a felhasználó!
  5. Mire való az űrlapra helyezett gomb DialogResult tulajdonsága? Írj példát a használatára!
  6. Mikor lesz az osztály egy változójából tulajdonság? (Azaz a mi esetünkben mikor jelenik meg a properties ablakban?)

13. hét - ZH és konzultáció

Az előadás konzultáció jelleggel törénik, hallgatói kérdések alapján. Az anyag videó formájában kerül fel. Azokat várom, akiknek kérdésük van az anyaggal kapcsolatban.

  1. Hozz létre egy Kérdés nevű osztályt KérdésSzöveg, Válasz1..4 és Jóválasz tulajdonságokkal!

  2. Az osztályt bővítsd konstruktorral, mely átveszi a fenti tulajdonságoknak megfelelő paramétereket, majd beállítja a tulajdonságokat.

  3. A Form1-ben hozz létre egy osztály szintű listát Kérdések néven, mely Kérdés típusú elemekből áll.

  4. Csinálj egy megnyitás gombot, mely OpenFileDialog segítségével engedi kiválasztani a megnyitandó fájlt, majd a file alapján feltölti a listát. A mintafájl a honlapon a jatek.csv.

  5. Rakj ki a From1-re 4 gombot és egy címkét!

  6. Az Form1 szintjén hozz létre egy példányt a Random osztályból.

  7. Rakj ki a Form1-re egy „Következő” feliratú gombot is, melyhez rendelj eseménykiszolgálót!

  8. Az eseménykiszolgálóben generálj egy véletlen számot 0 és Kérdések.Count() – 1 között!

  9. A Gombokon és címkén jelenítsd meg a kérdés szövegét és a  lehetséges válaszokat. (Kérdések[n].KérdésSzöveg)

 

A Sprint az utolsó három hét kérdései közül lesz.

Gyakorló feladatok
Amoba.docx Amőbás gyakorlófeladat
aknakereso_handout.docx Előadás handout
AknaKereso.zip Előadáson készített projekt
  mezo_osztaly.html Kértétek a videókae ea-n, ennyire bonyolult nem lesz ZH-n :)
  palyagenerator.html  
  aknasitas.html  
  felfed.html  
  felfed2.html  

 

14. hét - Harmadik ZH

Javítási és pótlási lehetőségek

 Kedves Kollégák!

A tárgy gyakorlati jeggyel zárul. Azok a kollégák, akik kettő közül valamelyik gépes zárthelyit nem írták meg, december 16-án délelőtt 9 órától pótolhatják. (Ezt az időpontot az első előadáson kihirdettem, változatására nincs mód.) Akik javítani szeretnének, egy alkalommal, szintén december 16-án írhatnak javítót a teljes félév anyagából. A beugró ZH-k javítására nincs lehetőség, hiszen ezek a teljes félév munkáját tükrözik. A jelentkezés módjáról és a pontos helyszínről később töltök fel tájékoztatást.

Azok a kollégák, akik kettő közül valamelyik gépes zárthelyit nem írták meg, december 16-án délelőtt 9 órakor pótolhatják.

L.

 mol2015.csv

quiz.txt

Levelező

ginfo.txt

szoft_I_gyaksor.pdf

Emory kód.docx