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

C# MŰHELY

C# MŰHELY

FÜGGVÉNY: Derékszögű háromszög

2020. december 22. - Benkő Tiborné

Írjunk programot, amely a derékszögű háromszög két befogójából számítsa ki az átfogót, a kerületet és a területet függvény használatával.

A feladat megoldása:

        static double DHáromszög(double a_old, double b_old,
                                 out double ker, out double ter)
        {
            double c_old;
            c_old = Math.Sqrt(a_old * a_old + b_old * b_old);
            ker = a_old + b_old + c_old;
            ter =( a_old * b_old)/2;
            return c_old;
        }

        private void Számol_Click(object sender, EventArgs e)
        {
            double a, b, c, ter, ker;
            if (textBox1.Text != "" && textBox2.Text!= "")
            {
                a = Double.Parse(textBox1.Text);
                b = Double.Parse(textBox2.Text);
                c = DHáromszög(a, b, out ker, out ter);
                textBox3.Text = c.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:

 

 

Lottójáték tervezése

Írjunk programot, amely kiértékeli a tippként megadott számokat, hogy a kihúzott számokból mennyit talált el, és a nyertes számokat is lehessen megnézni,

A feladat megoldása:

        int[] Lottó = new int[91];
        int találat = 0;

        private void Form1_Load(object sender, EventArgs e)
        {
            int index, i;
            Random m = new Random();
            listBox1.Items.Clear();
            for (i = 0; i < 91; i++)

                Lottó[i] = 0;
            i = 1;
            while (i <= 5)
            {
                index = m.Next(90) + 1;
                if(Lottó[index] == 0)
                {
                    Lottó[index] = 1;
                    i++;
                }
            }
        }

        private void Generál_Click(object sender, EventArgs e)
        {
            int index, i;
            Random m = new Random();
            listBox1.Items.Clear();
            for (i = 0; i < 91; i++)
                Lottó[i] = 0;
            i = 1;
            while (i <= 5)
            {
                index = m.Next(90) + 1;
                if (Lottó[index] == 0)
                {
                    Lottó[index] = 1;
                    i++
                }
            }
            textBox6.Text = ""; találat = 0;
            Találat.Enabled = true;
            Nyertes_számok.Enabled = true;
        }

        private void Találat_Click(object sender, EventArgs e)
        {
            int index;
            találat = 0;
            if (textBox1.Text != "" && textBox2.Text != "" &&
                textBox3.Text != "" && textBox4.Text != "" &&
                textBox5.Text != "")
            {
                index = Int32.Parse(textBox1.Text);
                if (Lottó[index] == 1) találat++;
                index = Int32.Parse(textBox2.Text);
                if (Lottó[index] == 1) találat++;
                index = Int32.Parse(textBox3.Text);
                if (Lottó[index] == 1) találat++;
                index = Int32.Parse(textBox4.Text);
                if (Lottó[index] == 1) találat++;
                index = Int32.Parse(textBox5.Text);
                if (Lottó[index] == 1) találat++;
                textBox6.Text = találat.ToString();
            }
        }

        private void Nyertes_számok_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            for (int i = 1; i < 90; i++)
            {
                 if (Lottó[i] == 1)
                      listBox1.Items.Add(i.ToString());
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            textBox6.Text = "";
            találat = 0;
            Találat.Enabled = false;
            Nyertes_számok.Enabled = false;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            textBox6.Text = "";
            találat = 0;
            Találat.Enabled = false;
            Nyertes_számok.Enabled = false;
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            textBox6.Text = "";
            találat = 0;
            Találat.Enabled = false;
            Nyertes_számok.Enabled = false;
        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            textBox6.Text = "";
            találat = 0;
            Találat.Enabled = false;
            Nyertes_számok.Enabled = false;
        }

        private void textBox5_TextChanged(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            textBox6.Text = "";
            találat = 0;
            Találat.Enabled = false;
            Nyertes_számok.Enabled = false;
        }

A program futási eredményei:

OSZTÁLY: Általános háromszög

Írjunk programot, amely az általános háromszög két oldalából és a közbezárt szögből kiszámítja háromszög harmadik oldalát, területét és a kerületét, a megoldáshoz használjunk osztályt. Az eredményeket 5 tizedesre kerekítve írjuk ki.

A feladat megoldása:  

           class ÁltHáromszög
         {
            private double a_old, b_old, c_old, szög, ker, ter;
            public ÁltHáromszög(double a, double b, double gamma;
            {
                a_old = a; b_old = b; szög = gamma; c_old = 0;
                ter = 0; ker = 0;
            }
           
            public void C_oldal()
            {
                 c_old = Math.Sqrt(a_old * a_old + b_old * b_old -
                                   2 * a_old * b_old *
                                   Math.Cos(szög * Math.PI / 180));
            }

            public void Kerület()
            {
                 ker = a_old + b_old + c_old;
            }

            public void Terület()
            {
                double s;
                s = (a_old + b_old + c_old) / 2;
                ter = Math.Sqrt(s * (s - a_old) * (s - b_old)
                                  * (s - c_old));
            }

            public double C_old
            {
                get { return c_old; }
            }

            public double Ter
            {
                get { return ter; }
            }

            public double Ker
            {
                 get { return ker; }
            }
        }

        private void Számol_Click(object sender, EventArgs e)
        {
            double a, b, gamma, c, terület, kerület;
            if (textBox1.Text != "" && textBox2.Text != "" &&
                textBox3.Text != "")
            {
                a = Double.Parse(textBox1.Text);
                b = Double.Parse(textBox2.Text);
                gamma = Double.Parse(textBox3.Text);
                ÁltHáromszög h = new ÁltHáromszög(a, b, gamma);
                h.C_oldal();
                h.Kerület();
                h.Terület();
                c = h.C_old;
                kerület = h.Ker;
                terület = h.Ter;
                textBox4.Text = c.ToString("#.#####");
                textBox5.Text = kerület.ToString("#.#####");
                textBox6.Text = terület.ToString("#.#####");
            }
        }

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

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

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

A program futási eredményei:

 

 

STRUKTÚRA: Általános háromszög

Írjunk programot, amely az általános háromszög két oldalából és a közbezárt szögből kiszámítja háromszög harmadik oldalát, területét és a kerületét, a megoldáshoz használjunk struktúrát. Az eredményeket 5 tizedesre kerekítve írjuk ki.

A feladat megoldása:

            struct ÁltHáromszög
        {
            private double a_old, b_old, c_old, szög;

            public ÁltHáromszög(double a, double b, double gamma)
            {
                a_old = a; b_old = b; szög = gamma; c_old = 0;
            }

            public double C_oldal()
            {
                 c_old =Math.Sqrt(a_old * a_old + b_old * b_old -
                                  2 * a_old * b_old *
                                  Math.Cos(szög * Math.PI / 180));
                 return c_old;
            }

            public double Kerület()
            {
                 return a_old + b_old + c_old;
            }

            public double Terület()
            {
                double s;
                s = (a_old + b_old + c_old) / 2;
                return Math.Sqrt(s * (s - a_old) * (s - b_old)
                                   * (s - c_old));
           }
        }

        private void Számol_Click(object sender, EventArgs e)
        {
            double a, b, gamma, c, terület, kerület;
            if (textBox1.Text != "" && textBox2.Text != "" &&
                textBox3.Text != "")
            {
                a = Double.Parse(textBox1.Text);
                b = Double.Parse(textBox2.Text);
                gamma = Double.Parse(textBox3.Text);
                ÁltHáromszög h = new ÁltHáromszög(a, b, gamma);
                c = h.C_oldal();
                kerület = h.Kerület();
                terület = h.Terület();
                textBox4.Text = c.ToString("#.#####");
                textBox5.Text = kerület.ToString("#.#####");
                textBox6.Text = terület.ToString("#.#####");
            }
        }

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

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

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

A program futási eredményei:

 

FÜGGVÉNY: Általános háromszög

Írjunk programot, amely az általános háromszög két oldalából és a közbezárt szögből kiszámítja háromszög harmadik oldalát, területét és a kerületét, a megoldáshoz használjunk függvényeket. Az eredményeket 5 tizedesre kerekítve írjuk ki.

A feladat megoldása:

        static double C_oldal(double a_old, double b_old,
                              double szög)
        {
            double c;
            c = Math.Sqrt(a_old*a_old + b_old*b_old- 
                         2*a_old*b_old*Math.Cos(szög*Math.PI/180));
            return c;
        }

        static void Kerület(double a_old, double b_old, double c_old,
                            out double ker)
        {
             ker = a_old + b_old + c_old;
        }

        static void Terület(double a_old, double b_old, double c_old,
                            out double ter)
        {
            double s;
            s = (a_old + b_old + c_old )/2;
            ter = Math.Sqrt(s*(s - a_old)*(s - b_old)*(s - c_old));
        }

        private void Számol_Click(object sender, EventArgs e)
        {
            double a, b, gamma, c, terület, kerület;
            if(textBox1.Text != "" && textBox2.Text != "" &&
               textBox3.Text != "")
            {
                a = Double.Parse(textBox1.Text);
                b = Double.Parse(textBox2.Text);
                gamma = Double.Parse(textBox3.Text);
                c = C_oldal(a, b, gamma);
                Kerület(a,b,c, out kerület);
                Terület(a,b,c,out terület);
                textBox4.Text = c.ToString("#.#####");
                textBox5.Text = kerület.ToString("#.#####");
                textBox6.Text = terület.ToString("#.#####");
            }
         }

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

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

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

 A program futási eredményei:

 

 

Általános háromszög számítások

Írjunk programot, amely az általános háromszög két oldalából és a közbezárt szögből kiszámítja háromszög harmadik oldalát, területét és a kerületét. Az eredményeket 5 tizedesre kerekítve írjuk ki.

A feladat megoldása:

                 private void Számol_Click(object sender, EventArgs e)
        {
            double a, b, gamma, c, terület, kerület, s;
            if(textBox1.Text != "" && textBox2.Text != "" &&
               textBox3.Text != "")
            {
                a = Double.Parse(textBox1.Text);
                b = Double.Parse(textBox2.Text);
                gamma = Double.Parse(textBox3.Text);
                c = Math.Sqrt(a*a + b*b - 2*a*b*Math.Cos
                   (gamma*Math.PI/180));
                kerület = a + b + c;
                s = kerület/2;
                terület = Math.Sqrt(s*(s-a)*(s-b)*(s-c));
                textBox4.Text = c.ToString("#.#####");
                textBox5.Text = kerület.ToString("#.#####");
                textBox6.Text = terület.ToString("#.#####");
            }
        }

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

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

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

A program futási eredményei:

REKURZIÓ: Mértani sor elemeinek összegszámítása

Készítsünk programot, amely beolvassa a mértani sor első tagját, a hányados értékét és kiszámítja a kívánt n-edik tag értékéig az elemek összegét, valamint a sor elemeit is megjeleníti egy listaablakban. Készítsünk rekurzív függvényt a mértani sor n-edik tagjának számításához.

A feladat megoldása:

        static int Mértanisor(int a, int d, int n)
        {
             if (n == 1)
                return a;
             else
                return d * Mértanisor(a, d, n - 1);
        }

        int első, hányad, szám;
        private void Végrehajtás_Click(object sender, EventArgs e)
        {          
            int n_edik;
            int összeg = 0;
            if (textBox1.Text != "" && textBox2.Text != "" &&
                textBox3.Text != "")
            {
                első = Int32.Parse(textBox1.Text);
                hányad = Int32.Parse(textBox2.Text);
                szám = Int32.Parse(textBox3.Text);
                összeg += első;
                for (int i = 2; i <= szám; i++)
                {
                    n_edik = Mértanisor(első, hányad, i);
                    összeg += n_edik;
                    textBox4.Text = összeg.ToString();
                }
            }
        }

        private void Kiírás_Click(object sender, EventArgs e)
        {
            string s;
            int n_edik;
            s = "";
            listBox1.Items.Clear();
            listBox1.Items.Add("1.elem: " + első);
            s = 1 + ".elem: " + első;
            s = "";
            for (int i = 2; i <= szám; i++)
            {
                n_edik = Mértanisor(első, hányad, i)
                s = i + ".elem: " + n_edik;
                listBox1.Items.Add(s);
            }
        }

        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ási eredményei:

 

RÁDIÓGOMB: Gömb felszínének és térfogatának számítása

Írjunk programot, amely rádiógombok használatával kiszámítja a gömb felszínét, vagy csak a térfogatát, illetve mind a kettőt.

A feladat megoldása

        private void button1_Click(object sender, EventArgs e)
        {
            double felsz, terf, r;
            if (textBox1.Text != "")
            {
                r = double.Parse(textBox1.Text);
                if (radioButton1.Checked == true)
                {
                    felsz = 4 * r * r * Math.PI;
                    textBox2.Text = felsz.ToString();
                    textBox3.Text = "";
                    radioButton2.Checked = false;
                    radioButton3.Checked = false;
                }
                if (radioButton2.Checked == true)
                {
                    terf = 4 * Math.Pow(r, 3) * Math.PI / 3;
                    textBox3.Text = terf.ToString();
                    textBox2.Text = "";
                    radioButton1.Checked = false;
                    radioButton3.Checked = false;
                }
                if (radioButton3.Checked == true)
                {
                    felsz = 4 * r * r * Math.PI;
                    textBox2.Text = felsz.ToString();
                    terf = 4 * Math.Pow(r, 3) * Math.PI / 3;
                    textBox3.Text = terf.ToString();
                    radioButton1.Checked = false;
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
        }

A program futási eredményei:

 

GRAFIKA: Pattogó labda

Írjunk programot, amely egy türkiz színű labdát a rajzterület közepén jeleníti meg és a rajta való kattintással induljon a labda pattogása.

A feladat megoldása:

namespace PattogoLabda
{
     public partial class Form1 : Form
     {
        public Form1()
        {
             InitializeComponent();
        }

        int r = 25, lepes = 10;
        int x, y, iranyx, iranyy;

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
             e.Graphics.FillEllipse(Brushes.Cyan,
                   new Rectangle(x - r, y - r, 2 * r, 2 * r));
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            x = ClientRectangle.Width / 2;
            y = ClientRectangle.Height / 2;
        }

        private void Form1_MouseClick(object sender,
                                      MouseEventArgs e)
        {
            iranyx = Math.Sign(e.X - x);
            iranyy = Math.Sign(e.Y - y);
            timer1.Interval = 20;
            timer1.Start();
       }

        private void timer1_Tick(object sender, EventArgs e)
        {
            x += iranyx*lepes;
            if (x < r || x > ClientRectangle.Width - r)
            {
                iranyx = -iranyx;
                x += iranyx*lepes;
            }
            y += iranyy*lepes;
            if (y < r || y > ClientRectangle.Height - r)
            {
                iranyy = -iranyy;
                y += iranyy*lepes;
            }
            Refresh();

        }

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

A feladat futási eredményei:

 

GRAFIKA: Labirintus

Írjunk programot labirintus  rajzolására.  A rajzolás a rajzterület közepén kezdődjön és a fel-, le-, jobbra-, és a balra nyilakat használja.

A  feladat megoldása:

namespace labirintus
{
    public partial class Form1 : Form
    {
        public Form1()
        {
             InitializeComponent();
        }
        Point fromPoint, toPoint;

        private void Form1_Load(object sender, EventArgs e)
        {
             fromPoint = new Point(ClientSize.Width / 2,
                                   ClientSize.Height / 2);
        }

        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            toPoint = fromPoint;       
            switch (e.KeyCode)
            {
                case Keys.Down: toPoint.Y += 10; break;
                case Keys.Up: toPoint.Y -= 10; break;
                case Keys.Left: toPoint.X -= 10; break;
                case Keys.Right: toPoint.X += 10; break; 
            }

            Graphics g = CreateGraphics();
            g.DrawLine(Pens.Red, fromPoint, toPoint);
            fromPoint = toPoint;
       }
   }
}

A program futási eredménye:

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