[მუსიკის დაკვრა] დევიდ ჯ Malan: ყველა უფლება. ეს არის CS50, და ეს არის ბოლომდე კვირა 2. ამიტომ დღეს, ჩვენ ვაპირებთ გავაგრძელოთ ჩვენი სახე როგორ ჩვენ წარმოადგინოს რამ ქვეშ hood-- მოძრავი დაშორებით საწყისი რიცხვები როგორც რიცხვებით და მცურავი პუნქტიანი ღირებულებებს და აქცენტი და სიმები საბოლოო ჯამში უფრო საინტერესო პროგრამები. მაგრამ ჩვენ ასევე შევხედოთ რამდენიმე დომენური სპეციფიკური პრობლემები პირველი რომელიც შეიძლება, მათ შორის კრიპტოგრაფიის, ხელოვნების scrambling ინფორმაცია, რომელშიც ხედავთ ზემოთ აქ სურათს რადიო ობოლი Annie საიდუმლო დეკოდერი ბეჭედი yesteryear. ეს არის ძალიან პრიმიტიული ფორმით და ბავშვთა მეგობრული სახით cryptopgraphy რომლის დროსაც ეს ბეჭედი აქვს ორი disks-- ერთი შიგნით და ერთი გარეთ. და მოძრავი ერთი იმ, თქვენ შეგიძლიათ არსებითად გამოდიან წერილები, როგორიცაა მეშვეობით Z სხვა წერილებს ისევე როგორც B მეშვეობით A. სხვა სიტყვებით, თქვენ შეგიძლიათ სიტყვასიტყვით როტაცია ანბანი, ამით მალე ერთად რუკების საწყისი წერილები წერილებს ასე რომ, თუ თქვენ სურდა გაგზავნას საიდუმლო გაგზავნა ვინმე მოსწონს Annie, შეგიძლიათ დაწეროთ ქვემოთ გაგზავნა და შემდეგ როტაცია წერილები, რომლის დროსაც, თუ თქვენ გულისხმობთ ვთქვა "," ნაცვლად ამბობენ, "B", თქვენ ნიშნავს, რომ ვთქვათ "B" თქვენ ნაცვლად ამბობენ, "C" - ან რამე ცოტა უფრო ჭკვიანი ვიდრე that-- და შემდეგ, საბოლოო ჯამში, ასე რომ, სანამ Annie აქვს ამ დეკოდერი ბეჭედი, მას შეუძლია decode გაგზავნა. ახლა, თქვენ შეიძლება გავიხსენოთ, რომ ის ფაქტი, რომ ამ გამოყენებულ იქნა ძალიან ცნობილი ფილმი, რომელიც უკრავს რეკლამა nauseum დროს საშობაო სეზონი. მოდით შევხედოთ აქ. Ralphie PARKER: "იყავით ის ცნობილია, რომ ყველა შემაჯამებელ რომ რალფ პარკერი წინამდებარე დაინიშნა წევრის პატარა ობოლი Annie საიდუმლო წრე და მას უფლება აქვს ყველა წარჩინებით და სარგებელი ხდება მასთან. " Ralphie PARKER (თხრობის): ხელმოწერილი პატარა ობოლი Annie. კონტრასიგნაციას, Pierre Andre! მელნის. პატივით და სარგებელს, უკვე ასაკში ცხრა. [მუსიკის დაკვრა] [RADIO არქივი] Ralphie PARKER: კარგით. მოდით კიდევ იგი. მე არ გვჭირდება ყველა რომ ჯაზის შესახებ კონტრაბანდისტები და მეკობრეები. RADIO დიქტორი: მოუსმინეთ ხვალ ღამის დადების თავგადასავალი შავი Pirate გემი. ახლა, დროა, ენი საიდუმლო გაგზავნა თქვენთვის წევრები საიდუმლო წრე. დამახსოვრება ბავშვები, მხოლოდ წევრების ენი საიდუმლო წრე შეიძლება decode Annie საიდუმლო გაგზავნა. გახსოვდეთ, Annie დამოკიდებულია თქვენ. უცნობია თქვენი ქინძისთავები B-2. აქ არის message-- 12, 11, მე -2 ბლოკის Ralphie PARKER (თხრობის): I ვარ ჩემი პირველი საიდუმლო შეხვედრა. RADIO დიქტორი: --25, 14, 11, 18, 16 Ralphie PARKER (თხრობის): Oh, Pierre იყო დიდი ხმა შეძლებენ. მე ვერ გეტყვით, რომ დღეს ის გზავნილი იყო მართლაც მნიშვნელოვანია. RADIO დიქტორი: --3, 25. სწორედ შეტყობინება Annie თავად. გახსოვდეთ, რომ არ ვუთხრა ვინმეს. [Panting] Ralphie PARKER (თხრობის): ოთხმოცდაათი წამი შემდეგ, მე ერთადერთი ოთახი სახლში, სადაც ბიჭი ცხრა შეიძლება იჯდეს კონფიდენციალურობა და decode. Ah. "ბ" [Chuckles] Ralphie PARKER (თხრობის): მივედი შემდეგ. "E." პირველი სიტყვა არის "იქნება." დიახ! ის მოდიოდა ადვილი არის. "U." [Chuckles] RANDY PARKER: Aw, მოდის, Ralphie. I Gotta გადასვლა! Ralphie PARKER: მე ვიქნები უფლება ქვემოთ, Ma. Gee პროგრამირებაში. "თ" "ო" "დარწმუნებული იყავით, to "." დარწმუნდით, რომ "რა? რა იყო პატარა ობოლი Annie ცდილობს ამბობენ? "რა თქმა უნდა" რა? MOTHER: Ralphie, რენდი აქვს გასავლელი. თქვენ გთხოვთ, გამოვა? Ralphie PARKER: ყველა უფლება, Mom! მე ვიქნები უფლება out! Ralphie PARKER (თხრობის): მე დღითიდღე უფრო ახლა. დაძაბულობა იყო საშინელი. რა იყო ეს? ბედი პლანეტა შეიძლება სასწორზე დევს. MOTHER: Ralphie, რენდი ის უნდა წავიდეს! Ralphie PARKER: მე ვიქნები უფლება გარეთ, ღაღადებდეს ხმამაღლა! Ralphie PARKER (თხრობის) თითქმის არ არსებობს! ჩემი თითების გაფრინდა! ჩემი აზრით ფოლადის ხაფანგში. ყველა ფორე წვას. ეს იყო თითქმის ნათელია, დიახ! დიახ! დიახ! დიახ! Ralphie PARKER: "დარწმუნებული იყავით, დალევა თქვენი Ovaltine. " Ovaltine? Crummy კომერციული? [მუსიკის დაკვრა] Ralphie PARKER: Son of a bitch. [იცინის] დევიდ ჯ Malan: ასე რომ, ამის შემდეგ არის glimpse რა კრიპტოგრაფიის შეიძლება იყოს ამას დალევა yesteryear. ასე სწრაფად განცხადება. თუ თქვენ უფასოდ ამ პარასკევს 1:15 PM და რომ მინდა შემოგვიერთდნენ for CS50 ლანჩი, უხელმძღვანელებს ამ URL აქ. პირველი მოდის, პირველი ემსახურება როგორც ყოველთვის. მაგრამ დროთა განმავლობაში, ჩვენ დავრწმუნდეთ, რომ ყველაზე, ყველას, ვინც მინდა მონაწილეობა შეიძლება დანიშნოს ბრძენი. ასე სტრიქონები. ჩვენ გვაქვს Zamyla-- ვის თქვენ ახლა შეხვდა სავარაუდოდ პრობლემა Set 1-- რომლის სახელი ჩაწერეთ ამით. და ვფიქრობ, თქვენ აკრეფილი მისი სახელი კომპიუტერული პროგრამა, რომელიც არის გამოყენებით რაღაც getString. რათა ახლიდან იმ keystrokes, თუ როგორ უნდა წავიდეს შესახებ წარმოადგენს ტექსტი, სიტყვა, პირველი პუნქტის, ან მრავალჯერადი წერილები როგორც ეს აქ? ჩვენ ვისაუბრეთ ბოლო დროს შესახებ რიცხვები და პრობლემები რომლებიც წარმოიქმნება მთელი overflow და მცურავი პუნქტიანი ღირებულებებს და პრობლემები, რომელიც წარმოიქმნება ფარგლებში სიზუსტით. სიმები, ჩვენ მინიმუმ აქვს უფრო მეტი მოქნილობა, რადგან strings-- მხოლოდ რეალურ world-- შეიძლება იყოს საკმაოდ თვითნებური სიგრძე. საკმაოდ მოკლე, საკმაოდ ხანგრძლივი. მაგრამ მაშინ, ჩვენ ვაპირებთ იპოვოს, რომ კომპიუტერი შეიძლება ზოგჯერ ამოიწურა მეხსიერება და არც კი შესანახად დიდი საკმარისი სიმებიანი. მაგრამ ახლა, მოდით დავიწყოთ ვიზუალურად სიმებიანი, როგორც რაღაც ეს ყუთები აქ. ასე ექვსი ასეთი ყუთები, რომელთაგან თითოეული წარმოადგენს ხასიათი ან "char." ასე რომ გავიხსენოთ, "char" - c-h-a-r-- არის ერთი ჩაშენებული მონაცემთა ტიპები C. და რა ლამაზი არის, რომ თქვენ შეგიძლიათ გამოიყენოთ რომ სახის როგორც შენობა ბლოკი, თავსატეხი ცალი, თუ იქნება, შექმნან დიდი ტიპის მონაცემები, რომ ჩვენ გავაგრძელებთ მოვუწოდებთ "string." ახლა, რა არის სასარგებლო შესახებ ფიქრი რამ, როგორიცაა strings ამ გზით? ისე, გამოდის, რომ ჩვენ შეგვიძლია რეალურად ბერკეტები ამ სტრუქტურის რეალურად შედიხართ ინდივიდუალური გმირები საკმაოდ მარტივია. მე ვაპირებ წავიდეთ წინ და შევქმნათ ფაილი სახელად "stringzero.c" მაგრამ შეგიძლიათ ეძახით რასაც გსურთ. და რა თქმა უნდა ნახვა არის უკვე ამ მაგალითს, წინასწარ, ასე რომ თქვენ არ უნდა ჩაწერეთ ყველაფერს. და მე ვაპირებ წავიდეთ წინ და პირველი int ძირითადი ბათილად. და რამდენიმე დღის განმავლობაში, ჩვენ დავიწყებთ აჯავრებენ გარდა რა ბათილად არის აქ, ამიტომ ეს int შემდეგი მთავარ და სხვ. მაგრამ ახლა, მოდით, გავაგრძელოთ კოპირება ჩასვით რომ. მე ვაპირებ განაცხადოს სიმებიანი მოუწოდა s. და მე ვაპირებ დაბრუნებას GetString რასაც მომხმარებლის ტიპის. ეს იქნება მარტივი პროგრამა, ინსტრუქციები, მე უბრალოდ აპირებს ბრმად ველით, რომ მომხმარებლის იცის, რა უნდა გავაკეთოთ, რომ შევინარჩუნოთ ის მარტივი. და ახლა მე ვაპირებ ამისთვის loop. და შიგნით ჩემი ამისთვის loop მე ვაპირებთ აქვს int i იღებს ნულოვანი. და მე, კიდევ ერთხელ, მხოლოდ კონვენციის, ინდექსი ცვლადი დათვლის, მაგრამ მე ვერ ვუწოდებთ ამ რასაც მინდა. მე ვაპირებ, რომ მე ნაკლებია than-- კარგად Zamyla სახელის ექვსი წერილებს ხანგრძლივი. ამიტომ, მე ვაპირებ, რომ მძიმე კოდი, რომელიც იქ არის. და მერე ++. და ახლა შიგნით ამ Curly braces მე ვაპირებ, რომ printf, და მინდა ამობეჭდოთ ერთი ხასიათი დროს. ამიტომ, მე ვაპირებ გამოიყენოთ% გ ალბათ პირველად. და მერე მინდა ამობეჭდოთ ყოველ ხასიათი საკუთარი ხაზი. ამიტომ მე ვაპირებ დააყენა პატარა წარმატებული n არსებობს. ახლო გაცემა. და ახლა მინდა, რომ რამე აქ. მინდა ამობეჭდოთ კონკრეტული წერილი სიმებიანი, s, რადგან მე iterating ნულიდან მდე ექვსი. სხვა სიტყვებით, მინდა ბეჭდვა i'th ხასიათი s. ახლა როგორ შემიძლია ამის გაკეთება? ასევე ჰგავს ყუთები ამ წარმომადგენლობის აქ, სახის, conjure up ცნება კრივი წერილები, ანალოგიურად გააკეთებს, რომ სინტაქსურად in C უბრალოდ აკონკრეტებს, მინდა ამობეჭდოთ ის i'th ხასიათი. გამოყენებით კვადრატულ ფრჩხილებში თქვენი კომპიუტერის კლავიატურაზე რომ აშშ კლავიატურის ზოგადად ზემოთ თქვენი დაბრუნების გასაღები. ასე რომ, ეს არ არის საკმაოდ უფლება მაგრამ, როგორც თქვენ შეიძლება არ შეამჩნია. მაგრამ მე ვაპირებ სახის ბრმად გაყალბებას ელის აქ. და მე ვაპირებ ამის გაკეთება string 0. მაგრამ სანამ მე ამის გაკეთება, ვნახოთ, თუ ჩვენ არ გეგმავს ზოგიერთი გავრცელებული შეცდომები. არის ეს აპირებს ადგენენ? არა, მე დაკარგული მთელი bunch რამ. ბიბლიოთეკების გავიგე. ასე რომ, რაც header ფაილი შეიძლება მინდა დავამატო აქ? Yeah. აუდიტორია: თქვენ უნდა სტანდარტული I / O [INAUDIBLE] დევიდ ჯ Malan: შესანიშნავი. ამიტომ საჭიროა სტანდარტული I / O. რა მიზანი არ მინდა სტანდარტული I / O? იყიდება printf. ასე რომ მოიცავს stdio.h. და ასევე, გთავაზობთ, რომ მე მათ CS50 ბიბლიოთეკაში რატომ? აქვს strings. ასე რომ, ჩვენ ვხედავთ, თუ რა CS50 ბიბლიოთეკაში აკეთებს შექმნა ეს ცნება სიმებიანი. მაგრამ ახლა, შეგიძლიათ უბრალოდ ვფიქრობ მას, როგორც ფაქტობრივი მონაცემების ტიპის. ასე რომ, როგორც ჩანს, ცოტა დაასუფთავეს. და ახლა მე ვაპირებ წავიდეთ წინ და მართლაც გააკეთოს string 0. შედგენილი. ასე რომ კარგია. ასე ./string0 ნება მომეცით დიდი ზომით, ასე რომ ჩვენ შეგვიძლია უფრო მეტი მჭიდროდ რა ხდება. შევა. Z-A-M-Y-L-შევა. და ჩვენ დაბეჭდილი out to Zamyla სახელი. ასე რომ, საკმაოდ კარგი. ახლა მოდით წავიდეთ წინ და გაუშვით ეს პროგრამა კიდევ ერთხელ, და ტიპის გარეთ Daven სრული სახელი. სიურპრიზი, სიურპრიზი. შევა. Hmm. ჩვენ არ დაბეჭდილი Daven მიერ სრული სახელი სწორად. ახლა ეს უნდა იყოს აშკარა retrospect იმის გამო, რაც, სახის სულელური დიზაინის გადაწყვეტილება? ჰო, მე რთული კოდირებული ექვსი შიგნით ჩემი ამისთვის loop. ახლა მე რომ მხოლოდ იმიტომ, ვიცოდი, Zamyla სახელი ის იქნება ექვსი ასო. მაგრამ ნამდვილად ეს არ არის ზოგადი გადაწყვეტა. გამოდის, რომ ჩვენ შეგვიძლია დინამიურად გაერკვნენ სიგრძეზე სიმებიანი დარეკვით ფუნქცია მოუწოდა strlen. ერთხელ, შეგნებულად მოკლედ დაასახელა მხოლოდ რათა ის უფრო მოსახერხებელი უნდა აკრიფოთ. მაგრამ ეს სინონიმი მიღების სიგრძეზე სიმებიანი. მე ვაპირებ დავუბრუნდე ჩემს ტერმინალის ფანჯარა და ხელახალი შემდგენელი. მაგრამ ეს ყვირილი at me. მინიშნებით გამოცხადების ბიბლიოთეკის ფუნქცია strlen ტიპის ხელმოუწერელი int const-- მე დაკარგული. მთლიანად. ასე რომ, განსაკუთრებით, როგორც თქვენი თვალები დაიწყებს გლაზურით მეტი შეცდომის შეტყობინებები, როგორც ეს, აქცენტი გულახდილად პირველი რამდენიმე სიტყვა. ჩვენ ვიცით, რომ პრობლემა არის line 8, როგორც მითითებულია აქ. და ეს სიმებიანი 0.c. მინიშნებით გამოცხადების ბიბლიოთეკის ფუნქცია strlen. ასე რომ, ზოგადად აპირებს ტენდენციად შეცდომა შეტყობინებები. მინიშნებით გამოცხადების რაღაც. ასე რომ, მოკლედ, რა, როგორც ჩანს, არ კეთდება დაკავშირებით ხაზი 8, აქ. რა შეიძლება იყოს გამოსავალი იყოს კიდევ თუ თქვენ არ გამოიყენება strlen საკუთარ თავს? აუდიტორია: ნაწილი სხვადასხვა ბიბლიოთეკაში? დევიდ ჯ Malan: Part საქართველოს სხვადასხვა ბიბლიოთეკაში. ასე რომ, ეს არის გამოცხადებული, ასე ვთქვათ. ამის შესახებ საუბარია რამდენიმე ფაილი გარდა stdio.h და cs50.h. ახლა სად არის ის განსაზღვრული? უნდა იყოს პატიოსანი, თქვენ არც უნდა უბრალოდ ვიცი, რომ ეს off ზედა თქვენი უფროსი, ან Google და გასარკვევად. ან ვიცი, მე გახსნეს წელს CS50 ელექტრო მოწყობილობების ტერმინალის პროგრამა, რომელიც მხოლოდ დიდი, სრულ ეკრანზე მობილური რა არის ბოლოში gedit ფანჯარაში. და აღმოჩნდება, რომ არსებობს ასეთივე ლაკონური ბრძანება, რომელსაც ეწოდება კაცი მექანიკური, სადაც თუ აკრიფოთ სახელი ფუნქცია და დააჭიროთ, თქვენ დავუბრუნდეთ საკმაოდ arcane დოკუმენტაცია. ეს უბრალოდ ტექსტი, რომელიც, როგორც წესი, გამოიყურება პატარა რაღაც მსგავსი. ეს პატარა დიდი ერთი შეხედვით. მაგრამ, გულწრფელად რომ მე ვაპირებ ნება ჩემი თვალით გლაზურით მეტი და მხოლოდ ფოკუსირება ნაწილი მე აინტერესებს მომენტი. რომელიც ამ. რომელიც გამოიყურება სტრუქტურულად, როგორიცაა რაღაც მე კარგად იცნობს. მართლაც კაცი გვერდზე, ასე რომ საუბარი, გეტყვით რა header ფაილი ფუნქცია როგორიცაა strlen არ არის დადგენილი. ამიტომ, მე ვაპირებ, რომ დავუბრუნდეთ ახლა gedit. და მე ვაპირებ წავიდეთ წინ და რჩეულებში აქ მოიცავს და ფაილის შენახვა. მე ვაპირებ გარკვევას ეკრანზე კონტროლის L თუ თქვენ უკვე გაინტერესებთ. და მე ვაპირებ ხელახლა აწარმოებს გააკეთოს string.0, ადგენს ამ დროს. ./string.0 Zamyla. რომ თითქოს მუშაობა ნება მომეცით წავიდეთ წინ და გამეორება და დავენპორტი. შევა. და, რომ ძალიან, თითქოს მუშაობა. ასე რომ ჩვენ შეგვიძლია ამის გაკეთება ცოტა უკეთესი, ვიდრე ეს, თუმცა, ჩვენ შეგვიძლია დავიწყოთ tidy რამ up უბრალოდ ცოტა. და მე ვაპირებ რეალურად წარმოგიდგინოთ ერთი სხვა რამ არის. მე ვაპირებ წავიდეთ წინ და გადარჩენა ეს სხვა ფაილი. და მე ვაპირებ მოვუწოდო ეს ფაილი string1.c მხოლოდ შეესაბამება კოდი თქვენ შეძლებთ იპოვოთ ონლაინ რეჟიმში. და მოდით ფოკუსირება წელს ზუსტად იგივე კოდი. გამოდის, რომ მე უკვე სახის აყვანა თავისთავად ის ფაქტი, რომ ჩემი ლეპტოპი, და თავის მხრივ, CS50 ელექტრო მოწყობილობების აქვს უამრავი მეხსიერება, ბევრი RAM, ბევრი bytes სივრცის შემიძლია შესანახად strings. მაგრამ რეალობა თუ არა მე აკრეფილი ხანგრძლივი საკმარისი, და საკმარისი keystrokes, შემეძლო თეორია ტიპი უფრო გმირები ვიდრე ჩემი კომპიუტერი ფიზიკური აქვს მეხსიერების. და ეს პრობლემატურია. ისევე, როგორც int შეგიძლიათ მხოლოდ იმედი იმდენად მაღალია, თეორიულად, თქვენ შეგიძლიათ მხოლოდ cram ამდენი გმირები თქვენი კომპიუტერის RAM და შემთხვევითი მეხსიერება. ასე რომ, მე უკეთ მოსალოდნელია ეს პრობლემა, მიუხედავად იმისა, თუმცა ეს შეიძლება იყოს იშვიათი კუთხეში შემთხვევაში, ასე ვთქვათ. არ ხდება, რომ ხშირად, შეიძლება მოხდეს. და თუ ეს მოხდება და მე არ გეგმავს და პროგრამა მას, ჩემი პროგრამა ვერ გააკეთებს, ვინ იცის, რა. გაყინვას, გათიშეთ, გადატვირთვისას, რაც არ უნდა. რაღაც მოსალოდნელი შეიძლება მოხდეს. მერე რა მე ვაპირებ ამის გაკეთებას ახლა, ამიერიდან მართლაც, არის ადრე მე ოდესმე ბრმად გამოყენება ცვლადი, როგორიცაა ის, რომ უკვე დაავალა დაბრუნების ღირებულება სხვა ფუნქცია, როგორიცაა GetString, მე ვაპირებ, რათა დავრწმუნდეთ, რომ მისი არც მოქმედებს. მე ვიცი, მხოლოდ რომელმაც წაიკითხა CS50 დოკუმენტაცია GetString, რაც საბოლოო ჯამში, ჩვენ აღვნიშნო თქვენ დროს, რომ GetString დააბრუნებს სპეციალური სიმბოლო მოუწოდა NULL, N-U-L-L ყველა ქუდები, თუ რაღაც მიდის არასწორი. ასე რომ, ჩვეულებრივ, ის დააბრუნებს string. მაგრამ სხვაგვარად, თუ ის დააბრუნებს N-U-L-L-- ჩვენ საბოლოოდ ვხედავთ რა, რომ ნამდვილად means-- ეს უბრალოდ ნიშნავს, რაღაც ცუდი მოხდა. ახლა, ეს იმას ნიშნავს, ჰგავს Scratch, შემიძლია შეამოწმოს მდგომარეობა აქ C, თუ არ თანაბარი NULL. ასე რომ, თუ თქვენ არ მინახავს ეს ადრე, ეს მხოლოდ იმას ნიშნავს არ უდრის. ასე რომ საპირისპირო თანაბარი შეადგენს, რაც, გავიხსენოთ, განსხვავდება ერთი შეადგენს, რაც დავალება. ასე რომ, თუ არ უდრის NULL, მხოლოდ ამის შემდეგ მინდა შეასრულოს ამ ხაზების კოდი. ასე რომ, სხვა სიტყვებით, სანამ მე ჩაყვინთვის ბრმად და დაიწყოს iterating მეტი, და მკურნალობის თითქოს ეს არის თანმიმდევრობა პერსონაჟი, მე ვაპირებ პირველი ჩეკი, დაველოდოთ წუთში, არის ნამდვილად არ არის უდრის ამ განსაკუთრებული ღირებულება, NULL? იმიტომ, რომ თუ ეს, ცუდი რამ შეიძლება მოხდეს. და ახლა, ვივარაუდოთ, რომ ცუდი რამ ხდება იმას ნიშნავს, თქვენი პროგრამის დამსხვრევაზე, და ვერ აუცილებლად ფეხზე. გულწრფელად რომ ვთქვა, ეს გამოიყურება მახინჯი. ეს სახის დამაბნეველი ახლა, რომ ერთი შეხედვით. მაგრამ ეს კიდევ უფრო ნაცნობი ადრე ხანგრძლივი. მაგრამ მე ვაპირებ შესთავაზოს ახლა ერთი სხვა გაუმჯობესება. სწორედ გაუმჯობესება სისწორე. ჩემი პროგრამა არის უფრო სწორი, იმიტომ, იშვიათი შემთხვევაა, რომ არ არის საკმარისი მეხსიერება არსებობს, მე გაუმკლავდეს მას, და მე უბრალოდ არაფერი. მე მინიმუმ არ მისაწოდებლად. მაგრამ მოდით საბოლოო ვერსია აქ. და ფაილი სახელად string2.c. მე ვაპირებ ჩასვით რომ იგივე კოდი, რაღაც მომენტში, და მე ვაპირებ, რათა ხაზი გავუსვა ამ ხაზი, 11, აქ, რაღაც მომენტში. ახლა რეალობა ის არის, რომ ჭკვიანი compilers მოსწონს Clang შეიძლება გაასწორონ ეს ჩვენთვის კულუარებში გარეშე ოდესმე იცოდა. მაგრამ მოდით ვიფიქროთ ამ ფუნდამენტურად პრობლემატურ დიზაინი. ამ ხაზი კოდი, რა თქმა უნდა, განაცხადა, რომ ვრთავ ზოგიერთი ცვლადი i 0. ეს არის საკმაოდ მარტივია. და რა კიდევ ერთხელ არის ამ განცხადებაში, აქ, მე ++, აკეთებს? ჩვენ ვნახეთ ეს, მაგრამ ჩვენ ნამდვილად არ არის ამაზე. აუდიტორია: დამატება i. დევიდ ჯ Malan: დამატება i. ასე რომ, ყოველ iteration მეშვეობით ამ მარყუჟის, ყველა ციკლი, თქვენ დამატება i ერთი. ამიტომ იგი იღებს უფრო დიდი და უფრო დიდი და დიდი სანამ loop წყვეტს. რამდენად შეესაბამება ეს შეწყვიტოს? ასევე არსებობს ამ შუა პირობა, რომელიც ჩვენ გამოყენებული ადრე. თქვენ მინახავს და walkthroughs წელს P კომპლექტი. მაგრამ რა არის ეს გამონათქვამი? გავაკეთოთ შემდეგი მარყუჟი იმდენად სანამ i ნაკლებია, ვიდრე რა? აუდიტორია: სიგრძეზე სიმებიანი. დევიდ ჯ Malan: სიგრძეზე სიმებიანი. ასე რომ, ეს ითარგმნება საკმაოდ სუფთად ინგლისური რომ გრძნობა. ახლა პრობლემა ის არის, რომ ყოველ ჯერზე მე iterate მეშვეობით ამ მარყუჟის თეორიულად, მე ვსვამ კითხვას. არის მე ნაკლები სიმებიანი ხანგრძლივობა s? არის მე ნაკლები სიმებიანი ხანგრძლივობა s? ახლა i იცვლება ყოველ iteration? ეს არის. იმის გამო, რომ ++. ასე რომ, ყოველ iteration i დღითიდღე უფრო. მაგრამ არის ის მიღების უფრო დიდი, ან პატარა, ან იცვლება? პოსტები ამიტომ თვალსაზრისით დიზაინი, ერთი ღერძი ერთად, რომელიც ჩვენ ვცდილობთ შევაფასოთ კოდი კლასი, ამ გრძნობს სახის სულელური. ისევე, როგორც თქვენ, ფაქტიურად, ყოველ iteration ამ მარყუჟის ითხოვს იგივე Damn კითხვას ისევ, და ისევ და ისევ, და სიტყვასიტყვით ის არასოდეს შეიცვლება. ყოველ შემთხვევაში, თუ მე არ ეხება და ცდილობს შეცვალოს შინაარსი s. ასე, რომ შეიძლება ცოტა უკეთესი, ვიდრე ეს. და რა მე ვაპირებ ამის გაკეთებას არ განაცხადოს მხოლოდ ერთი ცვლადი i, მაგრამ მეორე ცვლადი მე თვითნებურად, მაგრამ პირობითად, მას n. მივანიჭოთ n ტოლია string სიგრძე s. და მერე აქ, მე ვაპირებ ამის გაკეთება ჭკვიანი პატარა ოპტიმიზაციის, ისე ვთქვათ, რომ იმ დღის ბოლოს, აღარ არის სწორი ან არანაკლებ სწორი ვიდრე ადრე. მაგრამ ეს უკეთესი დიზაინი. ის ფაქტი, რომ მე გამოყენებით ნაკლები დრო, ნაკლები CPU ციკლები, ასე ვთქვათ, უნდა უპასუხოს იმავე კითხვა, მაგრამ მხოლოდ ერთხელ. ნებისმიერი შეკითხვა, რომ ზოგადად პრინციპი გაუმჯობესების, ამბობენ, პროგრამის ეფექტურობა? ჰო? აუდიტორია: რატომ გამოყენება [INAUDIBLE]? დევიდ ჯ Malan: კარგი კითხვაა. ასე რომ, რატომ დააყენა ++ წლის ბოლომდე i ნაცვლად დასაწყისში i? ამ შემთხვევაში, მას, ფუნქციონალური გავლენა. და საერთოდ, მე, როგორც წესი, გამოიყენოთ postfix ოპერატორი ასე, რომ ეს ცოტა უფრო ნათელი, მაშინ, როდესაც ოპერაცია ხდება. იმ უცნობ, არსებობს კიდევ ერთი განცხადებები, რომლითაც თქვენ შეიძლება არ ++ i. ეს არის ფუნქციურად ექვივალენტი ამ შემთხვევაში იმიტომ, რომ იქ სხვა არაფერი გარშემო, რომ incrementation. მაგრამ თქვენ შეგიძლიათ ამუშავება შემთხვევებში და ხაზების კოდი , რომელშიც, რაც ცვლის. ასე რომ ზოგადად, ჩვენ არ ლაპარაკი ეს ერთი. გულწრფელად რომ ვთქვა, ეს ქმნის თქვენი კოდი sexier და ერთგვარი slicker, და ნაკლები სიმბოლო. მაგრამ რეალობა ის არის, რომ ეს ბევრად უფრო რთული, მე ვფიქრობ, რომ ჩემთვისაც კი გადაიტანოთ ჩემი აზრით გარშემო ზოგჯერ, ბრძანებით ოპერაციებში. ასე რომ, როგორც განზე, თუ თქვენ ნამდვილად არ მომწონს ეს, მიუხედავად იმისა, რომ ეს არის ერთგვარი sexy ეძებს, ასევე შეგიძლიათ ამის i + = 1, რომელიც არის მახინჯი ვერსია იგივე იდეა postfix incrementation. მე ამას ვამბობ და თქვენ უნდა მიიღოს გართობა, მაგრამ თქვენ მოვა, რომ კოდი, რაც რაღაც ლამაზი ხანგრძლივი. [სიცილი] დევიდ ჯ Malan: მარჯვენა? Yeah. კითხვა ცენტრიდან. აუდიტორია: თქვენ უნდა ვთქვა, int n? დევიდ ჯ Malan: თქვენ არ უნდა ვთქვათ, int n. ასე რომ, რადგან ჩვენ უკვე განაცხადა, int, თქვენ არ უნდა ვთქვა, რომ ეს კიდევ ერთხელ. დაჭერა, რომ n აქვს იქნება იგივე ტიპის მონაცემის როგორც მე. ასე რომ, ეს მხოლოდ მოხერხებულობისთვის აქ. Yeah. აუდიტორია: შეგიძლიათ წასვლა მეტი ბეჭდვითი ხასიათის s bracket i კიდევ ერთხელ? დევიდ ჯ Malan: რა თქმა უნდა. ასე% C, გავიხსენოთ ბოლო დრო, მხოლოდ placeholder. ეს იმას ნიშნავს, დააყენა char აქ. წარმატებული ო, რა თქმა უნდა, მხოლოდ საშუალება დააყენა ხაზის შესვენების აქ. ასე რომ ტოვებს, ახლა, ეს ნაჭერი ახალი სინტაქსის. და ეს სიტყვასიტყვით ამბობს, დაიბრუნოს სიმებიანი მოუწოდა და წავიდეთ მიიღოს მისი i'th ხასიათი, ასე ვთქვათ. და მე შენარჩუნება ამბობდა i'th ხასიათი რადგან თითოეულ iteration ამ მარყუჟის ეს თითქოს ჩვენ დაბეჭდვის გარეთ, პირველი s bracket 0, როგორც პროგრამისტი შეიძლება ითქვას. მერე bracket 1, მაშინ s bracket 2, 3, მაშინ 4. მაგრამ რა თქმა უნდა ეს ცვლადი, ასე რომ მე უბრალოდ გამოხატვა i. გასაღები, თუმცა, გააცნობიეროს, განსაკუთრებით, თუ თქვენ არ უკვე acclimating ამ სამყაროში პროგრამირების, სადაც ჩვენ ყველა როგორც ჩანს, ითვლიან ნულიდან, gotta დაიწყება დათვლის ნულიდან არის. რადგან სიმები, პირველი ხასიათი, z in Zamyla არის უკეთესი ან უარესი აპირებს ცხოვრობს ადგილმდებარეობა ხმების ნულოვანი. ყველა უფლება, მოდით მოუტანს us უკან აქ Zamyla და ვნახოთ, რა ხდება სინამდვილეში ქვევმოთ hood. ასე რომ არსებობს ამ ცნება ტიპის გააპროტესტეს. თქვენ შეიძლება რეალურად ითამაშა, რომელზეც ეს, უკვე, იქნებ ჰაკერი გამოცემა P მითითებული ერთი. მაგრამ type casting უბრალოდ ეხება უნარი C და სხვა ენებზე კონვერტირება ერთი ტიპის მონაცემის სხვა. ახლა როგორ შეიძლება ჩვენ ვხედავთ საკმაოდ მარტივად? ასე რომ, ეს, გავიხსენოთ, არის დასაწყისში ინგლისური ანბანი. და კონტექსტში, გავიხსენოთ, საწყისი ისევე როგორც ერთი კვირის წინ არის ASCII. ამერიკული სტანდარტული კოდი ინფორმაციის ცვლა. რომელიც მხოლოდ მართლაც დიდი გზა ამბობდა რუკების წერილები ნომრები, და რიცხვს წერილები. ასე მეშვეობით M აქ, dot, dot dot, ხაზები, გავიხსენოთ, ათობითი რიცხვი 65 მდე. და ჩვენ ვერ გაიგო ამ პირდაპირ, მაგრამ ნამდვილად არსებობს მსგავსი ნომრები ამას წერილებს. და მართლაც, არსებობს. მსოფლიოს გადაწყდა, რამდენიმე წლის წინ, რომ პატარა, ამას, იქნება 97. და პატარა ბ აპირებს იყოს 98, და სხვ. და ნებისმიერი სხვა გასაღები თქვენს კლავიატურაზე, იქ იქნება მსგავსი ნიმუში ბიტი. ან ექვივალენტურად, ათობითი რიცხვი. ასე რომ, კითხვა მხრივ, მაშინ, როგორ შეგვიძლია რეალურად ვხედავ ამ ქვევმოთ hood? ამიტომ, მე ვაპირებ წასვლა მეტი gedit ერთხელ. და ვიდრე ტიპის ეს ერთი ნულიდან, მე ვაპირებ წავიდეთ წინ და უბრალოდ გახსენით რაღაც დღევანდელი კოდი მოუწოდა ASCII ნულოვანი. და ASCII ნულოვანი ასე გამოიყურება. ასე რომ, მოდით გადაიტანოთ ჩვენი გონება გარშემო. ასე რომ, პირველი, მე კომენტარი კოდი, რომელიც არის ლამაზი. რადგან ეს სიტყვა მეუბნებოდა, თუ რას უნდა ველოდოთ, არიან რუკების ზედა წერილები. ახლა მე არ საკმაოდ ვიცი რა ნიშნავს, რომ, მოდით ითქვას. ინგლისური, შესაძლოა, გარკვეულწილად techie English, რა ხაზის 18 როგორც ჩანს, უნდა აკეთებს ჩვენთვის? უბრალოდ ხაზი 18. რას იწვევს? რა არის ის აპირებს გამოაგდონ off აქ? აუდიტორია: A loop. დევიდ ჯ Malan: A loop. და რამდენჯერ რომ აპირებს iterate? აუდიტორია: [INTERPOSING ხმები] ექვსჯერ. დევიდ ჯ Malan: არ ექვსჯერ. აუდიტორია: 26 ჯერ. დევიდ ჯ Malan: 26 ჯერ. ჰო, ბოდიში. 26 ჯერ. რატომ? ისე, ეს პატარა უცნაური, მაგრამ მე ათვლა დაიწყო 65. რომელიც უცნაური, მაგრამ არასწორი. ეს არ არის ცუდი პოსტი say. და მე ამით, რომ მხოლოდ იმიტომ, რომ ეს მაგალითი, მე სახის anticipating რომ დედაქალაქში 65. ახლა ეს არ არის ყველაზე ელეგანტური გზა ამის გაკეთება, ასეთი მძიმე კოდი ეზოთერულ ღირებულებები, რომ არავინ ოდესმე მოსალოდნელია, რომ გახსოვთ. მაგრამ ახლა შეამჩნია, რომ მე ვარ ამით საშუალებით 65 Plus 26. იმის გამო, რომ, როგორც ჩანს, მე კი არ მინდა, გავაკეთოთ არითმეტიკული ჩემი უფროსი. ასე რომ მე ნება შემდგენელი გაკეთება. მაგრამ შემდეგ თითოეულ loop, თითოეულ iteration ციკლი, მე დამატება i. ასე რომ, ახლა ეს გამოიყურება პატარა cryptic. მაგრამ ჩვენ უნდა ჰქონდეს ძირითადი შენობა ბლოკები, რომელიც ხვდება. % C მხოლოდ placeholder for char. % I არის placeholder int. და აღმოჩნდება, რომ გამოყენებით ამ ახალი სინტაქსი, ამ ჩართული, ასე რომ საუბარი, ასე რომ მონაცემები ტიპის შიგნით ფრჩხილებში, მე შეიძლება აიძულოს შემდგენელი მკურნალობა i არ არის მთელი რიცხვი, მაგრამ, როგორც char. რითაც გვიჩვენებს ჩემთვის ხასიათი ეკვივალენტს, რომ ნომერი. ახლა ქვემოთ აქ, ეს კოდი არის საკმაოდ ბევრი იდენტურია. მე უბრალოდ მინდოდა სუპერ გამოკვეთილ ფაქტი რომ მე დაწყებული 97, რომელიც ამას. მდე მეშვეობით 26 უფრო წერილებს. და მე აკეთებს, კიდევ ერთხელ, კასტინგი i, ასე ვთქვათ. ან ტიპის ჩამოსხმის i, ასე ვთქვათ. საწყისი int to char. ასე რომ საბოლოო ჯამში იქნება, გულწრფელად ვამბობ, ინფორმაცია ჩვენ უკვე ვიცით. მე ვაპირებ ascii-0 dot-- არ dot გ. განაცხადის, თქვენ ალბათ გააკეთა, რომ შეცდომა მე უბრალოდ შემთხვევით. მიიღოს ASCII-0. ახლა მე ვაპირებ ამის გაკეთებას ./ascii-0. მე მიუახლოვდით, და სამწუხაროდ, ის აპირებს გადახვევა off ეკრანზე. მაგრამ ჩვენ ვხედავთ მთელი სქემა, სადაც რუკები 97, ბ რუკები 98, და თუ ჩვენ გადახვევა შემდგომი რა თქმა უნდა, რუკები 65. ასე რომ, ეს მხოლოდ იმის თქმა, რაც ჩვენ უკვე ქადაგებდა, არსებობს ამ ეკვივალენტობის არის სინამდვილეში საქმე რეალურად. ასე სწრაფი ცვლილების ამ. ნება მომეცით გახსნა ascii-1.c. და შეამჩნია ეს ჭკვიანი, ერთგვარი საქართველოს, ნათელი მოჰფინოს ამ. ეს არის ASCII-1.c და შეამჩნია ეს გიჟები რამ. და ეს ნამდვილად ხვდება გულში რა კომპიუტერი აკეთებს. მიუხედავად იმისა, რომ ჩვენ ადამიანები რომ არ ითვლიან თვალსაზრისით letters-- მე არ დაიწყოს ფიქრი, ყველა უფლება შემდეგ ბ, და გამოიყენოთ ის ითვლიან ფიზიკური ობიექტები. თქვენ რა თქმა უნდა ვთქვა, რომ მინდა ვრთავ ზოგიერთი ცვლადში, C მაგრამ მე შეეძლო უწოდა არაფერი ასე c ინიციალიზაცია რომ დედაქალაქში ა იმის გამო, რომ დღის ბოლოს, კომპიუტერული არ აინტერესებს, რა თქვენ შენახვა, ის მხოლოდ ზრუნავს, თუ როგორ გსურთ წარმოადგინოს ინფორმაციას. როგორ გნებავთ კომპიუტერული ინტერპრეტაცია, რომ ნიმუში ბიტი? ასე რომ, ეს არ არის რამე საერთოდ, გირჩევთ აკეთებს. ეს მართლაც მხოლოდ მაგალითია გადმოცემა, რომ თქვენ შეგიძლიათ სრულიად ინიციალიზაცია მთელი char. იმიტომ, რომ ქვეშ hood of char, რა თქმა უნდა, არის მხოლოდ ნომერი 0 255. ასე რომ თქვენ შეგიძლიათ, რა თქმა უნდა ამას შიგნით int. და რა ეს ასევე მეტყველებს, რომ ჩვენ შეუძლია კონვერტირება ერთი ტიპის სხვა, აქ, საბოლოოდ ბეჭდვის იგივე. და ფაქტობრივად, ეს მე დაფიქსირება online-- კი იმას ნიშნავდა, ამბობენ, რომ ეს, კიდევ ერთხელ, აქ. მიადევნე თვალი გაწმენდა ამ up ონლაინ, და ჩვენ ვხედავთ ონლაინ walkthrough, როგორც საჭიროა, რა იყო განკუთვნილი არსებობს. OK. ასე რომ, ბოლო მაგალითი ახლა ჩართვის და B და მაშინ ჩვენ გამოგიგზავნით რამ up მაღალი დონის. ასე და B და c წელს კაპიტალიზაციის და ეკვივალენტობის მისი, მოდით შევხედოთ ამ მაგალითად, აქ. სხვა კოდი მაგალითია. ჩვენ გახსნა ერთი, რომ უკვე გააკეთა, ასე რომ არ უნდა აკრიფოთ ყველა out ნულიდან. და შეამჩნია მოლოდინში ჩვენ გამოყენებით მრავალჯერადი header ფაილი, მათ შორის, ჩვენი ახალი მეგობარი, string.h. ახლა ეს გამოიყურება, პირველ რიგში, ერთი შეხედვით, პატარა cryptic. მაგრამ ვნახოთ, თუ ჩვენ ვერ მიზეზი მეშვეობით, თუ რა ხდება აქ. პირველი მივიღებ string საწყისი მომხმარებელს, მე და ის, რომ სიმებიანი ცვლადი მოუწოდა. ასლი პასტა წლამდე. სტრიქონში 22, მე აშკარად აკეთებს ზუსტად რა მე მომენტში წინ, მე iterating მეტი სიმბოლოების s. და ახალი ხრიკები აქ იყენებთ სიმებიანი სიგრძე, უმნიშვნელო ოპტიმიზაცია შენახვის სიმებიანი სიგრძე n, ვიდრე მოუწოდებდა strlen ისევ, და ისევ და ისევ. და მხოლოდ შემოწმების, რომ მე ნაკლებია n. ახლა აქ, რამ ცოტა საინტერესო. მაგრამ ეს მხოლოდ განცხადება ამ იგივე ახალი იდეა. რა ინგლისურ აკეთებს s bracket i წარმოადგენს? აუდიტორია: დათვლა თითოეულ ხასიათი [INAUDIBLE]. დევიდ ჯ Malan: დათვლა თითოეული ხასიათი. და კიდევ უფრო მოკლედ, s bracket i წარმოადგენს რა? რომ ამბობთ. არ დააყენა თქვენ ადგილზე აქ. აუდიტორია: Well-- დევიდ ჯ Malan: ასე რომ, თუ სიტყვა is-- თუ სიმებიანი Zamyla, რომელიც starts-- აუდიტორია: --you გაუმკლავდეთ გმირები separately-- დევიდ ჯ Malan: კარგი. ზუსტად. კვადრატული ფრჩხილი ნოტაცია საშუალებას გაძლევთ წვდომის ყოველი ხასიათი ინდივიდუალურად, ასე რომ, ის bracket 0 იქნება პირველი პერსონაჟი სიმებიანი. s bracket 1 იქნება მეორე, და სხვ. ასე რომ, კითხვა, მე გეკითხებით, აქ, ამ მდგომარეობაში არის რა? არის i'th ხასიათი s უფრო მეტი ან ტოლი ამას? და რას ნიშნავს ეს, აქ, ორმაგი ampersands? აუდიტორია (ერთად): და. დევიდ ჯ Malan: And. ეს მხოლოდ ეკვივალენტი ამ. და არ არის სიტყვით C, თქვენ უნდა გამოყენება, annoyingly, ampersand ampersand. და ეს, პირიქით, ითხოვს არის ის i'th ხასიათი ნაკლებია ან ტოლი ამას z? და კიდევ ერთხელ, აქ, სადაც გაგება ძირითადი განხორციელება კომპიუტერული აზრი. გაითვალისწინეთ, რომ მიუხედავად იმისა, რომ აქვს dot dot dot იქ, ჰგავს მეშვეობით z ამას ეძებს ყველა მომიჯნავე ღირებულებების მდე 97 მდე. და იგივე ზედა დაწყებული 65. ამიტომ takeaway, მაშინ, ის არის, რომ ინგლისურ, როგორ დაახასიათებდით რა ხაზი 24 აკეთებს? ჰო? აუდიტორია: 24 ის შემოწმების არა თითოეული ხასიათი არის ამას. დევიდ ჯ Malan: ეს შემოწმების თუ არა თითოეული ხასიათი არის ამას წერილში. ასე რომ კიდევ უფრო მოკლედ, არის i'th ხასიათი s ამას? ეს ჩვენ ვართ გამოხატავს აქ ლოგიკურად, პატარა cryptically, მაგრამ საბოლოო ჯამში, საკმაოდ მარტივად. არის ის i'th ხასიათი ამას? თუ ეს ასეა, და აქ, სადაც რამ კიდევ ცოტა გონება bending მხოლოდ ერთი წუთით, თუ ასეა, წავიდეთ წინ და ამობეჭდოთ ხასიათი. ასე რომ, ეს მხოლოდ placeholder, მაგრამ რა ხასიათი? რატომ ვაკეთებ s bracket i მინუს ეს გამოთქმა აქ? ასევე შეამჩნია ნიმუში აქ. სინამდვილეში ეს რიცხვები არ აქვს მნიშვნელობა, იმდენად. მაგრამ შეამჩნია, რომ 97 არის რამდენად შორს 65? აუდიტორია: 32. დევიდ ჯ Malan: 32. რამდენად შორს არის 98 66? აუდიტორია: 32. დევიდ ჯ Malan: Little c დიდი C? 32. ასე რომ, არსებობს 32 hops საწყისი ერთი წერილი სხვა. გულწრფელად რომ ვთქვა, მე, შეიძლება, გავამარტივოთ რომ. მაგრამ შემდეგ მე ასეთი მძიმე კოდირების დაბალი დონის გაგება რომ მკითხველს ოდესმე აპირებს მესმის. ამიტომ, მე ვაპირებ, რომ განზოგადება, როგორც მე ვიცი, რომ ამას წერილები დიდია. მე ვიცი, რომ დიდი ასოებით არის მცირე მნიშვნელობები, ირონიულად. მაგრამ ეს ეფექტურად ექვივალენტი განაცხადა, რომ სხვაობა 32 s bracket i. კონტექსტში ამ წერილებს, თუ წერილი მოხდება უნდა იყოს, ამას a, და ვაკლებ 32, რა გავლენას ახდენს, რომლებიც, მათემატიკურად, on ამას? აუდიტორია: Capitalizes-- დევიდ ჯ Malan: კაპიტალიზაციას იგი. და მართლაც, ამიტომ ჩვენი პროგრამა ეწოდება ესარგებლა ნულოვანი. ეს პროგრამა ან კაპიტალიზაციას, წერილი, შემოწმების შემდეგ, თუ ეს მართლაც ამას წერილში. წინააღმდეგ შემთხვევაში, ხაზი 30, რა გავაკეთო, თუ ეს არ არის ამას წერილში, რომ მე ვარ ეძებს კონკრეტული iteration loop. უბრალოდ ამობეჭდოთ. ასე რომ არ შეცვალოს პერსონალი ეს არ არის კიდევ ამას. ზღუდავს საკუთარ თავს, პატარა მეშვეობით პატარა z. ახლა ეს არის საკმაოდ arcane. მაგრამ, დღის ბოლოს, ამ არის, თუ როგორ, ერთხელ, ჰქონდა განახორციელოს რამ. თუ მე ნაცვლად გახსნა ესარგებლა ერთი, რა მადლობა ღმერთს. არსებობს ფუნქცია ე.წ. ზედა რომ შეგიძლიათ ყველაფერს გააკეთებს, რომ ჩვენ უბრალოდ საკმაოდ დაბალი დონე. ახლა ზედა არის საინტერესო იმიტომ, რომ ეს არის დეკლარირებული ფაილი, და თქვენ მხოლოდ ვიცი, რომ ეს შემოწმების დოკუმენტაცია, ან ეუბნებიან, ვთქვათ, კლასი, სადაც ის არსებობს, ფაილი სახელად ctype.h. ასე რომ, ეს არის კიდევ ერთი ახალი მეგობარი ჩვენი. და ზემო ზუსტად რა მისი სახელი ვარაუდობს. თქვენ შეგიძლიათ გადასცეთ, როგორც არგუმენტი, შორის ამ ფრჩხილებში, გარკვეული ხასიათი. მე ვაპირებ კორიდორი i'th ხასიათი საქართველოს გამოყენებით ჩვენი ლამაზი ახალი notation ჩართვის კვადრატულ ფრჩხილებში. და მიხვდები, რა არის დაბრუნების ღირებულება ზემო სავარაუდოდ აპირებს უნდა იყოს? კაპიტალის წერილში. კაპიტალის წერილში. ასე რომ, თუ მე გაივლის ამას, იმედია, ზოგადად ზედა, ის დაბრუნებას აპირებს ზედა A. წინააღმდეგ შემთხვევაში, თუ ეს არ არის ამას წერილი პირველ რიგში, მე უბრალოდ ამობეჭდოთ. და მართლაც, შეამჩნია მეორე მეგობარი აქ. არა მხოლოდ ზედა არსებობს, მაგრამ უფრო დაბალია, რაც რეალურად პასუხობს ამ კითხვაზე ჩემთვის. ახლა ვინც დაწერა ეს ყველაფერი, 10s წლის წინ, იცით, რა? განხორციელებული ზემო და ქვედა გამოყენებით კოდი მოსწონს ეს. თუმცა ისევ და ისევ, შეესაბამება ეს იდეა abstracting მოშორებით, სახის, ქვედა დონეზე განხორციელების დეტალები. და იდგა მხრებზე ადამიანი ვინც მოვიდა ჩვენს წინაშე, გამოყენებით ფუნქციებს ისევე როგორც ზემო და ქვემო, რომელიც შესანიშნავად საკმარისი ლამაზად დასახელდა ვთქვა, რას გააკეთებს, შესანიშნავი პარადიგმა უნდა მიიღონ. ახლა, გამოდის, რომ თუ წავიკითხე კაცი გვერდზე, ვთქვათ, ზედა, მე ისწავლოს რაღაც. ასე რომ, ადამიანი toupper. ეს ცოტა გადაჭარბებული. მაგრამ შეამჩნია, აქ რომ ნახსენები header ფაილი რომ მე უნდა გამოიყენოს. როგორც განზე, რადგან ამ შეცდომაში ფუნქცია იყენებს ints ნაცვლად chars იმის გამო, შეცდომა შემოწმებისას. მაგრამ ჩვენ ალბათ მოვა უკან, რომ მომავალში. მაგრამ შეამჩნია, აქ, ზემო გარდაქმნის წერილი გ ზედა თუ ეს შესაძლებელია. ასე რომ, ეს საკმაოდ მარტივია. და ახლა მოდით ცოტა უფრო კონკრეტული. მოდით შევხედოთ იმ ნაწილს, კაცი გვერდზე ქვეშ დაბრუნებული მნიშვნელობა. ღირებულება დაბრუნდა ის არის, რომ მოაქცია წერილი. ან c, თუ კონვერტაციის არ იყო შესაძლებელი, სადაც c არის ორიგინალური შეყვანა. რაც მე ვიცი, აქედან, არგუმენტი ზედა. რა არის takeaway ამ? ღირებულება დაბრუნდა ის არის, რომ მოაქცია წერილი, ან გ, ორიგინალური წერილი, თუ კონვერტაციის არ იყო შესაძლებელი. რა გაუმჯობესება ამიტომ მიიღოს ჩემი კოდი დიზაინი? ჰო? აუდიტორია: თქვენ შეგიძლიათ ამოიღოთ სხვა. დევიდ ჯ Malan: შემიძლია ამოიღონ სხვაგან განაცხადი, და არა მხოლოდ სხვაგან განცხადებაში. აუდიტორია: შეგიძლიათ ამოიღონ [INAUDIBLE]. დევიდ ჯ Malan: შემიძლია ამოიღონ მთელი ჩანგალი გზა, თუ სხვაგან საერთოდ. ასე რომ, რა თქმა უნდა, ნება მომეცით გახსნა საბოლოო ვერსია ამ ესარგებლა-2 და შეამჩნევს, თუ რამდენად, თუ თქვენ, sexy, კოდი, რაც ახლა მიღების, რომ მე შემცირდა ზოგიერთი შვიდი ან ხაზებს მხოლოდ ოთხი, ფუნქციონალური, რომ ვაპირებდი უბრალოდ მოუწოდებდა ზედა, გავლის s bracket i, და ბეჭდვა გარეთ, ერთად placeholder% c, რომ კონკრეტული ხასიათი. ახლა, ალბათ, არ არის შეცდომა, ან თუნდაც რისკის შეცდომა, ამ პროგრამაში. ასე რომ მხოლოდ დავბრუნდებით ადრე takeaway, რა უნდა, ალბათ, ასევე გავაკეთებ ეს პროგრამა, რათა ის უფრო ძლიერი, ასე რომ არ არსებობს გზა, მას შეუძლია ავარიის, მაშინაც კი, იშვიათ შემთხვევებში? აუდიტორია: დარწმუნდით, რომ იგი არ არის NULL. დევიდ ჯ Malan: დარწმუნდით, რომ იგი არ არის NULL. ასე რომ, რეალურად, რათა ამ სუპერ სწორი, მე უნდა გავაკეთოთ რაღაც, თუ არ არის NULL, მაშინ წავიდეთ წინ და შეასრულოს ამ ხაზების კოდი, რომელიც მე მაშინ მიზანი, როგორც, რომ, და მერე ჩემი ახლო გაუწიოს. იმდენად კარგი ჩვევების ერთად ორი იდეები. ჰო? აუდიტორია: იქნებ გამოიყენოთ ნუ ხოლო მარყუჟის, ნაცვლად? დევიდ ჯ Malan: Could მე do ხოლო loop? აუდიტორია: --you გვინდა დავრწმუნდეთ რომ თქვენ რეალურად [INAUDIBLE]. დევიდ ჯ Malan: Could თქვენ იყენებთ do ხოლო? მოკლე პასუხი, არა. იმიტომ, რომ თქვენ შესახებ დანერგვა კიდევ ერთი კუთხეში შემთხვევაში. იმ შემთხვევაში, თუ string არის ნულოვანი სიგრძე. თუ მაგალითად, მე უბრალოდ მოხვდა შევა, გარეშე ოდესმე აკრეფით Zamyla. მე ვაპირებ გადმოგცეთ უკან ფაქტობრივი ტექსტი, როგორც ჩვენ საბოლოოდ ვხედავთ, რომ ნულოვანი სიმბოლო. ეს ჯერ კიდევ სიმებიანი, უბრალოდ სუპერ მოკლე. მაგრამ თუ თქვენ იყენებთ გააკეთებს ხოლო, თქვენ აპირებს ბრმად ცდილობენ, რომ რამე პატივი სცეს, რომ ტექსტი, და არაფერი იქნება იქ. აუდიტორია: ისე, თუ თქვენ არ რომ [INAUDIBLE] ხოლო s-- დევიდ ჯ Malan: Oh მე ვხედავ, შეინახოს მიღების string საწყისი მომხმარებელს. ასე რომ, მოკლე პასუხი, თქვენ შეიძლება, და შეინახოს pestering მათ მოგცემთ სიმებიანი რომ ის მოკლე საკმარისი ჯდება მეხსიერებაში. აბსოლუტურად. უბრალოდ აირჩია არ. თუ ისინი არ მომეცი სიმებიანი მინდა, მე, მე ვწყვეტ, მე უარს. მაგრამ აბსოლუტურად, ამ მიზნით, თქვენ შეიძლება აბსოლუტურად გავაკეთოთ, რომ. ასე რომ, ბიბლიოთეკის header ფაილი, რომელიც ჩვენ ახლა იცნობს ამ, აქ. სტანდარტული I / O, CS50.h, string.h, ctype.h, და არსებობს, რა თქმა უნდა, სხვები. ზოგიერთი აღმოაჩინეს მათემატიკის ბიბლიოთეკა math.h. მაგრამ ნება მომეცით წარმოგიდგინოთ, ახლა, ეს რესურსი, რომ CS50 პერსონალი, Davin, და რობ, და Gabe კერძოდ ერთად. რომ მალე ბმული on რა თქმა უნდა ნახვა. ეს ე.წ. CS50 მითითება. რომელიც მხოლოდ გადმოგცეთ სწრაფი გემოს იგი, მუშაობს შემდეგნაირად. ნება მომეცით წასვლა reference.cs50.net. დაინახავთ მარცხენა მხარეს აბსოლუტური სია ფუნქციების, რომ მოდის გ. მაგრამ თუ მე მაინტერესებს, ამ ეტაპზე, დაახლოებით, strlen, შემიძლია აკრიფოთ იგი. ეს ფილტრები ქვემოთ სიაში მხოლოდ ის, რაც მე აინტერესებს. მე ვაპირებ დააჭირეთ მას. და ახლა მარცხენა, დაინახავთ, თუ რა იმედი გვაქვს, უფრო მარტივია, ადამიანის მეგობრული ახსნა, თუ როგორ ეს ფუნქცია მუშაობს. დააბრუნებს სიგრძეზე სიმებიანი. აი მოკლე შინაარსი, აქ, როგორ უნდა გამოყენება თვალსაზრისით header ფაილი, თვალსაზრისით და რა ფუნქცია ჰგავს თვალსაზრისით მისი არგუმენტები. და შემდეგ აქ, ბრუნდება სიგრძეზე სიმებიანი. მაგრამ იმ თქვენ უფრო კომფორტული, თქვენ შეგიძლიათ რეალურად დააწკაპუნეთ მეტი comfy, და შინაარსი გვერდი, ახლა, შეიცვლება იყოს default ღირებულებები, რაც მიიღებთ გამოყენებით კაცი გვერდზე. სხვა სიტყვებით, CS50 მითითება გამარტივებას კაცი გვერდებზე თანამშრომლების მიერ, სტუდენტები. კერძოდ, იმ ნაკლებად კომფორტული და მათ შორის, ასე რომ თქვენ არ უნდა ვეცადოთ, რომ გადაიტანოთ თქვენი აზრით გარშემო, სიმართლე გითხრათ, ზოგიერთი საკმაოდ cryptic სინტაქსი და დოკუმენტაცია შუალედში. ასე რომ შევინარჩუნოთ ამის გათვალისწინებით, ამ დღეებში. ასე რომ აქ, ერთხელ, არის Zamyla. ახლა კითხვა, რომელიც არის ცოტა მეტი ადამიანის ხელმისაწვდომი. მადლობა Chang, რომელიც უკვე დაბეჭდვის მეტი სპილოები უწყვეტი ბოლო რამდენიმე დღის განმავლობაში. ჩვენ გვაქვს შესაძლებლობა მისცეს მინიმუმ ერთი მიმართულებით წაიყვანეს. თუ ჩვენ ვერ მხოლოდ ერთი მოხალისე მოვა მიაპყროს ეკრანზე. როგორ აქ? მოდის up. რა არის თქვენი სახელი? ALEX: Alex. დევიდ ჯ Malan: Alex. ყველა უფლება. Alex, მოდის up. ჩვენ შესახებ, რომ თქვენი ხელწერა ეკრანზე აქ. ყველა უფლება, კარგია თქვენთან შეხვედრა. ALEX: Nice თქვენ შეგხვდებით. დევიდ ჯ Malan: ყველა უფლება. ასე რომ, სუპერ მარტივი განხორციელება. ბარი არ არის მაღალი, მიიღეთ elephant დღეს. თქვენ თამაშობენ როლს GetString. და მე ვაპირებ გითხრათ, სიმებიანი რომ თქვენ მიღებული. და ვარაუდობენ, რომ თქვენ, GetString, უკვე მოუწოდა. და ადამიანის, როგორც ჩემთვის, აკრეფილი Zamyla, Z-A-M-Y-L-A. უბრალოდ წავიდეთ წინ და დაწეროთ Zamyla შესახებ ეკრანზე, როგორც იმისა, რომ თქვენ მიღებული ეს და ინახება ეს სადღაც მეხსიერებაში. ტოვებს ოთახი, რა იქნება რამდენიმე სხვა words-- რომ კარგადაა, შენარჩუნებას აპირებს. [სიცილი] ასე Zamyla, შესანიშნავი. ასე რომ, ახლა ვარაუდობენ, რომ თქვენ, GetString, რომლებიც ერთხელ მოუწოდა. და ამიტომ გთავაზობთ თქვენ, კლავიატურის, სხვა სახელი, Belinda. ყველა უფლება. და ახლა დრო GetString არის ეწოდოს, მე აკრიფოთ რაღაც Gabe, G-A-B-E. თქვენ ნამდვილად აღების რომ გულში წვდომის მეხსიერება. რომელიც ხატვის ყველაფერი სრულიად შემთხვევით. OK. [სიცილი] ALEX: უკაცრავად ჩემი ხელწერა არის ცუდი. დევიდ ჯ Malan: არა, OK. და რა რობ, R-O-B. OK. კარგი. ასე რომ, მე არ გავუსწრო, რომ თქვენ სახის საერო ნივთების ამ გზით. მაგრამ ჩვენ შეგვიძლია ამ სამუშაოს. ასე რომ, როგორ წავიდეთ შესახებ იმასთან აღნიშნული სიმბოლო მეხსიერება? სხვა სიტყვებით, თუ ჩვენ ვფიქრობთ, ამ მართკუთხა შავი ეკრანი როგორც წარმოადგენენ კომპიუტერის RAM, ან მეხსიერებაში. და გავიხსენოთ, რომ RAM მხოლოდ მთელი bunch of ბაიტი, და ბაიტი მთელი bunch of ბიტი. და ბიტი როგორღაც განხორციელდა, ზოგადად გარკვეული ფორმის ელექტროენერგიის აპარატურა. ასე რომ, ერთგვარი layering ჩვენ ვისაუბრეთ და ახლა თავისთავად. როგორ წავიდეთ შესახებ გადამწყვეტი დაწერა Rob წინააღმდეგ Gabe წინააღმდეგ Belinda წინააღმდეგ Zamyla? ALEX: მე უბრალოდ ის იმისათვის, რომ მითხარით. დევიდ ჯ Malan: და ეს მართლაც ასეა. მაგრამ რა მართავს, სადაც თქვენ დააყენა Belinda სახელი და Gabe სახელი? ALEX არაფერი? დევიდ ჯ Malan: [იცინის] ასე რომ მუშაობს, რომ ჯარიმა. ისე კომპიუტერები არის პატარა უფრო მოწესრიგებული, ვიდრე. ამიტომ, როდესაც ჩვენ implement-- იქ დარჩენა მხოლოდ მომენტში, როდესაც ჩვენ რეალურად განახორციელოს რაღაც GetString კომპიუტერი, Zamyla შეიძლება ასახული, საკმაოდ ბევრი როგორც თქვენ გააკეთა ეკრანზე, არსებობს. და რა არის გასაღები შეამჩნია აქ, რა Alex გააკეთა, არსებობს ერთგვარი დემარკაციის მათ შორის, თითოეული ეს სიტყვა, არა? თქვენ არ წერენ Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- სხვა სიტყვებით, არსებობს გარკვეული სახის გამყოფი რომელიც, როგორც ჩანს, სახის, შემთხვევითი ინტერვალი შორის ამ სხვადასხვა სიტყვა. მაგრამ ეს კარგია, რადგან ჩვენ, ადამიანები, ახლა ვიზუალურად, რომ ეს არის ოთხი სხვადასხვა strings. ეს არ არის მხოლოდ ერთი თანმიმდევრობა უამრავი სიმბოლო. ასე რომ, კომპიუტერი, მაშინ, იმავდროულად, შესაძლოა სიმებიანი მოსწონს Zamyla, ბოლო თითოეული იმ წერილების შიგნით ბაიტი მეხსიერების. მაგრამ ეს რაოდენობა გაცილებით მეტია, რა თქმა უნდა, ვიდრე ექვსი სიმბოლო. არსებობს მთელი bunch of RAM. და ასე ამიერიდან, ამ ქსელის ყუთები აპირებს წარმოაჩენს Alex მხოლოდ როგორც აქ ეკრანზე. და ახლა, ალექსი, ჩვენ შეგვიძლია შემოგთავაზოთ ლურჯი ან ფორთოხალი elephant საწყისი Chang. ALEX: მე მიიღოს ლურჯი სპილო. დევიდ ჯ Malan: ლურჯი სპილო. ასე დიდი რაუნდი ტაში, თუ ჩვენ შეგვიძლია, ალექს აქ. [ტაში] ALEX: დიდი მადლობა. დევიდ ჯ Malan: დიდი მადლობა. ამიტომ takeaway არის, რომ, მიუხედავად იმისა, ნიმუში სახის შეიცვალა დროთა განმავლობაში, აქ ფორუმში იყო ეს დემარკაციის შორის სხვადასხვა strings რომ ალექს მიიღო ჩვენთვის. ახლა კომპიუტერები, სიმართლე გითხრათ, შეიძლება გავაკეთოთ იგივე. ისინი შეიძლება სახის plop strings ნებისმიერ RAM. აქ, სწორედ აქ, აქ, ქვემოთ აქ. მათ შეეძლოთ ზუსტად რომ. მაგრამ, რა თქმა უნდა, არის ის, ალბათ არ არის საუკეთესო დაგეგმვა. არა? თუ მე კი ვეკითხებოდი, ალექს მიიღეთ სახელები, ალბათ, ის მინდა დააყენა რამდენიმე მეტ ქვემოთ აქ, იქნებ up აქ, სწორედ აქ, სწორედ აქ, საბოლოოდ მეტი აქ. მაგრამ უფრო მეტი დაგეგმვის, რა თქმა უნდა, ჩვენ ვერ ქმნის რამ out მეტი cleanly. და მართლაც, ის, რასაც კომპიუტერში აკეთებს. მაგრამ დაჭერა არის, რომ თუ მომდევნო string მივიღებ მას შემდეგ, რაც Zamyla რაღაც როგორიცაა Belinda, ვთავაზობ, სადაც ჩვენ შეიძლება დაწეროს ბ მიმართ ამ ქსელის? სად წავიდეთ? მარჯვნივ, ქვემოთ z, ქვემოთ? რა იქნებოდა თქვენი პირველი ინსტინქტები იყოს? აუდიტორია: ქვემოთ z. დევიდ ჯ Malan: ასე რომ, ქვემოთ z. და ეს საკმაოდ მარტივია, არა? ეს ერთგვარი გარღვევა, ეს რას ვაკეთებთ on კლავიატურის, როდესაც ჩვენ Enter, ან ელექტრონული ფოსტის მიღებისას bulleted სიაში რამ. მაგრამ რეალობა ის არის, რომ კომპიუტერი ვცდილობთ, რომ იყოს უფრო ეფექტური, და cram, რა თქმა უნდა, ისევე, მონაცემები შევიდა RAM, რაც შეიძლება, ისე, რომ თქვენ არ დაგვრჩა ნებისმიერ bytes. ისე, რომ თქვენ არ დაგვრჩა ეკრანზე უძრავი ქონების. და პრობლემა, თუმცა, ის არის, რომ თუ ჩვენ ფაქტიურად დააყენა წერილი b შემდეგ, როგორ აპირებს ვიცი სად Zamyla სახელი დამთავრდა და Belinda სახელი იწყება? ასე რომ თქვენ ადამიანებზე მხოლოდ შემოთავაზებული, ასევე, დააჭირეთ გასაღები, არსებითად. ამას ქვემოთ ქვემოთ. ან თუნდაც, როგორც Alex გააკეთა, უბრალოდ წერა შემდეგი სახელით წინა, და ქვემოთ რომ ერთი და შემდეგ ქვემოთ, რომ ერთი. სწორედ ვიზუალური cue. კომპიუტერები სხვა ვიზუალური cue, მაგრამ ეს ცოტა უფრო ლაკონური. ეს არის ამ ხმაურიანი ხასიათი. წარმატებული 0, რაც, ალბათ, თქვენში წარმატებული ო, და ა.შ., ახლა. სპეციალური გაქცევის sequences. წარმატებული 0 არის გზა წარმოადგენს რვა ნულოვანი ბიტი in a row. 0000 0000. გზა თქვენ გამოხატოს, რომ არ არის მოხვდა ნულს თქვენს კლავიატურაზე, იმის გამო, რომ ის ფაქტი, რომ არის ASCII char. ეს ჰგავს, მაგრამ, ფაქტიურად ათობითი ნომერი რომელიც წარმოადგენს წრიული glyph, წრიული შრიფტი. ამავდროულად, წარმატებული ნულოვანი ნიშნავს, ფაქტიურად ბოლო რვა ნულოვანი ბაიტი აქ ჩემთვის. ასე რომ, ეს გარკვეულწილად თვითნებური. ჩვენ ვერ მოვისმინეთ გამოიყენება ნებისმიერი ნიმუში ბიტი, მაგრამ მსოფლიოში გადაწყვიტა რამდენიმე წლის წინ, რომ წარმოადგენს ბოლოს სიმებიანი მეხსიერებაში, უბრალოდ დააყენა მთელი bunch of zeros. იმიტომ, რომ ჩვენ შეუძლია აღმოაჩინოს, რომ. ახლა, რაც იმას ნიშნავს, რომ არ წერილი, ანბანი შეიძლება წარმოდგენილი zeros. მაგრამ ეს კარგია, ჩვენ უკვე დავინახეთ რომ ჩვენ გამოყენებით 65 წლის მდე 97 მდე. ჩვენ არ მიიღოს სადმე დახურვა ყველა zeros. ასე რომ, Belinda კომპიუტერის მეხსიერება რეალურად აპირებს წავიდეს აქ. მე შედგენილი ყვითელი მხოლოდ მიაპყროს ჩვენი ყურადღება. და გაფრთხილების, ძალიან, ამ არის სრულიად უკანონო. მე შედგენილი, როგორც ბადე. როგორიცაა, RAM არის რამოდენიმე ფიზიკური ობიექტი. ეს სულაც არ რიგები და სვეტები, თავისთავად. უბრალოდ მიიღო მთელი bunch of bytes განხორციელებული ტექნიკის რატომღაც. მაგრამ თუ მას შემდეგ, Belinda I აკრეფილი Gabe სახელი, ის აპირებს დასრულდება მდე აქ მეხსიერება, და თუ არა მე აკრეფილი Daven სახელი, მაგალითად, ის აპირებს დასრულდება მდე აქ. და შემიძლია ვაგრძელებთ წერენ კიდევ უფრო სახელები. სამწუხაროდ, თუ ვცდილობ დაწერა სუპერ გრძელი სახელი, მე შეიძლება საბოლოოდ ამოიწურა მეხსიერება. ამ შემთხვევაში, GetString არის დაბრუნებას აპირებს NULL, როგორც ჩვენ განაცხადა. მაგრამ საბედნიეროდ, მინიმუმ, ამ ვიზუალური აქ, ჩვენ ვერ საკმაოდ რომ შორს. ახლა რა ლამაზი ის არის, რომ ამ იდეა სამკურნალოდ რამ როგორც ყუთები არის წარმომადგენელი თვისება C და ბევრი ენების, ცნობილი როგორც მასივი. მასივი არის სხვა ტიპის მონაცემები. ეს მონაცემები სტრუქტურა, თუ გნებავთ. სტრუქტურა გრძნობა მართლაც, სახის, ეძებს როგორც ყუთი, მინიმუმ გონების თვალი. მასივი არის მომიჯნავე თანმიმდევრობა ერთნაირი მონაცემების ტიპები, თავში დაბრუნება თავში დაბრუნება. ასე რომ, ტექსტი, სხვა სიტყვა, არის მასივი სიმბოლო. მასივი სიმბოლო. მაგრამ აღმოჩნდება, რომ თქვენ შეგიძლიათ აქვს მასივების bunches რამ. ფაქტობრივად, ჩვენ შეგვიძლია ვთქვათ, თუნდაც ნომრები მასივი. ასე რომ, იმ ფორმით, რომელიც ჩვენ ვაპირებთ დავიწყოთ გამოცხადების ეს მონაცემები სტრუქტურა ცნობილია, როგორც მასივი ასევე აპირებს გამოიყენოს კვადრატულ ფრჩხილებში. მაგრამ ამ კვადრატულ ფრჩხილებში ვაპირებთ აქვს სხვადასხვა მნიშვნელობა მოცემულ კონტექსტში. და ვნახოთ რედაქციით. ვარაუდობენ, რომ გახსნა ახალი ფაილი აქ. მე და გადავარჩინოთ ეს ages.c. და მე გადარჩენა ეს ჩემი ფოლდერი აქ. და ახლა მე ვაპირებ წავიდეთ წინ და დაიწყოს აკრეფით რაღაც ისევე როგორც შედის CS50.h, მოიცავს stdio.h, int ძირითადი ბათილად. და შემდეგ შიგნით, მინდა პირველი გვაქვს int მოუწოდა ასაკში. და მე ვაპირებ, რომ მიიღოს int საწყისი მომხმარებლის მისი ასაკი. მაგრამ ეს პროგრამა განკუთვნილია გამოყენებული იქნას მრავალი ადამიანი, სხვადსხვა კონტექსტში. მაქვს ხაზი ადამიანი. ყველა მათგანი უნდა აკრიფოთ მათი ასაკი, შესაძლოა, ზოგიერთი, მე არ ვიცი, კონკურენცია, ან მოვლენის რომ ისინი ჩამოვიდნენ. ასე რომ, მომავალი ადამიანი, მე უნდა სხვა ცვლადი. იმის გამო, თუ უბრალოდ ასაკის იღებს getInt, რომ ის, აპირებს clobber, ან გადაწერის წინა პირის ასაკის. ასე რომ, ეს არ არის კარგი. ასე რომ, ჩემი პირველი ინსტინქტი შესაძლოა, oh, ყველა უფლება, თუ მინდა კიდევ მრავალი ხალხის ages-- მოდით მოვუწოდებთ ამ age1, int age2 იღებს int, int age3 იღებს getInt. და ახლა მე ვაპირებ ზოგიერთი pseudocode კოდი აქ. რამე ერთად იმ ნომრები. ჩვენ დავტოვებთ მეორე დღეს, თუ რა ვაკეთებთ, რადგან ჩვენ მხოლოდ ზრუნვა მომენტში შესახებ age1, age2, age3. სამწუხაროდ, კიდევ ერთხელ შეადგინონ ამ პროგრამის და ამას წინ ფაქტობრივი წევრებს, რა ფუნდამენტურად ცუდი დიზაინი გადაწყვეტილება, როგორც ჩანს, არ გააკეთა? ჰო? აუდიტორია: [INAUDIBLE] დევიდ ჯ Malan: ჰო, მე კი არ ცდილობდა გაერკვნენ, თუ როგორ მრავალი წლის შემიძლია რეალურად აინტერესებს? თუ მაქვს არანაკლებ სამი ადამიანი აქ, და, შესაბამისად, არანაკლებ სამ ასაკის, მე მაინც ბრმად ველოდებით სამ. ღმერთმა ნუ ქნას, ოთხი ადამიანი გამოჩნდება. ჩემი პროგრამა უბრალოდ კი არ დაუჭირონ მათ. ასე რომ, ეს, გრძელი ამბავი მოკლედ, არ არის კარგი ჩვევა. არა? მე არსებითად კოპირება და pasting კოდი და მხოლოდ tweaking ცვლადი სახელები. და ღმერთი ჩემი, თუ თქვენ არ ჰქონდა და არა სამი ასაკის, მაგრამ 10 ან 100, ან თუნდაც 6,500 მაგისტრანტს, მაგალითად. ეს არ იქნება განსაკუთრებით ელეგანტური კოდი, ან მდგრადი. თქვენ აპირებს უნდა გადაწერა პროგრამა ყოველ ჯერზე თქვენი რაოდენობის ხალხი ცვლილებები. ასე რომ საბედნიეროდ, ჩვენს რეალურ ages.c ფაილის დღეს, ჩვენ უფრო ჭკვიანი გადაწყვეტა. პირველი, მე ვაპირებ სესხის მშენებლობა ჩვენ გამოყენებული რამდენჯერმე, ამ გააკეთოს ხოლო loop, იმისათვის, რომ იმ ადამიანთა რიცხვი, ოთახში. მე უბრალოდ აპირებს pester შესახებ, კიდევ ერთხელ და ისევ, სანამ იგი მაძლევს ღირებულება ო, რომ არის დადებითი მთელი რიცხვი. მე ვერ გამოიყენეს ბოლო დროის დადებითი int. მაგრამ ჩვენ არ გვაქვს, რომ უძრავი, ისე წავედი წინ და ხელახლა განხორციელდება ეს იდეა. ახლა ქვემოთ აქ, ეს არის ახალი ხრიკი. ხაზი 27, როგორც კომენტარები შეესაბამება 26 ვარაუდობს, განაცხადოს მასივი, რომელიც შესანახად ყველას ასაკის. ასე რომ, თუ გვინდა, რომ არა ერთი int, არ ორი ints, მაგრამ მთელი bunch of ints. კონკრეტულად n რიცხვებით, იყო n შეიძლება სამი, შეიძლება 100, შეიძლება იყოს 1000. სინტაქსი, უბრალოდ, ის არის, რომ ვთქვათ, რა ტიპის მონაცემის გინდათ? რას მინდა მოვუწოდო რომ ბლოკი მეხსიერება? რას მინდა მოვუწოდო ქსელის რომელიც ასე გამოიყურება ხატოვნად? და ფრჩხილებში აქ, თქვენ ამბობთ, რამდენად დიდი გსურთ მასივი იყოს. და ასე ადრე, როცა ვამბობდი, სინტაქსი არის პატარა სხვადასხვა აქ, ჩვენ ჯერ კიდევ გამოყენებით კვადრატულ ფრჩხილებში, მაგრამ როდესაც მე გამოცხადების მასივი, ხმების შიგნით კვადრატულ ფრჩხილებში ნიშნავს რამდენად დიდი გინდათ მასივი იყოს. ამის საპირისპიროდ, როდესაც ჩვენ გამოყენებით s bracket i მომენტში წინ, ის, string, მართლაც მასივი სიმბოლო, მაგრამ როდესაც თქვენ არ გამოცხადების ცვლადი, როგორც ამ სიტყვით აქ, თქვენ უბრალოდ მისაღებად კონკრეტული მაჩვენებელი, კონკრეტული ელემენტს რომ მასივი. მას შემდეგ, რაც ჩვენ ვიცით, რომ, დანარჩენი ეს არის პირდაპირი. თუ ახალი მე პირველი აპირებს ამობეჭდოთ რა ასაკის პირი ნომერი i. სადაც მე, უბრალოდ, ვამბობთ პირი ნომერ, პირი ნომერი ორი პირი ნომერი სამი. და მე უბრალოდ აკეთებს არითმეტიკული, ასე რომ, როგორც ჩვეულებრივი ადამიანი, ჩვენ ითვლიან ერთი ამ პროგრამა, და არა ნულიდან. მაშინ მე მოვუწოდებ GetInt, მაგრამ მე შესანახად პასუხი ასაკის bracket i. რომელიც არის i'th ასაკი მასივი. ასე რომ, ხოლო ბოლო დროს ჩვენ ექცეოდნენ ეს ყუთები, როგორც სიმბოლო for Zamyla სახელი, და სხვები. ახლა, ეს ყუთები წარმოადგენს 32 ბიტს, ან ოთხი ბაიტი რომელშიც ჩვენ შეგვიძლია შესანახად int, int, int. რაც, კიდევ ერთხელ, არის იგივე მონაცემები ტიპის. ახლა მე რაღაც სულელური, ისევე როგორც დრო გადის, მხოლოდ იმისათვის, რომ გაამართლოს წერილობით ამ პროგრამაში. და შემდეგ ქვევით აქ, მე კიდევ ერთხელ iterate მეტი მასივი ამბობდა წელიწადში, პირი ნომერ ნების იყოს რაღაც წლის. და გაერკვნენ, რომ math-- მე ვგულისხმობ, ამ არ არის ძალიან რთული არითმეტიკა უბრალოდ დაამატოთ ერთი მათი ასაკი. მხოლოდ იმის დემონსტრირება, კიდევ ერთხელ, ამ. როგორც მე ინდექსი ტექსტი, s, ასე შემიძლია ინდექსი შევიდა მასივი ასაკის, რომ არსებობს. ასე რომ, სად არის ეს იქნება აღების us? ასე რომ, ჩვენ ვხედავთ, საბოლოო ჯამში, რამდენიმე რამ, ამ დღეებში. ერთი, მთელი ამ დროის განმავლობაში, როდესაც წერილობით საკუთარი პროგრამების, როგორიცაა Mario, ხარბ საკრედიტო. თქვენ უკვე აკრეფის სახელი პროგრამა და hitting შეიყვანეთ. და მერე მიღების მომხმარებლის შეყვანის. With getString, getInt, GetLongLong, ან მოსწონს. მაგრამ აღმოჩნდება, რომ C მხარს უჭერს რაღაც მოუწოდა command line არგუმენტები, რომელიც აპირებს მოდით რეალურად მიიღოთ სიტყვა, რომ თქვენ, იმ მოციმციმე სწრაფი, მას შემდეგ, რაც თქვენი პროგრამის სახელი. ასე რომ, ამ დღეებში, თქვენ შეიძლება აკრიფოთ რაღაც Caesar, ან კეისარი ნომერი 13, შემდეგაც. ჩვენ დავინახავთ, როგორ მუშაობს. იმის გამო, მართლაც, პრობლემა კომპლექტი ორი, ჩვენ აპირებს წარმოგიდგინოთ პატარა რაღაც თქვენში Ralphie მიერ გამოწვევას ადრე კარტოგრაფიის. ხელოვნების scrambling ინფორმაციას. ეს, ფაქტობრივად, არის ძალიან თქვენში რა Ralphie გააკეთა. ეს არის მაგალითი იმისა, კოდირების ალგორითმი მოუწოდა ROT13, R-O-T 13. რომელიც უბრალოდ ნიშნავს, რომ როტაცია წერილები ანბანი 13 ადგილებში. და თუ თქვენ, რომ თქვენ, ახლა რა არის, ალბათ, ნაცნობი ფრაზა. მაგრამ გზა ჩვენ ვაპირებთ გამოვიყენოთ ეს, საბოლოო ჯამში, უფრო ზოგადად. In P ნაკრები ორი, სტანდარტული გამოცემა, თქვენ განახორციელოს რამდენიმე ciphers, ერთი ე.წ. Caesar, ერთი მოუწოდა Vigenere. ორივე მათგანი ბრუნვის ciphers, რომ რატომღაც თქვენ, გახდეს ერთი წერილი შევიდა სხვადასხვა წერილში. და ცეზარ არის სუპერ მარტივი. თქვენ დაამატოთ ერთი, თქვენ 13, ან გარკვეული რაოდენობის დაახლოებით 26. Vigenere აკეთებს, რომ თითო წერილი საფუძველზე. ასე Vigenere, როგორც თქვენ Spec, უფრო უსაფრთხო. მაგრამ, დღის ბოლოს რა თქვენ უნდა განხორციელებისა და P ნაკრები ორი, ის არის, რომ ძირითადი, რომ თქვენ გამოიყენოთ როგორც დაშიფვრის და დეშიფრაციის. მხედველობაში პროცესში გარდამტეხი ძირითადი ტექსტი, ზოგიერთი ორიგინალური გაგზავნა, შევიდა cypher ტექსტი, რომელიც რაღაც დაშიფრული. და შემდეგ ამოცნობის კიდევ ერთხელ. In Hacker გამოცემა, ამავდროულად, თქვენ გექნებათ დაევალა რაღაც მსგავსი სული, სადაც ჩვენ მოგცემთ ფაილი, ტიპიური Linux, ან Mac, ან Unix კომპიუტერი მოუწოდა etsy პაროლი, რომელიც შეიცავს მთელ bunch of სახელისა და პაროლის. და იმ პაროლები აქვს ყველა გაიშიფრა, ან hashed, ასე ვთქვათ, უფრო სწორად როგორც დაინახავთ სპეც. და ჰაკერული გამოცემა იქნება გამოწვევას თქვენ აღების შეყვანის როგორიცაა ამ, და cracking პაროლი. რომ არის, მჭიდროდაა რა ადამიანის დაგავიწყდათ რეალურად იყო. რადგან, მართლაც, პაროლები ზოგადად არ ინახება ნათელი, და ზოგადად პაროლები უნდა იყოს ძნელი მისახვედრია. ეს არ არის ხშირად შემთხვევაში. და რა ვიფიქრე ჩვენ გვინდა გავაკეთოთ არის დადოს რამდენიმე წუთის ერთი შეხედვით განსაკუთრებით ცუდი არჩევანი პაროლები ფილმი შეიძლება გავიხსენოთ დიდი სიყვარულით. და თუ არა, უნდა ვაქირავებ. [ვიდეო აღწარმოების] -მუზარადი, თქვენ ჯოჯოხეთის განსახიერება, რა ხდება? რას აკეთებთ რომ ჩემი ქალიშვილი? -ნებართვა ჩემთვის წარმოგიდგინოთ ბრწყინვალე ახალგაზრდა პლასტიკური ქირურგი, ექიმი Phillip Schlotkin. ყველაზე დიდი ცხვირი სამუშაო ადამიანი მთელი სამყაროს და Beverly Hills. -Your Highness. -Nose სამუშაო? მე არ მესმის. მას უკვე ჰქონდა ცხვირი სამუშაო. ეს იყო მისი Sweet 16 დღემდე. არა, ეს არ არის, რასაც თქვენ ფიქრობთ. ეს ბევრად, ბევრად უარესი. თუ არ მომეცი კომბინაცია საჰაერო ფარი, ექიმი Schlotkin მისცემს ქალიშვილი უკან თავის ძველ ცხვირი. - [Gasps] Nooooooooooooo. სად თქვენ, რომ? -All უფლება. მე გეტყვით, მე გეტყვით. არა, მამა, არა. თქვენ უნდა არა. -You're უფლება ჩემო. მე მენატრება შენი ახალი ცხვირი. მაგრამ მე არ ვუთხრა კომბინაცია არ აქვს მნიშვნელობა რა. -ძალიან კარგად. ექიმი Schlotkin, თქვენი ყველაზე ცუდი. -ჩემი სიამოვნება. არა! დაველოდოთ, დაველოდოთ. მე გეტყვით. მე გეტყვით. მე ვიცოდი, რომ ის იმუშავებს. ყველა უფლება, მომეცი. -კომბინაციის ერთი. დაზიანებულია ერთი. დაზიანებულია ერთი. დაზიანებულია. დაზიანებულია. დაზიანებულია. სამი. სამი. სამი. ოთხი. ოთხი. ოთხი. -Five. -Five. -Five. ანუ კომბინაცია არის ერთი, ორი, სამი, ოთხი, ხუთი. რომ stupidest კომბინაცია მე ოდესმე მოვისმინოთ ჩემს ცხოვრებაში. სწორედ ასეთი რამ იდიოტი იქნებოდა მისი ბარგის. დიდება თქვენ, თქვენი სიმაღლე. [REMOTE დაწკაპუნებით] რა გავაკეთო? მე გამორთულია კედელი. არა, თქვენ არ იცით, თქვენ გამორთულია მთელი ფილმი. მე must've დაპრესილი არასწორი ღილაკს. -Well, დაუსვან მას უკან! განათავსეთ ფილმის უკან! დიახ, სერ! დიახ, სერ. -Let წავიდეთ, Arnold. მოდი, Gretchen. რა თქმა უნდა, თქვენ იცით, მე აქვს, რომ ანგარიშსწორება თქვენ ამ. -Well? მუშაობს იგი? სად არის მეფე? ხომ მუშაობდა, სერ, ჩვენ აქვს მოედანზე. -Great. ახლა ჩვენ შეუძლია მიიღოს ყველა ბოლო სუნთქვას სუფთა ჰაერი საწყისი პლანეტის Druidia. რა არის კომბინაცია? ერთ ერთი, ორი, სამი, ოთხი, ხუთი. ერთ ერთი, ორი, სამი, ოთხი, ხუთი? დიახ. ისეთი საოცარი. მაქვს იგივე ერთობლიობა ჩემი ბარგი. მომზადება Spaceball 1 დაუყოვნებლივ გამგზავრების. დიახ, სერ. თუკი შეცვლა ერთობლიობა ჩემი ბარგი. [კარის დახურვის ხმა] [ციხეში კარები დარტყმის ჩაფხუტი] -Ahh. [END ვიდეო აღწარმოების] დევიდ ჯ Malan: ეს არის ის, CS50, ჩვენ დავინახავთ, თქვენ მომავალ კვირას. მთხრობელი: და ახლა, Deep აზრები, მიერ Daven Farnham. DAVEN FARNHAM: კოდირების დო არის იმდენად რთული, ვიდრე Scratch. printf, Scratch ტყუილი იყო. [სიცილი soundbite]