সুচিপত্র:

ডিজাইনারের জন্য আকর্ষণীয় প্রোগ্রামিং গাইডেন্স-প্রোগ্রাম প্রসেস কন্ট্রোল- লুপ স্টেটমেন্ট: 8 টি ধাপ
ডিজাইনারের জন্য আকর্ষণীয় প্রোগ্রামিং গাইডেন্স-প্রোগ্রাম প্রসেস কন্ট্রোল- লুপ স্টেটমেন্ট: 8 টি ধাপ

ভিডিও: ডিজাইনারের জন্য আকর্ষণীয় প্রোগ্রামিং গাইডেন্স-প্রোগ্রাম প্রসেস কন্ট্রোল- লুপ স্টেটমেন্ট: 8 টি ধাপ

ভিডিও: ডিজাইনারের জন্য আকর্ষণীয় প্রোগ্রামিং গাইডেন্স-প্রোগ্রাম প্রসেস কন্ট্রোল- লুপ স্টেটমেন্ট: 8 টি ধাপ
ভিডিও: Low Budget Event Decorations. Bangladeshi Event Planner 2024, জুলাই
Anonim
ডিজাইনারের জন্য আকর্ষণীয় প্রোগ্রামিং গাইডেন্স-প্রোগ্রাম প্রসেস কন্ট্রোল- লুপ স্টেটমেন্ট
ডিজাইনারের জন্য আকর্ষণীয় প্রোগ্রামিং গাইডেন্স-প্রোগ্রাম প্রসেস কন্ট্রোল- লুপ স্টেটমেন্ট

প্রোগ্রাম প্রসেস কন্ট্রোল- লুপ স্টেটমেন্ট

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

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

ধাপ 1: লুপের জন্য

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

এখানে এর ব্যাকরণ গঠন:

জন্য (অভিব্যক্তি 1; অভিব্যক্তি 2; অভিব্যক্তি 3) {

লুপ বডি

}

স্পষ্টতই, লুপ বডির মধ্যে বাক্যগুলি যা আমরা বারবার বাস্তবায়নের প্রত্যাশা করেছিলাম। এক্সপ্রেশন 1 লুপ ভেরিয়েবলের প্রথম মান আরম্ভ এবং বরাদ্দ করতে ব্যবহৃত হয়। এক্সপ্রেশন 2 লুপ অবস্থার জন্য। এক্সপ্রেশন 3 লুপ পরিবর্তনশীল মান আপডেট করবে।

লুপ ভেরিয়েবল কি? এটি আসলে একটি স্থানীয় ভেরিয়েবলের সমতুল্য। আসুন একটি সম্পূর্ণ লেখা দেখে নেওয়া যাক।

জন্য (int i = 0; i <10; i ++) {

লুপ বডি

}

লুপ ফাংশন অনুধাবন করার জন্য, স্টেটমেন্টের জন্য মূলত স্থানীয় ভেরিয়েবলের উপর নির্ভর করে, যা লুপ সমাপ্তিতে ব্যবহার করা হবে। উপরের উদাহরণে স্থানীয় পরিবর্তনশীল হল i। এক্সপ্রেশন 1 স্থানীয় ভেরিয়েবলের সূচনা সম্পন্ন করেছে। পরবর্তীতে, প্রতিবার লুপ একবারের জন্য কাজ করলে, এই পরিবর্তনশীলকে অবশ্যই আপডেট করতে হবে। উপরের উদাহরণের মধ্যে, এক্সপ্রেশন 3 এ i ++ আপডেট ফাংশন উপলব্ধি করতে ব্যবহৃত হয়। এটির মাধ্যমে, প্রতিবার আপডেট করার সময় পরিবর্তনশীল 1 বৃদ্ধি পাবে। শেষ পর্যন্ত, লুপ বডির মধ্যে কোড অনির্দিষ্টকালের জন্য লুপ করতে পারে না, অন্যদের পরের বিবৃতিগুলি কার্যকর করা যাবে না। সুতরাং, আমাদের একটি টার্মিনাল অবস্থা প্রয়োজন। এক্সপ্রেস 2 শুধুমাত্র এর জন্য। এখানে, প্রোগ্রামটি 10 এর কম কিনা তা বিচার করবে। যদি তা না হয়, তাহলে লুপ থেকে লাফ দিন।

অতএব, for statement এর অপারেশন সিকোয়েন্স ঠিক এই রকম।

অভিব্যক্তি 1 (স্থানীয় পরিবর্তনশীল সূচনা)

এক্সপ্রেশন 2 (সন্তুষ্ট, তারপর কাজ চালিয়ে যান)

লুপ বডি (প্রথম সঞ্চালন)

এক্সপ্রেশন 3 (আপডেট)

এক্সপ্রেশন 2 (সন্তুষ্ট, তারপর কাজ চালিয়ে যান)

