DAVID J Malan: Όλα δεξιά, έτσι αυτό είναι CS50. Και αυτό είναι σαφώς μια Παρασκευή. Και αυτό είναι το τέλος της εβδομάδας ένα. Έτσι, ίσως θυμάστε ότι είχαμε μείνει, τελευταία φορά, με μια δραματική στιγμή του είδους. Σύμφωνα με την οποία εκθέτουμε αυτό το ψέμα, ότι δεν έχει σημασία τι έχετε διδαχθεί αυξανόμενη επάνω, 1 διαιρείται με 10 δεν είναι, σε Πράγματι, 0.1 ή 0.100 ή 0,10000. Στην πραγματικότητα, εάν η συγκέντρωση αυτών των πρόγραμμα, όπως κάναμε χθες, με, κάνουν ανακρίβεια, και στη συνέχεια κάνουν τελεία, κάθετος, ανακρίβεια, μάθαμε ότι αυτό είναι ό, τι είναι 1 διαιρούμενο με το 10 είναι στην πραγματικότητα. Έτσι, αυτό δεν είναι πραγματικά αρκετά η περίπτωση. Αλλά αυτό δεν κάνει νύξη σε μερικά θεμελιώδης περιορισμός των υπολογιστών. Και πράγματι, μεταξύ των τα πράγματα θα πάμε να κάνουμε σήμερα είναι να ρίξετε μια ματιά γιατί αυτό έχει συνέβη, ποιες επιπτώσεις έχει αυτό, πώς η ανθρωπότητα έχει αποτύχει να κατανοήσουν αυτό σε κάποιο πολύ σοβαρές situations-- το αποτέλεσμα της το οποίο ήταν αρκετά τραγικά και expensive-- και επίσης ρίξτε μια ματιά στο πώς εμείς μπορεί πραγματικά να υπερασπιστεί έναντι αυτών των ειδών τους περιορισμούς. Έτσι, διαισθητικά, ίσως, γιατί είναι 1 διαιρείται με 10, σύμφωνα με τον υπολογιστή μου Εδώ, όχι μόνο το 1/10, 0.10; Ναι. Τι πιστεύεις? ΚΟΙΝΟ ΜΕΛΟΣ: Το Radix είναι διαφορετική; DAVID J Malan: Το τι είναι; Ω, το radix είναι διαφορετική; Έτσι, δεν είναι αρκετά. Είναι πραγματικά περισσότερο θεμελιώδους σημασίας για το υλικό. Άλλες σκέψεις; Ναι. ΚΟΙΝΟ ΜΕΛΟΣ: Μπορούν αντιπροσωπεύουν τους αριθμούς με διαφορετικό τρόπο; DAVID J Malan: Έτσι they-- Δεξιά. Αντιπροσωπεύουν αριθμούς με διαφορετικό τρόπο. Ανακριβώς, προφανώς. Έτσι ώστε is-- Λοιπόν, διαφορετικά από ό, τι; Ή από ποιον; Απο εμας? ΚΟΙΝΟ ΜΕΛΟΣ: Ναι. Δεν χρησιμοποιούν το δεκαδικό σύστημα [δεν ακούγεται]. DAVID J Malan: OK. Έτσι, κατά μία έννοια, δεν το κάνουν χρησιμοποιούν το δεκαδικό σύστημα. Κάτω από την κουκούλα, όλα είναι, πράγματι, δυαδικό, και αυτό είναι σχετικό, στην πραγματικότητα. Αλλά είναι ακόμα μια απλούστερη εξήγηση από αυτό. Ναι. ΚΟΙΝΟ ΜΕΛΟΣ: Μπορούν έχουν μόνο τόσα πολλά κομμάτια. Το μόνο που μπορεί να αποθηκεύσει μέχρι ένα ορισμένο βαθμό, όπως και με τους δεκαδικούς. DAVID J Malan: Ναι. Αυτό είναι αυτό που πραγματικά να πάρει σε αυτό. Αποδεικνύεται ότι οι υπολογιστές κατά κανόνα, πάντα θα είναι μόνο χρησιμοποιήστε ένα πεπερασμένο ποσό των πληροφοριών να εκπροσωπεί κάτι. Σωστά; Μετά από όλα, έχουμε μόνο ένα σταθερό ποσό του χώρου στο σκληρό δίσκο. Έχουμε μόνο ένα σταθερό ποσό RAM, ή μνήμη ηλεκτρονικού υπολογιστή. Και αν έχετε μόνο ένα σταθερό ποσό για κάτι, Σίγουρα δεν μπορεί πραγματικά να μετρήσει μέχρι στο άπειρο ή οποιοδήποτε αριθμό που θέλετε. Εσείς, το είδος, πρέπει να επιλέγουμε ό, τι σειρά αξιών που πρόκειται να υποστηρίξει. Και έτσι, για παράδειγμα, μια εβδομάδα ή δύο Πριν, όταν μιλήσαμε για ASCII, και μιλήσαμε για 8 bits, ή ένα byte, να το πω έτσι, ο μεγαλύτερος αριθμός που θα μπορούσαμε αντιπροσωπεύουν με 8 bits ήταν αυτό; 255. Και μπορούμε να αναπαραστήσουμε 256 συνολικές τιμές αλλά αν δεν περνάμε ένα από αυτά για 0-- Καλά, αλλά αν εμείς δαπανούν ένα από αυτά στο 0, τότε ο μεγαλύτερος αριθμός είναι, φυσικά, 255. Έτσι αποδεικνύεται, ότι αυτό είναι η περίπτωση επίσης, σε αυτό το πλαίσιο. Αρχίσαμε να μιλάμε, για τελευταία φορά, σχετικά με τους αριθμούς κινητής υποδιαστολής, η οποία είναι διαφορετικές από ακέραιους αριθμούς, σε ότι έχουν μια υποδιαστολή και, ελπίζω, ορισμένοι αριθμοί μετά από αυτό, αλλά είναι πάρα πολύ. Ένας υπολογιστής είναι μόνο τυπικά θα να χρησιμοποιούν 32 bits, 64 bits ίσως να αντιπροσωπεύουν μια Μιατιμήκινητήςυποδιαστολής. Έτσι, ακόμη κι αν έχουμε μεγαλώσει μάθηση των μαθηματικών και γνωρίζοντας ότι μπορείτε να έχετε απολύτως ένας άπειρος αριθμός από αριθμούς μετά την υποδιαστολή, δεν αν έχετε πεπερασμένη μνήμη. Εσείς, το είδος, πρέπει να στρογγυλοποιήσουν, ή ξεχωρίσετε και επιλέξετε ποιες αριθμοί θα πάμε να εκπροσωπεί. Και έτσι μπορείτε να σκεφτείτε, κατά μία έννοια, Αυτό είναι το πιο κοντινό υπολογιστή προσέγγιση με την τιμή 1/10 ότι μπορεί να πάρει, με μόνο 32 ή έτσι bits. Και δεν είναι μόνο το 1/10. Για παράδειγμα, αν μπορώ να αλλάξω αυτό να 1/3, η οποία πιστεύουμε ότι είναι ακόμα πιο απλή. Έτσι, 1 διαιρείται δια 3. Επιτρέψτε μου να αποθηκεύσετε το αρχείο. Επιτρέψτε μου να προχωρήσει και να μεταγλωττίσετε ξανά αυτό. Και επιτρέψτε μου να το εκτελέσετε ξανά. Και εδώ, προφανώς, δεν είναι το 1/3 0,3 και στη συνέχεια ένας άπειρος αριθμός από 3 της στη συνέχεια. Έχετε αυτή την ανακρίβεια στο τέλος. Γι 'αυτό και οι άνθρωποι είναι σωστές και ποιες που έμαθα είναι, στην πραγματικότητα, σωστή, αλλά είμαστε Αυξάνοντας κατά κάποιους περιορισμούς. Και ό, τι νόμιζα θα κάναμε σήμερα, έχει ξεκινήσει κοιτάζοντας, ειλικρινά, η τραγικές συνέπειες αυτής της Μερικές φορές, όταν η ανθρωπότητα δεν είναι αρκετά να εφαρμόσουν για αυτή την πραγματικότητα και τους περιορισμούς αυτούς. Και θα δούμε μια σειρά από βινιέτες από το History Channel που λαμβάνει μια ματιά στο πώς τα πράγματα έχουν πάει στραβά. Είναι περίπου 8 λεπτών, και θα επανέλθω μετά από αυτό και ρίξτε μια ματιά στο ακριβώς Τι άλλο μπορεί να πάει στραβά. Αν μπορούσαμε να σκοτεινιάσει την lights-- [ΑΝΑΠΑΡΑΓΩΓΗ] -Ηλεκτρονικοί Υπολογιστές, όλοι έχουμε έρθει να δεχτούν τα συχνά απογοητευτικό προβλήματα που πάει μαζί τους. Σφάλματα, ιούς και λογισμικό δυσλειτουργίες είναι μικρές τιμές να πληρώσει για την ευκολία. Αλλά σε τομείς υψηλής τεχνολογίας και υψηλής ταχύτητας στρατιωτικές και διαστημικές εφαρμογές του προγράμματος, το μικρότερο πρόβλημα μπορεί να μεγεθυνθεί σε καταστροφή. Στις 4 Ιουνίου, 1996, οι επιστήμονες που παρασκευάστηκε για να ξεκινήσει ένα μη επανδρωμένο πύραυλο Ariane 5. Μετέφερε την επιστημονική δορυφόροι είναι σχεδιασμένοι να προσδιοριστεί με ακρίβεια το πώς η Μαγνητικό πεδίο της Γης αλληλεπιδρά του με ηλιακούς ανέμους. Ο πύραυλος κατασκευάστηκε για ο Ευρωπαϊκός Οργανισμός Διαστήματος και ανασηκώνονται από τις εγκαταστάσεις της στην ακτή της Γαλλικής Γουιάνας. -Και Περίπου 30 δευτερόλεπτα η πτήση, την πρώτη τους παρατήρησα κάτι δεν πήγαινε καλά. Ότι τα ακροφύσια είχαν περιστροφή με έναν τρόπο που πραγματικά δεν θα έπρεπε. Περίπου 40 δευτερόλεπτα στην πτήση, σαφώς το όχημα ήταν σε μπελάδες, και ότι όταν έκαναν η απόφαση να την καταστρέψει. Ένας ανώτερος υπάλληλος ασφάλειας με τεράστια κότσια πατηθεί το κουμπί, ανατίναξαν τον πύραυλο προτού να μπορέσει να γίνει ένας κίνδυνος για τη δημόσια ασφάλεια. -Αυτή Ήταν η παρθενική ταξίδι του Ariane 5, και την καταστροφή του πήρε τοποθετήστε εξαιτίας ενός ελαττώματος ενσωματωμένο στο λογισμικό του πυραύλου. -Το Πρόβλημα σχετικά με την Ariane ήταν ότι υπήρχε ήταν ένας αριθμός που απαιτείται 64 bits για να εκφράσουν, και ήθελε να μετατρέψει σε έναν αριθμό 16 bit. Υπέθεσαν ότι ο αριθμός Ποτέ δεν επρόκειτο να είναι πολύ μεγάλη, ότι οι περισσότερες από αυτές ψηφία ο αριθμός 64 bit ήταν 0 '. Έκαναν λάθος. -Η Αδυναμία ενός πρόγραμμα λογισμικού να δεχθεί το είδος του αριθμού που παράγεται από ένα άλλο ήταν η αιτία της αποτυχίας. Ανάπτυξη λογισμικού είχε γίνει πολύ δαπανηρό μέρος της νέας τεχνολογίας. Η Ariane 4 πύραυλος ήταν πολύ επιτυχής, τόσο του λογισμικού που δημιουργήθηκε για αυτό ήταν επίσης που χρησιμοποιούνται για την Ariane 5. -Το Βασικό πρόβλημα ήταν ότι η Ariane 5 ήταν πιο γρήγορα, πιο γρήγορα επιταχύνονται. Και το λογισμικό δεν είχε αντιπροσώπευε γι 'αυτό. -Η Καταστροφή του πυραύλου ήταν μια τεράστια οικονομική καταστροφή, Όλα αυτά οφείλονται σε ένα λάθος λεπτό λογισμικού. Αλλά αυτό δεν ήταν η πρώτη χρόνο τα προβλήματα μετατροπής των δεδομένων είχε ταλαιπωρήσει τη σύγχρονη τεχνολογία πυραύλων. -Σε 1991, με την έναρξη του Πολέμου του Κόλπου Πρώτον, πυραύλων Patriot η γνώρισε ένα παρόμοιο είδος του προβλήματος μετατροπή αριθμού. Ως αποτέλεσμα, 28 άτομα, 28 Αμερικανοί στρατιώτες σκοτώθηκαν και περίπου 100 τραυματίες, όταν το Patriot, η οποία υποτίθεται ότι για την προστασία από τις εισερχόμενες scuds, απέτυχε να βάλει φωτιά σε ένα πύραυλο. -Όταν Το Ιράκ εισέβαλε στο Κουβέιτ και την Αμερική Καταιγίδα της Ερήμου ξεκίνησε στις αρχές του 1991, Πυραύλων Patriot μπαταρίες είχαν αναπτυχθεί για την προστασία της Σαουδικής Αραβίας και του Ισραήλ από το ιρακινό πυραύλων Σκουντ επιθέσεις. Ο πατριώτης είναι ένας, μεσαίου βεληνεκούς ΗΠΑ επιφάνεια-αέρος σύστημα κατασκευάζονται από την εταιρεία Raytheon. -Το Μέγεθος της αναχαίτισης Patriot, μόνη της, είναι περίπου, μήκους περίπου 20 πόδια. Και ζυγίζει περίπου 2000 κιλά. Και αυτό φέρνει μια κεφαλή του about-- Νομίζω ότι είναι περίπου 150 κιλά. Και η κεφαλή, ο ίδιος, είναι ένα υψηλής εκρηκτικό, η οποία έχει θραύσματα γύρω από αυτό. Το περίβλημα του κεφαλή είναι σχεδιαστεί για να λειτουργούν σαν σκάγι. -Οι Πύραυλοι είναι μεταφέρονται, 4 ανά εμπορευματοκιβώτιο, και μεταφέρονται από ένα ημι-ρυμουλκούμενο. -Η Patriot αντι πυραυλικό σύστημα πηγαίνει πίσω τουλάχιστον 20 χρόνια τώρα. Αρχικά είχε σχεδιαστεί ως αντιπυραυλικής άμυνας αέρα να καταρρίψουν τα αεροπλάνα του εχθρού. Στον πόλεμο του Κόλπου Πρώτον, όταν ο πόλεμος ήρθε μαζί, ο στρατός ήθελε να το χρησιμοποιήσει για να καταρρίψουν scuds, δεν αεροπλάνα. Η ιρακινή δύναμη δεν ήταν τόσο μεγάλο πρόβλημα, αλλά ο στρατός ήταν ανησυχούν για scuds. Και έτσι προσπάθησαν να αναβάθμιση του Patriot. -Intercepting Έναν εχθρό πυραύλων που ταξιδεύουν σε mach πέντε επρόκειτο να αρκετά δύσκολο. Αλλά όταν το Patriot Μεταφέρθηκε εσπευσμένα σε λειτουργία, ο στρατός δεν γνώριζε ένα Ιρακινές τροποποίηση που έκανε scuds τους σχεδόν αδύνατο να χτυπήσει. -Τι Συνέβη, είναι ότι οι scuds έρχονταν σε, ήταν ασταθής, είχαν ταλάντευση. Ο λόγος για αυτό, Ήταν τους Ιρακινούς, προκειμένου για να πάρει 600 χιλιόμετρα από μια σειρά πυραύλων 300 χιλιόμετρα, πήρε το βάρος από την μπροστινή κεφαλή και έκανε την κεφαλή αναπτήρα. Μέχρι τώρα, το Patriot προσπαθεί να έρθει στο Scud, και το μεγαλύτερο μέρος του χρόνου, η συντριπτική πλειοψηφία των ώρα, θα πετάξουν ακριβώς από τη Scud. -Μόλις Τους διαχειριστές συστημάτων Patriot συνειδητοποίησε το Patriot έχασε το στόχο της, που πυροδότησε κεφαλή του Patriot του, να αποφευχθούν πιθανές απώλειες εάν αφέθηκε να πέσει στο έδαφος. -Αυτό Ήταν αυτό που οι περισσότεροι άνθρωποι είδαν, αυτές οι μεγάλες πύρινες σφαίρες στον ουρανό, και παρερμηνευθεί ως παρακολουθήσεις των Scud κεφαλές. Παρά το γεγονός ότι στη διάρκεια της νύχτας ουρανούς, πατριώτες εμφανίστηκε για να είναι επιτυχώς καταστρέφοντας scuds, στο Νταχράν, θα μπορούσε να υπάρξει κανένα λάθος σχετικά με τις επιδόσεις του. Εκεί, το σύστημα ραντάρ του Patriot του χάσει τα ίχνη ενός εισερχόμενου Σκουντ, και ποτέ δεν ξεκίνησε, οφείλεται σε ελάττωμα του λογισμικού. Ήταν οι Ισραηλινοί που ανακαλύφθηκε για πρώτη φορά ότι το πλέον το σύστημα ήταν σε, μεγαλύτερη είναι η χρονική διαφορά έγινε, λόγω ρολόι ενσωματωμένο στον υπολογιστή του συστήματος. -Σχετικά Με 2 εβδομάδες πριν η τραγωδία στο Νταχράν, οι Ισραηλινοί αναφερθεί το Υπουργείο Άμυνας, ότι το σύστημα είχε χάσει χρόνο, ότι μετά από περίπου 8 ώρες λειτουργίας, παρατήρησαν ότι το σύστημα ήταν γίνονται αισθητά λιγότερο ακριβής. Το Υπουργείο Άμυνας ανταποκρίθηκε λέει όλοι οι μπαταρίες Patriot να μην αφήσει τα συστήματα για μεγάλο χρονικό διάστημα. Ποτέ δεν είπε τι ένα μεγάλο χρονικό διάστημα ήταν. 8 ώρες; 10 ώρες; 1.000 ώρας; Κανείς δεν ήξερε. -Η Μπαταρία Patriot σταθμεύουν στους στρατώνες στο Νταχράν, και εσφαλμένη εσωτερικούς ρολόι, ήταν για πάνω από 100 ώρες το βράδυ της 25ης Φεβρουαρίου. -Είναι Παρακολουθούνται χρόνο με ακρίβεια περίπου 1/10 του δευτερολέπτου. Τώρα 1/10 του δευτερολέπτου είναι μια ενδιαφέρουσα σειρά επειδή δεν μπορεί να είναι που εκφράζονται σε δυαδικό, ακριβώς. Πράγμα που σημαίνει, ότι δεν μπορεί να να εκφράζεται, ακριβώς, σε κάθε σύγχρονο ψηφιακό υπολογιστή. Είναι δύσκολο να πιστέψει κανείς, αλλά χρησιμοποιήσουμε ως παράδειγμα. Ας πάρουμε τον αριθμό, 1/3. Ένα τρίτο δεν μπορούν να εκφραστούν σε δεκαδική, ακριβώς. 1/3 είναι 0.333 εξέλιξη για το άπειρο. Δεν υπάρχει κανένας τρόπος να το κάνουμε αυτό, με απόλυτη ακρίβεια, σε δεκαδική. Αυτό είναι ακριβώς το ίδιο είδος πρόβλημα που συνέβη στην Patriot. Όσο περισσότερο το σύστημα έτρεξε, το το χειρότερο σφάλμα χρόνου έγινε. -Μετά Από 100 ώρες λειτουργίας, το σφάλμα στο χρόνο ήταν μόνο περίπου ένα τρίτο του δευτερολέπτου. Αλλά από την άποψη της στόχευσης ένα πυραύλων που ταξιδεύουν σε 5 Mach, οδήγησε σε ένα εντοπισμού σφάλμα του πάνω από 600 μέτρα. Θα ήταν ένα μοιραίο λάθος για τους στρατιώτες στο Νταχράν. -Τι Συνέβη, είναι μια εκκίνηση ήταν Scud ανιχνεύεται από έγκαιρης προειδοποίησης δορυφόρους, και ότι η νέα Σκουντ ήταν έρχονται στη γενική κατεύθυνσή τους. Δεν ξέρω από πού ερχόταν. -Ήταν Τώρα μέχρι το ραντάρ συστατικό του συστήματος Patriot, υπεράσπιση Νταχράν, να εντοπίσετε και να κρατήσει κομμάτι του εισερχόμενου πυραύλου εχθρού. -Το Ραντάρ ήταν πολύ έξυπνος. Θα ήταν πραγματικά παρακολουθείτε η θέση του Scud και στη συνέχεια να προβλέψουμε πού κατά πάσα πιθανότητα θα είναι, την επόμενη φορά, ο ραντάρ, έστειλε έναν παλμό έξω. Αυτό ονομαζόταν η πύλη φάσμα. -Στη Συνέχεια, μία φορά την Patriot αποφασίζει αρκετό χρόνο έχει πέρασε για να πάει πίσω και να ελέγξετε το επόμενο τοποθεσία για αυτό το αντικείμενο που εντοπίστηκε, πηγαίνει πίσω. Έτσι, όταν πήγε πίσω στο λάθος θέση, τότε δεν βλέπει το αντικείμενο και αποφασίζει ότι δεν υπήρχε αντικείμενο, ήταν μια ψευδής ανίχνευση, και πέφτει το κομμάτι. Η εισερχόμενη Scud εξαφανίστηκε από την οθόνη του ραντάρ, και δευτερόλεπτα αργότερα, χτύπησε στο στρατώνα. Η Scud σκοτώθηκαν 28 και ήταν η τελευταία ένα απολύθηκε κατά τη διάρκεια του πρώτου Πολέμου του Κόλπου. Τραγικά, το ενημερωμένο λογισμικό έφτασε στο Νταχράν της επόμενης ημέρας. Το ελάττωμα του λογισμικού είχε ήταν σταθερή, κλείσιμο ένα κεφάλαιο στην ταραγμένη ιστορία των πυραύλων Patriot. [Σταματήσετε την αναπαραγωγή] DAVID J Malan: Έτσι θα ρίξουμε μια ματιά κάποιοι παρόμοιοι περιορισμοί σε μόλις ένα κομμάτι. Αλλά πρώτα, ας μετάβαση σε μερικά FYI είναι. Έτσι ένα-- αυτό το Σαββατοκύριακο, εκεί θα είναι σούπερ τμήματα, τα οποία προορίζονται να αντικαταστήσουν τακτικά προγραμματισμένα τμήματα, τα οποία θα ξεκινήσει μία εβδομάδα, ως εκ τούτου. Ρίξτε μια ματιά στην ιστοσελίδα της CS50 του Για περισσότερες πληροφορίες σχετικά με εκείνους. Επίσης, θα κινηματογραφηθεί και θα μεταδοθεί ζουν για όσους δεν μπορούν να παρευρεθούν. Πρόβλημα που είναι 1 για το ιστοσελίδα μαθήματος ήδη, και θα ρίξουμε μια ματιά ότι σε μόλις ένα μικρό κομμάτι. Και ώρες γραφείου πάρα πολύ, θα λάβει τοποθετήσετε αυτή τη Δευτέρα έως Πέμπτη. Έτσι, αυτό ήταν το πιο κανονική Πρόγραμμα κοιτάξαμε την τελευταία φορά. Είναι σαν το πιο απλό το πρόγραμμα μπορείτε να γράψετε σε C, και ακόμη και αυτό είναι ένα κομμάτι από μια τολμηρή αξίωση. Σωστά; Επειδή υπάρχει πολλή φαινομενική πολυπλοκότητα σε αυτό. Έτσι, ας ρίξουμε μια γρήγορη ματιά σε τι μερικά από αυτά τα στοιχεία ήταν και στη συνέχεια προσπαθήστε να παράσχει ένα νοητικό μοντέλο για το πώς αυτά τα απλούστερα των προγραμμάτων εργαστούν, και στη συνέχεια θα αρχίσουμε κοιτάζοντας τα πράγματα ολοένα και πιο περίπλοκη. Έτσι, η γραμμή αυτή εδώ, υπογράμμισε σήμερα, σε κίτρινο, τι είπαμε, την τελευταία φορά, ότι αυτό το κάνει για μας; Ποιος είναι ο σκοπός που εξυπηρετεί; Καθένας από πιο πίσω; Ναι. ΚΟΙΝΟ ΜΕΛΟΣ: [δεν ακούγεται] DAVID J Malan: Καλή. Γι 'αυτό σας δίνει πρόσβαση στις εντολές, ή ας καλέστε τους λειτουργίες, ότι κάποιος άλλος έγραψε, που δηλώνονται, να το πω έτσι, σε κάποιο άλλο αρχείο. Έτσι θα δούμε τι ακριβώς ένα αρχείο .h είναι σε σχέση με ένα αρχείο .c, τελικά. Αλλά για τώρα, απλά να ξέρετε ότι printf, για παράδειγμα, είναι μεταξύ των λειτουργιών που έχουν δηλώνονται σε κάποιο άλλο αρχείο, κάπου άλλο στο σκληρό δίσκο του νέφους ότι μας επιτρέπει να αποκτήσετε πρόσβαση printf και να το χρησιμοποιήσετε χωρίς να χρειάζεται να επανεφεύρουμε που οι ίδιοι τροχό. Εν τω μεταξύ, το κύριο. Ποια ήταν η κύρια ανάλογο της, την περασμένη εβδομάδα; Ναι. ΚΟΙΝΟ ΜΕΛΟΣ: Πράσινη σημαία έχει πατηθεί. DAVID J Malan: Ναι. Ξυστό του, όταν πατηθεί πράσινη σημαία. Είναι σαν το κομμάτι του παζλ ότι ξεκινά τα πράγματα μακριά. Και έτσι Ομοίως, έκανε τον κόσμο αποφάσισε πριν από μερικά χρόνια ότι σε C, και ένα σωρό άλλες γλώσσες, αν θέλετε να γράψετε ένα πρόγραμμα, την πρώτη σας λειτουργία έχει να ονομάζεται, κύριοι. Και πρέπει να μοιάζει με αυτό. Αλλά θα έρθει πίσω, Μια άλλη φορά, σε ό, τι, int, και, κενό, σημαίνει ότι σε αυτό το πλαίσιο. Προς το παρόν, τα άγκιστρα είναι το είδος σαν σχήμα κομμάτι του παζλ του Scratch ότι συμπυκνώνει κάποιο αριθμό των γραμμών. Και ανάμεσα στις γραμμές εδώ, είναι αυτό εδώ. printf είναι μια συνάρτηση της οποίας σκοπό η ζωή είναι για να εκτυπώσετε μια μορφοποιημένη συμβολοσειρά. Και από τη σχηματοποιημένη, εννοώ εσάς να συνδέσετε σε τιμές κράτησης θέσης, και μπορείτε να καθορίσετε τον αριθμό των δεκαδικών σημεία, πόσους αριθμούς για να εκτυπώσετε μετά την υποδιαστολή και τα παρόμοια. Και printf, φυσικά, παίρνει ένα ή περισσότερα επιχειρήματα ή τις παραμέτρους, αλλιώς γνωστή, πιο απλά, ως εισροές. Έτσι printf, σαν μια παρτίδα του λειτουργίες, παίρνει εισόδους. Και αυτές οι εισροές έχουν αγκαλιάσει από τις δύο παρενθέσεις εδώ. Και μέσα από αυτά είναι μία είσοδο. Είναι μια κλωστή, όπως έχουμε αυτό που ονομάζεται, η οποία είναι απλά μια ακολουθία χαρακτήρων, σαν μια λέξη ή μια φράση, ή μια ολόκληρη δοκίμιο, ακόμη, ανάμεσα σε διπλά εισαγωγικά. Και αυτό είναι ό, τι πρόκειται να επηρεάσει το συμπεριφορά του printf επειδή, φυσικά, είναι απλά μια γενική λειτουργία εκτύπωσης. Δεν πρόκειται να ξέρουν τι να εκτυπώσετε, αν δεν το πω. Και τότε, μερικές μικρολεπτομέρειες. Τι είπαμε ότι αυτό το παράξενο ακολουθία συμβόλων είναι; Ναι. ΚΟΙΝΟ ΜΕΛΟΣ: Νέα γραμμή. DAVID J Malan: Νέα γραμμή. Έτσι αποδεικνύεται, δεν μπορείτε απλά να χτυπήσει, εισάγετε, όταν γράφετε το πρόγραμμα. Σε γενικές γραμμές, ο compiler πρόκειται να πάρει μια μικρή σύγχυση ως προς το τι εννοείτε. Αντίθετα, θα πρέπει να κυριολεκτικά λένε, να μου δώσει μια νέα γραμμή εδώ. Και έτσι / n είναι αυτό που σε γενικές γραμμές καλέσετε έναν χαρακτήρα διαφυγής. Έτσι, n, για τη νέα γραμμή. Και ο compiler ξέρει ότι όταν βλέπει / n, θα έπρεπε στην πραγματικότητα να προκαλέσει τον υπολογιστή, τελικά, ή printf, στην περίπτωση αυτή, να εκτυπώσετε μια πραγματική νέα γραμμή, όπως το χτύπημα του, αρχίζει, πλήκτρο στο πληκτρολόγιό σας. Και τέλος, τι έκανε λέμε αυτό το κομμάτι της σύνταξης είναι; Τι αντιπροσωπεύει; Ναι. ΚΟΙΝΟ ΜΕΛΟΣ: [δεν ακούγεται] DAVID J Malan: Είναι απλά το τέλος της γραμμής. Είναι το τέλος της πρότασης. Και να συνειδητοποιήσουμε ότι εμείς δεν κάνουμε βάζουμε παντού. Σίγουρα δεν τα βάλουν στα άκρα της κάθε γραμμής. Για παράδειγμα, δεν υπάρχει κανένας για το πρώτη γραμμή, δεν υπάρχει κανένας στη γραμμή με, κύριοι, δεν υπάρχει κανένας μετά τα άγκιστρα, αλλά θα αρχίσετε να βλέπετε και να πάρει εξοικειωμένοι με το πού λέγεται για. Και είναι σχεδόν πάντα μετά από μια συνάρτηση κλήση ή μια δήλωση, κάποια ενέργεια ότι είστε πράγματι παίρνετε. Και ξέρετε τώρα, ιδιαίτερα αν μεταξύ εκείνων λιγότερο άνετα, αυτά είναι τα είδη των ηλίθια πράγματα ότι θα καταλήξετε λάθος χτυπάς το κεφάλι σου στον τοίχο πάνω. Επειδή θα είναι λογικά σίγουροι για κάποιο πρόβλημα έχετε λύσει ένα πρόβλημα για σύνολο, και το καταραμένο πράγμα μόνο Δεν θα συντάξει ή ακόμα και να τρέξει. Και τόσο συχνά, από νωρίς, ότι πρόκειται να είναι επειδή χάσατε μια παρένθεση, ή χάσατε ένα ερωτηματικό. Και έτσι απλά να είναι προσεκτικοί από αυτά τα είδη των πραγμάτων, και προσπαθήστε να μην απογοητευτείτε από αυτά, επειδή κάνει πολύ γρήγορα αυτό το γίνει παλιό καπέλο. Αλλά είναι πολύ εύκολο να φτάσετε απογοητευμένοι νωρίς, ως αποτέλεσμα. Έτσι τώρα, ας ρίξουμε μια ματιά στο πώς Αυτή η γραμμή είναι στην πραγματικότητα λειτουργεί και στη συνέχεια να κοιτάξουμε έναν ελαφρώς πιο περίπλοκο. Έτσι έχουμε εδώ, η δυνατότητα να αντλήσει από αυτήν την οθόνη. Και ας υποθέσουμε ότι Αυτή είναι η οθόνη του υπολογιστή μου, αλλά γράφω την, γειά σου πρόγραμμα, και δεν έχουν εφαρμόσει, printf. Κάποιος άλλος έχει θέσει σε εφαρμογή, printf. Ποιος θα ήθελε να ισχυριστεί ότι έχουν θέσει σε εφαρμογή, printf; Αν μπορούμε να; Εντάξει, τι είναι το όνομά σου; Μαθητής 1: [? Κοπάλ. ?] DAVID J Malan: Copal, έλα επάνω. Έλα επάνω. Εντάξει. Έτσι έχουμε, εδώ, μερικές ετικέτες ονομάτων, δεδομένου ότι θα κάνουμε ένα μικρό παιχνίδι από αυτό. Και εμείς θα σας καλέσουμε, printf. Και αν θέλουν να έρθουν εδώ, ό, τι έχω μόνο που στην οθόνη, Είναι πολύ απλά, εγώ εκεί, αυτό. Εντάξει, έτσι, Γεια σας το όνομά μου είναι, printf, αν θέλετε να βάλετε ότι στις. Εντάξει. Και αν μπορείτε να πάτε περίπτερο από την οθόνη του υπολογιστή σαν να είναι η λειτουργία που ήρθε με αυτό το σύστημα του υπολογιστή. Και το σκοπό σας στη ζωή είναι για να εκτυπώσετε πραγματικά κάτι. Αλλά μοιάζει πολύ με το πρόγραμμα που Απλά έπρεπε στην οθόνη, εδώ, θα πάμε να πρέπει να πραγματικά να σας δώσω κάποια στοιχεία. Και έτσι, αν η είσοδος μου, εδώ, είναι Προφανώς, αυτό που πέρασε με τις printf, ας το είδος του να χλευάσει σαν αυτό. Πάω να γράψω κυριολεκτικά σε ένα κομμάτι χαρτί, "Γεια σου, κόσμε," ανάστροφη κάθετο Ν Και να είναι σαφής, τι Έχω μόνο που σε αυτό το κομμάτι χαρτί, μοιάζει με αυτό. Έτσι, όταν έχω τρέξει αυτό το πρόγραμμα, και αυτό κίτρινη γραμμή κώδικα εκτελείται, Είναι σαν να έχω, το πρόγραμμα Hello, είμαι παραδίδοντας κάποια στοιχεία μακριά σε μια συνάρτηση ότι κάποιος άλλος έγραψε. Και αν, με το δάχτυλό σας, θα μπορούσε στην πραγματικότητα, με το δάχτυλό σας, σχεδιάσετε στην οθόνη ανεξαρτήτως είναι αυτό που έχουν παραδοθεί, η επίδραση, τελικά, να είναι δείτε ακριβώς αυτό, πάνω στην οθόνη. Και μια μικρή θήκη γωνία εδώ. Και καλά, δεν θα πρέπει να δούμε η, νέα γραμμή, σε αυτό το σημείο. Θα ήταν λάθος για σένα να επιστήσει ρητά την αλλαγή γραμμής. Αλλά αν συνέχιζαν να γράφουν λόγια για το οθόνη, θα καταλήξετε κάτω από αυτό. Σας ευχαριστώ πάρα πολύ, αλλά ραβδί εδώ γύρω για μια στιγμή. Χρειαζόμαστε τώρα ένα άλλο εθελοντής, αν μπορούσαμε, ότι πρόκειται να πρέπει να παίξει το ρόλο of-- Είναι μόνο οι άνθρωποι στην ορχήστρα αμέσως. Πώς about-- OK. Ακριβώς εδώ. Έλα επάνω. Ποιο είναι το όνομά σου? ΦΟΙΤΗΤΙΚΗ 2: [? Ivay. ?] DAVID J Malan: Συγνώμη; ΦΟΙΤΗΤΙΚΗ 2: [? Ivay. ?] DAVID J Malan: Ethan, έλα επάνω. Κανένα? Μήπως να πάρω αυτό το λάθος, ακόμη και αφού το είπε δύο φορές; Έλα επάνω. Είναι δύσκολο να ακούσετε εδώ. ΕΝΤΆΞΕΙ. Και λυπάμαι, τι είναι το όνομά σου; ΦΟΙΤΗΤΙΚΗ 2: [? Ivay. ?] [? DAVID J Malan: Ivay. ?] ΕΝΤΆΞΕΙ. Προς το παρόν, αν δεν το κάνετε νου, που GetString. ΦΟΙΤΗΤΙΚΗ 2: OK. Cool. DAVID J Malan: Έτσι, αν θέλετε για να βρίσκομαι εδώ για μια στιγμή, ας ρίξουμε μια ματιά σε ένα ελαφρώς πιο σύνθετο πρόγραμμα, που τώρα έχει τρεις γραμμές κώδικα. Έτσι έχουμε, κάποια, αναφέρει το όνομά σας, χρησιμοποιώντας printf? δύο, ένα κάλεσμα για GetString, που ακολουθείται από μια ανάθεση σε ένα μεταβλητή που ονομάζεται, string s, ή που ονομάζεται s? και στη συνέχεια μια άλλη κλήση σε, printf, αλλά αυτή τη φορά με δύο εισόδους. Έτσι, έχουμε ήδη κάνει κατάσταση το όνομά σας, ή μάλλον, έχουμε ήδη κάνει μια κλήση printf. Έτσι, Πάω να γράψω, αναφέρετε το όνομά σας. Και ναι, τι Πάω να περνούν, printf, ακριβώς σε μια στιγμή, Είναι πολύ απλά, αυτό. Έτσι, εάν θέλετε να προχωρήσετε και να επιστήσει στην οθόνη, αυτό είναι η συμβολή σας τώρα. Εντάξει. Και ξεχνάμε εγχόρδων, έχουμε τώρα τη δική μας γραμμή κώδικα εδώ. Έτσι, στην, GetString, χρειαζόμαστε πραγματικά να καλέσετε, GetString. Έτσι, σκοπός σας στη ζωή είναι να απλά να περπατήσετε έξω στην ορχήστρα, αν μπορούσε, και να πάρει το όνομα κάποιου. Αλλά ας σας δώσω κάτι για να το βάλετε σε. Αν θέλετε, πηγαίνετε μπροστά και να πάρει μια σειρά, να πάρει το όνομα κάποιου σε αυτό κομμάτι χαρτί, αν μπορούσε. Εντάξει. Και θα δούμε, ακριβώς σε μια στιγμή, το όνομα του οποίου παίρνουμε. Εν τω μεταξύ, αυτό που πρόκειται να έχουν έτοιμο, είναι ένα κενό κομμάτι από χαρτί, στο οποίο, θα πάω να αποθηκεύουν ανεξαρτήτως αξίας, είναι ότι GetString επιστρέφει σε μένα, Ι, είναι μια μεταβλητή συμβολοσειράς που ονομάζεται, s. Εντάξει. Λοιπόν, τι έχουμε εδώ; Νικ. Εντάξει. Έτσι, έχουμε το όνομα του Nik εδώ. Έτσι, αυτό είναι ό, τι κυριολεκτικά έχει επιστραφεί για μένα, να το πω έτσι, με GetString. Εγώ, τώρα, πρόκειται να εκτελέσει την αριστερή πλευρά της έκφρασης, όπου απλά αντιγράψετε τα κάτω, για τους σκοπούς του σήμερα, Νικ. Μέχρι τώρα, έχω μια μεταβλητή ονομάζεται, s, αποθηκεύοντας το όνομα του Νικ. Έχω ήδη παραδοθεί στην printf, ένα προηγούμενο επιχείρημα. Αλλά στην τρίτη και τελευταία μας γραμμή κώδικα, έχω πραγματικά στο χέρι printf κάτι λίγο different-- "Γεια σας,% s," ανάστροφη κάθετο n. Και έτσι η τελευταία γραμμή θα πάω να send-- το τελευταίο πράγμα που είμαι πρόκειται να γράψω τώρα, είναι αυτό. Έτσι, οι δύο γραμμές κώδικα, ή και όχι την τελευταία γραμμή κώδικα, προσκλήσεις για δύο inputs-- ένα, αυτό, και τα δύο, αυτό. Έτσι, εάν η λειτουργία printf μας μπορούν τώρα να τις λάβει ως πρώτη ύλη, επιτρέψτε μου να καθαρίσετε την οθόνη σας. Στην πραγματικότητα δεν υπάρχει, μπορείτε να προχωρήσετε. Θα το αφήσουμε, δεδομένου ότι είναι στο ίδιο πρόγραμμα. Θα πρέπει να δούμε, γειά σου, Νικ. Εντάξει. Έτσι, αυτό ήταν αρκετά στεφάνες να πηδούν μέσα, απλά να γράψει, το κράτος σας το όνομα, και, γειά σου, Νικ. Αλλά αυτή η απλή ιδέα του μηνύματος παρόδω, διέλευσης εισόδου και εξόδου υποδοχής, είναι ακριβώς το μοντέλο που πρόκειται να έχουν ακόμη και τις πιο πολύπλοκες λειτουργίες. Έτσι, σας ευχαριστώ πολύ και στους δυο σας. Έχουμε μία υπέροχη στρες μπάλα εδώ για εσάς. Και σας ευχαριστώ για GetString μας και printf εθελοντές όσο. Ευχαριστώ. Εντάξει. Σας ευχαριστώ και στους δυο σας. Έτσι, έχουμε μιλήσει γι ' μέχρι σήμερα, ως επί το πλείστον για χορδές. Και αποδεικνύεται ότι η C μπορεί πραγματικά να καταλάβουμε μερικά διαφορετικά είδη δεδομένων. Στην πραγματικότητα, ας ρίξουμε μια ματιά σε αυτές εδώ. Έτσι C, και πολλές γλώσσες, καταλαβαίνουν τα πράγματα που ονομάζεται χαρακτήρες. Μια char είναι γενικά ένα μόνο byte, ή οκτώ κομμάτια. Και αυτό αντιπροσωπεύει έναν χαρακτήρα, όπως και το γράμμα Α, ή του κεφαλαίου Ένα γράμμα, ή το πεζό γράμμα Α, ή ένα θαυμαστικό, ή οποιοσδήποτε χαρακτήρας που μπορείτε να πληκτρολογήσετε σε πληκτρολόγιό σας, και μερικές φορές ακόμη περισσότερο. Μπορούμε επίσης να συμβεί για να δείτε επιπλέει. Ο πλωτήρας είναι, γενικά, ένα 32-bit αξία, ή τέσσερα bytes γιατί και πάλι, ένα byte είναι οκτώ bits. Έτσι, ένας πλωτήρας είναι Μιατιμήκινητήςυποδιαστολής, κάτι με ένα δεκαδικό σημείο. Και πράγματι, αυτό είναι ό, τι η ταινία μιλούσε περίπου, όταν μίλησε για την πλωτή σημείο αξίες, μερικοί σταθερό αριθμό bits χρησιμοποιείται για να αντιπροσωπεύει ένα πραγματικό αριθμό. Αλλά υπάρχουν και πράγματα που ονομάζεται διπλασιάζεται. Αυτά υπάρχουν σε Java, αν έχετε πάρει APC, και ένα διπλό, όπως το όνομα ευτυχώς προτείνει, είναι δύο φορές τόσο μεγάλη όσο ένα πλωτήρα. Είναι ακόμα ένας πραγματικός αριθμός, έχει μόνο περισσότερα bit με το οποίο να είναι όλο και πιο ακριβείς, ή για την αποθήκευση ακόμα και μεγαλύτερους αριθμούς. int είναι εύκολο. Μιλήσαμε γι 'αυτό την τελευταία φορά. Είναι απλά ένας ακέραιος αριθμός. Και είναι γενικά 32 bits, ή τέσσερα bytes. Και έτσι, αν έχετε, ας δούμε τώρα, 32 bits-- και κάναμε αυτή την εβδομάδα 0, πάντα τόσο briefly-- αν έχετε 32 bits, ποιο είναι το μεγαλύτερο αριθμός που μπορεί να αντιπροσωπεύει ως έναν ακέραιο; Ή να δώσει; Είναι σαν 4000000000, και αυτό είναι μόνο αν είμαστε που αντιπροσωπεύουν μόνο θετικούς αριθμούς. Αν έχετε 32 bits, και θέλετε να αποτελούν αρνητικούς αριθμούς, καθώς και, range σου είναι, κατ 'ουσίαν, αρνητική 2 δισεκατομμύρια έως 2 δισεκατομμύρια θετική. Αλλά γενικά, θα αρχίσουμε να σε 0 ανεβαίνουν στο 4000000000. Δεν χρειάζεται να γνωρίζουν με ακρίβεια, αλλά μπορούμε να δούμε αυτό, στην πραγματικότητα, αν εγώ απλά ανοίξει ένα μικρό αριθμομηχανή, εδώ. Μπορώ να κάνω 2 του 32, και αυτό είναι ακριβώς το πόσο μεγάλο, πόσες τιμές μπορείτε να αντιπροσωπεύουν, με 32 bits. Και είναι περίπου 4 δις ευρώ. Γι 'αυτό και θα συνεχίσουμε να βλέπουμε αυτόν τον αριθμό σε μερικές διαφορετικές θέσεις. Αλλά εάν χρειάζεστε περισσότερο αριθμούς από αυτό, αποδεικνύεται εκεί που κάτι που ονομάζεται μια μακρά μακρά. Και ένα μεγάλο χρονικό διάστημα είναι γενικά 64 bits, η οποία σημαίνει ότι είναι μια τάξη μεγέθους ακόμη μεγαλύτερο από ό, τι έναν int. Έτσι, δεν μπορώ καν να προφέρουν το μεγαλύτερο αριθμός που μπορείτε να αντιπροσωπεύουν, αλλά είναι σημαντικά μεγαλύτερο. Τώρα, ως ένα μέρος, ιστορικά, αν ένας int είναι 32 bits, και ένα μακρύ χρονικό διάστημα είναι 64 bits, πώς μεγάλο είναι ένα μεγάλο, όχι πολύ καιρό; Θαρρείς ότι είναι περισσότερο από έναν int αλλά ίσως λιγότερο καιρό από μια μακρά μακρά, αλλά αυτό εξαρτάται στην πραγματικότητα. Και έτσι αποδεικνύεται μία των απογοητεύσεις πάρα πολύ, με τη συγγραφή κώδικα σε ορισμένα συστήματα, είναι ότι δεν είναι όλα αυτά τα είδη δεδομένων έχουν προκαθορισμένες τιμές. Μερικές φορές είναι αυτό πολλές bits. Μερικές φορές είναι ότι πολλά κομμάτια. Έτσι μπορείτε πραγματικά πρέπει να ξέρετε, Μερικές φορές, τι υλικό τρέχετε το λογισμικό σας. Ευτυχώς, άλλες γλώσσες και άλλους τύπους δεδομένων που υπάρχουν τώρα, σας επιτρέπουν να είναι πιο ακριβείς. Λοιπόν, είδαμε εγχόρδων, και είδαμε bool, πάρα πολύ, αλλά αποδεικνύεται εκείνοι έρχονται μόνο με τη βιβλιοθήκη CS50. Έτσι, εκείνοι που δεν έχουν κατασκευαστεί στο C. Οι αντ 'αυτού, έρχονται σε αυτό το αρχείο ονομάζεται CS50.h, ότι θα τελικά ξεκολλήσετε τα στρώματα. Αλλά για τώρα, είναι ακριβώς πρόσθετους τύπους δεδομένων. Μια bool είναι αληθείς ή ψευδείς, και string είναι μια ακολουθία χαρακτήρων, σαν μια λέξη. Τώρα printf, έχουμε δει, έχει κράτησης θέσης, το% s είναι ένα. Και ίσως να είναι σε θέση, τώρα, συμπεράνει από αυτά τα άλλα παραδείγματα, πώς θα μπορούσατε να έχετε ένα σύμβολο κράτησης θέσης για διαφορετικούς τύπους δεδομένων. Για παράδειγμα, πάρτε μια εικασία, αν ήθελε να εκτυπώσετε ένα ενιαίο char χρησιμοποιώντας printf, η κράτηση θέσης είναι πιθανώς% c. Και αν θέλετε να εκτυπώσετε μια ακέραιο με το σύμβολο κράτησης θέσης,% i. % LLD είναι μια μακρά μακρά δεκαδική τιμή, αλλά πολύ μακριά, έτσι ώστε να αντιστοιχίζει σε αυτό. Και τότε f% για κυμαινόμενο Σημείο αξία ή για ένα διπλό, έτσι μερικές φορές από όπου και αν χρησιμοποιηθούν εκ νέου σε διαφορετικά πλαίσια. Γι 'αυτό και θα δουν και να χρησιμοποιήσουν κάποιοι από αυτούς την πάροδο του χρόνου. Και printf και άλλες λειτουργίες, επίσης, ακολουθίες διαφυγής υποστήριξη των άλλων, και μερικές φορές, αυτά είναι απαραίτητα. Έτσι ανάστροφη κάθετο n είναι μια νέα γραμμή. Ανάστροφη κάθετο t, κάνει ο καθένας θέλετε να πάρετε μια μαχαιριά; ΚΟΙΝΟ ΜΕΛΟΣ: Tab. DAVID J Malan: Tab. Έτσι, εάν θέλετε πραγματικά να εκτυπώσετε μια καρτέλα, δεν ένα σταθερό αριθμό θέσεων, αλλά μια πραγματική χαρακτήρα tab, δεν χτύπησε σας, καρτέλα, πλήκτρο στο πληκτρολόγιο, σε γενικές γραμμές, κάνετε πραγματικά ανάποδη t. Ανάστροφη κάθετο διπλά εισαγωγικά, γιατί θα ήθελα ποτέ θέλουν αυτό; Σωστά; Γιατί δεν μπορώ απλά να πληκτρολογήσετε ένα διπλά εισαγωγικά στο πληκτρολόγιό μου; ΚΟΙΝΟ ΜΕΛΟΣ: Διότι, διαφορετικά, είναι πρόκειται να πιστεύω ότι είναι το τέλος του αρέσει εκτύπωσης [? κειμένου. ?] DAVID J Malan: Ακριβώς. Θυμηθείτε, με μας printf παραδείγματα, όταν περνούσαν με τις printf στην είσοδο, στην αριστερή πλευρά της συμβολοσειράς και σχετικά με το δικαίωμα της εισόδου άνοιξη, φυσικά, ήταν ένα διπλό απόσπασμα. Αν η δική σας συμβολή έχει ένα διπλό απόσπασμα στη μέση του ότι, ο υπολογιστής θα μπορούσε δυνητικά μπερδεύονται, ως προς το, κάνει αυτό το διπλό εισαγωγικό ανήκουν στη μέση; Μήπως ανήκει με το αριστερό; Μήπως ανήκει με το σωστό; Και έτσι, αν θέλετε να το κάνει σούπερ σαφές, να κάνετε ανάστροφη κάθετο διπλά εισαγωγικά, έτσι ώστε να είναι δραπετεύσει, να το πω έτσι, και δεν είναι συγχέονται για κάτι άλλο. Και υπάρχουν μερικά άλλοι εδώ, ανάστροφη κάθετο r, μονά εισαγωγικά, 0, ότι μπορούμε να δούμε την πάροδο του χρόνου, καθώς και. Και τώρα, τι γίνεται με τις λειτουργίες; Έτσι δράσεις που μπορούμε να αναλάβουμε μέχρι στιγμής σε αυτή τη γλώσσα, C, καλά, έχουμε δει, printf, φυσικά, και όλα των άλλων στην οθόνη, εδώ, ότι θα χρησιμοποιήσουμε για την μόνο πρώτες εβδομάδες μαθήματος, έρθει όταν η βιβλιοθήκη CS50. Και κάνουν πολύ πιο εύκολο, σε C, για να πάρει πραγματικά την είσοδο του χρήστη. Αποδεικνύεται ότι σε C, και ειλικρινά σε μερικές γλώσσες, είναι ένας πραγματικός πόνος στο λαιμό για να κάνουμε κάτι απλό, όπως προτρέπει το χρήστη για το πληκτρολόγιο, για τη συμβολή του. Και έτσι οι λειτουργίες αυτές καθιστούν ευκολότερη. Και έχει επίσης σφάλμα τον έλεγχο καθ 'όλη, έτσι ώστε, όταν υπενθυμίζουν την Τετάρτη, εμείς είδε το, ξανά, προειδοποίηση, όταν δεν συνεργάζονται, και έχω πληκτρολογήσει μια λέξη, αντί για αριθμό; Έχουμε κάνει τη βαριά ανύψωση νωρίς για να βεβαιωθείτε ότι ο χρήστης συνεργάζεται. Αλλά αυτά είναι απλά εκπαίδευση τροχοί ότι θα τελικά, και γρήγορα, απογείωση. Έτσι για να ανακεφαλαιώσουμε, στη συνέχεια, ας ρίξουμε μια γρήγορη ματιά, πολύ όπως κάναμε με το Scratch, στο ορισμένες κανονικές κατασκευές σε C. Αυτό έχει ως στόχο να ταξινομήσετε του, είναι ένας ανεμοστρόβιλος περιοδεία, ακριβώς έτσι ώστε να έχετε μια αναφορά και ότι έχετε δει τα πράγματα από την πρώτη. Αλλά τότε θα δούμε πραγματική κωδικοποίηση χρησιμοποιήστε κάποια από αυτά τα δομικά στοιχεία. Τόσο πολύ, όπως στο Ξυστό, όταν είχαμε τις δηλώσεις όπως, λένε ή, περιμένετε, σε C, έχουμε λειτουργίες, καθώς, όπως printf. Αν θέλουμε να εκφράσουμε έναν όρο σε C, είναι παρόμοια, ως προς το πνεύμα, σε αυτό το κομμάτι παζλ που έμοιαζε με αυτό στο Scratch. Αλλά αντ 'αυτού, εμείς κυριολεκτικά ακριβώς γράφουν, αν. Και στη συνέχεια, σε παρένθεση, βάζουμε μια κατάσταση, όπου η κατάσταση είναι αυτό που θα καλέσετε, και πάλι, μια λογική έκφραση. Και πάλι, αυτό είναι το είδος του ψευδοκώδικα. Και, στην πραγματικότητα, ο // είναι ένα σχόλιο. Είναι απλά αγγλικές λέξεις για τον εαυτό μου. Αλλά αυτή είναι η γενική δομή του, αν, κατάσταση. Αλλά θα δούμε σκυρόδεμα παραδείγματα σε μια στιγμή. Αν θέλετε να έχετε μια αμφίδρομη διακλάδωση του δρόμου, πολύ όπως κάναμε με τους εθελοντές μας Τετάρτη, μπορείτε να έχετε ένα, άλλο αν. Και αν θέλετε να έχετε ένα τρίτο και τελική κατάσταση, ή προεπιλεγμένη κατάσταση, μπορείτε να έχετε μόνο ένα μπλοκ αλλού, εκεί. Και ομοίως, με boolean εκφράσεις, μπορείτε, και, μαζί. Και είδαμε την Τετάρτη, ότι δεν είναι ένα ενιαίο σύμβολο, είναι δύο, για λόγους χαμηλότερου επιπέδου ότι θα δούμε τελικά και να παίξει με. Ή-ing πράγματα μαζί είναι 2 κάθετες μπάρες. Σε ένα πληκτρολόγιο ΗΠΑ, αυτό είναι γενικά ένα βασικό με το πλήκτρο Shift παραπάνω Εισάγετε το κλειδί ή το πλήκτρο Επιστροφή. Στη συνέχεια υπάρχει αυτά τα πράγματα θα χρησιμοποιήσουμε ίσως μία ή δύο φορές. Είναι λειτουργικά ισοδύναμα με τι μπορείτε να κάνετε με ένα, αν, άλλο αν, άλλο αν αλλιώς, την κατασκευή, αλλά όπου και αν ονομάζεται διακόπτης. Φαίνονται πολύ διαφορετικές, αλλά θα δει κανείς στο κώδικα της διανομής μας, για μια μελλοντική σετ πρόβλημα, κατά πάσα πιθανότητα, ότι είναι μερικές φορές απλά μια όμορφη τρόπος έκφρασης μια ολόκληρη δέσμη των συνθηκών, χωρίς να έχει πολλά άγκιστρα και πολλές παρενθέσεις και εσοχή. Αλλά δεν μας δίνουν περισσότερα δύναμη από ό, τι έχουμε ήδη. Και τώρα βρόχους. Και αυτό, θα εξετάσουμε σε λίγο πιο αργά. Στη συνέχεια, όμως, θα αρχίσουν να χρησιμοποιούν αυτά, ειδικά για εκείνους που έχουν ήδη εξοικειωμένοι. Αυτή είναι η κανονική τρόπο, εάν απίστευτα απόκρυφες τρόπο, να γράψει ένα βρόχο σε C. Τώρα, μια θηλιά στο Scratch ήταν αρκετά απλή. Έχετε μια για πάντα, μπλοκ. Έχετε ένα, επαναλαμβάνω, με μπλοκ απλά ένας αριθμός που πρέπει να πληκτρολογήσετε. Και με την, για βρόχο, μπορείτε να να εφαρμόσουν και τις δύο αυτές ιδέες, αλλά είναι λίγο πιο τεχνικό. Αλλά ειλικρινά, είναι επίσης σχετικά απλή. Μόλις ξέρετε τη σειρά του λειτουργίες, μπορείτε κυριολεκτικά πρόκειται ακριβώς για να συνδέσετε τις τιμές και λένε στον υπολογιστή τι να κάνει. Έτσι, εδώ είναι ένα παράδειγμα. Αυτό είναι ένας βρόχος που, αρκετά Με απλά λόγια, μετράει από έναν αριθμό πάνω μέσω ενός άλλου. Και μόνο από την ανακλώμενη σε αυτό, ακόμη και αν έχετε καμία προηγούμενη εμπειρία με Αυτή η γλώσσα, ποιος είναι ο αριθμός δεν είναι πιθανόν να αρχίσουμε να μετράμε σε; Εντάξει, 0. Και υποθέτω ότι είναι επειδή σας βλέπουμε ότι υπάρχει μια int και ένα i, η οποία είναι μια μεταβλητή. Είναι αρχικοποιείται στο 0. Και αργότερα, μοιάζει είμαστε περνώντας printf, μια τιμή. Και, στην πραγματικότητα, έκανα μια μικρή τυπογραφικό λάθος εδώ. Αλλά αυτό είναι εύκολο να καθοριστεί. Επιτρέψτε μου να προσθέσω, εγώ εδώ. Έχουμε τώρα printf ον πέρασε αυτή την τιμή κράτησης θέσης. Και τι πρόκειται να μετρήσει μέχρι μέσα; Κοινό: 50. 50. 49. DAVID J Malan: 49. Έτσι 50, με την πρώτη ματιά, φαίνεται σωστό. Αλλά αυτό, φαίνεται, πρόκειται να είναι κατάσταση μας που έχουμε κρατήσει τον έλεγχο. Και θα πάμε να σταματήσουν άπαξ i δεν είναι μικρότερη από 50. Έτσι, αυτό το βρόχο, αντιστρόφως, πρέπει εκτελέσει, εφ 'όσον το i είναι μικρότερο από 50. Αλλά από τη στιγμή που γίνεται 50, ή 51, ή, ακόμη χειρότερα, θα πρέπει να σταματήσει αυτόματα. Εντάξει. Έτσι τι πραγματικά συμβαίνει εδώ; Έτσι, αυτή είναι η σειρά του εργασίες για έναν βρόχο. Ένα, έχετε το λεγόμενη αρχικοποίησης. Αυτό το κίτρινο υπογράμμισε κομμάτι του κώδικα εκτελείται πρώτη, και έχει το αποτέλεσμα ότι, ανά Τετάρτη, ίσως να φανταστείτε. Δημιουργεί μια μεταβλητή που ονομάζεται i και καταστήματα στο εν λόγω μεταβλητή η τιμή 0. Γι 'αυτό είναι 0 σε αυτό το σημείο στην ιστορία. Το επόμενο πράγμα που συμβαίνει σε αυτό το κατασκεύασμα, είναι ότι η κατάσταση παίρνει ελέγχονται. Έτσι μπορώ να ελέγξω αμέσως, i είναι μικρότερο από 50; Και φυσικά, η απάντηση προς το παρόν είναι, σίγουρα, ναι. Ναι, γιατί είναι 0, και αυτό είναι σίγουρα λιγότερο από 50. Τότε τι συμβαίνει, είναι ότι αυτή η γραμμή κώδικα εκτελείται. Και στην πραγματικότητα, αν υπάρχει πολλαπλές γραμμές κώδικα σε αυτά τα άγκιστρα, όλοι παίρνουν εκτελεσμένες το ένα μετά το άλλο. Και στην επίδραση εδώ, είναι προφανώς, να εκτυπώσετε ο αριθμός i, η οποία πρόκειται να είναι 0, και στη συνέχεια 1, και έπειτα 2. Αλλα γιατι? Γιατί έχει να αυξάνεται; Λοιπόν, το τέταρτο πράγμα που που συμβαίνει είναι ότι αυτή η σύνταξη παίρνει εκτελείται, μετά την τελεία. i ++ είναι ένας σύντομος τρόπος για να πούμε? λαμβάνει την τιμή του i, και προσθέστε 1 σε αυτό? και στη συνέχεια την επόμενη φορά, προσθέστε 1 σε αυτό? και την επόμενη φορά, προσθέστε 1 σε αυτό. Έτσι, αν συνεχίζουμε, τι πρόκειται να συμβεί επόμενο είναι ότι είμαι δεν πρόκειται να προετοιμάσει ποτέ ξανά. Αν εγώ συνέχισα την προετοιμασία i για 0, το παράδειγμα αυτό δεν θα τελειώσει ποτέ, διότι Θα κολλήσει στο 0. Αλλά ό, τι πρόκειται να συμβεί είναι ότι η κατάσταση θα πρέπει να ελέγχονται, η γραμμή του κώδικα θα πάρει εκτελεστεί, το i θα αυξάνεται, κατάσταση θα πρέπει να ελέγχονται, κωδικός θα πάρει εκτελεστεί. Και κράτησε και πάλι το ποδήλατο, και ξανά, και ξανά, μέχρι i ++ επάγει την τιμή 50. Η κατάσταση, τότε, λέει, είναι μικρότερη από 50 50; Η απάντηση, φυσικά, δεν είναι, και έτσι ώστε η όλη κωδικό σταματήσει την εκτέλεση. Και αν έχετε περισσότερες κωδικό στην οθόνη κάτω από, αυτό είναι ό, τι θα συμβεί στη συνέχεια. Να πεταχτεί έξω από αυτές τις αγκύλες και συνεχίζει να εκτυπώνει περισσότερο μετά από αυτό. Έτσι, ένα αστείο τώρα, από το Foxtrot, ότι θα ίσως τώρα καταλαβαίνω. Είναι πάντα αστείο. Είναι σαν τα γέλια είδος φιλτράρω, και, στη συνέχεια, θα διαπιστώσετε ότι δεν πρέπει να να γελούν με χιούμορ σαν αυτό. Αλλά υπάρχει κάποια πακέτο Εδώ, παιδαγωγικά, πάρα πολύ. Έτσι αποδεικνύεται ότι είμαι λείπει ένα κομμάτι της σύνταξης, ή Foxtrot του λείπει ένα κομμάτι της σύνταξης εδώ. Τι λείπει, ότι είχαμε σε κάθε άλλη παράδειγμα, μέχρι σήμερα; Επιστροφή, υπάρχει, τόσο αυτό είναι κάτι άλλο, ότι θα επανέλθουμε σύντομα. Τι λείπει, όμως; Ναι. ΚΟΙΝΟ ΜΕΛΟΣ: Η προετοιμασίας του [δεν ακούγεται]. DAVID J Malan: OK. Έτσι, ναι. Έτσι, στην πραγματικότητα, αυτό is-- Λοιπόν, και καταμέτρηση ξεκινά από πάνω, ή μάλλον, δήλωσε από πάνω. Έτσι, αυτό είναι ένας άλλος τρόπος για να γίνει αυτό. Αλλά όχι στην ίδια ευθεία είναι έγκυρη όμως. Τι λέτε για εδώ; ΚΟΙΝΟ ΜΕΛΟΣ: Είναι τα άγκιστρα; DAVID J Malan: Ναι. Έτσι, τα άγκιστρα που λείπουν. Αλλά αυτός ο κώδικας, εννοώ, προς τιμήν τους, είναι στην πραγματικότητα, συντακτικά έγκυρο. Αποδεικνύεται, δεν το κάνετε Πρέπει τα άγκιστρα εάν έχετε μόνο μία γραμμή του κώδικα που θέλετε να εκτελέσετε μέσα από το βρόχο. Τώρα έχουμε πάντα, στην τάξη και στην όλα Κώδικα Διαχείρισης του Δικτύου μας, περιλαμβάνει τα άγκιστρα ούτως ή άλλως, μόνο για λόγους σαφήνειας. Αλλά συνειδητοποιούν ότι στα σχολικά βιβλία και σε απευθείας σύνδεση παραδείγματα, μπορεί πολύ καλά να δείτε σγουρά τιράντες λείπει κάποια στιγμή. Και αυτό είναι εντάξει, αν αυτό που έχουν εσοχή και τα οποία προορίζονται είναι μόνο μία γραμμή κώδικα, και όχι πολλαπλές γραμμές κώδικα, δυνητικά. Εντάξει. Έτσι, σχετικά με το ζήτημα της ανακρίβεια, είναι ένα θέμα της υπερχείλισης, Υπό την έννοια ότι, ομοίως, δεν ακέραιοι έχουν τα όρια τους όπως ακριβώς και κινητής υποδιαστολής αξίες; Στον κόσμο ένας κινητής υποδιαστολής αξίες, μπορούμε να είμαστε τόσο ακριβής μόνο, μετά την οποία, ενίοτε κακά πράγματα μπορούν να συμβούν, και τα προγράμματά μας μπορούν να είναι με λάθη και σφάλματα. Τώρα, ακόμη και με ακέραιους αριθμούς, μπορείτε να εκτελέσετε σε προβλήματα. Τώρα ένας ακέραιος δεν έχουν δεκαδικό σημείο ή αριθμών μετά από αυτό. Είναι απλά ένα φυσικό αριθμό, συνήθως. Λοιπόν, τι θα μπορούσε να πάει στραβά με έναν int; Αν είμαι με τη χρήση ενός int να μετράνε, τι θα μπορούσε να πάει στραβά; Φαίνεται πολύ απλούστερη. Ναι. ΚΟΙΝΟ ΜΕΛΟΣ: Εάν η αριθμός παίρνει [δεν ακούγεται] DAVID J Malan: Ναι. Τι και αν θα μετρήσει τόσο υψηλή, ώστε να δεν μπορούν να εκφράσουν αυτό το πραγματικά μεγάλο αριθμό. Σωστά; Σε κάποιο σημείο, θα πάμε να υπερβαίνει τα όρια αξίας 32-bit ή αξίας 64-bit. Τώρα πάλι, δεν είμαι σίγουρος πόσο να προφέρει μια τιμή 64-bit, αλλά ξέρω ότι με ένα ακέραιο αριθμό 32-bit, η μεγαλύτερη τιμή που μπορεί να είναι, αν είναι μόνο θετικό τιμές, είναι περίπου 4 δισ. Έτσι, αν προσπαθώ να μετρήσουν μέχρι 5 δισεκατομμύρια, κάτι που πρόκειται να συμβεί. Αλλά ας δούμε τι, στην πραγματικότητα, μπορεί να συμβεί. Στον κόσμο του ακεραίου υπερχείλισης, όπου, κατά μία έννοια, ξεχειλίζουν από την ικανότητα ενός ακέραιος, τι μπορεί να συμβεί; Έτσι, εδώ είναι ένα δυαδικό αριθμό, είναι μια ιστορική αναδρομή για 0. Είναι όλα τα 1, καθώς και τα σύμβολα κράτησης θέσης εκεί, είναι δυνάμεις του 2, έτσι αυτό είναι δυαδικό. Έτσι, αυτά είναι τα 8, bits 1 στην οθόνη. Και αν θυμάστε ή κάνετε γρήγορα τα μαθηματικά, τι αξία εκπροσωπείται εδώ με αυτούς τους οκτώ bits 1; 255. Και ακόμα κι αν δεν ήταν απόλυτα βέβαιος του μαθηματικά, θα μπορούσε να το κάνει έξω. Ή θα μπορούσατε ακριβώς το είδος του λόγου μέσα από αυτό, περιμένετε ένα λεπτό, αν είμαι που αντιπροσωπεύει μια τιμή των 8 bit, και έχω 256 πιθανές τιμές, αλλά η πρώτη των οποίων είναι 0, Ξέρω μόνο ότι η μεγαλύτερο θα είναι 255, και αυτό είναι ό, τι θα μπορούσε να είναι αυτό. Έτσι, ας υποθέσουμε ότι προσπαθώ να προσθέσω 1 σε αυτήν την τιμή. Τι θα κάνατε σε βαθμό σχολείο κατά την προσθήκη 1, και δεν ταιριάζει πραγματικά γιατί θα πρέπει να φέρουν το 1; Ποιος είναι αυτός ο αριθμός θα να γίνει όταν προσθέτετε 1; Δεν πρόκειται να γίνει 0. Σωστά; Γιατί αν είχαν περισσότερα bits-- και εγώ θα προσπαθήστε να, το είδος, τον τύπο έξω here-- αν είχαμε περισσότερα bit, αυτό που μπορούσαμε να κάνουμε εδώ είναι να προσθέσετε το 1, και τότε θα πάρει αυτό. Ωχ. Θα είχαμε ένα 1 bit σε όλη τη διαδρομή εδώ. Αλλά αν αυτό είναι ένα πεπερασμένο αξίας, είναι μόνο 8 bits, και αυτό είναι προκαθορισμένο από τον υπολογιστή, ότι το 1 είναι ουσιαστικά δεν υπάρχει. Είναι ακριβώς το είδος του πέφτει από έναν γκρεμό. Και έτσι αν προσθέσετε 1-255, τι τιμή εσείς προφανώς να πάρετε; 0. Και έτσι αριθμούς τυχαία, και ίσως, άθελά τους, καταλήγουν να τυλιχτούν γύρω σαν αυτό. Λοιπόν, τι θα μπορούσε να είναι η επίπτωση του φαινομένου αυτού; Λοιπόν, υπάρχουν μερικά διαφορετικά πράγματα. Έτσι, ένα, δεν καταλήξουν αναζητούν όπως 0, ακούσια, αλλά μπορείτε να δείτε το είδος, ακόμη και στον πραγματικό κόσμο, προς το καλύτερο ή προς το χειρότερο, εκδηλώσεις αυτής της ιδέας ενός ορίου. Για παράδειγμα, κάποιος από εσάς που έχουν παίξει ποτέ Lego Star Wars, Υπάρχει κάποιος που τυχαίνει να γνωρίζω ο μέγιστος αριθμός κερμάτων μπορείτε να συλλέξετε στο Lego Star Wars; Πάρτε μια εικασία με βάση η σημερινή ηγετική ερωτήσεις. Είναι μεγαλύτερο από 256 ή 255. Είναι 4 δισ. Έτσι αποδεικνύεται, και υπάρχει κάποια people-- μερικά googling επιβεβαίωσε τελευταία night-- έχουν πάρει 4 δισεκατομμύρια χρυσά νομίσματα, ή οτιδήποτε, σε Lego Star Wars. Αν και προφανώς, δεν υπάρχει ένας τρόπος για να ξεγελάσουν το παιχνίδι, υπάρχει ένα bug ή χαρακτηριστικό, ότι σας επιτρέπει να μόλις προκύψουν πάρα πολλά σημεία. Αλλά το μεγαλύτερο δυνατό τιμή, σύμφωνα με σε αυτό το στιγμιότυπο οθόνης κάποιου Ι βρέθηκαν σε απευθείας σύνδεση, είναι πράγματι, 4000000000. Τώρα γιατί συμβαίνει αυτό; Είναι ακριβώς 4000000000, πιθανώς επειδή κάποιος αποφάσισε, που έγραφε αυτό το παιχνίδι, ότι θα μπορούσαν να κάνουν 4000000000, κάτι, κάτι, κάτι, όπως η αξία ανέχομαι με την αριθμομηχανή νωρίτερα, αλλά Είναι λίγο καθαριστικό για τον άνθρωπο για να πούμε το μέγιστο αριθμό της coins-- ή καρφιά, όπως αποκαλούν them-- ότι μπορεί να συλλέξει είναι 4 δισ. Και έτσι, γιατί συμβαίνει αυτό; Πώς είναι το παιχνίδι LEGO εφαρμογή του μετρητή αυτό είναι την παρακολούθηση των αριθμός των κερμάτων που έχετε; Αυτοί χρησιμοποιούν αυτό; ΚΟΙΝΟ ΜΕΛΟΣ: Σταματά μετρώντας μετά από 4 δισ. DAVID J Malan: Σταματά μετρώντας μετά 4000000000, πράγμα που σημαίνει ότι μπορείτε να συνάγουν, ως προγραμματιστής, ότι είναι πιθανόν χρησιμοποιώντας ένα ακέραιος 32 bit. Όπως και ο προγραμματιστής κυριολεκτικά δακτυλογραφημένα, int, στον κώδικα του ή της, και αυτό είναι το είδος της μεταβλητής, ότι από όπου και αν χρησιμοποιείτε για να αποθηκεύσετε τον κωδικό κάποιου. Έτσι υπάρχει άλλες εκδηλώσεις από αυτά τα είδη των ορίων. Γι 'αυτό και δεν έχουν παίξει αυτό το game-- και διάβαζα επάνω στην ιστορία να επιβεβαιώσουν το much-- αλλά η αρχική έκδοση του Πολιτισμού, όπου Σας φαίνεται να αλληλεπιδρούν με το καθένα άλλα και μπορεί να κάνει πόλεμο ή ειρήνη, Γκάντι ήταν υποτίθεται ότι είναι ένα από τα οι πιο ειρηνικές χαρακτήρες, όπως καταλαβαίνω ότι, κατά το πρώτο έκδοση του Πολιτισμού. Και στην πραγματικότητα, σε μία κλίμακα από 1 έως 10, επιθετικότητα του ήταν μόλις ένα 1. Έτσι, πάντα τόσο ήπια επιθετική, προφανώς. Αλλά σε κάποιο σημείο, μπορείτε προφανώς εγκαθίδρυση της δημοκρατίας στη γεωγραφία σας. Και αν εγκαταστήσετε τη δημοκρατία στην έκδοση του παιχνιδιού, τότε το επίπεδο επιθετικότητας σας πηγαίνει κάτω. Είναι ένα καλό πράγμα. Οι άνθρωποι είναι πιο ήρεμο Προφανώς, σε αυτή την κατάσταση. Αλλά προφανώς, κάποιος έκανε δεν έχουν, εάν, προϋπόθεση στην αρχική έκδοση του κώδικα. Έτσι, το επίπεδο επιθετικότητας του Γκάντι πήγε από θετική 1, μείον 2, σε αρνητική 1, αλλά το παιχνίδι δεν κατανοήσουν τους αρνητικούς αριθμούς. Έτσι, αυτό που συνέβη ήταν η επιθετικότητα του Γκάντι επίπεδο αυξήθηκε από 1 σε 0, στην αρνητική 1, η οποία είχε ως αποτέλεσμα την περιτύλιγμα γύρω από την ύπαρξη το πιο επιθετικό χαρακτήρα στο παιχνίδι, σε μια τιμή των 255, σε μια κλίμακα από 1 έως 10. Και από τότε, έχει υπάρξει περισσότερες ενσαρκώσεις αυτού του παιχνιδιού, και έχω διατηρούνται ως ένα είδος Πασχαλινό αυγό, ότι ο Γκάντι είναι προφανώς τόσο τρομερά επιθετική. Αλλά ήταν το αποτέλεσμα μιας πολύ απλό σφάλμα προγραμματισμού σε αυτό το πολύ νωρίς έκδοση του παιχνιδιού. Τώρα, περισσότερο ανησυχητικό, περισσότερο Πρόσφατα, η Boeing 787 τεκμηριώνεται ότι έχει ένα bug, δεν είναι το είδος της συσκευής που κυρίως θέλουν να έχουν ένα σφάλμα. Και τα συμπτώματα, πως θα διαβάσει Εδώ, από ένα άρθρο στο διαδίκτυο, Ήταν αυτό ένα μοντέλο 787 αεροπλάνο ότι έχει συνεχή τροφοδοσία 248 ημέρες μπορεί να χάσει όλα εναλλασσόμενο ρεύμα, AC, ηλεκτρική ενέργεια, λόγω της οι μονάδες ελέγχου της γεννήτριας, GCUs, ταυτόχρονα υπεισέλθω σε Fail-safe mode. Έτσι, αυτό ήταν μια προειδοποίηση που εκδόθηκε όταν το πρόβλημα αυτό ανακαλύφθηκε. Αυτή η κατάσταση προκαλείται με ένα μετρητή του λογισμικού, στο εσωτερικό του GCUs, έτσι ένας ακέραιος ή μια μεταβλητή, ότι βούληση υπερχείλιση μετά από 248 ημέρες συνεχούς ρεύματος. Boeing βρίσκεται στη διαδικασία της την ανάπτυξη μιας αναβάθμισης του λογισμικού ΕΕΜ ότι θα επανορθώσει την ανασφαλείς συνθήκες. Έτσι, μοιάζει πολύ με το βλήμα σενάριο, όπου είχαν κάποιο είδος μεταβλητής ότι υπολόγιζε, και την καταμέτρηση, και την καταμέτρηση, αλλά σταδιακά ξεχειλίζει τα όρια των δυνατοτήτων της, Ομοίως έπραξε το καταραμένο αεροπλάνο έχουν μια μεταβλητή υπερχείλιση μετά από αρκετή ώρα λειτουργίας. Και έτσι ο τρόπος γλώσσα-σε-μάγουλο της εργασίας γύρω από αυτό το θέμα είναι αληθινά, επανεκκίνηση, το αεροπλάνο σας κάθε 247 ημέρας, έτσι ώστε η μνήμη παίρνει σκουπίζεται και η μεταβλητή πηγαίνει πίσω στο 0. Αλλά αντιλαμβάνεστε, αυτό είναι ένα πολύ μεγάλη ενσάρκωση του λογισμικού, αλλά κυρίως ως ακούμε της Apple λειτουργικά συστήματα υπεισέλθω σε αυτοκίνητα, και αυτο-οδήγηση αυτοκινήτων από την Google, και οποιοσδήποτε αριθμός ενσαρκώσεις του λογισμικού στην καθημερινή ζωή, τηλεοράσεις μας και τα ρολόγια, και πολλά άλλα, συνειδητοποιούν περιβάλλονταν από το λογισμικό, όλα από τα οποία είναι γραμμένο από εμάς τους ανθρώπους. Και όπως θα ανακαλύψετε όλες σύντομα, Είναι πολύ εύκολο και πολύ χαρακτηριστική να κάνουν λάθη όταν γράφετε λογισμικό. Και αν δεν τους πιάσει, κάποια κακά πράγματα μπορούν να συμβούν. Τώρα μερικές φορές, μερικές αστεία πράγματα μπορούν να συμβούν, ή τουλάχιστον μερικές φορές ξέρουν να περιμένουν κάποια κακία. Έτσι, 0 διαιρείται με 0, από τον βαθμό το σχολείο, είναι γενικά ένα κακό πράγμα. Είναι απροσδιόριστο. Και αποδεικνύεται out-- και ας δούμε αν mic μου μπορεί να πάρει αυτό το up-- ότι η Apple είχε κάποια διασκέδαση με αυτό πρόσφατα. Έτσι έχω ένα iPhone εδώ. Πάω να μιλήσω με το Siri και να της ζητήσω να μου δώσει την απάντηση στο 0 διαιρείται με το 0. Τι είναι 0 διαιρείται με 0; SIRI: Φανταστείτε ότι έχετε 0 μπισκότα, και να τα μοιραστεί ισόποσα μεταξύ 0 φίλοι. Πόσα μπισκότα έχει κάθε άτομο να πάρει; Βλέπω? Δεν έχει νόημα. Και Cookie Monster είναι θλιβερό ότι δεν υπάρχουν cookies. Και είστε λυπηρό το γεγονός ότι Δεν έχετε φίλους. DAVID J Malan: Είναι το είδος της αντιπαθητικός. Έτσι, αυτό είναι ό, τι ακριβώς είπε εκεί. Είναι αόριστη, δεν έχει οριστεί, και μάλιστα, πολλές γλώσσες προγραμματισμού ή, πραγματικά, θα compilers ανίχνευση, όταν, σε ένα πρόγραμμα, προσπαθήσει να διαιρέσει 0 από 0. Περισσότερη διασκέδαση από αυτό όμως, είναι ότι, προφανώς, Cookie Monster Είναι στο Twitter αυτές τις μέρες. Και εκείνος απάντησε σε αυτό, με αυτό, η οποία είναι απολύτως αξιαγάπητη. Αλλά ας ρίξουμε μια γρήγορη ματιά σε ένα ζευγάρι από άλλες δομές, και στη συνέχεια να θέσει μερικά από αυτό κώδικα που θα χρησιμοποιήσετε, σε καλούς τρόπους. Έτσι αποδεικνύεται, εκτός από για βρόχους, υπάρχει κάτι που ονομάζεται ένα βρόχο while, ότι έχει διαφορετική εμφάνιση και υλοποιείται λίγο differently-- και θα δούμε τελικά examples-- αλλά κατά κάποιο τρόπο, είναι απλούστερο, διότι δεν επιτρέπει σε σας για να προετοιμαστεί και ενημέρωση μέσα στο όριο του βρόχου. Μπορείτε ακόμα να την εφαρμόσουν. Έτσι, μπορείτε να κάνετε τα ίδια ακριβώς πράγματα με ένα βρόχο while, όπως με ένα βρόχο for, αλλά το συντακτικό, ultimately-- Όπως θα τελικά see-- πρόκειται να είναι διαφορετική. Υπάρχει ακόμη και ένα do while loop, η οποία είναι στην πραγματικότητα ένα λίγο διαφορετικό, στο ότι, ενώ για το βρόχο και ένα βρόχο, ενώ πάντα ελέγχουν την κατάστασή τους πρώτα, εάν μπορείτε να διαβάσετε αυτό το πράγμα πάνω προς τα κάτω, το είδος του μοιάζει να πρόκειται να ελέγξτε την κατάσταση είναι η τελευταία γιατί είναι πραγματικά η τελευταία γραμμή κώδικα. Και πράγματι, ότι πρόκειται να είναι χρήσιμη σε ορισμένα προγράμματα που γράφουμε, αν θέλετε να κάνετε κάτι ακριβώς τυφλά και τελικά να ελέγχει την κατάσταση. Αυτό δεν είναι απαραίτητα κακό. Αν θέλουμε μεταβλητές, μπορούμε να κάνουμε σε ένα-δυο διαφορετικούς τρόπους. Και είδαμε στο Foxtrot καρτούν, ένας τρόπος για να γίνει αυτό, όπου μπορείτε να δηλώσετε την μεταβλητή σας, όπως int μετρητή ερωτηματικό, και στη συνέχεια later-- ίσως την επόμενη γραμμή, ίσως 10 γραμμές later-- μπορείτε πραγματικά να προετοιμαστεί. Έτσι, αυτές οι 2 γραμμές κώδικα δηλώσετε μια μεταβλητή τύπου int και καλούν πάγκο, έτσι ώστε να δίνει με αρκετά κομμάτια για να κρατήσει έναν int. Και στη συνέχεια, τελικά, θέτει η τιμή μηδέν στην εν λόγω μεταβλητή. Καταρτίζει του 0 και 1 σε ένα μοτίβο, που γνωρίζουμε από την προηγούμενη εβδομάδα, αντιπροσωπεύει τον αριθμό που γνωρίζουμε ως 0. Ή ειλικρινά, μπορείτε να το κάνετε αυτό το πολύ πιο συνοπτικά, όπως ακριβώς αυτό. Τώρα έχουμε και το την ικανότητα να καλέσετε λειτουργίες. Και στην πραγματικότητα, εδώ είναι μια γραμμή 2 πρόγραμμα, ή ένα απόσπασμα αυτού, ότι μας επιτρέπει πραγματικά να γράψετε κάποιο κωδικό που παίρνει μια σειρά από πολύ user-- σαν εθελοντής μας μια στιγμή ago-- την αποθήκευση του αποτελέσματος σε μια μεταβλητή που ονομάζεται όνομα, και then-- σαν εθελοντής με μας με printf-- εκτυπώνει αυτές τις αξίες με το πέρασμα σε δύο επιχειρήματα, η κορδόνι, που ακολουθείται από τη μεταβλητή ονομάζεται, το όνομα, το ίδιο. Έτσι, ας ρίξουμε μια ματιά, πριν ερχόμαστε πίσω στο Mario εκεί, σε ένα ζευγάρι από τώρα, παραδείγματα. Πάω να πάει μπροστά και ανοιχτό μέχρι, ας πούμε, η λειτουργία-0.c. Και όπως πάντα, αυτός ο κώδικας είναι διαθέσιμο στο δικτυακό τόπο του μαθήματος, ώστε να μπορείτε να παίξετε μαζί σε το σπίτι και το δούμε αργότερα. Αλλά εδώ είναι το πρόγραμμα είναι κατ 'ουσίαν, από τη γραμμή 17-22. Το κύριο πρόγραμμα είναι όπου η πρόγραμμα είναι πάντα πρόκειται να ξεκινήσει. Το πρόγραμμα αυτό, προφανώς, πρόκειται για να εκτυπώσετε το όνομά σας, του παχέος εντέρου. Είναι τότε θα καλέσει GetString, ακριβώς όπως κάναμε με τους εθελοντές μας. Και τότε, αυτό είναι ενδιαφέρον, πρόκειται να καλέσει PrintName. Αποδεικνύεται, όλο αυτό το διάστημα, υπάρχει Φαίνεται να υπάρχει μια λειτουργία που ονομάζεται PrintName. Αυτό εκτυπώνει το όνομα κάποιου. Δεν χρειάζεται να χρησιμοποιήσετε printf από χτες, υπάρχει PrintName. Αλλά αυτό είναι παραπλανητικό επειδή δεν PrintName έρχονται με C. άνθρωποι δεν εφεύρει περίπου 40 ή 50 χρόνια πριν, Το έκανα, αντ 'αυτού. Και στην πραγματικότητα, αν μετακινηθείτε μειωθεί περαιτέρω, ανακοίνωση πώς μπορώ να γράψω τη δική μου λειτουργίες σε C. Θα τελικά εξηγήσει γιατί συνεχίζουμε να λέμε, άκυρη, σε μερικά σημεία, αλλά για σήμερα, ας απλά κοιτάξτε το όνομα. Στη γραμμή 24, αν θέλετε να δημιουργήσετε το δικό σας λειτουργία, μπορείτε κυριολεκτικά γράφετε το το όνομα της συνάρτησης. Επέλεξα PrintName. Σε παρένθεση, θα στη συνέχεια, καθορίστε ποια είδη των εισροών, και πόσα θέλουν αυτή τη λειτουργία για να πάρει. Σε αυτήν την περίπτωση, θέλω να πάρω 1 μεταβλητή που ονομάζεται, το όνομα, και πρόκειται να είναι τύπο, string, γι 'αυτό πρόκειται να είναι κάποια ακολουθία χαρακτήρων. Και τότε, αυτό program-- μοιάζει πολύ στο Ξυστό, μπορείτε να έχετε έθιμο παζλ pieces-- πρόκειται να έχει αυτό το έθιμο συμπεριφορά. Είναι πρόκειται να καλέσετε printf περνώντας, γεια σου, κράτησης θέσης, και στη συνέχεια πρόκειται να συνδέσετε σε ό, τι ο χρήστης καλείται. Έτσι, αυτό είναι ένα παράδειγμα του τι ένας επιστήμονας υπολογιστών θα κλήση αφαίρεση ή λειτουργικές αποσύνθεση, τα οποία είναι απλώς φανταχτερά τρόπους saying-- είναι αν Σας αρέσει αυτό το υψηλό επίπεδο ιδέας, όπως θέλω λειτουργικότητα που εκτυπώνει το όνομα κάποιου ατόμου, μπορείτε απολύτως μπορεί να γράψει κυριολεκτικά printf και, στη συνέχεια, περάσει στα επιχειρήματα που θέλετε, και το πρόγραμμα θα λειτουργήσει, όπως έχει από την Τετάρτη. Αλλά μπορείτε να αρχίσετε να αφηρημένη μακριά η έννοια της εκτύπωσης ένα όνομα. Μπορείτε να δώσετε ένα όνομα, όπως PrintName, και αυτό Είναι αυτή η ιδέα του layering από την εβδομάδα 0. Στο εξής, Εγώ κι εσύ δεν χρειάζεται να γνωρίζετε ή με νοιάζει πώς υλοποιείται PrintName. Ναι χρησιμοποιεί printf, ίσως Δεν το κάνει, ποιος ξέρει τι χρησιμοποιεί; Ποιος νοιάζεται? Τώρα μιλώ εδώ, αντί του εδώ κάτω. Και πράγματι, όπως τα προγράμματά μας πάρει πιο προηγμένες και εξελιγμένες, θα πάμε να συνεχίσετε να παίρνετε ως δεδομένο ότι υπάρχουν χαμηλότερο επίπεδο κομμάτια του παζλ. Επειδή τα γράψαμε ή κάποιος άλλος έκανε, έτσι ότι μπορούμε στη συνέχεια να οικοδομήσουμε επάνω τους. Ας ρίξουμε μια ματιά σε αυτό παραλλαγή, μία λειτουργία. Έτσι, αυτό είναι λίγο πιο προχωρημένη, αλλά αποδεικνύεται ότι στη βιβλιοθήκη του CS50, υπάρχει μόνο μια λειτουργία GetInt. Δεν νομίζω, πριν από χρόνια, για να εφαρμόσουν μια λειτουργία GetPositiveInt. Και αυτό είναι λίγο ενοχλητικό, διότι αν Τα εσείς γράφει ένα πρόγραμμα όπου θέλετε να πάρετε ένα θετικό ακέραιος αριθμός από το χρήστη, πρέπει οπωσδήποτε να χρησιμοποιήσετε GetInt. Και πρέπει οπωσδήποτε να ελέγξετε με η κατάσταση και ίσως ένας βρόχος αν αυτό είναι μεγαλύτερο int από 0 και φωνάζει στον χρήστη αν αυτός ή αυτή δεν δίνει Είστε ένας θετικός αριθμός. Αλλά ας οικοδομήσουμε αυτό κτίριο εμποδίσει τους εαυτούς μας, ένα, έθιμο κομμάτι Scratch, αν θέλετε. Πάω να έχουμε ένα πρόγραμμα εδώ που τελικά, θα θέλουν να είναι σε θέση να καλέσει GetPositiveInt, και θέλω να είμαι είναι σε θέση να εκτυπώσετε ό, τι αυτό είναι int. Αλλά αυτό είναι αφηρημένη μακριά τώρα. Είναι μόλις δοθεί ένα υψηλό επίπεδο όνομα που να λέει ό, τι κάνει, το οποίο είναι υπέροχο επειδή είναι πολύ έξυπνο τώρα για να διαβάσετε. Και αν το κάνω με νοιάζει τι κρύβεται από κάτω Η κουκούλα, επιτρέψτε μου να μετακινηθείτε προς τα κάτω. Και είναι λίγο εκφοβιστικό σε πρώτη φάση, ειδικά αν αυτό είναι το πρώτο σας πρόγραμμα, αλλά ας ρίξουμε μια ματιά. Είμαι πλέον ρητό, άκυρη, διότι αποδεικνύεται λειτουργίες, σαν GetString, μπορεί να επιστρέψει μια τιμή για μένα. Δεν έχουμε μόνο για την εκτύπωση στην οθόνη, μπορούν πραγματικά να παραδώσει Θέλω κάτι πίσω. Και ενώ πριν PrintName, Δεν χρειάζεται τίποτα πίσω. Χρειαζόμουν την παρενέργεια κάτι που δείχνει στην οθόνη, αλλά εγώ δεν χρειάζεται έναν άνθρωπο να μου δώσει κάτι πίσω. Εδώ, με GetPositiveInt, όπως και με GetInt, Θέλω να παραδοθεί κάτι πίσω. Γι 'αυτό και λέω όχι, κενό, στη γραμμή 23, αλλά int, η οποία λέει, αυτή η λειτουργία ότι γράφω, που ονομάζεται GetPositiveInt πρόκειται να δώσε μου πίσω έναν ακέραιο αριθμό, δεν είναι τίποτα, Δεν άκυρη. Εν τω μεταξύ, πρόκειται να αναλάβει καμία εισόδους, έτσι έχω, το είδος, αυτό αντιστρέφεται. Δεν δίνω καμία GetPositiveInt εισόδου, θέλω να μου δώσει την παραγωγή της. Και τότε τι θα συμβεί τώρα; Τόσο εδώ είναι πώς μπορώ να δηλώσουμε μια μεταβλητή. Το έχω κάνει έξω από το βρόχο, για λόγους που θα δούμε τελικά, αλλά αυτό δίνει μόνο με 32 bits ονομάζεται, n, και έχω προ-καθορισμό τους για την αποθήκευση ακέραιο. Και εδώ είναι ότι, ενώ κάνει κατασκεύασμα, και αυτός είναι ο λόγος για τον οποίο είναι χρήσιμο. Κυριολεκτικά κάνετε αυτό, ενώ το η είναι μικρότερη από 1. Ας δούμε τι θα συμβεί. Τυπώσω, παρακαλούμε να μου δώσει μια θετική int. Παίρνω τότε ένα int, χρησιμοποιώντας CS50 του λειτουργήσει και να αποθηκεύονται σε n. Και τότε, τι γραμμή κώδικα πιθανώς παίρνει εκτελεστεί την επόμενη, λογικά; Ποια γραμμή αριθμό; Ναι, έτσι 31. Δεν θα το γνωρίζουν αυτό, μέχρι που έχετε έχει πει ή είδος αυτό συμπεράνουμε, αλλά αυτό είναι αλήθεια. Πηγαίνει πάνω προς τα κάτω και, στη συνέχεια, συνεχίζει να επαναλαμβάνει. Έτσι, αν έχω πληκτρολογήσει στο ας πούμε, τον αριθμό 1 αρνητική, είναι n λιγότερο από 1 αρνητική; Ναι. Επειδή η αρνητική 1 είναι μικρότερη από 1. Έτσι τι πρέπει να γίνει; Πάω να το κάνετε αυτό ενώ το η είναι μικρότερο από 1, έτσι είμαι πρόκειται να πάει πίσω στη γραμμή 28. Και κάθε time-- και ας τρέχουν this-- καταστήσουν 1 για να το υπολογίσουν, και τώρα dot κάθετος λειτουργία 1. Εάν τύπου Ι αρνητική 1, είναι συνεχίσω να φωνάζεις μέχρι να συνεργαστούν, διότι κάθε των εισροών μου είναι μικρότερη από 1 και αν είναι ενώ λιγότερο από 1, Πάω να συνεχίσω να το κάνω αυτό. Αν τελικά να του δώσετε έναν αριθμό, όπως 50, Ευτυχώς, λέει, ευχαριστίες για το 50. Γιατί; Επειδή το συντομότερο n δεν είναι μικρότερη από 1, πάψω να κολλήσει σε αυτόν τον βρόχο, και αυτό το νέο κλειδί και σήμερα, επιστροφή, κυριολεκτικά κάνει αυτό. Έτσι έχω μόλις εφαρμοστεί, σε ένα έννοια, το ισοδύναμο της GetString, όπου είμαι πίσω στην παράδοση όποιος χρησιμοποιεί μένα, κάποια αξία. Δεν πρέπει να είναι μια σειρά, είναι ένας int. Έτσι, μια απλή, γρήγορη παράδειγμα, αλλά σύντομα θα δείτε κάποια πιο εξελιγμένα εκδόσεις ακόμα. Στην πραγματικότητα, ας ρίξουμε μια ματιά σε ένα αριθμητική, η οποία ονομάζεται return.c. Και αυτό είναι στην πραγματικότητα λίγο πιο απλό. Έτσι, σκοπός αυτού του προγράμματος σε ζωής, όπως ας συντάξει και να τρέξει, έτσι ώστε να κάνει την επιστροφή, dot κάθετος, return-- ειδοποίηση Το πρόγραμμα κύβους απλώς την τιμή 2. Είναι πολύ ηλίθιο, είναι δύσκολο κώδικα, δεν λαμβάνει εισροές, ωστόσο, αποδεικνύει ότι ένα άλλο λειτουργία που έχω τον εαυτό μου γράψει. Έτσι, εδώ, έχω δηλώσει ένα μεταβλητή, που ονομάζεται x, τύπου int, ίσο με τον αριθμό 2, εντελώς αυθαίρετη. Αυτό είναι μερικά μόνο από αφράτο εκτύπωση. Λέει X είναι τώρα, όπως και όπως, cubing dot dot dot. Και η μαγεία είναι προφανώς γραμμή 21. Είμαι καλώντας μια λειτουργία που ονομάζεται, κύβος, Είμαι παραδώσετε ένα φύλλο χαρτιού με τον αριθμό 2 γραμμένο σε αυτό, και ποια αξία, μαθηματικά, θέλω να βγούμε από αυτό; Ακριβώς όπως μια επιταγή λογική; 8. Σωστά; Θα θέλετε κομμένο σε κύβους 2 πίσω, 2 η δύναμη της 3, έτσι 8 πίσω. Έτσι, όταν είναι κύβος εφαρμοστεί; Λοιπόν, παρατηρήσετε ότι είναι σε εφαρμογή εδώ κάτω. Και ακριβώς όπως πριν, λογικά, παρόλο που η σύνταξη είναι πιθανώς πολύ νέα σε πολλούς από εσάς, Θέλω αυτή τη λειτουργία να μου δώσει πίσω ένα φύλλο χαρτί με έναν int σε αυτό. Έτσι έχω ένα int, το όνομα είναι αυθαίρετα, αλλά βολική ονομάζεται κύβος. Η είσοδος σε αυτό, είναι η του Τύπος ακέραιο, έτσι ώστε να είναι πώς μπορώ να περάσω στον αριθμό 2 σε ένα φύλλο χαρτιού. Και τότε αποδεικνύεται C υποστηρίγματα μαθηματικά, οπότε δεν έχετε x για χρόνους, μπορείτε απλά να χρησιμοποιήσετε τον αστερίσκο για τον πολλαπλασιασμό. Και αυτό επιστρέφει φορές n n φορές n, το οποίο είναι απλά μια τιμή κύβους. Λοιπόν, πού θα πάμε με όλα αυτά; Αυτό είναι σίγουρα ένα περιοδείας, να είστε σίγουροι, ότι στα σούπερ τμήματα και στο πρόβλημα που 1, θα πρέπει να περπατήσει μέσα όλα αυτά πολύ περισσότερο. Και που το πρόβλημα 1, θα μεταβεί από το γραφικό κόσμο του Scratch σε κάτι πιο γραμμή εντολών σε C. Αλλά θα αντλήσει έμπνευση από αυτό εδώ το παιχνίδι από χτες, όπου χρησιμοποιώντας C και το πρότυπο έκδοση του σετ p θα εφαρμόσει πυραμίδα του Mario. Και στην έκδοση του χάκερ σύνολο P, αν το επιλέξετε για να εκλέξουν, θα εφαρμόσει λίγο περισσότερο προκλητική πυραμίδα με δύο κορυφές. Επίσης, θα εφαρμόσει ένα αλγόριθμο, ένας άπληστος αλγόριθμος. Αποδεικνύεται του εκεί κάποια ενδιαφέρουσα λογική πίσω από τη διαδικασία της τρέχει σταθμό ενός ταμείου και την πραγματική εγχείριση κάποιος πίσω αλλαγή. Υπάρχει ένας αλγόριθμος που είναι αρκετά απλή, που ίσως ακόμα κατανοήσουν διαισθητικά όταν πρέπει πρώτα να διαβάσετε it-- συνειδητοποιώντας ότι είναι ό, τι έχω πάντα γίνει οποιαδήποτε στιγμή έχω δώσει κάποιος κάποια back-- χρήματα που σας επιτρέπει να είναι πάντα ελαχιστοποίηση του αριθμού των σημειώσεις χαρτί ή μέταλλο νομίσματα ότι είστε παράδοση πίσω στο χρήστη. Και αυτό, φυσικά, είναι επιτακτική γιατί αν πάτε στο CVS ή οτιδήποτε, δεν θέλετε να παραδοθεί ένα σωρό αυτά ή ένα σωρό πένες. Θέλετε το μικρότερο ποσοστό κέρματα, πιθανώς, είναι δυνατόν. Τέλος, θα μπορείτε επίσης να αμφισβητηθεί να ανακατεύομαι στον κόσμο του νερού και πραγματικά να πάρετε μια εκτίμηση για μια χαρτογράφηση μεταξύ των ποσοστών της ροής, του αρέσει, το νερό στο ντους, πόσο νερό χρησιμοποιείται. Και η νύξη σ 'αυτό, θα είναι αυτό το κλιπ εδώ, η οποία θα λήξει στις για μόλις 60 δευτερόλεπτα, ώστε δίνει μια εικόνα της χαμηλής ροής κεφαλές των ντους. [ΑΝΑΠΑΡΑΓΩΓΗ] -Εντάξει. Πήρα τα πάντα εδώ. Πήρα το κυκλώνα της σειράς F, Ύδρα, Jetflow, Στοκχόλμη Supersteam, εσείς το όνομα. -Και Τι προτείνετε; -Τι ψάχνεις? Ισχύς άνθρωπος. Δύναμη. -όπως Silkwood. -Γι 'Για την ακτινοβολία. -Σωστά. -Τώρα Τι είναι αυτό; -Αυτό Είναι το Commando 450. Εγώ δεν πωλούν το ένα. -Μα Αυτό είναι που θέλουμε. Είναι ένας κομάντο 450. -Δεν Πιστέψτε με. Είναι που χρησιμοποιούνται μόνο στο τσίρκο. Είναι για τους ελέφαντες. -I'll Πληρώσει τίποτα. -Τι Περίπου Τζέρι; -Αυτός Δεν θα μπορούσε να χειριστεί αυτό. Είναι λεπτή. Αχ ναι. [Σταματήσετε την αναπαραγωγή] DAVID J Malan: Εντάξει. Αυτό είναι, αν για CS50. Θα σας δούμε την επόμενη εβδομάδα. ΟΜΙΛΗΤΗΣ 1: [? Scully;], [? Ίαν;] όσον αφορά αυτό το έργο outro, τι έχετε παιδιά καταλήξει; ΟΜΙΛΗΤΗΣ 2: Λοιπόν, έχουμε δώσει αυτό μια ποικιλία της σκέψης, και πιστεύουμε ότι ο καλύτερος τρόπος to-- ΟΜΙΛΗΤΗΣ 3: Μπορώ; ΟΜΙΛΗΤΗΣ 2: Ναι. Με όλα τα μέσα, στην πραγματικότητα. ΟΜΙΛΗΤΗΣ 3: Έτσι νομίζω μπορούμε να συνοψίσουμε την ιδέα μας για τις outros με ένα word-- τίποτα. DAVID J Malan: Τίποτα; ΟΜΙΛΗΤΗΣ 3: Τίποτα. DAVID J Malan: Τι σημαίνει αυτό; ΟΜΙΛΗΤΗΣ 3: Οι outros είναι για το τίποτα. ΟΜΙΛΗΤΗΣ 2: Λοιπόν, θέλω να πω, στη φιλοσοφία, Θέλω να πω, τίποτα δεν είναι πάντα κάτι. ΟΜΙΛΗΤΗΣ 1: Έτσι what's-- τι είναι το σκεπτικό; ΟΜΙΛΗΤΗΣ 3: Έτσι είναι σαν τη ζωή. ΕΝΤΆΞΕΙ. Τι έκανες σήμερα? DAVID J Malan: Σηκώθηκα, είχε πρωινό, και ήρθε να εργαστεί. ΟΜΙΛΗΤΗΣ 3: Αυτό είναι ένα outro. ΟΜΙΛΗΤΗΣ 2: Αλλά, θέλω να πω, δεν θα πρέπει να κάτι του συμβεί σε the-- ΟΜΙΛΗΤΗΣ 3: Όχι, όχι, όχι, όχι. Δεν συμβαίνει τίποτα. ΟΜΙΛΗΤΗΣ 1: Τότε γιατί βλέποντας; ΟΜΙΛΗΤΗΣ 3: Επειδή είναι ένα outro για CS50. DAVID J Malan: Όχι ακόμα.