সি প্রোগ্রাম দিয়ে ম্যাজিক স্কয়ার জেনারেটর

সি প্রোগ্রাম দিয়ে ম্যাজিক স্কয়ার  জেনারেটর

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

180px-Magicsquareexample.svg

                                                                                              ৩×৩ ম্যাজিক স্কয়ার

 

উপরের ছবি অনুসারে ১ম সারির যোগফল (২+৭+৬)=১৫,

২য় সারির যোগফল (৯+৫+১)=১৫

৩য় সারির যোগফল (৪+৩+৮)=১৫

আবার ১ম, ২য়,‌ ৩য় কলামের যোগফল=১৫ এবং কর্ণে অবস্থিত সংখ্যাগুলোর

যোগফল (৬+৫+৪)=১৫ এবং (২+৫+৮)=১৫

 

যেভাবে হাতে কলমে ম্যাজিক স্কয়ার তৈরী করা যায়ঃ

 

ধরা যাক ৩×৩ ম্যাজিক স্কয়ার তৈরি করব । তাহলে প্রথমে ১ বসবে ১ নম্বর সারির মাঝে । ১ এর উপরে ২ বসবে । কিন্তু উপরে আর কোনো সারি নাই। তাই ২ চলে আসবে একবারে ৩ নম্বর সারির শেষে । এরপর ৩, ২ এর উপরে যাবে। কিন্তু উপরে কোন সারি নাই। তাই ৩ তার কলাম বরাবর নিচে যাবে । এক্ষেত্রে ৩ এর স্থান হবে ২ নম্বর সারির শেষ ঘরের পরে। কিন্তু এখানে কোনো ঘর নাই। তাই ৩ এর সর্বশেষ স্থান হবে ২ নম্বর সারির প্রথমে। নিচের চিত্রটি দেখলে ভালোভাবে বোঝা যাবে।

 

Capture

 

এখন ১,২,৩ বসানো হয়ে গেলে ৪ বসবে ৩ এর নিচে । কারন ৩ এর পর ১ জায়গা দখল করে রেখেছে। এরপর আগের নিয়মে  ৫

বসবে ৪ এর উপরে আর ৬ বসবে ৫ এর উপরে। তারপর

আগের মতো ৭ বসবে ৬ এর নিচে  যেহেতু ৩ আছেই । এরপর আগের নিয়মে ৮ এবং ৯ বসবে।

 

সি প্রোগ্রামিং করে ম্যাজিক স্কয়ার জেনারেটর তৈরী

 

আমরা এখানে ৩×৩ থেকে ৯×৯ পর্যন্ত ম্যাজিক স্কয়ার তৈরী করবো।মাত্রা

অবশ্যই বিজোড় হতে হবে।

 

এখন প্রথমে দুই মাত্রার অ্যারে নিবো । ধরা যাক অ্যারেটি হলো m[n][n]

এখন লুপ ১ থেকে শুরু করে n*n পর্যন্ত চলবে । n=৩ হলে ১ থেকে ৯

পর্যন্ত চলবে ।যেহেতু মোট ঘর n*n অথবা ৯ ।

 

এখন এই লুপ এর মধ্যে ১ থেকে ৯ এর সঠিক স্থান বের করবো ।

সঠিক স্থান বের করার সূত্রটি হলঃ

সারি a এর ক্ষেত্রে

 

a=(n-i%n+1+2*((i-1)/n))%n; . . . . . . . . . . . . . . . . . .(1)

 

কলাম b এর ক্ষেত্রে

 

b=((n-1)/2+i-1-(i-1)/n)%n; . . . . . . . . . . . . . . . . . .(2)

 

 

এখানে n= মাত্রা (ধরা যাক n=৩)

i=লুপ এর সংখ্যা

 

প্রথমে i=1 তাই আমরা (1) ও (2) হতে পাই

a=0

b=1

 

m[a][b]=i

m[0][1]=1

 

এভাবে i=2 হলে

a=0

b=1

 

m[a][b]=i

m[2][2]=2

 

এইরকম ৯ বার লুপ ঘুরা পর্যন্ত ফলাফল হবে

 

m[0][1]=1

m[2][2]=2

m[1][0]=3

m[2][0]=4

m[1][1]=5

m[0][2]=6

m[1][2]=7

m[0][0]=8

m[2][1]=9

 

এরপর দুইটি লুপ একটি (a=0 থেকে n পর্যন্ত) আর একটি

(b=0 থেকে n পর্যন্ত) চালিয়ে প্রিন্ট করলেই ৩×৩ ম্যাজিক স্কয়ার

তৈরী হয়ে যাবে ।

 

সম্পূর্ন কোড

 

#include <stdio.h>

