C# Sınav Programı Hazırlamak

Geçen gün okuldan ödev olarak istenmişti bende hazır yapmışım okuyucularımla paylaşayım dedim. Programın amacı her öğrenciye uygun saatlerde bir sınav programı hazırlamak. Programı c# ile yazmamın nedeni dinamik dizi kullanımının kolay olmasıydı. Umarım sizler için faydalı olur.

Öncelikle programın çalışma mantığını anlatmal istiyorum. Programda önce ders sayısını istiyoruz ve bunu ders_sayisi adlı değişkende tutuyoruz. Daha sonra öğrenci sayısını alıyoruz ve bunu ogrenci_sayisi adlı değişkende tutuyoruz. Sonrada bu değişkenlere bağlı olarak cakisma ve ogrenci matsilerini yaratıyorum. Kullanıcıdan aldığım değerleri örnek olarak ders_sayisi=5 ve ogrenci_sayisini=3 seçiyorum ve kullanıcıdan bütün öğrencilerin dersi alıp almadığını soruyorum.
şimdiye kadar anlattıklarımın kodları aşağıda gördüğünüz gibi

            int ders_sayisi=0;
            int ogrenci_sayisi=0;
            do
            {
                Console.WriteLine("Kaç Adet Ders Var ? ");
                ders_sayisi = Convert.ToInt16(Console.ReadLine());
                Console.WriteLine("Kaç Adet Öğrenci Var ? ");
                ogrenci_sayisi = Convert.ToInt16(Console.ReadLine());
            } while (ders_sayisi < 0 || ogrenci_sayisi < 0); 

            int[] ders = new int[ders_sayisi];
            int[,] ogrenci = new int[ders_sayisi,ogrenci_sayisi];
            int[] saat = new int[ders_sayisi];
            int[,] cakisma = new int[ders_sayisi, ders_sayisi];

            for (int i = 0; i < ogrenci_sayisi; i++) {
                for (int j = 0; j < ders_sayisi; j++) {
                    Console.WriteLine((i+1)+". Öğrenci "+(j+1)+". Dersi Alıyormu ? (1/0)");
                    ogrenci[j,i] = Convert.ToInt16(Console.ReadLine());
                }
            }

Daha sonra kullancıdan aldığım verilere göre ogrenci matsimin görüntüsü aşağıdaki gibi oluryor(Örnek verilere göre).

                Ders

Öğrenci

1 2

3

4

5

1

1

0

1

0

1

2

1

1

0

0

1

3

0

0

1

1

0

daha sonra her öğrenci için çakışan dersleri bulup çakışma matriside işaretliyorum. Bunu yapabilmem için gereken kod:

        for (int i = 0; i < ogrenci_sayisi; i++)
            {
                for (int j = 0; j < ders_sayisi; j++)
                {
                    if (ogrenci[j, i] == 1)
                    {
                        for (int k = 0; k < ders_sayisi; k++)
                        {
                            if (k != j)
                            {
                                if (ogrenci[k, i] == 1)
                                {
                                    cakisma[j, k] = 1;
                                }
                            }
                        }
                    }
                }
            }

bu yaptığımız işlemlerden sonra çakışma matrisimizin görüntüsü aşağıdaki gibi oluyor(Örnek verilere göre)

Ders/Ders

1

2

3

4

5

1

0

1

1

0

1

2

1

0

0

0

1

3

1

0

0

1

1

4

0

0

1

0

0

5

1

1

1

0

0

şimdi geldik önemli kısıma . cakisma matrisinde her satırda içeriğin ilk 0 olarak göründüğü yer kaçıncı sutundayda o dersin sınavı o sınav saatinde yapılırsa her öğrenci için uygun olarak. Her ders için bunu yapıyoruz ve ders saatlerini saat dizisinde tutuyoruz. bunu yapabilmek için kodlar :

          for (int i = 0; i < ders_sayisi; i++)
            {
                for (int j = 0; j < ders_sayisi; j++)
                {
                    if (cakisma[i, j] == 0)
                    {
                        saat[i] = j+1;
                        j = ders_sayisi;
                    }
                }
            }

artık sınavların hangi saatte yapıldığı elimizde var. Tek yapmamız gereken bunları ekrana bastırmak bunun içinde aşağıdaki kod yardımıyla yazdırmayı yapıyoruz ve programımız tamamlanmış oluyor.

        for (int i = 0; i < ders_sayisi; i++)
            {
                Console.WriteLine(i+1+". Sınavın başlama saati "+saat[i]+". Sınav saatindedir. ");
            }