প্রোগ্রামিং সংক্রান্ত নানান বই ঘরে বসে অনলাইনে অর্ডার করতে ক্লিক করুন এখানে

বাংলা ভাষায় পাইথন দিয়ে প্রোগ্রামিং শেখার ফ্রি বই - http://pybook.subeen.com

[প্রোগ্রামিং বইঃ অধ্যায় পাঁচ] একটুখানি গণিত।

এই অধ্যায়ে আমরা প্রোগ্রামিংয়ের নতুন কিছু শিখব না। এখন পর্যন্ত আমরা যতটুকু প্রোগ্রামিং শিখেছি, তা দিয়েই কিছু সহজ-সরল গাণিতিক সমস্যার সমাধান করব।

১) x + y = 15, x – y = 5 হলে x ও y-এর মান কত?

সমীকরণদুটি যোগ করলে পাই 2x = 20, বা x = 10। আবার বিয়োগ করলে পাই, 2y = 10, বা y = 5। এখন একটি প্রোগ্রাম লিখতে হবে যেখানে x + y ও x – y-এর মান দেওয়া থাকবে, x ও y-এর মান বের করতে হবে। আমি প্রোগ্রামটি একটু পরে লিখে দেব। এর মধ্যে তুমি নিজে লিখার চেষ্টা করো। সহজ প্রোগ্রাম।

২) 4x + 5y = 14, 5x + 6y = 17 হলে x ও y-এর মান কত?

সমীকরণদুটিকে আমরা এভাবে লিখতে পারি:
a1x + b1y = c1, a2x + b2y = c2। তোমরা বিভিন্নভাবে এর সমাধান করতে পার। এর মধ্যে দুটি জনপ্রিয় উপায় হচ্ছে প্রতিস্থাপন (substitution) ও নির্ণায়কের (determinant) সাহায্যে সমাধান। পদ্ধতিগুলো জানা না থাকলে ক্লাস এইট বা নাইনের গণিত বই দেখো। সমাধান করলে দেখবে,
x = (b2c1 – b1c2) / (a1b2 – a2b1) এবং y = (a1c2 – a2c1) / (a1b2 – a2b1)। এখন a1, a2, b1, b2, c1, c2-এর জায়গায় নির্দিষ্ট মান বসিয়ে দিলেই x ও y-এর মান পেয়ে যাবে।

এই ধরনের সমীকরণ সমাধানের জন্যও আমরা একটি প্রোগ্রাম লিখব, যার ইনপুট হবে a1, a2, b1, b2, c1, c2 এবং আউটপুট হবে x ও y-এর মান। এটিও সহজ প্রোগ্রাম। নিজে চেষ্টা করো।

আশা করি, তোমরা দুটি সমস্যারই সমাধান নিজে করে ফেলতে পারবে। এখন আমি প্রথম সমস্যার কোড দিচ্ছি:

 #include <stdio.h>  
 int main()  
 {  
     double x, y, x_plus_y, x_minus_y;  
     printf("Enter the value of x + y: ");  
     scanf("%lf", &x_plus_y);  
     printf("Enter the value of x - y: ");  
     scanf("%lf", &x_minus_y);  
     x = (x_plus_y + x_minus_y) / 2;  
     y = (x_plus_y - x_minus_y) / 2;  
     printf("x = %0.2lf, y = %0.2lf\n", x, y);  
     return 0;  
 }  
 প্রোগ্রাম: ৫.১  

সমাধান খুবই সহজ। তবে লক্ষ করো যে আমি ভেরিয়েবলের ডাটা টাইপ int ব্যবহার না করে double ব্যবহার করেছি।

এবারে দ্বিতীয় সমস্যার কোড:

 #include <stdio.h>  
 int main()  
 {  
     double a1, a2, b1, b2, c1, c2, x, y;  
     printf("a1 = ");  
     scanf("%lf", &a1);  
     printf("a2 = ");  
     scanf("%lf", &a2);  
     printf("b1 = ");  
     scanf("%lf", &b1);  
     printf("b2 = ");  
     scanf("%lf", &b2);  
     printf("c1 = ");  
     scanf("%lf", &c1);  
     printf("c2 = ");  
     scanf("%lf", &c2);  
     x = (b2 * c1 - b1 * c2) / (a1 * b2 - a2 * b1);  
     y = (a1 * c2 - a2 * c1) / (a1 * b2 - a2 * b1);  
     printf("x = %0.2lf, y = %0.2lf\n", x, y);  
     return 0;  
 }  
 প্রোগ্রাম: ৫.২  

