Çö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;





İç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ış";
                    }
                }

            }
        }



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.
İ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();
        }


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:
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 ?
 
Peki program başladığında label değişiyor mu?
Evet.

C#:
        private void Form1_Load(object sender, EventArgs e)
        {
            UpdateNums();
        }

Bu kod uygulama başladığında fonksiyonu çalıştırıyor. IDE'de test edip attım zaten kodu.
 
Peki Load sadece form için mi kullanılıyor? Label için de kullanabilir miyim?
Hayır başka yerler için de var ama label öyle kullanılmıyor. Label için ne yapacaksın zaten? Bence kurs al onu izle bu şekilde çok öğrenemezsin.
 
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ış";
                    }
                }

            }
        }



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
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…