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

C# MŰHELY

C# MŰHELY

Prímszám vizsgálata

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

A prímszámok csak eggyel és önmagukkal osztható, pozitív egész számok. Készítsünk programot, amely a megadott egész számról megmondja, hogy prímszám! Használjuk a break utasítást és case utasítást a kiértékelésre! 

A feladat megoldása:

        private void Vizsgálat_Click(object sender, EventArgs e)
        {
            int i, szám, prím;
            prím = 0;
            if (textBox1.Text != "")
            {
                szám = Int32.Parse(textBox1.Text);
                for (i = 2; i <= szám /2; i++)
                    if (szám % i == 0)
                    {
                        prím = 1;
                        break;
                    }
                switch (prím)
                {
                    case 0: textBox2.Text = "PRÍMSZÁM"; break;
                    case 1: textBox2.Text = "NEM PRÍMSZÁM"; break;
                }
            }
        }

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

A program futási eredményei:

    

    

 

 

 

 

 

Adatbeolvasást 0 terminálja

Olvassunk be adatokat az Enter leütésével. Az adatokat a 0 terminálja.Számítsuk ki a pozitív  és külön a negatív számok összegét, valamint a teljes összeget. Írassuk ki az adatok számát.

A feladat megoldása:

A Form_Load eseménykezelő, amely legelsőnek szólal meg, itt állítjuk be a comboBox stílusát. A Számol gombot letiltjuk. A listadoboz tartalmát töröljük. A első címke mezejébe a  0 az adatmegadás vége. szöveget írjuk.

A comboBox1_keyPress eseménykezelőben az adatokat comboBox Text mezejébe olvassuk be az Enter leütésével és beírjuk a comboBox1 listaablakába.Ezután az adatot a vége változóba egész számként olvassuk le (Int32.Parse). Ha a vége nem nulla, akkor beírjuk a listBox1 listaablakába, ha nulla, akkor a Számol nyomógombot hozzáférhetővé tesszük A db változóba leolvassuk az adatok darabszámát a  comboBox1 listaablak Count tulajdonságából,ez tartalma az ablakban az adatok számát-1.

 A Számol_Click eseménykezelő a Számol nyomógomb megnyomásakor kerül meghívásra. Darabonként leolvassuk a szövegesen tárolt  adatokat az adat változóba. Majd kiszámítjuk az adatok összegét, a pozitív, negatív adatok összegét. Ezután kerülnek az eredmények kiírása a megfelelő szövegablakokba. A Számol nyomógomb hozzáférhetőségét letiltjuk.

Az Alapállapot_Click eseménykezelő az Alapállapot nyomógomb megnyomásakor hívódik meg, ahol az eredményt kiíró szövegablakok, valamint a listBox1 és a comboBox1 listaablakok törlődnek.

                        // Globális változók deklarálása
        int összeg, neg_összeg, poz_összeg;
        //  Adatok beolvasása Enter lenyomásával
        // adatok beírása a listaablakba
        private void comboBox1_KeyPress(object sender,
                                        KeyPressEventArgs e)
        {
            int vége;
            if (e.KeyChar == '\r'// Enter lenyomása
            {
                comboBox1.Items.Add(comboBox1.Text);
                vége = Int32.Parse(comboBox1.Text);
                if (vége != 0)
                {
                    listBox1.Items.Add(comboBox1.Text);
                    comboBox1.Text = "";  
                }
                else
                {
                    Számol.Enabled = true;
                    textBox1.Text = "Adatok száma: " +
                       (comboBox1.Items.Count - 1).ToString();
                }
            }
        }

        private void Számol_Click(object sender, EventArgs e)
        {
            int adat, i, db;
            összeg = 0; neg_összeg = 0; poz_összeg = 0;
            db = listBox1.Items.Count;
            for (i = 0; i < db; i++)
            {
                textBox1.Text = listBox1.Items[i].ToString();
                adat = Int32.Parse(textBox1.Text);
                összeg += adat;
                if (adat > 0) poz_összeg += adat;
                if (adat < 0) neg_összeg += adat;
            }
            textBox2.Text = összeg.ToString();
            textBox3.Text = poz_összeg.ToString();
            textBox4.Text = neg_összeg.ToString(); 
            textBox1.Text = "Adatok száma: " + db.ToString();
            Számol.Enabled = false;
        }

        // Alapállapot beállítása
        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.DropDownStyle = ComboBoxStyle.Simple;
            Számol.Enabled = false;
            listBox1.Items.Clear();
            label1.Text = "0 az adatmegadás vége.";
        }

        // Alapállapot beállítása a program újrafuttatásához
        private void Alapállapot_Click(object sender, EventArgs e)
        {
            comboBox1.Text = "";
            textBox2.Text = ""; textBox3.Text = "";
            textBox4.Text = "";
            textBox1.Text = "";
            listBox1.Items.Clear();
            comboBox1.Items.Clear();
        }

