C# programok ismertetése érdeklődőknek kezdőktől haladókig

C# MŰHELY

C# MŰHELY

Szám karakter négyzetre emelése

2020. június 03. - Benkő Tiborné

Olvassunk be egy karaktert (1-9) és vizsgáljuk meg, ha a karakter szá­m volt, akkor számjeggyé kell alakítani a matematikai művelethez:

      szám = (int)Char.GetNumericValue(ch);

Ha a karakter nem szám volt, akkor töröljük az eredményt kijelző ablakokat. és hibajelzést adunk!

Ezután Számol nyomógomb megnyomásával kiszámítjuk a szám négyzetét a  kiírjuk az eredményt.
A Töröl nyomógombbal töröljük a szövegablakokat. 

A feladat megoldása:

            int szám;
        private void textBox1_KeyPress(object sender,
                                       KeyPressEventArgs e)
        {
            char ch;
            if (e.KeyChar != '\n')
            {
                ch = e.KeyChar;
                if (Char.IsNumber(ch))
                {
                   // számjeggyé alakítás
                   szám = (int)Char.GetNumericValue(ch);
                }
                else
                {
                    textBox2.Text = "";
                    textBox4.Text = "";
                    MessageBox.Show("Nem szám karakter!",
                                    "Hibajelzés");
                    textBox1.Text = "";
                }
             }
         }

        private void Számol_Click(object sender, EventArgs e)
        {
            int ered;
            textBox2.Text = szám.ToString();
            ered = szám * szám;
            textBox4.Text = ered.ToString();
        }

        private void Töröl_Click(object sender, EventArgs e)
        {  
            textBox1.Text = "";
            textBox2.Text = "";
            textBox4.Text = "";
        }

A program futási eredményei:

   

   

 

Osztási művelet két egész szám között 1. megoldás

Olvassunk be két egész számot, a nagyobbat osszuk el a kisebbel, majd a há­nya­dost és a maradékot írassuk ki.

Az első számot az osztandó, a másik számot az osztó változóba olvassuk be, majd eldöntjük, hogy melyik a nagyobb és e szerint végezzük el az osztást. Ennél a feladatnál feltételes utasítást használunk.

 A hányadost két egész szám osztásával (/), a maradékot pedig a modulus kép­zéssel (%) számíthatjuk ki.

A feladat megoldása:

        private void Számol_Click(object sender, EventArgs e)
        {
            int osztandó, osztó, hányados, maradék;
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                osztandó = Int32.Parse(textBox1.Text);
                osztó = Int32.Parse(textBox2.Text);
                if (osztandó > 0 && osztó > 0)
                {
                    if (osztandó > osztó)
                    {
                       hányados = osztandó / osztó;
                       maradék = osztandó % osztó;
                       textBox3.Text = osztandó.ToString();
                       textBox4.Text = hányados.ToString();
                       textBox5.Text = maradék.ToString();
                    }
                    else
                    {
                        hányados = osztó / osztandó;
                        maradék = osztó % osztandó;
                        textBox3.Text = osztó.ToString();
                        textBox4.Text = hányados.ToString();
                        textBox5.Text = maradék.ToString();
                    }
                }
                else
                     MessageBox.Show("Hibás adat!","Üzenet");
             }
         }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
        }
        

A program futási eredményei:

   

 

Karaktersorozat vizsgálata

Olvassunk be egy karaktersorozatot. Számláljuk meg a kis- és nagybetűket, számokat és egyéb jeleket.

A feladat megoldása:


          private void
