Bu uygulamam da aşağıdaki linkte bahsettiğim uygulamaya benzer bir uygulama gerçekleştireceğim.
Fark olarak burada tek boyutlu bir dizi yerine iki boyutlu bir rectangular dizi kullanacağım. Burada yine 10 öğrencime ilişkin notlarımı tutacağım bir dizi oluşturacağım ama bu sefer her öğrencinin 3 notu olacak. Yani dizimdeki her bir satır herhangi bir öğrencinin 3 notunu içerecek. Dizimdeki her bir sütunda her bir sınava ilişkin olarak 10 öğrencinin notunu içermiş olacak. Yani aşağıdaki tablodaki gibi bir yapı:
Programı çalıştırdığımda ekrana notları yazdıracağım. Daha sonra bu notların ortalamasını yazacağım, en düşük notu yazacağım. En yüksek notu yazacağım. Daha sonra birde 10 lu aralıklar ile her not aralığından kaç tane var onu bulacağım. Yani diyelim ki 51-60 arası kaç not var, onu bulacağım. Bu işlemlerin hepsini ayrı bir sınıf içinde ve farklı metotlarda yapacağım. Yani aslında ben bu örneğimde bir çok csharp yapısını bir arada kullanacağım. Hemen visual studio da yeni bir proje açıyorum. Console uygulaması açıyorum. Daha sonra Visual Studio Solution Explorer alanında proje adımda sağ tıklayıp yeni bir Class ekliyorum adını da NotDefteri verdim. Daha sonra NotDefteri sınıfım açıkken aşağıdaki kodları yazıyorum. Açıklamaları kod bloğumda veriyorum.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication22 { public class NotDefteri { //notları tutacağım int tipinde rectangular bir dizi oluşturuyorum. private int[ , ] notlar; //auto-implemented property DersAdi oluşturuyorum. public string DersAdi { get; set; } //iki parametreli constructor oluşturuyorum. //auto-implemented property DersAdi ve NotlarDizisi public NotDefteri(string ad, int[ , ] NotlarDizisi) { //DersAdi'ni ad'a set ediyorum DersAdi = ad; //NotlarDizisi çalıştırılır. notlar = NotlarDizisi; } //iki parametreli NotDefteri constructor burada sonlanıyor //Programda Hoşgeldin mesajımı buradaki MesajGoster metodum ile oluşturuyorum public void MesajGoster() { Console.WriteLine( "Not Defteri Programına Hoşgeldiniz \n{0}!\n", DersAdi); } // MesajGoster metodu sonu //Notlar üzerinde diğer işlemleri yapacğaım kodlarımı NotlariIsle metodumda yazıyorum //bu metot çalıştığında kendi içindeki metotları çağıracak ve işlemler gerçekleşecek public void NotlariIsle() { //Dizi halindeki notları listeleyeceğim metodum, sonra oluşturucam NotlariListele(); //Notların minimum değerini ve maksimum değerini bulacağım metotları çağırıyorum Console.WriteLine( "En düşük not {0}\nEn yüksek not {1}\n", MinimumNot(), MaksimumNot()); //Not aralıklarındaki hangi aralıktan kaç not var göstereceğim metotu çağırıyorum NotAraliklari(); }//NotlariIsle metodunun sonu //En düşük notu bulacak metodumu yazıyorum public int MinimumNot() { //notlar dizisinin 0. indeksindeki elemanı en düşük kabul edip DusukNot değişkenime //aktarıyorum int DusukNot = notlar[ 0, 0 ]; //Notlar dizisinde döngümü oluştuyorum foreach (int not in notlar) { //döngünün her adımındaki değeri DusukNot ile karşılaştırıyorum, //eğer o adımdaki değer DusukNot değerinden küçük ise bu sefer o adımdaki değeri //DusukNot değerine aktarıyorum if (not < DusukNot) DusukNot = not; // yeni DusukNot değerim } // foreach döngüsü sonu return DusukNot; // en düşük not değerini metot sonucu geri döndürüyorum } //MinimumNot metodu sonu //En Yüksek notu bulacak metodumu yazıyorum public int MaksimumNot() { //notlar dizisinin 0. indeksindeki elemanı en yüksek kabul edip YuksekNot değişkenime //aktarıyorum int YuksekNot = notlar[ 0, 0 ]; //Notlar dizisinde döngümü oluştuyorum foreach (int not in notlar) { //döngünün her adımındaki değeri YuksekNot ile karşılaştırıyorum, //eğer o adımdaki değer YuksekNot değerinden büyük ise bu sefer o adımdaki değeri //YuksekNot değerine aktarıyorum if (not > YuksekNot) YuksekNot = not; // yeni YuksekNot değerim } // foreach döngüsü sonu return YuksekNot; // en yüksek not değerini metot sonucu geri döndürüyorum } //MaksimumNot metodu sonu //Her bir öğrencini ortalamasını alacak metodumu yazıyorum public double OrtalamaAl(int ogrenci) { //Her bir öğrenci için notların sayısını tutacağım değişkenimi oluşturuyorum int miktar = notlar.GetLength(1); //Dizideki değişkenlerin toplam değerini burada tutacağım int toplam=0; //Her öğrenci için notlarının toplamını buradaki döngü ile elde edeceğim for (int sinav = 0; sinav < miktar; sinav++ ) { toplam += notlar[ogrenci, sinav]; } //Geriye notların ortalamasını döndürüyorum return (double)toplam / miktar; } //OrtalamaAl metodunun sonu //NotAraliklari metodumu burada oluşturuyorum public void NotAraliklari() { Console.WriteLine("Not Dağılımı:"); //YildizSayisi değişkenimde dizim içindeki notları inceleyerek hangi aralıkta //kaç tane not var, onu sayacağım. Daha sonra bu sayı kadar yıldız ile gösterim //yapacağım. Burada dikkat edilecek husus YildizSayisi adında int tipinde bir dizi //oluşturdum. Bu dizimin ilgili indeksinde ilgili not aralıklarını saklayacağım. int[] YildizSayisi = new int[11]; //her bir not aralığı için ilgili YildizSayisi dizisindeki elemanlardan ilgili //indeksin eleman sayısını arttırıyorum foreach (int not in notlar) { ++YildizSayisi[not / 10]; } //Not aralıklarına göre Yıldız sayısını göstereceğim döngümü oluşturuyorum for (int sayac = 0; sayac < YildizSayisi.Length; sayac++) { if (sayac == 10) { Console.Write(" 100: "); } else { Console.Write("{0:D2}-{1:D2}: ", sayac * 10, sayac * 10 + 9); } for (int yildizlar = 0; yildizlar < YildizSayisi[sayac]; yildizlar++) { Console.Write("*"); } Console.WriteLine(); } } //NotAraliklari metodumun sonu. //NotlariListele metodumu oluşturuyorum, //tüm notları öğrenci öğrenci alt alta listeleyeceğim public void NotlariListele() { Console.WriteLine("Notlar:\n"); Console.Write(" "); // Sütun başlıklarını ayarlamak için kullanıyorum //Her bir test için sütun başlığını oluşturuyorum for (int test = 0; test < notlar.GetLength(1); test++) { Console.Write("Test {0} ", test + 1); } //En sonda da öğrencinin not ortalamasını göreceğim sütun yer alacak Console.WriteLine("Ortalama"); //Tüm notlarımı yazdırmak için döngüm for (int ogrenci = 0; ogrenci < notlar.GetLength(0); ogrenci++) { Console.Write("Öğrenci {0,2}", ogrenci + 1); for (int not = 0; not < notlar.GetLength(1); not++) { Console.Write("{0,8}", notlar[ogrenci, not]); } //Öğrencinin not ortalamasını yazdırıyorum, //bunun için OrtalamaAl metodumu kullanıyorum Console.WriteLine("{0,9:F}", OrtalamaAl(ogrenci)); } } //NotlariListele metodumun sonu } //NotDefteri sınıfımın sonu }
Sınıfı yani classı oluşturduktan sonra program.cs dosyama geri dönüyorum. NotDefteri classını kullanarak işlem yapacağım. Kodlarım aşağıdaki şekilde, açıklamalarımı da kod satırına ekliyorum.
program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication22 { class Program { static void Main(string[] args) { //Notları sakladığım tek boyutlu dizimi oluşturuyorum. int[,] NotlarDizisi = { { 93, 83, 67 }, { 94, 49, 40 }, { 40, 50, 87 }, { 04, 05, 98 }, { 96, 98, 85 }, { 82, 59, 60 }, { 78, 69, 70 }, { 12, 34, 52 }, { 22, 96, 90 }, { 21, 23, 40 }, }; NotDefteri BizimNotlar = new NotDefteri("Notları listeleme programı", NotlarDizisi); BizimNotlar.MesajGoster(); BizimNotlar.NotlariIsle(); Console.ReadLine(); } } }
Burada NotDefteri sınıfımızdan BizimNotlar adında bir nesne oluşturuyoruz. Referans olarak tabi NotDefteri sınıdı içinde kullanmış olduğum NotlarDizisi referans alınıyor. Daha sonra türettiğim nesne ile birlikte NotDefteri sınıfım üzerinden ilgili constructorları (MesajGoster, NotlariIsle) kullanabiliyorum.
Ekran görüntümüz aşağıdaki gibi olur.
Aşağıdaki linkten uygulamayı indirebilirsiniz.
örnekler harika,teşekkürler