[Powered by Google Translate] [মতামত] [ক্যুইজ 0]
>> [Lexi রস, টমি MacWilliam, লুকাস Freitas, জোসেফ Ong] [হার্ভার্ড বিশ্ববিদ্যালয়]
>> [এটি CS50.] [CS50.TV]
>> আরে, সবাই.
স্বাগতম ক্যুইজ 0, যা কোন জায়গা নেওয়ার জন্য বুধবার এই পর্যালোচনার সময়.
আমরা কি আজ রাতের করতে যাচ্ছেন, আমি 3 অন্যান্য টিএফএস সঙ্গে আছি,
এবং আমরা একসাথে কি আমরা অবশ্যই যতদূর করেছেন পর্যালোচনার মধ্য দিয়ে যেতে চলুন.
এটা 100% ব্যাপক হবে, হতেই থাকবে না কিন্তু এটি একটি ভাল ধারণা আপনাকে দেবে
আপনি কি ইতিমধ্যে ডাউন আছে এবং আপনি কি এখনও বুধবার আগে অধ্যয়ন প্রয়োজন.
এবং প্রশ্নের সাথে আপনার হাত বাড়াতে মুক্ত মনে হিসাবে আমরা বরাবর চলুন,
কিন্তু মনে রাখতে যে আমরা একটি সময় সামান্য বিট করতে হবে শেষ
যদি আমরা কয়েক মিনিটের সঙ্গে পেতে মাধ্যমে অতিরিক্ত-যাও যাও সাধারণ প্রশ্ন করবেন,
তাই মন যে, রাখা এবং যাতে আমরা সপ্তাহ 0 সাথে শুরুতে শুরু চলুন.
>> [0 পর্যালোচনা ক্যুইজ!] [পার্ট 0] [Lexi রস] কিন্তু আগে আমরা যে let এর সম্পর্কে কথা বলা
ব্যঙ্গ মধ্যে পণ্য সরবরাহ.
>> [লজিস্টিক] [ক্যুইজ বুধবার 10/10 বক্তৃতা পরিবর্তে সঞ্চালিত]
>> [(বিস্তারিত জানার জন্য http://cdn.cs50.net/2012/fall/quizzes/0/about0.pdf দেখুন)] এটা বুধবার, অক্টোবর 10 ম হয়.
>> এটা এই বুধবার, এবং যদি আপনাকে এই URL-এ যান এখানে,
যা হয় CS50.net-গুলি আছে 'থেকে অ্যাক্সেসযোগ্য একটি লিঙ্ক এটি-
আপনি যেখানে উপর ভিত্তি করে যেতে সম্পর্কে তথ্য দেখতে পারেন
আপনার শেষ নাম বা স্কুল অন্তর্ভুক্তি সেইসাথে
এটা ঠিক কি বলে সম্পর্কে ব্যঙ্গ এবং প্রশ্নের ধরন আবরণ যে আপনি পেতে যাচ্ছেন হবে.
মনে রাখবেন যে আপনি ব্যঙ্গ জন্য বিভাগে একটি পর্যালোচনা করার সুযোগ থাকবে,
তাই আপনার টিএফএস কিছু অভ্যাস সমস্যার উপর উচিত হবে,
এবং যে এর আরেকটি ভাল সুযোগ যেখানে আপনি কি এখনও ব্যঙ্গ জন্য আপ অধ্যয়ন প্রয়োজন দেখুন.
যাক বিটস 'এন' বাইট সঙ্গে শুরুতে এর শুরু.
মনে রাখবেন একটি বিট শুধুমাত্র 0 বা 1,
এবং একটি বাইট ঐ 8 বিটের একটি সংকলন.
যাক বিট এই সংগ্রহে এ অধিকার এখানে এর চেহারা.
আমরা চিন্তা করা কতগুলি বিট আছে সক্ষম হওয়া উচিত.
যেখানে আমরা গণনা শুধু সেখানে তাদের 8, আট 0 অথবা 1 টি ইউনিট.
এবং যেহেতু 8 বিট, যে 1 বাইট আছে,
এবং আসুন হেক্সাডেসিমেল যাও তা রূপান্তর করুন.
হেক্সাডেসিমাল বেস 16 হয়, এবং এটি বেশ সহজ রূপান্তর
বাইনারি একটি সংখ্যা, যার মধ্যে একটি হেক্সাডেসিমেল সংখ্যা কি যে হয়,.
সমস্ত আমরা না হয় আমরা 4 দলের তাকান,
এবং আমরা যথাযথ হেক্সাডেসিমেল অঙ্ক তাদের রূপান্তর.
আমরা 4 ডানদিকে সবচেয়ে গ্রুপ দিয়ে শুরু, তাই 0011.
যে এক এবং এক 1 2 হতে, তাই একসঙ্গে যে 3 তোলে যাচ্ছে.
এবং তারপর দিন এর 4 অন্যান্য ব্লক তাকান.
1101. যে এক 1, এক 4, 8 এবং এক হতে যাচ্ছে.
একসাথে যে 13 হতে, যা ডি তোলে যাচ্ছে
এবং আমরা যে হেক্সাডেসিমেল আমরা 9 ​​0 মাধ্যমে ঠিক না যায় স্মরণ করব.
আমরা ফল মাধ্যমে 0 যান, তাই 9 পরে, একটি 10 ​​অনুরূপ,
11 বি, ইত্যাদি ইত্যাদি যেখানে ফল হল 15.
এখানে একটি 13 ডি,
তাই এটা দশমিক রূপান্তর আমরা সব কাজের জন্য আমরা আসলে
2 একটি ক্ষমতা হিসাবে প্রতিটি স্থান খাওয়াবো.
এটা এক 1, 2 এক, শূন্য 4s, শূন্য 8s, এক 16, ইত্যাদি ইত্যাদি,
এবং এটা একটু হার্ড আপনার মাথা গনা যাও, কিন্তু আমরা যদি পরবর্তী স্লাইডে গমন
আমরা উত্তর দেখতে পারেন.
>> মূলত আমরা ফিরে যাওয়া বাম থেকে ডান জুড়ে করছি,
এবং আমরা 2 অনুরূপ শক্তি দ্বারা প্রতিটি অঙ্ক করছি গুন.
এবং মনে হেক্সাডেসিমেল জন্য আমরা 0x সঙ্গে শুরুতে এই সংখ্যা বোঝান
যাতে আমরা এটি একটি দশমিক সংখ্যা সাথে গুলিয়ে ফেলা নয়.
উপর অব্যাহত, এই একটি ASCII ছক,
আমরা কি জন্য ব্যবহার হওয়া ASCII অক্ষর থেকে সংখ্যাগত মান ম্যাপ হয়.
ক্রিপ্টোগ্রাফি pset মধ্যে মনে রাখবেন আমরা ASCII ছক ব্যাপক ব্যবহার করেছেন
যাতে ক্রিপ্টোগ্রাফি বিভিন্ন পদ্ধতি ব্যবহার করা,
সিজার এবং Vigenère সাইফার, বিভিন্ন বর্ণের রূপান্তর
ইন কী ব্যবহারকারী দ্বারা প্রদত্ত অনুযায়ী একটি পংক্তি.
চলুন একটি ASCII গণিত সামান্য বিট তাকান.
দেখার জন্যে এ 'P' অক্ষর ফর্ম যে প্রশ্ন হবে এ + 1 টি,
এবং মনে রাখবেন, '5 '≠ 5.
এবং কিভাবে ঠিক আমরা যারা 2 ফর্মের মধ্যে রূপান্তর করতে চান?
এটা আসলে খুব কঠিন নয়.
যাতে 5 পেতে আমরা '0 বিয়োগ '
কারণ '0 মধ্যে 5 জায়গা আছে 'এবং '5.'
যাতে অন্য কোন উপায়ে আমরা ঠিক 0 যোগ যান,
তাই এটি নিয়মিত গাণিতিক মত ধরণের.
শুধু মনে রাখবেন, যখন এটি কাছাকাছি কিছু উক্তি আছে যে এটা একটা অক্ষর
এবং এইভাবে ASCII টেবিলের মধ্যে একটি মান অনুরূপ.
আরো সাধারণ কম্পিউটার বিজ্ঞান বিষয়ের মধ্যে স্থানান্তর করে.
আমরা শিখেছি কি একটি অ্যালগরিদম হয় এবং আমরা কিভাবে ব্যবহার প্রোগ্রামিং
যাও আলগোরিদিম বাস্তবায়ন.
আলগোরিদিম উদাহরণ হল কিছু ভালো সত্যিই সহজ
চেক কিনা একটি নম্বর এমনকি বা অদ্ভুত.
মনে রাখবেন যে আমরা 2 নম্বর ও mod যদি এর ফলে 0 চেক.
যদি তাই হয়, এটি এমনকি এর. যদি না হয়, এটা অদ্ভুত.
আর এটা সত্যিই একটি মৌলিক আলগোরিদিম একটি উদাহরণ.
>> একটি আরও বেশী জড়িত এক সামান্য বিট বাইনারি অনুসন্ধান করা হয়,
যা আমরা পর্যালোচনা সেশনের মধ্যে পরে যাবেন.
এবং প্রোগ্রামিং শব্দ হয় আমরা একটি অ্যালগরিদম নেওয়ার জন্য ব্যবহার
এবং এটি কম্পিউটারে কোড রূপান্তর পড়তে পারেন.
প্রোগ্রামিং এর মধ্যে 2 টি উদাহরণ ভূত হয়,
যা কি আমরা সপ্তাহ 0 করেছিল.
যদিও আমরা কোড টাইপ আসলে না আউট এটা রূপায়ণকারী একটি উপায়
এই অ্যালগরিদম, যার সংখ্যা 1-10 মুদ্রণ করা হয়,
এবং এখানে আমরা C প্রোগ্রামিং ভাষা একই না.
এই বৈশিষ্ট্যগুলি হল সমতুল্য, বিভিন্ন ভাষার সিনট্যাক্স বা ঠিক করা.
আমরা তখন বুলিয়ান এক্সপ্রেশন সম্পর্কে শিখেছি,
এবং একটি বুলিয়ান মান যা একটি সত্য বা মিথ্যা হয়,
এবং এখানে বারংবার বুলিয়ান এক্সপ্রেশন
শর্ত ভিতরে যান, তাই যদি (x ≤ 5),
ভাল, আমরা ইতিমধ্যেই সেট x = 5, যাতে শর্ত সত্য যাও নির্ণয় করা যাচ্ছে.
এবং যদি এটা সত্যি, যাই হোক না কেন কোড শর্ত অধ হয়
কম্পিউটার দ্বারা মূল্যায়ন করা হবে, যাতে স্ট্রিং প্রিন্ট করা যাচ্ছে
যাও স্ট্যান্ডার্ড আউপুট, এবং শব্দ শর্ত
বোঝায় যদি বিবৃতির প্রথম বন্ধনী ভিতর যা কিছু থাকে যাও.
সব অপারেটরদের মনে রাখুন.
| যখন আমরা চেষ্টা করছি একত্রিত যাও 2 বা আরো শর্ত, | এটি এর && এবং মনে রাখুন
== না = কিনা 2 জিনিষ সমান চেক.
মনে রাখবেন যে নিয়োগ জন্য = হয় যেহেতু == একটি বুলিয়ান অপারেটর.
≤, ≥ এবং তারপর চূড়ান্ত 2 হয় স্বশাসিত.
একটি বুলিয়ান যুক্তি সাধারণ এখানে পর্যালোচনা.
এবং বুলিয়ান এক্সপ্রেশন এছাড়াও loops গুরুত্বপূর্ণ,
যা আমরা এখন উপর যাবেন.
আমরা শিখেছি CS50 loops মধ্যে প্রায় 3 ধরনের এতদূর, জন্য, যখন, এবং কাজ করার সময়.
এবং এটা জানা জরুরী যে যখন জন্য সবচেয়ে উদ্দেশ্য
আমরা আসলে লুপ কোনো ধরনের সাধারণত ব্যবহার করতে পারেন
উদ্দেশ্য বা প্রচলিত ধরন নির্দিষ্ট ধরনের আছে
প্রোগ্রামিং এ যে নির্দিষ্টভাবে এই loops একটির জন্য কল
যে এটা সবচেয়ে দক্ষ বা যে উপায়ে তা কোড মার্জিত.
যাক এর উপর যেতে কি এই loops প্রতিটি tends যাও জন্য ব্যবহৃত অধিকাংশ করা হবে.
>> একটি লুপ ইন জন্য সাধারণভাবে আমরা ইতিমধ্যে জানি কতবার আমরা পুনরুক্তি করতে চান.
আমরা শর্ত রাখা হয়.
জন্য, i = 0, তোমার <10, যেমন.
আমরা ইতিমধ্যে জানি যে আমরা 10 গুণ বেশি কিছু করতে চান.
যখন একটি লুপ জন্য এখন, সাধারণত, আমরা অগত্যা না
জানি কতবার আমরা লুপ চালানোর চান.
কিন্তু আমরা অবস্থার কিছু সাজানোর যে আমরা তা জানতে চাই না
সর্বদা সত্য বা মিথ্যা হতে সবসময়.
উদাহরণস্বরূপ, যখন সেট করা হয়.
চলুন শুরু করা যাক যে এর একটি বুলিয়ান পরিবর্তনশীল.
যদিও এটা সত্য আমরা কোড মূল্যনির্ধারণ করতে চান,
তাই অল্প আরো বাড়ানো যায়, সামান্য বিট একটি লুপ জন্য অধিক সাধারণ,
কিন্তু লুপ জন্য কোনো একটা সময় লুপ রূপান্তরিত করা যায়.
অবশেষে, যখন loops না, যা trickiest অধিকার দূরে হৃদয়ঙ্গম করা হতে পারে,
প্রায়ই ব্যবহৃত হয় যখন আমরা প্রথম কোড নির্ণয় করা চাই
প্রথম সময় আগে আমরা পরীক্ষা.
একটি সাধারণ ব্যবহারের জন্য একটি কেস না যখন লুপ
যখন আপনি ব্যবহারকারীর ইনপুট পেতে চান, এবং আপনি কি জানেন যে ব্যবহারকারী যাও জিজ্ঞাসা করতে চান
জন্য ইনপুট অন্তত একবার, কিন্তু অধিকার যদি তারা ভাল ইনপুট আপনি কি না দূরে
আপনি তাদের জিজ্ঞাসা পর্যন্ত তারা আপনাকে ভাল ইনপুট দিতে রাখতে চান.
এটা একটি সবচেয়ে প্রচলিত ব্যবহার হয় যখন লুপ না,
এবং আসুন এইসব loops প্রকৃত কাঠামো তাকান.
তারা সবসময় সাধারণত এইসব নিদর্শন অনুসরণ ঝোঁক.
>> ভিতরে জন্য লুপ আপনি 3 উপাদান আছে:
আরম্ভের, প্রথাগতভাবে কিছু ভালো int i = 0 যেখানে আমি পাল্টা হয়,
অবস্থা, যেখানে আমরা লুপ জন্য এই হিসাবে এই অবস্থা এখনও দীর্ঘ ঝুলিতে হিসাবে চালানো বলতে চাই,
তোমার মত <10, তারপর এবং পরিশেষে, আপডেট, যা আমরা কীভাবে বাড়ায়
লুপের মধ্যে প্রতিটি পর্যায়ে পাল্টা পরিবর্তনশীল.
একটি সাধারণ বিষয় সেখানে দেখতে ঠিক তোমার + + ',
যা 1 দ্বারা তোমার প্রতি সময় বাড়ায় মানে.
এছাড়াও আপনি i + = 2 ভালো কিছু করতে পারে,
যার মানে তোমার 2 প্রতিটি সময় আপনি লুপের মাধ্যমে যেতে হবে.
এবং তারপর এই কোড যে আসলে ঠিক কোন লুপ অংশ হিসাবে সঞ্চালিত বোঝায়.
এবং একটি লুপ করার জন্য, এই সময় আসলে আমরা বাইরে লুপ আরম্ভ আছে,
যাতে, উদাহরণস্বরূপ, আসুন আমরা বলতে লুপ একই টাইপ হিসাবে আমি বর্ণনা করতে চেষ্টা করছেন.
আমরা int i = 0 লুপ আরম্ভ করার আগে বলতে হবে.
তারপর আমরা যখন তোমার <10 এই কি বলতে পারে,
তাই কোড একই আগে হিসাবে ব্লক,
এবং এই সময় কোড আপডেটের জন্য উদাহরণস্বরূপ অংশ,, আমি + + ',
লুপ এর ভিতরে আসলে যায়.
এবং অবশেষে, একটি কাজের জন্য যখন, এটা অনুরূপ যখন লুপ যাও,
কিন্তু আমরা যে একবার কোড নির্ণয় করা হবে স্মরণে রাখতে হবে
আগে অবস্থা চেক করা হয়, তাই এটি অনেক বেশি অর্থ
যদি আপনি এটি তাকান নিচ অনুযায়ী.
ইন করার সময় একটি লুপ কোড মূল্যায়ন করার আগে আপনাকে এমনকি শর্ত তাকান,
যখন একটি লুপ যেহেতু, এটি পরীক্ষা করে প্রথম.
বিবৃতি এবং ভেরিয়েবল.
যখন আমরা একটি নতুন উপাদান তৈরি করতে চান আমরা প্রথমে এটি আরম্ভ করতে চান.
>> উদাহরণস্বরূপ, int-বার বার পরিবর্তনশীল সূচনা করে,
কিন্তু এটি একটি মান দেয় না, তাই কি হয় এখন দণ্ড এর মান?
আমরা জানি না.
এটা কিছু আবর্জনা মান যে মেমরি পূর্বে ছিল সঞ্চিত হতে পারে,
এবং আমরা যে ভেরিয়েবল ব্যবহার করতে না চান
যতক্ষণ না আমরা আসলে এটি একটি মান প্রদান,
তাই আমরা এখানে এটা ডিক্লেয়ার.
তারপর আমরা এটি 42 নীচের হতে আরম্ভ.
অবশ্যই এখন,, আমরা জানতে পারি যে এই কাজ এক লাইন, int = 42 বার করা যেতে পারে.
তবে একাধিক পদ্ধতি অনুসরণ করে যাচ্ছি করা সাফ,
ঘোষণা এবং আরম্ভের আলাদাভাবে এখানে ঘটছে.
এটা এক ধাপ উপর সেটা হয়, এবং পরবর্তী এক, int-baz = দণ্ড + 1 টি,
এই নীচের বিবৃতি, যাতে এই কোড ব্লক শেষে যে বাড়তি baz,
যদি আমরা baz মান মুদ্রণ এটি ছিল 44 হবে
কারণ আমরা ঘোষণা এবং এটি 1> বার হতে আরম্ভ করা,
এবং তারপর আমরা তা বাড়ায় সঙ্গে আরো একবার +.
আমরা এই সুন্দর সংক্ষিপ্তভাবে উপর গিয়েছিলাম, কিন্তু এটা একটা সাধারণ ভালো আছে
কি থ্রেড এবং ইভেন্ট হয় অন্তর্দৃষ্টিসম্পন্ন.
আমরা প্রধানত শয়তান এই হয়নি,
তাই আপনি কোড থ্রেডের একাধিক ক্রম হিসাবে মনে করতে পারেন
একই সময়ে চলমান.
বাস্তবতা ইন, এটা সম্ভবত একই সময়ে সঞ্চালিত না,
কিন্তু abstractly ধরণের আমরা যে ভাবে মনে করতে পারেন.
>> উদাহরণস্বরূপ ভূত ইন,, আমরা একাধিক sprites ছিল.
সেই একই সময়ে বিভিন্ন কোড নির্বাহ করা যায়নি.
এক হাঁটা যখন অন্য কিছু বলছে না করা হতে পারে
একটি পর্দার বিভিন্ন অংশ.
অনুষ্ঠান হয় পৃথক যুক্তিবিজ্ঞান বাইরে অন্য কোনো উপায়
মধ্যে আপনার কোড বিভিন্ন উপাদান,
এবং আমরা ভূত ছিল এর ঘটনা ব্রডকাস্ট ব্যবহার করে অনুকরণ করতে সক্ষম,
এবং যে প্রকৃত যখন আমি পান, আমি শুনতে যখন হইনি,
কিন্তু মূলত এটা একটা উপায় তথ্য প্রেরণ
থেকে এক পরী অন্য.
উদাহরণস্বরূপ, আপনি খেলা উপর প্রেরণ করতে পারেন,
এবং যখন অন্য পরী খেলা পায় উপর,
এটি একটি নির্দিষ্ট উপায় সাড়া.
এটা একটি গুরুত্বপূর্ণ মডেল প্রোগ্রামিং জন্য বুঝতে.
শুধু মৌলিক সপ্তাহ 0 ওভার যেতে, কি আমরা ধরে চলে গেছে এ পর্যন্ত করেছি,
আসুন এই সহজ সি প্রোগ্রাম তাকান.
টেক্সট একটু বিট এখানে থেকে ছোট হতে পারে, কিন্তু আমি এটা সত্যিই উপর দ্রুত যাবেন হতে পারে.
আমরা 2 উপরে, cs50.h এবং stdio.h এ হেডার ফাইল সহ করছি.
এরপর আমরা করছি একটি ধ্রুবক বলা সীমা 100 সংজ্ঞা.
এরপর আমরা করছি আমাদের প্রধান ফাংশন রূপায়ণকারী.
যেহেতু এখানে আমরা ব্যবহার করে কমান্ড লাইন আর্গুমেন্ট না আমরা অকার্যকর করা প্রয়োজন
প্রধান হিসাবে জন্য আর্গুমেন্ট.
আমরা দেখতে প্রধান উপরে int. এটা রিটার্ন টাইপ তাই নীচে ফিরে 0.
এবং আমরা CS50 লাইব্রেরি ফাংশন ব্যবহার করছেন int-get
ইনপুট জন্য ব্যবহারকারী, জিজ্ঞাসা এবং আমরা এই পরিবর্তনশীল x এর মধ্যে এটি সংরক্ষণ,
তাই আমরা উপরে x ঘোষণা, এবং আমরা x = GetInt সঙ্গে এটি আরম্ভ.
>> আমরা তারপরে যদি ব্যবহারকারী দিয়েছেন ভাল ইনপুট আমাদের দেখুন.
এটি যদি ≥ LIMIT আমরা একটি ত্রুটির কোড 1 প্রত্যাবর্তন করার সময় একটি ত্রুটি বার্তা প্রিন্ট করতে চান.
এবং অবশেষে, যদি ব্যবহারকারী আমাদের দেওয়া করেনি ভাল ইনপুট
আমরা নম্বর এবং স্কয়ার যে ফলাফল প্রিন্ট আউট চলুন.
শুধু নিশ্চিত করতে যে তাদের সব আঘাত হোম
আপনি এখানে কোডের বিভিন্ন অংশের লেবেল দেখতে পারেন.
আমি ধ্রুব, হেডার ফাইল উল্লেখ করেছে.
ওহ, int-x. যে একটি স্থানীয় পরিবর্তনশীল মনে রাখবেন কিনা তা নিশ্চিত করুন.
যে একটি পরিবর্তনশীল বিশ্ব থেকে এটি বৈপরীত্য, যা আমরা যে বিষয়ে কথা বলতে পারবেন
কিছুক্ষন পরে পর্যালোচনা সময়,
এবং আমরা লাইব্রেরি ফাংশন কলিং printf হয়,
তাই আমরা যদি stdio.h হেডার ফাইলটি অন্তর্ভুক্ত ছিল না
আমরা printf কল করতে পারব না.
এবং আমি বিশ্বাস করি যে তীর এখানে কেটে গিয়েছে% d তে প্রতি নির্দেশ করা হয়,
যা printf মধ্যে ফরম্যাট স্ট্রিং.
এটি বলছে যে একটি সংখ্যা,% d হিসাবে এই পরিবর্তনশীল প্রিন্ট আউট.
এবং যে সপ্তাহ 0 জন্য এটা.
এখন লুকাস অবিরত যাচ্ছে.
আরে, না. আমার নাম লুকাস.
আমি ক্যাম্পাস, মাথের সেরা বাড়িতে একটি বার্ষিক,
এবং আমি সপ্তাহ 1 এবং 2.1 সম্পর্কে অল্প কথা বলতে যাচ্ছি.
[1 সপ্তাহ এবং 2.1!] [লুকাস Freitas]
হিসাবে Lexi, বলছে যখন আমরা শুরু থেকে ভূত C এবং আপনার কোড অনুবাদ ছিল
বিষয় আমরা খেয়াল না হয় যে আপনি ঠিক করতে পারবেন না
আপনার কোড লিখুন এবং এটি একটি সবুজ পতাকা আর ব্যবহার করুন.
বাস্তবিক, আপনি কিছু পদক্ষেপ আপনার সি প্রোগ্রাম ব্যবহার করা আছে
একটি এক্সিকিউটেবল ফাইল হয়ে.
মূলত আপনি কি করবেন আপনি যখন একটি প্রোগ্রাম লেখা সেটি যে
আপনি একটি ভাষা যে একটি কম্পাইলার বুঝতে পারেন আপনার ধারণা অনুবাদ,
তাই যখন আপনি সি একটি প্রোগ্রাম করছি লেখা
আপনি কি করছেন প্রকৃতপক্ষে কিছু লেখা যে আপনার কম্পাইলার বুঝতে হবে,
এবং তারপর কম্পাইলার যে কোড অনুবাদ যাচ্ছে
মধ্যে কিছু যে আপনার কম্পিউটার বুঝতে হবে.
>> এবং জিনিস, আপনার কম্পিউটারে করা হয় আসলে খুব বোবা.
আপনার কম্পিউটার কেবল বুঝতে 0 সেঃ এবং 1s করতে পারেন,
তাই আসলে প্রথম কম্পিউটারের সাধারণত মানুষ প্রোগ্রাম
ব্যবহার করে আর 0 সেঃ এবং 1s, কিন্তু না, শ্বরপ্রসাদ.
আমরা 0 সেঃ এবং 1s জন্য ক্রম মুখস্থ করতে হবে না
জন্য লুপ জন্য অথবা যখন জন্য একটি লুপ এবং তাই একটি.
এটা কেন আমরা একটি কম্পাইলার আছে.
কি একটা কম্পাইলার আছে এটা মূলত সি কোড অনুবাদ,
আমাদের ক্ষেত্রে, একটি ভাষা যে আপনার কম্পিউটার বুঝতে হবে,
যা অবজেক্ট কোড, এবং কম্পাইলার যে আমরা ব্যবহার করছেন
ঝনঝন শব্দ বলা হয়, তাই এটি আসলে ঝনঝন জন্য প্রতীক.
আপনি যখন আপনার প্রোগ্রাম আছে, আপনি 2 কিছু করার আছে.
প্রথমত, আপনার প্রোগ্রাম কম্পাইল আছে, এবং তারপর আপনি আপনার প্রোগ্রাম চালানো চলুন.
আপনার প্রোগ্রাম আপনাকে অপশনের তাই অনেক আছে সঙ্কলন.
প্রথম এক ঝনঝন program.c না হয়
যার মধ্যে প্রোগ্রাম আপনার প্রোগ্রামের নাম.
এই ক্ষেত্রে আপনি তারা ঠিক করছেন বলে যে "আরে, আমার প্রোগ্রাম কম্পাইল." দেখতে পারেন
আপনি কিছু করছেন বা "আমি আমার প্রোগ্রামের জন্য এই নাম চাই" বলছে না.
>> দ্বিতীয় বিকল্পটি আপনার প্রোগ্রাম নামকরণ করা হয়.
আপনি ঝনঝন-ণ এবং তারপর নাম চান সেটি বলতে পারেন
এক্সিকিউটেবল ফাইল নামে হিসাবে এবং তারপর program.c যাও.
এবং আপনি এ প্রোগ্রাম করতে না পারে, এবং কিভাবে প্রথম 2 ক্ষেত্রে দেখুন
আমি করা গ., এবং তৃতীয় একজন কেবলমাত্র আমি প্রোগ্রাম আছে?
হ্যাঁ, আসলে আপনাকে করা গ. না যখন আপনি ব্যবহার করা উচিত.
অন্যথা আসলে কম্পাইলার আপনাকে চিত্কার যাও যাচ্ছে.
এবং এছাড়াও, আমি যদি আপনি মনে করতে না জানি,
কিন্তু বার আমরা ব্যবহৃত-lcs50 অথবা-lm অনেক.
যে লিঙ্ক বলা হয়.
এটা কম্পাইলার বলে যে আপনাকে সেই লাইব্রেরি ব্যবহারের অধিকার থাকবে,
তাই আপনি যদি যাও cs50.h ব্যবহার করতে চান তাহলে আপনি আসলে টাইপ আছে
ঝনঝন-program.c lcs50.
যদি আপনি তা না করেন তাহলে, কম্পাইলার জানা যাচ্ছে না
আপনি যে cs50.h. যারা ফাংশন ব্যবহার করছেন
এবং আপনি যখন আপনার প্রোগ্রাম আপনাকে 2 অপশন আছে চালাতে চান.
আপনি যদি ঝনঝন program.c কি আপনার নামের একটি প্রোগ্রাম কি দেয় না.
আপনি এটি. / A.out ব্যবহার করে চালানো আছে.
A.out একটি সাধারণ নাম যে ঝনঝন আপনার প্রোগ্রাম দেয় যদি আপনি একটি নাম এটা কি না.
অন্যথায় আপনি. / প্রোগ্রাম চালু না যদি আপনি আপনার প্রোগ্রামটি একটি নাম কেউ জানে না করছি,
এবং এছাড়াও যদি আপনি প্রোগ্রামের নাম না কি যে একটি প্রোগ্রাম পেতে যাচ্ছে
ইতিমধ্যে হয় going to গ ফাইল হিসাবে একই নামের প্রোগ্রাম করা হবে.
তারপর আমরা ধরনের তথ্য এবং তথ্য সম্পর্কে বললাম.
>> মূলত তথ্য ধরনের সামান্য বাক্সে তারা ব্যবহার হিসাবে একই জিনিস
যাও মান সংরক্ষণ, তাই তথ্য ধরনের Pokémons ঠিক মত আসলে.
তারা সব আকারের এবং রকমের.
আমি যদি যে উপমা অর্থে তোলে জানি না.
তথ্য আকার আসলে মেশিন আর্কিটেকচারের উপর নির্ভর করে.
সমস্ত তথ্য মাপ যে আমি এখানে দেখানোর চলেছি
একটি 32 বিট মেশিন, যা আমাদের প্রয়োগ ক্ষেত্রে আসলে,
কিন্তু আসলে আপনি যদি আপনার ম্যাক বা উইন্ডোজ রয়েছে কোডিং
সম্ভবত আপনি একটি 64 বিট মেশিনের আছে চলুন,
তাই মনে রাখবেন যে এখানে তথ্য মাপ যে আমি যাচ্ছি দেখানোর জন্য
32 বিট মেশিনের জন্য.
প্রথম এক যে ছিল আমরা দেখেছি কোন int,
যা বেশ সহজবোধ্য.
আপনাকে ব্যবহার করার জন্য একটি পূর্ণসংখ্যা সঞ্চয় int.
আমরা চরিত্র, গৃহস্থালির কাজ দেখেছি.
আপনি যদি একটি চিঠি বা সামান্য চিহ্ন ব্যবহার করতে চান তাহলে সম্ভবত আপনি একটি গৃহস্থালি ব্যবহার করছি না.
একটি গৃহস্থালি 1 বাইট, যা 8 Lexi বলেন ভালো বিট, মানে আছে.
মূলত আমরা একটি ছক ASCII যে 256 আছে
0 সেঃ এবং 1s সম্ভাব্য সমাহার,
এবং তারপর যখন আপনি একটি গৃহস্থালি টাইপ করুন এটি অনুবাদ করছে
অক্ষর যে উত্তরগুলি আপনি একটি নম্বর আছে যে আপনি Lexi যেমন ASCII টেবিল, বলেন.
আমরা float, যা আমরা দশমিক সংখ্যা সঞ্চয় ব্যবহার আছে.
উদাহরণস্বরূপ, আপনি যদি 3.14 চয়ন করতে চান, তাহলে আপনাকে একটি float ব্যবহার চলুন
অথবা একটি ডবল যে আরো স্পষ্টতা আছে.
একটি float 4 বাইট আছে.
একটি ডবল 8 বাইট আছে, তাই শুধু পার্থক্য হল স্পষ্টতা.
আমরা একটি দীর্ঘ যে পূর্ণসংখ্যার জন্য ব্যবহৃত হয়,
এবং আপনাকে একটি 32 বিট মেশিনের জন্য কোন int এবং একটি দীর্ঘ একই আকার আছে দেখতে পারেন,
তাই এটি সত্যিই অর্থে দেখা যায় না একটি 32 বিট মেশিনের মধ্যে একটি দীর্ঘ ব্যবহার.
>> কিন্তু আপনি যদি একটি ম্যাক এবং 64 বিট মেশিনের ব্যবহার করছেন, আসলে একটি দীর্ঘ 8 আকার আছে,
তাই এটি সত্যিই আর্কিটেকচারের উপর নির্ভর করে.
32 বিট মেশিনের জন্য এটি সত্যিই একটি দীর্ঘ ব্যবহার করা কোনো অনুভূতি না.
এবং তারপর একটি অন্য হাত লম্বা লম্বা,, 8 বাইট আছে,
তাই এটা খুবই ভাল আর যদি আপনি একটি পূর্ণসংখ্যা করাতে চাই.
এবং পরিশেষে, আমরা স্ট্রিং আছে, যা আসলে একটি গৃহস্থালি *,
যা একটি গৃহস্থালি একটি পয়েন্টার.
এটা খুব সহজ যে স্ট্রিং এর আকারের মত হবে মনে হয়
অক্ষরের সংখ্যা যে আপনি আছে,
কিন্তু আসলে টুকিটাকি কাজ নিজেই *
একটি গৃহস্থালি, যা 4 বাইটের একটি পয়েন্টার মাপ আছে.
একটি গৃহস্থালি * আকার 4 বাইট.
আপনি যদি ছোট একটি শব্দ বা অক্ষর বা কিছু আছে কোন ব্যাপার না.
এটি 4 বাইট হতে যাচ্ছে.
আমরা কাস্টিং সম্পর্কে অল্প শিখেছি,
যাতে আপনি দেখতে পারেন, উদাহরণস্বরূপ, যদি আপনি আছে,, একটি প্রোগ্রাম যা বলছেন
int x = 3 এবং তারপর printf ("% d", x / 2)
আপনি কি না কি এটি পর্দায় মুদ্রণ করা হচ্ছে?
>> কেউ? >> [ছাত্রদের] 2.
1. >> 1, হাঁ.
আপনি যখন 3/2 এটা যাও 1.5 পাওয়া যাচ্ছে,
কিন্তু যেহেতু আমরা একটি পূর্ণসংখ্যা ব্যবহার করছেন তা দশমিক অংশ উপেক্ষা করবে,
এবং আপনি 1 আছে চলুন.
যদি আপনি যে উদাহরণ ঘটতে জন্য কি কি করতে পারবেন, না চান,
একটি float ডিক্লেয়ার y = x.
তারপর এখন x যে যাও 3 ব্যবহৃত হতে যাও y মধ্যে 3,000 হতে যাচ্ছে.
এবং তারপর আপনি y / 2 মুদ্রণ করতে পারেন.
বাস্তবিক, আমি একটি 2 থাকা উচিত. ওখানে.
এটি 3.00/2.00 কি করবে,
এবং আপনি 1.5 পেতে যাচ্ছেন.
এবং আমরা শুধু 2 দশমিক অংশ দশমিক ইউনিট চাইতে এই .2 চ আছে.
আপনি যদি .3 চ আছে তা 1,500 আসলে আছে যাচ্ছে.
যদি এটি 2 তা 1.50 হতে যাচ্ছে.
আমরা এই ক্ষেত্রে এখানে আছে.
আপনি যদি float না x = 3.14 এবং তারপর আপনি printf x
আপনি 3.14 পেতে যাচ্ছেন.
এবং যদি আপনি না x = x এর int,
যা কোন int x হিসাবে বিবেচনা মানে এবং আপনি এক্স এখন মুদ্রণ
আপনি 3.00 আছে চলুন.
কি যে জানার জন্য?
কারণ প্রথমে আপনি একটি পূর্ণসংখ্যা হিসাবে করছেন x এর চিকিত্সা হয়, তাই আপনি দশমিক অংশ উপেক্ষা করছেন,
এবং তারপর আপনি এক্স মুদ্রণ করছি.
এবং পরিশেষে, তাহলে আপনি এটা করতে পারেন,
int x = 65, এবং তারপর আপনি একটি গৃহস্থালি গ = x ঘোষণা,
এবং আপনি যদি সি মুদ্রণ আসলে আপনি পেতে যাচ্ছে করছি
তবে মূলত কি, এখানে আপনি করছেন
হয় অক্ষর মধ্যে পূর্ণসংখ্যা অনুবাদ,
ASCII ছক ঠিক আছে.
আমরা গণিত অপারেটরদের সম্পর্কে বললাম.
এদের অধিকাংশই প্রশংসনীয় সহজবোধ্য, তাই, +, -, *, /,
এবং আমরা mod, যা 2 সংখ্যার একটি বিভাগ বাকি সম্পর্কে বললাম.
আপনি যদি 10 উদাহরণস্বরূপ,% 3, আছে,
এটা মানে 3 10 বিভক্ত করা, এবং কি বাকি?
এটি 1 হতে যাচ্ছে, তাই এটি প্রোগ্রাম অনেক জন্য আসলে খুব দরকারী.
আমি Vigenère এবং সিজার জন্য না চমত্কার নিশ্চিত করুন যে আপনি ছেলেরা সব mod ব্যবহৃত.
গণিত অপারেটরদের আমার, খুব সতর্কতা অবলম্বন করা আবশ্যক যখন * এবং / মিশ্রন.
>> উদাহরণস্বরূপ, যদি আপনি না (3/2) * 2 কি আপনি পেতে যাচ্ছি?
[ছাত্রদের] 2.
হাঁ, 2, কারণ 3/2 1.5 হতে হবে,
কিন্তু আপনি 2 পূর্ণসংখ্যার মধ্যে অপারেশন করছি
আপনি আসলে ঠিক করছি 1 বিবেচনা যাচ্ছে,
এবং তারপর 1 * 2 2 হবে, তাই খুব খুব, সতর্কতা অবলম্বন করা আবশ্যক
যখন ইন্টিজার সঙ্গে পাটিগণিত করছেন কারণ
আপনি যে ক্ষেত্রে যে 2 = 3 পেতে পারে.
এবং এছাড়াও প্রাধান্য সম্পর্কে খুব সতর্কতা অবলম্বন করা আবশ্যক.
আপনি সাধারণতঃ w বন্ধনী ববহার করে নিশ্চিত করুন যে আপনি কি জানেন যে আপনি ব্যবহার করছেন করা উচিত.
অবশ্যই কিছু দরকারী শর্টকাট,, একটি তোমার + বা i + = 1
অথবা ব্যবহার + =.
যা i = i + 1 করছেন হিসাবে একই জিনিস.
আপনি আমি কি করতে পারেন - বা তোমার - = 1,
যা আমি = আমি -1 হিসাবে একই জিনিস,
আপনি কিছু না loops জন্য অনেক ব্যবহার, অন্তত.
এছাড়াও, * জন্য, যদি আপনি ব্যবহার * = এবং যদি আপনি না, উদাহরণস্বরূপ,
তোমার * = 2 = আমি তোমার * 2 বলছে একই জিনিস,
এবং বিভাগ জন্য একই জিনিস.
আপনি যদি না তোমার / 2 = এটা আমি = আমি / 2 হিসাবে একই জিনিস.
>> এখন আমার কর্ম.
আপনি না শিখেছি যে ফাংশন একজন খুব ভাল কৌশল কোড সংরক্ষণ
যখন আপনি প্রোগ্রামিং করছি, তাই যদি আপনি একই কাজ করতে চান
কোড মধ্যে আবার এবং আবার সম্ভবত, আপনি একটি ফাংশন ব্যবহার করতে চান
ঠিক তাই আপনি এবং কপি এবং উপর আবার কোড কপি করে পেস্ট করতে হবে না.
বাস্তবিক, প্রধান একটি ফাংশন, এবং যখন আমি দেখানোর একটি ফাংশন বিন্যাসে আপনি
আপনি যে যে বেশ স্পষ্ট দেখতে চলুন.
আমরা কিছু লাইব্রেরি থেকে ফাংশন ব্যবহার,
উদাহরণস্বরূপ, printf, GetIn, CS50 লাইব্রেরি থেকে যা,
এবং toupper মত অন্যান্য কার্যাবলী.
ঐ সমস্ত কর্ম অন্যান্য লাইব্রেরি প্রকৃতপক্ষে বাস্তবায়িত হয়,
এবং যখন আপনি আপনার প্রোগ্রাম প্রারম্ভে ঐ শিকল ফাইল রাখা
আপনি আপনার সম্পর্কে যারা ফাংশন কোড দিতে পারেন দয়া করে বলছে
তাই আমি নিজেই তাদের বাস্তবায়ন করতে হবে না?
এবং আপনার নিজের ফাংশন, তাই লিখতে পারেন যখন আপনি প্রোগ্রামিং শুরু
আপনি বুঝি যে লাইব্রেরি সকল ফাংশন যে আপনি প্রয়োজন নেই.
উদাহরণস্বরূপ শেষ pset জন্য,, আমরা লিখেছেন একত্র আঁকা,, এবং লুকআপ,
এবং খুব খুব, গুরুত্বপূর্ণ ফাংশন লিখতে সমর্থ
কারণ তাদের দরকারী, এবং আমরা ব্যবহার করি সব সময় তাদের প্রোগ্রামিং,
এবং এটা কোড অনেক সঞ্চয়.
একটি ফাংশন বিন্যাস হল এই এক.
আমরা শুরু থেকেই রিটার্ন টাইপ আছে. রিটার্ন টাইপ কি?
এটি শুধু যখন আপনার ফাংশন ফিরে যাচ্ছে.
আপনি যদি একটি উদাহরণ জন্য ফাংশন,, গৌণিক আছে,
যে কোনো একটি পূর্ণসংখ্যা গৌণিক নিরূপণ করা যাচ্ছে না,
সম্ভবত এটি একটি পূর্ণসংখ্যা ফিরে যাচ্ছে.
তারপর ফিরে যাও int-এ টাইপ করা যাচ্ছে না.
Printf আসলে একটি রিটার্ন টাইপ অকার্যকর হয়েছে
কারণ আপনি কিছু ফিরে করছি না.
শুধুমাত্র আপনার পর্দায় জিনিষ মুদ্রণ
এবং ফাংশন পরে ছেড়ে যাচ্ছেন.
তারপর আপনি যে ফাংশন আপনি চয়ন করতে পারেন এর নাম আছে.
আপনি একটু যুক্তিসঙ্গত হতে পারে, যেমন xyz নামের মত নাম করার জন্য চয়ন করা উচিত নয়
বা ভালো x2f.
একটি নামের যে অর্থে তোলে মেক আপ করার চেষ্টা করুন.
>> উদাহরণস্বরূপ, যদি এটা গৌণিক, বলতে গৌণিক.
যদি এটি একটি ফাংশন যে কিছু আঁকা হবে, এটি নাম আঁকা.
এবং তারপর আমরা পরামিতি, যা নামেও পরিচিত আর্গুমেন্ট আছে,
সম্পদ যে আপনার ফাংশন এর প্রয়োজন মত যা
আপনার কোড থেকে তার টাস্ক সম্পাদনের জন্য.
আপনি যদি একটি সংখ্যা গৌণিক নিরূপণ করতে চান
সম্ভবত আপনি একটি সংখ্যা গৌণিক নিরূপণ করতে হবে.
আর্গুমেন্ট আপনি যে আছে চলুন এক নম্বর হল নিজেকে.
এবং তারপর এটা কিছু না এবং শেষে মান ফিরে যাচ্ছে
যতক্ষণ না এটি একটি অকার্যকর ফাংশন.
যাক এর একটি উদাহরণ দেখুন.
যদি আমি একটা ফাংশন যে পূর্ণসংখ্যার একটি অ্যারের মধ্যে সব সংখ্যার অঙ্কের লিখতে চান,
প্রথম সব, রিটার্ন টাইপ যাও int হবে
কারণ আমি পূর্ণসংখ্যার একটি অ্যারে আছে.
এবং তারপর আমি sumArray ভালো ফাংশন নাম আছে চলেছি,
এবং তারপর এটা অ্যারে নিজেই নিতে int-nums যাচ্ছে, এর,
এবং তারপর অ্যারের তাই আমি জানি কিভাবে আমি অনেক সংখ্যার যোগফল যাও আছে দৈর্ঘ্য.
তারপর আমি একটি পরিবর্তনশীল নামক উদাহরণস্বরূপ সমষ্টি,, 0 আরম্ভ আছে,
এবং প্রত্যেক সময় আমি অ্যারের মধ্যে একটি উপাদান দেখতে আমি এটি সংকলনে, যোগ, তাই উচিত আমি লুপ জন্য একটি কি.
শুধু ভালো Lexi বলেন, আপনি কি int i = 0, তোমার <দৈর্ঘ্য এবং তোমার +.
এবং আমি অ্যারের প্রতিটি উপাদান জন্য কি + = nums [i] সমষ্টি,
এবং তারপর আমি ফিরে সমষ্টি, তাই খুব সহজ, এবং এটা কোড অনেকটা সংরক্ষণ
যদি আপনি অনেক বার এই ফাংশন ব্যবহার করছেন.
তারপর আমরা শর্ত কটাক্ষপাত নেন.
যদি আমাদের সাথে আছে, অন্যথায়, এবং অন্যথায় যদি.
যাক কি হয় তাদের মধ্যে পার্থক্য দেখতে.
এই কোড 2 কটাক্ষপাত করা. তাদের মধ্যে পার্থক্য কি?
প্রথম এক মূলত করেনি কোড আপনি বলতে চান
যদি একটি সংখ্যা হল +, -, বা 0.
প্রথম এক বলেছেন যদি এটা> 0 তারপর এটা ইতিবাচক.
এটি যদি 0 = 0 তখন এটা, এবং যদি এটা <0 তারপর এটি ঋণাত্মক.
>> এবং অন্য এক যদি অন্যথায়, যদি অন্যথায়, করছে.
দুই এর মধ্যে পার্থক্য হচ্ছে এই এক আসলে যাচ্ছে
যদি> 0, <0 = 0 বা তিনবার, চেক
উদাহরণের জন্য, তাই যদি আপনি 2 নম্বর আছে, তা এখানে আসে এবং বলে যাচ্ছে
যদি (x> 0), এবং এটা ইয়েস যাচ্ছে, তাই আমি মুদ্রণ ইতিবাচক.
কিন্তু যদিও আমি জানি যে এটা> 0 এবং এটি যাও 0 বা <0 করা যাচ্ছে না
আমি এখনও করছি করতে যাচ্ছে এটা 0, এটা <0,
তাই আসলে আমি যাচ্ছি ভিতর IFS যে আমি না কি আছে
কারণ ইতিমধ্যে আমি জানি যে এইসব অবস্থার কোনো সন্তুষ্ট করা যাচ্ছে না.
আমি যদি অন্য ব্যবহার, যদি অন্যথায়, বিবৃতি পারেন.
এটি মূলত বলছেন যদি x = 0 আমি ইতিবাচক মুদ্রণ.
যদি এটা না, আমি এই পরীক্ষা করতে যাচ্ছি.
যদি এটি 2 আমি যাচ্ছি না এই কাজ করতে হবে.
মূলত আমি যদি x = 2 ছিল আপনি বলতে হবে
যদি (x> 0), হ্যাঁ, তাই এই মুদ্রণ.
এখন যে আমি জানি যে এটা> 0 এবং এটা যদি সন্তুষ্ট প্রথম
আমি এই কোড রান এমনকি যাচ্ছি না.
কোড রান দ্রুত আসলে,, 3 গুণ দ্রুত আপনি যদি এই ব্যবহার.
আমরা সম্পর্কে এবং এবং বা শিখেছি.
আমি এই মাধ্যমে Lexi কারণ ইতিমধ্যে তাদের সম্বন্ধে কথা বলত যেতে যাচ্ছি না.
এটি শুধু && এবং | | অপারেটর.
>> আমি শুধু বলবো সতর্কতা অবলম্বন করা আবশ্যক হয় যখন আপনি 3 শর্ত আছে.
এব w বন্ধনী ববহার কারণ এটা খুব বিভ্রান্ত ব্যবহার করুন যখন আপনি একটি শর্ত আছে
এবং অন্য এক বা অন্য এক.
এব w বন্ধনী ববহার ঠিক নিশ্চিত করুন যে আপনি শর্ত জানার জন্য ব্যবহার করা
কারণ উদাহরণস্বরূপ, যে ক্ষেত্রে, আপনি কল্পনা করতে পারেন যে
এটা প্রথম অবস্থা এবং এক বা অন্যান্য হতে পারে
অথবা 2 অবস্থার একটি সংমিশ্রণে এবং
বা তৃতীয় এক, তাই ঠিক সতর্কতা অবলম্বন করা আবশ্যক.
এবং পরিশেষে, আমরা সুইচ সম্পর্কে বললাম.
একটি সুইচ খুবই দরকারী যখন আপনি একটি ভেরিয়েবল আছে.
চলুন শুরু করা যাক যে আপনি n মত একটি পরিবর্তনশীল আছে
যে 0, 1, বা 2 হতে পারেন, এবং সেইসব ক্ষেত্রে প্রতিটি
আপনি একটি কাজ চলুন.
আপনি সুইচ পরিবর্তনশীল, এবং এটি নির্দেশ করে যে পারেন
তারপর মান হল VALUE1 মত আমি এই কাজ করতে যাচ্ছি,
এবং তারপর আমি বিরতি, যার অর্থ আমি অন্যান্য ক্ষেত্রে কোনো তাকান যাচ্ছি না
কারণ ইতিমধ্যে আমরা এই ক্ষেত্রে সন্তুষ্ট
এবং এছাড়াও তারপর value2 এবং তাই, এবং আমি একটি ডিফল্ট সুইচ করতে পারেন.
তার মানে যদি এটি ক্ষেত্রে যে আমি তা নিয়ে কোন সন্তুষ্ট না
যে আমি অন্য কিছু করতে যাচ্ছে, কিন্তু করছি যে ঐচ্ছিক.
যে আমার জন্য সব. এখন আসুন টমি আছে.
সমস্ত অধিকার, এই যাও 3 সপ্তাহ পর হতে যাচ্ছে.
এগুলি বিষয় আমরা আচ্ছাদন ক্রিপ্টো, সুযোগ, ইত্যাদি ইত্যাদি অ্যারে, করতে হবে, কিছু কিছু.
শুধু একটি ক্রিপ্টো উপর দ্রুত শব্দ. আমরা এই বাড়িতে হাতুড়ি যাচ্ছেন না.
>> আমরা pset 2 এই করেছিল, কিন্তু ব্যঙ্গ জন্য নিশ্চিত করা যে আপনি পার্থক্য জানেন
মধ্যে সিজার এবং Vigenère গোল্লা গোল্লা,
কিভাবে উভয় যারা সাইফারগুলির কাজ এবং কি এনক্রিপ্ট করার মত
টেক্সট ডিক্রিপ্ট এবং যারা 2 সাইফারগুলির ব্যবহার করে.
মনে রাখবেন, শুধু সিজার সাইফার একই পরিমাণ দ্বারা প্রতিটি অক্ষর rotates,
এমনটা নিশ্চিত আপনি mod দ্বারা বর্ণমালার অক্ষর সংখ্যা.
এবং অন্যদিকে Vigenère সাইফার,, প্রতিটি অক্ষর rotates
দ্বারা একটি ভিন্ন পরিমাণ, তাই বরং বলছে
প্রতি 3 Vigenère অক্ষর যে পরিমাণ ঘোরানো প্রতিটি অক্ষর আবর্তিত হবে
দ্বারা একটি ভিন্ন পরিমাণ কিছু অভিব্যক্তি উপর নির্ভর করে
অভিব্যক্তি যেখানে প্রতিটি অক্ষর কিছু ভিন্ন পরিমাণ উপস্থাপন
যাও দ্বারা স্পষ্ট টেক্সট আবর্তিত.
চলুন শুরু করা যাক পরিবর্তনশীল সুযোগ সম্পর্কে প্রথম আলাপ.
2 ভেরিয়েবল বিভিন্ন ধরনের হয়.
আমরা লোকাল ভেরিয়েবল আছে, এবং এই সংজ্ঞায়িত করা যাচ্ছে
বাইরে প্রধান বা বাইরের কোনো ফাংশন বা ব্লক,
এবং এই প্রোগ্রামে আপনার অ্যাক্সেসযোগ্য কোথাও হতে হবে.
আপনি যদি একটি ফাংশন আছে এবং যে কাজ করতে হয় যখন একটি লুপ
বড় পরিবর্তনশীল বিশ্বের সর্বত্র অ্যাক্সেসযোগ্য হয়.
অন্যদিকে স্থানীয় পরিবর্তনশীল,, হয় scoped জায়গা যেখানে এটি সংজ্ঞায়িত করা হয়.
>> উদাহরণস্বরূপ, আপনি যদি একটি ফাংশন আছে এখানে,, আমরা এই ফাংশন গ্রাম আছে,
এবং এর ভিতরে একটি গ্রাম এখানে পরিবর্তনশীল y বলা আছে,
এবং তার মানে তাদের এই একটি স্থানীয় পরিবর্তনশীল.
যদিও এই পরিবর্তনশীল y বলা হয়
এবং এই পরিবর্তনশীল এই 2 y ফাংশন বলা হয়
কোন ধারণা কি একে অপরের স্থানীয় ভেরিয়েবেলগুলো আছে.
অন্য দিকে, এখানে আমরা বলতে int x = 5,
এবং এই ফাংশনের কোন সুযোগ বাইরে.
এটা প্রধান সুযোগ বাইরে এর, তাই এই একটি বিশ্বব্যাপী পরিবর্তনশীল.
যে এইসব 2 কর্ম যে ভিতর মানে যখন আমি বলতে এক্স - বা x +
আমি একই x এর সাহায্যে এই y এবং এই y বিভিন্ন ভেরিয়েবল করছি অ্যাক্সেস.
এটা বিশ্বব্যাপী একটি পরিবর্তনশীল এবং একটি স্থানীয় পরিবর্তনশীল মধ্যে পার্থক্য.
যতদুর নকশা উদ্বিগ্ন হয় মাঝে মাঝে, এটি সম্ভবত একটি ভাল ধারণা
যাও ভেরিয়েবল স্থানীয় রাখা যখনই সম্ভবত আপনি যা করতে পারেন
যেহেতু গ্লোবাল ভেরিয়েবল হচ্ছে একটি গুচ্ছ সত্যিই বিভ্রান্তিকর পেতে পারেন.
আপনি যদি কর্ম একটি গুচ্ছ আছে সব একই জিনিস পরিবর্তন
আপনি কি যদি ঘটনাক্রমে এই ফাংশন পরিবর্তন বিশ্বব্যাপী এই ভুলবেন না পারে,
এবং এই অন্যান্য ফাংশন এটি সম্পর্কে না জানে,
এবং এটি প্রশংসনীয় বিভ্রান্তিকর পেতে হিসাবে আপনি আরো কোড পাওয়ার জন্য.
পালন ভেরিয়েবল স্থানীয় যখনই সম্ভবত আপনি যা করতে পারেন
শুধু ভাল নকশা.
অ্যারেগুলির মনে রাখবেন, সেগুলো একেবারে একই ধরনের উপাদানের তালিকা.
Ci ভেতরে 1, 2.0 মত একটি তালিকা আছে, হ্যালো করতে পারেন না.
আমরা ঠিক করতে পারবেন না.
>> যখন আমরা সি একটি অ্যারের ডিক্লেয়ার উপাদানের সব একই ধরনের হতে থাকে.
এখানে আমি 3 পূর্ণসংখ্যার একটি অ্যারে আছে.
এখানে আমি অ্যারের দ্বারা আছে, কিন্তু যদি আমি এই বাক্য গঠন করছি মধ্যে এটি প্রকাশক
যেখানে আমি কি উপাদানের সব হয় আমি এই 3 টেকনিক্যালি প্রয়োজন নির্দিষ্ট করে না.
কম্পাইলার হয় স্মার্ট যথেষ্ট চিন্তা কিভাবে অ্যারে বড় হওয়া উচিত.
এখন যখন আমি পেতে বা একটি অ্যারের মান সেট করতে চান
এই বাক্য গঠন করে না.
আসলে এই অ্যারের দ্বিতীয় উপাদান কারণ, মনে রাখবেন সংশোধন করতে হবে,
সংখ্যায়ন 0 আরম্ভ, না 1.
যদি আমি এই মান পড়তে চাই আমি ভালো কিছু বলতে পারে int x = অ্যারের [1].
অথবা মত যদি আমি এই মান সেট করতে চান, এখানে আমি যা করছি,
আমি [1] অ্যারে বলতে পারে = 4.
যে সময় তাদের সূচী দ্বারা উপাদান অ্যাক্সেস
অথবা তাদের স্থান বা যেখানে তারা অ্যারে আছে,
এবং যে তালিকা 0 আরম্ভ করা হয়.
আমরা অ্যারে শ্রেনীবিন্যাস থাকতে পারে,
এবং এই একটি বহু - মাত্রিক অ্যারে বলা হয়.
যখন আমরা একটি বহু - মাত্রিক অ্যারে আছে
তার মানে আমরা সারি এবং কলাম মত কিছু থাকতে পারে,
এবং এটি শুধুমাত্র এই visualizing বা এটা সম্পর্কে চিন্তা করার একটি পদ্ধতি.
যখন আমি একটি বহু - মাত্রিক অ্যারে আছে মানে আমি প্রয়োজন শুরু চলেছি
1 এর অধিক সূচক কারণ যদি আমি একটি গ্রিড আছে
ঠিক বলছে সারি আপনি আছেন আমাদের একটি নম্বর দেওয়া যাবে না.
যে সত্যিই ঠিক এর আমাদের সংখ্যার একটি তালিকা দিতে যাচ্ছে.
চলুন শুরু করা যাক বলতে আমি এই অ্যারে এখানে আছে.
আমি একটি গ্রিড অ্যারে বলা আছে, এবং আমি এটি এর 2 টি সারি এবং কলাম 3 করছি বলছে,
এবং তাই এই visualizing এটি একটি পদ্ধতি.
যখন আমি বলতে আমি [1] এ উপাদান পেতে চান [2]
তার মানে কারণ এই প্রথম সারি এবং তারপর কলাম
আমি 1 যেহেতু আমি 1 বলেন সারি তিড়িং লাফ যাচ্ছি.
>> তারপর আমি কলাম 2 আসা এখানে উপর যাচ্ছে, এবং করছি আমি 6 মান পাওয়া যাচ্ছে না.
জানার জন্য?
বহু মাত্রিক অ্যারে মনে রাখবেন,, ঠিক আছে টেকনিক্যালি অ্যারে একটা সুবিন্যস্ত.
আমরা অ্যারে শ্রেনীবিন্যাস শ্রেনীবিন্যাস থাকতে পারে.
আমরা যাব যাব, কিন্তু আমার মনে হয় সত্যিই একটি উপায় হতে পারে
কিভাবে এই রোগে আউট হচ্ছে এবং কি করছেন তা ঠাহর করা হয়
এই মত একটি গ্রিড.
যখন আমরা অ্যারে ফাংশান পাস, তারা কেমন আচরণ করে যাচ্ছেন
একটু যখন আমরা ফাংশান নিয়মিত ভেরিয়েবল পাস চেয়ে ভিন্নভাবে বিট
ভালো কোন int অথবা একটি float ক্ষণস্থায়ী.
যখন আমরা কোন int বা গৃহস্থালির কাজ বা এইসব তথ্য অন্য কোনো ধরনের মধ্যে পাস
আমরা যদি শুধু ফাংশন পরিবর্তন কটাক্ষপাত গ্রহণ
যে ভেরিয়েবলের মান পরিবর্তন পর্যন্ত বিস্তার করা যাচ্ছে না
যাও কলিং ফাংশন.
অন্যদিকে একটি অ্যারের সাথে, যে ঘটবে.
যদি আমি একটি অ্যারের মধ্যে পাস কিছু ফাংশন এবং যে ফাংশন উপাদানের কিছু পরিবর্তন,
যখন আমি ফিরে আসা যে ফাংশন বলা যাও
আমার অ্যারের এখন হয় ভিন্ন হবে, এবং যে জন্য শব্দভান্ডার
একটি অ্যারে রেফারেন্স দ্বারা, পাশ হিসাবে পরে আমরা দেখতে পাবেন হয়.
এই পয়েন্টার কিভাবে কাজ করে, যেখানে এই ধরনের মৌলিক তথ্য সংক্রান্ত না,
অন্যদিকে, মান দ্বারা প্রেরণ করা হবে.
>> আমরা যে কিছু ভেরিয়েবলের একটি অনুলিপি এবং তারপর কপি কথা প্রসঙ্গে হিসাবে মনে করতে পারেন.
এটা কি আমরা যে পরিবর্তনশীল সঙ্গে করি না ব্যাপার.
কলিং ফাংশন সতর্ক হন যে এটি পরিবর্তিত হয় না হবে.
অ্যারেগুলির হয় অল্পমাত্র বিট যে বিষয়ে বিভিন্ন.
উদাহরণস্বরূপ, হিসাবে আমরা দেখেছি, প্রধান কেবল একটি ফাংশন
যে 2 আর্গুমেন্ট গ্রহণ করা যেতে পারে.
প্রধান ফাংশন প্রথম যুক্তি হল argc, বা আর্গুমেন্টের সংখ্যা,
এবং দ্বিতীয় যুক্তি argv বলা হয়,
এবং যারা আছে যারা আর্গুমেন্ট প্রকৃত মান.
চলুন শুরু করা যাক বলতে আমি একটি প্রোগ্রাম this.c বলা আছে,
এবং আমি এই করতে, এবং আমি কমান্ড লাইনে এই চালানো যাচ্ছে না.
এখন কিছু আর্গুমেন্ট আমার প্রোগ্রাম সম্পন্ন এই বলা হয়,
আমি এরকম কিছু একটা. বলে / এই cs 50 হতে পারে.
এটা কি আমরা ডেভিড করতে টার্মিনালে কল্পনা প্রতিদিন.
কিন্তু এখন প্রধান যে প্রোগ্রামের ভিতর ফাংশন
এই মান আছে, তাই argc হয় 4.
এটা একটু বিভ্রান্ত, কারণ আমরা শুধুমাত্র 50 cs ভীষণ ক্ষণস্থায়ী হতে পারে.
যে মাত্র 3.
কিন্তু মনে রাখবেন, যে argv প্রথম উপাদান বা প্রথম যুক্তি
হয় ফাংশন নিজেই নাম.
সুতরাং তার মানে আমরা 4 জিনিস আছে এখানে,
এবং প্রথম উপাদান যাও. / এই হবে.
এবং এই একটি পংক্তি হিসাবে প্রতিনিধিত্ব করা হবে.
তারপর অবশিষ্ট উপাদান হল কি আমরা প্রোগ্রামের নামের পরে টাইপ.
সে হিসাবে সরাইয়া একটি, হিসাবে আমরা সম্ভবত pset 2 দেখেছি,
মনে রাখবেন, যে পংক্তিটি 50 পূর্ণসংখ্যা 50 ≠ হয়.
তাই আমরা, ভালো কিছু 'int x = argv 3.' বলতে পারবে না
>> যে শুধুমাত্র এর যাও জানার জন্য, যাচ্ছে না কারণ এই একটি স্ট্রিং, এবং এই একটি পূর্ণসংখ্যা.
তাই আপনি যদি 2 মধ্যে রূপান্তর করতে চান, এবং মনে রাখবেন,, আমরা চলুন
এই ম্যাজিক ফাংশন বলা atoi আছে.
যে একটি পংক্তি প্রদর্শন করা হয় এবং পূর্ণসংখ্যা যে স্ট্রিং ভিতরে প্রতিনিধিত্ব ফেরৎ.
যাতে একটি সহজ ভুল ব্যঙ্গ করতে যাও,
শুধু চিন্তা যে স্বয়ংক্রিয়ভাবে এই সঠিক টাইপ হবে.
তবে জানেন যে সবসময় এই পংক্তি হতে হবে
এমনকি যদি শুধুমাত্র স্ট্রিং পূর্ণসংখ্যা মান অথবা একটি অক্ষর বা একটি float রয়েছে.
সুতরাং এখন কিছু সময় চলমান সম্পর্কে কথা বলুন.
যখন আমরা এই সব আলগোরিদিম যে সকল জিনিষ এই ছবি না,
তা সত্যিই দরকারী প্রশ্ন, জিজ্ঞাসা করুন "কতদিন এরা নিতে?"
আমরা কিছু বলা asymptotic স্বরলিপি যে চিত্রিত করা.
তাই এই এর মানে হল - ভাল, এর বলতে আমরা আমাদের অ্যালগরিদম দিতে দেওয়া
কিছু সত্যিই সত্যিই,, সত্যিই বড় ইনপুট.
আমরা প্রশ্ন জিজ্ঞাসা করতে চান, "কতক্ষণ নিতে যাচ্ছে?
কতগুলি পদক্ষেপ আমাদের এলগরিদম এটি চালানোর জন্য লাগবে
ইনপুট হিসাবে মাপ একটি ফাংশন? "
তাই আমাদের প্রথম চালানোর সময় ধরতে পারে ও বড় হয়
এবং এটি আমাদের সবচেয়ে খারাপ-ক্ষেত্রে চলমান সময়.
তাই আপনি যদি আমরা একটি অ্যারের বাছাই করতে চান, এবং আমরা একটি অ্যারের দিতে আমাদের আলগোরিদিম
যে অনুক্রমে সাজানো আছে যখন এটি ঊর্ধ্বক্রম হতে হবে,
যে লক হতে যাচ্ছে.
এটি আমাদের উপরের সময় আমাদের এলগরিদম নিতে হবে সর্বাধিক দৈর্ঘ্য মধ্যে আবদ্ধ.
অন্য দিকে, এই Ω শ্রেষ্ঠ-ক্ষেত্রে চলমান সময় বর্ণনা করা যাচ্ছে না.
তাই আপনি যদি আমরা একটি বাছাই আলগোরিদিম একটি ইতিমধ্যে সাজানো অ্যারের দিতে,
কতদিন সময় লাগবে তা বাছাই হবে?
এবং এই তারপর, একটি সময় সঞ্চালনকারী নিম্ন বাউন্ড বর্ণনা.
সুতরাং এখানে না কিছু কিছু শব্দ যা কিছু সাধারণ গুণ বর্ণনা চলমান.
এই আদেশ ঊর্ধ্বগামী হয়.
দ্রুততম চলমান সময় আমরা আছে ধ্রুবক বলা হয়.
>> যে কোন ব্যাপার কতগুলি উপাদান আমরা আমাদের অ্যালগরিদম দিতে অর্থ,
কোন ব্যাপার কিভাবে আমাদের বড় অ্যারে হয়, এটি বাছাই
বা কাজ যাই হোক না কেন আমরা অ্যারের করছেন সবসময় সময় একই পরিমাণ গ্রহণ করা হবে.
সুতরাং আমরা একটি মাত্র 1 টি, যা একটি ধ্রুবক সাথে উপস্থাপন করতে পারেন.
আমরা লগারিদমিক চালানোর সময় লাগছিল.
সুতরাং বাইনারি অনুসন্ধান ভালো কিছু লগারিদমিক,
যেখানে আমরা প্রতি অর্ধেক সময় সমস্যা কাটা
এবং তারপরে শুধু জিনিষ আছে, উচ্চ থেকে পেতে.
এবং যদি আপনার কোনো গৌণিক আলগোরিদিম করছি একটি হে লেখা,
আপনি সম্ভবত আপনার দিন এই পেশা হিসাবে বিবেচনা করা উচিত.
যখন আমরা চলমান বার তুলনা এটা মনে রাখা গুরুত্বপূর্ণ এই জিনিষ.
সুতরাং যদি আমি একটি অ্যালগরিদম যে আউটপুট (ঢ), এবং অন্য কেউ আছে
হে করেনি একটি অ্যালগরিদম (2n) এইসব আসলে asymptotically সমতুল্য.
তাই আপনি যদি আমরা একটি eleventy বিলিয়ন মত বড় সংখ্যা N কল্পনা:
তাই যখন আমরা eleventy বিলিয়ন ভালো কিছু + 3 eleventy বিলিয়ন তুলনা করছি,
হঠাৎ যে +3 সত্যিই একটি বড় পার্থক্য দেখা যায় না আর.
এটা কেন আমরা এইসব জিনিস সমতুল্য হতে নাড়াচাড়া শুরু চলুন.
এই জিনিস এখানে ধ্রুবক মতই, 2 x এই আছে, অথবা একটি 3 যোগ করুন,
এইসব ঠিক হয় ধ্রুবক, এবং এই পর্যন্ত ড্রপ যাচ্ছি.
সুতরাং যে কেন এই রান বার সমস্ত 3 হয় বলছে তারা হে (ঢ) একই হিসাবে.
একইভাবে, যদি আমরা অন্যান্য 2 রান বার আছে, এর কথা বলা হে (ঢ + ³ 2n ²), আমরা যোগ করতে পারেন দিন
+ N + 7, তারপর আমরা এবং রান টাইম অন্য যে শুধু O (n ³) আছে.
আবার, এই একই জিনিসের কারণ এই - এই একই নয়.
এই একই জিনিষ, দুঃখিত. সুতরাং এই একই কারণ
এই n ³ এই 2n ² আয়ত্তে আনা যাচ্ছে না.
>> কি হয় যদি আমরা O (n ³) এবং O এর মত বার ফেলেছেন একই জিনিস না (n ²)
কারণ এই ³ n হল এই n ² এর চেয়ে অনেক বড়.
তাই আপনি যদি আমরা হঠাৎ বহিঃপ্রকাশ আছে, এই ব্যাপার শুরু হয়,
কিন্তু যখন আমরা শুধুমাত্র কারণের সঙ্গে লেনদেন করছেন হিসাবে আমরা এখানে আপ,
তাহলে যাও, কারণ শুধু তারা ড্রপ আউট হয় যাওয়া কোন ব্যাপার হচ্ছে না.
যাক এর কিছু আলগোরিদিম আমরা এতদূর দেখা করেছি কটাক্ষপাত করা
তাদের রান টাইম সম্পর্কে এবং কথা বলার.
একটি তালিকার মধ্যে একটি নম্বর খুঁজছেন প্রথম উপায়, আমরা দেখেছি যে, ছিল রৈখিক অনুসন্ধান.
রৈখিক এবং অনুসন্ধান বাস্তবায়ন হয় সুপার সহজবোধ্য.
আমরা শুধু একটি তালিকা আছে, এবং আমরা প্রতি একক উপাদান এ তালিকায় চেয়ে চলুন
যতক্ষণ না আমরা নম্বর খুঁজতে আমরা খুঁজছেন.
সুতরাং তার মানে খারাপ ক্ষেত্রে, এই হে (ঢ).
এবং সবচেয়ে খারাপ এখানে কেস যদি হয় উপাদান হতে পারে
সর্বশেষ উপাদান তারপর, রৈখিক সন্ধান ব্যবহার করে আমরা প্রতি একক উপাদান তাকান আছে
শেষ পর্যন্ত এক যাও আমরা যাতে যে এটি তালিকা প্রকৃতপক্ষে ছিল না.
আমরা শুধু ছেড়ে দেওয়া halfway না পারে এবং বলে, "এটা সম্ভবত. নেই"
আমরা গোটা ব্যাপারটাই তাকান রৈখিক অনুসন্ধান সঙ্গে আছে.
অন্যদিকে সর্বোত্তম ক্ষেত্রে চলমান সময়,, একটি ধ্রুবক
কারণ আমরা উপাদান খুঁজছেন সেরা ক্ষেত্রে শুধুমাত্র তালিকায় প্রথম এক.
সুতরাং আমাদের ঠিক 1 ধাপ, সেটা ব্যাপার নয় বড় তালিকা নিতে যাচ্ছে
আমরা যদি প্রথম উপাদান জন্য প্রত্যেক সময় খুঁজছেন.
>> সুতরাং যখন আপনি অনুসন্ধান মনে রাখবেন,, এটা যে আমাদের অনুসারে সাজানো তালিকা করা হবে না প্রয়োজন হয়.
কারণ কেবলমাত্র আমরা প্রতি একক উপাদান উপেক্ষা করছি যাচ্ছে, এবং এটি সত্যিই কোন ব্যাপার নয
কি অর্ডার যারা উপাদান হল ইন
আরো একটি বুদ্ধিমান অনুসন্ধান অ্যালগোরিদম হয় বাইনারি অনুসন্ধান মত.
মনে রাখবেন, বাইনারি অনুসন্ধান বাস্তবায়ন হয় যখন আপনি যাচ্ছেন
মধ্যম তালিকার দিকে তাকিয়ে থাকা.
এবং কারণ আমরা মধ্যম এ খুঁজছেন, আমরা প্রয়োজন যে তালিকা অনুসারে বাছাই করা হয়
বা অন্যথায় আমরা যেখানে মধ্যম হয়, জানি না এবং আমরা উপেক্ষা করা আছে
পুরো তালিকা সেটা খুঁজে পেতে, যে সময়ে এবং তারপর আমরা শুধু সময় নষ্ট করছেন.
তাই আপনি যদি আমরা একটি অনুসারে সাজানো তালিকা আছে এবং আমরা মধ্যম খুঁজে, আমরা মধ্যম তুলনা চলুন
উপাদান আমরা খুঁজছেন.
যদি খুব বেশী, তাহলে আমরা ডান অর্ধেক ভুলে যেতে পারেন
কারণ আমরা জানি যে, যদি আমাদের উপাদান ইতিমধ্যে খুব বেশী
এবং এই উপাদান ডান সব এমনকি উচ্চ,
তারপর আমরা সেখানে আর চেহারা করার প্রয়োজন হবে না.
যেখানে অপরপক্ষে, যদি আমাদের উপাদান অত্যন্ত কম,
আমরা জানি যে উপাদান বাঁদিকে সবকিছু এছাড়াও অত্যন্ত কম,
তাই এটি সত্যিই সেখানে চেহারা অর্থে দেখা যায় না, হয়.
এই পথ, সঙ্গে প্রত্যেক তালিকা মিডপয়েন্ট এ পদক্ষেপে এবং প্রতিটি সময় আমরা চেহারা,
আমরা অর্ধেক আমাদের সমস্যা কেটে যাচ্ছে কারণ হঠাৎ আমরা জানি করছি
একটি সংখ্যা যা খুঁজছেন তা আমরা এক হতে পারে না আভা.
>> Pseudocode এই ভালো কিছু দেখাবে,
এবং কারণ আমরা অর্ধেক প্রতি একক সময় তালিকা করছি কাটা,
আমাদের সবচেয়ে খারাপ-ক্ষেত্রে রৈখিক থেকে রান টাইম জাম্প লগারিদমিক যাও.
তাই হঠাৎ আমরা আছে লগ ইন পদক্ষেপ যাতে একটি তালিকার মধ্যে একটি উপাদান খুঁজে পেতে.
সর্বোত্তম ক্ষেত্রে চলমান সময় যদিও,, এখনও ধ্রুবক
কারণ এখন, এর যাক সেটা যে উপাদান আমরা খুঁজছেন সেটি
সর্বদা মূল তালিকা সঠিক মধ্যম.
সুতরাং আমরা বড় হিসাবে আমরা চাই হিসাবে আমাদের তালিকা, প্রসারণ করা সম্ভব হয়, কিন্তু যদি আমরা উপাদান খুঁজছেন মধ্যম হয়,
তারপর এটা আমাদের 1 পদক্ষেপ নিতে যাচ্ছে.
তাই কেন আমরা O (n log-) এবং Ω (1) বা ধ্রুবক.
চলুন আসলে এই তালিকায় বাইনারি অনুসন্ধান চালানো.
সুতরাং আসুন আমরা যে উপাদান 164 খুঁজছেন বলে.
প্রথম জিনিস আমরা করতে যাচ্ছি এই তালিকার মিডপয়েন্ট খুঁজে.
এটা ঠিক যে মিডপয়েন্ট এইসব মধ্যে 2 নম্বর পড়া যাচ্ছে,
তাই আসুন শুধু ইচ্ছামত বলার, প্রতি সময় মিডপয়েন্ট 2 সংখ্যার মধ্যে পড়ে,
আসুন শুধু ধরপাকড়.
আমরা চাই বিষয়টি আমরা নিশ্চিত ভাবে ধাপে ধাপে এই করা প্রয়োজন.
তাই আমরা ধরপাকড় করা যাচ্ছে, এবং করছি আমরা যে 161 আমাদের তালিকা মধ্যম বলে যাচ্ছেন.
সুতরাং 161 <164, 161 এবং বাম দিকের প্রতি উপাদান
এছাড়াও <164, যাতে আমরা জানতে পারি যে এটি আমাদের এ সব সাহায্য করে যাচ্ছে না
যাও খুঁজছি এখানে শুরু উপাদান কারণ আমরা না হতে পারেন খুঁজছেন.
তাই আমরা যা করতে পারি মনে হয় আমরা ঠিক যে পুরো তালিকার বাম অর্ধেক ভুলে যেতে পারেন,
এবং এখন কেবল 161 অনওয়ার্ড ডান থেকে বিবেচনা.
>> তাই আবার, এই মিডপয়েন্ট; এর ঠিক ধরপাকড় করা যাক.
এখন 175 অত্যন্ত বড়.
যাতে আমরা জানতে পারি এটা আমাদের খুঁজছি এখানে অথবা এখানে সাহায্য করে যাচ্ছে না,
তাই আমরা যে দূরে নিক্ষেপ করা যায়, এবং অবশেষে আমরা 164 আঘাত করব.
বাইনারি অনুসন্ধান উপর কোন প্রশ্ন?
চলুন শুরু করা যাক একটি ইতিমধ্যে-অনুসারে সাজানো তালিকা মাধ্যমে অনুসন্ধান থেকে যান
প্রকৃতপক্ষে কোনো ক্রম সংখ্যার একটি তালিকা গ্রহণ
এবং ক্রম আরোহী যে তালিকা তৈরীর.
প্রথম আলগোরিদিম আমরা দিকে তাকিয়ে বুদ্বুদ সাজানোর বলা ছিল.
এবং এই আলগোরিদিম আমরা দেখেছি এর সহজ হবে.
বুদ্বুদ সাজানোর বলছেন যে যখন কোনো তালিকা ভিতরে 2 উপাদান জায়গা হয়ে গেছে,
অর্থাত একটি নিম্ন সংখ্যা বাম সেখানে একটি উচ্চতর সংখ্যা,
তারপর আমরা তাদের সাথে বিনিময় করা যাচ্ছে, কারণ তার মানে তাদের তালিকা হবে করছি
"আরো সাজানো" তুলনায় এটি আগে ছিল.
এবং আমরা আবার এই প্রক্রিয়া অবিরত করছি যাচ্ছে এবং আবার এবং আবার
অবশেষে পর্যন্ত তাদের সঠিক অবস্থান যাও বুদবুদ উপাদানের ধরনের এবং আমরা একটি অনুসারে সাজানো তালিকা আছে.
>> এই রান টাইম যাও হে হবে (ঢ ²). কেন?
খারাপ ক্ষেত্রে কারণ ভাল,, আমরা প্রতিটি উপাদান নিয়ে, এবং করছি
আমরা এবং শেষ প্রতি তালিকায় অন্যান্য উপাদান যাও তুলনা চলুন.
কিন্তু সেরা ক্ষেত্রে, আমরা ইতিমধ্যে একটি অনুসারে সাজানো তালিকা আছে, বুদ্বুদ সাজানোর এর
করছি একবার দিয়ে যেতে বলে, "না. আমি কোনো অদলবদল হয়নি না, তাই আমি কাজ করছি."
সুতরাং আমরা একটি শ্রেষ্ঠ ক্ষেত্রে Ω (ঢ) চলমান সময় আছে.
যাক এর তালিকায় বুদ্বুদ সাজানোর চালানো.
অথবা প্রথম, কিছু না কিছু কিছু pseudocode সত্যিই দ্রুত চেহারা.
আমরা আমরা লুপ প্রতি পুনরাবৃত্তির সময় নজর রাখা যায়, চাই বলতে চাই,
হবে কি না তা আমরা কোনো উপাদান পরিবর্তন ট্র্যাক রাখা.
যে জন্য কারণ, তাই যখন আমরা কোনো উপাদান অদলবদল না থামাতে চলুন.
সুতরাং আমাদের লুপ শুরু আমরা, আনা কিছু করেননি, তাই আমরা যে মিথ্যা বলবো.
এখন, আমরা তালিকা মাধ্যমে এবং যান উপাদান তোমার উপাদান i + 1 তুলনা চলুন
এবং যদি এটা ক্ষেত্রে যে একটি ছোট সংখ্যা বাম সেখানে একটি বড় সংখ্যা,
তারপর আমরা তাদের অদলবদল করছি যাচ্ছে.
>> এবং তারপর আমরা যে আমরা একটি উপাদান আনা স্মরণ চলুন.
তার মানে যে আমরা তালিকা মাধ্যমে অন্তত 1 আরো সময় যেতে প্রয়োজন
কারণ অবস্থা যা আমরা থামানো হয় যখন ইতিমধ্যে পুরো তালিকা অনুসারে বাছাই করা হয়,
অর্থাত আমরা কোনো অদলবদল করেননি.
সুতরাং যে কেন নিচে আমাদের অবস্থা এখানে 'যখন কিছু উপাদান হয়েছে আনা যায়.'
তাই এখন আমি কি শুধুমাত্র এই একটি তালিকা চলমান তাকান.
আমি তালিকা 5,0,1,6,4 আছে.
বুদ্বুদ সাজানোর যাও বাঁদিকে উপস্থিত সমস্ত উপায় শুরু হচ্ছে, এবং এটি তুলনা করে যাচ্ছে
তোমার উপাদান, তাই 0 যাও আমি + 1 টি, যা উপাদান 1.
এটা ভাল 5> 0 বলে যাচ্ছে, কিন্তু এর ডান 5 এখন বাম হয়,
তাই আমি 5 এবং 0 swap প্রয়োজন.
যখন আমি তাদের অদলবদল হঠাত্, আমি এই বিভিন্ন লিস্ট দেখতে পাবেন.
এখন 5> 1, তাই আমরা তাদের অদলবদল চলুন.
5 না, তাই> 6 না আমরা এখানে কিছু করার প্রয়োজন নেই.
কিন্তু 6> 4, তাই swap প্রয়োজন.
আবার, আমরা পুরো তালিকা ঘটনাক্রমে আবিষ্কার মাধ্যমে চালানোর প্রয়োজন
যে এই আদেশ শেষ হয়ে গেছে; আমরা তাদের swap,
এবং আমরা 1 তালিকা মাধ্যমে আরো সময় চালানোর জন্য এই সময়ে প্রয়োজন
নিশ্চিত করুন যে তার আদেশ সবকিছুই এর, এবং এই বিন্দু বুদ্বুদ সাজানোর সময়ে সম্পন্ন করা.
একটি কিছু উপাদান গ্রহণ এবং তাদের বাছাই করার জন্য বিভিন্ন এলগরিদম হয় নির্বাচন সাজান.
নির্বাচন সাজানোর পিছনে ধারণা হয় যে আমরা একটি তালিকা অনুসারে বাছাই করা অংশ বিল্ড আপ চলুন
একটি সময়ে 1 উপাদান.
>> এবং আমাদের যে কি চলুন নির্মাণের তালিকা বাম সেগমেন্ট আপ হয়.
এবং মূলত, প্রতি - প্রতিটি ধাপ উপর, আমরা যাও ক্ষুদ্রতম উপাদান আমরা চলে নিতে যাচ্ছেন
যে এখনো সাজানো হয়েছে, এবং আমরা যে সাজানো সেগমেন্ট মধ্যে সরিয়ে নেয়া চলুন.
তার মানে আমরা অবিরত সর্বনিম্ন পাঁচমিশালী উপাদান খুঁজে পেতে প্রয়োজন
এবং তারপর যে উপাদান এবং সর্বনিম্ন নিতে যাই হোক না কেন সঙ্গে এটি অদলবদল
বাকি-অধিকাংশ উপাদান যে সাজানো নয়.
এই চালানোর সময় হে হবে (ঢ ²) কারণ লক
আমরা প্রত্যেক অন্যান্য উপাদান প্রতি একক উপাদান তুলনা প্রয়োজন.
কারণ আমরা যে যদি আমরা তালিকা বাম অর্ধেক শুরু, আমরা প্রয়োজন বলছে
সম্পূর্ণ ডান অংশ মাধ্যমে ক্ষুদ্রতম উপাদান খুঁজে পাওয়া যেতে.
এবং তারপর আবার,, আমরা সম্পূর্ণ ডান অংশ যেতে উপর এবং প্রয়োজন
যাচ্ছে এবং বহুবার উপর যে আবার উপর রাখা.
যে এন ² হতে যাচ্ছে. আমরা অন্য লুপ এর জন্য লুপ ভিতরে জন্য প্রয়োজন একটি চলুন
যা n ² এর প্রস্তাব দেওয়া হয়.
সেরা ক্ষেত্রে চিন্তার ইন, আমি কি বলতে আমরা এটি একটি ইতিমধ্যে অনুসারে সাজানো তালিকা প্রদান করা;
আমরা আসলে n ² এর চেয়ে কোন ভাল না.
কারণ নির্বাচন সাজানোর বুদ্ধিমান যে কোন উপায় আছে
সর্বনিম্ন উপাদান শুধুমাত্র এক আমি ঘটতে যাও এ খুঁজছেন করা হবে.
এটা এখনও নিশ্চিত যে এই আসলে সর্বনিম্ন করা প্রয়োজন.
>> এবং একমাত্র উপায় নিশ্চিত যে এটা সর্বনিম্ন করা, এই এলগরিদম ব্যবহার করে,
প্রতি একক উপাদান এ আবার চেহারা হয়.
সত্যিই তাই, যদি আপনি এটি দিন - যদি আপনি কি ইতিমধ্যে অনুসারে সাজানো তালিকা নির্বাচন সাজানোর,
এটি একটি তালিকা প্রদান করে যা এখনও সাজানো হয় না এটা ছাড়া কোনো ভাল যাচ্ছে না.
যাইহোক, যদি এই কেস হবে এরকম কিছু আউটপুট (কিছু)
এবং কিছু ওমেগা, শুধু আমরা বলতে আরো succinctly যে এটা কিছু θ পারেন.
তাই আপনি যদি দেখতে যে আপ কোথাও আসা, যে এর মানে কি ঠিক.
>> যদি কিছু n র থেটা ², এটা উভয় বড় হে (ঢ ²) এবং Ω (ঢ ²).
সেরা ক্ষেত্রে লক সুতরাং, এটি একটি পার্থক্য করা হয় না,
আলগোরিদিম প্রত্যেক সময় কি একই জিনিস হবে.
তাই এই কি নির্বাচন সাজানোর জন্য pseudocode ভালো হত.
আমরা মূলত করছি যে আমি তালিকা পুনরুক্তি উপর চান বলে যাচ্ছে
অধিকার, এবং লুপ প্রতিটি পুনরাবৃত্তির সময়ে বাম থেকে, আমি গৃহ করছি
এই তালিকার মধ্যে সাজানো অংশ সর্বনিম্ন উপাদান.
এবং একবার আমি সেখানে কিছু সরানো, আমি যে উপাদান আবার তার প্রয়োজন হবে না.
কারণ যত তাড়াতাড়ি আমি একটি উপাদান অদলবদল তালিকা বাম অংশ, এটা সাজানো এর
কারণ আমরা নূন্যতম ব্যবহার করে অর্ডার আরোহী সবকিছুই করছি.
সুতরাং আমরা বলেন, ঠিক আছে, আমরা তোমার অবস্থান করেন, এবং আমরা সবাই এ উপাদানের প্রয়োজন
যাও তোমার অধিকার যাতে সর্বনিম্ন খুঁজে.
যাতে আমরা মানে আমি + 1 টি তালিকা থেকে শেষ দেখতে চাই.
এবং এখন, যদি উপাদান যে আমরা বর্তমানে এ করছি আমাদের সর্বনিম্ন কম তাই এখান থেকে দূরে,
যা, মনে রাখবেন, আমরা শুধু সর্বনিম্ন বন্ধ হতে শুরু করছি
যাই হোক না কেন উপাদান আমরা বর্তমানে করছি; আমি যে সর্বনিম্ন অনুমান করব.
যদি আমি একটি উপাদান যে এর থেকে কম পান তাহলে, আমি বলতে যাচ্ছি, ঠিক আছে করছি,
ভাল, আমি একটি নতুন সর্বনিম্ন পাওয়া গিয়েছে.
আমি যেখানে যে সর্বনিম্ন ছিল মনে রাখা যাচ্ছে না.
>> তাই এখন একবার, আমি যে অধিকার পাঁচমিশালী সেগমেন্ট মাধ্যমে সর্বস্বান্ত করেছি,
আমি আমি উপাদান তোমার অবস্থান যে সঙ্গে সর্বনিম্ন উপাদান বিনিময় করা যাচ্ছে না বলতে পারেন.
যে আমার তালিকা বিল্ড আপ করবে, আমার বাঁ দিক থেকে ডানদিকে তালিকা অনুসারে বাছাই করা অংশ,
এবং আমরা একটি উপাদান এ আবার তাকান একবার এটা যে অংশে এর প্রয়োজন কখনও না.
একবার আমরা এটা আনা করেছি.
তাই আসুন এই তালিকায় নির্বাচন সাজানোর চালানো.
এখানে নীল উপাদান যাও তোমার হবে, এবং হয় লাল উপাদান যাও সর্বনিম্ন উপাদান হবে.
তাই তোমার তালিকা বাঁদিকে উপস্থিত সমস্ত উপায় শুরু হয়, তাই এ 5.
এখন আমরা সর্বনিম্ন পাঁচমিশালী উপাদান খুঁজে পাওয়া প্রয়োজন.
সুতরাং আমরা বলতে 0 <5 তাই, 0 আমার নতুন সর্বনিম্ন.
>> কিন্তু আমি কি সেখানে থামাতে, না, কারণ যদিও আমরা যে 0 ক্ষুদ্রতম চিনতে পারেন,
আমরা প্রত্যেক তালিকা নিশ্চিত করা অন্যান্য উপাদান মাধ্যমে চালানোর প্রয়োজন.
সুতরাং 1 হল বড়, 6 হল বড়, 4 বড় হয়.
এটার মানে হল যে এই উপাদানের সমস্ত আমি পরে, আমি 0 ক্ষুদ্রতম নির্ধারণ করেছি.
আমি 5 এবং 0 অদলবদল যাচ্ছি.
একবার আমি যে swap, আমি নতুন একটি তালিকা পেতে যাচ্ছে, এবং করছি আমি জানি আমি যে 0 এ আবার তার প্রয়োজন হবে না
কারণ একবার আমি এটা আনা করেছি, আমি এটা সাজানো করেছি এবং আমরা কাজ সম্পন্ন হয়.
এখন শুধু তাই যে নীল উপাদান আবার হল 5,
এবং আমরা 1 তাকান প্রয়োজন 6 এবং 4, যে 1 নির্ধারণ
একটি ক্ষুদ্রতম সর্বনিম্ন উপাদান, যাতে আমরা 1 এবং 5 অদলবদল করব.
আবার, আমরা তাকান প্রয়োজন - 6 এবং 4 5 তুলনা,
এবং আমরা 4 এবং 5 বিনিময় করা যাচ্ছে, এবং করছি পরিশেষে, তুলনা
যারা 2 নম্বর এবং তাদের যতক্ষণ না আমরা আমাদের অনুসারে সাজানো তালিকা পেতে অদলবদল.
নির্বাচন সাজানোর উপর কোন প্রশ্ন?
ঠিক আছে. সর্বশেষ আলোচ্য বিষয় এখানে এর সরানো যাক, এবং যে recursion.
>> Recursion মনে রাখবেন, এই সত্যিই মেটা জিনিস যেখানে একটি ফাংশন
বারবার কল নিজেই.
সুতরাং এ কিছু বিন্দু, যখন বারবার আমাদের fuction নিজেই হয় কলিং,
প্রয়োজন কিছু বিন্দু যা আমরা থামাতে নিজেদেরকে আহ্বান করা আছে.
কারণ যদি আমরা কি সেটা না করেন তাহলে, আমরা চিরকালের জন্য এই কাজ করছেন অগ্রসর হচ্ছে,
এবং আমাদের প্রোগ্রাম শেষ হতে যাচ্ছে না.
আমরা এটাকে শর্ত বেস কেস.
এবং বেস ক্ষেত্রে বরং একটি ফাংশন আবার কলিং চেয়ে বলছেন,,
আমি শুধু কিছু মূল্য ফেরত যাচ্ছে.
তাই একবার আমরা একটি মান ফিরে করেছি, আমরা নিজেদেরকে কলিং ছেড়ে দিয়েছেন,
এবং এ কল আমরা এতদূর করেছি বাকি ফিরে আসতে পারেন.
বেস ক্ষেত্রে বিপরীত হয় recursive কেস.
এবং এই হল যখন আমরা ফাংশন যে আমরা এখনো সদস্য না হয়ে বর্তমানে আপনি অন্য কল করতে চাই
এবং আমরা সম্ভবত, যদিও সব সময় নয়, বিভিন্ন আর্গুমেন্ট ব্যবহার করতে চান.
>> তাই আপনি যদি আমরা একটি ফাংশন f বলা আছে, এবং মাত্র 1 চ যুক্তি নিতে বলা হয়,
এবং আমরা চ (1), চ (1), চ (1) কলিং রাখা, এবং এটা ঠিক যে
যুক্তি 1 recursive কেস মধ্যে পড়ে, আমরা এখনও বন্ধ করার জন্য সেটি যাচ্ছে না.
এমনকি যদি আমরা একটি বেস কেস আছে, আমরা নিশ্চিত যে, অবশেষে আমরা যে বেস ক্ষেত্রে আঘাত চলুন করা প্রয়োজন.
আমরা এই ক্ষেত্রে recursive থাকা না থাকা ঠিক না.
সাধারনত, যখন আমরা নিজেদেরকে কল, সম্ভবত আমরা প্রতিটি সময় আছে একটি বিভিন্ন যুক্তি করছি যাচ্ছে.
এখানে একটি সত্যিই সহজ recursive ফাংশন.
তাই এই সংখ্যা গণনা করা হবে গৌণিক.
এখানে আমরা আমাদের শীর্ষে বেস কেস আছে.
ইন কেস যে এন ≤ 1, আমরা গৌণিক আবার ফোন যাচ্ছেন না.
আমরা থামাতে চলুন; আমরা ঠিক করছি কিছু মূল্য ফেরত যাচ্ছে.
এই যদি সত্য হয়, তাহলে আমরা আমাদের ক্ষেত্রে recursive আঘাত চলুন.
এখানে উল্লেখ্য যে আমরা আহ্বান করছি গৌণিক (ঢ) না, কারণ যে খুব সহায়ক হবে না.
আমরা অন্য কিছু এর গৌণিক কল চলুন.
>> তাই আপনি, ঘটনাক্রমে যদি আমরা একটি গৌণিক (5) বা কিছু পাস দেখতে পারেন,
আমরা গৌণিক (4) এবং তাই কল যাচ্ছে, এবং সেটি অবশেষে আমরা এই ক্ষেত্রে বেস আঘাত চলুন.
সুতরাং এই ভাল দেখায়. এর কি আসলে যখন আমরা এই চালানো দেখতে দিন.
এই স্ট্যাকের, এবং এর যাক যে প্রধান একটি যুক্তি (4) এই ফাংশন কল করতে যাচ্ছে.
তাই একবার গৌণিক সূচিত এবং = 4, গৌণিক নিজেই কল হবে.
এখন, হঠাৎ করেই আমরা গৌণিক (3) আছে.
সুতরাং এই ফাংশান ক্রমবর্ধমান রাখা পর্যন্ত অবশেষে আমরা আমাদের বেস ক্ষেত্রে আঘাত করতে যাচ্ছি.
এই মুহুর্তে, এই ফেরত মান রিটার্ন (nx এই ফেরত মান),
এই ফেরত মান nx এই ফেরত মান.
অবশেষে আমরা কিছু নম্বর আঘাত প্রয়োজন.
এখানে উপরের, আমরা ফেরত 1 বলে.
এটার মানে হল যে আমরা যে একবার নম্বর ফিরে, আমরা এই স্ট্যাকের বন্ধ পপ পারেন.
তাই এই গৌণিক (1) সম্পন্ন হয়.
যখন আয় 1, এই গৌণিক (1) আয়, 1 এই রিটার্ন.
এই ফেরত মান মনে রাখবেন, এই ছিল nx ফেরত মান.
তাই হঠাৎ, এই লোক জানে না যে আমি 2 ফেরত চান.
>> সুতরাং, মনে রাখবেন এই মান ঠিক nx ফিরতি মূল্য এখানে আপ ফিরে.
তাই এখন আমরা x 2 3 বলে, এবং পরিশেষে এখানে, আমরা বলতে পারেন
এই মাত্র হয় 4 x 3 x 2 হবে.
এবং এই আয় একবার, আমরা একটি একক মুখ্য পূর্ণসংখ্যা ভিতর থেকে নামা.
Recursion উপর কোন প্রশ্ন?
ঠিক আছে. তাই এর শেষে আছে প্রশ্নের জন্য আরো সময়,
কিন্তু এখন জোসেফ আবরণ অবশিষ্ট বিষয়গুলি সম্পর্কে আলোচনা করা হবে.
>> [জোসেফ Ong] ঠিক আছে. তাই এখন যে আমরা recursions স্বপ্ন করেছি,
যাক এর কি একত্রীকরণ সাজানোর বিষয়ে অল্প কথা বলুন.
সাজানোর মার্জ মূলত সংখ্যার একটি তালিকা বাছাই আরেকটি উপায়.
এবং কীভাবে এটি কাজ করে সাজানোর সঙ্গে একত্রীকরণ হয়, আপনি একটি তালিকা আছে, এবং আমরা কি করব তা হল
আমরা বলতে, এর মধ্যে 2 আংশিক এই বিভক্ত করা যাক.
আমরা প্রথম সাজানোর একত্রীকরণ আবার বাম অর্ধেক চালানো হবে,
তারপর আমরা ডান অর্ধেক উপর সাজানোর একত্রীকরণ রান করব,
এবং যে দেয় আমাদের এখন 2 অর্ধ যে অনুসারে বাছাই করা হয়, এবং এখন আমরা একসঙ্গে যারা অর্ধ একত্রিত চলুন.
এটা একটা বিট হার্ড একটি উদাহরণ ছাড়া দেখতে, তাই আমরা ভান করা এবং কি দেখতে যাবেন.
তাহলে আপনি শুরু এই তালিকা সঙ্গে, আমরা 2 আংশিক মধ্যে এটি বিভক্ত.
আমরা বাম অর্ধেক প্রথম সাজানোর মার্জ করুন.
যাতে এর বাম অর্ধেক, এবং এখন আমরা এই তালিকার মাধ্যমে তা পুনরায় চালানোর
যা একত্রীকরণ সাজানোর মধ্যে, তারপর পাশ এবং পরার আমরা আবার তাকান,,
আমরা এর একত্রীকরণ সাজানোর এই তালিকা বামদিকে এ এবং রান.
এখন, আমরা 2 সংখ্যার একটি তালিকা পেতে ডাউন,
এবং এখন বাম অর্ধেক শুধুমাত্র 1 উপাদান দীর্ঘ, এবং আমরা নারা
একটি তালিকা যে অর্ধেক মধ্যে মাত্র 1 উপাদান, বিভক্ত করুন যাতে আমরা শুধু বলতে, একবার আমরা 50 আছে,
যা মাত্র 1 উপাদান, এটি আগে থেকেই সাজানো হচ্ছে.
>> একবার আমরা যে সঙ্গে সম্পন্ন হলে, আমরা যে আমরা করতে পারেন দেখতে পাবেন
এই তালিকার অধিকার অর্ধেক যান,
এবং এছাড়াও 3 সাজানো হয়, এবং তাই এখন যে এই তালিকা উভয় আংশিক সাজানো হয়
আমরা এই সংখ্যার যোগ দিতে ফিরে একসাথে করতে পারেন.
তাই আমরা 50 এবং 3 তাকান; 3 50 র চেয়ে ছোট, তাই এটি প্রথম যায় এবং তারপর 50 আসে অংশে
এখন, যে এর কাজ; আমরা ফিরে যেতে যে তালিকা এবং সাজানোর এটা ঠিক অর্ধেক পর্যন্ত.
42 হল এর নিজস্ব নম্বর, তাই এটি ইতোমধ্যেই সাজানো.
তাই এখন আমরা এইসব 2 এবং 3 হয় 42 তুলনা চেয়ে ছোট, যাতে প্রথম রাখা পরার,
এখন 42 এর মধ্যে রাখুন, এবং 50 ইন করা পরার পরার
এখন, এর অনুসারে সাজানো যে, আমরা সব উপায় ফিরে শীর্ষে, 1337 এবং 15.
ভাল, আমরা এখন এই তালিকার বাম অর্ধেক তাকান; 1337 নিজে যাতে তা 15 দিয়ে সাজানো এবং এর একই.
তাই এখন আমরা যে মূল তালিকা, 15 <1337 2 নম্বর বাছাই এই কার্টেল,
তাই এটি প্রথম যায় তারপর, 1337 যায় ইন
এবং এখন আমরা উপরে মূল তালিকার উভয় আংশিক সাজানো.
এবং সমস্ত আমরা কি এই একত্রিত হয়.
আমরা এই প্রথম তালিকার 2 নম্বর, 3 <15 তাকান, তাই এটি সাজানোর অ্যারের মধ্যে প্রথম যায়.
15 <42, তাই এটি এখনো সদস্য না হয়ে যায় এখন, 42 <1337, যে যায় ইন
50 <1337, তাই এটি এখনো সদস্য না হয়ে যায় যে আমরা গ্রহণ করে এই তালিকার 2 নম্বর বন্ধ বিজ্ঞপ্তি.
তাই আমরা পর্যায়ক্রমে করছেন 2 তালিকার মধ্যে না.
আমরা শুরুতে ঠিক করছি, এবং আমরা উপাদান গ্রহণ করছেন
যে ছোট এবং তারপর আমাদের অ্যারের মধ্যে এটি নির্বাণ.
এখন আমরা সব অর্ধ মার্জ করেছি এবং আমরা কাজ সম্পন্ন হয়.
>> সম্পর্কে কোন প্রশ্ন সাজানোর একত্রীকরণ? হ্যাঁ?
[ছাত্র] যদি এটি বিভিন্ন গ্রুপ এর মধ্যে বিভাজন, ঠিক কেন তা তারা না বিভক্ত একবার
এবং আপনি একটি গ্রুপ এবং 3 2 আছে? [প্রশ্ন অপাচ্য বাকি]
কারণ - তাই প্রশ্ন হল, কেন আমরা যে প্রথম পদক্ষেপ না তাদের পরে আমরা তাদের থাকতে পারে একত্রীকরণ?
কারণ আমরা এটা করতে পারেন উভয় দিকের বাম-অধিকাংশ উপাদান শুরু করুন,
এবং তারপর ছোট এবং নিতে এটি স্থাপন করা হয় যে, আমরা যে এইসব জানা
ব্যক্তিগত অনুসারে সাজানো তালিকা আদেশ হয়.
সুতরাং যদি আমি উভয় আংশিক বাম-অধিকাংশ উপাদান এ খুঁজছি,
আমি জানি তারা ঐ তালিকার ক্ষুদ্রতম উপাদান হতে যাচ্ছেন.
তাই আমি ক্ষুদ্রতম এই বৃহৎ তালিকা উপাদান দাগ সেগুলি লাগাতে পারেন.
অন্য দিকে, যদি ঐ 2 তালিকা সময়ে আমি ওইখানে দ্বিতীয় স্তরের চেহারা,
50, 3, 42, 1337 এবং 15, যারা বাছা হয় না.
সুতরাং যদি আমি 50 এবং 1337 তাকান, আমি আমার তালিকায় প্রথম 50 করা যাচ্ছে না.
কিন্তু যে অর্থে দেখা যায় না, কারণ 3 হয় তাদের সব আউট ক্ষুদ্রতম উপাদান.
তাই একমাত্র কারণ আমরা এই মিশ্রন পদক্ষেপ কি করা যেতে পারে, কারণ ইতিমধ্যে আমাদের তালিকা অনুসারে বাছাই করা হয়.
যা আমরা কেন নীচে পেতে সব উপায় ডাউন আছে
কারণ যখন আমরা কেবলমাত্র একটি নম্বর আছে, আপনি কি জানেন যে একটি একক সংখ্যা
এবং এর মধ্যে নিজেই ইতিমধ্যে একটি অনুসারে সাজানো তালিকা.
>> কোন প্রশ্ন? না?
জটিলতা? হ্যাঁ, আপনি প্রতিটি পদক্ষেপ সময়ে শেষ সংখ্যা আছে দেখতে পারেন,
এবং আমরা অর্ধেক লগ n সময়ে একটি তালিকা বিভক্ত করা যেতে পারে,
যা যেখানে আমরা এই x n log n জটিলতা পেতে.
এবং আপনি একত্রীকরণ সাজানোর জন্য সেরা ক্ষেত্রে n log n, দেখতে এবং তা ঠিক এরকম করব
যে সবচেয়ে খারাপ কেস, বা Ω ওইদিকে, এ এন এন লগ ইন করুন.
কিছু মনে রাখা যাও.
যাওয়ার, যাক এর কিছু সুপার মৌলিক ফাইলটি আমি / O. উপর যান
আপনি যদি একত্র দিকে তাকিয়ে, আমরা আপনার সিস্টেমের কিছু সাজানোর ছিল বিজ্ঞপ্তি পাবেন
যেখানে আপনি একটি লগ ফাইল যদি আপনি কোড মাধ্যমে পড়তে ও লিখতে পারে.
যাক কিভাবে আপনি তা করতে পারে দেখুন.
ভাল, আমরা fprintf আছে, যা আপনি শুধু printf হিসাবে মনে করতে পারেন,
কিন্তু শুধুমাত্র একটি ফাইল প্রিন্ট করার পরিবর্তে, এবং অত: পর শুরুতে চ.
কোড এই সাজানোর আপ এখানে, এটি কী জন্য প্রয়োজন হয়, হিসাবে আপনি একত্র হতে পারে আছে দেখা যায়,
আপনার 2-মাত্রিক অ্যারের মুদ্রণ মাধ্যমে এটি কি সারি সারি সংখ্যা দ্বারা আউট যায়.
এই ক্ষেত্রে printf, আপনার টার্মিনালে ছাপে আউট বা কি আমরা কল অ w স্ট্যান্ডার্ড আউপুট.
>> এবং এখন এই ক্ষেত্রে, আমরা সব করতে হবে তা হচ্ছে fprintf সঙ্গে printf প্রতিস্থাপন,
এটি কি আপনি যে ফাইলটি প্রিন্ট করতে চান তা বলুন, এবং এই ক্ষেত্রে শুধুমাত্র সেটা ছাপে যে ফাইলটি আউট
পরিবর্তে মুদ্রণ এটি আপনার টার্মিনালে আউট.
সেটা, যে প্রশ্ন begs: আমরা কোথা থেকে ফাইল এই সাজানোর, অধিকার পেতে পারি?
আমরা এই fprintf fuction লগ ইন পাস কিন্তু আমরা ধারণা নেই যেখানে এটি থেকে এসেছেন ছিল.
আচ্ছা, প্রথম দিকে কোড, আমরা কি ছিল ছিল এই কোড এখানে বেশী খণ্ড,
যা মূলত: বলছেন যে ফাইল খুলুন কল log.txt.
আমরা কি করব তা পরে যে আমরা নিশ্চিত যে আসলে ফাইল খোলা হয় সফলভাবে করতে হবে.
আপনি আপনার কম্পিউটারে পর্যাপ্ত স্থান নেই, যেমন; সুতরাং একাধিক কারণে কর্ম বিফল হতে পারে.
সুতরাং এটা সর্বদাই গুরুত্বপূর্ণ আগে আপনি ফাইলটি সঙ্গে কোন অপারেশন না
আমরা যে কিনা চেক সফলভাবে যে ফাইল খোলা ছিল.
তাই যে একটি, যে এর fopen একটি যুক্তি, ভাল, আমরা অনেক উপায়ে একটি ফাইল খুলতে পারে.
কি হয় আমরা কি করতে পারেন, আমরা w এটি পাস, যা ফাইল অগ্রাহ্য করা মানে যদি এটি ইতিমধ্যে প্রস্থান করতে পারেন,
আমরা একটি একটি প্রেরণ করতে পারেন যা তারা ফাইলের শেষে যাও লিখবেন পরিবর্তে এটি অগ্রাহ্য করা হবে,
অথবা আমরা নির্দিষ্ট কিছু, যার অর্থ হতে পারে, এর ফাইল হিসাবে শুধুমাত্র পাঠযোগ্য খুলুন যাক.
তাই আপনি যদি প্রোগ্রাম ফাইলে কোনো পরিবর্তন করতে চেষ্টা করে,
তাদের এ তীব্র আর্তনাদ এবং তাদের তা করতে না দেওয়া.
অবশেষে একবার, আমরা ফাইলটি সঙ্গে, শেষ হয়ে গেছে এটা অপারেশন করছেন,
আমরা নিশ্চিত যে ফাইল বন্ধ করা প্রয়োজন.
আপনার প্রোগ্রাম শেষে তাই, আপনি আবার তাদের পাস যাচ্ছি
এই ফাইলটি যে আপনার খোলা, এবং এটা বন্ধ.
তাই এটি কোনো গুরুত্বপূর্ণ যে আপনি নিশ্চিত আপনি কি করতে হবে.
সুতরাং আপনি একটি ফাইল খুলতে পারে মনে রাখবেন, তাহলে আপনি ফাইলে লিখতে পারেন,
ফাইলের মধ্যে অপারেশন, না কিন্তু তাহলে শেষে ফাইলটি বন্ধ আছে.
>> মৌলিক ফাইল সম্পর্কে কোন প্রশ্ন, I / O? হ্যাঁ?
[ছাত্র প্রশ্ন, অপাচ্য]
এখানে ডান. যেখানে প্রশ্ন করা হয়, এই log.txt ফাইলটি প্রদর্শিত হবে না?
হ্যাঁ, যদি আপনি এটি log.txt দেবে, এটা এক্সিকিউটেবল হিসাবে একই ডিরেক্টরির মধ্যে এটি নির্মাণ করা হয়.
তাই আপনি যদি you're - >> [ছাত্র প্রশ্ন, অপাচ্য]
হ্যাঁ. একই ফোল্ডারে, অথবা একই ডিরেক্টরির, হিসাবে আপনি কল করতে দেয়.
এখন মেমরি, স্ট্যাক, এবং গাদা.
সুতরাং কিভাবে মেমরি কম্পিউটার পরিপূর্ণ?
হ্যাঁ, আপনি এখানে ব্লক এই ধরণের মেমরি হিসাবে কল্পনা করতে পারেন.
এবং আমরা যা মেমরির মধ্যে আছে কি গাদা ওইদিকে আটকে, এবং স্ট্যাকের যে আছে এর নিচে নামে.
এবং গাদা বৃদ্ধি নিম্নগামী এবং স্ট্যাকের উর্ধ্বগামী বৃদ্ধি.
সুতরাং হিসাবে উল্লেখ করেছে টমি - উহু, ভাল, এবং আমরা এইসব অন্যান্য 4 অংশ যা আমি একটা দ্বিতীয় মধ্যে পাবেন আছে -
টমি হিসাবে তার আগে বলেন, আপনি কি জানেন কিভাবে তার ফাংশন কল নিজেদেরকে এবং অপরকে কল?
তারা নির্মাণ স্ট্যাকের ফ্রেমের এই সাজানোর আপ.
ওয়েল, যদি প্রধান কল foo বিন্যাস, foo বিন্যাস স্ট্যাক করা হয়.
Foo কল বার, বার এর স্ট্যাক করা পেতে, এবং যে স্ট্যাকের উপর পরে করা হয়.
এবং হিসাবে তারা ফিরে, তারা প্রতিটি স্ট্যাকের নেয়া বন্ধ করতে পারেন.
কি প্রতিটি এই জায়গাগুলিকে এবং মেমরি রাখা?
ওয়েল, শীর্ষ, যা টেক্সট সেগমেন্ট, নিজেই প্রোগ্রাম উপস্থিত রয়েছে.
মেশিন কোড, যাতে আছে একবার, আপনার প্রোগ্রাম কম্পাইল.
এর পরে, কোনো গ্লোবাল ভেরিয়েবল সক্রিয়া.
>> সুতরাং আপনি আপনার প্রোগ্রামের গ্লোবাল ভেরিয়েবল আছে, এবং আপনি, ভালো একটি = 5 বলে,
যে যে সেগমেন্টের মধ্যে রাখতে এবং ডান পরার অধীন যে,
আপনি কোনো uninitialized বিশ্বব্যাপী তথ্য, যা শুধু একটি int আছে,
কিন্তু আপনি এটা সমান কিছু না বলে.
এইসব বুঝতে হয় গ্লোবাল ভেরিয়েবল, যাতে তারা প্রধান বাইরে.
সুতরাং এই যে কোনো গ্লোবাল ভেরিয়েবল কিন্তু ঘোষিত সক্রিয়া করা না হয় মানে.
সুতরাং গাদা মধ্যে কি? মেমরি বরাদ্দ malloc, যা আমরা অল্প পাবেন ব্যবহার করে.
এবং পরিশেষে স্ট্যাকের সঙ্গে, আপনি কোনো স্থানীয় ভেরিয়েবল আছে
এবং কোনো ফাংশন আপনি তাদের কোনো পরামিতি কল করতে পারে.
শেষ জিনিস, আপনি কি এনভায়রনমেন্ট ভেরিয়েবলের কি সত্যিই আছে জানি না,
কিন্তু যখনই আপনি প্রোগ্রাম চালানো, কিছু সংযুক্ত করতে হয়,
এই ব্যক্তি প্রোগ্রাম দৌড়ে ব্যবহারকারীর নাম.
এবং যে নীচে সাজান করা যাচ্ছে.
ইন মেমরি অ্যাড্রেস, যা হেক্সাডেসিমেল মান শর্তাদি,
0 শীর্ষে শুরু করার মান, এবং তারা যেতে সমস্ত উপায় নীচে.
এই ক্ষেত্রে, আপনি যদি 32 বিট সিস্টেমে করছি,
নীচের ঠিকানায় 0x হবে, অনুসরণ Af দ্বারা, কারণ এটা 32 বিট হয়,
যা 8 বাইট, এবং এই ক্ষেত্রে 8 বাইট 8 হেক্সাডেসিমাল সংখ্যা অনুরূপ.
তাই এখানে আপনি নিচে যাও, দিন 0xffffff, যাচ্ছে, এবং সেটি আপ সেখানে আপনি 0 আছে চলুন.
তাই কি পয়েন্টার? আপনি কয়েকটি বিভাগে এই নাও হতে পারেন, আচ্ছাদিত আগে.
কিন্তু আমরা তার উপর বক্তৃতা যান নি, তাই একটা পয়েন্টার শুধুমাত্র একটি ডাটা টাইপ
যা সঞ্চয়, পরিবর্তে 50 ভালো মানের কিছু বাছাই করা, এটা মেমরির মধ্যে কিছু অবস্থান ঠিকানা সঞ্চয়.
ভালো লেগেছে যে মেমরি [অপাচ্য].
তাই এই ক্ষেত্রে, আমরা কি আছে, আমরা একটি পূর্ণসংখ্যা বা কোন int * একটি ইশারা আছে,
এবং এটি এই 0xDEADBEEF হেক্সাডেসিমেল এর ঠিকানা রয়েছে.
>> তাই আমরা যা আছে এখন,, এই যা মেমরির মধ্যে কিছু স্থানে পয়েন্টার পয়েন্ট,
এবং যে একটি মাত্র, মান 50 এই মেমরি অবস্থানে এটি উপস্থিত রয়েছে.
সমস্ত 32 বিট সিস্টেমে কিছু 32 বিট সিস্টেমে,, পয়েন্টার 32 বিট বা 4 বাইট লাগতে.
উদাহরণস্বরূপ, কিন্তু,, একটি 64 বিট সিস্টেমে, পয়েন্টার হয় 64 বিট.
সুতরাং যে কোন কিছু যা আপনি মনে রাখা করতে চাইবেন.
তাই শেষ বিট সিস্টেমের মধ্যে, একটি পয়েন্টার হয় শেষ বিট দীর্ঘ.
পয়েন্টার হয় অতিরিক্ত জিনিস ছাড়া ধরণের হার্ড যাও হজম,
তাই আসুন ডাইনামিক মেমরি বরাদ্দকরণের একটি উদাহরণ দিয়ে যান.
কি ডাইনামিক মেমরি বরাদ্দকরণের জন্য আপনি, বা কি আমরা কল malloc,
এটি আপনাকে সেট বাইরে কিছু তথ্য সাজানোর বরাদ্দ করা.
সুতরাং এই তথ্য ধরণের প্রোগ্রামের সময়কাল জন্য আরো স্থায়ী.
কারণ হিসাবে আপনি কি জানেন, যদি আপনি এক্স একটি ফাংশন এর ভিতরে, এবং যে ফাংশন আয় ঘোষণা,
আর আপনি যে তথ্য x এর মধ্যে সঞ্চিত ছিল অ্যাক্সেস আছে.
কি পয়েন্টার আমাদের কাজের জন্য তারা আমাদের মেমরি বা দোকান মান সংরক্ষণ দিন
একটি মেমরি বিভিন্ন অংশ যেমন, গাদা.
এখন একবার আমরা ফাংশন আউট ফিরে, যতদিন আমরা একটি পয়েন্টার আছে
মেমরির মধ্যে যে অবস্থান যাও তাহলে কি আমরা করতে পারি মনে হয় আমরা ঠিক আছে মান তাকান পারেন.
এর একটি উদাহরণ তাকান যাক: এটি আবার আমাদের স্মৃতিশক্তি বিন্যাস.
এবং আমরা এই ফাংশন আছে, প্রধান.
এটি কী জন্য প্রয়োজন হয় - ঠিক আছে, তাই সহজ, ডান -? Int x = 5, যে শুধু স্ট্যাকের দ্বারা একটি প্রধান মধ্যে পরিবর্তনশীল.
>> অন্যদিকে এখন, আমরা একটি পয়েন্টার যা ফাংশন কল giveMeThreeInts ডিক্লেয়ার.
এবং এখন তাই এই ফাংশন মধ্যে আমরা যান এবং আমরা একটি নতুন এটি জন্য স্ট্যাকের ফ্রেম তৈরি.
এই স্ট্যাকের ফ্রেম যাইহোক, আমরা int-* temp ঘোষণা,
যা আমাদের জন্য mallocs 3 ইন্টিজার.
সুতরাং int-এ মাপ আমাদের দিতে হবে কত বাইট এই int-হয়,
এবং malloc আমাদের দেয় যে স্থান অনেক হিপ বাইট.
তাই এই ক্ষেত্রে, আমরা 3 পূর্ণসংখ্যার জন্য যথেষ্ট জায়গা তৈরি করেছি,
এবং গাদা হয় আপ উপায় আছে, যা আমি কেন এটা টানা উচ্চতর আপ করেছি.
একবার আমরা সম্পন্ন হলে, আমরা ফিরে আসা পর্যন্ত, এখানে একমাত্র আপনি প্রয়োজন 3 ints ফিরে,
এবং এটি ফিরিয়ে এই ক্ষেত্রে যে মেমরি ঠিকানা যেখানে শেষ হয়,.
এবং আমরা পয়েন্টার = সুইচ সেট, এবং সেখানে আমরা শুধু আরেকটি পয়েন্টার আছে.
কিন্তু কি যে এখানে ফাংশন আয় স্তুপীকৃত এবং disappears হয়.
সুতরাং temp disappears, কিন্তু আমরা এখনো যেখানে ঠিকানা বজায় রাখা
যারা 3 পূর্ণসংখ্যার mains এর ভিতরে আছে.
তাই এই সেটে, পয়েন্টার হয় স্তুপীকৃত ফ্রেম জন্য স্থানীয়ভাবে scoped,
কিন্তু মেমরি যা তারা পড়ুন গাদা হয়.
>> কি যে জানার জন্য?
[ছাত্র] আপনি কি ওটা আবার বলবেন? >> [জোসেফ] হ্যাঁ.
সুতরাং যদি আমি ফিরে যেতে অল্পমাত্র বিট, আপনি দেখতে যে temp বরাদ্দ
সেখানে আপ গাদা কিছু স্মৃতি.
তাই যখন এই ফাংশন, আয় giveMeThreeInts, এই এখানে স্ট্যাকে অদৃশ্য হয়ে যাচ্ছে.
এবং সাথে কোনো এই ক্ষেত্রে ভেরিয়েবেল্স,, এই যে পয়েন্টার স্তুপীকৃত ফ্রেমের মধ্যে বরাদ্দ ছিল.
যে অদৃশ্য হয়ে যাচ্ছে, কিন্তু যেহেতু আমরা ফিরে temp
এবং আমরা পয়েন্টার সেট = temp, পয়েন্টার এখন এর অবস্থান একই মেমরি হিসাবে temp নির্দেশ ছিল না.
সুতরাং এখন, যদিও আমরা temp, যে স্থানীয় পয়েন্টার হারান,
আমরা এখনও কি এটা যে পয়েন্টার পরিবর্তনশীল এর ভিতর থেকে প্রতি নির্দেশ ছিল মেমরির ঠিকানা বজায় রাখা.
প্রশ্ন? যে একটি বিভ্রান্তিকর ধরনের বিষয়ের উপর যদি আপনি এটি বিভাগে সর্বস্বান্ত করা যাবে না.
আমরা আপনার TF, করা যাবে স্পষ্টভাবে এটা আবার যান এবং অবশ্যই আমরা প্রশ্নগুলির উত্তর দিতে পারেন
এ জন্য এই পর্যালোচনার সময় শেষ.
কিন্তু এই একটি জটিল বিষয় বাছাই করা, এবং আমি আরো উদাহরণ যে দেখাবে যাচ্ছি আছে
আসলে যে কি পয়েন্টার হয় শোধন সাহায্য করবে.
>> এই ক্ষেত্রে, পয়েন্টার হয় সমতুল্য অ্যারে যাও,
তাই আমি ঠিক কোন int অ্যারে হিসাবে একই জিনিস হিসাবে এই পয়েন্টার ব্যবহার করতে পারেন.
তাই আমি 0 মধ্যে, সূচিবদ্ধ করাকে এবং 1 যাও প্রথম পূর্ণসংখ্যা পরিবর্তন করছি,
2 দ্বিতীয় পূর্ণসংখ্যা পরিবর্তন, এবং 3 য় পূর্ণসংখ্যা যাও 3.
পয়েন্টার তাই আরো. ভাল Binky, প্রত্যাহার.
এই ক্ষেত্রে আমরা একটা পয়েন্টার বরাদ্দ করেছেন, অথবা আমরা একটি পয়েন্টার ঘোষণা,
কিন্তু প্রথমে, যখন আমি একটি পয়েন্টার ঘোষণা, এটি মেমরি কোথাও যাও ইশারা না.
শুধু তা ভিতরে আবর্জনা মান.
তাই আমি তার কোন ধারণা নেই যেখানে এই পয়েন্টার যাও ইশারা আছে.
এটি একটি ঠিকানা যা এর 0 এবং 1 এর যেখানে প্রথমে এটি ছিল ঘোষিত সঙ্গে ঠিক না ভরাট হয়েছে.
আমি এই সাথে কিছু না হওয়া পর্যন্ত আমি malloc পোকা বলতে পারেন
এবং তারপর এটি আপনাকে এক গাদা যেখানে আমি ভিতরে মান বসাতে পারেন উপর সামান্যই স্থান সম্পর্কে.
তারপর আবার, আমি এই মেমরি ভিতর কি না জানি না.
তাই সর্বপ্রথম যে জিনিসটি আমি করতে হবে তা হচ্ছে কিনা সিস্টেমে পর্যাপ্ত মেমরি ছিল চেক
আমার করা প্রথম স্থান, যা আমি কেন এই চেক করছি 1 পূর্ণসংখ্যা ফিরে.
যদি পয়েন্টার হয় নাল, তার মানে এটা যথেষ্ট স্থান বা অন্য কিছু ত্রুটি ঘটেছে আছে কি না,
তাই আমি আমার প্রোগ্রাম থেকে প্রস্থান করতে হবে.
কিন্তু যদি তা সফল এখন, আমি যে পয়েন্টার ব্যবহার করতে পারেন
এবং কি * পয়েন্টার আছে এটা অনুসরণ করে যেখানে ঠিকানা হয়
যেখানে যাও যে মান, এবং এটি সেট করে এটি 1 সমান.
সুতরাং এখানে উপর, আমরা যদি যে মেমরি অস্তিত্ব চেক করছি.
>> একবার আপনি কি জানেন এটি বিদ্যমান, আপনি তা লাগাতে পারেন
মান কি আপনি চান এটা পুরা যাও; এই ক্ষেত্রে 1.
একবার আমরা এটি সঙ্গে সম্পন্ন হলে, আপনি যে পয়েন্টার মুক্ত প্রয়োজন
কারণ আমরা যে সিস্টেম মেমরি যা আপনাকে প্রথমে জানতে চাওয়া ফিরে পেতে হবে.
কারণ কম্পিউটার যখন আমরা সঙ্গে সম্পন্ন না জানি.
এই ক্ষেত্রে আমরা স্পষ্টভাবে এটা করছি বলছে, ঠিক আছে, আমরা যে মেমরি সঙ্গে সম্পন্ন করেছেন.
যদি অন্য কোনো প্রক্রিয়া দরকার, কিছু অন্যান্য প্রোগ্রাম দরকার, বোধ যাও এগিয়ে যান এবং এটিকে বিনামূল্যে.
আমরা কি করতে পারি মনে হয় আমরা ঠিক সেট স্থানীয় ভেরিয়েবল এর ঠিকানা পেতে পারেন.
সুতরাং int x মুখ্য স্তুপীকৃত ফ্রেম ভিতরে হয়.
এবং যখন আমরা এই ampersand ব্যবহার, এবং এই অপারেটর, এটি কী জন্য প্রয়োজন হয়
এটি x লাগে, এবং এক্স হয় শুধু মেমরির মধ্যে কিছু তথ্য, কিন্তু এটি একটি ঠিকানা আছে.
এটা কোথাও এর অবস্থিত. সুতরাং দ্বারা কলিং & x, ও কি এই জন্য এটা দেয় x এর ঠিকানা আমাদের.
এই করে, আমরা যেখানে মেমরির মধ্যে x হল পয়েন্টার বিন্দু করছেন.
এখন আমরা শুধু * ভালো কিছু x না, আমরা 5 ফিরে পেতে যাচ্ছেন.
স্টার dereferencing বলা হয়.
আপনার ঠিকানা এবং অনুসরণ করতে আপনি এটি মান সঞ্চিত আছে পেতে.
>> কোন প্রশ্ন? হ্যাঁ?
[ছাত্র] যদি আপনি 3-সরু জিনিস করবেন না, এটা এখনও আছে কম্পাইল?
হ্যাঁ. যদি আপনি 3-পয়েন্টার জিনিস করে না, এখনও এটা কম্পাইল হয়ে উঠবে,
কিন্তু আমি আপনাকে দেখাতে একটি দ্বিতীয় মধ্যে কি, এবং পাবেন ছাড়া যে করছেন,
তাই আমরা একটি মেমরি লিক. আপনি সিস্টেম প্রদান করছেন না
এর পরে মেমরির একটি ব্যাক, তাই যখন প্রোগ্রাম স্তূপাকার করা যাচ্ছে না
মেমরি যে এটি, এবং এর ব্যবহার না কিছুই অন্যথায় এটি ব্যবহার করতে পারেন.
আপনি যদি কখনও আপনার কম্পিউটারে 1.5 মিলিয়ন কিলোবাইট সঙ্গে দেখা করেছেন ফায়ারফক্স,
টাস্ক ম্যানেজার, যে কি করছেন.
আপনার প্রোগ্রাম যে তারা সামলাচ্ছে না করছি একটি মেমরি লিক আছে.
সুতরাং কিভাবে আছে পয়েন্টার এরিথমেটিক কাজ করে?
ওয়েল, পয়েন্টার এরিথমেটিক একটি অ্যারের মধ্যে মত ইন্ডেক্স ধরণের.
এই ক্ষেত্রে, আমি একটি ইশারা আছে, এবং কি আমি না হয় আমি প্রথম উপাদান যাও পয়েন্টার বিন্দু করা
3 পূর্ণসংখ্যার যে আমি বরাদ্দ করেছি এই অ্যারে.
তাই এখন আমি কি করব, শুধু তারকা পয়েন্টার তালিকায় প্রথম উপাদান পরিবর্তন করে.
রাশি পয়েন্টার এখানে উপর +1 টি পয়েন্ট.
সুতরাং এখানে উপর পয়েন্টার হয়, পয়েন্টার +1 এখানে বেশী, পয়েন্টার +2 হয় এখানে বেশী.
>> তাই মাত্র 1 যোগ হয় এই অ্যারে বরাবর চলন্ত হিসাবে একই জিনিস.
আমরা কি করব তা হল, যখন আমরা পয়েন্টার +1 করতে করতে আপনি এখানে উপর ঠিকানা পেতে,
এবং যাতে এখানে মধ্যে মধ্যে মান পেতে, আপনার কাছ থেকে সম্পূর্ণ প্রকাশের একটি তারকা করা
এটি dereference.
এই ক্ষেত্রে, তাই, আমি এই অ্যারের মধ্যে প্রথম অবস্থান সেটিং করছি 1 যাও,
2 দ্বিতীয় অবস্থান, এবং 3 যাও তৃতীয় অবস্থান.
তারপর কি আমি ধরে এখানে করছি আমি আমাদের পয়েন্টার +1- মুদ্রণ করছি,
যা শুধু দেয় 2 সম্পর্কে.
এখন আমি পয়েন্টার বৃদ্ধিশীল করছি, তাই পয়েন্টার পয়েন্টার +1- সমান,
তা এগিয়ে চলে.
তাই এখন যদি আমি মুদ্রণ পয়েন্টার +1- আউট, পয়েন্টার +1- এখন 3,
এই ক্ষেত্রে যা ছাপে 3 আউট.
এবং যাতে বিনামূল্যে কিছু, পয়েন্টার যে আমি তা দিতে
অ্যারে যা আমি malloc থেকে ফিরে পেয়েছেন প্রারম্ভে প্রতি নির্দেশ করা আবশ্যক.
এই ক্ষেত্রে, তাই, যদি আমি 3 অধিকার এখানে কল ছিল, এই অধিকার হতে পারেন না,
কারণ এটি অ্যারের মধ্যম আছে.
আমি আসল অবস্থান পেতে বিয়োগ করা আছে
প্রাথমিক প্রথম স্পট আগে আমি এটি মুক্ত করতে পারেন.
সুতরাং, এখানে আরো একটি উদাহরণ জড়িত.
এই ক্ষেত্রে, আমরা একটি অক্ষর অ্যারের মধ্যে 7 টি অক্ষর বণ্টন করছেন.
>> আমরা কি করছেন এই ক্ষেত্রে আমরা তাদের প্রথম 6 ওভার looping করছি,
এবং আমরা জেড তাদের করছি সেটিং
সুতরাং, তোমার জন্য int = 0, আমি> 6, আমি + + ',
সুতরাং, শুধু তোমার পয়েন্টার + দিতে আমাদের এই ক্ষেত্রে, হবে,
পয়েন্টার, পয়েন্টার +1 করুন, পয়েন্টার +2, পয়েন্টার +3, এবং তাই এবং লুপ যাতে ঘোষণা.
কি এটি করতে যাচ্ছে এটা যে ঠিকানা পায়, এটি dereferences মান পেতে,
এবং পরিবর্তনের যে একটি জেড মান
তারপর শেষে এই একটি স্ট্রিং স্মরণ অধিকার,?
সমস্ত স্ট্রিং নাল সসীম অক্ষর দিয়ে শেষ আছে.
সুতরাং, আমি কি কাজের জন্য পয়েন্টার 6 আমি ইন নাল টারমিনেটর অক্ষর করা
এবং এখন কি মূলত আমি যা করছি উপর এখানে একটি পংক্তি জন্য রূপায়ণকারী printf হয় ডান,?
>> সুতরাং, printf যখন এখন কখন এটি একটি স্ট্রিং এর শেষে পৌঁছে গেছেন?
যখন এটি সসীম নাল অক্ষর হিট.
সুতরাং, এই ক্ষেত্রে, আমার আসল এই অ্যারে শুরুতে পয়েন্টার পয়েন্ট.
আমি প্রথম অক্ষর প্রিন্ট আউট. আমি এক উপর স্থানান্তরিত করেন.
আমি যে চরিত্র প্রিন্ট আউট. আমি এটি উপর সরানো.
এবং আমি রাখা এই কাজ আমি শেষ পর্যন্ত পৌঁছাতে পারে.
এবং এখন শেষ * এই পয়েন্টার এবং নাল সসীম চরিত্র ফিরে পেতে dereference হবে.
এবং তাই আমার যখন লুপ রান শুধুমাত্র যখন যে মান নাল সসীম চরিত্র নয়.
সুতরাং এখন, আমি এই লুপ আউট থেকে প্রস্থান করুন.
এবং তাই, যদি আমি এই পয়েন্টার থেকে 6 বিয়োগ,
আমি ফিরে যেতে সব শুরুতে উপায়.
মনে রাখবেন, আমি এই করছি কারণ আমি শুরুতে যাতে এটা মুক্ত যেতে থাকে.
>> সুতরাং, আমি জানি যে ছিল অনেক. সেখানে কি কোন প্রশ্ন?
অনুগ্রহপূর্বক, হ্যাঁ?
[ছাত্র প্রশ্ন অপাচ্য]
আপনি যে জোরে বলতে পারেন? দুঃখিত.
[ছাত্র] অন শেষ স্লাইডে ডান আগে আপনি পয়েন্টার মুক্ত,
যেখানে আপনি আসলে ছিল পয়েন্টার মান পরিবর্তন?
[জোসেফ] সুতরাং, এখানে ডান. >> [ছাত্র] ওহ, ঠিক আছে.
[জোসেফ] সুতরাং, আমি একটি পয়েন্টার বিয়োগ বিয়োগ অধিকার আছে,,
যা এক জিনিস ফেরত চলে আসে, তারপর আমি এবং এটি মুক্ত,
কারণ এই পয়েন্টার হয়েছে অ্যারে শুরুতে তীক্ষ্ন করা হবে.
[ছাত্র] কিন্তু প্রয়োজন ছিল যে আপনি যে লাইন পরে থামানো যাবে না.
[জোসেফ] তাই, যদি আমি এই পরে থামানো যায়, এই বিবেচনা একটি মেমরি লিক হবে,
কারণ আমি মুক্ত চালানো হয়নি.
[ছাত্র] আমি [অপাচ্য] পরে প্রথম তিনটি লাইন যেখানে আপনি পয়েন্টার +1- [অপাচ্য] ছিল.
[জোসেফ] Uh-হাহ. সুতরাং, কি আছে প্রশ্ন?
দুঃখিত. না, না,. , যান যান, দয়া করে.
[ছাত্র] সুতরাং, আপনি পয়েন্টার মান পরিবর্তন করছি না.
আপনি ছিল পয়েন্টার বিয়োগ বিয়োগ না করে থাকতে পারে.
[জোসেফ] হ্যাঁ, ঠিক.
সুতরাং, যখন আমি পয়েন্টার +1 +2 পয়েন্টার না,
আমি পয়েন্টার করছেন না পয়েন্টার +1- সমান.
সুতরাং, শুধু পয়েন্টার অ্যারের প্রারম্ভে প্রতি নির্দেশ মতেই.
এটা কেবলমাত্র যখন আমি প্লাস প্লাস যে এটি সেট করে পয়েন্টার ভিতরে ফিরে মান,
আসলে এটা বরাবর এই চলে আসে.
ঠিক আছে.
আরো প্রশ্ন?
>> আবার, এই যদি হয় অপ্রতিরোধ্য বাছাই করা, এই সময় করা হবে আচ্ছাদিত.
এটি সম্পর্কে আপনার অধ্যাপনা সহকর্মী, Ask এবং আমরা শেষে প্রশ্নগুলির উত্তর দিতে পারেন.
এবং সাধারণত আমরা এই বিয়োগ জিনিস না চান.
এই সম্পর্কে কতটা আমি অ্যারের মধ্যে অফসেট করেছি অবগত থাকার প্রয়োজন রয়েছে.
সাধারণভাবে তাই,, এটা কিভাবে কাজ করে পয়েন্টার গাণিতিক ব্যাখ্যা.
তবে কি আমরা সাধারণত যাও না হয় আমরা পয়েন্টার একটি কপি তৈরী করতে চাই,
এবং তারপর আমরা যে কপি ব্যবহার করার জন্য যখন আমরা স্ট্রিং যাচ্ছেন করছি প্রায় করব.
এইসব ক্ষেত্রে, তাই আপনি অনুলিপি মুদ্রণ সম্পূর্ণ পংক্তি ব্যবহার,
কিন্তু আমরা পয়েন্টার বিয়োগ 6 ভালো না বা না কতটা আমরা এই সরে ট্র্যাক রাখতে,
যেহেতু আমরা জানি যে আমাদের মূল পয়েন্ট এখনও তালিকার শুরুতে নির্দিষ্ট
এবং আমরা যে সব রদবদল করা ছিল এই কপি.
সাধারণভাবে তাই,, আপনার মূল কপি পয়েন্টার পরিবর্তন.
আপনার কি মত অনুসারে বাছাই করার চেষ্টা করবেন না - মূল কপি পরিবর্তন don't.
আপনার মূল শুধুমাত্র কপি পরিবর্তন করার চেষ্টা করছেন.
সুতরাং, আপনি বিজ্ঞপ্তি যখন আমরা printf মধ্যে স্ট্রিং পাস
আপনি এটি সামনে একটি তারকা মত আমরা সমস্ত অন্যান্য dereferences সঙ্গে কি ঠিক করে না, তবে?
সুতরাং, যদি আপনি প্রিন্ট আউট সম্পূর্ণ পংক্তি% গুলি প্রত্যাবর্তনের একটি ঠিকানা,
এবং এই ক্ষেত্রে একটি পয়েন্টার বা অক্ষরের একটি অ্যারের মত এই কেস.
>> অক্ষর, গৃহস্থালির কাজ * গুলি, অ্যারে এবং একই জিনিসের.
অক্ষর পয়েন্টার হয়, এবং চরিত্র অ্যারে একই জিনিসের.
এবং তাই, আমরা কি পয়েন্টার পাস হয়.
আমরা ভালো * পয়েন্টার বা ওই জাতীয় কিছু পাস না.
সুতরাং, অ্যারে এবং পয়েন্টার একই জিনিসের.
আপনি যখন x এর মত কিছু করছি উপর এখানে একটি অ্যারের জন্য [y] টিপে,
এটা কি ফণা অধীন করছে এটা বলছে এর, ঠিক আছে, এটা একটা অক্ষর অ্যারে,
তাই একটা পয়েন্টার.
তাই x একই জিনিসের,
এবং তাই এটি কী জন্য এটা x যাও y যোগ,
যা মেমরির মধ্যে গতির যে অনেক হিসাবে একই জিনিস.
এবং এখন x + y দেয় ঠিকানা কিছু সাজানোর আমাদের,
এবং আমরা ঠিকানা dereference বা তীর অনুসরণ
যেখানে যাও মেমরির মধ্যে যে অবস্থান হয় এবং আমরা পেতে মেমরির মধ্যে যে অবস্থান মান আউট.
সুতরাং, তাই এই দুই ঠিক একই জিনিস.
এটি শুধু একটি অন্বিত চিনি.
তারা একই জিনিস করে. এগুলি কেবল একে অপরের জন্য বিভিন্ন syntactics.
>> তাই, পয়েন্টার সাথে গোলমাল হতে পারে? ভালো লেগেছে, অনেক. ঠিক আছে. তাই, খারাপ জিনিষ.
কিছু খারাপ জিনিষ আপনি করতে পারেন যদি আপনার malloc কল ফেরৎ নাল, ডান যাচাই করছি না?
এই ক্ষেত্রে, আমি সিস্টেম সম্পর্কে দিতে জিজ্ঞাসা করছি - কি হল যে সংখ্যা?
ভালো লেগেছে 2 বিলিয়ন বার 4, কারণ একটি পূর্ণসংখ্যা আকার 4 বাইট.
আমি করছি জন্য 8 বিলিয়ন বাইট মত জিজ্ঞাসা.
অবশ্য আমার কম্পিউটার যাও যাও সম্পর্কে যে অনেক মেমরি ফেরত দিতে সমর্থ হবে না.
এবং আমরা যদি এই হয় নাল, না তাই চেক যখন আমরা ওইখানে এটি dereference চেষ্টা -
যেখানে এটি যাও যাও তীর অনুসরণ করে যাচ্ছে - আমরা যে মেমরি নেই.
এটা কি আমরা একটি নাল পয়েন্টার dereferencing.
এবং এই মূলত আপনি segfault যাও জানাবে.
এই উপায়ে আপনি segfault করতে পারে.
অন্য খারাপ জিনিষ আপনি করতে পারেন - ওহ ভাল.
যে একটি নাল পয়েন্টার dereferencing ছিল. ঠিক আছে.
অন্য খারাপ জিনিস - ভাল, যে শুধু আপনি সেখানে একটি চেক করা ঠিক
যে কিনা পরীক্ষা করা হয় নাল পয়েন্টার
এবং আউট প্রোগ্রাম থেকে প্রস্থান যদি এটা যে malloc একটি নাল পয়েন্টার ফেরৎ.
এটা xkcd কমিক. মানুষ এটা এখন বুঝতে. এর বাছাই করুন.
>> সুতরাং, মেমরি. এবং আমি এই উপর গিয়েছিলাম.
আমরা একটি লুপ করছি malloc কলিং, কিন্তু প্রতিটি সময় আমরা কল malloc
আমরা যেখানে এই পয়েন্টার যাও প্রতি নির্দেশ হয় করছেন ট্র্যাক হারিয়ে,
কারণ আমরা তা clobbering করছি.
সুতরাং, malloc প্রারম্ভিক কল দেয় মেমরি সম্পর্কে বেশী এখানে.
আমার এই পয়েন্টার পয়েন্টার দেয়া হল.
এখন, আমি মুক্ত না, তাই এখন আমি malloc কল আবার.
এখন এটি স্থানটিকে এখানে বেশী. এখন আমার মেমরি নিয়ে এখানে প্রতি নির্দেশ করা হয়.
এখানে প্রতি নির্দেশ উপর. এখানে প্রতি নির্দেশ উপর.
কিন্তু আমি সব এখানে যে আমি বরাদ্দ উপর মেমরি অ্যাড্রেস ট্র্যাক হারিয়ে ফেলেছি.
এবং এখন আমি আর থাকে না তাদের কোনো রেফারেন্স না.
সুতরাং, আমি এই লুপ বাইরে তাদের মুক্ত করতে পারে না.
তাই যাতে ভালো কিছু করতে,
যদি আপনি মেমরি মুক্ত ভুলবেন না এবং আপনি এই মেমরি লিকের পেতে,
আপনি এই লুপ ভিতরে মেমরি একবার আপনি এটা দিয়ে সম্পন্ন মুক্ত আছে.
ওয়েল, এই কি ঘটবে. আমি জানি আপনি প্রচুর এই ঘৃণা.
কিন্তু এখন - ইয়ে! আপনি 44.000 কিলোবাইট ভালো পেতে.
সুতরাং, আপনি লুপের শেষে এটি মুক্ত,
এবং যেন প্রত্যেক সময় মুক্ত মেমরি যাচ্ছে.
মূলত, আর আপনার প্রোগ্রাম আছে একটি মেমরি লিক না.
>> এবং এখন আপনি অন্য কিছু করতে পারেন কিছু স্মৃতি যে আপনি দুইবার জন্য জিজ্ঞাসা করেছি মুক্ত.
এই ক্ষেত্রে, আপনি malloc কিছু, আপনি এর মান পরিবর্তন.
আপনি এটি মুক্ত একবার কারণ আপনি বলেছেন আপনি এটা দিয়ে কাজ হয়.
কিন্তু পরে আমরা তা আবার মুক্ত.
এইটি এমন কিছু বিষয় যা বেশ খারাপ.
এটি প্রাথমিকভাবে segfault যাচ্ছে না,
কিন্তু পরে যখন একটি কি এই জন্য ডবল হয় freeing আপনার গাদা গঠন এই corrupts,
এবং আপনি এই বিষয়ে জানার একটি সামান্য বিট আরো যদি আপনি CS61 মত একটি ক্লাস নিতে হবে.
একটি পরে মূলত কিন্তু যখন আপনার কম্পিউটারে বিভ্রান্ত করতে যাচ্ছে
সম্পর্কে কি মেমরি অবস্থানে আছে এবং যেখানে যেখানে এটি সঞ্চিত -
যেখানে তথ্য মেমরির মধ্যে সংরক্ষিত হয়.
তাই একটা পয়েন্টার freeing দুইবার একটি খারাপ জিনিস যে আপনি না চান তাহলে.
>> অন্য যে ভুল হয়ে যেতে পারে sizeof ব্যবহার করছে না.
এই ক্ষেত্রে, তাই আপনি 8 বাইট malloc,
এবং যে দুটি পূর্ণসংখ্যা হিসাবে একই জিনিস ডানে,?
সুতরাং, এটা পুরোপুরি নিরাপদ, কিন্তু এটা?
ওয়েল, লুকাস হিসাবে বিভিন্ন আর্কিটেকচারের সম্পর্কে বললাম,
পূর্ণসংখ্যার বিভিন্ন লেন্থ হয়.
যে যন্ত্র ব্যবহার করছেন তাই,, ইন্টিজার হয় প্রায় 4 বাইট,
কিন্তু কিছু অন্যান্য সিস্টেমে তারা 8 বাইট হতে পারে অথবা তারা 16 বাইট হতে পারে.
তাই, যদি আমি এখানে উপর এই নম্বরটি ব্যবহার,
এই প্রোগ্রাম যন্ত্র কাজ করতে পারে,
কিন্তু কিছু অন্যান্য সিস্টেমে পর্যাপ্ত মেমরি বরাদ্দ করা যাচ্ছে না.
এই ক্ষেত্রে, এই কি sizeof অপারেটর জন্য ব্যবহৃত হয়.
আমরা যখন কল sizeof (int), কি আছে এই হল
এটি আপনাকে সিস্টেমের যে প্রোগ্রাম হয় পূর্ণসংখ্যা মাপ আমাদের.
এই ক্ষেত্রে, তাই, sizeof (int) 4 ফিরে প্রয়োগ মত কিছু করবে,
এবং এখন এই ইচ্ছা 4 * 2, যা 8,
যা শুধু স্থান দুটি পূর্ণসংখ্যার জন্য প্রয়োজনীয় পরিমাণ.
একটি ভিন্ন সিস্টেম, যদি কোন int 16 বাইট বা 8 বাইট ভালো হয়,
এটা এর যথেষ্ট বাইটের যে পরিমাণ সঞ্চয় ফিরে যাচ্ছে.
>> এবং পরিশেষে, structs.
সুতরাং, যদি আপনি যা মেমরির মধ্যে একটি সুডোকু বোর্ড সঞ্চয় চেয়েছিলেন, কিভাবে এই আমরা কি হতে পারে?
আপনি সর্বপ্রথম যে জিনিসটি জন্য একটি পরিবর্তনশীল মত মনে হতে পারে,
দ্বিতীয় জিনিস জন্য একটি পরিবর্তনশীল, তৃতীয় জিনিস জন্য একটি পরিবর্তনশীল,
খারাপ, ডান - চতুর্থ বিষয়ের জন্য একটি পরিবর্তনশীল?
সুতরাং, একটি উন্নতিসাধনের আপনি এই উপরের করতে পারবে একটি 9 x 9 শ্রেণীবিন্যাস করা হয়.
যে সূক্ষ্ম, কিন্তু থাকলে কি সুডোকু বোর্ড সহ অন্যান্য বিষয় সংযুক্ত চেয়েছিলেন
চাই কি বোর্ড অসুবিধা হয়,
অথবা, উদাহরণস্বরূপ, আপনার স্কোর কি হয়, অথবা কিভাবে অনেক সময় এটি আপনি এই বোর্ড সমাধান নেওয়া হয়ে গেছে?
আচ্ছা, আপনি কি করতে পারেন আপনার একটি struct তৈরি করতে পারেন.
আমি কি করছি মূলত বলছে হল আমি এখানে উপর করছি এই কাঠামো নির্ধারণ,
এবং আমি একটি সুডোকু বোর্ড একটি বোর্ড যা 9 x 9 রয়েছে সংজ্ঞা করছি.
>> এবং এটি কি আছে এটা পয়েন্টার স্তরের নাম আছে.
এটি x এবং y, ও যা যেখানে আমি ডান এখন মধ্যে সমন্বয় আছে.
এছাড়াও সময় [অপাচ্য] করেনি কাটিয়েছি, এবং এটি প্যাচসমূহ আমি এতদূর ইনপুট করেছি মোট নম্বর আছে.
এই ক্ষেত্রে তাই, আমি একটি তথ্য আভা মাত্র একটি গ্রুপ গঠন করে করতে পারেন
পরিবর্তে উড়ন্ত বিভিন্ন ভেরিয়েবল ভালো ভালো কাছাকাছি মধ্যে এটি হচ্ছে
যে আমি সত্যিই ট্র্যাক রাখা নিতে পারেন.
এবং এই দেয় আমাদের শুধু এই struct ভিতরে বিভিন্ন জিনিষ উল্লেখ ধরণের জন্য চমৎকার বাক্য গঠন আছে.
আমি board.board, ঠিক এবং আমি সুডোকু বোর্ড ফিরে পেতে পারেন.
Board.level, আমি কিভাবে পেতে শক্ত হয়.
Board.x এবং board.y সম্পর্কে যেখানে আমি বোর্ড হতে পারে স্থানাঙ্ক দিতে.
তাই আমি কি আমরা কল struct ক্ষেত্র অ্যাক্সেস করছি.
এই sudokuBoard, যা একটি টাইপ যে আমি সংজ্ঞায়িত আছে.
এবং এখন আমরা এখানে এসেছি. আমি একটি পরিবর্তনশীল নামক "বোর্ড" টাইপ sudokuBoard আছে.
এবং এখন আমি সব ক্ষেত্র করতে এখানে ধরে এই কাঠামোর আপ অ্যাক্সেস করতে পারেন.
>> Structs সম্পর্কে কোন প্রশ্ন? হ্যাঁ?
Int x, y জন্য [ছাত্র], আপনি এক লাইন ঘোষিত উভয়? >> [জোসেফ] Uh-হাহ.
[ছাত্র] ঠিক তাই, আপনি তাদের সঙ্গে যে সমস্ত যেত না?
X এর মতো, y কমা বার যে মোট?
[জোসেফ] হ্যাঁ, আপনি স্পষ্টভাবে যে, না কিন্তু করতে পারি নি কারণ আমি একই লাইনে x এবং y করা -
এবং প্রশ্ন হল কেন আমরা একই লাইনে এই কি করতে পারি?
কেন কেবল একই লাইনে আমরা না এই সকল করা
x এবং y একে অপরের সাথে,
এবং এই অর্থে ঠিক stylistically আরো সঠিক,,
কারণ এটি একই লাইনে দুটি জিনিস এর বিন্যাস
যে মত সাজানোর একই জিনিস সঙ্গে সম্পর্কযুক্ত.
এবং আমি এই বিভক্ত পৃথক্. শুধু একটি শৈলী জিনিস.
এই বৈশিষ্ট্যগুলি সবটা কোন পার্থক্য করে তোলে.
কোন structs উপর অন্য কোন প্রশ্ন?
আপনি একটি struct সঙ্গে একটি Pokédex নির্ধারণ করতে পারবেন.
একটি পোকেমন একটি নম্বর আছে এবং এটি একটি চিঠি, মালিক, একটি টাইপ আছে.
এবং আপনি যদি পোকেমন একটি শ্রেণীবিন্যাস আছে, আপনি একটি Pokédex আপ নেওয়ার অধিকার, করতে পারেন?
ঠিক আছে, শান্ত. সুতরাং, structs প্রশ্ন. সেগুলো হল সম্পর্কিত structs যাও.
>> অবশেষে, GDB. কি GDB আপনাকে কি? এটা আপনাকে আপনার প্রোগ্রাম ডিবাগ করা.
এবং যদি আপনি GDB ব্যবহার না করে থাকেন, আমি ছোট দেখার জন্য সুপারিশ করবে
এবং কি GDB হয় করছি, কিভাবে আপনি এটি দিয়ে কাজ করে, কিভাবে আপনি এটি ব্যবহার করতে পারে,
একটি প্রোগ্রাম এবং এটা পরীক্ষা.
তাই কি GDB আপনাকে কি এটা বিরতি [অপাচ্য] আপ প্রোগ্রাম আপনাকে আপনার
এবং বাস্তবিক একটি লাইন.
উদাহরণস্বরূপ, বিরাম যায়নি 'আমি আমার মত প্রোগ্রাম লাইন 3 এ করতে চান,
এবং যখন আমি লাইন 3 এ আছি আমি সব মান আছে আউট মুদ্রণ করতে পারেন.
এবং তাই আমরা একটি পংক্তির মত pausing
হয় আমরা এই যে লাইনে একটি ব্রেকপয়েন্ট নির্বাণ কল
এবং তারপর আমরা প্রোগ্রাম রাষ্ট্র যে সময়ে ভেরিয়েবল আউট মুদ্রণ করতে পারেন.
>> আমরা তখন থেকে প্রোগ্রামটি লাইন বাই লাইন মাধ্যমে সিঁড়ির ধাপ আছে.
এবং তারপর আমরা স্ট্যাকের রাষ্ট্র এ সময় তাকান পারেন.
তাই যাতে GDB, আমরা কি করব তা হল আমরা সি ফাইল ঝনঝন ফোন ব্যবহার করার জন্য,
কিন্তু আমরা একে-ggdb পতাকা পাস আছে.
এবং একবার আমরা যে আমরা ফলে আউটপুট ফাইল চালানোর সময় gdb কাজ সম্পন্ন হয়.
এবং যাতে আপনি ভালো কিছু লেখার মত ভর পেতে,
কিন্তু সত্যিই সমস্ত আপনাকে যা করতে হবে কমান্ড প্রারম্ভে এ টাইপ হয়.
প্রধান বিরতি প্রধান একটি ব্রেকপয়েন্ট রাখে.
লাইন তালিকা 400 400 কাছাকাছি লাইনের কোড তালিকা.
এই ক্ষেত্রে এবং যাতে আপনি শুধু চেহারা এবং প্রায় বলতে পারে, ওহ,
আমি লাইন 397 এ একটি ব্রেকপয়েন্ট, যা এই লাইন সেট করতে চান,
এবং তারপর আপনার প্রোগ্রাম যে পদক্ষেপ মধ্যে সঞ্চালিত হয় এবং তা ভঙ্গ করা যাচ্ছে.
এটা বিরতি আছে, যাচ্ছে এবং আপনি যেমন জন্য আউট মুদ্রণ, কম বা উচ্চ মান, করতে পারি.
এবং তাই কমান্ড আপনাকে জানতে হবে একটি গুচ্ছ আছে,
এবং এই স্লাইডশো ওয়েবসাইটে যেতে হবে,
তাই আপনি যদি শুধুমাত্র এইসব উল্লেখ করতে চান বা আপনার পছন্দ Cheat শীট তাদের করা, বিনা দ্বিধায়.
>> কুল. যে ছিল ক্যুইজ পর্যালোচনা 0, এবং আমরা চারপাশে যদি আপনার কোনো প্রশ্ন থাকে বিদ্ধ করা হবে.
ঠিক আছে.
>> [সাধুবাদ]
>> [CS50.TV]