.

.

রবিবার, ৬ ডিসেম্বর, ২০১৫

সি প্রোগ্রামিং শিখি (পর্ব ৫)

ডিক্লেয়ারেশন

[বিশেষ কথাঃ আমি এই টিউটোরিয়ালে যত গুলো প্রোগ্রাম বা কোড লিখব সবগুলা নিজে লিখে Run(চালিয়ে) করে দেখবে। তা না হলে আমি শত শত কোড লিখলাম, আর তোমরা চেয়ে চেয়ে দেখলে অথবা কপি পেষ্ট করে কোড গুলা Run(চালিয়ে) না করলে কিন্তু শিখতে পারবা না। তাই প্রোগ্রামিং শিখতে হলে প্র্যাকটিস আর ধৈর্য্যের কোন বিকল্প নেই। আশা করি বুঝতে পারছো আমি কি বলেছি ]
নিচের কোড টি কোডব্লকস এ লিখে রান করাওঃ
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main()
{
       int a;
       int b;
       int sum;
       sum = a+b;
       a = 5;
       b = 15;
       printf("%d", sum);
       return 0;
}
আউটপুট কত আসে?
56
নিচের ছবিতে দেখতে পারোঃ
আমরা ইনপুট দিয়েছি 5 এবং 15 এবং এর যোগফল চাই । তাহলে আউটপুট কত আশার কথা? নিশ্চয়ই 20 ।
কিন্তু আউটপুট তো 56 । এর কারন কি? কিছু বুঝতে পেরেছো?
না বুঝলেও চলবে। এখন বুঝে নাও। কারন হলঃ
প্রথমে কম্পিউটার কে তিনটা ভেরিয়েবল a,b,sum দিয়েছি। এতে কম্পিউটার a,b এবং sum এর জন্য তিনটা ফাকা মেমোরি (এই মেমোরি গুলোতে যেকোন মান থাকে,তবে নির্দিষ্ট নয়। এই মানগুলোকে গারবেজ বলে থাকে) নিয়েছে। এখনো কিন্তু a এবং b এর জন্য কোন মান ইনপুট হিসেবে দেয়া হয়নি। তারমানে এখন a এবং b এর মান গারবেজ সংখ্যা হিসেবে আছে। তারপর sum এর মান a এবং b এর যোগফল বলে দিলাম। কিন্তু আমি তো a আর b এর জন্য কোন মান ই দেই নি, তাহলে যোগ করবে কোন দুই মানের?
বলতে পারবে কোন দুটি মান যোগ হবে?
আশা করি বুঝতে পেরেছো? a এবং b এর গারবেজ মানের যোগ হবে। তারপর আবার দিলামঃ
1
2
a = 5;
b = 15;
কম্পিউটার এই মান গুলোকে a আর b এর মেমোরিতে রাখবে। এবার sum এর মান প্রিন্ট করার পালা।
প্রিন্ট করলাম কিন্তু মান আসলো 56 । কারন আমরা a আর b এর গারবেজ মান যোগ করে sum এ রেখেছি, তারপর আর sum এর মান পরিবর্তন হয়নি a এবং b এর মান 5 এবং 15 দেয়ার পরেও। তাই যখনঃ
1
printf("%d", sum);
দিলাম, sum তাই a আর b এর গারবেজ মানের যোগফল টাই প্রিন্ট করেছে।
আশা করি বুঝতে পেরেছো।
তারমানে Input প্রোগ্রাম প্রসেসিং করার আগেই নিতে হবে।
তাহলে উপরের কোডটি ঠিক করে লিখতে পারবে?
যদি পারো তাহলে করে ফেলো আর যদি ৫ মিনিট চেষ্টা করেও না পারো তাহলে আমার করা কোড টি দেখতে পারোঃ
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main()
{
       int a;
       int b;
       int sum;
       a = 5;
       b = 15;
       sum = a+b;
       printf("%d", sum);
       return 0;
}
উপরের কোড টিকে নিচের মত করেও লিখা যাবেঃ
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main()
{
       int a,b,sum;
       a = 5;
       b = 15;
       sum = a+b;
       printf("%d", sum);
       return 0;
}
একাধিক একই ডাটাটাইপের ভেরিয়ল নিতে চাইলে ডাটা টাইপ একবার লিখে একাধিক ভেরিয়েবল নিতে পারো, তবে এক্ষেত্রে ভেরিয়েবল গুলোর মাঝে কমা দিয়ে আলাদা করে দিতে হবে।
যেমনঃ
1
int a,b,c,d,e,f;
1
double a,b,c,d,sum;
1
char a,b,c,d,e;
1
float a,sum,rahim,karim;
আশা করি বুঝেছো।
এখন নিচের কোড টি লিখো আর রান করাওঃ
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main()
{
       int a,b,sum;
       a = 12.25;
       b = 15.85;
       sum = a+b;
       printf("%d", sum);
       return 0;
}
আউটপুট কি আসে?
27
কিন্তু আমাদের মতে আউটপুট কত আসার কথা?
28.10
তাইনা? এর কারন কি? আমরা এতক্ষন Integer Data Type ব্যবহার করেছি। তাই কম্পিউটার a = 12.25 বলতে 12 এবং b = 15.85 বলতে 15 ই নিবে কারন Integer শুধু মাত্র পুর্নসংখ্যা ই Input হিসেবে নিয়ে থাকে। তাই a = 12.25 দিলেও কম্পিউটার কেবল 12 ই মেমোরিতে সংরক্ষন করে । এভাবে b = 15.85 দিলেও 15 ই মেমোরিতে রাখতে পারে।
তাই ভগ্নাংশ Input নিতে হলে আমাদেরকে float অথবা double ডাটাটাইপ ব্যবহার করতে হবে।
নিচের প্রোগ্রামটি লিখে রান করাওঃ
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main()
{
       float a,b,sum;
       a = 12.25;
       b = 15.85;
       sum = a+b;
       printf("%d", sum);
       return 0;
}
আউটপুট কি এসেছে? নিচের ছবিতে দেখোঃ
আউটপুট কত আসার কথা?
28.10
কিন্তু এসেছে কত?
-1610612736
তার মানে আমি একটা ভুল করেছি?
ভুলটা কি খুজে বের করতে পারবে? কিছুক্ষন চেষ্টা করে দেখতে পারো ভুল টা বের করতে পারো কিনা।

