Gépészeti informatika (BMEGEMIBXGI) 2. Laboratóriumi foglalkozás Fink Nándor
Ismétlés: Változó deklarálása: Átkonvertálás: változótípus név = érték; int szám = 25; Átkonvertálás: ToInt32() Metódusok használatával! ToString()
Ismétlés: Formázóutasítás használata: {0:e7} label1.Text = Convert.ToString(String.Format(”{0:e7}”,változó1, változó2)); {0:e7} Hányadik elem kerüljön beillesztésre. (0-val kezdődik a számolás: 0,1,2,3..) Táblázatból kiválasztható (köv. dián). Megjeleníteni kívánt helyiértékek száma.
Ismétlés: Karakter Magyarázat Példa C, c Currency = Pénznem 1000 Ft D, d Decimal = Decimális 10 -150 000123 E, e Exponential = Exponenciális 1,052033E+003 -1,05e+003 F, f Fixed-point = Fix pontos 1234,57 -12,56 G, g General = Általános (e vagy f közül az egyszerűbb) 11,234 -11,2354e-25 N, n Number = Szám 1 234 567,12 -123 12,12 P, p Percent = Százalék 37,3 % 2 % R, r Round-trip = ~(Visszaalakítható ?) * 123456789,17 X, x Hexadecimal = Hexadecimális 255 -> FF * Biztosítja, hogy egy szám értéke stringgé alakítás után visszaalakítható legyen ugyanazzá a számmá. Forrás: VisualStudió 2013 online súgója: https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx (Az, hogy melyik mikor alkalmazható és hogyan függ a nyelvi beállításoktól szintén a súgóban található.)
Értékadás operátorokkal Különféle operátorok használatával az értékadás lerövidíthető: int szam = 0; // Létrehozza a „szam” nevű, „egész” típusú változót „0” kezdőértékkel. szam = szam + 1; // A változó értékének megnövelése 1-el. szam += 1; // A változó értékének megnövelése 1-el. szam++; // A változó értékének megnövelése 1-el.
Operátorok – Definíciók Precedencia: A kifejezések az elsőbbségi (precedencia) szabályok szerint kerülnek kiértékelésre. Ezek a szabályok meghatározzák a kifejezésekben szereplő, különböző elsőbbséggel rendelkező műveletek végrehajtási sorrendjét. Asszociativitás: Az azonos elsőbbségi operátorok esetén a balról-jobbra, illetve a jobbról-balra asszociativitás ad útmutatást. 13 – 15. oldal C# könyv
Operátorok – Definíciók Olyan (speciális) karakter, amelyhez valamilyen funkció van hozzárendelve. (Pl: „+” operátorhoz az összeadás művelete.) Egy-, két- és három operandusú operátorok: Operátorok csoportosítása aszerint, hogy hány kifejezés szükséges alkalmazásukhoz. Jelöljük piros színnel az operátorokat kék színnel pedig az operandusokat: i++; // Ahány „kék” elem, annyi operandusú -> 1 operandusú i + 2; // 2 operandusú a ? b : c; // 3 operandusú 13 - 15 oldal C# könyv
Operátorok
Operátorok
Bitléptetés 512 256 128 64 32 16 8 4 2 1 Helyiérték 1 vagy 0 Helyiérték 1 vagy 0 11001 bináris szám átváltása decimális számmá: 1*16+1*8+1*1 = 25 Bitléptetés műveletének megadása: 25<<2; Az operátor baloldalán megadott szám bináris értékét, az operátor irányának megfelelően << : balra, vagy >> : jobbra, az operátor jobboldalán megadott számszor végezzük el a bitléptetést. 25<<1 512 256 128 64 32 16 8 4 2 1 1*32+1*16+1*2 = 50 25<<2 512 256 128 64 32 16 8 4 2 1 1*64+1*32+1*4 = 100
Bitléptetés 512 256 128 64 32 16 8 4 2 1 Helyiérték 1 vagy 0 Helyiérték 1 vagy 0 11001 bináris szám átváltása decimális számmá: 1*16+1*8+1*1 = 25 Bitléptetés műveletének megadása: 25<<2; Az operátor baloldalán megadott szám bináris értékét, az operátor irányának megfelelően << : balra, vagy >> : jobbra, az operátor jobboldalán megadott számszor végezzük el a bitléptetést. 25>>1 512 256 128 64 32 16 8 4 2 1 1*8+1*4 = 12 25>>2 512 256 128 64 32 16 8 4 2 1 1*4+1*2 = 6
Bitenkénti ÉS és VAGY műveletek ÉS operátor „&”: 1 Eredmény 1. Összehasonlítandó elem 2. Összehasonlítandó elem Ha a két összehasonlítandó bináris szám adott helyiértékén található szám egyaránt 1, akkor az eredmény 1, ha pedig különbözik ,vagy mindkettő 0, akkor 0. KIZÁRÓ VAGY operátor „^”: 1 Ha a két összehasonlítandó bináris szám adott helyiértékén található szám egyike 1 a másik pedig 0, akkor 1, ha pedig mindkettő 1, vagy mindkettő 0, akkor 0.
Bitenkénti ÉS és VAGY műveletek MEGENGEDŐ VAGY operátor „|”: 1 Ha a két összehasonlítandó bináris szám adott helyiértékén található szám egyike 1 a másik pedig 0, vagy mindkettő 1, akkor 1, ha pedig mindkettő 0, akkor 0. Felírás igazságtáblával: ÉS operátor „&”: KIZÁRÓ VAGY operátor „^”: MEGENGEDŐ VAGY operátor „|”: 1 1 1
A feltételes operátor Használat: FELTÉTEL ? HA_IGAZ : HA_HAMIS Pl: 1<2 ? 3 : 4; A művelet precedenciaszintje (elsőbbsége) igen alacsony, amennyiben fontos, hogy hamar kerüljön kiértékelésre, zárójelek alkalmazása javasolt! Hamis: Ha a feltétel hamis volt, ez lesz a kifejezés értéke Igaz: Ha a feltétel igaz volt, ez lesz a kifejezés értéke Feltétel: Vizsgáld meg, hogy 1 kisebb-e, mint 2 17. oldal c# könyv
Alapfüggvények: a Math osztály Használatuk: Math.PI; // Pi értékét adja Math.Exp(x); // ex értékét adja Math.Pow(x,y); // xy Math.Sign(x); // Pozitív szám esetén: +1 // Negatív szám esetén: -1 // Zérus esetén: 0
LÉPTETŐ OPERÁTOROK: i kezdőértéke: int i = Convert. ToInt32(textBox1 LÉPTETŐ OPERÁTOROK: i kezdőértéke: int i = Convert.ToInt32(textBox1.Text); Utótagos léptető operátor: label1.Text = String.Format("i++: {0}, i--: {1}, i: {2}", i++, i--, i); Vagy: label1.Text = "i++: " + i++ + " i--: " + i-- + " i: " + i; Előtagos léptető operátor: label1.Text = "++i: " + ++i + " --i: " + --i + " i: " + i; Léptető operátorok gyakorlása: label1.Text = "i: " + i + " i++: " + i++ + " i++: " + i++ + " i++: " + i++ + " i: " + i; label1.Text = "i: " + i + " i+i++: " + (i+i++) + " i: " + i + " i++ + i++: " + (i++ + i++) + " i: " + i + " ++i + i: " + (++i + i) + " i: " + i; 15. oldal c# könyv
Léptető operátor magyarázat 1. lépés: i kezdeti értéke legyen 0. 2. lépés: i értéke 0, amit hozzáadunk i++-hoz. Utótagos (postfix) növelés esetén a változó értékét az előtt olvassuk ki, minthogy megnövelnénk az értékét, tehát az összeadás pillanatában i értéke még mindig 0. Miután a változó értéke beolvasásra került, azonnal megtörténik a kiértékelése, tehát értéke 1 lesz. 3. lépés: i értéke a művelet elvégzése után 1. 4. lépés: i++-t hozzáadjuk önmagához. Itt az történik, hogy i++ értéke az előző művelet miatt 1, ezt beolvassuk, majd azonnal megnöveljük, így mire a második i++-hoz érünk, annak értéke már 2 lesz, amit a beolvasás után tovább növelünk. 5. lépés: i értéke most már 3. 6. lépés: ++i-t hozzáadjuk i-hez. Itt előtagos (prefix) növelést hajtunk végre, ami azt jelenti hogy i értékének növelése az érték beolvasása előtt történik meg. Tehát azonnal megnöveljük i értékét eggyel, az új értéke 4 lesz, ezt beolvassuk, majd hozzáadjuk módosítás nélkül az immáron 4 értékű i-t. 7. lépés: i értéke az utolsó művelet elvégzése után 4 lesz.
MATEMATIKAI FÜGGVÉNYEK HASZNÁLATA: // MATEMATIKAI FÜGGVÉNYEK HASZNÁLATA int neg = -150; label1.Text = "i: " + i + " Sin(i): " + Math.Sin(i) + "\nneg: " + neg + " Sin(neg): " + Math.Sin(neg) + "\n|neg|: " + Math.Abs(neg); ! OPERÁTOR HASZNÁLATA: // ! OPERÁTOR HASZNÁLATA (csak bool típusra) bool igennem = false; label1.Text = "igennem: " + igennem + " !igennem: " + !igennem;
BITLÉPTETÉS: // BITLÉPTETÉS int szam = 25; int lepes1 = 1; int szam = 25; int lepes1 = 1; int lepes2 = 2; int lepes3 = 3; string labelre; labelre = "Szám: " + szam + " Bináris alak: " + Convert.ToString(szam,2); labelre += "\nLéptetés 1-el balra:\nEredeti szám\nLéptetett szám\n" + Convert.ToString(szam, 2) + "\n" + Convert.ToString(szam << lepes1, 2); labelre += "\nLéptetés 2-vel balra:\nEredeti szám\nLéptetett szám\n" + Convert.ToString(szam, 2) + "\n" + Convert.ToString(szam << lepes2, 2); labelre += "\nLéptetés 3-al balra:\nEredeti szám\nLéptetett szám\n" + Convert.ToString(szam, 2) + "\n" + Convert.ToString(szam << lepes3, 2); labelre += "\nLéptetés 1-el jobbra:\nEredeti szám\nLéptetett szám\n" + Convert.ToString(szam, 2) + "\n" + Convert.ToString(szam >> lepes1, 2); labelre += "\nLéptetés 2-vel jobbra:\nEredeti szám\nLéptetett szám\n" + Convert.ToString(szam, 2) + "\n" + Convert.ToString(szam >> lepes2, 2); labelre += "\nLéptetés 3-al jobbra:\nEredeti szám\nLéptetett szám\n" + Convert.ToString(szam, 2) + "\n" + Convert.ToString(szam >> lepes3, 2); label1.Text = labelre;
OSZTÁS ÉS MARADÉKKÉPZÉS: // OSZTÁS ÉS MARADÉKKÉPZÉS // OSZTÁS ÉS MARADÉKKÉPZÉS int a = Convert.ToInt32(textBox1.Text); int b = Convert.ToInt32(textBox2.Text); label1.Text = "Műveletek integerekkel:\na / b = " + a/b + " , a % b = " + a%b; double a = Convert.ToDouble(textBox1.Text); double b = Convert.ToDouble(textBox2.Text); label1.Text = "Műveletek doubleökkel:\na / b = " + a/b + " , a % b = " + a%b;
ELDÖNTENDŐ MŰVELETEK OPERÁTORAI: // LOGIKAI OPERÁTOR HASZNÁLATA (csak bool típusra) bool eldontendo; int szam = 1; eldontendo = szam == 1; eldontendo = szam != 1; eldontendo = szam < 2; eldontendo = szam > 2; label1.Text = "A logikai feltétel: " + eldontendo; DE! eldontendo = szam = 1; HIBA! Először értékadó operátor használatával 1-re állítjuk a szam nevű válzozó értékét, majd szintén értékadó operátorral egy numerikus értéket akarunk adni a bool típusú változónak.
FELTÉTELES OPERÁTOROK ÖSSZEFŰZÉSE: // FELTÉTELES OPERÁTOROK int a = Convert.ToInt32(textBox1.Text); int b = Convert.ToInt32(textBox2.Text); // VAGY operátor || label1.Text = a + " < 20 || " + a + " > 30 : " + (a < 20 || a > 30); // ÉS operátor && label1.Text = a + " < 20 && " + b + " < 20 : " + (a < 20 && b < 20); Megjegyzés: Nem összekeverendő a szimpla és a dupla változat. Általánosságban a szimpla | bitenkénti összehasonlító vagy-ot jelent, míg a szimpla & bitenkénti összehasonlító és-t. C#-ban a bitenkénti összehasonlító funkció mellett betölt logikai összefűző szerepet is, de másképpen viselkedik mint a dupla. Tehát && NEM EGYENLŐ &, valamint || NEM EGYENLŐ | !!!!
& és && közötti különbség a C#-ban logikai műveletek összefűzésekor: Csak akkor megyünk el szórakozni, ha: Nem esik az eső. Van rá pénzünk. Mindenki ráér. Ha így vizsgáljuk: (Esik? && Van pénzünk? && Ráérünk?) ((ez nem kód)) * Akkor kinézek az ablakon, és ha esik az eső, akkor már tudom, hogy úgy sem fogunk menni sehova, így nem nézek bele a pénztárcámba és nem hívogatok körbe mindenkit, hogy ráér-e. Ha így vizsgáljuk: (Esik? & Van pénzünk? & Ráérünk?) ((ez nem kód)) * Akkor kinézek az ablakon, és látom, hogy esik, de annak ellenére, hogy már úgysem megyünk sehová, még megnézem mennyi pénzem van, és felhívok mindenkit, hogy ráért volna-e. Tehát: ha szimpla &-t vagy |-t használunk, akkor mindenképpen lefut minden kondíció ellenőrzése. Ez felesleges erőforrás pazarlás, valamint nehezebben olvashatóvá teszi a kódot. Használata CSAK INDOKOLT esetben javasolt!
Emlékeztető: Pl: 1<2 ? 3 : 4; ? : operátor használata: double ho = Convert.ToDouble(textBox1.Text); label1.Text = "A víz halmazállapota: " + ho + " -fokon " + (ho > 100 ? "légnemű" : ho < 0 ? "szilárd" : "folyékony"); Emlékeztető: Pl: 1<2 ? 3 : 4; Hamis: Ha a feltétel hamis volt, ez lesz a kifejezés értéke Igaz: Ha a feltétel igaz volt, ez lesz a kifejezés értéke Feltétel: Vizsgáld meg, hogy 1 kisebb-e, mint 2
Felhasznált irodalom http://www.mogi.bme.hu/letoltes/ALKALMAZOTT%20INFORMATIKAI%20TÁRGYAK/INFORMATIKAI%20RENDSZEREK%202015/C%23.pdf http://www.mogi.bme.hu/letoltes/ALKALMAZOTT%20INFORMATIKAI%20TÁRGYAK/INFORMATIKAI%20RENDSZEREK%202015/C_%20programozás%20lépésről%20lépésre%20-%20Reiter%20István%20(frissitett%20tartalommal%202012.10.15).pdf Dr. Tamás Péter óravázlatai Microsoft Visual Studio 2013 súgója
Köszönöm a megtisztelő figyelmet!