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

[প্রোগ্রামিং বইঃ অধ্যায় দুই] ডাটা টাইপ, ইনপুট ও আউটপুট।

এ অধ্যায়ে আমরা কিছু ছোট ছোট প্রোগ্রাম লিখব। সবগুলো প্রোগ্রাম অবশ্যই কম্পিউটারে চালিয়ে দেখবে এবং একটু পরিবর্তন করে কম্পাইল ও রান করার চেষ্টা করবে।

আমাদের প্রথম প্রোগ্রামটি হবে দুটি সংখ্যা যোগ করার প্রোগ্রাম। এখন কথা হচ্ছে, সংখ্যাগুলো তো কম্পিউটারের মেমোরিতে রাখতে হবে, সেই জটিল কাজটি কীভাবে করব? চিন্তা নেই! সব প্রোগ্রামিং ল্যাঙ্গুয়েজে ভেরিয়েবল বলে একটি জিনিস আছে যেটি কোন নির্দিষ্ট মান ধারণ করার জন্য ব্যবহার করা হয়। ভেরিয়েবলের একটি নাম দিতে হয়, তারপর ভেরিয়েবল = কোনো মান  লিখে দিলে ভেরিয়েবলের ভেতর সেটি ঢুকে যায়। এটির সঙ্গে গাণিতিক সমীকরণের কিন্তু কোনো সম্পর্ক নেই। চলো, প্রোগ্রামটি লিখে রান করাই, তারপর ব্যাখ্যা করা যাবে।
 #include <stdio.h>  
 int main()  
 {  
     int a;  
     int b;  
     int sum;  
     a = 50;  
     b = 60;  
     sum = a + b;  
     printf("Sum is %d", sum);  
     return 0;  
 }  
 প্রোগ্রাম: ২.১  
প্রোগ্রামটি রান করাও, তুমি স্ক্রিনে দেখবে: Sum is 110।

এখানে a, b, sum তিনটি ভেরিয়েবল (variable) আলাদা সংখ্যা ধারণ করে। প্রথমে আমাদের বলে দিতে হবে যে a, b, sum নামে তিনটি ভেরিয়েবল আছে। এবং এগুলোতে কী ধরনের ডাটা থাকবে সেটিও বলে দিতে হবে। int a; দিয়ে আমরা কম্পাইলারকে বলছি a নামে একটি ভেরিয়েবল এই প্রোগ্রামে আছে যেটি একটি পূর্ণসংখ্যা (integer)-এর মান ধারণ করার জন্য ব্যবহার করা হবে। এই কাজটিকে বলে ভেরিয়েবল ডিক্লারেশন। আর int হচ্ছে ডাটা টাইপ, যেটি দেখে সি-এর কম্পাইলার বুঝবে যে এতে ইন্টিজার টাইপ ডাটা থাকবে। আরও বেশ কিছু ডাটা টাইপ আছে, সেগুলো আমরা আস্তে আস্তে দেখব। আমরা চাইলে একই টাইপের ভেরিয়েবলগুলো ডিক্লেয়ার করার সময় আলাদা লাইনে না লিখে একসঙ্গে কমা দিয়েও লিখতে পারতাম, যেমন: int a, b, sum;। আর লক্ষ করো যে ভেরিয়েবল ডিক্লারেশনের শেষে সেমিকোলন ব্যবহার করতে হয়।

এরপর আমি দুটি স্টেটমেন্ট লিখেছি:
a = 50;
b = 60;
এখানে a-এর মান 50 আর b-এর মান 60 বলে দিলাম (assign করলাম), যতক্ষণ না এটি আমরা পরিবর্তন করছি, কম্পাইলার a-এর মান 50 আর b-এর মান 60 ধরবে।

পরের স্টেটমেন্ট হচ্ছে: sum = a + b;। এতে বোঝায়, sum-এর মান হবে a + b-এর সমান, অর্থাৎ a ও b-এর যোগফল যে সংখ্যাটি হবে সেটি আমরা sum নামের ভেরিয়েবলে রেখে দিলাম (বা assign করলাম)।

এবারে যোগফলটি মনিটরে দেখাতে হবে, তাই আমরা printf ফাংশন ব্যবহার করব।
printf("Sum is %d", sum);

এখানে দেখো printf ফাংশনের ভেতরে দুটি অংশ। প্রথম অংশে "Sum is %d" দিয়ে বোঝানো হয়েছে স্ক্রিনে প্রিন্ট করতে হবে Sum is এবং তার পরে একটি ইন্টিজার ভেরিয়েবলের মান যেটি %d-এর জায়গায় বসবে। তারপর কমা দিয়ে আমরা sum লিখে বুঝিয়ে দিয়েছি যে %d-তে sum-এর মান প্রিন্ট করতে হবে। ইন্টিজারের জন্য যেমন %d ব্যবহার করলাম, অন্য ধরনের ভেরিয়েবলের জন্য অন্য কিছু লিখতে হবে, যেটি আমরা ব্যবহার করতে করতে শিখব। খুব ভালো হতো যদি আমি এখন একটি চার্ট লিখে দিতাম যে সি ল্যাঙ্গুয়েজে কী কী ডাটা টাইপ আছে, সেগুলো কী দিয়ে লেখে এবং প্রিন্ট করার জন্য কী করতে হবে আর তোমরা সেই চার্ট মুখস্থ করে ফেলতে। কিন্তু শুধু শুধু মুখস্থ করার কোনো দরকার নেই, মুখস্থ করার প্রবণতা চিন্তাশক্তি কমায় আর প্রোগ্রামারদের জন্য চিন্তা করার ক্ষমতা খুবই গুরুত্বপূর্ণ।

আমরা ওপরের প্রোগ্রামটি চাইলে এভাবেও লিখতে পারতাম:
 #include <stdio.h>  
 int main()  
 {  
     int a, b, sum;  
     a = 50;  
     b = 60;  
     sum = a + b;  
     printf("Sum is %d", sum);  
     return 0;  
 }  
 প্রোগ্রাম: ২.২  
আবার ভেরিয়েবল ডিক্লেয়ার করার সময় একই সঙ্গে অ্যাসাইনও করা যায়:
 #include <stdio.h>  
 int main()  
 {  
     int a = 50, b = 60, sum;  
     sum = a + b;  
     printf("Sum is %d", sum);  
     return 0;  
 }  
 প্রোগ্রাম: ২.৩  
এখন তোমাদের জন্য একটি প্রশ্ন। নিচের প্রোগ্রামটির আউটপুট কী হবে?
 #include <stdio.h>  
 int main()   
 {  
     int x, y;  
     x = 1;  
     y = x;  
     x = 2;  
     printf("%d", y);  
     return 0;  
 }  
 প্রোগ্রাম: ২.৪  
কী মনে হয়? আউটপুট 1 নাকি 2? আউটপুট হবে 1, কারণ প্রথমে কম্পাইলার দেখবে, x-এর মান 1 অ্যাসাইন করা হয়েছে (x = 1;)। তারপর x-এর মানটি আবার y-এ অ্যাসাইন করা হয়েছে (y = x;)। এখন y-এর মান 1। তারপর আবার x-এর মান 2 অ্যাসাইন করা হয়েছে। কিন্তু তাতে y-এর মানের কোনো পরিবর্তন হবে না। প্রোগ্রামিংয়ে y = x; আসলে কোনো সমীকরণ না যে এটি সবসময় সত্য হবে। '=' চিহ্ন দিয়ে একটি ভেরিয়েবলে নির্দিষ্ট কোনো মান রাখা হয়।

এবারে নিচের প্রোগ্রামটি দেখো:
 #include <stdio.h>  
 int main()  
 {  
     int a = 50, b = 60, sum;  
     sum = a + b;  
     printf("%d + %d = %d", a, b, sum);  
     return 0;  
 }  
 প্রোগ্রাম: ২.৫  
প্রোগ্রামটি মনিটরে কী প্রিন্ট করে? চালিয়ে দেখো। printf("%d + %d = %d", a, b, sum); না লিখে printf("%d + %d = %d", b, a, sum); লিখে প্রোগ্রামটি আবার চালাও। এখন জিনিসটি চিন্তা করে বুঝে নাও।