int main()

{

int n,i,a,b;

printf(“Enter Odd Dimension number=”);

scanf(“%d”,&n);

while(1)

{

if((n%2==0||n>=25))

{

printf(“Please Enter The Odd Dimension number (Ex:3 or 5 or 7..):”);

scanf(“%d”,&n);

}

else

break;

}

int m[n][n];

for(i=1;i<=(n*n);i++)

{

a=(n-i%n+1+2*((i-1)/n))%n;

b=((n-1)/2+i-1-(i-1)/n)%n;

m[a][b]=i;

}

for(a=0;a<n;a++)

{

for(b=0;b<n;b++)

{

printf(“%dt”,m[a][b]);

}

printf(“n”);

}

return 0;

}

 

সবাইকে ধন্যবাদ ।

সি প্রোগ্রামিং দিয়ে Date Guesser

সি প্রোগ্রামিং দিয়ে Date Guesser

প্রথমে নিজেকে একটি দিন এর কথা ভেবে রাখতে হবে। এরপর এই প্রোগ্রাম আপনাকে কয়েকটি ধাপ সম্পন্ন করতে বলবে।এরপর আপনার চিন্তা করা দিন বলে দিবে।

প্রোগ্রামটি হলঃ

#include <stdio.h>
int play2(result)
{
char ch;
printf(“nn2 3 6 7n10 11 14 15n18 19 22 23n26 27 30 31n”);
printf(“nIs Your Birthdate in This List?(y/n)n”);
scanf(” %c”,&ch);
if(ch==’y’)
{
result=result+2;
play3(result);

}
else
play3(result);

}
int play3(int result)
{
char ch;
printf(“nn4 5 6 7n12 13 14 15n20 21 22 23n28 29 30 31n”);
printf(“nIs Your Birthdate in This List?(y/n)n”);
scanf(” %c”,&ch);
if(ch==’y’)
{
result=result+4;
play4(result);
}
else
play4(result);
}
int play4(int result)
{
char ch;
printf(“8 9 10 11n12 13 14 15n24 25 26 27n28 29 30 31n”);
printf(“nIs Your Birthdate in This List?(y/n)n”);
scanf(” %c”,&ch);
if(ch==’y’)
{
result=result+8;
play5(result);
}
else
play5(result);

}
int play5(int result)
{
char ch;
printf(“16 17 18 19n20 21 22 23n24 25 26 27n28 29 30 31n”);
printf(“nIs Your Birthdate in This List?(y/n)n”);
scanf(” %c”,&ch);
if(ch==’y’)
{
result=result+16;
}
date(result);
}
int date(int result)
{
int n;
printf(“YOUR BIRTHDATE IS=%dn”,result);
printf(“1. Playn”);
printf(“2. Exitn”);
scanf(“%d”,&n);
while(1)
{
switch(n)
{
case 1:
play1();
break;
case 2:
exit(0);
}
}
}

int play1()
{
int result=0;
char ch;
printf(“nn1 3 5 7n9 11 13 15n17 19 21 23n25 27 29 31n”);
printf(“nIs Your Birthdate in This List?(y/n)n”);
scanf(” %c”,&ch);
if(ch==’y’)
{
result=result+1;
play2(result);
}
else
play2(result);

}
int main()
{
int n;
printf(“1. Playn”);
printf(“2. Exitn”);
scanf(“%d”,&n);
while(1)
{
switch(n)
{
case 1:
play1();
break;
case 2:
exit(0);
}
}
return 0;

}

সি প্রোগ্রাম – বার নির্ণয়ক সফটওয়্যার

সি প্রোগ্রাম – বার নির্ণয়ক সফটওয়্যার

ইনপুট হিসেবে যা নেয়া হবেঃ
১.তারিখ
২.মাস নম্বর
৩.প্রথম দুই ডিজিট সালের
৪.বাকি ডিজিট সালের

আউটপুটঃ
বার এর নাম

ধরা যাক তারিখ নেয়া হল-১২,মাস নম্বর-৮,প্রথম দুই ডিজিট সালের-১৯
বাকি ডিজিট সালের-৯৩,তার মানে ১২-৮-১৯৯৩

এখন কিছু নির্দিষ্ট মাস এর জন্য কিছু নির্দিষ্ট নম্বর আছে। যেমনঃ
জানুয়ারী,অক্টোবর-৫
ফেব্রুয়ারী,মার্চ,নভেম্বর-১
এপ্রিল,জুলাই-৪
মে-৬
জুন-২
আগষ্ট-০
সেপ্টেম্বর,ডিসেম্বর-৩