লুপ বডি (দ্বিতীয় সার্কুলেশন)

এক্সপ্রেশন 3 (আপডেট)

এক্সপ্রেশন 2 (সন্তুষ্ট, তারপর কাজ চালিয়ে যান)

লুপ বডি (তৃতীয় সঞ্চালন)…

এক্সপ্রেশন 3 (আপডেট)

এক্সপ্রেশন 2 (সন্তুষ্ট নয়, তারপর লুপ থেকে লাফিয়ে উঠুন)

আপনি মৃত্যুদণ্ডের এই ক্রমটি আপনার মাথায় বেশ কয়েকবার অনুকরণ করতে পারেন। কিন্তু একবারের জন্য আপনার হাতে টাইপ না করে কোডটি সত্যিই বোঝা অসম্ভব। যখন আমরা একটি অদ্ভুত ধারণা বের করতে চাই, তখন আমরা println স্টেটমেন্টের মাধ্যমে কনসোলে মান প্রিন্ট করতে পারি।

কোড উদাহরণ (5-1): অকার্যকর সেটআপ () {

জন্য (int i = 0; i <10; i ++) {

println ("রান");

}

}

আপনি কনসোলে রান আউটপুটের সংখ্যা গণনা করতে পারেন। এখানে, এটি ঠিক 10। এটি আপনাকে বলে যে লুপ বডিতে কোডটি কতবার কার্যকর করা হয়েছে। যাইহোক, আমরা এখনও লুপে আসলে কি পরিবর্তন হয়েছে তা সনাক্ত করতে পারি না। তাই আমরা অক্ষর "রান ভেরিয়েবল" i "তে পরিবর্তন করার চেষ্টা করতে পারি, এবং দেখুন কি হবে।

কোড উদাহরণ (5-2): অকার্যকর সেটআপ () {

জন্য (int i = 0; i <10; i ++) {

println (i);

}

}

এখন, আমরা দেখতে পাচ্ছি লুপ বডিতে i এর মান ক্রমাগত বৃদ্ধি পাচ্ছে। পরবর্তীতে, আমরা লুপের বর্তমান প্রক্রিয়াটি বুঝতে এই মানটি ব্যবহার করতে পারি।

কোড উদাহরণে (5-2), i- এর মান 0 থেকে 9-এ পরিবর্তিত হয় প্রকৃত লুপের সময়ের তুলনায়, এটি সবসময় 1 কম বলে মনে হয়। যদি আপনি এটিতে অভ্যস্ত না হন তবে বিবৃতির জন্য বন্ধনীতে অভিব্যক্তিটি নিম্নলিখিতগুলিতে লেখা যেতে পারে:

জন্য (int i = 1; i <= 10; i ++)

এইভাবে, আমি ন্যায়সঙ্গতভাবে লুপ সময়ের সাথে সামঞ্জস্যপূর্ণ। "<=" এর অর্থ কম এবং সমান। সুতরাং যখন আমি 10 এর সমান, এটি এখনও শর্ত পূরণ করবে। অতএব, এটি i <10 -এ লেখা হওয়ার তুলনায় আরও একবার কাজ করবে, যদিও এটি 1 থেকে শুরু হলেও লুপের সময় এখনও 10। শুরুতে উদাহরণ। পরবর্তীতে আমরা আপনার কাছে ভেক্টর বা অ্যারে প্রবর্তন করব, উভয়ই এর সাবস্ক্রিপ্ট দ্বারা তার উপাদানটি গ্রহণ করে। এবং ডিফল্ট সাবস্ক্রিপ্ট সব 0 থেকে শুরু হয়।

উপরের উদাহরণে, যদি আমরা লিখি i 0 এর বাইরে, পোগ্রাম ক্র্যাশ হবে। কারণ ভেরিয়েবল স্থায়ীভাবে বৃদ্ধি পাচ্ছে, এটি কখনই এই শর্ত পূরণ করবে না। এটি ঠিক যেমন এটি কখনও বন্ধ করা যাবে না যাতে প্রোগ্রামটি অবিরাম লুপে চলে।

For স্টেটমেন্টের স্থানীয় ভেরিয়েবলগুলি কেবল প্লাস্টিকের ধরনই ঘোষণা করতে পারে না, বরং ভাসমান-বিন্দু ধরনের ভেরিয়েবলও ঘোষণা করতে পারে। উদাহরণস্বরূপ, এটি (float i = 0; i <10; i + = 0.02) হিসাবে লেখা যেতে পারে।

ধাপ 2: গাণিতিক সমস্যা সমাধানের জন্য লুপ ব্যবহার করুন

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

1+2+3+4……+97+98+99+100=?

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

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

কোড উদাহরণ (5-3):

