[Powered by Google Translate] David J. Malan: Εντάξει, αυτό είναι CS50 και αυτή είναι η
τέλος της εβδομάδας 1, οπότε κάρτες μελέτης είναι και ο συνολικός αριθμός των
συμμαθητές που έχετε φέτος είναι 745.
Και είμαστε τόσο ενθουσιασμένοι για να έχουν τόσα πολλά από εσάς κατά τη διάρκεια
αυτό το εξάμηνο, αλλά ακόμα κι αν αυτό το μάθημα είναι τόσο μεγάλο,
συνειδητοποιήσουμε ότι αυτά τα πράγματα είναι όπως τα γεύματα της Παρασκευής, όπως
ώρες γραφείου, 15-πρόσωπο τμήματα, και ούτω καθεξής ότι
είναι πραγματικά σήμαινε για να δημιουργήσει αυτό το πιο οικείο
περιβάλλοντος.
Έτσι, ακόμα κι αν μπορεί να συγκεντρώσει μία ή δύο φορές την εβδομάδα, εδώ στο
Sanders, γνωρίζουμε ότι ένα μεγάλο μέρος της εμπειρίας σας σε αυτό το μάθημα
θα είναι πολύ hands-on με παράλληλα από τους συμμαθητές σας
και το διδακτικό προσωπικό.
>> Έτσι, εδώ πάμε, Φθινόπωρο 2012.
Έτσι, υπενθυμίζουν ότι η τελευταία φορά που καταλήξαμε σε ένα σημείωμα της
ανακρίβεια, μιλάμε για την αναπαράσταση των αριθμών.
Και κοιτάξαμε μια από τις αποτυχίες που συνέβησαν, κατά την
πραγματικό κόσμο, όταν ήρθε στην παρεξήγηση
τρόπο με τον οποίο λειτουργούν οι υπολογιστές.
Λοιπόν, σήμερα θα επανεξετάσουμε άλλη μία από αυτές τις ιδέες
και να συνεχίσουν τις συζητήσεις μας για τον πελάτη CS50
και C και το τι σημαίνει πραγματικά για το πρόγραμμα.
Αλλά πρώτα, μόλις δύο ανεμοστρόβιλος ανακοινώσεις.
>> Τμήματα αρχίζουν αυτή την Κυριακή, και η πρώτη εβδομάδα είναι πάντα ένα
λίγο την ταχεία έναρξη, γιατί μόλις ήρθε σε
μορφές τμήμα σας.
Κάνουμε το ίδιο, τώρα, με τη διδασκαλία των υποτρόφων, τώρα
ότι ξέρουν το πρόγραμμά τους, έτσι είμαστε σκοπό, με
Το Σάββατο το πρωί, να δώσει συνέχεια μαζί σας με το τμήμα σας
εκχώρηση και TF.
Συνειδητοποιήστε ότι θα αρχίσουν την επόμενη μέρα, Κυριακή
ή τη Δευτέρα ή την Τρίτη.
Και τότε θα ληφθούν υπόψη οι μεταβολές τμήμα όπως αυτές προκύπτουν
στις μέρες που έρχονται.
Ώρες γραφείου, εν τω μεταξύ, είναι, και πάλι, απόψε, 8 μ.μ. έως 11, σε
Annenberg, καθώς και αύριο το βράδυ.
Ακόμα κι αν τα σύνολα πρόβλημα οφείλονται γενικά την Πέμπτη
το μεσημέρι, έχετε συνειδητοποιήσει μέχρι πέντε τελευταίες μέρες να περάσουν,
εξ ου και η διαθεσιμότητα των ωρών εργασίας την Πέμπτη, αν
μετρητά σας σε μία από αυτές τις τελευταίες μέρες και, ως εκ τούτου, να υποβάλουν
κάτι την Παρασκευή.
Επιτρέψτε μου να προτείνω ότι Scratch είναι ένα από τα πιο διασκεδαστικό, μεταξύ των
πιο χαμηλό βασικό σετ πρόβλημα.
Και θα ήθελα να κολλήσει πάνω σε αυτές τις τελευταίες μέρες, στρατηγικά, μόλις
για αργότερα στο εξάμηνο, όταν η ζωή αρχίζει να παίρνει με τον τρόπο
με εξετάσεις προόδου και άλλες κατηγορίες.
Σετ Πρόβλημα 1, εν τω μεταξύ, θα αναρτηθεί στην πορεία του
ιστοσελίδα αυτή την Παρασκευή, καθώς θα είναι σε πόδια του μαθήματος
μέσω βίντεο, το οποίο θα γυριστεί στις 2:30 μ.μ. την Παρασκευή
και στη συνέχεια δημοσιεύτηκε σε απευθείας σύνδεση από την επόμενη μέρα.
>> Γι 'αυτό και έληξε την Δευτέρα.
Θέλω να - στην πραγματικότητα, μια σημείωση εδώ.
Επειδή οι κατηγορίες - Sanders, επειδή ακριβώς δεν δανείζουν
η ίδια σε casual Q & A εμπρός και πίσω πολύ καλά, είμαστε
πρόκειται να δοκιμάσετε κάτι λίγο νέα φέτος, σύμφωνα με την οποία
αν δεν είστε άνετα την αύξηση το χέρι σας ή απλά
δεν θα αυξήσει μάλλον το χέρι σας σε ένα δωμάτιο σαν αυτό,
θα πάμε να έχουν μερικά από τα υποτρόφων διδασκαλίας και ΑΠ
επάνδρωση cs50.net/discuss κατά τη διάρκεια της διάλεξης.
Έτσι, εάν έχετε μια ερώτηση, γιατί ήμουν τελείως
ασαφείς για κάτι ή είστε περίεργοι σχετικά με ορισμένα
το θέμα, δοκιμάστε απόσπαση εκεί.
Κολλήστε με μια ετικέτα Διάλεξη, και εμείς θα κάνουμε το καλύτερο δυνατό
σήμερα και την επόμενη εβδομάδα - we'll δοκιμάστε αυτό - να παρατάσσουν
είτε ηλεκτρονικά, σε απευθείας σύνδεση, ή αν αισθάνεται σαν να πρέπει να
πραγματικά να αντιμετωπίσει μαζικά, ένας από τους υποτρόφους διδασκαλίας ή
ΑΠ θα σηκώσει το χέρι τους και να ζητήσουν
ανώνυμα για λογαριασμό σας.
Γι 'αυτό και θα δώσει σε αυτό μια δοκιμή και να δούμε πόσο καλά λειτουργεί αυτό.
Όμως, με όλα τα μέσα, συνεχίζουν να σηκώνουν τα χέρια, όπως θα θέλατε.
>> Έτσι, την τελευταία φορά που αποκάλυψε ότι το 10% ή το ένα δέκατο δεν είναι, σε
Πράγματι, 0,1, όπως σας έχουν δείξει εδώ και πολλά χρόνια.
Είναι στην πραγματικότητα, μία τιμή όπως αυτή.
Αλλά αυτό δεν είναι εντελώς αλήθεια, έτσι δεν είναι;
Έχουμε ακριβώς αυτό το εμπόδιο σε υπολογιστές σύμφωνα με την οποία, αν
μόνο να έχουν μια πεπερασμένη ποσότητα μνήμης, RAM, ή περισσότερο
συγκεκριμένα κομμάτια, καλά, υπάρχει μόνο ένας πεπερασμένος αριθμός
πράγματα που μπορείτε να εκπροσωπεί.
Για παράδειγμα, αν έχουμε τον αριθμό μηδέν, και θέλουμε να
αντιπροσωπεύουν σε δυαδικό, με οκτώ bits, όπου λίγο,
πάλι, είναι ένα μηδέν ή ένα, θα μπορούσαμε
εκπροσωπεί ως 00000000.
Και αυτό είναι λίγο φλύαρη χωρίς λόγο.
Ακριβώς όπως και στο δεκαδικό σύστημα στον πραγματικό κόσμο,
γενικά, αν θέλετε να γράψετε τα 123 τον αριθμό, θα
άνθρωποι πιθανώς δεν γράφουν 00000123 ακόμα κι αν,
λειτουργικά, που είναι ακριβώς το ίδιο νούμερο.
Έχουμε πέσει μόνο μηδενικά, να το πω έτσι.
>> Στο δυαδικό, μπορούμε να κάνουμε το ίδιο.
Δυαδική και μηδέν, μηδέν και δυαδική είναι ακριβώς μηδέν.
Χρειάζεται μόνο ένα κομμάτι.
Αλλά και πάλι, η πιο κοινή μονάδα μέτρησης στον κόσμο
των υπολογιστών είναι bytes, οκτώ bits.
Ακριβώς επειδή ένα κομμάτι, αρκετά άχρηστο.
Οκτώ bits, δεν είναι τρομερά χρήσιμο, αλλά τουλάχιστον είναι πιο
χρήσιμο από ό, τι μια ενιαία μονάδα μέτρησης.
Έτσι, με οκτώ κομμάτια, θα αντιπροσωπεύουν συνήθως δυαδικό.
Έτσι, εδώ έχουμε τους αριθμούς μηδέν, ένα, δύο, και στη συνέχεια, όπως
Nate έκανε στο βίντεο μας την περασμένη Τετάρτη, μπορούμε να συνεχίσουμε
καταμέτρηση έως επτά, οκτώ.
Και στη συνέχεια, αν χρησιμοποιούμε όλο και περισσότερα bit, έχουμε
μπορεί να μετρήσει μέχρι το άπειρο.
Αλλά εάν έχετε μόνο έναν πεπερασμένο αριθμό αυτών των bits, όπως είναι
η υπόθεση σε οποιοδήποτε σύστημα υπολογιστή, ή ακόμα και πυραύλων
σύστημα, και, πράγματι, έχετε μόνο ένα
πεπερασμένο ποσό της ακρίβειας.
Έτσι, εάν θέλετε να αντιπροσωπεύουν τον αριθμό, όπως 0,1, επίσης, η
υπολογιστής πρέπει να επιλέξετε και να επιλέξετε.
Και αν έχει μόνο έναν πεπερασμένο αριθμό των αριθμών που μπορεί να
εκπροσωπεί, μπορεί να έρθει κοντά στο 0,1 για σας, αλλά αυτό δεν μπορεί να
κατ 'ανάγκην να σας δώσει ακριβώς την τιμή που θέλετε.
Και αυτό είναι μόνο μία από τις προκλήσεις των ηλεκτρονικών υπολογιστών,
κάτω από την κουκούλα, ευτυχώς.
>> Καθώς προχωρούμε μακρύτερα στο εξάμηνο, αυτά χαμηλότερο επίπεδο
λεπτομέρειες γίνονται πολύ λιγότερο ενδιαφέρουσα, αλλά σίγουρα η
εφαρμογή αυτών των ιδεών μπορεί να έχουν κάποια πολύ πραγματικό κόσμο
προεκτάσεις.
Το ένα είναι ένα διασκεδαστικό λίγο.
Πόσοι από εσάς έχετε δει το καταπληκτικό Γραφεία ταινία;
Αν δεν έχετε, αυτό είναι ανεπίσημη σας
εργασία για την εβδομάδα.
Αλλά σε Γραφεία, οι υπότροφοι σε αυτή την ταινία να
πλεονέκτημα του ακριβώς αυτή την ιδέα, αλλά στην πραγματικότητα έκλεψε
αυτό από άλλη ταινία που μπορεί να έχετε
δει, ακόμη και χρόνια πριν.
Έτσι, επιτρέψτε μου να σας δώσω μερικά δευτερόλεπτα από αυτό το ρυμουλκούμενο από
αυτή η καταπληκτική ταινία και αυτό είναι πάρα πολύ
ακαδημαϊκά σχετικό.
>> [ΤΑΙΝΙΑ ΠΑΙΖΕΙ]
Στην πραγματικότητα είμαι προωθείται.
Μπορώ να προγραμματίσετε έναν ιό που θα σχίσει ότι
τοποθετήστε από μεγάλο χρονικό διάστημα.
Λοιπόν, πώς λειτουργεί;
Κάθε φορά που υπάρχει μια τραπεζική συναλλαγή όπου το ενδιαφέρον είναι
υπολογιστική, υπάρχουν χιλιάδες την ημέρα, ο υπολογιστής καταλήγει
με αυτά τα κλάσματα του cent.
Αλλά εγώ δεν πρόκειται να κάνει τίποτα παράνομο.
Παράνομη; Σαμίρ, αυτό είναι η Αμερική.
Θα πρέπει να ορκιστεί στο Θεό.
Αν κανείς δεν ξέρει γι 'αυτό, αλλά μας, εντάξει; Δεν υπάρχουν μέλη της οικογένειας, δεν
φίλες, κανείς.
[Δεν ακούγεται].
Μην ανησυχείτε, ο άνθρωπος, εγώ δεν θα το πω σε κανέναν, είτε.
[Ταινία τελειώνει]
>> Εντάξει, έτσι ίσως βρήκα αυτή την ταινία καλύτερα από τους περισσότερους
άνθρωποι εδώ, αλλά σε κάθε περίπτωση, ο ιός ότι ήταν
προσπαθεί να δημιουργήσει -
και στους κινηματογράφους, ανά πάσα στιγμή θα έπαιρνα κάτι καλέστε έναν ιό,
είναι γενικά δεν είναι στην πραγματικότητα ένας ιός.
Είναι απλά ένα πρόγραμμα που έγραψε κάποιος να κάνει κάτι.
Και σε αυτή την περίπτωση, τα παιδιά προσπαθούσαν να γράψει ένα πρόγραμμα
που εκμεταλλεύτηκε η εταιρεία τους κάλεσε για Innotech
υπολογιστικό σύστημα, όπου οι υπολογιστές, πάρα πολύ, ακόμη και όταν
πρόκειται για τα χρήματα, δεν μπορεί κατ 'ανάγκη
αντιπροσωπεύουν ακριβώς τα χρήματα.
Έτσι, ακόμα κι αν θα μπορούσε να έχει 0,10 δολάρια στον τραπεζικό λογαριασμό σας,
0,10, καλά, ο υπολογιστής μπορεί να πιστεύουν πραγματικά ότι έχετε
αυτό πολλοί σεντ στον τραπεζικό λογαριασμό σας.
Και έτσι ό, τι αυτοί οι τύποι είχαν φιλοδοξούν να κάνουν - και
έκλεψε την ιδέα, βγάζει από Superman III, όπου
Richard Pryor έκανε το ίδιο πράγμα - ήταν ουσιαστικά
συγγραφή προγραμμάτων που φιλοδοξούν να λάβει όλα τα πίσω
αριθμούς, όλα τα μικροσκοπικά, μικρά, μικρά κλάσματα του
πένες, και εκείνοι από μετάγγιση, έτσι ώστε οι άνθρωποι απλά
σκέψης, OH, αυτό είναι μόνο 0,10 δολάρια εκεί, αλλά όλα αυτά
πίσω αριθμοί τελικά να προσθέσει επάνω.
Έτσι, μια θαυμάσια ιδέα και ξεκαρδιστικά απέτυχε σε ότι
συγκεκριμένη ταινία.
>> Αλλά στον πραγματικό κόσμο, πάρα πολύ, υπάρχουν πολλά περισσότερα σχετικά με
επιπτώσεις αυτών των ειδών τα πράγματα.
Και ένας από τους λόγους για να βουτήξει στον τομέα των ηλεκτρονικών υπολογιστών
επιστήμη είναι, και πάλι, η δυνατότητα εφαρμογής της να μην το
επιστήμες μηχανικού και μόνο, αλλά μόνο και μόνο για να
άλλους τομείς, καθώς και.
Έτσι, αυτό είναι μια λιγότερο ανάλαφρη ματιά στο τι μπορεί να πάει στραβά, αλλά
Είναι επίσης αρκετά άνοιγμα των ματιών, νομίζω, όταν πρόκειται για
κατανόηση ακριβώς πώς τεχνολογίες όπως η πανταχού παρούσα
υπολογιστές και τον προγραμματισμό και αυτές τις μέρες,
με τη μορφή λογισμικού.
Έτσι, αυτό το επόμενο κλιπ είναι μόνο περίπου έξι λεπτά, συνεχίζεται
όπου αφήσαμε τελευταία φορά, αλλά μας επιτρέπει να κοιτάξουμε λίγο
περισσότερο σε βάθος σε μια τέτοια από αυτά τα ζητήματα.
Επιτρέψτε μου να προχωρήσετε στο σημείο όπου φύγαμε μακριά,
που ήταν εδώ.
Και έχουμε το δεύτερο μέρος των δύο, για περίπου έξι λεπτά εδώ.
>> [PLAY MOVIE]
Μαστίζεται σύγχρονη τεχνολογία πυραύλων.
Το 1991, με την έναρξη του πρώτου Πολέμου του Κόλπου, το Patriot
πυραύλων βιώσει ένα παρόμοιο είδος του
αριθμός πρόβλημα μετατροπής.
Και ως εκ τούτου, 20 άτομα, 20 Αμερικανοί στρατιώτες, σκοτώθηκαν
και περίπου 100 άλλοι τραυματίστηκαν, όταν το Patriot, που υποτίθεται
για την προστασία από τις εισερχόμενες Scuds,
απέτυχε στη φωτιά έναν πύραυλο.
>> Όταν το Ιράκ εισέβαλε στο Κουβέιτ και της Αμερικής ξεκίνησε μια έρημο
Θύελλα στις αρχές του 1991, συστοιχίες πυραύλων Patriot ήταν
αναπτύχθηκαν για να προστατεύσουν τη Σαουδική Αραβία και το Ισραήλ από το Ιράκ
Scud πυραυλικές επιθέσεις.
Το Patriot είναι μια αμερικανική μεσαίου βεληνεκούς εδάφους-αέρος σύστημα,
που κατασκευάζεται από την εταιρεία Raytheon.
Το μέγεθος της αναχαίτισης Patriot μόνη της, είναι περίπου
περίπου 20 μέτρα μήκος και ζυγίζει περίπου 2.000 κιλά.
Και αυτό φέρνει μια κεφαλή πυραύλου περίπου - Νομίζω ότι είναι περίπου
£ 150.
Και η ίδια η κεφαλή είναι ένα ισχυρό εκρηκτικό που έχει
θραύσματα γύρω από αυτό.
Το περίβλημα της εκρηκτικής κεφαλής είναι σχεδιασμένο να ενεργεί σαν σκάγια.
Τα βλήματα μεταφέρονται τέσσερις ανά δοχείο και είναι
μεταφέρονται από ένα ημι ρυμουλκούμενο.
>> Η Patriot αντιπυραυλικό σύστημα πηγαίνει πίσω τουλάχιστον για
20 χρόνια τώρα.
Αρχικά σχεδιάστηκε ως μια πυραυλική άμυνα αέρα
καταρρίψουν τα αεροπλάνα του εχθρού, στον πρώτο πόλεμο του Κόλπου.
Όταν ο πόλεμος ήρθε, ο στρατός ήθελε να το χρησιμοποιήσετε για να πυροβολήσει
κάτω Scuds όχι, αεροπλάνα.
Το Air Force Ιράκ δεν ήταν τόσο μεγάλο πρόβλημα, αλλά ο στρατός
ανησυχούσε για Scuds.
Και γι 'αυτό προσπάθησε να αναβαθμίσει το Patriot.
Παρακολουθούν ένα βλήμα του εχθρού που ταξιδεύουν σε 5 Mach επρόκειτο
να αρκετά δύσκολο.
Αλλά όταν το Patriot ορμηκε σε λειτουργία, ο στρατός
δεν είχε γνώση της ιρακινής τροποποίηση που έκανε τους
Scuds σχεδόν αδύνατο να χτυπήσει.
>> Αυτό που συνέβη είναι οι Scuds που ήταν
έρχονται σε ήταν ασταθείς.
Είχαν ταλάντευση.
Ο λόγος για αυτό ήταν οι Ιρακινοί, προκειμένου να πάρετε 600
χιλιόμετρα έξω από ένα βλήμα 300 χιλιόμετρα σειρά, πήρε
βάρους έξω από το εμπρόσθιο εκρηκτική κεφαλή και
έκανε η κεφαλή αναπτήρα.
Έτσι τώρα το Patriot προσπαθεί να έρθει σε Scud, και οι περισσότεροι από
ο χρόνος, η συντριπτική πλειοψηφία του χρόνου, αυτό θα
μόλις πετάξει από το Scud.
Όταν οι διαχειριστές συστημάτων Patriot Patriot συνειδητοποίησε την
έχασε το στόχο του, που πυροδότησε την κεφαλή πυραύλου Patriot.
Για να αποφύγετε πιθανές απώλειες, δεν επετράπη
να πέσει στο έδαφος.
Αυτό ήταν ό, τι οι περισσότεροι άνθρωποι είδαν, όπως μεγάλες fireballs στον ουρανό,
και παρεξηγημένη ως παρακολουθήσεις των Scud κεφαλές.
>> Παρά το γεγονός ότι, στο νυχτερινό ουρανό, πατριώτες φαίνεται να είναι
επιτυχώς κατέστρεψε Scuds, σε Dhahran, θα μπορούσε να υπάρξει
σφάλμα σχετικά με τις επιδόσεις του.
Εκεί, το σύστημα ραντάρ του Patriot έχασε ένα κομμάτι της
εισερχόμενες Scud και ποτέ δεν ξεκίνησε λόγω
σε ελάττωμα του λογισμικού.
Ήταν οι Ισραηλινοί που ανακαλύφθηκε για πρώτη φορά ότι η πλέον
το σύστημα ήταν, τόσο μεγαλύτερη είναι η διαφορά του χρόνου έγινε,
οφείλεται σε ένα ρολόι ενσωματωμένο στον υπολογιστή του συστήματος.
Περίπου δύο εβδομάδες πριν από την τραγωδία στο Νταχράν, το
Ισραηλινοί αναφερθεί στο Υπουργείο Άμυνας ότι η
σύστημα έχανε χρόνο.
Μετά από περίπου οκτώ ώρες λειτουργίας, παρατήρησαν ότι η
σύστημα γινόταν αισθητά λιγότερο ακριβείς.
Το Υπουργείο Άμυνας απάντησε λέγοντας όλων των
οι μπαταρίες Patriot να μην αφήσει τα συστήματα
για μεγάλο χρονικό διάστημα.
Ποτέ δεν είπε τι ένα μεγάλο χρονικό διάστημα ήταν - 8 ώρες, 10
ώρες, 1.000 ώρες.
Κανείς δεν ήξερε.
>> Η μπαταρία Patriot που σταθμεύουν στο στρατώνα στο Dhahran
και εσφαλμένη εσωτερικό ρολόι του είχε πάνω από 100 ώρες
τη νύχτα της 25 Φεβρουαρίου.
Ακολούθησε το χρόνο με ακρίβεια περίπου το ένα δέκατο του δευτερολέπτου.
Τώρα, ένα δέκατο του δεύτερου είναι μια ενδιαφέρουσα, διότι αριθμός
δεν μπορεί να εκφράζεται σε δυαδική, ακριβώς, πράγμα που σημαίνει
δεν μπορεί να εκφράζεται επακριβώς σε οποιαδήποτε
σύγχρονο ψηφιακό υπολογιστή.
Είναι δύσκολο να πιστέψει κανείς.
Αλλά χρησιμοποιούν αυτό ως παράδειγμα.
>> Ας πάρουμε το υπ 'αριθμόν ένα τρίτο.
Το ένα τρίτο δεν μπορεί να εκφράζεται σε δεκαδική, ακριβώς.
Το ένα τρίτο είναι 0,333 συνεχίζεται για το άπειρο.
Δεν υπάρχει τρόπος να το κάνουμε αυτό με απόλυτη ακρίβεια σε δεκαδικά.
Αυτό είναι ακριβώς το ίδιο είδος του προβλήματος που συνέβη στην
το Patriot.
Όσο περισσότερο το σύστημα έτρεξε, το χειρότερο το σφάλμα χρόνου έγινε.
Μετά από 100 ώρες λειτουργίας, το σφάλμα στο χρόνο ήταν μόνο
περίπου το ένα τρίτο του δευτερολέπτου.
Αλλά από την άποψη της στόχευσης ενός πυραύλου που ταξιδεύουν στο MACH 5,
αυτό οδήγησε σε σφάλμα παρακολούθησης του πάνω από 600 μέτρα.
Θα ήταν μοιραίο λάθος για τους στρατιώτες στο Νταχράν.
>> Αυτό που συνέβη είναι μια εκτόξευση Scud εντοπίστηκε από την έγκαιρη προειδοποίηση
δορυφόρους και ήξεραν ότι ο Scud ερχόταν σε τους
γενική κατεύθυνση.
Δεν ήξεραν όπου ερχόταν.
Ήταν τώρα μέχρι το συστατικό ραντάρ του Patriot
συστήματος, την υπεράσπιση Dhahran, για να εντοπίσετε και να παρακολουθείτε το
εισερχόμενων πυραύλων του εχθρού.
Το ραντάρ ήταν πολύ έξυπνος.
Μπορείτε να παρακολουθείτε πραγματικά τη θέση του και στη συνέχεια Scud
προβλέψουμε, όπου κατά πάσα πιθανότητα θα είναι η επόμενη φορά που θα
ραντάρ έστειλε έναν παλμό έξω.
Που ονομαζόταν η πύλη σειρά.
Στη συνέχεια, αφού το Patriot αποφασίζει αρκετός χρόνος έχει περάσει για να πάει
πίσω και ελέγξτε την επόμενη θέση για αυτό που ανιχνεύονται
αντικείμενο, πηγαίνει πίσω.
Έτσι, όταν πήγε πίσω στο λάθος μέρος, βλέπει τότε δεν
αντιρρήσεις, και αποφασίζει ότι δεν υπήρχε αντικείμενο.
Ήταν μια ψευδή ανίχνευση και πέφτει το κομμάτι.
>> Η εισερχόμενη Scud εξαφανίστηκε από την οθόνη του ραντάρ.
Και δευτερόλεπτα αργότερα, το χτύπησε στο στρατώνα. Η Scud
σκοτώθηκαν 28 και ήταν η τελευταία απολύθηκε κατά τη διάρκεια της
το πρώτο Πόλεμο του Κόλπου.
Δυστυχώς, η ενημέρωση του λογισμικού έφτασε στο Νταχράν
την επόμενη ημέρα.
Και το ελάττωμα του λογισμικού είχε καθοριστεί, κλείνοντας ένα κεφάλαιο
η ταραγμένη ιστορία του πυραύλου Patriot.
PATRIOT είναι πραγματικά ένα αρκτικόλεξο για "Σταδιακή Παρακολούθηση Array
Τομής του στόχου. "
>> Εντάξει, έτσι, ένα πολύ πιο θλιβερή έκβαση της δεν είναι αρκετά
κατανόηση αυτού του κόσμου.
Και η takeaway, πραγματικά, από την ταινία είναι ότι η λύση
υπήρχε επανεκκίνηση του συστήματος πυραυλικής άμυνας σας
κάθε φορά σε μια στιγμή.
Και έτσι πάλι, ένας από τους στόχους του μαθήματος, σίγουρα
σε μια πιο ταπεινή κλίμακα από αυτές τις εφαρμογές, είναι να
τα μάτια πραγματικά ανοικτή σε όλους να ακριβώς πώς πηγαίνετε για την
μηχανές κάνουν ό, τι θέλετε να κάνετε και πώς θα πάτε
ότι για να κάνει σωστά, ενώ κατά μήκος του τρόπου που κάνει
καλά, κομψά, και ούτω καθεξής.
Και έτσι σήμερα, ας βουτιά σε λίγο περισσότερο από αυτό, αλλά
έτσι ώστε να μην πάει πάρα πολύ γρήγορα, ιδιαίτερα για εκείνους λιγότερο
άνετο, αλλά και για να μπορέσουμε να διατηρήσει το ενδιαφέρον του
εκείνοι πιο άνετα, ας αρχίσει γρήγορα με ένα κομμάτι
ανακεφαλαίωση των ορισμένων από αυτές τις ιδέες.
Και πάλι, να ζητήσει από μακριά, τόσο στο πρόσωπο ή σε απευθείας σύνδεση, αν έχετε
ερωτήσεις έτσι ώστε να μπορεί να κρατήσει όλους στην ίδια σελίδα.
>> Έτσι, η συσκευή CS50, γρήγορο βήμα πίσω, είναι
τι, με δικά σας λόγια;
Δεν πειράζει αν δεν έχετε ιδέα τι αυτές οι λέξεις μπορεί να είναι ακόμη.
[Δεν ακούγεται]
Εντάξει, έτσι μια καθολική διεπαφή για -
ότι όλοι μπορούμε να μοιραστούμε.
Απολύτως.
Έτσι θα μπορούσαμε, για παράδειγμα, να σας πω να πάτε σε κάποια
ιστοσελίδα, κατεβάστε το λογισμικό για Mac OS.
Κατεβάστε αυτό το λογισμικό για Windows, ρυθμίστε το
αυτόν τον τρόπο και ότι.
Αλλά η πραγματικότητα είναι τότε τρέχει σε αναρίθμητες τεχνικές
υποστήριξη θέματα.
Και, επίσης, αυτές τις μέρες, ένα μεγάλο μέρος του τι γίνεται πλευρά του server,
στον κόσμο των υπολογιστών, ειδικά όταν πρόκειται για την
web development και web-based εφαρμογές, είναι στην πραγματικότητα
αρκετά συχνά γίνεται σε Unix ή Linux υπολογιστές, σε αντίθεση με
Macs ή Windows PCs.
>> Έτσι, μεταξύ των upsides, στη συνέχεια, με τη χρήση του αυτό το πράγμα που ονομάζεται
CS50 συσκευή είναι θα έχουμε όλοι το ίδιο περιβάλλον.
Έτσι, όλοι είναι στην ίδια σελίδα δεν έχει σημασία τι υλικό σας
ήρθε στην πανεπιστημιούπολη, αλλά και με θα αδέξιος ακριβώς
το ίδιο περιβάλλον που θα χρησιμοποιείτε προς
άκρο εξαμήνου καθώς και για την ανάπτυξη ιστού, καθώς επίσης και στην
μέλλον για εφαρμογές πραγματικού κόσμου αυτού.
Έτσι, πιο συγκεκριμένα, η συσκευή CS50 είναι ένα ελεύθερο κομμάτι της
λογισμικό που σας επιτρέπει να εκτελέσετε ένα άλλο λειτουργικό σύστημα,
Linux, σε αυτή την περίπτωση, στον υπολογιστή σας, σε ένα παράθυρο.
Τώρα δεν μπορείτε να κατεβάσετε μόνο τη συσκευή.
Χρειάζεται ένα πρόγραμμα με το οποίο να παίξει ή να εκτελέσετε τη συσκευή.
Και το κομμάτι του λογισμικού είναι γενικά γνωστή ως α
hypervisor.
Hypervisors έρθει με τη μορφή των προϊόντων, όπως το VMware,
Virtual Box, Parallels.
Όλα τα είδη των εταιρειών κάνουν το λογισμικό, τόσο ελεύθερη και
εμπορική, όσο.
Τι θα δείτε στο πρόβλημα Set 1 είναι οδηγίες για το πώς να
αποκτήσετε δωρεάν λογισμικό με το οποίο να
εκτελέστε το CS50 συσκευή.
Και τη στιγμή που θα κάνετε, θα έχετε, σε ένα παράθυρο στο Mac ή στο PC σας,
ένα γραφικό περιβάλλον που μοιάζει αρκετά σαν αυτό, όπου
έχει ένα μενού Έναρξη-όπως πράγμα το
κάτω αριστερή γωνία.
Έχει ένα φάκελο Home, ή κατάλογο Αρχική, στην πάνω αριστερή
υπάρχει, ένα δοχείο απορριμμάτων, και ούτω καθεξής.
Γι 'αυτό και θα δώσουμε έμφαση, εκτός τις απαραίτητες λεπτομέρειες όπως πάμε.
>> Αλλά τώρα ας αρχίσουμε να βουτήξει C.
Έτσι C είναι η γλώσσα προγραμματισμού, παρόμοια στο πνεύμα με
Scratch, αλλά πολύ λιγότερο γραφική, αλλά ειρωνικά, πολύ
πιο ισχυρή από τη στιγμή που έχετε με αυτό καταλαβαίνω.
Έτσι, C, γράφουμε προγράμματα γράφοντας τον πηγαίο κώδικα, το οποίο είναι
αυτή η αγγλική σαν σύνταξη, παρόμοια με τις κάλτσες
απόδειξη ότι κάναμε την τελευταία φορά που σας επιτρέπει να
εκφράσουν τον εαυτό σας αρκετά ακριβώς, αν
arcanely, με τον υπολογιστή.
>> Οπότε τι είδους λογισμικό του προϊόντος δεν χρειάζεται πραγματικά
για να γράψουν προγράμματα σε μια γλώσσα όπως η C, με βάση μας
συζήτηση τη Δευτέρα;
[Δεν ακούγεται]
Εντάξει, απλά χρειάζεστε ένα πρόγραμμα επεξεργασίας κειμένου.
Δεν χρειάζεται κανένα ειδικό λογισμικό
per se να γράψουν προγράμματα.
Χρειάζεται μόνο ένα πρόγραμμα επεξεργασίας κειμένου όπως το σημειωματάριο, στα Windows,
TextEdit σε Mac, ή κάτι που ονομάζεται gedit, στον κόσμο της
Linux, το οποίο θα χρησιμοποιήσουμε εδώ.
Και αυτό είναι αυτό, για να γράψει τα προγράμματα.
>> Αλλά γραφή είναι μόνο το μισό της εξίσωσης.
Θα πρέπει στη συνέχεια να τους τρέξει.
Αλλά για να τρέξει τα προγράμματα -
δεν μπορείτε να εκτελέσετε τον πηγαίο κώδικα.
Μπορείτε αντ 'αυτού πρέπει να κάνει ό, τι για πρώτη φορά;
Ναι.
David J. Malan: Θα πρέπει να
μεταφράσει.
Και κάποιος άλλος, την κατάρτιση του κώδικα σημαίνει -
[Δεν ακούγεται]
David J. Malan: Ακριβώς.
Μεταφράζοντας να μηδενικά και μονάδες.
Επειδή όλοι μας, αυτές τις μέρες, έχουν υπολογιστές που έχουν επεξεργαστές,
σχεδόν όλα από τα οποία είναι κατασκευασμένα από μια εταιρεία που ονομάζεται Intel, και
Intel Inside, σημαίνει ότι υπάρχει αυτό μέσα στον εγκέφαλό του σας
υπολογιστή, γνωστό ως το CPU.
Και ένα από τα πράγματα που κάνει ότι ο εγκέφαλος είναι, γνωρίζει
πώς να κατανοήσουμε τον τρόπο διαμόρφωσης των μηδενικά και μονάδες.
Ξέρει τι μοτίβο των bits αντιπροσωπεύει Επιπλέον, τι
πρότυπο αντιπροσωπεύει αφαιρέσεις, ποιο πρότυπο
bits αντιπροσωπεύουν την εκτύπωση, και δημιουργώντας ένα ηχητικό ήχο.
>> Έτσι εν ολίγοις, η CPU, σε συνδυασμό με το λειτουργικό σύστημα,
η οποία είναι ένα κομμάτι του λογισμικού που τρέχει πάνω από την CPU,
να το πω έτσι.
Μαζί, αυτά τα δύο κομμάτια ξέρουν πώς να τρέξει τα προγράμματα που
εμείς οι άνθρωποι γράφουν.
>> Έτσι, αν πάω στη συσκευή CS50 εδώ, θα πρέπει να ανοίξετε
μέχρι ένα πρόγραμμα επεξεργασίας κειμένου και μπορώ να αποκτήσετε πρόσβαση σε αυτό
σε μια-δυο τρόπους.
Μπορώ να πάω είτε στο μενού, Προγραμματισμός,
και στη συνέχεια θα μπορεί να επιλέξει -
nope, δεν είναι ότι το μενού.
Μπορώ να πάω για Αξεσουάρ / gedit εδώ για να ανοίξετε
λίγο επεξεργαστή κειμένου μου.
Ή πιο απλά, δεν μπορώ κλικ σε αυτό το εικονίδιο στο κάτω μέρος
αριστερή γωνία.
Και τώρα έχω αυτό το περιβάλλον εδώ.
Είναι πολύ θυμίζει ένα απλό επεξεργαστή κειμένου, με μόνο
μία ή δύο διαφορές.
Στην κορυφή, όπου βρίσκεται ο δρομέας αναβοσβήνει τώρα, όπου αυτό είναι
Μπορώ να αρχίσετε να γράφετε κώδικα μου.
Στο κάτω μέρος είναι αυτό το πράγμα που ονομάζεται το παράθυρο τερματικού.
Και τι είδους πράγματα που μπορώ να κάνω σε αυτό
λεγόμενο παράθυρο τερματικού;
[Δεν ακούγεται]
>> Εντάξει, γι 'αυτό θα τρέξει εντολές.
Και μερικές από τις εντολές που έτρεξε τη Δευτέρα ήταν λίγο
αινιγματικό στην αρχή, αλλά ls για τη λίστα, cd για την αλλαγή καταλόγου,
rm, για αφαίρεση.
Έτσι είναι το είδος του τρόπου παλιό σχολείο του πλοήγηση σας
υπολογιστή, χρησιμοποιώντας μόνο το πληκτρολόγιο σας και εντολές κειμένου,
και όχι, γενικά, χρησιμοποιώντας ένα ποντίκι.
Αλλά θα δούμε, πριν από καιρό, αυτό δίνει πραγματικά μας
λίγο περισσότερη δύναμη και λίγο μεγαλύτερη ακρίβεια με την οποία να
εκφραζόμαστε.
Και στη συνέχεια, εδώ στα αριστερά, είμαστε ακριβώς πρόκειται να δούμε,
όπως έχουμε ξεκινήσει το λογισμικό γραπτώς, μια μικρή περίληψη της
πρόγραμμα που έχουμε γράψει στο πάνω αριστερά.
Αλλά θα δούμε ότι και πάλι πριν από καιρό.
>> Ας κάνουμε κάτι αρκετά απλό εδώ.
Επιτρέψτε μου πρώτα να προχωρήσει και να πάει στο αρχείο, αποθηκεύστε, και είμαι απλά
πρόκειται να κάνετε κλικ εδώ για jharvard, πάνω αριστερά, και
jharvard είναι, και πάλι, το όνομα για το φάκελο στο σπίτι μου, μου
προσωπικά αρχεία, εγώ, τώρα είναι John Harvard, όπως όλοι σας
σύντομα θα John Harvard σε αυτό το περιβάλλον.
Πήρε αυτό τον κατάλογο Αρχική, Τα έγγραφά μου και ούτω καθεξής,
που θέλετε να αποθηκεύσετε, τώρα, αυτό το αρχείο μέσα
Έτσι, Πάω να το ονομάσουμε hello.c. Στη συνέχεια, Πάω να πάει
μπροστά και κάντε κλικ στο κουμπί Αποθήκευση, και τώρα αυτό που έχουμε εδώ είναι μια καρτέλα
που ονομάζεται hello.c, τόσο σαν έναν άλλο τύπο επεξεργαστή.
>> Έτσι, τώρα επιτρέψτε μου να προχωρήσει και να αρχίσετε να γράφετε ένα πρόγραμμα.
int main (void).
Και τότε έκανα μόλις την περασμένη φορά, printf, για μορφοποίηση εκτύπωσης,
("Hello, world!"
)?.
Σχεδόν ολοκληρωθεί.
Αλλά είμαι λείπει ένα ζευγάρι των στοιχείων.
Αυτό που λείπει από το πρόγραμμα αυτό που πραγματικά χρειάζεται για
να συγκεντρώνουν πραγματικά;
Ναι.
[Δεν ακούγεται];
>> David J. Malan: Ναι, γι 'αυτό πρέπει να περιλαμβάνει την τυποποιημένη
I / O βιβλιοθήκη.
Έτσι, αυτό πρέπει να πάει πάνω από την κύρια, έτσι είμαι απλώς πρόκειται να
κάνει κάποια περιθώρια για εκεί.
Και Πάω να κάνω # include .
Και παρατηρήσετε τις γωνιακές παρενθέσεις εκεί.
Και ως ένα μέρος, το gedit είναι ένα μικρό φιλικό προς το χρήστη, αν
Μερικές φορές μια μικρή σύγχυση, δεδομένου ότι προσπαθεί να βοηθήσει σας
μάτια παρατηρήσετε τι γραμμές με τι.
Έτσι, το γεγονός ότι ο δρομέας μου είναι ακριβώς δίπλα σε αυτή τη γωνία
βραχίονα, παρατηρήστε πώς είναι αναδεικνύοντας την άλλη γωνία
βραχίονα συν αυτό.
Και αυτό είναι μόνο για να επιστήσει την προσοχή μου στο γεγονός ότι
έχουν συμμετρία.
Και συμμετρία στον προγραμματισμό είναι γενικά ένα καλό πράγμα.
Παρομοίως, αν μετακινήσετε τον κέρσορα μου στο τέλος, παρατηρήστε πώς η
άγκιστρα line up για να δείξει ότι, ναι, έχω ένα ανοικτό
και ένα κλειστό ένα, να το πω έτσι.
>> Εντάξει, και μπορώ να κάνω κάτι άλλο.
Δεν είναι απολύτως απαραίτητο, αλλά ορθών πρακτικών, να πω
return 0.
Και 0 Επιστροφή κάνει ό, τι για εμάς εδώ;
Ή τι σημαίνει;
[Δεν ακούγεται]
David J. Malan: Αλλά τίποτα δεν είναι λάθος.
Και ειλικρινά είναι δύσκολο για πολύ να πάει στραβά σε ένα
προγραμματίσετε αυτό το σύντομο.
Έτσι, είμαι απλώς είναι σούπερ σαφές ότι όλα είναι καλά.
Εγώ, ο άνθρωπος, όταν τρέχω το πρόγραμμα αυτό, θα είναι πιθανώς ποτέ
βλέπουμε ότι 0.
Σε γενικές γραμμές, αυτοί οι αριθμοί που επιστρέφονται από τους κύριους
μόνο εκτρέφουν τα κεφάλια τους στους ανθρώπους, όταν
κάτι πάει στραβά.
Και μπορείτε να πάρετε μια μικρή αναδυόμενο λέγοντας σφάλμα του συστήματος, ένα,
δύο, τρεις, ή οτιδήποτε άλλο ο αριθμός ήταν ότι
ήταν στην πραγματικότητα επέστρεψε.
Έτσι οτιδήποτε άλλο λάθος με αυτό;
[Δεν ακούγεται]
>> David J. Malan: Έτσι, αυτό δεν είναι τόσο πολύ ένα λειτουργικό λάθος
αλλά μια αισθητική ένα.
Θα πρέπει πιθανώς να θέσει σε ένα χαρακτήρα νέας γραμμής εκεί η
τέλος αυτής της σειράς, έτσι ώστε να προχωρήσουμε στην πραγματικότητα τον κέρσορα
η επόμενη γραμμή, και το πρόγραμμα φαίνεται λίγο πιο όμορφη.
>> Έτσι, τώρα επιτρέψτε μου να πάει κάτω στο παράθυρο του τερματικού μου
και μεγεθύνετε
Και αυτό το πράγμα εδώ, λέγεται το ερώτημα.
Είναι μόλις μου θυμίζει ποιος είμαι, jharvard @ συσκευή, όπου
συσκευή είναι το όνομα του υπολογιστή που είμαι.
Στις παρενθέσεις είναι η περισπωμένη, η τζίφρα σύμβολο, το οποίο
τι αντιπροσωπεύει;
ΚΟΙΝΟ: Αρχική σελίδα καταλόγου.
David J. Malan: Αρχική σελίδα καταλόγου.
Έτσι, αυτό είναι μόνο μια σημείωση στενογραφίας για να πούμε είστε σε
τον προσωπικό σας φάκελο, όπου όλα τα αρχεία σας πηγαίνουν από προεπιλογή.
Μέχρι τώρα, εδώ, μπορώ να πληκτρολογήσετε ls για τη λίστα.
Και το μόνο πράγμα που βλέπω εδώ αυτή τη στιγμή είναι hello.c.
Και αυτό είναι καλό, γιατί έγραψα ακριβώς αυτό.
>> Επιτρέψτε μου λοιπόν να πάμε μπροστά και να κάνουν ένα γεια.
Και παρατηρώ δεν είμαι πληκτρολογώντας make hello.c.
Αντ 'αυτού, είμαι πληκτρολογώντας μόνο το όνομα βάσης του αρχείου, γεια σου.
Και να κάνει, όπως είδαμε τη Δευτέρα, απλά θα συμπεράνουμε ότι θέλω
το αρχείο. c.
Έτσι, τώρα έχω να πληκτρολογήσει γεια.
Τώρα βλέπω αυτό το αρκετά μεγάλο εντολή και θα συνεχίσει
βλέπουμε αυτό ξανά και ξανά.
Αλλά για να είναι σαφής, κλαγγή, η λέξη που μόλις εμφανίστηκε,
αυτό είναι το πραγματικό compiler.
Κάνετε είναι απλά ένα βοηθητικό πρόγραμμα κατασκευής.
Είναι απλά μια πιο φιλική προς το χρήστη πρόγραμμα που με σώζει, στην
Μακροπρόθεσμα, από το να χρειάζεται να πληκτρολογήσετε από απίστευτα κουραστικό καιρό
εντολές όπως εκείνο το ένα.
Έτσι, θα μπορούσε να τρέξει Clang χέρι.
Θα μπορούσατε να πληκτρολογήσετε όλο αυτό το χέρι.
Απλά παίρνει πολύ κουραστική.
Και έτσι να είναι απλά ένα πρόγραμμα που απλοποιεί τη ζωή μας και
τρέχει πιο σύνθετες εντολές για εμάς.
>> Εντάξει, έτσι τώρα τι αρχείο θα πρέπει να έχω
σε τρέχοντα κατάλογο μου;
Όχι μόνο hello.c, αλλά και γεια.
Έτσι, αν θέλετε να τρέξετε Γεια σας, υπενθυμίζουν ότι λέω dot slash,
όπου μέσα dot πάει στο τρέχοντα φάκελο, όπου και αν βρίσκεστε
είναι, και στη συνέχεια, εκτελέστε το πρόγραμμα που ονομάζεται γεια, και μάλιστα, τώρα,
Έχω hello world.
Εντάξει, τυχόν ερωτήσεις σχετικά με τη ροή εργασίας ή η σύνταξη του
ό, τι ακριβώς έκανε;
>> Εντάξει, γι 'αυτό ας πάρουμε τα πράγματα επάνω μια εγκοπή και πάλι.
Έτσι, αυτό ήταν απογοητευτικό να γράψει μόνο ένα πρόγραμμα που μόνο
γειά σου λέει ποτέ, κόσμο.
Γι 'αυτό άλλαξε, τη Δευτέρα, να πω, γεια σου, Ντέιβιντ.
Είναι λίγο πιο προσωπική, αλλά εξίσου σκληρά κωδικοποιούνται ως η
πρώτη έκδοση.
Έτσι, δεν είναι όλα τόσο συναρπαστικό.
Αλλά υπάρχει, σε C, λειτουργεί σίγουρα εκτός
εκτύπωσης, οι λειτουργίες που σας επιτρέπουν να πάρετε είσοδο του χρήστη.
Και ο τρόπος που το έκανε αυτό, την άλλη μέρα, είχε ως εξής.
Πριν εκτυπώσετε πραγματικά κάτι, για πρώτη φορά πήρε
κάτι από το χρήστη.
Επιτρέψτε μου λοιπόν να το κάνετε αυτό και πάλι.
>> String s, όπου s είναι απλώς μια αυθαίρετη ονομασία, εδώ, για μια
string, ισούται με GetString.
Έτσι, ό, τι GetString;
Παίρνει προφανώς μια σειρά, με βάση το όνομά του.
Αλλά τι είναι αυτό, πιο τεχνικά;
Είναι μια λειτουργία.
Γι 'αυτό είναι μια λειτουργία που δεν έρχεται με C per se.
CS50 προσωπικό έγραψε αυτό.
Και έτσι για να χρησιμοποιήσετε αυτό, μπορείτε όχι μόνο να περιλαμβάνουν stdio.h,
Θα πρέπει επίσης να περιλαμβάνει τι;
Ναι.
Έτσι cs50.h, το οποίο απέχει μόλις ένα αρχείο γράψαμε πριν από μερικά χρόνια.
Έχουμε εγκαταστήσει στη συσκευή σας για παράλληλα
όλα τα standard αρχεία.
Και έτσι σε αυτές τις πρώτες εβδομάδες της κατηγορίας, θα χρησιμοποιήσουμε
αυτό ακριβώς για να απλοποιηθεί η διαδικασία για να γίνει πολύ βασικά
πράγματα όπως να πάρει εισόδου του χρήστη.
Διότι, όπως θα δούμε σε λίγες εβδομάδες, να πάρει είσοδο του χρήστη σε ένα
γλώσσα όπως η C είναι πραγματικά εκπληκτικά περίπλοκη,
κυρίως επειδή δεν ξέρεις εκ των προτέρων, συνήθως, πώς
πολλά πράγματα ο χρήστης πρόκειται να πληκτρολογήσετε μέσα
Και όταν δεν ξέρεις πόσα δεδομένα να περιμένουμε, εσείς δεν
ξέρετε πόση μνήμη να διαθέσει.
Και αν έχετε πραγματικά μια αντιπαράθεση χρήστης που προσπαθεί
να χαράξει στο σύστημά σας, συντριβή του υπολογιστή σας, καλά,
γενικά η πρώτη μέθοδος επίθεσης είναι, ακριβώς όπως έκανα και με
Δευτέρα, πληκτρολογήστε μια ολόκληρη μακρά ακολουθία των τυχαίων χαρακτήρων,
πατήστε Enter, και δείτε τι σπάει.
Επειδή γενικά, αν ένα πρόγραμμα διαλείμματα, που παραπέμπει σε
ένα ελάττωμα ασφαλείας, ενδεχομένως.
Είναι σίγουρα υπαινίσσεται σε σας, τον προγραμματιστή, έχοντας κάνει μια
λάθος, αλλά πιο επικίνδυνα, μπορεί να κάνει μια
σχετίζονται με την ασφάλεια λάθος, και γενικά θα δούμε ότι
αυτό είναι το πώς οι μηχανές σε κίνδυνο σε αυτήν την ημέρα, και οι δύο
στον κόσμο του διαδικτύου και προγράμματα της
γραμμή εντολών, όπως αυτό.
>> Εντάξει.
Έτσι string s ισούται με GetString.
Έτσι, πιο συγκεκριμένα τώρα, τι γραμμή 6 κάνουμε εδώ;
Έτσι, η λειτουργία στα δεξιά παίρνει σειρά,
παίρνει πόσα επιχειρήματα;
Εντάξει.
Έτσι κανένας.
Μια μικρή λογική ελέγχου.
Ένα επιχείρημα, πάλι, είναι απλώς μια είσοδος σε μια συνάρτηση να αλλάξει
προεπιλεγμένη συμπεριφορά του με κάποιο τρόπο.
Αλλά σε αυτή την περίπτωση, δεν θέλω να αλλάξει
η συμπεριφορά του GetString.
Ήθελα απλώς να πάρετε μια χορδή.
Έτσι έβαλα τίποτα στις παρενθέσεις, και στη συνέχεια έβαλα ένα
οποίους σημειώνονται ερωτηματικό στο τέλος της γραμμής του κώδικα.
Τώρα, το σύμβολο του ίσον δεν σημαίνει ίση, per se.
Αυτό σημαίνει ανάθεση, πράγμα που σημαίνει ό, τι θέσει παίρνει
εξέρχεται στο δεξί εσωτερικό του ό, τι είναι στα αριστερά.
>> Έτσι, στα αριστερά, μπορούμε να πούμε ότι έχουμε δηλώσει ένα
σειρά που ονομάζεται s.
Και πιο συγκεκριμένα, έχουμε μνήμη που διατίθενται στο εσωτερικό του
το οποίο θα τοποθετήσουμε τα bits που αντιπροσωπεύει μια ακολουθία
χαρακτήρες.
Αλλά για σήμερα, έχουμε διαθέσει
ή δηλωθεί μια σειρά.
Εντάξει.
Έτσι, τώρα μόλις έχω κάνει αυτό, θέλω να συνδέσετε την αξία του
Δεν είναι, η αξία του Δαβίδ.
Έτσι, αυτό είναι λάθος γιατί;
Έτσι, αυτό είναι μόνο κυριολεκτικά το hard-coded s.
Είναι να πω "γεια, s," το οποίο δεν είναι αυτό που θέλω.
Έτσι, μπορώ να το κάνω αυτό.
Το σύμβολο τοις εκατό είναι ένα σύμβολο κράτησης θέσης, αλλά τώρα πρέπει να
περάσει στο εκτυπώσετε ένα δεύτερο επιχείρημα.
Υπενθυμίζουμε ότι τα επιχειρήματα για λειτουργίες που χωρίζονται από
κόμματα, έτσι ώστε ο επόμενος κόμμα εδώ έβαλα μετά από αυτό το γράμμα s.
Και σε αυτό το πλαίσιο τώρα, s είναι η μεταβλητή, και printf,
μετά τη λήψη αυτών των δύο εισόδους -
η χορδή στην αριστερή πλευρά και το μεταβλητό όνομα σχετικά με το δικαίωμα -
θα συνδέσετε το τελευταίο στο πρώτο για εμάς, και
απλά να εκτυπώσετε ένα ωραίο όμορφο string που περιέχει
ό, τι είναι να πληκτρολογήσει μέσα
>> Ας προσπαθήσουμε αυτό.
Πηγαίνοντας να προχωρήσει και σμίκρυνση, πίσω
στο παράθυρο του τερματικού μου.
Μεγέθυνση στο κάτω μέρος εδώ.
Πληκτρολογήστε ξανά κάνει γεια.
Clang φαίνεται να έχει επαναληφθεί.
Πάω να πληκτρολογήσετε. / Γεια, Enter.
Τίποτα δεν φαίνεται να συμβαίνει ακόμα, αλλά είναι σε αυτή την ερώτηση
ότι μπορώ να πληκτρολογήσετε κάτι σαν Nate, Enter, και τώρα έχουμε
Γεια σας, Nate.
Και μπορώ να το κάνω και πάλι με τον Rob, και ούτω καθεξής.
Έτσι, ελπίζουμε ότι τώρα αυτό το πρόγραμμα συμπεριφέρεται όπως έχω την πρόθεση.
>> Τώρα, δεν είναι όλα ότι η φιλική προς το χρήστη.
Δεν έχω καμία ιδέα για το τι να περιμένουν από μένα.
Έτσι μπορούμε να καθαρίσει σίγουρα αυτό μέχρι λίγο.
Επιτρέψτε μου να πάω πίσω μέχρι εδώ, και όχι μόνο σε καταδύσεις και
ζητώντας από το χρήστη για μια σειρά, επιτρέψτε μου να πω ρητά η
χρήστη αυτό που περιμένω.
Έτσι printf ("Εισάγετε ένα string:"
)?
Έτσι, δεν μεταβλητές εδώ.
Δεν υπάρχουν σημάδια τοις εκατό.
Απλά η απλή αγγλική φράση.
Επιτρέψτε μου τώρα να πηγαίνετε προς τα κάτω εδώ και επανάληψη του προγράμματος μου.
Αλλά τίποτα δεν φαίνεται να έχουν αλλάξει.
Γιατί;
Πρέπει να το μεταγλωττίσετε.
Τόσο εύκολο να κάνει λάθος.
Αλλά θα πρέπει όχι μόνο να αποθηκεύσετε το αρχείο, αλλά
μεταγλωττίσετε ξανά το πρόγραμμα.
Και έτσι αν τρέξετε να γεια σου, τώρα Clang τρέχει.
Τώρα μπορώ να τρέξω. / Γεια. Και τώρα βλέπω "Εισαγάγετε μια συμβολοσειρά:".
Εντάξει.
Τώρα είναι λίγο πιο φιλική προς το χρήστη.
Nate, Enter, γειά σου, Nate.
>> Λοιπόν, ας προσπαθήσουμε ξανά αυτό και να αρχίσουμε να σκεφτόμαστε
σχετικά με τις περιπτώσεις γωνία.
Έτσι ακριβώς όπως το Ξυστό, σας ενθαρρύνει ή να
ενθαρρύνονται στο spec για το είδος των σκεφτείτε τι θα μπορούσε να πάει
λάθος αν δεν προβλέπουν πάντα ο χρήστης μπορεί να κάνει.
Bugs, ως εκ τούτου, ενδέχεται να προκύψουν.
Έτσι αρχίζει μια σειρά -
τι είναι μια περίπτωση γωνία εδώ;
Τι είναι ένα σενάριο που έχω, ο προγραμματιστής, δεν θα μπορούσε να έχει
Αναμένεται;
Ναι.
Εντάξει.
Έτσι, ό, τι αν πληκτρολογήσετε έναν αριθμό σαν αυτό;
Εντάξει.
Γι 'αυτό εξακολουθεί να λειτουργεί.
Gramatically δεν έχει κανένα νόημα.
Αλλά τουλάχιστον το πρόγραμμα λειτουργεί.
>> Τι είναι μια άλλη υπόθεση γωνία;
Κάτι που δεν περίμενα.
Ναι;
Εντάξει.
Έτσι, θα μπορούσαμε να κάνουμε κάτι σαν ένα πραγματικά, πραγματικά μεγάλο αριθμό.
Ας το κάνουμε αυτό εδώ.
Επιτρέψτε μου σμίκρυνση για ένα δευτερόλεπτο, επιτρέψτε μου να επισημάνω.
Δεν είναι δυνατή η αντιγραφή και επικόλληση εδώ κάτω.
Εντάξει.
Γι 'αυτό και δεν μπορείτε να αντιγράψετε και να επικολλήσετε σε αυτό το παράθυρο τερματικού, έτσι θα
απλά προσομοίωση.
Επιτρέψτε μου σμίκρυνση, πρόκειται να τυλίξουν.
Είμαι δεν πρόκειται να το κάνει αυτό για πάρα πολύ καιρό, γιατί δεν θα
στην πραγματικότητα να σπάσει σε αυτό το πρόγραμμα.
Αλλά θα μπορούσε.
Enter.
Αλλά δεν το έκανε.
Εντάξει.
Αλλά είναι μια θήκη από γνήσιο γωνία.
Και ο μόνος λόγος που συμπεριφέρθηκε σωστά, έτσι ώστε να
μιλούν, είναι επειδή η λειτουργία GetString CS50 είναι στην πραγματικότητα
σχεδιαστεί κάτω από το καπό, όπως θα δούμε σε λίγες εβδομάδες,
να κατανείμουν αυτόματα όλο και περισσότερο μνήμη RAM, όλο και περισσότερα
μνήμη από το λειτουργικό σύστημα, όταν συνειδητοποιεί, wow,
έχετε πληκτρολογήσει πραγματικά σε κάτι αρκετά μεγάλο χρονικό διάστημα.
Τώρα, αυτό είναι ένα κομμάτι από ένα λευκό ψέμα.
Αν θέλουμε πραγματικά διακοπεί για αρκετό διάστημα και θα πληκτρολογήσει στο
κάτι σαν 5 δισεκατομμύρια χαρακτήρες στο πληκτρολόγιο
εδώ, ή πραγματικά χτύπησε copy-paste αρκετά, είμαστε πολύ πιθανόν
θα μπορούσε να προκαλέσει το πρόγραμμα για την συντριβή.
Λίγο πιο δύσκολο για την προσομοίωση ότι με ένα πεπερασμένο
χρονικό διάστημα.
>> Τι είναι μια άλλη υπόθεση γωνία θα μπορούσαμε να προσπαθήσουμε;
Ναι;
Ναι.
Γιατί λοιπόν να μην απαντάμε τίποτα;
Γι 'αυτό και πραγματικά πρέπει να λάβει κάποια μέτρα, διότι διαφορετικά
Το πρόγραμμα πρόκειται να κάθεται εκεί όλη την ημέρα αναβοσβήνει.
Αλλά αν απλά πατήστε Enter -
Εντάξει, τώρα, εξακολουθεί να φαίνεται λάθος.
Μήπως δεν συντριβή, αλλά ίσως υπάρχει τώρα μια ευκαιρία να
αρχίσει η εφαρμογή μιας πιο αυστηρό πρόγραμμα
που ελέγχει στην πραγματικότητα.
Και αν η σειρά, η φράση, η λέξη που
πληκτρολογήσει έχει μήκος 0, καλά, ίσως θα έπρεπε να φωνάξει το
χρήστη, ή να του πω ή να την εισαγάγετε μια συμβολοσειρά και πάλι, έτσι ώστε να
έχουμε πραγματικά να πάρει αυτό που μοιάζει με τη σωστή συμπεριφορά και δεν
μόλις ολοκληρωθεί εποπτεία από την πλευρά μου.
>> Ερώτηση στην πλάτη;
Δεκαδικός αριθμός.
Έτσι, θα μπορούσαμε να προσπαθήσουμε ότι, πάρα πολύ.
1,10000005.
Φαίνεται ότι αυτό πρόκειται να δουλέψουν πραγματικά καλά.
Και που πραγματικά αναμένεται.
Ακόμα κι αν θα μπορούσε να πληκτρολογήσει τον αριθμό που υπάρχει, ή
μεγαλύτερο αριθμό νωρίτερα, όταν συνειδητοποιήσουμε ότι είμαστε πληκτρολογώντας τον χρήστη
εισόδου και είμαστε χρησιμοποιώντας τη λειτουργία GetString, δεν
ανεξάρτητα από το αν αυτό που γράφω μοιάζει με έναν αριθμό.
Υπενθυμίζεται ότι σύμφωνα με την ASCII, τα πάντα για σας
πληκτρολόγιο έχει μια αριθμητική αξία που μπορεί να αντιστοιχιστεί σε ένα
χαρακτήρα, μια χαρα.
Έτσι, στην περίπτωση αυτή, ακόμη κι αν θα μπορούσε να πληκτρολογήσετε έναν αριθμό, ο
ο υπολογιστής πρόκειται να σκέφτομαι, να το πω έτσι, ως μια σειρά -
κάτι που μοιάζει με έναν αριθμό, αλλά είναι
δεν είναι πραγματικά ένα αριθμό.
Αλλά αυτό είναι πραγματικά ένα τέλειο segue, γιατί τώρα μπορούμε να
μετάβαση στην πραγματικότητα να γράφει προγράμματα που
χρησιμοποιούν άλλους τύπους δεδομένων.
>> Έτσι, εκτός από τη χρήση χαρακτήρες, ή μάλλον, χρησιμοποιώντας εκτός από χορδές,
συνειδητοποιήσουμε ότι έχουμε άλλους τύπους δεδομένων σε C, καθώς και σε
άλλες γλώσσες.
Μια χαρα, όπως υποδηλώνει το όνομα, είναι ένα μόνο χαρακτήρα.
Ο πλωτήρας είναι Μιατιμήκινητήςυποδιαστολής, και αυτό είναι μόνο ένα φανταχτερό
τρόπος για να πούμε ένα πραγματικό αριθμό - κάτι που έχει ένα δεκαδικό
σημείο αυτό με κάποια αριθμοί στα αριστερά και / ή δεξιά.
Ένας int είναι ένας ακέραιος αριθμός, ο οποίος είναι απλά ένας αριθμός, όπως 123.
Και τώρα πιο ενδιαφέροντα είναι τα πράγματα όπως διπλό.
Τι λέμε ένα διπλό ήταν η τελευταία φορά;
Είναι 64, δεξιά.
Έτσι, ενώ συνήθως ένας πλωτήρας είναι 32-bit -
έτσι είναι αυτό το καιρό στη μνήμη, χρησιμοποιεί 32 μηδενικά και αυτοί να
αντιπροσωπεύουν τις αξίες - ένα διπλό είναι κυριολεκτικά διπλάσιο από αυτό, τα οποία
σημαίνει ότι μπορεί να αντιπροσωπεύει είτε μεγαλύτερους αριθμούς, ή
μπορείτε να αντιπροσωπεύουν περισσότερο ακριβείς αριθμούς.
Έτσι, μπορείτε να έχετε περισσότερους αριθμούς μετά το δεκαδικό σημείο, αλλά
όπως είπε ο υπότροφος στο βίντεο, ακόμη και κάτι απλό
εννοιολογικά, όπως 1/3 δεν μπορεί να εκπροσωπείται από ένα ακριβώς
υπολογιστή, γιατί τελικά θα τρέξει από bits, και
ως εκ τούτου μπορείτε να το κάνετε μόνο .33333333 τόσες πολλές φορές, σε
σημείο το οποίο απλά πρέπει να πω ότι είμαι από την εκπροσώπηση
χώρο, έχω απλά να ονομάσουμε μια ημέρα και να την εκπροσωπήσει
κάπως ασαφής αρέσει αυτό.
Και πολύ καιρό -
ηλίθιο όνομα, αλλά αυτό συμβαίνει γιατί υπάρχει ένας τύπος δεδομένων που είναι γνωστή ως
καιρό σε C το οποίο συμπτωματικά είναι συχνά 32 bits, ακριβώς όπως ένα
int είναι 32 bits, αλλά ένα πολύ μεγάλο είναι
γενικά 64 bits.
Έτσι, αυτό σημαίνει απλά μπορείτε να αντιπροσωπεύουν μεγαλύτερο
αριθμούς από αυτό.
>> Εντάξει.
Έτσι, αν πραγματικά θέλετε να ξεκινήσετε πράγματα που εκπροσωπούν,
μπορεί να χρειαστεί πιο εξελιγμένα είδη, και
γι 'αυτό έχουμε σειρά.
Έτσι, στη βιβλιοθήκη CS50, που ονομάζεται αρχείο cs50.h, έχουμε
στην πραγματικότητα δηλώνεται ο τύπος δεδομένων, να το πω έτσι, που ονομάζεται χορδή,
αλλά χορδών δεν υπάρχει στην πραγματικότητα.
Αυτό είναι, και πάλι, ένα από αυτά τα στρώματα θα πάμε να φλούδα
πίσω σε μια εβδομάδα ή δύο και πετάξτε το, και στην πραγματικότητα
ματιά κάτω από την κουκούλα σε ό, τι ένα string είναι στην πραγματικότητα, και
πώς έχει εκπροσωπούνται.
Είμαστε, επίσης, πρόκειται να εξετάσουμε Boolean τιμές.
>> Έτσι, ό, τι ήταν ένα bool στο πλαίσιο του Scratch;
Είναι αληθές ή ψευδές.
Έτσι είναι απλά μια τιμή που είναι αληθής ή ψευδής, εντός ή εκτός, 1 ή
0, ωστόσο, θέλετε να δείτε τον κόσμο.
Έτσι, Γ, χάρη στη βιβλιοθήκη CS50, η οποία με τη σειρά της
περιλαμβάνει μια άλλη βιβλιοθήκη κάτω από την κουκούλα, έχουμε
πρόσβαση σε ένα τύπο δεδομένων που λέγεται bool, η οποία θα
κυριολεκτικά μας επιτρέπουν να ορίσετε τις τιμές αληθής ή ψευδής να
τα πράγματα σε ένα πρόγραμμα.
>> Ας προχωρήσουμε εδώ και να γράψετε ένα μικρό πρόγραμμα που
κάνει κάτι που περιλαμβάνουν αριθμούς αντ 'αυτού.
Έτσι, επιτρέψτε μου να πάω πίσω στην συσκευή CS50, επιτρέψτε μου να προχωρήσει και
δημιουργήσετε ένα νέο αρχείο που ονομάζεται εδώ -
ας πούμε κάτι απλό, όπως math.c.
Εντάξει.
Και τώρα πάμε μέχρι την κορυφή του προγράμματός μου, είμαι
πρόκειται να κάνει το συνηθισμένο -
# Include , έτσι ώστε να μπορώ να χρησιμοποιήσω
printf, int main (void) -
θα επανέλθουμε, τελικά, τι σημαίνει int
εδώ, τι σημαίνει κενό εδώ, αλλά για τώρα, απλά γνωρίζουμε ότι
θα πρέπει να ξεκινήσετε προγράμματα όπως αυτό.
Τώρα είμαι πρόκειται να πάει μπροστά και να πω κάτι λίγο
διαφορετικές - printf ("Δώσε μου έναν αριθμό:"
)?.
Στη συνέχεια, Πάω να κάνω int n = GetInt, επειδή
στροφές από GetInt είναι μια άλλη λειτουργία στη βιβλιοθήκη CS50
εκτός GetString.
Και τώρα πάω να κάνω κάτι ηλίθιο, όπως το "ευχαριστώ
για το δ%, "για δεκαδικός ακέραιος, και στη συνέχεια κόμμα n, και
στη συνέχεια επιστρέφουν 0.
Έτσι, και πάλι, επιστρέφει 0 έχει τίποτα να κάνει με τον αριθμό είμαι
ζητώντας από το χρήστη.
Απλά σημαίνει στο τέλος ότι όλοι, προφανώς, είναι καλά.
>> Έτσι, επιτρέψτε μου να πάει κάτω στο παράθυρο του τερματικού μου εδώ.
Επιτρέψτε μου να πληκτρολογείτε μαθηματικά, εισάγετε.
Και κάτι δεν πάει καλά.
Κάντε τα μαθηματικά δεν λειτούργησε.
Εδώ είναι το πρώτο από τα μηνύματα λάθους μας.
Γιατί;
Μια περίεργη, αλλά -
Ναι.
Έτσι cs50.h.
Έτσι, και πάλι, ειδικά νωρίς, θα γράψετε το πρώτο σας
πρόγραμμα για PSET 1 σε τμήματα, σε ώρες γραφείου, και
ειλικρινά, θα είναι μερικές φορές συντριπτική ό, τι αυτά τα πράγματα
Τα πραγματικά λέει.
Αλλά θα συνειδητοποιήσει πολύ γρήγορα θα αρχίσουν να πέφτουν
σε κάδους όπου αυτό σημαίνει ότι έχετε αφήσει έξω από μία
του # περιλαμβάνει στην κορυφή του αρχείου.
Και Clang, ο compiler, είναι να σας ενημερώσουμε σχετικά με αυτό
λέγοντας, μάλλον ευφάνταστο, σιωπηρή δήλωση του
GetInt λειτουργία δεν είναι έγκυρη.
>> Εντάξει.
Λοιπόν, τι σημαίνει αυτό;
Αυτό σημαίνει ότι μόλις έχετε δηλώσει εμμέσως GetInt σε
η αίσθηση ότι δεν έχετε δηλώσει ρητά.
Για να δηλώσει ρητά int, θα πρέπει να διδάξουν
Clang ότι υπάρχει.
Και η πολύ απλή λύση για αυτό είναι να διδάξει με
συμπεριλαμβανομένης της παρούσας άλλο αρχείο, cs50.h, σε
η κορυφή του αρχείου σας.
Επειδή στην κυριολεξία, τι # include δεν είναι λέει Clang
λίγο πολύ να πάει να βρείτε το αρχείο που ονομάζεται cs50.h, αντιγραφή,
επικολλήσετε αυτόματα στην κορυφή του προγράμματός μου για μένα,
και στη συνέχεια να μετατρέψετε τον πηγαίο κώδικα για μηδενικά και μονάδες.
Αλλά αυτό προφανώς θα είναι πολύ κουραστική, αν εμείς οι άνθρωποι είχαν
για να πάει αντιγραφή και επικόλληση αυτών των μεγάλων αρχείων όλη την ώρα,
# include έτσι ακριβώς κάνει όλα αυτά αυτόματα, χωρίς
muddying κωδικό μου βιβλιοθήκη με κάποιον άλλο.
Και μια βιβλιοθήκη είναι απλώς άλλο ένα αρχείο που περιέχει και λειτουργίες
άλλα πράγματα που κάποιος άλλος έχει γράψει, ότι είμαστε
μόχλευση για δικό μας όφελος.
>> Εντάξει.
Ας προσπαθήσουμε ξανά.
Κάντε τα μαθηματικά.
Enter.
Καλή.
Έτσι, αυτό φαίνεται να έχουν εργαστεί.
Έτσι, επιτρέψτε μου να τρέξει τώρα τα μαθηματικά?. / Μαθηματικά.
Εισάγετε μου δίνει έναν αριθμό, 123.
Ευχαριστώ για το 123.
Τώρα ας προσπαθήσουμε άλλη περίπτωση γωνία.
Μια συμβολοσειρά είναι αρκετά γενναιόδωρη, επειδή ένα
συμβολοσειρά μπορεί να είναι οτιδήποτε.
Μπορεί να μοιάζουν με αριθμούς, μοιάζουν
χαρακτήρες, μοιάζουν με λόγια.
Αλλά ένας int είναι μια int.
Έτσι τώρα, αν είμαι ο χρήστης είναι δύσκολο, και αυτό είναι που λέει "Δώσε μου
ένας αριθμός, "τι θα γίνει αν προσπαθώ να κάνω κάτι σαν 0,1;
Λοιπόν, αυτό είναι ένας αριθμός, και είναι συνεπής με την
γραμματική Θα χρησιμοποιηθεί εδώ, αλλά κάτω από την κουκούλα, είμαι της
Φυσικά χρησιμοποιώντας το GetInt λειτουργία.
>> Ας δούμε τι θα συμβεί.
Εισάγετε, δοκιμάστε ξανά.
Εντάξει.
Επιτρέψτε μου να είναι δύσκολη και απλά πατήστε Enter και πάλι.
Enter, Enter.
Μέχρι τώρα φαίνεται ότι GetInt είναι λίγο πιο
ισχυρή από ό, τι GetString.
Εμείς, το προσωπικό, εφαρμόζονται με τέτοιο τρόπο ώστε αν παρατηρήσετε
δεν έχετε δώσει ένα int - και μια int είναι ένας δεκαδικός αριθμός
περιέχει μηδενικά, αυτοί, δυάρια, τριάρια, τεσσάρια, πεντάρια, εξάρια,
εφτάρια, οχτάρια, εννιάρια ή.
Και αυτό είναι αυτό.
Δεν δεκαδικά ψηφία, χωρίς χαρακτήρες, όχι στίξης.
Φαίνεται ότι πρέπει να συνεργαστούμε.
Έτσι, επιτρέψτε μου να προσπαθήσω τέσσερα, πέντε, έξι, και αυτό μου παίρνει μέσα.
Έτσι, πραγματικά, να είναι πρωκτικό εδώ, θα μου είπης "Δώσε μου
ένας ακέραιος ", προκειμένου να μεταφέρει στον χρήστη
ακριβώς ό, τι σκοπεύω.
>> Τώρα ας σκεφτούμε κάτω από την κουκούλα.
Εμείς δεν πάμε να δούμε πώς cs50.h υλοποιείται σήμερα,
ότι η βιβλιοθήκη.
Αλλά αν συνεχίζει λέγοντας ξανά, ξανά, ξανά, τι προγραμματισμού
κατασκευάσει είμαι κατά πάσα πιθανότητα τη χρήση κάτω από την κουκούλα για να
εφαρμόσουν αυτό;
Έτσι απλά ένα βρόχο, έτσι δεν είναι;
Μία από τις πιο απλές ιδέες που είδαμε στο Scratch.
Η Forever κατασκευή, η Α 'Επαναληπτική κατασκευή.
Προφανώς, σε αυτό το πρόγραμμα, κάτω από την κουκούλα, ακόμη και
αν και είναι γραμμένο σε C και όχι το μηδέν, το κάνει
κάτι που ονομάζεται ισοδύναμη με για πάντα, αν ο χρήστης δεν έχει
πληκτρολογείται σε έναν ακέραιο αριθμό, ας πούμε ξανά, ξανά, ξανά, ξανά, έτσι
τελικά όταν το κάνουμε να πάρει έναν ακέραιο αριθμό, τότε
ξεφύγει από το βρόχο.
>> Έτσι, ό, τι άλλες λειτουργίες μπορούμε να χρησιμοποιήσουμε εδώ στη βιβλιοθήκη του CS50;
Λοιπόν, το είδος των προφανείς, τουλάχιστον με βάση το
τύποι δεδομένων που ξέρουμε τώρα υπάρχουν.
Υλοποιήσαμε GetString, GetInt, αλλά καθ 'όλη τη
πρώτες εβδομάδες του όρου, μπορείτε επίσης να χρησιμοποιήσετε και GetFloat
GetDouble και GetLongLong για να πάρει ακριβώς το
τους τύπους δεδομένων που θέλετε.
Επειδή η βασική λεπτομέρεια εδώ είναι ότι σε αντίθεση με ορισμένες γλώσσες,
όπως Python και Ruby, όπου δεν είναι απαραίτητο να
δηλώνει τον τύπο δεδομένων μιας μεταβλητής -
δεν έχετε να πείτε στον υπολογιστή τι είδους πράγματα
πρόκειται να τεθεί σε μεταβλητή -
σε C, θα πρέπει να είναι πάντα τόσο ακριβής.
Έτσι, εάν θέλετε μια μεταβλητή που ονομάζεται n, ένα μεγάλο κομμάτι της αποθήκευσης
ότι στην περίπτωση αυτή συμβαίνει να είναι 32 bits από την σύμβαση, θα
Πρέπει να πω ότι ο υπολογιστής είναι αυτά τα κομμάτια
πρόκειται να αποθηκεύσετε έναν αριθμό -
δεν είναι χαρακτήρας, όχι μια σειρά, δεν είναι float.
Και αυτό αντιμετωπίζει το ζήτημα που ουσιαστικά
έτρεξε σε την περασμένη εβδομάδα.
Αν είμαστε χρησιμοποιώντας μηδενικά και μονάδες αριθμούς να αντιπροσωπεύουν όχι μόνο
αριθμούς, αλλά και ως Β και Cs, πώς στον κόσμο είναι μια
ο υπολογιστής πρόκειται να γνωρίζετε ότι αυτό το μοτίβο των bits στην πραγματικότητα
αντιπροσωπεύει τον αριθμό 65, σε αντίθεση με αντιπροσωπεύει το
Η επιστολή, η οποία συμπτωματικά, σύμφωνα με
ASCII, θυμάμαι, ήταν ισοδύναμη με 65;
>> Έτσι, αυτοί οι τύποι δεδομένων που παρέχουν το πλαίσιο για τον υπολογιστή, έτσι
ότι γνωρίζει αν αυτά τα κομμάτια θα πρέπει να ερμηνευθεί ως ένα
int ή ως συμβολοσειρά.
Όλες οι ερωτήσεις, στη συνέχεια, σχετικά με αυτό;
Ναι;
David J. Malan: Καλή ερώτηση.
Αν πάρουμε από stdio.h, θα αποθηκεύσετε το αρχείο -
επιτρέψτε μου να πάει κάτω στο παράθυρο του τερματικού και να τρέξει τα μαθηματικά, ζουμ
και εισαγάγετε -
τώρα έχω ένα διαφορετικό σφάλμα, επειδή είμαι σιωπηρά
δηλώνοντας τι λειτουργεί τώρα;
Printf.
Έτσι, τώρα έχω δημιουργήσει ένα νέο πρόβλημα, η λύση του οποίου είναι
ουσιαστικά η ίδια.
Θέλω να διασφαλίσει την πλάτη.
ΚΟΙΝΟ: [δεν ακούγεται]
David J. Malan: Αχ.
Έτσι, αν βγάλω -
Εντάξει, ναι.
Έτσι, αν μπορώ να αφαιρέσω συμπερίληψη του προτύπου I / O βιβλιοθήκης μέχρι
εδώ, και στη συνέχεια λέτε αν μπορώ να απαλλαγώ από printf, να
απαλλαγούμε από printf;
Ναι.
Αυτό θα πρέπει να εργαστεί, γιατί δεν είμαι πλέον χρησιμοποιώντας οποιαδήποτε - κραυγών.
Εγώ απλά ψέματα;
Ω, εντάξει.
Αυτό δεν θα λειτουργήσει λόγω της μια νέα λάθους που μόλις εισαχθεί.
Και αυτό είναι λίγο πιο αυτονόητα.
>> Ποιο είναι το πρόβλημα;
Αχρησιμοποίητα μεταβλητή n.
Έτσι αυτό το σφάλμα είναι το αποτέλεσμα της μας έχει διαμορφωθεί η
συσκευή να είναι ιδιαίτερα σχολαστικοί, να φωνάξει σε πραγματικά
σας για κάθε πιθανό λάθος, ακόμα και αν είναι το είδος της
ένα μη-μοιραίο λάθος σαν αυτό - είναι πραγματικά ένα τόσο μεγάλο
αντιμετώπιση που διέθεσε int, βάλτε έναν αριθμό σε αυτό, και στη συνέχεια
απλά δεν έκανε τίποτα με αυτό;
Έτσι λειτουργικά, ηο.
Αυτό δεν πρόκειται να σπάσει το πρόγραμμα.
Είναι ακριβώς το είδος των ηλίθια, έτσι δεν είναι;
Δεν υπάρχει καμία αξία να έχει ζητήσει τον αριθμό αυτό, αποθηκεύονται
αυτό σε μια μεταβλητή, αν δεν πρόκειται ποτέ να κάνει τίποτα
με αυτό, αν το εκτυπώσετε ή να το αποθηκεύσετε.
Έτσι, στην περίπτωση αυτή, Clang αναγνωρίζει ως πολύ, και
το λέει αχρησιμοποίητο μεταβλητή n.
>> Έτσι, μπορούμε να το διορθώσετε αυτό, αν θέλουμε πραγματικά.
Αλλά και πάλι, αυτό δεν είναι καλό προγραμματισμό τώρα.
Γι 'αυτό και θα μπορούσε να κάνει ακριβώς αυτό -
κατεβαίνουν εδώ, επιτρέψτε μου να καθαρίσετε την οθόνη, κάνουν μαθηματικά.
Αυτό λειτουργεί.
Τώρα μπορώ να τρέξω το πρόγραμμα μαθηματικά μου, παίρνει εισόδου -
καλά, αυτό ήταν κακό.
Λαμβάνει την είσοδο, και αυτό είναι το μόνο που κάνει, σε αυτή την περίπτωση.
>> Έτσι, στην πραγματικότητα, ας προσπαθήσουμε μια άλλη περίπτωση γωνία που
δεν σκέφτονται νωρίτερα.
Σε αυτή την περίπτωση - εδώ, ας πάμε πίσω στο ένα που είναι μια
λίγο πιο φιλικό προς το χρήστη.
Επιτρέψτε μου να πάω πίσω εδώ και τρέχει πάλι να κάνει τα μαθηματικά.
Ωχ, τι έκανα λάθος;
Πήρε να υποχωρήσει περαιτέρω.
Εντάξει.
Τώρα είμαστε πίσω στην αρχική του κατάσταση, όπου όλοι
είναι ενδεχομένως καλά.
Και τώρα αν τρέχω μαθηματικά, 123 φαίνεται να λειτουργεί.
Αλλά αυτό δεν είναι πραγματικά μια αποτελεσματική απόδειξη, να πω
εντάξει, ότι λειτουργεί.
789, που λειτουργεί.
Ώρα να υποβάλουν.
Επειδή δεν υπάρχουν άλλες περιπτώσεις γωνία εδώ.
Μια συμβολοσειρά δεν πραγματικά να μας δώσει πολλά προβλήματα με την πληκτρολόγηση ενός
σωρό χαρακτήρες.
Αλλά τι γίνεται αν πληκτρολογήσετε σε αυτό;
Χτύπημα τον αριθμό 1 ένα πάρα πολύ, πάρα πολύ εδώ -
εντάξει, είναι να πάρει λίγο βαρετή, έτσι είμαι πρόκειται να
σταματούν εδώ, και θα πάω να πατήστε Enter.
>> Τι στο διάολο συνέβη ακριβώς;
Έτσι αυτό μπορεί πραγματικά να εξηγηθεί.
Έτσι, δεν θα το πάρετε ως δυαδικό;
Μια καλή σκέψη, αλλά όχι, δεν είναι το γεγονός ότι χρειάστηκαν
ως δυαδική, διότι πράγματι, αυτό ήταν ακριβώς το είδος της μια
σύμπτωση.
Μπορούμε να το κάνουμε αυτό και πάλι.
Έτσι, δεν υπάρχει 2 στο δυαδικό σύστημα, το οποίο είναι
πιθανώς αρκετά ούτως ή άλλως.
Enter.
Έτσι, αυτό δεν ήταν το πρόβλημα.
Τι άλλο;
Ακριβώς.
>> Έτσι, σκεφτείτε ότι πίσω σε ό, τι ένας int είναι στην πραγματικότητα.
Είναι 32 bits που συλλογικά ερμηνεύονται
ως αριθμός.
Αν έχετε 32 bit, αυτό σημαίνει ότι κάθε ένα από τα κομμάτια μπορεί να είναι
το 0 ή το 1, 0 ή 1.
Έτσι, αυτό σημαίνει ότι υπάρχουν δύο δυνατότητες για αυτό το κομμάτι,
δύο δυνατότητες για αυτό, δύο δυνατότητες για αυτό
λίγο - έτσι ώστε να είναι 2 φορές 2 φορές -
έτσι ώστε να είναι 2 στην 32 δύναμη είναι ο συνολικός αριθμός των
παραλλαγές του μηδέν και αν έχουν 32
κράτησης θέσης, ή μηδενικά αυτά, μπροστά σας.
Έτσι, αν έχω 2 στο 32, μαθηματικά, που είναι ό, τι;
Γι 'αυτό είναι πολύ.
Είναι 4 δισ. ευρώ, ή να δώσει.
Και 4 δισεκατομμύρια δεν φαίνεται να είναι αυτό που τυπώθηκε από εδώ.
Στην πραγματικότητα, αυτό φαίνεται πιο κοντά στο 2 δισ. ευρώ.
Αλλά αυτό δεν είναι τυχαίο.
Το γεγονός ότι ο υπολογιστής έχει παρερμηνευθεί τεράστιο αριθμό μου,
τεράστια σειρά μου από αυτά και στη συνέχεια τεράστια σειρά μου δυάρια,
ως 2 δισεκατομμύρια περίπου, εξηγείται πώς;
Υπάρχει ένα όριο στο int.
Υπάρχει σίγουρα μια μέγιστη τιμή που μπορείτε να εκπροσωπεί.
Αλλά είναι συνήθως 4 δισ. ευρώ, έτσι δεν είναι;
Αν 2 στο 32 είναι περίπου 4 δισ. ευρώ, που μοιάζει με
αυτό είναι το μεγαλύτερο αριθμό.
Έτσι, δεν είναι ένα υπόλοιπο, αλλά μια καλή σκέψη.
Οι αρνητικοί αριθμοί.
Έτσι, αν έχετε 4 δισεκατομμύρια πιθανών πράγματα που μπορείτε να
αντιπροσωπεύουν με αυτές τις διάφορες παραλλαγές των 32 και 0s
1s, επίσης, στέκεται στο λόγο ότι εμείς οι άνθρωποι μπορεί να θέλουν να
αντιπροσωπεύουν όχι μόνο θετικών ακεραίων
αλλά αρνητικοί ακέραιοι.
Και πράγματι, αυτό είναι η υπόθεση ότι η C κάνει.
Έτσι, με 32 bits, μπορείτε να αντιπροσωπεύουν περίπου το αρνητικό 2
δισ. ευρώ σε όλη τη διαδρομή μέχρι θετική 2 δισ. ευρώ.
Και έτσι σε αυτή την περίπτωση, αυτό που βλέπουμε πραγματικά είναι ακριβώς
το περιθώριο της παραγωγικής ικανότητας του ακεραίου μας, και έχουμε, έτσι
να μιλήσει, ξεχείλισε έναν ακέραιο.
Προσπαθήσαμε να γεμίζουν τα περισσότερα κομμάτια σε αυτό από ό, τι μπορεί στην πραγματικότητα να χωρέσει.
Έτσι, το τελικό αποτέλεσμα είναι ότι έχουμε ουσιαστικά όλες τις 1 bit.
Έχουμε γυρίσει όλα τα κομμάτια μας, έχουμε προσπαθήσει να αντιπροσωπεύουν
ο μεγαλύτερος δυνατός αριθμός, αλλά είναι σαφές ότι δεν σχεδόν
αρκετά μεγάλη για να αντιπροσωπεύουν τα δύο πράγματα που έχω πληκτρολογήσει μόνο μέσα
Ναι;
ΚΟΙΝΟ: [δεν ακούγεται]
>> David J. Malan: Καλή ερώτηση.
Γιατί δεν μπορούμε απλά να δηλώνετε ότι αρνητικό
υπογράψουν, όπως ακριβώς ένα χαρακτήρα;
Γι 'αυτό και θα μπορούσε απόλυτα, και θα μπορούσαμε στη συνέχεια να αποθηκεύσετε
ένα πρόσθετο bit.
Αλλά είστε ακόμα πρόκειται να πρέπει να εκπροσωπεί την παύλα, και
που πρόκειται να σας κοστίσει τουλάχιστον κάτι,
πιθανώς λίγο.
Οπότε ναι, θα μπορούσαμε να έχουμε 32 bit που χρησιμοποιούνται για τον αριθμό μας, αλλά τώρα
χρειαζόμαστε ένα άλλο κομμάτι που χρησιμοποιείται για την εξόρμηση μας
σύμβολο, το αρνητικό πρόσημο.
Μέχρι τώρα έχουμε 33 bit αξίες, που θα μπορούσαμε να κάνουμε, αλλά είναι
ακριβώς δεν είναι ο τρόπος που το κάνει.
Κάναμε μια απόφαση πριν από χρόνια κλήση, 32 bit είναι το είδος του
μονάδα μέτρησης εδώ.
Έτσι θα πάμε να χρησιμοποιήσετε ένα από αυτά τα bits αποτελεσματικά
αντιπροσωπεύουν αρνητικότητα, και 31 bits για να αντιπροσωπεύουν τον αριθμό.
Άλλες ερωτήσεις;
Εντάξει.
Αυτός είναι ένας πολύ.
Γιατί δεν πάμε μπροστά και να διαρκέσει πέντε λεπτά διάλειμμα μας εδώ;
>> Εντάξει.
Έτσι, και πάλι, να μην υπερτονίζουν τις μαθηματικές εφαρμογές
του προγραμματισμού, ας απλά κόβω από αυτό το ένα παράδειγμα
πριν προχωρήσουμε σε άλλες δομές, μόνο και μόνο επειδή
θα απεικονίζουν μερικά κοινά σημεία εμπόδιο σε κάποια από
τα βασικά, όταν πρόκειται για την συγγραφή προγραμμάτων.
Σε αυτή την περίπτωση, να κάνει αριθμητικές εκφράσεις που έχουν κάποια
ενδιαφέρουσα σχέση με την σύνταξη.
>> Έτσι, αυτό είναι απλώς μια φόρμουλα με την οποία μπορούμε να μετατρέψουμε
θερμοκρασιών από Fahrenheit σε Κελσίου.
Αν δεν θυμάστε, αυτό είναι ακριβώς ο τύπος.
Έτσι, αν συνδέσετε Fahrenheit αξία του 32 βαθμούς, η οποία είναι
δέσμευση, η οποία πρόκειται να είναι 32 μείον 32 είναι 0, και μάλιστα,
0 σε Κελσίου είναι επίσης μηδέν.
Έτσι, γρήγορη λογική ελέγξετε εκεί - αυτό είναι το γνωστό τύπο.
Επιτρέψτε μου να πάει πάνω στη συσκευή, όμως, και να αρχίσει
γράφοντας ένα πρόγραμμα που ονομάζεται, όπως, F2C? "Φαρενάιτ να
Γ Κελσίου τελεία ".
Και πάνω στην κορυφή εδώ, θα πάω ξεκινούν με # include
stdio.h, και πάω να κάνω int main (void), και
και πάλι, θα επανέλθουμε στο μέλλον ως προς το τι σημαίνει int
και εκεί τι σημαίνει κενό εκεί.
Και τώρα επιτρέψτε μου να προχωρήσει και να εφαρμόσει ένα πρόγραμμα που
ουσιαστικά κάνει αυτό για μετατροπή μας.
>> Έτσι printf, ας πούμε, η θερμοκρασία σε βαθμούς Φαρενάιτ.
Και τότε επιτρέψτε μου να πάμε μπροστά και να πάρει την τιμή από τον χρήστη.
Τι είδους τιμή πρέπει να πάρω από τον χρήστη αν θέλω
να μου δώσει μια θερμοκρασία σε βαθμούς Φαρενάιτ;
Ναι;
Τι θα προτείνατε;
Ναι.
Έτσι, float αισθάνεται αρκετά λογικό.
Έχουμε, και πάλι μόνο μερικές επιλογές που
έχουμε δει μέχρι στιγμής.
Έχουμε τα πράγματα όπως char, διπλό, float, int, πολύ καιρό,
bool, string.
Έτσι, από αυτά, float αισθάνεται αρκετά λογικό.
Θα μπορούσαμε να χρησιμοποιήσουμε ένα διπλό, δεξιά, επειδή αν θέλουμε πραγματικά να
αντιπροσωπεύουν θερμοκρασία ενός ανθρώπου -
98,60000 -
θα μπορούσαμε να χρησιμοποιήσουμε 64 bits για να το κάνουμε αυτό, αλλά αισθάνεται σαν
υπερβολή για τη θερμοκρασία.
Οπότε ας πάμε με πλωτήρα.
Τώρα χρειάζομαι μια μεταβλητή.
Ακριβώς για να κρατήσει τα πράγματα απλά, Πάω να το ονομάσουμε f, αλλά εγώ
θα μπορούσε εξίσου σωστά αποκαλούν θερμοκρασία,
αλλά είτε είναι μια χαρά.
Έτσι, float f = GetFloat.
Από τη στιγμή που έχω τώρα έχουν αποφασίσει να χρησιμοποιήσει GetFloat, εν τούτοις,
πρέπει να κάνει μια διόρθωση.
Ναι.
Γι 'αυτό και πρέπει να περιλαμβάνουν # , αλλιώς ο compiler είναι
πρόκειται να φωνάζεις σε μας.
Τώρα που έχω ένα float, επιτρέψτε μου να πάμε μπροστά και να κάνουμε το
μετατροπή.
>> Έτσι, η πρώτη, επιτρέψτε μου επίσης να πάρετε στη συνήθεια της εδώ
σχολιάζοντας τον κωδικό μου.
Έτσι, και πάλι, ένα σχόλιο είναι απλά ένα συμβολισμό για την ανθρώπινη που είναι
δεν αποτελεί μέρος του προγράμματος per se, αλλά το ένα, σας βοηθά
καταλάβουμε τι κάνατε το επόμενο πρωί, ή το επόμενο
μήνα, βοηθά τους συναδέλφους σας να καταλάβει τη διδασκαλία τι κάνατε
ή ό, τι σκόπευε να κάνει, γι 'αυτό είναι
γενικά πολύ καλή πρακτική.
Κάθε λίγες γραμμές κώδικα, να γράψετε ένα σχόλιο για
τον εαυτό σας ή συνάδελφο σας.
Μέχρι εδώ, θα πάω να πω, "Ρωτήστε τον χρήστη για τη θερμοκρασία."
Δεν πρέπει να είναι μια ολοκληρωμένη πρόταση, απλώς μια σύντομη φράση.
Αλλά η ιδέα πίσω από σχολιάζοντας το C είναι ότι το καθένα από σας
τα σχόλια θα πρέπει να εξουσιοδοτήσει - ή, ας πούμε, ένα TF ή έναν συνάδελφο -
να ξαφρίσει το πρόγραμμά σας και να ξέρετε ακριβώς τι κάνει, με το να μην
έτσι η ανάγνωση πολύ τον κώδικα, αλλά διαβάζοντας τα σχόλια, τα οποία
θα πρέπει να είναι σύντομη και σαφής.
Εντάξει, έτσι τώρα επιτρέψτε μου να πάμε μπροστά και να πει, "Μετατροπή
Φαρενάιτ σε Κελσίου. «Έτσι είμαι πρόκειται να πάει μπροστά και να κάνουμε,
ας πούμε, γ επιπλέουν.
Θα συνεχίσουμε να Κελσίου ως Μιατιμήκινητήςυποδιαστολής.
>> Και επιτρέψτε μου να λάβει μια μαχαιριά σε αυτό.
Ο τύπος είναι, και πάλι, μέχρι εδώ.
Όπως 5/9 φορές F μείον 32.
Ας το κάνουμε αυτό.
Έτσι 5 που διαιρούνται με 9, μείον -
κραυγών, μου μπέρδεμα πάνω ήδη.
Times.
Έτσι, 5/9 φορές F μείον 32.
Έτσι F μείον 32, ερωτηματικό.
Και τώρα, εδώ κάτω, είμαι πρόκειται να πάει μπροστά
και να πω, εκτύπωση αποτέλεσμα.
Και αυτό το μέρος είναι εύκολο. Printf.
Πώς μπορώ να πάω σχετικά με την εκτύπωση αυτή;
Λοιπόν, θα μπορούσα να πω "Ο αριθμός αυτός είναι σε βαθμούς Κελσίου% f \ n",
μόνο για ορισμένες αισθητική.
Και τότε τι αξία θέλω να συνδέσετε ως εδώ printf του
Το δεύτερο επιχείρημα;
Εντάξει.
Έτσι απλά γ.
Έτσι, θα αρχίσουμε με αυτό και στη συνέχεια να επιστρέφουν 0.
Και πάλι, αυτό δεν έχει καμία σχέση με τα μαθηματικά.
Αυτό σημαίνει απλά ότι όλα είναι καλά.
>> Τώρα, αυτό είναι σωστό, αυτό το πρόγραμμα;
Εντάξει.
Έτσι έχω κάνει κάποια λάθη.
Ακόμα κι αν δεν έχετε ιδέα τι είναι προγραμματισμός, μπορείτε να ταξινομήσετε
από πίσω να συνάγουν σχολείο βαθμού ποια είναι η
λάθη μπορεί να είναι εδώ.
Τι είναι ένα από τα πρώτα;
ΚΟΙΝΟ: [δεν ακούγεται]
David J. Malan: Ναι.
Έτσι χάνουμε παρενθέσεις.
Ήταν εσκεμμένη ότι έκανα παρένθεση στην ομιλία
σύρετε εδώ, γιατί δεν υπάρχει πραγματικά η έννοια της παραγγελίας
των εργασιών, ή προτεραιότητα, σύμφωνα με την οποία ορισμένες επιχειρήσεις -
πολλαπλασιασμό -
έχουν υψηλότερη δέσμευση, έχουν υψηλότερη προτεραιότητα, από ό, τι τα πράγματα
όπως πρόσθεση ή αφαίρεση.
Έτσι, έχουμε κάνει αυτό για χρόνια μόνο και μόνο για να καταστήσει σαφές ακριβώς
τι μαθηματική πράξη θα πρέπει να γίνει πρώτα.
Γι 'αυτό πρέπει πιθανώς να μιμηθούν ακριβώς αυτό.
Διαφορετικά, ο υπολογιστής πιθανώς θα προσπαθήσουμε να κάνουμε
κάτι σαν χάσμα 5 από 9, τότε πολλαπλασιάστε F, στη συνέχεια, αφαιρέστε
32 από το όλο θέμα.
Ποια δεν είναι, στην πραγματικότητα, αυτό που θέλουμε να κάνουμε.
Ας παρενθετικά.
Ας προσθέσω παρενθέσεις μου εδώ, παρένθεση εδώ.
Ας βάλουμε αυτό εδώ.
Εδώ, παρατήρησα ακριβώς ένα άλλο λάθος που έκανα στην πορεία.
Ναι;
ΚΟΙΝΟ: [δεν ακούγεται]
>> David J. Malan: Αχ.
Καλή.
Έτσι, έχουμε στην πραγματικότητα το ίδιο ακέραιο
ζήτημα πριν από τη διαίρεση.
Μπορώ να διορθώσω αυτό, ας δούμε τι είναι το σύμπτωμα.
Αλλά θα πάμε να έχετε για να διορθώσετε ένα
άλλο λάθος εδώ.
Ναι;
ΚΟΙΝΟ: [δεν ακούγεται]
David J. Malan: Ναι.
Έτσι, ηλίθιο λάθος που έκανα, αλλά εξαιρετικά σημαντικό.
Ο υπολογιστής δεν πρόκειται να κάνουν τα στραβά μάτια και αφήστε
με χρήση F κεφαλαίου, όταν δήλωσα στην πραγματικότητα τη μεταβλητή
σαν ένα πεζό f εδώ, στη γραμμή 8.
Γι 'αυτό πρέπει να διορθωθεί στη γραμμή 11 κεφαλαιοποίηση μου, που ένας
Πριν από λίγο ήταν ένα F κεφαλαίου κατά λάθος.
Τι γίνεται εδώ;
Σε περίπτωση που αυτό είναι πεζά, καθώς;
Θα πρέπει να είναι, αλλά αυτό είναι μια σύμπτωση.
Αυτό στ% δεν έχει καμία σχέση με τη μεταβλητή.
Έτσι, ακριβώς για να είναι σούπερ σαφής εδώ, επιτρέψτε μου να προχωρήσει και
μετονομάσετε αυτό, εν συντομία, «θερμοκρασία». Επιτρέψτε μου να μετονομάσετε
αυτή η "θερμοκρασία". Επιτρέψτε μου να μετονομάσετε αυτό.
Επειδή, πάλι, στ% σημαίνει σε παγκόσμιο επίπεδο, «επιπλέουν τιμή σημείο."
Έχει τίποτα να κάνει με μεταβλητή μου.
Αλλά "θερμοκρασία" σε όλη τη χώρα είναι λίγο φλύαρος,
έτσι είμαι πρόκειται να πάει πίσω στο πεζό "f" s μου.
>> Τώρα, επιτρέψτε μου να προχωρήσει κάτω από το παράθυρο μου εδώ.
Κάντε F2C -
που ήταν, και πάλι, η αυθαίρετη ονομασία I
έδωσε σε αυτό το αρχείο.
Φαίνεται να έχουν συνταχθεί.
Επιτρέψτε μου να τρέξει F2C.
Enter.
Θερμοκρασία σε βαθμούς Φαρενάιτ - ας κάνουμε μία εύκολη.
32.
Εντάξει, διορθώστε.
Αλλά, αν το κάνω τώρα 212 για βρασμού -
βλασφημία.
Εντάξει.
Έτσι, είναι σαφές ότι δεν διορθώσει, αν TF σας προσπαθεί
τουλάχιστον δύο τιμές.
Έτσι, ποιο είναι το πρόβλημα εδώ;
Λοιπόν, έχετε βάλει ήδη το δάχτυλό σας σε αυτό το θέμα.
Αλλά γιατί συμβαίνει αυτό;
Μέχρι εδώ, όταν κάνω τα μαθηματικά από 5 διαιρείται με 9.
Έτσι, θεωρητικά, αυτό είναι απολύτως σωστό.
Εντελώς συμφωνεί με τον τύπο.
Αλλά μόνο οι υπολογιστές κάνουν ακριβώς ό, τι
πει να κάνουν.
Και τι λέμε αποτελεσματικά τον υπολογιστή είναι εδώ
διαιρούν το ακέραιο 5 με τον ακέραιο 9
και να μου δώσει το αποτέλεσμα.
Το πρόβλημα είναι, όμως, όταν το κάνετε διαίρεση χρησιμοποιώντας δεδομένα
τύπους, η έξοδος είναι του ίδιου τύπου όπως τα δεδομένα των εισόδων.
Και έτσι αν οι δύο είσοδοι είναι και οι δύο ints, η έξοδος θα
να είναι ένας int.
Και έτσι 5 διαιρείται με 9 σημείο είναι κάτι.
Αλλά αυτό που είναι το πιο κοντινό ακέραιο να επισημάνω κάτι;
Έτσι, στην πραγματικότητα είναι 0.
Έτσι, όπως συζητήσαμε τη Δευτέρα, πάντα μετά την υποδιαστολή
σημείο παίρνει περικοπεί.
Απλά παίρνει πετιέται.
Έτσι, αυτό είναι ένα πλήρες λάθος, γιατί μπορούσαμε απλώς να
πολλαπλασιάζει τα πάντα εδώ από 0.
>> Τώρα, μπορώ να το διορθώσω αυτό σε μια-δυο τρόπους.
Θα μπορούσα να το κάνουμε αυτό.
5.0 διαιρείται με 9,0.
Τεχνικά, δεν χρειάζεται καν να το κάνουμε αυτό.
Αυτό δεν αρκεί για να κάνει ένα μόνο από τους αριθμούς ένας πλωτήρας -
ή διπλά - βάζοντας το δεκαδικό σημείο εδώ.
Γιατί αυτό που συμβαίνει τώρα είναι όταν σας χωρίζουν από έναν ακέραιο
ένας πλωτήρας, ή ένα διπλό, ο υπολογιστής πρόκειται να συνειδητοποιήσουμε
Ω, ένα από αυτά είναι πιο ακριβής.
Επιτρέψτε μου να σφάλουν προς την πλευρά της σας δίνει μεγαλύτερη ακρίβεια από ό, τι
που προορίζεται.
Γι 'αυτό θα μετατρέψει το αποτέλεσμα -
θα επιστρέψει το αποτέλεσμα ως Μιατιμήκινητήςυποδιαστολής, καθώς και.
Έτσι, αυτό θα μπορούσε να λειτουργήσει.
Αυτό θα μπορούσε να λειτουργήσει.
Και υπάρχει ένας άλλος μηχανισμός που θα δούμε σε
μεγαλύτερη λεπτομέρεια την επόμενη εβδομάδα.
Μπορείτε πραγματικά, ως προγραμματιστής, ενημερώστε τον υπολογιστή
για τη θεραπεία στην πραγματικότητα ένας τύπος δεδομένων, όπως
αν ήταν άλλο.
>> Έτσι θα μπορούσα να κάνω πραγματικά αυτό.
Σε παρένθεση, μπορώ να πω κάτι τέτοιο (float), ανοικτή
παρένθεση, κοντά παρένθεση.
Και αυτό είναι αυτό που λέμε "casting". Πάλι, περισσότερα
για την επόμενη εβδομάδα.
Αλλά αυτό είναι μόνο η προγραμματική τρόπος της αφήγησης
ο υπολογιστής, ναι το ξέρω 9 είναι ένας ακέραιος ή ένα μεγάλο χρονικό διάστημα.
Ξέρω ότι δεν είναι ένα Μιατιμήκινητήςυποδιαστολής.
Αλλά, να το αντιμετωπίσουμε ως τέτοια ούτως ή άλλως.
Έτσι για να ρίξει έναν τύπο δεδομένων μέσα για να μετατρέψει
από το ένα στο άλλο.
Ειλικρινά, αυτό είναι λίγο άσχημο, έτσι θα ήθελα να προτείνω να πάμε
πίσω στην αρχική πρόταση του μόλις μετατροπής
αυτά τα πράγματα σε τιμές κινητής υποδιαστολής το χέρι.
Επειδή τώρα είναι απλά σούπερ σαφές τι συμβαίνει, και
δεν είναι όλα αυτά που αποσπούν την προσοχή.
>> Ας πάμε τώρα πίσω στο παράθυρο του τερματικού μου.
Κάντε F2C.
Επιτρέψτε μου να πάμε μπροστά και να τρέξει αυτό.
Και, ως ένα μέρος, έχετε βαρεθεί να πληκτρολογείτε τις εντολές
ξανά και ξανά, συνειδητοποιούν ότι οι υπολογιστές, όπως το Linux εδώ,
τείνουν να είναι αρκετά έξυπνος.
Και αν χτύπησα Up, μπορούμε να πάμε μέσα από ολόκληρη την ιστορία μου
εντολές, Πάνω και Κάτω.
Έτσι, στην περίπτωση αυτή εδώ, δεν μπορώ ακριβώς να πάτε μέχρι να τρέξει να F2C.
Είμαι που φώναξε σε, επειδή έκανα ακριβώς ότι πριν από ένα δευτερόλεπτο.
Είναι ήδη μέχρι σήμερα.
Έτσι τώρα μπορώ να τρέξω και πάλι F2C.
Ας προσπαθήσουμε 32 Fahrenheit.
Τώρα ας προσπαθήσουμε 212 Φαρενάιτ.
>> Φτου.
Φαίνεται να λειτουργεί.
Τώρα, αυτό είναι καλό, αλλά αισθάνεται λίγο αυθαίρετη ότι
Είμαι δείχνει έξι αριθμούς μετά τα δεκαδικά ψηφία.
Σωστά;
Αν είστε το πρόσωπο καιρού στην τηλεόραση, είστε το είδος του doofus
αν διαβάζετε τη θερμοκρασία να
αυτός ο βαθμός ακρίβειας.
Ας απλοποίηση αυτή.
Οπότε ας πάμε στην πραγματικότητα μέχρι εδώ, για να printf μου.
Και ναι, θέλω να επιπλέουν.
Θέλω, όμως, να καθορίσετε την ακρίβεια τώρα.
Και Πάω να είναι λίγο σύντομη.
Πάω να πω, να μου δώσει ένα σημείο μετά το δεκαδικό ψηφίο.
Έτσι, αντί να πω στ%, Πάω να πω% .1 f.
Και αυτό σημαίνει απλά δώστε μου μία θέση
μετά την υποδιαστολή.
Εντάξει.
Ας δοκιμάσουμε ξανά.
Επιτρέψτε μου να επαναληφθεί μετά την κατάρτιση.
Και τώρα πληκτρολογήσετε σε 32, και παίρνω πίσω ένα
μεγαλύτερη αξία σύντομη.
Και μπορώ να πληκτρολογήσετε,, τώρα 212, και να πάρετε πίσω μια πιο περιεκτική
αξία, καθώς και.
Και υπάρχουν και άλλα πράγματα που μπορείτε να κάνετε με printf.
Μπορείτε πραγματικά να καθορίσετε το πλάτος, ο αριθμός πρέπει να είναι.
Αν θέλετε να έχετε γεμίσει σε αυτό, ώστε να μπορείτε να κάνετε δεξί ευθυγράμμιση ή
αριστερά-ευθυγράμμιση όλων των αριθμών σας ή
προσπαθήστε να τα πράγματα κέντρο.
Έτσι, συνειδητοποιώ ότι υπάρχουν μικρά κόλπα που μπορείτε να κάνετε εκεί.
Αλλά το μόνο που συνοψίζεται σε μορφή κωδικών,
όπως έχουμε εκεί.
>> Έτσι, όσον αφορά το θέμα της προτεραιότητας.
Αυτό είναι ένα πολύ βαρετό τραπέζι για να περάσει μεθοδικά.
Αλλά συνειδητοποιούν ότι οι συγγραφείς της C έχουν καταλήξει με το
κανόνες που προσδιορίζουν τους φορείς εκμετάλλευσης έχουν υψηλότερο
προτεραιότητα, πιο δεσμευτική ισχύ, σε σχέση με άλλες.
Έτσι, ενώ στο δημοτικό σχολείο, γενικά ήξερε ότι ήταν
πολλαπλασιασμό και διαίρεση, στη συνέχεια, πρόσθεση και αφαίρεση,
τότε κάποια άλλα πράγματα.
Σε έναν κόσμο του προγραμματισμού, υπάρχει μια πολύ
μεγαλύτερο κατάλογο των πραγμάτων.
Και αυτό δεν είναι κάτι που αξίζει απομνημόνευση τώρα.
Θα πάρετε για να εγκλιματιστούν πριν από καιρό.
Αλλά ακριβώς όπως και στο δημοτικό σχολείο, παρενθέσεις γενικά λύσει
τα θέματα προτεραιότητας, κάνοντας σούπερ σαφές το
υπολογιστή και ανθρώπου όσο αυτό προορίζεται.
Έτσι, θεωρούν αυτό το λίγο φύλλο εξαπατήσει εκεί.
Αλλά οι περισσότεροι από αυτές τις λεπτομέρειες, δεν θα έχουμε να για κάποιο χρονικό διάστημα.
>> Εντάξει.
Τώρα, ας δημιουργήσουν και να απομακρυνθεί από αυτά τα ανόητα λίγο
μαθηματικές παραδείγματα.
Ακόμα χρησιμοποιούν τις ίδιες βασικές αρχές, αλλά ξεκινήστε
εκφράζοντας τον εαυτό του λίγο περισσότερο σαν Scratch.
Έτσι, στο Ξυστό, είχαμε αυτές τις εκφράσεις Boolean.
Και στα αγγλικά, μια Boolean έκφραση είναι αυτό;
Σωστό ή λάθος.
Είναι κάτι που αποτιμάται σε true ή false.
1 ή 0.
ON ή OFF.
Ό, τι θέλετε να το ονομάσετε.
Τώρα στο Ξυστό, τα κομμάτια του παζλ έμοιαζε με αυτό.
Και αυτός είναι ο συνδυασμός, στο κάτω μέρος εκεί, από τρεις
κομμάτια του παζλ.
Ένα συνδυασμό -
κάτι που έχει κενό και κενό.
Και στη συνέχεια δύο εκφράσεις Boolean εσωτερικό του.
Έτσι, μπορείτε να φωλιά Boolean εκφράσεις για να πάρετε περισσότερες
περίπλοκη εκφράσεις Boolean.
Για παράδειγμα, αν είναι Σάββατο και είναι ωραία
καιρικές συνθήκες, στη συνέχεια, πηγαίνετε έξω.
Ή κάτι τέτοιο αυθαίρετο.
Έτσι, μπορείτε να συμμετάσχετε σε Boolean εκφράσεις για να καταλήξουμε σε ένα
μεγαλύτερη αξία αλήθειας, του οποίου η απάντηση στηρίζεται
για τα μικρότερα.
>> Τώρα, σε C, ευτυχώς, αυτή η χαρτογράφηση είναι
πραγματικά αρκετά απλή.
Παρενθέσεις βοηθήσει να γίνει σαφές εδώ τα πράγματα.
&& Είναι τι σημαίνει "και". Έτσι, αυτό είναι το πώς
θα πάμε να μετατρέψει αυτά τα τμήματα από το Scratch να C.
Και για τους όρους που είδαμε στο Scratch, στο αριστερό χέρι
πλευρά εκεί, μπορώ να τους στοίβα ομοίως σε C. Αν το x είναι μικρότερο
από το y, τότε κάντε αυτό.
Αλλιώς, αν το x είναι μεγαλύτερο από το y, τότε κάντε αυτό.
Αλλιώς λογικά θα πρέπει να είναι ίσοι, έτσι λένε
ότι είναι ίσες.
Έτσι, μπορούμε τώρα να αρχίσουν να χτίζουν αυτά τα πράγματα.
>> Ας κάνουμε ένα παράδειγμα.
Επιτρέψτε μου να ανοίξει ένα αρχείο που είναι στην ιστοσελίδα του μαθήματος που
Έγραψα εκ των προτέρων.
Που ονομάζεται nonswitch.c.
Και θα δούμε γιατί ακριβώς σε μια στιγμή.
Έτσι, σε αυτό το αρχείο - nonswitch.c--
πρώτα να συνειδητοποιήσουμε ότι υπάρχει ένα σωρό
σχόλια στην κορυφή.
Αυτό είναι που εξηγεί μόνο το όνομα του αρχείου, αυτό που
κάνει, και ούτω καθεξής.
Και αυτό δείχνει προφανώς τη χρήση των Boolean ΚΑΙ-σης -
συνένωση δύο εκφράσεις.
>> Ας δούμε λοιπόν πώς λειτουργεί το πρόγραμμα.
I περιλαμβάνει δύο αρχεία μου, cs50.h και stdio.h.
Αν μετακινηθείτε προς τα κάτω, τώρα, με το πρόγραμμα, είναι λίγο περισσότερο
από ό, τι έχουμε γράψει στο παρελθόν, αλλά αρκετά ευανάγνωστο.
Έτσι, για πρώτη φορά στην εκτύπωση του χρήστη, στη γραμμή 18,
"Δώσε μου έναν ακέραιο μεταξύ 1 και 10." Έτσι
αυτό είναι ακριβώς εκεί.
Τώρα έχω το ακέραιο.
Αλλά συνειδητοποιούν ότι GetInt - αρκετά απλή.
Είναι ακριβώς πρόκειται να πάρει ένα int.
Είναι πρόκειται να διασφαλίσει ότι έχει πάρει ένα int και όχι
string ή float.
Αλλά δεν πρόκειται να κάνει κάθε είδους που έχουν οι έλεγχοί όριο.
Δεν πρόκειται να φιλτράρετε τους αριθμούς να είναι μεταξύ ενός
συγκεκριμένο εύρος.
Γι 'αυτό πρέπει να εφαρμόσουν οι ίδιοι.
Έτσι ακριβώς όπως το Ξυστό, όπου θα μπορούσα να κάνω ένα συνδυασμό των
δύο εκφράσεις, μπορώ να το κάνουμε αυτό σε C ως εξής.
Εάν το η είναι μεγαλύτερο από ή ίσο με 1, και το η είναι μικρότερο από ό, τι και
ή ίση με 3, εγώ είμαι πρόκειται να είναι πολύ αυθαίρετα διάταγμα που
αριθμός να είναι ένας μικρός αριθμός.
Ακριβώς για το καλό του δήλωση.
Αλλιώς, αν n είναι μεταξύ 4 και 6, εκτύπωση "Επιλέξατε ένα μέσο
αριθμό. "Διαφορετικά, αν n είναι μεταξύ 7 και 10, εκτύπωσης" Επιλέξατε ένα
μεγάλο αριθμό. "Διαφορετικά εκτύπωση" Παίρνετε ένα έγκυρο αριθμό. "
Διότι λογικά, που ακολουθεί, αν έχουμε
εξαντληθεί σειρά μας.
>> Έτσι αντιλαμβάνονται αυτό δεν είναι αρκετά πώς γράφουμε μεγαλύτερο ή
ίση σε μια τάξη μαθηματικών.
Σωστά;
Μπορείτε επιστήσει συνήθως σαν αυτό, με τη γραμμή κάτω από αυτό.
Αλλά δεν υπάρχει τέτοιο πλήκτρο στο πληκτρολόγιο μου.
Έτσι το σύμβολο σε C για έκφραση μεγαλύτερο ή
είναι ίσο με δύο χαρακτήρες, και το σύμβολο για λιγότερο από ό, τι
ή ίσο με δύο χαρακτήρες είναι επίσης.
Εντάξει.
Έτσι, αν μπορώ να εκτελέσω αυτό το πρόγραμμα, μπορείτε να μαντέψετε τι είναι
πρόκειται να κάνουμε.
Αν πάω μπροστά και να nonswitch, Enter.
Και στη συνέχεια εκτελέστε nonswitch.
Δώσε μου έναν αριθμό μεταξύ 1 και 10.
Πάω να του δώσει 11.
Πήρα ένα έγκυρο αριθμό.
Επιτρέψτε μου να προσπαθήσω τον αριθμό 3.
Πήρα ένα μικρό αριθμό.
Έτσι, αρκετά απλή εκεί.
>> Τι γίνεται αν θέλω να αλλάξει η συμπεριφορά του εν λόγω προγράμματος και
κάνει κάτι λίγο διαφορετικό αντ 'αυτού;
Επιτρέψτε μου να προχωρήσει και να το πω αυτό.
Επιτρέψτε μου να απαλλαγούμε από όλα αυτά.
Και επιτρέψτε μου να πω αν (n == 42).
Και τότε είμαι πρόκειται να προχωρήσει και να πω εκτύπωσης "Επιλέξατε το
σωστή απάντηση. "Διαφορετικά θα πάμε για να πάει μπροστά και να πει,
printf ("Επιλέξατε το
λάθος απάντηση ")?. Εντάξει.
Ακριβώς επειδή.
>> Τώρα, μερικά σημεία που μπορούμε να κάνουμε εδώ.
Ένα, δεν είχα πληκτρολογήστε το σύμβολο που θα έλεγε κανείς ότι είναι η
πιο λογικό.
Όταν θέλετε να ελέγξετε την ισότητα, βγάζει δεν χρησιμοποιείτε το
ίσον.
Μπορείτε να χρησιμοποιήσετε αντί για την ίση ίσον.
Και γιατί θα μπορούσε να είναι ότι, μόλις διαισθητικά;
Ναι.
ΚΟΙΝΟ: [δεν ακούγεται]
David J. Malan: Σωστό.
Το σύμβολο ισότητας χρησιμοποιείται ήδη για την ανάθεση.
Κάποιος δεν πιστεύουν πραγματικά αυτό μέσα.
Και έτσι και τώρα, όταν πρόκειται για τον έλεγχο της ισότητας, θα πρέπει να
να είναι πιο σαφής, και να πω είναι ίση μεταξύ ίσων.
Ένα πολύ συνηθισμένο λάθος είναι να το κάνετε αυτό.
Και, αν σε ώρες γραφείου ή κάποια στιγμή την επόμενη εβδομάδα ή στο
επόμενες δύο εβδομάδες θα κάνει κάτι τέτοιο και στη συνέχεια
αγωνίζονται με αυτό για 10, 20 λεπτά προσπαθώ να καταλάβω
τι το καταραμένο bug είναι, συνειδητοποιείτε ότι είστε ένας από εκείνους
άνθρωποι που έκαναν αυτό το λάθος.
Έτσι, εξαιρετικά εύκολο να κάνει.
Αλλά ο στόχος είναι τώρα να αποκρούσει αυτό το λάθος.
Αυτό θα μπορούσε να αξιολογήσει, γιατί αυτό είναι πραγματικά το λέει;
Αν n παίρνει 42.
Έτσι, οι άνθρωποι χρησιμοποιούν το ρήμα, προφορικά, να εκφράσουν την
έννοια της ανάθεσης είναι ο "παίρνει". Έτσι, αν το n παίρνει 42.
Έτσι, αυτό σημαίνει ότι εκχωρήσει 42 έως n.
Τώρα έχω μια Boolean έκφραση σε παρένθεση,
εσωτερικό αυτής της κατάστασης, η αξία του οποίου είναι 42.
Σωστά;
Γιατί αν το αξιολογήσει από μέσα προς τα έξω, ο συνολικός
απάντηση, τώρα, είναι 42.
>> Έτσι, αν σας ρωτήσω για την ερώτηση, "αν (42)," ό, τι είναι
ότι πραγματικά λέγοντας;
Λοιπόν, Boolean εκφράσεις μπορούν μόνο να είναι αληθείς ή ψευδείς.
1 ή 0.
ON ή OFF.
Έτσι, φαίνεται να έχουμε μια περίπτωση γωνία εδώ, σύμφωνα με την οποία όλοι ένα
ξαφνική, λέω "αν (42)". Αυτό δεν είναι μια τιμή Boolean.
Έτσι, αυτό που οι υπολογιστές κάνουν, όμως, είναι ότι ουσιαστικά ισοδυναμεί
κάτι που δεν είναι 0 ερμηνεύεται για να είναι αληθινό.
1.
On.
Είναι όλοι λειτουργικά ισοδύναμο.
Μόνο η τιμή 0, η λέξη-κλειδί ή ψευδείς, όπως θα
δείτε τελικά, είναι στην πραγματικότητα ψευδής.
Έτσι, "εάν (42)" θα είναι στην πραγματικότητα να είναι αλήθεια, διότι είναι μη-μηδενικό.
Έτσι, για να είναι πιο ακριβής εδώ, μια τιμή Boolean είναι πραγματικά δεν είναι τόσο
πολύ αληθής ή ψευδής, αλλά για αυτό
περίπτωση αυτή, αν είναι μηδέν ή μη-μηδέν.
Έτσι, ψευδείς ή όχι ψευδείς.
Και αυτό μας δίνει τη δυνατότητα να καλύπτει όλες τις πιο
δυνατότητες στην παρενθετική έκφραση.
Πρέπει λοιπόν να, πάντα τόσο προσεκτικά, ας πούμε αυτό -
αν (n == 42).
Απλά επειδή πρέπει να καθορίσετε μια δοκιμή της ισότητας,
δεν εκχώρηση μιας τιμής.
>> Τι άλλο αξίζει να σημειωθεί εδώ;
Αυτά τα άγκιστρα είναι στην πραγματικότητα δεν είναι απαραίτητη.
Έχω ήδη κάνει τους ακριβώς για να είναι nit-επιλεκτικοί εδώ.
Αλλά όταν έχετε μια κατάσταση που έχει μόνο μία γραμμή
κώδικα, ως ευκολία, οι προγραμματιστές δεν χρειάζεται να χρησιμοποιήσετε
τα άγκιστρα.
Αρκεί μόνο να περίπτωσης, για αισθητικούς λόγους, και
στη συνέχεια να συντάξετε γραμμή σας κωδικό.
Μόνο όταν θέλετε να γράψετε δύο γραμμές κώδικα - για
παράδειγμα, άλλος printf ("Αντίο"). Αν θέλετε να κάνετε
ότι, αυτό είναι σπασμένο.
Μπορείτε περίπτωση όλα θέλετε, αλλά το γεγονός ότι έχετε
πληκτρολογήσει δύο γραμμές κώδικα χωρίς τη χρήση άγκιστρα
σημαίνει ότι αυτό το πρόγραμμα δεν θα λειτουργήσει σωστά ή ενδέχεται να
δεν συγκεντρώνουν καν σωστά.
Έτσι, για τώρα, για να είμαι ειλικρινής, νομίζω ότι η καλύτερη συνήθεια είναι απλά
χρησιμοποιήσετε τις αγκύλες, και θα διαπιστώσετε ότι κάνουν
σούπερ σαφές τι συμβαίνει.
>> Επίσης, ως μέρος - ειδικά αν είστε μεταξύ εκείνων που χρησιμοποιούν
τα προτεινόμενα βιβλία ή σε απευθείας σύνδεση πόρους -
συνειδητοποιούν ότι υπάρχει αυτή η έννοια του στυλ
προγραμματισμού.
Και μερικοί άνθρωποι πραγματικά προτιμούν να βάλει το άγκιστρο
εδώ σε μια γραμμή.
Μερικοί άνθρωποι προτιμούν να κάνουν γελοία πράγματα,
ήθελα να τους εδώ.
Δεν υπάρχει λάθος απάντηση, όταν πρόκειται για
στυλ, αλλά αυτό είναι λάθος.
Αλλά μερικοί άνθρωποι το κάνουν.
[Γέλια]
David J. Malan: Γι 'αυτό και το αναφέρω τώρα, απλά και μόνο επειδή ως
μπορείτε να διαβάσετε επάνω σε πράγματα στα βιβλία ή σε απευθείας σύνδεση, θα πάμε για να πάρει
διαφορετικά μηνύματα από διαφορετικούς δασκάλους και
διαφορετικούς συγγραφείς.
Και συνειδητοποιούν ότι απλά, λειτουργικά, είναι
γενικά ισοδύναμες, αλλά να είναι συνεπής.
Έτσι, στην περίπτωση αυτή, θα τυποποιήσουν την σγουρά
τιράντες επένδυση μέχρι εδώ στα αριστερά.
>> Εντάξει.
Ας προχωρήσουμε τώρα και να τρέξει αυτό, και να δούμε τι θα συμβεί
με αυτό το πρόγραμμα.
Κάντε nonswitch.
Στη συνέχεια, εκτελέστε nonswitch.
Δώσε μου έναν ακέραιο μεταξύ 0 και - έτσι αυτό δεν είναι σχετικό
πια, αλλά είμαι απλώς πρόκειται να πω αυθαίρετα 42.
Και πήρα τη σωστή απάντηση.
Καλά τώρα, ας ρίξουμε στην πραγματικότητα αυτό σε μια διαφορετική κατεύθυνση.
Αποδεικνύεται ότι υπάρχει κάποια άλλη σύνταξη που
μπορεί να χρησιμοποιήσει σε ένα πρόγραμμα.
Εδώ είναι ένα νέο κομμάτι της σύνταξης, που είναι λειτουργικά το ίδιο,
αλλά απλώς εισάγει έναν άλλο τρόπο να εκφράσουν τον εαυτό μας.
Έτσι, αυτό είναι αυτό που ονομάζεται "δήλωση switch." Και ένα
δήλωση switch λειτουργεί ως εξής.
Παίρνει, σε παρένθεση, μια τιμή που θέλετε να
"Διακόπτη" στο.
Θέλετε να συμπεριφέρονται διαφορετικά με βάση την αξία του.
Έτσι, αυτό σημαίνει ότι ο διακόπτης για την τιμή του n.
Και τι σημαίνει αυτό;
Λοιπόν, αν n είναι 1 ή 2 ή 3, να προχωρήσει και να εκτυπώσετε σας "
πήρε ένα μεγάλο αριθμό "και στη συνέχεια να σπάσει.
Ο λόγος για το σπάσιμο είναι ότι ο τρόπος Γ λειτουργεί είναι ως
Μόλις διαπιστώσει μια περίπτωση που ταιριάζει, ξεκινά την εκτέλεση
όλο τον κώδικα κάτω από αυτό.
Έτσι, αν έχω μία γραμμή κώδικα, όπως κάνω εδώ στη γραμμή 27,
εκτελείται.
Αν μπορώ να προσθέσω μια άλλη γραμμή εδώ, παίρνει εκτελεστεί.
Μια άλλη γραμμή εδώ, παίρνει εκτελεστεί.
Το πρόγραμμα σταματάει την εκτέλεση μόνο ό, τι είναι κάτω από το
εφαρμόζονται δήλωση περίπτωση όταν ρητώς την
λένε "σπάσει". Έτσι λάθος.
Δεξιά, σε αυτή την περίπτωση, ως αποτέλεσμα.
Υπόθεση 4 ή 5 ή 6, παρομοίως, πρόκειται
να εκτυπώσετε ένα μήνυμα.
Σε αυτή την περίπτωση, μέσο αριθμό.
Break.
Υπόθεση 7, 8, 9, 10, πρόκειται να εκτυπώσετε "Επιλέξατε ένα μεγάλο
αριθμό. "Break.
Και έπειτα υπάρχει κυριολεκτικά μια λέξη-κλειδί που ονομάζεται "default"
αυτό είναι ουσιαστικά σαν το "άλλο" κατασκευή.
Έτσι, νέα σύνταξη, αλλά πνευματικά,
τίποτα σε όλα τα νέα εδώ.
Είναι ακριβώς όπως το Ξυστό.
Αν, αλλιώς αν, αλλιώς αν, μπλοκ του είδους.
>> Έτσι, αυτό είναι το ενεργοποιημένο έκδοση αυτού του προγράμματος.
Αλλά παρατηρώ ότι το κάναμε με τους αριθμούς εδώ.
Επιτρέψτε μου να ανοίξει μια δεύτερη εκδοχή, απλά για να δείξουν
κάτι λίγο πιο συγκεκριμένο.
Έτσι, εδώ έχουμε τους βαθμούς αντ 'αυτού.
Βγάζει μπορείτε να χρησιμοποιήσετε διακόπτες όχι μόνο για ακέραιους αριθμούς, αλλά σε
χαρακτήρες.
Όχι σε όλους τους τύπους δεδομένων, αλλά τουλάχιστον σε χαρακτήρες.
Μέχρι εδώ, θα μπορούσαμε να κάνουμε κάτι σαν, αν η αξία της C ότι
ο χρήστης πληκτρολογήσει, στη γραμμή 19, με τη χρήση της συνάρτησης getchar,
Ένα είναι το κεφάλαιο ή πεζά ένα, ας το ερμηνεύσει ως ένα βαθμό,
και λένε ότι πήρε ένα εξαιρετικό βαθμό.
Και κάτω κατά μήκος του δήλωση switch, δεν έχουμε άλλη
περιπτώσεις για "Β" και το "C" s, και ούτω καθεξής.
Αλλά ας τώρα γύρω από ένα άλλο πράγμα.
Και πάλι, το είδος της πτήσης μέσω
μερικά από αυτά τα παραδείγματα.
Αλλά είναι πραγματικά έτσι ώστε να μπορούμε να τα εφαρμόσουν, τώρα -
ή πραγματικά, να μεταφράσει τους μόλις τώρα -
να C.
>> Επιτρέψτε μου λοιπόν να προχωρήσει και να το κάνουμε αυτό.
Πάω να ανοίξει ένα νέο αρχείο.
Και Πάω να κάνω περιλαμβάνουν .
Και μετά θα πάω να κάνω int main (void).
Επιτρέψτε μου να αποθηκεύσετε αυτό το αρχείο ως loop.c.
Ακριβώς όπως ένα παράδειγμα.
Και εγώ είμαι πρόκειται να πάει μπροστά και να κάνουμε το εξής.
Θέλω να γράψω ένα πολύ κουραστικό πρόγραμμα.
Έτσι, 10.
Ας το κάνουμε αυτό.
9.
Εντάξει.
Μόλις αρχίσετε να κάνετε αυτό στον προγραμματισμό, είστε
ίσως κάνει κάτι λάθος.
Αλλά εμείς θα ξεκινήσουμε από εκεί ούτως ή άλλως.
Ωχ.
Αυτό είναι πραγματικά λάθος.
7.
6.
5.
4.
Τίποτα δεν πρόκειται να συμβεί όταν φτάσουμε στο 0.
3.
2.
1.
Εντάξει.
0.
Διαγραφή.
>> Εντάξει.
Έτσι επιστρέφει 0.
Έτσι, αυτό το πρόγραμμα είναι προφανώς πρόκειται να κάνει ό, τι είναι πολύ
tediously λέει ότι πρόκειται να κάνουμε.
Είναι πρόκειται να εκτυπώσετε όλους εκείνους
τιμές, από επάνω προς τα κάτω.
Επιτρέψτε μου λοιπόν να κάνουν βρόχο.
Και τότε - κραυγών.
Κάντε βρόχο.
Ήμουν σε λάθος κατάλογο.
Και τώρα επιτρέψτε μου να τρέξει βρόχο.
Enter.
Woohoo.
Πολύ ωραία.
Νίκαια, μακροχρόνιο πρόγραμμα.
>> Εντάξει, αλλά τώρα ας το κάνουμε αυτό καλύτερα.
Ακριβώς όπως και στο Ξυστό, όταν άρχισε να χρησιμοποιεί ένα looping
κατασκευή, και όχι μόνο αντιγραφή και επικόλληση όλα τα
κομμάτια του παζλ, επιτρέψτε μου να εισαγάγει αυτό το πράγμα.
Έτσι, C, υπάρχουν διάφορες δομές επανάληψης,
ένα εκ των οποίων μοιάζει με αυτό.
Μια "για" βρόχο έχει τρία πράγματα, που χωρίζονται από δύο ερωτηματικά.
Και στη συνέχεια, στο εσωτερικό του σώματος του βρόχου, έτσι ώστε να μιλήσει - η
μέσα από τα πράγματα άγκιστρα -
μπορούμε να κάνουμε κάτι ξανά και ξανά.
Έτσι, αυτό που έχω εδώ στην οθόνη, αυτό είναι
κυριολεκτικά μόνο ένα σχόλιο.
Ο / / σημαίνει εδώ έρχεται ένα σχόλιο.
Αυτό δεν είναι ο κωδικός.
Αυτό είναι απλά Ελληνικά περιγραφή, για μένα, το ανθρώπινο.
>> Έτσι initializations, συνθήκες, καθώς και ενημερώσεις.
Λοιπόν, ας δούμε πώς αυτό λειτουργεί.
Αυτό μου επιτρέπει να ξαναγράψει αυτό το πρόγραμμα ως εξής.
Για -
έτσι έρχεται εδώ βρόχος μου -
int i -
εδώ έρχεται μια μεταβλητή που ονομάζεται "i" -
παίρνει προετοιμαστεί έως το 10.
Έτσι, δεν υπάρχει προετοιμασία μου.
Θέλω να κάνω αυτό το βρόχο εφ 'όσον το "i" είναι μεγαλύτερο ή
ίση με μηδέν.
Και σε κάθε επανάληψη του βρόχου αυτού, θέλω
να κάνω -.
Έτσι είδαμε + + τη Δευτέρα.
- Είναι το αντίθετο.
Θα μειώνει την τιμή κατά 1.
Μέσα από αυτόν τον βρόχο, θέλω να κάνω κάτι πραγματικά.
Έτσι, Πάω να πω κάτι σαν printf.
Δεν θέλω να πω 10 τώρα, γιατί αυτό ακριβώς είναι προφανώς
πρόκειται να εκτυπώσετε την ίδια αξία.
Τι μπορώ να θέλετε να εκτυπώσετε αντ 'αυτού, ίσως;
Ναι.
Έτσι, "i". Έτσι% d, i.
>> Έτσι, Πάω να κλέψουν ένα από αυτές τις ιδέες από τις προηγούμενες -
η αντικατάσταση των κωδικών μορφή -
και στη συνέχεια, εδώ κάτω, στο κάτω μέρος, θα επιστρέψει 0, μόλις
για το καλό μέτρο.
Αλλά τώρα, έχω ένα πιο περιεκτικό πρόγραμμα.
Είναι μόνο λίγες γραμμές, και όχι πριν από 10 ή 11 γραμμές.
Επιτρέψτε μου να πάω στην προτροπή μου εδώ κάτω.
Remake βρόχο.
Εκτελέστε ξανά το βρόχο.
Και φαίνεται να είναι η ίδια.
Τώρα, το πρόγραμμα δεν είναι πιο ενδιαφέρον.
Αλλά τώρα μπορώ να πληκτρολογήσετε κάτι τέτοιο.
Μπορώ να το αλλάξετε αυτό σε 100.
Μπορώ να μεταγλωττίσετε τότε το πρόγραμμά μου.
Και μετά να τρέξετε το πρόγραμμά μου.
Και τώρα πηγαίνει πολύ γρήγορη σε υπολογιστές του σήμερα.
Αλλά εκεί έχω -
και στην πραγματικότητα, ρυθμιστικό scrollback μου δεν
ακόμη και να πάει τόσο μακριά.
Εκεί πάμε.
Έτσι εκεί έχουμε όλες τις 100.
Αλλά είναι εύκολο να γίνουν λάθη εδώ.
Τι πρόκειται να είναι η αναμενόμενη συμπεριφορά αν
κατά λάθος το κάνετε αυτό;
Έτσι αισθάνεται σαν άπειρο.
Ας δούμε λοιπόν αν ο υπολογιστής συμπεριφέρεται.
>> Επιτρέψτε μου λοιπόν να προχωρήσει και να κάνει βρόχο.
Και επιτρέψτε μου να τρέξει βρόχο.
Ας επανέλθουμε στο ότι ακριβώς σε μια στιγμή.
Θα αφήσουμε αυτό το τρέξιμο.
Γιατί αυτό που πρέπει να μετράμε μέχρι, ελάχιστα;
Πιθανώς τουλάχιστον 2 δισ. ευρώ, αν έχουμε ότι πολλά κομμάτια, και
είμαστε χρησιμοποιώντας θετικές τιμές.
Ας άλμα πίσω εδώ.
Εκτός από αυτά τα είδη των βρόχων, έχουμε τα λεγόμενα, ενώ
βρόχους. Έτσι, όπως ακριβώς και στο Ξυστό, είχατε πάντα
μπλοκ, και είχατε μπλοκ επανάληψης.
Ομοίως, σε C, έχετε μόνο άλλους τρόπους
του εκφράζοντας τον εαυτό σας.
Έτσι έχετε αυτήν την έννοια ενός βρόχου while που σας επιτρέπει να
εκφράσουν τον εαυτό σας λίγο διαφορετικά.
Και τότε θα έχουμε κάτι που ονομάζεται ένα do-while loop,
το οποίο λειτουργεί ελαφρώς διαφορετικά, καθώς και.
Και εμείς θα δώσουμε έμφαση, εκτός αυτών την πάροδο του χρόνου.
>> Αλλά ας ρίξουμε μια ματιά σε αυτό το τελευταίο εδώ.
Αν πάμε σε -
εξακολουθεί να λειτουργεί.
Είναι πολύ άπειρη.
Έτσι, επιτρέψτε μου να πάω σε θετική, και να δείξει πώς μπορούμε πραγματικά
διέπουν είσοδο του χρήστη λίγο πιο αποτελεσματικά.
Είναι ένα πολύ σύντομο πρόγραμμα.
Και εδώ έχουμε, σε γενικές γραμμές, μια int n δήλωση.
Έτσι, να μου δώσει μια μεταβλητή που ονομάζεται n. Τώρα, μπορώ να πω κυριολεκτικά
"Κάνω". Και τότε έχω ανοιχτό σγουρά
τιράντες, κοντά σγουρά κηδεμόνα.
Και στη συνέχεια παρατηρήσετε, αμέσως μετά από αυτό, λέει, ενώ n
είναι μικρότερη από 1.
Έτσι, παρατηρούμε ότι οι γραμμές αυτές -
19 - 24 -
συλλογικά συνθέτουν ένα do-while loop.
Και πάλι, δεν είναι νέα σύνταξη, μια νέα ιδέα.
Είναι απλά ένας άλλος τρόπος για looping, συντακτικά.
Έτσι, τι κάνει αυτό;
Ακολουθήστε τα παρακάτω βήματα, ενώ n είναι μικρότερο από 1.
Έτσι, αυτό που θέλω να κάνω;
Απαιτώ να μου δώσετε ένα θετικό ακέραιο.
Τότε πραγματικά να προσπαθήσει να πάρει έναν ακέραιο από το χρήστη.
Αλλά από την άποψη της τάξης των εργασιών εδώ, γιατί η
ενώ η κατάσταση είναι εδώ κάτω, τότε είμαι πρόκειται να ελεγχθεί, είναι n
λιγότερο από 1?
Έτσι ας υποθέσουμε ότι ο χρήστης -
αφού ζήτησε με αυτόν τον τρόπο -
τύπων στην τιμή 0.
Η κατάσταση αυτή πρόκειται να είναι αληθής ή ψευδής;
Λοιπόν, αυτό είναι πραγματικά πρόκειται να είναι αληθινό.
Επειδή η είναι 0, και το 0 είναι μικρότερο από 1.
Λοιπόν, τι σημαίνει αυτό συνεπάγεται;
Κάν 'το και πάλι.
Μόνο μια φορά ότι η συνθήκη αποτιμάται σε false.
Αν πληκτρολογήσετε 42.
Καλά όχι, 42 δεν είναι μικρότερο από 1.
Συνεπώς, αυτό το βρόχο γίνεται εκτέλεσης.
Και έτσι σε εκείνο το σημείο, το πρόγραμμα θα πω, ευχαριστώ για
το 42, σε αυτή την περίπτωση.
Τώρα που έχετε με αυτόν τον τρόπο να εκφράσουν τον εαυτό σας -
Δεν πρέπει να περιμένουμε για να τελειώσει αυτό.
Είναι πρόκειται να πάρει κάποιο χρόνο.
Για να συνεχιστεί την επόμενη φορά, ίσως.
>> Αλλά τώρα, έχετε τη δυνατότητα να ελπίζουμε να καταλάβει μια
κομμάτι του geek χιούμορ.
Συγνώμη.
Αυτό δεν είναι αντιπροσωπευτική του χιούμορ στην επιστήμη των υπολογιστών
κόσμο, αλλά είναι χαριτωμένο.
Τέλος [γέλια] Ας σε αυτό το σημείωμα.
Και εμείς θα δούμε την Δευτέρα.
[Χειροκρότημα]