এটিও সহজ প্রোগ্রাম! তবে তোমরা দেখো (a1 * b2 - a2 * b1)-এর মান আমি দুবার বের করেছি (x-এর মান বের করার সময়, আবার y-এর মান বের করার সময়)। কাজটি একবারেই করা যেত এবং একবারে করলেই ভালো, তাহলে আমাদের প্রোগ্রাম দুটি গুণ ও একটি বিয়োগের কাজ কম করবে। আবার (a1 * b2 - a2 * b1)-এর মান যদি শূন্য হয়, তাহলে একটি ঝামেলা হয়ে যাচ্ছে, কারণ কোনো কিছুকে তো শূন্য দিয়ে ভাগ করা যায় না। তাই ওই মানটি শূন্য হলে আসলে সমীকরণের কোনো সমাধান নেই। এবার প্রোগ্রামটি আরও ভালোভাবে লিখে ফেলি।

 #include <stdio.h>  
 int main()  
 {  
     double a1, a2, b1, b2, c1, c2, d, x, y;  
     printf("a1 = ");  
     scanf("%lf", &a1);  
     printf("a2 = ");  
     scanf("%lf", &a2);  
     printf("b1 = ");  
     scanf("%lf", &b1);  
     printf("b2 = ");  
     scanf("%lf", &b2);  
     printf("c1 = ");  
     scanf("%lf", &c1);  
     printf("c2 = ");  
     scanf("%lf", &c2);  
     d = a1 * b2 - a2 * b1;  
     if ((int) d == 0) {  
         printf("Value of x and y can not be determined.\n");  
     }  
     else {  
         x = (b2 * c1 - b1 * c2) / d;  
         y = (a1 * c2 - a2 * c1) / d;  
         printf("x = %0.2lf, y = %0.2lf\n", x, y);  
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৫.৩  

এখানে একটি ব্যাপার খেয়াল করো। আমি if-এর ভেতর লিখেছি (int) d == 0। এখানে আমি প্রথমে d (যা একটি double টাইপের ভেরিয়েবল)-কে ইন্টিজারে টাইপ কাস্ট করে তারপর তার মানটি 0-এর সমান কি না তা পরীক্ষা করেছি। পরীক্ষাটা এভাবেও করা যেত: if (d == 0.0) তবে এতে মাঝে মাঝে ঝামেলা হয়, ফ্লোটিং পয়েন্ট-সংক্রান্ত হিসাব-নিকাশের জন্য। তোমরা কম্পিউটার আর্কিটেকচার নিয়ে লেখাপড়া করলে বিষয়টা বুঝতে পারবে।

তোমাদের মনে একটি প্রশ্ন আসতে পারে যে এই সহজ সমস্যাগুলো প্রোগ্রামিং করে সমাধান করে কী লাভ? আসলে একবার প্রোগ্রাম লিখে ফেলার পরে কিন্তু আর সমাধান করতে হয় না। তারপর শুধু ইনপুট দেবে, প্রোগ্রামটি নিজেই সমস্যার সমাধান করে তোমাকে আউটপুট দেবে।

৩) আমি যদি তোমাকে দশ হাজার টাকা ঋণ দিই 35% সুদে এবং টাকাটা পাঁচ বছর সময়ের মধ্যে তোমাকে সুদে-আসলে পরিশোধ করতে বলি, তাহলে পাঁচ বছরে মোট কত টাকা তোমার দিতে হবে এবং প্রতি মাসে কত টাকা দিতে হবে? ঋণটা যদি জটিল কিছু না হয়, তাহলে তোমার মোট পরিশোধ করতে হবে 10000 + 10000 * 35 / 100 টাকা। এই সহজ-সরল ঋণের জন্য একটি প্রোগ্রাম লিখে ফেলা যাক:

 #include <stdio.h>  
 int main()  
 {  
     double loan_amount, interest_rate, number_of_years, total_amount, monthly_amount;  
     printf("Enter the loan amount: ");  
     scanf("%lf", &loan_amount);  
     printf("Enter the interest rate: ");  
     scanf("%lf", &interest_rate);  
     printf("Number of years: ");  
     scanf("%lf", &number_of_years);  
     total_amount = loan_amount + loan_amount * interest_rate / 100.00;  
     monthly_amount = total_amount / (number_of_years * 12);  
     printf("Total amount: %0.2lf\n", total_amount);  
     printf("Monthly amount: %0.2lf\n", monthly_amount);  
     return 0;  
 }  
 প্রোগ্রাম: ৫.৪  

আমাদের ফর্মুলাতে একটু সমস্যা আছে। আসলে 35% সুদ দিতে হলে সেটা বাৎসরিক সুদ হবে। অর্থাৎ প্রতি বছর মোট ঋণের উপর 35% সুদ দেওয়া লাগবে। তাহলে দেখা যাচ্ছে পাঁচ বছরে তোমার মোট পরিশোধ করতে হবে 10000 + 10000 * 35 * 5 / 100 টাকা। এখন এই ফর্মুলা অনুযায়ী প্রোগ্রাম লিখে ফেলো।

তবে বাস্তবে ঋণের হিসাব-নিকাশ কিন্তু এত সরল নয়। তুমি ব্যাংক থেকে ঋণ নিতে গেলেই সেটি টের পাবে।

৪) পদার্থবিজ্ঞানের একটি সমস্যার সমাধান করা যাক।

কোনো বস্তু u আদিবেগে (initial velocity) এবং a ত্বরণে (acceleration) যাত্রা শুরু করল (ত্বরণের মান সব সময় a থাকবে, বাড়বে বা কমবে না)। t সময় পরে এর বেগ যদি v হয় তাহলে 2t সময়ে বস্তুটি কত দূরত্ব অতিক্রম করবে? (সমস্যাটি দিয়েছেন শাহরিয়ার মঞ্জুর, এটি ভ্যালাডলিড অনলাইন জাজের 10071 নম্বর সমস্যা)।

2t সময়ে অতিক্রান্ত দূরত্ব হবে v x 2t। এটি প্রমাণ করে ফেলো। তারপর আবার পড়া শুরু করো। নবম-দশম শ্রেণীর পদার্থবিজ্ঞান বইতে তোমরা দুটি সূত্র পাবে:
v = u + at
s = ut + 0.5 at^2 (এখানে s হচ্ছে t সময়ে অতিক্রান্ত দূরত্ব)।
তাহলে 2t সময় পরে অতিক্রান্ত দূরত্ব হবে
u x 2t + 0.5 x a x (2t)^2 = u x 2t + 0.5 x a x 4t^2 = u x 2t + a x 2t^2 = 2t (u + at) = 2tv