অকার্যকর সেটআপ(){

int উত্তর = 0;

জন্য (int i = 1; i <= 100; i ++) {

উত্তর += আমি;

}

println (উত্তর);

}

আমি বিশ্বাস করি আপনি যে ফলাফলটি পেয়েছেন তা গুয়াসের রিপোর্টের সমান: এটি 5050!

টিপস: লুপের জন্য স্থানীয় ভেরিয়েবলের নাম ইচ্ছামত পরিবর্তন করা যেতে পারে এই শর্তে যে এটি ভেরিয়েবল নামকরণের নিয়ম মেনে চলে। আপনি এটি হতে লিখতে পারেন (int k = 1; k <= 100; k ++)। যদি কোন স্পিকাল শর্ত না ঘটে, এটি ডিফল্ট আমি ভেরিয়েবলের নাম হিসাবে।

ধাপ 3: লুপ অঙ্কনের জন্য

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

একটি বৃত্ত অ্যারে আঁকতে লুপের জন্য ব্যবহার করুন

যখন আমরা পুনরাবৃত্ত উপাদানগুলির একটি গ্রুপকে প্রতিনিধিত্ব করার জন্য লুপের জন্য ব্যবহার করতে চাই, তখন আমাদের অবশ্যই এই উপাদানগুলির সংখ্যাসূচক সম্পর্ক নিশ্চিত করতে হবে, তারপর আমরা ব্যাপক পুনরাবৃত্তি কাজ করার পরিবর্তে সুবিধাজনকভাবে তা উপলব্ধি করতে লুপ ব্যবহার করতে পারি। ধরুন আমরা যদি সমানভাবে অনুভূমিক দিকে ছড়িয়ে থাকা বৃত্তের একটি সারি আঁকতে চাই। এর ভার্চুয়াল কোঅর্ডিনেট অপরিবর্তিত আছে এবং এর অনুভূমিক কোঅর্ডিনেট পরিবর্তন করা হয়েছে। এবং বাম থেকে ডানে, অনুভূমিক স্থানাঙ্ক ক্রমাগত বৃদ্ধি পাচ্ছে এবং ক্রমবর্ধমান দূরত্ব একই। এই সময়ে, আমরা প্রতিটি বৃত্তের অনুভূমিক স্থানাঙ্ক পেতে i in for loop ব্যবহার করতে পারি।

কোড উদাহরণ (5-4): অকার্যকর সেটআপ () {

আকার (700, 700);

পটভূমি (83, 51, 194);

noStroke ();

}

অকার্যকর ড্র () {

জন্য (int i = 0; i <7; i ++) {

উপবৃত্ত (50.0 + i * 100.0, উচ্চতা/2.0, 80.0, 80.0);

}

}

50 মানে বাম দিকের প্রথম বৃত্তের শুরুর অবস্থান। 100 * i * 100 ক্রমবর্ধমান দূরত্বের প্রতিনিধিত্ব করে।

ধাপ 4: র্যান্ডম রাউন্ড পয়েন্ট আঁকার জন্য লুপের জন্য ব্যবহার করুন

উপরের গ্রাফিক অবস্থান অনুমানযোগ্য। এতে অনেকের আগ্রহ কমবে। আমরা পূর্ববর্তী অধ্যায়ে উল্লেখ করা র্যান্ডম ফাংশন ব্যবহার করতে পারি এবং এটি অঙ্কন ফাংশনে লেখার চেষ্টা করতে পারি।

কোড উদাহরণ (5-5):

অকার্যকর সেটআপ(){

আকার (700, 700);

পটভূমি (0);

noStroke ();

}

অকার্যকর ড্র () {

পটভূমি (0);

জন্য (int i = 0; i <10; i ++) {

float randomWidth = random (60.0);

ellipse (এলোমেলো (প্রস্থ), এলোমেলো (উচ্চতা), randomWidth, randomWidth);

}

}