Válogatás_Click(object sender, EventArgs e)
          {
            int i;
            string szöveg, kisbetűk= "", nagybetűk= "", számok= "",
                   egyéb = "";
            if (textBox1.Text != "")
            {
                szöveg = textBox1.Text;
                for (i = 0; i <= szöveg.Length - 1; i++)
                {
                    if (Char.IsLower(szöveg[i]))
                        kisbetűk += szöveg[i];
                    else if (Char.IsUpper(szöveg[i]))
                        nagybetűk += szöveg[i];
                    else if (Char.IsNumber(szöveg[i]))
                        számok += szöveg[i];
                    else
                        egyéb += szöveg[i];
                }
                textBox2.Text = kisbetűk;
                textBox3.Text = kisbetűk.Length.ToString();
                textBox4.Text = nagybetűk;
                textBox5.Text = nagybetűk.Length.ToString();
                textBox6.Text = számok;
                textBox7.Text = számok.Length.ToString();
                textBox8.Text = egyéb;
                textBox9.Text = egyéb.Length.ToString();
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox2.Text = ""; textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = ""; textBox6.Text = "";
            textBox7.Text = "";
            textBox8.Text = ""; textBox9.Text = "";
        }

A program futási eredménye:

 

 

 

 

 

 

 

 

Karakterek számlálása

Olvassunk be karaktereket és számláljuk meg, hogy mennyi szóközt, kisbetűt, nagybetűt és számot találtunk!

A feladat megoldása:

                 // Globális deklaráció
        int szóköz_db = 0, kisbetű_db = 0, nagybetű_db = 0,
            szám_db = 0;
        string s = "";

        private void textBox1_KeyPress(object sender,
                                       KeyPressEventArgs e)
        {
            char ch;
            if (e.KeyChar != '\n')
            {
                ch = e.KeyChar;
                s += ch;
                if (ch == ' ') szóköz_db++;
                if (Char.IsLower(ch)) kisbetű_db++;
                if (Char.IsUpper(ch)) nagybetű_db++;
                if (Char.IsNumber(ch)) szám_db++;
            }
        }

        private void Vizsgál_Click(object sender, EventArgs e)
        {
            textBox2.Text = s;
            textBox3.Text = szóköz_db.ToString();
            textBox4.Text = kisbetű_db.ToString();
            textBox5.Text = nagybetű_db.ToString();
            textBox6.Text = szám_db.ToString();
        }

 A program futási eredménye:

 

Karakterek vizsgálata 2. módszer

Olvassunk be egy karaktert és vizsgáljuk meg, hogy szá­mot, kisbetűt vagy nagybetűt olvastunk. Írjuk vissza a karakter egész szám érté­két (ASCII kódját) és magát a karaktert is.

 Megvizsgáljuk, hogy a karakter melyik halmazba esik:

  • számok    '0'   és   '9'
  • kisbetűk    'a'   és   'z'
  • nagybetűk 'A'  és   'Z'

A feladat megoldása:

        private void Vizsgálat_Click(object sender, EventArgs e)
        {
            char ch;
            string s;
            int szám;
            if (textBox1.Text != "")
            {
                ch = Char.Parse(textBox1.Text);
                szám = (int)ch;
                s = szám.ToString();
                if (ch >= '0' && ch <= '9')
                {
                   textBox2.Text =
                   "A beolvasott karakter szám: " + ch + 
                   "  kódja: " + s;
                }
                else if (ch >= 'a' && ch <= 'z')
                {
                    textBox2.Text =
                    "A beolvasott karakter kisbetű: " + ch +
                    "  kódja: " + s;
                }
                else if (ch >= 'A' && ch <= 'Z')
                {
                    textBox2.Text =
                    "A beolvasott karakter nagybetű: " + ch +
                    "  kódja: " + s;
                }
                 else
                    textBox2.Text =
                    "A beolvasott karakter egyéb jel: " + ch +
                    "  kódja: " + s;
            }
       }
       private void textBox1_TextChanged(object sender, EventArgs e)
       {
            textBox2.Text = "";
       }

A program futási eredményei:

   

   

Karakterek vizsgálata 1. módszer

Olvassunk be egy karaktert és vizsgáljuk meg, hogy szá­mot, kisbetűt vagy nagybetűt olvastunk. Írjuk vissza a karakter egész szám érté­két (ASCII kódját) és magát a  karaktert is. A program jelezze,ha más karakter ütöttünk le, mint amit vizsgál, jelezze azzal, hogy  'más karakter'  szöveget ír a Karakter típusa alatti szövegablakba. A programban a láncolt if utasítást használtuk.

                                  ASCII kód
                 -----------------------------
                 kisbetű       97 - 122
                 nagybetű   65 - 90
                 szám           48 - 57
                 Enter           13

A textBox1 szövegablak KeyPress eseménykezelőjét használjuk a karakter beolvasásának kezelésére.
A KeyPressEventArgs e paraméterének KeyChar tulajdonságában kapjuk meg a leütött karaktert. A programból az Enter billentyű leütésével léphetünk ki. Az Enter karakterkódja  '\n' .

A feladat megoldása:

        private void textBox1_KeyPress(object sender, 
                                       KeyPressEventArgs e)
        { 
            char ch;
            int c;
            if (e.KeyChar != '\n'
            {
                ch = e.KeyChar;  // beolvasunk egy karaktert
                c = (int)ch;     // karaktert egész számmá alakítjuk
                textBox2.Text = c.ToString();
                if (c >= 97 && c <= 122)
                    textBox3.Text = " Kis betű";
                else if (c >= 65 && c <= 90)
                    textBox3.Text = "Nagy betű";
                else if (c >= 48 && c <= 57)
                    textBox3.Text = "Szám";
                else if (c == 13) 
                     textBox3.Text = "Enter";
                else
                   textBox3.Text = "Más karakter";
            }
         }

A program futási eredményei:

   

    

Három szám közül válasszuk ki a nagyobbat

A feladat megoldásához olvassunk be három valós számot és válasszuk ki a nagyobbat, melyet a ”Max érték” –kel jelölt szövegablakban írjunk ki.

Globálisan deklarálunk öt duplapontos valós válto­zót, a, b és c-t a három beolvasandó szám számára, a max1 és max2 változókat a maximum kiválasztására.

 A feladatot kétféle módon oldjuk meg.

Első megoldás

A Keres_1 nyomógomb megnyomásakor Keres1_Click eseménykezelőben láncolt if utasítással kiválasztjuk a legnagyobbat és kiírjuk a max1 változó tartalmát  a szövegalakba.

 A láncolt if utasítást relációkból építjük fel. A feltételt zárójelbe kell tennünk és az else előtti utasítást pontosvesszővel zárjuk le. Amennyiben az a>b teljesül, akkor egy újabb if utasítással megvizsgáljuk az a>c feltételt, ha ez a feltétel teljesül, akkor az a lesz a maximum, különben pedig a c. Ha az a >b nem teljesül, akkor az else ágán megvizsgáljuk a b>c feltételt. A feltétel  teljesülésekor a  b lesz a maximum, egyébként, a c.

 Második megoldás

A Keres 2 nyomógomb megnyomásakor Keres2_Click eseménykezelőben feladatot rövidebben fogjuk  megoldani úgy, hogy a max2 változóba feltétel nélkül tároljuk a c-t, majd egy if utasításban vizsgáljuk meg a két relá­ció egyidejű teljesülését logikai ÉS kapcsolattal:

       a>b és a>c   --->   ( a > b && a > c)

A  C# nyelvben a logikai ÉS kapcsolatot az &&, a logikai VAGY kapcsolatot a || műveleti jelek jelentik. Mivel a relációknak nagyobb a precedenciája (elsőbbsége) mint a logikai műveleteknek, így a relációkat nem kell zárójelbe tenni.

Visszatérve a feltételhez, ha az a nagyobb b-nél ÉS c-nél, akkor a maximum  az a lesz, különben megvizsgáljuk, hogy a b nagyobb-e mint a c, mert akkor a maximum a b lesz, ha a feltétel nem teljesül, a max2 változóban a c marad.

 A program listája:

           double a, b, c, max1, max2;
       private void Keres1_Click(object sender, EventArgs e)
       {
            // adatok vizsgálata
            if(textBox1.Text != "" && textBox2.Text != "" &&
               textBox3.Text != "" )
            {
               a = Double.Parse(textBox1.Text);
               b = Double.Parse(textBox2.Text);
               c = Double.Parse(textBox3.Text);
               if (a > b)
               {
                   if (a > c) max1 = a; else max1 = c;
               }
               else
               {
                   if (b > c) max1 = b; else max1 = c;
               }
               textBox4.Text = max1.ToString();
            }
          }       
          private void Keres2_Click(object sender, EventArgs e)
          {
             if(textBox1.Text != "" && textBox2.Text != "" && 
                textBox3.Text != "" )
             {
                a = Double.Parse(textBox1.Text);
                b = Double.Parse(textBox2.Text);
                c = Double.Parse(textBox3.Text);
                max2 = c;
                if (a > b && a > c) max2 = a; 
                else if (b > c) max2 = b;
             }
             textBox5.Text = max2.ToString();
        }

        // bármelyik adat változik, az eredmény ablakok törlődnek
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox4.Text = ""textBox5.Text = "";
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            textBox4.Text = ""textBox5.Text = "";
        }

       private void textBox3_TextChanged(object sender, EventArgs e)
       {
           textBox4.Text = ""textBox5.Text = "";
       }

     A program futási eredményei:

 

Két egész típusú változó tartalmának felcserélése

A feladatot kétféle módon oldjuk meg. 

1. Feladat: Két egész típusú változó tartalmának felcserélése segédváltozó használatával.

A Form1_Load eseménykezelő eljárásban az  x, y egész típusú változók tartalmát beállítjuk 72 és 37-re,  majd megjelenítjük textBox1 és a textBox2 Text mezejében, az Enabled tulajdonság false-ra állítása biztosítja, hogy a számokat ne lehessen módosítani. A Form1_Load eseménykezelő a Form1 objektum betöltése után azonnal meghívódik, így már a globálisan deklarált x és y változók megkapják a beállított értékeket.

              int x, y;
        private void Cserél_Click(object sender, EventArgs e)
        {
            int m; // segédváltozó 
            m = x; // x tartalmát mentettük az m változóba
            x = y; // x változóba írtuk a y tartalmát
            y = m; // y változó felveszi az m értékét, amely x értéke
            textBox3.Text = x.ToString(); textBox3.Enabled = false;
            textBox4.Text = y.ToString(); textBox4.Enabled = false;
            button1.Enabled = false;
        }
        private void Form1_Load(object sender, EventArgs e)
        {   
            x = 72; y = 37;
            textBox1.Text = x.ToString(); textBox1.Enabled = false;
            textBox2.Text = y.ToString(); textBox2.Enabled = false;
         }

 A program futási eredménye: alapállapot és a Cserél nyomógomb megnyomása után történik meg a csere.

       

2.  Feladat: Két egész típusú változó tartalmának felcserélése segédváltozó nélkül.

Megoldás:  A két egész típusú változó (x,y) tartalmának felcserélését segédváltozó használata nélkül a kizáró vagy (^) logikai művelet felhasználásával oldhatjuk meg.

            x = x ^ y
            y  = y ^ x
            x  = x ^ y

 A kizáró vagy állapot táblája

            x   y     |  x ^ y
           -------------------
            0     0   |   0
            0     1   |    1
            1     0   |    1
            1     1   |    0

 Legyen a x változó tartalma 72 és az y változóé 37. Alakítsuk át a két egész számot binárissá. Az átalakítandó számot osztjuk kettővel és a maradékot a választóvonal mögé írjuk, ha páros az eredmény, akkor 0, ha páratlan, akkor 1. Az utolsó eredményt az 1-et átmásoljuk a maradékok listájába.

            72 |  0
            36 |  0
            18 |  0
              9 |  1
              4 |  0
              2 |  0 
              1 |  1  

 Alulról felfelé leolvasva    1 0 0 | 1 0 0 0 | majd az elejére írt 0-val két  byte 
az x változó tartalma binárisan  |  0 1 0 0 | 1 0 0 0 |  

            37 |  1
            18 |  0
              9 |  1
              4 |  0
              2 |  0
              1 |  1   

Alulról felfelé leolvasva    1 0  | 0 1 0  1 | majd az elejére írt 2 db  0 -val a  két byte
az y változó tartalma binárisan |  0 0 1  0 | 0 1 0  1 | 

            x = x ^ y                     x          |  0 1 0 0 | 1 0 0 0 |                                        
                                                y          |  0 0 1 0 | 0 1 0 1 |
                                                      ------------------------------
                                             x          |  0 1 1 0 | 1 1 0 1 |                

           y  = y ^ x                    y          |  0 0 1 0 | 0 1 0 1 |                                        
                                               x          |  0 1 1 0 | 1 1 0 1 |
                                                    -------------------------------
                                             y          |  0 1 0 0 | 1 0 0 0 |     

           x  = x ^ y                    x          |  0 1 1 0 | 1 1 0 1 |                                        
                                               y          |  0 1 0 0 | 1 0 0 0 |
                                                    -------------------------------
                                             x          |  0 0 1 0 | 0 1 0 1 |

           Alapállapot                                           Megtörtént a csere

 x          |  0 1 0 0 | 1 0 0 0 |                  x          |  0 0 1 0 | 0 1 0 1 |                             
 y          |  0 0 1 0 | 0 1 0 1 |                  y          |  0 1 0 0 | 1 0 0 0 |

 

          int x, y;
          private void Cserél_Click(object sender, EventArgs e)
         {
            x = x ^ y;
            y = y ^ x;
            x = x ^ y;
            textBox3.Text = x.ToString(); textBox3.Enabled = false;
            textBox4.Text = y.ToString(); textBox4.Enabled = false;
            button1.Enabled = false;
        }
        private void Form1_Load(object sender, EventArgs e)
        {   
            x = 72; y = 37;
            textBox1.Text = x.ToString(); textBox1.Enabled = false;
            textBox2.Text = y.ToString(); textBox2.Enabled = false;
        }

 A program futási eredménye: alapállapot és a Cserél nyomógomb megnyomása után történik meg a csere.

       

 

A BLOGOM CÉLJA

A blogom célja, hogy a C# nyelven készített programjaimat bemutassam. Némely feladatra több megoldást is készítettem. A bonyolultabb feladatok algoritmusait részletesen elmagyarázom. A programok lefedik a C# programozási nyelv utasításait (feltételes utasítások, ciklusok, függvények, fájlkezelés, különféle grafikus feladatok, animáció stb. ) Foglalkozom, numerikus módszerekkel, lineáris egyenletrendszer megoldásával LU dekompozícióval, mátrix invertálással. Egyismeretlenes nemlineáris egyenlet különféle módszereivel. Lineáris interpolációval (Lagrange, Aitken, Regresszió). Numerikus integrálással (téglalap, kis trapéz, nagy trapéz, érintő, kis simpson, nagy simpson formulákkal). Minimum- és maximum kereséssel.

süti beállítások módosítása