এখন, তোমাদেরকে একটি প্রোগ্রাম লিখতে হবে, যেখানে v ও t-এর মান ইনপুট হিসেবে দেওয়া হবে, 2t সময়ে অতিক্রান্ত দূরত্ব নির্ণয় করতে হবে। প্রোগ্রামটি নিজে নিজে লিখে ফেলো।

৫) 1 + 2 + 3 + … + 998 + 999 + 1000 এই ধারার সমষ্টি কত?

তোমরা যারা ধারার যোগফলের সূত্র জানো, তারা চট করে বলে দিতে পারবে, এই ধারাটির যোগফল হচ্ছে 1000 x 1001 / 2। তাহলে এর জন্য একটি প্রোগ্রাম লিখে ফেলা যাক, যেখানে শেষ পদের মান হবে ইনপুট আর আউটপুট হবে যোগফল।

 #include <stdio.h>  
 int main()  
 {  
     int n, sum;  
     scanf("%d", &n);  
     sum = (n * (n + 1)) / 2;  
     printf("Summation is %d\n", sum);  
     return 0;  
 }  
 প্রোগ্রাম: ৫.৫  

ধারার যোগফল নির্ণয়ের সূত্র জানা না থাকলে আমরা লুপ ব্যবহার করে প্রোগ্রামটি লিখতে পারি।

 #include <stdio.h>  
 int main()  
 {  
     int i, n, sum;  
     scanf("%d", &n);  
     for(i = 1, sum = 0; i <= n; i++) {  
         sum = sum + i;  
     }  
     printf("Summation is %d\n", sum);  
     return 0;  
 }  
 প্রোগ্রাম: ৫.৬  

সুতরাং ধারার সমস্যা নিয়ে আর চিন্তা নেই। তুমি যদি একটি পদের মান তার আগের পদের চেয়ে কত করে বাড়ছে, সেটি বের করতে পারো, তাহলেই লুপ ব্যবহার করে যোগফল বের করে ফেলতে পারবে। তবে সূত্র বের করতে পারলে লুপ ব্যবহার না করাই ভালো। কারণ প্রথম প্রোগ্রামটি দেখো (যেখানে সূত্র ব্যবহার করেছি)। সেখানে একটি যোগ, একটি গুণ আর একটি ভাগ করতে হয়েছে, n-এর মান যত বড়ই হোক না কেন। আর দ্বিতীয় প্রোগ্রামে (যেখানে লুপ ব্যবহার করেছি) n-এর মান যত, ততবার যোগ করতে হয়েছে, আবার সেই যোগফলটি sum ভেরিয়েবলে রাখতে হয়েছে (ভেরিয়েবলে কোনো মান রাখতেও কিন্তু একটু সময় লাগে)।

এখন তোমাদের একটি সহজ প্রোগ্রাম লিখতে হবে। প্রথম n সংখ্যক ধনাত্মক বেজোড় সংখ্যার যোগফল নির্ণয়ের প্রোগ্রাম। n-এর মান হবে ইনপুট, আর যোগফল হবে আউটপুট।

৬) আমাদের এবারকার প্রোগ্রামটি হবে তাপমাত্রাকে সেলসিয়াস (Celsius) থেকে ফারেনহাইটে (Farenheit) রূপান্তর করার প্রোগ্রাম।

সেলসিয়াসকে ফারেনহাইটে রূপান্তরের সূত্র হচ্ছে: °F = (°C × 1.8) + 32।

 #include <stdio.h>  
 int main()  
 {  
     double celsius, farenheit;  
     printf("Enter the temperature in celsius: ");  
     scanf("%lf", &celsius);  
     farenheit = 1.8 * celsius + 32;  
     printf("Temperature in farenheit is: %lf\n", farenheit);  
     return 0;  
 }  
 প্রোগ্রাম: ৫.৭  

এখন তোমাদের কাজ হচ্ছে ফারেনহাইট থেকে সেলসিয়াসে রূপান্তরের প্রোগ্রাম লেখা।

৭) এখন আমরা দুটি সংখ্যার গসাগু (GCD → Greatest Common Divisor বা HCF → Highest Common Factor) ও লসাগু (LCM → Least Common Multiple) নির্ণয় করার জন্য প্রোগ্রাম লিখব।