এখানে, বৃত্তের অবস্থান ক্রমাগত ঝলকানোর কারণ হল প্রতিটি সময় ফাংশন এলোমেলোভাবে একবার কাজ করার কারণে, ফলাফল এলোমেলো। কারণ ফাংশন ড্র প্রতি সেকেন্ডে 60 ফ্রেম চালানোর জন্য ডিফল্ট, তাই সেকেন্ডে টানা প্রতি 10 টি বৃত্ত 60 বার তার অবস্থান পরিবর্তন করবে। এই দ্রুতগতির ফ্ল্যাশটি ছবিটিকে মাত্র 10 টিরও বেশি চেনাশোনা বলে মনে করে। প্রোগ্রামে একটি সাধারণ মান পরিবর্তন করা আপনাকে সম্পূর্ণ ভিন্ন প্রভাব এনে দেবে। আমরা টার্মিনাল অবস্থা সংশোধন করে লুপের সময় পরিবর্তন করতে পারি। নিচের ছবিতে টার্মিনাল কন্ডিশন হল i <100।

  1. টার্মিনাল অবস্থা যখন আমি <1000:
  2. র্যান্ডমসিড
  3. যদি আমি না চাই যে বৃত্তের অবস্থান এলোমেলোভাবে তার ফ্ল্যাশ হিসাবে উৎপন্ন হয়, আমি কি করতে পারি? একটি পদ্ধতি হল প্রতিটি বৃত্তের জন্য স্বাধীন ভেরিয়েবল তৈরি এবং সংরক্ষণ করা এবং সেটআপের মধ্যে এই ভেরিয়েবলগুলি আরম্ভ করা। এই ভেরিয়েবলগুলিকে একটি এলোমেলো মান নির্ধারণ করুন। সুতরাং, ড্র এর মধ্যে ড্রয়িং ফাংশন ব্যবহার করার সময়, আমরা যা আহ্বান করেছি তা হল ভেরিয়েবলে সংরক্ষিত মান। এটা কোন সময়ে পরিবর্তন হবে না। 10 টি বৃত্ত আঁকতে আমরা কেবল এই পদ্ধতিটি ব্যবহার করতে পারি। কিন্তু যদি আমরা 1000 বৃত্ত বা 10, 000 বৃত্ত আঁকতে চাই? আমরা যদি এই ভেরিয়েবলগুলি তৈরি করতে এবং এটির নামকরণ করতে এই traditionalতিহ্যগত পদ্ধতিটি ব্যবহার করি তবে এটি বেশ ঝামেলার হবে। আমাদের নতুন পরিবর্তনশীল নির্মাণ পদ্ধতি শিখতে হবে না। এখানে একটি নমনীয় পদ্ধতি যা আমাদের এই লক্ষ্য অর্জনে সাহায্য করতে পারে। যে randomSeed ব্যবহার করা হয়। এখন, আসুন ব্যবহার করার পরে এর প্রভাবটি একবার দেখে নেওয়া যাক। কোড উদাহরণ (5-6): [cceN_cpp থিম = "ভোর"] অকার্যকর সেটআপ () {সাইজ (700, 700); পটভূমি (0); noStroke ();}
  4. অকার্যকর ড্র () {

    পটভূমি (0);

    randomSeed (1);

    জন্য (int i = 0; i <10; i ++) {

    float randomWidth = random (20.0, 60.0);

    ellipse (এলোমেলো (প্রস্থ), এলোমেলো (উচ্চতা), randomWidth, randomWidth);

    }

    } [/cceN_cpp]

    আগের কোডের সাথে তুলনা করলে, কেবলমাত্র SeedRandom এর একটি বাক্য দিয়ে 10 থেকে 30 এর বাইরে বৃত্তের ব্যাসার্ধের পরিসর পরিবর্তন করা ছাড়া এটির কোন পরিবর্তন নেই। এই বাক্যটি যুক্ত হওয়ার পরে, গ্রাফিকটি স্থির হয়ে গেছে বলে মনে হচ্ছে।

    বিন্যাস আহ্বান:

    randomSeed (a);

    এই বিন্যাসের মধ্যে, একটি সেটিং হল বীজ। আপনাকে একটি পূর্ণসংখ্যা পূরণ করতে হবে (P5 তে ফ্লোটিং পয়েন্ট ভ্যালু লিখুন, এটি ভুল হবে না তবে এটিকে একটি পূর্ণসংখ্যা হিসাবে বিবেচনা করুন) এটিতে। র্যান্ডমসিডের কাজ হল এলোমেলো মানের জন্য বীজ নির্ধারণ করা। তারপর এটি বিভিন্ন বীজ অনুযায়ী বিভিন্ন এলোমেলো অ্যারে তৈরি করবে। এর পরে, আমরা র্যান্ডম ফাংশনকে আহ্বান করি যাতে রিটার্নের ফলাফল নিশ্চিত হয়। এখানে, নির্দিষ্ট নয় ফলাফলের জন্য একটি নির্দিষ্ট মান কিন্তু উত্পন্ন অ্যারের জন্য। অর্থাত্ প্রত্যাবর্তনের ফলাফল আহ্বানকারী সময়ের সাথে সম্পর্কিত।

    কোড উদাহরণ (5-7): [cceN_cpp থিম = "ভোর"] অকার্যকর সেটআপ () {

    randomSeed (0);

    জন্য (int i = 0; i <5; i ++) {

    println (এলোমেলো (10 %));

    }

    } [/cceN_cpp]

    এখন আমরা একটি পরীক্ষা করতে println ব্যবহার করে চলি। র্যান্ডমসিড ব্যবহার করার পর, আপনি যখনই প্রোগ্রামটি বন্ধ করবেন এবং প্রোগ্রামটি পুনরায় চালু করবেন, এটি একই ফলাফলের একটি স্ট্রিংয়ে ফিরে আসবে। মান একের পর এক ক্রম অনুসারে মিলবে। যদি আপনি এটি মুছে ফেলেন, তবে প্রতিবারই এটি ভিন্ন মূল্যে ফিরে আসবে। কেন এই সেটিং আছে? এর কারণ হল প্রোগ্রামে এলোমেলো মান নিজেই ছদ্ম এলোমেলো। ফলাফল এলোমেলো মনে হয় কিন্তু আসলে এটি একটি নির্দিষ্ট এবং পুনরাবৃত্তিযোগ্য গণনা পদ্ধতি দ্বারা উৎপন্ন হয়। এটি র্যান্ডমসিডের জন্য একটি আদিম মান নির্ধারণের সমতুল্য, তারপর নিম্নলিখিত ফলাফলটি এই বীজ অনুযায়ী গণনা করা হবে। যাইহোক, যদি আমরা বীজ নির্ধারিত না করি, তবে প্রোগ্রামটি বীজের উৎপাদনের জন্য সিস্টেমের বর্তমান সময় ব্যবহার করতে ডিফল্ট হবে। অতএব প্রতিটি অপারেশনের ফলাফল ভিন্ন। নিচের উদাহরণটি আপনাকে র্যান্ডমসিডকে আরও ভালভাবে বুঝতে সাহায্য করতে পারে।

    উদাহরণ কোড (5-8): [cceN_cpp theme = "dawn"] অকার্যকর সেটআপ () {

    আকার (700, 700);

    পটভূমি (0);

    noStroke ();

    }

    অকার্যকর ড্র () {

    randomSeed (1);

    জন্য (int i = 0; i <10; i ++) {

    float randomWidth01 = random (10, 60);

    ellipse (এলোমেলো (প্রস্থ), এলোমেলো (উচ্চতা), randomWidth01, randomWidth01);

    println (randomWidth01);

    }

    randomSeed (1);

    জন্য (int i = 0; i <10; i ++) {

    float randomWidth02 = random (10, 60);

    ellipse (এলোমেলো (প্রস্থ), এলোমেলো (উচ্চতা), randomWidth02, randomWidth02);

    println (randomWidth02);

    }

    } [/cceN_cpp]

    দ্বিতীয় randomSeed (1) কে randomSeed (0) এর সাথে সংশোধন করার চেষ্টা করুন এবং চূড়ান্ত ফলাফলের তুলনা করুন।

    টিপস: P5 এ, আমরা শুধুমাত্র ড্র শেষে ফাংশন noLoop চালু করতে হবে যাতে আমরা একই প্রভাব পেতে পারি। এর কাজ প্রোগ্রাম বন্ধ করা। এটি প্রকৃতির উপরোক্ত কাজের নীতিগুলির থেকে সম্পূর্ণ ভিন্ন।

