কম্পিউটার টিউটোরিয়াল

C#-এ অ্যারে এলিমেন্টগুলোর গড় (Average) বের করা

অ্যারের সব এলিমেন্টের গড় (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]`)
  1. জাভাস্ক্রিপ্টে একাধিক মান দিয়ে অ্যারে এলিমেন্ট খুঁজে বের করা

  2. পাইথন প্রোগ্রামে অ্যারের যোগফল বের করা

  3. পাইথনে অ্যারের যোগফল বের করা

  4. পাইথন ডিকশনারিতে নন-জিরো ভ্যালুর গড় বের করা