DAVID Malan: ঠিক আছে, ফিরে আসার জন্য স্বাগতম. এটি CS50. এই সপ্তাহে সাত শুরু. সুতরাং এটি একটি সময় হয়েছে, তাই আমি মনে করি আমরা চাই এর যেখানে আমরা একটি ঘূর্ণিবায়ু ট্যুর নিতে বাকি বন্ধ এবং আমরা এখন কোথায় যাচ্ছেন. এই জিনিস এখানে থাকতে পারে তাই প্রথমে কিছু angst হত. কিন্তু আশা করছি, আপনি শুরু করছি এখানে এই নির্দেশ কি acclimate - যা একটি পয়েন্টার, প্রতিনিধিত্বমূলক তারা আরো layman এর পরিপ্রেক্ষিতে ঠিক কি,? সুতরাং এটি একটি ঠিকানা আছে. সুতরাং এটি ঠিকানা মেমরির মধ্যে কিছু. এবং আমরা ফিরে ছুলা স্তর শুরু কয়েক সপ্তাহ আগে, ভীষণ পছন্দ GetString, এবং অন্যান্য যেমন ফাংশন এই সব সময় ফিরে হয়েছে মত মেমরি জিনিস ঠিকানা, প্রথম অক্ষরের ঠিকানা কিছু ক্রম. সুতরাং আমরা Valgrind চালু যা আপনি এই সমস্যার জন্য ব্যবহার করতে শুরু করব বিশেষ করে পরের জন্য, সেট সমস্যা হিসাবে ভাল সেট. এবং Valgrind আমাদের জন্য কি আছে? এটি মেমরি তথ্য ফাঁসের জন্য পরীক্ষা করা হবে, এবং এটা মেমরি ব্যবহার অপব্যবহারের জন্য পরীক্ষা করা হবে. এটা, কিছু সম্ভাবনা সঙ্গে সনাক্ত করা সম্ভব হলে আপনার কোড মেমরি স্পর্শ যাচ্ছে যে সহজভাবে তা করা উচিত নয়. সুতরাং একটি লিক অগত্যা, কিন্তু আপনি যদি না কিছু সীমানা অতিক্রম অ্যারে, এবং আসলে আপনি Valgrind চালানো এবং যে আচরণ প্রবর্তিত যখন Valgrind আপনার প্রোগ্রাম চলছে এটা ভিতরে চলমান, আপনি পাবেন ভালো বার্তা - "অবৈধ সম্পর্কে লিখুন , একটি দম্পতি প্রত্যাহার যা আকার 4 " সপ্তাহ আগে আমি ঘটনাক্রমে ছিল যে বোঝানো অতিদূরে এক int-এ পছন্দ মত একটি অ্যারের সীমা অতিক্রম. তাই আকার 4 এখানে মাপ মানে যে বিশেষ int-এর. তাই আসলে আশ্বস্ত গ্রহণ Valgrind এর আউটপুট, এটা বিন্যাস, শুধু atrocious হয়. এটি জগাখিচুড়ি মাধ্যমে দেখতে সত্যিই কঠিন আকর্ষণীয় তথ্যের জন্য. তাই কি আমরা এখানে কাজ করেছি মাত্র উদ্ধৃতাংশ হয় আরো দম্পতি কিছু মজার লাইন. কিন্তু বুঝি যে Valgrind এর 80% আউটপুট একটি একটি বিট হতে যাচ্ছে ক্ষোভ. শুধু এই মত নিদর্শন জন্য সন্ধান - ডান অবৈধ, অবৈধ, 40 বাইট পড়া এবং ব্লক কিছু সংখ্যা স্পষ্টভাবে হয় যে মত অভিব্যক্তি, হারিয়ে গেছে. এবং আপনি কি আশা দেখতে পাবেন কিছু হয় কাজ কি ট্রেস ধরনের ভুল করেননি আসলে এখানে এই ক্ষেত্রে, কি লাইন আমার কোড দৃশ্যত ত্রুটি হয়েছিল? যা ছিল memory.c নামক একটি ফাইলের মধ্যে 26 আমরা সঙ্গে বাজানো হয় যেমন সময়. সুতরাং এটা malloc সম্ভবত না. এটা পরিবর্তে আমার কোড মধ্যে সম্ভবত ছিল না. তাই আমরা আবার এই দেখতে পাবেন এবং আবার আগে দীর্ঘ. Scanf সুতরাং, এই একটি মধ্যে এসেছেন এ পর্যন্ত ধরনের দম্পতি. আমরা সংক্ষেপে sscanf দেখেছি. এটা কিছু একটি সংখ্যা ছিল আপনি আপনার মধ্যে dived ব্যঙ্গ জন্য প্রস্তুতি. এবং scanf আসলে কি হয় এবং CS50 গ্রন্থাগারের নীচে ব্যবহার করা হয়েছে যাতে বেশ কিছু সময়ের জন্য ফণা ব্যবহারকারীর কাছ থেকে ইনপুট পেতে. উদাহরণস্বরূপ, আমি এবং CS50 উপর সরানো হলে যন্ত্র, এখানে একটি সম্পর্কে খুলুন যাক scanf-0.c বলা হচ্ছে যে উদাহরণ আজ এবং এটা অতি সহজ. এটি শুধু একটি কোড কয়েক লাইন এর. কিন্তু এটা প্রমান সত্যিই কিভাবে GetInt এই সময়ে সব কাজ করা হয়েছে. লাইন 16 এখানে এই প্রোগ্রাম ইন, , আমি কোন int ডিক্লেয়ার যে বিজ্ঞপ্তি. তাই কোন পয়েন্টার, ঐন্দ্রজালিক কিছুই আছে, ঠিক কোন int. তারপর লাইন 17, আমি অনুরোধ একটি সংখ্যা জন্য ব্যবহারকারীকে, দয়া করে. তারপর দেরী 18, আমি এখানে scanf ব্যবহার করুন. এবং আমি চিহ্নিত ধরনের মত printf, এর, আমি আশা করছি যে উদ্ধৃতি শতাংশ আমি unquote. শতাংশ আমি, অবশ্যই, কোন int হল. কিন্তু লক্ষ্য করা কি দ্বিতীয় scanf আপনি যুক্তি. আপনি কিভাবে দ্বিতীয় বর্ণনা করবেন কমা পরে যুক্তি? যে কি? এটা x এর ঠিকানা. তাই এই কারণ সরবরাহ করে দরকারী x এর ঠিকানা দিয়ে scanf, কি আছে যে কাজ যে ফাংশন ক্ষমতাবান? না ঠিক আছে যান, কিন্তু কি করবেন? এটি পরিবর্তন করুন. আপনি সেখানে যেতে পারেন, কারণ এটি সাজানোর এর মেমরির মধ্যে একটি অবস্থান একটা ম্যাপ. তাই যতদিন আপনি প্রদান scanf, অথবা যেমন একটি মানচিত্র, যে কোনো ফাংশন ফাংশন আছে যান, এবং পারে না শুধুমাত্র মান তাকান, কিন্তু এটি করতে পারেন যদি দরকারী, যা মান, পরিবর্তন scanf জীবনের উদ্দেশ্য হল নির্দিষ্টভাবে, ব্যবহারকারীর কাছ থেকে ইনপুট স্ক্যান কীবোর্ড থেকে. চ, ঠিক মত ফরম্যাট নির্দেশ printf,, চ একটি বিন্যস্ত নির্দেশ আপনি প্রিন্ট করতে চান যে পংক্তি. তাই সংক্ষিপ্ত, এই লাইন 18 সহজভাবে বলছেন, ব্যবহারকারীর থেকে কোন int পড়তে চেষ্টা করুন কীবোর্ড এবং এ, x এর ভিতরে এটি সংরক্ষণ এক্স বাস ঘটবে যাই হোক না কেন ঠিকানা. এবং তারপর সর্বশেষে, লাইন 19 ঠিক বলেছেন, এই ক্ষেত্রে কোন int জন্য ধন্যবাদ. তাই আমাকে এগিয়ে যান এবং এই করা যাক. সুতরাং scanf 0 না. আমাকে এগিয়ে যান এবং জুম চলুন শুরু করা যাক আমি সঙ্গে যান এবং এই রান করব বিন্দু scanf 0 কাট. সংখ্যা, দয়া করে? 50. 50 জন্য ধন্যবাদ. সুতরাং এটা বেশ সহজ. এটা এখন কি করছে না? এটা একটা আভা করছেন না ত্রুটি পরীক্ষণ. উদাহরণস্বরূপ, আমি সহযোগিতা না, এবং আমি একটি সংখ্যা টাইপ করুন, না কিন্তু এর পরিবর্তে আমি "হ্যালো," মত কিছু লিখুন যে অদ্ভুত শুধু ধরনের. জিনিষ এবং CS50 এবং তাই এক গ্রন্থাগারের কিছু আমাদের জন্য কাজ করা হয়েছে সময় যে reprompting হয় এবং reprompting. পুনরায় চেষ্টা করুন ফ্রেজ রিকল, cs50.c ছিল এবং যে GetInt মধ্যে কারণে CS50 লাইব্রেরি আসলে একটি সম্পূর্ণ হয় দীর্ঘ লাইন গুচ্ছ, আমরা কারণ ভালো মূঢ় উপাদান জন্য চেক করা হচ্ছে. ব্যবহারকারী দেয় নি আমাদের, আসলে, কোন int? সে আমাদের কিছু দিতে হয়নি একটি বর্ণানুক্রমিক অক্ষর ভালো লেগেছে? যদি তাই হয়, আমরা সনাক্ত করতে চান এবং যে তাদের চিত্কার. কিন্তু আরও বেশি আকর্ষণীয় পেতে এই পরের উদাহরণ. আমি scanf-1.c যান, কি এক মৌলিকভাবে মধ্যে পরিবর্তিত হয় যে জিনিস এই পরের উদাহরণ? আমি, অবশ্যই, গৃহস্থালি * ব্যবহার করছি পরিবর্তে int-এর. কারণ গৃহস্থালি * তাই এই,, আকর্ষণীয় স্মরণ করছি, শুধু সত্যিই হয় স্ট্রিং একই জিনিস. সুতরাং এটা হয়ত মত এই একটি সুপার মতানুযায়ী GetString, সহজ বাস্তবায়ন. কিন্তু আমি স্তর ফিরে peeled করেছি CS50 লাইব্রেরি, আমি আছি তাই এখন এই গৃহস্থালি * কলিং. সুতরাং এর দেখতে দিন যেখানে, যে কোন স্থানে যদি, আমরা ভুল হয়ে যেতে পারে. লাইন 17 - আমি আবার, আমাকে কিছু দিতে দয়া করে বলে, এই ক্ষেত্রে, একটি পংক্তি. এবং তারপর পরের লাইন, আমি, scanf কল আবার, এটি একটি কোড বিন্যাস প্রদান, কিন্তু এই সময় শতাংশ গুলি. এবং তারপর এই সময়, আমি এটি বাফার প্রদান. এখন আমি ব্যবহার করছি না, বিজ্ঞপ্তি ampersand. কিন্তু এখানে কেন যে সম্ভবত ঠিক আছে? ইতিমধ্যে বাফার কি কারণ? যদি এটি ইতিমধ্যে একটি পয়েন্টার. এটি ইতিমধ্যে একটি ঠিকানা আছে. যাক এই শব্দ আমাকে, "গুলান" এর শুধু জন্য উদাহরণস্বরূপ, এটি গুলি কল সরলতা. কিন্তু আমি এটা বাফার বলা করেছি কারণ সাধারণ, প্রোগ্রামিং, আপনি একটি থাকে তাহলে মেমরি খণ্ড, যা একটি স্ট্রিং সত্যিই ঠিক, আপনি এটি একটি বাফার কল হতে পারে না. এটি তথ্য সংরক্ষণ করার জন্য একটি জায়গা. যখন ইউটিউব, ভালো জিনিস অনুরূপ তারা, তাই কথা বলতে, বাফার উপলব্ধ করছি এটা থেকে বিট ডাউনলোড মানে ইন্টারনেট এবং তাদের সংরক্ষণকারী স্থানীয় অ্যারের, তাই মেমরি স্থানীয় খণ্ড আপনি ছাড়া এটা পরে দেখতে পারেন যে এটি কুঁদন বা ঝুলন্ত আপনি ফিরে যখন বাজানো. সুতরাং একটি সমস্যা, যদিও এখানে আছে আমি scanf কহন করছি, কারণ আশা ব্যবহারকারী থেকে পংক্তি. এখানে ঠিকানা মেমরি একটি খণ্ড. সেখানে স্ট্রিং রাখুন. কেন যে বাউন্ড দিতে হয় যদিও আমাদের কষ্ট,? ওটা কি? আমি অ্যাক্সেস করতে অনুমোদিত am মেমরি যে অংশ? আপনি কি জানেন, আমি জানি না. বাফার সক্রিয়া করা হয়েছে কারণ কিছু? না সত্যিই. এবং তাই আমরা আহ্বান করছি কি একটি আবর্জনা মান, যা একটি প্রথাগত শব্দ নয়. এটা ঠিক আমরা কি বিট কোন ধারণা আছে মানে যে চার বাইট এর ভিতর আছে আমি বাফার হিসাবে বরাদ্দ করেছেন. আমি malloc বলা হয় নি. আমি স্পষ্টভাবে GetString, বলা হয় না করেছি. সুতরাং যারা আসলে জানেন কি বাফার এর ভিতরে? এবং এখনো scanf কহন অন্ধভাবে, সেখানে যান এবং ব্যবহারকারী টাইপ যাই হোক না কেন রাখা. তাই কারণ সম্ভবত কি আমাদের কোড আমরা এটি চালানোর জন্য তাহলে কি হবে? সম্ভবত একটি segfault. হয়ত না, কিন্তু সম্ভবত একটি segfault. এবং আমি বলতে হয়ত না, কারণ কখনও কখনও আপনি মাঝে মাঝে, কি আপনি একটি segfault পাবেন না. কখনও কখনও আপনি শুধু পেতে ভাগ্যবান, কিন্তু আছে এটা তবু হতে যাচ্ছে আমাদের প্রোগ্রামে একটি বাগ. তাই আমাকে এগিয়ে যান এবং এই সঙ্কলন করা যাক. আমি এটা পুরানো স্কুল উপায় কাজ করতে যাচ্ছি. তাই ঝনঝন ড্যাশ 0, scanf-1, scanf-1.c লিখুন. ওহো, খুব বেশি পুরানো স্কুল. এর দেখতে দিন. আমি কোথায় গেছে? ওহ, গৃহস্থালি * বাফার. ওহ, আপনাকে ধন্যবাদ - ঠিক আছে, সংরক্ষণ করুন - খুব পুরানো স্কুল. ঠিক আছে, এটি একটি সময় হয়েছে. তাই আমি ঠিক ফাইল পরে সংরক্ষিত করেছি যে অস্থায়ী তৈরীর একটি মুহূর্ত আগে পরিবর্তন. এবং এখন আমি এটা কম্পাইল করা হয়েছে নিজে ঝনঝন সঙ্গে. এবং এখন আমি এগিয়ে যান যাচ্ছে না এবং Enter, scanf-1 রান. স্ট্রিং করুন. আমি টাইপ করব "হ্যালো." এবং এখন, এখানে printf,, সত্যি, যেখানে একটু বিরক্তিকর হতে পারে. এটা আসলে যাচ্ছে না এই ক্ষেত্রে segfault. Printf একটু বিশেষ কারণ এটা সাধারণভাবে ব্যবহৃত তাই সুপার যে মূলত printf, করছে আমাদের একটা উপকার এবং বুঝতে, যে একটি বৈধ পয়েন্টার না. নিজেকে ঠিক মুদ্রণ উপর আমার সম্পর্কে এটি করা যাক এব w বন্ধনী ববহার নাল আউট, এমনকি এটা অপরিহার্যভাবে না যদিও কি আমরা আমাদের নিজেদের প্রত্যাশিত. সুতরাং আমরা সত্যিই খুব সহজে প্রবর্তিত করতে পারবে না এই পরিষ্কারভাবে এই সঙ্গে segfault, কিন্তু আছে আমি চেয়েছি আচরণ নয়. তাই সহজ সমাধান কি? ওয়েল, scanf-2, সম্পর্কে উত্থাপন করা যাক যে পরিবর্তে শুধু একটি বণ্টন গৃহস্থালি *, আমাকে একটু বুদ্ধিমতী করা যাক এই, এবং আমাকে বাফার বরাদ্দ করা যাক 16 অক্ষরের একটি ক্রম হিসেবে. তাই আমি উপায় কয়েক মধ্যে এটা করতে পারেন. আমি একেবারে malloc ব্যবহার করতে পারেন. কিন্তু আমি সপ্তাহে দুই থেকে ফিরে যেতে পারেন যখন আমি আভা প্রয়োজন অক্ষর. যে শুধু একটি অ্যারে. তাই আমাকে পরিবর্তে বাফার পুনরায় সংজ্ঞায়িত করা যাক 16 অক্ষরের একটি অ্যারের হবে. এবং এখন, যখন আমি বাফার পাস - এবং এই আমরা না হয় কিছু সপ্তাহে দুই সম্পর্কে কথা - কিন্তু আপনি এমন একটি অ্যারে হিসাবে বিবেচনা করতে পারেন এটি একটি ঠিকানা যদিও. আমরা দেখা করেছি টেকনিক্যালি,, তারা একটি সামান্য বিট বিভিন্ন. আপনি এটি পাস কিন্তু যদি scanf মনে না করা একটি অ্যারের নাম, কারণ কি আমাদের মূলত জন্য ঝনঝন করতে হবে যে অ্যারের নাম আচরণ 16 বাইট খণ্ড ঠিকানা. তাই এই ভাল. এই এখন আমি আশা করতে পারেন এর মানে হল যে নিম্নোক্ত কাজ করুন. আমাকে একটি মুহূর্ত জন্য জুম আউট করা যাক এবং ঠিক আছে কম্পাইল scanf-2, করতে. এখন আমার সম্পর্কে স্ল্যাশ scanf-2 পেয়েছিলাম না দেওয়া. স্ট্রিং করুন. "হ্যালো." এবং এটা এই সময় কাজ করলো. কিন্তু কেউ একটি দৃশ্যকল্প উত্থাপন করতে পারেন যা এখনও এটি কাজ না হতে পারে? হ্যাঁ? 16 অক্ষরের চেয়ে দীর্ঘতর কিছু. এবং প্রকৃতপক্ষে, আমরা হতে পারে একটি সামান্য আরো সুনির্দিষ্ট. আর তারপর 15 অক্ষর কিছু, সত্যিই আমরা মনে রাখা প্রয়োজন, কারণ আমরা যে ব্যাকস্ল্যাশ শূন্য প্রয়োজন পরোক্ষভাবে স্ট্রিং এর শেষে, যা একটি সরাইয়া scanf সাধারণত হবে আমাদের জন্য যত্ন নিতে. তাই আমার মত কিছু করতে যাক - কখনও কখনও আমরা ঠিক করতে পারেন যে মত এটি ছেড়ে. ঠিক আছে, তাই আমরা এখন প্রবর্তিত করেছি আমাদের সেগমেন্টেশন ফল্ট. কেন? আমি অধিক 15 টাইপ কারণ অক্ষর, এবং তাই আসলে আমরা করেছি স্পর্শ মেমরি যে আমি আসলে হবে না. তাই কি সত্যিই এখানে সমাধান? ভাল, আমরা একটি দীর্ঘ স্ট্রিং কি প্রয়োজন হলে? ভাল, আমরা হয়ত এটা 32 বাইট না. ওয়েল, এটা কি যথেষ্ট নয় তাহলে কি হবে? কিভাবে 64 বাইট? কি যে দীর্ঘ যথেষ্ট না হলে? কিভাবে 128 বা 200 বাইট? কি সত্যিই এখানে সমাধান সাধারণ ক্ষেত্রে, আমরা জানি না ব্যবহারকারী টাইপ করা যাচ্ছে কি আগাম? এটা গাধা বড় ব্যথা শুধু ধরনের সৎ হবে, যা কেন CS50 লাইব্রেরি একটি কয়েক ডজন লাইন আছে সম্মিলিতভাবে বাস্তবায়ন যে কোড আমরা না একটি উপায় যে স্ট্রিং GetString অগ্রিম জানা আছে কি ব্যবহারকারী টাইপ করা যাচ্ছে. বিশেষ করে, যদি আপনি পিছনে তাকান cs50.c দুই সপ্তাহ আগে থেকে, আপনি দেখতে পাবেন যে GetString, আসলে আছে এই ভাবে scanf ব্যবহার করে না. বরঞ্চ, এটি একটি অক্ষর সার্চ একটি সময়ে. কারণ প্রায় এক চমৎকার জিনিস একটি অক্ষর পড়া আমরা করতে পারেন সবসময় নিজেদেরকে গ্যারান্টি অন্তত একটি গৃহস্থালি আছে. আমি নিতে তারপর একটি গৃহস্থালি ঘোষণা করতে পারেন শুধু এই সত্যিকারের শিশুর পদক্ষেপ একটি সময়ে একটি অক্ষর পড়া কীবোর্ড থেকে সময়. এবং তারপর, আপনি কি GetString, দেখতে পাবেন আছে, এটি রান আউট প্রতিটি সময় , মেমরি 16 বাইট বলে, এটি ব্যবহার করে malloc, অথবা একটি মামাতো ভাই উহার যাও পুরাতন কপি আরো মেমরি বরাদ্দ করা এর পরে নতুন, এবং বুকে - হাঁটা মধ্যে মেমরি বরাবর,, একটি সময়ে এক চরিত্র পেয়ে এবং এটা যে রান আউট যখন মেমরি খণ্ড, grabs দূরে ছোঁড়ার মেমরি বড় খণ্ড, পুরাতন কপি করা এক্সপ্লোর পরিচালনা, এবং পুনরাবৃত্তি করে. এবং এটি আসলে সত্যিই একটি ব্যাথা হিসাবে হিসাবে সহজ কিছু বাস্তবায়ন একজন ব্যবহারকারী থেকে ইনপুট পেয়ে. সুতরাং আপনি scanf ব্যবহার করতে পারেন. আপনি অন্যান্য অনুরূপ ফাংশন ব্যবহার করতে পারেন. এবং একটি পাঠ্যবই অনেক অনলাইন উদাহরণ করতে, কিন্তু তারা সব করছি ভালো সমস্যার ঝুঁকির মুখে. এবং পরিণামে, একটি segfault হচ্ছে ধরনের বিরক্তিকর হয়. এটি ব্যবহারকারীর জন্য ভালো নয়. কিন্তু সবচেয়ে খারাপ ক্ষেত্রে, কি আছে এটি মৌলিকভাবে আপনার করা ঝুঁকি কোড? আক্রমণের কিছু ধরনের, সম্ভাব্য. আমরা এক ধরনের আক্রমণ সম্পর্কে বললাম - স্ট্যাকের উদ্বেল. তবে সাধারণভাবে, আপনি অনুমতি দেওয়া করছি ওভারফ্লো একটি বাফার, যেমন আমরা একটি করেনি শুধু লেখা দিয়ে সপ্তাহ আগে দম্পতি, আরো স্ট্যাক "হ্যালো", আপনি প্রকৃতপক্ষে একটি, সম্ভাব্য, দায়িত্ব নিতে পারেন কম্পিউটার, বা অন্তত তথ্য পেতে যে আপনি অন্তর্গত নয়. আমরা কেন এত সংক্ষেপে, এই হল যারা প্রশিক্ষণ চাকার. কিন্তু এখন, আমরা তাদের বন্ধ করা শুরু আমাদের প্রোগ্রাম আর প্রয়োজন, ব্যবহারকারী থেকে অগত্যা, ইনপুট. কিন্তু সমস্যা ক্ষেত্রে, ছয় সেট আপনার ইনপুট একটি বিশাল থেকে আসা হবে 150 সঙ্গে অভিধান ফাইল কিছু অদ্ভুত হাজার শব্দ. সুতরাং আপনি সম্পর্কে চিন্তা করতে হবে না ব্যবহারকারীর নির্বিচারে ইনপুট. আমরা আপনাকে কিছু অনুমিতি আপনাকে যে ফাইল সম্পর্কে. পয়েন্টার বা scanf উপর কোন প্রশ্ন অথবা সাধারণ ব্যবহারকারীর ইনপুট? ঠিক আছে, তাই এক সময়ে তারপর একটি দ্রুত বর্ণন দুই সপ্তাহ আগে থেকে বিষয় নিতে. এবং যে একটি struct এই ধারণা ছিল. নেই যে - একটি এই ধারণা কি ছিল, যা struct? Struct আমাদের জন্য কি করবেন? ব্যাখ্যা করুন - দুঃখিত? একটি পরিবর্তনশীল টাইপ সংজ্ঞায়িত. সুতরাং সাজানোর. আমরা আসলে দুটি বিষয় মিশ্রন করছি. Typedef সঙ্গে সুতরাং, যে আমরা করতে পারেন প্রত্যাহার একটি মত, আমাদের নিজস্ব একটি টাইপ ডিক্লেয়ার গৃহস্থালি * জন্য স্ট্রিং মত সমার্থক. কিন্তু typedef এবং struct ব্যবহার করে, আমরা করতে পারেন সত্যিই আমাদের নিজস্ব ডাটা স্ট্রাকচার নির্মাণ করুন. উদাহরণস্বরূপ, আমি ফিরে যেতে হলে gedit মধ্যে এখানে শুধু একটা মুহূর্ত জন্য, এবং আমি এগিয়ে যান এবং কিছু পছন্দ করি, আমার সংরক্ষণ করতে দিন এই হিসাবে, structs.c, এর বলা যাক সাময়িকভাবে, আমি যাচ্ছি এগিয়ে যান এবং অন্তর্ভুক্ত standardio.h, int প্রধান অকার্যকর. এবং তারপর এখানে, আমি চাই যে অনুমান করা সঞ্চয় যে একটি প্রোগ্রাম লিখুন একাধিক থেকে একাধিক ছাত্র ঘর, উদাহরণস্বরূপ. তাই এটি একটি registrarial মত কিছু ধরণের ডাটাবেস. আমি নাম এক ছাত্র প্রয়োজন, তাই যদি আমি , গৃহস্থালির কাজ * নাম * ভালো কিছু করতে পারে এবং আমি ভালো কিছু করতে হবে - আসলে, এর CS50 লাইব্রেরি ব্যবহার করতে দিতে শুধু একটা মুহূর্ত জন্য এই একটি করতে একটু সহজ, তাই আমরা ধার করতে পারেন কোড লাইনের যারা অত্যাধিক. যাক এটা সহজ রাখা হচ্ছে. আমরা স্ট্রিং যাব এবং এখন GetString. তাই আমি নাম সংরক্ষিত করেছি যে এখন দাবি কিছু ছাত্র এবং বাড়ি কেবল ভেরিয়েবল ব্যবহার করে কিছু ছাত্র, আমরা কি এবং সপ্তাহে এক. চাই কিন্তু আমি এখন সমর্থন চাইছেন একাধিক ছাত্র. ঠিক আছে, তাই আমার সহজাত বুদ্ধির কাজ করতে হয় স্ট্রিং NAME2, GetString,, স্ট্রিং পায় house2 GetString, পায়. এবং তারপর আমাদের তৃতীয় ছাত্র, name3 GetString, না যাক. ঠিক আছে, তাই এই আশা আকর্ষণীয় হয় মূঢ় ধরনের হিসাবে আপনি, এই প্রক্রিয়া সত্যিই না কারণ শেষ পর্যন্ত যাচ্ছে, এবং এটা ঠিক যাচ্ছে আমার কোড খারাপ বানাতে এবং খারাপ থেকে আরও খারাপ. কিন্তু আমরা সপ্তাহে দুই খুবই এই মীমাংসিত. আমাদের অপেক্ষাকৃত পরিষ্কার সমাধান কী ছিল আমরা একাধিক ভেরিয়েবল ছিল একই ডাটা সমস্ত সম্পর্কিত যে ধরন, কিন্তু আছে আমরা এই atrocious জগাখিচুড়ি চান না একইভাবে নামে ভেরিয়েবল? আমরা এর পরিবর্তে কি? তাই আমি আমি কয়েক জায়গায় শোনা যায়. আমরা একটি অ্যারের ছিল. আপনি একাধিক দৃষ্টান্ত চান কিছু, কেন আমরা এই সব পরিষ্কার না আপ এবং শুধু আমাকে দিতে বলে, অ্যারের নাম বলা হয়? এবং এখন জন্য, এর হার্ড কোড 3 যাক. এবং তারপর আমাকে আরেকটা অ্যারের দিতে ঘর বলা হয়, এবং জন্য আমাকে এখন হার্ড কোড 3. এবং আমি ব্যাপক পরিষ্কার করেছি আমি তৈরি বিশৃঙ্খল. এখন, আমি এখনো হার্ড 3 কোডেড, কিন্তু আছে করেছি, এমনকি 3 পরিবর্তনশীল থেকে আসতে পারে ব্যবহারকারী বা argv, বা মত. তাই এই ইতিমধ্যে ক্লিনার. কিন্তু কি এই বিষয়ে বিরক্তিকর হয় যে এখন, যদিও একটি নাম একরকম হয় মৌলিকভাবে লিঙ্ক একটি ছাত্র এর ঘর - এটা যে আমি সত্যিই একটি ছাত্র এর প্রতিনিধিত্ব করতে চান - আমি এখন সমান্তরাল এমন দু 'অ্যারে আছে তারা যে অর্থে একই আকার, এবং নাম বন্ধনী 0 ঘর বন্ধনী 0 সম্ভবতঃ মানচিত্র, এবং নাম বন্ধনী 1 মানচিত্রগুলি ঘর বন্ধনী 1. অন্য কথায়, যে ছাত্র জীবন যে ঘর, এবং যে অন্য মোট ছাত্র, অন্য যে বাড়িতে বসবাস. তবে নিশ্চয় এই হতে পারে এমনকি আরো পরিচ্ছন্নভাবে কাজ. ওয়েল, এটা করতে পারেন, আসলে. এবং আমাকে এগিয়ে যান এবং খুলুন structs.h আপ, এবং আপনি পাবেন এখানে এই ধারণা দেখুন. আপনি, আমি typedef ব্যবহার করেছি যে বিজ্ঞপ্তি আগে ঘোষণা করা একটি মুহূর্ত alluded আমাদের নিজস্ব তথ্য টাইপ. কিন্তু আমি এই অন্য শব্দ ব্যবহার করছি struct নামক যা সম্পর্কে একটি নতুন দেয় ডাটা স্ট্রাকচার. এবং আমি দাবি এই তথ্য কাঠামো যাচ্ছে এর ভিতরে দুটি জিনিস আছে এটা - নাম বলা একটি স্ট্রিং, এবং ঘর নামক একটি পংক্তি. এবং আমি যাচ্ছি নাম দিতে এই তথ্য গঠন যাচ্ছে ছাত্র বলা হবে. আমি, এটা আমি চাই কিছু বলতে পেরেছিলাম কিন্তু এই শব্দার্থগতভাবে করতে আমার মন আমার ইন্দ্রিয়. সুতরাং এখন, আমি একটি ভাল সংস্করণ খুলে প্রোগ্রাম আমি লিখতে শুরু আছে, আমাকে উপরে স্ক্রল যাক. এবং কিছু কোড আরও লাইন আছে এখানে, কিন্তু আমার ফোকাস যাক এক মুহূর্ত. আমি একটি ধ্রুবক তথাকথিত ছাত্র ঘোষণা করেছি এবং হার্ড জন্য এখন 3 কোডেড. কিন্তু এখন, বিজ্ঞপ্তি কিভাবে ক্লিন আমার কোড পেতে শুরু. লাইন 22, আমি ঘোষণা ছাত্রদের অ্যারে. এবং ছাত্র দৃশ্যত যে বিজ্ঞপ্তি এখন একটি ডাটা টাইপ. এই ফাইলটি শীর্ষে, বিজ্ঞপ্তি কারণ আমি যে হেডার ফাইলটি অন্তর্ভুক্ত করেছেন আমি শুধু একটা মুহূর্ত আগে গুটান হয়. এবং যে হেডার ফাইলটি বেশ সহজভাবে ছিল একজন ছাত্র এই সংজ্ঞা. সুতরাং এখন, আমি আমার নিজস্ব তথ্য তৈরি করেছি টাইপ যে সি বছর লেখক আগে আগাম মনে করা হয়নি. কিন্তু কোন সমস্যা নেই. আমি নিজেকে করতে পারেন. তাই এই, ছাত্র নামক একটি অ্যারে যার সদস্যদের প্রতিটি একটি ছাত্র স্ট্রাকচার. এবং আমি যারা তিন চান অ্যারের মধ্যে. এবং এখন, বাকি কি আছে এই প্রোগ্রাম কি? আমি একটু নির্বিচারে কিছু প্রয়োজন. সুতরাং অনলাইনে 24 অনওয়ার্ড থেকে, আমি 0 থেকে 3 থেকে বারবার. আমি তারপর জন্য ব্যবহারকারীকে জিজ্ঞাসা ছাত্র এর নাম. এবং তারপর আমি আগে GetString ব্যবহার করুন. তারপর আমি, ছাত্র এর ঘর জন্য অনুরোধ এবং আমি আগের GetString ব্যবহার করুন. কিন্তু বিজ্ঞপ্তি - সামান্য নতুন সিনট্যাক্স সমাচার - আমি-তম ছাত্র এখনও ইনডেক্স করতে পারেন কিন্তু আমি নির্দিষ্ট তথ্য এ কিভাবে পেতে পারি struct ক্ষেত্রের ভিতর? ওয়েল, দৃশ্যত: কি নতুন বাক্য গঠন সমাচার? এটি শুধু বিন্দু অপারেটরের. আমরা সত্যিই এই আগে দেখা যায় না করেছি. আপনি থাকেন তাহলে আপনি pset পাঁচ এটা দেখা করেছি বিটম্যাপ ফাইল সঙ্গে ইতিমধ্যে dived. কিন্তু বিন্দু মাত্র এই ভিতর মানে struct বা একাধিক ক্ষেত্র, বিন্দু দিতে নাম, বা আমার সম্পর্কে বিন্দু বাড়ি দিতে. Struct ভিতরে যেতে মানে এবং যারা নির্দিষ্ট ক্ষেত্র পেতে. এই প্রোগ্রাম বাকি কী কাজ করে? এটা যে সব সেক্সি না. আমি আবার 0 থেকে 3 থেকে বারবার বিজ্ঞপ্তি, এবং আমি কেবল একটি ইংরেজি নির্মাণ তাই এবং তাই মত ফ্রেজ অমুক হয় থেকে বিন্দু নামে ক্ষণস্থায়ী যেমন একটি ঘর, আমি-তম ছাত্র এবং তাদের ঘর হিসাবে ভাল. এবং তারপর সর্বশেষে, এখন আমরা পেতে শুরু করব আমরা এখন যে এই বিষয়ে পায়ূ, কি malloc এবং সাথে পরিচিত অন্যান্য কার্যাবলী হয়েছে এই সব সময় করছেন. কেন আমি উভয় নাম মুক্ত আছে এবং ঘর, যদিও আমি malloc কল না? GetString, করেনি. এবং যে জন্য মলিন সামান্য গোপন ছিল কয়েক সপ্তাহ, কিন্তু GetString, আছে সর্বাঙ্গে মেমরি লিক হয়েছে এ পর্যন্ত সব সেমিস্টারে রাখুন. এবং valgrand অবশেষে পাবেন আমাদের এই প্রকাশ করা. আমি জানি কারণ এটি একটি বড় চুক্তি না আমি সহজভাবে নাম মুক্ত করতে পারেন এবং ঘর, যদিও টেকনিক্যালি, আপনি সুপার, সুপার নিরাপদ হবে, আমি হওয়া উচিত কিছু ত্রুটি করছেন এখানে চেক করা হচ্ছে. আপনার সহজাত বুদ্ধির কি বলার আছে? আমি কি চেক করা উচিত আমি কি মুক্ত আগে স্ট্রিং, ওরফে, যা একটি গৃহস্থালি *? আমি সত্যিই চেক করা উচিত যদি ছাত্র বন্ধনী আমি বিন্দু নাম না সমান নাল. তারপর, এটা এগিয়ে এবং বিনামূল্যে যেতে ওকে হবেন যে পয়েন্টার, এবং একই বা ভিন্ন এক হিসাবে ভাল. ছাত্র বন্ধনী আমি বিন্দু ঘর না হলে নাল সমান, এখন এই রক্ষা করবে কোণার ক্ষেত্রে বিরুদ্ধে যা GetString, নাল মত কিছু ফেরৎ. এবং আমরা printf, পাবেন, একটি মুহূর্ত আগে দেখেছি শুধু বলছে এখানে আমাদের রক্ষা নাল, যা অদ্ভুত চেহারা যাচ্ছে. কিন্তু অন্তত এটা segfault হবে না আমরা দেখা আছে. আচ্ছা, আমাকে এখানে অন্য একটি জিনিস না দেওয়া. structs-0 একটি মূঢ় প্রোগ্রাম ধরনের আমি তখন এই সব তথ্য লিখুন, এবং কারণ প্রোগ্রাম শেষ এটি একবার হারিয়ে এর. কিন্তু আমাকে এগিয়ে যান এবং এই কাজ করা যাক. আমার সম্পর্কে টার্মিনাল করা যাক একটি বিট বড় জানালা. আমাকে structs-1 যাক যা এই একটি নতুন সংস্করণ. আমি একটি সামান্য বিট জুম করব. এবং এখন আমার সম্পর্কে বিন্দু চালানো যাক structs-1 কাট. ছাত্র এর নাম - ডেভিড মাথের,, রব কার্কল্যান্ড করতে আসুন Lauren Leverett করতে আসুন. কি আকর্ষণীয় এখন বিজ্ঞপ্তি - এবং আমি শুধুমাত্র এই কারণ জানতে আমি প্রোগ্রাম লেখেন - একটি ফাইল আমার বর্তমান নেভিগেশন এখন আছে ডিরেক্টরি students.csv বলা হয়. আপনি কিছু দেখা হতে পারে বাস্তব জগতে এই. একটি CSV ফাইল কি? মানগুলি কমা দ্বারা পৃথক. এটি একটি দরিদ্র মানুষ এর মত সাজানোর এর একটি এক্সেল ফাইলের সংস্করণ. এটা সারি এবং কলাম একটি টেবিল যে আপনি, এক্সেল মত একটি প্রোগ্রাম খুলতে পারে একটি ম্যাক বা নাম্বার. এবং আমি gedit নেভিগেশন এখানে এই ফাইল খুলতে হলে, বিজ্ঞপ্তি - ও সংখ্যা নেই. যে শুধু বলছে gedit এর আমার সম্পর্কে লাইন নম্বর. এই প্রথম লাইন লক্ষ্য করুন ফাইল ডেভিড মাথের হয়. পরের লাইন রব কমা কার্কল্যান্ড হয়. এবং তৃতীয় লাইন Lauren হয় কমা Leverett. তাই আমি কি তৈরি হয়েছে? আমি এখন একটি C প্রোগ্রাম লিখিত করেছি কার্যকরভাবে স্প্রেডশীট তৈরি করতে পারেন একটি খোলা যাবে এক্সেল এর মত প্রোগ্রাম. নেই যে সব বাধ্যকারী একটি তথ্য সংকলন, কিন্তু আছে আপনি অনেক বড় অংশ থাকে তাহলে, আসলে আপনি চান যে তথ্য নিপূণভাবে এবং গ্রাফ জন্য চাই, এই সম্ভবত এক যে তথ্য তৈরি করার উপায়. উপরন্তু, CSVs সাধারণ আসলে সুপার শুধু সহজ ডেটা সঞ্চয় করার জন্য - ইয়াহু ফিন্যান্স, উদাহরণস্বরূপ, আপনি পেতে হলে তাদের তথাকথিত মাধ্যমে স্টক কোট এপিআই, যা আপনাকে বিনামূল্যে সেবা বর্তমান সময় পর্যন্ত টু ডেট মাল কোম্পানীর জন্য কোট, তারা পিঠ তথ্য দিতে সুপার সহজ CSV বিন্যাসে. সুতরাং আমরা যে কিভাবে করবেন? ওয়েল, এই প্রোগ্রাম এর সবচেয়ে বিজ্ঞপ্তি প্রায় একই. কিন্তু এখানে নিচে লক্ষ্য, বরং মুদ্রণ লাইন 35 ছাত্র আউট, অনওয়ার্ড, আমি সঞ্চয় করছি যে দাবি ডিস্কের মধ্যে ছাত্র, তাই একটি ফাইল সংরক্ষণ. তাই আমি একটি ফাইল * ঘোষণা করছি বিজ্ঞপ্তি - এখন, এই সি একটি anomaly ধরনের যাই হোক না কেন কারণে, ফাইল, সব বড় হাতের অক্ষর না যা অধিকাংশ অন্যান্য তথ্য ধরনের মত নয় সি কিন্তু এটি একটি বিল্ট ইন ডাটা টাইপ, ফাইল *. এবং আমি একটি ফাইল একটি পয়েন্টার ঘোষণা করছি আপনি যে মনে করতে পারেন কিভাবে হয়. fopen খোলা ফাইল মানে. আপনি কি ফাইল খুলতে চান? আমি একটি ফাইল খুলতে চান আমি আছি যে ইচ্ছামত students.csv কল. আমি চাই যে কিছু বলতে পেরেছিলাম. এবং তারপর একটি অনুমান নিতে. দ্বিতীয় যুক্তি কি আছে fopen সম্ভবত মানে? রাইট, লেখার জন্য W, পারা পাঠযোগ্য জন্য কিছু করা. যদি পরিশেষে যোগ করার জন্য, কিন্তু আছে আপনি সারি এবং না যোগ করতে চান গোটা ব্যাপারটাই মুছে ফেলা হয়. কিন্তু আমি এই ফাইলটি তৈরি করতে চান একবার, তাই আমি মূল্যউদ্ধৃতি unquote W ব্যবহার করব. এবং আমি পড়া থাকার থেকে শুধু জানি ডকুমেন্টেশন, অথবা man পৃষ্ঠা. ফাইল নাল না - যদি অন্য কথায়, কিছুই ভুল হলে - আমার সম্পর্কে পুনরুক্তি উপর যাক 0 থেকে 3 ছাত্রদের. এবং এখন কিছু আছে বিজ্ঞপ্তি কখনো তাই কিছুটা ভিন্ন এখানে লাইন 41. এটা printf, না. এটা printf, ফাইলের জন্য fprintf এর. তাই এটা করতে লিখুন যাচ্ছে. কোন ফাইল? যার পয়েন্টার আপনার নির্দিষ্ট এক প্রথম আর্গুমেন্ট হিসাবে. তারপর আমরা একটি ফরম্যাট স্ট্রিং উল্লেখ করুন. তারপর আমরা চাই পংক্তি উল্লেখ করুন প্রথম শতাংশ গণ জন্য প্লাগ, এবং তারপর অন্য পরিবর্তনশীল বা দ্বিতীয় শতাংশ গুলি. তারপর আমরা fclose ফাইলটি বন্ধ করুন. আমি যদিও, আগে হিসাবে মেমরি মুক্ত আর আমি ফিরে যান এবং যোগ করুন নাল জন্য কিছু পরীক্ষা করা হবে. এবং যে এটি. fopen, fprintf, fclose সম্পর্কে দেয় টেক্সট ফাইল তৈরি করার ক্ষমতা. এখন, আপনি সমস্যা সেট পাঁচটি দেখতে পাবেন ছবি জড়িত থাকে, যা আপনি ব্যবহার করা হবে বাইনারি ফাইল পরিবর্তে. কিন্তু মৌলিকভাবে, ধারণা, একই যদিও আপনি পাবেন ফাংশন একটি সামান্য বিট ভিন্ন দেখুন. ঘূর্ণিবায়ু সফর, কিন্তু আপনি পাবেন ফাইলের সাথে সব খুব পরিচিত I/O-- ইনপুট এবং আউটপুট - পাঁচ pset সঙ্গে. এবং কোন প্রশ্ন এখানে প্রাথমিক বুনিয়াদি? হ্যাঁ? আপনি কি একটি নাল মান মুক্ত করার চেষ্টা করুন তাহলে কি হবে? বিনামূল্যে একটি অর্জিত হয়েছে, যদি না আমি বিশ্বাস করি একটু বেশি ব্যবহারকারী বান্ধব, আপনি যা করতে পারেন সম্ভাব্য segfault. আমি না, কারণ এটা null পাসিং খারাপ মুক্ত বিশ্বাস করি, আপনি পরীক্ষা করার জন্য বিরক্তির এটা সম্ভাব্য একটি বর্জ্য হবে, কারণ এটি জন্য নিজেই কি জন্য সময় বিশ্বের সবাই. ভাল প্রশ্ন, যদিও. ঠিক আছে, এই ধরনের পায়, তাই আমাদের একটা মজার বিষয়. সমস্যা সেট থিম পাঁচ ফরেনসিক হয়. অন্তত একটি অংশ এর সমস্যা সেট. ফরেনসিক সাধারণভাবে বোঝায় যে পারে বা তথ্য পুনরুদ্ধার মুছে দেওয়া হয়েছে না পারে ইচ্ছাকৃতভাবে. এবং তাই আমি একটি দ্রুত দিতে চাই কি স্বাদ সত্যিই সব যাচ্ছে নীচে এই সময় আপনার কম্পিউটার সম্পর্কে ফণা. উদাহরণস্বরূপ, আপনি ভিতরে থাকে তাহলে, আপনার ল্যাপটপ বা আপনার ডেস্কটপ কম্পিউটারে একটি হার্ড ড্রাইভ, এটা হয় একটি যান্ত্রিক এর আসলে ঘূর্ণন যে ডিভাইস - platters বলা বিজ্ঞপ্তি জিনিষ আছে বেশ যে মত কি আমি ঠিক, যদিও এখানে পর্দায় আপ ছিল এই ক্রমবর্ধমান পুরানো স্কুল হয়. এই তিনটি এবং একটি অর্ধ ইঞ্চি হার্ড ড্রাইভ. এবং তিনটি এবং একটি অর্ধ ইঞ্চি বোঝায় আপনি এটি ইনস্টল করার সময় জিনিস সঙ্গে একটি কম্পিউটার. এখন আপনার ল্যাপটপে আপনি অনেক বলছি কঠিন রাষ্ট্র ড্রাইভ, বা SSDs আছে যা অংশ চলন্ত নেই. তারা উপস্থিত RAM-র মত এবং কম ভালো আছেন এই যান্ত্রিক ডিভাইস. কিন্তু ধারনা, এখনও একই অবশ্যই তারা সাথে সম্পর্কিত হিসেবে সমস্যা পাঁচটি সেট. এবং আপনি একটি হার্ড ড্রাইভ এখন আমার মনে হয় যদি যা একটি বৃত্ত, হচ্ছে প্রতিনিধিত্ব করে আমি এখানে ভালো আঁকা করব. আপনি আপনার কম্পিউটারে একটি ফাইল তৈরি করার সময় এটি একটি এসএসডি, বা কিনা এই ক্ষেত্রে, একটি পুরোনো স্কুল হার্ড ড্রাইভ, যে ফাইল একাধিক বিট গঠিত. এটা 0 এবং 1 এই যে বলা যাক, 0 সেঃ এবং 1s আভা. তাই এই আমার সমগ্র হার্ড ড্রাইভ. এই দৃশ্যত একটি চমত্কার বড় ফাইল. এবং এটি যে সময়ে 0 সেঃ এবং 1s আপ ব্যবহার করা হয় শারীরিক থালা অংশটির. ভাল, যে শারীরিক অংশ কি? ওয়েল, এটা, একটি হার্ড ড্রাইভের দেখা যাচ্ছে যে এই ধরনের অন্তত আছে, এই সব ছোট ছোট সামান্য চৌম্বকীয় কণা. এবং তারা মূলত উত্তর আছে এবং তাদের দক্ষিণ মেরুতে, যাতে আপনি যদি যারা চৌম্বক কণা একটি চালু এই ভাবে, আপনি যে এটা বলতে পারে একটি 1 প্রতিনিধিত্বমূলক. এবং এটি উলটাইয়া দক্ষিণ যদি উত্তর, আপনি যে এটা বলতে পারে একটি 0 প্রতিনিধিত্ব করে. তাই রিয়েল ফিজিকাল বিশ্বের যে আপনি কিছু উপস্থাপন হতে পারে বাইনারি 0 রাষ্ট্র এবং একটি 1. সুতরাং যে সমস্ত ফাইলের মধ্যে লেখা হয় না. চৌম্বক আভা আছে তাদের এই ভাবে বা যে কণা এই ভাবে, তৈরি নিদর্শন এর 0 সেঃ এবং 1s. কিন্তু, আপনি একটি ফাইল সংরক্ষণের সময় সক্রিয় আউট কিছু তথ্য আলাদাভাবে সংরক্ষিত হয়. তাই এই সামান্য টেবিল একটি ডিরেক্টরি, তাই কথা বলতে. এবং আমি এই কলামের নাম কল, এবং করব আমি এই কলামের অবস্থান ডাকবো. এবং আমি অনুমান, বলতে যাচ্ছি এই হল আমার সারসংকলন হয়. আমার resume.doc এ সংরক্ষণ করা হয় পাঁচ, 123 এর কথা বলা যাক. আমি সবসময় যে সংখ্যা জন্য যেতে. কিন্তু ঠিক মত বলতে যথেষ্ট RAM-র মধ্যে, আপনি একটি হার্ড ড্রাইভ নিতে পারেন একটি গিগাবাইট বা 200 গিগাবাইট এর বা একটি terabyte, এবং আপনি যা করতে পারেন নম্বর বাইট সব. আপনি 8 বিট সব অংশ সংখ্যা পারেন. তাই আমরা যে এই বলবো অবস্থান 123 হয়. তাই আমার অপারেটিং এই ডিরেক্টরির ভিতরে সিস্টেম মনে যে আমার সারসংকলন অবস্থান 123 এ আছে. কিন্তু যখন আকর্ষণীয় পায় আপনি একটি ফাইল মুছে দিন. উদাহরণস্বরূপ তাই - এবং সৌভাগ্যক্রমে, বিশ্বের অধিকাংশ আছে এই সম্মুখের ধরা - কি যখন আপনি যদি আপনার ম্যাক OS ট্র্যাশে একটি ফাইল টেনে আনুন অথবা আপনার উইন্ডোজ জিনিসকে বিন? যে করছেন এর উদ্দেশ্য কি? এটি ফাইলের পরিত্রাণ পেতে সম্ভবত এর কিন্তু কি টেনে আইন আছে এবং আপনার ট্র্যাশ বা মধ্যে ড্রপ আপনার রাসায়নিক পদ্ধতিতে ব্যবহার করা জিনিসকে আবার ব্যবহারের উপযোগী করে তোলা বিন কম্পিউটারে কি? সত্যিই একেবারে কিছুই. এটি শুধু একটি ফোল্ডার মত. এটা নিশ্চিত করা, একটি বিশেষ ফোল্ডার এর. কিন্তু আসলে এটি ফাইলটি মুছে দিন না? কোন ভাল, কারণ আপনি সম্ভবত কিছু ভালো হয়েছে, অভিশাপ উহু, আপনি না যে কি মানে. তাই আপনি যদি ডবল ক্লিক করুন ট্র্যাশ বা জিনিসকে বিন. আপনি কাছাকাছি poked করেছি এবং আপনার উদ্ধার করেছি এটা dragging দ্বারা ফাইল সেখানে আউট. সুতরাং স্পষ্ট, এটা অপরিহার্যভাবে না এটি মুছে ফেলা. ঠিক আছে, আপনি দক্ষতা সহকারে যে চেয়ে আছেন. আপনি কি জানেন যে শুধু টেনে নিয়ে যান ট্র্যাশ বা জিনিসকে বিন মানে এই নয় আপনি ট্র্যাশ খালি রাখুন করছি. তাই আপনি যদি আপ মেনুতে যান এবং আপনি যা বলছেন ট্র্যাশ খালি বা ফাঁকা জিনিসকে বিন. তারপর কি হবে? হ্যাঁ, তাই এটি অনেক বেশি মুছে ফেলা হয়. কিন্তু যে এরকম সব এই. কম্পিউটার যেখানে forgets resume.doc ছিল. কিন্তু কি দৃশ্যত পরিবর্তন হয়নি ছবি? বিট, আমি দাবী করে যে 0 সেঃ এবং 1s আছে কিছু শারীরিক দৃষ্টিভঙ্গির সাইটে হার্ডওয়্যার. তারা এখনও করছি. এটি শুধু কম্পিউটার হয়েছে ভুলে যাওয়া কি তারা. সুতরাং এটি মূলত মুক্ত ফাইল এর তারা পুনঃব্যবহৃত করা যাবে বিট যাতে. কিন্তু আপনি আরও ফাইল তৈরি না হওয়া পর্যন্ত এবং আরও অনেক ফাইল এবং আরও ফাইল পাবেন সম্ভাব্য, যারা 0 সেঃ এবং 1s, যারা চৌম্বক কণা, পুনঃব্যবহৃত পেতে, জন্য গোলমালে বা ডাইন আপ, অন্যান্য ফাইল, 0 সেঃ এবং 1s. তাই আপনি যদি এই উইন্ডোটি সময় আছে. এবং এটা আন্দাজের এর না দৈর্ঘ্য, সত্যিই. এটি আপনার হার্ড আকারের উপর নির্ভর করে ড্রাইভ এবং কিভাবে অনেক ফাইল আছে এবং কত তাড়াতাড়ি আপনি নতুন না. কিন্তু সময় এই উইন্ডোটি সময় আছে যে ফাইল পুরোপুরি এখনও যা ফেরতযোগ্য. আপনি কি কখনও McAfee মত প্রোগ্রাম ব্যবহার করার জন্য তাই আপনি যদি অথবা নর্টন পুনরুদ্ধার করার চেষ্টা তথ্য, তারা করছি সব করার চেষ্টা করছে এই তথাকথিত ডিরেক্টরিতে পুনরুদ্ধার আপনার ফাইল ছিল আউট চিত্র যেখানে. এবং কখনও কখনও নর্টন এবং বলবে ফাইল 93% ফেরতযোগ্য হয়. ওয়েল, যে কি মানে? শুধু তার মানে এমন কিছু অন্যান্য ফাইল কাকতালীয়ভাবে,, বলতে ব্যবহার করে শেষ পর্যন্ত আপনার মূল ফাইলের খুঁজে যারা বিট. তাই আসলে কি জড়িত তথ্য পুনরুদ্ধার করা হচ্ছে না? ওয়েল, আপনার মত কিছু না থাকলে নর্টন, আপনার কম্পিউটারে প্রাক ইনস্টল আপনি মাঝে মাঝে করতে পারেন ভাল তাকান হয় সমগ্র হার্ড ড্রাইভ খুঁজছেন এ বিট নিদর্শন. এবং সমস্যা সেট থিম এক পাঁচ আপনাকে অনুসন্ধান হবে একটি হার্ড ড্রাইভ এর সমতুল্য, একটি ফরেনসিক একটি থেকে একটি কম্প্যাক্ট ফ্ল্যাশ কার্ড ইমেজ 0 সেঃ অনুসন্ধানের জন্য ডিজিটাল ক্যামেরা, উচ্চ সঙ্গে যে সাধারণত এবং 1s, সম্ভাবনা দ্রাঘিমাংশ: কোন JPEG চিত্র শুরু. এবং আপনাকে বলছি দ্বারা যারা ইমেজ পুনরুদ্ধার করতে পারেন আমি এই প্যাটার্ন যদি দেখতে, অভিমানী ফরেনসিক ইমেজ বিট, সঙ্গে চিহ্নিত করে উচ্চ সম্ভাবনা, কোন JPEG শুরু. আর আমি আবার একই প্যাটার্ন দেখুন, সম্ভবত শুরু অন্য কোন JPEG, এবং অন্য কোন JPEG, এবং অন্য কোন JPEG. এবং এই সাধারণত হয় কিভাবে তথ্য পুনরুদ্ধার কাজ করবে. কি JPEGs সম্পর্কে চমৎকার যদিও হয় ফাইল ফরম্যাট নিজেই কিছুটা হয় প্রতি যেমন জটিল, এ ফাইল আসলে মোটামুটি চিন্হিত , আপনি দেখতে পাবেন, এবং সহজ আপনি যদি ইতিমধ্যে না করে থাকেন. তাই এর নীচে একটি ঘনিষ্ঠ কটাক্ষপাত করা যাক হয়েছে ঠিক কি হিসেবে ফণা যাচ্ছে, এবং এই 0 সেঃ এবং 1s কি আপনি একটি একটি বিট আরো দিতে হয়, এই বিশেষ চ্যালেঞ্জ জন্য প্রসঙ্গ. [ভিডিও প্লেব্যাক] আপনার পিসি অধিকাংশ সঞ্চয়-কোথায় তার স্থায়ী তথ্য. যে কাজ করতে, তথ্য উপস্থিত RAM-র থেকে ভ্রমণ বলুন যে সফ্টওয়্যার সংকেত বরাবর কিভাবে যে তথ্য ধারণ করার জন্য হার্ড ড্রাইভ. হার্ড ড্রাইভ সার্কিট অনুবাদ ভোল্টেজ মধ্যে যারা সংকেত ওঠানামা করছে. এই ঘুরে, হার্ড ড্রাইভ এর নিয়ন্ত্রণ চলন্ত অংশ, কিছু কিছু বাকি চলন্ত অংশ আধুনিক কম্পিউটার. সংকেত কিছু একটি মোটর নিয়ন্ত্রণ যা ধাতু প্রলিপ্ত platters ঘূর্ণন. আপনার ডেটা আসলে সংরক্ষিত হয় এই platters উপর. অন্য সংকেত পড়ুন / লিখুন সরাতে পড়া বা মাথা platters উপর তথ্য লিখুন. এই যন্ত্রপাতি যাতে সুনির্দিষ্ট একটি মানুষের যে চুল এমনকি মধ্যে পাস করতে পারেনি মাথা এবং কাটনা platters. তবুও, এটা সব অপরিসীম গতি এ কাজ করে. [END টি ভিডিও প্লেব্যাক] DAVID Malan: একটু জুম ইন গভীর এখন কি এ আসলে যারা platters উপর. [ভিডিও প্লেব্যাক] এর দর্শকমাত্র চলুন শুরু করা যাক কি আমরা ঠিক সময়ে স্লো মোশন দেখেছি. একটি বিদ্যুতের সংক্ষিপ্ত নাড়ি যখন ফ্লিপ, যদি পড়া / লেখা মাথা পাঠানো জন্য একটি অতি ক্ষুদ্র ইলেক্ট্রোম্যাগনেটিক নেভিগেশন একটি দ্বিতীয় একটি ভগ্নাংশ. চুম্বক যা একটি ক্ষেত্র তৈরি পরিবর্তন একটি অতি ক্ষুদ্র, অতি ক্ষুদ্র এর প্রান্তিকতা ধাতু কণার অংশ যা কোট প্রতিটি থালা পৃষ্ঠ. এই সব ছোট ছোট একটি প্যাটার্ন সিরিজ, ডিস্কের মধ্যে অভিযুক্ত আপ এলাকায় একটি একক বিট প্রতিনিধিত্ব করে বাইনারি সংখ্যা মধ্যে তথ্য কম্পিউটারে ব্যবহৃত সিস্টেম. এখন, বর্তমান পাঠানো হয় যদি একটি উপায় পঠিত মাধ্যমে / এলাকা মাথা লিখুন এক দিক সমবর্তিত হয়. বর্তমান পাঠানো হয় যদি বিপরীত দিক, পোলারাইজেশন বিপরীত হয়. আপনি হার্ড ডিস্ক বন্ধ তথ্য পেতে কিভাবে? শুধু প্রক্রিয়া বিপরীত. সুতরাং এটা ডিস্কে কণা এর যে বর্তমান পেতে মাথা চলন্ত পড়া / লেখা. এই লক্ষ লক্ষ একত্রে চুম্বকিত খন্ডের, এবং আপনি একটি ফাইল পেয়েছেন. এখন, একটি ফাইল টুকরোগুলি পারে সব ড্রাইভ এর উপর বিক্ষিপ্ত করা জগাখিচুড়ি মত ধরনের platters, আপনার ডেস্কের উপর কাগজপত্র. সুতরাং একটি বিশেষ অতিরিক্ত ফাইল ট্র্যাক রাখে সবকিছু যেখানে. কিন্তু আপনি না চান, যে ভালো কিছু? [END টি ভিডিও প্লেব্যাক] DAVID Malan: ঠিক আছে, সম্ভবত না. সুতরাং কিভাবে আপনি অনেক বলছি এই সঙ্গে বড় হয়েছি? ঠিক আছে, তাই এটি কম এবং কম এর হাতে প্রতি বছর. কিন্তু আমি আপনাকে অন্তত পরিচিত খুশি তাদের সঙ্গে, এই কারণ এবং আমাদের নিজস্ব বই ডেমো, দুঃখিতভাবে, একটি খুব মৃতু্য হয় পরিচিতি এখানে মৃত্যুর মন্থর. কিন্তু এই অন্তত, পিঠ, আমি কি হল উচ্চ বিদ্যালয়, ব্যাকআপ জন্য ব্যবহৃত ব্যবহার. এবং এটা আশ্চর্যজনক ছিল, কারণ আপনি নেভিগেশন 1.4 মেগাবাইটে সংরক্ষণ পারে এই বিশেষ ডিস্ক. এবং এই, উচ্চ ঘনত্ব সংস্করণ ছিল হিসাবে আছে যা এইচডি, দ্বারা নির্দেশিত আজকের HD ভিডিও আগে মর্ম. স্ট্যান্ডার্ড ঘনত্ব 800 কিলোবাইট ছিল. এবং যে আগে ছিল 400-kilobyte ডিস্ক. এবং যে আগে, 5 এবং 1/4 ছিল সত্যিকারের ফ্লপি যা ছিল ইঞ্চি ডিস্ক, এবং সামান্য চওড়া এবং লম্বা এখানে এই জিনিস আর. কিন্তু আপনি আসলে তথাকথিত দেখতে পারেন এই ডিস্ক ফ্লপি দৃষ্টিভঙ্গি. এবং এই বৈশিষ্ট্যগুলি, তারা আসলে করছি এ হার্ড ড্রাইভ বেশ অনুরূপ অন্তত এই টাইপ. নতুন কম্পিউটারে আবার, SSDs ভিন্নভাবে একটু কাজ করে. কিন্তু আপনি যে সামান্য ধাতু ট্যাব সরানো হলে, আসলে আপনি, একটু কুকি দেখতে পারেন বা থালা. এটা এই মত ধাতু না. এই এক আসলে কিছু সস্তা উপাদান প্লাস্টিকের. এবং যদি আপনি এটি আন্দোলিত ধরনের পারেন. এবং আপনি trully শুধু কিছু বন্ধ অপনোদিত করেছি বিট বা চৌম্বকীয় কণা সংখ্যা এই ডিস্ক থেকে. সুতরাং সৌভাগ্যক্রমে, এটা কিছুই আছে. জিনিস যে ভাবে, যদি - ও আবরণ আপনার চোখ ও আপনার প্রতিবেশী যারা - শুধু ধরনের এই টান করতে পারেন যে মত গোটা খাপ বন্ধ. কিন্তু সামান্য বসন্ত আছে, তাই হবে আপনার চোখ দিয়ে যে সচেতন. তাই এখন আপনি সত্যিই একটি ফ্লপি ডিস্ক আছে. এবং কি এই বিষয়ে অসাধারণ এর এই হিসাবে যে যতটা হয় একটি একটি বৃহত্তর ছোট মাপের উপস্থাপনা হার্ড ড্রাইভ, এই জিনিস, সুপার সুপার সহজ. আপনি এখন, এটা নীচে চিম্টি যদি যে যে ধাতু জিনিস বন্ধ, এবং বল্কল খোলা আছে, সব দুই টুকরা হয় অনুভব করেন এবং তথাকথিত ফ্লপি ডিস্ক ভেতরের ধাতু একটি টুকরা সঙ্গে. এবং অর্ধেক সেখানে যায় আমার ডিস্ক এর বিষয়বস্তু. তাদের অন্য অর্ধেক আছে যায়. কিন্তু যে ভিতরে কাটনা ছিল যে সব বিগতবত্সর আপনার কম্পিউটারে. এবং আবার,, পরিপ্রেক্ষিত এই লাগাতে কিভাবে বড় হল আপনার অধিকাংশ হার্ড ড্রাইভ এই দিন? 500 গিগাবাইট, একটি terabyte, হয়তো এ একটি ডেস্কটপ কম্পিউটার, 2 terabytes, 3 terabytes, 4 terabytes, ডান? এই এক megabyte হয়, দিতে বা নিতে এমনকি সাধারণ MP 3 মাপসই করা যাবে না, যা আর এই দিন, অথবা কিছু অনুরূপ সঙ্গীত ফাইল. তাই একটু আপনার জন্য স্যুভেনির আজ, এবং এছাড়াও কি contextualize সাহায্য করতে আমরা মঞ্জুর জন্য গ্রহণ করা হবে এখন সমস্যা পাঁচটি সেট. সুতরাং যারা রাখা ভেজাল হয়. তাই হতে হবে যেখানে আমার সম্পর্কে রূপান্তর করা যাক পরবর্তী pset খরচ হিসাবে ভাল. সুতরাং আমরা এখন এই পৃষ্ঠার জন্য সেট করেছি - উহু, দ্রুত ঘোষণা একটি দম্পতি. এই শুক্রবার, আপনি চান এবং CS50 যোগদান লাঞ্চের জন্য, স্বাভাবিক জায়গায় যাবে cs50.net/rsvp. এবং চূড়ান্ত প্রকল্প - তাই পাঠ্যসূচি প্রতি, আমরা করেছি ইতিমধ্যে চূড়ান্ত প্রকল্প নির্দিষ্টকরণ. এর অর্থ এই নয় যে বুঝতে পারি যে এটা বিশেষ করে শীঘ্রই কারণে. এটা শুধু পাওয়া সত্যিই,, পোস্ট আপনাকে বলছি এটা সম্পর্কে চিন্তা করা. এবং প্রকৃতপক্ষে, একটি সুপার গুরুত্বপূর্ণ আপনি শতাংশ মোকাবেলা করা হবে উপাদানের চূড়ান্ত প্রকল্প যে আমরা এমনকি ক্লাস মধ্যে অর্জিত না, কিন্তু তাড়াতাড়ি পরের সপ্তাহে হিসাবে পাবেন. নোটিশ যদিও, বৈশিষ্ট জন্য আহ্বান জানাচ্ছে যে কয়েক বিভিন্ন উপাদানের চূড়ান্ত প্রকল্প. প্রথমত, কয়েক সপ্তাহের মধ্যে একটি প্রাক প্রস্তাব, একটি চমত্কার নৈমিত্তিক ইমেল আপনি তাকে বলতে TF বা কি আপনি সঙ্গে, আপনার প্রকল্পের জন্য চিন্তা কোন প্রতিশ্রুতি. প্রস্তাবনা আপনার নির্দিষ্ট করা প্রতিশ্রুতি, বলার অপেক্ষা রাখে না, এখানে, আমি কি সাহায্য আমি আমার প্রকল্পের জন্য কিছু করতে চাই. আপনি কি মনে করেন? খুব বড়? খুব ছোট? এটা সামলানো হয়? এবং যদি আপনি আরো বিস্তারিত বিবরণের জন্য বৈশিষ্ট দেখুন. সপ্তাহ দুয়েক পরে যে অবস্থা হয় একটি একভাবে যা রিপোর্ট, ঠিক কিভাবে বলতে আপনার TF নৈমিত্তিক ইমেল আপনি আপনার চূড়ান্ত হয় দূরে পিছনে দ্বারা অনুসরণ প্রকল্পের বাস্তবায়ন, এবং CS50 Hackathon যা সবাই আমন্ত্রণ জানানো হয়, থেকে একটি ঘটনা যা থাকবে 7:00 পর্যন্ত এক সন্ধ্যায় নেভিগেশন 8:00 PM তে পোস্ট করা পরের দিন সকালে আমি. আমি এক সপ্তাহের মধ্যে উল্লেখ করেছি পারে পিজা, শূন্য, Wil, 9:00 PM তে পোস্ট করা এ পরিসেবা উপলব্ধ করা হবে 1:00 এ চীনা খাদ্য না. এবং আপনি 5:00 এ এখনও জাগ্রত হন তাহলে আমি, আমরা ব্রেকফাস্ট জন্য IHOP আপনাকে নিয়ে যাব. সুতরাং Hackathon আরো এক বর্গ মধ্যে স্মরণীয় অভিজ্ঞতা. তারপর বাস্তবায়ন কারণে, এবং তারপর climactic এবং CS50 উচিত. এই সব আরও বিস্তারিত সপ্তাহের মধ্যে আসা. কিন্তু এর কিছু ফিরে যান পুরানো স্কুল - আবার, একটি অ্যারে. এটি solves, কারণ তাই একটি অ্যারের, চমৎকার আমরা চাই সমস্যার মাত্র একটি দেখেছি ছাত্র কাঠামোর সঙ্গে আগে মুহূর্ত নিয়ন্ত্রণ একটু খুঁজে পেয়ে আমরা যদি ছাত্র এক, ছাত্র দুই, আছে চান ছাত্র তিন, ছাত্র বিন্দু বিন্দু বিন্দু, ছাত্রদের কিছু নির্বিচারে সংখ্যা. অ্যারে, তাই কয়েক সপ্তাহ আগে, এ swooped এবং সমাধান আমাদের সমস্যা না সব আগাম বুদ্ধিমান কিভাবে অনেক কিছু কিছু টাইপ আমরা করতে চাইবেন. এবং আমরা structs আমাদের সাহায্য করতে পারে দেখা করেছি আরও আমাদের কোড এবং সংগঠিত রাখা একটি মত ধারণার দিক থেকে অনুরূপ ভেরিয়েবল, নাম এবং ঘর একসাথে,, যাতে আমরা ভিতরে এক সত্তা, তাদের বিবেচনা করতে পারেন যা ছোট টুকরা আছে. কিন্তু অ্যারে কিছু অসুবিধেও আছে. অসুবিধাগুলি কিছু কি আমরা সম্মুখীন হয়েছি অ্যারে সঙ্গে এ পর্যন্ত? ওটা কি? স্থায়ী আকার - তাই এমনকি আপনি প্রতাপ যদিও একটি জন্য মেমরি বরাদ্দ করা সম্ভব অ্যারের একবার, আপনি কি জানেন কিভাবে অনেক ছাত্র আপনি কিভাবে অনেক অক্ষর আছে, ব্যবহারকারীর কাছ থেকে একবার, আপনি বরাদ্দ করেছি অ্যারে, আপনি ধরনের আঁকা করেছি কোণার মধ্যে নিজেকে. আপনি নতুন উপাদান অন্তর্ভুক্ত করা যাবে না, কারণ একটি অ্যারের মাঝখানে মধ্যে. আপনি আরও উপাদান অন্তর্ভুক্ত করা যাবে না একটি অ্যারের শেষে. আসলে, আপনি একটি নির্মাণ রিসোর্ট আছে আমরা আলোচনা করেছি সম্পূর্ণ নতুন অ্যারে, নতুন মধ্যে পুরাতন কপি. এবং আবার, যে মাথা ব্যাথা যে আপনার জন্য সঙ্গে সুযোগসুবিধা GetString. কিন্তু আবার, আপনি এমনকি অন্তর্ভুক্ত করা যাবে না অ্যারের মধ্যম মধ্যে কিছু হার সম্পূর্ণরূপে পূরণ করা হয় না. উদাহরণস্বরূপ, এই অ্যারে যদি এখানে আকারের ছয় শুধুমাত্র এটা যে পাঁচটি জিনিস আছে ভাল, আপনি শুধু ট্যাক পারে শেষ সম্মুখের কিছু. কিন্তু আপনি যদি এমন সন্নিবেশ কি করতে চান তাহলে মাঝখানে মধ্যে অ্যারে, এটা হতে পারে, যদিও এটি ছয় জিনিস পাঁচ খুঁজে? ভাল, আমরা আমরা সব ছিল তখন কি করবেন আমাদের মানব স্বেচ্ছাসেবকদের onstage মধ্যে সপ্তাহ গত? আমরা এখানে কেউ রাখতে চেয়েছিলেন, নয়তো এই পদক্ষেপ কিভাবে এই মানুষ পথ, অথবা এই সরানো কিভাবে এই মানুষ উপায়, এবং যে ব্যয়বহুল হয়ে ওঠে. একটি ভিতর মানুষের নাড়াচাড়া অ্যারের আপ যোগ ও খোয়াতে শেষ পর্যন্ত আমাদের সময়, তাই অনেকটা আমাদের N ছক সম্পর্কে জন্য, সন্নিবেশ সাজানোর মত বার চলমান উদাহরণস্বরূপ, লক. সুতরাং অ্যারে হয় মহান, কিন্তু আপনি করতে হবে আপনি তাদের চান কিভাবে বড় আগাম জানি. তাই ঠিক আছে, এখানে একটি সমাধান. আমি অগ্রিম জানা না থাকলে কত ছাত্র আমি থাকতে পারে, এবং একবার আমি জানি আমি সিদ্ধান্ত, যদিও, আমি যে সঙ্গে আটকে করছি , কেন আমি সবসময় অনেক ছাত্র না দুইবার হিসাবে অনেক স্থান বরাদ্দ আমি মনে হতে পারে হিসাবে আমি প্রয়োজন? একটি যুক্তিসঙ্গত সমাধান নয়? বাস্তবানুগভাবে, আমি আমরা মনে করি না 50 টিরও বেশি স্লট প্রয়োজন চালু একটি মাঝারি আকারের বর্গ জন্য একটি অ্যারের মধ্যে, তাই আসুন শুধু ধরপাকড় করা যাক. আমি আমার অ্যারের মধ্যে 100 স্লট করতে হবে যাতে আমরা নিশ্চিতভাবে পেতে পারেন আমি আশা ছাত্র সংখ্যা কিছু মাঝারি আকারের বর্গ হতে. তাই কেন শুধু ধরপাকড় এবং বরাদ্দ না একটি অ্যারের জন্য আরো মেমরি, সাধারণত, আপনি এমনকি প্রয়োজন দেখা দিতে পারে মনে হয় আর? এই সহজ pushback কি ধারণা যে আপনি? আপনি শুধু মেমরি নাশক করছি. আপনি তারপর লিখুন আক্ষরিক প্রত্যেক প্রোগ্রাম হয়তো দুইবার হিসাবে অনেক মেমরি ব্যবহার করা হয় আপনি আসলে প্রয়োজন. এবং মাত্র এক মত মনে হয় না বিশেষ করে মার্জিত সমাধান. তাছাড়া, এটা শুধু কমে যায় কোন সমস্যা হওয়ার সম্ভাবনা. আপনি একটি জনপ্রিয় অবশ্যই আছে কি যদি এক সেমিস্টারে এবং আপনি 101 আছে ছাত্র, আপনার প্রোগ্রাম এখনও মৌলিকভাবে একই সমস্যা সম্মুখীন. সুতরাং সৌভাগ্যক্রমে, একটি সমাধান আছে আকারে এই বিজ্ঞাপন আমাদের সকল সমস্যা যে ডাটা স্ট্রাকচার বেশী জটিল আমরা দূর পর্যন্ত দেখা করেছি. এই, আমি দাবি, একটি সংযুক্ত তালিকা. এই সংখ্যার একটি তালিকা - 9, 17, 22, 26, এবং 34 - উপায় দ্বারা একত্রে সংযুক্ত করা হয়েছে কি আমি তীরচিহ্ন হিসেবে টানা করেছি. অন্য কথায়, যদি আমি প্রতিনিধিত্ব চেয়েছিলেন একটি অ্যারের, আমি কাজ করতে পারে ভালো কিছু. এবং আমি ওভারহেড এই রেখে দেব মাত্র একটি মুহূর্ত. আমি কাজ করতে পারে - হ্যালো, ঠিক আছে. পাশে দাঁড়ানো. এখানে নতুন কম্পিউটার, পরিষ্কার - ঠিক আছে. তাই আমি অ্যারের মধ্যে এই সংখ্যা আছে - 9, 17, 22, 26, 24 - অপরিমাপ্য অগত্যা না. ঠিক আছে, তাই এখানে আমার অ্যারে - ঈশ্বরের ওহ. ঠিক আছে, তাই এখানে আমার অ্যারে. ঈশ্বরের ওহ. [হাস্য] DAVID Malan: জাহির. এটা ফিরে যেতে খুব প্রচেষ্টা এর এবং তাই আছে, ঠিক - 26. সুতরাং আমরা এই অ্যারে আছে 9, 17, 22, 26, এবং 34. আপনি তাদের দেখতে পারেন লজ্জাজনক ভুল আমি ঠিক তৈরি হয়, আছে এটা. তাই আমি এই দাবি করে যে একটি খুব দক্ষ সমাধান. আমি অনেক ints হিসেবে বরাদ্দ করেছি আমি প্রয়োজন - এক, দুই, তিন, চার, পাঁচ, ছয় বা - এবং তারপর আমি নম্বর সংরক্ষিত করেছি এই অ্যারে এর ভিতর. কিন্তু ধরা যাক, তারপর, আমি সন্নিবেশ করতে চান সংখ্যা 8 মত একটি মান? ওয়েল, এটা কোথায় যেতে পারে? আমি প্রবেশ করাতে চাইছেন 20 এর মত একটি নম্বর. ওয়েল, এটা কোথায় যেতে পারে? কোথাও আছে মাঝখানে, অথবা সংখ্যা 35 যেতে হয়েছে কোথাও শেষে. কিন্তু আমি স্থান অল আউট আছি. এবং তাই এই একটি মৌলিক চ্যালেঞ্জ সমাধান হয় না যে অ্যারে এর. আমি GetString, একটি মুহূর্ত আগে দাবি এই সমস্যা solves. আপনি একটি ষষ্ঠ নম্বর প্রবেশ করাতে চান এই অ্যারের মধ্যে, অন্তত এক কি সমাধান আপনি নিশ্চিত করার জন্য অবলম্বন করতে পারেন আমরা GetString, করতে চাই? ওটা কি? ওয়েল, এটা বড় করা সহজ কাজ আর বলেন. আমরা অগত্যা অ্যারের করতে পারবেন না বড়, কিন্তু আমরা কি করতে পারি? আকার বড় একটি নতুন অ্যারে, করুন 6, হয়তো বা আকার 10, আমরা যদি চান এগিয়ে জিনিস পেতে, এবং তারপর কপি করা পুরোনো নতুন অ্যারে মধ্যে, এবং তারপর পুরাতন অ্যারের বিনামূল্যে. কিন্তু চলমান সময় কি এখন যে প্রক্রিয়ার? এটা N বড় হে কারণ কপি আপনি কিছু ইউনিট খরচ যাচ্ছে আমরা সময়, তাই আদর্শ যদি না যাচ্ছে যা একটি নতুন অ্যারে, বরাদ্দ দুইবার হিসাবে অনেক গ্রাস অস্থায়ীভাবে মেমরি. নতুন মধ্যে পুরাতন কপি করুন - আমি বলতে চাচ্ছি, এটা শুধু একটা মাথা ব্যাথা, এর যা আবার, আমরা কেন লেখেন না আপনার জন্য GetString. আমরা পরিবর্তে তাই কি কি হতে পারে? ওয়েল, কি যদি আমাদের তথ্য গঠন আসলে এটা ফাঁক আছে? আমি থাকার আমার লক্ষ্য শিথিল যে ধরুন মেমরি সংলগ্ন অংশ, যেখানে 9 যা 17, ডান পাশে হয় ডান 22 পরবর্তী, এবং তাই. এবং 9 এখানে ওভার হতে পারে অনুমান করা উপস্থিত RAM-র, 17, RAM-র মধ্যে এখানে করা যাবে এবং 22 RAM-র মধ্যে এখানে করা যাবে. অন্য কথায়, আমি তাদের প্রয়োজন হয় না এমনকি আর ব্যাক ব্যাক. আমি একরকম একটি সুচ থ্রেড আছে এই সংখ্যার প্রতিটি, অথবা প্রতিটি মাধ্যমে এই নোডের মধ্যে, আমরা ডাকবো আমি তাদের টানা করেছি rectangles, আপনি সর্বশেষ কিভাবে মনে রাখবেন প্রথম থেকে যেমন নোড. তাই প্রোগ্রামিং গঠন কি আমরা বেশ সম্প্রতি দেখা করেছি যা দিয়ে আমি যে থ্রেড বাস্তবায়ন, বা করতে পারেন এখানে টানা আমি করতে পারেন যা দিয়ে যারা তীর বাস্তবায়ন? তাই পয়েন্টার, ডান? আমি একটা ঠিক না বরাদ্দ যদি কোন int, কিন্তু একটি নোড - ও নোড, আমি ধারক মানে. এবং দৃশ্যত, আমি একটি আয়তক্ষেত্র মানে. একটি নোডের মধ্যে দৃশ্যত প্রয়োজন তাই দুটি মান ধারণ করে - int-এ নিজেই, এবং তারপর, হিসাবে উহ্য আয়তক্ষেত্র নীচে অর্ধেক, কোন int জন্য পর্যাপ্ত স্থান. তাই ঠিক, এখানে এগিয়ে চিন্তা এই নোডের এই, কিভাবে বড় হয় প্রশ্নের ধারক? Int-এ জন্য কত বাইট? সম্ভবতঃ 4, এটা যদি স্বাভাবিক হিসাবে একই. এবং তারপর কত বাইট পয়েন্টার জন্য? 4. তাই এই ধারক, বা এই নোডের হয় একটি 8 বাইট গঠন হতে যাচ্ছে. ওহ, এবং যে একটি সুখী কাকতালীয় যে আমরা শুধু এই ধারণা চালু একটি struct, অথবা একটি C গঠন. তাই আমি একটি পদক্ষেপ নিতে চান যে দাবি এই আরও বাস্তবধর্মী দিকে সংখ্যার একটি তালিকা, একটি বাস্তবায়ন সংখ্যার লিঙ্ক তালিকা, আমি একটি কি প্রয়োজন আরো একটু সামনে চিন্তা এবং শুধুমাত্র কোন int, কিন্তু একটি struct ডিক্লেয়ার আমি কল করব, সাধারনত এখানে, নোড. আমরা এটা আমরা চাই কিছু কল, কিন্তু পারে নোড অনেক বিষয়ভিত্তিক হতে যাচ্ছে জিনিস আমরা এখন এ খুঁজছেন আরম্ভ. যে নোড এর ভিতরে কোন int N হয়. এবং তারপর এই বাক্য গঠন, একটি সামান্য প্রথম নজরে অদ্ভুত - struct নোড * পরবর্তী. ওয়েল pictorially, যে কি হল? যে নীচে অর্ধেক আমরা দেখেছি যে আয়তক্ষেত্র শুধু একটা মুহূর্ত আগে. কিন্তু কেন আমি * struct নোড বলছে am শুধু নোড * বিরোধিতা? যে পয়েন্টার প্রতি নির্দেশ করা হয় কারণ যদি অন্য নোড, এটা তো শুধু একটি নোড ঠিকানা. আমরা করেছি সঙ্গে সামঞ্জস্যপূর্ণ যে এ পর্যন্ত পয়েন্টার সম্পর্কে আলোচনা করেছেন. আমি দাবি করলে কিন্তু কেন, এই কাঠামো নোড বলা হয়, আমি struct বলতে আছে এখানে ভিতরে নোড? যথাযথভাবে. এটা সি একটি মূঢ় বাস্তবতা সাজানোর typedef, তাই কথা বলতে, না আছে কোনো ঘটেছে. সি আক্ষরিক সুপার. এটি আপনার কোড উপরে সার্চ নীচে, ডানে বামে. এবং শেষ না হওয়া পর্যন্ত যে সেমিকোলন হিট বটম লাইন, না কি অনুমান একটি ডাটা টাইপ হিসেবে বিদ্যমান? নোডের মধ্যে মূল্যউদ্ধৃতি unquote নোড. কিন্তু কারণ আরো ভার্বোস এর ঘোষণা আমি প্রথম লাইন কি - typedef struct নোড - যে আগে, প্রথম এসেছিলেন, কারণ কোঁকড়া ধনুর্বন্ধনী, যেমন ধরণের যে প্রাক educating ঝনঝন, আপনি জানি কি, আমাকে একটি struct দিতে struct নোড বলা হয়. সত্যি, আমি কলিং জিনিষ পছন্দ করি না struct নোড, struct নোড সব আমার কোড সর্বত্র. কিন্তু আমি শুধুমাত্র, শুধু ভিতরে, একবার এটা ব্যবহার করব যাতে আমি কার্যকরভাবে করতে পারেন , সার্কুলার রেফারেন্স কেমন না তৈরি একটি কোনটাই নিজেকে পয়েন্টার, কিন্তু একটি অন্য পয়েন্টার একটি অভিন্ন টাইপ. সুতরাং দেখা যাচ্ছে যে একটি ডাটা স্ট্রাকচার উপর ভালো, কয়েক আছে হতে পারে যে অপারেশন আমাদের সুদ. আমরা সন্নিবেশ করতে চাইবেন এই মত একটি তালিকা মধ্যে. আমরা মুছে ফেলতে চান হতে পারে ভালো একটি তালিকা থেকে. আমরা একটি তালিকা অনুসন্ধান করতে পারেন মূল্য, অথবা আরো সাধারণভাবে, ঢুকা. এবং ঢুকা মাত্র একটি অভিনব উপায় বাম এ শুরু বলার অপেক্ষা রাখে না এবং সব সরাতে ডান উপায়. এমনকি এই সামান্য সঙ্গে নোটিশ, অত্যাধুনিক তথ্য কাঠামো, যাক আমার সম্পর্কে আমরা কিছু ধার নিতে পারি যে প্রস্তাব গত দুই সপ্তাহ ধারণা ও নামক একটি ফাংশন বাস্তবায়ন ভালো সন্ধান করুন. এটা বা সত্য ফিরে যাচ্ছে মিথ্যা, ইঙ্গিত, হ্যাঁ অথবা কোন, এন তালিকার হয়. তার দ্বিতীয় যুক্তি একটি পয়েন্টার তালিকা নিজেকে তাই একটি একটি নোড যাও পয়েন্টার. তারপর আমি কাজ করতে যাচ্ছি সমস্ত ডিক্লেয়ার হয় একটি অস্থায়ী পরিবর্তনশীল. আমরা কনভেনশন দ্বারা এটি ptr ডাকবো পয়েন্টার জন্য. এবং আমি সমান দায়িত্ব অর্পণ করা তালিকার শুরুতে. এবং এখন যখন লুপ বিজ্ঞপ্তি. তাই দীর্ঘ পয়েন্টার সমান না হয় null, আমি চেক করতে যাচ্ছি. হয় পয়েন্টার তীর N সমান গৃহীত হয়েছিল N? নতুন - এবং একটি মিনিট অপেক্ষা করুন সিনট্যাক্স সমাচার. তীর একটি আকস্মিক সব কি? হ্যাঁ? যথাযথভাবে. সুতরাং যেহেতু একটি মাত্র কয়েক মিনিট আগে, আমরা ব্যবহৃত কিছু অ্যাক্সেস বিন্দু স্বরলিপি একটি struct ভিতরে, পরিবর্তনশীল যদি আপনি struct না আছে নিজেই, কিন্তু একটি struct একটি পয়েন্টার, সৌভাগ্যক্রমে, বাক্য গঠন এক টুকরা যে অবশেষে স্বজ্ঞাত জ্ঞান করে তোলে. তীর, পয়েন্টার অনুসরণ মানে আমাদের তীর সাধারণত এর অর্থ চাই pictorially, এবং এ যান ডাটা ফিল্ড ভিতরে. সুতরাং তীর বিন্দু হিসাবে একই জিনিস, কিন্তু আছে আপনি একটি পয়েন্টার আছে যখন আপনি এটি ব্যবহার. তাই ঠিক, তাহলে সংক্ষিপ্তবৃত্তি আপনি যদি যদি ক্ষেত্রের struct ভিতরে পয়েন্টার বলা সমান সমান N, সত্য ফিরে. অন্যথা, এখানে এই লাইন - পয়েন্টার পরবর্তী পয়েন্টার সমান. তাই এই কি করছে, নোটিশ, যদি আমি বর্তমানে struct নির্দেশ am 9, এবং 9 ধারণকারী সংখ্যা নয় আমি চাই - আমি খুঁজছি অনুমান জন্য N 50 সমান - আমি আমার অস্থায়ী পয়েন্টার আপডেট করতে যাচ্ছি এই নোডের এ নির্দেশ না আর, কিন্তু আছে পয়েন্টার তীর পরের, যা আমাকে এখানে আপ করা যাচ্ছে না. এখন, আমি একটি ঘূর্ণিবায়ু হয় উপলব্ধি উপস্থাপনা. বুধবার, আসলে আমরা এই কাজ করব কিছু মানুষ এবং আরো কিছু সঙ্গে ধীর গতিতে কোড. কিন্তু বুঝতে পারছি, এখন আমরা আমাদের তথ্য তৈরি করছি কাঠামো আরো জটিল, যাতে আমাদের আলগোরিদিম, আরও দক্ষ পেতে পারেন যা জন্য অপরিহার্য হতে যাচ্ছে pset ছয়, আমরা আবার, ইন লোড করা হলে, যারা 150,000 শব্দ, কিন্তু তাই করতে হবে দক্ষতার সঙ্গে, এবং মূলত একটি তৈরি করুন আমাদের ব্যবহারকারীদের করা জন্য রান যে প্রোগ্রাম রৈখিক, না স্কয়ার্ড n, কিন্তু মধ্যে আদর্শ মধ্যে ধ্রুবক সময়. আমরা বুধবার আপনি দেখতে পাবেন. স্পিকার: পরের CS50, ডেভিড এ তার বেস ক্ষেত্রে forgets. DAVID Malan: এবং যে আপনি যে কিভাবে টেক্সট বার্তা সি কি - [বিভিন্ন টেক্সট বার্তা বিজ্ঞপ্তি শোনাচ্ছে]