A program futási eredményei:

 

Adatbeolvasást két 0 terminálja

Olvassunk be negatív és pozitív egész számokat. Határozzuk meg összegüket, valamint külön a pozitív és negatív számok összegét is. A nullákat is értékes számnak tekintsük. Az összegek mellett határozzuk meg a nullák darabszámát is. A ciklusból két egymást után beolvasott 0-val léphetünk ki.

A feladat megoldása:

Deklaráljunk egy volt egész típusú változót, melynek kezdőértékét a Form1_Load 0-ra állítja.  Ennek a változónak az 1-re állítása jelzi, hogy 0-át olvastunk, és újra 0 lesz az értéke, ha a kö­vetkező beolvasott érték nem zérus. 

                if (szám == 0 && volt == 1)
       {
           button1.Enabled = false;
           button2.Enabled = true;
       }
       if(szám == 0)
            volt =1;
       else volt = 0;

A feladat programlistája:

            // Globális változók
        int volt, szám;
        // Adatok beolvasása.
        // illetve két egymásutáni 0 állítja le az olvasást
        private void Adatot_olvas_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
            {
                szám = Int32.Parse(textBox1.Text);
                listBox1.Items.Add(textBox1.Text);
                textBox1.Clear();
                textBox1.Focus();
                if (szám == 0 && volt == 1)
                {
                    Adatot_olvas.Enabled = false;
                    Számol.Enabled = true;
                }
                if (szám == 0)
                    volt = 1;
                else volt = 0;
            }
         }
         // Kiértékelés
         private void Számol_Click(object sender, EventArgs e)
         {
            int adat, összeg = 0, neg_összeg = 0, poz_összeg = 0,
                i, db,
zérusok_száma = 0;
            db = listBox1.Items.Count;
            for (i = 0; i < db - 1; i++)
            {
                textBox1.Text = listBox1.Items[i].ToString();
                adat = Int32.Parse(textBox1.Text);
                összeg += adat;
                if (adat == 0)
                    zérusok_száma++;
                else if (adat > 0)
                    poz_összeg += adat;
                else neg_összeg += adat;
            }
            textBox2.Text = összeg.ToString();
            textBox3.Text = poz_összeg.ToString();
            textBox4.Text = neg_összeg.ToString();
            textBox5.Text = zérusok_száma.ToString();
            textBox1.Text = "Adatok száma: " + (db - 1).ToString();
        }

        // Az alapállapot beállítása
        private void Form1_Load(object sender, EventArgs e)
        {
            volt = 0;
            listBox1.Items.Clear();
            Számol.Enabled = false
        }

A program futási eredménye:

Generált adatokat a 0 terminálja

Végtelen ciklusban véletlenszám generátorral a megadott határok között generáljunk számokat, úgy hogy legyen benne pozitív és negatív szám is generálás esetén. Közben gyűjtjük a pozitív és negatív számok összegét. Ha a generált érték 0, lépjünk ki a végtelen ciklusból break utasítással. Ezután határozzuk meg a teljes összeget és  jelenítsük meg az eredményeket.

Két fajta végtelen ciklust is készíthetünk. A while ciklusnál a feltétel mezőbe írt true mindig igaz feltételt jelent, így a ciklus nem áll le.

   while(true) // végtelen ciklus
  {
      adat = m.Next(kezdő, vég);
      s += "  " + adat.ToString();
      if (adat == 0)
      {
         textBox5.Text += s;
         break; // kilépés a ciklusból
      }
              . . .
  }

 A for ciklusban a két pontosvessző jelenti a végtelen ciklust, mivel nincs vizsgálati feltétel a ciklus leállítására.

    for (; ; )  // végtelen ciklus
   {
        . . . 
   }

A feladat megoldása:          

            // Globális változók deklarálása
            int
