En iyi yanıtlayıcılar
C# Console Dizi içinde hareketli ortalama bulma

Soru
-
Yanıtlar
-
Optimize halini kendin yaz diye vermek istememistim aslinda :)
void Main() { // ornek dizi int[] dizi = Enumerable.Range(1,15).Select(e => e).ToArray(); var end = 7; // ilk aralik sonu var toplam = 0; decimal[] ortalama = new decimal[dizi.Length-end]; for (int i = 0; i <= end; i++) { toplam += dizi[i]; } ortalama[0] = (decimal)toplam / (end+1); for (int i = 1; i < dizi.Length-end; i++) { toplam += (dizi[i+end]-dizi[i-1]); ortalama[i] = (decimal)toplam / (end + 1); } // gostermek istersen for (int i = 0; i < ortalama.Length; i++) { Console.WriteLine($"Aralik: {i}-{i + end}, Ortalama:{ortalama[i]}"); } }
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 18 Ocak 2017 Çarşamba 13:36
Tüm Yanıtlar
-
Iyi de kodun ne kadarini yazdiniz, yapamadiginiz kisim neresi?
Ornek: 2-9 araligi:
int[] dizi = {1,2, ... 15}; int start = 2; int end = 9; var ortalama = dizi.Skip(start).Take(end-start+1).Average();
Not: Kayan bir sistemde hic de optimize olmayan bir yontem. Soyle dusunun, insanlar daha yavas hesap yaparlar ancak farkinda olarak ya da olmayarak islemleri optimize ederler. Bir insan soyle yapardi:
- 0 - 7 icin o araliktakileri toplar
- eleman sayisina (7-0+1 = 8) boler
-sonraki basamak 1-8.
-0-7 araliginin toplami elinde, ondan [0] elemanin degerini cikarip [8] elemanin degerini eklemek yeni toplam icin yeterli. (toplam += dizi[8] - dizi[0])
-eleman sayisi sabit 8, bolunce ortalama.
...
Butun yapmaniz gereken bunu koda cevirmek.
- Düzenleyen CetinBasozEditor 5 Ocak 2017 Perşembe 21:35
-
-
Optimize halini kendin yaz diye vermek istememistim aslinda :)
void Main() { // ornek dizi int[] dizi = Enumerable.Range(1,15).Select(e => e).ToArray(); var end = 7; // ilk aralik sonu var toplam = 0; decimal[] ortalama = new decimal[dizi.Length-end]; for (int i = 0; i <= end; i++) { toplam += dizi[i]; } ortalama[0] = (decimal)toplam / (end+1); for (int i = 1; i < dizi.Length-end; i++) { toplam += (dizi[i+end]-dizi[i-1]); ortalama[i] = (decimal)toplam / (end + 1); } // gostermek istersen for (int i = 0; i < ortalama.Length; i++) { Console.WriteLine($"Aralik: {i}-{i + end}, Ortalama:{ortalama[i]}"); } }
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 18 Ocak 2017 Çarşamba 13:36