1 00:00:00,000 --> 00:00:10,920 >> [Παίζει μουσική] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J MALAN: Εντάξει, καλωσορίσω πίσω στο CS50. 3 00:00:14,680 --> 00:00:16,500 Αυτή είναι η αρχή της δεύτερης εβδομάδας. 4 00:00:16,500 --> 00:00:18,940 Μια λέξη από έναν από μας φίλους στην πανεπιστημιούπολη - 5 00:00:18,940 --> 00:00:22,620 αν σας ενδιαφέρει, ενδεχομένως, είτε τώρα ή σε κάποια μελλοντική θητεία 6 00:00:22,620 --> 00:00:25,670 ακόμη, για μια ακόμη φορά άνετα, διδασκαλία μεσαία μαθητές λίγο 7 00:00:25,670 --> 00:00:27,680 κάτι για την επιστήμη των υπολογιστών, κάνει το κεφάλι σε αυτό το URL. 8 00:00:27,680 --> 00:00:32,360 Είναι ιδιαίτερη ανάγκη αυτή τη στιγμή από εκπαιδευτικοί, ιδιαίτερα εάν έχετε 9 00:00:32,360 --> 00:00:34,700 είχε κάποια έκθεση για την επιστήμη των υπολογιστών. 10 00:00:34,700 --> 00:00:38,060 >> Έτσι Υπενθυμίζεται ότι την περασμένη φορά, εισαγάγαμε μερικοί τύποι δεδομένων σε C, και 11 00:00:38,060 --> 00:00:40,590 μπορεί να έχετε αρχίσει να αποκτήσετε τα εισιτήριά σας τα χέρια βρώμικα με αυτά μέχρι στιγμής 12 00:00:40,590 --> 00:00:41,940 στο πρόβλημα που έχει ένα. 13 00:00:41,940 --> 00:00:43,230 Και είχαμε μια χαρα. 14 00:00:43,230 --> 00:00:49,100 Έτσι κάπως τεχνικούς όρους, αυτό είναι μια χαρα όπως το γνωρίζουμε σήμερα; 15 00:00:49,100 --> 00:00:51,050 >> Έτσι είναι ένας χαρακτήρας, αλλά ας είναι πιο ακριβής τώρα. 16 00:00:51,050 --> 00:00:53,735 Τι εννοούμε με τον χαρακτήρα ή ατομι; 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Ένα μη-αριθμητικό χαρακτήρα - 19 00:00:59,500 --> 00:01:00,670 έτσι δεν είναι απαραίτητα. 20 00:01:00,670 --> 00:01:04,580 Αποδεικνύεται ότι ακόμα και αριθμούς, ακόμη και στίξης και γράμματα είναι 21 00:01:04,580 --> 00:01:06,980 αντιπροσωπεύονται με τα στοιχεία τύπου που είναι γνωστό ως char. 22 00:01:06,980 --> 00:01:09,440 Έτσι δεν είναι κατ 'ανάγκην με αλφαβητική σειρά. 23 00:01:09,440 --> 00:01:11,100 Ναι; 24 00:01:11,100 --> 00:01:12,275 >> Έτσι είναι ένα ASCII χαρακτήρα. 25 00:01:12,275 --> 00:01:15,510 Έτσι, αν νομίζετε ότι πίσω στην εβδομάδα το μηδέν, όταν είχαμε byte των εθελοντών 26 00:01:15,510 --> 00:01:19,150 έρχονται και είτε να κρατήσει τα χέρια τους μέχρι ή όχι όλα, αντιπροσώπευαν bits. 27 00:01:19,150 --> 00:01:22,450 Αλλά συλλογικά ως ομάδα των οκτώ, αντιπροσώπευαν ένα byte. 28 00:01:22,450 --> 00:01:26,030 Και εμείς εισήγαγε την έννοια της ASCII εκείνη τη διάλεξη, η οποία είναι απλά μια 29 00:01:26,030 --> 00:01:28,170 χαρτογράφηση μεταξύ αριθμών και γραμμάτων. 30 00:01:28,170 --> 00:01:32,010 Και ASCII χρήσεις, όπως οι άνθρωποι σιωπηρή, οκτώ bits 31 00:01:32,010 --> 00:01:33,660 να αντιπροσωπεύει ένα χαρακτήρα. 32 00:01:33,660 --> 00:01:36,890 >> Έτσι, κατά συνέπεια, αν οκτώ bits μπορούν να λάβει κάθε μία από τις δύο τιμές - 33 00:01:36,890 --> 00:01:38,010 μηδέν ή ένα - 34 00:01:38,010 --> 00:01:40,280 Αυτό σημαίνει ότι υπήρχαν δύο δυνατότητες για αυτό το άτομο - 35 00:01:40,280 --> 00:01:41,230 μηδέν ή ένα - 36 00:01:41,230 --> 00:01:44,070 δύο για αυτό το άτομο, δύο για το σκοπό αυτό πρόσωπο, δύο για αυτό. 37 00:01:44,070 --> 00:01:47,450 Έτσι, ένα σύνολο από δύο φορές δύο φορές δύο φορές δύο φορές δύο - 38 00:01:47,450 --> 00:01:49,700 έτσι δύο η όγδοη συνολικά. 39 00:01:49,700 --> 00:01:54,320 Έτσι, υπάρχει ένας συνολικός αριθμός των χαρακτήρων 256 δυνατό ότι μπορείτε να 40 00:01:54,320 --> 00:01:55,750 αντιπροσωπεύουν με οκτώ bits. 41 00:01:55,750 --> 00:01:59,210 >> Τώρα, όσοι από εσάς μιλούν ασιατικές γλώσσες θα μπορούσε να γνωρίζει ότι υπάρχει περισσότερο 42 00:01:59,210 --> 00:02:02,620 χαρακτήρες στον κόσμο ό, τι ακριβώς Όπως και B και Cs και DS. 43 00:02:02,620 --> 00:02:06,130 Και πράγματι, ASCII δεν αρκεί για πολλές γλώσσες του κόσμου. 44 00:02:06,130 --> 00:02:07,760 Αλλά περισσότερα για αυτό άλλη φορά. 45 00:02:07,760 --> 00:02:11,240 Προς το παρόν, γνωρίζουμε ότι σε C, αν θέλετε να αντιπροσωπεύει ένα γράμμα, ένα κομμάτι 46 00:02:11,240 --> 00:02:15,780 στίξης, ή απλά χαρακτήρα κάτι στη φύση, χρησιμοποιούμε μια χαρα. 47 00:02:15,780 --> 00:02:18,240 Και αυτό είναι ένα byte ή οκτώ bits. 48 00:02:18,240 --> 00:02:19,690 >> Τι θα λέγατε για έναν int; 49 00:02:19,690 --> 00:02:20,780 Λοιπόν, ένας int είναι ένας ακέραιος. 50 00:02:20,780 --> 00:02:23,175 Πόσα bits, αν θυμάστε, ήταν ένας ακέραιος τυπικά; 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Θυμάμαι κανέναν; 53 00:02:27,512 --> 00:02:29,600 Έτσι είναι συνήθως 32. 54 00:02:29,600 --> 00:02:32,120 Εξαρτάται πραγματικά για τον υπολογιστή που χρησιμοποιείτε. 55 00:02:32,120 --> 00:02:35,770 Αλλά στην συσκευή, και σε πολλές υπολογιστές, είναι 32 bit ή τέσσερις 56 00:02:35,770 --> 00:02:37,140 bytes - οκτώ φορές τέσσερα. 57 00:02:37,140 --> 00:02:39,790 Και ints είναι μόνο που χρησιμοποιούνται για την αποθήκευση αριθμοί, είτε αρνητική, 58 00:02:39,790 --> 00:02:41,610 θετικό ή μηδέν. 59 00:02:41,610 --> 00:02:45,250 >> Και αν έχεις 32 bits και το μόνο που φροντίδα για θετικούς αριθμούς, μπορεί να 60 00:02:45,250 --> 00:02:48,960 εξέδρα κανείς πόσα δυνατό ακέραιοι ένας υπολογιστής μπορεί να αντιπροσωπεύει από 61 00:02:48,960 --> 00:02:51,820 μηδέν σε πάνω; 62 00:02:51,820 --> 00:02:56,130 Έτσι, θα είναι δύο στο 32, το οποίο είναι περίπου τέσσερα δισεκατομμύρια. 63 00:02:56,130 --> 00:02:59,720 Έτσι, οι αρμοδιότητες των δύο θα είναι επαναλαμβανόμενα θέματα στην επιστήμη των υπολογιστών. 64 00:02:59,720 --> 00:03:03,930 Όπως θα δούμε, είναι αρκετά βολικό να συνεργαστεί με ακόμα κι αν δεν είναι αρκετά 65 00:03:03,930 --> 00:03:05,790 εύκολο να κάνετε τα μαθηματικά στο κεφάλι κάποιου. 66 00:03:05,790 --> 00:03:07,000 >> Έτσι, εμείς θα πούμε περίπου τέσσερα δισεκατομμύρια. 67 00:03:07,000 --> 00:03:08,620 Τώρα, ένα πολύ μακρύ - 68 00:03:08,620 --> 00:03:09,770 μπορείτε να το είδος της εικασία. 69 00:03:09,770 --> 00:03:10,480 Είναι περισσότερο από έναν int. 70 00:03:10,480 --> 00:03:12,440 Πόσα κομμάτια; 71 00:03:12,440 --> 00:03:14,250 Έτσι, 64 bits ή οκτώ bytes. 72 00:03:14,250 --> 00:03:17,480 Αυτό σημαίνει απλά μπορείτε να εκπροσωπεί ακόμη μεγαλύτερους αριθμούς, μεγαλύτερο θετικό ή 73 00:03:17,480 --> 00:03:19,160 μεγαλύτερο αρνητικούς αριθμούς. 74 00:03:19,160 --> 00:03:20,060 >> Και πώς για να επιπλέουν; 75 00:03:20,060 --> 00:03:22,260 Αυτό είναι ένα πλωτό σημείο αξία των 32 bits. 76 00:03:22,260 --> 00:03:25,180 Αυτό είναι ακριβώς ένας πραγματικός αριθμός, κάτι με ένα δεκαδικό ψηφίο. 77 00:03:25,180 --> 00:03:30,100 Αλλά εάν χρειάζεστε αντί περισσότερες θέσεις μετά την υποδιαστολή ή θέλετε να 78 00:03:30,100 --> 00:03:33,720 αντιπροσωπεύουν μεγαλύτερο αριθμό με κάποια κλάσμα μετά από αυτό, μπορείτε να χρησιμοποιήσετε ένα 79 00:03:33,720 --> 00:03:36,260 διπλό, το οποίο είναι 64 bits. 80 00:03:36,260 --> 00:03:38,240 >> Αλλά υπάρχει μια ενδιαφέρουσα takeaway εδώ. 81 00:03:38,240 --> 00:03:42,890 Έτσι, εάν ints περιορίζονται κατά 32 bits και ακόμα και καιρό επιμήκη περιορίζεται από 64 82 00:03:42,890 --> 00:03:46,180 bits, αυτό το είδος της θέτει το ερώτημα, Τι εάν πραγματικά θέλετε να μετρήσετε 83 00:03:46,180 --> 00:03:48,790 υψηλότερο από ό, τι δισ. ευρώ για έναν int 4; 84 00:03:48,790 --> 00:03:50,330 Λοιπόν, μπορείτε να χρησιμοποιήσετε μόνο μια πολύ καιρό. 85 00:03:50,330 --> 00:03:54,200 Τι γίνεται όμως αν θέλετε να μετρήσετε υψηλότερα από δύο έως την 64η, ή να δώσει; 86 00:03:54,200 --> 00:03:55,810 >> Τώρα, αυτό είναι ένα τεράστιο αριθμό. 87 00:03:55,810 --> 00:03:59,250 Αλλά τελικά, ίσως στην πραγματικότητα νοιάζονται για αυτά τα είδη των τιμών, 88 00:03:59,250 --> 00:04:03,070 ειδικά αν χρησιμοποιείτε μια βάση δεδομένων και αρχίζουν να συγκεντρώνουν πολλά και πολλά 89 00:04:03,070 --> 00:04:06,190 και τα μέρη των δεδομένων και την ανάθεση μοναδική αριθμοί σε κάθε κομμάτι των δεδομένων. 90 00:04:06,190 --> 00:04:07,430 Γι 'αυτό το είδος της έχουν ένα πρόβλημα. 91 00:04:07,430 --> 00:04:10,700 Και ομοίως, με κυμαινόμενο σημείο τιμές - πλωτήρες ή δίκλινα - 92 00:04:10,700 --> 00:04:14,290 αν έχετε μόνο έναν πεπερασμένο αριθμό bits, πόσα αριθμούς θα μπορούσε να σας 93 00:04:14,290 --> 00:04:16,980 ενδεχομένως αντιπροσωπεύουν; 94 00:04:16,980 --> 00:04:19,540 >> Λοιπόν, αυτό είναι λιγότερο σαφής όταν περιλαμβάνει μια υποδιαστολή. 95 00:04:19,540 --> 00:04:20,899 Αλλά είναι σίγουρα πεπερασμένη. 96 00:04:20,899 --> 00:04:24,390 Εάν έχετε έναν πεπερασμένο αριθμό bits, ένας πεπερασμένος αριθμός των ανθρώπων, μια πεπερασμένη 97 00:04:24,390 --> 00:04:27,350 τον αριθμό των λαμπτήρων, σίγουρα μπορείτε να αντιπροσωπεύουν μόνο ένα πεπερασμένο αριθμό 98 00:04:27,350 --> 00:04:28,510 τιμές κινητής υποδιαστολής. 99 00:04:28,510 --> 00:04:33,170 Αλλά πόσοι πραγματικοί αριθμοί Δεν τους στον κόσμο; 100 00:04:33,170 --> 00:04:33,680 Υπάρχει μια άπειρη. 101 00:04:33,680 --> 00:04:37,280 Έτσι, αυτό είναι το είδος του προβλήματος, γιατί δεν έχουν απεριόριστο ποσό των 102 00:04:37,280 --> 00:04:39,970 μνήμη RAM ή στο εσωτερικό των υπολογιστών μας. 103 00:04:39,970 --> 00:04:41,780 Έτσι, κάποια προκλητικά πράγματα μπορούν να συμβούν. 104 00:04:41,780 --> 00:04:43,900 >> Οπότε ας πάμε μπροστά και να προσπαθήσουμε για να εκφράσουν αυτό εδώ. 105 00:04:43,900 --> 00:04:46,240 Επιτρέψτε μου να πάμε μπροστά και να ανοίξει το gedit. 106 00:04:46,240 --> 00:04:50,360 Πάω να πάει μπροστά και να αποθηκεύσετε ένα αρχείο που ονομάζεται "floats0.c" ακριβώς για να είναι 107 00:04:50,360 --> 00:04:54,630 συνεπείς με ένα παράδειγμα που είναι διαθέσιμα στο διαδίκτυο, αν θέλετε. 108 00:04:54,630 --> 00:04:58,080 Και Πάω να προχωρήσει και ορίσετε ως εξής: - 109 00:04:58,080 --> 00:05:01,540 Πάω να προχωρήσει και να πω, int κύριο κενό, όπως κάνουμε συχνά. 110 00:05:01,540 --> 00:05:07,190 >> Και στη συνέχεια, σε αυτό το πρόγραμμα, Πάω να κηρύξει τον εαυτό μου ένα float, έτσι, ένα 32-bit 111 00:05:07,190 --> 00:05:09,700 μεταβλητή που ονομάζεται f, αυθαίρετα. 112 00:05:09,700 --> 00:05:13,910 Και τότε είμαι πρόκειται να αποθηκεύσετε σε αυτό Δεν ξέρω, το ένα δέκατο, έτσι ώστε 0.1. 113 00:05:13,910 --> 00:05:16,590 Έτσι, Πάω να εκφράσει ότι ως ένα διαιρούμενο με 10, η οποία είναι απολύτως 114 00:05:16,590 --> 00:05:17,790 νόμιμη C. 115 00:05:17,790 --> 00:05:20,460 >> Και στη συνέχεια, στη δεύτερη γραμμή, εγώ απλά θέλετε να εκτυπώσετε αυτή την τιμή. 116 00:05:20,460 --> 00:05:22,950 Έτσι, υπενθυμίζουν ότι μπορούμε να χρησιμοποιήσουμε το γνωστό printf. 117 00:05:22,950 --> 00:05:25,420 Δεν θέλουμε να χρησιμοποιήσετε το% i για έναν int. 118 00:05:25,420 --> 00:05:28,360 Θέλουμε να χρησιμοποιήσετε f% για ένα πλωτήρα. 119 00:05:28,360 --> 00:05:33,080 Και τότε εγώ πάω να κάνω backslash n, Κλείσιμο απόσπασμα, κόμμα, f, τελεία. 120 00:05:33,080 --> 00:05:34,400 >> Έτσι, εδώ είναι το πρόγραμμά μου. 121 00:05:34,400 --> 00:05:35,820 Υπάρχει ήδη ένα bug. 122 00:05:35,820 --> 00:05:38,640 Μήπως κάποιος για τον οποίο αυτό το κλικ ήδη θέλουν να δείχνουν ότι υπάρχει τουλάχιστον 123 00:05:38,640 --> 00:05:40,220 ένα bug που έχω κάνει; 124 00:05:40,220 --> 00:05:42,470 Ναι; 125 00:05:42,470 --> 00:05:42,800 Ναι. 126 00:05:42,800 --> 00:05:47,860 Ξέχασα "# include" στο κορυφή, σύμπτωμα της οποίας αν προσπαθώ να 127 00:05:47,860 --> 00:05:50,490 καταρτίζουν αυτό πρόκειται να είναι ότι η compiler πρόκειται να μου φωνάζεις, 128 00:05:50,490 --> 00:05:52,770 λέγοντας απροσδιόριστη σύμβολο ή κάτι για το σκοπό αυτό. 129 00:05:52,770 --> 00:05:55,360 Δεν καταλαβαίνω κάτι όπως printf. 130 00:05:55,360 --> 00:05:59,380 >> Έτσι, Πάω να κάνω "# include ", Αποθηκεύστε το αρχείο. 131 00:05:59,380 --> 00:06:00,400 Και τώρα είναι σε καλύτερη κατάσταση. 132 00:06:00,400 --> 00:06:02,690 Αλλά είμαι επίσης πρόκειται να επισημάνω έξω ένα νέο λεπτομερώς σήμερα. 133 00:06:02,690 --> 00:06:08,620 Εκτός από τον ορισμό χώρα κατόχων, όπως% f% i% s, μπορείτε να 134 00:06:08,620 --> 00:06:12,320 μερικές φορές επηρεάζουν τη συμπεριφορά της εν λόγω κράτησης θέσης. 135 00:06:12,320 --> 00:06:15,540 Για παράδειγμα, στην περίπτωση μιας πλωτής Σημείο αξία, αν θέλω απλώς 136 00:06:15,540 --> 00:06:22,200 για να εμφανιστεί ένα δεκαδικό ψηφίο μετά την περίοδο, δεν μπορώ πραγματικά να κάνουμε 0.1f. 137 00:06:22,200 --> 00:06:26,830 Έτσι, με άλλα λόγια, χωρίζω το f και το σύμβολο του ποσοστού με το 0.1, απλά 138 00:06:26,830 --> 00:06:30,200 λέει printf, μπορεί να έχετε μια ολόκληρη δέσμη των αριθμών μετά την υποδιαστολή 139 00:06:30,200 --> 00:06:30,930 σημείο για μένα. 140 00:06:30,930 --> 00:06:32,870 Αλλά θέλω μόνο να δω ένα από αυτά. 141 00:06:32,870 --> 00:06:36,280 >> Έτσι, Πάω να προχωρήσει τώρα και εξοικονομήστε Αυτό το πρόγραμμα, πηγαίνετε στο τερματικό μου 142 00:06:36,280 --> 00:06:41,870 παράθυρο, και είμαι πρόκειται να πάει μπροστά και ο τύπος κάνει 0 float, εισάγετε. 143 00:06:41,870 --> 00:06:44,930 Βλέπω ότι κάπως αινιγματικά γραμμή που θα αρχίσουν να έχουν περισσότερο νόημα, όπως εμείς 144 00:06:44,930 --> 00:06:46,900 πειράζω χώρια αυτή την εβδομάδα και την επόμενη. 145 00:06:46,900 --> 00:06:50,480 Τώρα είμαι πρόκειται να πάει μπροστά και να τρέξει το μηδέν float. 146 00:06:50,480 --> 00:06:52,020 Και, γαμώτο. 147 00:06:52,020 --> 00:06:54,880 >> Έτσι, υπάρχει ένα άλλο bug εδώ για κάποιο λόγο. 148 00:06:54,880 --> 00:07:02,490 Είμαι σίγουρος ότι το ένα δέκατο, ή ένα διαιρούμενο με το 10, δεν είναι 0,0. 149 00:07:02,490 --> 00:07:04,590 Ίσως είμαι απλά δεν ψάχνει σε αρκετά ψηφία. 150 00:07:04,590 --> 00:07:08,580 Γιατί, λοιπόν, δεν μπορώ να πω δύο .2 να δείτε δύο δεκαδικά ψηφία και όχι μόνο ένα. 151 00:07:08,580 --> 00:07:11,810 Επιτρέψτε μου να πάω πίσω στο παράθυρο τερματικού μου εδώ και να χτυπήσει μια-δυο φορές για να 152 00:07:11,810 --> 00:07:12,840 δείτε την ιστορία μου. 153 00:07:12,840 --> 00:07:15,910 Κάνετε επιπλέουν μηδέν και πάλι, και στη συνέχεια και πάλι. 154 00:07:15,910 --> 00:07:17,730 Και τώρα αρχίζει. 155 00:07:17,730 --> 00:07:20,000 >> Και τώρα είμαι απόλυτα σίγουρος ότι αυτό είναι λάθος. 156 00:07:20,000 --> 00:07:23,030 Και θα μπορούσα να κάνω τρία και τέσσερα, και είμαι κατά πάσα πιθανότητα θα συνεχίσω να βλέπω μηδενικά. 157 00:07:23,030 --> 00:07:24,880 Επομένως, πού είναι το σφάλμα; 158 00:07:24,880 --> 00:07:27,910 Ένα διαιρούμενο με το 10 θα πρέπει να είναι 0,1. 159 00:07:27,910 --> 00:07:30,310 Κάποιος θέλει να λάβει μια μαχαιριά σε ό, τι το θεμελιώδες ζήτημα είναι; 160 00:07:30,310 --> 00:07:32,400 Ναι; 161 00:07:32,400 --> 00:07:33,420 Είναι και οι δύο ακέραιοι. 162 00:07:33,420 --> 00:07:33,920 Και τι έγινε; 163 00:07:33,920 --> 00:07:37,820 Έτσι, με ένα διαιρούμενο με το 10, που είναι Τι να κάνω στην αριθμητική. 164 00:07:37,820 --> 00:07:41,185 Και παίρνω 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Ναι. 166 00:07:41,660 --> 00:07:43,240 Και γι 'αυτό είναι πράγματι το ζήτημα. 167 00:07:43,240 --> 00:07:46,700 Όταν παίρνετε έναν ακέραιο σε έναν υπολογιστή και μπορείτε να το διαιρέσετε με άλλο ακέραιο, 168 00:07:46,700 --> 00:07:50,430 ο υπολογιστής από προεπιλογή πρόκειται να υποθέσουμε ότι θέλετε έναν ακέραιο. 169 00:07:50,430 --> 00:07:54,620 Το πρόβλημα όμως, φυσικά, είναι ότι 0,1 δεν είναι ένας ακέραιος αριθμός. 170 00:07:54,620 --> 00:07:55,680 Είναι ένας πραγματικός αριθμός. 171 00:07:55,680 --> 00:07:59,610 Και έτσι αυτό που ο υπολογιστής κάνει με την προεπιλογή είναι απλά πετάει μακριά 172 00:07:59,610 --> 00:08:01,070 τα πάντα μετά την υποδιαστολή. 173 00:08:01,070 --> 00:08:03,380 Δεν στρογγυλοποίηση προς τα κάτω ή πάνω per se. 174 00:08:03,380 --> 00:08:06,480 Είναι απλά πετάει τα πάντα μετά την υποδιαστολή. 175 00:08:06,480 --> 00:08:07,430 Και τώρα που έχει νόημα. 176 00:08:07,430 --> 00:08:09,740 Διότι τώρα είμαστε σαφώς έφυγε με μηδέν. 177 00:08:09,740 --> 00:08:10,250 >> Αλλά περιμένετε ένα λεπτό. 178 00:08:10,250 --> 00:08:11,840 Δεν βλέπω μια int μηδέν. 179 00:08:11,840 --> 00:08:14,910 Βλέπω στην πραγματικότητα 0.00. 180 00:08:14,910 --> 00:08:16,340 Λοιπόν, πώς μπορώ να συμβιβάσει αυτό τώρα; 181 00:08:16,340 --> 00:08:22,850 Αν κάποιος διαιρούμενο με το 10 είναι μηδέν, αλλά είμαι βλέποντας 0.00, όταν είναι να πάρει 182 00:08:22,850 --> 00:08:24,250 μετατραπεί ξανά σε ένα πραγματικό αριθμό; 183 00:08:24,250 --> 00:08:25,500 Ναι. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Ακριβώς. 186 00:08:30,630 --> 00:08:35,600 >> Έτσι, εδώ στη γραμμή πέντε, όταν στην πραγματικότητα αποθηκεύετε τα 0,1, το οποίο στη συνέχεια 187 00:08:35,600 --> 00:08:39,549 περικοπεί στο μηδέν, μέσα από ένα πλωτήρα, Αυτό είναι στην πραγματικότητα ισοδύναμη με 188 00:08:39,549 --> 00:08:42,100 αποθήκευσή όχι ως int, αλλά, Πράγματι, ως float. 189 00:08:42,100 --> 00:08:46,540 Επιπλέον, είμαι στη συνέχεια, χρησιμοποιώντας printf για να ρητά να εκτυπώσετε τον αριθμό αυτό σε δύο 190 00:08:46,540 --> 00:08:49,740 δεκαδικά ψηφία, ακόμη κι αν υπάρχουν δεν μπορεί στην πραγματικότητα να είναι οποιαδήποτε. 191 00:08:49,740 --> 00:08:51,020 >> Έτσι, αυτό το είδος της χάλια, έτσι δεν είναι; 192 00:08:51,020 --> 00:08:53,640 Προφανώς δεν μπορείτε να κάνετε τα μαθηματικά, τουλάχιστον σε αυτό το επίπεδο 193 00:08:53,640 --> 00:08:55,600 ακρίβεια, σε έναν υπολογιστή. 194 00:08:55,600 --> 00:08:56,930 Αλλά σίγουρα υπάρχει μια λύση. 195 00:08:56,930 --> 00:09:00,410 Ποια είναι η πιο απλή αποτύπωση θα μπορούσαμε ίσως κάνει, έστω και μόνο διαισθητικά εδώ 196 00:09:00,410 --> 00:09:01,130 λύσει αυτό; 197 00:09:01,130 --> 00:09:02,380 Ναι; 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Γυρίστε τους ακέραιους σε - 200 00:09:06,574 --> 00:09:06,976 ναι. 201 00:09:06,976 --> 00:09:10,420 Ακόμα κι αν δεν είμαι βέβαιος τι είναι πραγματικά συμβαίνει εδώ, αν 202 00:09:10,420 --> 00:09:13,440 ουσιαστικά έχει να κάνει με αυτά τα δύο είναι ints, καλά, γιατί δεν μπορώ να 203 00:09:13,440 --> 00:09:18,230 κάνουν ότι 10,0, κάνοντας αυτό 1.0, αποθηκεύστε ξανά το αρχείο. 204 00:09:18,230 --> 00:09:20,990 Επιτρέψτε μου να πάω πίσω στο πυθμένα και recompile. 205 00:09:20,990 --> 00:09:23,030 Επιτρέψτε μου τώρα να επαναπροσδιοριστούν. 206 00:09:23,030 --> 00:09:23,420 Και εκεί - 207 00:09:23,420 --> 00:09:27,690 τώρα, έχω ένα δέκατο μου εκπροσωπήθηκαν ως 0.10. 208 00:09:27,690 --> 00:09:28,420 >> Εντάξει. 209 00:09:28,420 --> 00:09:29,220 Έτσι, αυτό δεν είναι κακό. 210 00:09:29,220 --> 00:09:31,730 Και επιτρέψτε μου να επισημάνω ένα άλλο τρόπο θα μπορούσε να λύσει αυτό. 211 00:09:31,730 --> 00:09:35,580 Επιτρέψτε μου πραγματικά κυλήσει πίσω στο χρόνο για το πότε είχαμε αυτό ως ένα 212 00:09:35,580 --> 00:09:36,680 δέκατο πριν από λίγο. 213 00:09:36,680 --> 00:09:40,800 Και επιτρέψτε μου να πάει μπροστά και να αποθηκεύσετε ξανά αυτό το αρχείο ως διαφορετικό όνομα αρχείου, απλά για να 214 00:09:40,800 --> 00:09:41,750 έχουν ένα μικρό σημείο ελέγχου. 215 00:09:41,750 --> 00:09:43,450 Έτσι, αυτό ήταν η μία εκδοχή. 216 00:09:43,450 --> 00:09:45,520 Και τώρα επιτρέψτε μου να προχωρήσει και κάνουμε μία πιο βελτιωμένη έκδοση. 217 00:09:45,520 --> 00:09:48,540 Θα το ονομάσουμε έκδοση δύο μηδέν ευρετήριο. 218 00:09:48,540 --> 00:09:51,280 >> Και Πάω να κάνουμε αντ 'αυτού Αυτό - ξέρετε τι; 219 00:09:51,280 --> 00:09:54,400 Προσθέτοντας dot μηδέν λειτουργεί σε αυτή την περίπτωση. 220 00:09:54,400 --> 00:09:56,060 Αλλά ας υποθέσουμε ότι κάποιος ήταν μια μεταβλητή. 221 00:09:56,060 --> 00:09:57,680 Υποτίθεται ότι 10 ήταν μια μεταβλητή. 222 00:09:57,680 --> 00:10:00,680 Με άλλα λόγια, ας υποθέσουμε ότι δεν θα μπορούσα μόλις hard-code .0 στο τέλος 223 00:10:00,680 --> 00:10:02,340 αυτής της αριθμητικής έκφρασης. 224 00:10:02,340 --> 00:10:05,820 Λοιπόν, μπορώ να κάνω πραγματικά κάτι σε παρένθεση ονομάζεται χύτευση. 225 00:10:05,820 --> 00:10:11,920 Μπορώ να ρίξει ότι ακέραιος 10 σε float, και μπορώ να ρίχνει ότι ακέραιος ένα προς ένα 226 00:10:11,920 --> 00:10:12,800 επιπλέουν, καθώς και. 227 00:10:12,800 --> 00:10:17,190 Στη συνέχεια, τα μαθηματικά που πρόκειται να γίνει αποτελεσματικά 1.0 διαιρείται με 10,0, 228 00:10:17,190 --> 00:10:19,250 το αποτέλεσμα της οποίας πηγαίνει στο f όπως και πριν. 229 00:10:19,250 --> 00:10:26,130 Έτσι, αν μεταγλωττίσετε αυτό το κάνει όπως επιπλέει 2, και επιπλέει τώρα 2, Παίρνω το ίδιο 230 00:10:26,130 --> 00:10:27,020 απαντήσει, καθώς και. 231 00:10:27,020 --> 00:10:29,640 >> Έτσι, αυτό είναι μια αρκετά σκηνοθετημένη παράδειγμα, για να λύσει αυτό το πρόβλημα 232 00:10:29,640 --> 00:10:31,400 με την εισαγωγή casting. 233 00:10:31,400 --> 00:10:34,410 Αλλά σε γενικές γραμμές, χύτευση πρόκειται να είναι ένα ισχυρό πράγμα, ιδιαίτερα για 234 00:10:34,410 --> 00:10:38,180 πρόβλημα που δύο σε μία εβδομάδα, όταν θέλετε να μετατρέψετε έναν τύπο δεδομένων 235 00:10:38,180 --> 00:10:41,800 άλλο ότι στο τέλος της ημέρας εκπροσωπούνται με τον ίδιο τρόπο. 236 00:10:41,800 --> 00:10:44,970 Στο τέλος της ημέρας, κάθε ενιαία πράγμα που έχουμε μιλήσει μέχρι στιγμής είναι 237 00:10:44,970 --> 00:10:46,710 μόνο ints κάτω από το καπό. 238 00:10:46,710 --> 00:10:48,950 Ή αν αυτό είναι πάρα πολύ χαμηλό επίπεδο για σας, είναι ακριβώς οι αριθμοί 239 00:10:48,950 --> 00:10:49,750 κάτω από το καπό. 240 00:10:49,750 --> 00:10:52,850 Ακόμα και χαρακτήρες, και πάλι, υπενθυμίζουν από το μηδέν εβδομάδα, οι αριθμοί 241 00:10:52,850 --> 00:10:53,990 κάτω από το καπό. 242 00:10:53,990 --> 00:10:57,240 >> Δηλαδή, μπορούμε να μετατρέψουμε μεταξύ διαφορετικούς τύπους αριθμών, αν 243 00:10:57,240 --> 00:10:58,060 είναι απλά bits. 244 00:10:58,060 --> 00:11:01,020 Μπορούμε να μετατρέψετε μεταξύ των αριθμών και τα γράμματα, εάν είναι απλά 245 00:11:01,020 --> 00:11:02,580 bits, και το αντίστροφο. 246 00:11:02,580 --> 00:11:07,170 Και χύτευση με τον τρόπο αυτό είναι ένας μηχανισμός στον προγραμματισμό που σας επιτρέπει να δια της βίας 247 00:11:07,170 --> 00:11:10,970 αλλαγή ενός τύπου δεδομένων σε μια άλλη. 248 00:11:10,970 --> 00:11:14,570 Δυστυχώς, αυτό δεν είναι τόσο απλή, όπως ίσως θα ήθελαν. 249 00:11:14,570 --> 00:11:19,220 >> Πάω να πάει πίσω στο πλωτήρες 1, το οποίο ήταν το πιο απλό, πιο 250 00:11:19,220 --> 00:11:22,830 ένα με απλή Προστέθηκε στις 0.0 για το καθένα. 251 00:11:22,830 --> 00:11:25,260 Και ακριβώς όπως μια γρήγορη επανεκπαίδευση, επιτρέψτε μου να πάω μπροστά και να μεταγλωττίσετε ξανά 252 00:11:25,260 --> 00:11:27,670 αυτό, να επιπλέει 2 - 253 00:11:27,670 --> 00:11:30,300 Συγγνώμη, αυτό είναι να επιπλέει 1. 254 00:11:30,300 --> 00:11:32,050 Και τώρα ας τρέχει πλωτήρες 1. 255 00:11:32,050 --> 00:11:34,810 Και στο κάτω, παρατηρήστε ότι έχω όντως 0.1. 256 00:11:34,810 --> 00:11:36,165 Έτσι, το πρόβλημα λύθηκε. 257 00:11:36,165 --> 00:11:37,280 >> Αλλά όχι ακόμη. 258 00:11:37,280 --> 00:11:40,000 Είμαι τώρα πρόκειται να πάρει λίγο περίεργο, και είμαι πρόκειται να πάει πίσω στο μου 259 00:11:40,000 --> 00:11:41,620 printf δήλωση και ας πούμε, ξέρετε τι; 260 00:11:41,620 --> 00:11:44,090 Θα ήθελα να επιβεβαιώσω ότι αυτό είναι πραγματικά ένα δέκατο. 261 00:11:44,090 --> 00:11:47,890 Και Πάω να θέλουν να δουν αυτό , ας πούμε, πέντε δεκαδικά ψηφία. 262 00:11:47,890 --> 00:11:48,570 Δεν είναι ένα πρόβλημα. 263 00:11:48,570 --> 00:11:52,020 Μπορώ να αλλάξω τα δύο σε πέντε, I ξαναμεταγλωττίσετε με κάνουν. 264 00:11:52,020 --> 00:11:53,770 I επανάληψη επιπλέει σαν 1. 265 00:11:53,770 --> 00:11:54,990 Κοιτάζοντας πολύ καλή. 266 00:11:54,990 --> 00:11:58,570 Ελέγχους λογική μου μπορεί να καταλήξει εκεί, αλλά Παίρνω λίγο πιο τολμηροί. 267 00:11:58,570 --> 00:12:00,330 Πάω να αλλάξει 0,5 έως 0,10. 268 00:12:00,330 --> 00:12:03,440 Θέλω να δω 10 ψηφία μετά το δεκαδικό ψηφίο. 269 00:12:03,440 --> 00:12:09,060 >> Και Πάω να προχωρήσει και να μεταγλωττίσετε ξανά αυτό και να επαναπροσδιοριστούν επιπλέει 1. 270 00:12:09,060 --> 00:12:13,060 Ι το είδος της λύπης αφού δοκίμασε αυτό περαιτέρω, επειδή τα μαθηματικά μου δεν είναι τόσο 271 00:12:13,060 --> 00:12:14,320 διορθώσει πια, φαίνεται. 272 00:12:14,320 --> 00:12:15,630 Αλλά περιμένετε ένα λεπτό, ίσως αυτό είναι απλά ένα λάθος. 273 00:12:15,630 --> 00:12:17,810 Ίσως ο υπολογιστής ενεργεί λίγο παράξενο. 274 00:12:17,810 --> 00:12:21,810 Επιτρέψτε μου να πάω μπροστά και να κάνουμε 20 δεκαδικά ψηφία και εγώ διαβεβαιώσω ότι γνωρίζω 275 00:12:21,810 --> 00:12:22,540 πώς να κάνει τα μαθηματικά. 276 00:12:22,540 --> 00:12:23,460 Ξέρω πώς να το πρόγραμμα. 277 00:12:23,460 --> 00:12:26,960 Κάντε πλωτήρες 1, recompile και γαμώτο. 278 00:12:26,960 --> 00:12:31,110 Αυτό είναι πραγματικά, πραγματικά να πάρει μακριά από το σήμα. 279 00:12:31,110 --> 00:12:32,490 >> Λοιπόν, τι συμβαίνει εδώ; 280 00:12:32,490 --> 00:12:36,050 Διαισθητικά, με βάση τις παραδοχές μας νωρίτερα σχετικά με το μέγεθος των τύπων δεδομένων, 281 00:12:36,050 --> 00:12:38,040 τι πρέπει να συμβαίνει εδώ κάτω από την κουκούλα; 282 00:12:38,040 --> 00:12:39,290 Ναι; 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Ακριβώς. 285 00:12:43,590 --> 00:12:46,480 Αν θέλετε αυτό το πολύ ακρίβεια, και αυτό είναι ένα καλό των πολύ ακριβείας - 286 00:12:46,480 --> 00:12:48,770 20 αριθμούς μετά την υποδιαστολή. 287 00:12:48,770 --> 00:12:51,990 Μπορείτε δεν μπορεί να εκπροσωπεί ενδεχομένως μια αυθαίρετο αριθμό, εκτός αν έχετε ένα 288 00:12:51,990 --> 00:12:52,930 αυθαίρετο αριθμό από bits. 289 00:12:52,930 --> 00:12:54,190 Αλλά δεν το κάνουμε. 290 00:12:54,190 --> 00:12:57,200 Για μια float, έχουμε μόνο 32 bits. 291 00:12:57,200 --> 00:13:02,260 >> Έτσι, εάν 32 bits μπορούν να μετατεθούν σε ένα τρόπο - ακριβώς όπως τους ανθρώπους μας, το στάδιο 292 00:13:02,260 --> 00:13:05,780 τα χέρια επάνω ή προς τα κάτω - σε ένα πεπερασμένο αριθμό τρόπους, υπάρχει μόνο ένας πεπερασμένος αριθμός 293 00:13:05,780 --> 00:13:08,640 των πραγματικών αριθμών που μπορεί να αντιπροσωπεύει με εκείνα τα κομμάτια. 294 00:13:08,640 --> 00:13:10,500 Και έτσι ο υπολογιστής τελικά πρόκειται να πρέπει να 295 00:13:10,500 --> 00:13:11,730 αρχίσετε την κοπή γωνίες. 296 00:13:11,730 --> 00:13:15,500 Ο υπολογιστής μπορεί να κρύψει τις λεπτομέρειες από εμάς για λίγο διάστημα. 297 00:13:15,500 --> 00:13:18,880 Αλλά αν αρχίσουμε να σπρώχνει τους αριθμούς και αναζητούν όλο και πιο Κατά την 298 00:13:18,880 --> 00:13:23,220 καταληκτικά αριθμούς στο ακέραιο αριθμό, τότε θα αρχίσουμε να βλέπουμε ότι είναι 299 00:13:23,220 --> 00:13:26,480 στην πραγματικότητα προσεγγίζει το ιδέα του ενός δεκάτου. 300 00:13:26,480 --> 00:13:29,860 >> Και έτσι αποδεικνύεται, κατά τραγικό τρόπο, υπάρχει ένας άπειρος αριθμός των αριθμών 301 00:13:29,860 --> 00:13:35,060 δεν μπορούμε να αντιπροσωπεύει ακριβώς μια υπολογιστή, τουλάχιστον με έναν πεπερασμένο 302 00:13:35,060 --> 00:13:38,030 αριθμός των bits, μια πεπερασμένη ποσό της μνήμης RAM. 303 00:13:38,030 --> 00:13:41,210 Τώρα, δυστυχώς, αυτή η ενίοτε έχει στον πραγματικό κόσμο συνέπειες. 304 00:13:41,210 --> 00:13:45,980 Εάν οι άνθρωποι δεν εκτιμούν αρκετά αυτό ή είδος θεωρούμε δεδομένο το γεγονός 305 00:13:45,980 --> 00:13:48,310 ότι ο υπολογιστής τους θα κάνουμε ό, τι θα πει να το κάνει και δεν 306 00:13:48,310 --> 00:13:51,430 κατανοήσουν αυτά τα υποκείμενα λεπτομέρειες εκπροσώπησης - 307 00:13:51,430 --> 00:13:55,290 τα οποία, ειλικρινά, σε ορισμένες γλώσσες είναι κρυμμένο από τον χρήστη, σε αντίθεση με C - 308 00:13:55,290 --> 00:13:56,500 κάποια κακά πράγματα μπορούν να συμβούν. 309 00:13:56,500 --> 00:13:58,650 >> Και ό, τι νόμιζα ότι θα κάνουμε είναι να κάνουμε ένα βήμα πίσω. 310 00:13:58,650 --> 00:14:00,420 Και αυτό είναι περίπου μία οκτώ λεπτών βίντεο. 311 00:14:00,420 --> 00:14:04,200 Είναι προβλήθηκε πριν από λίγα χρόνια, και δίνει γνώσεις σε πραγματικά ό, τι μπορεί να πάει 312 00:14:04,200 --> 00:14:09,290 στραβά, όταν υπο-εκτιμήσουν αυτά είδη λεπτομέρειες στο πολύ-πολύ όλα 313 00:14:09,290 --> 00:14:10,080 πραγματικό κόσμο. 314 00:14:10,080 --> 00:14:12,965 Αν μπορούσαμε χαμηλώστε τα φώτα για μερικά λεπτά. 315 00:14:12,965 --> 00:14:14,360 >> ΟΜΙΛΗΤΗΣ 1: Και τώρα επιστρέφουμε στη μηχανική 316 00:14:14,360 --> 00:14:17,160 καταστροφές σε σύγχρονα θαύματα. 317 00:14:17,160 --> 00:14:18,680 >> Υπολογιστές - 318 00:14:18,680 --> 00:14:21,340 όλοι έχουμε έρθει για να δεχτεί το συχνά απογοητευτικό προβλήματα 319 00:14:21,340 --> 00:14:23,170 που πάνε μαζί τους. 320 00:14:23,170 --> 00:14:27,570 Bugs, ιούς και δυσλειτουργίες λογισμικού είναι μικρές τιμές να πληρώσουν για την 321 00:14:27,570 --> 00:14:28,960 ευκολία. 322 00:14:28,960 --> 00:14:32,040 Όμως, σε τομείς υψηλής τεχνολογίας και υψηλής ταχύτητας στρατιωτικών και διαστημικό πρόγραμμα 323 00:14:32,040 --> 00:14:38,650 εφαρμογές, το μικρότερο πρόβλημα μπορεί να μεγεθυνθεί σε καταστροφή. 324 00:14:38,650 --> 00:14:44,480 >> Στις 4 Ιουνίου του 1996, οι επιστήμονες έτοιμοι να ξεκινήσει ένα μη επανδρωμένο πύραυλο Ariane 5. 325 00:14:44,480 --> 00:14:48,700 Μετέφερε επιστημονικούς δορυφόρους σχεδιαστεί για να προσδιοριστεί με ακρίβεια το πώς 326 00:14:48,700 --> 00:14:53,250 μαγνητικό πεδίο της Γης αλληλεπιδρά με τους ηλιακούς ανέμους. 327 00:14:53,250 --> 00:14:57,540 Ο πύραυλος κατασκευάστηκε για την Ευρωπαϊκή Υπηρεσίας Διαστήματος και ανασηκωμένη από της 328 00:14:57,540 --> 00:14:59,906 εγκατάσταση στην ακτή της Γαλλικής Γουιάνας. 329 00:14:59,906 --> 00:15:03,660 >> JACK GANSSLE: Σε περίπου 37 δευτερόλεπτα σε η πτήση, που παρατηρήθηκε για πρώτη φορά 330 00:15:03,660 --> 00:15:04,910 κάτι δεν πήγαινε καλά. 331 00:15:04,910 --> 00:15:08,130 Τα ακροφύσια, γυρίζοντας στο ένας τρόπος που πραγματικά δεν θα έπρεπε. 332 00:15:08,130 --> 00:15:12,380 Περίπου 40 δευτερόλεπτα στην πτήση, σαφώς το όχημα ήταν σε μπελάδες. 333 00:15:12,380 --> 00:15:14,400 Και αυτό είναι, όταν έκαναν ένα απόφαση να το καταστρέψουν. 334 00:15:14,400 --> 00:15:18,520 Ο ανώτερος υπάλληλος ασφάλειας, με τεράστια κότσια, πιέζεται το κουμπί, 335 00:15:18,520 --> 00:15:23,900 ανατίναξαν τον πύραυλο προτού να μπορέσει να να γίνει ένας κίνδυνος για τη δημόσια ασφάλεια. 336 00:15:23,900 --> 00:15:27,810 >> ΟΜΙΛΗΤΗΣ 1: Αυτό ήταν το παρθενικό ταξίδι του Ariane 5, και την καταστροφή του 337 00:15:27,810 --> 00:15:32,020 έλαβε χώρα εξαιτίας του ενσωματωμένου ενός ελαττώματος στο λογισμικό του πυραύλου. 338 00:15:32,020 --> 00:15:33,980 >> JACK GANSSLE: Το πρόβλημα για την Ariane ήταν ότι υπάρχει ένας αριθμός 339 00:15:33,980 --> 00:15:36,390 ότι οι απαιτούμενες 64 bits για να εκφράσουν. 340 00:15:36,390 --> 00:15:39,420 Και ήθελαν να μετατρέψουν σε μια 16-bit αριθμό. 341 00:15:39,420 --> 00:15:43,130 Υπέθεσαν ότι ο αριθμός δεν ήταν ποτέ πρόκειται να είναι πολύ μεγάλο, ότι το μεγαλύτερο μέρος των 342 00:15:43,130 --> 00:15:46,810 τα ψηφία του 64-bit αριθμός ήταν μηδενικά. 343 00:15:46,810 --> 00:15:48,270 Θα ήταν λάθος. 344 00:15:48,270 --> 00:15:51,380 >> ΟΜΙΛΗΤΗΣ 1: Η αδυναμία ενός λογισμικού πρόγραμμα για να δεχθεί το είδος της 345 00:15:51,380 --> 00:15:55,350 αριθμός που παράγεται από ένα άλλο ήταν στη ρίζα της αποτυχίας. 346 00:15:55,350 --> 00:15:59,970 Ανάπτυξη λογισμικού είχε γίνει μια πολύ δαπανηρό μέρος της νέας τεχνολογίας. 347 00:15:59,970 --> 00:16:03,980 Η Ariane 4 πύραυλος ήταν πολύ επιτυχής, τόσο μεγάλο μέρος του λογισμικού 348 00:16:03,980 --> 00:16:07,480 δημιουργήθηκε για αυτό ήταν επίσης που χρησιμοποιούνται για την Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP COYLE: Το βασικό πρόβλημα ήταν ότι η Ariane 5 ήταν ταχύτερη, 350 00:16:11,980 --> 00:16:13,720 επιταχύνθηκε γρηγορότερα. 351 00:16:13,720 --> 00:16:17,250 Και το λογισμικό δεν είχε αντιπροσώπευε γι 'αυτό. 352 00:16:17,250 --> 00:16:20,770 >> ΟΜΙΛΗΤΗΣ 1: Η καταστροφή του πυραύλου ήταν μια τεράστια οικονομική καταστροφή, 353 00:16:20,770 --> 00:16:24,200 όλα οφείλονται σε ένα λεπτό σφάλμα λογισμικού. 354 00:16:24,200 --> 00:16:27,820 Αλλά αυτή δεν ήταν η πρώτη φορά, δεδομένα προβλήματα μετατροπής είχε ταλαιπωρήσει σύγχρονες 355 00:16:27,820 --> 00:16:30,620 πυραυλικής τεχνολογίας. 356 00:16:30,620 --> 00:16:34,480 >> JACK GANSSLE: Το 1991, με την έναρξη του πρώτου Πολέμου του Κόλπου, ο Patriot 357 00:16:34,480 --> 00:16:38,610 πυραύλων βιώσει ένα παρόμοιο είδος ενός προβλήματος μετατροπής αριθμό. 358 00:16:38,610 --> 00:16:44,910 Ως αποτέλεσμα, 28 Αμερικανοί στρατιώτες ήταν σκοτώθηκαν και περίπου 100 τραυματίες 359 00:16:44,910 --> 00:16:48,600 όταν το Patriot, η οποία υποτίθεται ότι για την προστασία από τις εισερχόμενες Scuds, 360 00:16:48,600 --> 00:16:51,630 απέτυχε να βάλει φωτιά σε ένα βλήμα. 361 00:16:51,630 --> 00:16:55,110 >> ΟΜΙΛΗΤΗΣ 1: Όταν το Ιράκ εισέβαλε στο Κουβέιτ και Αμερική ξεκίνησε Καταιγίδα της Ερήμου στο 362 00:16:55,110 --> 00:17:00,570 αρχές του 1991, συστοιχίες πυραύλων Patriot είχαν αναπτυχθεί για την προστασία της Σαουδικής Αραβίας 363 00:17:00,570 --> 00:17:04,760 και το Ισραήλ από το Ιράκ Scud πυραυλικές επιθέσεις. 364 00:17:04,760 --> 00:17:09,720 Το Patriot είναι μια αμερικανική μεσαίου βεληνεκούς επιφανείας-αέρος του συστήματος κατασκευάζονται από 365 00:17:09,720 --> 00:17:11,569 η εταιρεία Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> ΘΕΟΔΩΡΟΣ Postol: Το μέγεθος του Patriot αναχαίτισης είναι η ίδια περίπου 367 00:17:16,410 --> 00:17:17,710 20 πόδια μακρύ. 368 00:17:17,710 --> 00:17:20,800 Και ζυγίζει περίπου 2000 κιλά. 369 00:17:20,800 --> 00:17:22,940 Και αυτό φέρνει μια κεφαλή περίπου - 370 00:17:22,940 --> 00:17:24,905 Νομίζω ότι είναι περίπου 150 κιλά. 371 00:17:24,905 --> 00:17:31,030 Και η κεφαλή πυραύλου η ίδια είναι ένα εκρηκτικών που έχει 372 00:17:31,030 --> 00:17:33,270 θραύσματα γύρω από αυτό. 373 00:17:33,270 --> 00:17:37,490 Το περίβλημα της εκρηκτικής κεφαλής είναι σχεδιασμένο να ενεργεί σαν σκάγια. 374 00:17:37,490 --> 00:17:40,720 >> ΟΜΙΛΗΤΗΣ 1: Τα βλήματα που τέσσερις ανά περιέκτη και μεταφέρονται 375 00:17:40,720 --> 00:17:43,050 από ένα ημι ρυμουλκούμενο. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP COYLE: Ο πατριώτης αντιπυραυλική το σύστημα πηγαίνει πίσω στο 377 00:17:47,490 --> 00:17:50,710 τουλάχιστον 20 χρόνια τώρα. 378 00:17:50,710 --> 00:17:54,350 Αρχικά είχε σχεδιαστεί ως μια πυραυλική άμυνα αέρα 379 00:17:54,350 --> 00:17:56,190 καταρρίψουν τα αεροπλάνα του εχθρού. 380 00:17:56,190 --> 00:18:02,490 Στο πρώτο Πόλεμο του Κόλπου, όταν ο πόλεμος ήρθε μαζί, ο στρατός ήθελε να το χρησιμοποιήσετε 381 00:18:02,490 --> 00:18:05,535 να καταρρίψουν Scuds όχι αεροπλάνα. 382 00:18:05,535 --> 00:18:09,310 Η ιρακινή αεροπορία δεν ήταν τόσο μεγάλο πρόβλημα. 383 00:18:09,310 --> 00:18:12,450 Αλλά ο στρατός ανησυχεί για Scuds. 384 00:18:12,450 --> 00:18:15,950 Και έτσι προσπάθησαν να αναβαθμίσουν το Patriot. 385 00:18:15,950 --> 00:18:18,750 >> ΟΜΙΛΗΤΗΣ 1: Παρακολουθούν ένα βλήμα του εχθρού ταξιδεύουν στο mach πέντε ήταν 386 00:18:18,750 --> 00:18:20,890 πρόκειται να είναι αρκετά προκλητική. 387 00:18:20,890 --> 00:18:25,590 Αλλά όταν το Patriot ήταν έσπευσε στο υπηρεσίας, ο στρατός δεν ήταν ενήμερη για ένα 388 00:18:25,590 --> 00:18:31,710 Ιράκ τροποποίηση που έκανε τους Scuds σχεδόν αδύνατο να χτυπήσει. 389 00:18:31,710 --> 00:18:35,240 >> ΘΕΟΔΩΡΟΣ Postol: Τι συνέβη είναι οι Scuds που ήταν 390 00:18:35,240 --> 00:18:36,570 έρχονται ήταν ασταθής. 391 00:18:36,570 --> 00:18:37,532 Είχαν ταλάντευση. 392 00:18:37,532 --> 00:18:43,220 Ο λόγος για αυτό ήταν η Ιρακινούς, στην Για να πάρετε 600 χιλιόμετρα από την 393 00:18:43,220 --> 00:18:47,530 300 χιλιομέτρων βεληνεκούς πυραύλων, πήρε βάρους έξω από την μπροστινή κεφαλή. 394 00:18:47,530 --> 00:18:49,290 Έκαναν την κεφαλή αναπτήρα. 395 00:18:49,290 --> 00:18:53,110 Έτσι τώρα το Patriot προσπαθεί για να έρθει στο Scud. 396 00:18:53,110 --> 00:18:56,470 Και τις περισσότερες φορές, η συντριπτική το μεγαλύτερο χρονικό διάστημα, θα ήταν απλώς 397 00:18:56,470 --> 00:18:58,730 πετάξει από το Scud. 398 00:18:58,730 --> 00:19:01,760 >> ΟΜΙΛΗΤΗΣ 1: Μόλις το σύστημα Patriot φορείς συνειδητοποίησε το Patriot έχασε 399 00:19:01,760 --> 00:19:06,690 στόχο της, που πυροδότησε την πατριώτες κεφαλή να αποφευχθούν πιθανές 400 00:19:06,690 --> 00:19:10,300 απώλειες εάν αφέθηκε να πέσει στο έδαφος. 401 00:19:10,300 --> 00:19:14,540 >> ΘΕΟΔΩΡΟΣ Postol: Αυτό ήταν ό, τι πιο άνθρωποι είδαν τόσο μεγάλη fireballs στον ουρανό 402 00:19:14,540 --> 00:19:20,350 και να παρερμηνευθεί ως παρακολουθήσεις της Scud κεφαλές. 403 00:19:20,350 --> 00:19:23,320 >> ΟΜΙΛΗΤΗΣ 1: Αν και στο νυχτερινό ουρανό Πατριώτες φάνηκε να είναι με επιτυχία 404 00:19:23,320 --> 00:19:27,530 καταστρέφοντας Scuds, στο Νταχράν υπάρχει θα μπορούσε να μην το κρύβουμε της 405 00:19:27,530 --> 00:19:29,140 απόδοση. 406 00:19:29,140 --> 00:19:34,180 Εκεί, το σύστημα ραντάρ του Patriot έχασαν παρακολούθηση της εισερχόμενης Scud και ποτέ 407 00:19:34,180 --> 00:19:36,380 ξεκίνησε οφείλεται σε ένα ελάττωμα του λογισμικού. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Ήταν οι Ισραηλινοί που ανακαλύφθηκε για πρώτη φορά ότι όσο περισσότερο το σύστημα 410 00:19:42,700 --> 00:19:48,020 ήταν, τόσο μεγαλύτερη είναι η απόκλιση του χρόνου έγινε λόγω της ένα ρολόι 411 00:19:48,020 --> 00:19:50,470 ενσωματωμένο στον υπολογιστή του συστήματος. 412 00:19:50,470 --> 00:19:54,640 >> JACK GANSSLE: Περίπου δύο εβδομάδες πριν από την τραγωδία στο Νταχράν, οι Ισραηλινοί 413 00:19:54,640 --> 00:19:58,440 αναφέρθηκαν στο Υπουργείο Άμυνας ότι το σύστημα ήταν χάσιμο χρόνου. 414 00:19:58,440 --> 00:20:01,280 Μετά από οκτώ περίπου ώρες λειτουργίας, παρατήρησαν ότι το σύστημα είναι 415 00:20:01,280 --> 00:20:03,530 γίνει αισθητά λιγότερο ακριβείς. 416 00:20:03,530 --> 00:20:07,710 Το Υπουργείο Άμυνας ανταποκρίθηκε λέει όλες τις μπαταρίες Patriot 417 00:20:07,710 --> 00:20:10,500 να μην αφήσει τα συστήματα για μεγάλο χρονικό διάστημα. 418 00:20:10,500 --> 00:20:12,430 Ποτέ δεν είπε τι ένα μεγάλο χρονικό διάστημα ήταν. 419 00:20:12,430 --> 00:20:13,330 Οκτώ ώρες; 420 00:20:13,330 --> 00:20:13,810 10 ώρες; 421 00:20:13,810 --> 00:20:14,990 1000 ώρες; 422 00:20:14,990 --> 00:20:17,150 Κανείς δεν ήξερε. 423 00:20:17,150 --> 00:20:20,220 >> ΟΜΙΛΗΤΗΣ 1: Η μπαταρία Patriot σταθμεύουν στο στρατώνα στο Νταχράν 424 00:20:20,220 --> 00:20:24,660 και ατελή εσωτερικό ρολόι του είχε για πάνω από 100 ώρες το βράδυ της 425 00:20:24,660 --> 00:20:27,470 25 Φεβρουαρίου. 426 00:20:27,470 --> 00:20:31,770 >> JACK GANSSLE: Θα παρακολουθούνται χρόνο για μια ακρίβεια περίπου το ένα δέκατο του δευτερολέπτου. 427 00:20:31,770 --> 00:20:34,480 Τώρα, ένα δέκατο του δευτερολέπτου αποτελεί ενδιαφέρουσα αριθμό, διότι δεν μπορεί να είναι 428 00:20:34,480 --> 00:20:39,940 εκφραζόμενη σε δυαδική ακριβώς, πράγμα που σημαίνει δεν μπορεί να εκφράζεται ακριβώς 429 00:20:39,940 --> 00:20:42,500 κάθε σύγχρονο ψηφιακό υπολογιστή. 430 00:20:42,500 --> 00:20:46,920 Είναι δύσκολο να πιστέψει κανείς, αλλά χρησιμοποιήσουμε ως παράδειγμα. 431 00:20:46,920 --> 00:20:49,000 Ας πάρουμε το νούμερο ένα τρίτο. 432 00:20:49,000 --> 00:20:53,150 Το ένα τρίτο δεν μπορεί να εκφραστεί σε δεκαδική ακριβώς. 433 00:20:53,150 --> 00:20:57,500 Το ένα τρίτο είναι 0.333 πρόκειται σχετικά για το άπειρο. 434 00:20:57,500 --> 00:21:02,270 Δεν υπάρχει τρόπος να το κάνουμε αυτό με απόλυτη ακρίβεια σε δεκαδικά. 435 00:21:02,270 --> 00:21:05,370 Αυτό είναι ακριβώς το ίδιο είδος του προβλήματος αυτό συνέβη στο Patriot. 436 00:21:05,370 --> 00:21:09,880 Το πλέον το σύστημα έτρεξε, η χειρότερη το σφάλμα χρόνου έγινε. 437 00:21:09,880 --> 00:21:13,840 >> ΟΜΙΛΗΤΗΣ 1: Μετά από 100 ώρες λειτουργίας, το σφάλμα στο χρόνο ήταν μόνο 438 00:21:13,840 --> 00:21:16,140 περίπου το ένα τρίτο του δευτερολέπτου. 439 00:21:16,140 --> 00:21:20,800 Αλλά από την άποψη της στόχευσης ενός πυραύλου ταξιδεύουν στο mach πέντε, είχε ως αποτέλεσμα 440 00:21:20,800 --> 00:21:24,410 ένα σφάλμα παρακολούθησης πάνω από 600 μέτρα. 441 00:21:24,410 --> 00:21:27,670 Θα ήταν μοιραίο λάθος για οι στρατιώτες στο Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> ΘΕΟΔΩΡΟΣ Postol: Αυτό που συνέβη είναι μια Scud εκτόξευσης εντοπίστηκε από τις αρχές 443 00:21:33,450 --> 00:21:34,280 δορυφόροι προειδοποίησης. 444 00:21:34,280 --> 00:21:38,550 Και ήξεραν ότι ο Scud ερχόταν στη γενική κατεύθυνσή τους. 445 00:21:38,550 --> 00:21:41,000 Δεν ήξεραν πού ερχόταν. 446 00:21:41,000 --> 00:21:43,900 >> ΟΜΙΛΗΤΗΣ 1: Ήταν τώρα στο ραντάρ συνιστώσα του συστήματος Patriot 447 00:21:43,900 --> 00:21:48,910 υπεράσπιση Dhahran για να εντοπίσετε και να κρατήσει παρακολούθηση των εισερχόμενων πυραύλων του εχθρού. 448 00:21:48,910 --> 00:21:50,580 >> JACK GANSSLE: Το ραντάρ ήταν πολύ έξυπνος. 449 00:21:50,580 --> 00:21:53,770 Θα παρακολουθείτε πραγματικά τη θέση του ο Scud και στη συνέχεια να προβλέψει πού 450 00:21:53,770 --> 00:21:57,160 κατά πάσα πιθανότητα θα είναι η επόμενη φορά το ραντάρ έστειλε έναν παλμό έξω. 451 00:21:57,160 --> 00:21:58,870 Που ονομαζόταν η πύλη φάσμα. 452 00:21:58,870 --> 00:22:04,020 >> ΘΕΟΔΩΡΟΣ Postol: Στη συνέχεια, αφού το Patriot αποφασίζει έχει περάσει αρκετός χρόνος για να πάει 453 00:22:04,020 --> 00:22:09,420 πίσω και ελέγξτε την επόμενη θέση για Αυτό το αντικείμενο που ανιχνεύεται, πηγαίνει πίσω. 454 00:22:09,420 --> 00:22:14,450 Έτσι, όταν πήγε πίσω στο λάθος θέση του, τότε βλέπει κανένα αντικείμενο. 455 00:22:14,450 --> 00:22:18,200 Και αποφασίζει ότι δεν υπήρχε αντικείμενο, ήταν μια λανθασμένη ανίχνευση και 456 00:22:18,200 --> 00:22:19,680 πέφτει το κομμάτι. 457 00:22:19,680 --> 00:22:22,970 >> ΟΜΙΛΗΤΗΣ 1: Η εισερχόμενη Scud εξαφανίστηκε από την οθόνη του ραντάρ, και 458 00:22:22,970 --> 00:22:26,050 δευτερόλεπτα αργότερα συγκρούστηκε στο στρατώνα. 459 00:22:26,050 --> 00:22:31,950 Η Scud σκότωσε 28 και ήταν η τελευταία απολύθηκε κατά τη διάρκεια του πρώτου Πολέμου του Κόλπου. 460 00:22:31,950 --> 00:22:37,700 Τραγικά, το ενημερωμένο λογισμικό έφτασε στο Νταχράν την επόμενη ημέρα. 461 00:22:37,700 --> 00:22:41,800 Το ελάττωμα του λογισμικού είχε καθοριστεί, κλείνοντας ένα κεφάλαιο στην ταραγμένη 462 00:22:41,800 --> 00:22:43,690 ιστορία των πυραύλων Patriot. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot είναι στην πραγματικότητα ένα αρκτικόλεξο σταδιακής συστημάτων παρακολούθησης 465 00:22:50,710 --> 00:22:51,960 Τομής της Target. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J MALAN: Εντάξει, έτσι, ένα απογοητευτικό παράδειγμα, να είστε σίγουροι. 468 00:23:00,840 --> 00:23:03,430 Και ευτυχώς, αυτές χαμηλότερο επίπεδο σφάλματα δεν είναι κάτι που εμείς θα 469 00:23:03,430 --> 00:23:06,220 συνήθως πρέπει να εκτιμήσουν, σίγουρα όχι με κάποια από μας 470 00:23:06,220 --> 00:23:07,360 νωρίτερο των προγραμμάτων. 471 00:23:07,360 --> 00:23:10,450 Αντίθετα, τα περισσότερα από τα σφάλματα που θα συνάντηση θα ήταν λογικό στη φύση, 472 00:23:10,450 --> 00:23:12,900 συντακτική στη φύση με την οποία ο κωδικός ακριβώς δεν λειτουργεί σωστά. 473 00:23:12,900 --> 00:23:14,140 Και ξέρετε ότι πολύ γρήγορα. 474 00:23:14,140 --> 00:23:16,850 >> Όμως, ιδιαίτερα όταν φτάσουμε στην τέλος του εξαμήνου, πρόκειται να 475 00:23:16,850 --> 00:23:20,620 γίνονται όλο και περισσότερο από μια δυνατότητα πραγματικά ότι σκληρά για το σχεδιασμό 476 00:23:20,620 --> 00:23:22,960 των προγραμμάτων και του υποκείμενου αναπαράσταση 477 00:23:22,960 --> 00:23:24,520 εκεί, επίσης, των στοιχείων. 478 00:23:24,520 --> 00:23:28,010 Για παράδειγμα, θα εισαγάγει MySQL, η οποία είναι μια δημοφιλής μηχανή βάσης δεδομένων 479 00:23:28,010 --> 00:23:30,850 που μπορείτε να χρησιμοποιήσετε με ιστοσελίδες για να αποθηκεύουν δεδομένα σχετικά με την πίσω άκρο. 480 00:23:30,850 --> 00:23:34,630 Και θα πρέπει να αρχίσουν να αποφασίσει σε το τέλος του εξαμήνου, όχι μόνο ό, τι 481 00:23:34,630 --> 00:23:38,790 τύπους δεδομένων κατά μήκος αυτών των γραμμών να χρησιμοποιούν αλλά ακριβώς πόσα bits να χρησιμοποιούν, 482 00:23:38,790 --> 00:23:42,740 αν θέλετε ή όχι να αποθηκεύσετε ημερομηνίες οι ημερομηνίες και οι ώρες οι χρόνοι, καθώς επίσης και 483 00:23:42,740 --> 00:23:46,890 πράγματα όπως το πόσο μεγάλο θέλετε το μοναδικά αναγνωριστικά για να είναι, ας πούμε, οι χρήστες 484 00:23:46,890 --> 00:23:47,680 στη βάση δεδομένων σας. 485 00:23:47,680 --> 00:23:51,210 >> Στην πραγματικότητα, εάν κάποιοι από εσάς είχατε Λογαριασμούς στο Facebook εδώ και αρκετό καιρό, 486 00:23:51,210 --> 00:23:53,680 και ξέρετε πώς να αποκτήσετε πρόσβαση στο χρήστη με ID σας - 487 00:23:53,680 --> 00:23:57,930 η οποία δείχνει μερικές φορές σε σας URL προφίλ του, εκτός εάν έχετε επιλέξει ένα 488 00:23:57,930 --> 00:24:02,070 ψευδώνυμο για το URL, ή αν έχετε Γράφημα χρησιμοποιείται το Facebook API, η 489 00:24:02,070 --> 00:24:05,510 διαθέσιμες στο κοινό API με το οποίο θα μπορεί να ζητήσει από το Facebook για τα ανεπεξέργαστα δεδομένα - 490 00:24:05,510 --> 00:24:07,580 μπορείτε να δείτε τι αριθμητικό ID σας. 491 00:24:07,580 --> 00:24:10,880 Και πριν από μερικά χρόνια, ουσιαστικά Facebook έπρεπε να αλλάξει από τη χρήση 492 00:24:10,880 --> 00:24:15,980 το ισοδύναμο των ints τη χρήση μακράς καιρό γιατί την πάροδο του χρόνου, καθώς οι χρήστες έρχονται 493 00:24:15,980 --> 00:24:19,780 και να πάει και να δημιουργήσει πολλούς λογαριασμούς και ψεύτικους λογαριασμούς, ακόμη και αυτοί πολύ εύκολα 494 00:24:19,780 --> 00:24:24,630 ήταν σε θέση να εξαντλήσει κάτι σαν 4 δισ. δυνατή τιμή, όπως έναν int. 495 00:24:24,630 --> 00:24:28,340 >> Έτσι, περισσότερο σε αυτά τα είδη των θεμάτων κάτω από το δρόμο, καθώς και. 496 00:24:28,340 --> 00:24:30,750 Εντάξει, έτσι ώστε να ήταν χύτευσης. 497 00:24:30,750 --> 00:24:31,670 Αυτό ήταν ανακρίβεια. 498 00:24:31,670 --> 00:24:32,730 Ένα ζευγάρι των γρήγορων ανακοινώσεις. 499 00:24:32,730 --> 00:24:35,710 Έτσι, τα τμήματα ξεκινήσει επίσημα την ερχόμενη Κυριακή, Δευτέρα, Τρίτη. 500 00:24:35,710 --> 00:24:39,080 Θα ακούσετε μέσω e-mail αργότερα αυτή την εβδομάδα ως προς εκχώρηση τμήμα σας. 501 00:24:39,080 --> 00:24:42,570 Και θα έχετε επίσης εδώ σε αυτό το σημείο πως για να αλλάξετε το τμήμα σας, εάν σας 502 00:24:42,570 --> 00:24:45,660 το πρόγραμμα έχει πλέον αλλάξει ή να σας επίπεδο άνεσης έχει πλέον αλλάξει. 503 00:24:45,660 --> 00:24:49,380 Εν τω μεταξύ P-set ενός χάκερ και ένα είναι οφείλεται αυτή την Πέμπτη με την επιλογή 504 00:24:49,380 --> 00:24:52,450 παρατείνει την προθεσμία αυτή κατά τη προδιαγραφές έως την Παρασκευή 505 00:24:52,450 --> 00:24:53,830 σε ένα τυπικό τρόπο. 506 00:24:53,830 --> 00:24:57,500 >> Συνειδητοποιήστε ότι περιλαμβάνεται με το πρόβλημα προδιαγραφές που είναι οι οδηγίες για 507 00:24:57,500 --> 00:25:02,770 Πώς να χρησιμοποιήσετε το CS50 συσκευή, κάνει, καθώς και ορισμένες CS50 ειδικά εργαλεία 508 00:25:02,770 --> 00:25:06,540 όπως το στυλ 50, το οποίο μπορεί να σας προσφέρει με ανάδραση δυναμικά για την 509 00:25:06,540 --> 00:25:10,230 ποιότητα του κώδικα στυλ σας, αλλά και ελέγχει το 50, το οποίο μπορεί να σας παρέχει με 510 00:25:10,230 --> 00:25:13,160 Δυναμική ανάδραση ώστε να σας ορθότητα του κώδικα του. 511 00:25:13,160 --> 00:25:16,850 Συγχωρήστε ότι είμαστε ακόμα σιδέρωμα έξω μερικές συστροφές με επιταγή 50. 512 00:25:16,850 --> 00:25:21,490 Μερικοί από τους συμμαθητές σας που είχαν ξεκινήσει περίπου τέσσερις το βράδυ της Παρασκευής, όταν 513 00:25:21,490 --> 00:25:25,130 το spec ανέβηκε έχετε παρατηρήσει από τότε μερικά bugs που εργαζόμαστε 514 00:25:25,130 --> 00:25:29,010 μέσα, και συγνώμη για όποιον γνώρισε αδικαιολόγητη απογοητεύσεις. 515 00:25:29,010 --> 00:25:30,340 Το λάθος είναι δικό μου. 516 00:25:30,340 --> 00:25:34,080 Αλλά θα παρακολουθεί την CS50 συζητήσουν όταν αυτό έχει επιλυθεί. 517 00:25:34,080 --> 00:25:35,700 >> Έτσι, μια λέξη για τα αποτελέσματα τους. 518 00:25:35,700 --> 00:25:38,990 Γι 'αυτό θα είναι μια εβδομάδα ή δύο πριν αρχίζουν να πάρει πληροφορίες σχετικά με σύνολα πρόβλημα 519 00:25:38,990 --> 00:25:40,640 γιατί δεν έχουν ακόμη υπότροφος διδασκαλίας. 520 00:25:40,640 --> 00:25:44,510 Και ακόμα και τότε, θα αρχίσουμε να αξιολογήσει το πρόβλημα C σύνολα πριν 521 00:25:44,510 --> 00:25:46,970 πάμε πίσω και να αξιολογήσει το μηδέν, έτσι ότι μπορείτε να πάρετε περισσότερες σχετικές 522 00:25:46,970 --> 00:25:48,150 Η γνώμη πιο γρήγορα. 523 00:25:48,150 --> 00:25:51,870 Αλλά σε γενικές γραμμές σύμφωνα με την εξεταστέα ύλη, CS50 Τα σύνολα πρόβλημα που αξιολογούνται κατά μήκος της 524 00:25:51,870 --> 00:25:53,580 μετά από τέσσερις άξονες - 525 00:25:53,580 --> 00:25:55,760 το πεδίο εφαρμογής, την ορθότητα, το σχεδιασμό και στυλ. 526 00:25:55,760 --> 00:25:59,210 >> Πεδίο εφαρμογής πρόκειται να είναι ένας αριθμός τυπικά μεταξύ μηδέν και πέντε ότι 527 00:25:59,210 --> 00:26:01,830 συλλαμβάνει πόσο η κομμάτι που δάγκωσε. 528 00:26:01,830 --> 00:26:03,750 Συνήθως, θέλετε αυτό να είναι πέντε. 529 00:26:03,750 --> 00:26:05,300 Μπορείτε τουλάχιστον δοκιμάσει τα πάντα. 530 00:26:05,300 --> 00:26:09,330 Και παρατηρήσετε ότι είναι ένας πολλαπλασιαστικός παράγοντας έτσι ώστε να κάνει μόνο ένα μέρος του 531 00:26:09,330 --> 00:26:12,520 set πρόβλημα δεν είναι η καλύτερη στρατηγική. 532 00:26:12,520 --> 00:26:15,610 >> Εν τω μεταξύ, πιο προφανής είναι η σημασία της ορθότητας - 533 00:26:15,610 --> 00:26:18,620 ακριβώς είναι το πρόγραμμά σας σωστά με σεβασμό των προδιαγραφών; 534 00:26:18,620 --> 00:26:21,510 Αυτό είναι σταθμισμένος σκόπιμα περισσότερα σε μεγάλο βαθμό από τις άλλες δύο άξονες από ένα 535 00:26:21,510 --> 00:26:24,450 τριπλάσιο διότι αναγνωρίζουμε που συνήθως θα πάμε να περάσετε μια 536 00:26:24,450 --> 00:26:28,600 πολύ περισσότερο χρόνο κυνηγώντας κάποια σφάλματα, να πάρει τον κωδικό σας για να λειτουργήσει, τότε μπορείτε 537 00:26:28,600 --> 00:26:31,540 είναι αυτό που εσοχή και επιλέγοντας κατάλληλα τα ονόματα των μεταβλητών και οι 538 00:26:31,540 --> 00:26:33,800 παρόμοια, που είναι στο άλλο άκρο του φάσματος του στυλ. 539 00:26:33,800 --> 00:26:36,160 >> Αυτό δεν πρόκειται να πει το στυλ δεν είναι σημαντικό, και εμείς θα το κηρύξουν πάνω 540 00:26:36,160 --> 00:26:37,920 φορά τόσο στις διαλέξεις και στα τμήματα. 541 00:26:37,920 --> 00:26:40,520 Style αναφέρεται στην αισθητική του κωδικού σας. 542 00:26:40,520 --> 00:26:43,980 Έχετε επιλέξει καλά μεταβλητές με όνομα που είναι σύντομες, αλλά κάπως 543 00:26:43,980 --> 00:26:44,680 περιγραφικό; 544 00:26:44,680 --> 00:26:47,840 Είναι ο κωδικός σας εσοχή, όπως έχετε δει στην διάλεξη και κατά τρόπο συνεπή 545 00:26:47,840 --> 00:26:49,070 με το ύφος 50; 546 00:26:49,070 --> 00:26:51,220 >> Τέλος, είναι δικαίωμα σχεδίου εκεί στη μέση. 547 00:26:51,220 --> 00:26:54,090 Το design είναι το δυσκολότερο να τεθεί ένα δάχτυλο στο γιατί είναι πολύ πιο 548 00:26:54,090 --> 00:26:55,000 υποκειμενική. 549 00:26:55,000 --> 00:26:58,610 Αλλά αυτό είναι ίσως το πιο σημαντικό από οι τρεις άξονες όσον αφορά στην παιδαγωγική 550 00:26:58,610 --> 00:27:02,050 την πάροδο του χρόνου και ότι αυτό θα είναι ευκαιρία του υποτρόφου διδασκαλίας για 551 00:27:02,050 --> 00:27:04,110 σας παρέχει ποιοτική ανατροφοδότηση. 552 00:27:04,110 --> 00:27:08,100 Πράγματι, το CS50 ακόμα κι αν έχουμε αυτοί οι τύποι και τα σκορ, στο τέλος 553 00:27:08,100 --> 00:27:11,350 της ημέρας αυτά είναι πολύ σκόπιμα πολύ μικρές κουβάδες - τιμές σημείου 554 00:27:11,350 --> 00:27:13,460 μεταξύ μηδέν και τριών και μηδέν και πέντε. 555 00:27:13,460 --> 00:27:17,800 Εμείς δεν θέλουμε να βγάλουμε πολύ χοντρό γραμμές μεταξύ των σετ πρόβλημα ή μεταξύ 556 00:27:17,800 --> 00:27:21,490 φοιτητές, αλλά μάλλον να επικεντρωθεί όσο μπορούμε σε ποιοτικά, χειρόγραφος 557 00:27:21,490 --> 00:27:25,490 ανατροφοδότηση, είτε δακτυλογραφημένα ή λεκτικά από ιδιαίτερα τους συναδέλφους σας διδασκαλίας, 558 00:27:25,490 --> 00:27:27,050 θα πάρετε για να γνωρίζουμε αρκετά καλά. 559 00:27:27,050 --> 00:27:32,340 >> Αλλά σε γενικές γραμμές, αυτά είναι τα βάρη ότι οι διάφορες άξονες θα έχουν. 560 00:27:32,340 --> 00:27:35,480 Εν τω μεταξύ, επίσης, αξίζει να τη διατήρηση σε νου ότι δεν πρέπει να υποθέσουμε ότι ένα 561 00:27:35,480 --> 00:27:38,870 τρία από τα πέντε είναι 60% και δηλαδή χονδρικά αποτυχία. 562 00:27:38,870 --> 00:27:41,410 Τρεις είναι σκόπιμα προορίζεται να είναι είδος μέση του δρόμου καλό. 563 00:27:41,410 --> 00:27:43,480 Εάν παίρνετε τριάρια σε η αρχή του εξαμήνου, που είναι 564 00:27:43,480 --> 00:27:46,340 Πράγματι προορίζεται να είναι ένας καλός μέρος για να ξεκινήσετε. 565 00:27:46,340 --> 00:27:50,510 Εάν παίρνετε δυάρια, εκθέσεις, υπάρχει σίγουρα κάποια δουλειά για να πληρώσει ένα μικρό 566 00:27:50,510 --> 00:27:53,250 μεγαλύτερη προσοχή, για να επωφεληθούν των τμημάτων και των ωρών γραφείου. 567 00:27:53,250 --> 00:27:54,590 >> Εάν παίρνετε τέσσερα και πεντάρια, μεγάλη. 568 00:27:54,590 --> 00:27:57,430 Αλλά πραγματικά, ελπίζουμε να δούμε τροχιές μεταξύ των μαθητών - πολύ 569 00:27:57,430 --> 00:28:00,575 εξατομικευμένη ανά φοιτητή, αλλά ξεκινώντας το εξάμηνο εδώ σε ένα είδος 570 00:28:00,575 --> 00:28:04,100 οι δύο στη σειρά τρεις, αλλά τελειώνει εδώ στην περιοχή πέντε παρα τέσσερα. 571 00:28:04,100 --> 00:28:05,440 Γι 'αυτό είμαστε πραγματικά ψάχνουν. 572 00:28:05,440 --> 00:28:09,590 Και εμείς να έχετε κατά νου ότι το δέλτα που παρουσιάζουν μεταξύ μηδέν εβδομάδα και την εβδομάδα 573 00:28:09,590 --> 00:28:12,170 12 όταν κάνω βαθμούς. 574 00:28:12,170 --> 00:28:16,380 Δεν έχει σημασία για μας είναι απολύτως πώς Σας δίκαιη από την αρχή αν σας 575 00:28:16,380 --> 00:28:19,330 τροχιά είναι πράγματι προς τα πάνω και ισχυρή. 576 00:28:19,330 --> 00:28:24,000 >> Ακαδημαϊκή Δεοντολογία - οπότε επιτρέψτε μου να θέσει σε μου πιο σοβαρή φωνή μόνο για μια στιγμή. 577 00:28:24,000 --> 00:28:28,510 Έτσι, αυτό το μάθημα έχει τη διάκριση της στέλνοντας περισσότερους φοιτητές από οποιοδήποτε άλλο 578 00:28:28,510 --> 00:28:30,950 στην ιστορία του σκάφους διαφήμιση, πιστεύω. 579 00:28:30,950 --> 00:28:34,220 Έχουμε είδος χάσει τον λογαριασμό σε αυτή σημείο από το πόσο συχνά συμβαίνει αυτό. 580 00:28:34,220 --> 00:28:37,090 Και αυτό δεν είναι επειδή οι μαθητές σε 50 είναι πια ανέντιμο από τους 581 00:28:37,090 --> 00:28:38,690 συμμαθητές αλλού. 582 00:28:38,690 --> 00:28:42,800 Αλλά συνειδητοποιούν, επίσης, ότι είμαστε πολύ καλοί στην ανίχνευση αυτό το είδος του πράγματος. 583 00:28:42,800 --> 00:28:45,920 >> Και αυτό είναι το πλεονέκτημα ότι υπολογιστής τάξη της επιστήμης έχει να μπορέσουμε 584 00:28:45,920 --> 00:28:49,110 μπορεί και να μην συγκρίνετε όλους τους μαθητές πρόβλημα που θέτει ζεύγη έναντι κάθε 585 00:28:49,110 --> 00:28:51,470 άλλα, όχι μόνο φέτος αλλά όλα τα προηγούμενα έτη. 586 00:28:51,470 --> 00:28:55,080 Έχουμε τη δυνατότητα, όπως τους φοιτητές σε η τάξη, στο Google και να βρείτε τον κώδικα 587 00:28:55,080 --> 00:28:57,440 σε ιστοσελίδες όπως το GitHub και φόρουμ συζητήσεων. 588 00:28:57,440 --> 00:29:00,840 Δεν υπάρχει απολύτως λύσεις για το CS50 p-θέτει επιπλέουν γύρω από εκεί. 589 00:29:00,840 --> 00:29:02,710 Αλλά αν μπορείτε να τους βρείτε, μπορούμε να τα βρούμε. 590 00:29:02,710 --> 00:29:07,130 Και όλα αυτά είναι πολύ αυτοματοποιημένη και εύκολη και λυπηρό για μας να βρούμε. 591 00:29:07,130 --> 00:29:10,990 >> Αλλά θέλω να τονίσω, επίσης, ότι η ακαδημαϊκή πολιτική ειλικρίνεια μαθήματος είναι 592 00:29:10,990 --> 00:29:13,960 πολύ προορίζεται να είναι πολύ το αντίθετο από αυτό το πνεύμα. 593 00:29:13,960 --> 00:29:17,506 Μάλιστα, φέτος έχουμε επαναδιατυπωθεί πράγματα στην εξεταστέα ύλη να είναι αυτό, τελεία 594 00:29:17,506 --> 00:29:19,790 dot dot, με περισσότερες λεπτομέρειες στην εξεταστέα ύλη. 595 00:29:19,790 --> 00:29:22,860 Αλλά το σημαντικό θέμα κατά τη διάρκεια είναι πραγματικά να είναι λογικό. 596 00:29:22,860 --> 00:29:26,160 Αναγνωρίζουμε ότι υπάρχει μια σημαντική ποσό των παιδαγωγικών 597 00:29:26,160 --> 00:29:30,550 αξία στη συνεργασία, σε κάποιο βαθμό, με τους συμμαθητές, σύμφωνα με την οποία θα 598 00:29:30,550 --> 00:29:33,700 δύο ή τρία ή σας περισσότερο είναι στέκεται σε ένα λευκό του σκάφους 599 00:29:33,700 --> 00:29:35,670 βαθύτερων εννοιών, έτσι ώστε να μιλούν, τις ιδέες σας - 600 00:29:35,670 --> 00:29:39,480 εγγράφως από pseudocode σε εικόνες, διαγραμμάτων τι πρέπει Mario είναι, αν 601 00:29:39,480 --> 00:29:41,350 θα ήταν να γράψει το πρώτο σε ψευδοκώδικα. 602 00:29:41,350 --> 00:29:43,240 Τι θα πρέπει ο άπληστος αλγόριθμος - 603 00:29:43,240 --> 00:29:46,100 πώς θα πρέπει να συμπεριφέρεται ανά θέτει ένα πρόβλημα; 604 00:29:46,100 --> 00:29:50,440 >> Και να συνειδητοποιήσουν έτσι ώστε η συμπεριφορά να ενθαρρύνουμε είναι πολύ 605 00:29:50,440 --> 00:29:51,470 πολλά προς αυτήν την κατεύθυνση. 606 00:29:51,470 --> 00:29:53,890 Και στην εξεταστέα ύλη, θα δείτε ένα σωρό από σφαίρες κάτω από ένα 607 00:29:53,890 --> 00:29:57,740 λογική κατηγορία και δεν είναι λογικό κατηγορία που μας βοηθά να βοηθήσουν 608 00:29:57,740 --> 00:30:00,740 τυλίξτε το μυαλό σας γύρω από όπου εμείς αποσύρει την εν λόγω γραμμή. 609 00:30:00,740 --> 00:30:04,340 Και σε γενικές γραμμές, ένα αξιοπρεπές κανόνας είναι ότι αν είστε αγωνίζονται να λύσει 610 00:30:04,340 --> 00:30:07,990 κάποια bug και φίλο ή συμμαθητή σας κάθεται δίπλα σας, είναι 611 00:30:07,990 --> 00:30:11,530 λογικό για σας να του δείξει ή της κωδικό σας και να πω, hey, μπορεί να σας βοηθήσει 612 00:30:11,530 --> 00:30:13,700 Θέλω να καταλάβω τι συμβαίνει λάθος εδώ; 613 00:30:13,700 --> 00:30:17,110 >> Εμείς συνήθως δεν αγκαλιάσει η αντίθετη πλευρά. 614 00:30:17,110 --> 00:30:20,730 Δεν είναι μια σωστή απάντηση για σας φίλο ή συμμαθητή εδώ για να πω, OH, 615 00:30:20,730 --> 00:30:22,510 απλά κοιτάξτε το δικό μου και το σχήμα έξω από αυτό. 616 00:30:22,510 --> 00:30:24,400 Αυτό είναι το είδος των παράλογων. 617 00:30:24,400 --> 00:30:27,750 Όμως, κάποιος άλλος, ένας άλλος εγκέφαλο, ένα άλλο ζευγάρι μάτια να δούμε 618 00:30:27,750 --> 00:30:31,620 οθόνη ή το βλέμμα σας στο κωδικό σας και να πω, είσαι σίγουρος ότι θέλετε 619 00:30:31,620 --> 00:30:32,760 να έχουν ένα βρόχο εδώ; 620 00:30:32,760 --> 00:30:34,800 Ή είστε σίγουροι ότι θέλετε ότι η τελεία εδώ; 621 00:30:34,800 --> 00:30:37,090 Ή ΟΗ, ότι το μήνυμα λάθους σημαίνει αυτό. 622 00:30:37,090 --> 00:30:39,580 Αυτά είναι πολύ λογικές και ενθαρρύνονται συμπεριφορές. 623 00:30:39,580 --> 00:30:44,010 >> Οι περιπτώσεις στις οποίες ήμουν υπαινίσσεται Νωρίτερα βράζει κάτω για να είναι όταν οι μαθητές 624 00:30:44,010 --> 00:30:47,350 αργά το βράδυ κάνοντας κακή κρίση αποφάσεις και στέλνοντας τον κωδικό τους για να 625 00:30:47,350 --> 00:30:50,130 κάποιον άλλο ή απλά λέγοντας, εδώ, είναι το Dropbox ή 626 00:30:50,130 --> 00:30:51,610 Googling αργά το βράδυ. 627 00:30:51,610 --> 00:30:54,880 Και γι 'αυτό θα ενθαρρύνει και ικετεύω, Αν έχετε αυτές τις αναπόφευκτες 628 00:30:54,880 --> 00:30:58,450 στιγμές του άγχους, είστε πρόσκρουση μέχρι κατά τη λήξη της προθεσμίας, δεν έχετε καμία καθυστέρηση 629 00:30:58,450 --> 00:31:01,490 ημέρα δεδομένου ότι είναι ήδη Παρασκευή στο ότι σημείο, email κεφάλι του μαθήματος ή 630 00:31:01,490 --> 00:31:02,330 ο ίδιος άμεσα. 631 00:31:02,330 --> 00:31:04,790 Ας πούμε, ακούστε, είμαι σε μου οριακό σημείο εδώ. 632 00:31:04,790 --> 00:31:06,660 Ας ρίξουμε μια συνομιλία και να το καταλάβω. 633 00:31:06,660 --> 00:31:10,400 Η προσφυγή στο διαδίκτυο ή κάποια άλλη δεν εύλογη συμπεριφορά δεν είναι η 634 00:31:10,400 --> 00:31:13,070 λύση, και πάρα πολλοί από σας συμμαθητές δεν είναι πλέον εδώ 635 00:31:13,070 --> 00:31:15,150 πανεπιστημιούπολη, λόγω της κακής κρίσης. 636 00:31:15,150 --> 00:31:17,840 Αλλά είναι πολύ εύκολο να παρακάμψουν αυτή τη γραμμή. 637 00:31:17,840 --> 00:31:22,950 >> Και εδώ είναι μια μικρή εικόνα για να φτιάξει το κέφι σας παραλάβει από το Reddit, έτσι ώστε τώρα 638 00:31:22,950 --> 00:31:25,720 όλα θα είναι εντάξει. 639 00:31:25,720 --> 00:31:30,210 >> Έτσι, μια γρήγορη ανακεφαλαίωση, στη συνέχεια, από όπου φύγαμε μακριά. 640 00:31:30,210 --> 00:31:33,690 Έτσι, την περασμένη εβδομάδα, υπενθυμίζουν ότι εισάγουμε συνθήκες, όχι στο Scratch 641 00:31:33,690 --> 00:31:34,880 αλλά σε C αυτή τη φορά. 642 00:31:34,880 --> 00:31:38,300 Και υπήρξε κάποια νέα σύνταξη, αλλά Πραγματικά δεν υπάρχουν νέες ιδέες per se. 643 00:31:38,300 --> 00:31:42,630 Είχαμε Boolean εκφράσεις που θα μπορούσαμε να ή μαζί με δύο κάθετες 644 00:31:42,630 --> 00:31:46,490 ράβδων ή και μαζί με δύο συμπλεκτικά σύμβολα, λέγοντας ότι τόσο το αριστερό 645 00:31:46,490 --> 00:31:49,990 και το δικαίωμα αυτό πρέπει να είναι αλήθεια γι 'αυτό να εκτελέσει. 646 00:31:49,990 --> 00:31:53,150 Τότε είχαμε διακόπτες, τα οποία εξετάσαμε σε λίγο, αλλά προτείνω είναι πραγματικά 647 00:31:53,150 --> 00:31:56,830 απλά διαφορετική σύνταξη για την επίτευξη των ίδιο είδος του στόχου, εφόσον γνωρίζετε 648 00:31:56,830 --> 00:31:59,270 εκ των προτέρων ποιες περιπτώσεις σας πρόκειται να είναι. 649 00:31:59,270 --> 00:32:00,160 >> Κοιτάξαμε βρόχους. 650 00:32:00,160 --> 00:32:03,340 Ένας βρόχος for είναι ίσως η πιο κοινή, ή τουλάχιστον το ένα που οι άνθρωποι 651 00:32:03,340 --> 00:32:05,330 συνήθως φθάνουν για ενστικτωδώς. 652 00:32:05,330 --> 00:32:08,240 Ακόμα κι αν φαίνεται λίγο αινιγματικό, θα δείτε πολλά, πολλά τέτοια παραδείγματα 653 00:32:08,240 --> 00:32:11,590 πριν από καιρό, όπως έχετε ήδη στα τέλη της περασμένης εβδομάδας. 654 00:32:11,590 --> 00:32:14,280 Ενώ οι βρόχοι μπορούν ομοίως επιτευχθεί το ίδιο πράγμα. 655 00:32:14,280 --> 00:32:17,550 Αλλά αν θέλετε να κάνετε οποιαδήποτε προσαύξηση ή την ενημέρωση των 656 00:32:17,550 --> 00:32:20,230 τιμές μεταβλητών, θα πρέπει να κάνει περισσότερα από ό, τι το χέρι του 657 00:32:20,230 --> 00:32:22,440 για το βρόχο επιτρέπει πριν. 658 00:32:22,440 --> 00:32:25,310 Και έπειτα υπάρχει το do-while loop, η οποία μας επιτρέπει να κάνουμε κάτι 659 00:32:25,310 --> 00:32:28,460 τουλάχιστον μία φορά, ενώ κάτι άλλο είναι αλήθεια. 660 00:32:28,460 --> 00:32:31,550 Και αυτό είναι ιδιαίτερα καλό για προγράμματα ή για τα παιχνίδια που θέλετε 661 00:32:31,550 --> 00:32:33,810 να ζητήσει από το χρήστη για κάτι τουλάχιστον μία φορά. 662 00:32:33,810 --> 00:32:37,110 Και τότε, αν αυτός ή αυτή δεν συνεργάζεται, ίσως να θέλετε να το κάνετε 663 00:32:37,110 --> 00:32:38,420 ξανά και ξανά. 664 00:32:38,420 --> 00:32:41,270 >> Με μεταβλητές, εν τω μεταξύ, είχαμε γραμμές του κώδικα, όπως αυτό, που θα μπορούσε 665 00:32:41,270 --> 00:32:41,950 είναι δύο γραμμές. 666 00:32:41,950 --> 00:32:44,830 Θα μπορούσε να κηρύξει μια ονομάζεται int μετρητή, τελεία. 667 00:32:44,830 --> 00:32:47,660 Ή μπορείτε απλά να δηλώσει και ορίσετε, να το πω έτσι. 668 00:32:47,660 --> 00:32:49,950 Δώστε την τιμή την ίδια στιγμή. 669 00:32:49,950 --> 00:32:51,890 >> Και στη συνέχεια, τέλος, μιλήσαμε σχετικά με τις λειτουργίες. 670 00:32:51,890 --> 00:32:54,270 Και αυτό ήταν ένα ωραίο παράδειγμα με την έννοια ότι καταδεικνύει 671 00:32:54,270 --> 00:32:55,840 τα δύο είδη λειτουργιών. 672 00:32:55,840 --> 00:32:59,030 Το ένα είναι GetString (), η οποία, και πάλι, παίρνει μια συμβολοσειρά από το χρήστη. 673 00:32:59,030 --> 00:33:02,040 Αλλά GetString () είναι είδος ενδιαφέρον, μέτρο που έχουμε χρησιμοποιήσει, 674 00:33:02,040 --> 00:33:05,620 επειδή έχουμε χρησιμοποιήσει πάντα με κάτι στην αριστερή πλευρά της ένα 675 00:33:05,620 --> 00:33:06,600 ίσον. 676 00:33:06,600 --> 00:33:09,830 Δηλαδή ότι GetString () επιστρέφει μια τιμή. 677 00:33:09,830 --> 00:33:11,970 Επιστρέφει, φυσικά, ένα string. 678 00:33:11,970 --> 00:33:15,130 Και στη συνέχεια, στην αριστερή πλευρά, είμαστε απλά εξοικονόμηση αυτής της συμβολοσειράς μέσα σε μια 679 00:33:15,130 --> 00:33:16,580 μεταβλητή που ονομάζεται όνομα. 680 00:33:16,580 --> 00:33:21,100 >> Αυτό είναι διαφορετικό, κατά μία έννοια, από τις printf γιατί printf, τουλάχιστον σε μας 681 00:33:21,100 --> 00:33:23,540 χρήση εδώ, δεν επιστρέφει τίποτα. 682 00:33:23,540 --> 00:33:24,960 Ως μέρος, κάνει κάτι επιστροφής. 683 00:33:24,960 --> 00:33:26,380 Εμείς απλά δεν με νοιάζει τι είναι. 684 00:33:26,380 --> 00:33:29,090 Αλλά δεν έχει ό, τι είναι ονομάζεται παρενέργεια. 685 00:33:29,090 --> 00:33:31,840 Και ποια είναι η παρενέργεια σε κάθε περίπτωση που έχουμε δει μέχρι τώρα; 686 00:33:31,840 --> 00:33:34,720 Τι σημαίνει printf κάνει; 687 00:33:34,720 --> 00:33:37,780 Τυπώνει κάτι στην οθόνη, Εμφανίζει κείμενο ή αριθμούς ή κάτι 688 00:33:37,780 --> 00:33:38,380 στην οθόνη. 689 00:33:38,380 --> 00:33:41,170 Και αυτό είναι μόνο θεωρείται μια παρενέργεια διότι δεν είναι πραγματικά παράδοση 690 00:33:41,170 --> 00:33:41,900 είναι πίσω σε μένα. 691 00:33:41,900 --> 00:33:44,770 Δεν είναι μια απάντηση στο εσωτερικό της ένα μαύρο κουτί που μπορεί στη συνέχεια 692 00:33:44,770 --> 00:33:46,130 φθάνει και να αρπάξει. 693 00:33:46,130 --> 00:33:49,160 Είναι κάνει μόνο για τη δική, πολύ της όπως Colton ήταν συνδεδεμένο σε αυτό 694 00:33:49,160 --> 00:33:52,560 μαύρο κουτί περασμένη εβδομάδα, και με κάποιο τρόπο μαγικά ζωγράφιζε στον πίνακα 695 00:33:52,560 --> 00:33:54,500 χωρίς εμένα πραγματικά εμπλέκονται. 696 00:33:54,500 --> 00:33:55,560 Αυτό θα μπορούσε να είναι μια παρενέργεια. 697 00:33:55,560 --> 00:33:59,100 Αλλά αν πραγματικά έπρεπε να φτάσει πίσω στο εδώ και να πω, OH, εδώ είναι το string 698 00:33:59,100 --> 00:34:02,040 από τον χρήστη, που θα είναι μια τιμή επιστροφής. 699 00:34:02,040 --> 00:34:05,650 >> Και μέχρι τώρα έχουμε χρησιμοποιήσει μόνο λειτουργίες ότι οι άλλοι άνθρωποι έχουν γράψει. 700 00:34:05,650 --> 00:34:09,219 Αλλά μπορούμε να κάνουμε πραγματικότητα αυτά τα είδη των πραγμάτων τους εαυτούς μας. 701 00:34:09,219 --> 00:34:12,730 Έτσι, Πάω να πάει στην CS50 συσκευή ξανά. 702 00:34:12,730 --> 00:34:16,020 Επιτρέψτε μου να κλείσω την καρτέλα που είχε ανοίξει πριν από λίγο. 703 00:34:16,020 --> 00:34:18,530 Και επιτρέψτε μου να πάω μπροστά και δημιουργήσετε ένα νέο αρχείο. 704 00:34:18,530 --> 00:34:22,400 Και Πάω να προχωρήσει και καλέσετε αυτό το ένα positive.c. 705 00:34:22,400 --> 00:34:24,770 Γι 'αυτό θέλω να κάνω κάτι με θετικούς αριθμούς εδώ. 706 00:34:24,770 --> 00:34:27,219 Έτσι, Πάω να πάει μπροστά και να κάνουμε int - 707 00:34:27,219 --> 00:34:28,000 sorry - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 Ας μην κάνουμε το ίδιο λάθος, όπως πριν. 710 00:34:34,280 --> 00:34:40,020 Int main (void), σγουρή τιράντες, έκλεισε άγκιστρο. 711 00:34:40,020 --> 00:34:41,639 >> Και τώρα θέλω να κάνω το εξής. 712 00:34:41,639 --> 00:34:44,600 Θέλω να γράψω ένα πρόγραμμα που επιμένει ότι ο χρήστης δίνει 713 00:34:44,600 --> 00:34:46,770 μένα ένας θετικός ακέραιος. 714 00:34:46,770 --> 00:34:50,969 Έτσι, δεν υπάρχει GetPositiveInt λειτουργία στη βιβλιοθήκη CS50. 715 00:34:50,969 --> 00:34:52,610 Υπάρχει μόνο GetInt (). 716 00:34:52,610 --> 00:34:55,790 Αλλά αυτό είναι εντάξει, γιατί έχω την κατασκευές με τις οποίες μπορεί να επιβάλλει μια 717 00:34:55,790 --> 00:34:59,360 λίγο περισσότερη πίεση στην τιμή αυτή. 718 00:34:59,360 --> 00:35:00,990 Θα μπορούσα να κάνω κάτι τέτοιο. 719 00:35:00,990 --> 00:35:02,780 >> Έτσι, int n - 720 00:35:02,780 --> 00:35:04,920 και αν είστε πληκτρολογώντας μαζί, μόλις συνειδητοποιήσουν Πάω να πάει πίσω και να 721 00:35:04,920 --> 00:35:06,430 αλλάξουν κάποια πράγματα σε μια στιγμή - 722 00:35:06,430 --> 00:35:09,960 τόσο int n ισούται GetInt (). 723 00:35:09,960 --> 00:35:11,780 Και αυτό πρόκειται να τεθεί ένας int εσωτερικό του n. 724 00:35:11,780 --> 00:35:13,830 Και επιτρέψτε μου να είναι πιο περιγραφικό. 725 00:35:13,830 --> 00:35:23,270 Επιτρέψτε μου να πω κάτι σαν απαιτώ μπορείτε να μου δώσετε ένα θετικό ακέραιο. 726 00:35:23,270 --> 00:35:23,550 >> Εντάξει. 727 00:35:23,550 --> 00:35:25,250 Έτσι, μόνο ένα μικρό κομμάτι των οδηγιών. 728 00:35:25,250 --> 00:35:26,270 Και τώρα τι μπορώ να κάνω; 729 00:35:26,270 --> 00:35:29,840 Λοιπόν, ξέρω ήδη από την απλή μου συνθήκες ή υποκαταστημάτων, όπως ακριβώς 730 00:35:29,840 --> 00:35:36,100 είχε στο Scratch, θα μπορούσα να πω κάτι όπως και αν το n είναι μικρότερο από ή ίσο με 731 00:35:36,100 --> 00:35:44,460 μηδέν, τότε θέλω να κάνω κάτι αρέσει, αυτό δεν είναι θετικό. 732 00:35:44,460 --> 00:35:45,560 Και τότε θα μπορούσα να κάνω - 733 00:35:45,560 --> 00:35:47,310 Εντάξει, αλλά θέλω πραγματικά να πάρει το int. 734 00:35:47,310 --> 00:35:52,020 Γι 'αυτό και θα μπορούσε να φτάσει μέχρι εδώ και θα μπορούσα είδος του αντιγράφου αυτού και παύλα αυτό. 735 00:35:52,020 --> 00:35:52,570 Και στη συνέχεια, στο OK. 736 00:35:52,570 --> 00:35:56,990 Έτσι, αν η είναι μικρότερη ή ίσο με το μηδέν το κάνει αυτό. 737 00:35:56,990 --> 00:35:58,900 >> Τώρα, τι θα γίνει αν ο χρήστης δεν συνεργάζονται; 738 00:35:58,900 --> 00:36:01,560 Λοιπόν, τότε Πάω να δανειστώ αυτό εδώ. 739 00:36:01,560 --> 00:36:03,130 Και στη συνέχεια να πάω εδώ και εδώ και εδώ. 740 00:36:03,130 --> 00:36:06,420 Έτσι, αυτό είναι σαφές ότι δεν η λύση, έτσι δεν είναι; 741 00:36:06,420 --> 00:36:07,810 Επειδή δεν υπάρχει κανένα τέλος στη θέα. 742 00:36:07,810 --> 00:36:13,100 Αν θέλω να απαιτήσει ότι ο χρήστης δίνει μένα ένας θετικός ακέραιος, μπορώ 743 00:36:13,100 --> 00:36:14,150 πραγματικά να πάρει το int. 744 00:36:14,150 --> 00:36:15,620 Θα μπορείτε να ελέγξετε για το int. 745 00:36:15,620 --> 00:36:18,570 Στη συνέχεια, όμως θέλω να το ελέγξουμε ξανά και ελέγξτε ξανά και ελέγξτε ξανά. 746 00:36:18,570 --> 00:36:21,680 Έτσι, προφανώς, ποια είναι η καλύτερη κατασκευή να χρησιμοποιούν εδώ; 747 00:36:21,680 --> 00:36:22,840 Εντάξει, έτσι κάποιο είδος βρόχου. 748 00:36:22,840 --> 00:36:25,430 >> Έτσι, Πάω να ξεφορτωθεί σχεδόν όλα αυτά. 749 00:36:25,430 --> 00:36:27,320 Και θέλω να πάρω αυτό int τουλάχιστον μία φορά. 750 00:36:27,320 --> 00:36:28,890 Έτσι, Πάω να πω κάνουμε - 751 00:36:28,890 --> 00:36:32,110 και εγώ θα επανέλθω στο ενώ σε μια στιγμή - 752 00:36:32,110 --> 00:36:33,050 τώρα, να κάνει τι; 753 00:36:33,050 --> 00:36:35,860 Πάω να κάνω int n παίρνει GetInt (). 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Έτσι ώστε να είναι αρκετά καλό. 756 00:36:37,250 --> 00:36:39,750 Και τώρα, πόσο συχνά κάνουν Θέλω να το κάνω αυτό; 757 00:36:39,750 --> 00:36:45,770 >> Επιτρέψτε μου να θέσω την printf στο εσωτερικό του βρόχου ώστε να μπορώ να απαιτήσουμε ξανά και ξανά, 758 00:36:45,770 --> 00:36:46,740 αν παραστεί ανάγκη. 759 00:36:46,740 --> 00:36:49,720 Και τι θέλω αυτό ενώ η κατάσταση να κάνουμε; 760 00:36:49,720 --> 00:36:53,870 Θέλω να συνεχίσω να το κάνω αυτό ενώ ό, τι συμβαίνει; 761 00:36:53,870 --> 00:36:54,125 Ναι. 762 00:36:54,125 --> 00:36:55,390 Ν είναι μικρότερη ή ίση με το μηδέν. 763 00:36:55,390 --> 00:36:58,180 Έτσι, ήδη, έχουμε σημαντικά καθαρίζονται αυτόν τον κώδικα επάνω. 764 00:36:58,180 --> 00:37:00,700 Έχουμε δανειστεί μια πολύ απλή κατασκευή - το do-while loop. 765 00:37:00,700 --> 00:37:04,690 Έχω κλέψει μόνο τις σημαντικές γραμμές του κώδικα που άρχισα αντιγραφή και 766 00:37:04,690 --> 00:37:05,960 επικόλληση, η οποία δεν ήταν σοφό. 767 00:37:05,960 --> 00:37:09,790 Και έτσι τώρα είμαι πρόκειται πραγματικά να επικολλήσετε αυτό εδώ και μόλις το κάνει μία φορά. 768 00:37:09,790 --> 00:37:12,990 >> Και τώρα τι θέλω να κάνω στο το τέλος αυτού του προγράμματος; 769 00:37:12,990 --> 00:37:16,810 Θα πω μόνο κάτι απλό αρέσει, ευχαριστώ για την - και 770 00:37:16,810 --> 00:37:18,980 Θα κάνω% i για int - 771 00:37:18,980 --> 00:37:23,270 backslash n, κόμμα, και στη συνέχεια συνδέστε το n, το ερωτηματικό. 772 00:37:23,270 --> 00:37:23,910 >> Εντάξει. 773 00:37:23,910 --> 00:37:27,290 Ας δούμε λοιπόν τι συμβαίνει τώρα όταν τρέχω αυτό το πρόγραμμα. 774 00:37:27,290 --> 00:37:30,600 Πάω να προχωρήσει και κάνουν θετικά. 775 00:37:30,600 --> 00:37:30,880 Ανάθεμα. 776 00:37:30,880 --> 00:37:31,600 Λίγα λάθη. 777 00:37:31,600 --> 00:37:32,960 Έτσι, επιτρέψτε μου να μετακινηθείτε προς τα πίσω μέχρι το πρώτο. 778 00:37:32,960 --> 00:37:34,020 Μην εργάζεστε μέσω αυτών προς τα πίσω. 779 00:37:34,020 --> 00:37:37,000 Εργασία μέσα από τους από πάνω προς τα κάτω μήπως καταρράκτη και μόνο 780 00:37:37,000 --> 00:37:38,630 ένα πράγμα είναι λάθος. 781 00:37:38,630 --> 00:37:42,532 Σιωπηρή δήλωση GetInt λειτουργία (). 782 00:37:42,532 --> 00:37:43,020 Ναι. 783 00:37:43,020 --> 00:37:44,420 Γι 'αυτό δεν ήταν αρκετό. 784 00:37:44,420 --> 00:37:46,760 Ι το είδος έκανε το ίδιο λάθος, αλλά λίγο διαφορετικά αυτή τη φορά. 785 00:37:46,760 --> 00:37:51,940 Εγώ δεν χρειάζεται να περιλαμβάνει μόνο stdio.h, αλλά cs50.h επίσης, η οποία περιλαμβάνει το 786 00:37:51,940 --> 00:37:56,770 λεγόμενα δηλώσεις πάρει int, η οποία διδάσκουν τη συσκευή, ή διδάσκει 787 00:37:56,770 --> 00:37:58,760 C τι GetInt () είναι. 788 00:37:58,760 --> 00:37:59,550 >> Έτσι, επιτρέψτε μου να αποθηκεύσετε ξανά. 789 00:37:59,550 --> 00:38:02,040 Πάω να αγνοήσει τα άλλα λάθη επειδή είμαι πρόκειται να ελπίζω ότι είναι 790 00:38:02,040 --> 00:38:05,210 κατά κάποιον τρόπο σχετίζονται με το σφάλμα Έχω ήδη καθοριστεί. 791 00:38:05,210 --> 00:38:08,710 Έτσι, επιτρέψτε μου να πάει μπροστά και να μεταγλωττίσετε ξανά με κάνουν θετικές, Enter. 792 00:38:08,710 --> 00:38:09,020 Ανάθεμα. 793 00:38:09,020 --> 00:38:09,985 Τρία λάθη, ακόμα. 794 00:38:09,985 --> 00:38:12,650 Επιτρέψτε μου να μετακινηθείτε προς τα επάνω με το πρώτο. 795 00:38:12,650 --> 00:38:14,320 Αχρησιμοποίητα μεταβλητή n. 796 00:38:14,320 --> 00:38:15,850 Δεν έχω ξαναδεί αυτό. 797 00:38:15,850 --> 00:38:17,200 Και αυτό, επίσης, είναι λίγο αινιγματικό. 798 00:38:17,200 --> 00:38:18,850 Αυτή είναι η έξοδος του compiler. 799 00:38:18,850 --> 00:38:23,610 Και τι επισημασμένη γραμμή εκεί - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 λέει, να λέει στη γραμμή εννέα από positive.c, κατά την 13η χαρακτήρα, 801 00:38:28,960 --> 00:38:31,510 13η στήλη, θα κάνει αυτό το λάθος. 802 00:38:31,510 --> 00:38:34,230 >> Και ειδικότερα, είναι λέει μου αχρησιμοποίητα μεταβλητή n. 803 00:38:34,230 --> 00:38:35,790 Έτσι, ας δούμε - 804 00:38:35,790 --> 00:38:37,150 line εννέα. 805 00:38:37,150 --> 00:38:40,430 Είμαι χρησιμοποιώντας n υπό την έννοια ότι Είμαι δίνοντας μια τιμή. 806 00:38:40,430 --> 00:38:44,200 Αλλά αυτό που ο compiler δεν αρέσει είναι ότι δεν είμαι το χρησιμοποιεί φαινομενικά. 807 00:38:44,200 --> 00:38:45,560 Αλλά περιμένετε ένα λεπτό, είμαι το χρησιμοποιεί. 808 00:38:45,560 --> 00:38:48,170 Στη γραμμή 11, είμαι το χρησιμοποιεί εδώ. 809 00:38:48,170 --> 00:38:52,430 Αλλά αν μετακινηθείτε προς τα κάτω περαιτέρω στο positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 έτσι στη γραμμή 11, 12 χαρακτήρων, η compiler μου λέει, η χρήση των 811 00:38:56,230 --> 00:38:58,670 αδήλωτης αναγνωριστικό n. 812 00:38:58,670 --> 00:39:02,760 >> Έτσι αδήλωτης σημαίνει ότι έχω δεν προσδιορίζεται ως ένα 813 00:39:02,760 --> 00:39:04,970 μεταβλητή με έναν τύπο δεδομένων. 814 00:39:04,970 --> 00:39:05,500 Αλλά περιμένετε ένα λεπτό. 815 00:39:05,500 --> 00:39:09,150 Έκανα ακριβώς ότι, σύμφωνα εννέα. 816 00:39:09,150 --> 00:39:11,100 Έτσι κάποιος είναι πραγματικά σύγχυση εδώ. 817 00:39:11,100 --> 00:39:14,900 Είναι είτε εγώ ή ο compiler, διότι σύμφωνα εννέα, και πάλι, είμαι κηρύσσει την 818 00:39:14,900 --> 00:39:18,650 int n, και είμαι αναθέσουν την επιστρέψει την αξία της GetInt (). 819 00:39:18,650 --> 00:39:22,930 Τότε είμαι χρησιμοποιώντας αυτή τη μεταβλητή n σύμφωνη 11 και να ελέγξετε αν η αξία του είναι μικρότερη 820 00:39:22,930 --> 00:39:24,050 από ή ίση με το μηδέν. 821 00:39:24,050 --> 00:39:27,430 Αλλά αυτό είναι προφανώς κακό και σπασμένα γιατί; 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Πες το ξανά; 824 00:39:32,490 --> 00:39:35,690 >> Αχ, έχω να δηλώσω n πριν την είσοδο του βρόχου. 825 00:39:35,690 --> 00:39:36,370 Αλλά γιατί; 826 00:39:36,370 --> 00:39:39,830 Θέλω να πω, απλά πρότεινε λίγο πριν, ότι Είναι ωραία να δηλώσει μεταβλητές 827 00:39:39,830 --> 00:39:43,600 όλα σε μια γραμμή και στη συνέχεια τους εκχωρήσετε κάποια αξία. 828 00:39:43,600 --> 00:39:46,790 Μια παγκόσμια μεταβλητή - ας επανέλθουμε σε αυτή την ιδέα σε μια στιγμή. 829 00:39:46,790 --> 00:39:48,690 Γιατί θες να θέσει είναι έξω από το βρόχο; 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Είναι. 832 00:40:03,830 --> 00:40:06,780 Ακριβώς. 833 00:40:06,780 --> 00:40:09,610 >> Έτσι, αν και, κάπως αντιφατικό, επιτρέψτε μου να συνοψίσω. 834 00:40:09,610 --> 00:40:13,510 Όταν δηλώνετε n μέσα του do μπλοκ εκεί - 835 00:40:13,510 --> 00:40:16,320 ειδικά μέσα τα άγκιστρα - 836 00:40:16,320 --> 00:40:19,210 ότι η μεταβλητή n έχει ό, τι είναι ονομάζεται πεδίο εφαρμογής - 837 00:40:19,210 --> 00:40:23,210 άσχετα με το σύστημα βαθμολόγησης μας στο Φυσικά - αλλά έχει ένα πεδίο που είναι 838 00:40:23,210 --> 00:40:25,190 περιορίζεται στις αγκύλες. 839 00:40:25,190 --> 00:40:28,460 Με άλλα λόγια, συνήθως αν δηλώνουν μια μεταβλητή μέσα σε ένα σύνολο 840 00:40:28,460 --> 00:40:33,370 άγκιστρα, ότι η μεταβλητή υπάρχει μόνο μέσα από τις αγκύλες. 841 00:40:33,370 --> 00:40:37,320 Έτσι, με αυτή τη λογική και μόνο, ακόμη και αν Έχω δηλώσει n στη γραμμή εννέα, το 842 00:40:37,320 --> 00:40:41,910 ουσιαστικά εξαφανίζεται από το πεδίο εφαρμογής, εξαφανίζεται από τη μνήμη, να το πω έτσι, 843 00:40:41,910 --> 00:40:43,370 από τη στιγμή που χτύπησα γραμμή 11. 844 00:40:43,370 --> 00:40:47,370 Επειδή η γραμμή 11, δυστυχώς, είναι έξω από αυτές τις αγκύλες. 845 00:40:47,370 --> 00:40:51,540 >> Έτσι, δυστυχώς δεν μπορώ να το διορθώσετε αυτό πηγαίνει πίσω σε ό, τι έκανα πριν. 846 00:40:51,540 --> 00:40:53,370 Ίσως στην αρχή να το κάνετε αυτό. 847 00:40:53,370 --> 00:40:56,370 Αλλά τι είσαι τώρα δεν κάνει κυκλικά; 848 00:40:56,370 --> 00:40:58,260 Είσαι προφανώς δεν πάρει το int κυκλικά. 849 00:40:58,260 --> 00:41:01,320 Έτσι, μπορούμε να αφήσουμε το GetInt (), και θα πρέπει να αφήσει το GetInt () στο εσωτερικό του 850 00:41:01,320 --> 00:41:04,420 βρόχο, διότι αυτό είναι που θέλουμε να ταλαιπωρούν το χρήστη για ξανά και ξανά. 851 00:41:04,420 --> 00:41:08,660 Αλλά αυτό δεν αρκεί για να πάει μέχρι γραμμή, ας πούμε, έξι. 852 00:41:08,660 --> 00:41:10,150 Int n, τελεία. 853 00:41:10,150 --> 00:41:12,990 Μην δώσετε την τιμή ακόμα γιατί δεν χρειάζεται να ακριβώς ακόμα. 854 00:41:12,990 --> 00:41:16,220 >> Αλλά τώρα εδώ κάτω, σημειώστε - αυτό Θα είναι ένα πολύ εύκολο λάθος. 855 00:41:16,220 --> 00:41:19,440 Δεν θέλω να σκιά προηγούμενο μου δήλωση του n. 856 00:41:19,440 --> 00:41:22,830 Θέλω να χρησιμοποιήσω το n που υπάρχει στην πραγματικότητα. 857 00:41:22,830 --> 00:41:25,780 Και έτσι τώρα στη γραμμή 10, Ορίζω n μια τιμή. 858 00:41:25,780 --> 00:41:28,580 Αλλά στη γραμμή έξι, δηλώνω n. 859 00:41:28,580 --> 00:41:32,940 Και έτσι μπορώ ή δεν μπορώ χρησιμοποιήσετε στη γραμμή 12 τώρα; 860 00:41:32,940 --> 00:41:37,120 Δεν μπορώ, διότι, μεταξύ των οποίων σγουρά τιράντες είναι n δηλωθεί τώρα; 861 00:41:37,120 --> 00:41:38,770 Το ένα εδώ πάνω στη γραμμή πέντε. 862 00:41:38,770 --> 00:41:40,330 Σε ένα εδώ στη γραμμή 14. 863 00:41:40,330 --> 00:41:49,770 Έτσι, αν τώρα σε σμίκρυνση, αποθηκεύστε το αρχείο, πηγαίνετε πίσω και να τρέξει σε κάνουν θετικές αυτό, 864 00:41:49,770 --> 00:41:50,820 καταρτίζονται αυτή τη φορά. 865 00:41:50,820 --> 00:41:51,940 Έτσι, αυτό είναι ήδη σημειώσει πρόοδο. 866 00:41:51,940 --> 00:41:53,640 Slash. . / Θετική, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Απαιτώ να μου δώσεις ένας θετικός ακέραιος. 868 00:41:56,060 --> 00:41:57,750 Αρνητικό 1. 869 00:41:57,750 --> 00:41:59,020 Αρνητικό 2. 870 00:41:59,020 --> 00:42:00,680 Αρνητική 3. 871 00:42:00,680 --> 00:42:01,760 Μηδέν. 872 00:42:01,760 --> 00:42:03,000 One. 873 00:42:03,000 --> 00:42:05,130 Και ευχαριστώ για το ένα είναι τι τυπώνονται τώρα. 874 00:42:05,130 --> 00:42:07,400 >> Επιτρέψτε μου να δοκιμάσουμε κάτι άλλο, από περιέργεια. 875 00:42:07,400 --> 00:42:09,600 Μου λένε να εισάγετε έναν ακέραιο. 876 00:42:09,600 --> 00:42:12,870 Αλλά τι εάν αντί να πληκτρολογήσετε το αρνί; 877 00:42:12,870 --> 00:42:14,460 Έτσι μπορείτε τώρα να δείτε μια διαφορετική εντολών - 878 00:42:14,460 --> 00:42:15,350 επανάληψης. 879 00:42:15,350 --> 00:42:17,670 Αλλά πουθενά στον κώδικά μου έγραψα ξανά. 880 00:42:17,670 --> 00:42:22,320 Έτσι, όταν, προφανώς, είναι αυτό ξανά εντολών που προέρχονται από, θα λέγατε; 881 00:42:22,320 --> 00:42:23,540 Ναι, από GetInt () η ίδια. 882 00:42:23,540 --> 00:42:26,650 Έτσι, ένα από τα πράγματα του προσωπικού CS50 της κάνει για σας, τουλάχιστον σε αυτές τις πρώτες 883 00:42:26,650 --> 00:42:30,400 εβδομάδες, το έχουμε γράψει κάποιο ποσό σφάλματος ελέγχου για να εξασφαλιστεί ότι, αν 884 00:42:30,400 --> 00:42:34,260 σας καλούν GetInt (), θα πρέπει τουλάχιστον να πάρει πίσω ένα int από το χρήστη. 885 00:42:34,260 --> 00:42:35,460 Δεν θα πάρετε ένα string. 886 00:42:35,460 --> 00:42:36,440 Δεν θα πάρετε μια χαρα. 887 00:42:36,440 --> 00:42:39,660 Δεν θα πάρει κάτι εντελώς διαφορετικό. 888 00:42:39,660 --> 00:42:40,510 Θα πάρετε μια int. 889 00:42:40,510 --> 00:42:41,890 >> Τώρα, μπορεί να μην είναι θετική. 890 00:42:41,890 --> 00:42:42,770 Δεν μπορεί να είναι αρνητική. 891 00:42:42,770 --> 00:42:44,550 Δεν μπορούμε να εγγυηθούμε γύρω από αυτό. 892 00:42:44,550 --> 00:42:48,960 Αλλά θα ταλαιπωρούν το χρήστη να ξαναδοκιμάσετε, ξανά, επαναλάβετε έως ότου αυτός ή αυτή πραγματικά 893 00:42:48,960 --> 00:42:49,810 συνεργάζεται. 894 00:42:49,810 --> 00:42:53,085 Ομοίως, αν το κάνω 1.23, αυτό δεν είναι ένα int. 895 00:42:53,085 --> 00:42:58,400 Αλλά αν έχετε πληκτρολογήσει, ας πούμε, 50, ότι μου δίνει μια τιμή που ήθελα. 896 00:42:58,400 --> 00:42:59,050 >> Εντάξει. 897 00:42:59,050 --> 00:43:01,380 Έτσι, δεν είναι κακό. 898 00:43:01,380 --> 00:43:04,780 Οποιεσδήποτε ερωτήσεις σχετικά με αυτό που μόλις κάνατε; 899 00:43:04,780 --> 00:43:07,930 Το βασικό πακέτο είναι, να είναι σαφής, δεν τόσο ο βρόχος, που έχουμε δει 900 00:43:07,930 --> 00:43:10,880 πριν ακόμα κι αν δεν έχουν πραγματικά χρησιμοποιείται, αλλά το ζήτημα του πεδίου εφαρμογής, όπου 901 00:43:10,880 --> 00:43:17,045 μεταβλητών μπορεί μόνο να μπορεί να χρησιμοποιηθεί μόνο μέσα σε κάποιο συγκεκριμένο πεδίο. 902 00:43:17,045 --> 00:43:19,830 >> Εντάξει, επιτρέψτε μου να αντιμετωπίσει την πρόταση κάνατε προηγουμένως, ότι από το 903 00:43:19,830 --> 00:43:20,860 global μεταβλητή. 904 00:43:20,860 --> 00:43:24,880 Ως μέρος, αποδεικνύεται ότι μια άλλη λύση σε αυτό το πρόβλημα, αλλά 905 00:43:24,880 --> 00:43:28,880 συνήθως μια λανθασμένη λύση ή μια κακώς σχεδιασμένη λύση, είναι να 906 00:43:28,880 --> 00:43:31,670 δηλώνετε μια μεταβλητή σας και τι είναι ονομάζεται μια καθολική μεταβλητή. 907 00:43:31,670 --> 00:43:34,610 Τώρα είμαι το είδος της παραβίασης ορισμό μου του πεδίου εφαρμογής, επειδή υπάρχουν 908 00:43:34,610 --> 00:43:37,680 δεν άγκιστρα στην κορυφή και το κάτω μέρος ενός αρχείου. 909 00:43:37,680 --> 00:43:40,190 Όμως, η επίπτωση του ότι είναι ότι τώρα στη γραμμή τέσσερα, 910 00:43:40,190 --> 00:43:41,710 η είναι μια παγκόσμια μεταβλητή. 911 00:43:41,710 --> 00:43:44,460 Και όπως υποδηλώνει το όνομα, είναι μόνο πρόσβαση παντού. 912 00:43:44,460 --> 00:43:45,790 >> Scratch έχει πραγματικά αυτές. 913 00:43:45,790 --> 00:43:48,650 Εάν χρησιμοποιηθεί μια μεταβλητή, μπορείτε να ανακαλέσετε είχατε να επιλέξετε αν είναι για 914 00:43:48,650 --> 00:43:50,780 αυτή sprite ή για όλα τα ξωτικά. 915 00:43:50,780 --> 00:43:54,270 Λοιπόν, όλα τα ξωτικά είναι μόνο η σαφέστερη τρόπος για να πούμε παγκόσμια. 916 00:43:54,270 --> 00:43:55,520 Ναι; 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Αχ, πολύ καλή ερώτηση. 919 00:44:10,990 --> 00:44:14,310 >> Έτσι υπενθυμίσουμε ότι στην πρώτη έκδοση του κωδικού μου, όταν εσφαλμένα 920 00:44:14,310 --> 00:44:17,700 δηλώνεται και ορίζεται n στη γραμμή εννέα - 921 00:44:17,700 --> 00:44:19,980 Μου δηλωθεί ως μια μεταβλητή και μου έδωσε μια τιμή με 922 00:44:19,980 --> 00:44:21,160 ο φορέας ανάθεσης - 923 00:44:21,160 --> 00:44:22,520 Αυτό μου έδωσε δύο λάθη. 924 00:44:22,520 --> 00:44:26,560 Ένα, το γεγονός ότι το η δεν χρησιμοποιήθηκε, και δύο, ότι στην γραμμή 11 925 00:44:26,560 --> 00:44:27,770 απλά δεν έχουν δηλωθεί. 926 00:44:27,770 --> 00:44:31,120 Έτσι, το πρώτο δεν το έκανα διεύθυνση κατά τη χρονική στιγμή. 927 00:44:31,120 --> 00:44:35,130 Δεν είναι απολύτως λάθος να δηλώσει μια μεταβλητή, αλλά δεν το χρησιμοποιούν. 928 00:44:35,130 --> 00:44:38,540 Αλλά ένα από τα πράγματα που έχουμε κάνει η CS50 συσκευή, σκόπιμα, 929 00:44:38,540 --> 00:44:43,340 παιδαγωγικά, είναι ότι έχουμε αύξησαν το προσδοκίες του compiler να κάνει 930 00:44:43,340 --> 00:44:46,970 είστε σίγουροι ότι θα κάνουμε τα πράγματα όχι μόνο σωστά, αλλά πραγματικά σωστά. 931 00:44:46,970 --> 00:44:51,520 >> Διότι, αν είστε με την οποία μια μεταβλητή όπως n και ποτέ δεν το χρησιμοποιούν, ή για τη χρήση 932 00:44:51,520 --> 00:44:53,700 σωστά, τότε τι κάνει εκεί; 933 00:44:53,700 --> 00:44:55,650 Δεν εξυπηρετεί πραγματικά κανένα σκοπό. 934 00:44:55,650 --> 00:44:58,980 Και είναι πολύ εύκολο το πέρασμα του χρόνου, αν δεν ρυθμίσετε τον υπολογιστή σας στην 935 00:44:58,980 --> 00:45:01,960 Με αυτό τον τρόπο, να έχει ακριβώς κώδικα που έχει λίγα απομεινάρια εδώ, απομεινάρια εκεί. 936 00:45:01,960 --> 00:45:04,390 Και τότε μήνες αργότερα θα κοιτάξουμε πίσω και να είστε όπως, γιατί είναι αυτή η γραμμή της 937 00:45:04,390 --> 00:45:05,060 κώδικα; 938 00:45:05,060 --> 00:45:07,940 Και αν δεν υπάρχει σοβαρός λόγος, να δεν σας ωφελήσει ή τους συναδέλφους σας 939 00:45:07,940 --> 00:45:10,650 κάτω από το δρόμο για να σκοντάψει τότε. 940 00:45:10,650 --> 00:45:12,540 >> Παρεμπιπτόντως, όπου είναι που προέρχονται από; 941 00:45:12,540 --> 00:45:16,410 Λοιπόν, θυμάστε ότι κάθε φορά που συγκεντρώνουν πρόγραμμα, όλα αυτά τα πράγματα είναι 942 00:45:16,410 --> 00:45:17,380 που εκτυπώνεται. 943 00:45:17,380 --> 00:45:18,350 Γι 'αυτό και θα επανέλθουμε σε αυτό. 944 00:45:18,350 --> 00:45:22,230 Αλλά και πάλι, να είναι ένα βοηθητικό πρόγραμμα που αυτοματοποιεί τη διαδικασία της κατάρτισης από 945 00:45:22,230 --> 00:45:24,830 τρέχει την πραγματική compiler ονομάζεται κλαγγή. 946 00:45:24,830 --> 00:45:27,650 Αυτό το πράγμα, θα δουν τελικά, έχει να κάνει με τον εντοπισμό σφαλμάτων με ειδική 947 00:45:27,650 --> 00:45:29,060 πρόγραμμα που ονομάζεται το πρόγραμμα εντοπισμού σφαλμάτων. 948 00:45:29,060 --> 00:45:32,150 Αυτό έχει να κάνει με τη βελτιστοποίηση της κώδικα - περισσότερα για αυτό στο μέλλον. 949 00:45:32,150 --> 00:45:33,620 Std = c99 - 950 00:45:33,620 --> 00:45:37,870 Αυτό σημαίνει απλά χρησιμοποιήστε την έκδοση του 1999 του C. C είναι γύρω ακόμα περισσότερο από 951 00:45:37,870 --> 00:45:40,830 αυτό, αλλά έκαναν κάποια ωραία αλλαγές 10 και πλέον χρόνια πριν. 952 00:45:40,830 --> 00:45:42,690 >> Και εδώ είναι τα σημαντικά από αυτά. 953 00:45:42,690 --> 00:45:45,880 Αυτό που λέμε είναι να κάνει κάτι που προηγουμένως θα ήταν μια προειδοποίηση 954 00:45:45,880 --> 00:45:48,560 Παρουσιάστηκε σφάλμα κατά την πρόληψη του φοιτητή από την κατάρτιση. 955 00:45:48,560 --> 00:45:51,400 Και τοίχο μέσα το κάνουμε αυτό για ένα σωρό πράγματα, δεν 956 00:45:51,400 --> 00:45:53,060 σχετίζεται μόνο με τις μεταβλητές. 957 00:45:53,060 --> 00:45:54,700 Και τότε επιτρέψτε μου να μετακινηθείτε στο το τέλος αυτής της γραμμής. 958 00:45:54,700 --> 00:45:56,430 Και αυτό, επίσης, ότι θα τελικά επανέλθω. 959 00:45:56,430 --> 00:45:59,040 Αυτό είναι προφανώς το όνομα το αρχείο είμαι κατάρτιση. 960 00:45:59,040 --> 00:46:02,160 Αυτό υπενθυμίζει το όνομα του αρχείου Είμαι έξοδο, όπως το όνομα 961 00:46:02,160 --> 00:46:04,070 του εκτελέσιμη μου πρόγραμμα. 962 00:46:04,070 --> 00:46:08,970 Αυτό-lcs50 σημαίνει απλά χρησιμοποιήστε το CS50 βιβλιοθήκη, και οποιαδήποτε μηδενικά και αυτά που 963 00:46:08,970 --> 00:46:12,390 το προσωπικό που έγραψε και καταρτίζονται νωρίτερα αυτό το έτος, την ενσωμάτωση 964 00:46:12,390 --> 00:46:13,490 τους στο πρόγραμμα μου. 965 00:46:13,490 --> 00:46:16,130 >> Και ο καθένας ξέρει τι-lm είναι; 966 00:46:16,130 --> 00:46:18,150 Είναι η βιβλιοθήκη μαθηματικά, το οποίο είναι ακριβώς εκεί ακόμα κι αν είστε 967 00:46:18,150 --> 00:46:19,320 δεν κάνει καμία μαθηματικά. 968 00:46:19,320 --> 00:46:22,620 Είναι ακριβώς αυτομάτως για να μας κάνουν. 969 00:46:22,620 --> 00:46:26,540 >> Λοιπόν, επιτρέψτε μου να κάνω ένα άλλο παράδειγμα εδώ με το άνοιγμα ενός νέου αρχείου. 970 00:46:26,540 --> 00:46:30,560 Και επιτρέψτε μου να αποθηκεύσετε αυτό το ένα ως string.c. 971 00:46:30,560 --> 00:46:37,980 Αποδεικνύεται ότι, όπως μιλάμε για τα δεδομένα τύποι και σήμερα, υπάρχει ακόμα πιο 972 00:46:37,980 --> 00:46:40,630 συμβαίνει κάτω από την κουκούλα ό, τι έχουμε δει μέχρι στιγμής. 973 00:46:40,630 --> 00:46:42,290 Έτσι, επιτρέψτε μου να κάνω γρήγορα ένα γρήγορο πρόγραμμα. 974 00:46:42,290 --> 00:46:44,510 Συμπεριλάβετε stdio.h. 975 00:46:44,510 --> 00:46:45,730 Και εγώ θα σώσει αυτό. 976 00:46:45,730 --> 00:46:48,110 Και ξέρετε, επιτρέψτε μου να μην κάνει το ίδιο λάθος ξανά και ξανά. 977 00:46:48,110 --> 00:46:50,540 Συμπεριλάβετε cs50.h. 978 00:46:50,540 --> 00:46:54,870 Και επιτρέψτε μου να προχωρήσει τώρα και να κάνουμε int main (void). 979 00:46:54,870 --> 00:46:58,790 >> Και τώρα θέλω απλώς να κάνω ένα πρόγραμμα που το κάνει αυτό - να αναγνωρίσει μια σειρά 980 00:46:58,790 --> 00:47:03,610 ονομάζεται s και να πάρετε μια σειρά από το χρήστη. 981 00:47:03,610 --> 00:47:05,820 Και επιτρέψτε μου να κάνω μια μικρή οδηγίες εδώ - 982 00:47:05,820 --> 00:47:09,960 παρακαλώ να μου δώσει μια σειρά - έτσι ο χρήστης ξέρει τι να κάνει. 983 00:47:09,960 --> 00:47:13,190 Και τότε εδώ κάτω κάτω από αυτό, Θέλω να κάνω το εξής - 984 00:47:13,190 --> 00:47:16,060 για int i παίρνει μηδέν. 985 00:47:16,060 --> 00:47:18,580 Και πάλι, επιστήμονες της πληροφορικής τυπικά αρχίζουν να μετρούν από το μηδέν, αλλά θα μπορούσαμε να 986 00:47:18,580 --> 00:47:20,340 κάνει ότι ένα αν πραγματικά ήθελε. 987 00:47:20,340 --> 00:47:27,240 Τώρα πάω να κάνω εγώ είναι λιγότερο από το μήκος της συμβολοσειράς s. 988 00:47:27,240 --> 00:47:28,430 Έτσι strlen - 989 00:47:28,430 --> 00:47:29,510 S-Τ-Κ-Ε-Ε-Ν - 990 00:47:29,510 --> 00:47:31,650 πάλι, είναι συνοπτική, επειδή είναι ευκολότερο να πληκτρολογήσετε, ακόμα κι αν είναι ένα 991 00:47:31,650 --> 00:47:32,590 λίγο αινιγματικό. 992 00:47:32,590 --> 00:47:35,290 >> Αυτή είναι μια λειτουργία που δεν έχετε χρησιμοποιήσει πριν, αλλά κυριολεκτικά το κάνει αυτό - 993 00:47:35,290 --> 00:47:37,810 επιστρέψει σε μένα έναν αριθμό που αντιπροσωπεύει το μήκος της χορδής 994 00:47:37,810 --> 00:47:38,690 ότι ο χρήστης πληκτρολογήσει. 995 00:47:38,690 --> 00:47:41,740 Αν πληκτρολογήσει στο γειά σου, θα επιστρέψει πέντε, διότι υπάρχει πέντε 996 00:47:41,740 --> 00:47:42,890 γράμματα γεια. 997 00:47:42,890 --> 00:47:45,390 Στη συνέχεια, σε κάθε επανάληψη του Αυτός ο βρόχος, i συν συν. 998 00:47:45,390 --> 00:47:49,170 Έτσι και πάλι, ένα πρότυπο κατασκευή, ακόμη και αν δεν είστε αρκετά ή πάρα πολύ άνετα 999 00:47:49,170 --> 00:47:50,420 εξοικειωμένοι με αυτό ακόμα. 1000 00:47:50,420 --> 00:47:53,220 >> Αλλά τώρα σε κάθε επανάληψη του βρόχου αυτού, παρατηρήσετε τι Πάω να κάνουμε. 1001 00:47:53,220 --> 00:47:56,690 Θέλω να πάω μπροστά και να εκτυπώσετε από ένα μεμονωμένο χαρακτήρα - 1002 00:47:56,690 --> 00:47:59,940 οπότε% γ backslash n σε μια νέα γραμμή. 1003 00:47:59,940 --> 00:48:00,990 Και τότε, ξέρετε τι θέλω να κάνω; 1004 00:48:00,990 --> 00:48:05,090 Όποια και αν είναι ο λόγος είναι ότι ο χρήστης πληκτρολογεί σε, όπως γειά σου, θέλω να εκτυπώσετε 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O, έναν χαρακτήρα ανά γραμμή. 1006 00:48:09,530 --> 00:48:13,080 Με άλλα λόγια, θέλω να πάρω το μεμονωμένους χαρακτήρες ενός string, 1007 00:48:13,080 --> 00:48:16,770 σύμφωνα με την οποία μέχρι τώρα ένα string έχει μόνο υπήρξε μια ακολουθία χαρακτήρων. 1008 00:48:16,770 --> 00:48:21,690 >> Και αποδεικνύεται ότι μπορώ να κάνω s, βραχίονα, i, κλείσιμο παρένθεσης, κλείστε 1009 00:48:21,690 --> 00:48:23,580 παρένθεση, τελεία. 1010 00:48:23,580 --> 00:48:25,640 Και έχω να κάνω κάτι άλλο. 1011 00:48:25,640 --> 00:48:30,570 Είναι σε ένα αρχείο που ονομάζεται string.h strlen ότι έχει δηλωθεί. 1012 00:48:30,570 --> 00:48:33,190 Έτσι, εάν θέλετε να χρησιμοποιήσετε τη λειτουργία αυτή, Πρέπει να σου πω τον compiler, 1013 00:48:33,190 --> 00:48:34,450 περιμένουμε να το χρησιμοποιήσετε. 1014 00:48:34,450 --> 00:48:37,040 Τώρα, επιτρέψτε μου να προχωρήσει και να κάνει Το πρόγραμμα ονομάζεται string. 1015 00:48:37,040 --> 00:48:39,150 Dot, slash, string. 1016 00:48:39,150 --> 00:48:40,130 >> Παρακαλώ δώστε μου ένα string. 1017 00:48:40,130 --> 00:48:40,900 Θα προχωρήσει και το είδος αυτό. 1018 00:48:40,900 --> 00:48:43,040 Γεια σας, σε όλα τα καλύμματα, Enter. 1019 00:48:43,040 --> 00:48:47,390 Και τώρα παρατηρήσετε έχω τυπωμένο αυτό ένα χαρακτήρα μετά την άλλη. 1020 00:48:47,390 --> 00:48:51,450 Έτσι, η νέα λεπτομέρεια εδώ είναι ότι μια σειρά, στο τέλος της ημέρας, μπορεί να είναι 1021 00:48:51,450 --> 00:48:54,810 προσεγγιστεί από τον τρόπο των ατομικών του χαρακτήρες με την εισαγωγή της πλατείας 1022 00:48:54,810 --> 00:48:55,840 σημειογραφία βραχίονα. 1023 00:48:55,840 --> 00:48:59,090 Και αυτό γιατί μια σειρά από κάτω Η κουκούλα είναι πράγματι μια ακολουθία 1024 00:48:59,090 --> 00:48:59,810 χαρακτήρων. 1025 00:48:59,810 --> 00:49:02,010 Αλλά τι είναι τακτοποιημένο γι 'αυτούς είναι στη μνήμη RAM του υπολογιστή σας - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, όποια κι αν είναι - είναι κυριολεκτικά πίσω στην πλάτη με πλάτη - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 σε ατομικό, δίπλα bytes στη μνήμη. 1029 00:49:09,920 --> 00:49:13,210 >> Έτσι, εάν θέλετε να πάρετε κατά την όγδοη όπως byte, η οποία σε αυτό το loop θα είναι 1030 00:49:13,210 --> 00:49:16,900 βραχίονα μηδέν, ένα στήριγμα, βραχίονα δύο, βραχίονα τρεις, τέσσερις βραχίονα - 1031 00:49:16,900 --> 00:49:18,890 Αυτό είναι μηδενικό δείκτη μέχρι πέντε - 1032 00:49:18,890 --> 00:49:23,330 που θα εκτυπώσετε H-Ε-Ε-Ε-Ο στη δική της γραμμή. 1033 00:49:23,330 --> 00:49:26,320 >> Τώρα, ως teaser, επιτρέψτε μου να σας δείξω το τα είδη των πραγμάτων που θα είναι τελικά 1034 00:49:26,320 --> 00:49:31,950 σε θέση να κατανοήσουν, τουλάχιστον με κάποια στενή αναζητούν. 1035 00:49:31,950 --> 00:49:35,610 Για το ένα, αυτό που περιλαμβάνεται στη σημερινή παραδείγματα, αν θέλετε, είναι στην πραγματικότητα 1036 00:49:35,610 --> 00:49:38,300 ένα από τα πρώτα jailbreaks για το iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking σημαίνει ράγισμα το τηλέφωνο ώστε να μπορείτε να χρησιμοποιήσετε πραγματικά για ένα 1038 00:49:40,800 --> 00:49:43,380 διαφορετικό φορέα ή εγκατάσταση το δικό σας λογισμικό. 1039 00:49:43,380 --> 00:49:45,660 Και θα παρατηρήσετε αυτό φαίνεται εντελώς αινιγματικό, το πιο πιθανό. 1040 00:49:45,660 --> 00:49:46,520 Αλλά κοιτάξτε αυτό. 1041 00:49:46,520 --> 00:49:50,420 Το iPhone ήταν προφανώς ραγισμένα με ένα for loop, μια κατάσταση αν, ένα άλλο 1042 00:49:50,420 --> 00:49:52,580 κατάσταση, μια δέσμη των λειτουργιών δεν έχουμε δει. 1043 00:49:52,580 --> 00:49:54,230 >> Και πάλι, δεν θα σε Εκ πρώτης όψεως ίσως 1044 00:49:54,230 --> 00:49:55,620 κατανοήσουμε πώς αυτό λειτουργεί. 1045 00:49:55,620 --> 00:49:58,940 Αλλά όλα αυτά που το είδος των λάβει δεδομένο στη σύγχρονη ζωή μας 1046 00:49:58,940 --> 00:50:02,040 στην πραγματικότητα τείνει να μειώσει ακόμα και σε κάποια από αυτές τις βασικές αρχές που έχουμε πάει 1047 00:50:02,040 --> 00:50:02,820 κοιτάζοντας. 1048 00:50:02,820 --> 00:50:06,680 Επιτρέψτε μου να προχωρήσει και να ανοίξει ένα άλλο πρόγραμμα, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Έτσι αυτό, επίσης, είναι κάτι που δεν θα πρέπει να ξέρει πραγματικά. 1050 00:50:08,970 --> 00:50:12,440 Ακόμη και κανένας από το προσωπικό ή θα μπορούσα πιθανώς να καταλάβω αυτό έξω από την εξέταση 1051 00:50:12,440 --> 00:50:15,450 γιατί αυτό ήταν κώδικα κάποιου η οποία υποβλήθηκε σε ό, τι είναι 1052 00:50:15,450 --> 00:50:19,630 ιστορικά γνωστή ως ασαφή C διαγωνισμό, όπου μπορείτε να γράψετε ένα πρόγραμμα 1053 00:50:19,630 --> 00:50:24,670 που συγκεντρώνει και τρέχει, αλλά είναι τόσο βλασφημία αινιγματικά κανένας άνθρωπος δεν μπορεί να καταλάβει τι 1054 00:50:24,670 --> 00:50:27,530 πρόκειται να κάνει μέχρι τρέχουν πραγματικά. 1055 00:50:27,530 --> 00:50:29,940 >> Έτσι, πράγματι, αν δείτε αυτό κώδικα, βλέπω ένα διακόπτη. 1056 00:50:29,940 --> 00:50:30,870 Βλέπω κύριο. 1057 00:50:30,870 --> 00:50:33,800 Βλέπω αυτές τις αγκύλες που συνεπάγονται κάποιο είδος ενός πίνακα. 1058 00:50:33,800 --> 00:50:35,970 Μήπως θέλει κανείς να μαντέψει τι αυτό το πρόγραμμα πραγματικότητα 1059 00:50:35,970 --> 00:50:37,220 κάνει αν τρέχω Holloway; 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Ναι. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Μπράβο. 1064 00:50:44,690 --> 00:50:48,090 Έτσι, μόνο το προσωπικό και δεν μπορώ να καταλάβω τι κάνουν αυτά τα πράγματα. 1065 00:50:48,090 --> 00:50:51,670 >> Και τώρα, τέλος, επιτρέψτε μου να πάμε μπροστά και να ανοίξει ένα άλλο πρόγραμμα. 1066 00:50:51,670 --> 00:50:53,440 Αυτό και μόνο - 1067 00:50:53,440 --> 00:50:55,550 και πάλι, θα κάνουμε τον πηγαίο κώδικα διαθέσιμες στο διαδίκτυο - αυτό είναι ακριβώς 1068 00:50:55,550 --> 00:50:57,480 είδος αρκετά για να εξετάσει. 1069 00:50:57,480 --> 00:50:59,750 Το μόνο που έκαναν είναι να πατήσετε το χώρο μπαρ αρκετά. 1070 00:50:59,750 --> 00:51:01,320 Αλλά αυτό είναι πραγματικό κώδικα. 1071 00:51:01,320 --> 00:51:04,790 Έτσι, αν νομίζετε ότι είναι αρκετά, αν τρέχουν στην πραγματικότητα αυτό στην προτροπή, 1072 00:51:04,790 --> 00:51:08,970 τελικά θα δούμε πώς μπορούμε μπορεί να κάνει τα πράγματα όπως αυτό. 1073 00:51:08,970 --> 00:51:14,008 >> Έτσι, θα σας αφήσει σε αυτό το σημείωμα και θα δείτε την Τετάρτη. 1074 00:51:14,008 --> 00:51:18,440 >> [Παίζει μουσική] 1075 00:51:18,440 --> 00:51:23,380 >> ΟΜΙΛΗΤΗΣ 2: Στην επόμενη CS50, το TFS στάδιο μια ανταρσία. 1076 00:51:23,380 --> 00:51:24,112 >> ΟΜΙΛΗΤΗΣ 3: Εκεί είναι. 1077 00:51:24,112 --> 00:51:25,362 Πιάστε τον! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Παίζει μουσική]