[მუსიკის დაკვრა] დავით Malan: Hello, ყველას. ეს არის CS50 ის supersection. მინიჭებული სექციები არ დაიწყოს კიდევ ერთი კვირის. ასე რომ, დღეს, მე აქ with-- MARIA: მარია. დავით Malan: --to რეალურად შევხედოთ პრობლემას დაყენებულია ერთი, რა თქმა უნდა, პირველი კვირის მასალა, მისაღებად თქვენ ორიენტირებული CS50 IDE, ცოტა Linux, ოპერაციული სისტემა, რომელიც გაშვებული IDE, ისევე როგორც შევხედოთ ზოგიერთი გარდამავალი ნულიდან to C წამყვანი მდე პრობლემა მითითებული ერთი. ასე გარეშე ado, ამ პრობლემის მითითებული ერთი, თქვენ იქნება გააცნო CS50 IDE, რომელიც ეს არის ვებ დაფუძნებული პროგრამირების გარემოს, რომ ჩვენ გამოვიყენოთ იმისათვის, წერენ პროგრამებს. ის შემუშავებულია ძალიან თქვენში ტიპიური კომპიუტერი სისტემაში გაშვებული ოპერაციული სისტემა სახელწოდებით Linux. მაგრამ ეს არის ე.წ. ღრუბელი, რაც იმას ნიშნავს, მთელ კლასს შეიძლება რეალურად აქვს მისი საკუთარი ანგარიში და გამოიყენოთ იგი, ისევე. ასე რომ ყველაზე მეტად თქვენ ალბათ არასდროს გამოყენებული ლინუქსის გარემოს წინაშე და ალბათ, კიდევ ბრძანების გარემო. და ბრძანების გარემო განსხვავებულია. ეს არის ყველა ტექსტური. ეს ყველაფერი კლავიატურის ბრძანებები. და ეს არ არის mousing, არსებობს ხატები, არსებობს დიალოგის ფანჯარა, არ მენიუები. ეს არის წმინდა ტექსტი. ასე რომ, პირველ რიგში, ის ტიპის იგრძნობა ნაბიჯი უკან თვალსაზრისით დახვეწილობის. მაგრამ ეს მთავრდება, რომ ბევრი უფრო ძლიერი, რა თქმა უნდა, კომპიუტერული მეცნიერი, საბოლოოდ. მოდით შევხედოთ. აქ ვარ CS50.io, რომლის მეშვეობით შეგიძლიათ შეხვიდეთ CS50 IDE. და ჰგავს Scratch, იქ სამი ძირითადი სფეროები ამ ეკრანზე. ასე რომ, მარცხენა მხარეს, ჩვენ გვაქვს რა იქნება ფაილი ბრაუზერში. და არსებობს ამ საქაღალდეში ზედა, რომელიც ახლა ცარიელი მას შემდეგ, რაც მე მოიშორეს ყველა ჩემი ფაილი supersection. და რომ სადაც ჩვენ გამოგიგზავნით გადარჩენა C ფაილი, რომ ჩვენ წერენ. ზედა მარჯვენა, ჩვენ გვაქვს ადგილი, სადაც ყველა ჩვენი კოდი აპირებს მიიღოს დაწერილი. და მართლაც, თუ მე დააჭირეთ ამ პლუს, ამ აპირებს ნება მომეცით აირჩიოს ახალი ფაილი. და აქ მე შემიძლია წერა C კოდი ან, მართლაც, ნებისმიერი რაოდენობის სხვა ენებზე. და მერე ბოლოში, სადაც იგი ამბობს jharvard @ ide50-- და თქვენი ნება ვთქვათ რაღაც პატარა different-- რა იყო ამ ე.წ.? ტერმინალის ფანჯარაში. ჰო. ასე რომ, ტერმინალის ფანჯარა ე.წ. ბრძანების ხაზი ინტერფეისის მეშვეობით, რომელიც შეგიძლიათ ურთიერთქმედება ფუძემდებლური ოპერაციული სისტემა. და ახლა, ჩვენ ვაპირებთ ძალიან ცოტა გამოყენების ამას უბრალოდ შედგენა, შევხედოთ შეცდომის შეტყობინებები, რომ ჩვენ ვხედავთ, და აწარმოებს ჩვენი პროგრამები. მაგრამ, საბოლოო ჯამში, ჩვენ ვაპირებთ ამის გაკეთება გაცილებით მეტი, ისევე. და თქვენ კი დააყენოთ პროგრამული უზრუნველყოფა და ადმინისტრირება თქვენი სამუშაო გარემოს ფარგლებში CS50 IDE, ისევე. მაგრამ უფრო, რომ სხვა დროს. მოდით წავიდეთ წინ და დაწეროთ ძალიან მარტივი პროგრამა უბრალოდ გავლა თბილი მდე hello.c, რომელიც შესაძლოა მარტივი პროგრამა, შეგვიძლია დავწეროთ. მე უკვე გაიხსნა ახალი tab. მე ვაპირებ წავიდეთ წინ და ამბობენ მოიცავს სტანდარტული io.h. მაშინ int ძირითადი (void). და მაშინ printf ("Hello, world" წარმატებული ო, ახლო გაცემა, ახლო ფრჩხილებში, და მძიმით. კარგი. ასე რომ, ახლა შეამჩნია ჩემი ფანჯარა untitled. ასე რომ, მე ძალიან სწრაფად აპირებს ახვიდეთ ფაილი, შენახვა. და ეს მნიშვნელოვანია, რომ მოვუწოდებ ამ არა "Hello". ასე რომ, ძალიან ჩვეულებრივი შეცდომა, განსაკუთრებით პრობლემა მითითებული ერთი, არის შემთხვევით უბრალოდ მოვუწოდებთ თქვენი პროგრამა "წყალი" და "ხარბ" ან "მარიო" ან "კრედიტი" და სხვა. მაგრამ თქვენ ნამდვილად გინდათ გამოიმუშაოთ დარწმუნდით, რომ თქვენ გაქვთ ფაილის გაფართოება იმიტომ, რომ ეს არის ერთადერთი გზა, რომ შემდგენელი და კოდი რედაქტორი იცის, რომ თქვენ რეალურად წერა C კოდი. ნება მომეცით წავიდეთ წინ და დააჭირეთ Save. და ახლა, ძალიან, რა CS50 IDE ჩვენთვის გააკეთა არის ის, ასევე სინტაქსი ხაზგასმით ყველაფერი. ასე რომ, ეს ყველაფერი გააკეთა, ძალიან ფერადი. და მთელი მიზნით რომ არ ფუნქციონირებს. ეს მხოლოდ გავამახვილო ჩემი თვალები კონცეპტუალურად განსხვავებული ცალი ამ პროგრამის. მოდით წავიდეთ წინ და შეადგინონ ამ. და შემიძლია შეადგინონ ამ რამდენიმე გზა. და კვირაში ერთი, ძველი სკოლა გზა გავაკეთეთ ეს იყო ფაქტიურად ბრძანება ხაზი "clang hello.c." და მერე დააჭიროთ. და არაფერი ჩანს, უნდა მოხდეს ტერმინალის ფანჯარაში. მაგრამ რა გააკეთა ცვლილება IDE? სად, კიდევ ერთხელ, IDE მხოლოდ იმას ნიშნავს, ინტეგრირებული განვითარება გარემოს. ეს არის ლამაზი გზა ამბობდა ეს ინტეგრირებული განვითარება გარემოს განვითარების უზრუნველყოფა. ასე რომ, რა შეიცვლება UI? რას შეამჩნევთ რომ სხვადასხვა, მარია? MARIA: შევნიშნე რაღაც ქვეშ IDE50 საქაღალდე აქ. დავით Malan: ჰო. ასე რომ, აქ, არა მხოლოდ გვაქვს "hello.c." ჩვენ ასევე გვაქვს "a.out", რომელიც სახის dumb სახელი პროგრამა. მაგრამ მართლაც, ეს არის ძირითადად სახელი პროგრამა როდესაც თქვენ მხოლოდ კომპილაციის თქვენი კოდი და არ გითხრათ შემდგენელი რა ფაილი გამომავალი. ასე რომ, თუ მინდა აწარმოებს, მე უნდა გითხრათ შემდგენელი უფრო სწორად, მე უნდა ვუთხრა სამუშაო გარემოს, რომ მე გსურთ გაუშვით პროგრამა მოუწოდა "a.out". შეიტანეთ. და იქ "hello, მსოფლიოში. "ახლა" ./ ". რეალურად მნიშვნელოვანია. მიუხედავად იმისა, რომ, როგორც წესი, ჩვენ მხოლოდ წერენ სახელები ბრძანებები, როდესაც ეს პროგრამა თქვენ წერილობითი, თქვენ მინდა ვთქვა, "./" იმიტომ, რომ პირდაპირ ეუბნება, Linux რომ გსურთ გაუშვით პროგრამა მოუწოდა "a.out", რომ ამ, სადაც dot ეს ნიშნავს, რომ დირექტორია, რომ მე გაკეთებული წელს, რაც ხდება, რომ მოუწოდა გარემოს, "a.out. იმიტომ, რომ თუ მე უბრალოდ თქვა "a.out" Enter, მე ვაპირებ, რომ მიიღოთ "a.out ბრძანება არ ი "იმის გამო, რომ კომპიუტერი იმიტომ, რომ მე გამოიგონა "a.out"; ის არ მოდის ერთად კომპიუტერი არ ვიცი სად უნდა ვეძებოთ ის, მიუხედავად იმისა, რომ ეს უფლება ჩემი ცხვირი, ასე ვთქვათ. კარგი. ასე რომ, ჩვენ ვერ შეცვლის ეს უნდა იყოს "clang-o მიესალმები hello.c." და თუ მე დააჭიროთ, რა პროგრამა არის ეს აპირებს გამომავალი ჩემთვის? რა სახელით ფაილი? ჰო, წელს დაბრუნდა. სწორია. "Hello". ასე რომ, "Hello" იქნება სახელი პროგრამა იმიტომ, რომ ჩვენ გამოიყენება ე.წ. ბრძანების არგუმენტი, რომელიც მხოლოდ გზა ქცევის შეცვლა შემდგენელი რეალურად გამომავალი კონკრეტული ფაილის სახელი. და მართლაც, თუ ზომით და ვეძებთ აქ, ახლა მე მაქვს არა მხოლოდ "a.out" და "hello.c", არამედ "Hello", ისევე. ასე რომ, ახლა შემიძლია "Hello," Enter. და იქ "hello, world." მაგრამ lastly-- და ეს იქნება კონვენციის ჩვენ ვიყენებთ მთელი სემესტრის typically-- არის ასევე შეგიძლიათ უბრალოდ, ვამბობთ "მიიღოს hello." და მართლაც, ის ამბობდა, რომ ეს მდე დღემდე იგი უკვე არსებობს. ნება მომეცით წავიდეთ წინ და ამოიღონ ერთად RM გადის ბრძანება, როგორც "a.out" - და აცხადებენ, რომ "ამოიღონ რეგულარული ფაილი a.out?" ეს მხოლოდ იმას ნიშნავს, თქვენ ნამდვილად გსურთ მისი წაშლა? მე ვაპირებ ვთქვა, დიახ. და მაშინ მე ვაპირებ ამოიღონ "Hello", მაგრამ არა "hello.c." მე ვაპირებ ვთქვა "დიახ" მკაფიოდ, მაგრამ "y" არის საკმარისი, ისევე. და ახლა შეამჩნია, თუ მე ტიპი ls-- რაც იხსენებენ, ნიშნავს list-- ეს ჩამოთვლილია ყველა ფაილი ჩემს საქაღალდეში. და მართლაც, თუ ზომით და შევხედოთ ზედა მარცხენა, იგი ადასტურებს, რომ ის, რაც ამ საქაღალდეში კი მიუხედავად იმისა, რომ ეს შეაფასა, როგორც IDE50 აქ და არა სამუშაო გარემოს, ეს მხოლოდ "hello.c." ახლა ქვემოთ აქ, თუ მე არ "მიიღოს hello," Enter, ახლა მე ვხედავ ბევრად უფრო ბრძანება, მაგრამ უფრო დახვეწილი ბრძანება, რომ ის აპირებს იყოს სასარგებლო კვირის მოსვლა. და ახლა შემიძლია ვთქვა, "მიზნით." მოდით მიიღოს სწრაფი ტური ზოგიერთი სხვა Linux ბრძანებები. მაშინ რატომ არ ავიღებთ ნაბიჯი უკან და რეალურად შევხედოთ C მეტი ზოგადად, გადასვლის Scratch C, და შემდეგ დადოს სახე პირველ პრობლემა მითითებული C. ყველა უფლება. ამიტომ, მე ვაპირებ წავიდეთ წინ და მხოლოდ სუფთა ჩემი სამუშაო გარემოს კონტროლის L მხოლოდ შენარჩუნება ეკრანზე სისუფთავე. მაგრამ, რომ არ აქვს ფუნქციური გავლენა სხვაგვარად. შეგახსენებთ, რომ ჩვენ ვნახეთ რამდენიმე ბრძანებები ახლა. ასე რომ, ჩვენ ვნახეთ clang, რომელიც ზოგადად არ უნდა შეასრულოს ხელით აღარ. ჩვენ ნაცვლად გამოიყენოთ მიიღოს. მაგრამ ჩვენ ასევე ვნახეთ ls, რომელიც გვიჩვენებს ჩამონათვალი ფაილი ჩემს დირექტორია. და ახლა რატომ არის იქ არსებობს ორი ფაილების ახლა, "Hello" და "hello.c." რატომ არის ვარსკვლავი ან ვარსკვლავით შემდეგ "Hello"? რა უნდოდა, რომ ნიშნავდეს, დაფუძნებული ის, რაც ჩვენ ვნახეთ, კვირაში ერთი? რას ფიქრობ? რას ვარსკვლავი ნიშნავდეს? MARIA: For-- პროგრამა "Hello"? დავით Malan: "Hello *". ჰო. ოჰ, არა? ოჰ, გაშვება. სწორია. ეს ნიშნავს, რომ "Hello" არის გაშვება. ასე რომ, მართლაც, ამიტომ მე შემიძლია ამის გაკეთება "მიზნით." კარგი. ასე რომ, რა გავაკეთო აქ? ისე, გამოდის, მე არ შემიძლია ასევე შექმნათ საიტები. ნება მომეცით წავიდეთ წინ და შევქმნათ, მაგალითად, "pset1" დირექტორია. და პრობლემა კომპლექტი სპეციფიკაცია იქნება თქვენ ზუსტად ამ, ასე რომ თქვენ არ უნდა გვახსოვდეს, დღეს. მაგრამ "mkdir pset1" როგორც ჩანს, რომ არ გავლენა. თუმცა ისევ და ისევ, არ შეცდომა ზოგადად კარგია. ასე რომ, თუ მე აკრიფოთ "LS", ახლა ah, ახლა მაქვს შესრულებადი ფაილი მოუწოდა "Hello", C ფაილი სახელწოდებით "hello.c." და მაშინ გადმოკიდული slash, ასე საუბარი, იმას ნიშნავს, რომ ეს არის დირექტორია. ასე რომ, მართლაც, ახლა მინდა გახსნან. და მე არ ორმაგად დაწკაპეთ იგი, როგორც ამ GUI, გრაფიკული გარემო. ნაცვლად ამბობენ, "cd pset1." შეიტანეთ. არაფერი საინტერესო, როგორც ჩანს, მოხდა გარდა ჩემი პატარა ზოლზე აქ ეს არის Linux გზა ახსენებს სადაც მე ვარ, ასე რომ ფოლდერი არის ღია. უბრალოდ მეუბნებოდა პირდაპირ როგორც ეწინააღმდეგებოდა გრაფიკულად. და თუ აკრიფოთ "ls," რატომ მე ვერ ვხედავ სხვა შეგახსენებთ, დაუყოვნებლივ, როგორ ფიქრობთ, როდესაც მე სიაში შინაარსი pset1? MARIA თქვენ ალბათ არ აქვს არაფერი არსებობს. დავით Malan: ჰო. ასე რომ, ჩვენ არ გვაქვს აშკარად ის არაფერი არ იმიტომ, რომ მე მხოლოდ ის დირექტორია. ახლა, თუ მინდოდა, რომ შევქმნათ ფაილი for მაგალითად, მე ვერ შექმნა ახალი ფაილი. და მერე შეიძლება წავიდეს შენახვა და გადარჩენა, როგორც, როგორიცაა, "mario.c", თუ რას აკეთებს სტანდარტული გამოცემა pset ერთი. და შემდეგ, ისევე როგორც ნებისმიერი Mac ან PC, უბრალოდ აირჩიეთ ფოლდერი "pset1, შენახვა. და ახლა ფაილი ცარიელია. მაგრამ მოდით მიუახლოვდით კვლავ მეორე. მოდით ls აქ. ახლა ჩვენ ვხედავთ "mario.c". ასე რომ, არსებობს რამდენიმე სხვა ბრძანებები, ღირს შენახვა გათვალისწინებით მეტი time-- ნათელია, ან საკონტროლო-L არის ის, რაც მე იყო დარტყმის; mkdir ჩვენ ვნახეთ; rm ჩვენ ვნახეთ, ისევე, რომელიც მოხსნის ან წაშლის ფაილი. ვუფრთხილდეთ შეგიძლიათ also-- და თუ გადავხედავთ განთავსებულია ონლაინ გაკვეთილები, თქვენ RM -rf არის ძალიან გავრცელებული გზა ამბობდა წაშლა საქაღალდე პერსონალის იგი. უბრალოდ იყოს სუპერ, სუპერ ფრთხილად. -rf ნიშნავს რეკურსიული წაშლა, რაც არ არის თქვენ ცდილობთ წაშლა და იძულებით წაშლა. ასე რომ, რეკურსიული საშუალებით, თუ ეს ფოლდერი საქაღალდე საქაღალდე საქაღალდე, წაშლა ყველა მათგანი. და იძულებით ნიშნავს კი არ მკითხავთ დიახ ან არა, არ ვარ დარწმუნებული? ასე რომ, ეს სუპერ სახიფათო გზა წაშლის უამრავი პერსონალი სწრაფად. მაგრამ beware-- ძალიან ხშირად აკეთებს კომპეტენტურობისა სტუდენტი შემთხვევით წაშლა, ვთქვათ, pset ერთ-ერთი, მაგალითად. MARIA: და თუ ისინი მხოლოდ ამის -r, ისინი აპირებენ ჰკითხა თითოეული ფაილი. დავით Malan: რომელი ზომიერად შემაშფოთებელი. MARIA: ჰო. დავით Malan: ასე რომ, რატომ ამდენი ჩვენგანი, თვითმმართველობის შედის, ვარ ჩვევა გამოყენებით -rf. მაგრამ ეს სახიფათოა. ასე რომ, მყიდველის სიფრთხილით მოვეკიდოთ. და მაშინ mv სახის საინტერესოა დაასახელა. ასე რომ, ეს ნაბიჯი ბრძანება, რომელიც გრძნობს ცოტა უცნაური იმიტომ, რომ თქვენ შეიძლება მართლაც გამოიყენოთ იგი გადაადგილება ფაილი ერთი ადგილიდან მეორეზე. დავუშვათ, რომ მე არევა. ვარაუდობენ, რომ ის ახალი ფაილი pset. და მე გადაარჩინა, როგორც "greedy.c". მაგრამ დავუშვათ, მე შემთხვევით გადარჩენა მას ამ IDE50-- ისე ჩემი სამუშაო თავად და არა pset1. თქვენ შეგიძლიათ ნახოთ იმდენი ზედა მარცხენა. არსებობს "greedy.c". და იქ რამდენიმე გადაწყვეტილებები. ასე რომ, ერთი შემიძლია სუპერ მოსახერხებელი გზა უბრალოდ გადმოიყვანა და ჩაშვების იგი. და რომ რეალურად დაფიქსირება ამ პრობლემას. მაგრამ დღეს, ჩვენ ვცდილობთ, რომ შევხედოთ უფრო მეტი arcane მაგრამ ძლიერი გზა ამით. ნება მომეცით მიიღოს "LS" Pset1. და მე მხოლოდ "mario.c." ნება მომეცით წავიდეთ წინ და ნუ "cd ..". ასე რომ, CD ერთხელ ცვლილება დირექტორია. ".." რას ნიშნავს, თუმცა? ბოლო დროს, მე ვთქვი "cd pset1 "წასვლას pset1. ასე რომ, როდესაც ვამბობ, რომ "cd ..", რა ვარ მე? უკან. ჰო. ასე რომ, ის აპირებს ე.წ. მშობელი. ტურიზმი ერთი დონის მდე, როგორიცაა არსებული გარეთ საქაღალდეში. ასე რომ, შეიტანეთ. და მართლაც, შევხედოთ რა გააკეთა. იგი გადავიდა ჩემთვის მხოლოდ თარგმნეს სამუშაო გარემოს ნაცვლად საქართველოს შევიდა pset1, რომელიც სამუშაო გარემოს. და ახლა თუ მე აკრიფოთ "LS", არსებობს მთელი bunch of პერსონალი. იქ არის "greedy.c". ასე რომ, ახლა ნება მომეცით გამოიყენოთ mv ფაქტიურად გადაადგილება "greedy.c" შევიდა pset1. ასე რომ, ბევრი Linux ბრძანებები მუშაობა ზუსტად მოსწონს ეს. ისინი ყურად არ არგუმენტები ან ისინი მიიღოს ერთი არგუმენტი ან მათ მიიღონ ორი ბრძანება ხაზი არგუმენტები და სხვ. და ამ შემთხვევაში, ეს ფაქტიურად აკეთებს რა იგი აცხადებს, რომ, მიუხედავად იმისა, succinctly-- გადაადგილება greedy.c შევიდა pset1. შეიტანეთ. არაფერი არ მოხდება. მაგრამ თუ მე გავაკეთოთ ls ერთხელ, ხარბ გაქრა. და თუ მე "cd pset1", შეიყვანეთ და მაშინ ls ერთხელ, ახლა ეს უფლება ადგილი. როგორც განზე, თუ ზოგიერთი reason-- განსაკუთრებით თუ თქვენ გაქვთ წყვეტილი ქსელის კავშირი ან თქვენ ფეხით გარშემო კამპუსში თქვენი ლეპტოპი სახურავს დაიხურა და შემდეგ გახსნა ეს ისევ და თქვენი სამუშაო გარემოს როგორც ჩანს, გარკვეულწილად გარეთ sync, არ არის დიდი გარიგება. უბრალოდ განაახლეთ თქვენი ბრაუზერის ფანჯარა, და ეს უნდა resync ისე, რომ მარცხენა ფაილი ბრაუზერში გამოიყურება ზუსტად როგორც ტერმინალის ფანჯარაში. არ უნდა ფიქრი. როდესაც ეჭვი, განაახლეთ გვერდი, ასე რომ სანამ თქვენ გადაარჩინა ფაილი უკვე. კარგი. ასე რომ, mv ასევე შეიძლება გამოყენებული იქნას გადარქმევა ფაილი. და მოდით შევხედოთ ამ საბოლოო ბრძანების აქ. ასე რომ, suppose-- და ეს არის super საერთო, ძალიან, დასაწყისში. ზოგიერთი სტუდენტები ზოგჯერ შევქმნათ ფაილი მოუწოდა, ვთქვათ, რა არის ერთი? როგორც "WATER.C". ასე რომ მე უბრალოდ დაწეროთ, რადგან უმიზეზოდ, ყველა Caps. მაგრამ ეს არ არის სწორი სახელი ფაილი თუ მხოლოდ იმიტომ, რომ ჩვენი პრობლემა კომპლექტი დაზუსტება არ გეტყვით ფაილის შენახვა როგორც ყველა caps "WATER.C". ამის ნაცვლად, ჩვენ ველით, "water.c" ამას. და, ფაქტობრივად, ეს არის პრობლემატურია, რადგან check50, პროგრამა თქვენ აპირებს შეხვდება პრობლემა მითითებული ერთი, რომელიც ავტომატურად ამოწმებს სისწორეში თქვენი კოდი აპირებს დაწეროთ თქვენ თუ მას არ შეუძლია მოვძებნოთ "water.c" ყველა ამას. ასე რომ, მე და ეს უნდა გამოვასწოროთ. ასე რომ, ბევრი სხვადასხვა გზა ამისათვის, რომელთაგან პირველი იქნება კონტროლის დააწკაპუნეთ ან მარჯვენა click ფაილის სახელი და უბრალოდ შეცვალოს სახელის შეცვლა. სრულიად ჯარიმა ამის გაკეთება. მაგრამ ერთხელ, დღეს, მოდით ამას ცოტა fancier. მოდით გამოვიყენოთ mv შეცვალოს "WATER.C", რათა "water.c". ასე, რომ თქვენ ასევე შეგიძლიათ გამოიყენოთ პირველი არგუმენტი გადარქმევა მას მეორე არგუმენტი თუ მეორე არგუმენტი არ არის, ფაქტობრივად, საქაღალდე ან დირექტორია სახელი. კარგი. და ბოლოს, პატარა ხრიკი ასე რომ მე ვარ ჩემი სამუშაო დირექტორია მომენტში. თუ მინდა შეღწევას pset ერთი, მე რა თქმა უნდა აკრიფოთ "cd pset1." მაგრამ ეს ასე tedious აკრიფოთ "pset1" ან აღარ ფაილის სახელები ან დირექტორია სახელები მაინც. ასე რომ, ძალიან ხშირად Linux, თუ რა შეგიძლიათ გააკეთოთ დაიწყოს აკრეფით "pse" და მხოლოდ მოგწყინდება, მოხვდა Tab, და ნება კომპიუტერული ფიგურა ის თქვენთვის. Super სასარგებლო შეღწევას, რომ ჩვევა. მხოლოდ დაჭერა არის, თუ თქვენ გაქვთ რამოდენიმე ფაილი ან ფოლდერები დაწყებული ასო "P" ან "ps", ალბათ აკრიფეთ რამდენიმე უფრო ადრე კომპიუტერი იცის, რა უნდა გააკეთოს. MARIA: ჩვენ გვსურს კომბინაციები. დავით Malan: ეს ნება გადარჩენა თქვენ ამდენი დრო. ასევე, როგორც ვთქვით, ლექცია, თქვენ შეგიძლიათ გადახვევა მდე ისტორიაში, და ქვემოთ, იპოვოს ცოტა ხნის წინ შესრულებული ბრძანებები, ასევე. კარგი. ახლა, მოდით იქცეს ჩვენი ყურადღება უკან მარტივი პროგრამა, hello მსოფლიოში. ასე რომ, ჩვენ შედგენილი ეს ზუსტად. და ახლა, რატომ არ ვიღებთ შევხედოთ მონაცემთა ტიპები და შემდეგ გადასვლას რამდენიმე შესაბამისი Scratch ბლოკები C. MARIA: გასაოცარია. ასე რომ, ახლა, რომ თქვენ დაიწყო წერილობით პროგრამების C, ჩვენ ვაპირებთ, რომ დაიწყოს საუბარი მონაცემთა ტიპები და ცვლადი. ასე რომ ზოგიერთი მონაცემთა ტიპები, რომ სურს იცოდეს დაწყებული ახლა არიან, რომ მონიშნულია ლურჯი. ასე რომ, ჩვენ გვაქვს int, პირველ რიგში, რომელიც დგას მთელი რიცხვი. და რომელიც ფლობს რიცხვებით, როგორც თქვენ შეიძლება ჰქონდეს guessed-- ასე 1, 2, 3, და ნებისმიერი სხვა რიცხვებით რომ თქვენ შეგიძლიათ წარმოიდგინოთ. დავით Malan: ასევე უარყოფითი. MARIA: ასევე ნეგატიური, yep. და 0. მაშინ ჩვენ გვაქვს მოძრავი, რომელიც მცურავი პუნქტიანი ნომრები. ასე რომ, ყველა რეალური ციფრები რომ აქვს ათობითი რაოდენობა. ასე რომ, 5.0, 5.2, და კიდევ უფრო მეტი ციფრები შემდეგ ათობითი წერტილი, ისევე, და ასევე ნეგატიური პირობა. მაშინ ჩვენ გვაქვს char რომელიც ხასიათი. ასე რომ, მე ვფიქრობ, რომ ჩვენ ვისაუბრეთ ეს ლექცია დღეს. მაგრამ ჩვენ გვაქვს წერილები, მაგალითად A, B,, C, რომელიც შეიძლება შენახული, როგორც char. მაგრამ მაშინ ჩვენ გვაქვს ბევრი სხვა სიმბოლოები რომელიც შეიძლება შენახული, როგორც char. და იმ ინახება ASCII. და მაშინ ჩვენ გვაქვს bool, რომლებიც Booleans. და იმ შეაფასოს ჭეშმარიტი ან ყალბი ან 1 და 0, შესაბამისად. დავით Malan: შეგახსენებთ, რომ bool მოდის CS50 ბიბლიოთეკა. ასე რომ, ეს არ არის ჩაშენებული C, მაგრამ სუპერ სასარგებლო აქვს ცნება ჭეშმარიტი და ყალბი. და მიუხედავად იმისა, შეიძლება აზრით გართობა ფაქტი. Bool, ტექნიკურად საჭიროებს რამდენი ბიტი, მართლაც, წარმოადგენს True წინააღმდეგ ყალბი? რამდენი ბიტი ფიქრობთ, თქვენ უნდა, მაქსიმალურად? ჰო, მხოლოდ ერთი. გამოდის, რომ C ვერ მოგცემთ მხოლოდ ერთი bit. უმცირესი ერთეული ზომის შეგიძლიათ მიიღოთ რვა. ასე რომ, ეს ცოტა არარაციონალური ისინი თქვენ გამოყენებით მთელი byte, რვა ბიტი, წარმოადგენს ჭეშმარიტი ან ცრუ. მაგრამ ეს მხოლოდ ისე, როგორც არის განხორციელებული C by CS50 ბიბლიოთეკა. MARIA: და მერე პირობა, რომ ჩვენ არ ვაპირებ ვისაუბრო როგორც ინტენსიურად უფლება, ახლა ორმაგი, რომ არის უფრო დიდი მოძრავი. დიდხანს გრძელი და მოკლე ასევე მთელი რიცხვები. დავით Malan: მართლაც. In Hacker გამოცემა pset ერთი, რეალურად გამოვიყენოთ ხანგრძლივი ხანგრძლივი. მაგრამ სტანდარტული გამოცემა, ეს არ უნდა იყოს საჭირო. MARIA ზემოთ. კარგი. ასე რომ, operators-- თქვენ უნდა ალბათ იცნობს უმეტესობა ამ. გარდა ამისა, +; გამოკლება, -. გამრავლება, ჩვენ გვაქვს *. ასე რომ, არ არის X, რომ ჩვენ, როგორც წესი, იყენებენ. სამმართველოს, ჩვენ გვაქვს წარმატებული. და modulo არის ჩვენი ბოლო ოპერატორი, რომელიც ჩვენ ვაპირებთ ვისაუბროთ ახლა. ის ოპერატორი, რომელიც საშუალებას გვაძლევს მიიღოს დარჩენილი სამმართველოს. ასე რომ, თუ ჩვენ გვაქვს 4% 2, 4 დაყოფილი 2 2 ერთად დარჩენილი 0. ასე რომ 4% 2 0. 4% 3 1. 4% 5 4, როგორც თქვენ ვერ მიხვდა. და მახსოვს, როდესაც გამოყენებით ყველა ამ ოპერატორები გამოიყენოს PEMDAS წესები. დავით Malan: ასე უნდა იყოს მკაფიო, თუ ამის 4% 2, რატომ არის, რომ 0, ზუსტად? MARIA: იმის გამო, 4 იყოფა 2 2 ერთად დარჩენილი 0. ასე რომ, modulo გვაძლევს, რომ დარჩენილი, როგორც განსხვავებით შედეგი გაყოფა. დავით Malan: მართლაც, ის, რაც ჩვენ იპოვით ეს სასარგებლო არის, რომ გარკვეული პრობლემები რომ არ არის აუცილებელი ერთი, თუ გვინდა, რომ აქვს ეფექტი ზღუდავს თავს სპექტრი ნომრები მოსწონს 0 მეშვეობით რაღაც, თქვენ შეგიძლიათ გამოიყენოთ modulo გადაიტანოთ გარშემო უფრო ადრე, ვიდრე, როგორც 2 მილიარდი ან 4 მილიარდი ღირებულება, რომელიც ჩვენ ვისაუბრეთ ლექცია. MARIA: ჰო. და კიდევ "ხარბ" ჩვენ შეიძლება. დავით Malan: დიახ, პრობლემა მითითებული ერთი, ისევე. MARIA: ჰო, ლამაზი. დავით Malan: კარგი მინიშნება. MARIA: უკაცრავად. ლოგიკური expressions-- ასე ლოგიკური ოპერატორები, ჩვენ ვაპირებთ ვისაუბროთ ყველა ეს რომ ხედავთ აქ. ასე რომ, ახლა, ჩვენ გვაქვს ორი თანაბარი ნიშნები ჩამოთვლილი შეადგენს. ასე რომ, ეს შედარებით. ჯერჯერობით, ჩვენ მხოლოდ მინახავს ერთი ტოლობის ნიშანი. ეს მაშინ, როდესაც ჩვენ დაავალოს მნიშვნელობა ცვლადი. ასე რომ, თუ ჩვენ ვნახეთ int n = 5, მაშინ ჩვენ დანიშნული 5 ცვლადი n. მაგრამ თუ ჩვენ გვინდა გამოვიყენოთ == for შედარებით, ჩვენ შეგიძლიათ შეამოწმოთ თუ n == 5. და თუ n == 5, მაშინ, რომ მართალია. ასე რომ, ლოგიკური ოპერატორები საშუალებას გვაძლევს, ძირითადად, შეაფასოს ლოგიკური გამონათქვამები ჭეშმარიტი ან ცრუ. ასე რომ, არა equals-- ჩვენ გვაქვს ძახილის ნიშნის და შეადგენს. ასე რომ, ჩვენ შეიძლება ასევე შემოწმება, თუ n არ უდრის -5 ბლოკის ისე n! = 5. ნაკლებია, ნაკლებია ან ტოლია, უფრო მეტი, ვიდრე მეტია ან ტოლია და მაშინ ჩვენ გვაქვს ლოგიკური და და ლოგიკური ან. და იმ საშუალებას გვაძლევს შევაფასოთ სხვადასხვა ლოგიკური გამონათქვამები ერთად ძირითადად გავერთიანდეთ, როგორც ერთი მთელი ლოგიკური გამოხატულებაა. ასე რომ, თუ ჩვენ გვინდა, რომ იპოვოთ ნომერი, ვთქვათ, რომ არის უფრო მეტი, ვიდრე 5 მაგრამ არანაკლებ 15 ამავე დროს, ჩვენ უნდა გამოიყენოთ ლოგიკური და ოპერატორს, რომ ნახოთ, თუ n მეტი 5 && n არანაკლებ 15. დავით Malan: აქ, ძალიან, რომ ეს მართლაც ადვილია დილით შემთხვევით გამოყენება მხოლოდ ერთი ampersand ან ერთი ვერტიკალური ბარი. და იმედია შემდგენელი დაწეროთ თქვენ იმიტომ, რომ ისინი რეალურად აქვს ძალიან განსხვავებული მნიშვნელობა აქვს. მათთვის საინტერესო, ისინი გამოიყენება bitwise ოპერაციები, მოქმედი ინდივიდუალური ბიტი. მაგრამ თქვენ გსურთ წყვილი მათ აქ. და სუპერ მნიშვნელოვანია, რომ პირველი, თანაბარი ნიშანი, რაც თანასწორობის ოპერატორს როგორც განსხვავებით დავალება ოპერატორი. MARIA: და ვერტიკალური ბარი შორის მდებარე წაშლა და დაბრუნება. დავით Malan: დიახ. ტიპიური აშშ კლავიატურაზე. MARIA: Yep. მოდით ხტომა მარჯვენა პირობითი განცხადებები. In Scratch, თქვენ უკვე ჩანს, ალბათ, თუ განცხადებებს, რომელიც საშუალებას გაძლევთ თუ რაღაც მართალია, მაშინ რამე სხვას. ასე, რომ თქვენ შეიძლება არ სურდა შეამოწმეთ თქვენი Sprite არის ეხება ზოგიერთი სხვა Sprite, და სასაზღვრო თქვენს ეკრანზე. და მაშინ შეიძლება არ სურდა დასრულდება თამაში ან რამე სხვას. ასე რომ, სინტაქსი, რომ არის "თუ (მდგომარეობა)." ასე რომ, თუ თქვენი Sprite, რომელიც ეხება რაღაც, მაშინ არის შიგნით Curly braces. მაშინ ჩვენ გვაქვს თუ-სხვაგან განცხადებებს. Else საშუალებას გვაძლევს, რომ რამე თუ პირობით, რომ ჩვენ შემოწმება დასაწყისში არ არის ჭეშმარიტი. ასე რომ, თუ Sprite ეხება საზღვრის ამისათვის, სხვა რამე სხვას. ასე რომ, წინააღმდეგ შემთხვევაში, რამე სხვას. მაშინ ჩვენ გვაქვს მოკლე მაგალითია. ასე რომ, თუ (military_time <12), ჩვენ გვინდა printf "დილა მშვიდობისა!" Else ჩვენ ვაპირებთ printf "საღამო მშვიდობისა!" ძირითადი მაგალითად. დავით Malan: კარგი. MARIA ზემოთ. ახლა ჩვენ გვაქვს შეცვლა განცხადებები. გადასვლა განცხადებები ზოგადად can საშუალებას გვაძლევს, რომ ბევრი იგივე რომ ჩვენ უბრალოდ ვისაუბრეთ შესახებ თუ განცხადებებს. მაგალითად, ახლა ჩვენ გვაქვს ზოგადი სახით შეცვლა განცხადება რომელიც საშუალებას გვაძლევს მიიღოს ცვლადში n და შეადაროთ იგი ბევრი განსხვავებული ღირებულებები, რომელიც აქ მოუწოდა constant1, constant2. ჩვენ შეიძლება კიდევ ბევრი გვაქვს. და იმ უწოდებენ შემთხვევაში. ასე რომ, თუ ჩვენ გვაქვს შეცვლა statement-- და ეს სამუშაოები მხოლოდ integers-- გვაქვს ცვლადი ამ შემთხვევაში, რომ n. იმ შემთხვევაში, თუ ცვლადი n არის ტოლი constant1, ჩვენ შეასრულოს გარკვეული მონაკვეთში კოდი ან რაღაც, რომელიც ჩვენ გვინდა გავაკეთოთ. და მაშინ ჩვენ შესვენება. ასე რომ, შესვენების იმას ნიშნავს, რომ შეცვლა განცხადება შეწყდება შესრულებაში, თუ n უდრის constant1, და შემდეგ თქვენი პროგრამა გაგრძელდება. ეს იქნება გასასვლელად გარეთ გადახვიდეთ განაცხადი და იგი ყველაფერს კვლავაც გააკეთოს რაღაც. თუმცა, თუ n არ უდრის constant1, მაშინ საქმე constant2 მოწმდება. ასე რომ, თუ n უდრის constant2, რომ სხვა snippet კოდი შესრულდება. და მაშინ ყველაფერს შესვენება თუ რომ უდრის იგი. და მაშინ ჩვენ შეიძლება ჰქონდეს also-- არა აუცილებლად, though-- რა შემთხვევაში, რომელიც მოხდება თუ n არ უდრის ნებისმიერ შემთხვევაში, რომ თქვენ არ ჩამოთვლილი. და რა შემთხვევაში, ჩვენ ასევე არ უნდა შესვენების აუცილებლად იმის გამო, რომ შეცვლა განცხადება ეცოდინებათ ის, რომ უნდა დასრულდეს დეფოლტის შემდეგ იმ შემთხვევაში, თუ ეს საქმე. დავით Malan: მაგრამ სტილისტურად, ჩვენ ყოველთვის დააყენა იგი არსებობს. MARIA: ჰო. დავით Malan: ჰო. ასე რომ, განსაკუთრებით მაშინ, როდესაც დაწყებული გარეთ, მით უმეტეს, თუ მათ შორის, ნაკლებად კომფორტული, მე პირადად უბრალოდ რეკომენდაცია გამყარებაში ifs და ifs-elses და თუ-სხვაგან თუ-elses და ა.შ. თუ მხოლოდ იმიტომ, რომ ისინი პატარა უფრო მარტივია. ეს არის ლამაზი ოპტიმიზაცია, ან ზოგჯერ ესთეტიურად ის ხდის კოდი უფრო იკითხება. და სინამდვილეში, ალბათ, შუა რიცხვებში სემესტრის ჩვენ დავინახავთ პრობლემა მითითებული, სადაც იგი უბრალოდ გამოიყურება უკეთესი და ადვილი წასაკითხი, რომ ადამიანები გამოყენებით შეცვლა განცხადებაში. მაგრამ არ ინერვიულოთ შესახებ შენარჩუნებისათვის ამ ნაადრევია. MARIA: ჰო. თუ თქვენ გაქვთ ბევრი თუ განცხადებებს, ეს შეიძლება არ იყოს ძალიან იკითხება. ეს არ უნდა იყოს ძალიან სწრაფი თქვენ უნდა გაიაროს ეს. ასე რომ გადახვიდეთ განცხადებები ძალიან სასარგებლო იქნება, ისევე. ასევე, არ გვახსოვდეს, არ დაგავიწყდეთ დააყენოს შესვენებები არსებობს. დავით Malan: არ გახსოვთ ეს. MARIA: იმის გამო, რომ მაშინ შეიძლება დაეცემა მეშვეობით ერთ შემთხვევაში სხვა. ასე ვთქვათ, ამ შემთხვევაში constant1 არ აქვს შესვენების განცხადება მას. მაშინ ჩვენ შეიძლება დაეცემა შიგნით შემთხვევაში constant2. და ჩვენ არ გვინდა გავაკეთოთ, რომ თუ ჩვენ უკვე მიაღწია შემთხვევაში constant1 და ის ტოლია n. ასე, მაგალითად, თუ ჩვენ გვაქვს ცვლადი n, რომელიც შეიცავს კლასის ნომერი, და ჩვენ გვინდა, რომ რა, რომ კლასის is-- თუ n უდრის 50, ჩვენ ვაპირებთ, რომ ბეჭდვა "CS50 არის კომპიუტერული მეცნიერების შესავალი I. " მაშინ ჩვენ ვაპირებთ, რომ შესვენება. და ეს არის ის. თუმცა, თუ n უდრის 51, ჩვენ ვაპირებთ ბეჭდვა "CS51 არის შესავალი კომპიუტერული მეცნიერების II. " ამის შემდეგ, კიდევ ერთხელ, ჩვენ ვაპირებთ, რომ დაარღვიოს. თუმცა, თუ შემდეგ ჩვენ დააყენა 124, 61, ნებისმიერ სხვა ნომერი, რომელიც თქვენ ალბათ ფიქრობთ, ან პროგრამა არ აპირებს იმის აღიარება, რომ. ასე რომ, ის აპირებს ამბობენ, "ბოდიში, მე ვარ არ იცნობს, რომ კლასი. " და ის აპირებს დაარღვიოს. დავით Malan: ასე რომ თქვენ ვხედავ თუ სხვაგან, თუ სხვაგან, იდეა აქ. ეს უბრალოდ სხვადასხვა syntax გამოხატავს ზუსტად იგივე იდეა. MARIA: ზუსტად. ახლა ჩვენ გვაქვს ჩვენი ternary ოპერატორები. ასე რომ ternary ოპერატორები სამი parts-- მდგომარეობაში, რაღაც უნდა გააკეთოს, თუ რომ მდგომარეობა არის ჭეშმარიტი, და მერე რაღაც უნდა გააკეთოს თუ ეს პირობა არის ყალბი. ასე რომ, ხედავთ, ძირითადად, სინტაქსი, რომ აქ. ჩვენ გვყავს კითხვის ნიშნის, და მაშინ the--, ჩვენ მოვუწოდებთ ეს? დავით Malan: მსხვილი ნაწლავის. MARIA: Colon. გმადლობთ. ბოდიში. მოდით შევხედოთ ჩვენი მაგალითი თუ ჩვენ არ შეგვიძლია, რომ გაგებით ამას class_num == 50. ასე რომ, აქ ჩვენ ვხედავთ ჩვენი ლოგიკური ოპერატორი == რომ ადარებს ცვლადი class_num 50. ასე რომ, class_num მაღაზიები რიცხვი. და თუ ეს რიცხვი უდრის 50, მაშინ ჩვენ აპირებს შესანახად "დავით Malan" დაწვრილებით სიმებიანი პროფესორი. თუ კლასში ნომერი არ გაუტოლდება 50, "არა დავით Malan" იქნება პროფესორი. დავით Malan: დიდი მადლობა. ასე რომ, ეს, როგორც ჩანს, ექვივალენტურია რა, იტყვით, ერთი შეხედვით? MARIA: იმისათვის, რომ ჩემთვის, როგორც ჩანს მოსწონს თუ-სხვაგან განცხადებებს. დავით Malan: ჰო. და სინამდვილეში, ეს არის ერთგვარი საკმაოდ ერთი ლაინერი, ასე ვთქვათ, განხორციელების ზუსტად ლოგიკა თუ-სხვაგან მაგრამ ყველაფერს აკეთებს ერთი ნაბიჯია. MARIA: ზუსტად. ჰო. ასე რომ, თუ-სხვაგან განცხადებებმა, შესაძლოა, დასჭირდეს ბევრი სივრცეში. ისინი შეიძლება იყოს ძალიან დიდი ხნის რაღაც მარტივია, როგორც ეს. ასე რომ, ეს შეიძლება იყოს ძალიან ლაკონური და ძალიან ლამაზი. ასე რომ, ახლა ჩვენ ვაპირებთ შევიდა ეძებს შესრულებაში რაღაც ისევ და ისევ, ისე შემოწმების დიდი მდგომარეობა რამდენჯერმე და შემდეგ გრძელდება, რომ რამე მიუხედავად იმისა, რომ მდგომარეობა მართლაც ასეა. ასე რომ, ეს მოაქვს ლამაზად ხოლო მარყუჟების. მარცხნივ, ჩვენ გვაქვს ჩვენი პირველი ხოლო loop. ასე რომ, როდესაც რაღაც არის ჭეშმარიტი, რომ რამე ისევ და ისევ. ასე რომ დარწმუნდით, შეამჩნევთ, რომ ჩვენი მდგომარეობა აქ დამტკიცდა ზედა. ვინაიდან ჩვენი მეორე მარყუჟის ჩვენ მოვუწოდებთ რომ do- ხოლო loop ჩვენ რაღაც, მაშინ ჩვენ შეამოწმოთ მდგომარეობა. და თუ ეს მდგომარეობა კვლავ მართალია, ჩვენ დავბრუნდებით და გავაკეთოთ, რაც კიდევ ერთხელ. ასე რომ, ძირითადი განსხვავება არის, სადაც მდგომარეობა შემოწმდება. და კოდი შეიძლება არასოდეს არ იქნება შესრულებული, თუ მდგომარეობა არ არის მართალია ხოლო loop. ვინაიდან ერთად do- ხოლო loop, ჩვენ გვაქვს კოდი რომელიც ყოველთვის შესრულდება ერთხელ მაინც. და შემდეგ, ხოლო იმ პირობით, კვლავ მართალია, ჩვენ შეგვიძლია დავუბრუნდეთ და iterate ერთხელ შიგნით. ასე რომ, რატომ ფიქრობთ, რომ ჩვენ გამოვიყენოთ do- ხოლო loop მეტი ხოლო loop? უფლება. ასე რომ, თუ ჩვენ გვინდა, რომ შეეკითხება შესახებ გარკვეული input, თუ გვინდა, რომ მათ ვთხოვთ, შესვლის მათი სახელი, ჩვენ გვინდა, რომ მინიმუმ ვთხოვთ მათ კიდევ ერთხელ. და თუ ისინი შევა ეს სახელი, რომ ჩვენ არ ვართ ვაპირებ ვკითხო მათ კიდევ ერთხელ იმიტომ, რომ ჩვენ უკვე ვიცით. მაგრამ თუ მათ არ შევა მათი სახელი, ან თუ ისინი მიუთითეთ, რომ რაღაც არის აშკარად არ არის სახელი, ჩვენ მაინც გსურთ გაგრძელება ეკითხება მათ თავიანთი სახელწოდება. დავით Malan: ლექცია გვქონდა მოსწონს ეს ერთად დადებითი int მაგალითად, იქ, სადაც არაფერი შეამოწმეთ პირველ რიგში იმიტომ, რომ თქვენ ჯერ კიდევ არ მიღებული int. ასე რომ, ჩვენ გვინდა, რომ ამას კიდევ int საწყისი user-- შემდეგ შეამოწმეთ იგი, ალბათ, ისევ და ისევ და ისევ. MARIA: ზუსტად. იყიდება მარყუჟების OK. ამისთვის მარყუჟების შეიძლება გვაძლევდეს ამის თითქმის ზუსტად იგივე რამ, ისევე. ეს, ფაქტობრივად, ზუსტად იგივე რამ. ასე რომ, არაფერია, რომ შეგიძლიათ გააკეთოთ ამისთვის მარყუჟების რომ თქვენ ვერ შეძლებენ უნდა გავაკეთოთ, ხოლო მარყუჟების. მაგრამ ამისთვის მარყუჟების ჩანდეს ცოტა ცოტა უფრო რთული სინტაქსურად იმიტომ, რომ მათ აქვთ სამ ნაწილად შიგნით რა ადრე იყო მხოლოდ მდგომარეობა ხოლო მარყუჟების. ასე რომ, პირველი ნაწილი, რომ თქვენ ზღვა, მარცხენა საუკეთესო, ჩვენ გვაქვს "int dwarves = 0." ასე რომ, ეს არის, სადაც ჩვენ ინიციალიზაცია ჩვენი ცვლადი. მაშინ ჩვენ გვაქვს მძიმით და "dwarves <7." ასე რომ, ეს არის, სადაც out მდგომარეობა რეალურად არის. ასე რომ, არის ის, რაც ჩვენ არ გვაქვს ბოლო მხოლოდ ხოლო მარყუჟის "ხოლო dwarves <7." აქ, რომ მიდის შუა ჩვენი ამისთვის loop. ასე რომ, "dwaves <7." და მაშინ ჩვენი ბოლო ნაწილი არის "dwarves ++" სადაც ჩვენ განაახლოს ჩვენი ცვლადი. ასე რომ, მთავარია, აცნობიერებენ, რომ ამ აპირებს გაიაროს ამ loop შვიდჯერ და შეასრულოს შვიდჯერ. ასე რომ, ჩვენ გვაქვს შვიდი Dwarves, და ისინი ყველა აპირებს ამბობენ, "მე აქ დაგეხმაროთ, ფიფქია " იმიტომ, რომ ისინი მზად არიან დაეხმაროს თოვლი თეთრი. ერთად ხოლო მარყუჟების, ჩვენ გავაკეთეთ ინიციალიზაციისას და განახლება არა შიგნით მდგომარეობაში, კიდევ ერთხელ, მაგრამ ან წინ ან შიგნით ხოლო loop დარწმუნდით, რომ we-- რადგან ჩვენ ყოველთვის უნდა იმ ნაწილებს. ასე რომ, უნდა დავრწმუნდეთ, რომ ჩვენ გვაქვს მათ, რომ ჩვენ გვაქვს კიდევ დასძინა, რომ ისინი , უბრალოდ არ შიგნით ფრჩხილებში. დავით Malan: ასე გამოიყურება მოსწონს ლექცია, მაგალითად, მე თითქმის ყოველთვის იყენებენ, ისევე, როგორც მე და n და საკმაოდ მოსაწყენი ცვლადები. როგორც ჩანს, შეგიძლიათ გამოიყენოთ უფრო გონივრულად დაასახელა ცვლადები, ძალიან. MARIA: ჰო, ეს ძალიან კარგია გამოიყენოს ცოტა უფრო აღწერითი ცვლადები იმიტომ, მით უმეტეს, თუ ვინმე არის კითხულობს თქვენი კოდი იქნებ თქვენ კლასელი ან თუ თქვენ თანამშრომლობს ერთად somebody-- თქვენ გვინდა დავრწმუნდეთ, რომ ისინი მესმის, რას ვაკეთებთ. კარგი. ასე რომ, ეს არის ძალიან funky-- ამისთვის loop შიგნით ამისთვის loop. მე არ ვიცი, თუ ჩვენ ვნახეთ ადრე. ალბათ არა. მაგრამ ჩვენ შეგვიძლია რეალურად ამას ასე რომ, მარყუჟების ნაცვლად მარყუჟების. ასე რომ, ჯერ არავის მინდა იქნებ ფეხით ჩემთვის მეშვეობით, თუ რა ხდება აქ? დავით Malan: მე მიიღოს stab. MARIA ზემოთ. დავით Malan: OK. ასე რომ, spoiler-- ჩვენ გვინდა ბეჭდვა პერსონალი ეს არის ის, ქვედა მარჯვენა კუთხეში არსებობს. MARIA: მარჯვენა. დიახ დიახ. დავით Malan: ასე, რომ ჩვენ მხოლოდ იმისათვის, რომ ნიმუში გამომავალი არსებობს. ასე, რომ შეიძლება ითქვას საწყისი უმაღლეს loop, რომ თქვენ iterating მეტი რიგები outermost მარყუჟის, ასე ვთქვათ. და თქვენ iterating მეტი სვეტების შიდა loop. და ინტუიციურად, ამ უნდა იმედია აზრი რადგან ის მიერ ბუნების ყველა პროგრამა ჩვენ ვნახეთ ადრე, printf, რომელიც არის ფუნქცია ჩვენ გამოყენებით, საბოლოო ჯამში, აქვს უნარი ბეჭდვა პერსონალის out არსებითად ხაზს. მომწონს, ერთხელ თქვენ outputted ახალი ხაზი, არსებობს არ გაორმაგდა უკან და ბეჭდვა რაღაც უმაღლესი ეკრანზე, მინიმუმ არ იყენებთ printf მოსწონს ეს. ასე რომ, ამ მხრივ, ეს ქმნის განცდა, რომ outermost მარყუჟი უნდა გულისხმობდა რიგები რადგან თითოეული მოცემულ გრაფაში, თქვენ აპირებს გვინდა ბეჭდვა XXXXX და შემდეგ გადაადგილება, რათა მომდევნო გრაფაში, XXXXX. ასე რომ, რიგები მოდის პირველი. და მაშინ თითოეულ ზედიზედ, თქვენ ბეჭდვა სვეტები. თუ თქვენ სცადა ამის გაკეთება პირიქით, ეს, ალბათ, არ გამოვა, როგორც თქვენ აპირებენ. MARIA: ჰო. ჩვენ უბრალოდ ვერ დაბრუნდეს წინა ზედიზედ printf. დავით Malan: რა საინტერესოა ერთ დღეს სტატისტიკა ფარგლებს, ფაქტობრივად, ის არის, რომ ზედიზედ არის int რომ ის დეკლარირებული უმაღლეს loop. მაგრამ შეამჩნია, რომ ეს არის კიდევ შიგნით, ასე ვთქვათ, curly აფრთხილებს, რომ დაუყოვნებლივ მოჰყვება, მიუხედავად იმისა, რომ ეს არ არის ტექნიკურად ფარგლებში იმ Curly braces. ასე რომ ზედიზედ არის ფარგლებს მთლიანად snippet კოდი, როგორც ქვეყნის შიგნით, გარე for loop და შიგნით შიდა ამისთვის loop. მაგრამ განსხვავებით, სადაც არის სვეტი არეალი? ცვლადი სვეტი? ჰო, მხოლოდ შიგნით loop. და რომ კარგადაა, რადგან ჩვენ არ თქვათ გარეთ მისი Curly braces. ყველა ჩვენ გავაკეთოთ არის ბეჭდვის ახალი ხაზის ბოლომდე იქ. ასე რომ, ფაქტობრივად, OK. ასე რომ, ეს ეფექტი, როგორც ჩანს, აკეთებს სამი რიგები და ოთხ სვეტს. MARIA: მარჯვენა. ასე რომ, პირველი ჩვენ გაიაროს ჩვენი პირველი რიგის. და მხოლოდ ჩვენი პირველი რიგის, ვაკეთებთ ოთხ სვეტს შიგნით პირველ რიგში. ასე რომ, ჩვენ ამობეჭდოთ ოთხი X ს. და მაშინ ჩვენ შეგვიძლია გასვლა ამისთვის მარყუჟის, მას შემდეგ, რაც ჩვენ უკვე დაბეჭდილი ოთხი X ს. ჩვენ ბეჭდვა ახალი ხაზი. და მაშინ ჩვენ გავლა იგივე პროცესი კიდევ ორი ​​რიგები იმისათვის, რომ სულ სამი. დავით Malan: აღსანიშნავია, რომ ეს მხოლოდ artifact შრიფტის, ის ფაქტი, რომ ნიმუში გამომავალი როგორც ჩანს, იმდენად გრძელია, როგორც იმისა, რომ იქ მეტი რიგები, ვიდრე სვეტები. მაგრამ ეს მხოლოდ იმიტომ, რომ X გრძელია, ვიდრე ეს არის ფართო. ეს არის ის, რაც ხდება იქ, პლუს თეთრი სტრიქონებს შორის. MARIA: მარჯვენა. ზემოთ. DAVID Malan ყველა უფლება. ასე რომ, სწრაფი შევხედოთ პრობლემა მითითებული ერთი, მიიღოს რაიმე შეკითხვები, და შემდეგ გადადოს? კარგი. ასე რომ პრობლემა კომპლექტი ერთი, არსებობს სამი პირველადი გამოწვევები, საბოლოოდ. მაგრამ პირველი, თქვენ იპოვით რომ პრობლემა შეიქმნა დაზუსტება, როგორც ბევრი psets ამ შემოდგომაზე, აპირებს ფეხით თქვენ მეშვეობით რამდენიმე გახურების წვრთნები, აღვნიშნო თქვენ რამდენიმე რესურსების რომ თქვენ შეიძლება იყოს ან არ ჩანს უკვე. მაგალითად, CS50 აქვს კომპლექტს shorts, რომლებიც მოკლე ვიდეო, არ განსხვავებით, მაგრამ ეს ძალიან თემის specific-- შესაძლოა, ხუთ წუთში, 10-ე წუთზე სიგრძე მარყუჟების ან პირობების შესახებ და ალგორითმები ან მოგვიანებით უფრო მოწინავე თემებზე, ისევე. და ჩვენ, როგორც წესი, ხმა იმ პრობლემას კომპლექტი ისე, რომ სტუდენტები აქვს რესურსი, რომელიც გადახედოს მასალა, რომელიც შეიძლება ჰქონდეს უკვე ამუშავება ლექცია ან სექცია. მაგრამ ეს გზა, რომ ეს უფრო მიზანმიმართული და მეტი მათ ხელთაა. ჩვენ ასევე, როგორც წესი, ხმა პრობლემა ადგენს რამ მოუწოდა walkthroughs. ასე რომ, თითქმის ყველა მაგალითები გავაკეთო ლექცია, სცენაზე აქ, ჩვენ ასევე გადაღებული on კამერა წინსვლის უფრო ნელა, უფრო ინტიმური walkthrough ჩემს მიერ ჩემი ლეპტოპი რომ კოდი, ხაზს ასე რომ, კლასის, ჩვენ ხშირად skim მეშვეობით რაიმე ან ვინმე იქნება interject ერთად პასუხს კითხვას. მაგრამ ეს სულაც არ ჩაიძიროს ამისთვის ყველას აუდიტორია. ასე, რომ თქვენ იპოვით კოდი walkthroughs უმეტესი მაგალითები რომ ჩვენ აქ ლექცია ასე რომ თქვენ შეგიძლიათ გავლა საკუთარი ტემპით და უკან გადახვევა და სწრაფი წინ და გაფართოებული საერთოდ, თუ გსურთ. იქ ხშირად რამდენიმე გახურების კითხვებით, რომ გთხოვთ, დაალაგოთ გააძლიეროს ეს მასალა და დარწმუნდით, რომ თქვენ კომფორტულად წინაშე გააგრძელოს დანარჩენი pset. და მაშინ, რა თქმა უნდა, იქ pset თავად. და ერთი რამ ჩვენ სრულიად შეგნებულად ნუ CS50 თითქმის ყველა უინტერესო ან ინტელექტუალურად უინტერესო მექანიკური ნაბიჯი, რომელიც თქვენ უნდა გავაკეთოთ თითქმის ყოველთვის ძალიან კარგად არის დოკუმენტირებული. მეტი რა თქმა უნდა ტერმინი, ჩვენ დაიწყოს ვთხოვო მეტი რიტორიკული შეკითხვები ისევე როგორც მახსოვს, როგორ უნდა გააკეთოს ეს და ეს? მაგრამ ზოგადად, თქვენ იპოვით რომ პრობლემა კომპლექტი მისაღებად თქვენ მეშვეობით მექანიკის რაღაც ისე, რომ საინტერესო, ინტელექტუალური გამოწვევები საბოლოოდ დარჩა თქვენ სტუდენტი. რომ განაცხადა, Zamyla, რომელსაც ჩვენ ინახება გულისხმობდა დღეს ლექცია, ჩვენი ერთ-ერთი დიდი ხნის პერსონალი წევრი, რომელიც ასევე ფლობს walkthroughs კონკრეტული pset პრობლემები, როგორიცაა mario და ხარბ, თუმცა არ არის წყალი ამ წელიწადში. და ეს იმ walkthroughs, რომ იგი ხშირად გვთავაზობს რჩევები და ხრიკები როგორ უნდა გააგრძელონ, არასდროს არ გეუბნებოდით ზუსტად რა უნდა გააკეთოს, მაგრამ rather--, როგორც მდგომარეობა, თუ will-- გაძლევთ მინიმუმ რამდენიმე იდეები ისე, რომ თქვენ, საბოლოო ჯამში, უნდა გადაწყვიტოს როგორ მივუდგეთ მათ. MARIA: სახის მოსწონს მაღალი დონის გაგება ლოგიკა რა ჩვენ ვთხოვთ თქვენ უნდა გააკეთოს. დავით Malan: ზუსტად. და, ფაქტობრივად, Zamyla ს walkthroughs ნიშნავდა, პასუხის გაცემა ხშირად კითხვაზე, თუ სად მე დაიწყო, განსაკუთრებით მაშინ, როდესაც ამ ხნის სპეციფიკაციები ცოტა daunting მოცემული ყველა ტექსტი და გამოსახულება, რომ მათ აქვთ მათ. ასე რომ, water.c, თქვენ ნახავთ, მას შემდეგ, რაც თქვენ დასრულდა იგი, რეალურად შედარებით მარტივია. აბსოლუტურად რამოდენიმე თქვენ აპირებს bang თქვენი ხელმძღვანელები კედელს ცდილობს გაერკვნენ, თუ რატომ ეს არ არის შედგენა ან რატომ არ გამართულად. მაგრამ ერთხელ თქვენ კეთდება მას და ერთხელ თქვენ გარკვეული დროის ჭიდაობის ნებისმიერი შეცდომები, რომ თქვენ შეიძლება ჰქონდეს, თქვენ ნახავთ, რომ ეს ძალიან მოკლე პროგრამა. ეს შეიძლება გაკეთდეს რამდენიმე ხაზი კოდი, რომელთა ჩვენ ვნახეთ აქ ლექციების უკვე, თუ თქვენ შეიკრიბება უფლება შენობა ბლოკად. და როგორც ჩვენ ვივარაუდოთ, აქ, ის სთხოვს თქვენ უნდა მიუთითოთ რამდენი წუთი ვინმე აღების საშხაპე კამპუსში. ჩვენ დააკონკრეტა პრობლემა მითითებული განაკვეთი ნაკადის წყალი , როგორიცაა, დაბალი დინების საშხაპე ხელმძღვანელი, ისევე როგორც Seinfeld clip ჩვენ ვიხილეთ, ან საპირისპირო შესახებ. და მაშინ უბრალოდ უნდა გავაკეთოთ ცოტა მათემატიკის, ნამდვილად არითმეტიკული გამოყენებით C ვუთხრა ჩვენს რამდენი, უხეშად, ბოთლი წყალი ის არის, რომ ეკვივალენტი თუ ჩვენ აღების n-წუთიანი შხაპი. ახლა კი, mario.c, ამ აპირებს უნდა იყოს ოდნავ აღარ პროგრამა. ეს ჯერ კიდევ არ იქნება ამ ხნის მანძილზე. რამდენიმე ხაზები უმეტეს water.c. მაგრამ ეს იქნება შესაძლებლობა ხელახლა ძველი სკოლა Mario პირამიდის Super Mario Brothers და ზოგიერთი შემდგომი. ის არ აპირებს გამოიყურებოდეს როგორც გალამაზებაში ან როგორც ფერადი, როგორც რომ ერთი არსებობს. ჩვენ უბრალოდ აპირებს გამოიყენოს ცოტა hashtags როგორც ჩვენ გვაქვს აქ ეკრანზე გამოყენებით ASCII ტექსტი. მაგრამ ეს იქნება სავარაუდო იმავე იდეას. და ეს იქნება განახორციელოს, რომ ერთი შეხედვით როგორც ჩანს, საკმაოდ simple-- მხოლოდ ბეჭდვა მარტივი პირამიდის. მაგრამ არსებობს რამდენიმე მახასიათებლები აქ საინტერესოა. გაითვალისწინეთ, რომ rightmost ზღვარზე პირამიდის რეალურად აქვს სიგანე ორი. ასე რომ, ორი თანაბარი სიმაღლე მწკრივი, რომელიც ხდის მოითხოვს ცოტა ცოტა აზრის, რათა დარწმუნებული ვარ, თქვენ რომ სწორედ, როგორც ეწინააღმდეგებოდა უბრალოდ შესანიშნავად დახრილი ონლაინ. ასე რომ, ცოტა კუთხეში შემთხვევაში მაგრამ შეესაბამება რეალურ თამაშში. და ეს ასევე არასამთავრობო აშკარა პირველი ერთი შეხედვით როგორ ბეჭდვა თეთრ სივრცეში. ასე რომ, როდესაც ვუყურებ ნიმუში გამომავალი აქ და ეს ასევე სპეც ეს ერთგვარი ჰგავს მართკუთხედი, მაგრამ დიაგონალი მართკუთხედი უკვე დაჭრილი off, და ეს მხოლოდ თეთრი ფართები, ასე ვთქვათ. ასე რომ, ხშირად დასმული კითხვა აქ ყოველთვის არის, ასევე, როგორ შემიძლია გადაადგილება hashtags მეტი არა? ან როგორ შემიძლია ბეჭდვა ცარიელი ფართები? და ეს არის, ფაქტობრივად, ადვილია ვიდრე ყველაზე სტუდენტები ვფიქრობ. მარჯვენა? თქვენ შეგიძლიათ მიახლოებით ეს ვიზუალურად მხოლოდ დარტყმის სივრცეში ბარი ერთხელ ან ორჯერ ან სამჯერ. ასე რომ, მიუხედავად იმისა, რომ ერთად printf ჩვენ თითქმის ყოველთვის ამობეჭდოთ სიმებიანი ან int ან სიტყვა "hello, მსოფლიოში "ან სერია სიტყვა, ასევე, შეგიძლიათ უბრალოდ ამობეჭდოთ პასუხის, სივრცე, unquote. და რომელიც რეალურად მისცეს თქვენ თეთრ სივრცეში არსებობს. გააგრძელეთ, რომ გონება და არ overthink ეს. თქვენ ნამდვილად უნდა გადაწყვიტოს ზედიზედ ზედიზედ ზედიზედ, არ არის განსხვავებით თქვენი მაგალითად მომენტში წინ, რამდენი იმ სვეტები უნდა იყოს თეთრი ფართები და რამდენი მათგანი უნდა იყოს hashtags. დასჭირდება ცოტა დრო, მაგრამ ეს საბოლოო ჯამში, ლოგიკა თავსატეხი ჯიშები. MARIA: ჰო. მაგრამ ლოგიკა აპირებს ზედიზედ მიერ ზედიზედ იქნება ძალიან სასარგებლოა. დავით Malan: ჰო. მე ვფიქრობ, რომ ნიმუში კოდი თქვენ gave-- კი მიუხედავად იმისა, რომ ეს არ იყო სრული პროგრამა. თქვენ კვლავ უნდა int და მთავარი და ბათილად და # include stdio.h ბევრი პერსონალის ლექცია. მაგრამ შენობა ბლოკები როგორც ჩანს, არ არსებობს. და მერე ბოლოს რაღაც ცოტა მეტი ალგორითმული. გამოდის, რომ ნებისმიერ დროს წასვლას CVS ან მაღაზიაში და ვინმე ხელში თქვენ ზე მოლარე გადასახადები და მონეტები, ცვლილება, გამოდის, რომ ისინი, ადამიანები, თუ არ იციან, თუ არა, ალბათ გამოყენებით რა არის ეწოდება ხარბ ალგორითმი, რომლის მიხედვითაც, თუ თქვენ კუთვნილს, ვთქვათ, $ 21 ცვლილება, რადგან რატომღაც თქვენ შეიძინა რაღაც ძალიან იაფია ძალიან დიდი კანონპროექტი CVS, ეს იქნება მართლაც შემაშფოთებელი, თუ მოლარე მისცა თქვენ 21 სინგლი ან, უფრო უარესი ამჟამად, მთელი ბევრი მონეტები. პირიქით, რაც გონივრული პირი ალბათ აპირებს არის, რომ ისინი აპირებენ დაიბრუნოს $ 20 და შემდეგ $ 1-კანონპროექტი, და გადასცემს თქვენ მხოლოდ ორ კანონპროექტს, ამ შემთხვევაში. MARIA: ასე რომ, ისინი ცდილობს მინიმუმამდე ცვლილება, რომ ისინი უკან თქვენ. დავით Malan: ზუსტად. და იგივე გარიგება მონეტები, ისევე. თუ თქვენ კუთვნილს, ვთქვათ, $ 0.50, იმედია თქვენ არ გსურთ 50 pennies. თქვენ ნაცვლად მინდა ორი კვარტლები, მაგალითად. ახლა, ეს არ ვივარაუდოთ, რომ მოლარეს საკმარისი ყველა დასახელების, რომ იგი შეიძლება მინდა გადმოგცეთ. მაგრამ ჩვენ არ გაძლევთ საშუალებას ვივარაუდოთ, იმდენი პრობლემა. და მიზანი, საბოლოო ჯამში, არის განახორციელოს C კოდი ხარბ ალგორითმი. ასე რომ, მომხმარებლის დასაშვებია ჩაწერეთ, თუ რამდენად შეცვალოს იგი კუთვნილს დოლარი და ცენტი, გარკვეული სახის მცურავი წერტილი მნიშვნელობა ალბათ. და მაშინ უნდა გავაკეთოთ მათემატიკის და გაერკვნენ ალგორითმულად, ასევე, რამდენი მონეტები შეიძლება მე ვაძლევ თქვენ მინიმალურად გადმოგცეთ ზუსტად, რომ თანხის ცვლილებას. მაგრამ იქ უნდა იყოს რამდენიმე სახიფათო ნაწილების აქ, არა? როგორც არის მთელი ორაზროვნება საკითხი. MARIA: ზუსტად. ასე რომ, მცურავი წერტილი ღირებულებები ორაზროვნება. ხომ არ ვსაუბრობთ ეს ლექცია დღეს? დავით Malan: ჩვენ გავაკეთეთ ბოლო დროს ლექცია. ჩვენ ვისაუბრეთ ორაზროვნება. და თუ თქვენ არ გსურთ მოტყუებას შესახებ თუ რამდენად შეცვლის მას აღუდგებათ. ასე რომ, walkthrough, in პრობლემა კომპლექტი სპეციფიკაცია, მისცეს გარკვეული აზრის, საბოლოო ჯამში, როგორც როგორ შეიძლება შეამსუბუქოს იმ ორაზროვნება შეცდომები, პოტენციურად. ეს არის თავიდან აცილება, რა თქმა უნდა, ამისთვის საშუალებებით ჩვენ ვსაუბრობთ. და, ფაქტობრივად, pennies-- იქნებ ჩვენ დაელოდება Zamyla, მე ვფიქრობ, ხრიკები არსებობს. ასე რომ, საბოლოო ჯამში, თქვენ იპოვით პროგრესირებას პრობლემა, რომელიც ამ კვირაში პირველი, რომელიც არის საკმაოდ პატარა, მაშინ საშუალო, მაშინ პატარა დიდი. მაგრამ ყველა მათგანი გამოიყენოთ შენობა ბლოკები გასულ კვირას, ამ supersection, პრობლემა კომპლექტი სპეციფიკაცია აყენებს თქვენ უამრავი რესურსი. მაგრამ მაინც, თუ ყველა იბრძოდა, განსაკუთრებით იმ ნაკლებად კომფორტული ყოველგვარი წინასწარი ფონზე, მოდის საათებში ორშაბათს და სამშაბათს და ოთხშაბათს და ხუთშაბათს. გადავიდეთ CS50 იმსჯელებს მეშვეობით რა თქმა უნდა ნახვა, მეშვეობით, რომელიც შეგიძლიათ სტატისტიკა თანამშრომლებთან და თანაკლასელები. მაგრამ, საბოლოო ჯამში, ვფიქრობ, საუკეთესო რჩევა მხოლოდ იწყება დასაწყისში. ეს არ არის სახის კლასის, რომ თქვენ უნდა დაწყებული psets ოთხშაბათს ღამით, ან უარესი, ხუთშაბათს ღამით. MARIA: ჩემი საუკეთესო რჩევა დაიწყო ორშაბათს. დავით Malan: ორშაბათს. ასე რომ, თუ თქვენ არ დაიწყო already-- არსებობს. მაგრამ მაშინაც კი თუ არა ორშაბათს, მაშინ სამშაბათს. ადრე უკეთესი. და ეს არის მიზეზი რა თქმა უნდა, აქვს ამდენი ბოლოს დღეებში გადმოგცეთ ცოტა ფსიქოლოგიური ზეწოლა უნდა დაიწყოს ადრე, მაგრამ მაინც მიადევნე რამ ხელიდან, როდესაც რამ დასჭირდეს ვიდრე თქვენ მოველით. MARIA: და გსურთ გამოიყენოს სამუშაო საათებში, როგორც თქვენ შეგიძლიათ, ძალიან. დავით Malan: ნებისმიერი კითხვები? კარგი. ისე, რატომ არ გვაქვს გადადოს აქ?