এখানে প্রথম দুইডিজিটসালের-১৯।১৯কে ৪ দ্বারা ভাগ করলে ভাগশেষ থাকে ৩।আবার বিভিন্ন ভাগশেষ এরজন্য কিছু নির্দিষ্ট নম্বর আছে।নিচে এ র তালিকা দেয়া হলঃ
ভাগশেষ ৩ হলে নম্বর হবে ২
ভাগশেষ ২ হলে নম্বর হবে ৪
ভাগশেষ ১ হলে নম্বর হবে৬
ভাগশেষ ০ হলে নম্বর হবে ১

এখন শেষ দুই ডিজ়িট ৯৩।৯৩ কে ৪ দ্বারা ভাগ করলে ভাগফল থাকে ২৩.২৫।কিন্তূ আমরা এখানে পূর্ণ সংখ্যা নিবো। তাহলে ভাগ ফল হবে ২৩।

এরপর যোগ করুন ৯৩+২৩=১১৬।এখন এই যোগফলের সাথে নিচের মানগুলো
যোগ করুন।তাহলে সূত্র হচ্ছেঃ
তারিখ+মাসের জন্য নির্দিষ্ট নম্বর+ভাগশেষএ র জ়ন্য নির্দিষ্টনম্বর+উপরে প্রাপ্তযোগফল
তাহলে আমাদের ধার্যতারিখ উপরেরসূত্রে বসিয়ে পাই
১২+০+২+১১৬=১৩০
এটি হল মোটযোগফল।এখন মোটযোগফলকে ৭ দ্বারা ভাগ করলে যা ভাগশেষ থাকবে সেইসংখ্যানির্দিষ্ট বারকে নির্দেশকরবে।

ভাগশেষ ০ হলে বার হবে রবিবার
ভাগশেষ ১ হলে বার হবে সোম বার
ভাগশেষ ২ হলে বার হবে মঙ্গলবার
ভাগশেষ ৩ হলে বার হবে বুধবার
ভাগশেষ ৪ হলে বার হবে বৃহস্পতিবার
ভাগশেষ ৫ হলে বার হবে শুক্রবার

এখানে ১৩০/৭= ভাগশেষহয় ৪ যা বৃহস্পতিবারকে নির্দেশ করে।সুতরাং নির্নেয় বার=বৃহস্পতিবার

লক্ষ্যকরুনঃ লিপইয়ার এর ক্ষেত্রে জানুয়ারীর নম্বর ৫ এর বদলে ৪ হবে।

কোডিংঅংশঃ
উপরের লজিক অনুযায়ী সি প্রোগ্রামিং দ্বারা কোডিং করা যাক ।

#include <stdio.h>
#include <conio.h>
int main()
{
int date,month,y,y1,y2,a,b,c,d,re,sum,sum1,re1,tot;
printf(“Instruction: At first give date(ex:17), then give year(ex:2014)nthen type 1st two digit of year(ex:20).Next give last two digit of year(ex:14)nAt last give month number(Ex:5)nn”);

printf(“Enter Date=a”);
scanf(“%d”,&date);
printf(“Enter Year=a”);
scanf(“%d”,&y);

printf(“Enter 1st two digits of Year=a”);
scanf(“%d”,&y1);

printf(“Enter last two digits of Year=a”);
scanf(“%d”,&y2);
printf(“Enter Month Number=a”);
scanf(“%d”,&month);

if(month==1||month==10){
a=5;
if(y%4==0 && y%100!=0||y%400==0){
if(month==1)
a=4; //লিপইয়ারহলেজানুয়ারী=৪ হবে ।
}
}
if(month==2)
a=0;
if(y%4==0 && y%100!=0||y%400==0)
{
if(month==2)
a=0;
}
if(month==3||month==11){
a=1;
}
if(month==4||month==7){
a=4;
sum=(date+a);
}
if(month==5){
a=6;
}
if(month==6){
a=2;
}
if(month==8){
a=0;
}
if(month==9||month==12){
a=3;
}

sum=date+a;

re=(y1%4);
if(re==3){
b=2;
}
if(re==2){
b=4;
}
if(re==1){
b=6;
}
if(re==0){
b=1;
}
c=(y2/4);
d=(y2+c);
sum1=(b+d);
tot=(sum+sum1);
re1=tot%7;
if(re1==0){
printf(“nDay= Sundaya”);
}
if(re1==1){
printf(“nDay= Mondaya”);
}
if(re1==2){
printf(“nDay= Tuesdaya”);
}
if(re1==3){
printf(“nDay= Wednesdaya”);
}
if(re1==4){
printf(“nDay= Thursdaya”);
}
if(re1==5){
printf(“nDay= Fridaya”);
}
if(re1==6){
printf(“nDay= Saturdaya”);
}
getch();
}