ধাপ 5: লাইন আঁকার জন্য লুপ ব্যবহার করুন

আমরা র্যান্ডমসিডের ব্যবহার আয়ত্ত করার পরে, আমরা অঙ্কন ফাংশন পরিবর্তন করার চেষ্টা করতে পারি। উদাহরণস্বরূপ, বৃত্ত অঙ্কনকে লাইন অঙ্কনে পরিবর্তন করুন। শুধুমাত্র যদি আমরা লাইনের শেষের দিকে কিছু পরিবর্তনশীল নিয়ম প্রণয়ন করি, আমরা একটি অনন্য প্যাটার্ন তৈরি করতে অনেকগুলি লাইন ব্যবহার করতে পারি।

কোড উদাহরণ (5-9):

[cceN_cpp থিম = "ভোর"] অকার্যকর সেটআপ () {

আকার (700, 700);

পটভূমি (0);

}

অকার্যকর ড্র () {

randomSeed (0);

জন্য (int i = 0; i <2000; i ++) {

ফ্লোট x1 = প্রস্থ/2.0;

ফ্লোট x2 = এলোমেলো (50.0, 650.0);

স্ট্রোক (255, 20);

লাইন (x1, 50, x2, 650);

}

} [/cceN_cpp]

সহজ ব্রাশ তৈরি করুন

আবার লুপের জন্য ফিরে যান। উপরের উদাহরণগুলি ইন্টারেক্টিভ নয়। আমরা যদি ফলাফলকে আরও আকর্ষণীয় করে তুলতে চাই, আমরা আমাদের কোডে mouseX এবং mouseY একত্রিত করতে ভুলতে পারি না।

কোড উদাহরণ (5-10):

[cceN_cpp থিম = "ভোর"] অকার্যকর সেটআপ () {

আকার (700, 700);

পটভূমি (255);

noStroke ();

}

