1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [ΜΟΥΣΙΚΗ Playing] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> DAVID J. Malan: Εντάξει, αυτό είναι CS50. 5 00:00:16,240 --> 00:00:18,010 Και αυτό είναι μία εβδομάδα. 6 00:00:18,010 --> 00:00:22,050 Έτσι, υπενθυμίζουν ότι η τελευταία φορά την εβδομάδα μηδέν, επικεντρωθήκαμε στην υπολογιστική σκέψη. 7 00:00:22,050 --> 00:00:25,440 Και εμείς μεταπηδά από ότι για να Το μηδέν, μια γραφική προγραμματισμού 8 00:00:25,440 --> 00:00:27,360 γλώσσας από τους φίλους μας στο Media Lab του MIT. 9 00:00:27,360 --> 00:00:31,730 >> Και με το Scratch, δεν έχουμε διερευνήσει ιδέες όπως τις λειτουργίες και τις συνθήκες, 10 00:00:31,730 --> 00:00:35,210 και βρόχους, και μεταβλητές, και ακόμη και εκδηλώσεις, και κλωστές, και άλλα. 11 00:00:35,210 --> 00:00:37,880 Και σήμερα, θα πάμε να συνεχίσετε να χρησιμοποιείτε αυτές τις ιδέες, 12 00:00:37,880 --> 00:00:40,630 και πραγματικά λήψη τους για χορηγηθεί, αλλά μεταφράζει τους 13 00:00:40,630 --> 00:00:44,220 σε μια άλλη γλώσσα γνωστή ως C. Τώρα, C είναι μια πιο παραδοσιακή γλώσσα. 14 00:00:44,220 --> 00:00:46,020 Είναι ένα χαμηλότερο επίπεδο γλώσσα, αν θέλετε. 15 00:00:46,020 --> 00:00:47,300 >> Είναι καθαρά κειμένου. 16 00:00:47,300 --> 00:00:49,910 Και έτσι με την πρώτη ματιά, είναι όλοι πρόκειται να δούμε μάλλον αινιγματική 17 00:00:49,910 --> 00:00:51,430 αν δεν έχετε προγραμματιστεί πριν. 18 00:00:51,430 --> 00:00:53,530 Εμείς πάμε για να έχουν ημι-παχύ έντερο, και παρενθέσεις, 19 00:00:53,530 --> 00:00:55,150 και άγκιστρα, και πολλά άλλα. 20 00:00:55,150 --> 00:00:57,240 Αλλά συνειδητοποιούν ότι ακόμα και αν και η σύνταξη είναι 21 00:00:57,240 --> 00:01:00,600 για να κοιτάξουμε λίγο εξοικειωμένοι για τους περισσότερους από εσάς, δείτε το παρελθόν αυτό. 22 00:01:00,600 --> 00:01:03,220 Και να προσπαθήσουμε να δούμε τις ιδέες που είναι, πράγματι, οικείο, 23 00:01:03,220 --> 00:01:06,750 γιατί εδώ στην εβδομάδα μία ποιο θα αρχίσουμε να κάνουμε είναι να συγκρίνουμε, 24 00:01:06,750 --> 00:01:08,980 Αρχικά, Scratch έναντι C. 25 00:01:08,980 --> 00:01:12,350 >> Έτσι, για παράδειγμα, να υπενθυμίσω ότι όταν υλοποιηθεί το πρώτο από τα προγράμματα μας 26 00:01:12,350 --> 00:01:16,220 τελευταία φορά, είχαμε ένα μπλοκ που φαινόταν ένα μικρό κάτι σαν this-- όταν 27 00:01:16,220 --> 00:01:19,990 πράσινη σημαία κλικ, και στη συνέχεια είχαμε ένα ή περισσότερα κομμάτια του παζλ κάτω από αυτό, 28 00:01:19,990 --> 00:01:22,150 σε αυτή την περίπτωση, λένε, γεια κόσμο. 29 00:01:22,150 --> 00:01:24,870 Έτσι, πράγματι, στο Ξυστό, όταν κάνω κλικ ότι η πράσινη σημαία 30 00:01:24,870 --> 00:01:27,390 να τρέξει το πρόγραμμά μου, έτσι να μιλήσει, αυτά είναι 31 00:01:27,390 --> 00:01:29,520 τα μπλοκ που παίρνουν εκτελεστεί, ή να τρέξει. 32 00:01:29,520 --> 00:01:32,230 Και, συγκεκριμένα, Ξυστό είπε, γειά σου, τον κόσμο. 33 00:01:32,230 --> 00:01:35,377 >> Τώρα, θα μπορούσα να έχω καθορίζονται διαφορετικές λέξεις εδώ. 34 00:01:35,377 --> 00:01:37,960 Αλλά θα δούμε ότι, πράγματι, πολλοί αυτών blocks-- και μάλιστα, 35 00:01:37,960 --> 00:01:41,880 σε C πολλά functions-- μπορεί να είναι παραμετροποιημένη ή προσαρμοσμένη 36 00:01:41,880 --> 00:01:43,150 να κάνει διαφορετικά πράγματα. 37 00:01:43,150 --> 00:01:45,520 Στην πραγματικότητα, σε C αν θέλετε να μετατρέψετε, τώρα, 38 00:01:45,520 --> 00:01:47,567 Αυτό το πρόγραμμα Scratch σε αυτή την άλλη γλώσσα, 39 00:01:47,567 --> 00:01:49,650 θα πάμε να γράψει ένα λίγο κάτι σαν αυτό. 40 00:01:49,650 --> 00:01:52,540 >> Σύμφωνοι, υπάρχει κάποια άγνωστη σύνταξη υπάρχει πιθανότατα, int, 41 00:01:52,540 --> 00:01:54,380 και παρενθέσεις, και άκυρη. 42 00:01:54,380 --> 00:01:57,740 Αλλά printf-- ακόμα κι αν κάνατε πιστεύω ότι θα ήταν απλά εκτύπωσης. 43 00:01:57,740 --> 00:02:00,120 Αλλά εκτύπωση σημαίνει εκτύπωση διαμορφωθεί, όπως θα δούμε σύντομα. 44 00:02:00,120 --> 00:02:02,140 Αυτό κυριολεκτικά θα εκτυπώσει στην οθόνη ανεξαρτήτως 45 00:02:02,140 --> 00:02:05,990 είναι μέσα από αυτές τις παρενθέσεις, η οποία Φυσικά σε αυτή την περίπτωση είναι, γεια κόσμο. 46 00:02:05,990 --> 00:02:09,290 >> Αλλά θα παρατηρήσετε κάποια άλλα σύνταξη, μερικά διπλά εισαγωγικά, 47 00:02:09,290 --> 00:02:11,890 ότι οι παρενθέσεις στο τέλος, η άνω τελεία και τα παρόμοια. 48 00:02:11,890 --> 00:02:15,027 Έτσι, υπάρχει ένα κομμάτι των γενικών εξόδων, να το πω έτσι, τόσο γνωστικά 49 00:02:15,027 --> 00:02:17,860 και συντακτικά, ότι θα πάμε να πρέπει να θυμάστε πριν από καιρό. 50 00:02:17,860 --> 00:02:20,720 Αλλά συνειδητοποιούν ότι με την πρακτική, αυτό θα αρχίσει να πηδούν έξω σε σας. 51 00:02:20,720 --> 00:02:24,920 >> Στην πραγματικότητα, ας επικεντρωθεί σε εκείνο το ένα λειτουργία specifically-- σε αυτή την περίπτωση, 52 00:02:24,920 --> 00:02:26,290 πω γεια κόσμο. 53 00:02:26,290 --> 00:02:27,560 Έτσι λένε είναι η λειτουργία. 54 00:02:27,560 --> 00:02:31,320 Γεια σας κόσμος είναι παράμετρος του, ή επιχειρήματος, προσαρμογή της. 55 00:02:31,320 --> 00:02:34,320 >> Και η ισοδυναμία σε C είναι ακριβώς πρόκειται να είναι αυτό μια γραμμή εδώ, 56 00:02:34,320 --> 00:02:38,710 όπου printf είναι ισοδύναμη με την, ας πούμε, η διπλή εισηγμένες string, γεια 57 00:02:38,710 --> 00:02:41,470 κόσμος είναι ισοδύναμο, φυσικά, σε ό, τι είναι στο λευκό κουτί εκεί. 58 00:02:41,470 --> 00:02:45,680 Και η ανάστροφη κάθετο n, αν και λίγο παράξενο και απουσιάζει από το μηδέν, 59 00:02:45,680 --> 00:02:49,380 απλά πρόκειται να έχουμε το αποτέλεσμα που θα δείτε σε έναν υπολογιστή, όπως το Mac μου ή έναν υπολογιστή, 60 00:02:49,380 --> 00:02:51,660 ακριβώς κινείται η δρομέα στην επόμενη γραμμή. 61 00:02:51,660 --> 00:02:53,970 Είναι σαν το χτύπημα Enter στο πληκτρολόγιό σας. 62 00:02:53,970 --> 00:02:55,580 >> Έτσι, θα δούμε ότι και πάλι πριν από καιρό. 63 00:02:55,580 --> 00:02:58,640 Αλλά πρώτα, ας ρίξουμε μια ματιά σε αυτό άλλα παράδειγμα στην περίπτωση των βρόχων. 64 00:02:58,640 --> 00:03:02,830 Είχαμε αυτό πάντα βρόχο τελευταία φορά, η οποία ήταν μια σειρά από κομμάτια του παζλ 65 00:03:02,830 --> 00:03:05,490 ότι έκανε κάτι κυριολεκτικά forever-- σε αυτή την περίπτωση, 66 00:03:05,490 --> 00:03:08,360 λένε, γεια κόσμο, γεια κόσμο, Γεια σας κόσμο, γεια κόσμο. 67 00:03:08,360 --> 00:03:10,350 Έτσι είναι ένας άπειρος βρόχος από το σχεδιασμό. 68 00:03:10,350 --> 00:03:14,580 >> Στην C, αν θέλουμε να εφαρμόσουμε ίδια ιδέα, θα μπορούσαμε απλά να κάνουμε αυτό. 69 00:03:14,580 --> 00:03:19,570 Ενώ είναι αλήθεια, printf γεια world-- τώρα ενώ, μόνο σημασιολογικά, το είδος της 70 00:03:19,570 --> 00:03:23,090 φέρνει στο νου την ιδέα του να κάνει κάτι ξανά, και ξανά, και ξανά, 71 00:03:23,090 --> 00:03:23,980 και για πόσο καιρό; 72 00:03:23,980 --> 00:03:27,990 Λοιπόν, true-- υπενθυμίζουν ότι αλήθεια είναι μόνο ή ένα. 73 00:03:27,990 --> 00:03:30,660 >> Και αλήθεια είναι, βέβαια, πάντα αλήθεια. 74 00:03:30,660 --> 00:03:33,060 Έτσι είναι το είδος της μια ανούσια Δήλωση απλά να πω αλήθεια. 75 00:03:33,060 --> 00:03:36,890 Αλλά πράγματι, αυτό είναι σκόπιμη, γιατί αν αληθεύει είναι απλά πάντα αλήθεια, 76 00:03:36,890 --> 00:03:40,850 από ό, τι κατά την αλήθεια ακριβώς συνεπάγεται, αν και λίγο έμμεσα, 77 00:03:40,850 --> 00:03:44,070 ότι οι παρακάτω γραμμές κώδικα μεταξύ αυτών άγκιστρα 78 00:03:44,070 --> 00:03:48,320 θα πρέπει να εκτελέσει απλά ξανά, και ξανά, και πάλι, και στην πραγματικότητα ποτέ δεν σταματούν. 79 00:03:48,320 --> 00:03:50,230 >> Αλλά αν θέλετε σας βρόχος να σταματήσει, όπως έχουμε 80 00:03:50,230 --> 00:03:54,500 έκανε την τελευταία φορά με κάτι σαν αυτό, επαναλάβετε τα ακόλουθα 50 φορές, 81 00:03:54,500 --> 00:03:57,700 στο C μπορούμε να κάνουμε το ίδιο με αυτό που είναι ονομάζεται για loop-- τη λέξη-κλειδί 82 00:03:57,700 --> 00:03:59,330 Δεν είναι λίγο, αλλά για. 83 00:03:59,330 --> 00:04:03,290 Και τότε έχουμε κάποια νέα σύνταξη εδώ, με int i ισούται με 0, i μικρότερη από 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 Και θα επανέλθουμε σε αυτό. 86 00:04:05,430 --> 00:04:09,660 Αλλά αυτό είναι απλά το πώς θα μεταφράσει το σύνολο των μπλοκ Scratch 87 00:04:09,660 --> 00:04:13,079 σε ένα σύνολο C γραμμές κώδικα. 88 00:04:13,079 --> 00:04:14,450 >> Εν τω μεταξύ, να εξετάσει τις μεταβλητές. 89 00:04:14,450 --> 00:04:16,540 Και, στην πραγματικότητα, εμείς απλά είδε ένα προ ολίγου. 90 00:04:16,540 --> 00:04:21,220 Και στην περίπτωση του Scratch, αν ήθελε να δηλώσει μια μεταβλητή που ονομάζεται i 91 00:04:21,220 --> 00:04:24,590 για το i είναι ακέραιος, απλά ένας αριθμός, και θέλουμε να το θέσετε σε κάποια τιμή, 92 00:04:24,590 --> 00:04:28,410 θα χρησιμοποιήσετε αυτό το πορτοκαλί μπλοκάρουν here-- που θ 0. 93 00:04:28,410 --> 00:04:30,800 >> Και θα δούμε σήμερα και πέρα, ακριβώς όπως και την περασμένη εβδομάδα, 94 00:04:30,800 --> 00:04:33,850 προγραμματιστές κάνουν σχεδόν τα πάντα αρχίζουν να μετρούν από το μηδέν, πραγματικά 95 00:04:33,850 --> 00:04:34,950 κατά συνθήκη. 96 00:04:34,950 --> 00:04:37,250 Αλλά και επειδή ανάκληση από συζήτησή μας δυαδικών, 97 00:04:37,250 --> 00:04:39,990 ο μικρότερος αριθμός που μπορεί να αντιπροσωπεύουν με οποιοδήποτε αριθμό από bits 98 00:04:39,990 --> 00:04:41,640 είναι ακριβώς πρόκειται να είναι 0 ίδια. 99 00:04:41,640 --> 00:04:45,190 Και έτσι θα ξεκινήσει γενικά αρχικοποίηση ακόμη μεταβλητές μας στο 0. 100 00:04:45,190 --> 00:04:47,710 >> Και σε C για να κάνουν το ίδιο, θα πάμε να πούμε int 101 00:04:47,710 --> 00:04:50,110 για ακέραιος, εγώ απλά από τη σύμβαση. 102 00:04:50,110 --> 00:04:53,390 Θα μπορούσα να ονομάζεται αυτή η μεταβλητή οτιδήποτε θέλω, όπως ακριβώς και στο Ξυστό. 103 00:04:53,390 --> 00:04:57,770 Και τότε ισούται με 0 απλά εκδοχείς η τιμή 0 από τα δεξιά 104 00:04:57,770 --> 00:05:01,319 και το θέτει σε μεταβλητή, ή ο δοχείο αποθήκευσης εκεί, στα αριστερά. 105 00:05:01,319 --> 00:05:04,360 Και το ερωτηματικό όπως θα see-- και έχουμε δει μερικές από αυτές τις already-- 106 00:05:04,360 --> 00:05:06,530 Σημαίνει απλώς τέλος της σκέψης. 107 00:05:06,530 --> 00:05:09,430 Προχωρήστε να κάνουμε κάτι άλλο στις γραμμές που ακολουθούν. 108 00:05:09,430 --> 00:05:11,330 >> Τώρα, τι γίνεται με Boolean εκφράσεις; 109 00:05:11,330 --> 00:05:14,320 Υπενθυμίζουμε ότι το Ξυστό, αυτά ήταν εκφράσεις 110 00:05:14,320 --> 00:05:16,740 που είτε είναι αλήθεια ή false-- ερωτήσεις, 111 00:05:16,740 --> 00:05:18,910 Πραγματικά, τα οποία είναι είτε αληθείς ή ψευδείς. 112 00:05:18,910 --> 00:05:21,960 Έτσι, στην περίπτωση του Scratch, θα μπορούσαμε θέσω ένα απλό ερώτημα, όπως αυτό, 113 00:05:21,960 --> 00:05:24,586 είναι i λιγότερο από 50; 114 00:05:24,586 --> 00:05:25,710 Έτσι i, πάλι, είναι ένας ακέραιος. 115 00:05:25,710 --> 00:05:27,210 Ίσως είμαστε το χρησιμοποιείτε σε ένα πρόγραμμα Scratch 116 00:05:27,210 --> 00:05:29,310 να παρακολουθείτε σκορ ή κατι τετοιο. 117 00:05:29,310 --> 00:05:33,810 Έτσι, αυτό το συντακτικό εδώ στο Scratch σημαίνει απλά, είναι θ λιγότερο από το 50; 118 00:05:33,810 --> 00:05:37,330 Λοιπόν, ευτυχώς, κάτι που είναι απλά σε C. Και να μεταφράσει, 119 00:05:37,330 --> 00:05:41,780 Αυτό θα λέγαμε απλά i λιγότερο από 50, χρησιμοποιώντας το πλήκτρο εξοικειωμένοι 120 00:05:41,780 --> 00:05:42,850 στο πληκτρολόγιό σας. 121 00:05:42,850 --> 00:05:45,141 >> Εν τω μεταξύ, αν θέλετε να να πω κάτι πιο γενικό, 122 00:05:45,141 --> 00:05:49,890 όπως, επίσης, είναι χ λιγότερο από το y, όπου κάθε Χ και Υ είναι οι ίδιες μεταβλητές; 123 00:05:49,890 --> 00:05:52,280 Μπορούμε να κάνουμε το ίδιο πράγμα στο Γ, εφ 'όσον έχουμε 124 00:05:52,280 --> 00:05:53,942 δημιούργησε αυτές τις μεταβλητές που έχουν ήδη. 125 00:05:53,942 --> 00:05:55,650 Και θα δούμε πώς θα το κάνει αυτό πριν από καιρό. 126 00:05:55,650 --> 00:05:58,590 Θα πω απλώς x λιγότερο από το y. 127 00:05:58,590 --> 00:06:00,530 >> Έτσι είστε αρχίζουν να δείτε κάποιες ομοιότητες. 128 00:06:00,530 --> 00:06:03,490 Και εκείνοι οι λαοί που έκαναν Scratch ήταν σίγουρα 129 00:06:03,490 --> 00:06:05,250 εμπνευσμένο από κάποιες από αυτές τις βασικές ιδέες. 130 00:06:05,250 --> 00:06:10,350 Και θα δείτε αυτό το είδος της σύνταξη σε πολλές languages-- 131 00:06:10,350 --> 00:06:12,160 όχι μόνο το μηδέν, δεν μόνο C, αλλά Python, 132 00:06:12,160 --> 00:06:14,790 και JavaScript, και άλλες γλώσσες ακόμα. 133 00:06:14,790 --> 00:06:18,270 >> Ας εξετάσουμε ένα άλλο κατασκεύασμα από C, η έννοια μιας κατάστασης, 134 00:06:18,270 --> 00:06:20,370 κάνει κάτι όρους. 135 00:06:20,370 --> 00:06:22,720 Αν κάτι είναι αλήθεια, να το κάνετε αυτό. 136 00:06:22,720 --> 00:06:24,457 Εάν κάτι άλλο είναι αλήθεια, το κάνουμε αυτό. 137 00:06:24,457 --> 00:06:27,040 Είναι το είδος του προγραμματισμού ισοδύναμο ενός διακλάδωση του δρόμου. 138 00:06:27,040 --> 00:06:29,730 Ίσως είναι μια αμφίδρομη πιρούνι, ένας τριοδικός πιρούνι, ή και περισσότερο. 139 00:06:29,730 --> 00:06:32,800 Και στο Scratch, μπορεί να έχουμε δει κάτι σαν αυτό. 140 00:06:32,800 --> 00:06:34,010 >> Έτσι, αυτό είναι ένα μεγάλο. 141 00:06:34,010 --> 00:06:36,750 Αλλά σκεφτείτε το σχετικό απλότητα της λογικής. 142 00:06:36,750 --> 00:06:44,010 Αν το x είναι μικρότερο από y, τότε πείτε το x είναι μικρότερο από το y, αλλιώς αν το x είναι μεγαλύτερο από το y, 143 00:06:44,010 --> 00:06:46,230 στη συνέχεια να πω το x είναι μεγαλύτερο από το y. 144 00:06:46,230 --> 00:06:48,300 Και τότε, λογικά, αν νομίζετε ότι πίσω στο Scratch 145 00:06:48,300 --> 00:06:52,610 ή απλά τη δική σας ανθρώπινη διαίσθηση, καλά, εάν το Χ δεν είναι μεγαλύτερη από y και χ 146 00:06:52,610 --> 00:06:57,000 δεν είναι μικρότερη από y, τότε φυσικά x θα είναι ίσο με το y. 147 00:06:57,000 --> 00:06:59,690 Έτσι, στην περίπτωση αυτή, με φωλιές αυτά τα μπλοκ Ξυστό, 148 00:06:59,690 --> 00:07:02,580 μπορούμε να επιτύχουμε μια τριών τρόπο διακλάδωση του δρόμου; 149 00:07:02,580 --> 00:07:04,980 >> Εν τω μεταξύ, αν θέλουμε να το κάνουμε αυτό σε C, είναι αναμφισβήτητα 150 00:07:04,980 --> 00:07:08,420 φαίνεται λίγο simpler-- τουλάχιστον Μόλις εξοικειωθείτε με τη σύνταξη. 151 00:07:08,420 --> 00:07:12,050 Αν το χ είναι μικρότερο από y, printf x είναι μικρότερο από y. 152 00:07:12,050 --> 00:07:16,140 Αλλιώς αν το x είναι μεγαλύτερο από το y, printf x είναι μεγαλύτερο από το y. 153 00:07:16,140 --> 00:07:21,210 Άλλο printf x είναι ίσο με y-- και, και πάλι, με εκείνους backslash τελειώνει ακριβώς 154 00:07:21,210 --> 00:07:24,160 για εκείνες τις νέες γραμμές, έτσι ώστε αν έτρεξε στην πραγματικότητα αυτό το είδος του προγράμματος 155 00:07:24,160 --> 00:07:25,940 θα κινηθεί μόνο κέρσορα τελικά 156 00:07:25,940 --> 00:07:28,100 στην επόμενη γραμμή της οθόνης. 157 00:07:28,100 --> 00:07:31,270 >> Τώρα, εν τω μεταξύ Scratch είχε άλλα πιο εξελιγμένα χαρακτηριστικά, μόνο 158 00:07:31,270 --> 00:07:34,320 μερικά από τα οποία πρόκειται να αρχικά κινούνται πάνω στον κόσμο του C. 159 00:07:34,320 --> 00:07:37,010 Και ένας από αυτούς ήταν που ονομάζεται μια λίστα στο Scratch. 160 00:07:37,010 --> 00:07:39,100 Και αυτό ήταν μια ειδική το είδος της μεταβλητής, ότι 161 00:07:39,100 --> 00:07:42,840 σας επιτρέπεται να αποθηκεύσετε πολλαπλές πράγματα στο πίσω, προς τα πίσω, προς τα πίσω, προς τα πίσω. 162 00:07:42,840 --> 00:07:45,540 >> Στην C, δεν έχει λίστες, per se, αλλά κάτι 163 00:07:45,540 --> 00:07:48,090 που είναι πιο γενικά ονομάζονται συστοιχίες, αν και θα 164 00:07:48,090 --> 00:07:50,590 επανέλθω αργότερα αυτό το εξάμηνο να ψάχνει σε κάτι 165 00:07:50,590 --> 00:07:52,780 που ονομάζεται μια λίστα, ή πραγματικά μια συνδεδεμένη λίστα. 166 00:07:52,780 --> 00:07:55,510 Αλλά για τώρα, το πλησιέστερο ισοδύναμο σε C για εμάς 167 00:07:55,510 --> 00:07:57,345 πρόκειται να είναι κάτι που ονομάζεται μια σειρά. 168 00:07:57,345 --> 00:07:59,740 Και μια σειρά είναι απλά ένα ειδικός τύπος μεταβλητής 169 00:07:59,740 --> 00:08:03,160 που σας επιτρέπει να αποθηκεύσετε τα δεδομένα πίσω, προς τα πίσω, προς τα πίσω, προς τα πίσω. 170 00:08:03,160 --> 00:08:05,840 >> Και, πράγματι, στο Ξυστό, αν θέλαμε να αποκτήσετε πρόσβαση 171 00:08:05,840 --> 00:08:09,030 το πρώτο στοιχείο ενός πίνακα ή ένα list-- και πάω να την αποκαλούμε, 172 00:08:09,030 --> 00:08:13,600 κατά συνθήκη, argv, το επιχείρημα φορέα, αλλά περισσότερα για αυτό πριν από καιρό. 173 00:08:13,600 --> 00:08:17,090 Αν θέλω να πάρω το πρώτο στοιχείο του argv, στον κόσμο του Scratch 174 00:08:17,090 --> 00:08:20,930 μπορείτε πραγματικά να κάνετε συνήθως αρχίζουν να μετρούν από το 1. 175 00:08:20,930 --> 00:08:22,850 >> Και γι 'αυτό θα μπορούσε να πάρει το στοιχείο 1 του argv. 176 00:08:22,850 --> 00:08:26,310 Αυτό είναι ακριβώς το πώς υλοποιείται το MIT η έννοια των καταλόγων. 177 00:08:26,310 --> 00:08:29,860 Αλλά σε C, Πάω να πιο απλά μόνο να πω, argv, 178 00:08:29,860 --> 00:08:32,758 η οποία και πάλι είναι το όνομα μου list-- ή να είναι σαφής, ένας πίνακας. 179 00:08:32,758 --> 00:08:34,549 Και αν θέλω το πρώτο στοιχεία, Πάω 180 00:08:34,549 --> 00:08:37,890 να χρησιμοποιήσετε αγκύλες, η οποία θα Μπορεί να μην χρησιμοποιούνται συχνά κάτω από ένα πληκτρολόγιο. 181 00:08:37,890 --> 00:08:40,150 >> Αλλά 0 σημαίνει απλά, να μου το πρώτο. 182 00:08:40,150 --> 00:08:42,160 Έτσι, σε ορισμένες περιπτώσεις και ως περνάει ο καιρός, θα πάμε 183 00:08:42,160 --> 00:08:44,570 για να αρχίσετε να βλέπετε αυτές τις διχοτομήσεις μεταξύ Ξυστό και C, 184 00:08:44,570 --> 00:08:46,070 σύμφωνα με την οποία Scratch χρησιμοποιεί ένα. 185 00:08:46,070 --> 00:08:47,670 Εμείς στο Γ χρησιμοποιήσετε 0 εδώ. 186 00:08:47,670 --> 00:08:49,420 Αλλά θα δείτε γρήγορα μόλις καταλάβετε 187 00:08:49,420 --> 00:08:52,920 τα θεμέλια της κάθε γλώσσας, ότι αυτά τα πράγματα αρχίζουν να πάρετε όλες τις πιο 188 00:08:52,920 --> 00:08:56,860 εξοικειωμένοι με την πρακτική και την πρακτική. 189 00:08:56,860 --> 00:08:59,700 >> Ας δούμε πραγματικά τώρα σε ένα πρόγραμμα. 190 00:08:59,700 --> 00:09:04,031 Εδώ θα πρέπει να είναι η πρώτη του Γ μας πηγαίου κώδικα για την πλήρη προγράμματα. 191 00:09:04,031 --> 00:09:06,280 Και το πρόγραμμα θα πάμε να προσφέρει για εξέταση 192 00:09:06,280 --> 00:09:09,340 είναι αυτή που είναι ισοδύναμη σε εκείνη την προγενέστερη κομμάτι Scratch. 193 00:09:09,340 --> 00:09:13,210 >> Έτσι, εδώ, έχουμε ό, τι είναι αναμφισβήτητα το πιο απλό πρόγραμμα C 194 00:09:13,210 --> 00:09:15,410 μπορείτε να γράψετε ότι στην πραγματικότητα κάνει κάτι. 195 00:09:15,410 --> 00:09:18,250 Τώρα, θα εξετάσουμε το παρελθόν, για τώρα, έχει περιλαμβάνουν, 196 00:09:18,250 --> 00:09:21,190 πρότυπο io.h, και αυτά γωνία παρένθεση, και int, και άκυρη, 197 00:09:21,190 --> 00:09:22,840 και τα άγκιστρα, και τα παρόμοια. 198 00:09:22,840 --> 00:09:25,390 >> Και ας επικεντρωθεί σε τι, τουλάχιστον διαισθητικά, 199 00:09:25,390 --> 00:09:26,860 θα μπορούσε να πηδούν έξω σε σας ήδη. 200 00:09:26,860 --> 00:09:30,300 Στην πραγματικότητα, η κύρια, δεν το κάνω γνωρίζουν απαραιτήτως τι είναι αυτό, 201 00:09:30,300 --> 00:09:34,580 αλλά μοιάζει πολύ με Scratch είχε ότι όταν πράσινη σημαία κλικ κομμάτι του παζλ, 202 00:09:34,580 --> 00:09:39,070 το ίδιο κάνει και C ως γλώσσα προγραμματισμού έχουν ένα κύριο κομμάτι του κώδικα που 203 00:09:39,070 --> 00:09:43,380 παίρνει εκτελείται από προεπιλογή. Και, πράγματι, αυτό είναι κυριολεκτικά πρόκειται να ονομάζεται κύρια. 204 00:09:43,380 --> 00:09:44,720 >> Έτσι, κύρια είναι μια λειτουργία. 205 00:09:44,720 --> 00:09:48,720 Και είναι μια ειδική λειτουργία που υπάρχει σε C ότι όταν εκτελείτε ένα πρόγραμμα, 206 00:09:48,720 --> 00:09:52,720 είναι κύριος που παίρνει διοικούνται από αθέτηση. Στον κόσμο του Scratch, 207 00:09:52,720 --> 00:09:56,970 ήταν συνήθως όταν πράσινη σημαία κλικ που έχεις τρέξει από προεπιλογή. 208 00:09:56,970 --> 00:10:01,130 >> Εν τω μεταξύ, έχουμε δει αυτό πριν, printf ή εκτύπωση διαμορφωθεί, αυτό είναι 209 00:10:01,130 --> 00:10:05,620 πρόκειται να είναι μια συνάρτηση που έρχεται με C, μαζί με ένα σωρό άλλα, 210 00:10:05,620 --> 00:10:10,140 ότι η βούληση από το χρόνο και το χρόνο και πάλι, για να κάνουμε ακριβώς 211 00:10:10,140 --> 00:10:12,450 όπως υποδηλώνει η ονομασία του, εκτυπώνει κάτι. 212 00:10:12,450 --> 00:10:13,500 Τι θέλουμε να εκτυπώσετε; 213 00:10:13,500 --> 00:10:15,770 Λοιπόν, θα δούμε ότι περικλείοντας χαρακτήρες 214 00:10:15,770 --> 00:10:18,680 όπως these-- κόσμο Γεια σας, ανάστροφη κάθετο n σε διπλά εισαγωγικά, 215 00:10:18,680 --> 00:10:23,040 μπορούμε να πούμε printf ακριβώς τι να εκτυπώσετε στην οθόνη. 216 00:10:23,040 --> 00:10:26,430 >> Αλλά για να το κάνουμε ότι, δυστυχώς, 217 00:10:26,430 --> 00:10:30,010 πρέπει να πάρετε κάτι που είναι ήδη αινιγματικά σε εμάς τους ανθρώπους, 218 00:10:30,010 --> 00:10:34,510 αλλά τουλάχιστον είναι κάπως readable-- απότομη περιλαμβάνουν, πρότυπο io.h, int, 219 00:10:34,510 --> 00:10:39,340 κύρια, κενό, printf, όλα τα μαγικά ξόρκια μόλις είδαμε στην οθόνη. 220 00:10:39,340 --> 00:10:42,470 Αλλά στην πραγματικότητα έχουμε να πάει πιο απόκρυφες ακόμα. 221 00:10:42,470 --> 00:10:47,140 Εμείς πρέπει πρώτα να μεταφράσει τον κωδικό ότι έχουμε γράψει σε κώδικα μηχανής. 222 00:10:47,140 --> 00:10:51,370 Και ανάκληση από την περασμένη εβδομάδα ότι οι μηχανές, τουλάχιστον αυτά που γνωρίζουμε εδώ, 223 00:10:51,370 --> 00:10:54,450 Στο τέλος της ημέρας μόνο κατανοήσουν μηδενικά και μονάδες. 224 00:10:54,450 --> 00:10:58,100 >> Και Θεέ μου, αν είχαμε να γράψει αυτά μηδενικά και αυτοί που πραγματικά το πρόγραμμα, 225 00:10:58,100 --> 00:11:01,260 θα ήταν πολύ, πολύ γρήγορα να λάβει τη διασκέδαση από τίποτα. 226 00:11:01,260 --> 00:11:05,150 Αλλά αποδεικνύεται, ανά την περασμένη εβδομάδα, ότι αυτά τα πρότυπα μηδενικά και μονάδες 227 00:11:05,150 --> 00:11:06,400 απλά έχουν ιδιαίτερη σημασία. 228 00:11:06,400 --> 00:11:08,500 Σε ορισμένες περιπτώσεις, μπορεί να σημαίνουν οι αριθμοί. 229 00:11:08,500 --> 00:11:11,840 >> Υπό ορισμένες συνθήκες, μπορεί να σημαίνουν γράμματα, ή τα χρώματα, ή οποιοδήποτε αριθμό 230 00:11:11,840 --> 00:11:14,710 άλλων αφαιρέσεις εκεί πάνω. 231 00:11:14,710 --> 00:11:18,450 Αλλά ακριβώς όπως ο υπολογιστής σας έχει μια CPU, Κεντρική Μονάδα Επεξεργασίας, 232 00:11:18,450 --> 00:11:20,390 ή οι εγκέφαλοι στο εσωτερικό του υπολογιστή σας. 233 00:11:20,390 --> 00:11:22,240 Είναι συνήθως η Intel στο εσωτερικό, γιατί αυτό είναι 234 00:11:22,240 --> 00:11:24,900 μία από τις μεγαλύτερες εταιρείες που κάνει επεξεργαστές για υπολογιστές. 235 00:11:24,900 --> 00:11:28,910 >> Λοιπόν, η Intel CPUs και άλλους απλά έχουν αποφασίσει εκ των προτέρων 236 00:11:28,910 --> 00:11:33,970 ότι ορισμένα πρότυπα μηδενικά και αυτοί θα σημαίνει συγκεκριμένα πράγματα. 237 00:11:33,970 --> 00:11:37,040 Ορισμένα πρότυπα μηδενικά και μονάδες θα σημαίνει, εκτυπώστε αυτό στην οθόνη, 238 00:11:37,040 --> 00:11:39,710 ή να προσθέσετε αυτούς τους δύο αριθμούς, ή αφαιρέσουμε αυτά τα δύο αριθμούς, 239 00:11:39,710 --> 00:11:43,310 ή να μετακινήσετε αυτό το κομμάτι των δεδομένων από μνήμη του υπολογιστή μου εδώ, 240 00:11:43,310 --> 00:11:47,870 ή οποιοδήποτε αριθμό άλλων πολύ χαμηλό επίπεδο, αλλά τελικά χρήσιμο, λειτουργίες. 241 00:11:47,870 --> 00:11:53,022 Αλλά, ευτυχώς, εμείς οι άνθρωποι δεν πρόκειται πρέπει να γνωρίζουν αυτό το επίπεδο λεπτομέρειας. 242 00:11:53,022 --> 00:11:56,230 Πράγματι, ακριβώς όπως την τελευταία φορά, όπου θα αντλείται ξανά, και ξανά, και ξανά, 243 00:11:56,230 --> 00:11:58,930 κτίριο από πολύ χαμηλό επίπεδο πρωτόγονων όπως μηδενικά και μονάδες 244 00:11:58,930 --> 00:12:01,160 σε υψηλότερο επίπεδο εννοιών όπως αριθμούς και γράμματα, 245 00:12:01,160 --> 00:12:04,330 και τα χρώματα, και πολλά άλλα, έτσι μπορούμε εμείς ως προγραμματιστές 246 00:12:04,330 --> 00:12:07,080 σταθεί στους ώμους του άλλοι που έχουν έρθει πριν από εμάς 247 00:12:07,080 --> 00:12:11,260 και να χρησιμοποιούν λογισμικό που άλλα οι άνθρωποι έχουν γράψει πριν ΕΜΕΙΣ-- 248 00:12:11,260 --> 00:12:14,340 συγκεκριμένα προγράμματα που ονομάζονται μεταγλωττιστές. 249 00:12:14,340 --> 00:12:17,770 >> C είναι μια γλώσσα που συνήθως συγκεντρώνονται, 250 00:12:17,770 --> 00:12:22,130 το οποίο σημαίνει ότι μετατρέπονται από πηγαίου κώδικα σε κώδικα μηχανής. 251 00:12:22,130 --> 00:12:25,230 Συγκεκριμένα, τι σημαίνει αυτό είναι ότι αν έχεις την πηγή σας 252 00:12:25,230 --> 00:12:29,530 κωδικό που εσείς γράφετε, όπως έχουμε σύντομα θα σε μια στιγμή στην οθόνη, 253 00:12:29,530 --> 00:12:33,140 και θέλετε να το μετατρέψετε τελικά στην μηχανή code-- 254 00:12:33,140 --> 00:12:37,100 αυτά τα μηδενικά και αυτοί που μόνο Mac ή το PC σας 255 00:12:37,100 --> 00:12:41,230 understands-- έχετε μια πρώτη Οι ζωοτροφές που τον πηγαίο κώδικα ως 256 00:12:41,230 --> 00:12:46,340 εισόδου σε μια ειδική πρόγραμμα που ονομάζεται ένα compiler, 257 00:12:46,340 --> 00:12:48,974 η έξοδος του οποίου θα δείτε είναι ο κώδικας μηχανής. 258 00:12:48,974 --> 00:12:51,890 Και, πράγματι, την τελευταία φορά που μιλήσαμε περίπου, πραγματικά, στο τέλος της ημέρας, 259 00:12:51,890 --> 00:12:52,610 επίλυση προβλήματος. 260 00:12:52,610 --> 00:12:53,360 Έχετε εισόδους. 261 00:12:53,360 --> 00:12:54,318 Και έχετε εξόδους. 262 00:12:54,318 --> 00:12:56,560 Και έχεις κάποιο είδος του αλγορίθμου στη μέση. 263 00:12:56,560 --> 00:12:59,830 >> Αλγόριθμοι μπορεί σίγουρα να είναι υλοποιείται σε λογισμικό, 264 00:12:59,830 --> 00:13:02,900 όπως είδαμε με ψευδοκώδικα την περασμένη εβδομάδα και όπως θα δούμε με το πραγματικό κώδικα 265 00:13:02,900 --> 00:13:03,490 αυτή την εβδομάδα. 266 00:13:03,490 --> 00:13:06,430 Και έτσι, ένα compiler πραγματικά ακριβώς έχει ένα σύνολο αλγορίθμων μέσα 267 00:13:06,430 --> 00:13:10,060 από αυτό που ξέρουν πώς να μετατρέπουν τις ειδικές λέξεις-κλειδιά, 268 00:13:10,060 --> 00:13:12,180 όπως κύρια και printf, και άλλοι που μόλις 269 00:13:12,180 --> 00:13:17,620 είδε στα πρότυπα μηδενικά και αυτοί ότι η Intel μέσα και άλλες CPUs 270 00:13:17,620 --> 00:13:20,020 πραγματικά καταλαβαίνει. 271 00:13:20,020 --> 00:13:22,460 Επομένως, πώς θα το κάνουμε αυτό; 272 00:13:22,460 --> 00:13:24,470 Πού θα πάρετε μια compiler; 273 00:13:24,470 --> 00:13:26,400 >> Οι περισσότεροι από εμάς εδώ έχουν ένα Mac ή PC. 274 00:13:26,400 --> 00:13:29,152 Και τρέχετε Mac OS, ή Windows ή Linux ή Solaris, 275 00:13:29,152 --> 00:13:30,860 ή οποιοδήποτε αριθμό άλλων λειτουργικά συστήματα. 276 00:13:30,860 --> 00:13:32,568 Και, πράγματι, θα μπορούσαμε να βγείτε στο διαδίκτυο 277 00:13:32,568 --> 00:13:35,710 και να κατεβάσετε ένα πρόγραμμα μεταγλώττισης για Mac ή το PC σας 278 00:13:35,710 --> 00:13:37,360 για το συγκεκριμένο λειτουργικό σας σύστημα. 279 00:13:37,360 --> 00:13:39,617 Αλλά όλοι θα είναι σε διαφορετικές σελίδες, να το πω έτσι. 280 00:13:39,617 --> 00:13:41,450 Εμείς θα έχουν ελαφρώς διαφορετικές διαμορφώσεις. 281 00:13:41,450 --> 00:13:43,210 Και τα πράγματα δεν θα μπορούσε να λειτουργήσει όλοι το ίδιο. 282 00:13:43,210 --> 00:13:45,280 Και, πράγματι, αυτές τις μέρες πολλοί από εμάς δεν χρησιμοποιούν 283 00:13:45,280 --> 00:13:47,516 λογισμικού που τρέχει μόνο σε φορητούς υπολογιστές μας. 284 00:13:47,516 --> 00:13:49,390 Αντ 'αυτού, χρησιμοποιούμε κάτι όπως ένα πρόγραμμα περιήγησης που 285 00:13:49,390 --> 00:13:52,930 μας επιτρέπει να έχουν πρόσβαση σε web-based εφαρμογών στο cloud. 286 00:13:52,930 --> 00:13:55,630 Και αργότερα αυτό το εξάμηνο, θα κάνουμε ακριβώς αυτό. 287 00:13:55,630 --> 00:13:59,660 Θα γράψουν εφαρμογές ή λογισμικού χρησιμοποιώντας code-- δεν C, 288 00:13:59,660 --> 00:14:02,860 αλλά και άλλες γλώσσες όπως Python και JavaScript-- που εκτελούνται στο cloud. 289 00:14:02,860 --> 00:14:05,860 >> Και για να το κάνουμε αυτό, εμείς οι ίδιοι κατά τη διάρκεια του εξαμήνου 290 00:14:05,860 --> 00:14:11,890 θα χρησιμοποιήσει πραγματικά μια cloud-based περιβάλλον γνωστό ως CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 Αυτή είναι μια web-based προγραμματισμό περιβάλλον, ή ολοκληρωμένη ανάπτυξη 292 00:14:16,030 --> 00:14:20,610 περιβάλλον, IDE, ότι είναι χτισμένο στην κορυφή μερικά λογισμικό ανοικτού κώδικα που ονομάζεται Cloud 9. 293 00:14:20,610 --> 00:14:22,966 Και έχουμε κάνει κάποια παιδαγωγική απλουστεύσεις για να την 294 00:14:22,966 --> 00:14:25,840 έτσι ώστε να κρύψει ορισμένα χαρακτηριστικά οι πρώτες εβδομάδες που δεν χρειαζόμαστε, 295 00:14:25,840 --> 00:14:27,770 μετά την οποία μπορείτε να αποκαλύπτουν τους και να κάνουν πιο 296 00:14:27,770 --> 00:14:29,400 ό, τι θέλετε με το περιβάλλον. 297 00:14:29,400 --> 00:14:32,470 >> Και αυτό μας επιτρέπει, επίσης, να προ-εγκατάσταση συγκεκριμένου λογισμικού. 298 00:14:32,470 --> 00:14:35,330 Τα πράγματα όπως το λεγόμενο CS50 βιβλιοθήκη, η οποία σύντομα θα δούμε 299 00:14:35,330 --> 00:14:39,210 μας παρέχει σε C με μερικά πρόσθετη λειτουργικότητα. 300 00:14:39,210 --> 00:14:44,392 Έτσι, αν πάνε, τελικά, CS50.io, θα σας ζητηθεί να συνδεθείτε, 301 00:14:44,392 --> 00:14:46,350 και μια φορά που κάνετε και να δημιουργήσετε ένας λογαριασμός για δωρεάν, 302 00:14:46,350 --> 00:14:52,150 θα είστε σε θέση να έχουν πρόσβαση σε μια περιβάλλον που μοιάζει αρκετά σαν αυτό. 303 00:14:52,150 --> 00:14:53,760 >> Τώρα, αυτό είναι στην προεπιλεγμένη λειτουργία. 304 00:14:53,760 --> 00:14:55,650 Τα πάντα είναι ωραία και φωτεινή στην οθόνη. 305 00:14:55,650 --> 00:14:57,941 Πολλοί από εμάς έχουν μια συνήθεια της που εργάζονται για το κομμάτι CS50 που είναι 306 00:14:57,941 --> 00:14:59,150 αρκετά αργά τη νύχτα. 307 00:14:59,150 --> 00:15:02,400 Και έτσι κάποιοι από εσάς μπορεί να προτιμούν να μετατρέψει σε νυχτερινή λειτουργία, να το πω έτσι. 308 00:15:02,400 --> 00:15:05,550 >> Αλλά, σε τελική ανάλυση, αυτό που είσαι πρόκειται να δείτε στο CS50 IDE 309 00:15:05,550 --> 00:15:08,340 Είναι τρεις διαφορετικές areas-- μια περιοχή στα αριστερά, όπου 310 00:15:08,340 --> 00:15:12,604 Τα αρχεία σας θα είναι στο σύννεφο, μια περιοχή στην πάνω δεξιά 311 00:15:12,604 --> 00:15:14,270 όπου κωδικό σας πρόκειται να είναι επεξεργάσιμο. 312 00:15:14,270 --> 00:15:16,650 Θα είστε σε θέση να ανοίξει ατομικές καρτέλες για κάθε πρόγραμμα 313 00:15:16,650 --> 00:15:19,670 ότι μπορείτε να γράψετε αυτό το εξάμηνο στο εσωτερικό του εν λόγω πάνω δεξιά γωνία. 314 00:15:19,670 --> 00:15:23,070 Και τότε οι περισσότεροι arcanely, και όμως με δύναμη, 315 00:15:23,070 --> 00:15:26,610 πρόκειται να είναι αυτό το πράγμα κατά τη πυθμένα είναι γνωστή ως ένα παράθυρο τερματικού. 316 00:15:26,610 --> 00:15:29,450 >> Αυτό είναι ένα παλιό σχολείο Command Line Interface, 317 00:15:29,450 --> 00:15:32,240 ή CLI, που επιτρέπει να εκτελέσει τις εντολές 318 00:15:32,240 --> 00:15:35,260 σχετικά με την computer-- σε αυτή την περίπτωση, ο υπολογιστής στο cloud-- 319 00:15:35,260 --> 00:15:39,090 για να κάνουμε τα πράγματα όπως καταρτίζουν τον κωδικό σας από τον πηγαίο κώδικα σε κώδικα μηχανής, 320 00:15:39,090 --> 00:15:43,600 για την εκτέλεση προγραμμάτων σας, ή για να ξεκινήσετε σας web server, ή να έχουν πρόσβαση σε βάση δεδομένων σας, 321 00:15:43,600 --> 00:15:47,454 και οποιοδήποτε αριθμό άλλων τεχνικών ότι θα αρχίσετε να χρησιμοποιείτε πριν από καιρό. 322 00:15:47,454 --> 00:15:49,370 Αλλά για να φτάσουμε εκεί, είμαστε πρόκειται να έχουν στην πραγματικότητα 323 00:15:49,370 --> 00:15:51,240 για να πάει σε απευθείας σύνδεση και να αρχίσετε να παίζετε. 324 00:15:51,240 --> 00:15:54,399 Και για να το κάνουμε αυτό, ας πρώτη ξεκινήσετε πειραματίζονται με κύριο, 325 00:15:54,399 --> 00:15:55,940 και να γράψει το κύριο μέρος του προγράμματος. 326 00:15:55,940 --> 00:15:59,170 Και ας χρησιμοποιήσουμε αυτή τη λειτουργία printf, το οποίο χρησιμοποιήσαμε νωρίτερα, 327 00:15:59,170 --> 00:16:01,050 απλά να πω κάτι. 328 00:16:01,050 --> 00:16:04,910 >> Έτσι, εδώ είμαι ήδη στο εσωτερικό του CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Έχω συνδεθεί εκ των προτέρων. 330 00:16:05,930 --> 00:16:07,360 Και εγώ πλήρη προβληθεί το παράθυρο. 331 00:16:07,360 --> 00:16:09,670 Και έτσι, τελικά, θα πάρα πολύ στο προσεχές προβλήματα 332 00:16:09,670 --> 00:16:12,960 θα ακολουθήσουν παρόμοια βήματα που θα παρέχει ηλεκτρονική τεκμηρίωση. 333 00:16:12,960 --> 00:16:16,360 Έτσι, δεν χρειάζεται να ανησυχείτε για απορροφώντας κάθε μικρό τεχνικό βήμα 334 00:16:16,360 --> 00:16:17,730 ότι κάνω εδώ σήμερα. 335 00:16:17,730 --> 00:16:19,222 >> Αλλά θα πάρετε μια οθόνη σαν αυτή. 336 00:16:19,222 --> 00:16:20,430 Τυχαίνει να είναι σε λειτουργία νύχτας. 337 00:16:20,430 --> 00:16:22,944 Και μπορείτε να φωτίζει τα πάντα up με την απενεργοποίηση της νυχτερινής λειτουργίας. 338 00:16:22,944 --> 00:16:24,860 Και στο τέλος της ημέρα, θα πάμε να δούμε 339 00:16:24,860 --> 00:16:30,090 αυτά τα τρία κύρια areas-- το αρχείο πρόγραμμα περιήγησης στα αριστερά, ο κώδικας καρτέλες επάνω στην κορυφή, 340 00:16:30,090 --> 00:16:32,430 και το τερματικό παράθυρο στο κάτω μέρος. 341 00:16:32,430 --> 00:16:34,890 >> Επιτρέψτε μου να προχωρήσει και να γράψει το πρώτο μου πρόγραμμα. 342 00:16:34,890 --> 00:16:42,300 Πάω να πάει προληπτικά σε αρχείο, Αποθήκευση και αποθηκεύστε το αρχείο μου ως hello.c. 343 00:16:42,300 --> 00:16:46,850 Πράγματι, κατά συνθήκη, κάθε μας πρόγραμμα γράφουν ότι είναι γραμμένο σε γλώσσα C 344 00:16:46,850 --> 00:16:49,739 θα πρέπει να ονομαστεί κάτι dot γ, κατά συνθήκη. 345 00:16:49,739 --> 00:16:53,030 Έτσι, Πάω να το ονομάσετε hello.c, επειδή Θέλω απλώς να πω ένα γεια στον κόσμο. 346 00:16:53,030 --> 00:16:54,820 Τώρα πάω για μεγέθυνση έξω και κάντε κλικ στο κουμπί Αποθήκευση. 347 00:16:54,820 --> 00:16:58,180 Και το μόνο που έχω τώρα εδώ είναι μια καρτέλα στο οποίο μπορώ να αρχίσετε να γράφετε κώδικα. 348 00:16:58,180 --> 00:16:59,490 >> Αυτό δεν πρόκειται να καταρτίσει. 349 00:16:59,490 --> 00:17:00,300 Αυτό δεν σημαίνει τίποτα. 350 00:17:00,300 --> 00:17:02,750 Και έτσι ακόμα κι αν μετατραπεί αυτό να μηδενικά και μονάδες, 351 00:17:02,750 --> 00:17:05,390 η CPU πρόκειται να έχει καμία ιδέα για το τι συμβαίνει γύρω. 352 00:17:05,390 --> 00:17:14,170 Αλλά αν γράφω γραμμές που ταιριάζουν με conventions-- C ον Γ, 353 00:17:14,170 --> 00:17:20,150 και πάλι, αυτό language-- με τη σύνταξη, όπως αυτό, printf γεια world-- και έχω 354 00:17:20,150 --> 00:17:22,210 πάρει άνετα με αυτόν τον τρόπο την πάροδο του χρόνου. 355 00:17:22,210 --> 00:17:24,510 Έτσι, δεν νομίζω ότι έκανα τυχόν τυπογραφικά λάθη. 356 00:17:24,510 --> 00:17:27,910 >> Αλλά, πάντα, το πρώτο φορά που το κάνετε αυτό, θα σας. 357 00:17:27,910 --> 00:17:31,090 Και τι είμαι έτοιμος να κάνω ίσως πολύ και δεν λειτουργεί για σας την πρώτη φορά. 358 00:17:31,090 --> 00:17:33,610 Και αυτό είναι απολύτως εντάξει, γιατί τώρα σας 359 00:17:33,610 --> 00:17:37,662 μπορεί να δει μόνο ένα σωρό νεότητα, αλλά με την πάροδο του χρόνου μόλις εξοικειωθείτε 360 00:17:37,662 --> 00:17:39,870 με αυτό το περιβάλλον, και Αυτή η γλώσσα, και άλλοι, 361 00:17:39,870 --> 00:17:42,370 θα αρχίσετε να βλέπετε τα πράγματα ότι είτε είναι σωστή ή λανθασμένη. 362 00:17:42,370 --> 00:17:44,369 >> Και αυτό είναι ό, τι το διδασκαλία τους συνανθρώπους και την πορεία 363 00:17:44,369 --> 00:17:48,780 βοηθούς πάρει τόσο καλοί στο πέρασμα του χρόνου, είναι εντοπισμό λάθη ή σφάλματα στον κώδικά σας. 364 00:17:48,780 --> 00:17:52,110 Αλλά εγώ ισχυρίζονται ότι υπάρχει υπάρχουν σφάλματα σε αυτόν τον κώδικα. 365 00:17:52,110 --> 00:17:53,990 Γι 'αυτό και τώρα θέλετε να εκτελέσετε αυτό το πρόγραμμα. 366 00:17:53,990 --> 00:17:57,440 >> Τώρα για τη δική μου Mac ή PC, είμαι σε η συνήθεια της διπλής εικονίδια κλικ 367 00:17:57,440 --> 00:17:59,350 όταν θέλω να τρέχει κάποιο πρόγραμμα. 368 00:17:59,350 --> 00:18:01,080 Αλλά αυτό δεν είναι το μοντέλο εδώ. 369 00:18:01,080 --> 00:18:04,570 Σε αυτό το περιβάλλον, η οποία είναι CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Είμαστε χρησιμοποιώντας ένα λειτουργικό σύστημα που ονομάζεται Linux. 371 00:18:07,192 --> 00:18:09,900 Linux θυμίζει ένα άλλο λειτουργικό σύστημα, είναι γενικά γνωστές 372 00:18:09,900 --> 00:18:10,850 όπως Unix. 373 00:18:10,850 --> 00:18:16,340 Και το Linux είναι ιδιαίτερα γνωστή για έχει μια γραμμή εντολών Περιβάλλοντος, CLI. 374 00:18:16,340 --> 00:18:20,070 Τώρα, είμαστε χρησιμοποιώντας ένα ειδικό γεύση του Linux που ονομάζεται Ubuntu. 375 00:18:20,070 --> 00:18:22,770 Και το Ubuntu είναι απλά ένα ορισμένες έκδοση του Linux. 376 00:18:22,770 --> 00:18:27,900 >> Αλλά αυτά τα Linux αυτές τις μέρες κάνει πραγματικότητα έρχονται με γραφικές διεπαφές χρήστη. 377 00:18:27,900 --> 00:18:30,360 Και το ένα τυχαίνει να να χρησιμοποιούν εδώ είναι web-based. 378 00:18:30,360 --> 00:18:32,735 Έτσι, αυτό μπορεί να μοιάζει ακόμη και μια λίγο διαφορετικό από κάτι 379 00:18:32,735 --> 00:18:35,310 εσείς ο ίδιος θα μπορούσε να έχει δει ή να τρέξει στο παρελθόν. 380 00:18:35,310 --> 00:18:37,910 >> Έτσι, Πάω να πάει μπροστά τώρα και να κάνουμε το εξής. 381 00:18:37,910 --> 00:18:40,950 Έχω αποθηκεύσει αυτό το αρχείο ως hello.c. 382 00:18:40,950 --> 00:18:47,350 Πάω να πάει μπροστά και να Τύπος clanghello.c Έτσι Clang 383 00:18:47,350 --> 00:18:49,850 για τη γλώσσα C είναι ένας compiler. 384 00:18:49,850 --> 00:18:51,952 Είναι προ-εγκατεστημένο στο CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 Και πρέπει οπωσδήποτε να κατεβάσετε και να εγκαταστήσετε αυτό για τη δική σας Mac ή PC. 386 00:18:54,910 --> 00:18:57,910 >> Αλλά, πάλι, δεν θα έχουν όλα η προ-ρύθμιση γίνεται για σας. 387 00:18:57,910 --> 00:19:00,940 Έτσι, για τώρα, είμαι απλά πρόκειται να τρέξει clanghello.c. 388 00:19:00,940 --> 00:19:03,240 Και τώρα παρατηρήσετε αυτή τη σύνταξη εδώ τελικά θα 389 00:19:03,240 --> 00:19:06,930 συνειδητοποιήσει απλά σημαίνει ότι είμαι σε μια φάκελο ή κατάλογο που ονομάζεται Workspace. 390 00:19:06,930 --> 00:19:11,030 Αυτό το σύμβολο του δολαρίου είναι μόνο σύμβαση για την έννοια, πληκτρολογήστε τις εντολές σας εδώ. 391 00:19:11,030 --> 00:19:14,560 >> Είναι αυτό που ονομάζεται ένα μήνυμα, απλά κατά συνθήκη είναι το σύμβολο του δολαρίου. 392 00:19:14,560 --> 00:19:19,130 Και αν πάω μπροστά τώρα και κάντε κλικ Εισάγετε, τίποτα δεν φαίνεται να έχει συμβεί. 393 00:19:19,130 --> 00:19:20,930 Αλλά αυτό είναι πραγματικά ένα καλό πράγμα. 394 00:19:20,930 --> 00:19:23,650 Το λιγότερο που συμβαίνει σε οθόνη σας, το πιο πιθανό 395 00:19:23,650 --> 00:19:26,710 κωδικός σας είναι να είναι σωστή, τουλάχιστον συντακτικά. 396 00:19:26,710 --> 00:19:29,120 >> Έτσι, αν θέλετε να εκτελέσετε αυτό το πρόγραμμα, τι μπορώ να κάνω; 397 00:19:29,120 --> 00:19:33,770 Λοιπόν, αποδεικνύεται ότι η προεπιλεγμένο όνομα με βάση σύμβαση 398 00:19:33,770 --> 00:19:38,854 για τα προγράμματα όταν δεν ορίσετε ένα όνομα για το πρόγραμμά σας είναι ακριβώς a.out. 399 00:19:38,854 --> 00:19:41,270 Και αυτή η σύνταξη πάρα πολύ, θα εξοικειωθείτε με πριν από καιρό. 400 00:19:41,270 --> 00:19:47,500 >> Dot κάθετος ακριβώς σημαίνει, hey, CS50 IDE, τρέχει ένα πρόγραμμα που ονομάζεται a.out 401 00:19:47,500 --> 00:19:49,400 που είναι μέσα στον τρέχοντα κατάλογο μου. 402 00:19:49,400 --> 00:19:51,520 Αυτό τελεία σημαίνει τον τρέχοντα κατάλογο. 403 00:19:51,520 --> 00:19:55,040 Και θα δούμε τι άλλες τέτοιες ακολουθίες χαρακτήρων σημαίνει πριν από καιρό. 404 00:19:55,040 --> 00:19:58,430 >> Έτσι, εδώ πηγαίνουμε, Enter, γεια κόσμο. 405 00:19:58,430 --> 00:20:00,080 Και θα παρατηρήσετε, ότι αυτό που συνέβη; 406 00:20:00,080 --> 00:20:01,580 Όχι μόνο δεν θα εκτυπώσετε hello world. 407 00:20:01,580 --> 00:20:05,990 Κινήθηκε επίσης η δρομέα στην επόμενη γραμμή. 408 00:20:05,990 --> 00:20:07,160 >> Και γιατί έγινε αυτό; 409 00:20:07,160 --> 00:20:12,400 Τι ήταν ο κώδικας που γράψαμε πριν ότι εξασφαλίζεται ότι ο κέρσορας θα 410 00:20:12,400 --> 00:20:14,882 πηγαίνετε στην επόμενη γραμμή; 411 00:20:14,882 --> 00:20:16,840 Αστείο πράγμα για ένα υπολογιστής είναι πρόκειται μόνο 412 00:20:16,840 --> 00:20:18,570 να κάνει κυριολεκτικά ό, τι θα πει να κάνουμε. 413 00:20:18,570 --> 00:20:26,050 >> Έτσι, αν το πείτε για να printf γεια, κόμμα, το διάστημα, τον κόσμο, κοντά απόσπασμα, 414 00:20:26,050 --> 00:20:29,090 αυτό είναι κυριολεκτικά μόνο θα για να εκτυπώσετε αυτούς τους χαρακτήρες. 415 00:20:29,090 --> 00:20:31,980 Αλλά είχα αυτό το ειδικό χαρακτήρα στο τέλος, ανάκληση, backslash n. 416 00:20:31,980 --> 00:20:34,230 Και αυτό είναι που εξασφάλισε ότι ο χαρακτήρας πήγε 417 00:20:34,230 --> 00:20:36,570 στην επόμενη γραμμή της οθόνης. 418 00:20:36,570 --> 00:20:38,097 >> Στην πραγματικότητα, επιτρέψτε μου να πάω και να το κάνουμε αυτό. 419 00:20:38,097 --> 00:20:39,430 Επιτρέψτε μου να προχωρήσει και να διαγράψετε αυτό. 420 00:20:39,430 --> 00:20:41,180 Τώρα, παρατηρούμε ότι η πάνω μέρος της οθόνης μου δεν υπάρχει 421 00:20:41,180 --> 00:20:42,890 λίγο κόκκινο φως στην η καρτέλα δείχνει, 422 00:20:42,890 --> 00:20:45,047 hey, δεν έχετε αποθηκεύσει το αρχείο σας. 423 00:20:45,047 --> 00:20:47,880 Έτσι, Πάω να προχωρήσει με τον έλεγχο S ή εντολή S, αποθηκεύστε το αρχείο. 424 00:20:47,880 --> 00:20:51,130 Τώρα goes-- πήγε για ένα moment-- πράσινο. 425 00:20:51,130 --> 00:20:53,760 Και τώρα είναι πίσω στο απλά να είναι μια στενή εικονίδιο. 426 00:20:53,760 --> 00:21:01,860 >> Αν τρέξω τώρα clanghello.c και πάλι, Enter, dot κάθετος, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 θα δείτε ότι εξακολουθεί να εργαστεί. 428 00:21:04,110 --> 00:21:06,020 Αλλά είναι αναμφισβήτητα ένα μικρό αμαξάκι. 429 00:21:06,020 --> 00:21:08,714 Αυτή τη στιγμή, prompt-- χώρο εργασίας μου, και, στη συνέχεια, ότι το σύμβολο του δολαρίου, 430 00:21:08,714 --> 00:21:10,880 και, στη συνέχεια, την πραγματική prompt-- μου είναι όλα στην ίδια γραμμή. 431 00:21:10,880 --> 00:21:14,540 Έτσι, αυτό σίγουρα ένα αισθητικό σφάλμα, ακόμη και αν δεν είναι πραγματικά ένα λογικό σφάλμα. 432 00:21:14,540 --> 00:21:16,250 >> Έτσι, Πάω να αναιρέσετε αυτό που μόλις έκανε. 433 00:21:16,250 --> 00:21:18,560 Πάω να επαναληφθεί a.out. 434 00:21:18,560 --> 00:21:22,710 Ανακοίνωση Έχω προσθέσει το αλλαγή γραμμής πίσω χαρακτήρα. 435 00:21:22,710 --> 00:21:24,280 Έχω αποθηκεύσει το αρχείο. 436 00:21:24,280 --> 00:21:31,630 >> Έτσι, Πάω να επαναληφθεί a.out, and-- διάολε, ένα bug, ένα bug που σημαίνει λάθος. 437 00:21:31,630 --> 00:21:35,020 Έτσι, το σφάλμα είναι ότι ακόμα κι αν Πρόσθεσα την ανάστροφη κάθετο n εκεί, 438 00:21:35,020 --> 00:21:41,180 εκ νέου σωθεί, εκ νέου έτρεξε το πρόγραμμα, η συμπεριφορά ήταν το ίδιο. 439 00:21:41,180 --> 00:21:42,640 Γιατί θα ήταν αυτό; 440 00:21:42,640 --> 00:21:43,910 >> Είμαι λείπει ένα βήμα, έτσι δεν είναι; 441 00:21:43,910 --> 00:21:47,620 Ότι βασικό βήμα νωρίτερα ήταν ότι έχετε to-- όταν αλλάζετε τον πηγαίο κώδικα σας, 442 00:21:47,620 --> 00:21:49,610 αποδεικνύεται επίσης να εκτελέσετε μέσω του compiler 443 00:21:49,610 --> 00:21:51,102 και πάλι έτσι μπορείτε να πάρετε νέο κώδικα μηχανής. 444 00:21:51,102 --> 00:21:52,810 Και ο κώδικας της μηχανής, τα μηδενικά και μονάδες, 445 00:21:52,810 --> 00:21:56,260 πρόκειται να είναι σχεδόν όμοια, αλλά όχι τέλεια, διότι χρειαζόμαστε, 446 00:21:56,260 --> 00:21:57,510 Φυσικά, η νέα γραμμή. 447 00:21:57,510 --> 00:22:02,640 >> Έτσι για να το διορθώσετε αυτό, Πάω να χρειαστεί να επαναληφθεί clanghello.c, εισάγετε, τελεία 448 00:22:02,640 --> 00:22:03,800 κάθετος, a.out. 449 00:22:03,800 --> 00:22:08,402 Και τώρα, γεια σου κόσμος είναι πίσω όπου περιμένω να είναι. 450 00:22:08,402 --> 00:22:09,610 Έτσι, αυτό είναι όλα ωραία και καλά. 451 00:22:09,610 --> 00:22:13,150 Αλλά a.out είναι ένα πολύ ηλίθιο όνομα για ένα πρόγραμμα, αν και συμβαίνει να είναι, 452 00:22:13,150 --> 00:22:16,530 για ιστορικούς λόγους, η default-- σημαίνει εξόδους συναρμολόγησης. 453 00:22:16,530 --> 00:22:20,780 >> Αλλά επιτρέψτε μου να προχωρήσει εδώ και να το κάνουμε αυτό με διαφορετικό τρόπο. 454 00:22:20,780 --> 00:22:24,760 Θέλω γεια κόσμο μου πρόγραμμα πραγματικά να ονομάζεται γεια. 455 00:22:24,760 --> 00:22:28,320 Έτσι, αν ήταν ένα εικονίδιο στην μου επιφάνεια εργασίας, δεν θα πρέπει να a.out. 456 00:22:28,320 --> 00:22:29,730 Θα πρέπει να ονομάζεται γεια. 457 00:22:29,730 --> 00:22:33,660 >> Έτσι για να το κάνετε αυτό, αποδεικνύεται ότι Clang, όπως πολλά προγράμματα, 458 00:22:33,660 --> 00:22:37,980 υποστηρίζει τα επιχειρήματα της γραμμής εντολών, ή σημαίες ή διακόπτες, 459 00:22:37,980 --> 00:22:39,600 που απλώς επηρεάζουν τη συμπεριφορά του. 460 00:22:39,600 --> 00:22:45,160 Συγκεκριμένα, Clang υποστηρίζει μια εξόρμηση o σημαία, τα οποία στη συνέχεια παίρνει μια δεύτερη λέξη. 461 00:22:45,160 --> 00:22:48,190 Σε αυτήν την περίπτωση, θα αυθαίρετα, αλλά λογικά, αποκαλούν γεια. 462 00:22:48,190 --> 00:22:50,710 Αλλά θα μπορούσα να το ονομάσουμε κάτι Θέλω, εκτός a.out, η οποία 463 00:22:50,710 --> 00:22:52,390 Θα ήταν μάλλον εκτός από το σημείο. 464 00:22:52,390 --> 00:22:55,640 >> Και στη συνέχεια απλά να καθορίσετε το όνομα του αρχείου που θέλετε να μεταγλωττίσετε. 465 00:22:55,640 --> 00:22:59,190 Έτσι τώρα, ακόμη και αν στην αρχή της εντολής έχω ακόμα Clang, 466 00:22:59,190 --> 00:23:01,410 στο τέλος της εντολής Εξακολουθώ να έχω το όνομα του αρχείου, 467 00:23:01,410 --> 00:23:05,520 Τώρα έχω αυτά της γραμμής εντολών επιχειρήματα, αυτές οι σημαίες που λένε, 468 00:23:05,520 --> 00:23:11,180 Ω, από τον τρόπο, έξοδος-o, ένα αρχείο που ονομάζεται γεια, δεν είναι η προεπιλογή a.out. 469 00:23:11,180 --> 00:23:13,810 >> Έτσι, αν χτύπησα Εισάγετε τώρα, τίποτα φαίνεται να έχουν συμβεί. 470 00:23:13,810 --> 00:23:17,900 Και, όμως, τώρα μπορώ να κάνω dot κάθετος γεια. 471 00:23:17,900 --> 00:23:19,089 Έτσι είναι το ίδιο πρόγραμμα. 472 00:23:19,089 --> 00:23:21,380 Τα μηδενικά και αυτοί είναι ταυτόσημες στο τέλος της ημέρας. 473 00:23:21,380 --> 00:23:24,210 >> Αλλά είναι σε δύο διαφορετικά files-- a.out, 474 00:23:24,210 --> 00:23:26,490 η οποία είναι η πρώτη έκδοση και μόλις ανόητα ονομάζεται, 475 00:23:26,490 --> 00:23:30,250 και τώρα γειά σου, η οποία είναι μια πολύ πιο συναρπαστικό όνομα για ένα πρόγραμμα. 476 00:23:30,250 --> 00:23:33,195 Αλλά, ειλικρινά, είμαι ποτέ πρόκειται να το θυμάστε αυτό και πάλι, 477 00:23:33,195 --> 00:23:34,070 και ξανά, και ξανά. 478 00:23:34,070 --> 00:23:36,411 Και, στην πραγματικότητα, όπως γράφουμε πιο πολύπλοκα προγράμματα, 479 00:23:36,411 --> 00:23:38,160 οι εντολές είστε Θα πρέπει να γράψετε 480 00:23:38,160 --> 00:23:40,920 πρόκειται να πάρει ακόμη πιο περίπλοκη ακόμα. 481 00:23:40,920 --> 00:23:41,940 >> Και έτσι για να μην ανησυχείτε. 482 00:23:41,940 --> 00:23:46,220 Αποδεικνύεται ότι οι άνθρωποι πριν μας έχουν συνειδητοποιήσει ότι είναι πολύ 483 00:23:46,220 --> 00:23:47,530 είχε ακριβώς το ίδιο πρόβλημα. 484 00:23:47,530 --> 00:23:50,900 Και αυτοί δεν απολαμβάνουν να χρειάζεται να πληκτρολογήστε αρκετά μεγάλο, απόκρυφες εντολές, 485 00:23:50,900 --> 00:23:52,200 πόσο μάλλον να τους θυμόμαστε. 486 00:23:52,200 --> 00:23:56,070 Και έτσι οι άνθρωποι πριν από εμάς έχουν κάνει άλλα προγράμματα που διευκολύνουν 487 00:23:56,070 --> 00:23:57,670 για την κατάρτιση του λογισμικού σας. 488 00:23:57,670 --> 00:24:01,609 >> Και, πράγματι, ένας τέτοιος πρόγραμμα ονομάζεται Make. 489 00:24:01,609 --> 00:24:03,150 Έτσι, Πάω να προχωρήσει και να το κάνουμε αυτό. 490 00:24:03,150 --> 00:24:05,691 Πάω να αναιρέσετε ό, τι ακριβώς έκανε με τον ακόλουθο τρόπο. 491 00:24:05,691 --> 00:24:07,690 Επιτρέψτε μου να πληκτρολογήσετε LS. 492 00:24:07,690 --> 00:24:10,980 Και θα παρατηρήσετε τρεις things-- a.out, και ένα αστέρι, γεια 493 00:24:10,980 --> 00:24:12,810 και ένα αστέρι, και hello.c. 494 00:24:12,810 --> 00:24:14,730 Ας ελπίσουμε ότι αυτό θα πρέπει να είναι λίγο διαισθητική, 495 00:24:14,730 --> 00:24:18,220 εφόσον νωρίτερα υπήρχε τίποτα σε αυτόν τον χώρο εργασίας. 496 00:24:18,220 --> 00:24:21,240 Δεν υπήρχε τίποτα που είχα δημιουργήθηκε μέχρι να αρχίσει κατηγορία. 497 00:24:21,240 --> 00:24:22,840 >> Και έχω δημιουργήσει hello.c. 498 00:24:22,840 --> 00:24:24,544 Στη συνέχεια θα καταρτίζονται, και το ονόμασε a.out. 499 00:24:24,544 --> 00:24:27,460 Και τότε μου συγκεντρώνονται και πάλι ελαφρώς με διαφορετικό τρόπο και ονομάζεται γεια. 500 00:24:27,460 --> 00:24:32,830 Έτσι έχω τρία αρχεία σε αυτόν τον κατάλογο, σε αυτόν το φάκελο που ονομάζεται Workspace. 501 00:24:32,830 --> 00:24:35,005 Τώρα, βλέπω ότι, καθώς αν σμίκρυνση πραγματικότητα. 502 00:24:35,005 --> 00:24:37,530 >> Αν μου σμίκρυνση εδώ και κοίτα πάνω δεξιά πλευρά 503 00:24:37,530 --> 00:24:39,940 γωνία, όπως είχε υποσχεθεί η αριστερά πλευρά της οθόνης σας 504 00:24:39,940 --> 00:24:42,990 πρόκειται πάντα να σας δείξω τι είναι στο λογαριασμό σας, τι είναι 505 00:24:42,990 --> 00:24:44,790 εσωτερικό του CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 Και υπάρχει τρία αρχεία εκεί. 507 00:24:46,680 --> 00:24:49,070 >> Θέλω, λοιπόν, να απαλλαγούμε από a.out και γειά σου. 508 00:24:49,070 --> 00:24:51,275 Και όπως ίσως φανταστείτε διαισθητικά, θα 509 00:24:51,275 --> 00:24:53,400 θα μπορούσε να ταξινομήσετε του ελέγχου κλικ ή κάντε δεξί κλικ σε αυτό. 510 00:24:53,400 --> 00:24:54,590 Και αυτό το μικρό μενού αναδύεται. 511 00:24:54,590 --> 00:24:57,170 Μπορείτε να κατεβάσετε το αρχείο, εκτελέστε αυτό, προεπισκόπηση, ανανεώνουν, να μετονομάσετε, 512 00:24:57,170 --> 00:24:57,700 ή τι όχι. 513 00:24:57,700 --> 00:25:00,260 >> Και θα μπορούσα απλά να διαγράψετε, και θα πάει μακριά. 514 00:25:00,260 --> 00:25:05,260 Αλλά ας κάνουμε τα πράγματα με μια εντολή γραμμή για τώρα, έτσι ώστε να πάρει άνετα 515 00:25:05,260 --> 00:25:07,010 με αυτό, και να κάνουμε το εξής. 516 00:25:07,010 --> 00:25:12,345 Πάω να πάει μπροστά και να αφαιρέσετε a.out πληκτρολογώντας κυριολεκτικά rma.out. 517 00:25:12,345 --> 00:25:14,890 Αποδεικνύεται, την εντολή για αφαίρεση ή διαγραφή κάτι, 518 00:25:14,890 --> 00:25:16,280 δεν είναι αφαιρέσετε ή να διαγράψετε. 519 00:25:16,280 --> 00:25:21,260 >> Είναι πιο συνοπτικά RM, απλά για να σώσει σας μερικές πληκτρολογήσεις, και πατήστε Enter. 520 00:25:21,260 --> 00:25:24,707 Τώρα θα πάμε να είναι κάπως κρυφά αφαιρέσετε τακτική a.out αρχείο. 521 00:25:24,707 --> 00:25:27,040 Δεν ξέρω πραγματικά τι ένα ακανόνιστο αρχείο θα είναι ακόμα. 522 00:25:27,040 --> 00:25:28,660 Αλλά θέλω να το αφαιρέσετε. 523 00:25:28,660 --> 00:25:30,150 >> Έτσι, Πάω να y τύπου για ναι. 524 00:25:30,150 --> 00:25:31,940 Ή θα μπορούσα να το πληκτρολογήσετε και πατήστε Enter. 525 00:25:31,940 --> 00:25:33,440 Και, πάλι, τίποτα δεν φαίνεται να συμβαίνει. 526 00:25:33,440 --> 00:25:35,840 Αλλά αυτό είναι, σε γενικές γραμμές, ένα καλό πράγμα. 527 00:25:35,840 --> 00:25:40,490 >> Αν έχω πληκτρολογήστε LS αυτή τη φορά, τι πρέπει να δω; 528 00:25:40,490 --> 00:25:44,930 Ας ελπίσουμε, μόνο γεια και hello.c. 529 00:25:44,930 --> 00:25:47,286 Τώρα, ως ένα μέρος, θα παρατηρήσετε αυτό το αστέρι, αστερίσκος, 530 00:25:47,286 --> 00:25:48,660 ότι στο τέλος των προγραμμάτων μου. 531 00:25:48,660 --> 00:25:50,201 Και είναι επίσης εμφανίζονται με πράσινο χρώμα. 532 00:25:50,201 --> 00:25:53,970 Αυτός είναι ακριβώς ο τρόπος CS50 IDE του της cluing σας στο γεγονός 533 00:25:53,970 --> 00:25:55,280 ότι αυτό δεν είναι πηγαίο κώδικα. 534 00:25:55,280 --> 00:25:58,880 Αυτό είναι ένα εκτελέσιμο, μια εκτελέσιμη πρόγραμμα που μπορείτε πραγματικά να τρέξει 535 00:25:58,880 --> 00:26:01,020 κάνοντας dot κάθετος, και στη συνέχεια το όνομά της. 536 00:26:01,020 --> 00:26:05,860 >> Τώρα, επιτρέψτε μου να πάει μπροστά και να αφαιρέσετε αυτό, RM γεια, Enter, αφαιρέστε την τακτική 537 00:26:05,860 --> 00:26:08,010 αρχείο γεια, ναι. 538 00:26:08,010 --> 00:26:11,180 Και τώρα αν πληκτρολογήσετε LS, είμαστε πίσω στο hello.c. 539 00:26:11,180 --> 00:26:13,917 Προσπαθήστε να μην διαγράψετε σας τον πηγαίο κώδικα. 540 00:26:13,917 --> 00:26:16,250 Ακόμα κι αν υπάρχουν δυνατότητες ενσωματωμένη στο CS50 IDE όπου 541 00:26:16,250 --> 00:26:19,870 μπορείτε να πάτε μέσα από την ιστορία αναθεώρησης σας και rewind στο χρόνο, αν κατά λάθος 542 00:26:19,870 --> 00:26:23,660 διαγράψετε κάτι, το κάνουμε να είναι προσεκτικοί σύμφωνα με αυτές τις προτροπές ναι ή όχι, 543 00:26:23,660 --> 00:26:25,381 για το τι πραγματικά θέλετε να κάνετε. 544 00:26:25,381 --> 00:26:27,380 Και αν πάω μέχρι την κορυφή αριστερή γωνία εδώ, 545 00:26:27,380 --> 00:26:30,696 το μόνο που απομένει είναι hello.c. 546 00:26:30,696 --> 00:26:32,570 Έτσι υπάρχει ματσάκια άλλες εντολές που 547 00:26:32,570 --> 00:26:37,550 μπορεί να εκτελέσει στον κόσμο του Linux, ένα εκ των οποίων είναι, και πάλι, Μάρκα. 548 00:26:37,550 --> 00:26:40,180 Και θα πάμε για να βγάλουν πρόγραμμά μου τώρα ως εξής. 549 00:26:40,180 --> 00:26:43,270 >> Αντί να κάνει κλαγγή, αντί να κάνει κλαγγή-o, 550 00:26:43,270 --> 00:26:45,860 Πάω να απλά κυριολεκτικά τύπου, κάνουν γεια. 551 00:26:45,860 --> 00:26:49,630 Και τώρα παρατηρήσετε, είμαι Δεν πληκτρολογώντας κάνουν hello.c. 552 00:26:49,630 --> 00:26:50,910 Είμαι πληκτρολογώντας make γεια. 553 00:26:50,910 --> 00:26:54,840 >> Και αυτό το πρόγραμμα Βεβαιωθείτε ότι έρχεται με CS50 IDE, και πολλά άλλα 554 00:26:54,840 --> 00:26:57,090 γενικά με το Linux, είναι ένα πρόγραμμα που είναι 555 00:26:57,090 --> 00:26:59,120 πρόκειται να κάνει ένα πρόγραμμα που ονομάζεται Hello. 556 00:26:59,120 --> 00:27:03,680 Και πρόκειται να αναλάβει, κατά συνθήκη, ότι, αν μπορεί να γίνει αυτό το πρόγραμμα, 557 00:27:03,680 --> 00:27:09,030 πρόκειται να γίνει από μια πηγή αρχείο κώδικα που τελειώνουν σε τελεία γ, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Έτσι, αν χτύπησα Εισάγετε τώρα, παρατηρήστε ότι η εντολή που παίρνει εκτελεστεί 559 00:27:12,210 --> 00:27:14,340 είναι στην πραγματικότητα ακόμη περισσότερο πριν από ό, τι πριν. 560 00:27:14,340 --> 00:27:16,670 Και αυτό γιατί έχουμε προρυθμισμένο CS50 IDE να έχουν 561 00:27:16,670 --> 00:27:19,878 κάποια επιπλέον χαρακτηριστικά που χτίστηκε το ότι δεν χρειαζόμαστε λίγο ακόμα, αλλά σύντομα θα. 562 00:27:19,878 --> 00:27:23,470 Αλλά το βασικό πράγμα που πρέπει να συνειδητοποιήσουμε Είναι τώρα έχω ένα πρόγραμμα Hello. 563 00:27:23,470 --> 00:27:27,080 >> Αν μου πληκτρολογήσετε ξανά LS, Ι έχουν ένα πρόγραμμα γεια. 564 00:27:27,080 --> 00:27:32,070 Και μπορώ να το τρέξει με dot κάθετος a.out, όχι, 565 00:27:32,070 --> 00:27:35,590 επειδή το όλο θέμα αυτό άσκηση ήταν dot γεια κάθετος. 566 00:27:35,590 --> 00:27:38,089 Και τώρα έχω γεια κόσμο μου πρόγραμμα. 567 00:27:38,089 --> 00:27:39,880 Έτσι κινείται προς τα εμπρός, είμαστε σχεδόν πάντα απλά 568 00:27:39,880 --> 00:27:42,088 πρόκειται για την κατάρτιση των προγραμμάτων μας χρησιμοποιώντας την εντολή make. 569 00:27:42,088 --> 00:27:45,300 Και μετά θα πάμε να τους τρέξει από dot κάθετος, και το όνομα του προγράμματος. 570 00:27:45,300 --> 00:27:49,610 Αλλά συνειδητοποιούν αυτό που κάνει το κάνει για σας, είναι ότι είναι μόνη της δεν είναι ένα compiler. 571 00:27:49,610 --> 00:27:53,310 Είναι απλά ένα πρόγραμμα ευκολία ότι ξέρει πώς να προκαλέσει μια compiler 572 00:27:53,310 --> 00:27:56,470 να τρέξει, ώστε να μπορείτε μόνοι σας να το χρησιμοποιήσετε. 573 00:27:56,470 --> 00:28:00,220 >> Τι υπάρχουν και άλλες εντολές στο Linux, και με τη σειρά του το CS50 IDE; 574 00:28:00,220 --> 00:28:03,107 Σύντομα θα δούμε ότι υπάρχει μια εντολή CD, Αλλαγή Directory. 575 00:28:03,107 --> 00:28:05,190 Αυτό σας επιτρέπει μέσα διεπαφή γραμμής εντολών σας 576 00:28:05,190 --> 00:28:07,610 να προχωρήσουμε μπροστά, και πίσω, και να ανοίξει διαφορετικούς φακέλους 577 00:28:07,610 --> 00:28:08,860 χωρίς τη χρήση του ποντικιού σας. 578 00:28:08,860 --> 00:28:12,470 >> LS είδαμε, η οποία αντιπροσωπεύει για τη λίστα τα αρχεία στον τρέχοντα κατάλογο. 579 00:28:12,470 --> 00:28:14,650 Κάντε Dir, μπορείτε πιθανόν να αρχίσει να συμπεράνουμε 580 00:28:14,650 --> 00:28:18,150 τι σημαίνουν αυτά now-- κάνει τον κατάλογο, εάν θέλετε να δημιουργήσετε ένα φάκελο. 581 00:28:18,150 --> 00:28:21,270 RM για αφαίρεση, RM Dir για αφαιρέστε directory-- και αυτά, 582 00:28:21,270 --> 00:28:24,160 και πάλι, είναι η γραμμή εντολών ισοδύναμα τι 583 00:28:24,160 --> 00:28:26,945 θα μπορούσε να κάνει σε CS50 IDE με το ποντίκι σας. 584 00:28:26,945 --> 00:28:28,820 Αλλά σύντομα θα βρείτε ότι μερικές φορές είναι απλά 585 00:28:28,820 --> 00:28:30,610 πολύ πιο γρήγορα για να κάνει τα πράγματα με ένα πληκτρολόγιο, 586 00:28:30,610 --> 00:28:33,690 και τελικά μια πολύ πιο ισχυρή. 587 00:28:33,690 --> 00:28:36,440 >> Αλλά είναι δύσκολο να υποστηρίξει κανείς ότι η οτιδήποτε έχουμε κάνει μέχρι τώρα 588 00:28:36,440 --> 00:28:39,990 είναι ότι οι ισχυροί, όταν όλα έχουμε πει είναι, γεια κόσμο. 589 00:28:39,990 --> 00:28:43,740 Και, στην πραγματικότητα, είναι ενσωματωμένες η λέξεις Hello World στο πρόγραμμά μου. 590 00:28:43,740 --> 00:28:45,530 Δεν υπάρχει δυναμισμό ακόμα. 591 00:28:45,530 --> 00:28:49,320 Scratch ήταν μια τάξη μεγέθους πιο ενδιαφέρουσα την περασμένη εβδομάδα. 592 00:28:49,320 --> 00:28:51,220 >> Και έτσι ας φτάσει εκεί. 593 00:28:51,220 --> 00:28:55,310 Ας κάνουμε ένα βήμα προς την κατεύθυνση ότι με την τρόπος μερικών από αυτές τις λειτουργίες. 594 00:28:55,310 --> 00:28:59,470 Έτσι, όχι μόνο δεν C έρχονται με printf, και τσαμπιά από άλλες λειτουργίες 595 00:28:59,470 --> 00:29:01,850 μερικά από τα οποία θα δούμε πάροδο του χρόνου, αυτό δεν γίνεται 596 00:29:01,850 --> 00:29:05,760 κάνουν όλα τόσο εύκολο δεξιά έξω από την πύλη για να πάρει εισόδου του χρήστη. 597 00:29:05,760 --> 00:29:08,140 >> Στην πραγματικότητα, μια από τις αδυναμίες γλώσσες όπως η C, 598 00:29:08,140 --> 00:29:10,140 και ακόμη και Java και ακόμα άλλους, είναι ότι δεν 599 00:29:10,140 --> 00:29:15,860 να είναι εύκολο να πάρει ακριβώς τα πράγματα όπως ακέραιοι από τους χρήστες, ή χορδές, λόγια, 600 00:29:15,860 --> 00:29:19,970 και φράσεις, πόσο μάλλον τα πράγματα όπως κινητής υποδιαστολής αξίες, ή πραγματικούς αριθμούς 601 00:29:19,970 --> 00:29:23,240 με δεκαδικά ψηφία, και πραγματικά μακρά αριθμούς, όπως θα δούμε σύντομα. 602 00:29:23,240 --> 00:29:27,000 Έτσι, αυτός ο κατάλογος των λειτουργιών εδώ, αυτά είναι όπως και τα άλλα κομμάτια του παζλ Scratch 603 00:29:27,000 --> 00:29:31,090 ότι έχουμε προ-εγκατεστημένο στο CS50 IDE που θα χρησιμοποιήσουμε για μερικές εβδομάδες 604 00:29:31,090 --> 00:29:34,010 ως βοηθητικές ρόδες των ειδών, και τελικά να απογειωθεί, και να εξετάσουμε 605 00:29:34,010 --> 00:29:37,210 κάτω από την κουκούλα, ίσως, πώς υλοποιούνται αυτά τα πράγματα. 606 00:29:37,210 --> 00:29:40,460 >> Αλλά για να γίνει αυτό, ας στην πραγματικότητα γράψετε ένα πρόγραμμα. 607 00:29:40,460 --> 00:29:41,770 Επιτρέψτε μου να προχωρήσει τώρα. 608 00:29:41,770 --> 00:29:44,750 Και Πάω να δημιουργήσετε ένα νέο αρχείο κάνοντας κλικ σε αυτό το μικρό συν, 609 00:29:44,750 --> 00:29:45,970 και κάνοντας κλικ νέο αρχείο. 610 00:29:45,970 --> 00:29:49,250 >> Πάω να σώσει αυτό το επόμενο το ένα ως, ας πούμε, string.c, 611 00:29:49,250 --> 00:29:50,750 γιατί θέλω να παίξω με χορδές. 612 00:29:50,750 --> 00:29:53,990 Και κορδόνι σε C είναι ακριβώς μία ακολουθία χαρακτήρων. 613 00:29:53,990 --> 00:29:56,090 Έτσι τώρα ας πάμε μπροστά και να κάνει τα εξής. 614 00:29:56,090 --> 00:30:01,204 >> Περιλαμβάνει τις τυποποιημένες IO.h-- και αποδεικνύεται πρότυπο IO, 615 00:30:01,204 --> 00:30:03,360 IO σημαίνει απλώς εισόδου και εξόδου. 616 00:30:03,360 --> 00:30:05,920 Έτσι αποδεικνύεται ότι Αυτή η γραμμή εδώ είναι ό, τι 617 00:30:05,920 --> 00:30:08,140 είναι το να μας γειτονική να χρησιμοποιήσει printf. 618 00:30:08,140 --> 00:30:10,410 Printf, φυσικά, παράγει έξοδο. 619 00:30:10,410 --> 00:30:15,000 Έτσι, προκειμένου να χρησιμοποιήσει printf, αποδεικνύεται έξω πρέπει να έχετε αυτή τη γραμμή κώδικα 620 00:30:15,000 --> 00:30:16,040 στο επάνω μέρος του αρχείου σας. 621 00:30:16,040 --> 00:30:18,456 >> Και θα έρθει πίσω σε ό, τι αυτό σημαίνει ότι πραγματικά πριν από καιρό. 622 00:30:18,456 --> 00:30:20,400 Αποδεικνύεται ότι σε οποιοδήποτε πρόγραμμα C που γράφω, 623 00:30:20,400 --> 00:30:23,640 Έχω να το ξεκινήσετε με κώδικα που μοιάζει με αυτό. 624 00:30:23,640 --> 00:30:26,860 Και θα παρατηρήσετε CS50 IDE, και άλλα ολοκληρωμένη ανάπτυξη 625 00:30:26,860 --> 00:30:30,050 περιβάλλοντα, όπως αυτό, Θα προσπαθήσουμε όσο καλύτερα 626 00:30:30,050 --> 00:30:31,780 μπορούν να ολοκληρώσετε τη σκέψη σας. 627 00:30:31,780 --> 00:30:35,930 Στην πραγματικότητα, πριν από λίγο, αν μπορώ να αναιρέσω ό, τι ακριβώς έκανα, πατήστε Enter. 628 00:30:35,930 --> 00:30:39,160 >> Στη συνέχεια χτύπησε ανοιχτά σγουρά τιράντες, πατήστε Enter και πάλι. 629 00:30:39,160 --> 00:30:40,430 Και τελείωσε η σκέψη μου. 630 00:30:40,430 --> 00:30:45,140 Μου έδωσε μια νέα γραμμή, εσοχή όχι λιγότερο για ωραία στιλιστική λόγους θα δούμε. 631 00:30:45,140 --> 00:30:48,559 Και τότε μου έδωσε αυτόματα ότι σγουρά κηδεμόνα να τελειώσω τη σκέψη μου. 632 00:30:48,559 --> 00:30:50,600 Τώρα, αυτό δεν είναι πάντα μάντεψε τι θέλετε να κάνετε. 633 00:30:50,600 --> 00:30:53,620 Αλλά σε μεγάλο μέρος, το κάνει μπορείτε να αποθηκεύσετε μερικές πληκτρολογήσεις. 634 00:30:53,620 --> 00:30:59,560 Έτσι, πριν από λίγο, τρέξαμε αυτό program-- γειά σου, τον κόσμο, και στη συνέχεια να συντάξει, 635 00:30:59,560 --> 00:31:00,460 και στη συνέχεια έτρεξε. 636 00:31:00,460 --> 00:31:01,867 Αλλά δεν υπάρχει δυναμισμός εδώ. 637 00:31:01,867 --> 00:31:03,700 Τι θα συμβεί αν θέλαμε να κάνω κάτι διαφορετικό; 638 00:31:03,700 --> 00:31:07,630 Λοιπόν, τι αν ήθελα πραγματικά να να πάρετε μια σειρά από το χρήστη; 639 00:31:07,630 --> 00:31:11,250 Πάω να χρησιμοποιήσετε ένα κομμάτι του παζλ που ονομάζεται ακριβώς ερμήνευα-- πάρει εγχόρδων. 640 00:31:11,250 --> 00:31:15,860 >> Βγάζει σε C ότι όταν δεν θέλετε να συνεισφέρουν σε ένα κομμάτι του παζλ, 641 00:31:15,860 --> 00:31:19,360 ή πιο σωστά σε μια λειτουργία, θα κυριολεκτικά ακριβώς κάνει ανοιχτή παρένθεση, 642 00:31:19,360 --> 00:31:20,430 κοντά παρένθεση. 643 00:31:20,430 --> 00:31:25,540 Έτσι είναι σαν να υπάρχει δεν άσπρο κουτί για να πληκτρολογήσετε σε. 644 00:31:25,540 --> 00:31:27,720 Το μπλοκ ας πούμε, πριν είχε ένα μικρό άσπρο κουτί. 645 00:31:27,720 --> 00:31:29,660 Δεν έχουμε αυτό το άσπρο κουτί τώρα. 646 00:31:29,660 --> 00:31:33,310 >> Αλλά όταν καλώ εγχόρδων πάρει, εγώ θέλετε να βάλετε το αποτέλεσμα κάπου. 647 00:31:33,310 --> 00:31:37,680 Έτσι, ένα πολύ κοινό παράδειγμα σε C είναι να καλέσετε μια συνάρτηση, όπως εγχόρδων φτάσετε εδώ, 648 00:31:37,680 --> 00:31:41,070 και στη συνέχεια να αποθηκεύσετε τιμή επιστροφής της. 649 00:31:41,070 --> 00:31:44,450 Είναι το αποτέλεσμα της της προσπάθεια σε κάτι. 650 00:31:44,450 --> 00:31:47,630 >> Και ποια είναι η κατασκευάσει στον προγραμματισμό, 651 00:31:47,630 --> 00:31:53,450 είτε στο Ξυστό ή τώρα C, ώστε να μπορεί να χρησιμοποιήσει για να αποθηκεύσει πραγματικά κάτι; 652 00:31:53,450 --> 00:31:55,990 Ονόμασε μια μεταβλητή, έτσι δεν είναι; 653 00:31:55,990 --> 00:32:00,320 Και στο Scratch, εμείς δεν κάνουμε πραγματικά με νοιάζει τι συνέβαινε στις μεταβλητές. 654 00:32:00,320 --> 00:32:02,170 >> Αλλά σε αυτή την περίπτωση, μπορούμε πραγματικά να κάνουμε. 655 00:32:02,170 --> 00:32:03,719 Πάω να πω εγχόρδων. 656 00:32:03,719 --> 00:32:05,510 Και τότε θα μπορούσα να καλέσετε αυτό το κάτι που θέλω. 657 00:32:05,510 --> 00:32:08,340 Πάω να το ονομάσουμε όνομα, παίρνει πάρει εγχόρδων. 658 00:32:08,340 --> 00:32:10,250 >> Και τώρα ακόμα και αν είστε λίγο νέος σε αυτό, 659 00:32:10,250 --> 00:32:11,984 παρατηρήσετε ότι είμαι λείπουν κάποιες λεπτομέρειες. 660 00:32:11,984 --> 00:32:13,150 Είμαι ξεχνώντας μια άνω τελεία. 661 00:32:13,150 --> 00:32:14,400 Θέλω να τελειώσω αυτή τη σκέψη. 662 00:32:14,400 --> 00:32:17,480 Έτσι, Πάω να μετακινήσετε τον κέρσορα μου, και χτύπησε άνω τελεία εκεί. 663 00:32:17,480 --> 00:32:19,130 Και τι έχω ακριβώς κάνει; 664 00:32:19,130 --> 00:32:21,440 Σε αυτή τη γραμμή του κώδικα, αριθμός 5 στο παρόν, 665 00:32:21,440 --> 00:32:23,799 Είμαι καλώντας κορδόνι get χωρίς εισόδους. 666 00:32:23,799 --> 00:32:26,090 Έτσι, δεν υπάρχει λίγο άσπρο κουτί, όπως η Save μπλοκ έχει. 667 00:32:26,090 --> 00:32:28,590 >> Απλά λέω, hey, υπολογιστή, φέρε μου ένα string. 668 00:32:28,590 --> 00:32:31,390 Το σύμβολο της ισότητας δεν είναι πραγματικά ένα σύμβολο της ισότητας, per se. 669 00:32:31,390 --> 00:32:33,790 Είναι η εκχώρηση χειριστή, πράγμα που σημαίνει, 670 00:32:33,790 --> 00:32:37,860 hey, υπολογιστή, μετακινήστε την τιμή από τη δεξιά πάνω προς τα αριστερά. 671 00:32:37,860 --> 00:32:40,480 Και στο αριστερό, έχω το εξής. 672 00:32:40,480 --> 00:32:43,580 >> Γεια σου, υπολογιστή, να μου δώσει μια string-- μία ακολουθία χαρακτήρων. 673 00:32:43,580 --> 00:32:45,637 Και να καλέσει αυτό το αλφαριθμητικό όνομα. 674 00:32:45,637 --> 00:32:47,220 Και δεν χρειάζεται καν να το ονομάσουμε Όνομα. 675 00:32:47,220 --> 00:32:49,970 >> Θα μπορούσα να το ονομάσουμε, συμβατικά, κάτι σαν S, 676 00:32:49,970 --> 00:32:52,900 πολύ όπως εμείς i χρησιμοποιείται για να καλέστε Η μεταβλητή i. 677 00:32:52,900 --> 00:32:54,829 Αλλά τώρα πρέπει να κάνω κάτι με αυτό. 678 00:32:54,829 --> 00:32:57,370 Θα ήταν πολύ ανόητο να δοκιμάστε την κατάρτιση αυτού του κώδικα, το τρέξιμο 679 00:32:57,370 --> 00:32:59,410 Αυτό το πρόγραμμα, ακόμα και αν Παίρνω ένα string, 680 00:32:59,410 --> 00:33:01,580 γιατί ακόμα είναι απλά πρόκειται να πω ένα γεια κόσμο. 681 00:33:01,580 --> 00:33:06,140 >> Αλλά τι γίνεται αν θέλω να το αλλάξουμε αυτό. 682 00:33:06,140 --> 00:33:07,940 Γιατί δεν μπορώ να το κάνω αυτό; 683 00:33:07,940 --> 00:33:11,632 Ποσοστό s, κόμμα s. 684 00:33:11,632 --> 00:33:13,090 Και αυτό είναι λίγο αινιγματικό ακόμα. 685 00:33:13,090 --> 00:33:15,560 >> Έτσι, επιτρέψτε μου να κάνω μεταβλητές μου πιο σαφής. 686 00:33:15,560 --> 00:33:17,510 Επιτρέψτε μου να ονομάσει αυτό το όνομα μεταβλητής. 687 00:33:17,510 --> 00:33:20,230 Και ας δούμε αν δεν μπορούμε να πειράζω εκτός τι συμβαίνει εδώ. 688 00:33:20,230 --> 00:33:22,770 >> Έτσι, στη γραμμή πέντε, παίρνω ένα string. 689 00:33:22,770 --> 00:33:25,620 Και είμαι αποθήκευση της σειράς, ό, τι ο χρήστης έχει πληκτρολογήσει 690 00:33:25,620 --> 00:33:28,430 στο πληκτρολόγιό του, σε μια μεταβλητή που ονομάζεται Όνομα. 691 00:33:28,430 --> 00:33:30,590 Και αποδεικνύεται ότι printf κάνει όχι μόνο 692 00:33:30,590 --> 00:33:34,220 πάρτε ένα επιχείρημα σε δίκλινο εισαγωγικά, μία είσοδο σε διπλά εισαγωγικά. 693 00:33:34,220 --> 00:33:39,100 >> Μπορεί να πάρει δύο, ή τρία, ή περισσότερα, όπως ότι η δεύτερη ή τρίτη, ή τέταρτη, 694 00:33:39,100 --> 00:33:42,320 είναι όλα τα ονόματα των μεταβλητών, ή ειδικά αξίες, 695 00:33:42,320 --> 00:33:48,610 που θέλετε να συνδέσετε σε, δυναμικά, αυτή η συμβολοσειρά σε εισαγωγικά. 696 00:33:48,610 --> 00:33:52,110 Με άλλα λόγια, ό, τι θα ήταν λάθος με αυτό; 697 00:33:52,110 --> 00:33:57,920 Αν μόλις είπα γειά σου όνομα, backslash n, αποθηκευμένο αρχείο μου, μεταγλωττισμένο κώδικα μου, 698 00:33:57,920 --> 00:34:01,660 και έτρεξε αυτό, τι θα συμβεί; 699 00:34:01,660 --> 00:34:05,139 >> Είναι ακριβώς πρόκειται να πω, γεια όνομα, κυριολεκτικά Ν-Α-Μ-Ε, 700 00:34:05,139 --> 00:34:07,900 που είναι κάπως ανόητο, διότι δεν είναι κανένας διαφορετικός από τον κόσμο. 701 00:34:07,900 --> 00:34:10,400 Έτσι τίποτα σε εισαγωγικά είναι τι κυριολεκτικά παίρνει εκτυπωθεί. 702 00:34:10,400 --> 00:34:12,520 Έτσι, αν θέλω να έχω ένα σύμβολο κράτησης θέσης εκεί, 703 00:34:12,520 --> 00:34:14,422 Εγώ πραγματικά πρέπει να χρησιμοποιήσετε κάποια ειδική σύνταξη. 704 00:34:14,422 --> 00:34:17,380 Και αποδεικνύεται αν έχετε διαβάσει το τεκμηρίωση για τη λειτουργία printf, 705 00:34:17,380 --> 00:34:21,320 θα σας πω ότι αν χρησιμοποιείτε τοις εκατό s, 706 00:34:21,320 --> 00:34:23,920 μπορείτε να αντικαταστήσετε μια τιμή ως εξής. 707 00:34:23,920 --> 00:34:27,190 >> Μετά από ένα κόμμα μετά από αυτό διπλά εισαγωγικά, μπορείτε απλά 708 00:34:27,190 --> 00:34:29,179 γράψει το όνομα του μεταβλητή που θέλετε 709 00:34:29,179 --> 00:34:33,790 για να συνδέσετε σε αυτή τη μορφή κώδικα, ή σε μορφή προσδιοριστή, 710 00:34:33,790 --> 00:34:35,469 τοις εκατό s για έγχορδα. 711 00:34:35,469 --> 00:34:39,190 Και τώρα, αν έχω αποθηκεύσει το αρχείο μου, Έχω πάει πίσω στο τερματικό μου. 712 00:34:39,190 --> 00:34:42,870 Και εγώ πληκτρολογήστε Κάντε String, γιατί, και πάλι, το όνομα αυτό 713 00:34:42,870 --> 00:34:45,510 αρχείο που επέλεξα πριν είναι string.c. 714 00:34:45,510 --> 00:34:48,510 >> Έτσι, Πάω να πω Κάντε String, πληκτρολογήστε. 715 00:34:48,510 --> 00:34:51,550 Ω Θεέ μου, κοίτα όλα τα λάθη που έχουμε κάνει ήδη. 716 00:34:51,550 --> 00:34:55,540 Και αυτό is-- αυτό, αυτό είναι πραγματικά σαν ένα, επτά πρόγραμμα έξι γραμμή; 717 00:34:55,540 --> 00:34:57,790 Έτσι, αυτό είναι όπου μπορεί πολύ γρήγορα να πάρει συντριπτική. 718 00:34:57,790 --> 00:35:00,890 >> Αυτό το παράθυρο τερματικού έχει τώρα μόλις αναμασημένων 719 00:35:00,890 --> 00:35:03,230 ένας τεράστιος αριθμός των μηνυμάτων λάθους. 720 00:35:03,230 --> 00:35:07,560 Σίγουρα, δεν έχω περισσότερα σφάλμα μηνύματα από ό, τι έχω γραμμές κώδικα. 721 00:35:07,560 --> 00:35:08,680 Λοιπόν, τι συμβαίνει; 722 00:35:08,680 --> 00:35:10,920 >> Λοιπόν, η καλύτερη στρατηγική να κάνει ανά πάσα στιγμή να 723 00:35:10,920 --> 00:35:13,710 να αντιμετωπίσετε μια συντριπτική κατάλογος των λαθών, όπως ότι, 724 00:35:13,710 --> 00:35:16,690 είναι μετακινηθείτε πίσω, αναζητήστε την εντολή απλά έτρεξε, η οποία στην περίπτωσή μου 725 00:35:16,690 --> 00:35:18,020 είναι η δημιουργία της συμβολοσειράς. 726 00:35:18,020 --> 00:35:21,630 Κοιτάξτε τι κάνει το έκανε, και αυτό είναι ότι μακρά Clang εντολή, δεν είναι μεγάλη υπόθεση εκεί. 727 00:35:21,630 --> 00:35:22,950 >> Αλλά το κόκκινο είναι κακό. 728 00:35:22,950 --> 00:35:24,750 Πράσινο προσπαθεί να είναι ήπια και εξυπηρετικό. 729 00:35:24,750 --> 00:35:26,140 Αλλά είναι ακόμα κακό, σε αυτή την περίπτωση. 730 00:35:26,140 --> 00:35:27,510 Αλλά πού είναι το κακό; 731 00:35:27,510 --> 00:35:31,450 >> String.c, γραμμή πέντε, χαρακτήρας πέντε. 732 00:35:31,450 --> 00:35:32,930 Έτσι, αυτό είναι μόνο η κοινή σύμβαση. 733 00:35:32,930 --> 00:35:36,060 κάτι κάτι παχέος εντέρου σημαίνει αριθμό γραμμής και τον αριθμό του χαρακτήρα. 734 00:35:36,060 --> 00:35:41,080 Σφάλματος, η χρήση της αδήλωτης συμβολοσειρά αναγνωριστικού. 735 00:35:41,080 --> 00:35:42,900 Μήπως εννοείτε πρότυπο; 736 00:35:42,900 --> 00:35:45,530 >> Έτσι, δυστυχώς, Clang προσπαθεί να είναι χρήσιμη. 737 00:35:45,530 --> 00:35:46,850 Αλλά είναι λάθος, σε αυτή την περίπτωση. 738 00:35:46,850 --> 00:35:49,350 Όχι, Clang, εγώ δεν σημαίνει πρότυπο IO. 739 00:35:49,350 --> 00:35:51,070 Θα σήμαινε ότι σε μία γραμμή, ναι. 740 00:35:51,070 --> 00:35:53,420 >> Αλλά γραμμή πέντε είναι αυτό εδώ. 741 00:35:53,420 --> 00:35:57,040 Και Clang δεν κατανοήσουν S-Τ-Ρ-Ι-Ν-G. 742 00:35:57,040 --> 00:36:01,490 Είναι μια αδήλωτη αναγνωριστικό, ένα λέξη απλά δεν έχει δει ποτέ πριν. 743 00:36:01,490 --> 00:36:05,730 Και αυτό γιατί C, η γλώσσα γράφουμε κώδικα σε αυτή τη στιγμή, 744 00:36:05,730 --> 00:36:08,070 δεν έχει μεταβλητές που ονομάζεται χορδές. 745 00:36:08,070 --> 00:36:11,380 >> Δεν το κάνει, από προεπιλογή, η υποστήριξη κάτι που ονομάζεται ένα string. 746 00:36:11,380 --> 00:36:16,750 Αυτό είναι ένα κομμάτι CS50 της ορολογία, αλλά πολύ συμβατική. 747 00:36:16,750 --> 00:36:18,600 Αλλά μπορώ να το διορθώσω αυτό ως εξής. 748 00:36:18,600 --> 00:36:22,090 >> Αν μπορώ να προσθέσω μία γραμμή κώδικα στην κορυφή του εν λόγω προγράμματος, 749 00:36:22,090 --> 00:36:27,890 περιλαμβάνουν CS50.h, το οποίο είναι ένα άλλο αρχείο κάπου μέσα του CS50 IDE, κάπου 750 00:36:27,890 --> 00:36:30,820 στο σκληρό δίσκο, να το πω έτσι, του λειτουργικού συστήματος Ubuntu 751 00:36:30,820 --> 00:36:33,590 ότι Τρέχω, ότι είναι το αρχείο που είναι 752 00:36:33,590 --> 00:36:38,740 πρόκειται να διδάξουν το λειτουργικό σύστημα τι ένα string είναι, απλά 753 00:36:38,740 --> 00:36:41,930 σαν πρότυπο io.h είναι το αρχείο στο λειτουργικό σύστημα που είναι 754 00:36:41,930 --> 00:36:44,430 πρόκειται να το διδάξει τι printf είναι. 755 00:36:44,430 --> 00:36:46,810 >> Πράγματι, θα είχαμε πάρει ένα πολύ παρόμοιο μήνυμα 756 00:36:46,810 --> 00:36:50,600 αν IO είχε παραδεχθεί πρότυπο IO.h και προσπάθησε να χρησιμοποιήσει printf. 757 00:36:50,600 --> 00:36:53,632 Έτσι, Πάω να πάει μπροστά και μόλις Πάρτε τον έλεγχο L για να καθαρίσετε την οθόνη μου. 758 00:36:53,632 --> 00:36:56,340 Ή μπορείτε να πληκτρολογήσετε σαφής και θα απλώς καθαρίστε το παράθυρο τερματικού. 759 00:36:56,340 --> 00:36:58,020 Αλλά μπορείτε ακόμα να μετακινηθείτε προς τα πίσω στο χρόνο. 760 00:36:58,020 --> 00:37:01,100 >> Και Πάω να επαναληφθεί Κάντε String. 761 00:37:01,100 --> 00:37:03,660 Διασχίζουν τα δάχτυλά μου αυτή τη φορά, Enter. 762 00:37:03,660 --> 00:37:05,380 Θεέ μου, δούλεψε. 763 00:37:05,380 --> 00:37:09,280 Μου δείχνει ένα μακρύ αινιγματική εντολή ότι είναι αυτό που κάνει δημιουργείται μέσω Clang, 764 00:37:09,280 --> 00:37:10,460 αλλά χωρίς μηνύματα λάθους. 765 00:37:10,460 --> 00:37:12,460 Έτσι συνειδητοποιήσει, ακόμη και αν μπορείτε να πάρετε εντελώς 766 00:37:12,460 --> 00:37:14,480 συγκλονισμένοι με το σειρά από μηνύματα λάθους, 767 00:37:14,480 --> 00:37:17,540 αυτό ακριβώς μπορεί να είναι αυτό το ενοχλητικό υπερχείλιση επίδραση, όπου Clang δεν καταλαβαίνει 768 00:37:17,540 --> 00:37:19,620 ένα πράγμα, το οποίο σημαίνει ότι τότε δεν καταλαβαίνει την επόμενη λέξη, 769 00:37:19,620 --> 00:37:20,560 ή η επόμενη γραμμή. 770 00:37:20,560 --> 00:37:22,850 Και γι 'αυτό ακριβώς πνίγει για τον κωδικό σας. 771 00:37:22,850 --> 00:37:24,440 Αλλά η λύση θα μπορούσε να είναι απλή. 772 00:37:24,440 --> 00:37:27,822 Και έτσι πάντα έμφαση στην ο πρώτη γραμμή της εξόδου. 773 00:37:27,822 --> 00:37:29,530 Και αν δεν το κάνετε καταλαβαίνω, απλά κοιτάξτε 774 00:37:29,530 --> 00:37:32,480 για λέξεις-κλειδιά που θα μπορούσαν να ενδείξεις, και ο αριθμός της γραμμής, 775 00:37:32,480 --> 00:37:34,650 και ο χαρακτήρας, όπου αυτό το λάθος μπορεί να είναι. 776 00:37:34,650 --> 00:37:40,328 >> Τώρα, επιτρέψτε μου να προχωρήσει και πληκτρολογήστε dot κάθετος, string, εισάγετε. 777 00:37:40,328 --> 00:37:44,340 Χμ, δεν είναι λέει γεια τίποτα. 778 00:37:44,340 --> 00:37:46,210 Γιατί; 779 00:37:46,210 --> 00:37:48,170 Λοιπόν, θυμάστε, όπου τρέχει; 780 00:37:48,170 --> 00:37:53,730 >> Είναι πιθανόν να κολλήσει αυτή τη στιγμή σε ένα βρόχο, αν θέλετε, στη γραμμή έξι, 781 00:37:53,730 --> 00:37:56,950 επειδή Πάρτε String από το σχεδιασμό, γράφτηκε από τον προσωπικό του CS50, 782 00:37:56,950 --> 00:38:00,350 είναι κυριολεκτικά σήμαινε απλά να καθίσετε περιμένουν εκεί, και να περιμένει, 783 00:38:00,350 --> 00:38:01,850 και η αναμονή για ένα string. 784 00:38:01,850 --> 00:38:03,792 Όλα εννοούμε με κορδόνι είναι ανθρώπινο εισόδου. 785 00:38:03,792 --> 00:38:04,500 Έτσι, ξέρετε τι; 786 00:38:04,500 --> 00:38:05,166 Επιτρέψτε μου να πάει μπροστά. 787 00:38:05,166 --> 00:38:08,704 Και ακριβώς σε μια ιδιοτροπία, επιτρέψτε μου πληκτρολογήστε το όνομά μου, Ντέιβιντ, εισάγετε. 788 00:38:08,704 --> 00:38:10,120 Τώρα έχω ένα πιο δυναμικό πρόγραμμα. 789 00:38:10,120 --> 00:38:11,240 Είπε, γεια Δαβίδ. 790 00:38:11,240 --> 00:38:16,280 >> Αν πάω μπροστά και να εκτελέσετε αυτό και πάλι, επιτρέψτε μου να προσπαθήσω να πω το όνομά Zamila, εισάγετε. 791 00:38:16,280 --> 00:38:17,940 Και τώρα έχουμε ένα δυναμικό πρόγραμμα. 792 00:38:17,940 --> 00:38:19,380 Δεν έχω σκληρά κωδικοποιημένο κόσμο. 793 00:38:19,380 --> 00:38:21,760 Δεν έχω σκληρά κωδικοποιημένες το όνομα, ή Δαβίδ, ή Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Τώρα είναι πολύ περισσότερο σαν τα προγράμματα γνωρίζουμε, όπου και αν λάβει εισόδου, 795 00:38:25,350 --> 00:38:27,870 παράγει ελαφρώς διαφορετική έξοδο. 796 00:38:27,870 --> 00:38:31,020 Τώρα, αυτό δεν είναι η καλύτερη εμπειρία του χρήστη, ή UX. 797 00:38:31,020 --> 00:38:33,000 Τρέχω το πρόγραμμα. 798 00:38:33,000 --> 00:38:35,830 >> Δεν ξέρω τι είμαι υποτίθεται να κάνουμε, εκτός κι αν πραγματικά εξετάσουμε 799 00:38:35,830 --> 00:38:37,290 ή να θυμηθείτε τον πηγαίο κώδικα. 800 00:38:37,290 --> 00:38:39,640 Ας κάνει ο χρήστης ζήσετε λίγο καλύτερα 801 00:38:39,640 --> 00:38:41,240 με τον απλούστερο των πραγμάτων. 802 00:38:41,240 --> 00:38:44,782 Επιτρέψτε μου να επιστρέψω σε αυτό το πρόγραμμα, και απλά να πω printf. 803 00:38:44,782 --> 00:38:48,870 >> Και επιτρέψτε μου να πάει μπροστά και να πει το όνομα, του παχέος εντέρου, και χώρο, και στη συνέχεια μια άνω τελεία. 804 00:38:48,870 --> 00:38:51,170 Και μόνο για κλωτσιές, καμία αντίδραση Ν. 805 00:38:51,170 --> 00:38:52,980 Και αυτό είναι σκόπιμη, γιατί δεν θέλω 806 00:38:52,980 --> 00:38:54,590 η προτροπή για να μετακινηθείτε στην επόμενη γραμμή. 807 00:38:54,590 --> 00:38:58,800 >> Θέλω να, αντ 'αυτού, να το κάνετε αυτό, κάντε εγχόρδων να ξαναμεταγλωττίσετε τον κωδικό μου σε νέο μηχάνημα 808 00:38:58,800 --> 00:39:00,980 Κωδικός dot κάθετος εγχόρδων. 809 00:39:00,980 --> 00:39:02,460 Αχ, αυτό είναι πολύ πιο όμορφη. 810 00:39:02,460 --> 00:39:05,780 Τώρα ξέρει πραγματικά τι ο υπολογιστής Θέλει να κάνω, να του δώσετε ένα όνομα. 811 00:39:05,780 --> 00:39:10,020 >> Έτσι, Πάω να πάει μπροστά και πληκτρολογήστε στο Rob, εισάγετε, και γειά σου, Ρομπ. 812 00:39:10,020 --> 00:39:13,640 Έτσι, συνειδητοποιήσει, αυτό εξακολουθεί να είναι, στο τέλος της ημέρας, μόνο ένα πρόγραμμα εννέα γραμμή. 813 00:39:13,640 --> 00:39:15,090 Αλλά έχουμε πάρει αυτά τα βήματα του μωρού. 814 00:39:15,090 --> 00:39:18,380 >> Γράψαμε μία γραμμή με την οποία ήταν εξοικειωμένοι, printf, γεια κόσμο. 815 00:39:18,380 --> 00:39:19,980 Τότε ηνάτρεψε λίγο αυτό. 816 00:39:19,980 --> 00:39:21,560 Και εμείς πράγματι χρησιμοποιήσει εγχόρδων get. 817 00:39:21,560 --> 00:39:23,362 Και εμείς πέταξε αυτή την τιμή σε μια μεταβλητή. 818 00:39:23,362 --> 00:39:26,070 Και μετά πήγαμε μπροστά και να βελτιωθεί ότι περαιτέρω με μια τρίτη γραμμή. 819 00:39:26,070 --> 00:39:29,220 Και αυτή η επαναληπτική διαδικασία της γράφοντας λογισμικό είναι πραγματικά το κλειδί. 820 00:39:29,220 --> 00:39:33,420 Στο CS50, και στη ζωή γενικά, θα πρέπει γενικά να μην καθίσει, 821 00:39:33,420 --> 00:39:36,800 έχουν ένα πρόγραμμα στο μυαλό, και να προσπαθήσουμε εγγράφως το όλο πράγμα βλασφημίας όλα με τη μία. 822 00:39:36,800 --> 00:39:40,810 >> Θα είναι, αναπόφευκτα, έχουν ως αποτέλεσμα τον τρόπο περισσότερα λάθη από ό, τι εμείς οι ίδιοι είδαμε εδώ. 823 00:39:40,810 --> 00:39:44,070 Ακόμη και εγώ, σε αυτήν την ημέρα, συνεχώς κάνουν άλλα ηλίθια λάθη, 824 00:39:44,070 --> 00:39:47,480 είναι πραγματικά δύσκολο λάθη που είναι πιο δύσκολο να καταλάβω. 825 00:39:47,480 --> 00:39:52,095 Αλλά θα κάνουν περισσότερα λάθη το περισσότερο γραμμές κώδικα που γράφετε όλα με τη μία. 826 00:39:52,095 --> 00:39:54,220 Και έτσι αυτή η πρακτική της, γράψει ένα μικρό κομμάτι του κώδικα 827 00:39:54,220 --> 00:39:57,930 ότι είστε άνετοι με, συγκεντρώνουν αυτό, να τρέξει, δοκιμάστε το γενικότερα, 828 00:39:57,930 --> 00:40:01,370 στη συνέχεια να προχωρήσουμε on-- έτσι ακριβώς όπως κρατήσαμε layering και layering την περασμένη εβδομάδα, 829 00:40:01,370 --> 00:40:04,190 κτίριο από κάτι πολύ απλό σε κάτι πιο σύνθετο, 830 00:40:04,190 --> 00:40:05,200 κάνει το ίδιο εδώ. 831 00:40:05,200 --> 00:40:08,500 Μην κάθεστε, και να προσπαθήσουμε να γράψει ένα ολόκληρο πρόβλημα. 832 00:40:08,500 --> 00:40:10,780 Στην πραγματικότητα κάνει αυτά τα βήματα του μωρού. 833 00:40:10,780 --> 00:40:15,100 >> Τώρα, χορδές δεν είναι όλα ότι χρήσιμο για τον εαυτό τους. 834 00:40:15,100 --> 00:40:18,210 Είχαμε πράγματι, στην ιδανική περίπτωση, όπως και σε έχουν κάτι άλλο στο εργαλειοθήκη μας. 835 00:40:18,210 --> 00:40:20,990 Οπότε ας πραγματικότητα κάνουν ακριβώς αυτό. 836 00:40:20,990 --> 00:40:24,900 >> Επιτρέψτε μου να προχωρήσει τώρα και μαστίγιο μέχρι ένα ελαφρώς διαφορετικό πρόγραμμα. 837 00:40:24,900 --> 00:40:28,320 Και εμείς θα ονομάζουμε int.c, για ακέραιο αριθμό. 838 00:40:28,320 --> 00:40:30,870 Πάω να, ομοίως, περιλαμβάνουν CS550.h. 839 00:40:30,870 --> 00:40:33,060 Πάω να περιλαμβάνει τις τυποποιημένες IO. 840 00:40:33,060 --> 00:40:36,630 Και αυτό πρόκειται να είναι αρκετά κοινό σε αυτές τις πρώτες ημέρες της κατηγορίας. 841 00:40:36,630 --> 00:40:39,050 >> Και Πάω να είναι έτοιμη τον εαυτό μου με μια κύρια λειτουργία. 842 00:40:39,050 --> 00:40:43,370 Και τώρα αντί να πάρει μια σειρά, ας πάμε μπροστά και να πάρει μια int. 843 00:40:43,370 --> 00:40:49,285 Ας το ονομάσουμε i, και καλέστε το πάρει int, κοντά παρενθέσεις, άνω τελεία. 844 00:40:49,285 --> 00:40:51,410 Και τώρα ας κάνουμε κάτι με αυτό, printf. 845 00:40:51,410 --> 00:40:56,190 >> Ας πούμε κάτι σαν Γεια σας, backslash n, κόμμα i. 846 00:40:56,190 --> 00:41:00,010 Έτσι είμαι λίγο πολύ μιμούνται ό, τι έκανα πριν από λίγο. 847 00:41:00,010 --> 00:41:01,660 Έχω ένα σύμβολο κράτησης θέσης εδώ. 848 00:41:01,660 --> 00:41:05,150 Έχω με κόμμα i εδώ, γιατί θέλω να συνδέσετε i σε αυτό το σύμβολο κράτησης θέσης. 849 00:41:05,150 --> 00:41:07,250 >> Ας πάμε μπροστά και να προσπαθήσουμε την κατάρτιση αυτού του προγράμματος. 850 00:41:07,250 --> 00:41:10,060 Το αρχείο ονομάζεται int.c. 851 00:41:10,060 --> 00:41:12,920 Έτσι, Πάω να πω, κάνουν int, εισάγετε. 852 00:41:12,920 --> 00:41:16,420 Θεέ μου, αλλά δεν είναι μεγάλη υπόθεση, έτσι; 853 00:41:16,420 --> 00:41:17,230 Υπάρχει ένα λάθος. 854 00:41:17,230 --> 00:41:19,810 >> Υπάρχει μια συντακτική λάθος εδώ, έτσι ώστε το πρόγραμμα δεν μπορεί να 855 00:41:19,810 --> 00:41:25,460 να συνταχθεί μέσα int.c, γραμμή επτά, χαρακτήρα 27, μορφή σφάλματος 856 00:41:25,460 --> 00:41:28,400 καθορίζει τον τύπο char αστέρι, όποια και αν είναι. 857 00:41:28,400 --> 00:41:30,020 Αλλά ο τύπος επιχείρημα είναι int. 858 00:41:30,020 --> 00:41:33,110 >> Έτσι και εδώ, εμείς δεν πρόκειται to-- αν και σήμερα είναι ένα πολύ υλικό, 859 00:41:33,110 --> 00:41:35,710 θα πάμε για να σας συναρπάσει με τις απολύτως κάθε χαρακτηριστικό της C, 860 00:41:35,710 --> 00:41:38,070 και τον προγραμματισμό γενικότερα, σε μόλις αυτές τις πρώτες εβδομάδες. 861 00:41:38,070 --> 00:41:40,400 Έτσι εκεί είναι συχνά πρόκειται να είναι ορολογία με την οποία δεν είστε εξοικειωμένοι. 862 00:41:40,400 --> 00:41:43,350 Και, στην πραγματικότητα, char αστέρι είναι κάτι θα πάμε να επανέλθει στο 863 00:41:43,350 --> 00:41:44,830 σε μια εβδομάδα ή δύο το χρόνο του. 864 00:41:44,830 --> 00:41:47,530 >> Αλλά για τώρα, ας δούμε αν μπορούμε να αναλύσει τις λέξεις που είναι εξοικειωμένοι. 865 00:41:47,530 --> 00:41:50,750 Μορφές-- έτσι ακούσαμε μορφή προσδιοριστή, κωδικός μορφή πριν. 866 00:41:50,750 --> 00:41:51,840 Αυτό είναι γνωστό. 867 00:41:51,840 --> 00:41:53,840 Type-- αλλά το επιχείρημα έχει τύπο int. 868 00:41:53,840 --> 00:41:55,980 Περιμένετε ένα λεπτό, i είναι ένας int. 869 00:41:55,980 --> 00:41:59,230 >> Ίσως τοις εκατό s πραγματικότητα έχει κάποιο καθορισμένο νόημα. 870 00:41:59,230 --> 00:42:00,230 Και, πράγματι, το κάνει. 871 00:42:00,230 --> 00:42:03,101 Ένας ακέραιος, αν θέλετε printf για να το αντικαταστήσει, 872 00:42:03,101 --> 00:42:05,350 που πραγματικά πρέπει να χρησιμοποιήσετε ένα διαφορετικά προσδιοριστή μορφή. 873 00:42:05,350 --> 00:42:06,890 Και δεν θα το γνωρίζουν αυτό αν κάποιος σας πει, 874 00:42:06,890 --> 00:42:07,973 ή είχατε κάνει πριν. 875 00:42:07,973 --> 00:42:10,490 Αλλά τοις εκατό i είναι ό, τι μπορούν να χρησιμοποιηθούν ευρέως 876 00:42:10,490 --> 00:42:12,240 στην printf για τη σύνδεση σε έναν ακέραιο. 877 00:42:12,240 --> 00:42:14,920 Μπορείτε επίσης να χρησιμοποιήσετε τοις εκατό δ για ένα δεκαδικό ακέραιο. 878 00:42:14,920 --> 00:42:16,490 Αλλά εγώ είναι ωραίο και απλό εδώ. 879 00:42:16,490 --> 00:42:17,590 Έτσι θα πάμε με αυτό. 880 00:42:17,590 --> 00:42:21,160 >> Τώρα, επιτρέψτε μου να πάει μπροστά και να επανάληψη make int, Enter. 881 00:42:21,160 --> 00:42:23,328 Αυτό είναι καλό, δεν υπάρχουν σφάλματα. 882 00:42:23,328 --> 00:42:27,260 Dot κάθετος int-- ΟΚ, κακή εμπειρία του χρήστη, επειδή δεν έχω στον εαυτό μου 883 00:42:27,260 --> 00:42:27,760 τι να κάνω. 884 00:42:27,760 --> 00:42:28,426 Αλλά αυτό είναι μια χαρά. 885 00:42:28,426 --> 00:42:29,480 Είμαι αλίευση γρήγορα. 886 00:42:29,480 --> 00:42:36,260 >> Και τώρα επιτρέψτε μου να πάει μπροστά και να πληκτρολογήστε το Δαβίδ, ΟΚ, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 Εντάξει, έτσι αυτό είναι ένα καλό πράγμα. 888 00:42:37,820 --> 00:42:41,710 Αυτή τη φορά, είμαι χρησιμοποιώντας μια λειτουργία, ένα κομμάτι του παζλ, που ονομάζεται get int. 889 00:42:41,710 --> 00:42:44,230 Και αποδεικνύεται out-- και θα δείτε αυτό αργότερα στο term-- 890 00:42:44,230 --> 00:42:47,730 το προσωπικό CS50 έχει εφαρμόσει πάρετε κορδόνι με τέτοιο τρόπο 891 00:42:47,730 --> 00:42:50,350 ότι θα είναι μόνο σωματικά να πάρετε μια σειρά για σας. 892 00:42:50,350 --> 00:42:54,340 >> Έχει εφαρμοστεί get int στην ένα τέτοιο τρόπο ώστε να μόνο θα 893 00:42:54,340 --> 00:42:55,590 να πάρει έναν ακέραιο για σας. 894 00:42:55,590 --> 00:42:57,830 Και αν, το ανθρώπινο, δεν συνεργάζονται, είναι 895 00:42:57,830 --> 00:43:00,590 κυριολεκτικά ακριβώς πρόκειται να πούμε ξανά, ξανά, ξανά, 896 00:43:00,590 --> 00:43:05,200 κυριολεκτικά κάθεται εκεί looping, έως ότου σας υποχρεώσουμε με κάποιο μαγικό αριθμό, 897 00:43:05,200 --> 00:43:07,670 όπως 50, και γειά σου 50. 898 00:43:07,670 --> 00:43:11,440 >> Ή αν τρέξουμε αυτό πάλι και τον τύπο σε 42, γεια σου 42. 899 00:43:11,440 --> 00:43:15,750 Και έτσι η λειτουργία get int στο εσωτερικό του εν λόγω κομμάτι του παζλ 900 00:43:15,750 --> 00:43:19,050 είναι αρκετά λογική, αρκετή σκέψη, να καταλάβω, τι είναι μια λέξη; 901 00:43:19,050 --> 00:43:20,330 Και τι είναι ένας αριθμός; 902 00:43:20,330 --> 00:43:23,165 Μόνο αποδέχεται, εν τέλει, οι αριθμοί. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Έτσι αποδεικνύεται ότι η εν λόγω Δεν είναι όλα αυτά εκφραστική. 905 00:43:30,230 --> 00:43:30,910 μέχρι τώρα. 906 00:43:30,910 --> 00:43:33,690 Έτσι, yay, την τελευταία φορά που πήγε αρκετά γρήγορα 907 00:43:33,690 --> 00:43:38,320 σε εφαρμογή παιχνίδια και κινούμενα σχέδια, και καλλιτεχνικών έργων στο Scratch. 908 00:43:38,320 --> 00:43:42,260 Και εδώ, είμαστε περιεχόμενο με τον κόσμο γεια, και γειά σου 50. 909 00:43:42,260 --> 00:43:43,696 >> Δεν είναι όλα αυτά που εμπνέει. 910 00:43:43,696 --> 00:43:46,070 Και, πράγματι, αυτά τα πρώτα λίγα παραδείγματα θα πάρει κάποιο χρόνο 911 00:43:46,070 --> 00:43:47,510 να ράμπα μέχρι στον ενθουσιασμό. 912 00:43:47,510 --> 00:43:49,854 Αλλά έχουμε πολύ περισσότερα ελέγχουν τώρα, στην πραγματικότητα. 913 00:43:49,854 --> 00:43:51,770 Και θα πάμε σε πολύ γρήγορα να ξεκινήσει layering 914 00:43:51,770 --> 00:43:53,870 πάνω από αυτά τα βασικά αρχέτυπα. 915 00:43:53,870 --> 00:43:56,370 >> Αλλά πρώτα, ας καταλάβουμε ποιες είναι οι περιορισμοί. 916 00:43:56,370 --> 00:43:58,620 Στην πραγματικότητα, ένα από τα πράγματα Το μηδέν δεν εύκολα 917 00:43:58,620 --> 00:44:00,990 ας κάνουμε είναι να το δούμε κάτω από την κουκούλα, 918 00:44:00,990 --> 00:44:03,740 και να κατανοήσουν τι υπολογιστής είναι, τι μπορεί να κάνει, 919 00:44:03,740 --> 00:44:05,250 και ποια τα όριά της είναι. 920 00:44:05,250 --> 00:44:08,580 Και, πράγματι, ότι η έλλειψη κατανόηση, δυνητικά, μακροπρόθεσμη 921 00:44:08,580 --> 00:44:12,520 μπορεί να οδηγήσει σε δική μας mistakes-- γραφής σφάλματα, γράφοντας ανασφαλής λογισμικού που 922 00:44:12,520 --> 00:44:13,880 παίρνει hacked με κάποιο τρόπο. 923 00:44:13,880 --> 00:44:17,130 >> Έτσι, ας ρίξουμε μερικά βήματα προς την κατεύθυνση κατανόηση αυτής της λίγο καλύτερα από 924 00:44:17,130 --> 00:44:19,710 τρόπο, ας πούμε, το ακόλουθο παράδειγμα. 925 00:44:19,710 --> 00:44:23,550 Πάω να προχωρήσει και να εφαρμόσει πραγματικά γρήγορα ένα πρόγραμμα που ονομάζεται αθροιστής. 926 00:44:23,550 --> 00:44:25,134 Όπως, ας προσθέσουμε μερικούς αριθμούς μαζί. 927 00:44:25,134 --> 00:44:27,800 Και Πάω να κωδικοποιήσει κάποιες γωνίες εδώ, και μόνο αντιγραφή και επικόλληση 928 00:44:27,800 --> 00:44:30,270 όπου ήμουν πριν, απλά έτσι ώστε να μπορούμε να προχωρήσουμε πιο γρήγορα. 929 00:44:30,270 --> 00:44:33,090 Έτσι τώρα έχω τις βασικές αρχές ενός προγράμματος που ονομάζεται αθροιστής. 930 00:44:33,090 --> 00:44:34,670 >> Και ας πάμε μπροστά και να το κάνουμε αυτό. 931 00:44:34,670 --> 00:44:38,680 Πάω να πάει μπροστά και να ας πούμε, intx παίρνει πάρει int. 932 00:44:38,680 --> 00:44:39,430 Και ξέρετε τι; 933 00:44:39,430 --> 00:44:40,990 Ας κάνουμε μια καλύτερη εμπειρία χρήστη. 934 00:44:40,990 --> 00:44:45,740 >> Έτσι, ας πούμε Χ είναι, και αποτελεσματικά ζητήσει από το χρήστη να μας δώσει Χ. 935 00:44:45,740 --> 00:44:50,600 Και τότε επιτρέψτε μου να πάει μπροστά και να πω, printf πώς για y είναι, αυτή τη φορά περιμένουμε 936 00:44:50,600 --> 00:44:53,140 δύο τιμές από το χρήστη. 937 00:44:53,140 --> 00:44:59,759 Και τότε ας πάει μπροστά και να ας πούμε, printf, το άθροισμα των x και y είναι. 938 00:44:59,759 --> 00:45:01,300 Και τώρα δεν θέλω να κάνω τοις εκατό s. 939 00:45:01,300 --> 00:45:09,080 Θέλω να κάνω τοις εκατό i, backslash n, και στη συνέχεια, συνδέστε σε αξία ποσό. 940 00:45:09,080 --> 00:45:10,620 >> Λοιπόν, πώς μπορώ να πάω για να κάνει αυτό; 941 00:45:10,620 --> 00:45:11,270 Ξέρεις τι? 942 00:45:11,270 --> 00:45:12,840 Ξέρω πώς να χρησιμοποιούν μεταβλητές. 943 00:45:12,840 --> 00:45:15,140 Επιτρέψτε μου μόνο να δηλώσει ένα νέο, int z. 944 00:45:15,140 --> 00:45:16,770 >> Και Πάω να λάβει μια εικασία εδώ. 945 00:45:16,770 --> 00:45:21,470 Αν υπάρχουν ίσες πινακίδες σε αυτό γλώσσα, ίσως μπορώ να κάνω ακριβώς x συν y, 946 00:45:21,470 --> 00:45:23,660 εφ 'όσον έχω τελειώσει μου σκέφτηκε με άνω τελεία; 947 00:45:23,660 --> 00:45:28,170 Τώρα μπορώ να επιστρέψω εδώ κάτω, συνδέστε το z, τελειώσω αυτή τη σκέψη με μια άνω τελεία. 948 00:45:28,170 --> 00:45:33,160 Και ας δούμε τώρα, αν αυτά ακολουθίες lines-- x είναι να πάρετε int. 949 00:45:33,160 --> 00:45:34,770 Υ είναι να πάρετε int. 950 00:45:34,770 --> 00:45:37,980 >> Προσθέστε x και y, αποθηκεύει την τιμή σε z-- Έτσι, και πάλι, να θυμάστε το σύμβολο ίσον 951 00:45:37,980 --> 00:45:38,560 δεν είναι ίση. 952 00:45:38,560 --> 00:45:41,100 Είναι ανάθεση από δεξιά προς τα αριστερά. 953 00:45:41,100 --> 00:45:45,180 Και ας εκτυπώσετε ότι το άθροισμα τα Χ και Υ δεν είναι κυριολεκτικά z, 954 00:45:45,180 --> 00:45:46,830 αλλά αυτό που είναι μέσα του z. 955 00:45:46,830 --> 00:45:50,090 Έτσι, ας κάνουμε Adder - ωραία, χωρίς λάθη αυτή τη φορά. 956 00:45:50,090 --> 00:45:53,030 Dot κάθετος Adder, εισάγετε, x θα είναι 1. 957 00:45:53,030 --> 00:45:55,380 >> Υ θα είναι 2. 958 00:45:55,380 --> 00:45:58,964 Και το άθροισμα των χ και γ είναι 3. 959 00:45:58,964 --> 00:46:00,130 Έτσι ώστε να είναι όλα ωραία και καλά. 960 00:46:00,130 --> 00:46:03,260 >> Έτσι, μπορείτε να φανταστείτε ότι τα μαθηματικά θα πρέπει να εργαστεί σε ένα πρόγραμμα σαν αυτό. 961 00:46:03,260 --> 00:46:04,040 Αλλά ξέρετε τι; 962 00:46:04,040 --> 00:46:06,904 Είναι αυτή η μεταβλητή, γραμμή 12, ακόμα και απαραίτητη; 963 00:46:06,904 --> 00:46:09,820 Δεν χρειάζεται να πάρετε στη συνήθεια μόνο την αποθήκευση των πραγμάτων σε μεταβλητές 964 00:46:09,820 --> 00:46:10,980 μόνο και μόνο επειδή μπορείτε. 965 00:46:10,980 --> 00:46:13,550 Και, στην πραγματικότητα, είναι γενικά Θεωρείται κακή σχεδίαση 966 00:46:13,550 --> 00:46:18,100 εάν δημιουργείτε μια μεταβλητή, που ονομάζεται z σε αυτή την περίπτωση, η αποθήκευση κάτι σε αυτό, 967 00:46:18,100 --> 00:46:21,390 και στη συνέχεια αμέσως χρήση του, αλλά ποτέ ξανά. 968 00:46:21,390 --> 00:46:24,700 Γιατί να δώσουμε κάτι ένα όνομα όπως z αν είστε κυριολεκτικά 969 00:46:24,700 --> 00:46:26,770 πρόκειται να χρησιμοποιήσετε αυτό πράγμα μόνο μια φορά, και έτσι 970 00:46:26,770 --> 00:46:29,380 εγγύς όπου δημιουργήσατε αυτό στην πρώτη θέση, 971 00:46:29,380 --> 00:46:31,052 τόσο κοντά από την άποψη των γραμμών του κώδικα; 972 00:46:31,052 --> 00:46:31,760 Έτσι, ξέρετε τι; 973 00:46:31,760 --> 00:46:34,480 Αποδεικνύεται ότι η C είναι αρκετά ευέλικτο. 974 00:46:34,480 --> 00:46:36,586 Αν εγώ πραγματικά θέλουν να plug-in τιμές εδώ, 975 00:46:36,586 --> 00:46:38,210 Δεν χρειάζεται να δηλώσει μια νέα μεταβλητή. 976 00:46:38,210 --> 00:46:41,680 Θα μπορούσα απλά plug-in x συν y, γιατί C καταλαβαίνει 977 00:46:41,680 --> 00:46:43,390 αριθμητική, και μαθηματικά φορείς. 978 00:46:43,390 --> 00:46:47,140 >> Έτσι απλά μπορώ να πω, κάνουν αυτό τα μαθηματικά, x συν y, όποια και αν οι αξίες αυτές είναι, 979 00:46:47,140 --> 00:46:50,780 συνδέστε το προκύπτον ακέραιος σε αυτό το κορδόνι. 980 00:46:50,780 --> 00:46:53,730 Έτσι, αυτό μπορεί να είναι, αν και μόνο μία γραμμή μικρότερη, 981 00:46:53,730 --> 00:46:58,480 ένα καλύτερο σχεδιασμό, ένα καλύτερο πρόγραμμα, επειδή υπάρχει λιγότερο κώδικα, ως εκ τούτου, 982 00:46:58,480 --> 00:46:59,921 λιγότερο για μένα να καταλάβω. 983 00:46:59,921 --> 00:47:01,920 Και είναι επίσης μόλις καθαρότερο, στο βαθμό που δεν είμαστε 984 00:47:01,920 --> 00:47:04,620 εισάγοντας νέες λέξεις, νέα σύμβολα, όπως το z, 985 00:47:04,620 --> 00:47:07,510 ακόμη και αν δεν το κάνουν πραγματικά εξυπηρετούν ένα μεγάλο μέρος ενός σκοπού. 986 00:47:07,510 --> 00:47:12,890 >> Δυστυχώς, τα μαθηματικά δεν είναι όλα ότι οι αξιόπιστες μερικές φορές. 987 00:47:12,890 --> 00:47:15,270 Ας πάμε μπροστά και να το κάνουμε αυτό. 988 00:47:15,270 --> 00:47:18,200 Πάω να πάει μπροστά τώρα και να κάνουμε το εξής. 989 00:47:18,200 --> 00:47:27,650 >> Ας κάνουμε printf, τοις εκατό i, συν τοις i, είναι τοις εκατό i, backslash n. 990 00:47:27,650 --> 00:47:32,240 Και Πάω να κάνω this-- xyx συν y. 991 00:47:32,240 --> 00:47:34,821 Έτσι, είμαι απλώς πρόκειται να ξαναγράψει αυτό λίγο διαφορετικά εδώ. 992 00:47:34,821 --> 00:47:36,320 Επιτρέψτε μου να κάνω ένα γρήγορο έλεγχο λογικότητας. 993 00:47:36,320 --> 00:47:37,986 Και πάλι, ας μην πάρει μπροστά του τον εαυτό μας. 994 00:47:37,986 --> 00:47:41,420 Κάντε αθροιστή, dot κάθετος αθροιστή. 995 00:47:41,420 --> 00:47:44,950 το χ είναι 1, το γ είναι 2, 1 και 2 είναι 3. 996 00:47:44,950 --> 00:47:45,870 Έτσι, αυτό είναι καλό. 997 00:47:45,870 --> 00:47:49,060 Αλλά ας περιπλέκουν αυτό τώρα λίγο, και να δημιουργήσετε ένα νέο αρχείο. 998 00:47:49,060 --> 00:47:53,350 >> Πάω να καλέσετε αυτό το ένα, λένε, ints, πληθυντικό για ακέραιους αριθμούς. 999 00:47:53,350 --> 00:47:55,980 Επιτρέψτε μου να ξεκινήσω από εκεί που ήμουν πριν από λίγο. 1000 00:47:55,980 --> 00:47:57,770 Αλλά τώρα ας κάνουμε μερικές άλλες γραμμές. 1001 00:47:57,770 --> 00:48:03,430 Επιτρέψτε μου να πάει μπροστά και να κάνουμε το εξής, printf, τοις εκατό i, μείον θ τοις εκατό, 1002 00:48:03,430 --> 00:48:08,959 Είναι τοις εκατό i, κόμμα x, κόμμα yx μείον y. 1003 00:48:08,959 --> 00:48:10,750 Έτσι κάνω ελαφρώς διαφορετικά μαθηματικά εκεί. 1004 00:48:10,750 --> 00:48:11,624 Ας κάνουμε άλλο ένα. 1005 00:48:11,624 --> 00:48:16,610 Έτσι τοις εκατό i φορές τοις εκατό i είναι τοις εκατό i, backslash n. 1006 00:48:16,610 --> 00:48:21,430 Ας plug-in x, και y, και οι χρόνοι x y. 1007 00:48:21,430 --> 00:48:24,530 Θα χρησιμοποιήσουμε τον αστερίσκο για υπολογιστή σας για ώρες. 1008 00:48:24,530 --> 00:48:26,390 >> Δεν χρησιμοποιείτε x. χ είναι μια μεταβλητή όνομα εδώ. 1009 00:48:26,390 --> 00:48:28,270 Μπορείτε να χρησιμοποιήσετε το αστέρι για τον πολλαπλασιασμό. 1010 00:48:28,270 --> 00:48:29,020 Ας κάνουμε ένα ακόμη. 1011 00:48:29,020 --> 00:48:34,580 Printf τοις εκατό Ι, διαιρούμενο με ποσοστό i, είναι τοις εκατό Ι, 1012 00:48:34,580 --> 00:48:40,460 backslash n. xy διαιρείται με y-- ώστε να μπορείτε να χρησιμοποιήσετε το κάθετο σε C 1013 00:48:40,460 --> 00:48:41,502 να κάνει διαίρεση. 1014 00:48:41,502 --> 00:48:42,460 Και ας κάνουμε ένα άλλο. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Υπόλοιπο ποσοστό θ, διαιρούμενο με ποσοστό i, είναι τοις εκατό i. 1017 00:48:55,240 --> 00:48:59,550 xy-- και τώρα υπόλοιπο είναι ό, τι έχει απομείνει. 1018 00:48:59,550 --> 00:49:02,980 Όταν προσπαθείτε να τη διαίρεση ενός παρονομαστής σε ένα αριθμητή, 1019 00:49:02,980 --> 00:49:05,570 πόσο έχει απομείνει πάνω από αυτό δεν θα μπορούσατε να διαιρέσετε έξω; 1020 00:49:05,570 --> 00:49:07,910 >> Έτσι, δεν υπάρχει πραγματικά, αναγκαστικά, ένα σύμβολο 1021 00:49:07,910 --> 00:49:09,470 έχουμε χρησιμοποιήσει στο δημοτικό σχολείο για αυτό. 1022 00:49:09,470 --> 00:49:13,830 Αλλά υπάρχουν σε C. Μπορείτε λένε x modulo y, όπου 1023 00:49:13,830 --> 00:49:18,000 αυτό το σύμβολο τοις εκατό σε αυτό το context-- συγκεχυμένα όταν είστε μέσα 1024 00:49:18,000 --> 00:49:20,170 των διπλά εισαγωγικά, στο εσωτερικό της printf, τοις εκατό 1025 00:49:20,170 --> 00:49:21,830 χρησιμοποιείται ως προσδιοριστής μορφή. 1026 00:49:21,830 --> 00:49:25,420 >> Όταν χρησιμοποιείτε τοις εκατό εκτός της ότι σε μια μαθηματική έκφραση, 1027 00:49:25,420 --> 00:49:29,910 είναι ο φορέας modulo για σπονδυλωτή arithmetic-- για τους σκοπούς μας 1028 00:49:29,910 --> 00:49:33,650 εδώ, σημαίνει απλά, ποια είναι η υπόλοιπο του x διαιρούμενο με y; 1029 00:49:33,650 --> 00:49:36,130 Έτσι x διαιρούμενο με y είναι x κάθετο y. 1030 00:49:36,130 --> 00:49:38,220 Ποιο είναι το υπόλοιπο του x διαιρούμενο με y; 1031 00:49:38,220 --> 00:49:41,780 Είναι x mod y, όπως ένας προγραμματιστής θα έλεγα. 1032 00:49:41,780 --> 00:49:48,300 >> Έτσι, αν έκανα κανένα λάθος εδώ, επιτρέψτε μου να προχωρήσει και να κάνει ints, στον πληθυντικό, ωραία, 1033 00:49:48,300 --> 00:49:50,010 και dot ints κάθετος. 1034 00:49:50,010 --> 00:49:55,270 Και ας πάμε μπροστά και να κάνει, ας πούμε, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Εντάξει, 1 συν 10 είναι 11, επιταγή. 1036 00:49:58,390 --> 00:50:01,240 1 μείον 10 είναι αρνητικό 9, ελέγξτε. 1037 00:50:01,240 --> 00:50:03,420 >> 1 φορές 10 είναι 10, επιταγή. 1038 00:50:03,420 --> 00:50:07,090 1 διαιρούμενο με το 10 is-- Εντάξει, θα παραλείψετε αυτό το ένα. 1039 00:50:07,090 --> 00:50:09,480 Υπόλοιπο 1 διαιρούμενο με το 10 είναι 1. 1040 00:50:09,480 --> 00:50:10,680 Αυτό είναι σωστό. 1041 00:50:10,680 --> 00:50:12,630 Αλλά υπάρχει ένα σφάλμα το οποίο εδώ. 1042 00:50:12,630 --> 00:50:15,390 >> Έτσι, η μία έβαλα μου παραδώσει, δεν είναι σωστό. 1043 00:50:15,390 --> 00:50:16,670 Θέλω να πω, ότι είναι κοντά στο 0. 1044 00:50:16,670 --> 00:50:20,670 1 διαιρούμενο με 10, ξέρετε, αν είμαστε κοπή κάποιες γωνιές, βέβαιος, ότι είναι μηδέν. 1045 00:50:20,670 --> 00:50:28,050 Αλλά θα πρέπει πραγματικά να είναι 1/10, 0.1, ή 0.10, 0.1000, ή ούτω καθεξής. 1046 00:50:28,050 --> 00:50:30,600 >> Δεν πρέπει πραγματικά να είναι μηδέν. 1047 00:50:30,600 --> 00:50:35,990 Λοιπόν, αποδεικνύεται ότι ο υπολογιστής είναι κάνει κυριολεκτικά ό, τι αυτό είπε να κάνουμε. 1048 00:50:35,990 --> 00:50:39,460 Κάνουμε τα μαθηματικά σαν x διαιρούμενο με y. 1049 00:50:39,460 --> 00:50:44,680 Και οι δύο Χ και Υ, σύμφωνα με τις γραμμές του κώδικα νωρίτερα, είναι ακέραιοι αριθμοί. 1050 00:50:44,680 --> 00:50:50,440 >> Επιπλέον, στη γραμμή 15, είμαστε λέει printf, hey, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 ένας ακέραιος, το plug-in ακέραιο, plug-in μια integer-- ειδικά 1052 00:50:54,230 --> 00:50:57,580 x, και στη συνέχεια γ, και στη συνέχεια x διαιρούμενο με y. x και y είναι ints. 1053 00:50:57,580 --> 00:50:59,060 Είμαστε καλά εκεί. 1054 00:50:59,060 --> 00:51:01,250 >> Αλλά τι είναι x διαιρείται με το x; 1055 00:51:01,250 --> 00:51:06,790 x διαιρούμενο με y πρέπει να είναι, μαθηματικά, 1/10, ή 0,1, 1056 00:51:06,790 --> 00:51:11,600 η οποία είναι ένας πραγματικός αριθμός, ένας πραγματικός αριθμός που έχουν, ενδεχομένως, ένα δεκαδικό σημείο. 1057 00:51:11,600 --> 00:51:13,230 Δεν είναι ένας ακέραιος. 1058 00:51:13,230 --> 00:51:18,290 >> Αλλά αυτό που είναι το πιο κοντινό ακέραιο στο 1/10, ή 0.1; 1059 00:51:18,290 --> 00:51:21,114 Ναι, αυτό το είδος του είναι μηδέν. 1060 00:51:21,114 --> 00:51:22,030 0.1 είναι σαν αυτό το πολύ. 1061 00:51:22,030 --> 00:51:22,890 Και 1 είναι αυτό το πολύ. 1062 00:51:22,890 --> 00:51:25,870 Έτσι 1/10 είναι πιο κοντά στο 0 ό, τι είναι προς ένα. 1063 00:51:25,870 --> 00:51:30,800 >> Και έτσι τι κάνει η C για ΕΜΕΙΣ-- είδος γιατί το είπε to-- 1064 00:51:30,800 --> 00:51:32,600 Είναι περικοπή αυτή ακέραιος. 1065 00:51:32,600 --> 00:51:40,540 Είναι λαμβάνοντας την τιμή, η οποία είναι και πάλι υποτίθεται ότι είναι κάτι σαν 0,1000, 1066 00:51:40,540 --> 00:51:41,800 0 και ούτω καθεξής. 1067 00:51:41,800 --> 00:51:45,320 Και αυτό είναι ό, τι περικοπή μετά την υποδιαστολή 1068 00:51:45,320 --> 00:51:47,510 έτσι ώστε όλα αυτά πράγματα, γιατί δεν το κάνει 1069 00:51:47,510 --> 00:51:51,910 ταιριάζει στην έννοια του ακεραίου, η οποία είναι απλά ένας αριθμός, όπως αρνητική 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 πάνω και κάτω, ρίχνει μακριά τα πάντα μετά την υποδιαστολή, γιατί 1071 00:51:55,830 --> 00:51:59,020 δεν μπορεί να χωρέσει ένα υποδιαστολής σε έναν ακέραιο αριθμό εξ ορισμού. 1072 00:51:59,020 --> 00:52:01,290 >> Έτσι, η απάντηση εδώ είναι μηδέν. 1073 00:52:01,290 --> 00:52:02,600 Επομένως, πώς θα το διορθώσω αυτό; 1074 00:52:02,600 --> 00:52:04,400 Χρειαζόμαστε μια άλλη λύση όλοι μαζί. 1075 00:52:04,400 --> 00:52:06,880 Και μπορούμε να το κάνουμε αυτό, ως εξής. 1076 00:52:06,880 --> 00:52:12,820 >> Επιτρέψτε μου να προχωρήσει και να δημιουργήσει μια νέα αρχείο, αυτό ονομάζεται floats.c. 1077 00:52:12,820 --> 00:52:16,500 Και το αποθηκεύσετε εδώ στο ίδιο κατάλογο, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 Και επιτρέψτε μου να πάει μπροστά και να αντιγράψετε μερικές από τις εν λόγω κώδικα από τις προηγούμενες. 1080 00:52:23,260 --> 00:52:27,690 >> Αλλά αντί να πάρει ένας int, ας κάνουμε αυτό. 1081 00:52:27,690 --> 00:52:31,037 Δώσε μου μια τιμή κινητής υποδιαστολής που ονομάζεται x. όπου ένας κινητής υποδιαστολής 1082 00:52:31,037 --> 00:52:33,370 αξία είναι μόλις κυριολεκτικά κάτι με κυμαινόμενο σημείο. 1083 00:52:33,370 --> 00:52:34,410 Μπορεί να κινηθεί προς τα αριστερά, προς τα δεξιά. 1084 00:52:34,410 --> 00:52:35,530 Είναι ένας πραγματικός αριθμός. 1085 00:52:35,530 --> 00:52:38,050 >> Και επιτρέψτε μου να μην καλέσει πάρετε int, αλλά να πάρει float, 1086 00:52:38,050 --> 00:52:41,420 η οποία ήταν επίσης μεταξύ των μενού επιλογών στη βιβλιοθήκη C250. 1087 00:52:41,420 --> 00:52:43,220 Ας αλλάξουμε y σε ένα πλωτήρα. 1088 00:52:43,220 --> 00:52:45,000 Έτσι, αυτό γίνεται πάρει πλωτήρα. 1089 00:52:45,000 --> 00:52:47,620 >> Και τώρα, δεν θέλουμε να συνδέσετε ints. 1090 00:52:47,620 --> 00:52:53,130 Αποδεικνύεται πρέπει να χρησιμοποιήσουμε τοις εκατό f για float, τοις εκατό f για float, 1091 00:52:53,130 --> 00:52:54,560 και τώρα το αποθηκεύσετε. 1092 00:52:54,560 --> 00:53:01,220 Και τώρα, τα δάχτυλα σταυρωμένα, να άρματα, ωραία, τελεία άρματα κάθετος. 1093 00:53:01,220 --> 00:53:04,280 x πρόκειται να είναι ένα 1. y Πρόκειται να είναι 10 και πάλι. 1094 00:53:04,280 --> 00:53:08,240 >> Και, ωραία, εντάξει Επιπλέον μου είναι σωστή. 1095 00:53:08,240 --> 00:53:10,240 Ήλπιζα για περισσότερα, αλλά ξέχασα να το γράψω. 1096 00:53:10,240 --> 00:53:13,250 Οπότε ας πάει και να διορθώσετε αυτό το λογικό σφάλμα. 1097 00:53:13,250 --> 00:53:16,280 >> Ας πάμε μπροστά και να αρπάξει τα ακόλουθα. 1098 00:53:16,280 --> 00:53:18,080 Θα κάνουμε λίγο αντιγραφή και επικόλληση. 1099 00:53:18,080 --> 00:53:20,080 Και Πάω να πω μείον. 1100 00:53:20,080 --> 00:53:21,890 >> Και Πάω να πω φορές. 1101 00:53:21,890 --> 00:53:24,060 Και Πάω να πω διαιρεμένη. 1102 00:53:24,060 --> 00:53:28,240 Και εγώ δεν πρόκειται να κάνω modulo, η οποία δεν είναι τόσο σχετικός εδώ, 1103 00:53:28,240 --> 00:53:33,690 διαιρούμενο με το f, και οι χρόνοι plus-- Εντάξει, ας το κάνουμε αυτό και πάλι. 1104 00:53:33,690 --> 00:53:44,210 >> Κάντε πλωτήρες, τελεία άρματα κάθετος, και 1, 10, and-- ωραίο, όχι, εντάξει. 1105 00:53:44,210 --> 00:53:45,250 Έτσι είμαι ηλίθιος. 1106 00:53:45,250 --> 00:53:47,000 Έτσι, αυτό είναι πολύ κοινό στην επιστήμη των υπολογιστών 1107 00:53:47,000 --> 00:53:49,780 να κάνουν ηλίθια λάθη όπως αυτό. 1108 00:53:49,780 --> 00:53:53,100 >> Για παιδαγωγικούς σκοπούς, αυτό που πραγματικά ήθελε να κάνει 1109 00:53:53,100 --> 00:53:57,410 είχε αλλάξει την επιστήμη εδώ να συν, μείον, σε χρόνους, 1110 00:53:57,410 --> 00:54:01,140 και να διαιρέσει, όπως μπορείτε να ελπίζουμε παρατηρήσει κατά τη διάρκεια αυτής της άσκησης. 1111 00:54:01,140 --> 00:54:04,700 Έτσι τώρα ας μεταγλωττίσετε ξανά αυτό πρόγραμμα, κάνουν dot άρματα κάθετος. 1112 00:54:04,700 --> 00:54:07,950 >> Και για τρίτη φορά, ας δείτε αν αυτό ανταποκρίνεται στις προσδοκίες μου. 1113 00:54:07,950 --> 00:54:21,480 1, 10, εισάγετε, ναι, εντάξει, 1.000, διαιρούμενο με το 10.000, είναι 0,100000. 1114 00:54:21,480 --> 00:54:24,952 Και αποδεικνύεται μπορούμε να ελέγξουμε πόσα αριθμοί είναι μετά από αυτά τα δεκαδικά σημεία. 1115 00:54:24,952 --> 00:54:25,660 Εμείς πραγματικά θα. 1116 00:54:25,660 --> 00:54:26,790 Θα επανέλθω στο θέμα αυτό. 1117 00:54:26,790 --> 00:54:28,440 >> Αλλά τώρα, στην πραγματικότητα, τα μαθηματικά είναι σωστή. 1118 00:54:28,440 --> 00:54:30,090 Έτσι, και πάλι, ποια είναι η takeaway εδώ; 1119 00:54:30,090 --> 00:54:33,050 Αποδεικνύεται ότι σε C, υπάρχουν όχι μόνο απλώς strings-- και, στην πραγματικότητα, 1120 00:54:33,050 --> 00:54:36,120 Δεν υπάρχουν πραγματικά, γιατί προσθέστε αυτές με τη βιβλιοθήκη CS50. 1121 00:54:36,120 --> 00:54:37,710 Αλλά δεν υπάρχουν μόνο ints. 1122 00:54:37,710 --> 00:54:38,990 >> Υπάρχουν επιπλέει επίσης. 1123 00:54:38,990 --> 00:54:42,810 Και αποδεικνύεται ένα σωρό άλλα δεδομένα τύπους επίσης, ότι θα χρησιμοποιήσουμε πριν από καιρό. 1124 00:54:42,810 --> 00:54:46,270 Βγάζει αν θέλετε μια ενιαία χαρακτήρα, δεν είναι μια σειρά χαρακτήρων, 1125 00:54:46,270 --> 00:54:47,610 μπορείτε να χρησιμοποιήσετε μόνο ένα char. 1126 00:54:47,610 --> 00:54:52,350 >> Αποδεικνύεται ότι αν θέλετε μια bool, μια τιμή Boolean, true ή false μόνο, 1127 00:54:52,350 --> 00:54:56,840 χάρη στη βιβλιοθήκη CS50, έχουμε προστίθεται στο C τύπου δεδομένων bool, καθώς και. 1128 00:54:56,840 --> 00:54:59,180 Αλλά είναι επίσης παρούσα σε πολλές άλλες γλώσσες. 1129 00:54:59,180 --> 00:55:04,130 Και αποδεικνύεται ότι μερικές φορές σας Πρέπει μεγαλύτερους αριθμούς, στη συνέχεια, έρχονται από προεπιλογή 1130 00:55:04,130 --> 00:55:05,210 με ints και επιπλέει. 1131 00:55:05,210 --> 00:55:10,590 >> Και, στην πραγματικότητα, ένα διπλό είναι ένας αριθμός ότι δεν χρησιμοποιεί 32 bits, αλλά 64 bits. 1132 00:55:10,590 --> 00:55:14,990 Και ένα μεγάλο χρονικό διάστημα είναι ένας αριθμός που χρησιμοποιεί όχι 32, bits αλλά 64 bits, 1133 00:55:14,990 --> 00:55:19,190 αντίστοιχα, για κινητής υποδιαστολής αξιών και ακέραιοι, αντίστοιχα. 1134 00:55:19,190 --> 00:55:22,780 Ας πραγματικότητα τώρα δείτε αυτό σε δράση. 1135 00:55:22,780 --> 00:55:26,150 >> Πάω να προχωρήσει εδώ και μαστίγιο μέχρι ένα άλλο πρόγραμμα. 1136 00:55:26,150 --> 00:55:32,020 Εδώ, Πάω να πάει μπροστά και δεν περιλαμβάνουν CS50.h. 1137 00:55:32,020 --> 00:55:34,910 Και επιτρέψτε μου να πάω, περιλαμβάνει τις τυποποιημένες IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> Και θα παρατηρήσετε κάτι funky συμβαίνει εδώ. 1139 00:55:37,320 --> 00:55:40,592 Δεν είναι χρωματική κωδικοποίηση πράγματα στη με τον ίδιο τρόπο όπως και πριν. 1140 00:55:40,592 --> 00:55:43,550 Και αποδεικνύεται, ότι είναι γιατί δεν έχουν δώσει το πράγμα ένα όνομα αρχείου. 1141 00:55:43,550 --> 00:55:47,270 >> Πάω να καλέσετε αυτό το ένα sizeof.c, και χτύπησε Αποθήκευση. 1142 00:55:47,270 --> 00:55:51,039 Και παρατηρήστε τι συμβαίνει στο μου πολύ άσπρο κωδικός κατά της μαύρο φόντο. 1143 00:55:51,039 --> 00:55:52,830 Τώρα, τουλάχιστον υπάρχει κάποια μωβ εκεί. 1144 00:55:52,830 --> 00:55:54,490 Και είναι σύνταξη τονίζεται. 1145 00:55:54,490 --> 00:55:57,700 >> Αυτό συμβαίνει γιατί, πολύ απλά, δεν έχω είπε ο IDE τι τύπο αρχείου 1146 00:55:57,700 --> 00:56:01,060 είναι δίνοντάς του ένα όνομα, και συγκεκριμένα μια επέκταση αρχείου. 1147 00:56:01,060 --> 00:56:03,620 Τώρα, ας πάμε μπροστά και να το κάνουμε αυτό. 1148 00:56:03,620 --> 00:56:08,910 Πάω να πάει μπροστά και πολύ απλά εκτυπώσετε το following-- bool 1149 00:56:08,910 --> 00:56:11,080 Είναι τοις εκατό LU. 1150 00:56:11,080 --> 00:56:12,950 >> Θα επανέλθω σε ότι ακριβώς σε μια στιγμή. 1151 00:56:12,950 --> 00:56:15,840 Και τότε Πάω να μέγεθος εκτύπωσης bool. 1152 00:56:15,840 --> 00:56:18,170 Και τώρα, απλά για να σώσει τον εαυτό μου κάποια στιγμή, είμαι 1153 00:56:18,170 --> 00:56:20,280 πρόκειται να κάνει μια ολόκληρη μάτσο αυτά ταυτόχρονα. 1154 00:56:20,280 --> 00:56:24,620 Και, συγκεκριμένα, Πάω να αλλάξετε αυτό σε ένα char και χαρα. 1155 00:56:24,620 --> 00:56:27,760 Αυτό και μόνο, είμαι πρόκειται να αλλάξει με ένα διπλό και ένα διπλό. 1156 00:56:27,760 --> 00:56:31,440 >> Αυτό και μόνο, είμαι πρόκειται να αλλάξει σε ένα πλωτήρα και έναν πλωτήρα. 1157 00:56:31,440 --> 00:56:35,670 Αυτό και μόνο, Πάω να αλλάξει σε έναν int και έναν int. 1158 00:56:35,670 --> 00:56:38,660 Και αυτό, Πάω να αλλάξει σε πολύ μεγάλο. 1159 00:56:38,660 --> 00:56:40,840 Και είναι ακόμα λαμβάνοντας εδώ και πολύ καιρό, πολύ καιρό. 1160 00:56:40,840 --> 00:56:44,572 >> Και στη συνέχεια, τέλος, έδωσα τον εαυτό μου ένα πάρα πολλές, string. 1161 00:56:44,572 --> 00:56:47,030 Αποδεικνύεται ότι σε C, υπάρχει το ειδικό φορέα που ονομάζεται 1162 00:56:47,030 --> 00:56:50,260 μέγεθος αυτό είναι κυριολεκτικά πρόκειται να, όταν τρέχει, 1163 00:56:50,260 --> 00:56:52,099 πείτε μας το μέγεθος της κάθε μία από αυτές τις μεταβλητές. 1164 00:56:52,099 --> 00:56:53,890 Και αυτό είναι ένας τρόπος, τώρα, μπορούμε να συνδέσουμε πίσω 1165 00:56:53,890 --> 00:56:57,140 στη συζήτηση της περασμένης εβδομάδας των δεδομένων και την εκπροσώπηση. 1166 00:56:57,140 --> 00:57:00,330 >> Επιτρέψτε μου να προχωρήσει και να συντάξει το μέγεθος της dot μέγεθος κάθετο της. 1167 00:57:00,330 --> 00:57:01,210 Και ας δούμε. 1168 00:57:01,210 --> 00:57:05,210 Αποδεικνύεται ότι σε C, ειδικά για CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 ειδικά για το λειτουργικό σύστημα Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 η οποία είναι ένα λειτουργικό 64-bit σύστημα σε αυτή την περίπτωση, 1171 00:57:11,100 --> 00:57:14,189 μια bool πρόκειται να χρησιμοποιήστε ένα byte του χώρου. 1172 00:57:14,189 --> 00:57:16,480 Αυτό είναι το πώς μετριέται το μέγεθος, όχι σε bits, αλλά σε bytes. 1173 00:57:16,480 --> 00:57:18,690 Και υπενθυμίζουν ότι ένα byte είναι οκτώ bits. 1174 00:57:18,690 --> 00:57:22,030 Έτσι, μια bool, ακόμα κι αν τεχνικά μόνο που χρειάζεται είναι 0 ή 1, 1175 00:57:22,030 --> 00:57:24,092 είναι λίγο σπάταλη πώς έχουμε εφαρμόσει. 1176 00:57:24,092 --> 00:57:26,800 Είναι πραγματικά πρόκειται να χρησιμοποιήσετε ένα ολόκληρο byte-- έτσι ώστε όλα τα μηδενικά, είναι ίσως 1177 00:57:26,800 --> 00:57:31,050 όλα αυτά, ή κάτι τέτοιο, ή απλά ένα 1 μεταξύ των οκτώ bits. 1178 00:57:31,050 --> 00:57:34,962 >> Μια χαρα, εν τω μεταξύ, που χρησιμοποιείται για ένα χαρακτήρα σαν χαρακτήρων ASCII ανά την περασμένη εβδομάδα, 1179 00:57:34,962 --> 00:57:36,170 πρόκειται να είναι ένα χαρακτήρα. 1180 00:57:36,170 --> 00:57:42,340 Και αυτό synchs με την αντίληψή μας της να είναι όχι περισσότερο από 256 bits-- μάλλον, 1181 00:57:42,340 --> 00:57:45,360 synchs επάνω με το που είναι όχι περισσότερο από 8 bits, η οποία 1182 00:57:45,360 --> 00:57:47,450 μας δίνει όσο το 256 τιμές. 1183 00:57:47,450 --> 00:57:49,680 Ένα διπλό πρόκειται να είναι 8 bytes ή 64 bits. 1184 00:57:49,680 --> 00:57:50,510 >> Ο πλωτήρας είναι 4. 1185 00:57:50,510 --> 00:57:51,690 Ένας int είναι 4. 1186 00:57:51,690 --> 00:57:52,980 Ένα μακρύ, μακρύ είναι 8. 1187 00:57:52,980 --> 00:57:54,716 Και μια σειρά είναι 8. 1188 00:57:54,716 --> 00:57:55,840 Αλλά μην ανησυχείτε γι 'αυτό. 1189 00:57:55,840 --> 00:57:57,340 Εμείς πάμε για να ξεκολλήσετε το στρώμα. 1190 00:57:57,340 --> 00:57:59,940 Αποδεικνύεται, χορδές μπορούν να να είναι μεγαλύτερο από 8 bytes. 1191 00:57:59,940 --> 00:58:02,310 >> Και, πράγματι, έχουμε γράψει χορδές ήδη, γεια κόσμο, 1192 00:58:02,310 --> 00:58:03,700 περισσότερο από 8 bytes. 1193 00:58:03,700 --> 00:58:06,270 Αλλά θα επανέλθουμε ότι ακριβώς σε μια στιγμή. 1194 00:58:06,270 --> 00:58:09,690 Αλλά η Take Away εδώ είναι η ακόλουθη. 1195 00:58:09,690 --> 00:58:15,320 >> Κάθε υπολογιστής έχει μόνο ένα πεπερασμένο ποσότητα της μνήμης και του χώρου. 1196 00:58:15,320 --> 00:58:17,860 Μπορείτε να αποθηκεύσετε μόνο τόσα πολλά αρχεία στο Mac ή το PC σας. 1197 00:58:17,860 --> 00:58:23,030 Μπορείτε να αποθηκεύσετε μόνο τόσα πολλά προγράμματα RAM που εκτελούνται ταυτόχρονα, κατ 'ανάγκη, ακόμη και 1198 00:58:23,030 --> 00:58:26,360 με εικονική μνήμη, διότι Έχετε ένα πεπερασμένο ποσό της μνήμης RAM. 1199 00:58:26,360 --> 00:58:28,990 >> Και ακριβώς για να picture-- αν δεν έχετε ανοίξει ένα φορητό υπολογιστή 1200 00:58:28,990 --> 00:58:31,300 ή να το παραγγείλετε επιπλέον μνήμη για έναν υπολογιστή, μπορείτε 1201 00:58:31,300 --> 00:58:33,670 μπορεί να μην γνωρίζουν ότι στο εσωτερικό του υπολογιστή σας 1202 00:58:33,670 --> 00:58:36,590 Είναι κάτι που φαίνεται λίγο σαν αυτό. 1203 00:58:36,590 --> 00:58:40,540 Έτσι, αυτό είναι απλά μια κοινή εταιρεία με την επωνυμία Κρίσιμης σημασίας που κάνει RAM για υπολογιστές. 1204 00:58:40,540 --> 00:58:43,620 Και μνήμη RAM είναι όπου τα προγράμματα ζουν, ενώ τρέχετε. 1205 00:58:43,620 --> 00:58:46,630 >> Έτσι, σε κάθε Mac ή PC, όταν κάνετε διπλό κάντε κλικ σε ένα πρόγραμμα, και ανοίγει, 1206 00:58:46,630 --> 00:58:48,921 και ανοίγει κάποιο έγγραφο του Word ή κατι τετοιο, 1207 00:58:48,921 --> 00:58:51,764 το αποθηκεύει προσωρινά στην RAM, διότι RAM είναι ταχύτερη 1208 00:58:51,764 --> 00:58:53,680 από τον σκληρό σας δίσκο, ή δίσκο στερεάς κατάστασης σας. 1209 00:58:53,680 --> 00:58:56,600 Έτσι είναι ακριβώς όπου τα προγράμματα πάτε για να ζήσουν όταν τρέχετε, 1210 00:58:56,600 --> 00:58:58,060 ή όταν τα αρχεία που χρησιμοποιούνται. 1211 00:58:58,060 --> 00:59:00,890 >> Έτσι ώστε να έχετε τα πράγματα που φαίνονται όπως αυτό στο εσωτερικό του φορητού υπολογιστή σας, 1212 00:59:00,890 --> 00:59:03,320 ή ελαφρώς μεγαλύτερα πράγματα στο εσωτερικό του υπολογιστή σας. 1213 00:59:03,320 --> 00:59:07,440 Αλλά το κλειδί είναι να έχετε μόνο ένα πεπερασμένο αριθμό από αυτά τα πράγματα. 1214 00:59:07,440 --> 00:59:11,230 Και υπάρχει μόνο ένα πεπερασμένο ποσό της hardware που κάθεται σε αυτό το γραφείο δεξιά 1215 00:59:11,230 --> 00:59:11,730 εδώ. 1216 00:59:11,730 --> 00:59:15,920 >> Έτσι, σίγουρα, δεν μπορούμε να αποθηκεύσει απείρως μακρύ αριθμούς. 1217 00:59:15,920 --> 00:59:19,030 Και, όμως, αν νομίζετε ότι πίσω στο δημοτικό σχολείο, πόσα ψηφία μπορούν να 1218 00:59:19,030 --> 00:59:21,400 έχετε το δικαίωμα της υποδιαστολής; 1219 00:59:21,400 --> 00:59:24,680 Για το θέμα αυτό, πόσα ψηφία μπορούν να έχετε στα αριστερά του υποδιαστολή; 1220 00:59:24,680 --> 00:59:26,300 Πραγματικά, απείρως πολλά. 1221 00:59:26,300 --> 00:59:30,840 >> Τώρα, εμείς οι άνθρωποι θα μπορούσαν μόνο ξέρουν πώς να προφέρει εκατομμύρια, 1222 00:59:30,840 --> 00:59:34,990 και δισεκατομμύρια, τρισεκατομμύρια, και τετράκις εκατομμύρια, και τετράκις εκατομμύρια. 1223 00:59:34,990 --> 00:59:39,370 Και είμαι πιέζει τα όρια της μου understanding-- ή my-- καταλαβαίνω 1224 00:59:39,370 --> 00:59:41,110 αριθμούς, αλλά μου προφορά των αριθμών. 1225 00:59:41,110 --> 00:59:44,720 Αλλά μπορεί να πάρει απείρως μεγάλο με απείρως πολλά ψηφία προς τα αριστερά 1226 00:59:44,720 --> 00:59:47,050 ή προς τα δεξιά ενός δεκαδικού ψηφίου. 1227 00:59:47,050 --> 00:59:50,040 >> Αλλά υπολογιστές έχουν μόνο ένα πεπερασμένο ποσό της μνήμης, 1228 00:59:50,040 --> 00:59:53,510 ένας πεπερασμένος αριθμός των τρανζίστορ, ένα πεπερασμένο αριθμό λαμπτήρων μέσα. 1229 00:59:53,510 --> 00:59:57,350 Έτσι τι συμβαίνει όταν έχετε ξεμείνει από χώρο; 1230 00:59:57,350 --> 00:59:59,620 Με άλλα λόγια, αν σκεφτείτε την περασμένη εβδομάδα 1231 00:59:59,620 --> 01:00:03,160 όταν μιλήσαμε για τους αριθμούς οι ίδιοι που εκπροσωπούνται σε δυαδική, 1232 01:00:03,160 --> 01:00:05,480 ας υποθέσουμε ότι έχουμε Αυτή η τιμή 8-bit εδώ. 1233 01:00:05,480 --> 01:00:08,290 >> Και έχουμε επτά του 1 και ένα 0. 1234 01:00:08,290 --> 01:00:10,827 Και ας υποθέσουμε ότι θέλουμε για να προσθέσετε 1 σε αυτήν την τιμή. 1235 01:00:10,827 --> 01:00:12,410 Αυτό είναι ένα πραγματικά μεγάλο αριθμό τώρα. 1236 01:00:12,410 --> 01:00:16,610 >> Αυτό είναι 254, αν θυμάμαι τα μαθηματικά από την προηγούμενη εβδομάδα δεξιά. 1237 01:00:16,610 --> 01:00:19,480 Αλλά τι γίνεται αν αλλάξω ότι η δεξιότερη το 0 έως το 1; 1238 01:00:19,480 --> 01:00:22,800 Το ακέραιο αριθμό, των Φυσικά, γίνεται οκτώ 1 του. 1239 01:00:22,800 --> 01:00:24,050 Έτσι, είμαστε ακόμα καλά. 1240 01:00:24,050 --> 01:00:27,204 >> Και ότι αντιπροσωπεύει πιθανώς 255, αν και ανάλογα με το περιεχόμενο 1241 01:00:27,204 --> 01:00:29,120 θα μπορούσε στην πραγματικότητα αντιπροσωπεύουν ένας αρνητικός αριθμός. 1242 01:00:29,120 --> 01:00:31,240 Αλλά περισσότερα για αυτό κάποια άλλη στιγμή. 1243 01:00:31,240 --> 01:00:34,220 Αυτό αισθάνεται σαν να είναι περίπου τόσο υψηλές όσο μπορώ να μετρήσω. 1244 01:00:34,220 --> 01:00:35,290 >> Τώρα, αυτό είναι μόνο 8 bits. 1245 01:00:35,290 --> 01:00:38,170 Και το Mac μου, σίγουρα, έχει τον τρόπο περισσότερο από 8 bits της μνήμης. 1246 01:00:38,170 --> 01:00:39,170 Αλλά έχει πεπερασμένη. 1247 01:00:39,170 --> 01:00:43,230 Έτσι, το ίδιο επιχείρημα ισχύει, έστω και αν έχουν περισσότερα από αυτά τα αυτά στην οθόνη. 1248 01:00:43,230 --> 01:00:47,020 >> Αλλά τι θα συμβεί αν είστε αποθήκευση αυτού του αριθμού, 255, 1249 01:00:47,020 --> 01:00:49,290 και θέλετε να μετρήσει 1 bit υψηλότερο; 1250 01:00:49,290 --> 01:00:51,600 Θέλετε να πάτε 255-256. 1251 01:00:51,600 --> 01:00:55,800 Το πρόβλημα, βέβαια, είναι ότι αν αρχίζουν να μετρούν από το μηδέν, όπως την περασμένη εβδομάδα, 1252 01:00:55,800 --> 01:00:59,670 δεν μπορεί να μετρήσει ως υψηλής ως 256, πόσο μάλλον 257, 1253 01:00:59,670 --> 01:01:02,584 πόσο μάλλον 258, m γιατί αυτό συμβαίνει όταν προσθέτετε ένα 1; 1254 01:01:02,584 --> 01:01:05,000 Εάν έχετε κάνει το παλιό δημοτικό σχολείο προσέγγιση, μπορείτε να βάλετε ένα 1 εδώ, 1255 01:01:05,000 --> 01:01:08,150 και, στη συνέχεια, 1 συν 1 είναι 2, αλλά αυτό είναι πραγματικά ένα μηδέν, θα μεταφέρουν το 1, 1256 01:01:08,150 --> 01:01:09,695 φέρουν το 1, φέρουν το 1. 1257 01:01:09,695 --> 01:01:12,620 Όλα αυτά τα πράγματα, αυτά τα 1, πηγαίνετε στο μηδέν. 1258 01:01:12,620 --> 01:01:17,820 Και θα περατωθεί, ναι, όπως κάποιος επεσήμανε, ένα 1 στην αριστερή πλευρά. 1259 01:01:17,820 --> 01:01:22,540 Αλλά ό, τι μπορείτε πραγματικά να δείτε και να ταιριάζει στη μνήμη 1260 01:01:22,540 --> 01:01:27,960 είναι μόλις οκτώ 0, το οποίο είναι να πούμε σε κάποιο σημείο, αν, ένας υπολογιστής, 1261 01:01:27,960 --> 01:01:32,490 Προσπάθησα μετρώντας αρκετά ψηλά, είστε πρόκειται να τυλίξει γύρω, φαίνεται, 1262 01:01:32,490 --> 01:01:35,850 στο μηδέν, ή ίσως ακόμη και αρνητική αριθμοί, οι οποίοι είναι ακόμα χαμηλότερα από το μηδέν. 1263 01:01:35,850 --> 01:01:37,260 >> Και μπορούμε να το είδος δείτε αυτό. 1264 01:01:37,260 --> 01:01:39,900 Επιτρέψτε μου να προχωρήσει και να γράψετε ένα πραγματικό γρήγορο πρόγραμμα εδώ. 1265 01:01:39,900 --> 01:01:43,690 Επιτρέψτε μου να προχωρήσει και να γράψετε ένα πρόγραμμα που ονομάζεται υπερχείλιση. 1266 01:01:43,690 --> 01:01:49,980 Περιλαμβάνουν CS50.h, περιλαμβάνουν πρότυπο IO.h-- OH, 1267 01:01:49,980 --> 01:01:51,730 Έχω πραγματικά χαμένη επισήμανση σύνταξης μου. 1268 01:01:51,730 --> 01:01:54,440 Ας σώσει αυτό ως overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> Και τώρα int main void-- και πριν από καιρό, εμείς θα 1270 01:01:57,084 --> 01:01:59,500 επανέλθει στο εξηγεί γιατί κρατάμε το γράψιμο int main άκυρη. 1271 01:01:59,500 --> 01:02:02,080 Αλλά για τώρα, ας το κάνουμε αυτό, λαμβάνοντας ως δεδομένο. 1272 01:02:02,080 --> 01:02:06,200 Ας δώσω στον εαυτό μου μια int, και η προετοιμασία στο 0. 1273 01:02:06,200 --> 01:02:11,716 >> Ας στη συνέχεια να κάνουμε για int πάρω zero-- στην πραγματικότητα, ας κάνουμε ένα άπειρο βρόχο 1274 01:02:11,716 --> 01:02:12,590 και να δούμε τι θα συμβεί. 1275 01:02:12,590 --> 01:02:22,440 Ενώ είναι αλήθεια, τότε ας εκτυπώσετε n Είναι τοις εκατό i, ανάστροφη κάθετο n, plug-in n. 1276 01:02:22,440 --> 01:02:27,200 Αλλά, τώρα, ας κάνουμε n παίρνει n + 1. 1277 01:02:27,200 --> 01:02:29,660 >> Έτσι με άλλα λόγια, για κάθε επανάληψη αυτού του άπειρο βρόχο, 1278 01:02:29,660 --> 01:02:32,550 ας ρίξουμε τιμή του n, και προσθέστε 1 σε αυτό, και στη συνέχεια 1279 01:02:32,550 --> 01:02:34,350 αποθηκεύσει το αποτέλεσμα πίσω στο ν στα αριστερά. 1280 01:02:34,350 --> 01:02:37,150 Και, στην πραγματικότητα, έχουμε δει σύνταξη ελαφρώς όπως αυτό, εν συντομία. 1281 01:02:37,150 --> 01:02:39,730 Ένα δροσερό τέχνασμα είναι αντί της γραφής όλα αυτά έξω, 1282 01:02:39,730 --> 01:02:42,770 μπορείτε πραγματικά να πω ένα n συν ισούται με 1. 1283 01:02:42,770 --> 01:02:47,480 >> Ή αν θέλετε πραγματικά να είναι φανταχτερό, μπορείτε να πείτε n συν συν ημι-παχύ έντερο. 1284 01:02:47,480 --> 01:02:50,130 Αλλά αυτά τα δύο τελευταία είναι ακριβώς αυτό που θα αποκαλούσαμε συντακτική ζάχαρη 1285 01:02:50,130 --> 01:02:50,790 για το πρώτο πράγμα. 1286 01:02:50,790 --> 01:02:53,456 >> Το πρώτο πράγμα είναι πιο σαφής, εντελώς εντάξει, εντελώς σωστό. 1287 01:02:53,456 --> 01:02:55,470 Αλλά αυτό είναι πιο συχνή, θα πω. 1288 01:02:55,470 --> 01:02:57,210 Γι 'αυτό και θα το κάνουμε αυτό για μια στιγμή. 1289 01:02:57,210 --> 01:03:01,685 >> Ας κάνει τώρα υπερχείλισης, το οποίο ακούγεται μάλλον δυσοίωνο, τελεία υπερχείλιση κάθετος. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Ας δούμε, n πάρει αρκετά μεγάλο. 1292 01:03:09,852 --> 01:03:11,310 Αλλά ας σκεφτούμε, πόσο μεγάλη μπορεί ν πάρει; 1293 01:03:11,310 --> 01:03:12,870 >> το η είναι ένας int. 1294 01:03:12,870 --> 01:03:16,400 Είδαμε πριν από λίγο με το μέγεθος της παράδειγμα, ότι ένας int είναι τέσσερα bytes. 1295 01:03:16,400 --> 01:03:22,070 Γνωρίζουμε από την προηγούμενη εβδομάδα, τέσσερα bytes είναι 32 bits, διότι 8 φορές 4, που είναι 32. 1296 01:03:22,070 --> 01:03:23,460 Αυτό πρόκειται να είναι 4000000000. 1297 01:03:23,460 --> 01:03:25,802 >> Και είμαστε μέχρι 800.000. 1298 01:03:25,802 --> 01:03:28,510 Αυτό πρόκειται να πάρει για πάντα για να μετράνε τόσο υψηλές όσο μπορώ ενδεχομένως. 1299 01:03:28,510 --> 01:03:30,635 Έτσι, Πάω να πάει μπροστά, όπως ίσως πριν από καιρό, 1300 01:03:30,635 --> 01:03:34,910 και χτύπησε Ελέγχου Ντο-- ειλικρινά, Ελέγχου C, πολλή, όπου ο έλεγχος C γενικά 1301 01:03:34,910 --> 01:03:36,034 μέσα ακυρώσετε. 1302 01:03:36,034 --> 01:03:38,200 Δυστυχώς, επειδή αυτό τρέχει στο σύννεφο, 1303 01:03:38,200 --> 01:03:41,190 Μερικές φορές το σύννεφο είναι φτύσιμο τόσα πολλά πράγματα, 1304 01:03:41,190 --> 01:03:44,180 τόσο πολύ εξόδου, πρόκειται να πάρει λίγο χρόνο για την είσοδο μου 1305 01:03:44,180 --> 01:03:45,630 για να φτάσουμε στο σύννεφο. 1306 01:03:45,630 --> 01:03:49,240 Έτσι ακόμα κι αν χτύπησα Ελέγχου C πριν από λίγα δευτερόλεπτα, 1307 01:03:49,240 --> 01:03:53,110 αυτό είναι σίγουρα η πλευρά επίδραση της ένα άπειρο βρόχο. 1308 01:03:53,110 --> 01:03:56,070 >> Και έτσι σε αυτές τις περιπτώσεις, είμαστε πρόκειται να αφήσει ότι είναι. 1309 01:03:56,070 --> 01:03:59,050 Και θα πάμε να προσθέσετε ένα άλλο τερματικό παράθυρο εδώ 1310 01:03:59,050 --> 01:04:03,186 με το συν, το οποίο φυσικά δεν όπως ότι, δεδομένου ότι είναι ακόμα σκέφτεται. 1311 01:04:03,186 --> 01:04:05,310 Και ας πάμε μπροστά και να είναι λίγο πιο λογικό. 1312 01:04:05,310 --> 01:04:07,768 >> Πάω να πάει μπροστά και να κάνουμε αυτό μόνο finitely πολλές φορές. 1313 01:04:07,768 --> 01:04:10,047 Ας χρησιμοποιήσουμε ένα για το βρόχο, η οποία αναφέρθηκα νωρίτερα. 1314 01:04:10,047 --> 01:04:10,630 Ας το κάνουμε. 1315 01:04:10,630 --> 01:04:13,430 Δώστε μου ένα άλλο int μεταβλητή i παίρνει 0. 1316 01:04:13,430 --> 01:04:17,430 i είναι μικρότερο από ό, τι, ας πούμε, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 Και τώρα επιτρέψτε μου να πάει μπροστά και να εκτυπώσετε από n είναι τοις εκατό i, το κόμμα n. 1318 01:04:24,010 --> 01:04:27,547 Και τότε n-- αυτό εξακολουθεί να είναι πρόκειται να πάρει για πάντα. 1319 01:04:27,547 --> 01:04:28,130 Ας το κάνουμε. 1320 01:04:28,130 --> 01:04:30,620 >> n παίρνει n φορές 2. 1321 01:04:30,620 --> 01:04:34,140 Ή θα μπορούσε να είναι φανταχτερό και να κάνουμε φορές ισούται με 2. 1322 01:04:34,140 --> 01:04:37,120 Αλλά ας πούμε n ισούται με την ίδια, οι χρόνοι 2. 1323 01:04:37,120 --> 01:04:39,321 Με άλλα λόγια, σε αυτή την νέα έκδοση του προγράμματος, 1324 01:04:39,321 --> 01:04:41,820 Δεν θέλω να περιμένω για πάντα από παρόμοια 800.000 έως 4 δισ. 1325 01:04:41,820 --> 01:04:43,070 Ας πάρει αυτό το τελειώνουμε. 1326 01:04:43,070 --> 01:04:44,920 >> Ας πραγματικότητα διπλασιαστεί n κάθε φορά. 1327 01:04:44,920 --> 01:04:47,660 Η οποία, ανάκληση, διπλασιασμός είναι η απέναντι από έχοντας, φυσικά. 1328 01:04:47,660 --> 01:04:50,035 Και ενώ την περασμένη εβδομάδα έχουμε κάτι ξανά, και ξανά, 1329 01:04:50,035 --> 01:04:52,200 και πάλι, σούπερ γρήγορο, διπλασιασμό σίγουρα θα 1330 01:04:52,200 --> 01:04:58,080 να μας πάρει από το 1 έως το μεγαλύτερο δυνατό τιμή που μπορούμε να υπολογίζουμε σε με μια int. 1331 01:04:58,080 --> 01:04:59,750 >> Έτσι, ας κάνουμε ακριβώς αυτό. 1332 01:04:59,750 --> 01:05:01,720 Και θα επανέλθουμε σε αυτό πριν από καιρό. 1333 01:05:01,720 --> 01:05:04,180 Αλλά αυτό, πάλι, είναι ακριβώς όπως το μπλοκ επανάληψη στο Scratch. 1334 01:05:04,180 --> 01:05:05,600 Και θα χρησιμοποιήσετε αυτό πριν από καιρό. 1335 01:05:05,600 --> 01:05:10,170 >> Αυτό σημαίνει απλά αρίθμηση από το μηδέν μέχρι, αλλά όχι ίσες, με 64. 1336 01:05:10,170 --> 01:05:14,285 Και σε κάθε εκδοχή αυτής της βρόχο, απλά συνεχίστε προσαύξηση i. 1337 01:05:14,285 --> 01:05:18,990 Έτσι i ++ - και αυτή η γενική δομή στη γραμμή 7 είναι απλά ένα σούπερ κοινός τρόπος 1338 01:05:18,990 --> 01:05:22,290 των επαναλαμβάνοντας κάποιες γραμμές κωδικός, μερικοί αριθμό φορών. 1339 01:05:22,290 --> 01:05:23,362 Ποια γραμμές κώδικα; 1340 01:05:23,362 --> 01:05:25,570 Αυτά τα άγκιστρα, όπως σας μπορεί να φανεί από τώρα, 1341 01:05:25,570 --> 01:05:26,780 σημαίνει, κάντε τα εξής. 1342 01:05:26,780 --> 01:05:29,510 >> Είναι το σαν Scratch, όταν έχει τα κίτρινα μπλοκ 1343 01:05:29,510 --> 01:05:32,680 και άλλα χρώματα αυτό το είδος της ενστερνίζεται ή αγκαλιάζουν άλλα μπλοκ. 1344 01:05:32,680 --> 01:05:34,750 Αυτό είναι ό, τι αυτά τα σγουρά τιράντες κάνει εδώ. 1345 01:05:34,750 --> 01:05:40,200 Έτσι, αν πήρα τη σύνταξη μου right-- σας μπορείτε να δείτε το σύμβολο καρότο σε C μέσα 1346 01:05:40,200 --> 01:05:42,706 αυτό είναι το πώς πολλές φορές ήμουν προσπαθεί να λύσει αυτό το πρόβλημα. 1347 01:05:42,706 --> 01:05:45,330 Ας απαλλαγούμε από εκείνο το ένα συνολικά, και να κλείσετε αυτό το παράθυρο. 1348 01:05:45,330 --> 01:05:46,520 Και θα χρησιμοποιήσουμε το νέο. 1349 01:05:46,520 --> 01:05:51,980 Κάντε υπερχείλιση, dot κάθετος υπερχείλιση, Enter, εντάξει, 1350 01:05:51,980 --> 01:05:53,090 φαίνεται άσχημα στην αρχή. 1351 01:05:53,090 --> 01:05:56,200 Αλλά ας μετακινηθείτε πίσω στο χρόνο, γιατί έκανα αυτό 64 φορές. 1352 01:05:56,200 --> 01:05:58,700 >> Και παρατηρήστε την πρώτη φορά, n είναι 1. 1353 01:05:58,700 --> 01:06:03,110 Για δεύτερη φορά, η είναι 2, τότε 4, τότε 8, στη συνέχεια 16. 1354 01:06:03,110 --> 01:06:09,450 Και φαίνεται ότι μόλις Παίρνω σε περίπου 1 δισεκατομμύριο, 1355 01:06:09,450 --> 01:06:12,800 αν μπορώ να διπλασιαστεί και πάλι, ότι θα πρέπει να μου δώσει 2 δισ. 1356 01:06:12,800 --> 01:06:14,980 Αλλά αποδεικνύεται, είναι ακριβώς πάνω στην ακμή. 1357 01:06:14,980 --> 01:06:18,930 >> Και γι 'αυτό πραγματικά ξεχειλίζει ένας int από 1 δισεκατομμύριο 1358 01:06:18,930 --> 01:06:23,514 σε περίπου αρνητικά 2 δισεκατομμύρια, επειδή ένας ακέραιος, 1359 01:06:23,514 --> 01:06:25,430 σε αντίθεση με τον έχουμε αριθμούς καταντούν την περασμένη εβδομάδα, 1360 01:06:25,430 --> 01:06:28,397 μπορεί να είναι τόσο θετικές όσο και αρνητικές στην πραγματικότητα και σε έναν υπολογιστή. 1361 01:06:28,397 --> 01:06:30,730 Και έτσι τουλάχιστον ένα από αυτά bits αποτελεσματικά κλαπεί. 1362 01:06:30,730 --> 01:06:34,190 Έτσι έχουμε πραγματικά μόνο 31 bits, ή 2 δισ πιθανές τιμές. 1363 01:06:34,190 --> 01:06:38,220 >> Αλλά για τώρα, το πακέτο είναι αρκετά Με απλά λόγια, όποια και αν αυτοί οι αριθμοί είναι 1364 01:06:38,220 --> 01:06:42,280 και ό, τι τα μαθηματικά είναι, κάτι κακό θα συμβεί τελικά, 1365 01:06:42,280 --> 01:06:46,980 γιατί τελικά προσπαθείτε να μεταθέτει τα bits μία πάρα πολλές φορές. 1366 01:06:46,980 --> 01:06:51,060 Και μπορείτε αποτελεσματικά να πάει από όλους 1 προς ίσως Όλα τα 0, ή ίσως 1367 01:06:51,060 --> 01:06:54,260 απλά κάποιο άλλο μοτίβο που σαφώς, ανάλογα με τα συμφραζόμενα, 1368 01:06:54,260 --> 01:06:56,342 μπορεί να ερμηνευθεί ως αρνητικός αριθμός. 1369 01:06:56,342 --> 01:06:59,300 Και έτσι φαίνεται το υψηλότερο I μπορεί να υπολογίζει σε αυτό το συγκεκριμένο πρόγραμμα 1370 01:06:59,300 --> 01:07:01,210 Είναι μόνο περίπου 1 δις. 1371 01:07:01,210 --> 01:07:02,760 Αλλά υπάρχει μια μερική λύση εδώ. 1372 01:07:02,760 --> 01:07:03,480 Ξέρεις τι? 1373 01:07:03,480 --> 01:07:07,600 >> Επιτρέψτε μου να αλλάξει από μια int σε μια πολύ καιρό. 1374 01:07:07,600 --> 01:07:10,633 Και επιτρέψτε μου να προχωρήσει εδώ και say-- Πάω να έχουν 1375 01:07:10,633 --> 01:07:12,290 να αλλάξει αυτό σε ένα ανυπόγραφο καιρό. 1376 01:07:12,290 --> 01:07:16,860 Ή, ας δούμε, εγώ ποτέ δεν θυμάμαι τον εαυτό μου. 1377 01:07:16,860 --> 01:07:19,920 >> Ας πάμε μπροστά και να κάνουν υπερχείλισης. 1378 01:07:19,920 --> 01:07:21,860 Όχι, δεν είναι αυτό, Δ.Ν., σας ευχαριστώ. 1379 01:07:21,860 --> 01:07:23,430 Έτσι, μερικές φορές Clang μπορεί να είναι χρήσιμη. 1380 01:07:23,430 --> 01:07:27,550 Εγώ δεν θυμάμαι ποιο είναι το format προσδιοριστή ήταν για πολύ καιρό. 1381 01:07:27,550 --> 01:07:28,950 >> Αλλά, πράγματι, Clang μου είπε. 1382 01:07:28,950 --> 01:07:31,570 Το πράσινο είναι ένα είδος καλά, εξακολουθεί να σημαίνει ότι θα κάνει ένα λάθος. 1383 01:07:31,570 --> 01:07:33,190 Είναι μαντέψουν ότι εννοούσα LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Έτσι, επιτρέψτε μου να εκμεταλλευτώ αυτή είναι η συμβουλή, μια μακρά μακρά δεκαδικός αριθμός, εκτός από αυτό. 1385 01:07:38,750 --> 01:07:43,190 Και επιτρέψτε μου να επαναληφθεί, dot κάθετο υπερχείλιση, Enter. 1386 01:07:43,190 --> 01:07:45,020 Και τώρα τι είναι cool είναι αυτό. 1387 01:07:45,020 --> 01:07:49,140 >> Αν μου μετακινηθείτε πίσω στο χρόνο, έχουμε ακόμα αρχίσει μετρώντας την ίδια place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Ανακοίνωση, παίρνουμε όλα τα τρόπο έως 1 δισ. 1390 01:07:54,860 --> 01:07:57,070 Αλλά τότε μπορούμε με ασφάλεια να πάρει στο 2000000000. 1391 01:07:57,070 --> 01:08:01,300 >> Στη συνέχεια έχουμε την ευκαιρία να 4000000000, τότε 8000000000, 17000000000. 1392 01:08:01,300 --> 01:08:03,340 Και πάμε ψηλότερα, και υψηλότερη, και υψηλότερη. 1393 01:08:03,340 --> 01:08:05,740 Τελικά, αυτό, επίσης, τα διαλείμματα. 1394 01:08:05,740 --> 01:08:09,350 >> Τελικά, με ένα πολύ μακρύ, η οποία είναι η τιμή 64-bit, δεν 1395 01:08:09,350 --> 01:08:13,660 μια τιμή 32-bit, αν μετράνε πολύ υψηλή, μπορείτε τυλίξτε γύρω από το 0. 1396 01:08:13,660 --> 01:08:16,410 Και σε αυτή την περίπτωση, μπορούμε να συμβεί σε καταλήξετε με ένα αρνητικό αριθμό. 1397 01:08:16,410 --> 01:08:17,550 >> Έτσι, αυτό είναι ένα πρόβλημα. 1398 01:08:17,550 --> 01:08:20,439 Και αποδεικνύεται ότι αυτό το πρόβλημα δεν είναι το μόνο που απόκρυφες. 1399 01:08:20,439 --> 01:08:23,060 Ακόμα κι αν έχω σκόπιμα που προκαλείται με αυτά τα λάθη, 1400 01:08:23,060 --> 01:08:26,149 αποδεικνύεται βλέπουμε το είδος όλων γύρω μας, ή τουλάχιστον κάποιοι από εμάς κάνουμε. 1401 01:08:26,149 --> 01:08:28,939 >> Έτσι, σε Lego Star Wars, αν έχετε παίξει ποτέ το παιχνίδι, 1402 01:08:28,939 --> 01:08:33,830 αποδεικνύεται μπορείτε να πάτε γύρω από σπάζοντας τα πράγματα στον κόσμο LEGO, 1403 01:08:33,830 --> 01:08:36,640 και συλλογή νομισμάτων, κατ 'ουσίαν. 1404 01:08:36,640 --> 01:08:39,200 Και αν έχετε παίξει ποτέ Με αυτό τον τρόπο το παιχνίδι πάρα πολύ χρόνο, 1405 01:08:39,200 --> 01:08:42,630 όπως αυτή ανώνυμο επιμέρους Εδώ έκανε, ο συνολικός αριθμός 1406 01:08:42,630 --> 01:08:46,700 των κερμάτων που μπορείτε να συλλέξετε είναι, όπως φαίνεται, 4000000000. 1407 01:08:46,700 --> 01:08:48,240 >> Τώρα, με το είναι πραγματικά στρογγυλεμένες. 1408 01:08:48,240 --> 01:08:50,239 Έτσι LEGO προσπαθούσε να να κρατήσει τα πράγματα φιλική προς το χρήστη. 1409 01:08:50,239 --> 01:08:53,779 Δεν το κάνει ακριβώς 2 το 32 δύναμη, ανά την περασμένη εβδομάδα. 1410 01:08:53,779 --> 01:08:55,310 Αλλά 4000000000 είναι ένας λόγος. 1411 01:08:55,310 --> 01:08:58,979 Φαίνεται, με βάση αυτές τις πληροφορίες, ότι LEGO, και η εταιρεία που 1412 01:08:58,979 --> 01:09:02,624 έκανε αυτό το πραγματικό λογισμικό, αποφάσισε ότι ο μέγιστος αριθμός των κερμάτων 1413 01:09:02,624 --> 01:09:04,540 ο χρήστης μπορεί να συσσωρευτούν Είναι, πράγματι, 4000000000, 1414 01:09:04,540 --> 01:09:12,069 επειδή επέλεξαν τον κωδικό τους να χρησιμοποιήσει όχι πολύ καιρό, προφανώς, 1415 01:09:12,069 --> 01:09:16,140 αλλά απλά ένας ακέραιος αριθμός, ένα ανυπόγραφο ακέραιος, μόνο ένας θετικός ακέραιος, των οποίων η 1416 01:09:16,140 --> 01:09:18,089 μέγιστη τιμή περίπου είναι αυτό. 1417 01:09:18,089 --> 01:09:19,380 Λοιπόν, εδώ είναι ένα άλλο αστείο ένα. 1418 01:09:19,380 --> 01:09:23,500 Έτσι, στον πολιτισμό παιχνίδι, το οποίο κάποιοι από εσάς μπορεί να είναι εξοικειωμένοι με 1419 01:09:23,500 --> 01:09:26,660 αποδεικνύεται ότι πριν από χρόνια υπάρχει Ήταν ένα σφάλμα σε αυτό το παιχνίδι σύμφωνα με την οποία 1420 01:09:26,660 --> 01:09:28,750 αν έχετε παίξει το ρόλο του Γκάντι στο παιχνίδι, 1421 01:09:28,750 --> 01:09:34,020 αντί γι 'αυτόν είναι πολύ ειρηνιστής, αντ 'αυτού ήταν απίστευτα, απίστευτα 1422 01:09:34,020 --> 01:09:36,399 επιθετική, σε ορισμένες περιστάσεις. 1423 01:09:36,399 --> 01:09:40,529 Ειδικότερα, ο τρόπος που Πολιτισμός έργα είναι ότι εάν εσείς, ο παίκτης, 1424 01:09:40,529 --> 01:09:44,680 υιοθετήσει τη δημοκρατία, σας επιθετικότητα βαθμολογία παίρνει 1425 01:09:44,680 --> 01:09:48,130 μειώνεται κατά δύο, έτσι μείον μείον, και στη συνέχεια, μείον μείον. 1426 01:09:48,130 --> 01:09:50,569 >> Έτσι, μπορείτε να αφαιρέσετε 2 από πραγματική επαναλαμβάνετε. 1427 01:09:50,569 --> 01:09:56,650 Δυστυχώς, αν την επανάληψη σας είναι αρχικά 1, και μπορείτε να αφαιρέσετε 2 από αυτό 1428 01:09:56,650 --> 01:09:59,050 μετά την έγκριση της δημοκρατίας όπως ο Γκάντι εδώ ενδέχεται να 1429 01:09:59,050 --> 01:10:02,200 έχουν κάνει, γιατί ήταν πολύ passive-- 1 στην κλίμακα της επιθετικότητας. 1430 01:10:02,200 --> 01:10:04,830 Αλλά αν υιοθετεί τη δημοκρατία, στη συνέχεια, πηγαίνει από 1 έως αρνητική 1. 1431 01:10:04,830 --> 01:10:11,470 >> Δυστυχώς, ήταν χρησιμοποιώντας ανυπόγραφο αριθμούς, 1432 01:10:11,470 --> 01:10:15,400 πράγμα που σημαίνει ότι αντιμετωπίζονται ακόμα και αρνητική αριθμούς σαν να ήταν θετικές. 1433 01:10:15,400 --> 01:10:19,780 Και αποδεικνύεται ότι η θετικό ισοδύναμο της αρνητικής 1, 1434 01:10:19,780 --> 01:10:23,480 σε τυπικά προγράμματα υπολογιστών, είναι 255. 1435 01:10:23,480 --> 01:10:27,250 Έτσι, αν ο Γκάντι υιοθετεί , Και ως εκ τούτου η δημοκρατία έχει 1436 01:10:27,250 --> 01:10:32,470 βαθμολογία επιθετικότητα του μειώθηκε, στην πραγματικότητα κυλά γύρω στο 255 1437 01:10:32,470 --> 01:10:35,470 και τον πιο καθιστά επιθετικό χαρακτήρα στο παιχνίδι. 1438 01:10:35,470 --> 01:10:36,930 Έτσι, μπορείτε να το google επάνω σε αυτό. 1439 01:10:36,930 --> 01:10:39,380 Και ήταν, πράγματι, μία τυχαίο σφάλμα προγραμματισμού, 1440 01:10:39,380 --> 01:10:43,010 αλλά ότι μπήκαν αρκετά η γνώση από τότε. 1441 01:10:43,010 --> 01:10:44,360 >> Αυτό είναι όλα διασκέδαση και χαριτωμένο. 1442 01:10:44,360 --> 01:10:47,760 Πιο τρομακτικό είναι όταν πραγματικά πραγματικό κόσμο συσκευές, και όχι τα παιχνίδια, 1443 01:10:47,760 --> 01:10:48,820 έχουν αυτά τα ίδια σφάλματα. 1444 01:10:48,820 --> 01:10:54,500 Στην πραγματικότητα, μόλις πριν από ένα χρόνο ένα άρθρο ήρθε περισσότερα για το Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> Και το άρθρο σε πρώτη ματιά διαβάζει λίγο απόκρυφες. 1446 01:10:56,850 --> 01:11:01,480 Αλλά είπε αυτό, ένα λογισμικό ευπάθεια σε της Boeing 1447 01:11:01,480 --> 01:11:04,790 νέα 787 jet Dreamliner έχει η δυνατότητα να προκαλέσουν πιλότους 1448 01:11:04,790 --> 01:11:07,220 να χάσει τον έλεγχο της το αεροσκάφος, ενδεχομένως 1449 01:11:07,220 --> 01:11:11,750 στα μέσα της πτήσης, οι υπάλληλοι της FAA προειδοποίησε τις αεροπορικές εταιρείες πρόσφατα. 1450 01:11:11,750 --> 01:11:14,520 Ήταν ο προσδιορισμός ότι ένα μοντέλο 787 1451 01:11:14,520 --> 01:11:19,770 αεροπλάνο, το οποίο έχει τροφοδοτείται συνεχώς για 248 ημέρες 1452 01:11:19,770 --> 01:11:24,880 μπορεί να χάσει όλο το εναλλασσόμενο ρεύμα, AC, ηλεκτρική ενέργεια, λόγω της γεννήτριας 1453 01:11:24,880 --> 01:11:28,892 μονάδες ελέγχου, GCUs, ταυτόχρονα υπεισέλθω σε αποτυγχάνουν ασφαλή λειτουργία. 1454 01:11:28,892 --> 01:11:29,850 Είναι το είδος της απώλειας μου. 1455 01:11:29,850 --> 01:11:35,390 Αλλά το σημείωμα ανέφερε, εντάξει, τώρα πήρα ότι, η κατάσταση προκλήθηκε από ένα λογισμικό 1456 01:11:35,390 --> 01:11:38,590 αντιμετωπίσει στο εσωτερικό ο έλεγχος της γεννήτριας 1457 01:11:38,590 --> 01:11:44,860 μονάδες που θα ξεχειλίσει μετά 248 ημέρες συνεχούς ρεύματος. 1458 01:11:44,860 --> 01:11:47,070 Είμαστε έκδοση αυτή παρατηρήσετε να αποτρέψει την απώλεια 1459 01:11:47,070 --> 01:11:49,300 όλων των AC ηλεκτρικές δύναμη, η οποία θα μπορούσε να οδηγήσει 1460 01:11:49,300 --> 01:11:50,980 σε απώλεια του ελέγχου του αεροπλάνου. 1461 01:11:50,980 --> 01:11:55,380 >> Έτσι, κυριολεκτικά, υπάρχει κάποια ακέραιος, ή κάποιο ισοδύναμο τύπο δεδομένων, 1462 01:11:55,380 --> 01:11:57,960 που χρησιμοποιούνται στο λογισμικό σε ένα πραγματικό αεροπλάνο 1463 01:11:57,960 --> 01:12:00,756 ότι αν κρατήσει αεροπλάνο σας για αρκετά μεγάλο χρονικό διάστημα, το οποίο προφανώς 1464 01:12:00,756 --> 01:12:03,880 μπορεί να είναι η περίπτωση, αν είστε λίγο τρέξιμο τους συνεχώς και ποτέ δεν αποσυνδέοντας 1465 01:12:03,880 --> 01:12:06,810 αεροπλάνο σας, όπως φαίνεται, ή αφήνοντας τις μπαταρίες του πεθαίνουν, 1466 01:12:06,810 --> 01:12:09,840 τελικά θα μετρήσει μέχρι και πάνω, και πάνω, και επάνω, και επάνω, και επάνω. 1467 01:12:09,840 --> 01:12:12,150 >> Και, από τη φύση, πεπερασμένη ποσότητα μνήμης 1468 01:12:12,150 --> 01:12:15,880 θα ξεχειλίσει, το τροχαίο πίσω στο μηδέν ή κάποια αρνητική τιμή, 1469 01:12:15,880 --> 01:12:19,920 μια παρενέργεια της οποίας είναι η τρομακτικά πραγματική πραγματικότητα 1470 01:12:19,920 --> 01:12:23,970 ότι το αεροπλάνο μπορεί να χρειαστεί να γίνει επανεκκίνηση, αποτελεσματικά, 1471 01:12:23,970 --> 01:12:27,290 ή θα μπορούσε να πέσει, ακόμη χειρότερα, καθώς πετάει. 1472 01:12:27,290 --> 01:12:29,230 Έτσι, αυτά τα είδη των θεμάτων εξακολουθούν να είναι μαζί μας, 1473 01:12:29,230 --> 01:12:33,130 even-- αυτό ήταν ένα άρθρο το 2015, όλα τα πιο τρομακτικό 1474 01:12:33,130 --> 01:12:36,100 όταν δεν κάνουν απαραίτητα κατανοήσουν, να εκτιμήσουν, ή να προβλέψει 1475 01:12:36,100 --> 01:12:38,640 αυτά τα είδη των λαθών. 1476 01:12:38,640 --> 01:12:42,030 >> Έτσι αποδεικνύεται ότι υπάρχει μία άλλη κακό πράγμα για αναπαράσταση δεδομένων. 1477 01:12:42,030 --> 01:12:47,080 Αποδεικνύεται ότι ακόμα και άρματα είναι είδος εσφαλμένη, διότι άρματα, πάρα πολύ, 1478 01:12:47,080 --> 01:12:51,440 Πρότεινα τα 32 bits, ή ίσως 64, αν χρησιμοποιείτε ένα διπλό. 1479 01:12:51,440 --> 01:12:53,070 Αλλά αυτό είναι ακόμα περιορισμένη. 1480 01:12:53,070 --> 01:12:57,070 >> Και η σύλληψη είναι ότι, αν μπορείτε να θέσει έναν άπειρο αριθμό των αριθμών 1481 01:12:57,070 --> 01:12:59,460 μετά την υποδιαστολή, δεν υπάρχει κανένας τρόπος που μπορείτε 1482 01:12:59,460 --> 01:13:02,690 μπορεί να αντιπροσωπεύουν όλες τις δυνατές αριθμούς που διδαχθήκαμε 1483 01:13:02,690 --> 01:13:04,990 σε βαθμό σχολείο μπορούν να υπάρχουν στον κόσμο. 1484 01:13:04,990 --> 01:13:08,870 Ένας υπολογιστής, κατ 'ουσίαν, πρέπει να επιλέξετε ένα υποσύνολο αυτών των αριθμών 1485 01:13:08,870 --> 01:13:10,200 να εκπροσωπεί με ακρίβεια. 1486 01:13:10,200 --> 01:13:12,450 >> Τώρα, ο υπολογιστής μπορεί να γύρο ίσως λίγο, 1487 01:13:12,450 --> 01:13:17,900 και μπορεί να σας επιτρέψει να χονδρικά κατάστημα οποιοσδήποτε αριθμός που θα μπορούσε ενδεχομένως να θέλετε. 1488 01:13:17,900 --> 01:13:20,940 Αλλά ακριβώς διαισθητικά, αν έχουν ένα πεπερασμένο αριθμό bits, 1489 01:13:20,940 --> 01:13:24,560 μπορείτε να τις μεταθέτει μόνο με τόσους πολλούς τρόπους πεπερασμένο. 1490 01:13:24,560 --> 01:13:26,570 Έτσι, δεν μπορείτε ενδεχομένως χρησιμοποιούν έναν πεπερασμένο αριθμό 1491 01:13:26,570 --> 01:13:29,880 του μετάθεση των bits, πρότυπα μηδενικά και μονάδες, 1492 01:13:29,880 --> 01:13:32,940 να αντιπροσωπεύουν μια άπειρη αριθμός των αριθμών, 1493 01:13:32,940 --> 01:13:37,370 γεγονός που υποδηλώνει ότι οι υπολογιστές θα μπορούσε κάλλιστα να είναι ψέματα για να μας μερικές φορές. 1494 01:13:37,370 --> 01:13:38,770 >> Στην πραγματικότητα, ας το κάνουμε αυτό. 1495 01:13:38,770 --> 01:13:41,239 Επιτρέψτε μου να πάω πίσω στο CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Επιτρέψτε μου να προχωρήσει και να δημιουργήσετε ένα μικρό πρόγραμμα 1497 01:13:43,030 --> 01:13:47,940 που ονομάζεται ανακρίβεια, για να δείξει ότι υπολογιστές είναι, πράγματι, ανακριβή. 1498 01:13:47,940 --> 01:13:51,910 >> Και επιτρέψτε μου να προχωρήσει και να αρχίσει με μερικές από τις εν λόγω κώδικα από το παρελθόν, 1499 01:13:51,910 --> 01:13:53,830 και τώρα κάνει ακριβώς το εξής. 1500 01:13:53,830 --> 01:14:03,640 Επιτρέψτε μου να προχωρήσει και να κάνει printf, τοις εκατό f, backslash n, 1 διαιρείται με το 10. 1501 01:14:03,640 --> 01:14:07,430 Με άλλα λόγια, ας βουτήξει στα βαθιά 1/10, όπως και 1 και διαιρείται με το 10. 1502 01:14:07,430 --> 01:14:09,760 Σίγουρα, ένας υπολογιστής μπορεί να αντιπροσωπεύει το 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Ας πάμε μπροστά και να κάνουν ανακρίβεια. 1504 01:14:13,620 --> 01:14:14,390 Ας δούμε. 1505 01:14:14,390 --> 01:14:16,210 Μορφή καθορίζει τύπου double. 1506 01:14:16,210 --> 01:14:18,160 Αλλά το επιχείρημα του τύπου int. 1507 01:14:18,160 --> 01:14:19,040 Τι συμβαίνει? 1508 01:14:19,040 --> 01:14:21,970 >> Ω, ενδιαφέρουσα, γι 'αυτό είναι ένα μάθημα που πήραμε από πριν. 1509 01:14:21,970 --> 01:14:26,050 Λέω, hey, υπολογιστή show μου ένα πλωτήρα με ποσοστό f. 1510 01:14:26,050 --> 01:14:28,200 Αλλά είμαι δίνοντας 2 ints. 1511 01:14:28,200 --> 01:14:31,120 Έτσι αποδεικνύεται, μπορώ να διορθώσετε αυτό σε μια-δυο τρόπους. 1512 01:14:31,120 --> 01:14:38,430 >> Θα μπορούσα απλά μετατρέψει ένα σε 1.0, και 10 σε 10,0, η οποία θα ήταν, πράγματι, 1513 01:14:38,430 --> 01:14:42,390 έχει ως αποτέλεσμα τη μετατροπή τους σε floats-- εξακολουθούν να ελπίζουμε 1514 01:14:42,390 --> 01:14:43,180 τον ίδιο αριθμό. 1515 01:14:43,180 --> 01:14:45,880 Ή αποδεικνύεται ότι υπάρχει κάτι θα δούμε και πάλι πριν από καιρό. 1516 01:14:45,880 --> 01:14:47,170 Θα μπορούσατε να ρίξει τους αριθμούς. 1517 01:14:47,170 --> 01:14:49,880 >> Μπορείτε, χρησιμοποιώντας αυτήν την παρενθετική έκφραση, μπορείτε να πείτε, 1518 01:14:49,880 --> 01:14:52,560 hey, υπολογιστή, πάρτε αυτό το 10, το οποίο γνωρίζω είναι μια int. 1519 01:14:52,560 --> 01:14:54,660 Αλλά θεραπεία, παρακαλώ, σαν να πρόκειται για ένα πλωτήρα. 1520 01:14:54,660 --> 01:14:56,680 Αλλά αυτό αισθάνεται άσκοπα περίπλοκες. 1521 01:14:56,680 --> 01:14:59,040 >> Για τους σκοπούς μας σήμερα, ας κυριολεκτικά 1522 01:14:59,040 --> 01:15:02,700 κάνουν τους τιμές κινητής υποδιαστολής με ένα δεκαδικό σημείο, όπως αυτό. 1523 01:15:02,700 --> 01:15:07,060 Επιτρέψτε μου να πάει μπροστά και να επαναπροσδιοριστούν, να ανακρίβεια, καλό, dot κάθετος 1524 01:15:07,060 --> 01:15:08,870 ανακρίβεια, εισάγετε. 1525 01:15:08,870 --> 01:15:10,990 Εντάξει, ψάχνουμε καλό. 1526 01:15:10,990 --> 01:15:18,194 >> 1 διαιρούμενο με 10, σύμφωνα με μου Mac εδώ, είναι, πράγματι, 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Τώρα, διδάχτηκα στο σχολείο βαθμού εκεί θα πρέπει να είναι ένας άπειρος αριθμός 0 του. 1528 01:15:21,360 --> 01:15:23,151 Οπότε ας προσπαθήσουμε τουλάχιστον για να δείτε μερικά από αυτά. 1529 01:15:23,151 --> 01:15:26,770 Αποδεικνύεται ότι η printf είναι λίγο φανταχτερό ακόμα ό, τι έχουμε χρησιμοποιήσει. 1530 01:15:26,770 --> 01:15:30,890 Αποδεικνύεται ότι δεν χρειάζεται να καθορίσετε μόνο τοις εκατό f, ή απλά τοις εκατό i. 1531 01:15:30,890 --> 01:15:33,830 Μπορείτε πραγματικά να καθορίσετε κάποιες επιλογές ελέγχου εδώ. 1532 01:15:33,830 --> 01:15:36,470 >> Συγκεκριμένα, Πάω να πω, hey, printf, 1533 01:15:36,470 --> 01:15:39,660 πραγματικά μου δείξει 10 δεκαδικών ψηφίων. 1534 01:15:39,660 --> 01:15:40,820 Έτσι ώστε να φαίνεται λίγο παράξενο. 1535 01:15:40,820 --> 01:15:42,845 Αλλά λέτε τοις εκατό, dot, πόσους αριθμούς 1536 01:15:42,845 --> 01:15:44,970 θέλετε να δείτε μετά το υποδιαστολή, και στη συνέχεια στ 1537 01:15:44,970 --> 01:15:48,340 για επίπεδες, μόνο και μόνο επειδή αυτό είναι τι λέει η τεκμηρίωση. 1538 01:15:48,340 --> 01:15:50,080 Επιτρέψτε μου να πάει μπροστά και να σώσει αυτό. 1539 01:15:50,080 --> 01:15:52,460 >> Και παρατηρήσετε πάρα πολύ, παίρνω κουραστεί να πληκτρολογήσετε ξανά τα πράγματα. 1540 01:15:52,460 --> 01:15:55,900 Έτσι είμαι απλά τη ρύθμιση του και κάτω βέλος για τα κλειδιά μου εδώ. 1541 01:15:55,900 --> 01:15:58,710 Και αν Κρατάω το χτύπημα, μπορείτε μπορεί να δει όλες τις εντολές 1542 01:15:58,710 --> 01:16:01,090 ότι έκανα, ή κακώς γίνονται. 1543 01:16:01,090 --> 01:16:04,630 >> Και Πάω να προχωρήσει τώρα και δεν χρησιμοποιούν πραγματικά ότι, προφανώς. 1544 01:16:04,630 --> 01:16:11,416 Κάντε ανακρίβεια, τελεία slash imprecision-- έτσι 1545 01:16:11,416 --> 01:16:13,290 τι διδάχτηκα στο δημοτικό σχολείο ελέγχει έξω. 1546 01:16:13,290 --> 01:16:19,010 Ακόμα κι αν μπορώ να εκτυπώσω σε 10 δεκαδικά τοποθετεί, πράγματι, είναι 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Αλλά ξέρετε τι; 1548 01:16:19,840 --> 01:16:21,150 >> Ας πάρει λίγο άπληστοι. 1549 01:16:21,150 --> 01:16:23,990 Ας πούμε, όπως, δείξε μου 55 επισημαίνει μετά την υποδιαστολή. 1550 01:16:23,990 --> 01:16:26,160 Ας πάρει πραγματικά αυτό προγραμματίσετε έξω για μια περιστροφή. 1551 01:16:26,160 --> 01:16:31,170 Επιτρέψτε μου να το ξανακάνω με make ανακρίβεια, dot κάθετος, ανακρίβεια. 1552 01:16:31,170 --> 01:16:32,390 >> Και πάμε. 1553 01:16:32,390 --> 01:16:34,420 την παιδική σας ηλικία ήταν ένα ψέμα. 1554 01:16:34,420 --> 01:16:48,410 Προφανώς, 1 διαιρούμενο με 10 είναι πράγματι 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Τι συμβαίνει? 1556 01:16:49,740 --> 01:16:53,360 Λοιπόν, αποδεικνύεται, αν το είδος της κοιτάξει αρκετά μακριά έξω στην υποκείμενη 1557 01:16:53,360 --> 01:16:55,950 αναπαράσταση αυτή αριθμός, στην πραγματικότητα 1558 01:16:55,950 --> 01:17:00,400 δεν είναι ακριβώς 1/10, ή 0,1 και ένας άπειρος αριθμός των μηδενικών. 1559 01:17:00,400 --> 01:17:01,630 Τώρα, γιατί είναι αυτό; 1560 01:17:01,630 --> 01:17:06,250 >> Λοιπόν, ακόμα κι αν αυτό είναι ένα απλό αριθμό σε εμάς τους ανθρώπους, 1 διαιρούμενο με 10, 1561 01:17:06,250 --> 01:17:10,910 είναι ακόμα ένα από τα απείρως πολλά αριθμούς που θα μπορούσαμε να σκεφτούμε. 1562 01:17:10,910 --> 01:17:14,490 Αλλά ένας υπολογιστής μπορεί να αντιπροσωπεύει μόνο πεπερασμένο πλήθος έτσι αριθμούς. 1563 01:17:14,490 --> 01:17:18,710 Και έτσι, ουσιαστικά, ποια είναι η υπολογιστής δείχνοντάς μας είναι πιο κοντά της 1564 01:17:18,710 --> 01:17:22,940 προσέγγιση στον αριθμό θέλουμε να πιστεύουμε ότι είναι 1/10, 1565 01:17:22,940 --> 01:17:27,760 ή πραγματικά 0,10000 άπειρον. 1566 01:17:27,760 --> 01:17:30,425 >> Αντίθετα, όμως, αυτό είναι όσο πιο κοντά μπορεί να πάρει. 1567 01:17:30,425 --> 01:17:32,300 Και, πράγματι, αν κοιτάξετε κάτω από την κουκούλα, 1568 01:17:32,300 --> 01:17:37,050 όπως είμαστε εδώ με την εξέταση 55 ψηφία μετά την υποδιαστολή, 1569 01:17:37,050 --> 01:17:39,990 βλέπουμε πραγματικά αυτή την πραγματικότητα. 1570 01:17:39,990 --> 01:17:42,610 Τώρα, ως ένα μέρος, αν έχετε δει ποτέ το movie-- 1571 01:17:42,610 --> 01:17:45,780 οι περισσότεροι από εσάς ίσως haven't-- αλλά Σούπερμαν 3 πριν από μερικά χρόνια, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor μόχλευση ουσιαστικά αυτό πραγματικότητα στην εταιρεία του για να κλέψει πολλά 1573 01:17:49,500 --> 01:17:53,500 κλασμάτων και τα κλάσματα του πένες, επειδή η company-- όπως θυμάμαι, 1574 01:17:53,500 --> 01:17:57,210 αυτό είναι μια while-- ήταν ουσιαστικά πετάμε κάτι που δεν ταιριάζει 1575 01:17:57,210 --> 01:17:58,790 στην έννοια της σεντ. 1576 01:17:58,790 --> 01:18:01,480 >> Αλλά αν προσθέσετε όλα αυτά μικρό, μικρό, μικρό αριθμούς και πάλι, 1577 01:18:01,480 --> 01:18:04,960 και ξανά, και ξανά, μπορείτε, όπως στο περίπτωσή του, κάνει ένα καλό χρηματικό ποσό. 1578 01:18:04,960 --> 01:18:08,010 >> Την ίδια ιδέα εξαπατάται από μια πιο πρόσφατη, αλλά ακόμα και τώρα ηλικιωμένων 1579 01:18:08,010 --> 01:18:10,500 ταινία, που ονομάζεται Office Space, όπου τα παιδιά σε αυτή την ταινία, 1580 01:18:10,500 --> 01:18:13,501 έκανε το ίδιο πράγμα, σκάτωσε τελείως, κατέληξε με τον τρόπο πάρα πολύ 1581 01:18:13,501 --> 01:18:14,666 χρήματα στον τραπεζικό λογαριασμό τους. 1582 01:18:14,666 --> 01:18:15,800 Ήταν όλα πολύ ύποπτες. 1583 01:18:15,800 --> 01:18:19,290 Αλλά στο τέλος της ημέρας, ανακρίβεια είναι παντού γύρω μας. 1584 01:18:19,290 --> 01:18:22,240 >> Και αυτό, επίσης, μπορεί να είναι τρομακτικά την υπόθεση. 1585 01:18:22,240 --> 01:18:25,590 Αποδεικνύεται ότι ο Σούπερμαν 3 και το Office Space στην άκρη, εκεί 1586 01:18:25,590 --> 01:18:28,460 μπορεί να είναι λίγο πολύ πραγματική κόσμο προεκτάσεις 1587 01:18:28,460 --> 01:18:32,290 από τις πραγματικότητες της ασαφούς αναπαράσταση των δεδομένων 1588 01:18:32,290 --> 01:18:34,770 ότι ακόμα και εμείς οι άνθρωποι να Αυτή η μέρα δεν πρέπει απαραίτητα 1589 01:18:34,770 --> 01:18:38,230 κατανοούν, καθώς όπως θα έπρεπε, ή να θυμηθεί τόσο συχνά όσο θα έπρεπε. 1590 01:18:38,230 --> 01:18:42,950 Και, πράγματι, τα ακόλουθα συνδετήρας είναι από μια ματιά σε μερικά πολύ πραγματικό κόσμο 1591 01:18:42,950 --> 01:18:47,730 διακλαδώσεις του τι θα συμβεί αν δεν εκτιμούν την ανακρίβεια ότι 1592 01:18:47,730 --> 01:18:50,065 μπορεί να συμβεί σε αριθμούς εκπροσώπηση. 1593 01:18:50,065 --> 01:18:51,300 >> [ΑΝΑΠΑΡΑΓΩΓΉ ΒΊΝΤΕΟ] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, Όλοι έχουμε έρθει να δεχτούν τα συχνά απογοητευτικό προβλήματα που 1595 01:18:55,620 --> 01:19:00,310 πάει με διατηρούμε, σφάλματα, ιούς, και δυσλειτουργίες λογισμικού, 1596 01:19:00,310 --> 01:19:03,130 για μικρές τιμές να πληρώσουν για την ευκολία. 1597 01:19:03,130 --> 01:19:07,800 Αλλά σε υψηλής τεχνολογίας και υψηλής ταχύτητας στρατιωτικών και το πρόγραμμα διαστημικών εφαρμογών, 1598 01:19:07,800 --> 01:19:12,800 το μικρότερο πρόβλημα μπορεί να μεγεθυνθεί σε καταστροφή. 1599 01:19:12,800 --> 01:19:18,900 >> Στις 4 Ιουνίου, 1996, επιστήμονες που παρασκευάζονται να ξεκινήσει μια μη επανδρωμένη Ariane 5 πύραυλο. 1600 01:19:18,900 --> 01:19:21,220 Είναι μετέφερε την επιστημονική δορυφόροι είναι σχεδιασμένοι 1601 01:19:21,220 --> 01:19:24,600 να προσδιοριστεί με ακρίβεια το πώς η αλληλεπιδρά το γήινο μαγνητικό πεδίο 1602 01:19:24,600 --> 01:19:27,410 με ηλιακούς ανέμους. 1603 01:19:27,410 --> 01:19:30,800 Ο πύραυλος χτίστηκε για η Ευρωπαϊκή Υπηρεσία Διαστήματος, 1604 01:19:30,800 --> 01:19:34,370 και ανασηκωμένη από τις εγκαταστάσεις της στην ακτή της Γαλλικής Γουιάνας. 1605 01:19:34,370 --> 01:19:37,540 >> -Στο Περίπου 37 δευτερόλεπτα η πτήση, την πρώτη τους 1606 01:19:37,540 --> 01:19:39,270 παρατηρήσει κάτι δεν πήγαινε καλά. 1607 01:19:39,270 --> 01:19:42,250 Τα ακροφύσια ήταν γυρίζοντας στο ένας τρόπος που πραγματικά δεν θα έπρεπε. 1608 01:19:42,250 --> 01:19:46,580 Περίπου 40 δευτερόλεπτα στην πτήση, σαφώς, το όχημα ήταν σε μπελάδες. 1609 01:19:46,580 --> 01:19:48,850 >> Και αυτό είναι, όταν έκαναν μια απόφαση για να το καταστρέψουν. 1610 01:19:48,850 --> 01:19:52,780 Ο αξιωματικός ασφαλείας σειρά, με τεράστια κότσια, πιέζεται το κουμπί, 1611 01:19:52,780 --> 01:19:58,150 ανατίναξαν τον πύραυλο, προτού να μπορέσει να γίνει ένα κίνδυνο για τη δημόσια ασφάλεια. 1612 01:19:58,150 --> 01:20:01,060 >> -Αυτό Ήταν το παρθενικό ταξίδι του Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 Και την καταστροφή του πήρε τοποθετήστε εξαιτίας ενός ελαττώματος 1614 01:20:03,960 --> 01:20:05,822 ενσωματωμένα στο λογισμικό του πυραύλου. 1615 01:20:05,822 --> 01:20:08,280 -Το Πρόβλημα στο Ariane ήταν ότι υπήρχε ένας αριθμός που 1616 01:20:08,280 --> 01:20:10,600 απαιτούνται 64 bits για να εκφράσουν. 1617 01:20:10,600 --> 01:20:13,590 Και ήθελαν να μετατρέψουν σε έναν αριθμό 16-bit. 1618 01:20:13,590 --> 01:20:15,610 Υπέθεσαν ότι η αριθμός αυτός δεν πρόκειται ποτέ 1619 01:20:15,610 --> 01:20:20,980 να είναι πολύ μεγάλη, ότι οι περισσότεροι από αυτούς ψηφία σε έναν αριθμό 64-bit ήταν μηδενικά. 1620 01:20:20,980 --> 01:20:22,440 Θα ήταν λάθος. 1621 01:20:22,440 --> 01:20:25,060 >> -Η Αδυναμία του ενός πρόγραμμα λογισμικού να αποδεχθεί 1622 01:20:25,060 --> 01:20:29,510 το είδος του αριθμού που παράγεται από άλλη ήταν η αιτία της αποτυχίας. 1623 01:20:29,510 --> 01:20:34,350 Ανάπτυξη λογισμικού είχε γίνει πολύ δαπανηρό μέρος της νέας τεχνολογίας. 1624 01:20:34,350 --> 01:20:38,140 Ο πύραυλος ήταν πολύ επιτυχής, τόσο μεγάλο μέρος του λογισμικού 1625 01:20:38,140 --> 01:20:41,550 που δημιουργήθηκε γι 'αυτό ήταν επίσης που χρησιμοποιούνται για την Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -Το Βασικό πρόβλημα ήταν ότι η Ariane 5 ήταν γρηγορότερη, επιταχυνόμενη πιο γρήγορα. 1627 01:20:47,940 --> 01:20:51,450 Και το λογισμικό δεν είχε αντιπροσώπευε γι 'αυτό. 1628 01:20:51,450 --> 01:20:55,060 >> -Η Καταστροφή του πυραύλου Ήταν μια τεράστια οικονομική καταστροφή, 1629 01:20:55,060 --> 01:20:58,790 Όλα αυτά οφείλονται σε σφάλμα λογισμικού λεπτό. 1630 01:20:58,790 --> 01:21:01,210 Αλλά αυτό δεν ήταν η πρώτη προβλήματα μετατροπής των δεδομένων χρόνου 1631 01:21:01,210 --> 01:21:04,820 είχε μαστίζεται σύγχρονη τεχνολογία πυραύλων. 1632 01:21:04,820 --> 01:21:08,050 >> -Σε 1991, με την έναρξη του πρώτου Πολέμου του Κόλπου, 1633 01:21:08,050 --> 01:21:10,570 Ο πατριώτης Πυραύλων παρουσίασαν ένα παρόμοιο είδος 1634 01:21:10,570 --> 01:21:12,800 του προβλήματος μετατροπή αριθμού. 1635 01:21:12,800 --> 01:21:16,090 Και ως αποτέλεσμα, 28 άτομα, 28 Αμερικανοί στρατιώτες, 1636 01:21:16,090 --> 01:21:19,080 σκοτώθηκαν, και περίπου 100 άλλοι τραυματίστηκαν, 1637 01:21:19,080 --> 01:21:22,780 όταν το Patriot, η οποία υποτίθεται ότι για την προστασία από τις εισερχόμενες scuds, 1638 01:21:22,780 --> 01:21:25,830 απέτυχε να βάλει φωτιά σε ένα πύραυλο. 1639 01:21:25,830 --> 01:21:31,670 >> -Όταν Το Ιράκ εισέβαλε στο Κουβέιτ, και την Αμερική ξεκίνησε Καταιγίδα της Ερήμου στις αρχές του 1991, 1640 01:21:31,670 --> 01:21:35,780 μπαταρίες Patriot Missile αναπτύχθηκαν για την προστασία της Σαουδικής Αραβίας και του Ισραήλ 1641 01:21:35,780 --> 01:21:39,230 από το ιρακινό πυραυλικές επιθέσεις Scud. 1642 01:21:39,230 --> 01:21:43,810 Ο πατριώτης είναι ένας ΗΠΑ μέσου βεληνεκούς επιφάνεια στο σύστημα του αέρα, που κατασκευάζονται 1643 01:21:43,810 --> 01:21:45,770 από την εταιρεία Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -Το Μέγεθος της αναχαίτισης Patriot η ίδια είναι περίπου περίπου 20 πόδια. 1645 01:21:52,340 --> 01:21:55,230 Και ζυγίζει περίπου 2.000 κιλά. 1646 01:21:55,230 --> 01:21:59,320 Και αυτό φέρνει μια κεφαλή περίπου, Νομίζω ότι είναι περίπου 150 κιλά. 1647 01:21:59,320 --> 01:22:03,930 Και η ίδια η κεφαλή είναι ένα υψηλό εκρηκτικό, το οποίο 1648 01:22:03,930 --> 01:22:07,330 έχει θραύσματα γύρω από αυτό. 1649 01:22:07,330 --> 01:22:11,680 Το περίβλημα του κεφαλή είναι σχεδιαστεί για να λειτουργούν σαν σκάγι. 1650 01:22:11,680 --> 01:22:14,110 >> -Οι πυραύλους πραγματοποιούνται τέσσερις ανά εμπορευματοκιβώτιο, 1651 01:22:14,110 --> 01:22:17,130 και μεταφέρονται από ένα ημι ρυμουλκό. 1652 01:22:17,130 --> 01:22:24,930 >> -Το Σύστημα Patriot αντιπυραυλικής πηγαίνει πίσω τουλάχιστον 20 χρόνια τώρα. 1653 01:22:24,930 --> 01:22:28,420 Αρχικά είχε σχεδιαστεί ως πυραυλικής άμυνας αέρα 1654 01:22:28,420 --> 01:22:30,720 να καταρρίψουν τα αεροπλάνα του εχθρού. 1655 01:22:30,720 --> 01:22:34,500 Στο πρώτο πόλεμο του Κόλπου, όταν ο πόλεμος ήρθε μαζί, 1656 01:22:34,500 --> 01:22:39,745 ο στρατός ήθελε να το χρησιμοποιήσει για να καταρρίψουν scuds, δεν αεροπλάνα. 1657 01:22:39,745 --> 01:22:43,620 >> Η ιρακινή Πολεμική Αεροπορία ήταν δεν είναι τόσο μεγάλο πρόβλημα. 1658 01:22:43,620 --> 01:22:46,670 Αλλά ο στρατός ήταν ανησυχούν για scuds. 1659 01:22:46,670 --> 01:22:50,170 Και έτσι προσπάθησαν να την αναβάθμιση του Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Έναν εχθρό πυραύλων ταξιδεύει σε Mach 5 1661 01:22:52,800 --> 01:22:55,830 επρόκειτο να αρκετά δύσκολο. 1662 01:22:55,830 --> 01:22:58,490 Αλλά όταν το Patriot έσπευσε σε λειτουργία, 1663 01:22:58,490 --> 01:23:02,860 ο στρατός δεν γνώριζε μια Ιρακινές τροποποίηση που έκανε 1664 01:23:02,860 --> 01:23:05,930 scuds τους σχεδόν αδύνατο να χτυπήσει. 1665 01:23:05,930 --> 01:23:10,740 >> -Τι Συνέβη είναι οι scuds ότι έρχονταν σε ήταν ασταθής. 1666 01:23:10,740 --> 01:23:11,692 Είχαν ταλάντευση. 1667 01:23:11,692 --> 01:23:14,910 Ο λόγος για αυτό ήταν οι Ιρακινοί, προκειμένου 1668 01:23:14,910 --> 01:23:18,280 για να πάρει 600 χιλιόμετρα έξω από ένα χιλιόμετρο 300 1669 01:23:18,280 --> 01:23:21,700 φάσμα πυραύλων, πήρε το βάρος έξω από το μπροστινό κεφαλή. 1670 01:23:21,700 --> 01:23:23,390 Έκαναν η κεφαλή αναπτήρα. 1671 01:23:23,390 --> 01:23:27,330 >> Έτσι τώρα το Patriot είναι προσπαθούν να έρθουν στο Scud. 1672 01:23:27,330 --> 01:23:30,230 Και τις περισσότερες φορές, η συντριπτική πλειοψηφία του χρόνου, 1673 01:23:30,230 --> 01:23:32,940 θα πετάξει ακριβώς από το Scud. 1674 01:23:32,940 --> 01:23:37,260 Μόλις οι διαχειριστές συστημάτων Patriot συνειδητοποίησε το Patriot έχασε το στόχο της, 1675 01:23:37,260 --> 01:23:41,690 που πυροδότησε κεφαλή του Patriot του να αποφευχθούν πιθανές απώλειες εάν 1676 01:23:41,690 --> 01:23:44,570 αφέθηκε να πέσει στο έδαφος. 1677 01:23:44,570 --> 01:23:48,790 >> -ότι Ήταν αυτό που οι περισσότεροι άνθρωποι είδαν, αυτές οι μεγάλες πύρινες σφαίρες στον ουρανό, 1678 01:23:48,790 --> 01:23:54,550 και παρεξηγηθεί ως παρακολουθήσεις των Scud κεφαλές. 1679 01:23:54,550 --> 01:23:56,630 >> -Αν Το βράδυ ουρανούς, πατριώτες εμφανίστηκε 1680 01:23:56,630 --> 01:24:00,370 για να είναι επιτυχή καταστρέφοντας scuds, στο Νταχράν, 1681 01:24:00,370 --> 01:24:03,360 θα μπορούσε να υπάρξει κανένα λάθος σχετικά με τις επιδόσεις του. 1682 01:24:03,360 --> 01:24:07,970 Εκεί, το σύστημα ραντάρ του Patriot του χάσει τα ίχνη ενός εισερχόμενου Scud, 1683 01:24:07,970 --> 01:24:10,721 και ποτέ δεν ξεκίνησε λόγω σε ένα ελάττωμα του λογισμικού. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Ήταν οι Ισραηλινοί που ανακαλύφθηκε για πρώτη φορά ότι όσο μεγαλύτερη είναι η σύστημα ήταν, 1686 01:24:18,940 --> 01:24:22,690 μεγαλύτερη είναι η χρονική διαφορά έγινε, λόγω ενός ρολογιού ενσωματωμένο 1687 01:24:22,690 --> 01:24:24,810 στον υπολογιστή του συστήματος. 1688 01:24:24,810 --> 01:24:28,210 >> -περίπου Δύο εβδομάδες πριν η τραγωδία στο Νταχράν, 1689 01:24:28,210 --> 01:24:30,770 οι Ισραηλινοί αναφερθεί το Υπουργείο Άμυνας 1690 01:24:30,770 --> 01:24:32,590 ότι το σύστημα είχε χάσει το χρόνο. 1691 01:24:32,590 --> 01:24:35,360 Μετά από περίπου οκτώ ώρες ή λειτουργίας, παρατήρησαν ότι το σύστημα 1692 01:24:35,360 --> 01:24:37,720 είχε γίνει αισθητά λιγότερο ακριβείς. 1693 01:24:37,720 --> 01:24:41,900 Το Υπουργείο Άμυνας ανταποκρίθηκε λέγοντας όλες τις μπαταρίες Patriot 1694 01:24:41,900 --> 01:24:44,950 να μην αφήσει τα συστήματα για μεγάλο χρονικό διάστημα. 1695 01:24:44,950 --> 01:24:49,160 Ποτέ δεν είπε τι ένα μεγάλο χρονικό διάστημα was-- από οκτώ ώρες, 10 ώρες, 1.000 ώρες. 1696 01:24:49,160 --> 01:24:51,360 Κανείς δεν ήξερε. 1697 01:24:51,360 --> 01:24:53,380 >> -Το Patriot μπαταρία σταθμεύουν στο στρατώνα 1698 01:24:53,380 --> 01:24:58,350 στο Νταχράν και λανθασμένη εσωτερική της ρολόι είχε για πάνω από 100 ώρες 1699 01:24:58,350 --> 01:25:01,670 τη νύχτα της 25 Φεβρουαρίου. 1700 01:25:01,670 --> 01:25:05,917 >> -Είναι Παρακολουθούνται χρόνο με ακρίβεια περίπου ένα δέκατο του δευτερολέπτου. 1701 01:25:05,917 --> 01:25:08,000 Τώρα, ένα δέκατο του δευτερολέπτου είναι μια ενδιαφέρουσα αριθμός, 1702 01:25:08,000 --> 01:25:11,920 επειδή δεν μπορεί να εκφραστεί σε δυαδική ακριβώς, η οποία 1703 01:25:11,920 --> 01:25:16,820 σημαίνει ότι δεν μπορεί να εκφραστεί με ακρίβεια σε κάθε σύγχρονο ψηφιακό υπολογιστή. 1704 01:25:16,820 --> 01:25:18,540 Είναι δύσκολο να πιστέψει κανείς. 1705 01:25:18,540 --> 01:25:21,210 >> Αλλά χρησιμοποιούν αυτό ως παράδειγμα. 1706 01:25:21,210 --> 01:25:23,540 Ας πάρουμε το νούμερο ένα τρίτο. 1707 01:25:23,540 --> 01:25:27,350 Το ένα τρίτο δεν μπορεί να είναι Εκφράζεται σε δεκαδική ακρίβεια. 1708 01:25:27,350 --> 01:25:32,080 Το ένα τρίτο είναι 0.333 συνεχίζεται για το άπειρο. 1709 01:25:32,080 --> 01:25:36,480 >> Δεν υπάρχει κανένας τρόπος να το κάνουμε αυτό με απόλυτη ακρίβεια σε δεκαδικό. 1710 01:25:36,480 --> 01:25:39,560 Αυτό είναι ακριβώς το είδος του προβλήματος ότι συνέβη στο Patriot. 1711 01:25:39,560 --> 01:25:44,100 Όσο περισσότερο το σύστημα έτρεξε, η χειρότερα το σφάλμα χρόνου έγινε. 1712 01:25:44,100 --> 01:25:48,890 >> -Μετά Από 100 ώρες λειτουργίας, η σφάλμα στο χρόνο ήταν μόνο περίπου το ένα τρίτο 1713 01:25:48,890 --> 01:25:50,600 του δευτερολέπτου. 1714 01:25:50,600 --> 01:25:54,210 Αλλά όσον αφορά την στόχευση μια πυραύλων ταξιδεύει σε Mach 5, 1715 01:25:54,210 --> 01:25:58,710 οδήγησε σε μια καταδίωξη σφάλμα πάνω από 600 μέτρα. 1716 01:25:58,710 --> 01:26:02,120 Θα ήταν ένα μοιραίο λάθος για τους στρατιώτες σε ό, τι 1717 01:26:02,120 --> 01:26:08,940 που συνέβη είναι μια εκτόξευση Scud ήταν ανιχνεύονται από νωρίς δορυφόρους Προειδοποίηση 1718 01:26:08,940 --> 01:26:12,860 και ήξεραν ότι ο Scud ήταν έρχονται σε γενική κατεύθυνσή τους. 1719 01:26:12,860 --> 01:26:15,320 Δεν ήξεραν πού ερχόταν. 1720 01:26:15,320 --> 01:26:18,250 >> -Είναι Ήταν τώρα μέχρι το ραντάρ συστατικό του συστήματος Patriot 1721 01:26:18,250 --> 01:26:23,190 υπεράσπιση Νταχράν να εντοπίσετε και να διατηρήσουν κομμάτι του εισερχόμενου εχθρού πυραύλων. 1722 01:26:23,190 --> 01:26:24,609 >> -Το Ραντάρ ήταν πολύ έξυπνος. 1723 01:26:24,609 --> 01:26:26,650 Θα ήταν πραγματικά παρακολουθείτε η θέση του Scud, 1724 01:26:26,650 --> 01:26:30,350 και στη συνέχεια να προβλέψουμε πού πιθανώς θα είναι η επόμενη φορά που έστειλε το ραντάρ 1725 01:26:30,350 --> 01:26:31,420 ένας παλμός έξω. 1726 01:26:31,420 --> 01:26:33,110 Αυτό ήταν που ονομάζεται πύλη φάσμα. 1727 01:26:33,110 --> 01:26:37,660 >> -Στη Συνέχεια, μία φορά την Patriot αποφασίζει αρκετό χρόνο έχει 1728 01:26:37,660 --> 01:26:42,450 πέρασε για να πάει πίσω και να ελέγξετε το επόμενο τοποθεσία για αυτό το αντικείμενο που ανιχνεύτηκε, 1729 01:26:42,450 --> 01:26:43,600 πηγαίνει πίσω. 1730 01:26:43,600 --> 01:26:48,650 Έτσι, όταν πήγε πίσω στο λάθος θέση, τότε δεν βλέπει κανένα αντικείμενο. 1731 01:26:48,650 --> 01:26:52,160 Και αποφασίζει ότι δεν υπήρχε αντικείμενο, ήταν μια ψευδής ανίχνευση, 1732 01:26:52,160 --> 01:26:53,930 και πέφτει το κομμάτι. 1733 01:26:53,930 --> 01:26:57,030 >> -Το Εισερχόμενες Scud εξαφανίστηκε από την οθόνη του ραντάρ. 1734 01:26:57,030 --> 01:27:00,260 Και δευτερόλεπτα αργότερα, χτύπησε στο στρατώνα. 1735 01:27:00,260 --> 01:27:06,150 Η Scud σκότωσε 28, και ήταν η τελευταία ένα απολύθηκε κατά τη διάρκεια του πρώτου Πολέμου του Κόλπου. 1736 01:27:06,150 --> 01:27:11,960 >> Τραγικά, το ενημερωμένο λογισμικό έφτασε στο Νταχράν την επόμενη ημέρα. 1737 01:27:11,960 --> 01:27:14,930 Το ελάττωμα του λογισμικού είχε ήταν σταθερή, το κλείσιμο 1738 01:27:14,930 --> 01:27:19,806 ένα κεφάλαιο στην ταραγμένη ιστορία του πυραύλου Patriot. 1739 01:27:19,806 --> 01:27:20,729 >> [ΑΝΑΠΑΡΑΓΩΓΉ ΒΊΝΤΕΟ] 1740 01:27:20,729 --> 01:27:23,520 DAVID J. Malan: Έτσι, αυτό είναι όλο για να λένε ότι αυτά τα θέματα της υπερχείλισης 1741 01:27:23,520 --> 01:27:25,860 και ανακρίβεια είναι πολύ πραγματική. 1742 01:27:25,860 --> 01:27:26,920 Λοιπόν, πώς φτάσαμε εδώ; 1743 01:27:26,920 --> 01:27:28,895 Αρχίσαμε με απλά μιλάμε για printf. 1744 01:27:28,895 --> 01:27:31,270 Και πάλι, αυτή η λειτουργία που εκτυπώνει κάτι στην οθόνη, 1745 01:27:31,270 --> 01:27:33,450 και εισαγάγαμε στη συνέχεια μερικές άλλες λειτουργίες 1746 01:27:33,450 --> 01:27:34,945 από τη λεγόμενη βιβλιοθήκη CS50 του. 1747 01:27:34,945 --> 01:27:36,910 Και θα συνεχίσουμε να δείτε αυτές σε εύθετο χρόνο. 1748 01:27:36,910 --> 01:27:40,760 Και εμείς, ιδιαίτερα, χρησιμοποιείται κορδόνι get, και να πάρει int, και τώρα επίσης να πάρετε float, 1749 01:27:40,760 --> 01:27:44,410 και όμως άλλοι ακόμα θα συναντούμε και να χρησιμοποιήσουν τους εαυτούς μας πριν από καιρό. 1750 01:27:44,410 --> 01:27:47,220 >> Αλλά σε ορισμένες περιπτώσεις, έχουν έχουμε ήδη δει μια ανάγκη 1751 01:27:47,220 --> 01:27:50,520 για να αποθηκεύσετε ό, τι αυτές οι λειτουργίες χέρι πίσω; 1752 01:27:50,520 --> 01:27:52,920 Μας πίσω ένα string το χέρι, ή int ή float. 1753 01:27:52,920 --> 01:27:56,070 Και μερικές φορές χρειάζεται να θέσω string, ή int ή float, κάπου. 1754 01:27:56,070 --> 01:28:00,100 >> Και για να αποθηκεύσετε αυτά τα πράγματα, ας θυμηθούμε απλά όπως στην αρχή, έχουμε μεταβλητές. 1755 01:28:00,100 --> 01:28:03,260 Αλλά σε αντίθεση με το Ξυστό, σε C έχουμε πραγματική τους τύπους 1756 01:28:03,260 --> 01:28:05,530 των variables-- δεδομένων τύποι, πιο generally-- 1757 01:28:05,530 --> 01:28:08,640 Ανάμεσά τους, ένα κορδόνι, μια int, ένας επιπλέουν, και αυτοί οι άλλοι ακόμα. 1758 01:28:08,640 --> 01:28:12,321 >> Και έτσι, όταν δηλώνουμε μεταβλητές στη C, θα πρέπει να δηλώνουν τους τύπους των δεδομένων μας. 1759 01:28:12,321 --> 01:28:14,820 Αυτό δεν είναι κάτι που θα έχουν να κάνουν αργότερα στο εξάμηνο 1760 01:28:14,820 --> 01:28:16,810 όπως τη μετάβαση σε άλλες γλώσσες. 1761 01:28:16,810 --> 01:28:19,610 Αλλά για τώρα, χρειαζόμαστε σε ένα εκ των προτέρων εκ των προτέρων, 1762 01:28:19,610 --> 01:28:24,370 εξηγήσει στον υπολογιστή τι είδους της μεταβλητής που θέλουμε να μας δώσει. 1763 01:28:24,370 --> 01:28:27,290 >> Τώρα, εν τω μεταξύ, για να εκτυπώσετε αυτά τα είδη των τύπων δεδομένων, 1764 01:28:27,290 --> 01:28:29,570 έχουμε να πούμε printf τι να περιμένουμε. 1765 01:28:29,570 --> 01:28:32,450 Και είδαμε τοις εκατό s για έγχορδα, και ποσοστό i για ακέραιοι, 1766 01:28:32,450 --> 01:28:33,790 και μερικοί άλλοι ήδη. 1767 01:28:33,790 --> 01:28:37,237 Και αυτά είναι απλώς τις απαιτήσεις για την οπτική παρουσίαση 1768 01:28:37,237 --> 01:28:38,070 των εν λόγω πληροφοριών. 1769 01:28:38,070 --> 01:28:42,080 >> Και κάθε ένα από αυτά μπορεί πραγματικά να είναι παραμετροποιημένη ή πειραγμένο με κάποιο τρόπο, 1770 01:28:42,080 --> 01:28:45,370 αν θέλετε να προωθήσουν τον έλεγχο το είδος της παραγωγής που μπορείτε να πάρετε. 1771 01:28:45,370 --> 01:28:49,604 Και, στην πραγματικότητα, αποδεικνύεται ότι όχι μόνο είναι backslash n για μια νέα γραμμή εκεί. 1772 01:28:49,604 --> 01:28:52,520 Υπάρχει κάτι άλλο που ονομάζεται ανάστροφη κάθετο r για μεταφορά μετ 'επιστροφής, η οποία 1773 01:28:52,520 --> 01:28:54,360 μοιάζει περισσότερο με ένα παλιά γραφομηχανή σχολείο, 1774 01:28:54,360 --> 01:28:57,690 και επίσης των Windows που χρησιμοποιείται για πολλά χρόνια. 1775 01:28:57,690 --> 01:28:59,690 >> Υπάρχει backslash t για τους ΟΤΑ. 1776 01:28:59,690 --> 01:29:03,170 Αποδεικνύεται, ότι αν θέλετε να διπλά εισαγωγικά μέσα σε ένα string, 1777 01:29:03,170 --> 01:29:05,000 ανάκληση που έχουμε χρησιμοποιήσει διπλά εισαγωγικά διπλά 1778 01:29:05,000 --> 01:29:07,900 απόσπασμα από την αριστερή και τη δεξιά άκρα της χορδές μας μέχρι στιγμής. 1779 01:29:07,900 --> 01:29:09,420 Αυτό φαίνεται να συγχέουμε τα πράγματα. 1780 01:29:09,420 --> 01:29:12,503 >> Αν θέλετε να βάλετε ένα διπλό απόσπασμα στο η μέση μιας string-- και, πράγματι, 1781 01:29:12,503 --> 01:29:13,670 είναι συγχέοντας για να δούμε. 1782 01:29:13,670 --> 01:29:17,120 Και έτσι πρέπει να ξεφύγουν, έτσι ώστε να μιλούν, ένα διπλό απόσπασμα με κάτι 1783 01:29:17,120 --> 01:29:18,860 όπως, κυριολεκτικά, backslash διπλά εισαγωγικά. 1784 01:29:18,860 --> 01:29:20,230 Και υπάρχουν μερικά άλλα ακόμα. 1785 01:29:20,230 --> 01:29:24,540 Και θα δούμε περισσότερα από αυτά στην πραγματική χρήση πριν από καιρό. 1786 01:29:24,540 --> 01:29:27,930 >> Ας τώρα μετάβαση από δεδομένων, και την εκπροσώπηση, 1787 01:29:27,930 --> 01:29:30,820 και αριθμητικούς τελεστές, όλα από τα οποία μας έδωσε κάποιο κτίριο 1788 01:29:30,820 --> 01:29:32,070 μπλοκ με το οποίο για να παίξει. 1789 01:29:32,070 --> 01:29:34,481 Αλλά τώρα ας πραγματικά να δώσει μας το υπόλοιπο του λεξιλογίου 1790 01:29:34,481 --> 01:29:36,230 ότι είχαμε ήδη την περασμένη εβδομάδα με το Scratch 1791 01:29:36,230 --> 01:29:39,350 με τη λήψη μια ματιά σε κάποιο άλλο κατασκευές σε Ντο-- δεν είναι όλοι τους. 1792 01:29:39,350 --> 01:29:41,680 Αλλά οι ιδέες είμαστε για να δούμε πραγματικά ακριβώς 1793 01:29:41,680 --> 01:29:45,610 να τονίσει τη μετάφραση από μία γλώσσα, Ξυστό, σε ένα άλλο, C. 1794 01:29:45,610 --> 01:29:48,470 >> Και την πάροδο του χρόνου, θα πάρει περισσότερα εργαλεία για την εργαλειοθήκη μας, 1795 01:29:48,470 --> 01:29:49,820 να το πω έτσι, συντακτικά. 1796 01:29:49,820 --> 01:29:54,190 Και, πράγματι, θα δείτε ότι οι ιδέες είναι πλέον αρκετά γνωστά από την προηγούμενη εβδομάδα. 1797 01:29:54,190 --> 01:29:55,200 Ας το κάνουμε αυτό. 1798 01:29:55,200 --> 01:29:58,870 >> Ας πάμε μπροστά και να μαστίγιο μέχρι ένα πρόγραμμα ότι χρησιμοποιεί πραγματικά κάποιες εκφράσεις, 1799 01:29:58,870 --> 01:30:00,720 μια Boolean έκφραση. 1800 01:30:00,720 --> 01:30:02,810 Επιτρέψτε μου να προχωρήσει εδώ και να δημιουργήσετε ένα νέο αρχείο. 1801 01:30:02,810 --> 01:30:06,090 Θα καλέσω αυτό το condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Επιτρέψτε μου να προχωρήσει και να περιλαμβάνουν τη βιβλιοθήκη CS50. 1803 01:30:09,350 --> 01:30:12,640 Και επιτρέψτε μου να πάει μπροστά και να περιλαμβάνουν πρότυπο IO.h για τις λειτουργίες μας, 1804 01:30:12,640 --> 01:30:14,690 και printf, και πολλά άλλα αντίστοιχα. 1805 01:30:14,690 --> 01:30:18,900 Επιτρέψτε μου να δώσω στον εαυτό μου ότι στερεότυπο της int main κενό, του οποίου η εξήγηση που θα 1806 01:30:18,900 --> 01:30:20,360 επανέλθει στο μέλλον. 1807 01:30:20,360 --> 01:30:23,820 >> Τώρα, επιτρέψτε μου να προχωρήσει και να δώσει τον εαυτό μου έναν int μέσω get int. 1808 01:30:23,820 --> 01:30:25,970 Στη συνέχεια, επιτρέψτε μου να προχωρήσει και να το κάνουμε αυτό. 1809 01:30:25,970 --> 01:30:30,150 Θέλω να πω, αν i είναι less-- ας διάκριση μεταξύ θετικό, αρνητικό, 1810 01:30:30,150 --> 01:30:31,260 ή μηδενικές τιμές. 1811 01:30:31,260 --> 01:30:36,630 >> Έτσι, αν i είναι μικρότερη του μηδενός, επιτρέψτε μου Απλά πρέπει το πρόγραμμα αυτό απλά να πω, 1812 01:30:36,630 --> 01:30:42,370 αρνητικό, backslash n, αλλιώς εάν το i είναι μεγαλύτερο από το μηδέν. 1813 01:30:42,370 --> 01:30:47,030 Τώρα είμαι, φυσικά, πρόκειται να πω printf θετική, backslash n. 1814 01:30:47,030 --> 01:30:50,690 Και μετά άλλο if-- θα μπορούσα να κάνω αυτό. 1815 01:30:50,690 --> 01:30:53,410 >> Θα μπορούσα να κάνω αν i ισούται με 0. 1816 01:30:53,410 --> 01:30:55,840 Αλλά θα ήθελα να κάνει σε τουλάχιστον ένα λάθος ήδη. 1817 01:30:55,840 --> 01:30:59,480 Υπενθυμίζεται ότι το σύμβολο της ισότητας είναι δεν είναι ίσες, όπως εμείς οι άνθρωποι το γνωρίζουν. 1818 01:30:59,480 --> 01:31:01,010 >> Αλλά είναι ο φορέας ανάθεσης. 1819 01:31:01,010 --> 01:31:05,640 Και δεν θέλουμε να πάρει 0 για το το δικαίωμα και το βάζουμε στο i στα αριστερά. 1820 01:31:05,640 --> 01:31:11,810 Έτσι, για να αποφευχθεί αυτή η σύγχυση, ή ίσως κατάχρηση των ίσων υπογράψει, 1821 01:31:11,810 --> 01:31:14,740 ανθρώπους αποφάσισε πριν από μερικά χρόνια ότι σε πολλές γλώσσες προγραμματισμού 1822 01:31:14,740 --> 01:31:18,000 όταν θέλετε να ελέγξετε για την ισότητα μεταξύ του αριστερού και του δικαιώματος, 1823 01:31:18,000 --> 01:31:19,635 μπορείτε πραγματικά να χρησιμοποιήσετε ισούται ίσων. 1824 01:31:19,635 --> 01:31:21,010 Έτσι θα χτυπήσει το ίσον δύο φορές. 1825 01:31:21,010 --> 01:31:25,600 Όταν θέλετε να εκχωρήσετε από δεξιά προς τα αριστερά, μπορείτε να χρησιμοποιήσετε ένα ενιαίο σύμβολο της ισότητας. 1826 01:31:25,600 --> 01:31:29,360 Έτσι θα μπορούσαμε να κάνουμε this-- άλλο αν θ ισούται ισούται με μηδέν. 1827 01:31:29,360 --> 01:31:31,710 >> Θα μπορούσα να πάω και στη συνέχεια ανοίξτε άγκιστρα μου, 1828 01:31:31,710 --> 01:31:36,087 και να πω, printf 0, ανάστροφη κάθετο n, γίνεται. 1829 01:31:36,087 --> 01:31:38,170 Αλλά να θυμάστε πώς αυτά πιρούνια στο δρόμο μπορεί να λειτουργήσει. 1830 01:31:38,170 --> 01:31:39,836 Και, πραγματικά, απλά σκεφτείτε τη λογική. 1831 01:31:39,836 --> 01:31:41,510 i είναι ένας αριθμός. 1832 01:31:41,510 --> 01:31:43,320 Είναι ένας ακέραιος αριθμός, ειδικά. 1833 01:31:43,320 --> 01:31:48,600 Και αυτό σημαίνει ότι πρόκειται να είναι λιγότερο από 0, ή μεγαλύτερη από 0, ή 0. 1834 01:31:48,600 --> 01:31:51,600 Έτσι, υπάρχει το είδος αυτό σιωπηρή προεπιλογή περίπτωση. 1835 01:31:51,600 --> 01:31:54,920 >> Και έτσι θα μπορούσαμε, όπως ακριβώς Scratch, σας απαλλάξει από το άλλο αν, 1836 01:31:54,920 --> 01:31:55,747 και απλώς να πω άλλο. 1837 01:31:55,747 --> 01:31:57,830 Λογικά, αν η προγραμματιστή γνωρίζετε ότι υπάρχει μόνο 1838 01:31:57,830 --> 01:32:01,635 τρεις κάδους μέσα στο οποίο ένας σενάριο μπορεί fall-- το πρώτο, 1839 01:32:01,635 --> 01:32:03,510 η δεύτερη, ή η τρίτη σε αυτό το case-- δεν 1840 01:32:03,510 --> 01:32:07,100 ενοχλεί την προσθήκη του επιπλέον ακρίβειας και η πρόσθετη λογική εκεί. 1841 01:32:07,100 --> 01:32:09,690 Απλά προχωρήστε με το default εν προκειμένω του άλλου. 1842 01:32:09,690 --> 01:32:11,950 >> Τώρα, ας πάμε μπροστά Μετά την αποθήκευση αυτής, να 1843 01:32:11,950 --> 01:32:15,760 συνθήκες dot κάθετος conditions-- δεν είναι μια μεγάλη διεπαφή χρήστη, 1844 01:32:15,760 --> 01:32:18,914 γιατί δεν είμαι με αποτέλεσμα η χρήστη, όπως ανέφερα προηγουμένως. 1845 01:32:18,914 --> 01:32:19,580 Αλλά αυτό είναι μια χαρά. 1846 01:32:19,580 --> 01:32:20,454 Θα το κρατήσετε απλό. 1847 01:32:20,454 --> 01:32:21,890 Ας προσπαθήσουμε τον αριθμό 42. 1848 01:32:21,890 --> 01:32:23,240 Και αυτό είναι θετικό. 1849 01:32:23,240 --> 01:32:26,120 Ας προσπαθήσουμε τον αριθμό αρνητικό 42, αρνητική. 1850 01:32:26,120 --> 01:32:28,244 >> Ας προσπαθήσουμε την τιμή 0. 1851 01:32:28,244 --> 01:32:29,160 Και, πράγματι, αυτό λειτουργεί. 1852 01:32:29,160 --> 01:32:33,900 Τώρα, θα δείτε με τα προβλήματα πριν καιρό, τα πράγματα δοκιμή τρεις φορές, 1853 01:32:33,900 --> 01:32:34,980 πιθανόν να μην επαρκεί. 1854 01:32:34,980 --> 01:32:37,438 Πιθανόν να θέλετε να δοκιμάσετε μερικά μεγαλύτερους αριθμούς, κάποια μικρότερα 1855 01:32:37,438 --> 01:32:40,520 αριθμούς, σε ορισμένες περιπτώσεις γωνία, όπως θα έρθει για να τους περιγράψει. 1856 01:32:40,520 --> 01:32:42,500 >> Αλλά για τώρα, αυτό είναι ένα πολύ απλό πρόγραμμα. 1857 01:32:42,500 --> 01:32:45,160 Και είμαι πολύ σίγουρος ότι, λογικά, ότι εμπίπτει σε τρεις περιπτώσεις. 1858 01:32:45,160 --> 01:32:49,360 Και, πράγματι, ακόμα κι αν εμείς απλά επικεντρώθηκε σχετικά με τις πιθανές αρνητικές πλευρές 1859 01:32:49,360 --> 01:32:53,480 της ανακρίβειας και υπερχείλισης, σε πραγματικότητα όπου πολλά από τα προβλήματα CS50 είναι, 1860 01:32:53,480 --> 01:32:56,000 δεν πρόκειται να ανησυχείτε περίπου, όλη την ώρα, 1861 01:32:56,000 --> 01:32:59,050 τα ζητήματα της υπερχείλισης και ανακρίβεια, διότι, στην πραγματικότητα, σε C, 1862 01:32:59,050 --> 01:33:01,889 στην πραγματικότητα δεν είναι όλα τόσο εύκολο να αποφευχθούν αυτά τα πράγματα. 1863 01:33:01,889 --> 01:33:04,180 Αν θέλετε να μετρήσετε μέχρι μεγαλύτερα και μεγαλύτερα και μεγαλύτερα, 1864 01:33:04,180 --> 01:33:07,510 αποδεικνύεται ότι υπάρχουν τεχνικές που μπορεί να χρησιμοποιήσει, που συχνά σχετίζονται με πράγματα που ονομάζεται 1865 01:33:07,510 --> 01:33:11,240 βιβλιοθήκες, συλλογές κώδικα, ότι άλλους ανθρώπους έγραψε ότι μπορείτε να χρησιμοποιήσετε, 1866 01:33:11,240 --> 01:33:13,910 και άλλες γλώσσες, όπως Java και άλλες, στην πραγματικότητα 1867 01:33:13,910 --> 01:33:15,800 κάνουν πολύ πιο εύκολο να μετρήσει ακόμη υψηλότερα. 1868 01:33:15,800 --> 01:33:19,810 Γι 'αυτό είναι πραγματικά μερικές από αυτούς τους κινδύνους μια λειτουργία της γλώσσας που χρησιμοποιείτε. 1869 01:33:19,810 --> 01:33:22,710 Και μέσα στις επόμενες εβδομάδες, θα δείτε πόσο επικίνδυνο C πραγματικά 1870 01:33:22,710 --> 01:33:24,950 μπορεί να είναι, αν δεν το χρησιμοποιούν σωστά. 1871 01:33:24,950 --> 01:33:27,610 Αλλά από εκεί, και με Python, και JavaScript, θα 1872 01:33:27,610 --> 01:33:32,620 εμείς στρώμα σε κάποια επιπλέον προστασία, και να τρέξει λιγότερες των εν λόγω κινδύνων. 1873 01:33:32,620 --> 01:33:35,820 >> Έτσι, ας κάνουμε λίγο πιο ενδιαφέρουσα λογική στο πρόγραμμά μας. 1874 01:33:35,820 --> 01:33:39,110 Επιτρέψτε μου λοιπόν να πάει μπροστά και να δημιουργήσουν ένα πρόγραμμα που ονομάζεται Λογική 1875 01:33:39,110 --> 01:33:43,804 μόνο έτσι μπορώ να παίξω με μερικούς πραγματική λογική, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Θα απλά να αντιγράψετε και να επικολλήσετε κάποια κώδικα από τις προηγούμενες ώστε να πάρω πίσω 1877 01:33:46,870 --> 01:33:49,950 σε αυτό το ωραίο σημείο εκκίνησης. 1878 01:33:49,950 --> 01:33:53,980 >> Επιτρέψτε μου αυτή τη φορά να κάνει char Γ Είμαι πρόκειται να δώσετε ένα όνομα της C 1879 01:33:53,980 --> 01:33:58,510 μόνο και μόνο επειδή είναι συμβατικό, να πάρει ένα χαρακτήρα από το χρήστη. 1880 01:33:58,510 --> 01:34:00,730 Και ας προσποιούνται όπως Είμαι εφαρμογή μέρος 1881 01:34:00,730 --> 01:34:04,130 του εν λόγω προγράμματος Rm, η αφαίρεση πρόγραμμα πριν από αυτό ζητηθεί από το χρήστη 1882 01:34:04,130 --> 01:34:05,400 για να αφαιρέσετε ένα αρχείο. 1883 01:34:05,400 --> 01:34:06,750 Πώς θα μπορούσαμε να το κάνουμε αυτό; 1884 01:34:06,750 --> 01:34:11,090 >> Θέλω να πω, αν C είναι ίση ισούται, απόσπασμα εισαγωγικά, 1885 01:34:11,090 --> 01:34:16,304 y, τότε Πάω να υποθέσουμε ότι ο χρήστης έχει επιλέξει ναι. 1886 01:34:16,304 --> 01:34:17,470 Είμαι ακριβώς πρόκειται να εκτυπώσετε ναι. 1887 01:34:17,470 --> 01:34:19,440 Αν ήταν στην πραγματικότητα γράφοντας το πρόγραμμα απομάκρυνσης, 1888 01:34:19,440 --> 01:34:21,420 θα μπορούσαμε να καταργήσετε το αρχείο με περισσότερες γραμμές του κώδικα. 1889 01:34:21,420 --> 01:34:22,461 Αλλά εμείς θα το κρατήσετε απλό. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Else if c ισούται ισούται n-- και τώρα εδώ, θα πάω να πω, 1892 01:34:31,250 --> 01:34:32,980 ο χρήστης πρέπει να έχει ως στόχο όχι. 1893 01:34:32,980 --> 01:34:34,360 Και μετά άλλο, ξέρετε τι; 1894 01:34:34,360 --> 01:34:36,200 Δεν ξέρω τι άλλο ο χρήστης πρόκειται να πληκτρολογήσετε. 1895 01:34:36,200 --> 01:34:38,533 Έτσι, είμαι απλώς πρόκειται να πω ότι ότι είναι λάθος, ανεξαρτήτως 1896 01:34:38,533 --> 01:34:40,070 αυτός ή αυτή πραγματικά πληκτρολογήσει. 1897 01:34:40,070 --> 01:34:41,180 >> Λοιπόν, τι συμβαίνει εδώ; 1898 01:34:41,180 --> 01:34:44,530 Υπάρχει μια θεμελιώδης διαφορά σε σχέση με ό, τι έχω κάνει στο παρελθόν. 1899 01:34:44,530 --> 01:34:49,300 Διπλά εισαγωγικά, διπλά εισαγωγικά, διπλά εισαγωγικά, και, ακόμη, μονά εισαγωγικά, 1900 01:34:49,300 --> 01:34:50,170 μονά εισαγωγικά. 1901 01:34:50,170 --> 01:34:52,860 Αποδεικνύεται σε C, ότι όταν Θέλετε να γράψετε ένα string, 1902 01:34:52,860 --> 01:34:56,680 κάνετε χρήση διπλά εισαγωγικά, όπως ακριβώς έχουμε έχουν χρησιμοποιήσει όλο αυτό το διάστημα με printf. 1903 01:34:56,680 --> 01:35:02,030 >> Αλλά αν θέλετε να ασχοληθεί μόνο με ένα μεμονωμένο χαρακτήρα, το λεγόμενο char, 1904 01:35:02,030 --> 01:35:03,780 τότε μπορείτε να χρησιμοποιήσετε πραγματικά μονά εισαγωγικά. 1905 01:35:03,780 --> 01:35:05,450 Όσοι από εσάς έχετε προγραμματιστεί πριν, μπορεί να μην έχετε 1906 01:35:05,450 --> 01:35:07,850 Έπρεπε να ανησυχείτε για αυτό διάκριση σε ορισμένες γλώσσες. 1907 01:35:07,850 --> 01:35:09,450 Στην C, αυτό έχει σημασία. 1908 01:35:09,450 --> 01:35:12,560 Και έτσι όταν παίρνω μια χαρα και θέλω να συγκρίνουν ότι char χρησιμοποιώντας ίσων 1909 01:35:12,560 --> 01:35:18,350 ισούται με κάποιο e-mail, όπως y ή n, να κάνω, Πράγματι, πρέπει να έχουν τα μονά εισαγωγικά. 1910 01:35:18,350 --> 01:35:19,770 >> Τώρα, ας πάμε μπροστά και να το κάνουμε αυτό. 1911 01:35:19,770 --> 01:35:26,180 Ας πάμε μπροστά και να κάνουν λογική dot κάθετος λογική. 1912 01:35:26,180 --> 01:35:27,305 Και τώρα είμαι να σας ζητηθεί. 1913 01:35:27,305 --> 01:35:30,638 Έτσι, κατά πάσα πιθανότητα, μια καλύτερη εμπειρία του χρήστη θα μου πει πραγματικά τι να κάνουμε εδώ. 1914 01:35:30,638 --> 01:35:33,030 Αλλά Πάω να απλά τυφλά λένε y για ναι, εντάξει, ωραία. 1915 01:35:33,030 --> 01:35:35,780 >> Ας το εκτελέσετε ξανά, n για όχι, ωραία. 1916 01:35:35,780 --> 01:35:39,610 Ας υποθέσουμε ότι, όπως ορισμένοι άνθρωποι που ξέρω, caps lock μου κλειδί είναι σε πάρα πολύ συχνά. 1917 01:35:39,610 --> 01:35:43,740 Έτσι κάνω πρωτεύουσα Υ, εισάγετε, σφάλμα. 1918 01:35:43,740 --> 01:35:46,130 Εντάξει, δεν είναι ακριβώς αυτό που περιμένω. 1919 01:35:46,130 --> 01:35:48,170 Πράγματι, ο υπολογιστής κάνει κυριολεκτικά ό, τι 1920 01:35:48,170 --> 01:35:51,794 Μου είπαν να do-- ελέγξει για πεζά y και πεζά n. 1921 01:35:51,794 --> 01:35:53,960 Αυτό δεν αισθάνονται σαν καλό εμπειρία του χρήστη, όμως. 1922 01:35:53,960 --> 01:35:59,010 Επιτρέψτε μου να ζητήσει και να αποδεχθεί είτε πεζά ή κεφαλαία γράμματα. 1923 01:35:59,010 --> 01:36:02,090 Έτσι αποδεικνύεται, ίσως να θέλετε να πω κάτι σαν το Ξυστό, 1924 01:36:02,090 --> 01:36:08,150 όπως κυριολεκτικά ή Γ ισούται με ισούται κεφαλαίων ενιαία εισηγμένες y. 1925 01:36:08,150 --> 01:36:11,400 Βγάζει, C δεν έχει Αυτή η κυριολεκτική λέξη-κλειδί ή. 1926 01:36:11,400 --> 01:36:12,880 >> Αλλά έχει δύο κάθετες μπάρες. 1927 01:36:12,880 --> 01:36:15,463 Θα πρέπει να κρατήσει το Shift συνήθως, αν χρησιμοποιείτε ένα πληκτρολόγιο ΗΠΑ, 1928 01:36:15,463 --> 01:36:18,910 και να χτυπήσει την κάθετη μπάρα πλήκτρο πάνω πλήκτρο επιστροφής σας. 1929 01:36:18,910 --> 01:36:22,410 Αλλά αυτή η κάθετη γραμμή κάθετη γραμμή σημαίνει ή. 1930 01:36:22,410 --> 01:36:26,220 >> Αν, αντιθέτως, θέλαμε να πω και, όπως στο Ξυστό, 1931 01:36:26,220 --> 01:36:28,180 θα μπορούσαμε να κάνουμε ampersand ampersand. 1932 01:36:28,180 --> 01:36:31,330 Αυτό δεν κάνει καμία λογική έννοια εδώ, επειδή ένας άνθρωπος δεν θα μπορούσε, ενδεχομένως, 1933 01:36:31,330 --> 01:36:37,110 έχετε πληκτρολογήσει τόσο y και πεζά y και των κεφαλαίων Υ, όπως το ίδιο χαρακτήρα. 1934 01:36:37,110 --> 01:36:39,470 Έτσι, ή είναι αυτό που σκοπεύουμε εδώ. 1935 01:36:39,470 --> 01:36:46,280 >> Έτσι, αν το κάνω αυτό σε δύο μέρη, ή c ισούται ισούται κεφάλαιο Ν, τώρα επανάληψη, 1936 01:36:46,280 --> 01:36:49,390 κάνουν λογική, εκτελέστε ξανά τη λογική. 1937 01:36:49,390 --> 01:36:51,200 Τώρα, μπορώ να πληκτρολογήσετε y. 1938 01:36:51,200 --> 01:36:53,920 Και μπορώ να το κάνω και πάλι με κεφάλαιο Υ, ή του κεφαλαίου N. 1939 01:36:53,920 --> 01:36:56,630 Και θα μπορούσα να προσθέσω σε πρόσθετες συνδυασμούς ακόμα. 1940 01:36:56,630 --> 01:36:58,810 >> Έτσι, αυτό είναι ένα λογικό πρόγραμμα, εφόσον τώρα 1941 01:36:58,810 --> 01:37:01,940 Φεύγω λογικά για Αυτή η τιμή ή η τιμή αυτή. 1942 01:37:01,940 --> 01:37:06,420 Και δεν έχω να, κατ 'ανάγκην, καταλήξει σε δύο IFS ή αλλιώς IFS. 1943 01:37:06,420 --> 01:37:09,960 Μπορώ να συνδυάσει πραγματικά κάποια από τα που σχετίζονται με τη λογική μαζί με αυτό τον τρόπο. 1944 01:37:09,960 --> 01:37:11,950 Έτσι, αυτό θα ήταν καλύτερα σχεδιαστεί από απλά 1945 01:37:11,950 --> 01:37:17,490 λέγοντας ότι, αν C είναι ίση με πεζά y, εκτύπωση ναι, αλλιώς αν το c είναι ίση με πρωτεύουσα Υ, 1946 01:37:17,490 --> 01:37:20,074 εκτύπωση ναι, αλλιώς αν το c είναι ίση με lower-- με άλλα λόγια, 1947 01:37:20,074 --> 01:37:21,990 δεν χρειάζεται να έχουν όλο και περισσότερους κλάδους. 1948 01:37:21,990 --> 01:37:28,840 Μπορείτε να συνδυάσετε κάποια από τα ισοδύναμα κλαδιά λογικά, όπως με τον τρόπο αυτό. 1949 01:37:28,840 --> 01:37:34,150 >> Έτσι, ας ρίξουμε μια ματιά σε ένα μόνο τελικό συστατικό, ένα τελικό κατασκεύασμα, 1950 01:37:34,150 --> 01:37:34,847 ότι η C επιτρέπει. 1951 01:37:34,847 --> 01:37:36,930 Και θα επανέλθουμε στο μέλλον σε άλλους ακόμα. 1952 01:37:36,930 --> 01:37:41,400 Και τότε θα συμπεράνουμε κοιτάζοντας σε όχι την ορθότητα της code-- 1953 01:37:41,400 --> 01:37:46,070 να πάρει κωδικό για να work-- αλλά ο σχεδιασμός του κώδικα, και να φυτέψει αυτούς τους σπόρους από νωρίς. 1954 01:37:46,070 --> 01:37:51,337 >> Επιτρέψτε μου λοιπόν να πάει μπροστά και να ανοίξει ένα νέο αρχείο εδώ. 1955 01:37:51,337 --> 01:37:51,920 Ξέρεις τι? 1956 01:37:51,920 --> 01:37:54,450 Πάω να επανεξετάσει την εφαρμογή το ίδιο πρόγραμμα, 1957 01:37:54,450 --> 01:37:55,940 αλλά χρησιμοποιώντας ένα διαφορετικό κατασκεύασμα. 1958 01:37:55,940 --> 01:38:00,110 >> Έτσι, επιτρέψτε μου να δώσω στον εαυτό μου γρήγορα πρόσβαση για να συμπεριλάβει CS50.h 1959 01:38:00,110 --> 01:38:04,150 για τη βιβλιοθήκη CS50, πρότυπο Io.h για printf. 1960 01:38:04,150 --> 01:38:06,510 Δώσε μου int main κενό μου. 1961 01:38:06,510 --> 01:38:09,310 Και στη συνέχεια εδώ, ας Θέλω να προχωρήσει και να το κάνουμε αυτό. 1962 01:38:09,310 --> 01:38:12,010 >> Χαρ γ παίρνει πάρει char, ακριβώς όπως και πριν. 1963 01:38:12,010 --> 01:38:16,770 Και Πάω να χρησιμοποιήσετε ένα νέο κατασκεύασμα now-- διακόπτη, σε ό, τι χαρακτήρα; 1964 01:38:16,770 --> 01:38:19,820 Έτσι διακόπτης είναι κάτι σαν Η μετάβαση ενός τρένου. 1965 01:38:19,820 --> 01:38:22,070 Ή, πραγματικά, είναι το είδος της ένα αν αλλιώς, αν άλλο αν, 1966 01:38:22,070 --> 01:38:23,980 αλλά γραμμένο κάπως διαφορετικά. 1967 01:38:23,980 --> 01:38:25,490 >> Ένας διακόπτης μοιάζει με αυτό. 1968 01:38:25,490 --> 01:38:29,060 Έχετε διακόπτη, και στη συνέχεια ό, τι χαρακτήρα ή τον αριθμό που θέλετε να δείτε, 1969 01:38:29,060 --> 01:38:32,000 Στη συνέχεια κάποιοι άγκιστρα αρέσει σε Το μηδέν, απλώς να πω κάνει αυτά τα πράγματα. 1970 01:38:32,000 --> 01:38:33,480 Και τότε θα έχουν διαφορετικές περιπτώσεις. 1971 01:38:33,480 --> 01:38:34,830 >> Δεν χρησιμοποιείτε εάν και αλλού. 1972 01:38:34,830 --> 01:38:37,050 Μπορείτε κυριολεκτικά να χρησιμοποιήσετε την υπόθεση λέξη. 1973 01:38:37,050 --> 01:38:38,790 Και θα σας πω κάτι τέτοιο. 1974 01:38:38,790 --> 01:38:43,820 >> Έτσι, στην περίπτωση μιας πεζά y, ή στην περίπτωση ενός κεφαλαίου Υ, 1975 01:38:43,820 --> 01:38:47,350 να προχωρήσει και να εκτυπώσετε ναι. 1976 01:38:47,350 --> 01:38:49,020 Και στη συνέχεια να ξεφύγει από το διακόπτη. 1977 01:38:49,020 --> 01:38:49,580 Αυτό είναι. 1978 01:38:49,580 --> 01:38:50,880 Τελειώσαμε. 1979 01:38:50,880 --> 01:38:57,270 >> Άλλο αν, να το πω έτσι, πεζά n, ή το κεφάλαιο Ν, 1980 01:38:57,270 --> 01:39:02,560 τότε προχωρήστε και εκτύπωσης έξω κανένας, και στη συνέχεια να σπάσει. 1981 01:39:02,560 --> 01:39:08,022 Else-- και αυτό το είδος της είναι η περίπτωση αθέτησης indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 και μόνο για το καλό μέτρο, αν και λογικά αυτό το διάλειμμα δεν είναι απαραίτητο 1983 01:39:10,980 --> 01:39:12,896 γιατί είμαστε στο τέλος του διακόπτη έτσι κι αλλιώς, 1984 01:39:12,896 --> 01:39:14,520 Είμαι τώρα το σπάσιμο έξω από το διακόπτη. 1985 01:39:14,520 --> 01:39:16,280 Έτσι, αυτό φαίνεται λίγο διαφορετική. 1986 01:39:16,280 --> 01:39:18,272 >> Όμως, λογικά, είναι στην πράξη ισοδύναμη. 1987 01:39:18,272 --> 01:39:19,980 Και γιατί θα χρησιμοποιήσετε το ένα πάνω στο άλλο; 1988 01:39:19,980 --> 01:39:23,220 Μερικές φορές, απλά προσωπική προτίμηση, Μερικές φορές η αισθητική, 1989 01:39:23,220 --> 01:39:25,420 αν ματιά σε αυτό Τώρα, υπάρχει κάτι 1990 01:39:25,420 --> 01:39:27,510 να ειπωθούν για το αναγνωσιμότητα του κώδικα αυτού. 1991 01:39:27,510 --> 01:39:30,690 Θέλω να πω, δεν πειράζει το γεγονός ότι αυτή η κώδικας είναι νέο για πολλούς από εμάς στο δωμάτιο. 1992 01:39:30,690 --> 01:39:33,515 >> Αλλά αυτό ακριβώς το είδος του είναι αρκετά. 1993 01:39:33,515 --> 01:39:37,760 Βλέπετε πεζά y, πρωτεύουσα Υ, πεζά n, πρωτεύουσα Ν προεπιλογή, 1994 01:39:37,760 --> 01:39:40,150 αυτό ακριβώς το είδος των αλμάτων έξω σε σας με έναν τρόπο 1995 01:39:40,150 --> 01:39:42,200 ότι, αναμφισβήτητα, ίσως Το προηγούμενο παράδειγμα 1996 01:39:42,200 --> 01:39:45,780 με τις IFS, και τις κάθετες μπάρες, και οι άλλοι IFS, δεν θα μπορούσε να έχει. 1997 01:39:45,780 --> 01:39:51,600 Έτσι, αυτό είναι πραγματικά ένα θέμα προσωπικής επιλογή, πραγματικά, ή αναγνωσιμότητα, 1998 01:39:51,600 --> 01:39:52,360 του κώδικα. 1999 01:39:52,360 --> 01:39:58,230 >> Αλλά από την άποψη της λειτουργικότητας, επιτρέψτε μου να προχωρήσει και να κάνει ένα διακόπτη, dot κάθετος 2000 01:39:58,230 --> 01:40:05,830 διακόπτη, και τώρα πληκτρολογήσετε πεζά y, πρωτεύουσα Υ, πεζά n, κεφάλαιο Ν, 2001 01:40:05,830 --> 01:40:09,250 Ο David, προσπαθήστε ξανά γιατί αυτό είναι δεν είναι ένα μεμονωμένο χαρακτήρα. 2002 01:40:09,250 --> 01:40:12,050 Ας κάνουμε x, σφάλμα, όπως αναμενόταν. 2003 01:40:12,050 --> 01:40:15,640 Και, logically-- και αυτό είναι κάτι Θα ήθελα να ενθαρρύνω το general-- ακόμη 2004 01:40:15,640 --> 01:40:17,790 αν είμαστε μόνο ξύσιμο το επιφάνεια μερικών από αυτά τα χαρακτηριστικά. 2005 01:40:17,790 --> 01:40:20,560 >> Και μπορεί να μην είναι προφανής όταν τον εαυτό σας να καθίσει στο πληκτρολόγιο, 2006 01:40:20,560 --> 01:40:21,370 πως λειτουργεί αυτό? 2007 01:40:21,370 --> 01:40:22,240 Τι θα ήταν αυτό να κάνει; 2008 01:40:22,240 --> 01:40:25,630 Το όμορφο πράγμα για την κατοχή ένα laptop ή desktop, ή την πρόσβαση 2009 01:40:25,630 --> 01:40:29,290 σε έναν υπολογιστή με ένα compiler, και με ένα πρόγραμμα επεξεργασίας κώδικα όπως αυτό, 2010 01:40:29,290 --> 01:40:32,990 είναι μπορείτε σχεδόν πάντα να απαντήσει σε αυτά ερωτήσεις για τον εαυτό σας μόνο με την προσπάθεια. 2011 01:40:32,990 --> 01:40:36,570 >> Για παράδειγμα, αν η ρητορική ερώτημα στο χέρι ήταν, 2012 01:40:36,570 --> 01:40:39,540 τι θα συμβεί αν ξεχάσετε Δηλώσεις διάλειμμα σας; 2013 01:40:39,540 --> 01:40:41,400 Η οποία είναι στην πραγματικότητα μια πολύ κοινό πράγμα που πρέπει να κάνουμε, 2014 01:40:41,400 --> 01:40:43,540 γιατί δεν φαίνεται όπως και εσείς πραγματικά τα έχουν ανάγκη. 2015 01:40:43,540 --> 01:40:46,790 Στην πραγματικότητα δεν ολοκληρώνουν σας σκέφτηκε σαν μια παρένθεση ή σγουρά 2016 01:40:46,790 --> 01:40:47,714 τιράντες κάνει. 2017 01:40:47,714 --> 01:40:49,630 Ας πάμε μπροστά και να μεταγλωττίσετε τον κώδικα και να δούμε. 2018 01:40:49,630 --> 01:40:53,690 Έτσι κάνουν διακόπτη, dot διακόπτη κάθετος. 2019 01:40:53,690 --> 01:40:56,435 Ας πληκτρολογήσετε πεζά y, το top case, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Γι 'αυτό και πληκτρολογήσει y. 2022 01:41:00,700 --> 01:41:04,420 >> Το πρόγραμμα είπε ναι, όχι, λάθος, σαν να άλλαζε γνώμη. 2023 01:41:04,420 --> 01:41:09,280 Αλλά αυτό το είδος της ήταν, γιατί ό, τι συμβαίνει με διακόπτη είναι η πρώτη περίπτωση που 2024 01:41:09,280 --> 01:41:13,899 αγώνα ουσιαστικά σημαίνει, hey υπολογιστή, εκτελέσει όλες του κώδικα κάτω από αυτό. 2025 01:41:13,899 --> 01:41:16,690 Και αν δεν πούμε διάλειμμα, ή δεν λένε διάλειμμα, ή δεν λένε διάλειμμα, 2026 01:41:16,690 --> 01:41:19,540 ο υπολογιστής πρόκειται να φυσήξει μέσω όλων αυτών των γραμμών 2027 01:41:19,540 --> 01:41:22,779 και να εκτελέσει όλα αυτά μέχρι να φτάνει σε αυτή την σγουρά κηδεμόνα. 2028 01:41:22,779 --> 01:41:24,320 Έτσι, τα φρένα είναι, πράγματι, απαραίτητη. 2029 01:41:24,320 --> 01:41:27,120 Αλλά μια takeaway εδώ είναι, όταν Σε περίπτωση αμφιβολίας, δοκιμάστε κάτι. 2030 01:41:27,120 --> 01:41:29,510 Ίσως να αποθηκεύσετε τον κωδικό σας πρώτα, ή να το αποθηκεύσετε σε ένα επιπλέον αρχείο 2031 01:41:29,510 --> 01:41:32,930 αν είστε πραγματικά ανησυχούν για χαλούν και να ανακτήσουν 2032 01:41:32,930 --> 01:41:34,430 η εργασία που γνωρίζετε ότι λειτουργεί. 2033 01:41:34,430 --> 01:41:35,410 >> Αλλά να προσπαθήσουμε τα πράγματα. 2034 01:41:35,410 --> 01:41:38,074 Και δεν είναι τόσο φοβισμένος, ίσως, για το τι μπορεί να κάνει ο υπολογιστής, 2035 01:41:38,074 --> 01:41:39,490 ή ότι μπορεί να σπάσει κάτι. 2036 01:41:39,490 --> 01:41:42,790 Μπορείτε πάντα να επανέλθει σε κάποια παλαιότερη έκδοση. 2037 01:41:42,790 --> 01:41:45,640 >> Ας τελειώσει με την εξέταση κατά το σχεδιασμό των κώδικα. 2038 01:41:45,640 --> 01:41:49,020 Έχουμε αυτή τη δυνατότητα τώρα να γράψω συνθήκες, και βρόχους εγγραφής, 2039 01:41:49,020 --> 01:41:50,850 και τις μεταβλητές, και τις λειτουργίες κλήσεων. 2040 01:41:50,850 --> 01:41:54,590 Έτσι, ειλικρινά, είμαστε το είδος του πίσω στο όπου ήμασταν πριν από μία εβδομάδα με το Scratch, 2041 01:41:54,590 --> 01:42:00,120 αν και με λιγότερο συναρπαστικό κειμένου περιβάλλον από ό, τι Scratch επιτρέπει. 2042 01:42:00,120 --> 01:42:03,990 >> Αλλά παρατηρήσετε πόσο γρήγορα έχουμε αποκτήσει ότι το λεξιλόγιο, ακόμα κι αν είναι 2043 01:42:03,990 --> 01:42:07,570 πρόκειται να πάρει λίγο χρόνο να βυθιστεί σε, έτσι ώστε να μπορούμε τώρα να χρησιμοποιήσετε αυτό το λεξιλόγιο 2044 01:42:07,570 --> 01:42:10,320 να γράψω περισσότερα ενδιαφέροντα προγράμματα. 2045 01:42:10,320 --> 01:42:12,940 Και ας κάνουμε ένα βήμα μωρό προς αυτό, ως ακολούθως. 2046 01:42:12,940 --> 01:42:14,890 Επιτρέψτε μου να προχωρήσει και να δημιουργήσετε ένα νέο αρχείο εδώ. 2047 01:42:14,890 --> 01:42:17,750 >> Πάω να καλέσετε αυτό prototype.c, και να εισαγάγει 2048 01:42:17,750 --> 01:42:20,954 για πρώτη φορά, την ικανότητα να φτιάξετε το δικό σας λειτουργίες. 2049 01:42:20,954 --> 01:42:22,870 Μερικοί από εσάς μπορεί να έχετε κάνει αυτό με το Scratch, 2050 01:42:22,870 --> 01:42:25,430 σύμφωνα με την οποία μπορείτε να δημιουργήσετε σας δική έθιμο μπλοκ στο Ξυστό, 2051 01:42:25,430 --> 01:42:27,892 και στη συνέχεια να τα σύρετε στη θέση του όποτε θέλετε σε C. 2052 01:42:27,892 --> 01:42:30,100 Και στις περισσότερες προγραμματισμού γλώσσες, μπορείτε να κάνετε ακριβώς 2053 01:42:30,100 --> 01:42:33,580 ερμήνευα-- φτιάξετε το δικό σας λειτουργίες, αν δεν υπάρχουν ήδη. 2054 01:42:33,580 --> 01:42:38,660 >> Έτσι, για παράδειγμα, επιτρέψτε μου να πάει μπροστά και περιλαμβάνουν CS50.h, και περιλαμβάνουν 2055 01:42:38,660 --> 01:42:43,110 πρότυπο IO.h, int main άκυρη. 2056 01:42:43,110 --> 01:42:46,020 Και τώρα έχουμε ένα κράτησης θέσης είναι έτοιμα να ξεκινήσουν. 2057 01:42:46,020 --> 01:42:48,550 Κρατάω την εκτύπωση πράγματα όπως και τα ονόματα των ανθρώπων σήμερα. 2058 01:42:48,550 --> 01:42:51,910 Και ότι αισθάνεται like-- Δεν θα ήταν ωραίο αν υπάρχει 2059 01:42:51,910 --> 01:42:53,936 ήταν μια λειτουργία που ονομάζεται όνομα εκτύπωσης; 2060 01:42:53,936 --> 01:42:55,060 Δεν έχω να χρησιμοποιήσει printf. 2061 01:42:55,060 --> 01:42:56,976 Δεν έχω να θυμάμαι όλοι οι κωδικοί μορφή. 2062 01:42:56,976 --> 01:43:00,050 Γιατί δεν μπορώ να κάνω, ή γιατί δεν το έκανε κάποιος πριν από μένα, 2063 01:43:00,050 --> 01:43:02,980 δημιουργήσετε μια συνάρτηση που ονομάζεται εκτύπωση όνομα, που δίνεται κάποιο όνομα, 2064 01:43:02,980 --> 01:43:03,980 απλά εκτυπώνει; 2065 01:43:03,980 --> 01:43:08,700 >> Με άλλα λόγια, αν μπορώ να πω, hey, υπολογιστή, να μου δώσει ένα string 2066 01:43:08,700 --> 01:43:11,870 ζητώντας από το χρήστη για τέτοιου είδους, μέσω της λειτουργίας εγχόρδων πάρει CS50 του. 2067 01:43:11,870 --> 01:43:15,090 Γεια σου, υπολογιστή, βάλτε αυτό το κορδόνι στο η μεταβλητή στην αριστερή πλευρά, 2068 01:43:15,090 --> 01:43:16,150 και να το ονομάσουμε s. 2069 01:43:16,150 --> 01:43:22,150 Και τότε, hey υπολογιστή, προχωρήστε και να εκτυπώσετε ότι το όνομα του ατόμου, γίνεται. 2070 01:43:22,150 --> 01:43:26,240 >> Τώρα, θα ήταν ωραίο, διότι Το πρόγραμμα αυτό, που εύστοχα ονομάστηκε, 2071 01:43:26,240 --> 01:43:29,170 μου λέει αυτό που θα έπρεπε να κάνει μέσω της κατονομάζει αυτές συνάρτησης. 2072 01:43:29,170 --> 01:43:32,930 Επιτρέψτε μου να πάω και να κάνει πρωτότυπο, Enter. 2073 01:43:32,930 --> 01:43:34,930 Και, δυστυχώς, αυτό δεν πρόκειται να πετάξει. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, γραμμή 7, χαρακτήρας 5, σφάλμα, σιωπηρή δήλωση 2075 01:43:39,430 --> 01:43:42,960 της λειτουργίας όνομα εκτύπωσης είναι ανίσχυρο, C99, C99 2076 01:43:42,960 --> 01:43:45,130 δηλαδή μια έκδοση της C ότι βγήκε το 1999. 2077 01:43:45,130 --> 01:43:45,730 Αυτό είναι όλο. 2078 01:43:45,730 --> 01:43:48,780 >> Έτσι, δεν ξέρω τι όλα αυτά σημαίνουν ακόμα. 2079 01:43:48,780 --> 01:43:50,810 Αλλά εγώ αναγνωρίζω σφάλμα στο κόκκινο. 2080 01:43:50,810 --> 01:43:51,770 Αυτό είναι αρκετά προφανές. 2081 01:43:51,770 --> 01:43:53,769 >> Και φαίνεται ότι με το πράσινο χαρακτήρα εδώ, 2082 01:43:53,769 --> 01:43:57,520 το θέμα είναι με το όνομα εκτύπωσης, ανοίξτε παρένθεσης s, κοντά παρένθεσης, άνω τελεία. 2083 01:43:57,520 --> 01:44:01,800 Αλλά σιωπηρή δήλωση λειτουργία κάναμε δούμε εν συντομία νωρίτερα. 2084 01:44:01,800 --> 01:44:04,880 Αυτό σημαίνει, απλά, ότι Clang δεν ξέρει τι εννοώ. 2085 01:44:04,880 --> 01:44:09,000 >> Έχω χρησιμοποιήσει μια λέξη λεξιλόγιο ότι είναι δεν είχε γνωρίσει ποτέ ή έχουν διδαχθεί πριν. 2086 01:44:09,000 --> 01:44:11,950 Και γι 'αυτό πρέπει να το διδάξουμε τι σημαίνει αυτή η λειτουργία. 2087 01:44:11,950 --> 01:44:13,590 Έτσι, Πάω να προχωρήσει και να το κάνουμε αυτό. 2088 01:44:13,590 --> 01:44:17,970 >> Πάω να προχωρήσει και να εφαρμόσει τη δική μου λειτουργία που ονομάζεται Εκτύπωση Όνομα. 2089 01:44:17,970 --> 01:44:24,720 Και Πάω να πω, ως εξής, ότι το κάνει αυτό, printf, γεια σου, τοις εκατό 2090 01:44:24,720 --> 01:44:27,760 s, backslash n, το όνομα, άνω τελεία. 2091 01:44:27,760 --> 01:44:29,250 Έτσι τι έκανα ακριβώς κάνει; 2092 01:44:29,250 --> 01:44:31,325 >> Έτσι αποδεικνύεται, για να εφαρμόσουν τη δική σας λειτουργία, 2093 01:44:31,325 --> 01:44:33,845 Είμαστε είδος δανειστεί μερικά από την ίδια δομή ως κύρια 2094 01:44:33,845 --> 01:44:35,720 ότι έχουμε μόλις θεωρείται δεδομένη, και εγώ 2095 01:44:35,720 --> 01:44:37,730 ξέρετε ακριβώς αντιγραφή και επικόλληση λίγο πολύ ό, τι 2096 01:44:37,730 --> 01:44:39,170 Έχω γράψει στο παρελθόν. 2097 01:44:39,170 --> 01:44:40,570 Αλλά παρατηρήστε το σχέδιο εδώ. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, Void, θα δώσουμε έμφαση, εκτός πριν από καιρό τι σημαίνει στην πραγματικότητα. 2099 01:44:43,750 --> 01:44:46,160 >> Αλλά για σήμερα, μόνο παρατηρήσετε τον παραλληλισμό. 2100 01:44:46,160 --> 01:44:48,210 Κενό, το όνομα εκτύπωσης, Το όνομά string, οπότε υπάρχει 2101 01:44:48,210 --> 01:44:50,310 ένα μωβ λέξη-κλειδί, η οποία θα πάμε για να ξεκινήσετε 2102 01:44:50,310 --> 01:44:54,067 καλώντας έναν τύπο επιστροφής, το όνομα του η λειτουργία, και στη συνέχεια η είσοδος. 2103 01:44:54,067 --> 01:44:56,400 Έτσι, στην πραγματικότητα, μπορούμε να αποσταχθούν Αυτό το είδος της, όπως την περασμένη εβδομάδα 2104 01:44:56,400 --> 01:44:59,030 όπως, αυτό είναι το όνομα ή ο αλγόριθμος του κώδικα είμαστε 2105 01:44:59,030 --> 01:45:00,761 πρόκειται να write-- η αλγόριθμο υποκείμενες 2106 01:45:00,761 --> 01:45:02,010 ο κώδικας θα πάμε να γράψω. 2107 01:45:02,010 --> 01:45:03,180 >> Αυτό είναι είσοδος της. 2108 01:45:03,180 --> 01:45:04,670 Αυτή είναι η έξοδος της. 2109 01:45:04,670 --> 01:45:08,730 Αυτή η λειτουργία, το όνομα εκτύπωσης, είναι σχεδιαστεί για να λάβει μια σειρά που ονομάζεται όνομα, 2110 01:45:08,730 --> 01:45:11,350 ή οτιδήποτε άλλο, ως πρώτη ύλη, και στη συνέχεια να ακυρωθούν. 2111 01:45:11,350 --> 01:45:13,904 Αυτό δεν επιστρέφει τίποτα, όπως να πάρει σπάγκο ή να πάρετε int κάνει. 2112 01:45:13,904 --> 01:45:15,570 Έτσι, πρόκειται να μου δώσει κάτι πίσω. 2113 01:45:15,570 --> 01:45:17,960 Είναι ακριβώς πρόκειται να έχουν παρενέργεια, να το πω έτσι, 2114 01:45:17,960 --> 01:45:19,570 εκτύπωσης το όνομα ενός ατόμου. 2115 01:45:19,570 --> 01:45:22,260 Έτσι παρατηρήσετε, γραμμή 7, I μπορεί να καλέσει το όνομά εκτύπωσης. 2116 01:45:22,260 --> 01:45:25,920 Γραμμή 10, μπορώ να ορίσει ή να εφαρμόσουν το όνομα εκτύπωσης. 2117 01:45:25,920 --> 01:45:28,450 Αλλά, δυστυχώς, αυτό δεν είναι αρκετό. 2118 01:45:28,450 --> 01:45:31,230 >> Επιτρέψτε μου να προχωρήσει και να ξαναμεταγλωττίσετε αυτό μετά από την αποθήκευση. 2119 01:45:31,230 --> 01:45:33,910 Πω πω, τώρα, το έχω κάνει χειρότερα, φαίνεται. 2120 01:45:33,910 --> 01:45:37,027 Έτσι σιωπηρή δήλωση Το όνομά λειτουργία εκτύπωσης δεν είναι έγκυρη. 2121 01:45:37,027 --> 01:45:38,360 Και, πάλι, υπάρχουν και άλλα λάθη. 2122 01:45:38,360 --> 01:45:41,430 Αλλά όπως προειδοποίησε νωρίτερα, ακόμη και αν έχετε συγκλονισμένοι με, 2123 01:45:41,430 --> 01:45:44,850 ή λίγο λυπηρό να βλέπουμε τόσους πολλούς σφάλματα, επικεντρώνονται μόνο στην πρώτη 2124 01:45:44,850 --> 01:45:47,500 Αρχικά, επειδή θα μπορούσε απλώς είχε αλυσιδωτές αντιδράσεις. 2125 01:45:47,500 --> 01:45:51,970 Έτσι C, ή Clang πιο συγκεκριμένα, εξακολουθεί να μην αναγνωρίζει το όνομά εκτύπωσης. 2126 01:45:51,970 --> 01:45:54,580 >> Και αυτό γιατί Clang, από το σχεδιασμό, είναι το είδος των χαζή. 2127 01:45:54,580 --> 01:45:56,280 Κάνει μόνο ό, τι το πω για να το κάνουμε. 2128 01:45:56,280 --> 01:46:00,950 Και το κάνει μόνο τόσο με τη σειρά στο οποίο μπορείτε να το πω για να το κάνει. 2129 01:46:00,950 --> 01:46:05,270 >> Γι 'αυτό και έχουν καθορίσει κύρια on line τέσσερα, όπως έχουμε κάνει αρκετά συχνά. 2130 01:46:05,270 --> 01:46:07,980 Έχω καθορισμένο όνομα εκτύπωσης στη γραμμή 10. 2131 01:46:07,980 --> 01:46:11,793 Αλλά εγώ προσπαθώ να χρησιμοποιήσει Το όνομά εκτύπωσης στη γραμμή επτά. 2132 01:46:11,793 --> 01:46:13,670 >> Είναι πάρα πολύ σύντομα, δεν υπάρχει ακόμα. 2133 01:46:13,670 --> 01:46:19,150 Γι 'αυτό θα μπορούσε να είναι έξυπνος και να είναι όπως, ΟΚ, οπότε ας παίξουν μαζί, 2134 01:46:19,150 --> 01:46:23,680 και μετακινήστε το όνομα εκτύπωσης έως εδώ, και την εκ νέου μεταγλώττιση. 2135 01:46:23,680 --> 01:46:24,550 Ω Θεέ μου. 2136 01:46:24,550 --> 01:46:25,260 Δούλεψε. 2137 01:46:25,260 --> 01:46:26,670 Ήταν τόσο απλό. 2138 01:46:26,670 --> 01:46:28,120 >> Αλλά η λογική είναι ακριβώς αυτό. 2139 01:46:28,120 --> 01:46:30,870 Θα πρέπει να διδάξει Clang τι είναι με τον καθορισμό της λειτουργίας πρώτα. 2140 01:46:30,870 --> 01:46:31,920 Στη συνέχεια, μπορείτε να το χρησιμοποιήσετε. 2141 01:46:31,920 --> 01:46:33,940 Αλλά, ειλικρινά, αυτό αισθάνεται σαν ένα ολισθηρό δρόμο. 2142 01:46:33,940 --> 01:46:35,773 >> Έτσι, κάθε φορά που τρέχει σε ένα πρόβλημα, είμαι απλά 2143 01:46:35,773 --> 01:46:39,450 πρόκειται να επισημάνετε και να αντιγράψετε τον κώδικα Έγραψα, το κόβουμε και να το επικολλήσετε εδώ. 2144 01:46:39,450 --> 01:46:41,370 Και, σίγουρα, θα μπορούσαμε να εφευρίσκω κάποια σενάρια 2145 01:46:41,370 --> 01:46:43,286 όπου μία λειτουργία θα μπορούσε πρέπει να καλέσετε ένα άλλο. 2146 01:46:43,286 --> 01:46:46,030 Και απλά δεν μπορεί να βάλει κάθε λειτουργία πάνω από κάθε άλλο. 2147 01:46:46,030 --> 01:46:47,930 >> Έτσι αποδεικνύεται εκεί έξω που μια καλύτερη λύση. 2148 01:46:47,930 --> 01:46:50,100 Μπορούμε να αφήσουμε αυτό να είναι. 2149 01:46:50,100 --> 01:46:53,677 Και, ειλικρινά, είναι γενικά ωραίο, και βολικό, και καλό σχεδιασμό 2150 01:46:53,677 --> 01:46:56,760 να θέσει κύρια πρώτη, γιατί, και πάλι, κύρια ακριβώς όπως όταν κάνετε κλικ πράσινη σημαία, 2151 01:46:56,760 --> 01:46:59,027 αυτή είναι η λειτουργία που παίρνει εκτελείται από προεπιλογή. 2152 01:46:59,027 --> 01:47:01,110 Έτσι, ίσως και να θέσει αυτό στην κορυφή του αρχείου 2153 01:47:01,110 --> 01:47:03,560 έτσι ώστε όταν εσείς ή οποιοδήποτε άλλες ανθρώπινες κοιτάζει το αρχείο 2154 01:47:03,560 --> 01:47:06,360 Ξέρετε τι συμβαίνει μόνο με την ανάγνωση κύριο πρώτα. 2155 01:47:06,360 --> 01:47:15,360 Έτσι αποδεικνύεται, μπορούμε να πούμε Clang προληπτικά, hey, Clang, στη γραμμή τέσσερα, 2156 01:47:15,360 --> 01:47:17,940 Υπόσχομαι να εφαρμόσουν μια λειτουργία που ονομάζεται Εκτύπωση 2157 01:47:17,940 --> 01:47:22,600 Όνομα που παίρνει ένα string που ονομάζεται όνομα ως πρώτη ύλη, και επιστρέφει τίποτα, άκυρο. 2158 01:47:22,600 --> 01:47:24,770 Και θα πάρει γύρω στο εφαρμογή αργότερα. 2159 01:47:24,770 --> 01:47:25,680 >> Εδώ έρχεται Main. 2160 01:47:25,680 --> 01:47:29,130 Κύρια τώρα on line 9 μπορούν να χρησιμοποιήσουν Εκτύπωση Όνομα επειδή Clang 2161 01:47:29,130 --> 01:47:32,600 έχει εμπιστοσύνη ότι, τελικά, θα συναντήσετε τον ορισμό 2162 01:47:32,600 --> 01:47:34,880 της εφαρμογής των Εκτύπωση Όνομα. 2163 01:47:34,880 --> 01:47:37,390 Έτσι, μετά την αποθήκευση του αρχείου μου, ας Θέλω να πάω μπροστά και να κάνει πρωτότυπο, 2164 01:47:37,390 --> 01:47:38,498 φαίνεται καλό αυτή τη φορά. 2165 01:47:38,498 --> 01:47:43,470 Dot κάθετος, πρωτότυπο, επιτρέψτε μου να προχωρήσει και να πληκτρολογήσετε ένα όνομα. 2166 01:47:43,470 --> 01:47:48,440 David, γεια σου David, Zamila, γεια Zamila, και, μάλιστα, τώρα δουλεύει. 2167 01:47:48,440 --> 01:47:52,200 >> Έτσι, το συστατικό εδώ είναι ότι έχουμε έκανε μια προσαρμοσμένη λειτουργία, σαν έθιμο 2168 01:47:52,200 --> 01:47:54,219 μπλοκ μηδέν είμαστε και το call. 2169 01:47:54,219 --> 01:47:57,010 Αλλά σε αντίθεση με Scratch όπου μπορείτε να απλά να δημιουργήσετε και να αρχίσετε να χρησιμοποιείτε αυτό, 2170 01:47:57,010 --> 01:47:59,330 Τώρα πρέπει να είμαστε ένα λίγο πιο σχολαστικός, 2171 01:47:59,330 --> 01:48:03,410 και στην πραγματικότητα τρένο Clang να χρησιμοποιήσει ή να το περιμένουμε. 2172 01:48:03,410 --> 01:48:09,140 Τώρα, ως ένα μέρος, γιατί όλο αυτό το διάστημα έχουν ήμασταν απλά τυφλά στην πίστη, συμπεριλαμβανομένων 2173 01:48:09,140 --> 01:48:12,170 CS50.h, και συμπεριλαμβανομένων και των τυποποιημένων IO.h; 2174 01:48:12,170 --> 01:48:15,190 >> Λοιπόν, αποδεικνύεται, μεταξύ μερικά άλλα πράγματα, 2175 01:48:15,190 --> 01:48:18,550 όλα αυτά είναι σε εκείνα τα dot h αρχεία, τα οποία τυχαίνει να είναι τα αρχεία. 2176 01:48:18,550 --> 01:48:20,460 Είναι header αρχεία, να το πω έτσι. 2177 01:48:20,460 --> 01:48:23,270 Είναι ακόμα γραμμένο σε C. Αλλά ότι είναι ένα διαφορετικό τύπο αρχείου. 2178 01:48:23,270 --> 01:48:28,690 >> Προς το παρόν, μπορείτε λίγο πολύ να υποθέσουμε ότι όλα αυτά είναι μέσα CS50.h 2179 01:48:28,690 --> 01:48:33,360 είναι μερικές ατάκες όπως αυτή, δεν για τις λειτουργίες που ονομάζεται Εκτύπωση Όνομα, 2180 01:48:33,360 --> 01:48:36,840 αλλά για Λάβετε String, Get Float, και μερικοί άλλοι. 2181 01:48:36,840 --> 01:48:41,510 Και υπάρχουν παρόμοια πρωτότυπα, one liners, στο εσωτερικό του προτύπου IO.h 2182 01:48:41,510 --> 01:48:46,241 για printf, η οποία βρίσκεται τώρα στο τη δική μου λειτουργία Εκτύπωση Όνομα. 2183 01:48:46,241 --> 01:48:49,490 Έτσι με άλλα λόγια, όλη αυτή η φορά που έχουμε μόλις τυφλά αντιγραφή και επικόλληση 2184 01:48:49,490 --> 01:48:51,780 περιλαμβάνουν αυτό, περιλαμβάνουν ότι, ό, τι συμβαίνει; 2185 01:48:51,780 --> 01:48:55,310 Αυτά είναι ακριβώς το είδος των ενδείξεων να κλαγγή ως προς το τι λειτουργίες 2186 01:48:55,310 --> 01:49:00,170 είναι, πράγματι, σε εφαρμογή, απλά αλλού σε διαφορετικά αρχεία 2187 01:49:00,170 --> 01:49:02,440 σε άλλο σημείο του συστήματος. 2188 01:49:02,440 --> 01:49:05,160 >> Έτσι έχουμε υλοποιηθεί το όνομα εκτύπωσης. 2189 01:49:05,160 --> 01:49:07,910 Θα έχει αυτή την παρενέργεια της εκτύπωση κάτι στην οθόνη. 2190 01:49:07,910 --> 01:49:10,170 Αλλά δεν το κάνει πραγματικότητα το χέρι μου κάτι πίσω. 2191 01:49:10,170 --> 01:49:12,200 Πώς θα πάτε για την την εφαρμογή ενός προγράμματος που 2192 01:49:12,200 --> 01:49:14,510 δεν μου το χέρι κάτι πίσω; 2193 01:49:14,510 --> 01:49:15,580 >> Λοιπόν, ας προσπαθήσουμε αυτό. 2194 01:49:15,580 --> 01:49:21,360 Επιτρέψτε μου να προχωρήσει και να εφαρμόσει ένα αρχείο που ονομάζεται return.c 2195 01:49:21,360 --> 01:49:24,530 έτσι ώστε να μπορεί να αποδείξει πως κάτι όπως Πάρτε String, ή Πάρτε Int, 2196 01:49:24,530 --> 01:49:27,340 είναι στην πραγματικότητα επιστροφή κάτι πίσω στο χρήστη. 2197 01:49:27,340 --> 01:49:29,840 Ας πάμε μπροστά και να καθορίσει int main άκυρη. 2198 01:49:29,840 --> 01:49:33,230 >> Και, πάλι, στο μέλλον, θα εξηγήσει τι αυτό το int και το κενό 2199 01:49:33,230 --> 01:49:34,090 Είναι πραγματικά να κάνει. 2200 01:49:34,090 --> 01:49:35,840 Αλλά για σήμερα, θα θεωρούν δεδομένο. 2201 01:49:35,840 --> 01:49:39,970 Πάω να πάει μπροστά και printf, για μια καλή εμπειρία για το χρήστη, το x είναι. 2202 01:49:39,970 --> 01:49:44,360 Και τότε Πάω να περιμένουμε για το χρήστη να μου δώσει χ με έρθετε int. 2203 01:49:44,360 --> 01:49:48,459 >> Και τότε Πάω να πάει μπροστά και να εκτυπώσετε χ στο τετράγωνο. 2204 01:49:48,459 --> 01:49:50,500 Έτσι, όταν έχετε μόνο ένα πληκτρολόγιο, οι άνθρωποι συνήθως 2205 01:49:50,500 --> 01:49:52,600 χρησιμοποιήστε το μικρό καρότο σύμβολο στο πληκτρολόγιο 2206 01:49:52,600 --> 01:49:55,330 να εκπροσωπεί την εξουσία του, ή ο εκθέτης της. 2207 01:49:55,330 --> 01:49:58,960 SO x στο τετράγωνο είναι παρούσα i. 2208 01:49:58,960 --> 01:50:00,660 >> Και τώρα πάω να το κάνουμε αυτό. 2209 01:50:00,660 --> 01:50:03,940 Θα μπορούσα απλά do-- τι είναι x τετράγωνο; x τετράγωνο είναι x φορές x. 2210 01:50:03,940 --> 01:50:06,690 >> Και το κάναμε αυτό κάποια καιρό ήδη σήμερα. 2211 01:50:06,690 --> 01:50:08,730 Αυτό δεν αισθάνονται σαν όλα αυτά πολύ πρόοδο. 2212 01:50:08,730 --> 01:50:09,570 Ξέρεις τι? 2213 01:50:09,570 --> 01:50:13,100 Ας αξιοποιήσουν κάποιες από αυτή την ιδέα από την τελευταία ώρα της αφαίρεσης. 2214 01:50:13,100 --> 01:50:16,080 >> Δεν θα ήταν ωραίο αν υπάρχει μια λειτουργία που ονομάζεται 2215 01:50:16,080 --> 01:50:18,460 τετράγωνο που κάνει ακριβώς αυτό; 2216 01:50:18,460 --> 01:50:20,640 Εξακολουθεί, στο τέλος της την ημέρα, κάνει το ίδιο μαθηματικά. 2217 01:50:20,640 --> 01:50:22,410 Αλλά ας αφηρημένη μακριά η ιδέα της λήψης 2218 01:50:22,410 --> 01:50:25,280 ένας αριθμός πολλαπλασιάζεται με άλλο, και απλά να δώσει ένα όνομα, 2219 01:50:25,280 --> 01:50:27,360 όπως η πλατεία αυτή την τιμή. 2220 01:50:27,360 --> 01:50:29,560 >> Και, με άλλα λόγια, σε C, ας δημιουργήσουμε μια συνάρτηση 2221 01:50:29,560 --> 01:50:32,660 που ονομάζεται πλατεία που κάνει ακριβώς αυτό. 2222 01:50:32,660 --> 01:50:34,600 Είναι πρόκειται να ονομάζεται πλατεία. 2223 01:50:34,600 --> 01:50:35,790 Είναι πρόκειται να λάβει μια int. 2224 01:50:35,790 --> 01:50:37,820 Και θα απλά θα αποκαλούν n, από προεπιλογή. 2225 01:50:37,820 --> 01:50:39,403 >> Αλλά θα μπορούσαμε να το ονομάσουμε οτιδήποτε θέλουμε. 2226 01:50:39,403 --> 01:50:42,900 Και όλα αυτά που πρόκειται να κάνει, κυριολεκτικά, είναι η επιστροφή 2227 01:50:42,900 --> 01:50:45,810 το αποτέλεσμα της n φορές n. 2228 01:50:45,810 --> 01:50:48,980 Αλλά επειδή είναι επιστρέφοντας κάτι, το οποίο 2229 01:50:48,980 --> 01:50:53,690 είναι η λέξη κλειδί σε μωβ έχουμε δεν είχε γνωρίσει ποτέ πριν, εγώ, στη γραμμή 11, 2230 01:50:53,690 --> 01:50:55,410 Δεν μπορούμε απλά να πούμε άκυρη αυτή τη φορά. 2231 01:50:55,410 --> 01:51:01,320 >> Κενό, στο παράδειγμα που μόλις είδαμε αντί του ονόματος εκτύπωσης, απλά σημαίνει, 2232 01:51:01,320 --> 01:51:02,190 Κάνε κάτι. 2233 01:51:02,190 --> 01:51:04,170 Αλλά μην το χέρι μου κάτι πίσω. 2234 01:51:04,170 --> 01:51:06,790 Σε αυτήν την περίπτωση, θέλω να επιστρέψει n n φορές, 2235 01:51:06,790 --> 01:51:08,460 ή όποια και αν είναι, ο αριθμός αυτός. 2236 01:51:08,460 --> 01:51:12,460 >> Έτσι δεν μπορώ να πω, hey, ηλεκτρονικών υπολογιστών, Έχω επιστρέψει τίποτα, άκυρο. 2237 01:51:12,460 --> 01:51:16,166 Είναι πρόκειται να επιστρέψει, από τη φύση τους, μια int. 2238 01:51:16,166 --> 01:51:17,790 Και έτσι αυτό είναι που συμβαίνει εδώ. 2239 01:51:17,790 --> 01:51:20,070 >> Η είσοδος στην πλατεία πρόκειται να είναι μια int. 2240 01:51:20,070 --> 01:51:24,760 Και έτσι ώστε να μπορούμε να το χρησιμοποιήσουμε, πρέπει να έχουν ένα όνομα, Ν Πρόκειται για την έξοδο 2241 01:51:24,760 --> 01:51:26,240 μια int που δεν χρειάζεται ένα όνομα. 2242 01:51:26,240 --> 01:51:29,590 Μπορούμε να το αφήσουμε στο κύριο, ή όποιος είναι χρησιμοποιώντας μένα να θυμόμαστε αυτή την τιμή, αν 2243 01:51:29,590 --> 01:51:31,120 θέλω με τη δική μεταβλητή της. 2244 01:51:31,120 --> 01:51:33,230 >> Και, πάλι, το μόνο νέο λέξη-κλειδί εδώ είναι η απόδοση. 2245 01:51:33,230 --> 01:51:34,480 Και είμαι απλά κάνει κάποια μαθηματικά. 2246 01:51:34,480 --> 01:51:41,825 Αν ήθελα πραγματικά να είναι περιττή, Θα μπορούσα να πω το προϊόν int παίρνει n n φορές. 2247 01:51:41,825 --> 01:51:44,170 >> Και τότε θα μπορούσα να πω, να επιστρέψει το προϊόν. 2248 01:51:44,170 --> 01:51:47,360 Αλλά, και πάλι, στο σημείο μου νωρίτερα από Αυτό απλά δεν είναι καλό Σχέδιο-- 2249 01:51:47,360 --> 01:51:50,060 όπως, γιατί εισάγει ένα όνομα, ένα σύμβολο, όπως το προϊόν, 2250 01:51:50,060 --> 01:51:51,570 απλά για να την επιστρέψει αμέσως; 2251 01:51:51,570 --> 01:51:53,670 Είναι λίγο καθαρότερα, λίγο πιο κοντά, έτσι 2252 01:51:53,670 --> 01:51:59,380 να μιλήσει, μόνο και μόνο για να πω την επιστροφή n φορές n, να απαλλαγούμε από αυτή τη γραμμή εντελώς. 2253 01:51:59,380 --> 01:52:02,860 >> Και είναι ακριβώς λιγότερο κώδικα για να διαβάσετε, λιγότερο ευκαιρία για λάθη. 2254 01:52:02,860 --> 01:52:05,180 Και ας δούμε αν αυτό στην πραγματικότητα λειτουργεί τώρα. 2255 01:52:05,180 --> 01:52:09,380 Τώρα, είμαι πρόκειται να πάει μπροστά και να κάνει την επιστροφή. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, σιωπηρή δήλωση της συνάρτησης. 2257 01:52:11,460 --> 01:52:14,080 Έκανα αυτό το λάθος πριν, δεν είναι μεγάλη υπόθεση. 2258 01:52:14,080 --> 01:52:18,950 Επιτρέψτε μου απλά πληκτρολογήστε ή επισημάνετε και αντιγραφή, η ίδια ακριβώς λειτουργία πρωτότυπο, 2259 01:52:18,950 --> 01:52:21,342 ή υπογραφή, της λειτουργίας εδώ. 2260 01:52:21,342 --> 01:52:22,800 Ή θα μπορούσε να κινηθεί το σύνολο της λειτουργίας. 2261 01:52:22,800 --> 01:52:23,841 >> Αλλά αυτό είναι λίγο τεμπέλης. 2262 01:52:23,841 --> 01:52:24,870 Γι 'αυτό και δεν θα το κάνουμε αυτό. 2263 01:52:24,870 --> 01:52:27,960 Τώρα, επιτρέψτε μου να κάνει την επιστροφή και πάλι, dot επιστροφή κάθετος. 2264 01:52:27,960 --> 01:52:32,790 >> x είναι 2 x τετράγωνο είναι 4. x είναι 3. x τετράγωνο είναι 9. 2265 01:52:32,790 --> 01:52:35,300 Και η λειτουργία φαίνεται τώρα να λειτουργεί. 2266 01:52:35,300 --> 01:52:36,550 Έτσι ποια είναι η διαφορά εδώ; 2267 01:52:36,550 --> 01:52:42,520 Έχω μια λειτουργία που ονομάζεται πλατεία, σε αυτή την περίπτωση, το οποίο έβαλα σε μια είσοδο. 2268 01:52:42,520 --> 01:52:43,830 Και να πάρω πίσω μια έξοδο. 2269 01:52:43,830 --> 01:52:46,210 Και όμως, προηγουμένως, αν Ανοίγω το άλλο παράδειγμα 2270 01:52:46,210 --> 01:52:51,640 από την προηγούμενη, η οποία Ήταν ονομάζεται prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Είχα το όνομα εκτύπωσης, η οποία επέστρεψε κενό, να το πω έτσι, 2272 01:52:54,770 --> 01:52:58,730 Ή θα επιστρέψει τίποτα, και απλά είχε μια παρενέργεια. 2273 01:52:58,730 --> 01:53:00,230 >> Λοιπόν, τι συμβαίνει εδώ; 2274 01:53:00,230 --> 01:53:03,520 Λοιπόν, να εξετάσει τη λειτουργία πάρετε κορδόνι για μια στιγμή. 2275 01:53:03,520 --> 01:53:06,570 Έχουμε χρησιμοποιώντας τη λειτουργία πάρετε κορδόνι με τον ακόλουθο τρόπο. 2276 01:53:06,570 --> 01:53:10,464 >> Είχαμε μια λειτουργία πάρετε string, όπως και περιλαμβάνουν CS50.h, 2277 01:53:10,464 --> 01:53:16,624 περιλαμβάνει τις τυποποιημένες IO.h, int, κύρια, άκυρη. 2278 01:53:16,624 --> 01:53:18,790 Και στη συνέχεια, κάθε φορά που έχω που ονομάζεται χορδή πάρει μέχρι στιγμής, 2279 01:53:18,790 --> 01:53:23,260 Έχω πει κάτι σαν, string s παίρνει πάρει string, επειδή get string-- 2280 01:53:23,260 --> 01:53:27,880 Ας ονομάσουμε αυτό get.c-- εγχόρδων get η ίδια επιστρέφει ένα string που μπορώ στη συνέχεια 2281 01:53:27,880 --> 01:53:32,050 χρησιμοποιούν, και να πω, γεια, κόμμα, τοις εκατό s, ανάστροφη κάθετο n, s. 2282 01:53:32,050 --> 01:53:35,660 >> Έτσι, αυτό είναι το ίδιο παράδειγμα, πραγματικά, ότι είχαμε νωρίτερα. 2283 01:53:35,660 --> 01:53:37,920 Έτσι ώστε να πάρει συμβολοσειράς επιστρέφει μια τιμή. 2284 01:53:37,920 --> 01:53:41,260 Αλλά πριν από λίγο, συμβολοσειρά εκτύπωσης δεν επιστρέφει μια τιμή. 2285 01:53:41,260 --> 01:53:42,721 Έχει απλά μια παρενέργεια. 2286 01:53:42,721 --> 01:53:44,220 Έτσι, αυτό είναι μια θεμελιώδης διαφορά. 2287 01:53:44,220 --> 01:53:46,710 Έχουμε δει διάφορες τύπους λειτουργιών τώρα, 2288 01:53:46,710 --> 01:53:49,490 μερικά από τα οποία έχουν επιστρέψει αξίες, μερικές από τις οποίες δεν το κάνουν. 2289 01:53:49,490 --> 01:53:51,890 Έτσι ίσως είναι string, ή int ή float. 2290 01:53:51,890 --> 01:53:53,480 Ή ίσως είναι απλώς άκυρη. 2291 01:53:53,480 --> 01:53:55,710 >> Και η διαφορά είναι ότι αυτές οι λειτουργίες που 2292 01:53:55,710 --> 01:53:59,940 να πάρει τα δεδομένα και επιστρέφει μια τιμή είναι πραγματικά φέρνοντας κάτι πίσω στο τραπέζι, 2293 01:53:59,940 --> 01:54:01,110 να το πω έτσι. 2294 01:54:01,110 --> 01:54:03,710 Ας πάμε μπροστά και να ματιά σε ένα τελικό σύνολο 2295 01:54:03,710 --> 01:54:09,129 παραδείγματα που δίνει μια αίσθηση, τώρα, πώς θα μπορούσε, πράγματι, αφηρημένη καλύτερα, 2296 01:54:09,129 --> 01:54:11,670 και καλύτερα, και καλύτερα, ή περισσότερο, και περισσότερες και, προκειμένου 2297 01:54:11,670 --> 01:54:13,810 να γράψει, τελικά, καλύτερα κωδικό. 2298 01:54:13,810 --> 01:54:16,860 Ας πάμε μπροστά, και σύμφωνα με το πνεύμα του Scratch, κάντε τα εξής. 2299 01:54:16,860 --> 01:54:21,700 >> Επιτρέψτε μου να προχωρήσει και να περιλαμβάνουν CS50.h και πρότυπο IO.h. 2300 01:54:21,700 --> 01:54:24,010 Επιτρέψτε μου να προχωρήσει και να δώσει τον εαυτό μου έναν int, κύρια, άκυρη. 2301 01:54:24,010 --> 01:54:27,380 Και επιτρέψτε μου να πάει μπροστά, να καλέσετε αυτό το cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> Και επιτρέψτε μου να πάει μπροστά και μόλις όπως γρατζουνιές, εκτυπώστε βήχα / n. 2303 01:54:35,510 --> 01:54:37,170 Και θέλω να κάνω αυτό τρεις φορές. 2304 01:54:37,170 --> 01:54:39,670 Έτσι είμαι, φυσικά, απλά θα να αντιγράψετε και να επικολλήσετε τρεις φορές. 2305 01:54:39,670 --> 01:54:46,440 Είμαι τώρα πρόκειται να κάνει βήχας dot βήχα κάθετος. 2306 01:54:46,440 --> 01:54:50,120 Ας τον εαυτό μου δώσει λίγο περισσότερο χώρο Εδώ, Enter, βήχας, βήχας, βήχας. 2307 01:54:50,120 --> 01:54:53,970 >> Υπάρχει, προφανώς, ήδη ευκαιρία για βελτίωση. 2308 01:54:53,970 --> 01:54:55,679 Έχω αντιγραφεί και επικολληθεί μερικές φορές σήμερα. 2309 01:54:55,679 --> 01:54:58,261 Αλλά αυτό ήταν μόνο έτσι δεν το έκανα πρέπει να πληκτρολογήσετε όπως πολλοί χαρακτήρες. 2310 01:54:58,261 --> 01:55:00,250 Εξακολουθώ να αλλάξει ό, τι αυτές οι γραμμές κώδικα είναι. 2311 01:55:00,250 --> 01:55:04,240 >> Αυτές οι τρεις γραμμές είναι ταυτόσημα, που αισθάνεται τεμπέλης και είναι πράγματι, 2312 01:55:04,240 --> 01:55:07,110 και δεν είναι πιθανώς η σωστή προσέγγιση. 2313 01:55:07,110 --> 01:55:11,029 Έτσι, με ποιο συστατικό θα μπορούσαμε να βελτιώσουμε αυτόν τον κωδικό; 2314 01:55:11,029 --> 01:55:12,570 Δεν έχουμε να αντιγράψετε και επικόλληση κώδικα. 2315 01:55:12,570 --> 01:55:15,070 >> Και, πράγματι, κάθε φορά που θα νιώσετε τον εαυτό σας την αντιγραφή και επικόλληση, 2316 01:55:15,070 --> 01:55:17,700 και όχι ακόμη και την αλλαγή κωδικού, πιθανότητες είναι ότι υπάρχει ένας καλύτερος τρόπος. 2317 01:55:17,700 --> 01:55:19,470 Και, πράγματι, υπάρχει. 2318 01:55:19,470 --> 01:55:22,510 Επιτρέψτε μου να προχωρήσει και να κάνει ένα για το βρόχο, ακόμη και αν η σύνταξη μπορεί να μην 2319 01:55:22,510 --> 01:55:24,570 έρχονται φυσικά ακόμα. 2320 01:55:24,570 --> 01:55:29,494 >> Κάνετε αυτό τρεις φορές, απλά κάνοντας τα following-- 2321 01:55:29,494 --> 01:55:31,160 και τυχαίνει να γνωρίζω αυτό από την πρακτική. 2322 01:55:31,160 --> 01:55:32,810 Αλλά έχουμε μια σειρά από παραδείγματα τώρα. 2323 01:55:32,810 --> 01:55:34,950 Και θα δείτε σε απευθείας σύνδεση περισσότερες αναφορές ακόμα. 2324 01:55:34,950 --> 01:55:37,790 >> Αυτή είναι η σύνταξη στη γραμμή 6, δηλαδή σαν Scratch που επαναλαμβάνεται 2325 01:55:37,790 --> 01:55:40,090 μπλοκ, επαναλάβετε τις ακόλουθες τρεις φορές. 2326 01:55:40,090 --> 01:55:41,340 Είναι μια μικρή μαγική για τώρα. 2327 01:55:41,340 --> 01:55:43,050 Αλλά αυτό θα πάρει περισσότερο, και πιο οικείο. 2328 01:55:43,050 --> 01:55:45,050 >> Και πρόκειται να επαναλάβω γραμμή οκτώ τρεις φορές, 2329 01:55:45,050 --> 01:55:52,390 έτσι ώστε αν μεταγλωττίσετε ξανά make βήχα, dot κάθετος βήχας, βήχας, βήχας, βήχας. 2330 01:55:52,390 --> 01:55:54,030 Εξακολουθεί να λειτουργεί με τον ίδιο τρόπο. 2331 01:55:54,030 --> 01:55:55,550 Έτσι ώστε να είναι όλα ωραία και καλά. 2332 01:55:55,550 --> 01:55:58,200 Αλλά αυτό δεν είναι πολύ αφηρημένη. 2333 01:55:58,200 --> 01:55:59,371 >> Είναι απόλυτα σωστό. 2334 01:55:59,371 --> 01:56:01,370 Αλλά αισθάνεται σαν να υπάρχει θα μπορούσε να είναι μια ευκαιρία, 2335 01:56:01,370 --> 01:56:03,750 όπως στον κόσμο της Το μηδέν, με το είδος της εκκίνησης 2336 01:56:03,750 --> 01:56:07,530 για να προσθέσετε κάποια σημασιολογία εδώ, έτσι ώστε Δεν έχω μερικά μόνο για το βρόχο, 2337 01:56:07,530 --> 01:56:09,867 και μια λειτουργία που λέει βήχα, ή μήπως βήχα. 2338 01:56:09,867 --> 01:56:10,450 Ξέρεις τι? 2339 01:56:10,450 --> 01:56:12,620 Επιτρέψτε μου να προσπαθήσω να είναι ένα λίγο πιο δροσερές από αυτό, 2340 01:56:12,620 --> 01:56:16,090 και μάλιστα γράψει μια λειτουργία που έχει κάποιες παρενέργειες, καλέστε το βήχα. 2341 01:56:16,090 --> 01:56:20,830 >> Και δεν παίρνει εισόδου, και επιστρέφει καμία αξία ως έξοδο. 2342 01:56:20,830 --> 01:56:22,680 Αλλά ξέρετε τι κάνει; 2343 01:56:22,680 --> 01:56:29,370 Κάνει this-- printf, απόσπασμα εισαγωγικά, βήχα. 2344 01:56:29,370 --> 01:56:32,380 >> Και τώρα εδώ, θα πάω να προχωρήσει και για int, 2345 01:56:32,380 --> 01:56:36,070 i παίρνει μηδέν, θ λιγότερο από 3, θ συν συν. 2346 01:56:36,070 --> 01:56:39,770 Πάω να μην κάνει printf, η οποία είναι αναμφισβήτητα μια εφαρμογή χαμηλού επιπέδου 2347 01:56:39,770 --> 01:56:40,270 λεπτομέρεια. 2348 01:56:40,270 --> 01:56:41,353 Δεν με νοιάζει πώς να βήξει. 2349 01:56:41,353 --> 01:56:43,240 Θέλω απλά να χρησιμοποιήσετε τη λειτουργία βήχα. 2350 01:56:43,240 --> 01:56:44,840 Και είμαι απλώς πρόκειται να καλέσετε το βήχα. 2351 01:56:44,840 --> 01:56:46,204 >> Τώρα, παρατηρήστε τη διχοτόμηση. 2352 01:56:46,204 --> 01:56:49,370 Όταν καλείτε μια λειτουργία, αν δεν το κάνετε θέλει να δώσει εισόδους, εντελώς πρόστιμο. 2353 01:56:49,370 --> 01:56:51,780 Απλά κάνει ανοιχτή παρένθεσης, κοντά παρένθεσης, και τελειώσατε. 2354 01:56:51,780 --> 01:56:56,271 >> Όταν ορίζετε μια λειτουργία, ή δηλώνουν πρωτότυπο ενός συνάρτησης, 2355 01:56:56,271 --> 01:56:58,770 αν γνωρίζετε εκ των προτέρων ότι δεν είναι πρόκειται να λάβει όλα τα επιχειρήματα, 2356 01:56:58,770 --> 01:57:01,170 λένε κενό σε αυτές τις παρενθέσεις εκεί. 2357 01:57:01,170 --> 01:57:05,660 Και αυτό καθιστά βέβαιο ότι θα Δεν θα το κάνουν κατάχρηση λάθος. 2358 01:57:05,660 --> 01:57:07,020 Επιτρέψτε μου να προχωρήσει και να κάνει το βήχα. 2359 01:57:07,020 --> 01:57:08,540 Και, φυσικά, έχω κάνει ένα λάθος. 2360 01:57:08,540 --> 01:57:10,410 >> Dammit, υπάρχει και αυτό το σιωπηρή δήλωση. 2361 01:57:10,410 --> 01:57:11,325 Αλλά αυτό είναι μια χαρά. 2362 01:57:11,325 --> 01:57:12,590 Είναι μια εύκολη αποτύπωση. 2363 01:57:12,590 --> 01:57:18,240 Απλά πρέπει το πρωτότυπο ψηλά στο αρχείο μου από ό, τι είμαι πραγματικά το χρησιμοποιείτε. 2364 01:57:18,240 --> 01:57:20,070 >> Έτσι τώρα επιτρέψτε μου να κάνω βήχα και πάλι, ωραία. 2365 01:57:20,070 --> 01:57:20,790 Τώρα, αυτό λειτουργεί. 2366 01:57:20,790 --> 01:57:22,930 Κάντε βήχας, βήχας, βήχας, βήχας. 2367 01:57:22,930 --> 01:57:25,930 Έτσι, μπορείτε να σκεφτείτε ότι είμαστε πραγματικά μόλις πάνω από μηχανική αυτό το πρόβλημα. 2368 01:57:25,930 --> 01:57:26,763 Και, πράγματι, είμαστε. 2369 01:57:26,763 --> 01:57:28,870 Αυτό δεν είναι μια καλή υποψήφιο του προγράμματος 2370 01:57:28,870 --> 01:57:31,930 αυτή τη στιγμή για refactoring, και κάνει ό, τι είναι 2371 01:57:31,930 --> 01:57:35,645 που ονομάζεται ιεραρχική αποσύνθεση, όπου μπορείτε να πάρετε κάποιο κώδικα, και στη συνέχεια, 2372 01:57:35,645 --> 01:57:38,790 Σας το είδος του παράγοντα πράγματα, έτσι ώστε να αποδοθεί περισσότερη σημασιολογία σε αυτούς, 2373 01:57:38,790 --> 01:57:40,930 και επαναχρησιμοποίηση τελικά μακροπρόθεσμα. 2374 01:57:40,930 --> 01:57:43,490 Αλλά είναι ένα δομικό στοιχείο προς την κατεύθυνση πιο εξελιγμένα προγράμματα 2375 01:57:43,490 --> 01:57:45,600 ότι θα ξεκινήσει γραπτώς πριν από πολύ καιρό ότι 2376 01:57:45,600 --> 01:57:50,090 μας επιτρέπει να έχουμε το λεξιλόγιο με την οποία να γράψει καλύτερη κώδικα. 2377 01:57:50,090 --> 01:57:52,920 Και, πράγματι, ας δούμε αν μπορούμε δεν μπορεί να γενικεύσει αυτό περαιτέρω. 2378 01:57:52,920 --> 01:57:57,984 >> Φαίνεται λίγο κουτσός που έχω, κύρια, χρειάζεται να ανησυχείτε για αυτό καταριέται για το βρόχο, 2379 01:57:57,984 --> 01:57:59,400 και καλώντας ξανά και ξανά βήχα. 2380 01:57:59,400 --> 01:58:03,050 Γιατί δεν μπορώ να πω μόνο βήχα, παρακαλούμε βήχας τρεις φορές; 2381 01:58:03,050 --> 01:58:08,170 Με άλλα λόγια, γιατί δεν μπορώ απλά να παρέχουν στοιχεία για να βήχει και να το κάνουμε αυτό; 2382 01:58:08,170 --> 01:58:11,270 >> Γιατί δεν μπορώ να πω, σε κύρια βήχα τρεις φορές. 2383 01:58:11,270 --> 01:58:13,150 Και τώρα, αυτό είναι το είδος της μαγικό. 2384 01:58:13,150 --> 01:58:14,540 Είναι πολύ επαναληπτική εδώ. 2385 01:58:14,540 --> 01:58:15,940 Και είναι, πράγματι, ένα βήμα μωρό. 2386 01:58:15,940 --> 01:58:19,250 >> Αλλά ακριβώς η ικανότητα να πει για γραμμή οκτώ, βήχα τρεις φορές, 2387 01:58:19,250 --> 01:58:20,730 Είναι ακριβώς τόσο πολύ πιο ευανάγνωστο. 2388 01:58:20,730 --> 01:58:24,210 Και, συν, δεν έχω να ξέρετε ή νοιάζει πώς υλοποιείται βήχα. 2389 01:58:24,210 --> 01:58:26,460 Και, πράγματι, αργότερα στο όρος και για την τελική έργων, 2390 01:58:26,460 --> 01:58:29,150 αν αντιμετωπίσει ένα έργο με ένας συμμαθητής ή δύο συμμαθητές, 2391 01:58:29,150 --> 01:58:32,370 θα συνειδητοποιήσετε ότι πρόκειται να έχουν, ή θέλουν να διαιρούν το έργο. 2392 01:58:32,370 --> 01:58:34,650 >> Και θα πάμε να θέλουν να αποφασίζουν εκ των προτέρων, ο οποίος πρόκειται να κάνει ό, τι, 2393 01:58:34,650 --> 01:58:35,483 και στην οποία τα κομμάτια; 2394 01:58:35,483 --> 01:58:37,520 Και δεν θα ήταν ωραίο αν, για παράδειγμα, 2395 01:58:37,520 --> 01:58:40,100 αναλάβει την ευθύνη της γραφής κύρια, γίνεται. 2396 01:58:40,100 --> 01:58:43,470 Και ο συγκάτοικός σας, ή να σας εταίρος γενικότερα, 2397 01:58:43,470 --> 01:58:45,230 φροντίζει για την εφαρμογή βήχα. 2398 01:58:45,230 --> 01:58:49,540 >> Και αυτή η διαίρεση, αυτά τείχη της αφαίρεσης, 2399 01:58:49,540 --> 01:58:52,310 ή τα στρώματα της αφαίρεσης εάν θα είναι εξαιρετικά ισχυρό, 2400 01:58:52,310 --> 01:58:55,480 διότι ειδικά για τα μεγαλύτερα, πιο πολύπλοκα προγράμματα και συστήματα, 2401 01:58:55,480 --> 01:59:00,070 επιτρέπει πολλαπλές ανθρώπους να χτίσουν πράγματα μαζί, και, τελικά, 2402 01:59:00,070 --> 01:59:02,680 βελονιά εργασία τους μαζί με αυτόν τον τρόπο. 2403 01:59:02,680 --> 01:59:05,332 Αλλά, φυσικά, Πρέπει να διορθώσετε τώρα βήχα. 2404 01:59:05,332 --> 01:59:07,290 Πρέπει να πω βήχα ότι, hey, ξέρετε τι; 2405 01:59:07,290 --> 01:59:11,230 Θα πάμε να πρέπει να πάρετε μια input-- έτσι δεν είναι άκυρη, αλλά int και τώρα. 2406 01:59:11,230 --> 01:59:15,170 Ας πάμε μπροστά και να τεθεί σε βήχα το int. i παίρνει μηδέν. 2407 01:59:15,170 --> 01:59:16,890 >> i είναι μικρότερο από το πόσες φορές. 2408 01:59:16,890 --> 01:59:18,550 Είπα τρεις πριν. 2409 01:59:18,550 --> 01:59:20,420 Αλλά αυτό δεν είναι ό, τι θέλω. 2410 01:59:20,420 --> 01:59:25,520 Θα θέλουν βήχας να γενικευθεί σε υποστηρίξει οποιοδήποτε αριθμό επαναλήψεων. 2411 01:59:25,520 --> 01:59:28,800 >> Έτσι, πράγματι, είναι ν που θέλω, ανεξάρτητα από το χρήστη μου λέει. 2412 01:59:28,800 --> 01:59:31,620 Τώρα, μπορώ να πάω μπροστά και να πω βήχα εκτύπωσης. 2413 01:59:31,620 --> 01:59:34,750 Και δεν έχει σημασία ποιος είναι ο αριθμός ο χρήστης περνά, 2414 01:59:34,750 --> 01:59:36,890 Θα επαναλάβει ότι πολλές φορές. 2415 01:59:36,890 --> 01:59:39,160 >> Έτσι, στο τέλος της ημέρας, πρόγραμμα είναι πανομοιότυπη. 2416 01:59:39,160 --> 01:59:42,820 Αλλά παρατηρήσετε όλα αυτά τα πράγματα θα μπορούσε ακόμη και να είναι σε ένα άλλο αρχείο. 2417 01:59:42,820 --> 01:59:45,620 Πράγματι, δεν ξέρω κατά τη τη στιγμή πώς printf υλοποιείται. 2418 01:59:45,620 --> 01:59:47,980 >> Δεν ξέρω αυτή τη στιγμή πώς να πάρει string, ή να πάρετε int, ή να πάρετε πλωτήρα 2419 01:59:47,980 --> 01:59:48,646 εφαρμογή τους. 2420 01:59:48,646 --> 01:59:50,930 Και δεν θέλω να δείτε τους στην οθόνη μου. 2421 01:59:50,930 --> 01:59:55,320 Όπως είναι, αρχίζω να επικεντρωθεί στην το πρόγραμμά μου, όχι οι λειτουργίες αυτές. 2422 01:59:55,320 --> 01:59:59,070 >> Και έτσι, πράγματι, το συντομότερο ξεκινήστε factoring κώδικα όπως αυτό έξω, 2423 01:59:59,070 --> 02:00:01,397 θα μπορούσαμε να προχωρήσουμε ακόμα και βήχα σε ένα ξεχωριστό αρχείο; 2424 02:00:01,397 --> 02:00:02,730 Κάποιος άλλος θα μπορούσε να το υλοποιήσει. 2425 02:00:02,730 --> 02:00:06,810 Και εσείς και το πρόγραμμα σας να γίνει η πολύ όμορφη, και πολύ ευανάγνωστη, 2426 02:00:06,810 --> 02:00:10,830 αναμφισβήτητα, πολύ τέσσερις Πρόγραμμα γραμμή ακριβώς εκεί. 2427 02:00:10,830 --> 02:00:13,510 >> Οπότε ας προχωρήσουμε τώρα και να κάνει ένα ακόμη αλλαγή. 2428 02:00:13,510 --> 02:00:16,180 Παρατηρήστε ότι το πρωτότυπο μου πρέπει να αλλάξει επάνω στην κορυφή. 2429 02:00:16,180 --> 02:00:18,390 Επιτρέψτε μου λοιπόν να διορθώσετε το γεγονός ότι τόσοι Εγώ δεν πάρει φώναξε σε. 2430 02:00:18,390 --> 02:00:22,580 >> Κάντε βήχα, επιτρέψτε μου να τρέξει βήχα φορά Επιπλέον, εξακολουθούν να κάνουν το ίδιο πράγμα. 2431 02:00:22,580 --> 02:00:26,010 Αλλά τώρα, παρατηρήσετε έχουμε ένα συστατικό για μια τελική έκδοση. 2432 02:00:26,010 --> 02:00:26,940 Ξέρεις τι? 2433 02:00:26,940 --> 02:00:29,040 Δεν θέλω απλά να βήχει, κατ 'ανάγκην. 2434 02:00:29,040 --> 02:00:30,802 Θέλω να έχω κάτι πιο γενικό. 2435 02:00:30,802 --> 02:00:31,510 Έτσι, ξέρετε τι; 2436 02:00:31,510 --> 02:00:32,450 Θέλω να το κάνουμε αυτό. 2437 02:00:32,450 --> 02:00:37,140 Θέλω να έχω, σαν Scratch κάνει, ένα μπλοκ ας πούμε, αλλά όχι μόνο 2438 02:00:37,140 --> 02:00:38,680 πω κάτι λίγο αρκετές φορές. 2439 02:00:38,680 --> 02:00:41,510 Θέλω να πω ένα πολύ συγκεκριμένο κορδόνι. 2440 02:00:41,510 --> 02:00:43,850 Και, ως εκ τούτου, εγώ δεν κάνω θέλω να πω μόνο βήχα. 2441 02:00:43,850 --> 02:00:47,660 Θέλω να πω οτιδήποτε άλλο κορδόνι περνά μέσα. 2442 02:00:47,660 --> 02:00:49,960 >> Έτσι παρατηρήσετε, έχω γενικευμένη αυτό, έτσι ώστε τώρα 2443 02:00:49,960 --> 02:00:53,110 ας πούμε αισθάνεται σαν ένα καλό όνομα γι 'αυτό, όπως Ξυστό, 2444 02:00:53,110 --> 02:00:55,530 Χρειάζονται δύο επιχειρήματα, σε αντίθεση με το μηδέν. 2445 02:00:55,530 --> 02:00:56,570 Το ένα είναι ένα string. 2446 02:00:56,570 --> 02:00:57,300 Το ένα είναι ένα int. 2447 02:00:57,300 --> 02:00:58,130 >> Και θα μπορούσα να τους αλλάξουν. 2448 02:00:58,130 --> 02:01:00,713 Έχω ακριβώς το είδος του αρέσει η ιδέα της λένε το string πρώτα, και στη συνέχεια, 2449 02:01:00,713 --> 02:01:01,940 πόσες φορές αργότερα. 2450 02:01:01,940 --> 02:01:03,970 Κενό αυτό σημαίνει ακόμα δεν επιστρέφει τίποτα. 2451 02:01:03,970 --> 02:01:06,428 Αυτά είναι μόνο οπτική πλευρά εφέ, όπως με [? Ιορδανία,?] 2452 02:01:06,428 --> 02:01:08,240 προφορική παρενέργεια της φωνάζει. 2453 02:01:08,240 --> 02:01:12,630 Εξακολουθεί να κάνει κάτι n φορές, 0 έως, αλλά δεν είναι ίσο με n. 2454 02:01:12,630 --> 02:01:14,540 Αυτό σημαίνει ότι n συνολική φορές. 2455 02:01:14,540 --> 02:01:16,540 Και στη συνέχεια απλά να εκτυπώσετε ό, τι αυτή η συμβολοσειρά είναι. 2456 02:01:16,540 --> 02:01:19,060 Έτσι έχω πραγματικά γενικευμένη Αυτή η γραμμή κώδικα. 2457 02:01:19,060 --> 02:01:22,460 Μέχρι τώρα, πώς μπορώ να εφαρμόσουν η λειτουργία του βήχα; 2458 02:01:22,460 --> 02:01:25,520 >> Μπορώ να κάνω άκυρη βήχα. 2459 02:01:25,520 --> 02:01:28,501 Και εγώ μπορεί να πάρει ακόμα το πώς πολλές φορές θέλετε να βήχει. 2460 02:01:28,501 --> 02:01:29,250 Αλλά ξέρετε τι; 2461 02:01:29,250 --> 02:01:31,240 Μπορώ τώρα να punt να πω. 2462 02:01:31,240 --> 02:01:36,540 >> Μπορώ να καλέσω να πω με το λέξη βήχα, περνώντας στη Ν. 2463 02:01:36,540 --> 02:01:40,410 Και αν θέλω επίσης να εφαρμόσουν, απλά για διασκέδαση, μια λειτουργία φτάρνισμα, 2464 02:01:40,410 --> 02:01:42,290 Μπορώ να φτάρνισμα κάποια αριθμό φορών. 2465 02:01:42,290 --> 02:01:47,300 Και μπορώ να κρατήσω την επαναχρησιμοποίηση n, επειδή παρατηρήσετε ότι m σε αυτό το πλαίσιο ή το πεδίο εφαρμογής 2466 02:01:47,300 --> 02:01:49,470 υπάρχει μόνο μέσα σε αυτή τη λειτουργία. 2467 02:01:49,470 --> 02:01:52,767 >> Και Ν σε αυτό το πλαίσιο μόνο υπάρχει μέσα σε αυτή τη λειτουργία εδώ. 2468 02:01:52,767 --> 02:01:54,600 Γι 'αυτό και θα επανέλθουμε Αυτά τα ζητήματα του πεδίου εφαρμογής. 2469 02:01:54,600 --> 02:02:01,160 Και εδώ, είμαι απλώς πρόκειται να πω, achoo, και στη συνέχεια n φορές, άνω τελεία. 2470 02:02:01,160 --> 02:02:04,340 >> Και τώρα, το μόνο που χρειάζεται να δανειστεί αυτά λειτουργούν υπογραφές μέχρι εδώ. 2471 02:02:04,340 --> 02:02:06,290 Έτσι, ο βήχας είναι σωστή. 2472 02:02:06,290 --> 02:02:10,090 Κενό φτάρνισμα είναι σωστό τώρα. 2473 02:02:10,090 --> 02:02:12,390 >> Και εγώ ακόμα το μόνο που χρειάζεται να πω. 2474 02:02:12,390 --> 02:02:18,990 Έτσι, Πάω να πω, ας πούμε συμβολοσειράς s, int n, άνω τελεία. 2475 02:02:18,990 --> 02:02:22,010 Έτσι έχω πάνω-μηχανικής η καλό από αυτό το πρόγραμμα. 2476 02:02:22,010 --> 02:02:23,760 >> Και αυτό δεν το κάνει σημαίνει απαραίτητα αυτό είναι 2477 02:02:23,760 --> 02:02:26,343 τι πρέπει να κάνετε όταν γράφετε ακόμη και η απλούστερη των προγραμμάτων. 2478 02:02:26,343 --> 02:02:29,280 Πάρτε κάτι που είναι προφανώς πραγματικά απλή, πολύ σύντομη, 2479 02:02:29,280 --> 02:02:31,800 και την εκ νέου την εφαρμόσουν χρησιμοποιώντας τον τρόπο πάρα πολύ κώδικα. 2480 02:02:31,800 --> 02:02:34,560 Αλλά θα δούμε πραγματικά, και ώρα να κοιτάξουμε πίσω σε αυτά τα παραδείγματα, 2481 02:02:34,560 --> 02:02:38,610 και να συνειδητοποιήσουν, oh, αυτά είναι τα βήματα πήραμε πραγματικά να γενικεύουμε, 2482 02:02:38,610 --> 02:02:40,797 στον παράγοντα κάτι, μέχρι στο τέλος της ημέρας 2483 02:02:40,797 --> 02:02:42,380 κωδικός μου είναι πραγματικά αρκετά λογικό. 2484 02:02:42,380 --> 02:02:45,960 Διότι, αν θέλω να φτύνω τρεις φορές στη συνέχεια, φτάρνισμα τρεις φορές, 2485 02:02:45,960 --> 02:02:50,420 Είμαι απλώς πρόκειται να επαναληφθεί αυτό, Πρόγραμμα κάνουν βήχα, και να τρέξει βήχα. 2486 02:02:50,420 --> 02:02:53,620 Και έχω τρεις βήχα και τρεις φτερνίζεται. 2487 02:02:53,620 --> 02:02:55,990 >> Και έτσι αυτό είναι ένα βασικό παράδειγμα, αν θέλετε, 2488 02:02:55,990 --> 02:03:00,110 για το πώς θα μπορούσαμε να πάμε για στην πραγματικότητα την εφαρμογή ενός προγράμματος. 2489 02:03:00,110 --> 02:03:03,220 Αλλά ας δούμε τώρα τι είναι έχουμε κάνει όλο αυτό το διάστημα, 2490 02:03:03,220 --> 02:03:06,940 και ό, τι μερικά από τα τελευταία κομμάτια είναι πίσω από αυτή την απλή εντολή. 2491 02:03:06,940 --> 02:03:09,620 Στο τέλος της ημέρας, έχουμε χρησιμοποιήσει Clang ως compiler μας. 2492 02:03:09,620 --> 02:03:11,494 Έχουμε γράψει πηγή κώδικα, μετατρέποντας 2493 02:03:11,494 --> 02:03:12,820 μέσω Clang σε κώδικα μηχανής. 2494 02:03:12,820 --> 02:03:15,540 >> Και έχουμε χρησιμοποιήσει Κάντε απλά για τη διευκόλυνση της πληκτρολογήσεις μας, ώστε 2495 02:03:15,540 --> 02:03:20,740 ότι δεν έχουμε να θυμόμαστε αυτά τα ξόρκια της ίδιας Clang. 2496 02:03:20,740 --> 02:03:22,640 Αλλά τι είναι να κάνει πραγματικά κάνει; 2497 02:03:22,640 --> 02:03:24,750 Και, με τη σειρά του, αυτό που είναι Κλαγγή πραγματικά κάνει; 2498 02:03:24,750 --> 02:03:28,790 >> Αποδεικνύεται, αν έχουμε απλοποιήσει σημερινή συζήτηση λέγοντας, 2499 02:03:28,790 --> 02:03:33,090 πάρετε τον πηγαίο κώδικα, να περάσει ως είσοδος σε ένα compiler, το οποίο σας δίνει 2500 02:03:33,090 --> 02:03:35,750 έξοδο του μηχανήματος κώδικα, αποδεικνύεται ότι υπάρχει το 2501 02:03:35,750 --> 02:03:37,420 μερικά διαφορετικά βήματα εκεί μέσα. 2502 02:03:37,420 --> 02:03:41,940 Και τη σύνταξη συμβαίνει να είναι η ομπρέλα όρος για ένα σωρό βήματα. 2503 02:03:41,940 --> 02:03:43,970 Αλλά ας δώσουμε έμφαση αυτό έξω πολύ γρήγορα. 2504 02:03:43,970 --> 02:03:48,070 >> Αποδεικνύεται ότι έχουμε κάνει περισσότερα πράγματα κάθε φορά που τρέχει ένα πρόγραμμα, 2505 02:03:48,070 --> 02:03:50,990 ή κάθε φορά που καταρτίζουν ένα πρόγραμμα σήμερα. 2506 02:03:50,990 --> 02:03:55,020 Έτσι προεπεξεργασία αναφέρεται σε this-- τίποτα σε ένα πρόγραμμα C, 2507 02:03:55,020 --> 02:03:58,720 όπως θα δούμε ξανά και ξανά, που ξεκινά με αυτό το σύμβολο κατακερματισμού, 2508 02:03:58,720 --> 02:04:03,320 ή το σύμβολο hashtag εδώ, σημαίνει είναι μια οδηγία προεπεξεργαστή. 2509 02:04:03,320 --> 02:04:07,330 Αυτό σημαίνει ότι, στην περίπτωση αυτή, hey υπολογιστή, να κάνει κάτι με αυτό το αρχείο 2510 02:04:07,330 --> 02:04:09,430 πριν να συνθέσετε το δικό μου κώδικα. 2511 02:04:09,430 --> 02:04:15,220 >> Σε αυτή την περίπτωση, hash περιλαμβάνουν είναι, κατ 'ουσίαν, τον τρόπο Γ του λέγοντας, 2512 02:04:15,220 --> 02:04:19,325 hey υπολογιστή, να πάει να πάρει τα περιεχόμενα της CS50.h και να επικολλήσετε εδώ. 2513 02:04:19,325 --> 02:04:22,170 Γεια σου υπολογιστή, πηγαίνετε πάρετε το περιεχόμενο του προτύπου IO.h, 2514 02:04:22,170 --> 02:04:24,690 όπου αυτό είναι για το σκληρό δίσκο, να το επικολλήσετε εδώ. 2515 02:04:24,690 --> 02:04:27,390 Έτσι, αυτά τα πράγματα να συμβούν πρώτα κατά τη διάρκεια της προεπεξεργασίας. 2516 02:04:27,390 --> 02:04:28,880 >> Και Clang κάνει όλα αυτά για μας. 2517 02:04:28,880 --> 02:04:30,510 Και το κάνει τόσο καταριέται γρήγορα, δεν χρειάζεται καν 2518 02:04:30,510 --> 02:04:32,000 δείτε τέσσερις διακριτές πράγματα που συμβαίνουν. 2519 02:04:32,000 --> 02:04:34,100 Αλλά αυτό είναι το πρώτο τέτοιο βήμα. 2520 02:04:34,100 --> 02:04:35,560 >> Τι πραγματικά συμβαίνει στη συνέχεια; 2521 02:04:35,560 --> 02:04:38,320 Λοιπόν, η επόμενη επίσημη βήμα είναι η σύνταξη. 2522 02:04:38,320 --> 02:04:40,385 Και αποδεικνύεται ότι την κατάρτιση ενός προγράμματος 2523 02:04:40,385 --> 02:04:44,060 τεχνικά μέσα που πηγαίνει από πηγαίου κώδικα, η ουσία έχουμε 2524 02:04:44,060 --> 02:04:47,890 γράφει σήμερα, σε κάτι που ονομάζεται κωδικός συνέλευση, κάτι 2525 02:04:47,890 --> 02:04:49,260 ότι φαίνεται λίγο διαφορετική. 2526 02:04:49,260 --> 02:04:51,050 >> Και, στην πραγματικότητα, μπορούμε να δούμε αυτό το πραγματικά γρήγορα. 2527 02:04:51,050 --> 02:04:53,890 Επιτρέψτε μου να πραγματικά να πάμε σε IDE μου. 2528 02:04:53,890 --> 02:04:58,050 Επιτρέψτε μου να πάει μπροστά και ανοιχτή hello.c, η οποία είναι το πρώτο πρόγραμμα με το οποίο μπορούμε 2529 02:04:58,050 --> 02:04:59,120 ξεκίνησε σήμερα. 2530 02:04:59,120 --> 02:05:04,130 Και επιτρέψτε μου να πάει μπροστά και να τρέξει Clang ένα λίγο διαφορετικά, Clang-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 το οποίο είναι πραγματικά πρόκειται να να μου δώσει ένα άλλο hello.s αρχείο. 2532 02:05:07,720 --> 02:05:10,330 >> Και θα το κάνουμε ποτέ πιθανώς και πάλι δείτε αυτό το είδος του κώδικα. 2533 02:05:10,330 --> 02:05:13,030 Εάν πάρετε ένα χαμηλότερο επίπεδο συστήματα κατηγορίας, όπως CS61, 2534 02:05:13,030 --> 02:05:14,920 θα δείτε πολλά περισσότερα αυτού του είδους του κωδικού. 2535 02:05:14,920 --> 02:05:17,020 Αλλά αυτό είναι συμβολική γλώσσα. 2536 02:05:17,020 --> 02:05:22,050 Αυτό είναι X86 γλώσσα συναρμολόγησης ότι η CPU που διέπουν 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE καταλαβαίνει πραγματικά. 2538 02:05:24,460 --> 02:05:27,060 >> Και αινιγματική όπως κάνει κοιτάξτε, είναι κάτι 2539 02:05:27,060 --> 02:05:29,180 ο υπολογιστής καταλαβαίνει αρκετά καλά. 2540 02:05:29,180 --> 02:05:30,790 Υπο q, αυτό είναι ένα αφαίρεσης. 2541 02:05:30,790 --> 02:05:31,660 Υπάρχει κινήσεις. 2542 02:05:31,660 --> 02:05:35,730 >> Υπάρχει κλήση των λειτουργιών εδώ, x oring, μια κίνηση, ένα πρόσθετο, ένα αναδυόμενο παράθυρο, 2543 02:05:35,730 --> 02:05:36,430 μια επιστροφή. 2544 02:05:36,430 --> 02:05:38,850 Έτσι, υπάρχει κάποια πολύ οδηγίες χαμηλό επίπεδο 2545 02:05:38,850 --> 02:05:41,280 ότι CPUs καταλαβαίνουν ότι Αναφέρθηκα νωρίτερα. 2546 02:05:41,280 --> 02:05:43,100 Αυτό είναι ό, τι η Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Υπάρχουν πρότυπα μηδενικά και αυτοί που 2548 02:05:45,030 --> 02:05:51,800 χάρτης με αυτά arcanely διατυπωμένο, αλλά κάπως καλά το όνομα, οδηγίες, 2549 02:05:51,800 --> 02:05:52,780 να το πω έτσι. 2550 02:05:52,780 --> 02:05:54,780 Αυτό είναι τι συμβαίνει όταν θα καταρτίσει τον κωδικό σας. 2551 02:05:54,780 --> 02:05:58,560 Μπορείτε να πάρετε τη συναρμολόγηση γλώσσα έξω από αυτό, το οποίο 2552 02:05:58,560 --> 02:06:04,680 σημαίνει ότι το τρίτο βήμα είναι να συγκεντρώσει ότι ο κώδικας συνέλευση σε, τελικά, 2553 02:06:04,680 --> 02:06:09,080 μηχανή code-- μηδενικά και αυτοί, όχι οι κείμενο που μόλις είδαμε πριν από λίγο. 2554 02:06:09,080 --> 02:06:13,370 >> Έτσι, προ-επεξεργασία κάνει ότι βρείτε και να αντικαταστήσει, και μερικά άλλα πράγματα. 2555 02:06:13,370 --> 02:06:16,430 Μεταγλώττιση παίρνει την πηγή σας κώδικα από C, πηγαίο κώδικα 2556 02:06:16,430 --> 02:06:18,980 ότι γράψαμε, τη συναρμολόγηση κώδικα που μόλις έριξε μια ματιά. 2557 02:06:18,980 --> 02:06:22,170 Συναρμολόγηση παίρνει ότι η συναρμολόγηση κώδικα για να μηδενικά και αυτοί 2558 02:06:22,170 --> 02:06:24,680 ότι η CPU θα είναι πραγματικά καταλάβουν στο τέλος της ημέρας. 2559 02:06:24,680 --> 02:06:27,630 Και σύνδεση είναι το τελευταίο βήμα αυτό συμβαίνει για ΕΜΕΙΣ-- και πάλι, 2560 02:06:27,630 --> 02:06:29,830 τόσο γρήγορα που δεν χρειάζεται καν notice-- που λέει, 2561 02:06:29,830 --> 02:06:32,460 hey υπολογιστή, να λάβει όλα τα τα μηδενικά και αυτοί που 2562 02:06:32,460 --> 02:06:36,750 προέκυψε από τη σύνταξη κώδικα του Δαβίδ, και η κύρια λειτουργία του, σε αυτήν την περίπτωση. 2563 02:06:36,750 --> 02:06:39,160 >> Και hey υπολογιστή, πηγαίνετε πάρετε όλα τα μηδενικά και μονάδες 2564 02:06:39,160 --> 02:06:42,180 ότι το προσωπικό CS50 έγραψε στο εσωτερικό της βιβλιοθήκης CS50. 2565 02:06:42,180 --> 02:06:43,440 Ανακατεύουμε εκείνους με Δαβίδ. 2566 02:06:43,440 --> 02:06:46,648 Και hey υπολογιστή, πηγαίνετε πάρετε όλα τα μηδενικά και αυτοί που κάποιος άλλος έγραψε χρόνια 2567 02:06:46,648 --> 02:06:47,470 πριν για printf. 2568 02:06:47,470 --> 02:06:49,880 Και προσθέτουν εκείνοι σε το ολόκληρο το πράγμα, έτσι ώστε να έχουμε 2569 02:06:49,880 --> 02:06:52,870 πήρε μηδενικά και αυτοί μου, η μηδενικά και μονάδες του προσωπικού CS50, 2570 02:06:52,870 --> 02:06:55,370 τα μηδενικά printf και αυτοί, και οτιδήποτε άλλο που χρησιμοποιούμε. 2571 02:06:55,370 --> 02:07:00,410 >> Μπορούν όλοι να συνδυάζονται όλα μαζί σε ένα πρόγραμμα που ονομάζεται, στην περίπτωση αυτή, γειά σου. 2572 02:07:00,410 --> 02:07:03,141 Έτσι, πλέον, θα είμαστε απλά χρησιμοποιούν τη λέξη μεταγλώττιση. 2573 02:07:03,141 --> 02:07:06,390 Και θα λάβουμε ως δεδομένο ότι όταν λέμε, συγκεντρώνουν το πρόγραμμά σας, αυτό σημαίνει, 2574 02:07:06,390 --> 02:07:08,849 hey κάνει το προ-επεξεργασίας, συναρμολόγηση και σύνδεση. 2575 02:07:08,849 --> 02:07:11,890 Αλλά υπάρχει πραγματικά κάποια ζουμερά πράγματα συμβαίνει εκεί κάτω από το καπό. 2576 02:07:11,890 --> 02:07:13,723 Και ειδικά αν να πάρει περίεργη κάποιο χρονικό διάστημα, 2577 02:07:13,723 --> 02:07:15,900 μπορείτε να αρχίσετε να σπρώχνει γύρω σε αυτό το κατώτερο επίπεδο. 2578 02:07:15,900 --> 02:07:19,660 Αλλά για τώρα, συνειδητοποιούν ότι μεταξύ των takeaways για σήμερα 2579 02:07:19,660 --> 02:07:23,420 είναι πολύ απλά η έναρξη μιας διαδικασίας, 2580 02:07:23,420 --> 02:07:26,700 να πάρει άνετα με κάτι σαν παγκόσμια γεια. 2581 02:07:26,700 --> 02:07:29,575 Πράγματι, οι περισσότεροι από ό, τι κάναμε σήμερα σίγουρα δεν θα βυθιστεί σε σούπερ γρήγορο. 2582 02:07:29,575 --> 02:07:31,491 Και αυτό θα πάρει κάποιο ώρα, και κάποια πρακτική. 2583 02:07:31,491 --> 02:07:33,864 Και οι πιθανότητες είναι, θα λύσουμε του θέλουν να χτυπήσουν το πληκτρολόγιό σας 2584 02:07:33,864 --> 02:07:34,780 ή φωνάζω στην οθόνη. 2585 02:07:34,780 --> 02:07:35,880 Και όλα αυτά είναι εντάξει. 2586 02:07:35,880 --> 02:07:38,320 Αν και, ίσως να μην προσπαθήσουμε να κάνετε στη βιβλιοθήκη τόσο πολύ. 2587 02:07:38,320 --> 02:07:40,820 >> Και σε τελική ανάλυση, θα να είναι σε θέση όμως, να ξεκινήσει 2588 02:07:40,820 --> 02:07:44,580 βλέποντας τα πρότυπα, τόσο σε καλό κώδικα ότι έχετε γράψει και λάθη 2589 02:07:44,580 --> 02:07:45,370 ότι έχετε κάνει. 2590 02:07:45,370 --> 02:07:48,965 Και μοιάζει πολύ με τη διαδικασία της να γίνει ένα TF ή CA είναι σαν, 2591 02:07:48,965 --> 02:07:51,590 θα αρχίσετε να πάρει την καλύτερη και καλύτερα βλέποντας αυτά τα πρότυπα, 2592 02:07:51,590 --> 02:07:53,774 και μόλις την επίλυση σας τα δικά της προβλήματα, τελικά. 2593 02:07:53,774 --> 02:07:56,940 Εν τω μεταξύ, θα υπάρχουν πολλές από εμάς να προσφέρουν την υποστήριξή σας, και μπορείτε να πάρετε 2594 02:07:56,940 --> 02:07:57,481 μέσα από αυτό. 2595 02:07:57,481 --> 02:07:59,450 Και στις write-ups για όλα τα προβλήματα 2596 02:07:59,450 --> 02:08:01,366 θα πρέπει να καθοδηγείται μέσω όλες τις εντολές 2597 02:08:01,366 --> 02:08:05,330 ότι εγώ σίγουρα ξέρω από πολλή πρακτική από τώρα, 2598 02:08:05,330 --> 02:08:07,380 αλλά θα μπορούσε να πετάξει πάνω από το κεφάλι ενός ατόμου για τώρα. 2599 02:08:07,380 --> 02:08:08,580 Και αυτό είναι απολύτως εντάξει. 2600 02:08:08,580 --> 02:08:11,230 >> Αλλά, τελικά, θα πάμε να αρχίσουμε να βλέπουμε σχέδια προκύπτουν. 2601 02:08:11,230 --> 02:08:14,260 Και μόλις πάρετε παρελθόν όλα τα ηλίθιο λεπτομέρειες, όπως παρενθέσεις, 2602 02:08:14,260 --> 02:08:16,710 και άγκιστρα, και ημι-παχύ έντερο, και τα πράγματα, ειλικρινά, 2603 02:08:16,710 --> 02:08:19,360 ότι δεν είναι καθόλου πνευματικά ενδιαφέροντα. 2604 02:08:19,360 --> 02:08:22,690 Και δεν είναι ο στόχος της τη λήψη κάθε εισαγωγικό μάθημα. 2605 02:08:22,690 --> 02:08:24,410 Είναι οι ιδέες που πρόκειται να έχει σημασία. 2606 02:08:24,410 --> 02:08:26,659 >> Είναι οι βρόχοι, και το συνθήκες, και τις λειτουργίες, 2607 02:08:26,659 --> 02:08:30,552 και πιο δυναμικά η αφαίρεση, και το factoring του κώδικα, 2608 02:08:30,552 --> 02:08:33,510 και ο καλός σχεδιασμός και η καλή στυλ, και, τελικά, η ορθότητα 2609 02:08:33,510 --> 02:08:37,330 του κωδικού σας, αυτό είναι, τελικά, πρόκειται να έχουν μεγαλύτερη σημασία. 2610 02:08:37,330 --> 02:08:40,925 Έτσι, την επόμενη εβδομάδα, θα λάβουμε αυτά ιδέες που είδαμε για πρώτη φορά στο Scratch 2611 02:08:40,925 --> 02:08:42,800 και τώρα έχουν μεταφραστεί σε C. Και θα αρχίσουμε 2612 02:08:42,800 --> 02:08:45,740 να εισαγάγει το πρώτο από τα πραγματικό κόσμο τομείς μαθήματος. 2613 02:08:45,740 --> 02:08:50,140 >> Θα επικεντρωθεί στην παγκόσμια ασφάλεια, και πιο συγκεκριμένα την κρυπτογραφία, 2614 02:08:50,140 --> 02:08:51,980 η τέχνη της κρυπτογράφησης πληροφοριών. 2615 02:08:51,980 --> 02:08:54,000 Και μεταξύ των πρώτων σας προβλήματα μόνοι σας 2616 02:08:54,000 --> 02:08:56,840 θα πάρετε για να γράψει πέρα παίζοντας με κάποια από τη σύνταξη 2617 02:08:56,840 --> 02:08:59,880 και την επίλυση κάποια λογική προβλήματα, τελικά, πριν από καιρό, 2618 02:08:59,880 --> 02:09:03,960 είναι να αγωνίζομαι στην πραγματικότητα, ή την κρυπτογράφηση, και, τελικά, την αποκρυπτογράφηση των πληροφοριών. 2619 02:09:03,960 --> 02:09:06,470 Και ό, τι έχουμε κάνει Σήμερα, θα αρκετά χαμηλή 2620 02:09:06,470 --> 02:09:09,190 επίπεδο, είναι ακριβώς πρόκειται να επιτρέψει να πάρουμε ένα και ένα, 2621 02:09:09,190 --> 02:09:13,550 και ένα βήμα παραπάνω προς την κατεύθυνση γράφοντας την πιο ενδιαφέρουσα κωδικό ακόμα. 2622 02:09:13,550 --> 02:09:15,050 >> Έτσι, περισσότερα για αυτό την επόμενη εβδομάδα. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [ΑΝΑΠΑΡΑΓΩΓΉ ΒΊΝΤΕΟ] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> -Τι Μπορεί να μου πείτε για η τελευταία φορά που τον είδε; 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Τι Μπορώ να πω, πραγματικά; 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Θέλω να πω, ότι ήταν όπως κάθε άλλη πρόβα προ-παραγωγής, 2631 02:09:35,340 --> 02:09:40,510 εκτός υπήρχε κάτι είπε στο τέλος που κόλλησε μαζί μου. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -Αυτό Ήταν CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -Ότι Είναι μια περικοπή όλους, πολύ καλή δουλειά στην πρόβα. 2636 02:09:52,190 --> 02:09:53,070 >> μεσημεριανό -ότι είναι; 2637 02:09:53,070 --> 02:09:54,986 >> -Ναι, Εσείς και μπορώ πιάσε ένα σάντουιτς σε ένα κομμάτι. 2638 02:09:54,986 --> 02:09:58,380 Επιτρέψτε μου να debrief με David πραγματικά γρήγορα. 2639 02:09:58,380 --> 02:09:59,160 Δαβίδ? 2640 02:09:59,160 --> 02:10:01,260 Δαβίδ? 2641 02:10:01,260 --> 02:10:03,110 >> [ΤΕΛΟΣ ΑΝΑΠΑΡΑΓΩΓΗ]