Test Cases

প্রোগ্রামিং সমস্যায় টেস্ট কেস

অনেকেরই প্রথম প্রথম বিভিন্ন প্রোগ্রামিং সমস্যার টেস্ট কেস নিয়ে সমস্যা হয়ে থাকে। টেস্ট কেস আছে এমন একটি প্রবলেম কিভাবে সমাধান করা যাবে তা নিচে বর্ণনা করলাম।উদাহরন হিসেবে এই প্রবলেমটি ধরা যাক।

প্রবলেমের নাম: গড় সংখ্যা

একটি শ্রেণিতে Nটি ছাত্র আছে। কিছুদিন আগেই তারা একটি পরীক্ষা দিয়েছিল এবং আজকে তাদের পরীক্ষার খাতা দেখান হচ্ছে। এখন শিক্ষক তাদের সবার মার্কের গড় জানতে চান। তোমাকে N এবং Nটি ছাত্রের পরীক্ষার মার্ক দেওয়া হয়েছে। তোমাকে তাদের গড় মার্ক গণনা করতে হবে।

ইনপুটের বর্ণনা

প্রথম লাইনে একটি ধনাত্মক সংখ্যা T দেওয়া আছে, যেটি হল কতগুলো কেস আছে তার মান। তার পরে Tটি লাইনআছে, যার প্রথমে আছে একটি সংখ্যা, N ( ১ < = N < = ১০০ ), ছাত্রদের সংখ্যার মান। N-এর পরে আছে Nটি সংখ্যা যেগুলো হল ছাত্রদের মার্ক। ছাত্ররা ০ থেকে ১০০ এর ভিতরেই মার্ক পেয়েছে।

আউটপুটের বর্ণনা

প্রতিটি কেসের জন্যে প্রথমে কেস এর মান প্রিন্ট দিতে হবে, তারপর একটি পূর্ণসংখ্যা যেটি হল শ্রেণীকক্ষের গড়।

Sample Input

3
5 1 2 3 4 5
3 100 0 20
4 0 0 100 100
Sample Output

Case 1: 3
Case 2: 40
Case 3: 50

উপরের সমস্যাটিতে ইনপুটের বর্ণনা এবং আউটপুটের বর্ণনাতে যেভাবে বলা হয়েছে ঠিক সেভাবেই তোমার প্রোগ্রামে ইনপুট নিতে হবে এবং আউটপুট দিতে হবে। ইনপুটের বর্ণনাতে প্রথমেই বলা আছে “প্রথম লাইনে একটি ধনাত্মক সংখ্যা T দেওয়া আছে, যেটি হল কতগুলো কেস আছে তার মান।“ তোমার প্রোগ্রামে কয়েকটি ইনপুট দিয়ে জাজ চেক করবেন যে তোমার প্রোগ্রামঠিক আছে নাকি। জাজ কতোগুলো ইনপুট দিবেন তা হলো এই টেস্ট কেস সংখ্যা। তাই তোমার প্রোগ্রামের শুরুতেই একটি সংখ্যা T ইনপুট নিতে হবে।


int T;
scanf("%d",&T);

ইনপুটের বর্ণনায় এরপর বলা আছে, “তার পরে Tটি লাইন আছে, যার প্রথমে আছে একটি সংখ্যা, N ( ১ <= N <= ১০০ ), ছাত্রদের সংখ্যার মান।" অর্থাৎ এর পরে আমাদের T সংখ্যক লাইন লিখতে হবে, যা আসলে আমরা যদি ১ থেকে T পর্যন্ত লুপ চালাই তাহলেই হয়ে যাবে। এবং লুপের ভেতরে প্রথম লাইনেই প্রথমে একটি সংখ্যা N ইনপুট নিতে হবে। এক্ষেত্রে আমাদের প্রোগ্রাম এখন হবেঃ

int T, i,N;scanf("%d",&T);for(i=1;i <=T; i++) { scanf("%d", &N);}

