En iyi yanıtlayıcılar
C# CONSOLE HİSTOGRAM

Soru
-
Arkadaşlar c#'ta yeniyim.Bir sorum olcaktı sadece mantığını anlasam yeterli kod yazmada bir sıkıntım yok.Yardımcı olursanız çok sevinirim.
- Bilgisayar programlama hocası 1. vize sonuçlarının dağılımlarını histogram şeklinde 10 adet aralıkta görmek istiyor.
İstenen aralıklar:
[1-10], [11-20], [21-30], [31-40], [41-50], [51-60], [61-70], [71-80], [81-90], [91-100]
Girilen N adet nota göre aşağıdaki örnekte olduğu gibi histogram çizdiren C# programını YAZINIZ
7 | ** |
6 | ** |
5 | ** ** ** |
4 | ** ** ** ** |
3 | ** ** ** ** |
2 | ** ** ** ** ** ** ** ** ** |
1 | ** ** ** ** ** ** ** ** ** ** |
--+-------------------------------+
10 20 30 40 50 60 70 80 90 100
BÖYLE BİR ŞEKİL NASIL ÇİZDİREBİLİRİM???
Yanıtlar
-
kodu da paylaşayım, bunu yapmamın amacı insanları oop kullanmaya, model kullanmaya teşvik etmek aslında
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var notlar = new[] { 25, 55, 67, 32, 66, 35, 65, 42, 76, 33, 18, 100, 65, 65, 65, 80, 91, 75, 12, 80, 82, 75, 76, 98, 55, 62, 65, 35, 63, 37, 67, 72, 45, 48, 52, 67 }; Console.WriteLine(); Console.WriteLine(); var liste = Aralık.Aralıklar().Select(p => new Gurup() { Aralık = p, Adet = notlar.Count(x => x >= p.Düşük && x <= p.Yüksek) }).ToList(); var maxAdet = liste.Max(p => p.Adet); for (int i = 0; i < maxAdet; i++) { var satır = ""; liste.ForEach(p => satır += p.Adet >= maxAdet-i ? "## " : " "); Console.WriteLine("{0,3}|{1}|", maxAdet-i, satır); } Console.WriteLine("---+------------------------------+"); Console.Write(" "); liste.ForEach(p => Console.Write("{0,-3}", p.Aralık.Yüksek)); Console.WriteLine(); Console.WriteLine(); } class Gurup { public Aralık Aralık { get; set; } public int Adet { get; set; } } class Aralık { public int Sıra { get; set; } public int Düşük { get; set; } public int Yüksek { get; set; } public static List<Aralık> Aralıklar() { return Enumerable.Range(0, 10).Select(p => new Aralık() { Sıra = p, Düşük = (p * 10) + 1, Yüksek = (p + 1) * 10 }).ToList(); } public override string ToString() { return $"{Düşük} - {Yüksek}"; } } } }
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Yanıt Olarak Öneren CetinBasozEditor 19 Nisan 2016 Salı 11:39
- Yanıt Olarak İşaretleyen CetinBasozEditor 20 Nisan 2016 Çarşamba 10:09
Tüm Yanıtlar
-
Consol uygulaması yapabilirsiniz.
Console.Write ile "*" karakterini bastırabilirsiniz.
Form uygulaması yaparsanız da sadece Font'u TrueType bir fonta değil de fixed(Courier, Lucida Console vb.) bir font seçerek aynı görünümü elde edebilirsiniz.
http://pgnchess.com
http://dergikapaklari.com -
-
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace test3 { class Program { static void Main(string[] args) { Console.WriteLine("Lütfen notları ',' ile ayırarak girin:"); string[] sayilar=Console.ReadLine().Split(','); int sayi = 0; int[] dizi=new int[10]; if (sayilar.Count() == 0) { Console.WriteLine("Herhangi bir değer girişi yapılmamış."); return; } foreach (var a in sayilar) { int.TryParse(a, out sayi); dizi[sayi / 10] += 1; } for (int i = 10; i > 0; i--) { Console.Write(string.Format("{0:00}|", i)); for (int j = 0; j <10; j++) { if (dizi[j] >= i) Console.Write("-**-"); else Console.Write("----"); }; Console.WriteLine(); }; Console.Write(" "); for (int i = 0; i < 10; i++) { Console.Write(string.Format(" {0:00} ",i*10)); }; Console.ReadKey(); } } }
http://pgnchess.com
http://dergikapaklari.com -
bu mu lazım?
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Yanıt Olarak Öneren CetinBasozEditor 19 Nisan 2016 Salı 11:01
-
Bence oncelikle hedefinizi degistirin. Histogram olmasi icin, dagilim sutunlarinin dikey olmasi sart degil, dikey olursa hesaplamaniz karmasiklacak. Yatay sutunlar dusunurseniz suna benzer:
100|================== 090|=============== 080|=================================================== 070|=========================== 060|============================== 050|================================= 040|================================= 030|================================================ 020|================== 010|=========================== +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|16|17|
Not: Ornegi tabii ki elle cizmedim :) Dogrudan tum kodu hemen vermeli miyim bilemedim. Yaptigim su idi:
- Random ve Enumerable classlariini kullanarak, 100 adet 10-100 arasinda rastgele secilmis "not" olan bir liste hazirladim.
- 100'den geriye 10'ar 10'ar sayarak, her satira once "not"u, bir "|" isaretini ve o notun sayisi * 3 tane = koydum.
- Yukaridakini yaparken, bir degiskene maximum sayiyi sakladim (son 2 satir icin).
- Uc tane bosluk, "+" ve arkasindan maximum sayi kadar "--+" yazdim (yeni baslayanlar icin karmasik olabilecegi icin, tek satirlik Linq expression yerine, for dongusu kullanarak).
- En son satirda da, yine uc bosluk ve "|", ardindan maximum sayiya kadar dongude, not sayisi + "|" yazdirdim.
Sadece mantigini anlamak istedigin icin de en azindan simdilik kod vermiyorum :) Deneyip yapamazsan, takildigin yerleri veririm.
Not: Ornek baskisi monospaced font ile goruntulenmediginden cirkin gorunuyor. Console monospaced font kullaniyor normalde ve soyle gorunuyor:
- Düzenleyen CetinBasozEditor 19 Nisan 2016 Salı 11:00
-
-
kodu da paylaşayım, bunu yapmamın amacı insanları oop kullanmaya, model kullanmaya teşvik etmek aslında
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var notlar = new[] { 25, 55, 67, 32, 66, 35, 65, 42, 76, 33, 18, 100, 65, 65, 65, 80, 91, 75, 12, 80, 82, 75, 76, 98, 55, 62, 65, 35, 63, 37, 67, 72, 45, 48, 52, 67 }; Console.WriteLine(); Console.WriteLine(); var liste = Aralık.Aralıklar().Select(p => new Gurup() { Aralık = p, Adet = notlar.Count(x => x >= p.Düşük && x <= p.Yüksek) }).ToList(); var maxAdet = liste.Max(p => p.Adet); for (int i = 0; i < maxAdet; i++) { var satır = ""; liste.ForEach(p => satır += p.Adet >= maxAdet-i ? "## " : " "); Console.WriteLine("{0,3}|{1}|", maxAdet-i, satır); } Console.WriteLine("---+------------------------------+"); Console.Write(" "); liste.ForEach(p => Console.Write("{0,-3}", p.Aralık.Yüksek)); Console.WriteLine(); Console.WriteLine(); } class Gurup { public Aralık Aralık { get; set; } public int Adet { get; set; } } class Aralık { public int Sıra { get; set; } public int Düşük { get; set; } public int Yüksek { get; set; } public static List<Aralık> Aralıklar() { return Enumerable.Range(0, 10).Select(p => new Aralık() { Sıra = p, Düşük = (p * 10) + 1, Yüksek = (p + 1) * 10 }).ToList(); } public override string ToString() { return $"{Düşük} - {Yüksek}"; } } } }
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Yanıt Olarak Öneren CetinBasozEditor 19 Nisan 2016 Salı 11:39
- Yanıt Olarak İşaretleyen CetinBasozEditor 20 Nisan 2016 Çarşamba 10:09
-
-
-