অকার্যকর ড্র () {

জন্য (int i = 0; i <1000; i ++) {

পূরণ করুন (0, 30);

float x = mouseX + random (-50, 50);

float y = mouseY + random (-50, 50);

উপবৃত্ত (x, y, 2, 2);

}

} [/cceN_cpp]

একটি "বিক্ষিপ্ত পয়েন্ট" ব্রাশ তৈরি করা হয়। প্রতিটি নিবিড় মিনি রাউন্ড পয়েন্ট মাউসের অবস্থানের উপর ভিত্তি করে, এটি বাম, ডান, উপরে এবং নীচের চারটি দিক থেকে সীমিত দিক সরাতে পারে। সুতরাং ব্রাশের চূড়ান্ত আকারের বিস্তার একটি বর্গক্ষেত্রের অনুরূপ।

কোড উদাহরণ (5-11):

[cceN_cpp থিম = "ভোর"] অকার্যকর সেটআপ () {

আকার (700, 700);

পটভূমি (255);

noStroke ();

}

অকার্যকর ড্র () {

জন্য (int i = 0; i <1000; i ++) {

ভাসা অনুপাত = mouseX/(float) প্রস্থ;

float x = mouseX + random (-50, 50);

float y = mouseY + random (-50, 50);

পূরণ করুন (0, অনুপাত * 255, 255 * (1 - অনুপাত), 30);

উপবৃত্ত (x, y, 2, 2);

}

}

[/cceN_cpp]

যদি আমরা মাউসএক্সের মান ভরাট রঙকে প্রভাবিত করতে ব্যবহার করি, তাহলে আমরা অনেক বেশি ম্যাজিক কালার গ্রেডিয়েন্ট পাব।

ধাপ 6: লুপ নেস্টেডের জন্য

লুপের জন্য বাসা বাঁধতে পারে। আপনি আবার লুপের জন্য একটি লুপ লিখতে পারেন। যখন আপনি একটি দ্বিমাত্রিক বিন্দু ম্যাট্রিক্স আঁকা প্রয়োজন, আপনি এই পদ্ধতি চয়ন করতে পারেন।

কোড উদাহরণ (5-12):

[cceN_cpp থিম = "ভোর"] অকার্যকর সেটআপ () {

আকার (700, 700, P2D);

পটভূমি (202, 240, 107);

}

অকার্যকর ড্র () {

পূরণ (0);

জন্য (int i = 0; i <5; i ++) {

জন্য (int j = 0; j <5; j ++) {

ফ্লোট x = 150 + i * 100;

ভাসা y = 150 + j * 100;

উপবৃত্ত (x, y, 60, 60);

println (i + ":" + j);

}

}

}

[/cceN_cpp]

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

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

পরামর্শ

দ্বিতীয় স্তরের লুপের জন্য সাধারণত শুরুতে ট্যাবের সাথে ঘনীভূত হয়। এটি কোড কাঠামো আরও স্পষ্ট করতে পারে। আপনাকে বিভিন্ন নামের সাথে লুপের দুটি স্তরে স্থানীয় ভেরিয়েবলের নাম দিতে হবে। এর মধ্যে "i", "j", "k" সবচেয়ে বেশি ব্যবহৃত হয়।

নমনীয় ব্যবহার "i", "j"

"I", "j" এর দুটি পরিবর্তনশীল নাম ফর লুপের দুটি স্তরের স্থানীয় ভেরিয়েবলকে উপস্থাপন করে। নীচের উদাহরণটি "i" "j" এর জন্য আপনার বোঝাপড়া আরও গভীর করবে। "I", "j" এর বিভিন্ন মান অনুযায়ী, আমরা উপাদানগুলিকে গোষ্ঠীভুক্ত করতে প্যারামিটার ইনপুট করতে পারি।

কোড উদাহরণ (5-13): [cceN_cpp থিম = "ভোর"] অকার্যকর সেটআপ () {

আকার (700, 700);

পটভূমি (0);

noStroke ();

}

অকার্যকর ড্র () {

পটভূমি (0);

পূরণ করুন (250, 233, 77);

জন্য (int i = 0; i <7; i ++) {

জন্য (int j = 0; j <7; j ++) {

pushMatrix ();

অনুবাদ করুন (50 + i * 100, 50 + j * 100);

// সেটিং 1

// ভাসমান কোণ = পাপ (মিলিস ()/1000.0) * পিআই/2;

// সেটিং 2

// ভাসা অনুপাত = i/7.0;

// ভাসমান কোণ = পাপ (মিলিস ()/1000.0 + অনুপাত * (পিআই/2)) * পিআই/2;

// সেটিং 3

ভাসা অনুপাত = (i * 7 + j)/49.0;

ভাসমান কোণ = পাপ (মিলিস ()/1000.0 + অনুপাত * (পিআই/2)) * পিআই/2;

ঘোরান (কোণ);

rectMode (কেন্দ্র);

// ছবি আঁকা 1

রেকট (0, 0, 80, 80);

// ছবি আঁকুন 2

// রেকট (0, 0, 100, 20);

// ছবি আঁকা 3

// রেকট (0, 0, অনুপাত * 50);

popMatrix ();

}

}

} [/cceN_cpp]

