তোমরা এরই মধ্যে প্রোগ্রামের মধ্যে বিভিন্ন ধরনের শর্ত (condition) ব্যবহার করতে শিখে গেছ। এইসব শর্ত দিয়ে বিভিন্ন প্রোগ্রাম তৈরি করাও হয়তো শুরু করে দিয়েছ। খুব ভালো কথা। কিন্তু এখন আমরা আরেকটি সমস্যা ও তার সমাধানের পথ খুঁজব। একটি প্রোগ্রাম লিখতে হবে, যেটি 1 থেকে 10 পর্যন্ত সব পূর্ণসংখ্যা মনিটরে দেখাবে (প্রতি লাইনে একটি সংখ্যা থাকবে)। খুবই সহজ সমস্যা এবং সমাধানও অত্যন্ত সহজ। আমি জানি, তোমরা এক মিনিটের মধ্যেই নিচের প্রোগ্রামটি লিখে ফেলবে:
#include <stdio.h>
int main()
{
printf("1\n");
printf("2\n");
printf("3\n");
printf("4\n");
printf("5\n");
printf("6\n");
printf("7\n");
printf("8\n");
printf("9\n");
printf("10\n");
return 0;
}
প্রোগ্রাম: ৪.১
এখানে আমরা 1 থেকে 10 পর্যন্ত সবগুলো সংখ্যা প্রিন্ট করে দিয়েছি। অবশ্য একটি printf() ব্যবহার করেও কাজটি করা যেত: printf("1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n");
আবার প্রোগ্রামটি এভাবেও লেখা যেত। n একটি ইন্টিজার ভেরিয়েবল, যার মান আমরা প্রথমে 1 বসাব। তারপর n-এর মান প্রিন্ট করব। তারপর n-এর মান এক বাড়াব (n = n + 1 অথবা সংক্ষেপে, n++ লিখে)।
int n = 1;
printf("%d\n", n);
n = n + 1;
printf("%d\n", n);
n = n + 1;
printf("%d\n", n);
n = n + 1;
/* এভাবে মোট দশ বার */
আবার nএর মান 1 বাড়ানোর কাজটি কিন্তু এক লাইনেই সেরে ফেলা যায়।
printf("%d\n", n);
n = n + 1;
এর পরিবর্তে আমরা লিখতে পারি:
printf("%d\n", n++);
যা-ই হোক, এ তো গেল 1 থেকে 10 পর্যন্ত প্রিন্ট করা। কিন্তু আমাদের যদি 1 থেকে 100, বা 1000, বা 10000 পর্যন্ত প্রিন্ট করতে বলা হতো তাহলে আমরা কী করতাম? ওপরে যে পদ্ধতি অবলম্বন করা হয়েছে সেটি তো অবশ্যই করা যেত। কিন্তু আমি জানি, তোমরা কেউই এত কষ্ট করতে রাজি না।
এ সমস্যা সমাধানের জন্য সব প্রোগ্রামিং ল্যাঙ্গুয়েজেই লুপ (loop) বলে একটি পদ্ধতি রয়েছে। এটি দিয়ে একই কাজ বারবার করা যায়। লুপের মধ্যে একটি শর্ত বসিয়ে দিতে হয়, যেটি পূরণ না হওয়া পর্যন্ত প্রোগ্রামটি লুপের ভেতরের কাজ বারবার করতে থাকবে। সি ল্যাঙ্গুয়েজে দুটি জনপ্রিয় লুপ হচ্ছে while এবং for। আমরা এখন while ব্যবহার করে ওই প্রোগ্রামটি লিখব।
#include <stdio.h>
int main()
{
int n = 1;
while(n <= 10) {
printf("%d\n", n);
n++;
}
return 0;
}
প্রোগ্রাম: ৪.২
কী চমৎকার! এখন আমরা চাইলে 10-এর বদলে যত খুশি বসাতে পারি, যত বসাব 1 থেকে তত পর্যন্ত প্রিন্ট হবে। while লুপে প্রথম বন্ধনীর ভেতর শর্ত লিখে দিতে হয়। প্রোগ্রাম সেই শর্ত পরীক্ষা করে। যতক্ষণ পর্যন্ত শর্তটি সত্য হয় ততক্ষণ পর্যন্ত লুপের ভেতরের কাজগুলো চলতে থাকে। লুপের ভেতরের কাজগুলো থাকবে দ্বিতীয় বন্ধনীর ভেতর। যেমন এখানে লুপের ভেতরে আমরা দুটি কাজ করেছি। n-এর মান প্রিন্ট করেছি আর তারপর n-এর মান 1 বাড়িয়েছি। n-এর মান 1 করে বাড়তে থাকলে একসময় এটি 11 হবে আর তখন n <= 10 এই শর্তটি মিথ্যা হয়ে যাবে (কারণ 11 > 10)। আর প্রোগ্রামটিও লুপ থেকে বের হয়ে আসবে। অর্থাৎ, শর্তটি যখনই মিথ্যা হবে তখনই লুপ থেকে বের হয়ে যাবে।
ইন্ডেন্টেশনের ব্যাপারটিও খেয়াল করো। লুপের ভেতরের অংশের কোড চার ঘর ডানদিক থেকে শুরু হয়েছে।
এবারে তোমাদের জন্য একটি প্রশ্ন। বলো তো নিচের প্রোগ্রামটির আউটপুট কী হবে?
#include <stdio.h>
int main()
{
int n = 1;
while(n <= 10) {
printf("%d\n", n);
}
n++;
return 0;
}
প্রোগ্রাম: ৪.৩
এটাও কি 1 থেকে 10 পর্যন্ত সব সংখ্যা প্রিন্ট করবে? দেখা যাক। প্রোগ্রামটি রান করাও। আউটপুট কী?
মনিটরে প্রতি লাইনে 1 প্রিন্ট হচ্ছে এবং প্রোগ্রামটি বন্ধ হচ্ছে না। খুবই দুঃখের বিষয়। দেখা যাক দুঃখের পেছনে কারণটা কী।
int n = 1; প্রথমে প্রোগ্রামটি n-এর মান 1 বসাবে।
তারপর while লুপে গিয়ে শর্ত পরীক্ষা করবে। আমরা শর্ত দিয়েছি n <= 10 মানে n-এর মান 10-এর ছোট বা সমান। এই শর্ত তো সত্য কারণ n-এর মান 1। তারপর প্রোগ্রামটি n-এর মান প্রিন্ট করবে printf("%d\n", n);। তারপর কি n-এর মান 1 বাড়বে? বাড়বে না, কারণ আমরা দ্বিতীয় বন্ধনী শেষ করে দিয়েছি '}' চিহ্ন দিয়ে (মানে লুপ শেষ)। তার মানে প্রোগ্রামটি আবার শর্ত পরীক্ষা করবে, আবার n-এর মান প্রিন্ট করবে...এভাবে চলতেই থাকবে কারণ n-এর মান যেহেতু বাড়ছে না, n <= 10 শর্তটি সব সময় সত্যই রয়ে যাচ্ছে – কখনো মিথ্যা হচ্ছে না। এখন তোমরা while লুপ নিয়ে বিভিন্ন ধরনের গবেষণা চালিয়ে যেতে পারো। সব সময় সত্য হয় এমন শর্ত ব্যবহার করে তোমার কম্পিউটারকে ব্যস্ত রাখতে পারো। while(1){...} এখানে শর্ত হিসেবে 1 ব্যবহার করা হয়েছে। কম্পিউটার 1 বলতে বোঝে সত্য। সুতরাং লুপের ভেতরের কাজগুলো সব সময় চলতে থাকবে, বন্ধ হবে না। while(1 == 1){...} ও একই আচরণ করবে। তবে এখন আমি তোমাদের একটি দরকারি জিনিস বলে রাখি, যেটি দিয়ে তোমরা জোর করে লুপ থেকে বের হয়ে যেতে পারবে। সেটি হচ্ছে break স্টেটমেন্ট। কথা না বাড়িয়ে একটি প্রোগ্রাম লিখলেই ব্যাপারটি পরিষ্কার হয়ে যাবে।
#include <stdio.h>
int main()
{
int n = 1;
while(n <= 100) {
printf("%d\n", n);
n++;
if(n > 10) {
break;
}
}
return 0;
}
প্রোগ্রাম: ৪.৪
এই প্রোগ্রামটি কী করবে? 1 থেকে 10 পর্যন্ত প্রিন্ট করবে। যদিও while-এর ভেতর আমরা বলেছি যে শর্ত হচ্ছে n <= 100, কিন্তু লুপের ভেতরে আবার বলে দিয়েছি যে যদি n > 10 হয়, তবে break; মানে বের হয়ে যাও, বা লুপটি ভেঙে দাও। break সব সময় যেই লুপের ভেতর থাকে সেটির বাইরে প্রোগ্রামটিকে নিয়ে আসে। সুতরাং n-এর মান 10 প্রিন্ট হওয়ার পরে এর মান এক বাড়বে (n++;) অর্থাৎ n-এর মান হবে 11। আর তখন n > 10 সত্য হবে, ফলে প্রোগ্রামটি if কন্ডিশনের ভেতরে ঢুকে যাবে। সেখানে গিয়ে সে দেখবে তাকে break করতে বলা হয়েছে তাই সে লুপের বাইরে চলে যাবে। break-এর উল্টা কাজ করে, এমন একটি স্টেটমেন্ট হচ্ছে continue;। কোনো জায়গায় continue ব্যবহার করলে লুপের ভেতরে continue-এর পরের অংশের কাজ আর হয় না। নিচের প্রোগ্রামটি কোড করে কম্পাইল ও রান করো:
#include <stdio.h>
int main()
{
int n = 0;
while (n < 10) {
n = n + 1;
if (n % 2 == 0) {
continue;
}
printf("%d\n", n);
}
return 0;
}
প্রোগ্রাম: ৪.৫
এই প্রোগ্রামটি 1 থেকে 10-এর মধ্যে কেবল বেজোড় সংখ্যাগুলো প্রিন্ট করবে। জোড় সংখ্যার বেলায় continue ব্যবহার করার কারণে প্রোগ্রামটি printf("%d\n", n); স্টেটমেন্ট এক্সিকিউট না করে লুপের পরবর্তী ধাপের কাজ শুরু করবে।
এবারে আমরা আরেকটি প্রোগ্রাম লিখব। ছোটবেলায় যে নামতাগুলো তোমরা শিখেছ সেগুলো এখন আমরা প্রোগ্রাম লিখে কম্পিউটারের মনিটরে দেখব। চলো 5-এর নামতা দিয়ে শুরু করা যাক। আমাদের প্রোগ্রামের আউটপুট হবে এরকম:
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
5 X 10 = 50
তোমরা নিশ্চয়ই এখন অনেকগুলো printf ফাংশন লেখা শুরু করবে না। লুপের সাহায্যে প্রোগ্রামটি লিখে ফেলবে:
#include <stdio.h>
int main()
{
int n = 5;
int i = 1;
while (i <= 10) {
printf("%d X %d = %d\n", n, i, n*i);
i = i + 1;
}
return 0;
}
প্রোগ্রাম: ৪.৬
এতক্ষণ আমরা while লুপ ব্যবহার করলাম। এবার চলো for লুপ ব্যবহার করতে শিখি। 5-এর নামতার প্রোগ্রামটি যদি আমরা for লুপ ব্যবহার করে লিখি তাহলে সেটির চেহারা দাঁড়াবে:
#include <stdio.h>
int main()
{
int n = 5;
int i;
for(i = 1; i <= 10; i = i + 1) {
printf("%d X %d = %d\n", n, i, n*i);
}
return 0;
}
প্রোগ্রাম: ৪.৭
for লুপের প্রথম বন্ধনীর ভেতর তিনটি অংশ লক্ষ করো। প্রতিটি অংশ সেমিকোলন (;) দিয়ে আলাদা করা হয়েছে। প্রোগ্রামটি যখন লুপের ভেতর ঢুকে তখন প্রথম সেমিকোলনের আগে আমরা যে কাজগুলো করতে বলব, সেগুলো একবার করবে। যেমন এখানে i-এর মান 1 বসাবে। তারপর দ্বিতীয় অংশের কাজ করবে। দ্বিতীয় অংশে সাধারণত শর্ত ব্যবহার করা হয় (while লুপে প্রথম বন্ধনীর ভেতর আমরা যে কাজটি করি আরকি)। ওপরের প্রোগ্রামে আমরা দ্বিতীয় অংশে i <= 10 শর্তটি ব্যবহার করেছি। এই শর্ত যদি মিথ্যা হয় তবে প্রোগ্রামটি লুপ থেকে বেরিয়ে আসবে। আর যদি সত্য হয় তবে লুপের ভেতরের কাজগুলো করবে এবং তার পর for লুপের সেই প্রথম বন্ধনীর ভেতর তৃতীয় অংশে যে কাজগুলো করতে বলা হয়েছে সেগুলো করবে। তারপর আবার দ্বিতীয় অংশে এসে শর্ত পরীক্ষা করবে। প্রথম অংশের কাজ কিন্তু আর হবে না। তো আমাদের প্রোগ্রামটি আবার লক্ষ করো। i <= 10 সত্য, কারণ i-এর মান 1। তারপর printf() ফাংশনের কাজ হবে। তারপর i = i + 1 স্টেটমেন্ট এক্সিকিউট হবে (i-এর মান এক বেড়ে যাবে)। তারপর আবার i <= 10 সত্য না মিথ্যা সেটি পরীক্ষা করা হবে (i-এর মান এখন 2)। তারপর আবার লুপের ভেতরের কাজ হবে (printf())। এভাবে যতক্ষণ না i <= 10 শর্তটি মিথ্যা হচ্ছে ততক্ষণ লুপের ভেতরের কাজ চলতে থাকবে। i-এর মান এক এক করে বেড়ে বেড়ে যখন 11 হবে তখন শর্তটি মিথ্যা হবে আর প্রোগ্রামটি লুপ থেকে বের হয়ে আসবে। for লুপের প্রথম বন্ধনীর ভেতরের তিনটি অংশই যে ব্যবহার করতে হবে এমন কোন কথা নেই। কোন অংশ ব্যবহার করতে না চাইলে আমরা সেটি ফাঁকা রেখে দিতে পারি, তবে সেমিকোলন কিন্তু অবশ্যই দিতে হবে। যেমন আমরা যদি i-এর মান আগেই নির্ধারণ করে দেই তবে সেটি লুপের ভেতর না করলেও চলে।
int i = 1;
for(; i<= 10; i = i + 1) {
printf("%d X %d = %d\n", n, i, n*i);
}
যদি তিনটি অংশের কোনোটিই লিখতে না চাই, তবে পুরো প্রোগ্রামটি এভাবে লেখা যায়:
#include <stdio.h>
int main()
{
int n = 5;
int i = 1;
for( ; ; ) {
printf("%d X %d = %d\n", n, i, n*i);
i = i + 1;
if (i > 10) {
break;
}
}
return 0;
}
প্রোগ্রাম: ৪.৮
এখন আমরা আরেকটি কাজ করব। for লুপ ব্যবহার করে 5-এর নামতায় যে গুণ করেছি (n*i) সেটি না করে কেবল যোগ করে প্রোগ্রামটি লিখব। তোমরা কি অবাক হচ্ছ যে নামতার প্রোগ্রাম আবার গুণ ছাড়া কীভাবে হবে? আমরা কিন্তু 5 x 3-কে লিখতে পারি 5 + 5 + 5। আমি কী করতে যাচ্ছি তা বুঝতে পারছ নিশ্চয়ই। প্রোগ্রামটি লিখে ফেলি:
#include <stdio.h>
int main()
{
int m, n = 5;
int i;
m = 0;
for(i = 1; i <= 10; i = i + 1) {
m = m + n;
printf("%d X %d = %d\n", n, i, m);
}
return 0;
}
প্রোগ্রাম: ৪.৯
প্রোগ্রামটিতে আমরা গুণ না করে যোগ করলাম। কম্পাইল ও রান করে দেখো। কাজ করবে ঠিকঠাক। কোনো সংখ্যার গুণিতকগুলো যেমন গুণ করে বের করা যায়, তেমনই যোগ করেও করা যায়। আমরা যদি কোনো প্রোগ্রামে দেখি যে গুণ না করে যোগ করলেই কাজ হচ্ছে, তাহলে যোগ করাই ভালো কারণ কম্পিউটারের প্রসেসর একটি যোগ করতে যে সময় নেয়, একটি গুণ করতে তার চেয়ে অনেক বেশি সময় নেয়। যদিও তুমি হয়তো প্রোগ্রাম রান করার সময় তা বুঝতে পারো না। কম্পিউটারের প্রসেসর সম্পর্কে বিস্তারিত লেখাপড়া করলে বিষয়টা জানতে পারবে। আপাতত এটি জানলেই চলবে যে একটি গুণ করার চেয়ে একটি যোগ করা ভালো, কারণ যোগ করতে কম্পিউটার অপেক্ষাকৃত কম সময় নেয়।
তো আমরা for লুপ শিখে ফেললাম। এখন আমরা চেষ্টা করব শুধু নির্দিষ্ট একটি সংখ্যার নামতা না লিখে 1 থেকে 20 পর্যন্ত সবগুলো সংখ্যার নামতা একবারে লিখে ফেলতে। অর্থাৎ n-এর মান 5 নির্দিষ্ট না করে 1 থেকে 20 পর্যন্ত হবে। এটি করার একটি বোকা পদ্ধতি (নাকি চোরা পদ্ধতি?) হচ্ছে নামতা লিখার অংশটি বারবার কপি-পেস্ট করা। কিন্তু আমরা এটি করব লুপের ভেতর লুপ ব্যবহার করে। একটি লুপের সাহায্যে n-এর মান 1 থেকে 20 পর্যন্ত এক করে বাড়াব। আর তার ভেতর n-এর একটি নির্দিষ্ট মানের জন্য নামতাটা লিখব।
#include <stdio.h>
int main()
{
int n, i;
for(n = 1; n <= 20; n = n + 1) {
for(i = 1; i <= 10; i = i + 1) {
printf("%d X %d = %d\n", n, i, n*i);
}
}
return 0;
}
প্রোগ্রাম: ৪.১০
এখন তোমরা প্রোগ্রামটি চালাও। তারপর তোমাদের কাজ হবে গুণ না করে কেবল যোগ ব্যবহার করে প্রোগ্রামটি লেখা।
আমরা এখানে একটি for লুপের ভেতর আরেকটি for লুপ, যাকে নেস্টেড লুপও (nested loop) বলে, সেটি ব্যবহার করলাম। তো আমরা চাইলে for লুপের ভেতর for বা while অথবা while লুপের ভেতর for বা while লুপ একাধিকবার ব্যবহার করতে পারি। অবশ্য সেটি কখনোই চার বা পাঁচবারের বেশি দরকার হওয়ার কথা না। নেস্টেড লুপ দিয়ে আমরা এখন আরেকটি প্রোগ্রাম লিখব। 1, 2, 3 – এই তিনটি সংখ্যার সব বিন্যাস (permutation) বের করার প্রোগ্রাম। বিন্যাসগুলো ছোট থেকে বড় ক্রমে দেখাতে হবে অর্থাৎ প্রোগ্রামটির আউটপুট হবে এই রকম:
1, 2, 3
1, 3, 2
2, 1, 3
2, 3, 1
3, 1, 2
3, 2, 1
এই প্রোগ্রামটি অনেকভাবে লেখা যেতে পারে, কিন্তু আমরা এখন পর্যন্ত যতটুকু প্রোগ্রামিং শিখেছি, তাতে নেস্টেড লুপের ব্যবহারই সবচেয়ে ভালো সমাধান।
এখানে আমরা প্রথম সংখ্যাটির জন্য একটি লুপ, দ্বিতীয় সংখ্যাটির জন্য প্রথম লুপের ভেতরে একটি লুপ এবং তৃতীয় সংখ্যাটির জন্য দ্বিতীয় লুপের ভেতর আরেকটি লুপ ব্যবহার করব।
#include <stdio.h>
int main()
{
int a, b, c;
for (a = 1; a <= 3; a++) {
for (b = 1; b <= 3; b++) {
for (c = 1; c <= 3; c++) {
printf ("%d, %d, %d\n", a, b, c);
}
}
}
return 0;
}
প্রোগ্রাম: ৪.১১
এখন প্রোগ্রামটি রান করলে আমরা এই রকম আউটপুট পাব:
1, 1, 1
1, 1, 2
1, 1, 3
1, 2, 1
1, 2, 2
1, 2, 3
1, 3, 1
1, 3, 2
1, 3, 3
2, 1, 1
2, 1, 2
2, 1, 3
2, 2, 1
2, 2, 2
2, 2, 3
2, 3, 1
2, 3, 2
2, 3, 3
3, 1, 1
3, 1, 2
3, 1, 3
3, 2, 1
3, 2, 2
3, 2, 3
3, 3, 1
3, 3, 2
3, 3, 3
কিন্তু আমরা তো আসলে এই রকম জিনিস চাচ্ছি না। a-এর মান যখন 1 তখন b ও c-এর মান 1 হবে না, আবার b এবং c-এর মানও সমান হবে না। মানে a, b ও c আলাদা হবে। তাহলে আমরা লুপের ভেতর শর্তগুলো একটু পরিবর্তন করব। দ্বিতীয় লুপের শর্ত b <= 3-এর সঙ্গে আরেকটি শর্ত জুড়ে দেব, b != a। b <= 3 && b != a মানে b-এর মান 3-এর চেয়ে ছোট বা সমান হবে এবং b-এর মান a-এর মানের সমান হবে না। তৃতীয় লুপে আমরা এখন শর্ত দেব, c <= 3 && c != a && c != b, মানে c-এর মান 3-এর ছোট বা সমান হতে হবে এবং c-এর মান a-এর মানের সমান হওয়া চলবে না এবং c-এর মান b-এর মানের সমান হলেও চলবে না। তাহলে আমাদের প্রোগ্রামটির চেহারা দাঁড়াবে এই রকম:
#include <stdio.h>
int main()
{
int a, b, c;
for (a = 1; a <= 3; a++) {
for (b = 1; b <= 3 && b != a; b++) {
for (c = 1; c <= 3 && c != a && c != b; c++) {
printf ("%d, %d, %d\n", a, b, c);
}
}
}
return 0;
}
প্রোগ্রাম: ৪.১২
রান করলে আমরা আউটপুট কী দেখব?
3, 2, 1
মাত্র একটি লাইন! আমরা প্রোগ্রামটি ঠিক করতে গিয়ে ঝামেলা পাকিয়ে ফেলেছি মনে হচ্ছে। তোমরা কি একটু চিন্তা করে ঝামেলার কারণ বের করতে পারবে?
প্রথমে a-এর মান 1তাই a <= 3 সত্য। প্রোগ্রামটি প্রথম লুপের ভেতর ঢুকে গেল। তারপর দ্বিতীয় লুপের শুরুতে b-এর মান 1। b <= 3 সত্য। কিন্তু b != a মিথ্যা। কারণ aও b-এর মান তো সমান, দুটোর মানই 1। তাই প্রোগ্রামটি আর দ্বিতীয় লুপের ভেতর ঢুকবে না। এরপর a-এর মান 1 বাড়ল (a++)। a <= 3 সত্য (a-এর মান 2)। এখন দ্বিতীয় লুপ শুরু হবে। b-এর মান 1। এবারে b <= 3 এবং b != a দুটি শর্তই সত্য। প্রোগ্রামটি দ্বিতীয় লুপের ভেতর ঢুকে যাবে। তৃতীয় লুপের শুরুতে c-এর মান 1। c <=3 সত্য, c !=a সত্য কিন্তু c !=b মিথ্যা (দুটোর মানই 1)। তাই প্রোগ্রামটি তৃতীয় লুপ থেকে বের হয়ে যাবে– কেবল তিনটি শর্ত সত্য হলেই প্রোগ্রামটি তৃতীয় লুপের ভেতর ঢুকবে এবং a, b ও c-এর মান প্রিন্ট করবে। এভাবে কিছুক্ষণ গবেষণা করলে তোমরা দেখবে যে যখন a-এর মান 3, b-এর মান 2 এবং c-এর মান 1, তখনই কেবল সব শর্ত সত্য হয় আর আমরা আউটপুট পাই: 3, 2, 1। আসলে দ্বিতীয় লুপে আমরা b-এর মান a-এর মানের সমান হলে লুপ থেকে বের হয়ে যাচ্ছি। সেই কাজটি করা ঠিক হচ্ছে না। আমাদের উচিত দুটো মান সমান হলে পরবর্তী মানের জন্য চেষ্টা করা। আর মান দুটো সমান না হলেই কেবল পরবর্তী কাজ করা। তাহলে আমরা লিখতে পারি: for (b = 1; b <= 3; b++) { if (b != a) { /* b-এর মান a-এর মানের সমান না হলেই ভেতরের অংশে প্রোগ্রামটি ঢুকবে। */ for (c = 1; c <= 3; c++) { if (c != a && c != b) { /*c-এর মান a-এর মানের সমান না হলে এবং c-এর মান b-এর মানের সমান না হলেই কেবল ভেতরের অংশে প্রোগ্রামটি ঢুকবে। */ printf ("%d, %d, %d\n", a, b, c); } } } } তাহলে আমাদের পুরো প্রোগ্রামটি দাঁড়াচ্ছে এই রকম:
#include <stdio.h>
int main()
{
int a, b, c;
for (a = 1; a <= 3; a++) {
for (b = 1; b <= 3; b++) {
if (b != a) {
for (c = 1; c <= 3; c++) {
if (c != b && c != a){
printf ("%d, %d, %d\n", a, b, c);
}
}
}
}
}
return 0;
}
প্রোগ্রাম: ৪.১৩
প্রোগ্রামটি চালালে আমরা নিচের আউটপুট দেখব, যেটি আমরা চাচ্ছিলাম।
1, 2, 3
1, 3, 2
2, 1, 3
2, 3, 1
3, 1, 2
3, 2, 1
যাক, অবশেষে আমাদের সমস্যার সমাধান হলো। তবে আমরা কিন্তু আরও সহজেই সমাধান করতে পারতাম এভাবে–
#include <stdio.h>
int main()
{
int a, b, c;
for (a = 1; a <= 3; a++) {
for (b = 1; b <= 3; b++) {
for (c = 1; c <= 3; c++) {
if(b != a && c != a && c != b) {
printf ("%d, %d, %d\n", a, b, c);
}
}
}
}
return 0;
}
প্রোগ্রাম: ৪.১৪
এখানে আমাদের বেশি চিন্তা করতে হলো না। কেবল প্রিন্ট করার সময় a, b, c তিনটির মান পরস্পরের সমান নয়, সেটি নিশ্চিত করে নিলেই হলো! বুদ্ধিটা ভালোই, তবে এটির চেয়ে আমাদের আগের প্রোগ্রামটি কম্পিউটারকে দিয়ে কম কাজ করায়, তাই চলতেও কম সময় লাগে, বা কম্পিউটারের ভাষায় বললে রান টাইম (run time) কম। আসলে একটি প্রোগ্রাম চলতে কেমন সময় লাগবে সেটি নির্ভর করে মূলত প্রোগ্রামটি মোট কয়টি অ্যাসাইনমেন্ট অপারেশন (assignment operation) আর কয়টি কম্পারিজন অপারেশন (comparison operation) করল তার ওপর।
পরের অধ্যায়
পরের অধ্যায়
ভাই ধন্যবাদ! সুন্দর একটা প্রোগামিং সাইট তৈরী করার জন্য। আমার যেটা সমস্যা আশা রাখি আপনার মাধ্যমে আমার সমস্যার সমাধান হবে । আমি for loop এর ক্ষেত্রে একটু problem face করছি। আশা করি নিচের প্রগাম গুলো একটু বিশ্লেষণ করবেন।।
উত্তরমুছুন#include
void main()
{
int i,j,a[10][20];
for(i=1;i<=4;i++)
{
for(j=1;j<=4;j++)
a[i][j]=0;
}
for(i=1;i<=4;i++)
{
for(j=1;j<=4;j++)
printf("\%d",a[i][j]);
printf("\n");
}
}
#include
void main()
{
int i,j;
for (i=1;i<=8;i++)
{
for(j=1;j<=i;j++)
{
printf("%d",i);
}
printf("\n");
}
}
স্যার, লুপ এ কি আমরা scanf use করতে পারব? সেটা কিভাবে? একটা programme দিয়ে বুঝালে একটু ভাল হয়।।
উত্তরমুছুনযেকোনো কাজই, যা আমরা বারবার করতে চাই (অর্থাৎ পুনরাবৃত্তি করতে চাই), সেটা লুপ ব্যবহার করে করা যাবে। যেমন প্রতিবার দুইটি সংখ্যা ইনপুট নিয়ে তাদের যোগফল প্রিন্ট করা যাবে এভাবে:
উত্তরমুছুনfor(i = 0; i < 10; i++)
{
scanf("%d %d", &num1, &num2);
printf("Summation is %d\n", num1 + num2);
}
Your teaching method is very fine!!!!!!
উত্তরমুছুনআমার প্রোগ্রামটি কেমন হয়েছে?
উত্তরমুছুন#include
int main()
{
int m, n, p ;
printf("Type the multiplier");
scanf("%d", &m);
printf("Type how many times you want to multiply");
scanf("%d", &n);
p = 1;
while(p <= n) {
printf("%d X %d = %d\n", m, p, m*p);
p ++;
}
return 0;
}
ভালো হয়েছে। এগিয়ে যাও।
মুছুনভাইয়া আমি প্রোগ্রামিং-এ একেবারে নতুন। আপনার বইটা পরে একটু-আধটুকু ট্রাই করতেছি। লুপে এসে একটা সমস্যাতে পরে গেলেলাম। ৪.১০ প্রোগ্রামটা শুধুমাত্র যোগ ব্যবহার করে করতে পারছি না। একবার বিয়োগ ব্যবহার করে করতে পারছি, কিন্তু শুধুমাত্র যোগ দিয়ে কিভাবে করব বুজতে পারছি না। একটু যদি হেল্প করতেন বা কিছু hintz দিতেন প্লিজ :) আর ভাইয়া আপনার বইটা অনেক সুন্দর এবং সহজ ভাষায় লিখা। এরকম একটা বই উপহার দেওয়ার জন্য আপনাকে অনেক অনেক ধন্যবাদ।
উত্তরমুছুনএখনই সব পারতে হবে এমন কোনো কথা নেই। এখন না পারলে পরে চেষ্টা করবে। :)
মুছুনহুম ঠিক আছে কিন্তু এইটা রেখে যেতে ইচ্ছা করছে না। যদি কিছু hintz পেতাম...... :)
উত্তরমুছুন#include
উত্তরমুছুনint main()
{
int m, n = 5;
int i;
m = 0;
for(i = 1; i <= 10; i = i + 1) {
m = m + n;
printf("%d X %d = %d\n", n, i, m);
}
return 0;
}
প্রোগ্রাম: ৪.৯
akhane m er maan 5 and arek jaigai m = 0;
r printf("%d X %d = %d\n", n, i, m);
akhane n,i,m ata ki * naki + hoitase aktu details janabem pls via i am new
প্রথমে n-এর মান 5 অ্যাসাইন করা হয়েছে কিন্তু m-এর কোনো মান অ্যাসাইন করা হয় নাই। (int m, n = 5;)
মুছুনপরে m-এর মান 0 অ্যাসাইন করা হয়েছে। (m = 0;)
কিন্তু প্রথমে m-এর মান 5 অ্যাসাইন করা থাকলেও কোনো সমস্যা ছিল না। (যদি লিখতাম int m = 5, n = 5;)
কারণ পরে m-এর মান 0 অ্যাসাইন করা হয়েছে। তুমি নিজে একটা ছোট্ট প্রোগ্রাম লিখে পরীক্ষা করে দেখো।
আর দ্বিতীয় প্রশ্নটা বুঝি নাই। আবার একটু বুঝিয়ে লেখো।
প্রশ্ন করার সময় রোমান হরফে বাংলা না লেখার অনুরোধ রইল। হয় বাংলা অক্ষরে লিখ অথবা পুরো ইংরেজিতে।
আমার মনে হয় দ্বিতীয় প্রশ্নের উত্তর এখানেঃ
মুছুনn,i,m আসলে হিসাব করতে ব্যবহার হচ্ছে না । হিসাব যা করার তা m = m + n; এইখানেই হচ্ছে । n,iএবংm সিরিয়ালি বসালে কম্পিউটার সে অনুযায়ী পর্দায় দেখায় । প্রোগ্রাম ২.৫ এ বলা আছে a,b,sum না লিখে b,a,sum লিখতে ওটা বুঝলে এটা বুঝার কথা ।
#include
উত্তরমুছুনint main()
{
int a,b,c;
for (b=1;b<=20;b=b++) {
a=0;
for (c=1;c<=0;c=c++){
a=a+b;
printf("%d*%d=%d\n", b,c,a);
}
}
return 0;
}
ভাইয়া, আমার ভুল কোথায় হয়েছে বুঝতে পারছি না...
for (c=1;c<=0;c=c++) ... এই লুপটা কি আসলে কোনো কাজ করবে? একটু চিন্তা করে দেখো তো।
মুছুনআমার মনে হয় c++ দিলে আর c= দেওয়ার প্রয়োজন পড়ে না ।
উত্তরমুছুনভাইয়া, আমি ৪.১০ এর পরের সমস্যাটা সমাধান করতে পারছি না, এখন কি আমি ওই সমস্যাটা নিয়ে ভাববো নাকি এগোবো ?
উত্তরমুছুনসামনে আগানোই ভালো হবে।
মুছুন#include
উত্তরমুছুনint main()
{
int a,b,c;
for(a=1; a<=3; a++){
for(b=1; b<=3; b++){
for(c=1; c<=3; c++) {
printf(" %d, %d, %d\n", a, b, c);
}
}
}
return 0;
}
ভাইয়্যা এই প্রোগ্রামে আমার বুঝতে একটু সমস্যা হচ্ছে। সমস্যাটা আপনাকে বিস্তারিত বলি।
প্রোগ্রামটার শুরুতে আমি একটা লুপ নিয়েছে a এর জন্য। এখানে বলেছি a এর মান 1 এবং শর্ত দিয়েছে a<=3 যা a=1 হবার জন্য সত্য। ভাল কথা। তাহলে প্রোগ্রামটি a লুপের ভিতরে ঢুকবে, ঢুকে সে b লুপের দেখা পাবে। সেখানেও একি ভাবে b<=3 পুরন হয়ায় প্রোগ্রাম b এর ভিতরে ঢুকবে। একি ভাবে c লুপের ভেতরে ঢুকে সত্য শর্ত দেখে প্রিন্ট করবে 1,1,1। এখানে আমি printf ফাংশানটি ৩ নম্বর অর্থাৎ c লুপের মধ্যে বলেছে। এখন c++ এর জন্য c এর মান এক বেরে যেয়ে 2 হবে এবং আবার a লুপ থেকে কাজ শুরু হবে। এভাবে c লুপে এসে দ্বিতীয়বার c=2 দেখবে, প্রিন্ট হবে 1,1,2। একি ভাবে তৃতীয়বার c=3 হবে এবং c<=3 সত্য হবে, c লুপের ভিতরে প্রোগ্রাম ঢুকবে এবং প্রিন্ট করবে 1,1,3। কিন্তু আমরা যেহেতু c লুপে c++ শর্ত দিয়েছে সেহেতু c এর মান এখন 4 হবে। প্রোগ্রাম আবার প্রথম থেকে a,b চেক করে সত্য পাবে কিন্তু c তে এসে দেখবে মিথ্যা করন c=4 এর জন্য c<=3 অবশ্যই মিথ্যা। তাহলে c লুপের ভিতরের কাজ আর প্রোগ্রাম করবে না। এখান থেকেই ফিরত যাবে। ফলে কিছুই প্রিন্ট হবার কথা না কারন c চেক হয় নাই আর আমি c লুপের ভেতরেই বলেছে a,b,c এর মান প্রিন্ট করতে। তাহলে প্রোগ্রামের উচিত ছিল মাত্র তিনটা লাইন প্রিন্ট করা। কিন্তু সে ২৭টা লাইন প্রিন্ট করছে। কেন?
"এখন c++ এর জন্য c এর মান এক বেরে যেয়ে 2 হবে এবং আবার a লুপ থেকে কাজ শুরু হবে।" - এখানে তোমার বোঝার ভুল হচ্ছে। c-এর মান এক বাড়ার পরে c লুপের কাজ আবার হবে, তখন printf ফাংশনটি 1, 1, 2 প্রিন্ট করবে। তারপরে c-এর মান এক বেড়ে 3 হবে এবং c লুপের ভিতরের কাজ আবার হবে (কারণ c <= 3 শর্তটি সত্য) এবং printf ফাংশনটি 1, 1, 3 প্রিন্ট করবে। তারপরে c-এর মান এক বেড়ে 4 হবে আর c <= 3 শর্তটি মিথ্যা হয়ে যাবে। তখন b-এর মান এক বেড়ে 2 হবে আর c লুপটি শুরু হবে (c-এর মান 1)... এভাবে চলবে। আশা করি এখন একটু চিন্তা করলে বুঝতে পারবে। আর বুঝতে যদি এখনও সমস্যা হয় তাহলে আমি একটি ভিডিওর মাধ্যমে বোঝানোর চেষ্টা করব।
মুছুনধন্যবাদ ভাইয়্যা। বুঝতে পেরেছি। এটা ভুল বোঝার জন্যই অনেক কিছু প্যাচ লেগে যাচ্ছিল।
মুছুনআরেকটা সমস্যা আছে।
"আসলে দ্বিতীয় লুপে আমরা b-এর মান a-এর মানের সমান হলে লুপ থেকে বের হয়ে যাচ্ছি। সেই কাজটি করা ঠিক হচ্ছে না। আমাদের উচিত দুটো মান সমান হলে পরবর্তী মানের জন্য চেষ্টা করা।"
"আমাদের উচিত দুটো মান সমান হলে পরবর্তী মানের জন্য চেষ্টা করা।"
কথাটার অর্থ ঠিক বুঝতে পারলাম না। যদি আরেকটু ব্যখ্যা করতেন তাহলে পরিস্কার হত।
আর
for (b = 1; b <= 3 && b != a; b++); আর if( b != a){} এর মধ্যে পার্থক্যটা ধরতে পারছি না।
আমার কাছে একি লাগছে। যেমন প্রথমে b, a এর সমান না হলে লুপ মিথ্যা। তাহলে a+1=2 নিজে কাজ শুরু হবে।
আবার if( b != a) ক্ষেত্রেও b, a এর সমান না হলে পরের কাজ করবে না b+1=2 নিয়ে কাজ করবে। :/
আবার আরেকটা ধারনা আছে।
তাহলে কি আমরা এই বিষয়টা এরাবার জন্য এই কাজটা করেছি যে, b লুপ মিথ্যা হলে a এর মান বেড়ে কাজ শুরু হত। কিন্তু এখন b এর আলাদা শর্তের কারনে সেটা মিথ্যা হলে শুধু b এর মান বেড়ে পরবর্তি কাজ শুরু হবে। a কে নিয়ে ঝামেলা না করে b এর মান বদলে কাজ চালিয়ে যাওয়া। আমার ধারনা কি ঠিক?
"যেমন প্রথমে b, a এর সমান না হলে লুপ মিথ্যা" - এই ধারণাটা কি ঠিক? b <=3 && b != a এই কন্ডিশনের মানে হচ্ছে, b-এর মান 3-এর চেয়ে ছোট বা সমান এবং b-এর মান a-এর মানের সমান না হলে শর্তটা সত্য।
মুছুন*ও দুঃখিত ভাইয়া উল্টা বলে ফেলছি। :(
মুছুন*কম্পারিজন অপারেশন (comparison operation) কি?
a!=b , a<=5 এগুল?
অ্যাসাইনমেন্ট অপারেশন (assignment operation) কি a=1 এগুল?
*৪.১৪'র মধ্যে if একটা।
কিন্তু ৪.১৩'র কাজ বেশি মনে হচ্ছে।মানে if দুইটা। তাহলে কেন ৪.১৪ তে সময় বেশি লাগছে?
কম্পারিজন ও অ্যাসাইনমেন্ট অপারেশন বিষয়ক তোমার ধারণা সঠিক।
মুছুনif-এর সংখ্যা কোনো ব্যাপার না। মোট কাজের পরিমান (মোট অপারেশন) কোনটায় বেশি সেটা হিসাব কর।
#include
উত্তরমুছুনint main()
{
int n,f=2,p,s=0;
printf("your want to start finding primes from:");
scanf("%d",&p);
printf("how many primes you want to find:");
int c1=0,c3=0,c7=0,c9=0;
scanf("%d",&n);
printf("\n\nthe primes are:\n");
while(s<=n-1){
if(p==1){
printf(" 2,");
s++;
}
while(f %dprimes ending with 1\n2=> %dprimes ending with 3\n3=> %dprimes ending with 7\n4=> %dprimes ending with 9",c1,c3,c7,c9);
return 0;
}
লুপ ব্যবহার করে মৌলিক সংখ্যা বের করার ২ টা প্রোগ্রাম লেখলাম। সুবিন ভাইয়া, এই প্রোগ্রামে কালকুলেশন কমানো যায় কীভাবে??
উত্তরমুছুন#include
উত্তরমুছুনmain ()
{ printf ( "তামিম ভাই, ভাই বললাম, কিছু মনে করেননি তো? :D
আমি আর আমার বন্ধু এই ব্লগটা পড়ছি আর শিখার চেষ্টা করছি। এক একটা সমস্যা না মেলার পরে আমাদের অঙ্গভঙ্গি আর এক একটা সমস্যা মেলার আমাদের লাফঝাপ যদি কেউ ভিডিও করে রাখত তাহলে বুঝতেন! :)
কিন্তু ভাইয়া, 'একটু চিন্তা করে দেখো তো।' এই শব্দ কয়টি যে আমাদের জীবনে কি পরিমান প্রভাব রেখেছে আপনি জানেন? এই লাইনটা পড়ার পরে আমার প্রথম চিন্তা ছিল, তাইতো!! কেন আমরা মাথাটাকে খাঁটাই না? আমরা প্রতিদিন কত কিছু যে করি!!! কিন্তু 'বিনামূল্যে' পাওয়া এই 'অমূল্য' সম্পদটিকে কেন যে ব্যবহার করি না... আল্লাহ মালুম।
অনেক ধন্যবাদ ভাই আপনাকে, অনেক অনেক ধন্যবাদ!!!" );
return ;
}
:)
সুবিন ভাই বললে বেশি ভালো হয়। তোমাদের এই অবস্থা শুনে আমারও প্রোগ্রামিং শেখার শুরুর দিনগুলোর কথা মনে পড়ে গেলো। কী মজারই না ছিল প্রোগ্রামিংয়ের শুরুর সেই দিনগুলো।
মুছুনতোমাদের জন্য শুভকামনা।
সুবিন ভাই আমার এই রেজাল্ট টায় "a" এর মান output এ সরাসরি 15 আলস কেন এবং গুন হল কেন ? রেজাল্ট টার Screenshot এর link প্লিজ একটু ডাউনলোড করে দেখেন http://www.mediafire.com/?f5gw88iuli1pb1w
উত্তরমুছুনগুণ হল কারণ তুমি গুণ করেছ, a*b*c। আর আউটপুট মনে হয় পুরাটাই আসছে কিন্তু স্ক্রিনে কেবল শেষ অংশটুকু দেখানো। তুমি স্ক্রল করে উপরে দেখো। আর ফাইলে আউটপুট নিয়ে দেখতে পারো (ভিডিও টিউটেরিয়ালে আছে কিভাবে ফাইলে আউটপুট নিতে হয়)।
মুছুনসরি আমি গুন হল কেন বলতে বুঝিয়েছি প্রথমেই a 15 হয়ে গুন হল কেন।আর উপরে তো আর স্ক্রল করা যাচ্ছে না।এটাই সর্বোচ্চ উপরে।আর প্লিজ একটু লিঙ্কটা দিবেন যেখানে আউটপুট বের করার ভিডিও টিউটেরিয়ালটা পাব।
মুছুনসুবিন ভাই বললেন না যে কই থেকে ফাইল এ আউটপুট নেয়ার ভিডিও টিউটেরিয়াল পাব? Plzz হেল্প করেন।
উত্তরমুছুনএই ওয়েবসাইটের ভিডিও টিউটোরিয়াল অংশে দেখো। freopen
মুছুনভাইয়া ৪.১০ যোগ করার কোড টা কি এমন হতে পারে-আমি তিন দিন চেস্টআ করে এমন সমাধান বের করেছি, জদিও আমার সি এর ধারনা আনেক কম।আমি আপনার বই পরা সুরু করেছি পাঁচ দিন আগে।খুবি ভাল লাগছে এখন পর্যন্ত-
উত্তরমুছুন#include
void main()
{
int i,j,k,m;
for(i=1;i<=10;i++)
{
for(j=1;j<=10;j++)
{
m=0;
m=m+(i*j);
k=m+i;
m=m+i;
k=m-i;
printf("%d*%d=%d\n",i,j,k);
}
}
}
ভাইয়া একটু বলবেন কি এটা হয়েছে নাকি।
Program 4.9
উত্তরমুছুনm=m+n না লিখে printf ফাংশনের ভিতর আমি m এর জায়গায় m+n লিখলাম। কিন্তু কাজ হচ্ছে না। আউটপুট সবগুলো 5 আসতেছে। উত্তর চাই।
m=m+n স্টেটম্যান্ট এক্সিকিউর হওয়ার পরে m এর মান প্রিন্ট করা আর m+n এর মান প্রিন্ট করায় একটা পার্থক্য আছে, যেহেতু কাজটা লুপের মধ্যে বার বার করছ। এখন সমস্যাটা কোথায় সেটা ঠান্ডা মাথায় নিজে চিন্তা করে বের করো। এটা তোমার এসাইনমেন্ট। :)
মুছুন#include
উত্তরমুছুনint main()
{
int a, b, c = 0;
for(a = 1; a <= 20; a = a + 1) {
for(b = 1; b <= 10; b = b + 1) {
c = c + a;
printf("%d * %d = %d \n", a, b, c);
}
c = 0;
}
return 0;
}
Please tell if I'm right.(Problem 4.10 with addition)
Run the program and see the output. Then you will be able to understand if you're right. That's the fun thing about programming. :)
মুছুনc=0; আবার কেন দিতে হল return 0 এর আগে?
মুছুনThanks for encouraging me.
উত্তরমুছুনভাইয়া আমি প্রোগ্রামিং এ নতুন। একটা প্রব্লেম সল্ভ এ দেখলামঃ
উত্তরমুছুনwhile(scanf("%d %d",&a,&b)==2)
এখানে "==২" এইটা কি বুঝায়?
ভাইয়া আপনি যে ৪৩ টা প্রব্লেম সেট করেছেন তার মধ্যে স্ট্রিং নিয়া যেগুলা আছে আমি সেগুলাতে WA খাইছি...। যেমন টেস্ট কেজ যদি ৫ হই এবং প্রতিটাতে একটা লাইন ইনপুট নিলে আমি কোড টা এই ভাবে করেছি।।
উত্তরমুছুনcin>>t;
while(t--)
{
gets(s);
}
তাহলে একটা ইনপুট কম নেই । এর জন্য ইনপুট ফরমেট ক্যামন হবে সি++ এ।
এক্সপেরিমেন্ট করে দেখো কীভাবে করলে AC হবে, অনেকের তো হচ্ছে। :)
মুছুনআমার এটা কি ঠিক আছে?
উত্তরমুছুন#include
int main()
{
int a, b, c, d;
for(a=1 ; a<=4 ; a++){
for(b=1 ; b<=4 ; b++){
for(c=1 ; c<=4 ; c++){
for(d=1 ; d<=4 ; d++){
if(a!=b && b!=c && c!=a && d!=c && d!=b && d!=a){
printf("%d, %d, %d, %d\n", a, b, c, d);
}
}
}
}
}
}
#include
উত্তরমুছুনint main()
{
int a=1, b=1;
while (b<=20) {
while (a<=10) {
printf("%d X %d = %d\n", b ,a , a*b);
a++;
}
b++;
}
return 0;
}
vaia please help. can't find the problem here :'(
#include
উত্তরমুছুনint main()
{
int n, m, i;
m = 0;
for( n = 1; n <= 20; n = n + 1){
for( i = 1; i <= 10; i = i + 1){
m = m + n;
printf("%d X %d = %d\n", n, i, m);
}
}
return 0;
}
vaia where is my problem??
#include
উত্তরমুছুনint main()
{
int a,b,c;
a=8;
b=3;
c= pow(a-b,2);
printf("%d",c);
return 0;
}
Why its result 24 ? please help me.
pow() ফাংশন double type value return করে । So, you should have written "double c;" instead of "int c";
মুছুন#include
int main()
{
int a,b;
a=8;
b=3;
double c=pow(a-b,2);
printf("%lf",c);
return 0;
}
ভাইয়া কেমন হয়েছে?
উত্তরমুছুন#include
int main()
{
int m;
int s;
int l;
printf("type the number that you want to count: ");
scanf("%d", &m);
printf("Please enter a number: ");
scanf("%d", &s);
printf("Please enter a number you want to last: ");
scanf("%d", &l);
while(s <= l){
printf("%d x %d\n",m, s, m*s);
s++;
}
}
#include
উত্তরমুছুনint main()
{
int a, b, c;
int s, p;
for(a =1; a <= 10; a++){
s = 0;
for(b = 1; b <= 10; b++){
s = s+a;
p = 0;
for(c = 1; c <= 10; c++){
p = p+s;
printf("%d x %d x %d = %d\n", a, b, c, p);
}
}
}
}
#include
উত্তরমুছুনint main()
{
int a,i;
for(a=1;a<=20;a++)
{
for(i=1;i<=20;i++)
{
printf("%d + %d = %d\n",a,i,a+i);
}
}
getch();
return 0;
}
আমি যখন a এবং i এর মান সমান দেই তখন প্রোগ্রামটা সমস্যা করে। কিন্তু i এর মান যদি ১০ দেই তাহলে ঠিকমত কাজ করছে।
আমি যখন i এর মান a এর সমান করে দিচ্ছি তখন প্রোগ্রামটা মাঝখান থেকে শুরু হচ্ছে, অনেকটা এরকম,
6+2=8
6+3=9
6+4=10
..........
..........
কিন্তু এর আগের কিছুই দেখাচ্ছে না, i এর মান ১০ এর বেশি দিয়েও একই সমসসার সম্মুখিন হলাম। এর কারনটা কি?
#include
উত্তরমুছুন#include
main()
{
int n, i;
printf("Enter a number(limit 326) : ");
scanf("%d", &n);
for ( i=1; i<=10; i++ )
{
printf(" %d * %d= %d \n", n, i, n*i );
}
}
দেখেন ভাই কেমন হল
For লুপ টা ভাল মত বুঝলামনা........................।
উত্তরমুছুন#include
উত্তরমুছুনmain()
{
int i,j,k;
for(i=1;i<=5;i++)
{
for(j=5-i;j>=0;j--)
{
printf(" ");
}
for (k=1;k<=i;k++)
{
printf("* ");
}
printf("\n");
}
}
এই টা আমি ভালো করে বুঝতে পারলাম না একটু বুঝে দিলে ভালো হয়
I was trying to make a program to find the average of t numbers. The program was running fine using for loop. I took input of 10 numbers but the program printed 9 numbers. please tell me where the problem is?
উত্তরমুছুন#include
উত্তরমুছুন#include
int main()
{
int i,j,n=0;
for(i=1;i<=20;i++){
for(j=1;j<=10;j++){
n+=i;
printf("%dX%d=%d\n",i,j,n);
if(j==10){
n=0;
}
}
}
return 0;
}
সুবিন ভাই ! ৪.১০ যোগের মাধ্যমে করলাম।
ভাইয়া , আমি প্রোগ্রামিং এ নতুন । আমি নেস্টেড লুপে আটকে গিয়েছি। আপনার বুক এবং ভিডিও অনেক বার পড়ছি এবং দেখছি তারপরেও বুঝতে পারছি না। ১ম প্রোগ্রাম টা মোটামুটি বুঝছি কিন্তু ২য় প্রোগ্রাম টা কিভাবে কাজ করছে কোন ভাবেই বুঝতে পারছি না । তো আমি কি সামনে আগাব না এইটা আরো চেস্টা করব ?
উত্তরমুছুন*1st program*
#include
int main ()
{
int a, b;
for (a = 1;a <= 10;a++) {
for (b = 1;b <= 5;b++) {
printf("%d , %d\n", a,b);
}
}
return 0;
}
*2nd program*
#include
int main ()
{
int a, b,c;
for (a = 1;a <= 3;a++) {
for (b = 1;b <= 3;b++) {
for (c = 1;c <= 3;c++) {
printf("%d ,%d, %d\n", a,b,c);
}
}
}
return 0;
}
ভাইয়া, ৪.১০ প্রোগ্রামটি কীভাবে কাজ করল বুঝতে পারলাম না।
উত্তরমুছুন৪.১০ এর সমাধান যোগের মাধ্যমে সমাধান করলাম...
উত্তরমুছুন#include
int main()
{
int n,i,m;
for (n=1;n<=20;n++){
for (i=1;i<=10;i++){
m=m+n;
printf ("%d x %d = %d\n",n,i,m);
if (i==10){
m=0;
}
}
}
return 0;
}
সুবিন ভাই হয়েছি কি?
Sir , I am trying to solve 1 to 5 multiplication table using nested loop (while into while).
উত্তরমুছুনI have written the program following type:
#include
int main()
{
int n=1,i=1;
while(n<=5)
{
n++;
{
while(i<=10)
{
i++;
{
printf("%d x %d =%d\n",n,i,n*i);
}
}
}
return 0;
}
please state the errors in this program. I am learning your programming class with joy.
ভাইয়া ৪.৯ এ m=0 ধরলাম কেন বুঝি নাই
উত্তরমুছুনNice! Thanks.
উত্তরমুছুন"printf("%d\n", n);
উত্তরমুছুনn = n + 1;
এর পরিবর্তে আমরা লিখতে পারি:
printf("%d\n", n++);"
এখানে মনে হয় ++n হবে। n++ দিলে আউটপুট ভুল আসে।
প্রথম printf এর ফাংশনের ভেতরেই n++ লিখতে হবে, দ্বিতীয়টি থেকে না।
মুছুনআমি প্রগ্রামিং এ নতুন
উত্তরমুছুন4.9 সমস্যা তে i incrimation er sathe n er value কি করে বাড়ল বুঝিনি
গুণ না করে কেবল যোগ ব্যবহার করে প্রোগ্রামটি লেখলামঃ
উত্তরমুছুন#include
int main()
{
int n, i,m=0;
for(n = 1; n <= 20; n = n + 1) {
for(i = 1; i <= 10; i = i + 1) {
m=m+n;
printf("%d X %d = %d\n", n, i, m);
}
m=0;
printf("\n");
}
return 0;
}
আমার ও এমন এসেছে।
মুছুনসুবিন ভাইয়া, আপনার ৪.১১ প্রোগ্রামটা যতবারই রান করিয়াছি আউটপুট তো আপনি যেটার কথা বলেছেন তা আসে নি। এসেছে ১,৩,১ ১,৩,২, ১,৩,৩ । খালি a=1 যখন প্রব্লেমটা তখনই হচ্ছে। কিন্তু a=2 যখন,তখন ঠিকই এসেছে। ২,১,১ ২,২,১,২...।। এইভাবে চলেছে। আমি হুবহু কোড করেও একই সমস্যাতে পড়েছি।আর ৪.১২ এর ক্ষেত্রেও সেইম প্রব্লেম।কারণটা বুঝতেছি না।
উত্তরমুছুন#include
int main()
{
int a,b,c;
for(a=1;a<=3;a++){
for(b=1;b<=3;b++){
for(c=1;c<=3;c++){
printf("%d, %d, %d\n",a,b,c);
}
}
}
return 0;
}
এইযে এইটা আমার করা কোড।
ভাইয়া, আপনার বইতে এই অংশটার পর রাকিব ভাই এর দুটো ভিডিও লিংক দেয়া ছিল। কিন্তু এখন ওই লিংকগুলো unavailable আসছে। একটু যদি ভিডিওগুলোর বর্তমান লিংক দিতেন তো অনেক ভালো হতো।
উত্তরমুছুন**
উত্তরমুছুন***
****
*****
******
যদি এভাবে করি তাহলে কিভাবে কোড বসাবো ?
ভাইয়া আমার একটা প্রোগ্রামিং সমস্যা ২ দিন ধরে চেষ্টা করছি কিন্তুু মিলাতে পারছি না।সমস্যাটা এমন যে,আমি ১০ থেকে ১০০০০পর্যন্ত একটা লুপ নিলাম। এর মধ্য থেকে এমন সংখ্যা বের করতে হবে যাকে বা যাদের কে ১-১০ সকল সংখ্যা দ্বারা ভাগ যায়।।এর জন্য কোনো সমাধান দিবেন pls....
উত্তরমুছুন*
উত্তরমুছুন**
***
**
*
How to write code for this?