1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [সপ্তাহ 4] 2 00:00:03,000 --> 00:00:05,000 [ডেভিড জে Malan] [হার্ভার্ড বিশ্ববিদ্যালয়] 3 00:00:05,000 --> 00:00:08,000 [এটি CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> সমস্ত অধিকার, এই CS50 হয়, এবং এই সপ্তাহে 4 শুরু, 5 00:00:12,000 --> 00:00:16,000 এবং এই ধীরতম সম্ভব বাছাই আলগোরিদিম এক. 6 00:00:16,000 --> 00:00:19,000 কোনটি ছিল এটা যে ঠিক আছে আমরা দেখেছেন? 7 00:00:19,000 --> 00:00:24,000 যে ছিল বুদ্বুদ সাজান, যাতে বড় O (n 2 ^) + সমষ্টি, 8 00:00:24,000 --> 00:00:28,000 এবং নিশ্চয় আমরা জানি মনে হয় এই পৃথিবীতে শুধুমাত্র বেশী না 9 00:00:28,000 --> 00:00:30,000 বুদ্বুদ সাজানোর কি হয় অথবা তার চলমান সময়. 10 00:00:30,000 --> 00:00:33,000 প্রকৃতপক্ষে, এই ছিল Eric Schmidt Google এর সঙ্গে একটি সাক্ষাত্কারে 11 00:00:33,000 --> 00:00:45,000 এবং প্রাক্তন সিনেটার বারাক ওবামা মাত্র কয়েক বছর আগে. 12 00:00:45,000 --> 00:00:48,000 >> এখন, সিনেটর, আপনি Google-এ এখানে এসেছি, 13 00:00:48,000 --> 00:00:54,000 এবং আমি অধ্যক্ষতা একটি পেশা ইন্টারভিউ হিসাবে চিন্তা করতে চান. 14 00:00:54,000 --> 00:00:58,000 এখন, এটা কঠিন প্রেসিডেন্ট হিসাবে চাকরি পেতে, এবং আপনি এখন rigors মাধ্যমে চলুন. 15 00:00:58,000 --> 00:01:00,000 এছাড়াও এর Google-এ একটি কাজ পাওয়ার জন্য হার্ড. 16 00:01:00,000 --> 00:01:05,000 আমরা প্রশ্ন থাকে, এবং আমরা আমাদের প্রার্থীদের প্রশ্ন জিজ্ঞাসা করতে পারেন, 17 00:01:05,000 --> 00:01:10,000 এবং এই এক ল্যারি Schwimmer থেকে হয়. 18 00:01:10,000 --> 00:01:14,000 আপনি মনে হয় না আমি নিশ্চয়ই মজা করছি? এটা ঠিক এখানে. 19 00:01:14,000 --> 00:01:18,000 সবচেয়ে কার্যকর উপায় লক্ষ 32 বিট ইন্টিজার সাজাতে কি? 20 00:01:18,000 --> 00:01:21,000 [হাস্য] 21 00:01:21,000 --> 00:01:24,000 সু - 22 00:01:24,000 --> 00:01:26,000 আমি দুঃখিত. >> না, না, না, নেই. 23 00:01:26,000 --> 00:01:34,000 আমি মনে করি বুদ্বুদ সাজানোর কুপথ যেতে হবে. 24 00:01:34,000 --> 00:01:39,000 >> চলো, যিনি তাকে এই ডটকমকে বলেন? 25 00:01:39,000 --> 00:01:43,000 গত সপ্তাহে প্রত্যাহার আমরা গ্রহণ অন্তত একটি দিনের জন্য কোড থেকে একটি বিভাজক,, 26 00:01:43,000 --> 00:01:46,000 শুরু এবং কিছু উঁচু মাত্রার ধারনা এবং সমস্যা সমাধানের আরো সাধারণভাবে উপর মনোযোগ নিবদ্ধ করে 27 00:01:46,000 --> 00:01:49,000 অনুসন্ধান এবং বাছাই অনুষঙ্গে, 28 00:01:49,000 --> 00:01:53,000 এবং আমরা কিছু যে আমরা এই নামের শেষ সপ্তাহে বার চড় না চালু, 29 00:01:53,000 --> 00:01:56,000 কিন্তু asymptotic স্বরলিপি, বিগ হে, বিগ ওমেগা, 30 00:01:56,000 --> 00:02:00,000 এবং কখনও কখনও বিগ থীটা স্বরলিপি, এবং এই সহজভাবে ছিল উপায় 31 00:02:00,000 --> 00:02:02,000 এর আলগোরিদিম চলমান সময় বর্ণনা, 32 00:02:02,000 --> 00:02:05,000 কত সময় এটি একটি অ্যালগরিদম চালানোর জন্য সময় লাগে. 33 00:02:05,000 --> 00:02:08,000 >> এবং আপনি আকারের পদ প্রত্যাহার হতে পারে যে আপনি চলমান সময় স্বপ্ন 34 00:02:08,000 --> 00:02:11,000 ইনপুট, যা সাধারণভাবে আমরা n, কল যাই হোক না কেন সমস্যা হতে পারে, 35 00:02:11,000 --> 00:02:13,000 যেখানে n হল মানুষের নম্বর রুমে, 36 00:02:13,000 --> 00:02:17,000 একটি ফোন বই পাতার সংখ্যা, এবং আমরা সেটা লেখা শুরু 37 00:02:17,000 --> 00:02:21,000 ভালো O (n ^ 2) অথবা O (n) অথবা O (n log n), 38 00:02:21,000 --> 00:02:24,000 এবং এমনকি যখন গণিত আউট কাজ পুরোপুরি না তাই পুরোপুরি 39 00:02:24,000 --> 00:02:28,000 এবং এটি ছিল n ² - n / 2 বা ওই জাতীয় কিছু 40 00:02:28,000 --> 00:02:31,000 আমরা পরিবর্তে শুধুমাত্র নিম্ন ক্রম পদ কিছু সরিয়ে দিন, 41 00:02:31,000 --> 00:02:34,000 প্রেরণা এবং যে সত্যিই আমরা চাই একটি আছে 42 00:02:34,000 --> 00:02:37,000 মূল্যায়নের উদ্দেশ্য ভাবে সাজানোর 43 00:02:37,000 --> 00:02:39,000 প্রোগ্রাম কর্মক্ষমতা বা আলগোরিদিম কর্মক্ষমতা 44 00:02:39,000 --> 00:02:42,000 যে দিন শেষে আছে উদাহরণস্বরূপ না কিছুই,, 45 00:02:42,000 --> 00:02:45,000 সঙ্গে আপনার কম্পিউটারের গতি আজ. 46 00:02:45,000 --> 00:02:47,000 >> উদাহরণস্বরূপ, যদি আপনি বুদ্বুদ সাজানোর বাস্তবায়ন, 47 00:02:47,000 --> 00:02:50,000 অথবা আপনি আজকের এর কম্পিউটারে সাজান বা নির্বাচন সাজানোর একত্রীকরণ বাস্তবায়ন, 48 00:02:50,000 --> 00:02:53,000 2 GHz একটি কম্পিউটার, এবং আপনি এটি চালানো, 49 00:02:53,000 --> 00:02:56,000 এবং এটি যাও কিছু সংখ্যা প্রদর্শিত হয়, পরবর্তী বছরের একটি 3 GHz আছে 50 00:02:56,000 --> 00:02:59,000 অথবা পরে একটি 4 GHz কম্পিউটার, এবং আপনি দাবি করতে পারে যে, "বাহ, আমার আলগোরিদিম 51 00:02:59,000 --> 00:03:03,000 হয় এখন দ্বিগুণ হিসাবে দ্রুত, "যখন যে বাস্তবে এর ক্ষেত্রে সম্ভবত না. 52 00:03:03,000 --> 00:03:06,000 শুধু হার্ডওয়্যার দ্রুত অর্জিত হয়েছে, কিন্তু আপনার কম্পিউটার 53 00:03:06,000 --> 00:03:10,000 করেনি এবং তাই, আমরা হইনি জিনিষ ভালো সরিয়ে সত্যিই চান 54 00:03:10,000 --> 00:03:13,000 গুণিতকে 2 3 বা এর গুণিতক অত্যন্ত স্পষ্টভাবে তার বিবরণ আসে 55 00:03:13,000 --> 00:03:17,000 কিভাবে দ্রুত বা ধীর কিভাবে একটি অ্যালগরিদম এবং এটি সত্যিই শুধু ফোকাস 56 00:03:17,000 --> 00:03:20,000 উপর n বা উহার কিছু ফ্যাক্টর, 57 00:03:20,000 --> 00:03:24,000 কিছু ক্ষমতা উহার হিসাবে গত সপ্তাহে থেকে প্রকারের ক্ষেত্রে. 58 00:03:24,000 --> 00:03:27,000 একত্রীকরণ এবং সাজানোর সাহায্যে যে প্রত্যাহার 59 00:03:27,000 --> 00:03:31,000 আমরা এত বুদ্বুদ সাজানোর এবং নির্বাচন সাজানোর তুলনায় ভালো করতে পারবেন 60 00:03:31,000 --> 00:03:33,000 এবং এমনকি সন্নিবেশ সাজান. 61 00:03:33,000 --> 00:03:36,000 >> আমরা n log n যাও না নিচে, এবং আবার, 62 00:03:36,000 --> 00:03:39,000 পুনরাহ্বান যে লগ n সাধারণত যা বোঝায় বৃদ্ধি 63 00:03:39,000 --> 00:03:43,000 তারপর আস্তে আস্তে আরো হবে, তাই n log-n পর্যন্ত ছিল ভাল 64 00:03:43,000 --> 00:03:45,000 কারণ এটি ছিল n ² এর তুলনায় কম. 65 00:03:45,000 --> 00:03:47,000 কিন্তু n অর্জন একত্রীকরণ সাজানোর সঙ্গে n লগ ইন 66 00:03:47,000 --> 00:03:51,000 একটি ধারণা মৌলিক জীবাণু যে আমরা ছিল কি ছিল লিভারেজ 67 00:03:51,000 --> 00:03:54,000 যে আমরা সপ্তাহে 0 leveraged ফিরে? 68 00:03:54,000 --> 00:03:58,000 আমরা কিভাবে কি বাছাই সমস্যার মোকাবেলা নিপুণতার সঙ্গে একত্রীকরণ সাজান? 69 00:03:58,000 --> 00:04:04,000 অন্তর্দৃষ্টি কী কী ছিল, হয়ত? 70 00:04:04,000 --> 00:04:07,000 কেউ এ সব. 71 00:04:07,000 --> 00:04:09,000 ঠিক আছে, আমি এর পিছনে একটি পদক্ষেপ গ্রহণ করা. 72 00:04:09,000 --> 00:04:11,000 আপনার নিজের ভাষায় সাজানোর একত্রীকরণ বর্ণনা করুন. 73 00:04:11,000 --> 00:04:15,000 এটা কিভাবে কাজ করে? 74 00:04:15,000 --> 00:04:17,000 ঠিক আছে, আমরা সপ্তাহে 0 সারি ফিরে পাবেন. 75 00:04:17,000 --> 00:04:19,000 ঠিক আছে, হাঁ. 76 00:04:19,000 --> 00:04:22,000 [শ্রবণাতীত-ছাত্র] 77 00:04:22,000 --> 00:04:26,000 ঠিক আছে, ভাল, তাই আমরা 2 টুকরা সংখ্যার অ্যারের বিভক্ত. 78 00:04:26,000 --> 00:04:29,000 আমরা যারা পোশাক প্রতিটি অনুসারে বাছাই করা, এবং তারপর আমরা তাদের মার্জ, 79 00:04:29,000 --> 00:04:33,000 এবং আমরা এই ধারণা পাচ্ছি আগে একটি সমস্যা যে এই বড় গ্রহণ 80 00:04:33,000 --> 00:04:36,000 এবং চপিং একটি সমস্যা যে এই বড় বা এই বড় মধ্যে এটি আপ. 81 00:04:36,000 --> 00:04:38,000 >> টেলিফোন বইয়ের উদাহরণ প্রত্যাহার. 82 00:04:38,000 --> 00:04:42,000 সপ্তাহ আগে থেকে স্ব - কাউন্টিং আলগোরিদিম প্রত্যাহার, 83 00:04:42,000 --> 00:04:45,000 তাই মার্জ সাজানোর এই এখানে pseudocode দ্বারা সংক্ষিপ্ত ছিল. 84 00:04:45,000 --> 00:04:48,000 আপনি যখন n উপাদান দেওয়া প্রথম করছি, এটি ছিল বৈধতা পরীক্ষা. 85 00:04:48,000 --> 00:04:51,000 যদি n <2 এ সব কিছু করবেন না 86 00:04:51,000 --> 00:04:55,000 কারণ যদি n <তারপর 2 n হল স্পষ্টত 0 বা 1, 87 00:04:55,000 --> 00:04:57,000 এবং তাই এটি যদি হয় এর 0 বা 1 কিছুই বাছাই আছে. 88 00:04:57,000 --> 00:04:59,000 আপনি শেষ করেছেন. 89 00:04:59,000 --> 00:05:01,000 আপনার তালিকাটি ইতিমধ্যেই trivially সাজানো হয়. 90 00:05:01,000 --> 00:05:04,000 কিন্তু আপনি যদি এগিয়ে অন্যথায় 2 বা আরো উপাদান পেয়েছেন যান এবং তাদের বিভক্ত করা 91 00:05:04,000 --> 00:05:06,000 মধ্যে 2 অর্ধেক, বাম এবং ডান. 92 00:05:06,000 --> 00:05:09,000 যারা অর্ধ প্রতিটি, বাছাই এবং তারপর সাজানো আংশিক একত্রীকরণ. 93 00:05:09,000 --> 00:05:13,000 কিন্তু এখানে সমস্যা হল যে এই প্রথম নজরে মতানুযায়ী আমরা ভালো punting করছি. 94 00:05:13,000 --> 00:05:17,000 এটি একটি বিজ্ঞপ্তি যে সংজ্ঞা যদি আমি আপনাকে এইসব n উপাদান বাছাই করেছি জিজ্ঞাসা 95 00:05:17,000 --> 00:05:22,000 এবং আপনার সম্পর্কে বলার করছেন "ঠিক আছে, সূক্ষ্ম, আমরা n / 2 এবং যারা n / 2 উপাদান যারা সাজাতে হবে," 96 00:05:22,000 --> 00:05:27,000 তারপর আমার পরের প্রশ্ন হতে যাচ্ছে "ফাইন, তা আপনি কীভাবে n / 2 উপাদান বাছাই?" হয় 97 00:05:27,000 --> 00:05:30,000 >> কিন্তু কারণ এই প্রোগ্রামের গঠন, 98 00:05:30,000 --> 00:05:33,000 কারণ এই বেস কেস আছে, তাই কথা বলতে, 99 00:05:33,000 --> 00:05:39,000 এই বিশেষ ক্ষেত্রে যে যদি n <2 ফিরে ভালো কিছু নির্দিষ্ট মান অবিলম্বে হয়. 100 00:05:39,000 --> 00:05:42,000 কি যে একই বিজ্ঞপ্তি উত্তর প্রতিক্রিয়া না. 101 00:05:42,000 --> 00:05:46,000 এই প্রক্রিয়া, ঘটনাক্রমে এই cyclicity শেষ হয়ে যাবে. 102 00:05:46,000 --> 00:05:50,000 যদি আমি আপনাকে জিজ্ঞাসা "বাছাই করা এইসব উপাদান," এবং আপনার বলে, "ফাইন, এইসব n / 2, বাছাই" 103 00:05:50,000 --> 00:05:53,000 তারপর আপনি বলে, "ফাইন, সাজানোর এই n / 4, n / 8, n/16," 104 00:05:53,000 --> 00:05:56,000 অবশেষে আপনি একটি বড় যথেষ্ট সংখ্যা দ্বারা বিভক্ত করা হবে 105 00:05:56,000 --> 00:05:59,000 যে আপনি মাত্র 1 বাম উপাদান আছে, যা বিন্দু আপনি বলতে পারেন, 106 00:05:59,000 --> 00:06:02,000 "এখানে, এখানে একটি সাজানো একক উপাদান." 107 00:06:02,000 --> 00:06:06,000 তারপর আপ এই আলগোরিদিমের প্রতিভা এখানে সত্য থেকে আহরণ করা যাও 108 00:06:06,000 --> 00:06:09,000 যে একবার আপনি এইসব পৃথকভাবে অনুসারে সাজানো তালিকা সব আছে, 109 00:06:09,000 --> 00:06:12,000 সব মাপ 1, সরকার যা যা অকাজের মনে করা হয়, 110 00:06:12,000 --> 00:06:15,000 একবার আপনি শুরু তাদের মার্জ এবং তাদের মার্জ 111 00:06:15,000 --> 00:06:19,000 পরিশেষে আপনার বিল্ড আপ হিসাবে Rob ভিডিও পরিশেষে একটি অনুসারে সাজানো তালিকা করেছিল. 112 00:06:19,000 --> 00:06:22,000 >> কিন্তু এই ধারণা বাছাই দূরে বহুদূরে প্রসারিত করে. 113 00:06:22,000 --> 00:06:26,000 এই ধারণা এই প্রোগ্রাম recursion হিসাবে পরিচিত এমবেড করা আছে, 114 00:06:26,000 --> 00:06:29,000 ধারণা সাহায্যে আপনি একটি প্রোগ্রাম, 115 00:06:29,000 --> 00:06:32,000 এবং কিছু সমস্যা আপনি নিজেই কল সমাধান, 116 00:06:32,000 --> 00:06:36,000 প্রোগ্রামিং ভাষা আপনি একটি ফাংশন প্রেক্ষিতে বা করা, 117 00:06:36,000 --> 00:06:39,000 এবং যাতে একটি সমস্যা সমাধানের জন্য, আপনি নিজেকে ফাংশন কল 118 00:06:39,000 --> 00:06:42,000 আবার এবং আবার এবং আবার, কিন্তু আপনি ফাংশন 119 00:06:42,000 --> 00:06:44,000 নিজের অসীম অনেকবার কল করতে পারবেন না. 120 00:06:44,000 --> 00:06:47,000 অবশেষে আপনি নীচে আউট আছে, তাই কথা বলতে, 121 00:06:47,000 --> 00:06:49,000 এবং কিছু হার্ড কোড বেস শর্ত বলা আছে 122 00:06:49,000 --> 00:06:53,000 এই সময়ে নিজেকে তাই কলিং থামাতে যে সমগ্র প্রক্রিয়া 123 00:06:53,000 --> 00:06:56,000 আসলে পরিশেষে থামবে. 124 00:06:56,000 --> 00:06:58,000 কি সত্যিই এই recurse যাও, মানে? 125 00:06:58,000 --> 00:07:01,000 >> এর চলুন দেখা যাক, যদি আমরা একটি সহজ, তুচ্ছ উদাহরণ সাথে, অর্থাৎ কি করতে পারেন, 126 00:07:01,000 --> 00:07:03,000 আমার সাথে 3 জনের উপরে পর্যায় এখানে, যদি কেউ আরামদায়ক. 127 00:07:03,000 --> 00:07:06,000 আপ, 2 এবং 3 1, আসা. 128 00:07:06,000 --> 00:07:09,000 আপনি যদি এখানে আসতে চান 3. 129 00:07:09,000 --> 00:07:12,000 আপনি যদি আমার ডান পাশে দাঁড়ানো এখানে একটি লাইন চাই, অনুমান যে হাতে সমস্যা 130 00:07:12,000 --> 00:07:15,000 হয় খুব trivially যারা এখানে আছেন সংখ্যা গোণে. 131 00:07:15,000 --> 00:07:18,000 কিন্তু সত্যি, আমি সব এই গণনা উদাহরণের ক্লান্ত. 132 00:07:18,000 --> 00:07:21,000 এই কিছু সময়, 1, 2, এবং বিন্দু, বিন্দু, বিন্দু নিতে যাচ্ছে. 133 00:07:21,000 --> 00:07:23,000 এটা চিরকালের নিতে যাচ্ছে. 134 00:07:23,000 --> 00:07:25,000 আমি বরং পান্ট সাহায্য সাথে পুরাপুরি এই সমস্যার-কি আপনার নাম? চাই 135 00:07:25,000 --> 00:07:27,000 সারা. >> সারা সমস্ত অধিকার. 136 00:07:27,000 --> 00:07:29,000 কেলি. >> কেলি এবং? 137 00:07:29,000 --> 00:07:31,000 >> Willy. >> Willy, সারা, কেলি, এবং Willy. 138 00:07:31,000 --> 00:07:34,000 এখন আমি ডান হয়েছে ব্যক্তির দ্বারা জিজ্ঞাসা করা প্রশ্ন 139 00:07:34,000 --> 00:07:37,000 কতজন লোক এই পর্যায়ের হয় আপ, এবং আমি মনে করি নহি. 140 00:07:37,000 --> 00:07:40,000 সত্যিই এটি একটি দীর্ঘ তালিকা, এবং তাই আমি এই কৌতুক করতে যাচ্ছি. 141 00:07:40,000 --> 00:07:43,000 আমি ব্যক্তিকে কাজ না পরের সবচেয়ে যাও সম্পর্কে জিজ্ঞাসা চলেছি, 142 00:07:43,000 --> 00:07:46,000 এবং একবার সে কাজ বেশীরভাগ কাজ সম্পন্ন করা হয় 143 00:07:46,000 --> 00:07:49,000 আমি কাজের পরিমাণ কমপক্ষে সম্ভব না যাওয়া এবং মাত্র 1 যোগ করছি 144 00:07:49,000 --> 00:07:51,000 যাও যাই হোক না কেন তার উত্তরে, যাতে আমরা এখানে. 145 00:07:51,000 --> 00:07:54,000 আমি মঞ্চে কিভাবে অনেক করেছি বলা হয়েছে. 146 00:07:54,000 --> 00:07:57,000 কত জনের পর্যায় হয় আপনি বাম দিকের? 147 00:07:57,000 --> 00:08:00,000 আমার বাম >>? ঠিক আছে, কিন্তু না ঠকাই না. 148 00:08:00,000 --> 00:08:04,000 এটা ভাল, যে সঠিক, কিন্তু যদি আমরা এই যুক্তিবিজ্ঞান অবিরত করতে চান 149 00:08:04,000 --> 00:08:08,000 এর অনুমান করা যাক যে ঐভাবে চান আপনি বাম দিকের এই সমস্যা পান্ট, 150 00:08:08,000 --> 00:08:11,000 তাই বদলে উত্তর সরাসরি এগিয়ে যেতে এবং মাত্র মেষ পাস. 151 00:08:11,000 --> 00:08:14,000 ওহ, আমার বাম কতজন লোক আছে? 152 00:08:14,000 --> 00:08:16,000 বাম যাও কত মানুষ? 153 00:08:16,000 --> 00:08:18,000 1. 154 00:08:18,000 --> 00:08:27,000 [হাস্য] 155 00:08:27,000 --> 00:08:30,000 ঠিক আছে, তাই 0, তাই কি এখন Willy কাজ করেনি 156 00:08:30,000 --> 00:08:33,000 হয় আপনি এই দিক 0 বলছে ফিরিয়ে আপনার উত্তরে করেছি. 157 00:08:33,000 --> 00:08:36,000 এখন তাহলে আপনি কি? >> 1 উচিত. 158 00:08:36,000 --> 00:08:39,000 ঠিক আছে, তাই আপনি 1, যাতে আপনি বলে, "ঠিক আছে, আমি 1 যোগ চলেছি 159 00:08:39,000 --> 00:08:41,000 যাই হোক না কেন যাও Willy এর গণনা ছিল, তাই "1 + 0. 160 00:08:41,000 --> 00:08:43,000 আপনি এখন 1 যাতে অধিকার আপনার উত্তরটি এখন- 161 00:08:43,000 --> 00:08:45,000 1. >> এবং খনি 2 হবে. 162 00:08:45,000 --> 00:08:48,000 গুড, তাই আপনি পূর্ববর্তী 1 উত্তর গ্রহণ করছেন, 163 00:08:48,000 --> 00:08:51,000 কাজের পরিমাণ ন্যূনতম আপনাকে যোগ করতে চান, যা +1 করুন. 164 00:08:51,000 --> 00:08:55,000 আপনি এখন 2 আছে, এবং আপনি পরে সম্পর্কে যা মান হাতে? 165 00:08:55,000 --> 00:08:57,000 3, আমি বলতে চাচ্ছি দুঃখিত, 2,. 166 00:08:57,000 --> 00:08:59,000 গুড. 167 00:08:59,000 --> 00:09:02,000 >> ভাল, আমরা বাম যাও 0 ছিল. 168 00:09:02,000 --> 00:09:05,000 তারপর আমরা 1 ছিল, এবং তারপর আমরা 2 যোগ করুন, 169 00:09:05,000 --> 00:09:07,000 এবং এখন আপনি কি আমার নম্বর 2 হস্তান্তর করছি, 170 00:09:07,000 --> 00:09:10,000 এবং তাই আমি বলে ঠিক করছি +1 টি, 3. 171 00:09:10,000 --> 00:09:13,000 এর প্রকৃতপক্ষে এখন পর্যন্ত 3 এই মঞ্চে দাঁড়িয়ে পরের যাও সম্পর্কে মানুষ, 172 00:09:13,000 --> 00:09:16,000 তাই অবশ্যই আমরা এই কাজ করে থাকতে পারে খুব linearly, 173 00:09:16,000 --> 00:09:19,000 সুস্পষ্ট ফ্যাশন অনেক, কিন্তু আমরা কি সত্যিই কি করবেন? 174 00:09:19,000 --> 00:09:21,000 আমরা মাপ 3 সমস্যা প্রাথমিকভাবে নেন. 175 00:09:21,000 --> 00:09:24,000 আমরা তারপরে ভেঙে আকার 2 সমস্যা এটা ডাউন, 176 00:09:24,000 --> 00:09:27,000 তারপর আকার 1 সমস্যা, এবং তারপর অবশেষে বেস মামলা 177 00:09:27,000 --> 00:09:29,000 ছিল সত্যিই, ওহ, সেখানে কোন এক আছে, 178 00:09:29,000 --> 00:09:33,000 বিন্দু Willy এ কার্যকরভাবে ফিরে একটি হার্ড কোড উত্তর বার কয়েক, 179 00:09:33,000 --> 00:09:36,000 এবং তারপর দ্বিতীয় এক bubbled ছিল আপ, bubbled আপ, bubbled আপ, 180 00:09:36,000 --> 00:09:39,000 এবং তারপর এই এক অতিরিক্ত 1 দ্বারা যোগ 181 00:09:39,000 --> 00:09:41,000 আমরা এই recursion মৌলিক ধারণা প্রয়োগ করেছি. 182 00:09:41,000 --> 00:09:44,000 >> এই ক্ষেত্রে এখন, এটি সত্যিই একটি সমস্যা সমাধান করা না 183 00:09:44,000 --> 00:09:46,000 কোনো আরো কার্যকরভাবে তারপর আমরা এইভাবে দেখা করেছি. 184 00:09:46,000 --> 00:09:48,000 আলগোরিদিম আমরা মঞ্চে পর্যন্ত করেছেন কিন্তু আমার মনে হয়. 185 00:09:48,000 --> 00:09:51,000 আমরা chalkboard অপ্রযুক্ত 8 টুকরা করে, 186 00:09:51,000 --> 00:09:55,000 ভিডিও যখন Sean নম্বর 7 জন্য, খুঁজছেন এবং তিনি কি সত্যিই কি কি ছিল? 187 00:09:55,000 --> 00:09:58,000 ওয়েল, তিনি এবং কি কি ডিভাইড কোন ধরনের না জেতা. 188 00:09:58,000 --> 00:10:01,000 তিনি recursion কোন ধরনের কি না. 189 00:10:01,000 --> 00:10:03,000 বরং তিনি এই রৈখিক আলগোরিদিম করেছিল. 190 00:10:03,000 --> 00:10:07,000 কিন্তু যখন আমরা মঞ্চে সাজানো সংখ্যার ধারণা প্রবর্তন লাইভ গত সপ্তাহে 191 00:10:07,000 --> 00:10:09,000 তারপর আমরা যাচ্ছে মধ্যম যাও এই সহজাত প্রবৃত্তি ছিল, 192 00:10:09,000 --> 00:10:13,000 যা সময়ে আমরা একটি আকার বা সাইজ 4 4 আরেকটি তালিকা ছোট তালিকা ছিল, 193 00:10:13,000 --> 00:10:17,000 এবং তারপর আমরা সঠিক একই সমস্যা হয়েছে, যাতে আমরা বারংবার, পুনরাবৃত্তি, পুনরাবৃত্তি. 194 00:10:17,000 --> 00:10:19,000 অন্য কথায়, আমরা recursed. 195 00:10:19,000 --> 00:10:24,000 আপনাকে ধন্যবাদ আমাদের 3 স্বেচ্ছাসেবীকে খুব এখানে আমাদের সঙ্গে recursion প্রদর্শক জন্য. 196 00:10:24,000 --> 00:10:28,000 >> এর যদি আমরা এখন এই না আরো কিছু করতে পারেন কংক্রিট দেখতে দিন 197 00:10:28,000 --> 00:10:30,000 একটি সমস্যা যে আবার আমরা চমত্কার সহজে যেত না সমাধান, 198 00:10:30,000 --> 00:10:34,000 কিন্তু আমরা এই একটি মৌলিক রূপায়ণকারী যাও পদবিন্যাস পাথর হিসাবে এটা ব্যবহার করব. 199 00:10:34,000 --> 00:10:37,000 যদি আমি সংখ্যার একটি গুচ্ছ এর সঙ্কলন গনা করতে চান, 200 00:10:37,000 --> 00:10:39,000 উদাহরণস্বরূপ, যদি আপনি 3 নম্বর পাস, 201 00:10:39,000 --> 00:10:42,000 আমি আপনাকে সিগমা 3 মূল্য দিতে চান, 202 00:10:42,000 --> 00:10:46,000 তাই 3 সমষ্টি + 2 + 1 + 0. 203 00:10:46,000 --> 00:10:48,000 আমি উত্তর 6 ফিরে পেতে চাই, 204 00:10:48,000 --> 00:10:51,000 তাই আমরা এই সিগমা ফাংশন, এই সঙ্কলন ফাংশন বাস্তবায়ন করব 205 00:10:51,000 --> 00:10:54,000 আবার, ইনপুট মধ্যে, নেয়, এবং তারপর সঙ্কলন ফেরত্ 206 00:10:54,000 --> 00:10:57,000 যে সব নম্বর উপায় নিচে 0. 207 00:10:57,000 --> 00:10:59,000 আমরা কি এই চমত্কার সহজভাবে অধিকার, হতে পারে? 208 00:10:59,000 --> 00:11:01,000 আমরা looping গঠন কিছু সঙ্গে এই যেত না, 209 00:11:01,000 --> 00:11:04,000 তাই আমাকে এগিয়ে যান এবং এই শুরু. 210 00:11:04,000 --> 00:11:07,000 >> Stdio.h অন্তর্ভুক্ত. 211 00:11:07,000 --> 00:11:09,000 আমাকে প্রধান করে নিজেকে এখানে কাজ পেতে. 212 00:11:09,000 --> 00:11:12,000 চলুন শুরু করা যাক sigma.c হিসাবে এই সংরক্ষণ করুন. 213 00:11:12,000 --> 00:11:14,000 তারপর আমি এখানে ঢুকা যাচ্ছে, এবং করছি আমি কোন int n ডিক্লেয়ার চলেছি, 214 00:11:14,000 --> 00:11:18,000 এবং আমি যখন নিম্নলিখিত ব্যবহারকারী সহযোগিতা না করতে যাচ্ছি. 215 00:11:18,000 --> 00:11:22,000 যদিও ব্যবহারকারী একটি ধনাত্মক সংখ্যা সম্পর্কে দেওয়া না 216 00:11:22,000 --> 00:11:26,000 সম্পর্কে এগিয়ে যান এবং n = GetInt জন্য তাদের অনুরোধ জানানো যাক, 217 00:11:26,000 --> 00:11:28,000 এবং আমাকে তাদের কি হিসাবে কিছু নির্দেশাবলী প্রদান করে, 218 00:11:28,000 --> 00:11:33,000 তাই printf ("ইতিবাচক পূর্ণসংখ্যা দয়া করে"). 219 00:11:33,000 --> 00:11:39,000 শুধু তাই কিছু ভালো তুলনামূলকভাবে সহজ যে সময় আমরা লাইন 14 আঘাত 220 00:11:39,000 --> 00:11:42,000 আমরা এখন একটি ইতিবাচক n মধ্যে সম্ভবতঃ পূর্ণসংখ্যা আছে. 221 00:11:42,000 --> 00:11:44,000 >> এখন এর সাথে কিছু করতে দিন. 222 00:11:44,000 --> 00:11:50,000 সম্পর্কে এগিয়ে যান এবং সঙ্কলন হিসাব করা যাক, তাই int-যোগফল = সিগমা (ঢ). 223 00:11:50,000 --> 00:11:54,000 সিগমা শুধুমাত্র সঙ্কলন, তাই আমি শুধু কল্পনাকারী উপায়ে তা লেখা. 224 00:11:54,000 --> 00:11:56,000 আমরা শুধু কল এটা আছে সিগমা করব. 225 00:11:56,000 --> 00:11:58,000 এর সমষ্টি, এখন আমি এবং ফলাফল প্রিন্ট আউট চলেছি, 226 00:11:58,000 --> 00:12:08,000 printf ("সমষ্টি হল% d \ n", সমষ্টি). 227 00:12:08,000 --> 00:12:11,000 এবং তারপর আমি ভাল পরিমাপ জন্য 0 ফিরে আসবেন. 228 00:12:11,000 --> 00:12:15,000 আমরা আকর্ষণীয় অংশ ছাড়া করেছি যা এই প্রোগ্রামের প্রয়োজন সম্পন্ন, 229 00:12:15,000 --> 00:12:18,000 যা আসলে সিগমা ফাংশন বাস্তবায়ন হয়. 230 00:12:18,000 --> 00:12:22,000 >> আমাকে নীচে যেতে এখানে নিচে, এবং ফাংশন সম্পর্কে সিগমা ঘোষণা করা যাক. 231 00:12:22,000 --> 00:12:26,000 এটি একটি পরিবর্তনশীল টাইপ পূর্ণসংখ্যা যে এর নিতে না এর, 232 00:12:26,000 --> 00:12:30,000 এবং কি ধরনের তথ্য আমি সম্ভবতঃ সিগমা থেকে প্রত্যাবর্তন করতে চান? 233 00:12:30,000 --> 00:12:34,000 Int, কারণ আমি এটা লাইন 15 আমার প্রত্যাশার সাথে মেলাতে চান. 234 00:12:34,000 --> 00:12:37,000 এখানে ইন আমাকে এগিয়ে যান এবং এই বাস্তবায়ন 235 00:12:37,000 --> 00:12:41,000 একটি চমত্কার সহজবোধ্য উপায়. 236 00:12:41,000 --> 00:12:45,000 >> এর এগিয়ে যান এবং = 0 বলতে int-সমষ্টি করা যাক, 237 00:12:45,000 --> 00:12:47,000 এবং এখন আমি লুপ জন্য একটু এখানে আছে যেতে চলেছি 238 00:12:47,000 --> 00:12:50,000 যে ভালো কিছু বলতে হচ্ছে, 239 00:12:50,000 --> 00:13:01,000 জন্য (int i = 0; আমি <= নম্বর; i + +) সমষ্টি + = তোমার. 240 00:13:01,000 --> 00:13:05,000 এবং তারপর আমি সমষ্টি ফিরে যাচ্ছি. 241 00:13:05,000 --> 00:13:07,000 আমি উপায় যে কোনো সংখ্যক এই বাস্তবায়িত হতে পারে. 242 00:13:07,000 --> 00:13:09,000 আমি যখন একটি লুপ ব্যবহার করা যেতে পারে. 243 00:13:09,000 --> 00:13:11,000 আমি এড়ানো সমষ্টি ভেরিয়েবল ব্যবহার করে যদি সত্যিই আমি চেয়েছিলেন যাও থাকতে পারে, 244 00:13:11,000 --> 00:13:15,000 কিন্তু সংক্ষিপ্ত, আমরা একটি ফাংশন যে যদি আমি না গুবলেট ঘোষণা যোগফল হয় 0 আছে. 245 00:13:15,000 --> 00:13:18,000 তারপর থেকে এটি 0 iterates নম্বর মাধ্যমে তার উপরে, 246 00:13:18,000 --> 00:13:23,000 এবং প্রতিটি পুনরাবৃত্তির এটা সমষ্টি যা বর্তমান মান যোগ করে এবং তারপর সমষ্টি ফেরৎ. 247 00:13:23,000 --> 00:13:25,000 >> এখন, এখানে আছে সামান্য অপ্টিমাইজেশান. 248 00:13:25,000 --> 00:13:29,000 এটি সম্ভবত একটি নষ্ট পদক্ষেপ, কিন্তু তাই এটি হতে. যে সূক্ষ্ম জন্য এখন. 249 00:13:29,000 --> 00:13:32,000 আমরা অন্তত হচ্ছে পুঙ্খানুপুঙ্খ এবং তার উপরে 0 সমস্ত উপায় যাচ্ছে. 250 00:13:32,000 --> 00:13:34,000 হার্ড খুব সুন্দর এবং সহজবোধ্য নেই, 251 00:13:34,000 --> 00:13:37,000 কিন্তু এটি সক্রিয় যে সিগমা ফাংশন সঙ্গে আমরা একই সুযোগ আছে 252 00:13:37,000 --> 00:13:39,000 হিসাবে আমরা মঞ্চে এখানে কি. 253 00:13:39,000 --> 00:13:42,000 পর্যায় মাত্র আমরা গণনা কতজন লোক ছিল পরের যাও সম্পর্কে, 254 00:13:42,000 --> 00:13:47,000 কিন্তু এর পরিবর্তে যদি আমরা সংখ্যা 3 + 2 + 1 টি গণনা চেয়েছিলেন 255 00:13:47,000 --> 00:13:51,000 নিচে 0 আমরা একটি ফাংশন একভাবে পান্ট পারা 256 00:13:51,000 --> 00:13:55,000 যে পরিবর্তে আমি হচ্ছে recursive হিসাবে বর্ণনা করব. 257 00:13:55,000 --> 00:13:57,000 এখানে আসুন একটি দ্রুত বৈধতা না পরীক্ষা করুন এবং নিশ্চিত আমি গুবলেট না করা. 258 00:13:57,000 --> 00:14:00,000 >> আমি জানি এই প্রোগ্রামের মধ্যে অন্তত এক জিনিস যা আমি ভুল না কি আছে. 259 00:14:00,000 --> 00:14:04,000 যখন আমি আঘাত লিখুন আমি আমার এ yelling কোন ধরনের পেতে যাচ্ছি? 260 00:14:04,000 --> 00:14:06,000 আমি কি am going to সম্পর্কে এ yelled করা হবে? 261 00:14:06,000 --> 00:14:11,000 হাঁ, আমি প্রোটোটাইপ ভুলে গেছি, তাই আমি একটি ফাংশন লাইন 15 নামক সিগমা ব্যবহার করছি, 262 00:14:11,000 --> 00:14:16,000 কিন্তু এটি লাইন 22 পর্যন্ত, আর তাই ঘোষণা না আমি ভাল proactively আপ এখানে যান 263 00:14:16,000 --> 00:14:22,000 এবং একটি প্রোটোটাইপ, ঘোষণা এবং আমি int-সিগমা (int-নম্বর) বলবো, এবং যে এটি. 264 00:14:22,000 --> 00:14:24,000 এটা নীচে বাস্তবায়িত হচ্ছে. 265 00:14:24,000 --> 00:14:27,000 >> অথবা অন্য কোনো উপায় আমি এই সমাধান করতে পারে, 266 00:14:27,000 --> 00:14:30,000 আমি সেখানে আপ ফাংশন, সরানো যা খারাপ হয় না পারে, 267 00:14:30,000 --> 00:14:32,000 কিন্তু অন্তত যখন আপনার কর্মসূচী দীর্ঘ পেতে শুরু উন্মুক্তভাবে,, 268 00:14:32,000 --> 00:14:35,000 আমি মনে করি সর্বদা শীর্ষে প্রধান তার মধ্যে কিছু মূল্যবান হতে পারে 269 00:14:35,000 --> 00:14:38,000 পাঠক মধ্যে যাতে আপনি ফাইলটি খুলুন এবং তারপরে সঙ্গে সঙ্গে দেখতে পারেন 270 00:14:38,000 --> 00:14:40,000 এটি মাধ্যমে অনুসন্ধান করেও কি প্রোগ্রাম করছে 271 00:14:40,000 --> 00:14:42,000 যে প্রধান ফাংশন খুঁজছি. 272 00:14:42,000 --> 00:14:49,000 এর আমার টার্মিনাল উইন্ডোতে নিচে এখানে যাওয়া যাক, সিগমা সিগমা তৈরীর চেষ্টা করা, 273 00:14:49,000 --> 00:14:51,000 এবং আমি এখানে মাতাল আপ খুব. 274 00:14:51,000 --> 00:14:55,000 ফাংশন GetInt এর অন্তর্নিহিত ডিক্ল্যারেশন মানে আমি কি কি করতে বিস্মৃত করেছি? 275 00:14:55,000 --> 00:14:57,000 [শ্রবণাতীত-ছাত্র] 276 00:14:57,000 --> 00:15:00,000 গুড, যাতে দৃশ্যত: একটি সাধারণ ভুল, তাই আসুন এখানে এই আপ করা, 277 00:15:00,000 --> 00:15:04,000 cs50.h, এবং এখন আমি কি আমার টার্মিনাল উইন্ডোতে ফিরে যান. 278 00:15:04,000 --> 00:15:08,000 >> আমি পর্দা পরিষ্কার, এবং আমি সিগমা করা পুন: প্রকাশ করব করব. 279 00:15:08,000 --> 00:15:11,000 মনে আছে কম্পাইল যাও. আমাকে এখন সিগমা চালানো. 280 00:15:11,000 --> 00:15:15,000 আমি 3 নম্বর, এবং টাইপ 6 আমি পাইনি, তাই করব কঠোর চেক নয়, 281 00:15:15,000 --> 00:15:18,000 কিন্তু অন্তত মনে হয় প্রথমে নজরে কাজ করা হবে, কিন্তু এখন এর যাক একান্তে চেরা, 282 00:15:18,000 --> 00:15:21,000 এবং প্রকৃতপক্ষে এর যাক recursion ধারণা লিভারেজ, আবার, 283 00:15:21,000 --> 00:15:24,000 খুব সহজ কনটেক্সট যাতে মধ্যে কয়েক সপ্তাহের সময় 284 00:15:24,000 --> 00:15:27,000 যখন আমরা অ্যারে তুলনায় শুরু কল্পনাকারী ডাটা স্ট্রাকচার অন্বেষণ 285 00:15:27,000 --> 00:15:30,000 আমরা টুলকিট অন্য সাথে যা আছে হাতিয়ার 286 00:15:30,000 --> 00:15:33,000 যারা ডাটা স্ট্রাকচার হিসাবে আমরা দেখতে পাবেন নিপূণভাবে. 287 00:15:33,000 --> 00:15:36,000 এই পদ্ধতির পুনরাবৃত্ত, লুপ-ভিত্তিক ব্যবস্থা. 288 00:15:36,000 --> 00:15:39,000 >> সম্পর্কে পরিবর্তে যাক এখন এই না. 289 00:15:39,000 --> 00:15:44,000 সম্পর্কে বলার পরিবর্তে যে সংখ্যক সঙ্কলন 290 00:15:44,000 --> 00:15:48,000 রূষ্ট যাও 0 সত্যিই হয় একই জিনিস 291 00:15:48,000 --> 00:15:53,000 নম্বর + সিগমা (নম্বর - 1). 292 00:15:53,000 --> 00:15:57,000 ঠিক এ পর্যায়ে মত অন্য কথায়, আমি punted জনের পরের যাও সম্পর্কে প্রতিটি, 293 00:15:57,000 --> 00:16:00,000 ঘুরে এবং তারা রাখা punting পর্যন্ত পরিশেষে আমরা Willy এ তলানিতে আউট, 294 00:16:00,000 --> 00:16:03,000 ছিল যারা 0 ভালো হার্ড কোড উত্তরটি ফেরত. 295 00:16:03,000 --> 00:16:07,000 এখানে এখন আমরা একভাবে সিগমা করছি punting 296 00:16:07,000 --> 00:16:10,000 একই ফাংশন মূলত হিসাবে বলা হয়, কিন্তু কী অন্তর্দৃষ্টি এখানে 297 00:16:10,000 --> 00:16:12,000 যে অভিন্নরুপে আমরা কলিং সিগমা করছি না. 298 00:16:12,000 --> 00:16:14,000 আমরা কথা প্রসঙ্গে n না হন. 299 00:16:14,000 --> 00:16:17,000 আমরা সংখ্যায় পরিষ্কারভাবে পার করছি - 1 টি, 300 00:16:17,000 --> 00:16:20,000 তাই সামান্য ছোট সমস্যা, সামান্য কম সমস্যা. 301 00:16:20,000 --> 00:16:23,000 >> দুর্ভাগ্যবসত, এই এখনও, পুরোপুরি একটি সমাধান না এবং আগে আমরা স্থির করা 302 00:16:23,000 --> 00:16:26,000 সুস্পষ্ট হিসাবে কি আপনি কয়েকটি জাম্পিং হতে পারে আউট 303 00:16:26,000 --> 00:16:28,000 আমাকে এগিয়ে যান এবং পুন: প্রকাশ করা. 304 00:16:28,000 --> 00:16:30,000 এটি ঠিক আছে কম্পাইল করা হচ্ছে. 305 00:16:30,000 --> 00:16:32,000 আমাকে 6 সঙ্গে সিগমা পুন: প্রকাশ. 306 00:16:32,000 --> 00:16:37,000 ওহো, আমাকে 6 সঙ্গে সিগমা পুন: প্রকাশ. 307 00:16:37,000 --> 00:16:42,000 আমরা এই দেখেছেন এমন অকস্মাৎ শেষ সময় যদিও আগে, হিসাবে ভাল. 308 00:16:42,000 --> 00:16:48,000 কেন আমি এই রহস্যপূর্ণ সেগমেন্টেশন ফল্ট পেতে পারি? হাঁ. 309 00:16:48,000 --> 00:16:50,000 [শ্রবণাতীত-ছাত্র] 310 00:16:50,000 --> 00:16:53,000 কোনো বেস মামলা আছে, এবং আরো নির্দিষ্টভাবে, সম্ভবত কি ঘটেছে? 311 00:16:53,000 --> 00:16:58,000 এটা কি আচরণ একটি উপসর্গ? 312 00:16:58,000 --> 00:17:00,000 এটা বলুন একটু জোরে. 313 00:17:00,000 --> 00:17:02,000 [শ্রবণাতীত-ছাত্র] 314 00:17:02,000 --> 00:17:05,000 এটি একটি অসীম কার্যকরভাবে লুপ, এবং অসীম loops সঙ্গে সমস্যা 315 00:17:05,000 --> 00:17:08,000 যখন তারা এই ক্ষেত্রে recursion জড়িত করা, একটি ফাংশন নিজেই কলিং, 316 00:17:08,000 --> 00:17:10,000 পেনশনের সময় আপনি একটি ফাংশন কল? 317 00:17:10,000 --> 00:17:13,000 ওয়েল, কিভাবে আমরা পাড়া একটি কম্পিউটার মেমরি আউট ফিরে মনে. 318 00:17:13,000 --> 00:17:16,000 আমরা বলেন যে মেমরি এই তাল নামক স্ট্যাকের নীচে যে আছে, 319 00:17:16,000 --> 00:17:19,000 এবং প্রত্যেক সময় আপনি একটি ফাংশন কল একটু বেশি মেমরি করা পরার 320 00:17:19,000 --> 00:17:24,000 এই তথাকথিত স্ট্যাকের যে ফাংশন এর স্থানীয় ভেরিয়েবল অথবা পরামিতি ধারণকারী, 321 00:17:24,000 --> 00:17:27,000 তাই যদি সিগমা সিগমা কল কল কল সিগমা সিগমা 322 00:17:27,000 --> 00:17:29,000  সিগমা কল যেখানে আছে এই গল্প শেষ হবে? 323 00:17:29,000 --> 00:17:31,000 >> তবে, শেষ পর্যন্ত overruns মোট পরিমাণ 324 00:17:31,000 --> 00:17:33,000 স্মৃতি যে আছে তা দেখার জন্য আপনার কম্পিউটারে. 325 00:17:33,000 --> 00:17:37,000 আপনি রেখাংশ যে আপনি মধ্যে থাকার অনুমিত করছি পদদলিত করা, 326 00:17:37,000 --> 00:17:40,000 এবং আপনি এই সেগমেন্টেশন ফল্ট পেতে, কোর ডাম্প করা, 327 00:17:40,000 --> 00:17:43,000 এবং কি কোর ডাম্প করা মানে হল এই যে এখন আমি নামক কোনো ফাইল কোর আছে 328 00:17:43,000 --> 00:17:46,000 যা একটি ফাইল zeros এবং বেশী ধারণকারী 329 00:17:46,000 --> 00:17:49,000 আসলে ভবিষ্যতে diagnostically উপযোগী হতে হবে. 330 00:17:49,000 --> 00:17:52,000 যদি আপনি যেখানে আপনার বাগ সুস্পষ্ট না 331 00:17:52,000 --> 00:17:54,000 আপনি আসলে ফরেনসিক বিশ্লেষণ একটি বিট, তাই কথা বলতে না পারেন, 332 00:17:54,000 --> 00:17:58,000 এই কোর ডাম্প ফাইল, যা, আবার, শুধু একটি zeros এবং বেশী আভা 333 00:17:58,000 --> 00:18:02,000 যে মূলত আপনার প্রোগ্রামের মেমরির মধ্যে রাষ্ট্র প্রতিনিধিত্ব করে 334 00:18:02,000 --> 00:18:05,000 মুহূর্ত এটি এই ভাবে ক্র্যাশ করেছে. 335 00:18:05,000 --> 00:18:11,000 >> এখানে ফিক্স হয় যে আমরা অন্ধভাবে সিগমা ফিরে আসতে পারেন না, 336 00:18:11,000 --> 00:18:14,000 নম্বর + একটি সামান্য কম সমস্যা সিগমা. 337 00:18:14,000 --> 00:18:16,000 আমরা এখানে বেস ক্ষেত্রে কিছু করতে হবে, 338 00:18:16,000 --> 00:18:19,000 এবং সম্ভবত বেস ক্ষেত্রে কি করা উচিত? 339 00:18:19,000 --> 00:18:22,000 [শ্রবণাতীত-ছাত্র] 340 00:18:22,000 --> 00:18:25,000 ঠিক আছে, তাই যতদিন নম্বর ইতিবাচক হয় আমরা আসলে এটা ফেরত দিতে হবে, 341 00:18:25,000 --> 00:18:29,000 অথবা অন্য কোনো উপায় রাখা, যদি সংখ্যা হয়, বলে, <= 0 342 00:18:29,000 --> 00:18:32,000 আপনি কি জানেন যে, আমি এবং এগিয়ে যেতে 0 ফিরে আসবেন, 343 00:18:32,000 --> 00:18:36,000 অনেক ভালো Willy করেছেন, অন্যথায় এবং, আমি আর দেরী না করে চলেছি 344 00:18:36,000 --> 00:18:41,000 এবং এই ফিরে, তাই এটা যে কত খাটো না 345 00:18:41,000 --> 00:18:44,000 তুলনায় সংস্করণ পুনরাবৃত্ত যে আমরা বেত্রাঘাত আপ প্রথম লুপ জন্য একটি ব্যবহার, 346 00:18:44,000 --> 00:18:48,000 কিন্তু লক্ষ্য করা যে এটি লালিত্য এই সাজান আছে. 347 00:18:48,000 --> 00:18:51,000 পরিবর্তে কিছু নম্বর ফিরে এবং এই সব গণিতের করণ 348 00:18:51,000 --> 00:18:54,000 যোগ এবং স্থানীয় ভেরিয়েবল সঙ্গে জিনিষ আপ 349 00:18:54,000 --> 00:18:57,000 এর পরিবর্তে আপনি করছেন এই বলে "ঠিক আছে, যদি এই একটি সুপার সহজ সমস্যা, 350 00:18:57,000 --> 00:19:01,000 ভালো নম্বর হল <0, সম্পর্কে অবিলম্বে 0 ফিরে যাক. " 351 00:19:01,000 --> 00:19:03,000 >> আমরা সমর্থন ঋণাত্মক সংখ্যা বিরক্ত চলুন না, 352 00:19:03,000 --> 00:19:05,000 তাই আমি হার্ড কোড 0 মান যাচ্ছি. 353 00:19:05,000 --> 00:19:08,000 কিন্তু অন্যথায়, summing এই ধারণা বাস্তবায়ন 354 00:19:08,000 --> 00:19:11,000 এই সংখ্যার সব একসাথে কার্যকরভাবে একটি ছোট কামড় নিতে পারেন 355 00:19:11,000 --> 00:19:14,000 অনেক ভালো সমস্যা আউট, আমরা কি এখানে মঞ্চে, 356 00:19:14,000 --> 00:19:18,000 তারপর পান্ট সমস্যা পরবর্তী ব্যক্তির বিশ্রাম, 357 00:19:18,000 --> 00:19:20,000 কিন্তু পরবর্তী ব্যক্তির এই ক্ষেত্রে হয় নিজেকে. 358 00:19:20,000 --> 00:19:22,000 এটি একটি অভিন্নরুপে নামে ফাংশন. 359 00:19:22,000 --> 00:19:25,000 শুধু এটি পাস প্রতিটি সময় একটি ছোট এবং ছোট ছোট সমস্যা, 360 00:19:25,000 --> 00:19:28,000 এবং যদিও আমরা বেশ বিধিবদ্ধ জিনিষ কোড না এখানে আছে 361 00:19:28,000 --> 00:19:33,000 এটা ঠিক কি টেলিফোন বইয়ের সঙ্গে সপ্তাহ 0 সালে যাওয়া. 362 00:19:33,000 --> 00:19:36,000 এটি ঠিক কি গত ২ সপ্তাহের মধ্যে ছিল যাচ্ছে Sean সঙ্গে 363 00:19:36,000 --> 00:19:39,000 এবং সঙ্গে সংখ্যার অনুসন্ধানের জন্য আমাদের বিক্ষোভ. 364 00:19:39,000 --> 00:19:42,000 এটি একটি সমস্যা এবং এর গ্রহণ এটা বিভাজক আবার এবং আবার. 365 00:19:42,000 --> 00:19:44,000 >> অন্য কথায়, অনুবাদের মধ্যে আছে এখন একটি উপায় 366 00:19:44,000 --> 00:19:47,000 এই বাস্তব জগতে কনস্ট্রাক্ট, এই মাত্রা কনস্ট্রাক্ট 367 00:19:47,000 --> 00:19:51,000 এবং বিভক্ত করা জেতা এবং কিছু করছেন আবার এবং আবার 368 00:19:51,000 --> 00:19:56,000 কোড হবে, তাই এই কিছু সময় আমরা আবার দেখতে হবে. 369 00:19:56,000 --> 00:20:00,000 একটি সরাইয়া হিসাবে এখন, আপনি যদি নতুন হন recursion যাও আপনি বোঝেন এখন অন্তত উচিত 370 00:20:00,000 --> 00:20:02,000 কেন এই মজার. 371 00:20:02,000 --> 00:20:05,000 আমি google.com এ যাব করছি, 372 00:20:05,000 --> 00:20:17,000 এবং আমি কিছু টিপস এবং ট্রিকস recursion জন্য অনুসন্ধান যাচ্ছি, লিখুন. 373 00:20:17,000 --> 00:20:21,000 ব্যক্তি পরের আপনাকে যদি তারা ঠিক এখন হাস্যময় ছিল না বলুন. 374 00:20:21,000 --> 00:20:23,000 আপনি কি recursion মানে? 375 00:20:23,000 --> 00:20:25,000 আপনি কি বোঝাতে চেয়েছেন-অই আছে, আমরা যান. 376 00:20:25,000 --> 00:20:28,000 ঠিক আছে, এখন যে সবাই বাকি. 377 00:20:28,000 --> 00:20:30,000 একটু ইস্টার ডিম Google-এ এম্বেড কোথাও আছে. 378 00:20:30,000 --> 00:20:33,000 হিসাবে একটি সরাইয়া, সংযোগগুলি আমরা অবশ্যই এর ওয়েবসাইটে প্রকাশ করা এক 379 00:20:33,000 --> 00:20:36,000 আজকের জন্য শুধু বিভিন্ন বাছাই আলগোরিদিম এই গ্রিড, 380 00:20:36,000 --> 00:20:39,000 কিছু যা আমরা গত সপ্তাহে দিকে তাকিয়ে, কিন্তু কি এই কল্পনা প্রায় এর চমৎকার 381 00:20:39,000 --> 00:20:43,000 হিসাবে আপনি বিভিন্ন সংক্রান্ত অ্যালগোরিদম জিনিষ আপনার মন চারপাশে মোড়ানো চেষ্টা 382 00:20:43,000 --> 00:20:46,000 উত্তরগুলি জানেন যে আপনি বিভিন্ন ধরনের সঙ্গে এখন খুব সহজেই শুরু করতে পারেন. 383 00:20:46,000 --> 00:20:50,000 ইনপুট সমস্ত বিপরীত, ইনপুট বেশিরভাগই সাজানো, ইনপুট এবং র্যান্ডম তাই ঘোষণা. 384 00:20:50,000 --> 00:20:53,000 হিসাবে আপনি, আবার চেষ্টা করুন, আপনার মনের মধ্যে এই জিনিস পার্থক্য 385 00:20:53,000 --> 00:20:57,000 যে বুঝতে লেকচার পৃষ্ঠায় কোর্স এর ওয়েবসাইটে এই URL-এ 386 00:20:57,000 --> 00:21:00,000 আপনি তাদের মাধ্যমে কিছু কারণ হয়ত সাহায্য করতে পারবে. 387 00:21:00,000 --> 00:21:05,000 >> আজ আমরা অবশেষে একটি সময় থেকে ফিরে এই সমস্যার সমাধান পেতে, 388 00:21:05,000 --> 00:21:08,000 যা ছিল যে ঠিক এই মাপের swap ফাংশন কাজ না করে, 389 00:21:08,000 --> 00:21:12,000 এবং কি ছিল এই ফাংশন ও swap 'র সঙ্গে মৌলিক সমস্যা, 390 00:21:12,000 --> 00:21:15,000 লক্ষ্য ছিল যা আবার,, একটি মান এখানে এবং এখানে বিনিময় 391 00:21:15,000 --> 00:21:17,000 যেমন এই যে কি হবে? 392 00:21:17,000 --> 00:21:20,000 আসলে এই কাজ করছে না. কেন? 393 00:21:20,000 --> 00:21:22,000 হাঁ. 394 00:21:22,000 --> 00:21:28,000 [শ্রবণাতীত-ছাত্র] 395 00:21:28,000 --> 00:21:31,000 ঠিক, এই bugginess জন্য ব্যাখ্যা 396 00:21:31,000 --> 00:21:34,000 সহজভাবে ছিল কারণ যখন আপনি সি ইন ফাংশান কল 397 00:21:34,000 --> 00:21:38,000 এবং যারা ফাংশন নিতে এবং a ও b এখানে ভালো আর্গুমেন্ট,, 398 00:21:38,000 --> 00:21:42,000 আপনি যাহা মান আপনি যে ফাংশন প্রদান করছেন কপি মধ্যে ক্ষণস্থায়ী হয়. 399 00:21:42,000 --> 00:21:46,000 আপনি নিজেদের মূল মান প্রদান করা হয় না, 400 00:21:46,000 --> 00:21:49,000 তাই আমরা buggyc পরিপ্রেক্ষিতে এই দেখেছি, 401 00:21:49,000 --> 00:21:52,000 buggy3.c, যা একটি ভালো সামান্য কিছু লাগছিল. 402 00:21:52,000 --> 00:21:57,000 >> প্রত্যাহার করা ছিল যে আমরা এক্স এবং ওয়াই 1 এবং 2 যাও সক্রিয়া যথাক্রমে,. 403 00:21:57,000 --> 00:21:59,000 এরপর আমরা প্রিন্ট করে তারা কি ছিল. 404 00:21:59,000 --> 00:22:03,000 আমি পরে দাবি করে যে আমি x, y মাপের একটি swap কল করে তাদের ছিল সোয়াপিং. 405 00:22:03,000 --> 00:22:06,000 কিন্তু সমস্যা ছিল যে সোয়াপিং কাজ, 406 00:22:06,000 --> 00:22:10,000 কিন্তু শুধুমাত্র swap-সুযোগ নিজে কাজ. 407 00:22:10,000 --> 00:22:13,000 আমরা যত শীঘ্র লাইন 40 যারা মান আনা আঘাত 408 00:22:13,000 --> 00:22:16,000 দূরে নিক্ষিপ্ত হয়েছিল, তাই কিছুই 409 00:22:16,000 --> 00:22:21,000 আসল ফাংশন প্রকৃতপক্ষে প্রধান পরিবর্তিত হয়েছিল এ সব, 410 00:22:21,000 --> 00:22:26,000 তাই আপনি যদি মনে ফিরে যাও কি আমাদের মত এই মেমরি শর্ত হিসাবে দেখায় তারপর 411 00:22:26,000 --> 00:22:29,000 যদি এই বোর্ডের বাম দিকে উপস্থাপন- 412 00:22:29,000 --> 00:22:33,000 এবং আমি সবার জন্য আমার ভাল দেখতে চেষ্টা করব এই যদি এই বোর্ডের বাম দিকে 413 00:22:33,000 --> 00:22:37,000 প্রতিনিধিত্ব করে, আপনার RAM-র বলে, এবং এই স্ট্যাকের উপায় আপ উপর বাড়া হবে, 414 00:22:37,000 --> 00:22:43,000 এবং আমরা প্রধান মত একটি ফাংশন কল, এবং প্রধান 2 স্থানীয় ভেরিয়েবল, এক্স এবং ওয়াই আছে, 415 00:22:43,000 --> 00:22:48,000 এর এখানে x হিসাবে যারা বর্ণনা দেওয়া, এবং এর যাক y হিসাবে এখানে এইসব বর্ণনা, 416 00:22:48,000 --> 00:22:55,000 এবং এর মান 1 এবং 2 রাখা যাক, তাই এখানে এই মূল, 417 00:22:55,000 --> 00:22:58,000 এবং যখন প্রধান ফাংশন কল করা swap অপারেটিং সিস্টেম 418 00:22:58,000 --> 00:23:02,000 দেয় স্ট্যাকের উপর মেমরি ও swap 'র নিজস্ব জমিতে সারিবদ্ধভাবে পড়ে - থাকা কাটা ফসল ফাংশন, 419 00:23:02,000 --> 00:23:04,000 তার স্ট্যাকের উপর নিজের ফ্রেম, তাই কথা বলতে. 420 00:23:04,000 --> 00:23:08,000 এছাড়াও এই ints জন্য 32 বিট বরাদ্দ. 421 00:23:08,000 --> 00:23:11,000 এটি তাদের একটি এবং বো কল ঘটবে, কিন্তু এটা সম্পূর্ণই নির্বিচারে. 422 00:23:11,000 --> 00:23:13,000 তা যাই হোক না কেন এটি করতে চায় বলা যেতে পারে, কিন্তু কি যখন প্রধান 423 00:23:13,000 --> 00:23:19,000 কল করতে swap হল এই 1 লাগে, সেখানে একটি কপি রাখে, সেখানে একটি কপি রাখে. 424 00:23:19,000 --> 00:23:23,000 >> 1 জন swap 'র মধ্যে স্থানীয় পরিবর্তনশীল এখন পর্যন্ত যদিও, বলা কি? >> Tmp. 425 00:23:23,000 --> 00:23:27,000 Tmp, তাই আমাকে অন্য নিজেকে এখানে 32 বিট দিতে, 426 00:23:27,000 --> 00:23:29,000 এবং কি আমি এই ফাংশন কি? 427 00:23:29,000 --> 00:23:34,000 আমি একটি int-tmp পায়, তাই একটা 1 আছে, তাই আমি এই কি শেষ যখন আমরা এই উদাহরণ সঙ্গে খেলেছে. 428 00:23:34,000 --> 00:23:39,000 তারপর একটি বো পায়, সুতরাং 2 b হয়, তাই এখন এই পরিণত 2, 429 00:23:39,000 --> 00:23:42,000 এবং এখন খ পায় temp, তাই temp 1 টি, 430 00:23:42,000 --> 00:23:44,000 তাই এখন বো হয়ে এই. 431 00:23:44,000 --> 00:23:46,000 দারুণ. এটা কাজ করে. 432 00:23:46,000 --> 00:23:49,000 কিন্তু তারপর যত তাড়াতাড়ি ফাংশন আয় 433 00:23:49,000 --> 00:23:52,000 মেমরি ও swap 'র এর কার্যকরভাবে disappears যাতে এটি পুনঃব্যবহৃত করা যায় 434 00:23:52,000 --> 00:23:58,000 ভবিষ্যতে অন্যান্য ফাংশন দ্বারা, এবং প্রধান হয় সম্ভবত সম্পূর্ণরূপে অপরিবর্তিত. 435 00:23:58,000 --> 00:24:00,000 আমরা মৌলিকভাবে এই সমস্যা সমাধানের একটি উপায় প্রয়োজন, 436 00:24:00,000 --> 00:24:03,000 এবং আজকে আমরা পরিশেষে এই করছেন যেখানে একটি উপায় হবে 437 00:24:03,000 --> 00:24:06,000 আমরা কিছু নামক একটি পয়েন্টার পরিচয় করিয়ে দিতে পারেন. 438 00:24:06,000 --> 00:24:09,000 এটা পরিনত হয় যে আমরা এই সমস্যার সমাধান করতে পারেন 439 00:24:09,000 --> 00:24:12,000 দ্বারা ক্ষণস্থায়ী x এবং y কপি না 440 00:24:12,000 --> 00:24:18,000 কিন্তু এর পরিবর্তে কি কথা প্রসঙ্গে দ্বারা, আপনি swap-র কার্যকারিতা যাও না, মনে হয়? 441 00:24:18,000 --> 00:24:20,000 হাঁ, আমার ঠিকানা কি? 442 00:24:20,000 --> 00:24:22,000 আমরা সত্যিই আছে সায়ীদ ঠিকানা সম্বন্ধে অনেক বিষদভাবে না, 443 00:24:22,000 --> 00:24:25,000 কিন্তু যদি এই বিদ্যালয়ে লিপির জন্য তক্তা আমার কম্পিউটার এর মেমরি উপস্থাপন 444 00:24:25,000 --> 00:24:28,000 আমরা অবশ্যই শুরু আমার RAM-র মধ্যে বাইট সংখ্যায়ন পারে 445 00:24:28,000 --> 00:24:31,000 এবং বলা হয় এই বাইট # 1, এই বাইট # 2, বাইট # 3, 446 00:24:31,000 --> 00:24:35,000 # 4 বাইট, বাইট # ... 2 বিলিয়ন যদি আমি উপস্থিত RAM-র 2 গিগাবাইট আছে, 447 00:24:35,000 --> 00:24:38,000 তাই আমরা অবশ্যই কিছু অবাধ সংখ্যায়ন যোজনা আপ আসতে পারে 448 00:24:38,000 --> 00:24:41,000 আমার জন্য সব কম্পিউটার এর মেমরি পৃথক বাইট. 449 00:24:41,000 --> 00:24:43,000 >> যদি পরিবর্তে যখন আমি কল করতে swap 450 00:24:43,000 --> 00:24:47,000 x এবং y কপি মধ্যে বদলে পাস 451 00:24:47,000 --> 00:24:51,000 কেন x এখানে ঠিকানা পরিবর্তে আমি না পাস, 452 00:24:51,000 --> 00:24:55,000 y এখানে ঠিকানা, মূলত পোস্টাল ঠিকানা 453 00:24:55,000 --> 00:24:59,000 এক্স এবং ওয়াই তারপর কারণ, swap যদি তিনি অবগত এর 454 00:24:59,000 --> 00:25:01,000 এর x এবং y এর মেমরি ঠিকানা, 455 00:25:01,000 --> 00:25:04,000 তারপর, swap যদি আমরা প্রশিক্ষণ অল্প তাকে, 456 00:25:04,000 --> 00:25:07,000 তিনি সম্ভাব্য যে ঠিকানা যাও, তাই কথা বলতে চালাতে পারে, 457 00:25:07,000 --> 00:25:11,000 x, সেখানে নম্বর পরিবর্তন, তাহলে y ঠিকানা চালাতে, 458 00:25:11,000 --> 00:25:16,000 সংখ্যা আছে পরিবর্তন, এমনকি যারা মান নিজেকে কপি আসলে না পেয়ে, 459 00:25:16,000 --> 00:25:19,000 সুতরাং যদিও এই সম্পর্কে আমরা হচ্ছে এর প্রধান মেমরি হিসাবে সায়ীদ 460 00:25:19,000 --> 00:25:23,000 এবং এই হিসাবে হচ্ছে মেমরি ও swap 'র এর শক্তিশালী এবং C-এর বিপজ্জনক অংশ 461 00:25:23,000 --> 00:25:28,000 যে কোনো ফাংশন মেমরি স্পর্শ কোথাও কম্পিউটার পারেন, 462 00:25:28,000 --> 00:25:32,000 এবং এই শক্তিশালি যে আপনি সি ইন কম্পিউটার প্রোগ্রাম দিয়ে খুব অভিনব জিনিস করতে পারেন 463 00:25:32,000 --> 00:25:36,000 এটি বিপজ্জনক কারণ আপনি স্ক্রু আপ খুব সহজেই করতে পারেন. 464 00:25:36,000 --> 00:25:39,000 আসলে, প্রোগ্রামের জন্য সবচেয়ে সাধারণ উপায় এই দিন এক শোষণ করা 465 00:25:39,000 --> 00:25:42,000 এখনও জন্য একজন প্রোগ্রামার না বুঝতে যাও 466 00:25:42,000 --> 00:25:45,000 তিনি একটি তথ্য করার অনুমতি দেয় না 467 00:25:45,000 --> 00:25:49,000 মেমরির মধ্যে একটি অবস্থান ছিল না যে উদ্দেশ্যে করা হবে. 468 00:25:49,000 --> 00:25:51,000 >> উদাহরণস্বরূপ, সে আকার 10 শ্রেণীবিন্যাস ঘোষণা 469 00:25:51,000 --> 00:25:56,000 কিন্তু ঘটনাক্রমে তখন মেমরি যে অ্যারের মধ্যে 11 বাইট চেষ্টা করা, 470 00:25:56,000 --> 00:25:59,000 এবং আপনি শুরু অংশে মেমরি যা আর কার্যকর নেই স্পর্শ. 471 00:25:59,000 --> 00:26:02,000 শুধু প্রাসঙ্গিক এই যাও, আপনি কিছু জানতে পারে যে 472 00:26:02,000 --> 00:26:06,000 প্রায়ই সফ্টওয়্যার সিরিয়াল নম্বর বা নিবন্ধন নির্দেশক জন্য অনুরোধ জানানো, 473 00:26:06,000 --> 00:26:08,000 ফটোশপ এবং শব্দ এবং ভালো প্রোগ্রাম. 474 00:26:08,000 --> 00:26:12,000 বিদ্যমান ফাটল আছে, হিসাবে আপনি কিছু জানেন, যেখানে আপনি একটি অনলাইন সামান্য প্রোগ্রাম রান করতে পারেন, 475 00:26:12,000 --> 00:26:14,000 এবং voila, কোন একটি সিরিয়াল নম্বর জন্য আরো অনুরোধ. 476 00:26:14,000 --> 00:26:16,000 কিভাবে যে কাজ করছে? 477 00:26:16,000 --> 00:26:21,000 অনেক ক্ষেত্রে এই জিনিষ শুধু কম্পিউটারের হয় ফাইন্ডিং 478 00:26:21,000 --> 00:26:24,000 কম্পিউটার এর প্রকৃত zeros এবং বেশী টেক্সট খন্ডের 479 00:26:24,000 --> 00:26:28,000 যেখানে যে ফাংশন যেখানে সিরিয়াল নম্বর অনুরোধ করা হয়, 480 00:26:28,000 --> 00:26:31,000 এবং আপনি যে স্থান, মুছে ফেলা বা যখন প্রোগ্রাম চালানো সম্ভব 481 00:26:31,000 --> 00:26:33,000 আপনি আউট যেখানে আসলে কী সংরক্ষিত হয় জিনিসটা করতে পারেন 482 00:26:33,000 --> 00:26:37,000 কিছু ব্যবহার নামক একটি ডিবাগার, সফ্টওয়্যার এবং আপনি যে উপায় ফাটল পারেন. 483 00:26:37,000 --> 00:26:40,000 ফলে আগামী কয়েকদিনের জন্য যে এটা আমাদের উদ্দেশ্য বলতে হয় না, 484 00:26:40,000 --> 00:26:42,000 কিন্তু এটা খুবই বাস্তব ramifications আছে. 485 00:26:42,000 --> 00:26:45,000 যে একটি সফ্টওয়্যার চুরি জড়িত করা হবে, 486 00:26:45,000 --> 00:26:47,000 কিন্তু এর রয়েছে সমগ্র মেশিনে আপস. 487 00:26:47,000 --> 00:26:50,000 >> আসলে, যখন ওয়েবসাইটের এই দিন শোষিত হয় 488 00:26:50,000 --> 00:26:53,000 এবং বোঝাপড়া এবং তথ্য ফাঁস হয় এবং পাসওয়ার্ড চুরি হয় 489 00:26:53,000 --> 00:26:58,000 এই এক এর মেমরি প্রায়ই খুব দরিদ্র পরিচালনার সাথে সম্পর্কিত, 490 00:26:58,000 --> 00:27:01,000 উপাত্ত ক্ষেত্রে বা,, ব্যর্থতা কহা যাও 491 00:27:01,000 --> 00:27:03,000 adversarial ইনপুট, যে, তাই আরো সপ্তাহের মধ্যে আসে, 492 00:27:03,000 --> 00:27:07,000 কিন্তু জন্য এখন শুধু একটা ক্ষতি ধরণের স্নিক প্রিভিউ যে আপনি কি করতে পারেন 493 00:27:07,000 --> 00:27:11,000 দ্বারা অন্তর্দৃষ্টিসম্পন্ন বেশ কিভাবে যে ফণা নীচে কাজ না. 494 00:27:11,000 --> 00:27:14,000 চলুন অন্তর্দৃষ্টিসম্পন্ন কেন এই নষ্ট হয়ে যাওয়া সম্পর্কে 495 00:27:14,000 --> 00:27:17,000 একটি টুলের সাথে যে আরো এবং আরো কার্যকর হয়ে যাবে 496 00:27:17,000 --> 00:27:19,000 আমাদের প্রোগ্রাম হিসাবে পেতে আরো জটিল. 497 00:27:19,000 --> 00:27:21,000 এ পর্যন্ত যখন আপনি আপনার প্রোগ্রামের মধ্যে একটি বাগ ছিল করেছি 498 00:27:21,000 --> 00:27:23,000 কিভাবে আপনি এটা ডিবাগ সম্পর্কে চলে গেছে? 499 00:27:23,000 --> 00:27:25,000 আছে কি আপনার কৌশল হয়েছে পর্যন্ত, আপনার দ্বারা TF কিনা পড়ানো 500 00:27:25,000 --> 00:27:27,000 বা শুধুমাত্র স্বশিক্ষিত? 501 00:27:27,000 --> 00:27:29,000 [ছাত্র] Printf. 502 00:27:29,000 --> 00:27:31,000 Printf, তাই printf সম্ভবত যে হয়েছে আপনার বন্ধু যদি আপনি দেখতে চান 503 00:27:31,000 --> 00:27:33,000 আপনার প্রোগ্রাম কি যাচ্ছে ভেতরের এর 504 00:27:33,000 --> 00:27:36,000 আপনি ঠিক করা printf এখানে, এখানে printf, printf এখানে. 505 00:27:36,000 --> 00:27:38,000 এর পরে আপনি এটি চালানো এবং আপনি একটি কাপড় সমগ্র পর্দায় গুচ্ছ পেতে 506 00:27:38,000 --> 00:27:43,000 আপনি যে আসলে কি হয় তারপর আপনার প্রোগ্রামে যাচ্ছে ভুল অনুমান ব্যবহার করতে পারেন. 507 00:27:43,000 --> 00:27:45,000 >> Printf একটি খুব শক্তিশালী জিনিস হতে থাকে, 508 00:27:45,000 --> 00:27:47,000 কিন্তু এটি একটি খুব ম্যানুয়াল প্রক্রিয়া. 509 00:27:47,000 --> 00:27:49,000 আপনি এখানে একটি printf দিতে হবে, একটি printf এখানে, 510 00:27:49,000 --> 00:27:51,000 এবং যদি আপনাকে করা একটি লুপ এর ভিতরে এটি আপনি 100 লাইন পেতে পারে 511 00:27:51,000 --> 00:27:53,000 আউটপুট যে আপনি তারপর খুঁজে বার করতে হবে. 512 00:27:53,000 --> 00:27:58,000 এটি একটি খুব প্রোগ্রাম ডিবাগ করার জন্য ব্যবহারকারী বান্ধব বা ইন্টারেক্টিভ প্রক্রিয়া না, 513 00:27:58,000 --> 00:28:00,000 কিন্তু সৌভাগ্যক্রমে বিদ্যমান বিকল্প আছে. 514 00:28:00,000 --> 00:28:03,000 উদাহরণস্বরূপ একটি প্রোগ্রাম,, বলা GDB, গনু ডিবাগার আছে, 515 00:28:03,000 --> 00:28:06,000 যা একটি কিভাবে আপনি এটি ব্যবহার করতে একটু রহস্যময়. 516 00:28:06,000 --> 00:28:08,000 এটা একটু জটিল, কিন্তু অকপটে, 517 00:28:08,000 --> 00:28:11,000 এই এক সেগুলো যেখানে আপনি যদি এই সপ্তাহে রাখা এবং পরবর্তী 518 00:28:11,000 --> 00:28:14,000 অতিরিক্ত ঘন্টা GDB ভালো কিছু বুঝতে 519 00:28:14,000 --> 00:28:18,000 এটি লং রান আপনাকে ঘন্টার সম্ভবত দশ সংরক্ষণ করা, 520 00:28:18,000 --> 00:28:21,000 যাতে সঙ্গে, আমাকে আপনি কিভাবে এই জিনিস কাজ একটি টিজার দিতে. 521 00:28:21,000 --> 00:28:23,000 >> আমি আমার টার্মিনাল উইন্ডোর মধ্যে আছি. 522 00:28:23,000 --> 00:28:26,000 আমাকে এগিয়ে যান এবং এই প্রোগ্রাম, buggy3 সঙ্কলন. 523 00:28:26,000 --> 00:28:28,000 এটা ইতিমধ্যেই আপ টু ডেট. 524 00:28:28,000 --> 00:28:31,000 আমাকে এটা ঠিক আমরা যখন ফিরে করেছিল, এবং প্রকৃতপক্ষে, এটি নষ্ট হয়ে গেছে এর চালানো. 525 00:28:31,000 --> 00:28:34,000 কিন্তু কেন এই? হয়তো আমি মাতাল করা swap ফাংশন আপ. 526 00:28:34,000 --> 00:28:37,000 হতে পারে এটি একটি এবং খ. আমি তাদের করছি বেশ কাছাকাছি চলন্ত না সঠিকভাবে. 527 00:28:37,000 --> 00:28:39,000 আমাকে এগিয়ে যান এবং এই কাজের জন্য. 528 00:28:39,000 --> 00:28:43,000 বরং buggy3 ঠিক চালানো সম্পর্কে পরিবর্তে এই প্রোগ্রাম GDB চালানো যাক, 529 00:28:43,000 --> 00:28:48,000 এবং আমি তা buggy3 চালানো বলতে যাচ্ছি, 530 00:28:48,000 --> 00:28:52,000 এবং আমি একটি কমান্ড লাইন আর্গুমেন্ট,-tui অন্তর্ভুক্ত চলেছি, 531 00:28:52,000 --> 00:28:55,000 এবং আমরা বৈশিষ্ট ভবিষ্যতে এ সমস্যার কথা মনে করিয়ে দেয়া এই রেখে দেব. 532 00:28:55,000 --> 00:28:57,000 এবং এখন এই কালো এবং সাদা ইন্টারফেস popped যে আবার,, 533 00:28:57,000 --> 00:28:59,000 প্রথমে একটি ছোট অপ্রতিরোধ্য কারণ এই সব আছে 534 00:28:59,000 --> 00:29:02,000 এখানে নিচে পাটা তথ্য, কিন্তু অন্তত কিছু পরিচিত আছে. 535 00:29:02,000 --> 00:29:04,000 উইন্ডোর উপরের হয় আমার আসল কোড, 536 00:29:04,000 --> 00:29:08,000 এবং যদি আমি এখানে স্ক্রল আপ দিন সম্পর্কে আমার খুব ফাইলের উপরে স্ক্রল, 537 00:29:08,000 --> 00:29:11,000 এবং প্রকৃতপক্ষে, এই উইন্ডোর নিচে আছে buggy3.c, এবং বিজ্ঞপ্তি 538 00:29:11,000 --> 00:29:13,000 আমি এই GDB প্রম্পট আছে. 539 00:29:13,000 --> 00:29:16,000 >> এই আমার স্বাভাবিক জন হার্ভার্ড প্রম্পট হিসাবে একই নয়. 540 00:29:16,000 --> 00:29:19,000 এটি একটি প্রম্পট যে সম্পর্কে GDB নিয়ন্ত্রণের অনুমতি যাচ্ছে. 541 00:29:19,000 --> 00:29:21,000 GDB একটি ডিবাগার. 542 00:29:21,000 --> 00:29:24,000 একটি ডিবাগার একটি প্রোগ্রাম যা আপনাকে ভিতর দিয়ে হেটে যেতে 543 00:29:24,000 --> 00:29:27,000 পাতিপাতি দ্বারা আপনার লাইন প্রোগ্রাম সঞ্চালনের, 544 00:29:27,000 --> 00:29:30,000 বরাবর কিছু উপায় আপনি প্রোগ্রাম চাই করছেন, 545 00:29:30,000 --> 00:29:33,000 এমনকি কর্ম কলিং, বা খুঁজছেন, আরো গুরুত্বপূর্ণ, 546 00:29:33,000 --> 00:29:35,000 এ বিভিন্ন ভেরিয়েবল এর মান. 547 00:29:35,000 --> 00:29:37,000 চলুন এগিয়ে যান এবং এই কাজের জন্য. 548 00:29:37,000 --> 00:29:40,000 আমি এগিয়ে যান এবং GDB এর প্রম্পটে টাইপ করুন রান চলেছি, 549 00:29:40,000 --> 00:29:43,000 পর্দায় নীচে আমি টাইপ করেছি চালানোর জন্য ফেলে রাখা যাতে এ বিজ্ঞপ্তি, 550 00:29:43,000 --> 00:29:45,000 এবং আমি এন্টার, এবং যে কি করেছি কি না? 551 00:29:45,000 --> 00:29:50,000 এটা আক্ষরিক আমার প্রোগ্রাম চলে, কিন্তু আমি এখানে অনেক যান নি আসলে দেখতে না 552 00:29:50,000 --> 00:29:55,000 কারণ আমি ডিবাগার ডটকমকে বলেন, আসলে না 553 00:29:55,000 --> 00:29:57,000 একটি সময় নির্দিষ্ট মুহূর্তে বিরতি. 554 00:29:57,000 --> 00:29:59,000 শুধু রান টাইপ প্রোগ্রাম চালায়. 555 00:29:59,000 --> 00:30:01,000 আমি কিছু আসলে কি দেখতে পাচ্ছেন না. আমি এটা না নিপূণভাবে পারেন. 556 00:30:01,000 --> 00:30:03,000 >> পরিবর্তে আমাকে এই কাজের জন্য. 557 00:30:03,000 --> 00:30:08,000 এই GDB প্রম্পটে আমাকে পরিবর্তে বিরতি, টাইপ লিখুন. 558 00:30:08,000 --> 00:30:10,000 আমি যে কি টাইপ অভিপ্রেত নয়. 559 00:30:10,000 --> 00:30:13,000 এর পরিবর্তে আসুন বিভাজক প্রধান টাইপ করুন. 560 00:30:13,000 --> 00:30:15,000 অন্য কথায়, আমি কিছু নামক একটি ব্রেকপয়েন্ট সেট করতে চান, 561 00:30:15,000 --> 00:30:18,000 যা যথাযোগ্যভাবে নামে হয় কারণ এটি বা বিরতি ভঙ্গ করা হবে 562 00:30:18,000 --> 00:30:21,000 যে নির্দিষ্ট স্থানে আপনার প্রোগ্রাম সঞ্চালনের. 563 00:30:21,000 --> 00:30:23,000 মুখ্য আমার ফাংশনের নাম. 564 00:30:23,000 --> 00:30:25,000 উল্লেখ্য, GDB বেশ স্মার্ট. 565 00:30:25,000 --> 00:30:28,000 এটা মূর্ত যে প্রধান যাও প্রায় লাইন 18 এ শুরু ঘটবে 566 00:30:28,000 --> 00:30:32,000 এর buggy3.c, তারপর উপরের বাম এবং এখানে লক্ষ্য করা 567 00:30:32,000 --> 00:30:34,000 B + হয় লাইন 18 পরের অধিকার. 568 00:30:34,000 --> 00:30:38,000 যে সম্পর্কে এর স্মারক যে আমি লাইন 18 এ একটি ব্রেকপয়েন্ট সেট আছে. 569 00:30:38,000 --> 00:30:42,000 এই সময় যখন আমি রান টাইপ করুন, আমি আমার প্রোগ্রাম চালানো যাচ্ছে না 570 00:30:42,000 --> 00:30:45,000 আপ পর্যন্ত এটি যে ব্রেকপয়েন্ট হিট, 571 00:30:45,000 --> 00:30:48,000 তাই প্রোগ্রাম লাইন 18 এ সম্পর্কে জন্য বিরতি করবে না. 572 00:30:48,000 --> 00:30:50,000 এখানে আমরা, যেতে চালানো. 573 00:30:50,000 --> 00:30:53,000 কিছুই প্রদর্শিত করেছে যাও, কিন্তু নীচে বাম বিজ্ঞপ্তি 574 00:30:53,000 --> 00:30:58,000 শুরু প্রোগ্রাম, buggy3, প্রধান মধ্যে buggy3.c লাইন 18 এ ব্রেকপয়েন্ট 1. 575 00:30:58,000 --> 00:31:00,000 এখন আমি কি করতে পারি? 576 00:31:00,000 --> 00:31:03,000 >> আমি লক্ষ্য মুদ্রণ ভালো জিনিস টাইপ শুরু করতে পারেন, 577 00:31:03,000 --> 00:31:08,000 না printf, মুদ্রণ x, এখন যে অদ্ভুত. 578 00:31:08,000 --> 00:31:11,000 $ 1 শুধুমাত্র একটি কৌতূহল, হিসাবে আমরা দেখতে পাবেন 579 00:31:11,000 --> 00:31:14,000 প্রত্যেক সময় আপনি কিছু প্রিন্ট করার জন্য একটি নতুন মান পেতে $. 580 00:31:14,000 --> 00:31:18,000 যাতে যে আপনি শুধু ক্ষেত্রে পূর্ববর্তী মান পড়ুন ফিরে যেতে পারেন, 581 00:31:18,000 --> 00:31:21,000 কিন্তু এখন জন্য কি মুদ্রণ আমাকে বলছে যে x গল্প এই সময়ে মূল্য 582 00:31:21,000 --> 00:31:26,000 একটি দৃশ্যত: 134514032. 583 00:31:26,000 --> 00:31:29,000 কি? যেখানে এমনকি বার থেকে এসেছে? 584 00:31:29,000 --> 00:31:31,000 [শ্রবণাতীত-ছাত্র] 585 00:31:31,000 --> 00:31:34,000 প্রকৃতপক্ষে, এই কি আমরা একটি গার্বেজ মান ডাকবো, এবং আমরা এই সম্পর্কে এখনো করেছি বলত না, 586 00:31:34,000 --> 00:31:37,000 কিন্তু যে কারণে আপনি ভেরিয়েবল আরম্ভ 587 00:31:37,000 --> 00:31:40,000 সম্ভবত হয় যাতে তারা কিছু মান যে আপনি তাদের চান আছে. 588 00:31:40,000 --> 00:31:44,000 কিন্তু ধরা যে আপনি ভেরিয়েবল ডিক্লেয়ার করতে পারেন প্রত্যাহার করা হয় 589 00:31:44,000 --> 00:31:46,000 আমি আমার মত সিগমা উদাহরণে কি একটি মুহূর্ত আগে 590 00:31:46,000 --> 00:31:48,000 ছাড়া আসলে একটি মান প্রদান করে তাদের. 591 00:31:48,000 --> 00:31:50,000 পুনরাহ্বান কি আমি সিগমা এখানে উপর. 592 00:31:50,000 --> 00:31:52,000 আমি ঘোষিত হবে, কিন্তু কি মান আমি তা দিতে হবে কেন? 593 00:31:52,000 --> 00:31:56,000 কেউ না, কারণ আমি জানতাম যে পরের কয়েক লাইন 594 00:31:56,000 --> 00:31:59,000 GetInt n র অভ্যন্তরে একটি মান বসিয়ে সমস্যা যত্ন নিতে হবে. 595 00:31:59,000 --> 00:32:02,000 >> কিন্তু লাইনে 11 বিবরণ এই বিন্দু 596 00:32:02,000 --> 00:32:05,000 লাইন এবং 12 এবং 13 লাইন এবং লাইন 14 597 00:32:05,000 --> 00:32:08,000 সারা যারা কয়েক লাইন কি হবে মান কি? 598 00:32:08,000 --> 00:32:10,000 সি ঠিক আপনি জানেন না. 599 00:32:10,000 --> 00:32:14,000 সাধারণভাবে এর মান কিছু আবর্জনা, কিছু সম্পূর্ণভাবে র্যান্ডম সংখ্যা 600 00:32:14,000 --> 00:32:17,000 যে কিছু আগের ফাংশান থেকে বামে মূলত এর উপর 601 00:32:17,000 --> 00:32:21,000 না, তাই চালাতে হিসাবে আপনার প্রোগ্রাম রান করা হয়েছে 602 00:32:21,000 --> 00:32:24,000 পুনরাহ্বান যে ফাংশন ফাংশন, ফাংশন, ফাংশন পায়. 603 00:32:24,000 --> 00:32:27,000 এই সমস্ত ফ্রেম মেমরিতে রাখতে এবং যারা ফাংশন তারপর ফিরে পেতে, 604 00:32:27,000 --> 00:32:31,000 এবং ঠিক মত আমি রবার তাদের মেমরি ঘটনাচক্রে, পুনঃব্যবহৃত সঙ্গে প্রস্তাবিত. 605 00:32:31,000 --> 00:32:37,000 ওয়েল, শুধু তাই এই প্রোগ্রামে যে এই পরিবর্তনশীল x ঘটবে 606 00:32:37,000 --> 00:32:41,000 মনে হচ্ছে কিছু 134514032 মত গার্বেজ মান অন্তর্ভুক্ত আছে 607 00:32:41,000 --> 00:32:44,000 আগের থেকে কিছু ফাংশন, এক না যে আমি লিখেছি. 608 00:32:44,000 --> 00:32:47,000 এটা কিছু অপারেটিং সিস্টেমের সাথে কার্যকরীভাবে আসে হতে পারে, 609 00:32:47,000 --> 00:32:49,000 ফণা নীচে কিছু ফাংশন. 610 00:32:49,000 --> 00:32:52,000 >> ঠিক আছে, যে সূক্ষ্ম, কিন্তু এর পরের লাইন যাও এখন দিন আগাম. 611 00:32:52,000 --> 00:32:55,000 যদি আমি আমার GDB প্রম্পটে "পরবর্তী" টাইপ করুন এবং আমি আঘাত লিখুন, 612 00:32:55,000 --> 00:32:58,000 যে বিজ্ঞপ্তি হাইলাইট প্যাচসমূহ লাইন 19 ডাউন, 613 00:32:58,000 --> 00:33:01,000 কিন্তু লজিক্যাল সংশ্লেষ হয় যে লাইন 18 614 00:33:01,000 --> 00:33:06,000 এখন সমাপ্ত নির্বাহ করেনি, তাই যদি আমি আবার টাইপ করুন "মুদ্রণ x" 615 00:33:06,000 --> 00:33:10,000 আমি এখন 1, দেখতে হবে এবং সত্যিই, আমি না. 616 00:33:10,000 --> 00:33:14,000 আবার, $ স্টাফ হয় GDB আপনি স্মারক একটি উপায় 617 00:33:14,000 --> 00:33:17,000 কি প্রিন্টগুলিকে ইতিহাস যে আপনি করেছেন. 618 00:33:17,000 --> 00:33:21,000 এখন আমার এগিয়ে যান এবং y মুদ্রণ নিকাশ করা, এবং প্রকৃতপক্ষে, y কিছু ছবি হিসাবে মান ভাল, 619 00:33:21,000 --> 00:33:24,000 কিন্তু লাইন 19 সালে কোন বড় চুক্তি কারণ সম্পর্কে আমরা এটি ধার্য করছি 620 00:33:24,000 --> 00:33:27,000 মান 2, তাই আমাকে আবার "পরবর্তী" টাইপ করুন. 621 00:33:27,000 --> 00:33:29,000 এবং এখন আমরা printf লাইন করছি. 622 00:33:29,000 --> 00:33:31,000 আমাকে মুদ্রণ x না. 623 00:33:31,000 --> 00:33:34,000 আমাকে মুদ্রণ y না. সত্যি, আমি সামান্য এই মুদ্রণ মধ্যে ক্লান্ত পেয়ে করছি. 624 00:33:34,000 --> 00:33:38,000 আমাকে পরিবর্তে "এক্স ডিসপ্লে" এবং "প্রদর্শন y, ও" টাইপ করুন 625 00:33:38,000 --> 00:33:41,000 এবং এখন প্রত্যেক সময় আমি ভবিষ্যতে একটি কমান্ডটি টাইপ করুন 626 00:33:41,000 --> 00:33:45,000 আমি কি এর মধ্যে হবে স্মরণ করিয়ে x এবং y, ও কি x এবং y, ও কি এক্স এবং ওয়াই. 627 00:33:45,000 --> 00:33:48,000 >> আমি এছাড়াও, হিসাবে একটি সরাইয়া মধ্যে, টাইপ "তথ্য অঁচলবাসী." করতে পারেন 628 00:33:48,000 --> 00:33:50,000 তথ্য একটি বিশেষ কমান্ড. 629 00:33:50,000 --> 00:33:52,000 স্থানীয় মানে এটা দেখায় স্থানীয় ভেরিয়েবল সম্পর্কে. 630 00:33:52,000 --> 00:33:55,000 যদি এমন কিছু আমি ভুলে যান বা এই একটি ছবি, জটিল ফাংশন 631 00:33:55,000 --> 00:33:57,000 যে আমি বা অন্য কারোর লিখেছেন স্থানীয় তথ্য আপনাকে জানানো হবে 632 00:33:57,000 --> 00:34:00,000 এই সব স্থানীয় ফাংশন ভিতরে স্থানীয় ভেরিয়েবল কি 633 00:34:00,000 --> 00:34:03,000 যে আপনি যদি আপনার কাছাকাছি অকর্মা চান যত্নশীল হতে পারে. 634 00:34:03,000 --> 00:34:07,000 এখন printf, হয় চালানো সম্পর্কে, তাই এগিয়ে সম্পর্কে এবং শুধুমাত্র টাইপ যাওয়া "পরের." 635 00:34:07,000 --> 00:34:10,000 কারণ আমরা এই পরিবেশে থাকেন আমরা এটি আসলে এইজন্য করছি না 636 00:34:10,000 --> 00:34:14,000 এখানে নিচে চালানো, কিন্তু এটি একটি সামান্য mangled এখানে লক্ষ্য করা হচ্ছে. 637 00:34:14,000 --> 00:34:17,000 কিন্তু লক্ষ্য করা এটি এর পর্দায় অগ্রাহ্য করা আছে, 638 00:34:17,000 --> 00:34:21,000 তাই, কিন্তু এখানে একটি নির্ভুল প্রোগ্রাম না যে ঠিক কারণ আমি সবসময় অকর্মা কাছাকাছি পারেন 639 00:34:21,000 --> 00:34:23,000 মুদ্রণ ব্যবহার যদি আমি করতে চান. 640 00:34:23,000 --> 00:34:26,000 >> সম্পর্কে পরের আবার টাইপ করা যাক, এবং এখন এখানে আকর্ষণীয় অংশ. 641 00:34:26,000 --> 00:34:29,000 Y বিবরণ এই পর্যায়ে হল 2, এবং এক্স 1 টি, 642 00:34:29,000 --> 00:34:32,000 এখানে প্রস্তাব হিসাবে, এবং আবার, 643 00:34:32,000 --> 00:34:35,000 এই কারণে এখন স্বয়ংক্রিয়ভাবে প্রদর্শন করা হয় কারণ আমি কমান্ড ব্যবহার করুন 644 00:34:35,000 --> 00:34:40,000 প্রদর্শনের x এবং y প্রদর্শন, যাতে মুহূর্ত আমি টাইপ পরবর্তী 645 00:34:40,000 --> 00:34:43,000 তত্ত্ব x এবং y মধ্যে অদলবদল হওয়া উচিত. 646 00:34:43,000 --> 00:34:45,000 এখন, ইতিমধ্যে আমরা জানি যে কেস করা যাচ্ছে না, 647 00:34:45,000 --> 00:34:49,000 কিন্তু আমরা এক মুহূর্ত কিভাবে আমরা চিন্তা কেন যে সত্য গভীর আকর্ষণীয় করতে পারেন দেখতে পাবেন. 648 00:34:49,000 --> 00:34:54,000 এর পরে, এবং দুর্ভাগ্যবশত, y এখনও 2 x এবং এখনও 1, এবং আমি যতটা নিশ্চিত করতে পারেন. 649 00:34:54,000 --> 00:34:56,000 প্রিন্ট করুন x, y মুদ্রণ. 650 00:34:56,000 --> 00:34:59,000 প্রকৃতপক্ষে, আসলে কোন সোয়াপিং ঘটেছে করেনি, তাই আসুন এই শুরু. 651 00:34:59,000 --> 00:35:01,000 স্পষ্টত: swap 'র নষ্ট হয়ে গেছে. 652 00:35:01,000 --> 00:35:04,000 যাক এর পরিবর্তে আবার "রান" টাইপ করুন. 653 00:35:04,000 --> 00:35:07,000 সম্পর্কে হ্যা বলা যাক, আমি শুরু থেকে এটি পুনরায় আরম্ভ করতে চান, লিখুন. 654 00:35:07,000 --> 00:35:09,000 >> এখন আমি ফিরে আপ লাইনে 18. 655 00:35:09,000 --> 00:35:11,000 এখন লক্ষ্য করা x এবং y আবার আবর্জনা মান. 656 00:35:11,000 --> 00:35:15,000 এর পরে, পরের, পরের, পরের. 657 00:35:15,000 --> 00:35:17,000 যদি আমি পেতে উদাস আমি এছাড়াও পরের জন্য n টাইপ করতে পারেন. 658 00:35:17,000 --> 00:35:21,000 আপনি এটা অক্ষরের কম সম্ভব ক্রম যাও সংক্ষিপ্ত করতে পারেন. 659 00:35:21,000 --> 00:35:23,000 Swap এখন হয় নষ্ট হয়ে গেছে. 660 00:35:23,000 --> 00:35:25,000 ঢুকা ডুব এর, তাই এর পরিবর্তে টাইপ পরের, 661 00:35:25,000 --> 00:35:30,000 এখন আমি ধাপে টাইপ যাচ্ছে যাতে আমি এই ফাংশনের ভিতর পদবিন্যাস করছি করছি 662 00:35:30,000 --> 00:35:33,000 যাতে আমি এটা ভিতর দিয়ে হেটে যেতে পারে, তাই আমি ধাপে আঘাত এবং তারপর লিখুন. 663 00:35:33,000 --> 00:35:37,000 যে হাইলাইট জাম্প নিচে আমার প্রোগ্রামের নিচের লাইন 36 লক্ষ্য. 664 00:35:37,000 --> 00:35:39,000 এখন কি হচ্ছে স্থানীয় ভেরিয়েবল? 665 00:35:39,000 --> 00:35:41,000 স্থানীয় তথ্য. 666 00:35:41,000 --> 00:35:43,000 কিছুই এখনও কারণ আমরা যে লাইনে অর্জিত না করেছি, 667 00:35:43,000 --> 00:35:47,000 তাই এর এগিয়ে যান এবং বলে দিতে "পরের." 668 00:35:47,000 --> 00:35:50,000 এখন আমরা tmp, মুদ্রণ tmp আছে বলে মনে হচ্ছে. 669 00:35:50,000 --> 00:35:52,000 জঞ্জাল মান, ডান? আমি তাই মনে করি. 670 00:35:52,000 --> 00:35:55,000 কেমন হয়, মুদ্রণ বো, 1 এবং 2 মুদ্রণ? 671 00:35:55,000 --> 00:35:58,000 একটি মুহূর্ত, যত তাড়াতাড়ি সম্ভব আমি আবার পরের টাইপ করুন 672 00:35:58,000 --> 00:36:02,000 tmp 1 একটি মান, যাও আশা নিয়ে হয়, 673 00:36:02,000 --> 00:36:05,000 কারণ tmp একটি মান নির্ধারিত করা হবে. 674 00:36:05,000 --> 00:36:08,000 >> এখন এর একটি, মুদ্রণ বো না মুদ্রণ যাক, 675 00:36:08,000 --> 00:36:11,000 কিন্তু এখন tmp, মুদ্রণ এবং এটা সত্যিই এর 1. 676 00:36:11,000 --> 00:36:14,000 আমাকে না পরের. আমাকে না পরের. 677 00:36:14,000 --> 00:36:16,000 আমি ও swap 'র ফাংশন সমাপ্ত করেছি. 678 00:36:16,000 --> 00:36:19,000 আমি এটা এখনও লাইন 40 সালে ভিতর, তাই সম্পর্কে একটি মুদ্রণ যাক, 679 00:36:19,000 --> 00:36:22,000 মুদ্রণ বো, এবং আমি কি tmp হয় না যত্ন. 680 00:36:22,000 --> 00:36:27,000 মনে হয় ও swap 'র সঠিক যখন এটি একটি এবং বো সোয়াপিং আসে. 681 00:36:27,000 --> 00:36:31,000 কিন্তু এখন যদি আমি পরের টাইপ করুন, আমি লাইন 25 ফিরে তিড়িং লাফ, 682 00:36:31,000 --> 00:36:34,000 এবং অবশ্যই, আমি যদি এক্স এবং মুদ্রণ y টাইপ 683 00:36:34,000 --> 00:36:38,000 তারা এখনও অপরিবর্তিত, যাতে আমরা সমস্যার সমাধান করেন নি. 684 00:36:38,000 --> 00:36:41,000 কিন্তু diagnostically এখন সম্ভবত সঙ্গে এই GDB প্রোগ্রাম 685 00:36:41,000 --> 00:36:44,000 আমরা অন্তত করেছি অর্জিত এক ধাপ বোঝার কাছাকাছি 686 00:36:44,000 --> 00:36:47,000 কি হচ্ছে এখানে একটি printf নির্বাণ দ্বারা আমাদের কোড শিবিকা যাও ছাড়া যাচ্ছে ভুল, 687 00:36:47,000 --> 00:36:50,000 printf printf এখানে, এখানে এবং তারপর এটি পুনরায় চালানো এবং আবার 688 00:36:50,000 --> 00:36:52,000 যাও জিনিসটা কি ভুল করার চেষ্টা করে যাচ্ছে. 689 00:36:52,000 --> 00:36:55,000 >> আমি এগিয়ে যান এবং সঙ্গে প্রস্থান করার জন্য এই পুরাপুরি আউট করে প্রস্থান করার যাচ্ছি. 690 00:36:55,000 --> 00:36:57,000 এটি তারপর বলে যাচ্ছে, "যাইহোক প্রস্থান?" হ্যাঁ. 691 00:36:57,000 --> 00:37:00,000 এখন আমি আমার স্বাভাবিক প্রম্পটে ফিরে না, এবং আমি GDB ব্যবহার করা যাবে না. 692 00:37:00,000 --> 00:37:03,000 একটি সরাইয়া হিসাবে, আপনি এই-tui পতাকা ব্যবহার করার প্রয়োজন হবে না. 693 00:37:03,000 --> 00:37:07,000 বস্তুত, যদি আপনি এটি উপেক্ষা করা পাবেন মূলত পর্দার নীচে অর্ধেক. 694 00:37:07,000 --> 00:37:11,000 যদি আমি বিভাজক প্রধান টাইপ করুন এবং তারপরে চালানোর 695 00:37:11,000 --> 00:37:15,000 আমি এখনও আমার প্রোগ্রাম চালাতে পারেন, কিন্তু এটি কি করতে হবে আরো মূল পাঠ্য 696 00:37:15,000 --> 00:37:18,000 শুধুমাত্র একটি সময়ে প্রদর্শন বর্তমান এক লাইন সম্পর্কে. 697 00:37:18,000 --> 00:37:21,000 -Tui, পাঠগত ইউজার ইন্টারফেস, 698 00:37:21,000 --> 00:37:25,000 শুধু দেখায় আপনি একবার, যা সম্ভবত একটি বিট ধারণার সহজ এ প্রোগ্রামের আরো. 699 00:37:25,000 --> 00:37:27,000 কিন্তু প্রকৃতপক্ষে, আমি ঠিক পাশেই, পরের, পরের করতে পারেন, 700 00:37:27,000 --> 00:37:30,000 এবং আমি একটা সময়ে এক লাইন দেখতে যাওয়া, এবং করছি যদি আমি সত্যিই কি ঘটছে তা দেখতে চান 701 00:37:30,000 --> 00:37:35,000 আমি তালিকা টাইপ করুন এবং একটি প্রতিবেশী লাইন আভা দেখতে পারেন. 702 00:37:35,000 --> 00:37:39,000 >> একটি ভিডিও যে আমরা যে আপনার জন্য সমস্যা 3 সেট করে ঘড়ি জিজ্ঞাসা করেছি আছে 703 00:37:39,000 --> 00:37:43,000 যা Nate জুড়ে GDB এর intricacies কিছু, 704 00:37:43,000 --> 00:37:46,000 এবং এই যে এক জিনিস ভাল,, যেখানে হয়ত অ তুচ্ছ শতাংশ 705 00:37:46,000 --> 00:37:49,000 GDB, স্পর্শ না এবং যে কোনো খারাপ জিনিস হবে 706 00:37:49,000 --> 00:37:53,000 কারণ আপনি আক্ষরিক আপ আরো সময় কাটানোর পরে এই সেমিস্টারে ভর্তি করা শেষ হয়ে যাবে 707 00:37:53,000 --> 00:37:56,000 পশ্চাদ্ধাবন বাগ নিচে তারপর আপনি যে আধা ঘন্টা / ঘন্টার মধ্যে যদি আপনাকে করা হবে 708 00:37:56,000 --> 00:38:00,000 এই সপ্তাহে এবং পরবর্তী লার্নিং GDB করতে স্বাচ্ছন্দ্য পেতে. 709 00:38:00,000 --> 00:38:02,000 Printf ছিল আপনার বন্ধু. 710 00:38:02,000 --> 00:38:05,000 GDB এখন আপনার বন্ধু হতে হবে. 711 00:38:05,000 --> 00:38:08,000 >> GDB উপর কোন প্রশ্ন? 712 00:38:08,000 --> 00:38:12,000 এবং এখানে একটি সবচেয়ে শক্তিশালী এবং সহায়ক কমান্ডের কিছু দ্রুত তালিকা. 713 00:38:12,000 --> 00:38:15,000 হাঁ. >> একটি পংক্তি আপনি প্রিন্ট করতে পারি? 714 00:38:15,000 --> 00:38:17,000 একটি পংক্তি আপনি প্রিন্ট করতে পারেন? একেবারে. 715 00:38:17,000 --> 00:38:19,000 এটি শুধুমাত্র পূর্ণসংখ্যা হতে হবে তা নয়. 716 00:38:19,000 --> 00:38:22,000 যদি একটি ভেরিয়েবল গুলি একটি স্ট্রিং মুদ্রণ গুলি ঠিক টাইপ. 717 00:38:22,000 --> 00:38:24,000 এটা আপনাকে দেখাতে হবে যে কি স্ট্রিং পরিবর্তনশীল হয়. 718 00:38:24,000 --> 00:38:26,000 [শ্রবণাতীত-ছাত্র] 719 00:38:26,000 --> 00:38:28,000 এটি ঠিকানা এবং স্ট্রিং নিজেই আপনাকে দিয়ে দেবে. 720 00:38:28,000 --> 00:38:32,000 এটি আপনার উভয় প্রদর্শন করবে. 721 00:38:32,000 --> 00:38:34,000 এবং গত এক জিনিস ঠিক হয়, কারণ এই খুব ভাল জানি. 722 00:38:34,000 --> 00:38:37,000 Backtrace এবং ফ্রেম, আমাকে এই এক সময় শেষ মধ্যে আকর্ষণীয়, 723 00:38:37,000 --> 00:38:39,000 একই সঙ্গে GDB সঠিক প্রোগ্রাম. 724 00:38:39,000 --> 00:38:44,000 সম্পর্কে এগিয়ে যান এবং পাঠগত ইউজার ইন্টারফেস সংস্করণ ইনস্টল করা যাক, 725 00:38:44,000 --> 00:38:46,000 প্রধান বিরতি. 726 00:38:46,000 --> 00:38:49,000 আমাকে এগিয়ে যান এবং পুনরায় সঞ্চালন করা হয়. এখানে আমি. 727 00:38:49,000 --> 00:38:55,000 এখন আমার পরের পরের পরের পরের পরের চলুন, পদক্ষেপ, লিখুন. 728 00:38:55,000 --> 00:39:00,000 >> এবং এখন আমি অনুমান করা swap 'র মধ্যে এখন আমি ইচ্ছাকৃতভাবে, কিন্তু আমি ভালো আছি "অভিশাপ, x এর মান কি ছিল?" 729 00:39:00,000 --> 00:39:02,000 আমি আর x না পারেন. 730 00:39:02,000 --> 00:39:05,000 আমি y কারণ তারা সুযোগ মধ্যে থাকেন না করতে পারে না. 731 00:39:05,000 --> 00:39:07,000 তারা প্রেক্ষাপটে করছি কিন্তু কোন সমস্যা নেই, না. 732 00:39:07,000 --> 00:39:09,000 আমি backtrace টাইপ করতে পারেন. 733 00:39:09,000 --> 00:39:13,000 যে দেখায় ফাংশন যে সময় এই বিষয়টি কে আছে মৃত্যুদন্ড পর্যন্ত সব সম্পর্কে. 734 00:39:13,000 --> 00:39:16,000 যে উল্লেখ্য নীচে এক, প্রধান, প্রধান লাইন আপ 735 00:39:16,000 --> 00:39:18,000 হচ্ছে এখানে আমাদের ছবি নীচের অংশে অবস্থিত. 736 00:39:18,000 --> 00:39:22,000 যে এটি লাইনের উপরে করতে swap আপ উপরে মাপের swap হচ্ছে এখানে মেমরি সহ, 737 00:39:22,000 --> 00:39:26,000 এবং আমি যদি অস্থায়ীভাবে প্রধান ফিরে পেতে চাই আমি "ফ্রেম." বলতে পারেন 738 00:39:26,000 --> 00:39:30,000 কি নম্বর? মুখ্য হল ফ্রেম # 1. 739 00:39:30,000 --> 00:39:32,000 আমি এগিয়ে যান এবং বলে যাচ্ছে "ফ্রেম 1." করছি 740 00:39:32,000 --> 00:39:36,000 >> এখন আমি প্রধান ফিরে না, এবং আমি এক্স মুদ্রণ করতে পারেন, এবং আমি y মুদ্রণ করতে পারেন, 741 00:39:36,000 --> 00:39:40,000 কিন্তু আমি একটি বা বো না মুদ্রণ করতে পারেন. 742 00:39:40,000 --> 00:39:43,000 কিন্তু আমি, আমি যদি বলতে পারেন, "ঠিক আছে, এক মিনিট. অপেক্ষা করতে swap কোথায় ছিল?" 743 00:39:43,000 --> 00:39:46,000 সম্পর্কে এগিয়ে যান এবং বলা যাক "ফ্রেম 0." 744 00:39:46,000 --> 00:39:48,000 এখন আমি যেখানে আমি ফিরে যাও হতে চান, এবং একটি হিসাবে সরাইয়া, 745 00:39:48,000 --> 00:39:52,000 খুব আছে অন্যান্য কমান্ডের মত যদি সত্যিই আপনি উদাস টাইপ পরের পরের পরের পরের করছি পেয়ে, 746 00:39:52,000 --> 00:39:56,000 আপনি সাধারণত ভালো জিনিস "পরবর্তী 10," বলতে পারেন এবং যে পরবর্তী 10 লাইনের মাধ্যমে পইঠা হবে. 747 00:39:56,000 --> 00:39:59,000 আপনি লিখতে পারেন "continue" যখন সত্যিই আপনি এটি দিয়ে পদবিন্যাস সঙ্গে নিয়ে বিরক্ত হতে. 748 00:39:59,000 --> 00:40:05,000 আপনার প্রোগ্রাম চালিয়ে বাধা ছাড়াই পর্যন্ত এটি অন্য ব্রেকপয়েন্ট হিট চালানো হবে, 749 00:40:05,000 --> 00:40:07,000 কিনা মধ্যে একটি লুপ বা আপনার প্রোগ্রামের নিচে কম. 750 00:40:07,000 --> 00:40:11,000 >> এই ক্ষেত্রে আমরা শেষ করে, এবং সাধারণত প্রোগ্রাম থেকে প্রস্থান করেছে. 751 00:40:11,000 --> 00:40:13,000 এটি একটি অভিনব উপায়, নিকৃষ্ট প্রক্রিয়া. 752 00:40:13,000 --> 00:40:16,000 শুধু আপনার প্রোগ্রাম সাধারণত প্রস্থান করেছে. 753 00:40:16,000 --> 00:40:24,000 ভিডিও এবং সেশান আসতে ডিবাগ যে আরো. 754 00:40:24,000 --> 00:40:26,000 যে ছিল অনেক. 755 00:40:26,000 --> 00:40:35,000 চলুন শুরু করা যাক এখানে আমাদের 5 মিনিটের বিরতি নিতে, এবং আমরা structs এবং ফাইল সঙ্গে ফিরে আসবেন. 756 00:40:35,000 --> 00:40:38,000 >> যদি আপনি ইতিমধ্যেই এই সপ্তাহে এর pset মধ্যে dived আছে 757 00:40:38,000 --> 00:40:41,000 আপনি যে আমরা ডিস্ট্রিবিউশন কোড ব্যবহার করব জানি, 758 00:40:41,000 --> 00:40:45,000 সোর্স কোড যে আমরা আপনাকে একটি আদ্যস্থল, কিছু নতুন কৌশল হিসাবে প্রদান. 759 00:40:45,000 --> 00:40:50,000 বিশেষ করে, আমরা চালু গঠন জন্য এই নতুন অভিব্যক্তি নামক struct,, 760 00:40:50,000 --> 00:40:53,000 যাতে আমরা প্রকারের কাস্টমাইজড ভেরিয়েবল তৈরি করতে পারেন. 761 00:40:53,000 --> 00:40:57,000 আমরা ফাইল ইনপুট / আউটপুট, ফাইল ইনপুট এবং আউটপুট এর ধারণা চালু, 762 00:40:57,000 --> 00:41:00,000 এবং এই এত যে আমরা রাষ্ট্র সঞ্চয় করতে পারেন 763 00:41:00,000 --> 00:41:03,000 আপনার একত্র বোর্ড ডিস্ক একটি ফাইল 764 00:41:03,000 --> 00:41:06,000 যাতে শিক্ষণ ফেলোগণ এবং আমি বুঝতে পারেন 765 00:41:06,000 --> 00:41:09,000 নিজে খেলতে না করেও কি আপনার প্রোগ্রামের ভিতর করছেন 766 00:41:09,000 --> 00:41:11,000 একত্র এর গেম অত্যাধিক. 767 00:41:11,000 --> 00:41:13,000 আমরা এই কাজের জন্য আরো automatedly পারেন. 768 00:41:13,000 --> 00:41:18,000 >> একটি struct এই ধারণা একটি মোটামুটি বাধ্যকারী সমস্যা solves. 769 00:41:18,000 --> 00:41:21,000 ধরুন যে আমরা কিছু প্রোগ্রাম বাস্তবায়ন করতে চান 770 00:41:21,000 --> 00:41:25,000 যে একরকম ছাত্র সংক্রান্ত তথ্য ট্র্যাক রাখে, 771 00:41:25,000 --> 00:41:28,000 এবং ছাত্র একটি আইডি, উদাহরণস্বরূপ, আছে, একটি নাম হতে পারে 772 00:41:28,000 --> 00:41:31,000 এবং হার্ভার্ড মত একটি জায়গায় একটি ঘর, তাই এই তথ্যের 3 টুকরা 773 00:41:31,000 --> 00:41:34,000 আমরা কাছাকাছি রাখতে চান, তাই সম্পর্কে এগিয়ে যান এবং একটি সামান্য প্রোগ্রাম এখানে লেখা শুরু দিন, 774 00:41:34,000 --> 00:41:38,000 stdio.h অন্তর্ভুক্ত. 775 00:41:38,000 --> 00:41:42,000 আমাকে cs50.h. অন্তর্ভুক্ত না 776 00:41:42,000 --> 00:41:44,000 এবং তারপর আমার মূল ক্রিয়া শুরু. 777 00:41:44,000 --> 00:41:46,000 আমি কোনো কমান্ড লাইন আর্গুমেন্ট সহ বিরক্ত হবে না, 778 00:41:46,000 --> 00:41:49,000 এবং এখানে আমি একজন ছাত্র করাতে চান, যাতে আমি বলতে যাচ্ছি 779 00:41:49,000 --> 00:41:54,000 একজন ছাত্র একটি নাম আছে, তাই আমি বলতে যাচ্ছি "স্ট্রিং নাম." 780 00:41:54,000 --> 00:41:59,000 তারপর আমি একজন ছাত্র এছাড়াও একটি আইডি আছে, তাই int-আইডি বলতে যাচ্ছি, 781 00:41:59,000 --> 00:42:03,000 এবং একজন ছাত্র একটি ঘর আছে, তাই আমি করছি বলে যাচ্ছে "স্ট্রিং ঘর." 782 00:42:03,000 --> 00:42:06,000 তারপর আমি ভালো এইসব একটু অর্ডার আরো পরিচ্ছন্নভাবে করব. 783 00:42:06,000 --> 00:42:11,000 এখন ঠিক আছে, আমি যা দিয়ে একটি ছাত্র উপস্থাপন 3 ভেরিয়েবল আছে, তাই "একজন ছাত্র." 784 00:42:11,000 --> 00:42:15,000 >> এবং এখন আমি এইসব মান পূরণ করতে চান, তাই আমাকে এগিয়ে যান এবং ভালো কিছু বলুন 785 00:42:15,000 --> 00:42:18,000 "Id = 123." 786 00:42:18,000 --> 00:42:21,000 নাম ডেভিড পেতে যাচ্ছে. 787 00:42:21,000 --> 00:42:24,000 চলুন শুরু করা যাক বলে বাড়িতে মাথের পেতে যাচ্ছে, 788 00:42:24,000 --> 00:42:31,000 এবং তারপর আমি ইচ্ছামত printf ভালো কিছু করতে যাচ্ছে ("% s-করছি, 789 00:42:31,000 --> 00:42:37,000 যার আইডি% d,% s এ জীবন. 790 00:42:37,000 --> 00:42:41,000 এবং এখন কি, আমি এখানে চলা করতে না চান, অন্যান্য পর এক? 791 00:42:41,000 --> 00:42:47,000 নাম, আইডি, ঘর; রিটার্ন 0. 792 00:42:47,000 --> 00:42:50,000 ঠিক আছে, যদি না আমি মাতাল আপ কোথাও এখানে 793 00:42:50,000 --> 00:42:54,000 আমি মনে করি আমরা একটি চমত্কার প্রোগ্রাম ভাল যে একজন ছাত্র সঞ্চয় আছে. 794 00:42:54,000 --> 00:42:57,000 অবশ্যই, এই সব যে আকর্ষণীয় নয়. ? আমি যদি 2 ছাত্র চাই 795 00:42:57,000 --> 00:42:59,000 এটা কোন বড় চুক্তি. আমি 2 জনের সমর্থন করতে পারে না. 796 00:42:59,000 --> 00:43:03,000 সম্পর্কে এগিয়ে যান এবং এই হাইলাইট এবং নিচে এখানে আসুন দেখা যাক, 797 00:43:03,000 --> 00:43:09,000 এবং আমি রব মত কেউ কার্কল্যান্ড জীবন বলতে পারে "id = 456". 798 00:43:09,000 --> 00:43:12,000 >> ঠিক আছে, অপেক্ষা করুন, আমি কিন্তু এই একই জিনিস কল করতে পারবেন না, 799 00:43:12,000 --> 00:43:15,000 এবং এটা দেখে মনে হচ্ছে আমি এই কপি আছে চলেছি, 800 00:43:15,000 --> 00:43:19,000 তাই এই সম্পর্কে বলে যে ডেভিড এর ভেরিয়েবল করা যাক, 801 00:43:19,000 --> 00:43:23,000 এবং আমাকে Rob জন্য এইসব কিছু কপি পাবেন. 802 00:43:23,000 --> 00:43:27,000 আমরা এই রব এর কল কিন্তু এখন এই কাজ করে যাচ্ছে না করব 803 00:43:27,000 --> 00:43:33,000 কারণ আমি অপেক্ষা করেছি, যাক এর id1 যাও সম্পর্কে, পরিবর্তন এবং NAME1 house1. 804 00:43:33,000 --> 00:43:35,000 Rob 2, 2 হতে হবে. 805 00:43:35,000 --> 00:43:42,000 আমি এই এখানে, এখানে, এখানে, এখানে, এখানে, এখানে পরিবর্তন পেয়েছেন. 806 00:43:42,000 --> 00:43:45,000 অপেক্ষা করুন, টমি কি সম্পর্কে? এর আবার এই অনুষ্ঠান করুক না. 807 00:43:45,000 --> 00:43:49,000 অবশ্যই যদি এখনও আপনার মনে হয় যে এটা একটি এই কাজ করার একটা ভালো উপায়, এটা না, 808 00:43:49,000 --> 00:43:52,000 তাই / খারাপ কপি পেস্ট করুন. 809 00:43:52,000 --> 00:43:55,000 কিন্তু আমরা এই মীমাংসিত এক সপ্তাহ আগে. 810 00:43:55,000 --> 00:43:59,000 >> আমাদের সমাধান কি ছিল যখন আমরা একই ধরনের তথ্য একাধিক দৃষ্টান্ত চেয়েছিলেন? 811 00:43:59,000 --> 00:44:01,000 [ছাত্রদের] একটি অ্যারে. 812 00:44:01,000 --> 00:44:03,000 একটি অ্যারের, তাই আমাকে এই পর্যন্ত পরিষ্কার করার চেষ্টা করুন. 813 00:44:03,000 --> 00:44:07,000 আমাকে নিজেকে জন্য কিছু শীর্ষে রুম, না এবং এই সম্পর্কে পরিবর্তে এখানে করতে দেওয়া. 814 00:44:07,000 --> 00:44:12,000 আমরা এই ব্যক্তিদের কল, পরিবর্তে করব এবং আমি বলতে যাচ্ছি "int-আইডি," করছি 815 00:44:12,000 --> 00:44:14,000 এবং আমি এখন জন্য আমাদের 3 সমর্থন করতে যাচ্ছি. 816 00:44:14,000 --> 00:44:18,000 আমি "স্ট্রিং নাম," বলে এবং আমি আমাদের 3 সমর্থন করব চলেছি, 817 00:44:18,000 --> 00:44:22,000 এবং তারপর আমি "স্ট্রিং ঘর," বলে এবং আমি আমাদের 3 সমর্থন চলেছি চলেছি. 818 00:44:22,000 --> 00:44:26,000 এখন পরিবর্তে ডেভিড তার নিজস্ব স্থানীয় ভেরিয়েবল পেতে এখানে 819 00:44:26,000 --> 00:44:28,000 আমরা যারা পরিত্রাণ পেতে পারেন. 820 00:44:28,000 --> 00:44:30,000 যে আর ভালো যে আমরা এই পরিষ্কার করছি আপ. 821 00:44:30,000 --> 00:44:35,000 তারপর আমি বলতে পারেন ডেভিড যাও [0] এবং নাম সমূহ [0] হবে 822 00:44:35,000 --> 00:44:38,000 এবং ঘর [0]. 823 00:44:38,000 --> 00:44:41,000 এবং তারপর Rob আমরা একভাবে এই সঞ্চয় করতে পারেন. 824 00:44:41,000 --> 00:44:46,000 এর এই ডাউন এখানে রাখুন যাক, তাই তিনি ইচ্ছামত আইডি [1] হতে যাচ্ছে. 825 00:44:46,000 --> 00:44:50,000 তিনি নামের হতে যাচ্ছে [1], 826 00:44:50,000 --> 00:44:53,000 এবং তারপর সর্বশেষে, ঘর [1]. 827 00:44:53,000 --> 00:44:57,000 >> এখনও একটু ক্লান্তিকর, এবং এখন আমি এই জিনিসটা আছে, 828 00:44:57,000 --> 00:45:03,000 তাই এর বলা যাক "নামগুলো [0] আইডি [0], ঘর [0], 829 00:45:03,000 --> 00:45:06,000 এবং আসুন এই বহুবচনাত্মক. 830 00:45:06,000 --> 00:45:09,000 আইডি, আইডি, আইডি. 831 00:45:09,000 --> 00:45:12,000 এবং আবার, আমি এটা করছি করছেন, তাই আবার, আমি ইতিমধ্যেই / কপি ও পেস্ট করছি আবার অবলম্বী, 832 00:45:12,000 --> 00:45:14,000 তাই মতভেদ আছে এখানে আছে আর একটি সমাধান. 833 00:45:14,000 --> 00:45:18,000 আমি সম্ভবত এই একটি পরিষ্কার যে ভালো লুপ বা কিছু সঙ্গে আরও আপ করতে পারেন, 834 00:45:18,000 --> 00:45:21,000 তাই সংক্ষিপ্ত, এটা কিছুটা ভালো লেগেছে কিন্তু এখনও মতানুযায়ী 835 00:45:21,000 --> 00:45:24,000 আমি / কপি পেস্ট করুন অবলম্বী, কিন্তু করছি এমনকি এই, আমি দাবী, 836 00:45:24,000 --> 00:45:27,000 সঠিক সমাধান সত্যিই মৌলিকভাবে না কারণ 837 00:45:27,000 --> 00:45:29,000 একদা কি যদি আমরা সিদ্ধান্ত নিতে আপনি কি জানেন যে? 838 00:45:29,000 --> 00:45:32,000 আমরা সত্যিই উচিত হয়েছে ডেভিড ও রব জন্য ইমেল ঠিকানা সংরক্ষণ 839 00:45:32,000 --> 00:45:34,000 এবং এই প্রোগ্রাম অন্য সবাই. 840 00:45:34,000 --> 00:45:36,000 আমরা ফোন নম্বর সংরক্ষণ করা উচিত. 841 00:45:36,000 --> 00:45:39,000 আমরা জরুরী পরিচিতি নম্বর সংরক্ষণ করা উচিত. 842 00:45:39,000 --> 00:45:41,000 আমরা সমস্ত তথ্য এই টুকরা যে আমরা সংরক্ষণ করতে চান আছে, 843 00:45:41,000 --> 00:45:43,000 তাই কিভাবে আপনি যে কাজ সম্পর্কে কি যান? 844 00:45:43,000 --> 00:45:46,000 >> আপনি উপরে আরেকটি অ্যারের ঘোষণা করা, এবং তারপর আপনি নিজে যোগ করুন 845 00:45:46,000 --> 00:45:49,000 একটি ইমেল ঠিকানা [0], ইমেল [1] ঠিকানা 846 00:45:49,000 --> 00:45:51,000 জন্য ডেভিড ও রব এবং তাই ঘোষণা. 847 00:45:51,000 --> 00:45:56,000 কিন্তু আসলে সেখানে শুধু অনুমান এই নকশা নিম্নাবস্থিত 848 00:45:56,000 --> 00:45:59,000 যে আমি সম্মান সিস্টেমের জানা am ব্যবহার 849 00:45:59,000 --> 00:46:03,000 [I] বিভিন্ন অ্যারে প্রতিটি 850 00:46:03,000 --> 00:46:06,000 ঠিক একই ব্যক্তির জন্য ঘটবে, 851 00:46:06,000 --> 00:46:10,000 আইডি যাতে [0] নম্বর হল 123, 852 00:46:10,000 --> 00:46:13,000 এবং আমি যে নামগুলি অনুমান চলেছি [0] 853 00:46:13,000 --> 00:46:16,000 একই ব্যক্তির নাম এবং ঘর [0] 854 00:46:16,000 --> 00:46:21,000 একই ব্যক্তির বিভিন্ন অ্যারে নির্মাণ আমি যে সব জন্য ঘর এবং তাই ঘোষণা. 855 00:46:21,000 --> 00:46:24,000 কিন্তু লক্ষ্য করা যে কোন মৌলিক সংযুক্তকরণ আছে 856 00:46:24,000 --> 00:46:27,000 মধ্যে যারা তথ্য, আইডি, নাম এবং ঘরের 3 টুকরা, 857 00:46:27,000 --> 00:46:32,000 যদিও আমরা সত্তা মডেল এই প্রোগ্রামে চেষ্টা করছেন অ্যারে হয় না. 858 00:46:32,000 --> 00:46:35,000 অ্যারেগুলির শুধু এই এই করছেন প্রোগ্রাম্যাটিক উপায়. 859 00:46:35,000 --> 00:46:38,000 আমরা কি সত্যিই আমাদের প্রোগ্রামে মডেল করতে চান সেই ব্যক্তির 860 00:46:38,000 --> 00:46:41,000 ভালো ডেভিড, রব মত যার ভিতরে ব্যক্তি 861 00:46:41,000 --> 00:46:46,000 অথবা encapsulating একটি নাম এবং আইডি এবং একটি ঘর. 862 00:46:46,000 --> 00:46:49,000 >> একরকম আমরা encapsulation এই ধারণা প্রকাশ করতে পারি 863 00:46:49,000 --> 00:46:52,000 যেখানে এক ব্যক্তি একটি আইডি, একটি নাম এবং একটি ঘর আছে 864 00:46:52,000 --> 00:46:55,000 এবং সত্যিই এই হ্যাক যাও রিসোর্ট না যেখানে আমরা শুধু 865 00:46:55,000 --> 00:46:58,000 যে বন্ধনী কিছু বিশ্বাস 866 00:46:58,000 --> 00:47:02,000 একই প্রসঙ্গে এই অসম অ্যারে প্রতিটি মানব সত্তা যাও? 867 00:47:02,000 --> 00:47:04,000 আমরা আসলে এটা করতে পারেন. 868 00:47:04,000 --> 00:47:08,000 আমাকে এখন জন্য উপরে যান প্রধান, এবং আমার নিজের সম্পর্কে তথ্য টাইপ তৈরি দিন 869 00:47:08,000 --> 00:47:10,000 জন্য সত্যিই প্রথম সময়. 870 00:47:10,000 --> 00:47:14,000 আমরা একত্র এই কৌশল ব্যবহার করা হয়, 871 00:47:14,000 --> 00:47:17,000 কিন্তু এখানে আমি এগিয়ে যান এবং একটি ডাটা টাইপ তৈরি করতে চাই, 872 00:47:17,000 --> 00:47:19,000 এবং আপনি কি জানেন যে, আমি ছাত্র বা ব্যক্তির কল চলেছি, 873 00:47:19,000 --> 00:47:23,000 এবং আমি ব্যবহার typedef জন্য একটি টাইপ সংজ্ঞায়িত যাচ্ছি. 874 00:47:23,000 --> 00:47:25,000 আমি যে এই একটি কাঠামো বলতে যাচ্ছি, 875 00:47:25,000 --> 00:47:29,000 এবং তারপর এই টাইপ ছাত্র গঠন করা, আমরা বলবো যাচ্ছে, 876 00:47:29,000 --> 00:47:31,000 যদিও এটা একটু সম্পর্কে জন্য এখন অপ্রচলিত. 877 00:47:31,000 --> 00:47:33,000 আমরা "int-আইডি." বলবো 878 00:47:33,000 --> 00:47:35,000 আমরা "স্ট্রিং নাম." বলবো 879 00:47:35,000 --> 00:47:37,000 তারপর আমরা "স্ট্রিং ঘর," বলবো 880 00:47:37,000 --> 00:47:40,000 তাই এখন আর এই কোড কয়েক লাইনের শেষ 881 00:47:40,000 --> 00:47:45,000 আমি ঠিক আছে ঝনঝন শব্দ শেখানো যে অস্তিত্বও আছে 882 00:47:45,000 --> 00:47:49,000 একটি ints ছাড়াও ডাটা টাইপ, স্ট্রিং ছাড়াও, তদ্ব্যতীত floats ছাড়াও দ্বিগুণ,. 883 00:47:49,000 --> 00:47:54,000 >> সময় লাইন 11 সালে এই মুহূর্তে হিসাবে, হয় এখন সেখানে একটি নতুন ডাটা টাইপ বলা ছাত্র, 884 00:47:54,000 --> 00:47:58,000 এবং এখন আমি একজন ছাত্র ভেরিয়েবল ডিক্লেয়ার কোথাও আমি করতে চান করতে পারেন, 885 00:47:58,000 --> 00:48:01,000 তাই আমাকে স্ক্রল ব্যক্তিদের এখানে নিচে. 886 00:48:01,000 --> 00:48:05,000 এখন আমি এই পরিত্রাণ পেতে এবং আমি ডেভিড ফিরে যেতে এখানে ডাউন করতে পারে, 887 00:48:05,000 --> 00:48:10,000 এবং ডেভিড জন্য আসলে আমি বলতে যে ডেভিড করতে পারেন, 888 00:48:10,000 --> 00:48:13,000 আমরা আক্ষরিক নিজেকে পরে ভেরিয়েবল নাম দিতে পারেন, 889 00:48:13,000 --> 00:48:16,000 টাইপ ছাত্র হতে যাচ্ছে. 890 00:48:16,000 --> 00:48:18,000 এই একটু অদ্ভুত চেহারা, কিন্তু এই সব বিভিন্ন হয় না 891 00:48:18,000 --> 00:48:22,000 থেকে কোন int অথবা একটি স্ট্রিং বা float হিসাবে কিছু প্রকাশক. 892 00:48:22,000 --> 00:48:24,000 এটা ঠিক এরকম যাও এখন ছাত্র নামক করা হবে, 893 00:48:24,000 --> 00:48:28,000 এবং আমি যদি এই কাঠামোর ভিতরে কিছু করা চাই 894 00:48:28,000 --> 00:48:31,000 আমি এখন একটা সিনট্যাক্স নতুন টুকরা ব্যবহার আছে, তবে বেশ সহজবোধ্য, 895 00:48:31,000 --> 00:48:39,000 david.id = 123, david.name = "ডেভিড" মূলধন D এর, 896 00:48:39,000 --> 00:48:42,000 এবং david.house = "মাথের," 897 00:48:42,000 --> 00:48:46,000 এবং এখন আমি এখানে এই স্টাফ পরিত্রাণ পেতে পারেন. 898 00:48:46,000 --> 00:48:51,000 আমরা এখন একটি বিজ্ঞপ্তি করেছি সত্যিই অনেক ভালো ভাবে আমাদের প্রোগ্রাম পুনরায় নকশা 899 00:48:51,000 --> 00:48:54,000 এখন আমাদের মধ্যে যে প্রোগ্রাম বাস্তব জগতে প্রতিফলিত করে. 900 00:48:54,000 --> 00:48:57,000 >> একজন ব্যক্তি বা একটি ছাত্র বাস্তব বিশ্বের ধারণা আছে. 901 00:48:57,000 --> 00:49:02,000 এখানে আমরা এখন একটি একটি ব্যক্তি বা আরো নির্দিষ্টভাবে একটি ছাত্র বা ছাত্রী সি সংস্করণ. 902 00:49:02,000 --> 00:49:05,000 যে ব্যক্তির ভিতর এই প্রাসঙ্গিক বৈশিষ্ট্য, 903 00:49:05,000 --> 00:49:10,000 আইডি, নাম এবং ঘর যাতে, রব মূলত একই জিনিস ডাউন হয়ে এখানে, 904 00:49:10,000 --> 00:49:14,000 তাই ছাত্র অপহরণ করা, এবং এখন = 456 rob.id, 905 00:49:14,000 --> 00:49:17,000 rob.name = "রব." 906 00:49:17,000 --> 00:49:20,000 যে পরিবর্তনশীল Rob বলা হয় অর্থহীন ধরণের. 907 00:49:20,000 --> 00:49:22,000 আমরা এটা বলা x বা y অথবা z থাকতে পারে. 908 00:49:22,000 --> 00:49:25,000 আমরা শুধু নামে এটি যাও শব্দার্থগতভাবে সামঞ্জস্যপূর্ণ হবে Rob, 909 00:49:25,000 --> 00:49:28,000 কিন্তু সত্যিই নামের যে ক্ষেত্র নিজেই ভিতরে হয়, 910 00:49:28,000 --> 00:49:30,000 তাই এখন আমি এই আছে. 911 00:49:30,000 --> 00:49:33,000 এটি খুব ভাল নকশা যে হার্ড আমি ডেভিড করেছি কোডেড মত মনে হয় না. 912 00:49:33,000 --> 00:49:35,000 আমি এটাকে Rob কোডেড. 913 00:49:35,000 --> 00:49:39,000 এবং আমি এখনও কিছু কপি এবং রিসোর্ট প্রত্যেক সময় আমি নতুন ভেরিয়েবলের চান আটকান আছে. 914 00:49:39,000 --> 00:49:43,000 তাছাড়া, আমি দৃশ্যত একটি নাম দিন এই ভেরিয়েবলগুলি প্রতিটি আছে, 915 00:49:43,000 --> 00:49:46,000 যদিও আমি এই ভেরিয়েবলগুলি বরং বর্ণনা চাই 916 00:49:46,000 --> 00:49:48,000  আরো জেনেরিক হিসাবে ছাত্র. 917 00:49:48,000 --> 00:49:52,000 >> এখন আমরা ধারনা যা আমাদের জন্য ভাল কাজ হয়েছে মার্জ করতে পারবেন 918 00:49:52,000 --> 00:49:56,000 এবং এর পরিবর্তে, বলে, "আপনি জানেন কি, সম্পর্কে একটি পরিবর্তনশীল তথাকথিত ছাত্র দিতে, 919 00:49:56,000 --> 00:50:01,000 এবং এর তা মাপ 3 হস্তক্ষেপ না করা, যাতে "এখন আমি এই বিষয়ে আরও পরিমার্জন করতে পারেন, 920 00:50:01,000 --> 00:50:04,000 ম্যানুয়ালি ঘোষিত ডেভিড কাটাতে, 921 00:50:04,000 --> 00:50:08,000 এবং আমি পরিবর্তে ছাত্র ভালো কিছু [0] এখানে বলতে পারেন. 922 00:50:08,000 --> 00:50:11,000 তারপর আমি ছাত্র [0] এখানে বলতে পারেন, 923 00:50:11,000 --> 00:50:14,000 ছাত্র [0] এখানে, তাই এদিক ওদিক, এবং আমি কাছাকাছি যেতে পারেন 924 00:50:14,000 --> 00:50:16,000 এবং যে পরিষ্কার Rob জন্য সাইন আপ করুন. 925 00:50:16,000 --> 00:50:19,000 আমি এখন হয়তো একটি লুপ যোগ করা যেতে পারে 926 00:50:19,000 --> 00:50:23,000 এবং GetString এবং GetInt প্রকৃতপক্ষে ব্যবহারকারী থেকে এই মান ব্যবহার করে পাওয়া. 927 00:50:23,000 --> 00:50:27,000 আমি একটি ধ্রুবক যোগ করার কারণ সম্পর্কে এই সাধারণত কুক্রিয়া যেতে পারে 928 00:50:27,000 --> 00:50:29,000 হার্ড কোড কিছু ভালো 3 নম্বর অবাধ অধিকার এখানে 929 00:50:29,000 --> 00:50:33,000 এবং তখনই মনে রাখবেন যে আপনি এটি কোন অধিক 3 ছাত্র করা উচিত. 930 00:50:33,000 --> 00:50:36,000 এটা সম্ভবত হতে ভাল আমার ফাইল শীর্ষে # ব্যবহার সংজ্ঞায়িত করবে 931 00:50:36,000 --> 00:50:40,000 এবং ফ্যাক্টর যে আউট, তাই প্রকৃতপক্ষে, সম্পর্কে এগিয়ে যান এবং এই বিশ্বজনীন করা যাক. 932 00:50:40,000 --> 00:50:43,000 >> আমাকে একটি উদাহরণ এর মধ্যে আজ যে খুলতে আপ 933 00:50:43,000 --> 00:50:46,000 উদাহরণ অগ্রিম, structs1. 934 00:50:46,000 --> 00:50:49,000 এটি একটি সম্পূর্ণ আরো প্রোগ্রাম ব্যবহার করে এমন # আপ এখানে সংজ্ঞায়িত 935 00:50:49,000 --> 00:50:51,000 এবং বলে আমরা ডিফল্টরূপে 3 ছাত্র আছে চলুন. 936 00:50:51,000 --> 00:50:54,000 এখানে আমি একটি ছাত্র বর্গ মূল্য ঘোষণা করছি, 937 00:50:54,000 --> 00:50:57,000 তাই ছাত্র একটি শ্রেণীকক্ষ, এবং এখন আমি একটি লুপ ব্যবহার করা 938 00:50:57,000 --> 00:51:00,000 শুধু কোড সামান্য আরো মার্জিত না, বর্গ পূরণ 939 00:51:00,000 --> 00:51:05,000 ব্যবহারকারীর ইনপুট দিয়ে, তাই থেকে আমি = 0 আপ বারবার ছাত্র, যা 3. 940 00:51:05,000 --> 00:51:07,000 এবং তারপর আমি এই সংস্করণ ব্যবহারকারী চটপট 941 00:51:07,000 --> 00:51:10,000  ছাত্র এর আইডি কি, এবং আমি GetInt সঙ্গে এটি পেতে. 942 00:51:10,000 --> 00:51:13,000 ছাত্র এর নাম কি, এবং তারপর আমি এটা দিয়ে GetString পেতে. 943 00:51:13,000 --> 00:51:15,000 ছাত্র এর ঘর কি? আমি GetString সঙ্গে এটি পেতে. 944 00:51:15,000 --> 00:51:19,000 এখানে নীচে এবং তারপর আমি পরিবর্তন ঠিক করার সিদ্ধান্ত নিয়েছে 945 00:51:19,000 --> 00:51:22,000 কিভাবে আমি এই মুদ্রণ করছি আউট এবং প্রকৃতপক্ষে একটি লুপ ব্যবহার, 946 00:51:22,000 --> 00:51:24,000 আমি কে এবং মুদ্রণ am? 947 00:51:24,000 --> 00:51:27,000 মন্তব্য অনুযায়ী আমি মাথের সকলের মুদ্রণ করছি, 948 00:51:27,000 --> 00:51:30,000 এবং যে তাই রব এবং টমি এবং তাই ঘোষণা-আসলে মাথের টমি এর মধ্যে. 949 00:51:30,000 --> 00:51:34,000 Tommy এবং ডেভিড এই ক্ষেত্রে, প্রিন্ট করা যাবে কিন্তু কিভাবে এই কাজ করছে? 950 00:51:34,000 --> 00:51:40,000 আমরা আগে দেখা এই ফাংশন নি, কিন্তু কি আছে এই হিসাবে একটি অনুমান নিতে. 951 00:51:40,000 --> 00:51:42,000 স্ট্রিং সাথে তুলনা করে. 952 00:51:42,000 --> 00:51:45,000 >> এটা একটা সামান্য অ সুস্পষ্ট কিভাবে এটি স্ট্রিং তুলনা করা হয় না কারণ এটি সক্রিয় আউট 953 00:51:45,000 --> 00:51:49,000 এটি যদি 0 ফেরৎ মানে স্ট্রিং হয় সমান. 954 00:51:49,000 --> 00:51:53,000 যদি এটি একটি -1 ফেরৎ মানে এক অন্য আগে বর্ণানুক্রমে আসে, 955 00:51:53,000 --> 00:51:57,000 এবং এটি যদি +1- ফেরৎ যে অন্যান্য শব্দ মানে বর্ণানুক্রমে আসে 956 00:51:57,000 --> 00:52:00,000 আগে অন্যান্য, এবং আপনি অনলাইন এ অথবা man পৃষ্ঠা দেখুন পারেন 957 00:52:00,000 --> 00:52:04,000 যা হুবহু উপায় যা দেখতে, কিন্তু এখন এই সব করছে এটা বলছে এর 958 00:52:04,000 --> 00:52:09,000 যদি [i]. ঘর সমান "মাথের" যাও 959 00:52:09,000 --> 00:52:13,000 তারপর এগিয়ে যান এবং যাতে মুদ্রণ এবং মাথের তাই হয়. 960 00:52:13,000 --> 00:52:16,000 কিন্তু এখানে এর আগে আমরা কিছু আছে দেখা যায় না, এবং আমরা ফিরে পাবেন. 961 00:52:16,000 --> 00:52:21,000 আমি কখনও আমার এই প্রোগ্রাম কোনো কাজ হচ্ছে না প্রত্যাহার. 962 00:52:21,000 --> 00:52:24,000 মেমরি মুক্ত করা হয় দৃশ্যত নির্দেশকারী, মেমরি freeing, 963 00:52:24,000 --> 00:52:31,000 কি মেমরি কিন্তু আমি এই লুপ দৃশ্যত am এই প্রোগ্রাম নীচে freeing? 964 00:52:31,000 --> 00:52:34,000 দেখে মনে হচ্ছে আমি একজন ব্যক্তির নাম freeing করছি 965 00:52:34,000 --> 00:52:37,000 এবং একজন ব্যক্তির বাড়িতে, কিন্তু কেন হল? 966 00:52:37,000 --> 00:52:41,000 >> তা সব এই সপ্তাহের আউট সক্রিয় যে আপনি হয়েছি GetString ব্যবহার 967 00:52:41,000 --> 00:52:45,000 আমরা ধরনের প্রোগ্রাম করেছি আপনার প্রতি এক মধ্যে একটি বাগ সংশোধন করা হয়েছে পরিচায়ক. 968 00:52:45,000 --> 00:52:51,000 GetString নকশা মেমরি বরাদ্দ দ্বারা যাতে এটি আপনাকে একটি স্ট্রিং ফিরে যেতে পারেন, 969 00:52:51,000 --> 00:52:55,000 ভালো ডেভিড, বা রব, এবং তারপর আপনি করতে পারেন যাহা চান 970 00:52:55,000 --> 00:52:59,000 সঙ্গে প্রোগ্রামে আপনার স্ট্রিং কারণ আমরা আপনার জন্য সংরক্ষিত মেমরি করেছি. 971 00:52:59,000 --> 00:53:02,000 সমস্যা হল এই সব সময় প্রত্যেক সময় আপনি কল GetString 972 00:53:02,000 --> 00:53:05,000 আমরা, GetString এর লেখক, হয়েছে অপারেটিং সিস্টেম জিজ্ঞাসা 973 00:53:05,000 --> 00:53:07,000 এই পংক্তিটি দিতে উপস্থিত RAM-র একটি বিট আমাদের. 974 00:53:07,000 --> 00:53:09,000 পরের দিন এই পংক্তিটি উপস্থিত RAM-র একটি বিট আমাদের. 975 00:53:09,000 --> 00:53:11,000 আমাদের এই পরের পংক্তি জন্য কিছু অধিক RAM দিন. 976 00:53:11,000 --> 00:53:13,000 আপনি কি, প্রোগ্রামার, কাজ হয়েছে না 977 00:53:13,000 --> 00:53:15,000 আমাদের যে মেমরি ফেরত প্রদান করা হয়, 978 00:53:15,000 --> 00:53:17,000 সুতরাং এই কয়েক সপ্তাহের জন্য প্রোগ্রামের সমস্ত আপনি লিখিত করেছি 979 00:53:17,000 --> 00:53:20,000 কি ছিল একটি মেমরি লীপ নামক এর সাহায্যে তারা ব্যবহার করে রাখা 980 00:53:20,000 --> 00:53:24,000 আরো এবং আরো মেমরি প্রতি সময় আপনি কল GetString, এবং যে সূক্ষ্ম. 981 00:53:24,000 --> 00:53:27,000 আমরা ইচ্ছাকৃতভাবে প্রথম সপ্তাহের মধ্যে যে না, কারণ এটা যে আকর্ষণীয় না 982 00:53:27,000 --> 00:53:29,000 যাও যেখানে স্ট্রিং থেকে আসছে চিন্তা আছে. 983 00:53:29,000 --> 00:53:34,000 সমস্ত চান শব্দ হল ফিরে আসা যখন ব্যবহারকারী এটি ধরনের ইন Rob 984 00:53:34,000 --> 00:53:38,000 >> কিন্তু গতির আমরা এখন যাও পেয়ে এই সম্পর্কে আরো পরিশীলিত শুরু আছে. 985 00:53:38,000 --> 00:53:42,000 কোন সময় আমরা মেমরি বরাদ্দ আমরা আরও ভালোভাবে শেষ পর্যন্ত ফিরে হাতে. 986 00:53:42,000 --> 00:53:45,000 অন্যথায় আপনার পিসিতে Mac বা বাস্তব জগতে আপনি মাঝে মাঝে অভিজ্ঞ থাকতে পারে 987 00:53:45,000 --> 00:53:50,000 উপসর্গ যেখানে আপনার কম্পিউটার অবশেষে একটি স্থগিত যাও হয়রান হয় 988 00:53:50,000 --> 00:53:54,000 অথবা কেবল মূঢ় স্পিনিং সৈকত বল কম্পিউটার এর অধিষ্ঠিত হয় 989 00:53:54,000 --> 00:53:56,000 সম্পূর্ণ মনোযোগ এবং জিনিষ আপনি করতে পারবেন না. 990 00:53:56,000 --> 00:54:00,000 যে বাগ কোনো সংখ্যা দ্বারা ব্যাখ্যা করা সম্ভব হয়, কিন্তু মধ্যে যারা সম্ভব বাগ 991 00:54:00,000 --> 00:54:03,000 বলা হয় জিনিষ মেমরি তথ্য ফাঁসের যদ্দ্বারা কেউ সফ্টওয়্যারের যে টুকরা লিখেছেন 992 00:54:03,000 --> 00:54:07,000 আপনি কি মেমরি মুক্ত মনে না ব্যবহার করছেন 993 00:54:07,000 --> 00:54:10,000 যে সে জন্য অপারেটিং সিস্টেম বলা, 994 00:54:10,000 --> 00:54:14,000 ব্যবহার করে, GetString না, কারণ যে একটি CS50 জিনিস, কিন্তু অনুরূপ ফাংশান ব্যবহার করে 995 00:54:14,000 --> 00:54:16,000 যে অপারেটিং সিস্টেম মেমরির জন্য জিজ্ঞাসা করুন. 996 00:54:16,000 --> 00:54:19,000 যদি আপনি বা তারা আপ স্ক্রু এবং প্রকৃতপক্ষে যে মেমরি ফেরত না 997 00:54:19,000 --> 00:54:24,000 একটি লক্ষণ যে একটি প্রোগ্রাম এবং গতি গতি গতি এবং ডাউন হতে পারেন 998 00:54:24,000 --> 00:54:26,000 যদি না আপনি বিনামূল্যে কল মনে রাখবেন. 999 00:54:26,000 --> 00:54:28,000 >> আমরা যখন ফিরে আসবে এবং কেন আপনি বিনামূল্যে ডাকবেন করব, 1000 00:54:28,000 --> 00:54:32,000 কিন্তু আসুন এগিয়ে শুধু ভাল পরিমাপ জন্য যান এবং এই প্রোগ্রাম চালানোর চেষ্টা. 1001 00:54:32,000 --> 00:54:35,000 এই structs1 বলা ছিল, লিখুন. 1002 00:54:35,000 --> 00:54:40,000 সম্পর্কে এগিয়ে যান এবং structs1 চালানো যাক 123,, ডেভিড মাথের, 1003 00:54:40,000 --> 00:54:47,000 456, রব কার্কল্যান্ড, 789, 1004 00:54:47,000 --> 00:54:50,000 টমি মাথের, এবং আমরা মাথের ডেভিড এর দেখতে, মাথের টমি এর মধ্যে. 1005 00:54:50,000 --> 00:54:53,000 এটি অল্পমাত্র সদ্বিবেচনা চেক যে প্রোগ্রাম কাজ করছে. 1006 00:54:53,000 --> 00:54:56,000 এখন দুর্ভাগ্যবশত,, এই প্রোগ্রামটি যে একটু হতাশাজনক 1007 00:54:56,000 --> 00:55:00,000 আমি যে সব কাজ করে থাকেন, আমি বিভিন্ন 9 স্ট্রিং টাইপ করা, আঘাত লিখুন, 1008 00:55:00,000 --> 00:55:04,000 মাথের যারা ছিল ডটকমকে বলেন, এখনো ছিল স্পষ্টত আমি জানতাম মাথের যারা ইতিমধ্যে ছিল কারণ আমি এটা টাইপ. 1009 00:55:04,000 --> 00:55:07,000 এটা অন্ততঃ চমৎকার যদি এই প্রোগ্রামটি একটি ডাটাবেসের মত হবে 1010 00:55:07,000 --> 00:55:10,000 এবং এটা আসলে মনে কি আমি টাইপ করা আছে 1011 00:55:10,000 --> 00:55:12,000 তাই আমি এইসব ছাত্র রেকর্ড ইনপুট আবার কখনও. 1012 00:55:12,000 --> 00:55:15,000 হতে পারে এটি একটি registrarial সিস্টেমের মত. 1013 00:55:15,000 --> 00:55:21,000 >> আমরা এই কাজের জন্য এই কৌশল ফাইল ইনপুট / আউটপুট, ফাইল ইনপুট এবং আউটপুট হিসাবে পরিচিত ব্যবহার করতে পারেন, 1014 00:55:21,000 --> 00:55:24,000 যে কোনো সময় আপনি বা ফাইল পড়া ফাইল লিখতে চান বলছে খুব জেনেরিক পন্থা 1015 00:55:24,000 --> 00:55:26,000 আপনি একটি নির্দিষ্ট ফাংশন সেট দিয়ে এটা করতে পারেন. 1016 00:55:26,000 --> 00:55:29,000 সম্পর্কে এগিয়ে যান এবং এই উদাহরণ structs2.c খুলুন যাক, 1017 00:55:29,000 --> 00:55:33,000 যা প্রায় অনুরূপ, কিন্তু এর যাক কি এখন এটা দেখতে. 1018 00:55:33,000 --> 00:55:36,000 ফাইলের উপরে আমি ছাত্র একটি বর্গ ডিক্লেয়ার. 1019 00:55:36,000 --> 00:55:38,000 আমি তারপর ব্যবহারকারী ইনপুট এর সঙ্গে বর্গ পূরণ, 1020 00:55:38,000 --> 00:55:41,000 তাই ঠিক কোড যারা লাইন আগে মতই. 1021 00:55:41,000 --> 00:55:45,000 তারপর যদি আমি নিচে স্ক্রোল করুন এখানে মুদ্রণ আমি প্রত্যেকের মাথের মধ্যে যারা ইচ্ছামত আগের মতই, 1022 00:55:45,000 --> 00:55:47,000 কিন্তু এই একটি নতুন আকর্ষণীয় বৈশিষ্ট্য. 1023 00:55:47,000 --> 00:55:51,000 কোড এই লাইনে নতুন, এবং তারা কিছু এখানে পরিচয় করিয়ে, 1024 00:55:51,000 --> 00:55:55,000 ফাইল, সব বড় হাতের অক্ষর, এবং এটা এখানে * হিসাবে ভাল হয়েছে. 1025 00:55:55,000 --> 00:55:58,000 আমাকে এখানে উপর এই সরানোর জন্য এখানে একটি * হিসাবে ভাল. 1026 00:55:58,000 --> 00:56:00,000 >> এই ফাংশন আমরা আগে দেখা যায় না, fopen, 1027 00:56:00,000 --> 00:56:03,000 কিন্তু এটা মানে ফাইল খোলা, তাই এইসব এর মাধ্যমে সর পড়া যাক, 1028 00:56:03,000 --> 00:56:05,000 এবং এই হল কিছু আমরা আসতে ভবিষ্যতে psets ফিরে যাব, 1029 00:56:05,000 --> 00:56:10,000 কিন্তু এখানে মূলত এই লাইন নামক একটি ফাইল খোলেন ডাটাবেস, 1030 00:56:10,000 --> 00:56:13,000 এবং বিশেষভাবে এটি এমনভাবে তৈরি হয়েছে যে এটি কি কিছু করতে পারি তা প্রর্দশিত হবে? 1031 00:56:13,000 --> 00:56:15,000 [শ্রবণাতীত-ছাত্র] 1032 00:56:15,000 --> 00:56:19,000 রাইট, তাই "W" ঠিক মানে এটি অপারেটিং সিস্টেম এর কহন 1033 00:56:19,000 --> 00:56:21,000 এমনভাবে যে আমি এটা লিখতে পারেন এই ফাইলটি খুলুন. 1034 00:56:21,000 --> 00:56:23,000 আমি সেটা পড়তে চাই না. আমি শুধু এটা তাকান না চান. 1035 00:56:23,000 --> 00:56:26,000 আমি এবং পরিবর্তন স্টাফ যুক্ত সম্ভাব্য এটি করতে চান, 1036 00:56:26,000 --> 00:56:28,000 এবং ফাইল করা হবে নামক ডাটাবেস যাচ্ছে. 1037 00:56:28,000 --> 00:56:30,000 এই কিছু বলা হতে পারে. 1038 00:56:30,000 --> 00:56:32,000 এই database.txt হতে পারে. এই. Db হতে পারে. 1039 00:56:32,000 --> 00:56:37,000 এই foo এর মত একটি শব্দ হতে পারে, কিন্তু আমি ইচ্ছামত ফাইল ডাটাবেসের নাম করতে পারে. 1040 00:56:37,000 --> 00:56:42,000 এটি একটি সামান্য সদ্বিবেচনা চেক যে আমরা ফিরে সময়ের মহান বিষদভাবে করব, 1041 00:56:42,000 --> 00:56:47,000 যদি ফাইল পয়েন্টার জন্য fp,, আছে সমান শূন্য না মানে সব ঠিক থাকে. 1042 00:56:47,000 --> 00:56:51,000 >> লং সংক্ষিপ্ত বিবরণ, কখনও কখনও fopen ভালো কর্ম বিফল হয় না. 1043 00:56:51,000 --> 00:56:53,000 হয়তো ফাইল বিদ্যমান নেই. হতে পারে আপনি ডিস্ক স্থান ফুরিয়েছে. 1044 00:56:53,000 --> 00:56:55,000 হতে পারে আপনি যে ফোল্ডারে অনুমতি না থাকে, 1045 00:56:55,000 --> 00:56:58,000 তাই যদি fopen নাল ফেরৎ খারাপ কিছু ঘটেছে. 1046 00:56:58,000 --> 00:57:02,000 বিপরীতভাবে, যদি fopen নাল না রিটার্ন করে সব ঠিক থাকে 1047 00:57:02,000 --> 00:57:04,000 এবং আমি লেখার এই ফাইলটি যাও শুরু করতে পারেন. 1048 00:57:04,000 --> 00:57:06,000 এখানে একটি নতুন কৌতুক. 1049 00:57:06,000 --> 00:57:08,000 এটি একটি লুপ জন্য যে আমার ছাত্র প্রতিটি iterating এর উপর, 1050 00:57:08,000 --> 00:57:10,000 এবং এই দেখায় কি আমরা আগে সম্পন্ন করেছি যাতে একই, 1051 00:57:10,000 --> 00:57:15,000 কিন্তু এই ফাংশন হল একটি পিসতুত ভাই printf ফাইল printf জন্য fprintf বলা হয়, 1052 00:57:15,000 --> 00:57:18,000 এবং লক্ষ্য করা এটা শুধুমাত্র 2 উপায়ে বিভিন্ন. 1053 00:57:18,000 --> 00:57:20,000 এক, এটি পরিবর্তে পি চ সঙ্গে শুরু হয়, 1054 00:57:20,000 --> 00:57:23,000 কিন্তু তারপর তার প্রথম যুক্তি হল, দৃশ্যত: কি? 1055 00:57:23,000 --> 00:57:25,000 [ছাত্রদের] ফাইল. >> এটা একটা ফাইল. 1056 00:57:25,000 --> 00:57:30,000 এই জিনিস বলা fp, যা অবশেষে আমরা জ্বালাতন করা সরাইয়া কি একটি ফাইল পয়েন্টার হয় করব, 1057 00:57:30,000 --> 00:57:35,000 কিন্তু এখন জন্য simply fp উপস্থাপন করে যে ফাইলটি আমি খোলা আছে, 1058 00:57:35,000 --> 00:57:41,000 তাই fprintf এখানে ফাইল এই ব্যবহারকারীর আইডি প্রিন্ট বলছে, না পর্দা না. 1059 00:57:41,000 --> 00:57:44,000 ফাইলটি ব্যবহারকারীর নাম, না পর্দা মুদ্রণ করুন, 1060 00:57:44,000 --> 00:57:47,000 ফাইল, না পর্দায়, এবং তারপর নিচে, এখানে সম্ভবত ঘর, 1061 00:57:47,000 --> 00:57:50,000 ফাইল বন্ধ করে তারপর নিচে এবং এখানে মেমরি মুক্ত. 1062 00:57:50,000 --> 00:57:53,000 >> এই সংস্করণ 2 এবং সংস্করণ 1 মধ্যে একমাত্র পার্থক্য 1063 00:57:53,000 --> 00:57:58,000 হয় fopen প্রবর্তনের এবং * সঙ্গে এই ফাইল 1064 00:57:58,000 --> 00:58:01,000 এবং fprintf এই ধারণা, তাই এর দেখতে দিন কি শেষ ফলাফল হল. 1065 00:58:01,000 --> 00:58:03,000 আমাকে আমার টার্মিনাল উইন্ডোর মধ্যে যান. 1066 00:58:03,000 --> 00:58:06,000 সম্পর্কে structs2 চালানো যাক, লিখুন. 1067 00:58:06,000 --> 00:58:09,000 মনে হচ্ছে সব ঠিক থাকে. চলুন structs2 পুন: প্রকাশ. 1068 00:58:09,000 --> 00:58:15,000 123, ডেভিড মাথের, 456, রব কার্কল্যান্ড, 1069 00:58:15,000 --> 00:58:19,000 789, টমি মাথের, লিখুন. 1070 00:58:19,000 --> 00:58:23,000 দেখে মনে হচ্ছে এটি একই ভদ্র, কিন্তু এখন যদি আমি ls না 1071 00:58:23,000 --> 00:58:28,000 এখানে কি সব ফাইল আমার কোড মধ্যে বিজ্ঞপ্তি, ডাটাবেস, 1072 00:58:28,000 --> 00:58:32,000 তাই আসুন যে, যে সময়ে gedit, এবং ডাটাবেসের বর্ণন খুলুন. 1073 00:58:32,000 --> 00:58:34,000 এই ফাইল ফরম্যাটের sexiest না. 1074 00:58:34,000 --> 00:58:38,000 এটা সত্যিই প্রতি লাইনে প্রতি লাইনে তথ্য লাইনের এক টুকরা, 1075 00:58:38,000 --> 00:58:42,000 কিন্তু আপনাদের মধ্যে যারা এক্সেল বা CSV ফাইল ব্যবহার, কমা দিয়ে পৃথক করা মান, 1076 00:58:42,000 --> 00:58:47,000 আমি fprintf অবশ্যই ব্যবহার করেছেন পরিবর্তে হয়তো ভালো কিছু করতে পারে 1077 00:58:47,000 --> 00:58:50,000 যাতে আমি আসলে একটি এক্সেল ফাইল সমতুল্য তৈরি করতে পারি 1078 00:58:50,000 --> 00:58:53,000 কমা দ্বারা শুধুমাত্র নতুন লাইন না দিয়ে আলাদা জিনিষ. 1079 00:58:53,000 --> 00:58:56,000 >> এই ক্ষেত্রে আমি যদি পরিবর্তে কমা পরিবর্তে নতুন লাইন ব্যবহার করে 1080 00:58:56,000 --> 00:59:01,000 আমি আক্ষরিক Excel এ এই ডাটাবেস ফাইল যদি পরিবর্তে আমি এটি ভালো চেহারা খোলা যায়নি. 1081 00:59:01,000 --> 00:59:03,000 সংক্ষেপে এখন, আমরা যে ফাইল লিখতে ক্ষমতা আছে 1082 00:59:03,000 --> 00:59:07,000 আমরা এখন অক্লান্ত তথ্য, শুরু পালন ডিস্ক এটি প্রায় পারেন 1083 00:59:07,000 --> 00:59:10,000 যাতে আমরা চারপাশে তথ্য আবার এবং আবার রাখতে পারেন. 1084 00:59:10,000 --> 00:59:14,000 অন্য যে এখন একটি বিট আরো পরিচিত কয়েক লক্ষ্য করুন. 1085 00:59:14,000 --> 00:59:16,000 এই সি ফাইল শীর্ষে আমরা একটি typedef আছে 1086 00:59:16,000 --> 00:59:21,000 কারণ আমরা একটি তথ্য টাইপ যে একটি শব্দ উপস্থাপন তৈরী করতে চান, 1087 00:59:21,000 --> 00:59:25,000 তাই এই ধরনের শব্দ বলা হয়, এবং ভিতর এই গঠন 1088 00:59:25,000 --> 00:59:27,000 এটা এখন একটি সামান্য কল্পনাকারী. 1089 00:59:27,000 --> 00:59:30,000 কেন একটি শব্দ হয় দৃশ্যত একটি অ্যারের গঠিত? 1090 00:59:30,000 --> 00:59:33,000 একটি শব্দ মাত্র intuitively কি? 1091 00:59:33,000 --> 00:59:35,000 >> এটা অক্ষরের একটি অ্যারে. 1092 00:59:35,000 --> 00:59:37,000 এটা ফিরে অক্ষরের একটি ক্রম যাও যাও ব্যাক ব্যাক. 1093 00:59:37,000 --> 00:59:41,000 সব ক্যাপ অক্ষরগুলি যাও আমরা ইচ্ছামত বলতে হবে এরকম সর্বাধিক দৈর্ঘ্য 1094 00:59:41,000 --> 00:59:44,000 এর অভিধান যে আমরা একত্র জন্য ব্যবহার করছেন কোন শব্দ. 1095 00:59:44,000 --> 00:59:46,000 কেন আমি +1 টি আছে? 1096 00:59:46,000 --> 00:59:48,000 নাল অক্ষর. 1097 00:59:48,000 --> 00:59:51,000 পুনরাহ্বান যখন আমরা Bananagrams উদাহরণ কি আমরা একটি বিশেষ মান প্রয়োজন 1098 00:59:51,000 --> 00:59:55,000 এ শব্দের শেষে আদেশ ট্র্যাক রাখা 1099 00:59:55,000 --> 00:59:59,000 যেখানে আসলে শব্দের শেষ, এবং সমস্যা হিসাবে সেট স্পেসিফিকেশন বলছেন 1100 00:59:59,000 --> 01:00:03,000 এখানে আমরা একটি প্রদত্ত শব্দটির সঙ্গে একটি বুলিয়ান মান সংযুক্ত করছি, 1101 01:00:03,000 --> 01:00:05,000 একটি পতাকা, তাই, কথা সত্য বা মিথ্যা. 1102 01:00:05,000 --> 01:00:09,000 আপনি কি এই শব্দ ইতিমধ্যে পাওয়া গেছে, কারণ আমরা বুঝতে পারছি 1103 01:00:09,000 --> 01:00:13,000 আমরা সত্যিই মনে রাখার একটি উপায় প্রয়োজন শুধু কি একত্র একটা শব্দ হয় 1104 01:00:13,000 --> 01:00:15,000 কিন্তু আছে কিনা বা আপনি না, মানব, এটি পাওয়া 1105 01:00:15,000 --> 01:00:20,000 যাতে আপনি যদি না খুঁজে শব্দ "" আপনি টাইপ করতে পারেন না, লিখুন, লিখুন, লিখুন 1106 01:00:20,000 --> 01:00:23,000 এবং 3 পয়েন্ট, 3 পয়েন্ট, 3 পয়েন্ট, 3 পয়েন্ট পেতে. 1107 01:00:23,000 --> 01:00:26,000 আমরা একটি bool সেটিং দ্বারা যে শব্দ বছর সক্ষম হতে চান 1108 01:00:26,000 --> 01:00:29,000 সত্য যদি আপনি ইতিমধ্যে এটি খুঁজে পেয়েছি, তাই এবং সে জন্যই আমরা 1109 01:00:29,000 --> 01:00:31,000 এই কাঠামো এটি encapsulated. 1110 01:00:31,000 --> 01:00:35,000 >> এখন, নিচে একত্র এখানে এই অন্যান্য struct নামক অভিধান আছে. 1111 01:00:35,000 --> 01:00:39,000 এখানে অনুপস্থিত শব্দ typedef কারণ এই ক্ষেত্রে 1112 01:00:39,000 --> 01:00:43,000 আমরা একটি অভিধান ধারণা encapsulate প্রয়োজন, 1113 01:00:43,000 --> 01:00:46,000 এবং একটি অভিধান একটি শব্দ আভা রয়েছে, 1114 01:00:46,000 --> 01:00:49,000 এই অ্যারে দ্বারা হিসাবে উহ্য, এবং কিভাবে ঐ শব্দের অনেক আছে? 1115 01:00:49,000 --> 01:00:51,000 ওয়েল, যাই হোক না কেন এই পরিবর্তনশীল নামক আকার বলছেন. 1116 01:00:51,000 --> 01:00:53,000 তবে আমরা একটি অভিধান দরকার. 1117 01:00:53,000 --> 01:00:55,000 আমরা একটি ডাটা টাইপ বলা অভিধান প্রয়োজন হয় না. 1118 01:00:55,000 --> 01:00:58,000 আমরা শুধু তাদের একজন প্রয়োজন, যাতে সি সক্রিয় আউট 1119 01:00:58,000 --> 01:01:03,000 আপনি যদি typedef না বলে, আপনি struct বলে, তারপর ভিতরে কোঁকড়া ধনুর্বন্ধনী 1120 01:01:03,000 --> 01:01:05,000 আপনি আপনার ভেরিয়েবল করা থাকে, তাহলে আপনি নামের করা. 1121 01:01:05,000 --> 01:01:09,000 এই এক পরিবর্তনশীল অভিধান বলা হয় প্রকাশক 1122 01:01:09,000 --> 01:01:11,000 যে ভালো দেখায়. 1123 01:01:11,000 --> 01:01:16,000 বিপরীতে, এই লাইন একটি পুনর্ব্যবহারযোগ্য তথ্য গঠন নামক শব্দ তৈরি হয় 1124 01:01:16,000 --> 01:01:19,000 যে আপনি একাধিক কপি তৈরি করা, ঠিক মত আমরা তৈরি করতে পারেন 1125 01:01:19,000 --> 01:01:22,000 ছাত্র একাধিক কপি. 1126 01:01:22,000 --> 01:01:24,000 >> এই কি শেষ পর্যন্ত আমাদের কি দেয়? 1127 01:01:24,000 --> 01:01:30,000 সম্পর্কে ফিরে যেতে মধ্যে, এর কথা বলা যাক সহজ বার থেকে একটি সহজ উদাহরণ, যাক, 1128 01:01:30,000 --> 01:01:34,000 এবং সম্পর্কে পূর্ণপ্রকাশিত করা যাক, এর কথা বলা যাক, compare1.c. 1129 01:01:34,000 --> 01:01:38,000 হাতের এখানে সমস্যা হল ফিরে আসলে ছুলা 1130 01:01:38,000 --> 01:01:41,000 একটি স্ট্রিং এর স্তর এবং এই প্রশিক্ষণ গ্রহণ কায়দা করে চলতে শুরু করা 1131 01:01:41,000 --> 01:01:44,000 কারণ এটি সক্রিয় যে একটি স্ট্রিং সব সময় এই আউট 1132 01:01:44,000 --> 01:01:47,000 এটা সত্যিই হিসাবে সপ্তাহ 1 সালে আমরা শুধু একটি ডাক নাম প্রতিশ্রুতি, 1133 01:01:47,000 --> 01:01:51,000 একটি প্রতিশব্দ থেকে কিছু যে দেখায় একটু আরো রহস্যপূর্ণ জন্য CS50 লাইব্রেরি, 1134 01:01:51,000 --> 01:01:53,000 * গৃহস্থালির কাজ, এবং আমরা এই তারকা দেখা করেছি আগে. 1135 01:01:53,000 --> 01:01:55,000 আমরা ফাইল প্রেক্ষাপটে এটা দেখেছি. 1136 01:01:55,000 --> 01:01:59,000 >> চলুন এখন আমরা কেন করছি কিছু সময় এই জন্য এখন গোপন বিস্তারিত দেখুন. 1137 01:01:59,000 --> 01:02:02,000 এখানে একটি ফাইল নামক compare1.c, 1138 01:02:02,000 --> 01:02:07,000 এবং দৃশ্যত: এটি 2 স্ট্রিং জন্য ব্যবহারকারী জিজ্ঞেস করে, গুলি এবং টন, 1139 01:02:07,000 --> 01:02:11,000 এবং তারপর এটি যাও লাইন 26 মধ্যে সমতা জন্য যারা স্ট্রিং তুলনা করার চেষ্টা করে, 1140 01:02:11,000 --> 01:02:14,000 এবং যদি তারা সমান এটা বলে, "আপনি একই জিনিস করে টাইপ করেছেন," 1141 01:02:14,000 --> 01:02:17,000 এবং যদি তারা সমান পারব না এটা বলে, "আপনি বিভিন্ন জিনিষ টাইপ করা." 1142 01:02:17,000 --> 01:02:19,000 আমাকে এগিয়ে যান এবং এই প্রোগ্রামটি চালানোর জন্য. 1143 01:02:19,000 --> 01:02:23,000 আমার সম্পর্কে সোর্স ডিরেক্টরিতে যাওয়া যাক, একটি compare1 করা. এটা ঠিক আছে কম্পাইল. 1144 01:02:23,000 --> 01:02:25,000 আমাকে compare1 চালানো. 1145 01:02:25,000 --> 01:02:27,000 আমি ইন, জুম প্রবেশ করব. 1146 01:02:27,000 --> 01:02:29,000 কিছু বলুন. হ্যালো. 1147 01:02:29,000 --> 01:02:32,000 আমি আবার কিছু বলবো. হ্যালো. 1148 01:02:32,000 --> 01:02:34,000 আমি স্পষ্টভাবে বিভিন্ন জিনিষ টাইপ না. 1149 01:02:34,000 --> 01:02:37,000 >> আমাকে আবার এই চেষ্টা. Bye Bye. 1150 01:02:37,000 --> 01:02:40,000 বিভিন্ন কখনোই না, তাই এখানে কি করছেন? 1151 01:02:40,000 --> 01:02:44,000 হ্যাঁ, সত্যিই কি লাইন 26 মধ্যে তুলনা করা হচ্ছে? 1152 01:02:44,000 --> 01:02:46,000 [শ্রবণাতীত-ছাত্র] 1153 01:02:46,000 --> 01:02:49,000 হ্যাঁ, তাই এটি সক্রিয় করে একটি স্ট্রিং ডাটা টাইপ, একটি সাদা মিথ্যা ধরনের. 1154 01:02:49,000 --> 01:02:53,000 একটি স্ট্রিং একটি গৃহস্থালি *, কিন্তু কি একটি গৃহস্থালি *? 1155 01:02:53,000 --> 01:02:56,000 একটি গৃহস্থালি *, তারা যা বলে, একটি পয়েন্টার, 1156 01:02:56,000 --> 01:03:00,000 এবং একটি পয়েন্টার কার্যকরভাবে একটি ঠিকানা, 1157 01:03:00,000 --> 01:03:05,000 মেমরির সমষ্টি অবস্থান, এবং যদি আপনি এরকম একটি শব্দ হ্যালো মত টাইপ করা আছে, 1158 01:03:05,000 --> 01:03:08,000 স্ট্রিং বিগত আলোচনা থেকে প্রত্যাহার 1159 01:03:08,000 --> 01:03:16,000 এই শব্দ ভালো হয় হ্যালো. 1160 01:03:16,000 --> 01:03:19,000 মনে রাখবেন যে, হ্যালো মত একটি শব্দ প্রতিনিধিত্ব করা যাবে 1161 01:03:19,000 --> 01:03:22,000 হিসাবে অক্ষরের একটি ভালো অ্যারে 1162 01:03:22,000 --> 01:03:25,000 একটি শেষে বিশেষ অক্ষর দিয়ে তারপর নাল এবং চরিত্র বলা হয়, 1163 01:03:25,000 --> 01:03:27,000 হিসাবে \ উল্লেখ করে. 1164 01:03:27,000 --> 01:03:29,000 আসলে কি একটি স্ট্রিং? 1165 01:03:29,000 --> 01:03:32,000 উল্লেখ্য, এই মেমরি একাধিক অংশ, 1166 01:03:32,000 --> 01:03:36,000 এবং আসলে, এটি শুধুমাত্র শেষে বলা হয় একবার আপনি পুরো স্ট্রিং দেখেত্ত 1167 01:03:36,000 --> 01:03:38,000 বিশেষ অক্ষর নাল খুঁজছি. 1168 01:03:38,000 --> 01:03:41,000 কিন্তু এই যদি হয় আমার কম্পিউটার এর মেমরি থেকে মেমরি একটি খণ্ড, 1169 01:03:41,000 --> 01:03:44,000 আসুন ইচ্ছামত যে ঠিক এই পংক্তি না ভাগ্যবান, 1170 01:03:44,000 --> 01:03:47,000 এবং এটি আমার কম্পিউটারের RAM-র খুব প্রারম্ভে স্থাপন করা হবে. 1171 01:03:47,000 --> 01:03:54,000 এটি বাইট 0, 1, 2, 3, 4, 5, 6 ... 1172 01:03:54,000 --> 01:04:02,000 >> যখন আমি GetString ভালো কিছু বলুন এবং আমি স্ট্রিং গুলি = GetString না 1173 01:04:02,000 --> 01:04:04,000 এর কি ফিরে হচ্ছে? 1174 01:04:04,000 --> 01:04:08,000 এই গত কয়েক সপ্তাহ, সত্যিই কি s এ সঞ্চিত হচ্ছে 1175 01:04:08,000 --> 01:04:13,000 হয়, কিন্তু কোনটাই এই পংক্তি না এই ক্ষেত্রে কি সঞ্চিত করা হচ্ছে হল 1176 01:04:13,000 --> 01:04:18,000 কি আসলে GetString আছে কারণ 0 নম্বর 1177 01:04:18,000 --> 01:04:20,000 এটি শারীরিকভাবে একটি স্ট্রিং রিটার্ন করে না. 1178 01:04:20,000 --> 01:04:22,000 যে সত্যিই আছে এমনকি ধারণাগত ইন্দ্রিয় না. 1179 01:04:22,000 --> 01:04:24,000 এটি কী জন্য ফেরত একটি সংখ্যা. 1180 01:04:24,000 --> 01:04:28,000 যে সংখ্যা হল হ্যালো মেমরির মধ্যে ঠিকানা, 1181 01:04:28,000 --> 01:04:32,000 এবং তারপর স্ট্রিং গুলি, ফিরে ছুলা যদি আমরা এই স্তর, সত্যিই স্ট্রিং বিদ্যমান না. 1182 01:04:32,000 --> 01:04:35,000 এটা মাত্র CS50 লাইব্রেরি একটি সরলীকরণ. 1183 01:04:35,000 --> 01:04:38,000 >> এই আসলেই কিছু বলা গৃহস্থালি *. 1184 01:04:38,000 --> 01:04:41,000 চর বিষয়টি যুক্তিযুক্ত কারণ কি হ্যালো মত একটি শব্দ,? 1185 01:04:41,000 --> 01:04:44,000 ওয়েল, এটা একটা সিরিজ অক্ষর, অক্ষর একটি সিরিজ. 1186 01:04:44,000 --> 01:04:47,000 চর * একটি চরিত্র ঠিকানা মানে, 1187 01:04:47,000 --> 01:04:50,000 তাই এটি একটি স্ট্রিং ফিরে মানে? 1188 01:04:50,000 --> 01:04:53,000 একটি সুন্দর, একটি স্ট্রিং ফেরত সহজ উপায় 1189 01:04:53,000 --> 01:04:57,000 হয় বরং জিনিসটা কিভাবে আমি 5 বা 6 বিভিন্ন বাইট ফিরে চেষ্টা 1190 01:04:57,000 --> 01:05:01,000 আমাকে যা বাইট ঠিকানা যাও ফিরে? 1191 01:05:01,000 --> 01:05:03,000 প্রথম এক. 1192 01:05:03,000 --> 01:05:06,000 অন্য কথায়, আমাকে আপনি যা মেমরির মধ্যে একটি চরিত্রের ঠিকানা দিন. 1193 01:05:06,000 --> 01:05:10,000 এটা কি গৃহস্থালি * প্রতিনিধিত্ব করে, এক মেমরির মধ্যে একক চরিত্রের ঠিকানা. 1194 01:05:10,000 --> 01:05:12,000 যে পরিবর্তনশীল গুলি কল করুন. 1195 01:05:12,000 --> 01:05:15,000 S এ যে নির্দিষ্ট দোকান ঠিকানা, যা ইচ্ছামত আমি বলেন 0, 1196 01:05:15,000 --> 01:05:19,000 জিনিসের সহজ রাখা, কিন্তু এটা বাস্তবতা সাধারণত এর একটি বড় সংখ্যা. 1197 01:05:19,000 --> 01:05:21,000 >> একটি মিনিট অপেক্ষা করুন. 1198 01:05:21,000 --> 01:05:23,000 যদি কেবলমাত্র আপনার প্রদান করছি প্রথম অক্ষরের ঠিকানা সম্পর্কে, কিভাবে আমি কি ঠিকানা হল জানি না 1199 01:05:23,000 --> 01:05:25,000 দ্বিতীয় অক্ষর, তৃতীয়, চতুর্থ এবং পঞ্চম? 1200 01:05:25,000 --> 01:05:27,000 [শ্রবণাতীত-ছাত্র] 1201 01:05:27,000 --> 01:05:31,000 আপনি কেবলমাত্র যেখানে স্ট্রিং শেষ এই কুশলী কৌতুক এইভাবে হয় জানি, 1202 01:05:31,000 --> 01:05:35,000 তাই যখন আপনি কিছু ভালো ব্যবহার printf, কি যুক্তি হিসাবে printf আক্ষরিক লাগে, 1203 01:05:35,000 --> 01:05:39,000 যে আমরা এই% s-প্লেসহোল্ডার ব্যবহার প্রত্যাহার, এবং তারপর আপনি মধ্যে পাস 1204 01:05:39,000 --> 01:05:41,000 পরিবর্তনশীল যে একটি স্ট্রিং এর সংরক্ষণকারী. 1205 01:05:41,000 --> 01:05:47,000 আপনি কি সত্যিই করছি ক্ষণস্থায়ী হয় স্ট্রিং প্রথম অক্ষরটি ঠিকানা. 1206 01:05:47,000 --> 01:05:50,000 Printf তারপর লুপ বা লুপ করার জন্য যে ঠিকানা প্রাপ্তির উপর একটি ব্যবহার করে, 1207 01:05:50,000 --> 01:05:53,000 উদাহরণস্বরূপ, 0, তাই আমাকে এই এখন না, 1208 01:05:53,000 --> 01:06:02,000 printf ("% s \ n," গুলি); 1209 01:06:02,000 --> 01:06:07,000 আমি যখন কল printf ("% s \ n," গুলি); কি সত্যিই আমি সঙ্গে প্রদান করছি printf 1210 01:06:07,000 --> 01:06:13,000 প্রথম অক্ষরের মধ্যে গুলি ঠিকানা, যা এই অবাধ ক্ষেত্রে এইচ 1211 01:06:13,000 --> 01:06:16,000 >> কিভাবে printf না জানি কি ঠিক পর্দায় প্রদর্শন যাও? 1212 01:06:16,000 --> 01:06:19,000 যে ব্যক্তি বাস্তবায়িত printf একটি লুপ করার জন্য একটি লুপ বা বাস্তবায়িত 1213 01:06:19,000 --> 01:06:23,000 যে জন্য এই বিশেষ অক্ষর নাল অক্ষর সমান? 1214 01:06:23,000 --> 01:06:25,000 যদি না হয় তাহলে, এটি মুদ্রণ. কিভাবে আমার এই এক? 1215 01:06:25,000 --> 01:06:28,000 যদি এটা মুদ্রণ না, এটা, মুদ্রণ এটি মুদ্রণ, এটা মুদ্রণ. 1216 01:06:28,000 --> 01:06:32,000 ওহ, এই একটি বিশেষ. মুদ্রণ এবং থামুন ব্যবহারকারী যাও ফিরে. 1217 01:06:32,000 --> 01:06:35,000 এবং যে আক্ষরিক সব যে ফণা নীচে এর ঘটছে করা হয়েছে, 1218 01:06:35,000 --> 01:06:38,000 এবং যে অনেক ক্লাসের প্রথম দিনে হজম যাও, 1219 01:06:38,000 --> 01:06:43,000 কিন্তু এটি এখন জন্য সত্যিই বোঝার কিছু বিল্ডিং ব্লক 1220 01:06:43,000 --> 01:06:46,000 যে আমাদের কম্পিউটার এর মেমরি ভেতরের যাচ্ছে করা হয়েছে, 1221 01:06:46,000 --> 01:06:49,000 এবং অবশেষে আমরা একটু সাহায্য সঙ্গে এই জ্বালাতন করা সরাইয়া করব 1222 01:06:49,000 --> 01:06:51,000 থেকে আমাদের বন্ধুদের মধ্যে একটি স্ট্যানফোর্ড. 1223 01:06:51,000 --> 01:06:56,000 >> অধ্যাপক নিক Parlante স্ট্যানফোর্ড এই বিস্ময়কর ভিডিও ক্রম করেনি সম্পন্ন 1224 01:06:56,000 --> 01:06:58,000 থেকে বিভিন্ন ভাষায় যে চালু সব বিশৃঙ্খলভাবে 1225 01:06:58,000 --> 01:07:00,000 এই সামান্য Claymation অক্ষর Binky. 1226 01:07:00,000 --> 01:07:03,000 ভয়েস আপনার সম্পর্কে করছি মাত্র কয়েক দ্বিতীয় স্নিক প্রিভিউ শুনতে 1227 01:07:03,000 --> 01:07:05,000 একটি স্ট্যানফোর্ড বিশ্ববিদ্যালয়ের অধ্যাপক যে, এবং আপনি পেয়ে থাকেন 1228 01:07:05,000 --> 01:07:07,000 এই অধিকার শুধুমাত্র 5 বা 6 যাও এখন, 1229 01:07:07,000 --> 01:07:09,000 কিন্তু এই নোট আমরা আজ শেষ করা হবে 1230 01:07:09,000 --> 01:07:11,000 বুধবার এবং শুরু. 1231 01:07:11,000 --> 01:07:15,000 আমি দিতে Binky, প্রাকদর্শন সঙ্গে পয়েন্টার আপনি মজা. 1232 01:07:15,000 --> 01:07:18,000 [♪ ♪ সঙ্গীত] [অধ্যাপক Parlante] আরে, Binky. 1233 01:07:18,000 --> 01:07:21,000 ওয়েক আপ. এটা মজা করার জন্য পয়েন্টার সময়. 1234 01:07:21,000 --> 01:07:24,000 [Binky] কি যে? পয়েন্টার সম্পর্কে জানুন? 1235 01:07:24,000 --> 01:07:26,000 ওহ, বুড়ি! 1236 01:07:26,000 --> 01:07:29,000 >> আমরা বুধবার আপনাকে দেখতে হবে. 1237 01:07:29,000 --> 01:07:32,000 [CS50.TV]