এই সমস্যায় আমাদের একটি সংখ্যা n দেওয়া আছে। আমাদের কাজ সিরিজ 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1))-এর যোগফল বের করার প্রোগ্রাম তৈরি করা।
উদাহরণ:
ইনপুট: n = 5
আউটপুট: 55
প্রশ্ন অনুযায়ী যদি ইউজার একটি নম্বর 'n' দেয় এবং আমাদের সিরিজ 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)) যোগ করতে হয়।
প্রথমে এই সিরিজের অর্থ ভালোভাবে বুঝি।
n=1 হলে সিরিজটি হয় 1।
n=2 হলে সিরিজটি হয় 1+ (1+3) কারণ শেষ টার্ম 2n-1 এর মান হবে ২ গুণ ২ বিয়োগ ১, অর্থাৎ ৩।
| n-এর মান | 2n-1 | সিরিজ হয় |
| 1 | 1 | 1 |
| 2 | 3 | 1+ (1+3) |
| 3 | 5 | 1+ (1+3) + (1+3+5) |
| 4 | 7 | 1+ (1+3) + (1+3+5) + (1+3+5+7) |
সমস্যার সমাধান দুটি পদ্ধতিতে করা যায়। একটি গাণিতিক পদ্ধতিতে যেখানে যোগফলের এক্সপ্রেশন বের করে লুপ ছাড়া সমাধান করা যায়। অন্যটি কোডে দুটি লুপ প্রয়োগ করে।
সরাসরি পদ্ধতি লুপ ব্যবহার করে
যেহেতু সিরিজের টার্ম 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)) নিজে একটি সিরিজ। তাই আমরা নেস্টেড লুপ ব্যবহার করব। বাহ্যিক লুপ দ্বিতীয় টার্ম ক্যালকুলেট করবে। অন্তরঙ্গ লুপ টার্মটি নিজে ক্যালকুলেট করবে।
উদাহরণ
#include<stdio.h> int calcSum(int n){ int sum = 0; for (int i = 1; i <= n; i++) { // the first value of the term is always 1 int value = 1; for (int j = 1; j <= i; j++) { sum += value; // next term value += 2; } } return sum; } int main(){ int n = 35; printf("The sum of the series upto %d is %d ", n , calcSum(n)); }আউটপুট
The sum of the series upto 35 is 14910
প্রোগ্রামের কাজ:
- ইউজার n-এর মান দেয়। ধরুন, ২।
- "sum" নামের ভেরিয়েবল ডিক্লেয়ার করা হয় ০ দিয়ে।
- i=1 হলে, i<=n কন্ডিশন সত্য হলে লুপ চলে
- "ft" ভেরিয়েবলের মান ১।
- j-এর প্রথম মান ১। কন্ডিশন সত্য কারণ j=i=১। j লুপ চলে।
- ft-এর মান sum-এ যোগ হয়। sum হয় 0+1=১।
- ft-এর মান ২ বাড়ে ১+২=৩।
- j বাড়ে ২ হয়। কিন্তু এখন j>i, তাই j লুপ থামে।
- i বাড়ে ২ হয়, i=২, কন্ডিশন সত্য, লুপে ঢোকে
- "ft" আবার ১ ডিফাইন হয়।
- j=১ হলে লুপ চলে কারণ j<i (১<২)।
- ft যোগ হয় sum-এ। sum ছিল ১, এখন ১+১=২।
- ft বাড়ে ৩ হয়।
- j বাড়ে ২ হয়, j=i, লুপ চলে।
- ft যোগ হয় sum-এ। sum ছিল ২, এখন ২+৩=৫।
- ft বাড়ে ৫ হয়। লুপ থামে।
- i বাড়ে ৩ হয়, i=৩, কন্ডিশন মিথ্যা, লুপ থামে।
- স্ক্রিনে মেসেজ এবং sum প্রিন্ট হয়।
গাণিতিক সমাধান:
প্রশ্নের গাণিতিক সমাধান বের করে কোড লিখলে কোড অনেক সরল হয়ে যায়।
সিরিজের সাধারণ টার্ম Tn হলে,
আগে জানা দরকার 1+3+5+7+9…..(2n-1) সিরিজের যোগফল n2, এবং সিরিজ
12+22+32+42….n2 এর যোগফল i2 =
আমাদের কোডের কাজ দেখানোর প্রোগ্রাম
উদাহরণ
#include<stdio.h> int calcSum(int n){ // required sum return (( (n) * (n + 1) * (2*n + 1 ) )/6 ) ; } int main(){ int n = 35; printf("The sum of the series upto %d is %d ", n , calcSum(n)); }আউটপুট
The sum of the series upto 35 is 14910
উপরের কোডের কাজ:
উদাহরণস্বরূপ, ইউজার n=২ দিলে 2n-1=৩ এবং সিরিজ হয় 1+ (1+3)।
কোড দিয়ে যোগফল বুঝি।
- sum() ফাংশন ২ দিয়ে কল হয়।
- ফাংশন ৫ ক্যালকুলেট করে মেইন ফাংশনে রিটার্ন করে।
- স্ক্রিনে মেসেজ এবং উত্তর প্রিন্ট হয়।