যদি না বের করতে পারো তাহলে নিচের ব্যাখ্যাটা পড়ঃ

আমরা এখানের সবগুলো ভেরিয়াবল নিয়েছি float Data type এর কিন্তু যখন আউটপুট ডিক্লেয়ার করেছি তখন কি করেছি? মানে printf ফাংশনের ভেতরে আমি %d দিয়ে float Data type এর অউতপুট ডিক্লেয়ার করেছি। ভুলটা এখানেই হয়েছে।
গতপর্বেই বলেছি কোন ফাংশনের জন্য কোন ধরনের ডিক্লেয়ারেশন ব্যবহার করতে হয়। তারপর ও আবার দিয়ে দিলাম।
Character হলে "%c"
Integer হলে "%d"
float হলে "%f"
double হলে "%lf"
তাহলে উপরের কোড টি ঠিক করে লিখে রান করাও। নিচে ছবিতে দেখোঃ
আশা করি এই ব্যাপারটি মাথায় রাখবে আর কি বলেছি বুঝতে পেরেছো।
উপরের কোড টাকে নিচের মত করেও লিখতে পারিঃ
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main()
{
       float a,b;
       a = 12.25;
       b = 15.85;
       printf("%f", a+b);
       return 0;
}
উপরের কোড এ দেখো a+b এর মান আলাদা কোন ভেরিয়াবল এ না রেখে printf ফাংশন এর ভেতরে যোগ করে ই আউটপুট দিয়ে দিয়েছি। এতে a আর b এর মান সরাসরি printf ফাংশন এর ভেতরে যোগ করেই প্রিন্ট করে দিবে। আশা করি বুঝতে পেরেছো। আগের কোড গুলোতে Sum ভেরিয়েবল না নিয়ে এভাবে সরাসরি করে দেখতে পারো। যত বেশী কোড প্র্যাকটিস করবে অভিজ্ঞতা তত বেশী বাড়বে। কোড গুলা অবশ্যই নিজে টাইপ করে রান করাবে।

বাসায় প্র্যাকটিস করার জন্য নিচে কিছু কোড দিলামঃ

প্র্যাকটিস কোড ৫.১:
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main()
{
      double a,b,sum;
      a = 12.25;
      b = 15.85;
      sum = a+b;
      printf("%lf\n", sum);
      return 0;
}
প্র্যাকটিস কোড ৫.২:
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main()
{
      double a,b,c,sum;
      a = 12.25;
      b = 15.85;
      c = 10.00;
      sum = a+b-c;
      printf("%lf\n", sum);
      return 0;
}
প্র্যাকটিস কোড ৫.৩:
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main()
{
      int a,b,c,sum;
      a = 12.25;
      b = 15.85;
      c = 10.00;
      sum = a+b-c;
      printf("%d\n", sum);
      return 0;
}
প্র্যাকটিস কোড ৫.৪:
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main()
{
      int a,b,c,sum;
      a = 12;
      b = 15;
      c = 10;
      sum = (a*b)-c;
      printf("%d\n", sum);
      return 0;
}
এখানে যেই কোড গুলো দেয়া আছে, সেগুলোতে ভেরিয়েবল গুলো মান পরিবর্তন করেও প্র্যাকটিস করতে পারো।
সৌজন্যেঃComputer programming LIVE
ধারাবাহিক ভাবে চলতে থাকবে...

পোস্টঃমোঃ মোস্তফা কামাল

M05T4F4

About M05T4F4

Author Description here.. Nulla sagittis convallis. Curabitur consequat. Quisque metus enim, venenatis fermentum, mollis in, porta et, nibh. Duis vulputate elit in elit. Mauris dictum libero id justo.

Subscribe to this Blog via Email :