[ΜΟΥΣΙΚΗ Playing] DAVID J. Malan: Εντάξει. Αυτό είναι CS50 και αυτό είναι η αρχή της Εβδομάδας 2. Και θα θυμάστε ότι πάνω από τις τελευταίες δύο εβδομάδες, έχουμε την εισαγωγή του υπολογιστή επιστήμη και, με τη σειρά του, τον προγραμματισμό. Και αρχίσαμε την ιστορία μέσω της Το μηδέν, ώστε γραφική γλώσσα από το Media Lab του MIT. Και στη συνέχεια πιο πρόσφατα, την περασμένη εβδομάδα, κάναμε εισαγάγει ένα higher-- ένα γλώσσα χαμηλότερου επιπέδου γνωστή όπως C, κάτι που είναι καθαρά κειμένου. Και, πράγματι, την τελευταία φορά που διερευνηθεί σε αυτό το πλαίσιο διάφορες έννοιες. Αυτό, ανάκληση, ήταν το πολύ πρώτο πρόγραμμα κοιτάξαμε. Και το πρόγραμμα αυτό, πολύ απλά, εκτυπώνει, "γειά σου, τον κόσμο." Αλλά υπάρχει τόσο πολύ φαινομενική μαγεία συμβαίνει. Υπάρχει αυτό το #include με αυτές τις γωνιακές αγκύλες. Υπάρχει int. Υπάρχει (άκυρο). Υπάρχει παρενθέσεις, αγκύλες, ημι-παχύ έντερο, και πολύ περισσότερα. Και έτσι, υπενθυμίζουν ότι εισαγάγαμε Scratch έτσι ώστε να μπορούμε, στην ιδανική περίπτωση, δείτε το παρελθόν ότι η σύνταξη, η ουσία που δεν είναι πραγματικά όλα αυτά πνευματικά ενδιαφέρουσα, αλλά νωρίς είναι, απολύτως, είναι λίγο δύσκολο να τυλίξουν το μυαλό σας γύρω. Και, πράγματι, ένα από τα πιο κοινά τα πράγματα από νωρίς σε μια κατηγορία προγραμματισμού, Ειδικά για εκείνους λιγότερο άνετα, είναι να πάρει απογοητευμένοι από και σκόνταψε πάνω από ορισμένες συντακτικές σφάλματα, για να μην αναφέρουμε λογικά σφάλματα. Και έτσι στους στόχους μας Σήμερα, στην πραγματικότητα, θα είναι να σας εξοπλίσει με μερικές τεχνικές επίλυσης προβλημάτων για το πώς να λύσει καλύτερα τον εαυτό τους προβλήματα με τη μορφή εντοπισμού σφαλμάτων. Και θα θυμάστε, επίσης, ότι η περιβάλλον που εισαγάγαμε τελευταία φορά που κλήθηκε CS50 IDE. Αυτό είναι web-based λογισμικό που Σας επιτρέπει να προγραμματίσετε στο σύννεφο, να το πω έτσι, διατηρώντας παράλληλα όλες σας αρχεία μαζί, όπως θα είναι και πάλι σήμερα. Και υπενθυμίζουν ότι εμείς επανεξεταστούν αυτά τα θέματα εδώ, μεταξύ τους λειτουργίες, και βρόχους, και μεταβλητές, και Boolean εκφράσεις, και προϋποθέσεις. Και στην πραγματικότητα μερικές ακόμα ότι εμείς μεταφράστηκε από τον κόσμο του Scratch στον κόσμο του C. Αλλά το βασικό κτίριο μπλοκ, να το πω έτσι, ήταν πραγματικά ακόμα το ίδιο την περασμένη εβδομάδα. Στην πραγματικότητα, έχουμε πραγματικά ακριβώς είχε διαφορετικό κομμάτι του παζλ, αν θέλετε. Αντί αυτού του μοβ αποθηκεύσετε μπλοκ, εμείς αντί είχε printf, η οποία είναι αυτή η λειτουργία σε c που Σας επιτρέπει να εκτυπώσετε κάτι και διαμορφώστε στην οθόνη. Εισαγάγαμε το CS50 Βιβλιοθήκη, σας όπου έχουν τώρα στη διάθεσή σας get_char, και get_int, και get_string, και μερικές άλλες λειτουργίες, όπως επίσης, μέσω του οποίου μπορείτε να πάρετε είσοδο από τη δική πληκτρολόγιο του χρήστη. Και πήραμε επίσης μια ματιά στα πράγματα όπως αυτά-bool και char, και δίκλινα, float, int, long_long εγχόρδων. Και υπάρχει ακόμη και άλλους τύπους δεδομένων στη C. Με άλλα λόγια, όταν δηλώνετε μια μεταβλητή για να αποθηκεύσετε κάποια αξία, ή όταν εφαρμόζετε μια λειτουργία ότι επιστρέφει κάποια τιμή, μπορείτε να καθορίσετε τι είδος της τιμής που είναι. Είναι ένα string, όπως ένα ακολουθία χαρακτήρων; Είναι ένας αριθμός, σαν ένα ακέραιο; Είναι ένα πλωτό σημείο αξία, ή κάτι παρόμοιο; Έτσι σε C, σε αντίθεση με το μηδέν, στην πραγματικότητα άρχισε να καθορίσετε τι είδους δεδομένα είχαμε την επιστροφή ή τη χρήση. Αλλά, φυσικά, τρέξαμε επίσης υπόψη ορισμένες θεμελιώδεις όρια των υπολογιστών. Και ειδικότερα, Αυτή η γλώσσα C, ανάκληση ότι πήραμε μια ματιά υπερχείλιση ακεραίου, η πραγματικότητα ότι αν έχετε μόνο ένα πεπερασμένη ποσότητα μνήμης ή, ειδικότερα, ένας πεπερασμένος αριθμός των bits, το μόνο που μπορεί να μετρήσει τόσο υψηλή. Και έτσι κοιτάξαμε αυτό το παράδειγμα εδώ σύμφωνα με την οποία ένας μετρητής σε ένα αεροπλάνο,, στην πραγματικότητα, εάν τρέχει αρκετά μεγάλο χρονικό διάστημα θα ξεχειλίσει και να οδηγήσει σε ένα λογισμικό μια πραγματική φυσική δυνητικό σφάλμα. Εξετάσαμε επίσης επιπλέει σημείο ανακρίβεια, η πραγματικότητα ότι με μόνο έναν πεπερασμένο αριθμό των bits, είτε πρόκειται για 32 ή 64, μπορείτε να καθορίσετε μόνο τόσο πολλούς αριθμούς μετά την υποδιαστολή, μετά την οποία θα αρχίζουν να πάρει ανακριβή. Έτσι, για παράδειγμα, το ένα τρίτο στο κόσμο εδώ, στον ανθρώπινο κόσμο μας, Γνωρίζουμε ότι μόνο ένας άπειρος αριθμός της 3s μετά την υποδιαστολή. Αλλά ένας υπολογιστής δεν μπορεί κατ 'ανάγκη αντιπροσωπεύουν έναν άπειρο αριθμό των αριθμών αν επιτρέψετε μόνο ότι κάποιοι πεπερασμένη ποσότητα των πληροφοριών. Έτσι, όχι μόνο δεν θα σας εξοπλίσει με μεγαλύτερη δύναμη από την άποψη για το πώς μπορείτε να εκφραστείτε σε ένα πληκτρολόγιο όσον αφορά τον προγραμματισμό, θα περιορίζονται επίσης τι μπορείτε πραγματικά να κάνετε. Και πράγματι, τα σφάλματα και τα λάθη μπορούν να προκύπτουν από τέτοιου είδους θέματα. Και πράγματι, μεταξύ των θεμάτων που σήμερα πρόκειται να είναι θέματα όπως εντοπισμός σφαλμάτων και πραγματικά ψάχνει κάτω από την κουκούλα πώς εισήχθησαν τα πράγματα την περασμένη εβδομάδα εφαρμόζονται πραγματικά έτσι ώστε να μπορείτε καλύτερα κατανοήσουν τόσο οι δυνατότητες και οι περιορισμοί μιας γλώσσας όπως η C. Και στην πραγματικότητα, θα ξεφλουδίσετε πίσω τα στρώματα της απλούστερης δομής δεδομένων, κάτι που ονομάζεται μια σειρά, η οποία Scratch συμβαίνει να καλέσετε μια "λίστα". Είναι ένα μικρό κομμάτι διαφορετικά σε αυτό το πλαίσιο. Και τότε θα εισάγουν επίσης ένα από τα πρώτα προβλήματα σε συγκεκριμένους τομείς μας σε CS50, ο κόσμος του κρυπτογραφία, η τέχνη της κρυπτογράφησης ή σε κρυπτογραφήσεως πληροφορίες τόσο ότι μπορείτε να στείλετε μυστικά μηνύματα και να αποκωδικοποιήσει μυστικά μηνύματα μεταξύ δύο ατόμων, Α και Β Έτσι, πριν από τη μετάβαση μας σε αυτό το νέο κόσμο, ας προσπαθήσουμε να σας εξοπλίσει με μερικές τεχνικές με τις οποίες μπορείτε να εξαλείψει ή να μειώσει τουλάχιστον κάποια των απογοητεύσεις ότι έχετε αντιμετωπίσει κατά πάσα πιθανότητα πάνω από μόνα τους την περασμένη εβδομάδα. Στην πραγματικότητα, μπροστά από εσάς such-- μερικά από την πρώτη σας προβλήματα στην C. Και οι πιθανότητες είναι, αν είστε σαν εμένα, είναι η πρώτη φορά μπορείτε να δοκιμάσετε να πληκτρολογήσετε ένα πρόγραμμα, ακόμη και αν νομίζετε ότι λογικά το πρόγραμμα είναι αρκετά απλή, θα μπορούσε κάλλιστα να χτυπήσει έναν τοίχο, και ο compiler δεν πρόκειται να συνεργαστεί. Κάνει ή Clang δεν πρόκειται να κάνει πραγματικά την προσφορά σας. Και γιατί θα μπορούσε αυτό να είναι; Λοιπόν, ας ρίξουμε μια ματιά στο, ίσως, ένα απλό πρόγραμμα. Πάω να πάει μπροστά και να σώσει αυτό το ένα αρχείο σκόπιμα ονομάζεται buggy0.c, γιατί ξέρω να να λανθασμένη εκ των προτέρων. Αλλά εγώ μπορεί να μην συνειδητοποιούν ότι αν αυτό είναι το πρώτο ή το δεύτερο ή τρίτο πρόγραμμα ότι είμαι πραγματικά κάνει τον εαυτό μου. Έτσι, Πάω να πάει μπροστά και να πληκτρολογήσετε, int main (void). Και τότε μέσα από άγκιστρα μου, ένα πολύ γνωστό ( «γειά σου, world-- backslash, n ") - και μια άνω τελεία. Έχω αποθηκεύσει το αρχείο. Τώρα είμαι πρόκειται να πάει προς τα κάτω στο παράθυρό μου τερματικού και τον τύπο make buggy0, επειδή, και πάλι, το όνομα του αρχείου είναι σήμερα buggy0.c. Γι 'αυτό και πληκτρολογήστε κάνει buggy0, Enter. Και, ω, Θεέ, ανάκληση από την τελευταία φορά ότι δεν υπάρχουν μηνύματα λάθους είναι ένα καλό πράγμα. Έτσι, καμία έξοδος είναι ένα καλό πράγμα. Αλλά εδώ έχω σαφώς κάποιος αριθμός των λαθών. Έτσι, στην πρώτη γραμμή της εξόδου μετά την πληκτρολόγηση κάνει buggy0, ανάκληση, είναι αρκετά φλύαρη έξοδος Clang του. Κάτω από το καπό, CS50 IDE έχει ρυθμιστεί να χρησιμοποιήσει ένα σωρό επιλογές με αυτό το μεταγλωττιστή έτσι ώστε να μην έχουν να σκεφτούμε γι 'αυτούς. Και αυτό είναι όλο ότι η πρώτη γραμμή μέσα που ξεκινά με Clang. Αλλά μετά από αυτό, τα προβλήματα αρχίζουν να κάνουν την εμφάνισή τους. Buggy0.c στη γραμμή 3, χαρακτήρα 5, υπάρχει ένα μεγάλο, κόκκινο σφάλμα. Τι είναι αυτό? Σιωπηρά δηλώνοντας τη λειτουργία της βιβλιοθήκης printf με τον τύπο int (const char *, ...) [-Werror]. Θέλω να πω, πολύ γρήγορα παίρνει πολύ απόκρυφες. Και βεβαίως, σε πρώτη ματιά, δεν θα αναμένουμε από εσάς να καταλάβετε το σύνολό του μηνύματος. Και έτσι ένα από τα μαθήματα για σήμερα πρόκειται να είναι να προσπαθήσουμε να παρατηρήσετε πρότυπα, ή παρόμοια πράγματα, σε σφάλματα που μπορεί να έχετε αντιμετώπισε στο παρελθόν. Ας δώσουμε έμφαση, εκτός μόνο αυτά τα λόγια που φαίνονται εξοικειωμένοι. Το μεγάλο, κόκκινο σφάλμα είναι σαφώς συμβολική του κάτι που είναι λάθος. σιωπηρά δηλώνοντας βιβλιοθήκη printf λειτουργία. Έτσι, ακόμη και αν δεν καταλαβαίνω τι δηλώνοντας εμμέσως λειτουργία της βιβλιοθήκης μέσα, το πρόβλημα σίγουρα σχετίζεται με printf με κάποιο τρόπο. Και η πηγή του ζητήματος έχει να κάνει με την κήρυξή της. Δηλώνοντας μια λειτουργία είναι να σημειωθεί ότι για πρώτη φορά. Και χρησιμοποιήσαμε την ορολογία την περασμένη εβδομάδα δήλωσης πρωτότυπο μιας συνάρτησης, είτε με μία γραμμή στο πάνω μέρος της σας το δικό της αρχείο ή σε ένα λεγόμενο αρχείο κεφαλίδας. Και σε ποια αρχείο έκαναν λέμε την περασμένη εβδομάδα ότι η printf είναι απόσπασμα, εισαγωγικά, δήλωσε; Σε ποιο αρχείο είναι το πρωτότυπο της; Έτσι, αν θυμάστε, το πρώτο πράγμα που δακτυλογραφημένα, σχεδόν κάθε πρόγραμμα τελευταίο time-- και κατά λάθος μια στιγμή πριν αρχίσει πληκτρολογώντας myself-- ήταν αυτό here-- hash-- #include