লেখাপড়া করার সময় আমাদের মনে নানা বিষয়ে নানা প্রশ্ন আসে, যার উত্তর আমরা বইতে খুঁজি, শিক্ষককে জিজ্ঞাসা করি, ইন্টারনেটে খুঁজি বা চিন্তা করে যুক্তি দাঁড় করিয়ে উত্তরটি বের করি। আমাদের দুর্ভাগ্য যে বেশিরভাগ ছেলেমেয়েই শেষ কাজটি করে না, কারণ নিজে নিজে চিন্তা করতে একটু সময় লাগে ও পরিশ্রম হয়, সেই সময় আর শ্রম তারা দিতে চায় না। আর আমাদের অভিভাবক, শিক্ষক ও শিক্ষাব্যবস্থা চিন্তা করার জন্য কোনো পুরস্কার দেয় না, বরং মুখস্থ করার জন্যই পুরস্কৃত করে।

যা-হোক, প্রোগ্রামিংয়ের ব্যাপারে যখনই মনে কোনো প্রশ্ন আসবে, সঙ্গে সঙ্গে একটি প্রোগ্রাম লিখে ফেলবে। দেখো তোমার কম্পাইলার কী বলে। ধরা যাক, আমরা যদি int টাইপের ভেরিয়েবলে দশমিক যুক্ত সংখ্যা (বাস্তব সংখ্যা বা real number) ব্যবহার করতাম, তাহলে কী হতো?
 #include <stdio.h>  
 int main()  
 {  
     int a = 50.45, b = 60, sum;  
     sum = a + b;  
     printf("%d + %d = %d", a, b, sum);  
     return 0;  
 }  
 প্রোগ্রাম: ২.৬  
এখানে a-এর মান 50.45 ব্যবহার করলাম। এবারে প্রোগ্রাম চালাও, দেখো কী হয়। আবার মনে যদি প্রশ্ন আসে যে, main ফাংশনের শেষ লাইনে return 0; না লিখলে কী হয়? তাহলে return 0; ছাড়া প্রোগ্রাম চালিয়ে দেখো কী হয়।

আউটপুট হবে: 50 + 60 = 110।

সি কম্পাইলার a-এর মান 50 ধরেছে, যদিও আমরা 50.45 অ্যাসাইন করেছি। এই ব্যাপারটিকে বলে টাইপ কাস্ট (type cast)। বাস্তব সংখ্যা রাখার জন্য সি ভাষায় double নামের ডাটা টাইপ রয়েছে। টাইপ কাস্ট করে double সংখ্যাটিকে int-এ নেওয়া হয়েছে, এটি অটোমেটিক হয়। আবার কম্পাইলারকে বলেও দেওয়া যায়: int a = (int) 50.45।

int a = 50.99; এখানে a-এর মান হবে 50। int a = -50.9; লিখলে a-এর মান হয় -50। এক কথায় বললে double থেকে int-এ টাইপ কাস্ট করলে দশমিকের পরের অংশটি বাদ পড়ে যাবে।

আরেকটি কথা। যেই ভেরিয়েবলকে টাইপ কাস্ট করা হচ্ছে, তার মান কিন্তু পরিবর্তন হয় না। টাইপ কাস্ট করা মানটি একটি ভেরিয়েবলে রাখা যায়। নিচের প্রোগ্রামটি কম্পিউটারে চালালেই বুঝতে পারবে।
 #include <stdio.h>  
 int main()  
 {  
     int n;  
     double x;  
     x = 10.5;  
     n = (int)x;  
     printf("Value of n is %d\n", n);  
     printf("Value of x is %lf\n", x);  
     return 0;  
 }  
 প্রোগ্রাম: ২.৭  
প্রোগ্রামের আউটপুট দেখো। x-এর মান কিন্তু পরিবর্তন হয়নি। আর বুঝতেই পারছ যে বাস্তব সংখ্যা রাখার জন্য সি-তে যে double টাইপের ভেরিয়েবল ব্যবহার করা হয়, তা প্রিন্ট করার সময় %lf (l এখানে ইংরেজি ছোট হাতের L) ব্যবহার করতে হয়।

int ডাটা টাইপে তো কেবল পূর্ণ সংখ্যা রাখা যায়। কিন্তু সেটি কী যেকোনো পূর্ণসংখ্যা? উত্তরের জন্য একটি প্রোগ্রাম লিখি:
 #include <stdio.h>  
 int main()  
 {  
     int a;  
     a = 1000;  
     printf("Value of a is %d", a);  
     a = -21000;  
     printf("Value of a is %d", a);  
     a = 10000000;  
     printf("Value of a is %d", a);  
     a = -10000000;  
     printf("Value of a is %d", a);  
     a = 100020004000503;  
     printf("Value of a is %d", a);  
     a = -4325987632;  
     printf("Value of a is %d", a);  
     return 0;  
 }  
 প্রোগ্রাম: ২.৮  
এখানে আমরা a-তে বিভিন্ন সংখ্যা অ্যাসাইন করলাম। সব মান কি ঠিকঠাক আসছে? আসেনি। কেন আসেনি সেটি ব্যাখ্যা করার আগে একটি কথা বলে নিই। পরপর এতগুলো printf-এর কারণে তোমার কম্পিউটারের স্ক্রিনে নিশ্চয়ই দেখতে একটু অস্বস্তিকর লাগছে। প্রতিটি printf তোমরা এভাবে লিখতে পারো: printf("Value of a is %d\n", a);। এখন printf ফাংশনে ""-এর ভেতর \n লিখলে কী হয় সেটি আমি বলব না। প্রোগ্রামটি চালালেই বুঝতে পারবে।

a-এর সবগুলো মান কিন্তু ঠিকভাবে দেখা যায়নি, যেসব মান -2147483648 থেকে 2147483647 পর্যন্ত কেবল সেগুলোই ঠিকঠাক প্রিন্ট হবে, কারণ এই রেঞ্জের বাইরের সংখ্যা int টাইপের ভেরিয়েবলে রাখা যায় না। এটি হলো int টাইপের সংখ্যার সীমা। সি-তে int টাইপের ডাটার জন্য মেমোরিতে চার বাইট (byte) জায়গা ব্যবহৃত হয়। চার বাইট মানে বত্রিশ বিট (1 byte = 8 bit)। প্রতি বিটে দুটি জিনিস রাখা যায়, 0 আর 1। দুই বিটে রাখা যায় চারটি সংখ্যা (00, 01, 10, 11)। তাহলে 32 বিটে রাখা যাবে: 2^32 টা সংখ্যা অর্থাৎ 4294967296টি সংখ্যা। এখন অর্ধেক ধনাত্মক আর অর্ধেক ঋণাত্মক যদি রাখি, তাহলে -2147483648 থেকে -1 পর্যন্ত মোট 2147483648 সংখ্যা আবার 0 থেকে 2147483647 পর্যন্ত মোট 2147483648টি সংখ্যা, সর্বমোট 4294967296টি সংখ্যা। আশা করি, হিসাবটা বুঝতে পেরেছ।

এখন আমরা যোগ করার প্রোগ্রামটি লিখব যেটি সব বাস্তব সংখ্যা (real number) যোগ করতে পারবে। তোমাদের মনে করিয়ে দিই, পূর্ণসংখ্যা হচ্ছে, ... -3, -2, -1, 0, 1, 2, 3 ... ইত্যাদি। আর বাস্তব সংখ্যা হচ্ছে -5, -3, -2.43, 0, 0.49, 2.92 ইত্যাদি (সংখ্যারেখার ওপর সব সংখ্যাই কিন্তু বাস্তব সংখ্যা)।
 #include <stdio.h>  
 int main()  
 {  
     double a, b, sum;  
     a = 9.5;  
     b = 8.743;  
     sum = a + b;  
     printf("Sum is: %lf\n", sum);  
     printf("Sum is: %0.2lf\n", sum);  
     return 0;  
 }  
 প্রোগ্রাম: ২.৯  
প্রোগ্রামটি কম্পাইল এবং রান করো। আউটপুট হবে নিচের দুই লাইন:

Sum is: 18.243000
Sum is: 18.24

