Çözüldü C# WinForms rasgele çarpım sorusu nasıl sordurtulur?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
17 Mayıs 2020
Mesajlar
2.815
Makaleler
1
Çözümler
27
Yer
Dünya
Şimdi ben küçük bir pencerede ilk açıldığında bize verdiğim sayı aralığında rastgele çarpım sorusu sormasını istiyorum.
1- Programı ilk çalıştırdığımda tetiklenerek, label içerisine benim verdiğimce sayı aralığında sayılar seçip yazmasını istiyorum.
2- Text kısmına ise cevabı yazıcağız ve doğru ise program kapanacak yanlış ise tekrar label değişerek yeni bir soru gelecek.
Şimdi yapmaya çalıştığım görseller;

Screenshot 2023-03-08 160003.png


Screenshot 2023-03-08 155935.png


İçerisindeki sayıları sileceğim.

Aklıma gelen küçük bir proje. Yeni C# ile kendimce bir şeyler yapmaya çalışıyorum. Önceden az buz Unity için C# kullanıyordum sadece.

Hocam bu işin ehli olduğunuz için sizi de etiketliyorum :). @300319
 
Son düzenleyen: Moderatör:
Çözüm
Kodlaması basit. Eve geçeyim konuya yazacağım.

Genel olarak basit bir işlem yapısı var.

Hocam bu işin ehli olduğunuz için sizi de etiketliyorum :). @300319

Öncelikle güzel yorumunuz için teşekkür ederim. Sizin için özel olarak programladım.