ইনপুটের বর্ণনায় এরপর বলা আছে, “N-এর পরে আছে Nটি সংখ্যা যেগুলো হল ছাত্রদের মার্ক। ছাত্ররা ০ থেকে ১০০ এর ভিতরেই মার্ক পেয়েছে।“ অর্থাৎ, এবার আমাদের N সংখ্যক মার্কস ইনপুট নিতে হবে।এজন্য আমাদের আবার একটি লুপের প্রয়োজন হবে। ইনপুট নেবার পাশাপাশি আমাদের প্রবলেমটিওতো সলভ করতে হবে। এই প্রবলেমে মার্কসগুলোর গড় বের করতে বলা হয়েছে। গড় বেড় করতে হলেপ্রথমে মার্কসগুলোর যোগফল নির্ণয় করে তারপর N দিয়ে ভাগ করলেই আমরা গড় পেয়ে যাবো। এই পর্যায়ে এসে আমাদের প্রোগ্রামটি হবেঃ


int T, i,N, j, mark, sum, avg;
scanf("%d",&T);
for(i=1; i <=T; i++) {
    scanf("%d", &N);   
    sum = 0;  
     for(j=1; j <= N; j++) {
        scanf("%d", &mark);
        sum = sum + mark;  
         }  
          avg = sum / N;
          }

আমাদের প্রোগ্রামের ইনপুট নেওয়া ও প্রোসেসিং শেষ। এবার আমাদেরকে আউটপুটে মান দেখাতে হবে। এজন্য আমাদেরকে আউটপুটের বর্ণনা অনুসারে কাজ করতে হবে। আউটপুটের বর্ণনায় বলা হয়েছে, “প্রতিটি কেসের জন্যে প্রথমে কেসএর মান প্রিন্ট দিতে হবে, তারপর একটি পূর্ণসংখ্যা যেটি হল শ্রেণীকক্ষের গড়।“ এক্ষেত্রে আমাদেরকে Sample Output দেখতে হবে যে আউটপুটের বর্ণনা কিভাবে বাস্তবায়ন করা হয়েছে। Sample Output এ দেখবা Case 1: 3 আকারে এখা হয়েছে। এখানে প্রথমে Case শব্দটি লেখার পর একটি স্পেস দিয়ে কত নম্বর কেসের জন্য আউটপুট দেওয়া হচ্ছে সেটি লেখা হয়েছে, এরপর একটি কোলন দিয়ে তারপর একটি স্পেস দিয়ে তোমার প্রোগ্রামের মূল সমাধান অর্থাৎ গড় নম্বরটি লেখা হয়েছে। এবং তারপর একটি নতুন লাইন দিতে হবে। তোমাকে হুবুহু এই ফরমেটেই লিখতে হবে, কারণ তোমার প্রোগ্রামের আউটপুট কম্পিউটার জাজ করবে। জাজ এর আউটপুটের সাথে তোমার আউটপুট না মিললে তোমাকে Wrong Answer ( অথবা Failed ) দেখাবে। তাহলে আউটপুটের জন্য printf স্টেটমেন্ট আমরা এভাবে লিখতে পারিঃ


printf(“Case%d: %d\n”, i, avg); // প্রথমে T সংখ্যক টেস্টের জন্য যে লুপ চালিয়েছিলাম, ওটার i এর মান ব্যবহার করলেই আমরা টেস্ট কেস সংখ্যা পেয়ে যাচ্ছি।
এবার আমাদের পুরো প্রোগ্রামটা একবারে দেখে নিইঃ

#include 
int main()
{
   int T, i, N, j, mark, sum, avg;
    scanf("%d",&T);
    for(i=1; i <= T; i++ )
    {
        scanf("%d", &N);
        sum = 0;
        for(j=1; j <=N; j++)
        {
            scanf("%d", &mark);
            sum = sum + mark;
        }
        avg = sum / N;
        printf("Case %d: %d\n", i, avg);
    }
    return 0;
}