দুটি সংখ্যার গসাগু হচ্ছে যেসব সংখ্যা দিয়ে ওই দুটি সংখ্যা নিঃশেষে বিভাজ্য হয়, তাদের মধ্যে সবচেয়ে বড় সংখ্যা। তাহলে আমরা যেটি করব, দুটি সংখ্যা a ও b নেব। তারপর এদের মধ্যে যেটি ছোট, সেই মানটি আবার x ভেরিয়েবলে রাখব। গসাগু এর মান x-এর চেয়ে বড় হওয়া সম্ভব নয় (5 ও 10-এর গসাগু-এর মান নিশ্চয়ই 5-এর চেয়ে বড় হবে না)। এখন a ও b, x দিয়ে নিঃশেষে বিভাজ্য হয় কি না (a % x == 0 এবং b % x == 0) সেটি পরীক্ষা করব। যদি হয় তবে আমরা গসাগু পেয়ে গেছি। যদি a ও b উভয়েই নিঃশেষে বিভাজ্য না হয়, তখন x-এর মান এক কমিয়ে পরীক্ষা করব। যতক্ষণ না আমরা গসাগু পাচ্ছি x-এর মান কমাতেই থাকব। একসময় আমরা গসাগু পাবই, কারণ x-এর মান যখন 1 হবে, তখন তো x দিয়ে a ও b দুটি সংখ্যাই নিঃশেষে বিভাজ্য। তোমরা কি প্রোগ্রামটি নিজে লিখার চেষ্টা করবে? না পারলে আমার কোড দেখো:

 #include <stdio.h>  
 int main()  
 {  
     int a, b, x, gcd;  
     scanf("%d %d", &a, &b);  
     if (a < b) {  
         x = a;  
     }  
     else {  
         x = b;  
     }  
     for(; x >= 1; x--) {  
         if (a % x == 0 && b % x == 0) {  
             gcd = x;  
             break;  
         }  
     }  
     printf("GCD is %d\n", gcd);  
     return 0;  
 }  
 প্রোগ্রাম: ৫.৮  

প্রোগ্রামে দেখো gcd পাওয়ার সঙ্গে সঙ্গে লুপ থেকে বের হয়ে যেতে হবে (আমি break ব্যবহার করেছি এই জন্য)। break ব্যবহার না করলে কী হবে সেটি পরীক্ষা করে দেখো।

তবে গসাগু বের করার জন্য আমি যেই পদ্ধতি ব্যবহার করেছি সেটি খুব সহজ পদ্ধতি হলেও ইফিশিয়েন্ট (efficient) নয়। যেমন, সংখ্যা দুটি খুব বড় হলে এবং সহমৌলিক (co-prime) হলে লুপটি কিন্তু অনেকবার ঘুরবে। কারণ সহমৌলিক হলে গসাগু হবে 1। তোমরা নিশ্চয়ই জানো যে, দুটি সংখ্যার মধ্যে 1 ছাড়া আর কোনো সাধারণ উৎপাদক না থাকলে সংখ্যা দুটি সহমৌলিক।

গসাগু বের করার জন্য ইউক্লিডের একটি চমৎকার পদ্ধতি আছে। ইউক্লিড ভাগশেষ উপপাদ্যের (division algorithm) সাহায্যে গসাগু বের করার উপায় দেখিয়েছেন। এই পদ্ধতিতে খুব সহজে গসাগু বের করা যায় এবং প্রোগ্রামটিও বেশ ইফিশিয়েন্ট হয়। এর জন্য দুটি জিনিস জানা লাগবে:
a ও 0-এর গসাগু-এর মান a।
a ও b-এর গসাগু = b ও a % b-এর গসাগু।

তাহলে প্রোগ্রামে যেটি করতে হবে, একটি লুপের সাহায্যে a-এর মান b আর b-এর মান a%b বসিয়ে যেতে হবে, যতক্ষণ না b-এর মান শূন্য হয়। b-এর মান শূন্য হলেই বুঝে যাব যে গসাগু হচ্ছে a (এটা কিন্তু প্রোগ্রাম শুরুর সময় a-এর মান না, b-এর মান যখন শূন্য হবে সেই সময় a-এর মান)।

 #include <stdio.h>  
 int main()  
 {  
     int a, b, t, x, gcd;  
     scanf("%d %d", &a, &b);  
     if (a == 0) gcd = b;  
     else if (b == 0) gcd = a;  
     else {  
         while (b != 0) {  
             t = b;  
             b = a % b;  
             a = t;  
         }  
         gcd = a;  
     }  
     printf("GCD is %d\n", gcd);  
     return 0;  
 }  
 প্রোগ্রাম: ৫.৯  

এই প্রোগ্রামটি আরও ইফিশিয়েন্ট করার চেষ্টা করো।

এবার লসাগু বের করার প্রোগ্রাম। তোমরা নিশ্চয়ই স্কুলে শিখেছ, কীভাবে লসাগু বের করতে হয়। সেই পদ্ধতি অবলম্বন করে প্রোগ্রাম লিখে ফেলো। আর যারা সেই পদ্ধতি জানো না, তাদের জন্য একটি সূত্র বলে দিচ্ছি। আশা করি, লসাগু বের করার প্রোগ্রাম লিখতে আর সমস্যা হবে না।

দুটি সংখ্যার লসাগু x দুটি সংখ্যার গসাগু = সংখ্যা দুটির গুণফল।

পরের অধ্যায়

৪৪টি মন্তব্য:

  1. প্রোগ্রাম: ৫.৬ এর পর যে সমস্যা দেয়া হয়েছে,(এখন তোমাদের একটি সহজ প্রোগ্রাম লিখতে হবে। প্রথম n সংখ্যক ধনাত্মক বেজোড় সংখ্যার যোগফল নির্ণয়ের প্রোগ্রাম। n-এর মান হবে ইনপুট, আর যোগফল হবে আউটপুট।) এটা সমাধান করতে গিয়ে সমস্যায় পড়েছি।
    আমি যে প্রোগ্রামটি লিখেছি সেটি হলোঃ
    #include
    int main()
    {
    int i, n, sum;
    scanf("%d", &n);
    for(i = 1, sum = 0; i <= n; i = i + 2) {
    sum = sum + i;
    }
    printf("Summation is %d\n", sum);
    return 0;
    }
    এই কোড এ n এর মান ১ দিলে রেজাল্ট ১ আসে; ২ দিলেও ১(কিন্তু আসা উচিত ছিলো ৪) আসে। আবার ৩ দিলে ৪ আসে( আসা উচিত ছিলো ৯) আবার ৫ দিলেও ৯ আসে। এভাবে করে হয়। এটা কেনো হচ্ছে। আমি আসলে এটা কোনভাবে এফিশিয়েন্ট করতে পারছি না। একটু হিন্ট দিলে সুবিধা হত। এরকম হবার কারন কি এটাও বলে দিবেন, দয়া করে।

    উত্তরমুছুন
  2. তুমি লুপ চালানোর জন্য i ব্যবহার করছো। আবার সব বিজোড় সংখ্যা বের করার জন্যও i ব্যবহার করছো, যা সমস্যার সৃষ্টি করছে। 2-এর জন্য প্রথমে i-এর মান 1, কিন্তু পরেরবার i = i + 2 এর কারণে i এর মান 3 হয়ে যাচ্ছে, যা n-এর চেয়ে বড়, তাই আর লুপের ভেতর ঢুকছে না। তাই n-এর মান 2 হলেও লুপটা কিন্তু দুইবার ঘুরছে না, একবার ঘুরছে। :)

    উত্তরমুছুন
  3. n সংখ্যক ধনাত্মক বেজোড় সংখ্যার যোগফল নির্ণয়ের জন্য একটা প্রোগ্রাম দঁআড় করাতে পেরেছি। তবুও মনে শান্তি পাচ্ছি না। মনে হচ্ছে কোথাও একটা সমস্যা আছে। একটু চেক করে দিলে খুশি হতাম।
    #include
    int main()
    {
    int i, n, oddcons, sum;
    scanf("%d", &n);
    for(i = 1, sum = 0; i <= 2 * n; i = i = i + 2) {
    sum = sum + i;
    }
    printf("Summation is %d\n", sum);
    return 0;
    }

    উত্তরমুছুন
  4. আপাতত আউটপুট ঠিক থাকলেই চলবে।

    উত্তরমুছুন
  5. একটা প্রশ্ন, আমি ওপরের প্রোগ্রামে i সীমা n এর দ্বিগুন করে দিয়েছি [for(i = 1, sum = 0; i <= 2 * n; i = i = i + 2)]
    এক্ষেত্রে, আমি যদি n এর মান ৫ দেই তাহলে লুপ ১০ বার ঘুরার কথা। মানে আউটপুট ১০১ হবার কথা। কিন্তু আউটপুট ঠিকঠাক ২৫ দেখাচ্ছে কেনো?

    উত্তরমুছুন
  6. লুপ কতবার ঘুরবে তা কেবল n-এর মানের উপর নির্ভর করে না, i-এর মান প্রতিবার কত বাড়ছে তার উপরও নির্ভর কর। এখানে i-এর মান 1, 2, 3, ... হলে ১০ বার ঘুরত, কিন্তু i-এর মান এখানে হচ্ছে 1, 3, 5, ... তাই ৫ বার ঘুরার পর i-এর মান 2 * n এর চেয়ে বড় হয়ে যাচ্ছে এবং i <= 2 * n কন্ডিশনটি মিথ্যা হয়ে যাচ্ছে, ফলে লুপ আর ঘুরছে না (2 * n = 10, আর ৫ বার ঘুরার পরে i-এর মান দাঁড়ায় 11)।

    উত্তরমুছুন
  7. এই মন্তব্যটি লেখক দ্বারা সরানো হয়েছে।

    উত্তরমুছুন
  8. #include
    int main()
    {
    int n,a,p,sum=0;
    scanf("%d",&n);
    for(a=1;a<=n;a++)
    {p=2*a-1;
    sum=sum+p;}
    printf("sum is %d",sum);
    return(0);}
    i think i could com to a solution for the problem of odd number.i m a 1st year EEE student but i have great interest for programming.thanks subeen bhia for giving problms to enhance our thinking capability

    উত্তরমুছুন
  9. এই মন্তব্যটি লেখক দ্বারা সরানো হয়েছে।

    উত্তরমুছুন
  10. ভাইয়া,5.6 এ
    for(i=1,sum=0;i<=n;i++) এ i=1, এর জায়গাতে i=1; দিলে হয় না কেনো?
    আবার, (i=1,sum=0;i<=n;i++) এর বদলে (i=1,i<=n;i++;sum=0) দিলেও হয় না কেন?
    দয়া করে বলুন!

    আর ৫.৯ এ t এর মানে কি?
    ৫.৯ একটু ডিটেইল বুঝিয়ে দিবেন প্লিজ!!!!
    বুঝিয়ে দিলে খুউউউউব উপকৃত হব!

    আর ভাইয়া আমি তো ক্লাস সেভেন এ পই তাই অনেক অঙ্ক আআর পক্ষে যানা সম্ভব না, তাই কি করব?

    উত্তরমুছুন
    উত্তরগুলি
    1. ১। for লুপের ক্ষেত্রে প্রথম বন্ধনীর ভেতর তিনটি অংশ আছে। আর এই তিনটি অংশকে সেমিকোলন (;) দিয়ে আলাদা করা হয়। লুপ শুরুর সময় কেবল মাত্র একবার প্রথম অংশের কাজ সম্পন্ন হয়। এই অংশে সাধারণত কোনো কিছুর প্রাথমিক (মানে শুরুর সময়) মান নির্ধারণ করে দেওয়া হয়। প্রথম অংশের কাজ হওয়ার পরে হয় দ্বিতীয় অংশের (মানে দুটি সেমিকোলনের মধ্যের অংশ) কাজ। এই অংশে কোনো একটি শর্ত (কন্ডিশন) দেওয়া হয়। দ্বিতীয় অংশের কাজের পরে লুপের ভেতরের অংশের কাজ হয়। আর ভেতরের অংশের কাজ একবার হওয়ার পরে প্রথম বন্ধনীর ভেতর যে তৃতীয় অংশটি আছে, সেটির কাজ হয়। তৃতীয় অংশে আসলে এমন কিছু করা হয় যেন লুপটি চলতে পারে (যেমন, i-এর মান ১ বাড়ানো)। তৃতীয় অংশের কাজের পরে আবার দ্বিতীয় অংশের কাজ (মানে শর্ত পরীক্ষা) হয়। তারপরে আবার লুপের ভেতরের কাজ। এভাবে চলতে থাকে। যখন দ্বিতীয় অংশের কাজ, মানে ওখানে যে শর্ত দেওয়া আছে, সেটি মিথ্যা হয়ে যায় (যেমন i-এর মান বাড়তে বাড়তে n-এর চেয়ে বড় হয়ে যায় আর i <= n শর্তটি মিথ্যা হয়) তখন লুপটি শেষ হয়ে যায়, মানে এর পর আর লুপের ভেতরের কোনো কাজ হয় না। সুতরাং, i=1,sum=0; মানে লুপের শুরুতে i-এর মান 1 আর sum-এর মান 0 দেওয়া হয়। আর i<=n দিয়ে i, n-এর চেয়ে ছোট কিংবা সমান কী না, সেটি পরীক্ষা করা হয়। তাই এর বদলে i=1,i<=n; i++; sum=0 লিখলে কাজ হবে না। আশা করি বুঝতে পেরেছ। না বুঝলে আমি আবার বোঝানোর চেষ্টা করতে পারি।

      আর ৫.৯-এ t একটি ভেরিয়েবল। এটি ব্যবহার করা হয়েছে যাতে এটি b-এর মান ধরে রাখে এবং a-এর মধ্যে b-এর মান পরে দিয়ে দেওয়া যায়। t = b; না লিখে শুরুতেই যদি b-এর মান a-এর মধ্যে রাখা হতো, তাহলে কী সমস্যা হতো?

      কোনো অঙ্ক না বুঝলে সেটি বোঝার চেষ্টা করবে এবং চেষ্টা করার পরেও না বুঝলে সেটি আপাতত বাদ দিয়ে পরের অংশ পড়বে।

      মুছুন
  11. আচ্ছা ভাইয়া পরিশিষ্টে যে বই গুলার কথা বলা হয়েছে, ওগুলার বদলে কি বাংলা বই পড়া যাবে?

    উত্তরমুছুন
    উত্তরগুলি
    1. ওগুলোর বদলে তো কোনো বাংলা বই নাই এখনও। ভবিষ্যতে কেউ যদি লিখে তবে অবশ্যই পড়া যাবে।

      মুছুন
    2. সুবীন ভাইয়ার হয়তো জানা নেই যে প্রোগ্রামিঙের ওপর বাংলায় অনেক ভালো ভালো বই বের হয়েছে,সে সব বই হয়তো সুবীন ভাইয়ার বইয়ের মতো এতো সুন্দর ভাবে লেখা হয়নি কিন্তু সে বই গুলো (আমার ধারণা) ইংরেজি বইয়ের থেকে সোজা । আমার এ মুহূর্তে নাম মনে পড়ছে না, তবে নীলক্ষেতে গিয়ে একটু ঘাটলেই পাওয়া যাবে ।
      ধন্যবাদ ।

      মুছুন
  12. ধন্যবাদ

    আপনি খুব ভালো একটা কাজ শুরু করেছেন, আমি সৃষ্টিকর্তার কাছে আপনার মঙ্গলের জন্য প্রার্থনা করব!

    আপনারফেসবিক আইডি দেয়া যাবে?

    উত্তরমুছুন
    উত্তরগুলি
    1. তোমাকেও ধন্যবাদ। আমার ব্যক্তিগত ফেসবুক একাউন্ট বর্তমানে ডিএক্টিভ করা। বইয়ের ফেসবুক ফ্যান পেজে যোগ দিতে পারো: https://www.facebook.com/computerprogrammingbook

      মুছুন
  13. #include
    int main()
    {
    int a, b, t, x, gcd;
    scanf("%d %d", &a, &b);
    if (a == 0) gcd = a;
    else if (b == 0) gcd = b;
    else {
    while (b != 0) {
    t = b;
    b = a % b;
    a = t;
    }
    gcd = a;
    }
    printf("GCD is %d\n", gcd);
    return 0;
    }
    এই সমস্যাটাতে আপনি if এর পর কেন {} ব্যবহার করেন নি, এবং এখানে x ফাংশনের কাজাটা কি, বুঝলাম না । (আমি x ছাড়া চালিয়ে দেখেছি )

    উত্তরমুছুন
  14. Dont Worry, X ছাড়াও কাজ করবে কোড, আর তোমার if condition এর execution code যদি এক লাইনের বেশি না হয়, তাহলে {} - বন্ধনি না ব্যাবহার করলেও চলে। একই জিনিস for ও while loop এর ক্ষেত্রেও প্রযোজ্য।

    উত্তরমুছুন
  15. Dear Subeen Bhai please tell me its a good approach to solve the problem you have asked for or another way to do it more efficient means less time to compile the program? I have another query I didn't understand the method of gcd(5.9).If(a==0) gcd=a; if(b==0) gcd=b;if we take the value of a and b from the users then how it will equal to 0(let take a=3, b=5). Please clarify this.It is totally vauge to me still after I have passed two days for this problem to understand.

    #include

    void main()
    {
    int i,n,sum;
    printf("please enter your odd number you want to see: ");
    scanf("%d",&n);
    sum=0;
    {

    for(i=1;i<=n;i=i+2)
    {
    printf("%d\t",i);

    sum=sum+i;
    }
    }
    printf("\n\nSum of 1+3+5+--------+%d=%d\n\n",n,sum);
    }

    উত্তরমুছুন
  16. 5.9 এত কঠিন ভাবে না লিখে
    #include
    int main()
    {
    int a, b, gcd;
    scanf("%d %d", &a, &b);
    if (a == 0) gcd = b;
    else if (b == 0) gcd = a;
    else {
    while (b != 0) {
    a = b;
    b = a % b;
    }
    }
    printf("GCD is %d\n", a);
    return 0;
    }
    লিখলে ভাল হত না?

    উত্তরমুছুন
    উত্তরগুলি
    1. তোমার প্রোগ্রামে তো বাগ আছে। বিভিন্ন ইনপুট দিয়ে পরীক্ষা করে দেখো। ৫.৯ কঠিন করে লেখার পিছনে কারণ খুঁজে বের করো। :)

      মুছুন
  17. sir , I'm facing problem to make a program of lcm in the method of 5.9

    উত্তরমুছুন
  18. এই মন্তব্যটি লেখক দ্বারা সরানো হয়েছে।

    উত্তরমুছুন
    উত্তরগুলি
    1. because the value of a and b are changing in your code. ur while loop is running untill b!=0. that's why a*b = a*0 = 0 and lcm = 0/gcd = 0. :). Correct this problem.

      মুছুন
  19. ভাইয়া GCD এই কোড টা একটু দেখবেন । কোন ভুল যদি থাকে
    #include
    int main ()
    {
    int M,N,reminder;
    printf("Input M: ");
    scanf("%d",&M);
    printf("Input N: ");
    scanf("%d",&N);
    while (M<=N)
    {printf("N must be smaller then M.\nInput M: ");
    scanf("%d",&M);
    printf("Input N: ");
    scanf("%d",&N);}
    reminder=M%N;
    while (reminder!=0)
    {
    M=N;
    N=reminder;
    reminder=M%N;
    }
    printf("-----\n");
    printf("GCD: %d",N);
    getch();
    return 0;
    }

    উত্তরমুছুন
  20. as far as i know getch(); is used to stop screen output so that output screen doesnt invisible after process untill u "press any key" !!!

    উত্তরমুছুন
  21. #include
    int main(){
    int v,t,s;
    printf("enter the value of v and t: \n");
    scanf("%d &d",&v,&t);
    s=(2*t)*v;
    printf("distance in the time of 2t is: %d",s);
    return 0;
    }
    প্রোগ্রামটা কি ঠিক আছে?

    উত্তরমুছুন
  22. #include

    int main()

    {
    int a,b,x,lcm;
    printf("Enter one number: ");
    scanf("%d", &a);
    printf("Enter another number: ");
    scanf("%d", &b);
    if(a>b) {
    x=a;
    }
    else {
    x=b;
    }
    for (;x>=1;x++) {
    if (x%a==0 && x%b==0) {
    lcm=x;
    break;
    }
    }
    printf("LCM is :%d\n",lcm);
    return 0;
    }

    LCM er code ki thik ase, vaia?

    উত্তরমুছুন
  23. ৫ বছরে মোট পরিশোধ ... সুবিন ভাইয়া দেখবেন ঠিক আছে কিনা ?

    #include
    int main(){
    double loan_amount,interest_amount,total_amount,monthly_amount,number_years;
    printf("Enter Loan-amount: ");
    scanf("%lf",&loan_amount);

    printf("Enter Interest amount: ");
    scanf("%lf",&interest_amount);

    printf("Enter Number of years: ");
    scanf("%lf",&number_years);

    total_amount = loan_amount + loan_amount*number_years*interest_amount/100;
    monthly_amount = total_amount / (number_years * 12);

    printf("Total Amount : %0.2lf\n",total_amount);
    printf("Monthly Amount : %0.2lf\n",monthly_amount);
    }

    উত্তরমুছুন
  24. #include
    int main()
    {
    double v,t,s;
    printf ("v=");
    scanf ("%lf", &v);
    printf ("t=");
    scanf ("%lf", &t);

    s=2tv;

    printf ("s= %0.2lf\n",s);
    return 0;
    }

    এই কোডটিতে সমস্যা কোথায়? "s=2tv;" এই লাইনটিতে error দেখাচ্ছে............

    উত্তরমুছুন
  25. ভাইয়া,পাওয়ার কিভাবে দিব? যেমন p=v to the power 8

    উত্তরমুছুন
  26. #include

    int main()
    {
    int dividend , divisor , quotient , remainder , a , b ,gcd ;
    scanf("%d %d" , &a , &b) ;
    if (a<b) {
    dividend=b ;
    divisor=a ;
    }
    else {
    dividend=a ;
    divisor=b ;
    }

    quotient=dividend/divisor ;
    remainder=dividend % divisor ;

    while (remainder !=0) {
    dividend=divisor*quotient +remainder ;
    divisor=dividend ;
    if(remainder==0) {
    divisor=gcd ;
    }
    break ;

    }
    printf("%d" , gcd) ;
    return 0 ;

    }

    where is the problem vaiya???

    উত্তরমুছুন
  27. ভাইয়া প্রোগ্রাম-৫.৯-এ একটু কারেকশন আছে!!

    5 ও 0 এর গ.সা.গু করতে হলে যদি a= 5 ; b = 0 হয় তখন আউটপুট হয় 5 আর যদি a=0 ; b = 5 হয় তখন আউটপুট হয় 0

    তাই gcd = a; লাইনটি printf("GCD is %d\n", gcd); এর আগে লিখতে হবে!!

    #include
    void main()
    {
    int a, b, t, x, gcd;
    scanf("%d %d", &a, &b);
    if (a == 0) gcd = b;
    else if (b == 0) gcd = a;
    else {
    while (b != 0) {
    t = b;
    b = a % b;
    a = t;
    }

    }
    gcd = a;
    printf("GCD is %d\n", gcd);
    }

    উত্তরমুছুন
  28. ভাইয়া কেমন হয়েছে কোডিংটা?
    #include
    int main()
    {
    int a, b, c;
    int d, e, f;
    /* first line*/
    printf("Enter value for x = ");
    scanf("%d", &a);
    printf("Enter value for y = ");
    scanf("%d", &b);
    printf("Enter value for x + y = ");
    scanf("%d", &c);
    /* second line*/
    printf("type other value\n");
    printf("Enter value for x = ");
    scanf("%d", &d);
    printf("Enter value for y = ");
    scanf("%d", &e);
    printf("Enter value for x - y = ");
    scanf("%d", &f);

    /*now the result*/
    int num1;
    printf("What do you want?\n 1. Plus\n 2. Minus\n");
    scanf("%d", &num1);

    /*start new form*/

    if(num1 == 1){ /*<----first condition*/
    printf("%dx + %dy = %d\n", a,b,c);
    printf("%dx - %dy = %d\n", d,e,f);

    int tt, vv, mm;
    tt = a+d;
    vv = b-e;
    mm = c+f;
    if(d < e){
    printf("%dx%dy = %d", tt,vv,mm);
    }
    else
    printf(" %dx + %dy = %d", tt, vv, mm);
    }
    else if(num1 == 2){ /*<---second condition*/
    printf("%dx + %dy = %d\n", a,b,c);
    printf("%dx - %dy = %d\n", d,e,f);

    int rr,ww,qq;
    rr = a-d;
    ww = b+e;
    qq = c-f;
    printf("%dx + %dy = %d\n", rr,ww,qq);
    }
    return 0;


    }

    উত্তরমুছুন
  29. Sir, where is my program incorrect ? please look the program.

    #include
    int main()
    {
    double loan_amount, interest_amount, number_of_year, total_amount, monthly_amount;
    printf("Enter the loan amount :" );
    scanf("lf", &loan_amount);
    printf("Enter the interest amount :" );
    scanf("lf", &interest_amount);
    printf("Enter the number of year :" );
    scanf("lf", &number_of_year);
    printf("Enter the total amount :" );
    scanf("lf", &total_amount);
    printf("Enter the monthly amount :" );
    scanf("lf", &monthly_amount);
    total_amount = loan_amount + loan_amount * interest_amount * number_of_year / 100.00;
    monthly_amount = total_amount / number_of_year * 12;
    printf("total amount %0.2lf\n", total_amount);
    printf("monthly amount %0.2lf\n", monthly_amount);
    return 0;
    }

    উত্তরমুছুন
    উত্তরগুলি
    1. loan_amount, interest_amount, number_of_year, total_amount, monthly_amount এদের প্রত্যেকটা ভেরিয়েবল scan নেওয়ার ৫টা স্টেটমেন্টেই ভুল । format specifier ঠিক মতো লিখেন নাই, lf এর স্থলে %lf হবে ।

      মুছুন
  30. I hope this is the easiest and most efficient program for Determination of (GCD → Greatest Common Divisor বা HCF → Highest Common Factor) ও লসাগু (LCM → Least Common Multiple)

    #include
    int main ()
    {
    int n1,n2,a,b,c,gcd,lcm;
    scanf("%d %d", &n1, &n2);
    a = n1;
    b = n2;
    while(a != 0) {
    c = a;
    a = b % a;
    b = c;
    }
    gcd = b;
    lcm = (n1 * n2) / gcd;
    printf("Gcd is : %d\n", gcd);
    printf("Lcm is : %d\n", lcm);
    }

    উত্তরমুছুন
  31. Subeen bhai, please check if this program is correct.
    Hints: sum of n positive integers is square of n i.e., n*n

    #include

    int main()

    {
    int n, sum;

    printf("Enter number of positive odd integers: ");

    scanf("%d", &n);

    sum = n * n;

    printf("Sum of %d positive odd integers: %d", n, sum);

    return 0;
    }

    উত্তরমুছুন

এখানে বিষয়সংশ্লিষ্ট মন্তব্য কিংবা প্রশ্ন করা যাবে। বাংলায় মন্তব্য করার সময় বাংলা হরফে লিখতে হবে। আর রোমান হরফে লিখলে ইংরেজিতে লিখতে হবে। নতুবা মন্তব্য প্রকাশ করা হবে না। ধন্যবাদ।