poz_összeg, neg_összeg, összeg;
            private void Számol_Click(object sender, EventArgs e)
            {
                int adat, kezdő, vég;
                string s = "";
                poz_összeg = 0; neg_összeg = 0; összeg = 0;
                Random m = new Random();
                if(textBox1.Text != "" && textBox2.Text != "")
                {
                    kezdő = Int32.Parse(textBox1.Text);
                    vég = Int32.Parse(textBox2.Text);
                    for (; ; ) // végtelen ciklus
                    {
                       adat = m.Next(kezdő,vég); // adat generálása
                       s += "  " + adat.ToString();
                       if (adat == 0)
                       {
                           textBox5.Text += s;
                           break; // kilépés a ciklusból
                       }
                       if (adat > 0) poz_összeg += adat;
                       if (adat < 0) neg_összeg += adat;
                    }
                    textBox3.Text = poz_összeg.ToString();
                    textBox4.Text = neg_összeg.ToString();
                    //a teljes összeg
                    összeg = poz_összeg + neg_összeg;  
                    textBox6.Text = összeg.ToString();
                    Számol.Enabled = false;
               }
            }

            private void Törlés_Click(object sender, EventArgs e)
            {   
                textBox3.Text = ""; textBox4.Text = "";
                textBox5.Text = ""; textBox6.Text = "";
                Számol.Enabled = true;
            }

            private void textBox1_TextChanged(object sender,
                                              EventArgs e)
            {
                textBox3.Text = ""; textBox4.Text = "";
                textBox5.Text = ""; textBox6.Text = "";
                Számol.Enabled = true;
            }

            private void textBox2_TextChanged(object sender,
                                              EventArgs e)
            {
                textBox3.Text = ""; textBox4.Text = "";
                textBox5.Text = ""; textBox6.Text = "";
                Számol.Enabled = true;
            }

A program futási eredménye:


 

 

Kamatos kamat számítása és kiírása évenkénti bontásban

Írjunk programot, amely évenkénti bontásban kiszámítja és kiírja a betét ka­ma­tos kamattal megnövelt összegét. A betét, kamat és az évek száma bemenő adat.

A feladat megoldása:

        private void Számítáa_Click(object sender, EventArgs e)
        {
            int i, év;
            double összeg, kamatláb;
            string s;
            listBox1.Items.Clear();
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                összeg = Double.Parse(textBox1.Text);
                kamatláb = Double.Parse(textBox2.Text);
                do
                {
                    év = Int32.Parse(textBox3.Text);
                } while (év < 1 || év > 10);
                for (i = 1; i <= év; i++)
                {
                    összeg *= (1 + kamatláb / 100);
                    s = " " + i.ToString() +
                        ".   év végén az összeg:  " +
                        összeg.ToString() + " Ft";
                    listBox1.Items.Add(s);
                }
                textBox4.Text = " " + év.ToString() +
                                ".   év végén az összeg:  " +
                                összeg.ToString() + " Ft";
            }
        }

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

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

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

A program futásának eredménye:

 

Kamatos kamat számítása

Írjunk programot, amely kiszámítja és kiírja a betét ka­ma­tos kamattal megnövelt összegét. A betét, kamat és az évek száma bemenő adat.

A feladat megoldása:

                        private void Számítáa_Click(object sender, EventArgs e)
        {
            int i, év;
            double összeg, kamatláb;
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                összeg = Double.Parse(textBox1.Text);
                kamatláb = Double.Parse(textBox2.Text);
                do
                {
                    év = Int32.Parse(textBox3.Text);
                } while (év < 1 || év > 10);
                for (i = 1; i <= év; i++)
                {
                    összeg *= (1 + kamatláb / 100);
                }
                textBox4.Text = " " + év.ToString() +
                                ".   év végén az összeg:  " +
                                összeg.ToString() + " Ft";
            }
         }

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

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

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

 A program futásának eredményei:

  

 

 

 

Celsius fokból Fahrenheit és Reaumur fokra számol át

Írjunk programot, amely Celsius fokból Fahrenheit, ill. Reaumur fokra számol át és táblázatot készít while ciklussal. A hőmérséklet -5 Celsius foktól +15 Celsius fokig 5 Celsius fokos lépésekben változzon.

A feladat megoldása:

        private void Számol_Click(object sender, EventArgs e)
        {
            int celsius;
            string s, s1 = "";
            double fahrenheit, reaumur;
            s = "            Celsius     Fahrenheit";
            s += "     Reaumur";
            celsius = -5;
            listBox1.Items.Clear();
            listBox1.Items.Add(s);
            while (celsius <= 15)
            {
                fahrenheit = 1.8 * celsius + 32;
                reaumur = 0.8 * celsius;
                s1 = "\t" + celsius.ToString()  + "\t   " +
                     fahrenheit.ToString() + "\t       " +
                     reaumur.ToString();
                listBox1.Items.Add(s1);
                celsius += 5;
            }
        }

