>> [সঙ্গীত বাজাচ্ছি]
ডগ লয়েড: ঠিক আছে.
একটি অদ্ভুত বিষয় ধরনের, ডান?
ম্যাজিক নাম্বার.
তিনি যখন তিনি মানে কি ডো ম্যাজিক সংখ্যার কথা বলছ?
ওয়েল, প্রোগ্রামের কিছু আমরা CS50 মধ্যে লিখিত করেছি
এ পর্যন্ত কিছু অদ্ভুত ছিল সংখ্যার ধরনের তাদের মধ্যে নিহিত.
সম্ভবত কারণে আমরা না সম্পূর্ণরূপে মুহূর্তে বুঝতে.
উদাহরণস্বরূপ, মারিও সমস্যা, আমরা 23 এ পিরামিডের উচ্চতা লাভের.
আমরা স্পষ্টভাবে আপনি বলেন বেশী 23 যেতে পারবেন না.
>> কিন্তু 23 এর অর্থ কী?
ওয়েল, আপনি পড়তে হলে সাবধানে আপনি বৈশিষ্ট
যে দেখা হতে পারে কারণ আমরা 23 এ তা লাভের
প্রমিত উচ্চতা কারণ একটি টার্মিনাল উইন্ডোর 24.
আমরা বাঙালিরা অতিথিপরায়ন যদি তাই হয় পিরামিড যে তুলনায় বেশি লম্বা হতে,
এটা এই অদ্ভুত জিনিস না পারে যেখানে এটা পর্দা বন্ধ চালানো হয়.
আপনি জানেন, কি করে যে অধিকার, প্রেক্ষাপটে মানে?
>> 23 অবিলম্বে সুস্পষ্ট অর্থ কারো সাথে যারা আপনার প্রোগ্রাম এ দেখায়
এবং হয়তো একটি ভিন্ন হয়েছে আকার টার্মিনাল উইন্ডোর?
সম্ভবত না.
এটা ঠিক আছে, ভালো বলে মনে হয়.
ওয়েল, কেন এটা শুধু কম 23 তুলনায়?
সাধারণভাবে, এটা ধরনের একটা বাজে অভ্যাস আসলে
আপনার কোড মধ্যে ধ্রুবক লিখুন.
আপনি আসলে কি যখন, তাই করছেন আপনার কোড মধ্যে একটি ধ্রুবক লিখুন,
এটি ব্যবহার হিসাবে উল্লেখ কখনও কখনও ম্যাজিক সংখ্যা যা কিছু
আমরা সাধারণত চেষ্টা এড়াতে চান.
>> উদাহরণস্বরূপ, এর কটাক্ষপাত করা যাক এখানে এই সহজ ফাংশন এ.
একথাও ঠিক যে কোন তথ্য নেই সি টাইপ কার্ড বা ডেক বলা.
তাই শুধু আমার সাথে ধৈর্য্য ধরে.
এটি একটি সামান্য বিট pseudocode এখানে মিশিয়ে.
এই নামে একটি ফাংশন যে দৃশ্যত কার্ড কারবার
তার পরামিতি হিসেবে একটি ডেক লাগে, এবং আমার ইচ্ছা আউটপুট একটি একক কার্ড.
>> আর আমি এখানে যেখানে আমি কিছু কাজ করছি , 0 থেকে 52 এর সাথে সঞ্চালিত হয় যে একটি লুপ আছে
এবং আমি একটি কার্ড কারবার.
ওয়েল, আমরা একটি যাদু পেয়েছেন এখানে সংখ্যা, ঠিক আছে.
আপনি যাদু সংখ্যা কি দেখছ?
অথবা আরো গুরুত্বপূর্ণভাবে, আপনি কি সমস্যা এখানে কি দেখতে?
বিশেষ করে এই যদি মাত্র এক ফাংশন
একটি নিজস্ব ফাইলে রয়েছে যে ফোল্ডারের
বিভিন্ন একটি গুচ্ছ ফাইল, প্রতিটি যা
কার্ডের একটি ডেক থেকে আরেকটি বিষয় আছে.
হয়তো এটা তাদের shuffles, বা একটি হাত ঘটনাও পাঁচটি কার্ড পরিবর্তে একটি একক কার্ড.
>> তুমি কি দেখতে পাচ্ছ সমস্যা এখানে হতে পারে?
আপনি ম্যাজিক নম্বর দেখুন না আমি কোড মধ্যে ইনজেকশনের থাকেন?
এটা ঠিক আছে, 52 এর.
>> ভালো লেগেছে, intuitively আপনি সম্ভবত জানেন, ঠিক আছে.
একটি প্রমিত ডেক মত কার্ড 52 কার্ড রয়েছে.
কিন্তু আমাদের প্রোগ্রাম, এটা ঠিক ধরনের আছে চারপাশে ঘিরে আছে.
হঠাৎ সব একটি 52 আছে এটা ভালো.
>> এই সমাধান করার একটা উপায় সমস্যা এই কাজ করতে হয়.
আমরা এখন খুব স্পষ্টভাবে আছেন 52 হিসাবে ডেক আকার আউট কলিং.
এটা একটু বেশি ধারণাসম্পন্ন দেয় যখন লুপ জন্য অর্থ
আমরা তখন, আমি বলতে পরবর্তী ডেক সাইজ কম.
এটা শুধু 52 বলছে চেয়ে ভাল বলে মনে হয়.
এখন আসলে এই সমস্যা ঠিক করা আছে.
এটা কিছু সিম্বলিক দেয় ধ্রুব অর্থাত.
কিন্তু এটা কোন ধরনের আসলে অন্য সমস্যা পরিচয় করিয়ে
যে অবিলম্বে আপাত নাও হতে পারে.
এমনকি এই পরিবর্তনশীল যদি globally-- ঘোষণা করা হয়
আপনি এটা কি প্রত্যাহার না আমরা ঘোষণা যখন মানে
বিশ্বব্যাপী স্থানীয়ভাবে বনাম একটি পরিবর্তনশীল?
আমরা একটি ভেরিয়েবল ডিক্লেয়ার এমনকি যদি বিশ্বব্যাপী, কি আছে যদি
অন্য ফাংশন ফাংশন আমাদের স্যুট
কার্ড ম্যানিপুলেশন সঙ্গে যে চুক্তি যে অনবধানতাবশত ডেক আকার পরিবর্তন
বা এটা করে তা বৃদ্ধি 1 বা 1 দ্বারা এটি হ্রাস পায়.
একেবারে ঠিক, সমস্যা বানান করতে পারে?
আমরা একটি সেট সঙ্গে তার আচরণ করছি, বিশেষ করে যদি কার্ডের পূর্ণ ডেক shuffling যেখানে
দরকার.
ডেক আকার হ্রাস করা হয় তাহলে 1 দ্বারা, উদাহরণস্বরূপ, 51,
আমরা আসলে shuffling করছি না সম্ভবত সব কার্ড.
আমরা তাদের ছাড়ব করছি.
যে মান সম্ভবত হতে পারে পূর্বাভাস বা খারাপ অভিনেতা দ্বারা শোষিত.
>> সি একটি বলা কি উপলব্ধ এর preprocessor ডিরেক্টিভের, যা
একটি ম্যাক্রো জন্য বলা হয় সিম্বলিক ধ্রুবক তৈরি.
এবং বাস্তবিকই, আপনি ইতিমধ্যে করেছি একটি preprocessor ডিরেক্টিভের দেখা,
আপনি এটা শুনে নি, এমনকি যদি #include সঙ্গে যে বলা.
এটি একটি ম্যাক্রো আরেকটি উদাহরণ বা এর preprocessor ডিরেক্টিভের.
>> পথ সিম্বলিক ধ্রুবক তৈরি করতে, অথবা একটি ধ্রুবক একটি নাম প্রদান
এটা আরো আছে, যাতে অর্থাত, নিম্নরূপ হয়.
# define, নাম, প্রতিস্থাপন.
সরাইয়া সত্যিই গুরুত্বপূর্ণ এখানে সত্যিই দ্রুত.
একটি সেমিকোলন করা না আপনার # সংজ্ঞায়িত শেষে.
সুতরাং এটি সংজ্ঞায়িত নাম, প্রতিস্থাপন.
>> আপনার প্রোগ্রাম কম্পাইল করা হয়, আসলে কি ঘটবে
যাচ্ছে তাহলে কম্পাইলার আপনার কোড মধ্য দিয়ে যেতে
এবং প্রতিটি উদাহরণের প্রতিস্থাপন যাই হোক না কেন সঙ্গে শব্দ "নাম" আপনি
বদলি হিসেবে করা.
অনুরূপভাবে, #include যদি সাজান এর কপি এবং পেস্ট করা একই,
তারপর # define ধরণের হয় এটি এবং প্রতিস্থাপন অনুরূপ,
আপনি কি একটি মধ্যে যে বৈশিষ্ট্য ব্যবহার করেছি যদি ওয়ার্ড প্রসেসিং প্রোগ্রাম, উদাহরণস্বরূপ.
>> উদাহরণস্বরূপ, যদি তাই আমি 3.14159265 হিসেবে Pi সংজ্ঞায়িত,
আপনি ভাল গাণিতিকভাবে হন তাহলে আনত এবং আপনি হঠাৎ
3.14159265 উড়ন্ত দেখতে কাছাকাছি আপনার কোড,
আপনি সম্ভবত এটা Pi বিষয়ে কথা জানি.
কিন্তু হয়তো আমরা একটি দিতে পারেন একটু বেশি সিম্বলিক অর্থ.
এবং আমরা আপনার পরিবর্তে # define বলতে পারেন সংখ্যার যে একগাল হিসেবে Pi
আমি রাখতে যাচ্ছি না যে বহুবার পড়া.
>> আর তা এ তারপর ঘটতে যাচ্ছে প্রোগ্রাম যখন কম্পাইল সময়
কম্পাইল, সর্বপ্রথম যে ঘটবে এটা মধ্য দিয়ে যেতে হবে
এবং এটি প্রত্যেক সময় প্রতিস্থাপন করবে এটা মূলধন পি, রাজধানী আমি সূচিত
এটা আক্ষরিক সঙ্গে এটি প্রতিস্থাপন করব 3.14, and so on, যাতে আপনি
এটা প্রতি টাইপ করতে হবে না সময় এখনও আপনার প্রোগ্রাম যখন
কার্যকারিতা রয়েছে যে আপনি আপনি কাজ করছেন, কারণ আশা
সাধিত সাথে, গুন, এটা Pi করে যাই হোক না কেন, বিভাজক.
>> আপনি এই সীমাবদ্ধ নয় শুধুমাত্র সংখ্যার জন্য প্রতিস্থাপন.
উদাহরণস্বরূপ, আমি সংজ্ঞায়িত পারে স্ট্রিং এবং CS50 হিসাবে অবশ্যই.
এই ক্ষেত্রে, যখন প্রোগ্রাম কম্পাইল করা হয়,
# define মধ্য দিয়ে যেতে হবে কোড, প্রত্যেক সময় প্রতিস্থাপন
এটা স্ট্রিং CS50 সঙ্গে "অবশ্যই" সূচিত করা হবে.
>> আপনি এখানে বিজ্ঞপ্তি পাবেন এছাড়াও আমি যে ঘন ঘন
# define সব আমার সিম্বলিক সংজ্ঞায়িত ধ্রুবক, তাই কথা বলতে,
সব ছিপি সবসময়.
এটা একটা রীতিনীতি.
এটা আবশ্যিক নয়.
কারণ সাধারণত মানুষ ব্যবহার করবে সব অক্ষরে তারা #defining করছি
শুধু যে এটা সত্যিই পরিষ্কার করা হয় আমার কোড এই বিশেষ উপাদান
একটি নির্ধারিত ধ্রুবক.
এটা ছোট হাতের হয় তাহলে, এটি যে সম্ভব এটি একটি পরিবর্তনশীল দিয়ে বিভ্রান্ত করা যেতে পারে.
আর যে সম্ভবত একটি ভালো কাজ করতে না.
>> তাই এই বিশেষ সমাধান অনেক ভালো
পূর্ববর্তী বেশী হয় বেশী.
আমি প্রথম সংজ্ঞায়িত ডেক আকার 52, তারপর যদি এখন এখানে 52, বা ডেক আকারের আমার ব্যবহার,
অনেক বেশি ধারণাসম্পন্ন এবং অনেক নিরাপদ.
আপনি একটি ধ্রুবক পরিবর্তন করতে পারেন.
আপনি 52 প্লাস প্লাস বলতে পারবেন না.
53 তা রূপান্তর করা যাচ্ছে না.
আপনি কিছু করতে 52 পরিবর্তন করতে পারবেন না.
>> আপনি একটি পরিবর্তনশীল পরিবর্তন করতে পারেন যার মূল্য 52,
যা আমরা আগে ছিল প্রথম ফিক্স ছিল.
আর আপনি বৃদ্ধি করতে পারে 53 যে পরিবর্তনশীল.
কিন্তু আপনি 52 প্লাস প্লাস এবং বলতে পারবেন না হঠাৎ 53 মধ্যে 52 চালু যে আছে.
52 সবসময় 52.
আর তাই আপনি অনবধানতাবশত পরিবর্তন করতে পারবেন না এখানে এটা সাধিত দ্বারা ডেক আকার,
>> আরেকটি ভালো দিক এই যদিও এর প্রভাব
যে আপনি অবগত আছেন যে না বিশ্বের প্রায় সব দেশ
আকার 52 হাজার কার্ডের একটি ডেক ব্যবহার?
উদাহরণস্বরূপ, এটি সত্যিই সাধারণ জার্মানি, 32 একটি ডেক আকার ব্যবহার
তারা কিছু খুঁজে ফালা যেখানে নিম্ন মান কার্ডের.
এবং এই ক্ষেত্রে, আমি Port আমার সুইট চেয়েছিলেন
আমাদের সাথে ফাংশন জার্মানি থেকে কার্ড ম্যানিপুলেশন.
আমি প্রথমবার পারা আমরা দেখিয়েছেন, যান এবং প্রতিস্থাপন আছে
32 সঙ্গে আমার কোড 52 সবগুলোকেই.
>> কিন্তু এখানে, আমি সংজ্ঞায়িত তাহলে ডেক আকার আমার কোড খুব শীর্ষে 32 হিসাবে,
আমি এটি পরিবর্তন করার প্রয়োজন হলে, আমি যা করতে পারেন শুধু যেতে এবং যে এক জিনিস পরিবর্তন.
আমার কোড কম্পাইল, এবং সব হঠাৎ এটা মাধ্যমে propagates.
আসলে, আমরা ডেক পরিবর্তন করতে পারেন আমরা কাঙ্ক্ষিত মান মাপ.
>> আমি একটি আপনি প্রদান করতে পারি ডেক আকার পিক খেলা?
>> আমি ডগ লয়েড আছি.
এবং এই CS50.