%lf ব্যবহার করায় প্রথম লাইনে দশমিকের পরে ছয় ঘর পর্যন্ত প্রিন্ট হয়েছে। আবার দ্বিতীয় লাইনে দশমিকের পরে দুই ঘর পর্যন্ত প্রিন্ট হয়েছে, কারণ %0.2lf লিখেছি (তিন ঘর পর্যন্ত প্রিন্ট করতে চাইলে %0.3lf লিখতাম, আবার দশমিক অংশ প্রিন্ট করতে না চাইলে %0.0lf)। double টাইপের ডাটার জন্য 64 বিট ব্যবহৃত হয় এবং 1.7E-308 (1.7 x 10-308) থেকে 1.7E+308 (1.7 x 10308) পর্যন্ত ডাটা রাখা যায়। বিস্তারিত হিসাব বুঝতে হলে কম্পিউটার বিজ্ঞানসংক্রান্ত আরও কিছু জ্ঞানবুদ্ধির দরকার, তাই আমি আর এখন সেদিকে যাচ্ছি না।

এখন আমরা আমাদের প্রোগ্রামে এমন ব্যবস্থা রাখতে চাই, যাতে কোন দুটি সংখ্যা যোগ করতে হবে সেটি আমরা কোডের ভেতর লিখব না, ব্যবহারকারীর কাছ থেকে ইনপুট আকারে জেনে নেব। ব্যবহারকারীর (মানে যে প্রোগ্রামটি ব্যবহার করছে) কাছ থেকে ইনপুট নেওয়ার জন্য আমরা scanf ফাংশন ব্যবহার করব (সি-তে আরও ফাংশন আছে এই কাজের জন্য)। তাহলে দেরি না করে প্রোগ্রাম লিখে ফেলি:
 #include <stdio.h>  
 int main()  
 {  
     int a, b, sum;  
     scanf("%d", &a);  
     scanf("%d", &b);  
     sum = a + b;  
     printf("Sum is: %d\n", sum);  
     return 0;  
 }  
 প্রোগ্রাম: ২.১০  
প্রোগ্রামটি রান করলে দেখবে ফাঁকা স্ক্রিন (blank screen) আসে। তখন তুমি একটি সংখ্যা লিখবে, তারপর স্পেস (space) বা এন্টার (enter) দিয়ে আরেকটি সংখ্যা লিখবে। তারপর আবার এন্টার চাপলে যোগফল দেখতে পাবে।

তোমরা নিশ্চয়ই scanf ফাংশনের ব্যবহার শিখে ফেলেছ। scanf("%d", &a); এখানে ডবল কোটেশনের ভেতরে %d দিয়ে scanf-কে বলে দেওয়া হচ্ছে যে একটি ইন্টিজার বা int টাইপের ভেরিয়েবলের মান পড়তে হবে (ব্যবহারকারী কিবোর্ড থেকে ইনপুট দেবে)। আর দেখো a-এর আগে এমপারসেন্ড (&) চিহ্ন ব্যবহার করা হয়েছে, &a দিয়ে বোঝানো হয়েছে যে সংখ্যাটি ইনপুট দেওয়া হবে সেটি a ভেরিয়েবলের মাঝে অ্যাসাইন হবে। তোমরা যখন সি আরেকটু ভালোভাবে শিখবে, তখন &a-এর প্রকৃত অর্থ বুঝতে পারবে, আপাতত আমরা ব্যবহারের দিকেই মনোযোগ দিই। a এবং b-এর মান একটি scanf ফাংশন দিয়েও নেওয়া যেত এভাবে: scanf("%d %d", &a, &b);। ভেরিয়েবলের আগে & চিহ্ন না দিলে কী সমস্যা? নিচের প্রোগ্রামটি রান করার চেষ্টা করো, কিছু একটি এরর পাবে। এই মুহূর্তে এররটা ব্যাখ্যা করছি না, কারণ ব্যাখ্যাটা একটু জটিল আর এখন বোঝাতে গেলে তোমরা ভুল বুঝতে পারো এবং পরে আমাকে গালমন্দ করবে।
 #include <stdio.h>  
 int main()  
 {  
     int a, b, sum;  
     scanf("%d", &a);  
     scanf("%d", b);  
     sum = a + b;  
     printf("Sum is: %d\n", sum);  
     return 0;  
 }  
 প্রোগ্রাম: ২.১১  
এখন আমরা যদি ইনপুট হিসেবে ইন্টিজার না নিয়ে ডবল টাইপের ডাটা নিতে চাইতাম তাহলে কী করতে হতো? scanf-এ %d-এর বদলে %lf ব্যবহার করলেই চলত। তোমরা প্রোগ্রামটি লিখে ফেলো এবং দেখো ঠিকঠাক রান হয় কি না। তারপরে বাকি অংশ পড়া শুরু করো।

আসলে ঠিকঠাক রান হবে না, কারণ ডাটা টাইপও পরিবর্তন করতে হবে। মানে int না লিখে double লিখতে হবে। প্রোগ্রামটি ঠিক করে আবার চালাও।

বইতে যখনই আমি কোনো প্রোগ্রাম লেখতে বলব সেটি যত সহজ কিংবা কঠিনই মনে হোক না কেন, সেটি কম্পিউটারে লিখে কম্পাইল ও রান করতে হবে। এ কাজ না করে সামনে আগানো যাবে না। মনে রাখবে, গাড়ি চালানো শেখার জন্য যেমন গাড়ি চালানোর কোনো বিকল্প নেই, সাঁতার শেখার জন্য যেমন সাঁতার কাটার বিকল্প নেই, তেমনই প্রোগ্রামিং শেখার জন্য প্রোগ্রামিং করার কোনো বিকল্প নেই, শুধু বই পড়ে প্রোগ্রামার হওয়া যায় না।

এবারে আমরা আরেক ধরনের ডাটা টাইপ দেখব, সেটি হচ্ছে char (character) টাইপ। তো এই character টাইপের চরিত্র হচ্ছে একে মেমোরিতে রাখার জন্য মাত্র এক বাইট জায়গার দরকার হয়। সাধারণত যেকোনো অক্ষর বা চিহ্ন রাখার জন্য এই টাইপের ডাটা ব্যবহার করা হয়। তবে সেই অক্ষরটা ইংরেজি বর্ণমালার অক্ষর হতে হবে, অন্য ভাষার অক্ষর char টাইপের ভেরিয়েবলে রাখা যাবে না। নিচের প্রোগ্রামটি কম্পিউটারে লিখে রান করাও:
 #include <stdio.h>  
 int main()  
 {  
     char ch;  
     printf("Enter the first letter of your name: ");  
     scanf("%c", &ch);  
     printf("The first letter of your name is: %c\n", ch);  
     return 0;  
 }  
 প্রোগ্রাম: ২.১২  
কোড দেখে বুঝতেই পারছ, char টাইপের জন্য printf এবং scanf ফাংশনের ভেতরে %c ব্যবহার করতে হয়। আরেকটি ফাংশন আছে getchar, এটি দিয়েও char টাইপের ডাটা রিড করা যায়। নিচের প্রোগ্রামটি দেখো:
 #include <stdio.h>  
 int main()  
 {  
     char ch;  
     printf("Enter the first letter of your name: ");  
     ch = getchar();  
     printf("The first letter of your name is: %c\n", ch);  
     return 0;  
 }  
 প্রোগ্রাম: ২.১৩  
এটি রান করাও। আগের প্রোগ্রামটির মতো একই কাজ করবে। getchar ফাংশন একটি অক্ষর পড়ে সেটি ch ভেরিয়েবলের ভেতরে অ্যাসাইন করে দিল। আর সরাসরি কোনো কিছু char টাইপ ভেরিয়েবলে রাখতে চাইলে যেই অক্ষর বা চিহ্ন রাখবে তার দুই পাশে সিঙ্গেল কোটেশন চিহ্ন দেবে। যেমন: char c = 'A';