কোড ব্যাখ্যা

rectMode (CENTER) বর্গের অঙ্কন পদ্ধতি পরিবর্তন করতে পারে। বর্গক্ষেত্রের পূর্ববর্তী দুটি পরামিতি বর্গক্ষেত্রের বাম উপরের কোণের সমন্বয় নির্ধারণ করতে ব্যবহৃত হয়। আমরা এই কমান্ডটি শুরু করার পরে, এই দুটি পরামিতিগুলি বর্গ কেন্দ্র বিন্দুর জন্য স্থানাঙ্ক সেট করতে ব্যবহার করা হবে।কারণ এখানে আমরা ঘোরানোর মাধ্যমে প্যাটার্ন ঘূর্ণন পরিচালনা করি, তাই আমাদের এই পদ্ধতিটি ব্যবহার করতে হবে কেন্দ্র বিন্দুকে স্থানাঙ্কের মূল বিন্দুতে টানতে।

মিলিস () প্রোগ্রাম শুরু থেকে বর্তমান পর্যন্ত সময় অর্জন করে। ইউনিট এমএস। যদি আমরা সরাসরি মিলিস লিখি, পরিবর্তনশীল স্কেল খুব বড়। সুতরাং, আমাদের এটি 1000.0 দ্বারা ভাগ করতে হবে।

কোডের এই বিভাগে, আমরা বিভিন্ন সেটিংস লুকানোর জন্য মন্তব্য চিহ্ন "//" ব্যবহার করি। আপনি শুরু বা বন্ধ করে প্রভাব পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, যদি আমরা "সেটিং 3" এর পিছনে বাক্য শুরু করি, তাহলে কোড ব্লক বন্ধ করতে "সেটিং 1" এবং "সেটিং 2" বন্ধ করার জন্য মন্তব্য চিহ্ন ব্যবহার করতে হবে। বিভিন্ন স্থানীয় ভেরিয়েবলের সাথে এই অনুরূপ প্রোগ্রাম কাঠামোর উদাহরণের জন্য, আমরা এই বিন্যাসে লিখতে পারি। এইভাবে আমাদের বেশ কয়েকটি ইঞ্জিনিয়ারিং ডকুমেন্ট আলাদাভাবে সংরক্ষণ করতে হবে না। আমরা অনুশীলন এবং সৃষ্টির সময় প্রায়ই এই দক্ষতা ব্যবহার করতে পারি এবং কিছু সন্তোষজনক প্যারামিটার সেটিংস সংরক্ষণ করতে পারি।

এর মধ্যে, প্রোগ্রামে i, j মানটির প্রভাব প্রধানত "সেটিং 1 (সেটিং 2) (সেটিং 3)" স্থানান্তরিত করে প্রতিনিধিত্ব করা হয়। আপনি নীচের আউটপুট ফলাফল তুলনা করতে পারেন।

ছবি আঁকুন 1: সেটিং 1

ছবি আঁকুন 1: সেটিং 2

ছবি আঁকুন 1: সেটিং 3

ছবি 2 আঁকুন: সেটিং 1

ছবি 2 আঁকুন: সেটিং 2

ছবি আঁকুন 2: সেটিং 3

1 সেটিং -এ, আমরা প্রতিটি উপাদানের ঘোরানো কোণকে প্রভাবিত করতে i এবং j ব্যবহার করিনি। এভাবে আমরা দেখতে পাচ্ছি প্রতিটি উপাদানের চলাচল একই। সেটিং 2 -এ থাকাকালীন, আমরা i মান এবং i এবং j উভয়ই সেটিং -এ ব্যবহার করেছি। এটি কোণের পর্যায়ক্রমিক পরিবর্তন করেছে। যেহেতু সেটিং 2 এবং সেটিং 3 এর প্রকৃত প্রভাব অ্যানিমেটেড গ্রাফিক্সে এতটা স্পষ্ট নয়, আমরা নিম্নলিখিত স্ক্রিনশট থেকে এটি পর্যবেক্ষণ করতে পারি।

ছবি 2 আঁকুন (বাম: সেটিং 2; ডান: সেটিং 3)

ছবি 3 আঁকুন (বাম: সেটিং 2; ডান: সেটিং 3)

প্রথম ছবিতে, অনুপাতটি বর্গাকার ঘোরানো কোণকে প্রভাবিত করতে ব্যবহৃত হয়। যখন দ্বিতীয় ছবি, এটি সরাসরি বৃত্তের ব্যাসার্ধকে নিয়ন্ত্রণ করতে হয়। আমরা দেখতে পাচ্ছি যে এটি i মান বাক্য ব্যবহার করেছে:

ভাসা অনুপাত = i/7.0;

এর উল্লম্ব উপাদান পরিবর্তন সামঞ্জস্যপূর্ণ। কারণ ছবি নিয়ন্ত্রণের জন্য অনুভূমিক স্থানাঙ্ক শুধুমাত্র i এর মান নির্ভর করে, তাই একই অনুভূমিক স্থানাঙ্ক সহ প্যাটার্মগুলি একই হবে। এবং অনুপাতের মান, ঘোরানো কোণ এবং বৃত্তের ব্যাসার্ধও একই।

একই সময়ে, আমরা i, j বাক্য ব্যবহার করি:

ভাসা অনুপাত = (i * 7 + j)/49.0;

এটি "গ্রেডিয়েন্ট" বর্ণনা করতে পারে। এখানে, একটি গুণককে গুণ করার পদ্ধতির সাথে, এটি সারি এবং কলামের প্রভাবকে একত্রিত করেছে। তাই প্রতিটি উপাদান আলাদা।

ধাপ 7: যখন লুপ

For for loop এর জন্য একটা ভাই আছে। যে যখন লুপ। লুপ কি করতে পারে, যখন লুপ এটা করতে পারে। কিন্তু ক্রিয়েটিভ কোডিং -এর সময় লুপ ব্যবহারের ফ্রিকোয়েন্সি লুপের মতো বেশি নয়।

কোড উদাহরণ (5-14): [cceN_cpp থিম = "ভোর"] অকার্যকর সেটআপ () {

int a = 0;

যখন (একটি <10) {

println (a);

একটি ++;

}

} [/cceN_cpp]

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

ভাবুন:

বিভিন্ন ধরণের ব্রাশ তৈরির জন্য লুপের জন্য অঙ্কন উপাদানগুলি প্রতিস্থাপন করার জন্য সমস্ত ধরণের মৌলিক উপাদান ব্যবহার করার চেষ্টা করুন।

শেষ অধ্যায়ে উল্লিখিত ত্রিকোণমিতিক ফাংশনের সাথে একত্রিত করুন, "বিক্ষিপ্ত পয়েন্ট" ব্রাশটিকে বৃত্তাকার আকৃতির ব্রাশে সংশোধন করার চেষ্টা করুন।

শুধুমাত্র একটি লুপ দিয়ে একটি দ্বিমাত্রিক বিন্দু ম্যাট্রিক্স তৈরি করার চেষ্টা করুন।

পরবর্তী অধ্যায় প্রিভিউ এই কোর্সের সাথে সাথে, আপনি আপনার শেখা প্রতিটি নতুন জ্ঞান পাবেন, খেলার সম্ভাবনা অবিলম্বে অনেক বৃদ্ধি পাবে। প্রোগ্রাম একটি প্যান্ডোরা বক্স। আপনি যা কল্পনা করতে পারেন, এটি আপনার জন্য এটি করতে পারে। সুতরাং আমাদের এই ভাষা না শেখার কোন কারণ নেই যা কম্পিউটারের সাথে যোগাযোগ করতে পারে। আমাদের পরবর্তী অধ্যায়ে, আমরা আপনার কাছে আরেকটি প্রক্রিয়া নিয়ন্ত্রণ বিবৃতি চালু করব। এটি প্রক্রিয়া প্রবাহ নিয়ন্ত্রণ করতে পারে এবং আরও জটিল এবং পরিবর্তনযোগ্য ফলাফল তৈরি করতে পারে। যদি বিবৃতি দিয়ে, আপনি সহজেই আপনার নিজস্ব টেক্সট অ্যাডভেঞ্চার গেম তৈরি করতে পারেন! এই নিবন্ধটি ডিজাইনার ওয়েঞ্জির কাছ থেকে এসেছে আপেক্ষিক পাঠ: ডিজাইনারের জন্য আকর্ষণীয় প্রোগ্রামিং গাইডেন্স-প্রক্রিয়াকরণ প্রাথমিক টাচ ডিজাইনারের জন্য আগ্রহী প্রোগ্রামিং নির্দেশিকা-আপনার প্রথম প্রসেসিং প্রোগ্রাম তৈরি করুন ডিজাইনারের জন্য আগ্রহী প্রোগ্রামিং নির্দেশিকা Yourআপনার ছবি চলমান করুন (প্রথম অংশ) ডিজাইনারের জন্য আকর্ষণীয় প্রোগ্রামিং নির্দেশনা

ধাপ 8: উৎস

এই নিবন্ধটি থেকে:

যদি আপনার কোন প্রশ্ন থাকে, আপনি contact [email protected] এ যোগাযোগ করতে পারেন।

প্রস্তাবিত: