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

C# MŰHELY

C# MŰHELY

FÜGGVÉNY: VAGY, ÉS, KIZÁRÓVAGY bitműveletek végrehajtása

2021. január 22. - Benkő Tiborné

Írjunk programot, amely beolvas két pozitív egész számot, végrehajtja a VAGY, ÉS, KIZÁRÓVAGY műveleteket és binárisan is megjeleníti

A feladat megoldása:

        static string Konvertáló(int szám)
        {
            const uint ALAP = 2;
            uint maradék, decimális = (uint)szám;
            string bináris = "";
            while (decimális != 0)
            {
                maradék = decimális % ALAP;
                bináris = maradék.ToString() + bináris;
                decimális = decimális / ALAP;
            }
            return bináris;
        }

        int a, b ,eVagy, eEs, eKizáróVagy, adat =0;
        string bin;

          // Adatok beolvasása és ellenőrzése       
        private void Olvasás_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                a = Int32.Parse(textBox1.Text);
                b = Int32.Parse(textBox2.Text);
                adat = 1;
                if (a <= 0 || b <= 0)
                {
                    MessageBox.Show("Az adat 0 vagy negatív szám!",
                                    "Hibajelzés");
                    textBox1.Text = ""; textBox2.Text = "";
                    adat = 0;
                 }
            }
        }

        // VAGY művelet
        private void button1_Click(object sender, EventArgs e)
        {
            if (adat == 1)
            {
                eVagy = a | b;
                bin = Konvertáló(eVagy);
                label5.Text = bin;
                textBox3.Text = eVagy.ToString();
            }
            else
                 MessageBox.Show("Adat nincs megadva!",
                                 "Hibajelzés");
       }

        // ÉS művelet
        private void button2_Click(object sender, EventArgs e)
        {
            if (adat == 1)
            {
                eEs = a & b;
                bin = Konvertáló(eEs);
                label6.Text = bin;
                textBox4.Text = eEs.ToString();
            }
            else
                 MessageBox.Show("Adat nincs megadva!"
                                 "Hibajelzés");
       }

        // KIZÁRÓVAGY művelet
        private void button3_Click(object sender, EventArgs e)
        {
            if (adat == 1)
            {
                eKizáróVagy = a ^ b;
                bin = Konvertáló(eKizáróVagy);
                label7.Text = bin;
                textBox5.Text = eKizáróVagy.ToString();
            }
            else
                 MessageBox.Show("Adat nincs megadva!",
                                 "Hibajelzés");
 
        }  

        // BINÁRIS megjelenítés
        private void button5_Click(object sender, EventArgs e)
        {
           if (adat == 1)
           {
                label3.Text = a.ToString();
                label4.Text = b.ToString();
                bin = Konvertáló(a);
                textBox6.Text = bin;
                bin = Konvertáló(b);
                textBox7.Text = bin;
           }
           else
                 MessageBox.Show("Adat nincs megadva!",
                                 "Hibajelzés"); 
        }

        //KILÉPÉS
        private void button4_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }    

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox3.Text = ""; textBox4.Text = "";
            textBox5.Text = ""; textBox6.Text = "";
            textBox7.Text = ""
label3.Text = "";
            label4.Text = ""; label5.Text = "";
            label6.Text = ""; label7.Text = "";
            adat = 0;
       }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            textBox3.Text = ""; textBox4.Text = "";
            textBox5.Text = ""; textBox6.Text = "";
            textBox7.Text = ""
label3.Text = "";
            label4.Text = ""; label5.Text = "";
            label6.Text = ""; label7.Text = "";
            adat = 0;
        }

A program futási eredményei:   

FÜGGVÉNY: Bináris szám adott helyértéken lévő állapot megjelenítése

Írjunk programot, amely pozitív egész számot átalakítja bináris számmá és a kért helyértéken lévő bit értékét  jeleníti meg. Ha  bármelyik adat hibás, hibajelzést ad.

A feladat megoldása:

             static string Konvertáló(int decimális)
         {
            const int ALAP = 2;
            int maradék;
            string bináris = "";
            while (decimális != 0)
            {
                maradék = decimális % ALAP;
                bináris = maradék.ToString() + bináris;
                decimális = decimális / ALAP;
            }
            return bináris;
        }

        private void button1_Click(object sender, EventArgs e)
        {
           int szám, maszk
           int n;
           string s;
           if (textBox1.Text != "" && textBox2.Text != "")
           {
               szám = Int32.Parse(textBox1.Text);
               n = Int32.Parse(textBox2.Text);
               if (szám >= 0 && n >= 0)
               {
                   s = Konvertáló(szám);
                   label4.Text = s;
                   maszk = 1 << n;
                   if ((szám & maszk) > 0)
                        textBox3.Text = n.ToString() +
                                        ". helyem: van 1 bit";
                   else
                        textBox3.Text = n.ToString() +
                                        ". helyem: van 0 bit";
                }
                else if (szám < 0)
                {
                   MessageBox.Show("A szám negatív!", "Hibajelzés");
                   textBox1.Text = "";
                }
                else if (n < 0)
                {
                    MessageBox.Show
                           ("A vizsgálandó bit helye negatív szám!",
                            "Hibajelzés");
                    textBox2.Text = "";
                }
            }
        }

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

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

A program futási eredményei:

      

      

      

FÜGGVÉNY: Bináris szám bitjeinek száma

Írjunk programot, amely egy pozitív egész számot átalakít bináris számmá és megszámlálja a bitek számát.

A feladat megoldása:

         static string Konvertáló(int szám)
         {
            const uint ALAP = 2;
            uint maradék, decimális = (uint)szám;
            string bináris = "";
            while (decimális != 0)
            {
                maradék = decimális % ALAP;
                bináris = maradék.ToString() + bináris;
                decimális = decimális / ALAP;
           }
           return bináris;
        }

        static uint BitSzámláló(uint n)
        {
            uint b = 0;
            for (; n != 0; n >>= 1)
            {
               if ((n | 1) != 0)
                  b++;
            }
            return b;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int adat;
            uint db, x;
            string bin;
            if (textBox1.Text != "" )
            {
                adat = Int32.Parse(textBox1.Text);
                if (adat > 0)
                {
                    x = (uint)adat;
                    bin = Konvertáló(adat);
                    textBox2.Text = bin;
                    db = BitSzámláló(x);
                    textBox3.Text = db.ToString();
                }
                else
                {
                      MessageBox.Show("A szám 0 vagy negatív!",
                                      "Üzenet");
                      textBox1.Text = "";
                }

            }

        }

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

A program futási eredményei:

          

         

           

Pozitív egész szám átalakítása bináris számmá helyértékkel ábrázolva

Írjunk programot, amely beolvas egy pozitív egész számot, átalakítja bináris számmá helyértékkel ábrázolva, negatív szám esetén hibajelzést ad.

A feladat megoldása:

        const int ALAP = 2;
        private void Átalakít_Click(object sender, EventArgs e)
        {
            int [] bin = new int[80];
            int dec, egész, maradék, i, j,k;
            if (textBox1.Text != "")
            {
                i = 0;
                dec = Int32.Parse(textBox1.Text);
                if (dec == 0) textBox2.Text = "0";
                else if (dec > 0)
                {
                    while (dec != 0)
                    { 
                        egész = dec / ALAP;
                        maradék = dec % ALAP;
                        bin[i] = maradék;
                    }    
                    i--;    
                    listBox1.Items.Clear();

                    for (j = i; j >= 0; j--)
                    {
                        k =(int) Math.Pow(2, j);
                        listBox1.Items.Add(bin[j]+ "     "+k);
                    }
                }
                else
                {
                    MessageBox.Show("A szám negatív! ",
                                    "Hibajelzés");
                    textBox1.Text = "";
                }
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox2.Text = "";
            listBox1.Items.Clear();
        }

        private void Kilépés_Click(object sender, EventArgs e)
        {
             Application.Exit();
        }

A program futási eredményei:

 

     

FÜGGVÉNY: Pozitív egész szám átalakítása bináris számmá

Írjunk programot, amely pozitív egész számot átalakít bináris számmá. Az átalakítást függvénnyel oldjuk meg. Negatív szám esetén adjunk hibajelzést.

A feladat megoldása:

           //Konvertáló függvény       
        static void Konvertál(int decimális, out string bináris)
        { 
            const int ALAP = 2;
            int maradék;
            bináris = "";
            while (decimális != 0)
            {
                maradék = decimális % ALAP;
                bináris = maradék.ToString() + bináris;
                decimális = decimális / ALAP;
            }
        }

        private void Átalakít_Click(object sender, EventArgs e)
        {
            string bin;
            int dec;
            if (textBox1.Text != "")
            {
                dec = Int32.Parse(textBox1.Text);
                if (dec == 0)
                {
                     textBox2.Text = "0";
                }
                else if ( szam > 0)
                {
                    Konvertál(dec, out bin);
                    textBox2.Text = bin;
                }
                else
                {
                    MessageBox.Show("A szám negatív! ",
                                    "Hibajelzés");
                    textBox1.Text = "";
                }
            }
        }

        private void Kilépés_Click(object sender, EventArgs e)
        {             
             Application.Exit();
        }

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

A program futási eredményei:

      

 

Pozitív egész szám átalakítása bináris számmá

Írjunk programot, amely beolvas egy pozitív egész számot és átalakítja bináris számmá. Negatív adat esetén adjunk hibajelzést.

A feladat megoldása:

            const int ALAP = 2;
        private void Átalakít_Click(object sender, EventArgs e)
        {
            string bin = "";
            int dec, maradék;
            if (textBox1.Text != "")
            {
                dec = Int32.Parse(textBox1.Text);
                if (dec == 0)
                {
                     textBox2.Text = "0";
                }
                else if (dec > 0)
                {
                     while (dec != 0)
                     {
                         maradék = dec % ALAP;
                         bin = maradék.ToString() + bin;
                         dec = dec / ALAP;
                     }
                     textBox2.Text = bin;
                }
                else
                {
                     MessageBox.Show("A szám negatív! ",
                                     "Hibajelzés");
                     textBox1.Text = "";
                }
            }
        }

        private void Kilépés_Click(object sender, EventArgs e);
        {
              Application.Exit();
        }

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

A program futási eredményei:


   

FÜGGVÉNY: Két 6 jegyű oktális szám összeadása

Írjunk függvényt, amely két 6 jegyű oktális számot ad össze. A két összeadandó számot ellenőrizze és az összeadásnál jelezze a túlcsordulást, ebben az esetben az eredmény hétjegyű lesz.

A feladat megoldása:

            static string oct_read(string oct, out int hiba1,
                                           out int hiba2)
        {
            int i, h, k;
            hiba1 = hiba2 = 0;
            h = oct.Length;
            if (h == 6)
            {
                for (i = 0; i < h; i++)
                {
                    k = oct[i] - '0';
                    if (k > 7)
                    {
                        hiba1 = i + 1;
                        return oct;
                    }
                }
            }
            else if (h < 6 || h > 6)
            {
                 hiba2 = h;
            }
            return oct;
        }

        static int oct_add(string s1, string s2, ref int[] eredm)
        {
            int carry = 0;
            int i, ered;
            for (i = 5; i >= 0; i--)
            {
                ered = carry + (s1[i] - '0') + (s2[i] - '0');
                if (ered > 7) carry = 1; else carry = 0;
                eredm[i] = ered & 7;
            }
            return carry;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string okt1="", okt2="", okt1j="", okt2j="";
            int i = 1, v;
            int hiba1 = 0, hiba2 = 0;
            int[] összeg = new int[7] { 0, 0, 0, 0, 0, 0, 0 };
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                okt1 = textBox1.Text;
                okt1j = oct_read(okt1, out hiba1, out hiba2);

                if (hiba1 != 0)

                    MessageBox.Show("adat: " + okt1.ToString() + "\n"
                             + hiba1.ToString() + ". digit hibás! ",
                             "Hibajelzés");
                if (hiba2 != 0)
                    MessageBox.Show("adat: " + okt1.ToString() + "\n"
                               + "A szám hatjegyű lehet: ez " +
                               hiba2.ToString(), "Hibajelzés");
                if (hiba1 != 0 || hiba2 != 0)
                {
                     textBox1.Text = ""; textBox3.Text = "";
                     okt1j = "";
                }
                else
                    { textBox1.Text = okt1j; }
                okt2 = textBox2.Text;
                okt2j = oct_read(okt2, out hiba1, out hiba2);
                if (hiba1 != 0)
                    MessageBox.Show("adat: " + okt2.ToString() + "\n"
                             + hiba1.ToString() + ". digit hibás! ",
                             "Hibajelzés");
                if (hiba2 != 0)
                    MessageBox.Show("adat: " + okt2.ToString() + "\n"
                                  + "A szám hatjegyű lehet: ez " +
                                  hiba2.ToString(), "Hibajelzés");
                if (hiba1 != 0 || hiba2 != 0)
                {
                    textBox2.Text = ""; textBox3.Text = "";
                    okt2j = "";
                }
                else
                   { textBox2.Text = okt2j; }
            }
            textBox3.Text = "";
            if (okt1j != "" && okt2j != "")
            {
                v = oct_add(okt1j, okt2j, ref összeg);
                if (v == 1)     
                               {
                    label4.Text = "Túlcsordult: az eredmény 7 jegyű";
                    textBox3.Text += '1'
                    for (i = 0; i <= 5; i++)
                       textBox3.Text += összeg[i].ToString();
                }
                else
                {
                    label4.Text = "Az eredmény 6 jegyű";
                    for (i = 0; i <= 5; i++)
                        textBox3.Text += összeg[i].ToString();
                }
            }
        }

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

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

 

A program futási eredményei:

  

     

FÜGGVÉNY: Palindrom vizsgálat

Írjunk programot, amely egy adott szövegről megállapítja, hogy Palindrom, ha visszafelé olvasva ugyanazt a szöveget adja vissza.  A szövegben megengedett változó számú szóköz, kis- és nagybetű is lehet, ezeket kiszűrve történjen meg a vizsgálat. A vizsgálat eredményét egy külön szövegablakban jelenítse meg.

A feladat megoldása:

        static int Palindrom(string sz, out string v)
        {
            int i, j, k=0;
            string t = "";
            v = "";
            // kiszűrjük a szóközöket
            for (i = 0; i <= sz.Length - 1; i++)
            {
                if (sz[i] != ' ')
                {
                    t = t + sz[i]; k++;
                }
            }
            t = t.ToLower(); // átalakítjuk kisbetűvé
            for (i = 0, j = t.Length-1; i<j; i++, j--)
            {
                if(t[i] != t[j]) return 0;
            }
            for (i = sz.Length - 1, j = 0; i >= 0; i--, j++)
                v = v + sz[i];
            return 1;
         }

        private void button1_Click(object sender, EventArgs e)
        {
             string s = "", fs;
             if (textBox1.Text != "")
             {
                s = textBox1.Text;
                if ( Palindrom(s,out fs )== 1)
                {
                    textBox2.Text = fs;
                    MessageBox.Show
                               ("A szöveg fordítva is olvasható!",
                                "Palindrom");
                }
                else
                    MessageBox.Show(
                                "A szöveg fordítva nem olvasható!",
                                "Üzenet");
            }
        }

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

A program futási eredményei:

    

    

     

      

FÜGGVÉNY: Egyenlő szárú háromszög

Írjunk programot, amely az egyenlő szárú háromszög alapjának és a szárának adatából kiszámítja a háromszög kerületét és a területét, melyet a paraméterlistán, a magasságát pedig visszatérési értékként adja vissza.

A feladat megoldása: 

            static double ESzárúHáromszög(double a_old, double b_old,
                                    out double ker, out double ter)
        {
            double h;
            h = Math.Sqrt(b_old * b_old - a_old * a_old / 4);
            ker = 2 * b_old + a_old;
            ter = a_old * h / 2;
            return h;
        }

        private void Számol_Click(object sender, EventArgs e)
        {
            double a,b, h, ter, ker;
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                a = Double.Parse(textBox1.Text);
                b = Double.Parse(textBox2.Text);
                h = ESzárúHáromszög(a, b, out ker, out ter);
                textBox3.Text = h.ToString("#.#####");
                textBox4.Text = ker.ToString("#.#####");
                textBox5.Text = ter.ToString("#.#####");
            }
        }

        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:

FÜGGVÉNY: Egyenlő oldalú háromszög

Írjunk programot, amely az egyenlő oldalú háromszög oldalából kiszámítja a háromszög kerületét és területét, melyet a függvény a paraméterlistán, a magasságot visszatérési értékként adja vissza.

A feladat megoldása:

                 static double EOldHáromszög(double a_old, out double ker,
                                    out double ter)
       {
            double h;
            h = Math.Sqrt(3.0) / 2.0 * a_old;
            ker = 3 * a_old;
            ter = (a_old * h)/2;
            return h;
        }

        private void Számol_Click(object sender, EventArgs e)
        {
            double a, h, ter, ker;
            if (textBox1.Text != "")
            {
                a = Double.Parse(textBox1.Text);
                h = EOldHáromszög(a, out ker, out ter);
                textBox2.Text = h.ToString("#.#####");
                textBox3.Text = ker.ToString("#.#####");
                textBox4.Text = ter.ToString("#.#####");
            }
        }

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

A program futási eredményei:

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