এখন নিচের প্রোগ্রামটি দেখো:
 #include <stdio.h>  
 int main()  
 {  
     int num1, num2;  
     printf("Please enter a number: ");  
     scanf("%d", &num1);  
     printf("Please enter another number: ");  
     scanf("%d", &num2);  
     printf("%d + %d = %d\n", num1, num2, num1+num2);  
     printf("%d - %d = %d\n", num1, num2, num1-num2);  
     printf("%d * %d = %d\n", num1, num2, num1*num2);  
     printf("%d / %d = %d\n", num1, num2, num1/num2);  
     return 0;  
 }  
 প্রোগ্রাম: ২.১৪  
এটি কম্পাইল ও রান করাও। এটি দেখে নিশ্চয়ই বুঝতে পারছ বিয়োগ, গুণ ও ভাগের কাজ কীভাবে করতে হয়। এবারে তোমাদের কাজ হচ্ছে চারটি। এক, num1 ও num2-এর মধ্যেকার যোগ, বিয়োগ, গুণ, ভাগের কাজটি printf ফাংশনের ভেতরে না করে আগে করা এবং মানটি অন্য একটি ভেরিয়েবলে রেখে দেওয়া। এর জন্য একটি প্রোগ্রাম লিখে ফেলো। দ্বিতীয় কাজ হচ্ছে প্রোগ্রামটি ডবল টাইপের ভেরিয়েবল ব্যবহার করে করো। তৃতীয় কাজ হচ্ছে, num2-এর মান 0 দিয়ে দেখো কী হয়। চতুর্থ কাজটি হচ্ছে printf ফাংশনের ভেতরে ডবল কোটেশনের ভেতরে যেই +, -, *, / চিহ্ন আছে সেগুলো সরাসরি ব্যবহার না করে একটি char টাইপ ভেরিয়েবলে রেখে তারপর ব্যবহার করা। চারটি কাজ ঠিকমতো করার পরে নিচের প্রোগ্রামটি দেখো:
 #include <stdio.h>  
 int main()  
 {  
     int num1, num2, value;  
     char sign;  
     printf("Please enter a number: ");  
     scanf("%d", &num1);  
     printf("Please enter another number: ");  
     scanf("%d", &num2);  
     value = num1 + num2;  
     sign = '+';  
     printf("%d %c %d = %d\n", num1, sign, num2, value);  
     value = num1 - num2;  
     sign = '-';  
     printf("%d %c %d = %d\n", num1, sign, num2, value);  
     value = num1 * num2;  
     sign = '*';  
     printf("%d %c %d = %d\n", num1, sign, num2, value);  
     value = num1 / num2;  
     sign = '/';  
     printf("%d %c %d = %d\n", num1, sign, num2, value);  
     return 0;  
 }  
 প্রোগ্রাম: ২.১৫  
প্রোগ্রামটি দেখলেই বুঝতে পারবে কী কাজ করে। তবে শুধু দেখে বুঝলেই হবে না। কোড করে কম্পাইল ও রান করো।

সি ল্যাঙ্গুয়েজে আরও বেশ কিছু ডাটা টাইপ রয়েছে। ইনপুট ও আউটপুটের জন্যও রয়েছে নানা পদ্ধতি, যা তোমরা আস্তে আস্তে শিখবে (সব হয়তো এ বইয়ে থাকবে না, সি-এর অন্য বই পড়লে জানতে পারবে)। আপাতত যা শিখেছ, তা দিয়েই তোমরা অনেক প্রোগ্রাম লিখে ফেলতে পারবে।

এখন একটি মজার এবং দরকারি জিনিস বলে রাখি। প্রোগ্রামের কোডের ভেতরে তুমি নিজের ভাষাও ব্যবহার করতে পারো। এটিকে বলে কমেন্ট (comment) করা। কম্পাইলার কমেন্টগুলোকে প্রোগ্রামের অংশ ধরবে না। এক লাইনের কমেন্ট হলে // চিহ্ন দিয়ে কমেন্ট শুরু করতে পারো। আর একাধিক লাইন থাকলে /* দিয়ে শুরু এবং */ দিয়ে শেষ করতে হবে। নিচের প্রোগ্রামটি কিন্তু ঠিকঠাক কম্পাইল ও রান হবে।
 #include <stdio.h>  
 int main()  
 {  
     // test program - comment 1  
     printf("Hello ");  
     /* We have printed Hello,  
     now we shall print World.  
     Note that this is a multi-line comment */  
     printf("World"); // printed world  
     return 0;  
 }  
 প্রোগ্রাম: ২.১৬  
এবারে একটি প্রশ্ন, (যেটি সি-এর টেক্সট বইয়ে এই চ্যাপ্টারের শুরুতেই বলে দিত), ভেরিয়েবলগুলোর নামকরণের নিয়মকানুন কী? ভেরিয়েবলের নাম এক বা একাধিক অক্ষরের হতে পারে, অক্ষরগুলো হতে পারে a থেকে z, A থেকে Z, 0 থেকে 9 এবং _ (আন্ডারস্কোর বা আন্ডারবার)। তবে একাধিক অক্ষরের ক্ষেত্রে প্রথম অক্ষরটা অঙ্ক (ডিজিট) হতে পারবে না। তুমি একটি প্রোগ্রামে int 7d; লিখে দেখো কম্পাইলার কী বলে। আর ভেরিয়েবলের নামগুলো অর্থপূর্ণ হলে ভালো হয়। যেমন, যোগফল রাখার জন্য ভেরিয়েবলের নাম sum হলেই ভালো, যদিও y নাম দিলেও প্রোগ্রাম চলে। অর্থপূর্ণ নাম দিলে বুঝতে সুবিধা হয়, ভেরিয়েবলটা কী উদ্দেশ্যে ব্যবহার করা হয়েছে।

পরের অধ্যায়

১০৬টি মন্তব্য:

  1. sir, in the program number 2.12, if i want so show 2nd printf as "--- is the first letter of your name" what to do? i try for that but i cant. kindly tell me.

    উত্তরমুছুন
  2. sir, in 2.12/13, we can show only the first latter of name. but can i show the middle or last letter via character? if then, what to write for showing middle letter and for last letter?

    উত্তরমুছুন
  3. I think you want to read the name and determine the last or middle character. Yes, it is possible. Continue reading the book and you will know how to do it. :)

    উত্তরমুছুন
  4. #include
    int main()
    {
    double a, b, sum;
    scanf("%lf", &a);
    scanf("%lf", &b);
    sum = a + b;
    printf("Sum is: %lf\n", sum);
    return 0;
    }
    Though I have written it correctly........I cant compute point using it............like when I input 20.2 & 10.3 it prints 20.2!!!!!why????

    উত্তরমুছুন
    উত্তরগুলি
    1. একদম সঠিকটাই আসতেছে তো।

      মুছুন
    2. কোড লেখা ঠিক আছে, সঠিক উত্তরই তো আসার কথা

      মুছুন
    3. কোড ঠিক আছে। আপনি শুধু লেখেন নাই।

      মুছুন
  5. Subeen bhai, আমি আপনার কাছে কৃতজ্ঞ হয়ে থাকব ।

    উত্তরমুছুন
  6. ভাইয়া প্রোগ্রাম ২.৪ এ আমার মনে হচ্ছে শুধু সিরিয়াল ঠিক রাখা হয়েছে।প্রগ্রামইং এর ক্ষেত্রে সিরিয়াল কি সব সময় ঠিক রাখতে হবে ২.৪ এর মত?

    উত্তরমুছুন
  7. ভাইয়া সমস্যা ২.৯ এ আমি যদি আউটপুট শুধু দশমিক এর আজ্ঞের সংখ্যা পেতে চাই তবে কি
    printf("Sum is: %0.2lf\n", sum);
    ঐ ০.২ এর জাইগায়ে %(int)lf দিলে হবে?

    উত্তরমুছুন
  8. Character এ নাম ইনপুট নেওয়া হলে অউটপুট শুধু 1st character আসতেছে??????full নাম কেন আসে না???

    উত্তরমুছুন
  9. কারণ একটা char ভেরিয়েবল কেবল একটা অক্ষর ধারন করতে পারে। নাম নিয়ে কাজ করতে চাইলে স্ট্রিং অধ্যায়টা পড়তে হবে।

    উত্তরমুছুন
  10. এক, num1 ও num2-এর মধ্যেকার যোগ, বিয়োগ, গুণ, ভাগের কাজটি printf ফাংশনের ভেতরে না করে আগে করা এবং মানটি অন্য একটি ভেরিয়েবলে রেখে দেওয়া।

    printf ফাংশনের ভেতরে না করে আগে করা বলতে কি বুঝানো হচ্চে, ঠিক বুঝতে পারছি না! Pls help me..........

    উত্তরমুছুন
    উত্তরগুলি
    1. ভেতরে বলতে আমি বুঝিয়েছি এমন: printf("%d\n", a+b);
      আর বাইরে মানে আগে a, b যোগ করে যোগফলটি একটি ভেরিয়েবলের মধ্যে রাখতে হবে।

      মুছুন
    2. বিষয়টি একটু জটিল, তবে চেষ্টা করছি, আশা করি পারব।
      ভাইয়া আপনাকে অনেক ধন্যবাদ, আমাকে সাহায্য করার জন্য।

      মুছুন
    3. ভাইয়া যদি কিছু না মনে করেন, তাহলে দয়া করে প্রোগ্রাম টি একটু লেখে দেখাবেন। আমি আসলে বিষয়টা ধরতে পারছি না।
      অনেক কৃতজ্ঞ থাকব...........plsssss

      মুছুন
    4. প্রোগ্রাম তো লিখে দেওয়া যাবে না। এখন না পারলে কয়েক সপ্তাহ পরে আবার চেষ্টা করতে হবে। :)

      মুছুন
  11. what is argument?please explain in bangla.
    what is global variable and local variable?

    উত্তরমুছুন
  12. ভাইজান , আপনার এই অনন্য কাজের জন্য আপনাকে অশেষ ধন্যবাদ ।

    উত্তরমুছুন
  13. after writing the 2.1 program note whenever i click run button the screen shows me "hello world" ....

    but it have to show "sum is 110"

    brother, will u please tell me y its out-put is showing me wrong?

    উত্তরমুছুন
  14. #include
    #include
    int main ()
    {
    printf("It's an excellent post!!!");
    getch ();
    return 0;
    }

    উত্তরমুছুন
  15. Very nice book. I have run all the programme till now successfully. please pray for me.

    উত্তরমুছুন
  16. আমি উইন্ডোজ এক্সপি ব্যাবহার করি।Codeblocks-এ আমি সব প্রোগ্রাম চালাতে পারছি কিন্তু প্রোগ্রাম ২.১০ এবং ২.১১ চালাতে পারছি না।প্রোগ্রাম দুটি কম্পাইল হচ্ছে এবং Build হচ্ছে কিন্তু রান করালে Executing আসে এবং তারপরে কোন কিছু হয় না।আমি অনেক অপেক্ষা করার পরেও কোন কাজ হচ্ছে না।আমি লক্ষ্য করেছি যে,এ দুটি প্রোগ্রাম- এ "&" ব্যাবহার করা হয়েছে।আমার কম্পাইলার শুধু "&" কম্পাইল করতে পারছে না।
    এ বিষয়ে সাহায্য চাচ্ছি।

    উত্তরমুছুন
    উত্তরগুলি
    1. & এর জন্য তো কেনো সমস্যা হওয়ার কথা নয়। প্রোগ্রাম রান করলে একটা স্ক্রিন আসার কথা যেখানে সংখ্যা ইনপুট দিতে হবে। যেমন ২-১০ এ একটি সংখ্যা লিখে এন্টার (enter) চাপতে হবে, এবং তারপর আরেকটি সংখ্যা লিখে এন্টার চাপতে হবে, তাহলে সংখ্যা দুটির যোগফল দেখাবে।

      মুছুন
    2. সমস্যা হওয়ার কথা না কিন্তু আমি পরের প্রোগ্রামগুলো রান করতে পারছি এবং ইনপুট করতে পারছি।প্রোগ্রাম ২.১০ এবং ২.১১-তে একটা স্ক্রীন আসছে কিন্তু তাতে কোন লেখা আসছে না এবং ইনপুট দেয়ার খালি স্থানও আসছে না।এককথায় স্ক্রীন আসছে কিন্তু তাতে কোন কিছু নেই।

      মুছুন
  17. ভাইয়া, ২.১৪ এর ১নম্বর কাজ কি এরকম?


    #include

    int main()
    {
    int number1,number2,sum;
    printf("enter a number: ");
    scanf("%d",&number1);
    printf("enter a number: ");
    scanf("%d",&number2);
    sum=number1+number2;
    printf("%d\n",sum);
    sum=number1-number2;
    printf("%d\n",sum);
    sum=number1*number2;
    printf("%d\n",sum);
    sum=number1/number2;
    printf("%d\n",sum);
    return 0;

    }


    ২নম্বর কাজ কি এরকম?

    #include

    int main()
    {
    double number1,number2,sum;
    printf("enter a number: ");
    scanf("%lf",&number1);
    printf("enter a number: ");
    scanf("%lf",&number2);
    sum=number1+number2;
    printf("%lf\n",sum);
    sum=number1-number2;
    printf("%lf\n",sum);
    sum=number1*number2;
    printf("%lf\n",sum);
    sum=number1/number2;
    printf("%lf\n",sum);
    return 0;

    }


    ৩নম্বর কাজ কি এরকম?

    #include

    int main()
    {
    double number1,number2=0,sum;
    printf("enter a number: ");
    scanf("%lf",&number1);
    sum=number1+number2;
    printf("%lf\n",sum);
    sum=number1-number2;
    printf("%lf\n",sum);
    sum=number1*number2;
    printf("%lf\n",sum);
    sum=number1/number2;
    printf("%lf\n",sum);
    return 0;

    }



    ৪নম্বর কাজ আমি বুঝলাম না??
    দয়া করে একটু তাড়াতাড়ি বলুন।

    উত্তরমুছুন
    উত্তরগুলি
    1. ও, ৪ নম্বর কাজ ("চতুর্থ কাজটি হচ্ছে printf ফাংশনের ভেতরে ডবল কোটেশনের ভেতরে যেই +, -, *, / চিহ্ন আছে সেগুলো সরাসরি ব্যবহার না করে একটি char টাইপ ভেরিয়েবলে রেখে তারপর ব্যবহার করা।") এর মানে হচ্ছে একটি char টাইপ ভেরিয়েবলের মধ্যে যোগ-বিয়োগ-গুণ-ভাগ চিহ্নগুলো রাখা। কারণ '+' চিহ্ন তো একটি অক্ষারই যা char টাইপ ভেরিয়েবলে রাখা যায়। char c = '+';

      মুছুন
    2. ১, ২, ৩ ঠিক আছে কী না সেটি নিজেই চিন্তা করে দেখো। :)

      মুছুন
    3. #include
      int main()

      {
      char a='+',b='-',c='*',d='/';



      int num1,num2;
      printf("enter a number:");
      scanf("%d",&num1);

      printf("enter the another number:");
      scanf("%d",&num2);
      printf("the sum is: %d %c %d=%d\n",num1,a,num2,num1 +num2);
      printf("the substraction is: %d %c %d=%d\n",num1,b,num2,num1-num2);

      printf("the multiplication is: %d %c %d=%d\n",num1,c,num2,num1*num2);

      printf("the division is: %d %c %d= %d\n",num1,d,num2,num1/num2);

      return 0;
      }answer of the 4th task of 2.14......is it right?

      মুছুন
  18. ভাইয়া, আমি এই প্রোগ্রামটি করেছি একই সাথে আপনার উল্লেখিত্ত চারটি প্রশ্নের উত্তর দেওয়ার জন্য । সঠিকভাবে সম্পন্ন করতে পেরেছি কী--??? আমি second brace {} এর ভিতর আলাদা ভাবে করেছি । তাই প্রোগ্রামটি একটু বড় হলেও আমার বুঝতে সহজ হয় । char sn একাধিক বার ব্যবহার করলে second brace {} দিতে হয় । না দিলে error ধরে । কিন্তু কেন--???

    # include

    int main()
    {
    double a, b, value1, value2, value3, value4;
    printf(" You can insert both fractional and integer number\n\n");
    printf("Please, Enter a number: ");
    scanf("%lf", &a);
    printf("Please, Enter another number: ");
    scanf("%lf", &b);

    value1 = a + b;
    value2 = a - b;
    value3 = a * b;
    value4 = a / b;

    char sn = '+';
    printf("\n%0.2lf %c %0.2lf = %0.2lf\n", a, sn, b, value1);
    {
    char sn;
    sn = '-';
    printf("%0.2lf %c %0.2lf = %0.2lf\n", a, sn, b, value2);
    }

    {
    char sn;
    sn = 'x';
    printf("%0.2lf %c %0.2lf = %0.2lf\n", a, sn, b, value3);
    }

    {
    char sn;
    sn = '/';
    printf("%0.2lf %c %0.2lf = %0.2lf\n", a, sn, b, value4);
    }
    getch();
    return 0;
    }

    উত্তরমুছুন
    উত্তরগুলি
    1. # include

      int main()
      {
      double a, b, value1, value2, value3, value4;
      printf(" You can insert both fractional and integer number\n\n");
      printf("Please, Enter a number: ");
      scanf("%lf", &a);
      printf("Please, Enter another number: ");
      scanf("%lf", &b);
      value1=a+b;
      value2=a-b;
      value3=a*b;
      value4=a/b;

      char sn = '+,-,*,/';
      printf("\n%lf %c %lf = %lf\n", a, sn, b, value1);
      printf("%lf %c %lf = %lf\n", a, sn, b, value2);

      printf("%lf %c %lf = %lf\n", a, sn, b, value3);

      printf("%lf %c %lf = %lf\n", a, sn, b, value4);


      return 0;
      }

      মুছুন
  19. char sn তো প্রতিবার ডিক্লেয়ার করার দরকার নাই। একবার ডিক্লেয়ার করবা, তারপরে থেকে যতবার খুশি sn-এ মান অ্যাসাইন করবা। যেমন:

    {
    sn = 'x';
    printf("%0.2lf %c %0.2lf = %0.2lf\n", a, sn, b, value3);
    }

    উত্তরমুছুন
  20. #include
    int main()
    {
    int a;
    int b;
    int sum;
    a = 50;
    b = 60;
    sum = a + b;
    printf("Sum is %d", sum);
    return 0;
    }

    here,sum should be 110.but when I do it,my console is showing that "sum is 4200128". and the worst part is a=50,60 or whatever is this,the sum is always 4200128. can you fix it plz ?? :)

    উত্তরমুছুন
  21. প্রোগ্রাম নাম্বার ২.১০ আর ২.১১ এ একটু ভুল আছে। প্রোগ্রাম নাম্বার ২.১০ টা এরকম হবে।
    #include
    int main()
    {
    int a, b, sum;
    printf("enter number:");
    scanf("%d", &a);
    printf("enter another number:");
    scanf("%d", &b);
    sum = a + b;
    printf("Sum is: %d\n", sum);
    return 0;
    }
    ২.১১ ও এভাবে করতে হবে। :)

    উত্তরমুছুন
  22. প্রোগ্রাম ২.১১ অনুযায়ী যদি একটি পূর্ণসংখ্যা আর একটি দশমিক সংখ্যার যোগ/বিয়োগ/গুণ/ভাগ করতে চাই তাহলে কিভাবে কোড লিখব ?

    উত্তরমুছুন
    উত্তরগুলি
    1. সেটা তুমি নিজে নিজে বের করার চেষ্টা করলেই তো ভালো হয়। :)

      মুছুন
    2. #include
      int main()
      {
      int num1,num2,sum,sub,mul,div;
      printf("Give a number:");
      scanf("%d",&num1);
      printf("Give another number:");
      scanf("%d",&num2);
      sum=num1+num2;
      sub=num1-num2;
      mul=num1*num2;
      div=num1/num2;
      printf("The sum is %d\n",sum);
      printf("The sub is %d\n",sub);
      printf("The mul is %d\n",mul);
      printf("The div is %d\n",div);
      return 0;

      i just done by myself,this is the first one ...........plz cheack tis and say ami ok?

      মুছুন
  23. ভাইয়া ২.১৪ কাজ করেনা। It says " It seems that this file has not been built yet". কিন্তু আমি কিছু মিস করি নাই।

    উত্তরমুছুন
  24. #include
    int main()
    {
    int num1,num2;
    printf("Please enter a number:");
    scanf("%d",&num1);
    printf("Please enter another number:");
    scanf("%d",&num2);
    printf("%d+%d=%d\n,num1,num2,num1+num2");
    printf("%d-%d=%d\n,num1,num2,num1-num2");
    printf("%d*%d=%d\n,num1,num2,num1*num2");
    printf("%d/%d=%d\n,num1,num2,num1/num2");
    return 0;
    }
    ভাইয়া আমি এই প্রোগ্রাম টা রান করার পর এই রেজাল্ট এসেছে:
    Please enter a number:1
    Please enter another number:2
    2293528+2293652=4200782
    ,num1,num2,num1+num22293528-2293652=4200782
    ,num1,num2,num1-num22293528*2293652=4200782
    ,num1,num2,num1*num22293528/2293652=4200782
    ,num1,num2,num1/num2
    Process returned 0 (0x0) execution time : 10.769 s
    Press any key to continue.
    মানে ভাগের রেজাল্ট আসে নি।
    আমার কি ভুল হয়েছে ধরতে পারছি না। দয়া করে একটু সাহায্য করুন ভাইয়া। ধন্যবাদ।

    উত্তরমুছুন
    উত্তরগুলি
    1. You have problem in your printf statement (double quotation is not used in right place). printf("%d+%d=%d\n,num1,num2,num1+num2"); should be written like: printf("%d+%d=%d\n",num1,num2,num1+num2);

      মুছুন
    2. ধন্যবাদ ভাইয়া। তবে আমি শেষ পরযন্ত ভুলটা ধরতে পেরেছিলাম।

      মুছুন
  25. আমি
    #include
    int main()
    {
    double a, b, sum;
    a = 9.5;
    b = 8.743;
    sum = a + b;
    printf("Sum is: %lf\n", sum);
    printf("Sum is: %0.2lf\n", sum);
    return 0;
    }
    প্রোগ্রাম: ২.৯ রান করালে এর আগে যে প্রোগ্রাম রান করানো হয়েছে সেটা প্রিন্ট হয়।
    কিছু করেন।

    উত্তরমুছুন
    উত্তরগুলি
    1. আগে ফাইল তা Build করে তারপর রান করতে হবে

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

    উত্তরমুছুন
  27. আমার উইন্ডোজ ৭ আছে । আর আমি codeblocks-12.11-setup_user.exe এটা ডাউনলোড করেছি । এটাতে কি আমি C প্রোগ্রামিং শিখতে পারবো ?

    উত্তরমুছুন
  28. ভাইয়া। ২.১২ তে কোন ভাবেই দুইবার ch টাইপের ডাটা ইনপুট নিতে পারছি নাহ !!
    প্লিজ হেল্প......

    #include

    int main()
    {
    char ch,ch1 ;
    printf("Entre the first letter of your name:");
    scanf("%c", &ch);
    printf("The first letter of your last name is: %c\n", ch);
    printf("Enter the last letter of your name: \n");
    scanf("%c", &ch1);
    printf("The last letter of your name is: %C\n", ch);
    return 0;
    }

    উত্তরমুছুন
  29. this program is taking only 1 input ! whats wrong ?

    #include
    double main()
    {
    double a, b, sum;
    scanf("%d", &a);
    scanf("%d", &b);
    sum = a + b;
    printf("Sum is: %d\n", sum);
    return 0;
    }

    উত্তরমুছুন
    উত্তরগুলি
    1. double ডাটা টাইপের জন্য %lf ব্যবহার করা লাগবে। আপনি %d ব্যবহার করেছেন।

      মুছুন
  30. sir i have a question:
    all functions are called by main(), but by whom main() is called?

    উত্তরমুছুন
  31. i got a problem in my codeblocks.it show '£' sign instead of 'HASH' sign.what i can do now?would you plz tell me how can i solve it?

    উত্তরমুছুন
  32. স্যার,নিচের প্রোগ্রামটা ঠিকঠাক কাজ করছে না কিন্তু i , j ভেরিয়েবল দুইটা double টাইপের দিলে আবার কাজ করছে কিন্তু আমার কাছে মনে হচ্ছে নিচের প্রোগ্রামএ কোন ভুল নেই.........

    #include
    int main()
    {
    int i,j;
    double ans_1;
    printf ("Enter the number you want to devided :");
    scanf("%d",&i);
    printf ("Enter the number you want to divided by :" );
    scanf("%d",&j);
    {
    ans_1=i/j;
    printf ("ans is %lf",ans_1);
    }

    return 0;

    }

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

    int main()
    {
    char ch='Z';

    printf("the first letter of your name is: &c\n", ch);

    return 0;

    }
    ২.১২ প্রোগ্রামটি scan ছাড়া লিখতে চাচ্ছিলাম। কিন্তু এই কোড কাজ করছে না। এটার সমস্যাটি খুঁজে দেয়া যায়?

    উত্তরমুছুন
    উত্তরগুলি
    1. printf() এর ভেতর % এর জায়গায় & লিখে ফেলেছেন।

      মুছুন
  34. 2.13 প্রোগ্রামে char c='A'; কোনখানে লিখতে হবে? চেষ্টা করছি কিন্তু পারছি না ।

    উত্তরমুছুন
  35. 2.14 এর চতুর্থ সমস‌্যাটা একটু সমাধান করে দিন.....

    উত্তরমুছুন
  36. একটু বুঝিয়ে বলুন...

    পূর্ণসংখ্যা হচ্ছে, ... -3, -2, -1, 0, 1, 2, 3 ... ইত্যাদি। আর বাস্তব সংখ্যা হচ্ছে -5, -3, -2.43, 0, 0.49, 2.92 ইত্যাদি (সংখ্যারেখার ওপর সব সংখ্যাই কিন্তু বাস্তব সংখ্যা)।

    উত্তরমুছুন
  37. "... a-এর সবগুলো মান কিন্তু ঠিকভাবে দেখা যায়নি, যেসব মান -2146473648 থেকে 2147483647 পর্যন্ত কেবল সেগুলোই ঠিকঠাক প্রিন্ট হবে..."

    এই প্যারাগ্রাফে আরও কিছু জায়গায় চোখে পড়ল ব্যাপারটা।

    "... 2^32 টা সংখ্যা অর্থাৎ 4294967296টি সংখ্যা। এখন অর্ধেক ধনাত্মক আর অর্ধেক ঋণাত্মক যদি রাখি, তাহলে -2146473648 থেকে -1 পর্যন্ত মোট 2146473648টি সংখ্যা আবার 0 থেকে 2146473647 পর্যন্ত মোট 2146473648টি সংখ্যা, সর্বমোট 4294967296টি সংখ্যা।।।"

    একটা ব্যাপারে খটকা লাগল:
    2^32 = 4294967296
    যদি 2^32 / 2 = 2147483648 হয় তাহলে তো সংখ্যার রেন্জটা এরকম হওয়ার কথা:
    -2147483648 থেকে 2147483647

    টাইপিং মিসটেক কি? নাকি আমারই বোঝার ভুল হচ্ছে কোথাও?

    উত্তরমুছুন
    উত্তরগুলি
    1. টাইপিং মিসটেক। ধরতে পারার জন্য ধন্যবাদ।

      মুছুন
  38. ধন্যবাদ। আরেকটা জিনিস বুঝতে পারছি না।

    a = -2147483649 হলে আউটপুট আসে 2147483647

    আবার a = 2147483648 হলে আউটপুট আসে -2147483648

    একটু গোলমেলে ঠেকছে ব্যাপারটা। বুঝিয়ে বললে উপকৃত হতাম।

    উত্তরমুছুন
  39. Because after -2147483648, it goes to the maximum value, and after 2147483647 it goes to the minimum value, think it like a cycle. But this behaviour is not defined (it's not guaranteed that it will always work this way).

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

    উত্তরমুছুন
  41. একটা পেজ এ সব গুলা প্রোগ্রাম কি লেখা যায় না। আমি চেষ্টা করেছি তাতে error দেখাছে। এ বেপারে একটু সাহায্য দরকার। মানে আমি hello.c তেই আপ্নের উপরের সব প্রোগ্রাম লিখার যদি চেষ্টা করি তাহলে কি হবে??

    উত্তরমুছুন
  42. ২.৪ প্রোগ্রামটা করলে এরর আসে।
    Redefinition of ‘x’.
    Previous definition of ‘x’ was here.
    আমি ব্যবহার করছি কোড ব্লক ১৩.১২।
    আর এই এররের মানে কী?
    Process terminated with status -1073741510 (1 minute(s), 53 second(s))
    আর আরেকটা কাজ আমি করেছি। এরর দেখাচ্ছে না, কিন্তু এই রেজাল্ট কেন আসছে বুঝতে পারছি না।
    কোড-
    #include
    int main()
    {
    int a=50.25, b=60, sum=a+b;
    printf("%d+%d=%d",a,sum);
    return 0;

    }
    রেজাল্ট-
    ৫০+১১০= ৪২০০৭৩৪।
    কেন?

    উত্তরমুছুন
    উত্তরগুলি
    1. mistake is in that line printf("%d+%d=%d",a,sum);

      that line will be printf("%d+%d=%d",a,b,sum);

      you just forget to include variable b in printf statement

      মুছুন
  43. i cant run the program 2.11.
    what is the meaning of "ch"
    what is the difference between char n getchar?
    thanks vaia from this chapter i have learned many things.

    উত্তরমুছুন
    উত্তরগুলি
    1. 1.You can’t run The program 2.11,cause here “&(ampersand)” has not given.
      like>> scanf(“%d”, b); but it should be scanf(“%d”, &b);
      2.Here “ch” is a variable, you can also use other variable which you want.(It’s not Determined).
      3. instead of “scanf(“%c”, &ch);” you can use getchar(); ,,, It’s mean user have to give input.
      I’m not sure about this Ans of you, I’m also a new learner.

      মুছুন
  44. শুধু সঠিক হয়েছে কিনা ? সেটা জানাবেন ।

    #include

    int main()
    {
    int a, b, add, sub, mul, div;

    printf("input the value of number a = ");
    scanf("%d",&a);

    printf("input the value of number b = ");
    scanf("%d",&b);

    add=a+b;
    sub=a-b;
    mul=a*b;
    div=a/b;

    printf("\nsum of the two numbers is = %d",add);
    printf("\nsubtraction of the two numbers is = %d", sub);
    printf("\nmultiplication of the two numbers is = %d",mul);
    printf("\ndivision of the two numbers is = %d",div);

    return 0;

    }

    উত্তরমুছুন
  45. What is the wrong in this program?
    Why my character type variable 'ch' is not take any input from keyboard?
    please anyone tell me.
    #include

    int main()
    {
    double a, b, sum;
    char ch;

    printf("Enter Your first Number: ");
    scanf("%lf", &a);
    printf("Enter Your second Number: ");
    scanf("%lf", &b);

    printf("Enter Your First letter of ur name: ");
    scanf("%c", &ch);

    sum = a + b;


    printf(" %0.4lf + %0.4lf = %lf\n", a, b, sum);
    printf(" %0.4lf + %0.4lf = %0.2lf", a, b, sum);
    printf("%c", ch);

    return 0;

    }

    উত্তরমুছুন
    উত্তরগুলি
    1. here you have to type like:::

      scanf("%c", &ch);
      scanf("%c", &ch);

      you must type double scanf function .........

      মুছুন
    2. You can do that-
      scanf(" %c", &ch);
      Just giving a space before %c

      মুছুন
  46. ভাইয়া প্রোগ্রাম ২.৭ এ (int) কেন হলো ?
    আমি বোঝাতে চাচ্ছি যে int ব্রাকেটের ভিতর কেন হলো?

    উত্তরমুছুন
  47. int ব্র্যাকেটের মধ্যে দেওয়ার কারন হলঃ
    এটা ডবল টাইপের ডাটাকে পরিবর্তন করে ইন্টেজার টাইপের ডাটায় পরিনত করেছে।
    প্রোগ্রামিং এর ভাষায় একে বলে টাইপ কাস্টিং।
    সুবিন ভাইয়ের বই এ ও এ ব্যাপারে লেখা আছে।
    বইটা ভাল ভাবে পড়েন @Niaz Ahmed

    উত্তরমুছুন
    উত্তরগুলি
    1. (int) হবার কারন হচ্ছে এখানে আমরা শুধু পূর্ণ সংখা নেবো, flatting মান নেবনা, তাই।

      মুছুন
  48. সবাইকে শুভেচ্ছ! কম্পিউটার নিজে কিছু করতে পারে না এ কথা সত্য কিন্তু কমান্ডের উপর ভিত্তি করে কম্পিউটার নতুন কিছু করার দিক নির্দেশনা দেয় নাকি দেয় না? যদি দিক নির্দেশনা দেয় তা হলে কি ভাবে? উদাহরন স্বরুপ কেও জানালে কৃতজ্ঞ থাকব।

    উত্তরমুছুন
  49. প্রোগ্রাম ২.৮ এ - a এর বিভিন্ন মান অ্যাাসাইন করে কম্পাইল করার পর কিছু এরর এবং ওয়ারনিং আসে । যেমন ঃ
    D:\programming---21 error: stray '\255' in program
    D:\programming---21 warning: overflow in imploit constant conversion [-woverflow]
    বিষয় টা ঠিক বুঝতে পারছি না

    উত্তরমুছুন
  50. #include
    int main()
    {
    double num1, num2;
    printf("enter a number : ");
    scanf("%d", num1);
    printf("enter another number : ");
    scanf("%d", &num2);
    printf("%lf + %lf = %lf", num1 , num2, num1 + num2);
    return 0;
    }
    sir ei programme ta ki properly run hbe???

    উত্তরমুছুন
  51. স্যার ২.১৪ এ যে ৪ টা সমস্যা দেয়া হয়েছে তার প্রথমটা কি এমন? আমার প্রোগ্রামটা ঠিকভাবে রান হচ্ছে, কিন্তু আমি কিছুটা সন্দিহান।
    #include

    int main()
    {
    int a, b, sum, min, mul, div;

    printf("Please enter a number: ");
    scanf("%d", &a);
    printf("Please enter a number: ");
    scanf("%d", &b);

    sum = a + b;
    min = a - b;
    mul = a * b;
    div = a / b;

    printf("Sum is: %d\n", sum);
    printf("Min is: %d\n", min);
    printf("Mul is: %d\n", mul);
    printf("Div is: %d\b", div);

    return 0;
    }

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

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

    উত্তরমুছুন
  54. "সি কম্পাইলার a-এর মান 50 ধরেছে, যদিও আমরা 50.45 অ্যাসাইন করেছি। এই ব্যাপারটিকে বলে টাইপ কাস্ট (type cast)। বাস্তব সংখ্যা রাখার জন্য সি ভাষায় double নামের ডাটা টাইপ রয়েছে। টাইপ কাস্ট করে double সংখ্যাটিকে int-এ নেওয়া হয়েছে, এটি অটোমেটিক হয়। আবার কম্পাইলারকে বলেও দেওয়া যায়: int a = (int) 50.45।

    int a = 50.99; এখানে a-এর মান হবে 50। int a = -50.9; লিখলে a-এর মান হয় -50। এক কথায় বললে double থেকে int-এ টাইপ কাস্ট করলে দশমিকের পরের অংশটি বাদ পড়ে যাবে।"
    I didn't understand the above passage!

    উত্তরমুছুন
  55. According to 2.14 program,
    "এক, num1 ও num2-এর মধ্যেকার যোগ, বিয়োগ, গুণ, ভাগের কাজটি printf ফাংশনের ভেতরে না করে আগে করা এবং মানটি অন্য একটি ভেরিয়েবলে রেখে দেওয়া। এর জন্য একটি প্রোগ্রাম লিখে ফেলো।"
    How can I write the above program? I just can't find the way.

    উত্তরমুছুন
  56. 2.14 এর প্রথম কাজ:
    #include
    int main()
    {
    int num1, num2, sum, sub, mul, div;

    printf("Please enter a number: ");
    scanf("%d", &num1);

    printf("Please enter another number: ");
    scanf("%d", &num2);

    sum = num1 + num2;
    printf("%d + %d = %d\n", num1, num2, sum);

    sub = num1 - num2;
    printf("%d - %d = %d\n", num1, num2, sub);

    mul = num1 * num2;
    printf("%d * %d = %d\n", num1, num2, mul);

    div = num1 / num2;
    printf("%d / %d = %d\n", num1, num2, div);

    return 0;
    }
    .
    .
    .
    2.14 এর দ্বিতীয় কাজ:
    #include
    int main()
    {
    double num1, num2, sum, sub, mul, div;

    printf("Please enter a number: ");
    scanf("%lf", &num1);

    printf("Please enter another number: ");
    scanf("%lf", &num2);

    sum = num1 + num2;
    printf("%lf + %lf = %lf\n", num1, num2, sum);

    sub = num1 - num2;
    printf("%lf - %lf = %lf\n", num1, num2, sub);

    mul = num1 * num2;
    printf("%lf * %lf = %lf\n", num1, num2, mul);

    div = num1 / num2;
    printf("%lf / %lf = %lf\n", num1, num2, div);

    return 0;
    }
    .
    .
    .
    2.14 এর তৃতীয় কাজ: এটা কি এরকম হবে?
    #include
    int main()
    {
    double num1, num2, sum, sub, mul, div;

    printf("Please enter a number: ");
    scanf("%lf", &num1);

    num2 = 0;

    sum = num1 + num2;
    printf("%lf + %lf = %lf\n", num1, num2, sum);

    sub = num1 - num2;
    printf("%lf - %lf = %lf\n", num1, num2, sub);

    mul = num1 * num2;
    printf("%lf * %lf = %lf\n", num1, num2, mul);

    div = num1 / num2;
    printf("%lf / %lf = %lf\n", num1, num2, div);

    return 0;
    }
    .
    .
    .
    2.14 এর চতুর্থ কাজ:
    #include
    int main()
    {
    double num1, num2, sum, sub, mul, div;
    char a='+', b='-', c='*', d='/';

    printf("Please enter a number: ");
    scanf("%lf", &num1);

    printf("Please enter another number: ");
    scanf("%lf", &num2);

    sum = num1 + num2;
    printf("%lf %c %lf = %lf\n", num1, a, num2, sum);

    sub = num1 - num2;
    printf("%lf %c %lf = %lf\n", num1, b, num2, sub);

    mul = num1 * num2;
    printf("%lf %c %lf = %lf\n", num1, c, num2, mul);

    div = num1 / num2;
    printf("%lf %c %lf = %lf\n", num1, d, num2, div);

    return 0;
    }
    .
    .
    .
    .
    .
    আমার প্রোগামগুলো কি হয়েছে?

    উত্তরমুছুন
  57. in 2.14 , 4 no problem;

    #include
    int maim()
    {int a,b;
    printf("pleae enter anumber: ");
    scanf("%d",&a);
    printf("please enter another number: ");
    scanf("%d",&b)
    char d='+';
    printf("%d %c %d=%d",a,d,b,a+b);
    return 0;
    }
    compile is correct,but when i run it it shows an error,why?????

    উত্তরমুছুন
  58. warning: overflow in implicit constant conversion [-Woverflow]|
    এটা দেখানোর কারন কি ?

    উত্তরমুছুন
  59. সুবিন ভাই, প্রোগ্রাম ২.৪ এর বর্ণনা অনুযায়ী ভ্যারিয়েবল এর একাধিক মান দেয়া থাকলে কম্পাইলার ১ম মানটি নেবে। তো আমি ঐ প্রোগ্রামটা একটু চেঞ্জ করেছি ----
    #include

    int main()
    {
    int x,y;
    x=1;
    x=2;
    printf("%d",x);
    return 0;
    }
    তাহলে এখানে আউটপুট ২ আসল কেন?

    উত্তরমুছুন

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