A program futási eredménye:

Két valós szám azonosságának vizsgálata

Két valós számról nehezen lehet eldönteni, hogy azonosak-e. Azonos­nak fogadhatjuk el a két számot, ha a két szám különbségének abszolút értéke egy adott korlátnál kisebb. Írjunk programot, amely beolvas két számot és a korlátot, majd eldönti, hogy azonosak-e a beolvasott számok, ha nem, akkor a nagyobbikat írja vissza a két szám különbségének abszolút értékével.

A program az alábbi duplapontos változókat használja:

  • adat1 , adat2   a két szám tárolására,
  • eps korlátot tartalmazza,
  • max a két szám közül a nagyobb tárolására szolgál,
  • eltér a két szám különbségének abszolút értékét tartalmazza.

A duplapontos számok abszolút értékének vizsgálatára szolgál a Math.Abs függvény.

A feladat megoldása:

                 private void Kiértékelés_Click(object sender, EventArgs e)
        {
            double adat1, adat2, eps, eltér;
            if (textBox1.Text != "" && textBox2.Text != "" &&
                textBox3.Text != "")

            {
                adat1 = Double.Parse(textBox1.Text);
                adat2 = Double.Parse(textBox2.Text);
                eps = Double.Parse(textBox3.Text);
                eltér = Math.Abs(adat1 - adat2);
                if (eltér < eps)
                   textBox5.Text = "A két szám azonos " +
                                   eps.ToString() +
                                   " eltéréssel!";
                else
                {
                    if (adat1 > adat2)
                        textBox4.Text = adat1.ToString();
                    else
                        textBox4.Text = adat2.ToString();
                    textBox5.Text = eltér.ToString();
                }
            }
        }

        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 = "";
        }

        private void Törlés_Click(object sender, EventArgs e)
        {
            textBox1.Text = ""; textBox3.Text = "";
            textBox2.Text = "";
        }

 A program futási eredményei:

  

 

 

Osztási művelet két egész szám között 2. 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 megoldásnál switch utasítást használunk, melynek művelet egész típusú változója 1, ha az osztandó a nagyobb, vagy 2, akkor az osztó a nagyobb

 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, művelet;
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                osztandó = Int32.Parse(textBox1.Text);
                osztó = Int32.Parse(textBox2.Text);
                if (osztó > 0 && osztandó > 0)
                {
                  if (osztandó >= osztó) művelet = 1;
                  else művelet = 2;
                    switch (művelet)
                    {
                       case 1: hányados = osztandó / osztó;
                            maradék = osztandó % osztó;
                            textBox3.Text = osztandó.ToString();
                            textBox4.Text = hányados.ToString();
                            textBox5.Text = maradék.ToString();
                            break;
                       case 2: hányados = osztó / osztandó;
                            maradék = osztó % osztandó;
                            textBox3.Text = osztó.ToString();
                            textBox4.Text = hányados.ToString();
                            textBox5.Text = maradék.ToString();
                            break;
                     }
                }
                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:

  

Karakterek vizsgálata 3. módszer

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

A program másik megoldásához ismernünk kell néhány függvényt a  karakte­rek vizsgálatával kapcsolatosan:

  • számok vizsgálatára :    Char. IsNumber(ch),
  • kisbetűk vizsgálatára:    Char.IsLower(ch),
  • nagybetűk vizsgálatára: Char.IsUpper(ch)

 A feladat megoldása:

                 private void textBox1_KeyPress(object sender,
                                       KeyPressEventArgs e)
        {
            char ch;
            int c;
            if (e.KeyChar != '\n')
            {
                ch = e.KeyChar;
                textBox2.Text = ch.ToString();
                if(Char.IsLower(ch))
                    textBox3.Text = "Kisbetű";
                else if(Char.IsUpper(ch))
                    textBox3.Text = "Nagybetű";
                else if (Char.IsNumber(ch))
                    textBox3.Text = "Szám";
                else
                    textBox3.Text = "Egyéb karakter";
                c = (int)ch;
                textBox4.Text = c.ToString();
            }
         }

A program futási eredményei:

   

   

 

 

 

 

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