C#:
         // Sadece rakam girme ayarı.
        private void MinTextBox_KeyPress(object sender, KeyPressEventArgs e){
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')){
                e.Handled = true;
            }
            // Ondalıklı sayı girişine izin verir
            if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)){
                e.Handled = true;
            }
        }

        private void MaxTextBox_KeyPress(object sender, KeyPressEventArgs e){
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')){
                e.Handled = true;
            }
            // Ondalıklı sayı girişine izin verir
            if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)){
                e.Handled = true;
            }
        }

        // Sayıları liste üzerinde tutuyoruz
        List<int> generate_values = new List<int>();

        private void main_process(){
            // Boş olup olmadığını kontrol ediyoruz
            if (MinTextBox.Text == ""){
                MessageBox.Show("Lütfen minimum değeri giriniz.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }else if (MaxTextBox.Text == ""){
                MessageBox.Show("Lütfen maksimum değeri giriniz.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }else{
                if (MinTextBox.Text != "" && MaxTextBox.Text != ""){
                    // Int türüne dönüştürüyoruz
                    int min_value = Convert.ToInt32(MinTextBox.Text.Trim());
                    int max_value = Convert.ToInt32(MaxTextBox.Text.Trim());
                    // Min değerin Max değerden büyük olup olmadığını denetliyoruz
                    if (min_value > max_value){
                        MessageBox.Show(String.Format("Minimum değer ({0}), makismum değerden ({1}) büyük olamaz.", min_value, max_value), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        generate_values.Clear();
                    }else{
                        // 2 tane random üreteceği için for döngüsü ile çalıştırıyoruz
                        Random random_generate = new Random();
                        for (int i = 1; i <= 2; i++){
                            // kendi belirlediğimiz min ve max değerleri veriyoruz
                            int last_value = random_generate.Next(min_value, max_value);
                            // üretilen sayıları listeye ekliyoruz
                            generate_values.Add(last_value);
                        }
                        // groupbox2 başlığına olması gereken işlemi yazdırıyoruz
                        groupBox2.Text = "Sorunun cevabı nedir? :" + generate_values[0] + " * " + generate_values[1];
                    }
                }
            }
        }


        // Hesaplama işlemi için sürekli olarak farklı değer üretebilirsiniz.
        private void ProcessStartBtn_Click(object sender, EventArgs e){
            generate_values.Clear();
            main_process();
        }

        // Toplam sonucu göndermek için button komutu
        private void SendValueBtn_Click(object sender, EventArgs e){
            if (SendLastValueTextBox.Text == ""){
                MessageBox.Show("Lütfen sorunun cevabını yazınız.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }else{
                // Liste içerisinde üretilen 2 değeri çarpıyoruz ve summ değişkenine atıyoruz
                if (generate_values.Count == 0){
                    MessageBox.Show("Lütfen önce işlemi başatınız.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }else{
                    int summ = generate_values[0] * generate_values[1];
                    // Kontrol ediyoruz
                    if (Convert.ToInt32(SendLastValueTextBox.Text) == summ){
                        LastDanceLabel.Text = "Değer doğru";
                        // Programı kapatmak istiyorsanız eğer
                        //Application.Exit();
                    }else{
                        LastDanceLabel.Text = "Değer yanlış";
                    }
                }

            }
        }

1678298465454.png


Gördüğünüz üzere program sorunsuz çalışıyor. Textbox'lara sadece sayı girişine izin verecek şekilde ayarladım. Sonuç doğru ise "Değer doğru" yazıyor. Ek olarak açıklama satırı olarak programı kapatma kodunu yazdım. İsterseniz açıklama satırını kapatıp programın işlem doğru olduğunda kendini kapatmasını sağlayabilirsiniz.

Kolay gelsin, iyi çalışmalar.
Şimdi ben küçük bir pencerede ilk açıldığında bize verdiğim sayı aralığında rastgele çarpım sorusu sormasını istiyorum.
1- Programı ilk çalıştırdığımda tetiklenerek, label içerisine benim verdiğimce sayı aralığında sayılar seçip yazmasını istiyorum.
2- Text kısmına ise cevabı yazıcağız ve doğru ise program kapanacak yanlış ise tekrar label değişerek yeni bir soru gelecek.
Şimdi yapmaya çalıştığım görseller;

Eki Görüntüle 1694483

Eki Görüntüle 1694482

İçerisindeki sayıları sileceğim.

Aklıma gelen küçük bir proje. Yeni C# ile kendimce bir şeyler yapmaya çalışıyorum. Önceden az buz Unity için C# kullanıyordum sadece.

Hocam bu işin ehli olduğunuz için sizi de etiketliyorum :). @300319
İf else veya Swict case konularına bakınız. Kolay gelsin.
Text kısmına ise cevabı yazıcağız ve doğru ise program kapanacak yanlış ise tekrar label değişerek yeni bir soru gelecek.
 
C#:
        int sonuc;
        private void button1_Click(object sender, EventArgs e)
        {
            if (CheckValue())
            {
                UpdateNums();
            }
            else
            {
                this.Close();
            }
        }

        public bool CheckValue()
        {
            if(textBox1.Text == sonuc.ToString() && !String.IsNullOrEmpty(textBox1.Text))
            {
                return true;
            }
            return false;
        }

        public int GenerateRnd()
        {
            Random rnd = new Random();
            return rnd.Next(0, 11); // 0, 11 arasında değer döndür
        }

        public void UpdateNums() {
            int a = GenerateRnd();
            int b = GenerateRnd();
            sonuc = a * b;
            label1.Text = a.ToString() + " X " + b.ToString();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            UpdateNums();
        }
1678282413706.png


Bir label bir textbox bir button koyarak üstteki kodu çalıştırabilirsiniz. Daha pürüzsüz kod yazılabilir tabii ama çabucak bir şey yaptım. Yoksa hata verdirecek şeyler yapılabilir belki.
 
Son düzenleme:
C#:
        int sonuc;
        private void button1_Click(object sender, EventArgs e)
        {
            if (CheckValue())
            {
                UpdateNums();
            }
            else
            {
                this.Close();
            }
        }

        public bool CheckValue()
        {
            if(textBox1.Text == sonuc.ToString() || !String.IsNullOrEmpty(textBox1.Text))
            {
                return true;
            }
            return false;
        }

        public int GenerateRnd()
        {
            Random rnd = new Random();
            return rnd.Next(0, 11); // 0, 11 arasında değer döndür
        }

        public void UpdateNums() {
            int a = GenerateRnd();
            int b = GenerateRnd();
            sonuc = a * b;
            label1.Text = a.ToString() + " X " + b.ToString();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            UpdateNums();
        }
Eki Görüntüle 1694513

Bir label bir textbox bir button koyarak üstteki kodu çalıştırabilirsiniz. Daha pürüzsüz kod yazılabilir tabii ama çabucak bir şey yaptım. Yoksa hata verdirecek şeyler yapılabilir belki.
String değeri böylede mi çevriliyormuş :). Sağol hocam.

String değeri böylede mi çevriliyormuş :). Sağol hocam.
Peki program başladığında label değişiyor mu ?
 
Kodlaması basit. Eve geçeyim konuya yazacağım.

Genel olarak basit bir işlem yapısı var.

Hocam bu işin ehli olduğunuz için sizi de etiketliyorum :). @300319

Öncelikle güzel yorumunuz için teşekkür ederim. Sizin için özel olarak programladım.

C#:
         // Sadece rakam girme ayarı.
        private void MinTextBox_KeyPress(object sender, KeyPressEventArgs e){
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')){
                e.Handled = true;
            }
            // Ondalıklı sayı girişine izin verir
            if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)){
                e.Handled = true;
            }
        }

        private void MaxTextBox_KeyPress(object sender, KeyPressEventArgs e){
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')){
                e.Handled = true;
            }
            // Ondalıklı sayı girişine izin verir
            if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)){
                e.Handled = true;
            }
        }

        // Sayıları liste üzerinde tutuyoruz
        List<int> generate_values = new List<int>();

        private void main_process(){
            // Boş olup olmadığını kontrol ediyoruz
            if (MinTextBox.Text == ""){
                MessageBox.Show("Lütfen minimum değeri giriniz.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }else if (MaxTextBox.Text == ""){
                MessageBox.Show("Lütfen maksimum değeri giriniz.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }else{
                if (MinTextBox.Text != "" && MaxTextBox.Text != ""){
                    // Int türüne dönüştürüyoruz
                    int min_value = Convert.ToInt32(MinTextBox.Text.Trim());
                    int max_value = Convert.ToInt32(MaxTextBox.Text.Trim());
                    // Min değerin Max değerden büyük olup olmadığını denetliyoruz
                    if (min_value > max_value){
                        MessageBox.Show(String.Format("Minimum değer ({0}), makismum değerden ({1}) büyük olamaz.", min_value, max_value), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        generate_values.Clear();
                    }else{
                        // 2 tane random üreteceği için for döngüsü ile çalıştırıyoruz
                        Random random_generate = new Random();
                        for (int i = 1; i <= 2; i++){
                            // kendi belirlediğimiz min ve max değerleri veriyoruz
                            int last_value = random_generate.Next(min_value, max_value);
                            // üretilen sayıları listeye ekliyoruz
                            generate_values.Add(last_value);
                        }
                        // groupbox2 başlığına olması gereken işlemi yazdırıyoruz
                        groupBox2.Text = "Sorunun cevabı nedir? :" + generate_values[0] + " * " + generate_values[1];
                    }
                }
            }
        }


        // Hesaplama işlemi için sürekli olarak farklı değer üretebilirsiniz.
        private void ProcessStartBtn_Click(object sender, EventArgs e){
            generate_values.Clear();
            main_process();
        }

        // Toplam sonucu göndermek için button komutu
        private void SendValueBtn_Click(object sender, EventArgs e){
            if (SendLastValueTextBox.Text == ""){
                MessageBox.Show("Lütfen sorunun cevabını yazınız.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }else{
                // Liste içerisinde üretilen 2 değeri çarpıyoruz ve summ değişkenine atıyoruz
                if (generate_values.Count == 0){
                    MessageBox.Show("Lütfen önce işlemi başatınız.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }else{
                    int summ = generate_values[0] * generate_values[1];
                    // Kontrol ediyoruz
                    if (Convert.ToInt32(SendLastValueTextBox.Text) == summ){
                        LastDanceLabel.Text = "Değer doğru";
                        // Programı kapatmak istiyorsanız eğer
                        //Application.Exit();
                    }else{
                        LastDanceLabel.Text = "Değer yanlış";
                    }
                }

            }
        }

1678298465454.png


Gördüğünüz üzere program sorunsuz çalışıyor. Textbox'lara sadece sayı girişine izin verecek şekilde ayarladım. Sonuç doğru ise "Değer doğru" yazıyor. Ek olarak açıklama satırı olarak programı kapatma kodunu yazdım. İsterseniz açıklama satırını kapatıp programın işlem doğru olduğunda kendini kapatmasını sağlayabilirsiniz.

Kolay gelsin, iyi çalışmalar.
 
Son düzenleyen: Moderatör:
Çözüm

Technopat Haberler

Yeni konular

Geri
Yukarı