অ্যারের সব এলিমেন্টের গড় (Average) বের করার জন্য সব إلিমেন্টের যোগফল বের করে তারপর এলিমেন্ট সংখ্যা (`Length`) দিয়ে ভাগ করা হয়।
বেসিক লজিক
int[] arr = { 45, 23, 55, 15, 8, 4, 2, 5, 9, 14 };
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
int average = sum / arr.Length; // ইন্টিজার ডিভিশন (ট্রানকেট হবে)
সম্পূর্ণ উদাহরণ
using System;
public class Program
{
public static void Main()
{
int[] myArr = new int[10] { 45, 23, 55, 15, 8, 4, 2, 5, 9, 14 };
int len = myArr.Length;
int sum = 0;
for (int i = 0; i < len; i++)
{
sum += myArr[i];
}
int average = sum / len; // ইন্টিজার ডিভিশন
Console.WriteLine($"Sum = {sum}");
Console.WriteLine($"Average (int) = {average}");
// ডাবল প্রিসিশন গড়
double avgDouble = (double)sum / len;
Console.WriteLine($"Average (double) = {avgDouble:F2}");
}
}
আউটপুট
Sum = 180
Average (int) = 18
Average (double) = 18.00
⚠️ ইন্টিজার ডিভিশন ট্র্যাপ
C#-এ `int / int` = `int` (ট্রানকেট হয়)। সঠিক গড় পেতে হলে কাস্ট করুন:
// ভুল
int avg = sum / len; // ১৮০/১০ = ১৮ ✓ (তুমুলভাবে কাজ করল)
// কিন্তু:
int[] arr2 = { 1, 2 };
int avg2 = (1 + 2) / 2; // ১ (বাস্তবে ১.৫) ❌
// সঠিক
double avg2 = (double)(1 + 2) / 2; // ১.৫ ✓
LINQ ব্যবহার (আধুনিক ও সংক্ষিপ্ত)
using System.Linq;
int[] arr = { 45, 23, 55, 15, 8, 4, 2, 5, 9, 14 };
// ইন্টিজার গড় (ট্রানকেটেড)
int avgInt = (int)arr.Average(); // ১৮
// ডাবল গড়
double avgDouble = arr.Average(); // ১৮.০
// লং অ্যারে
long[] longArr = { 1000000, 2000000 };
double avgLong = longArr.Average(); // ১৫০০০০০.০
নালেবল/খালি অ্যারে হ্যান্ডলিং
int[] empty = Array.Empty<int>();
// LINQ - InvalidOperationException থ্রো করে যদি খালি হয়
// double avg = empty.Average(); // Crash!
// নিরাপদ পদ্ধতি
double avg = empty.Length > 0 ? empty.Average() : 0;
// অথবা
double avg = empty.DefaultIfEmpty(0).Average(); // ০ রিটার্ন করবে
ওয়েটেড এভারেজ (Weighted Average)
int[] values = { 10, 20, 30 };
int[] weights = { 1, 2, 3 }; // ওয়েট
double weightedAvg = values.Zip(weights, (v, w) => v * w).Sum() / (double)weights.Sum();
// (10*1 + 20*2 + 30*3) / (1+2+3) = 140/6 = 23.33
রানিং এভারেজ (Moving Average)
public static IEnumerable<double> MovingAverage(int[] data, int windowSize)
{
if (windowSize <= 0) throw new ArgumentException();
double sum = 0;
for (int i = 0; i < data.Length; i++)
{
sum += data[i];
if (i >= windowSize) sum -= data[i - windowSize];
if (i >= windowSize - 1) yield return sum / windowSize;
}
}
// ব্যবহার
int[] data = { 1, 2, 3, 4, 5, 6, 7 };
foreach (var avg in MovingAverage(data, 3))
Console.WriteLine(avg); // 2, 3, 4, 5, 6
সারসংক্ষেপ
- ম্যানুয়াল লুপ: `sum / (double)len` - কন্ট্রোল বেশি, প্রিমিটিভ টাইপের জন্য
- LINQ Average(): `arr.Average()` - পঠনীয়, নাল/খালি হ্যান্ডলিং দরকার
- ইন্টিজার ডিভিশন: সবসময় `(double)sum / len` বা `sum / (double)len` ব্যবহার করুন
- বড় ডেটা: `long` sum ব্যবহার করুন ওভারফ্লো এড়াতে (`sum += (long)arr[i]`)