[მუსიკის დაკვრა] დევიდ ჯ Malan ყველა უფლება. ეს არის CS50 და ეს არის დაწყების კვირა 2. და თქვენ გავიხსენოთ, რომ მეტი ბოლო რამდენიმე კვირის განმავლობაში, ჩვენ უკვე შემოღების კომპიუტერული მეცნიერებისა და, თავის მხრივ, პროგრამირების. და დავიწყეთ ამბავი გზით Scratch, რომ გრაფიკული ენის საწყისი MIT- ის მედია ლაბორატორია. და შემდეგ ყველაზე ცოტა ხნის წინ, გასულ კვირას, არც ჩვენ დანერგვა higher-- ქვედა დონის ენა ცნობილია როგორც C, რაღაც რომ წმინდა ტექსტური. და, მართლაც, ბოლო დროს ჩვენ შესწავლილი ფარგლებში კონტექსტში რიგი ცნებები. ეს, გავიხსენოთ, იყო ძალიან პირველი პროგრამა ჩვენ შევხედე. ეს პროგრამა, უბრალოდ, ბეჭდავს out, "hello, world". მაგრამ იქ იმდენად მოჩვენებითი ჯადოსნური მიმდინარეობს. არსებობს ამ # მოიცავს ამ კუთხე ფრჩხილებში. არსებობს int. არსებობს (void). არსებობს ფრჩხილებში, Curly braces, ნახევრად colons, და ასე უფრო მეტი. ასე რომ, გავიხსენოთ, რომ ჩვენ გააცნო Scratch ასე, რომ ჩვენ შეგვიძლია, იდეალურად, ვხედავ წარსულში რომ სინტაქსი, პერსონალის, რომ ნამდვილად არ არის ყველა, რომ ინტელექტუალურად საინტერესო, მაგრამ დასაწყისში არის, რა თქმა უნდა, ცოტა სახიფათო გადაიტანოთ თქვენი აზრით გარშემო. და, მართლაც, ერთ-ერთი ყველაზე გავრცელებული რამ ადრეულ პროგრამირების კლასი, განსაკუთრებით მათთვის, ნაკლებად კომფორტული, არის ის, რომ იმედგაცრუებულია და იმყოფებოდა up გარკვეული სინტაქსური შეცდომები, რომ აღარაფერი ვთქვათ ლოგიკური შეცდომები. ასე რომ, მათ შორის ჩვენი მიზნები დღეს, ფაქტობრივად, ნება უნდა აღჭურვა თქვენ გარკვეული პრობლემის გადაჭრაზე ტექნიკის როგორ უკეთ პრობლემების მოგვარებას თავად სახით debugging. და თქვენ გავიხსენოთ, ძალიან, რომ გარემო, რომელიც ჩვენ გააცნო ბოლო დროს ეწოდა CS50 IDE. ეს არის ვებ დაფუძნებული პროგრამული უზრუნველყოფა, რომელიც გაძლევთ საშუალებას პროგრამის ღრუბელი, ასე ვთქვათ, ხოლო შენახვა ყველა თქვენი ფაილი ერთად, როგორც ჩვენ კვლავ დღეს. და გავიხსენოთ, რომ ჩვენ revisited ეს თემა აქ, მათ შორის ფუნქციები და მარყუჟების, და ცვლადები და ლოგიკური გამონათქვამები, და პირობებს. და რეალურად კიდევ რამდენიმე, რომ ჩვენ თარგმნა მსოფლიოს Scratch სამყაროში C. მაგრამ ფუნდამენტური შენობა კორპუსები, ასე ვთქვათ, იყო ნამდვილად იგივეა გასულ კვირას. ფაქტობრივად, ჩვენ ნამდვილად ჰქონდა სხვადასხვა თავსატეხი ცალი, თუ გნებავთ. იმის ნაცვლად, რომ purple გადარჩენა ბლოკი, ჩვენ ნაცვლად ჰქონდა printf, რომელიც ამ ფუნქციის C, რომ საშუალებას გაძლევთ ამობეჭდოთ რაღაც და დააფორმატე ეკრანზე. ჩვენ გააცნო CS50 ბიბლიოთეკა, სადაც თქვენ აქვს ახლა თქვენს განკარგულებაშია get_char, და get_int და get_string, და რამდენიმე სხვა ფუნქციებს, ასევე, რომლის მეშვეობით თქვენ შეგიძლიათ მიიღოთ input მომხმარებელი საკუთარი კლავიატურაზე. და ჩვენ ასევე მიიღო შევხედოთ რამ როგორიცაა these- bool, და char, და ორმაგი, float, int, long_long სიმებიანი. და იქ კი სხვა მონაცემები სახის C. სხვა სიტყვებით, როდესაც თქვენ გამოაცხადოს ცვლადი შესანახად გარკვეული მნიშვნელობა, ან როდესაც თქვენ განახორციელოს ფუნქცია რომ ბრუნდება გარკვეული მნიშვნელობა, თქვენ შეგიძლიათ მიუთითოთ რა ტიპის ღირებულება, რომელიც არის. ეს არის ტექსტი, როგორიც თანმიმდევრობა გმირები? ეს არის ნომერი, როგორც რიცხვი? ეს არის მცურავი წერტილი ღირებულება, ან მოსწონს? ასე რომ, C, განსხვავებით Scratch, ჩვენ რეალურად დაიწყო აკონკრეტებს, თუ რა სახის მონაცემები ვბრუნდებოდით ან გამოყენებით. მაგრამ, რა თქმა უნდა, ჩვენ ასევე შეუვარდნენ ზოგიერთი ფუნდამენტური ლიმიტები computing. კერძოდ, ეს ენა C, გავიხსენოთ რომ ავიღეთ შევხედოთ რიცხვი overflow, რეალობა იმ შემთხვევაში, თუ თქვენ მხოლოდ სასრული რაოდენობით მეხსიერება და, კერძოდ, სასრული რაოდენობის ბიტი, თქვენ მხოლოდ ითვლიან იმდენად მაღალი. ასე რომ, ჩვენ შევხედე ამ მაგალითს აქ რომლის დროსაც counter თვითმფრინავის, რეალურად, თუ გაშვებული ხანგრძლივი საკმარისი იქნებოდა overflow და გამოიწვიოს პროგრამული უზრუნველყოფა ფაქტობრივი ფიზიკური პოტენციური შეცდომა. ჩვენ ასევე შევხედე მცურავი პუნქტიანი ორაზროვნება, რეალობა რომ მხოლოდ სასრული რაოდენობის ბიტი, თუ არა ის 32 ან 64, თქვენ შეგიძლიათ მიუთითოთ მხოლოდ ამდენი ნომრები მას შემდეგ, რაც ათობითი წერტილი, რის შემდეგაც თქვენ დაიწყოს მიიღოს ბუნდოვანი. ასე მაგალითად, ერთ-ერთი მესამედით მსოფლიოში აქ, ჩვენს ადამიანთა სამყაროში, ჩვენ ვიცით არის მხოლოდ უსასრულო რაოდენობის of 3s შემდეგ ათობითი წერტილი. მაგრამ კომპიუტერის ვერ აუცილებლად წარმოადგენს უსასრულო რაოდენობის ნომრები თუ თქვენ მხოლოდ დაუშვებს, რომ ზოგიერთი სასრული რაოდენობით ინფორმაცია. ასე რომ, არა მხოლოდ ჩვენ აღჭურვა თქვენ ერთად უფრო დიდი ძალა თვალსაზრისით თუ როგორ შეიძლება გამოხატოს საკუთარ თავს კლავიატურის თვალსაზრისით პროგრამირების, ჩვენ ასევე შეზღუდული რა თქვენ შეგიძლიათ რეალურად გავაკეთოთ. და მართლაც, შეცდომები და შეცდომები წარმოიქმნება იმ სახის საკითხები. და მართლაც, მათ შორის თემა დღეს ვაპირებთ, რომ თემები, როგორიცაა გამართვის და რეალურად ეძებს ქვეშ hood თუ როგორ რამ გაეცნენ გასულ კვირას ფაქტობრივად განხორციელებული ასე, რომ თქვენ უკეთესი გავიგოთ, როგორც შესაძლებლობების და შეზღუდვები ენის მსგავსად, C. და სინამდვილეში, ჩვენ კანი უკან ფენების უმარტივესი მონაცემები სტრუქტურის, რაღაც მოუწოდა მასივი, რომელიც Scratch ხდება მოვუწოდებთ "სიაში." ეს ცოტა სხვადასხვა კონტექსტში. და მაშინ ჩვენ ასევე წარმოგიდგინოთ ერთ-ერთი პირველი ჩვენი დომენური სპეციფიკური პრობლემები CS50, მსოფლიოს კრიპტოგრაფიის, ხელოვნების scrambling ან დაშიფრვის ინფორმაცია ისე, რომ თქვენ შეგიძლიათ გააგზავნოთ საიდუმლო შეტყობინებები და decode საიდუმლო შეტყობინებები ორ ადამიანს შორის, A და B. ასე რომ სანამ ჩვენ გარდამავალი რომ ახალ სამყაროში, მოდით მივცეთ თქვენ გარკვეული ტექნიკას, რომელთანაც შეგიძლიათ აღმოფხვრა ან შემცირება მინიმუმ რამდენიმე იმედგაცრუებები რომ თქვენ ალბათ გვხვდება გასული კვირის განმავლობაში მარტო. ფაქტობრივად, წინ თქვენ such-- ზოგიერთი თქვენი პირველი პრობლემა C. და შანსები, თუ თქვენ, როგორც მე, პირველად ცდილობენ ტიპი out პროგრამა, მაშინაც კი, თუ ვფიქრობ ლოგიკურად პროგრამა არის საკმაოდ მარტივი, თქვენ შეიძლება ძალიან კარგად მოხვდა კედლის და შემდგენელი თანამშრომლობას არ აპირებს. ან Clang არ აპირებს რეალურად თქვენი ტენდერების. და რატომ შეიძლება რომ იყოს? ისე, მოდით შევხედოთ, ალბათ, მარტივი პროგრამა. მე ვაპირებ წავიდეთ წინ და გადარჩენა ეს ფაილი შეგნებულად მოუწოდა buggy0.c, რადგან ვიცი, რომ ეს ყალბი წინასწარ. მაგრამ მე შეიძლება არ ესმოდეს, რომ თუ ეს პირველი ან მეორე ან მესამე პროგრამა რომ მე რეალურად მიღების თავს. ამიტომ, მე ვაპირებ წავიდეთ წინ და აკრიფოთ გარეთ, int ძირითადი (void). და შემდეგ შიგნით ჩემი Curly braces, ძალიან ნაცნობი ( "hello, world წარმატებული, n ") - და ნახევრად მსხვილი ნაწლავის. მე შენახული ფაილი. ახლა მე ვაპირებ დაცემას ჩემი ტერმინალის ფანჯარაში და ტიპის მიიღოს buggy0, რადგან, კიდევ ერთხელ, სახელი ფაილი დღეს buggy0.c. ასე რომ, მე აკრიფოთ მიიღოს buggy0, შეიტანეთ. და, რა, gosh, გავიხსენოთ ბოლო დროს რომ არ შეცდომის შეტყობინებები არ არის კარგია. ასე რომ, არ გამომავალი კარგია. მაგრამ აქ მე ნათლად გარკვეული რაოდენობის შეცდომები. ასე რომ, პირველი ხაზი გამომავალი მას შემდეგ, რაც აკრეფით მიიღოს buggy0, გავიხსენოთ, არის Clang ის საკმაოდ verbose გამომავალი. ქვეშ Hood, CS50 IDE არის კონფიგურირებული გამოიყენოს მთელი bunch პარამეტრები ამ შემდგენელი ასე რომ თქვენ არ აქვს ვფიქრობ, რომ მათ შესახებ. და ეს ყველაფერი, რომ პირველი ხაზი საშუალება, რომელიც იწყება Clang. მაგრამ ამის შემდეგ, პრობლემები, დაიწყოს, რათა მათი გამოჩენა. Buggy0.c on line 3, ხასიათი 5, არ არის დიდი, წითელი შეცდომა. რა არის ეს? მინიშნებით გამოცხადების ბიბლიოთეკის ფუნქცია printf ტიპის int (const char *, ...) [-Werror]. ვგულისხმობ, ეს ძალიან სწრაფად იღებს ძალიან arcane. და რა თქმა უნდა, პირველ რიგში, ერთი შეხედვით, ჩვენ არ ველით, რომ თქვენ უნდა გვესმოდეს, მთლიანად რომ გაგზავნა. ასე რომ, ერთი გაკვეთილები დღეს აპირებს უნდა ვეცადოთ, რომ შეამჩნია ნიმუშების, ან მსგავსი რამ, შეცდომები ალბათ შეექმნა წარსულში. მოდით აჯავრებენ გარდა მხოლოდ ეს სიტყვები, რომელიც ნაცნობი. დიდი, წითელი შეცდომა აშკარად სიმბოლურია ის, რომ არასწორია. მინიშნებით გამოცხადების ბიბლიოთეკის ფუნქცია printf. ასე რომ, თუ მე არ მესმის რა მინიშნებით გამოცხადების ბიბლიოთეკის ფუნქცია საშუალებით, პრობლემა აუცილებლად ეხება printf რატომღაც. და წყარო, რომ საკითხი უნდა გააკეთოს გამოცხადების მას. გამოცხადების ფუნქცია აღვნიშნო, რომ ეს პირველად. და ჩვენ გამოყენებული ტერმინოლოგიის გასულ კვირას გამოცხადების ფუნქციის პროტოტიპი, არც ერთი ხაზი ზედა თქვენი საკუთარი ფაილი ან ე.წ. header ფაილი. და რა ფაილი არ ვამბობთ, გასულ კვირას, რომ printf არის ციტირებით unquote, გამოაცხადა? რა ფაილი არის მისი პროტოტიპი? ასე რომ, თუ გავიხსენებთ, პირველი, რაც მე ტიპის, თითქმის ყველა პროგრამა ბოლო დროს და შემთხვევით მომენტში წინ დაიწყო ბეჭდვის myself-- იყო ამ ერთი აქ hash-- # include