ΟΜΙΛΗΤΗΣ 1: Εντάξει. Καλώς ήρθατε και πάλι. Αυτή είναι η δεύτερη εβδομάδα του CS50, και έχουμε μέχρι σήμερα χρησιμοποιούν λειτουργίες, αλλά σε μεγάλο βαθμό τους θεωρείται δεδομένη. Έχουμε χρησιμοποιήσει printf η οποία έχει την παρενέργεια της εκτύπωσης τα πράγματα στην οθόνη. Έχουμε χρησιμοποιήσει get-int, να επιπλέουν. Αλλά τι εάν πραγματικά θέλετε να δημιουργήσετε τις δικές σας συναρτήσεις, καθώς ορισμένες από μπορεί να έχετε ήδη αρχίσει να κάνει για Set Πρόβλημα One, αν και δεν είναι απολύτως αναγκαία; Λοιπόν, ας πάμε μπροστά και να επανεξετάσουμε ότι πρόβλημα απλά ζητώντας από το χρήστη για την το όνομα και την εκτύπωση τους, κάτι για το οθόνη, αλλά να προσπαθήσουμε να συνυπολογίσει κάποια από τα κοινά που έχουμε φαίνεται στον κώδικά μας μέχρι στιγμής. Έτσι, με αυτό εννοώ το εξής. Πάω να πάει μπροστά και να δημιουργήσει ένα νέο πρόγραμμα, απλά καλέστε το hello.c ως συνήθως. Πάω να προχωρήσει και να δώσει τον εαυτό μου περιλαμβάνουν πρότυπο io.h στην κορυφή. Πάω να δώσω στον εαυτό μου, επίσης, preemptively το CS50 βιβλιοθήκη, έτσι ώστε Παίρνω δεν φώναξε σε από τον compiler. Και τώρα είμαι πρόκειται να πάει μπροστά και να κηρύξει int, κυρίως, άκυρη. Και στη συνέχεια, εδώ, αυτό είναι που θέλω να αρχίσει να αναθέτουν λειτουργικότητα κάποια άλλη λειτουργία που εγώ είμαι πρόκειται να γράψω, αλλά αυτό δεν υπάρχουν σήμερα. Για παράδειγμα, ας υποθέσουμε ότι ήθελα να γράψει μια λειτουργία που μου επιτρέπει να εκτυπώσετε γεια, κόμμα, και τότε το όνομα κάποιου χρήστη. Αντί να συνεχίζει να κάνει printf Γεια σας,% s, δεν θα ήταν ωραίο αν υπήρχαν μόνο μια λειτουργία που ονομάζεται Δεν printf αλλά το όνομα εκτύπωσης; Έτσι, με άλλα λόγια, θέλω να είναι σε θέση να γράψετε ένα πρόγραμμα που κάνει μια μικρή κάτι σαν αυτό. Πρώτον, Πάω να πω printf σας όνομα, προτρέποντας έτσι το χρήστη να να μου δώσει το όνομά του, και τότε είμαι πρόκειται να χρησιμοποιήσετε τα γνωστά s string για να κηρύξει ένα string. Δώσε μου μια μεταβλητή τύπου string, αποκαλούν s, και κατάστημα στο ότι η αποτέλεσμα της κλήσης πάρει string. Αλλά τώρα σε εβδομάδες παρελθόν, θα είχα κάπως βαρετά γίνει γεια,% s / n. Και με άλλα λόγια, έχουμε δει αυτό παράδειγμα ένα σωρό φορές, και αυτό είναι ένα τετριμμένο παράδειγμα, επειδή υπάρχει μόνο ένα γραμμή κώδικα, έτσι δεν είναι πραγματικά ένα μεγάλη υπόθεση να κρατήσει πληκτρολογώντας ξανά. Αλλά ας υποθέσουμε ότι αυτή η γραμμή κώδικα στην πραγματικότητα ήταν να γίνει ένα βάρος, και δεν είναι μια γραμμή κώδικα, αλλά είναι 10 γραμμές κώδικα μερικές εβδομάδες από τώρα, και είστε απλά να πάρει κουρασμένος αντιγραφή και επικόλληση ή πληκτρολογήσετε ξανά το ίδιο κωδικό. Δεν θα ήταν ωραίο, αντί να κάνει printf Γεια σας,% s και ούτω καθεξής, Δεν θα ήταν ωραίο αν υπήρχαν μόνο μια λειτουργία που ονομάζεται όνομα εκτύπωσης που παίρνει ένα επιχείρημα - Με άλλα λόγια, χρειάζεται εισροών - και στη συνέχεια ερωτηματικό. Έτσι ώστε η λειτουργία, δεν θα ήταν ήταν ωραίο αν που υπήρχε; Τότε δεν θα έχετε να ανησυχείτε για printf τι είναι, τι% s και όλα αυτές οι περιπλοκές που είναι Δεν είναι όλα αυτά ενδιαφέροντα. Είναι χρήσιμοι. Έτσι, το όνομα εκτύπωσης, δυστυχώς, δεν ήταν εφευρέθηκε περίπου 40 και πλέον χρόνια πριν. Κανείς δεν σκέφτηκε να το γράψω. Αλλά αυτή είναι η ομορφιά της ύπαρξης ενός γλώσσα προγραμματισμού, όπως ακριβώς και στην Scratch μπορείτε να ορίσετε προσαρμοσμένα μπλοκ, έτσι ώστε σε C και οι περισσότεροι οποιαδήποτε γλώσσα, μπορεί να σας ορίσετε τη δική σας λειτουργικότητα, μπορεί να μπορείτε να ορίσετε τις δικές σας συναρτήσεις. Έτσι, ακόμη κι αν έχουμε κύρια από αυτόματα για δωρεάν, μπορούμε να δηλώσουμε τις δικές μας λειτουργίες. Έτσι, Πάω να κάνει λίγο χώρο εδώ επάνω στην κορυφή, και πάω να κηρύξει μου τη δική του λειτουργία που πρόκειται να δούμε ένα λίγο παράξενο στην αρχή, αλλά θα έρθει πίσω σε αυτό πριν από καιρό. Πάω να πω άκυρη, με αποτέλεσμα να υποδεικνύοντας Η λειτουργία αυτή κάτι, έχει μια παρενέργεια, αλλά δεν επιστρέφει κάτι για μένα στο τον ίδιο τρόπο που παίρνουν int ή να πάρει σειρά το ίδιο κάνει. Και Πάω να δώσει σε αυτό μια λειτουργία αναφέρουμε το όνομα εκτύπωσης, και Πάω να διευκρινίζει ότι αυτός ο τύπος πρόκειται να πάρει μια σειρά, και πάω να το αποκαλούμε όνομα συμβολοσειράς. Θα μπορούσα να το ονομάσουμε ό, τι θέλω, αλλά εγώ θέλουν τον κωδικό μου να είναι αυτο-τεκμηρίωση. Με άλλα λόγια, αν κάποιος από εσάς ήταν να ανοίξετε αυτό το αρχείο και να το διαβάσετε, θα μπορούσατε είδος συναγάγει από το όνομα του εν λόγω input ποιος είναι ο ρόλος που θα έπρεπε να παίξει. Και τώρα κάτω από αυτό, είμαι πρόκειται να ανοίξει άγκιστρο και κλειστό άγκιστρο, και έτσι παρατηρήσετε έχω ακολουθήσει το ίδιο μοτίβο στις γραμμές τέσσερα έως επτά ως Έχω ακολουθήσει για μια καλή εβδομάδα συν τώρα μεταξύ, ας πούμε, εννέα γραμμές και 14 που συνθέτουν κύριο. Με άλλα λόγια, να εκτυπώσετε το όνομα είναι μια άλλη λειτουργία. Τώρα, ο compiler δεν πρόκειται να ξέρετε για να καλέσετε αυτό το πράγμα αυτόματα γιατί κυριολεκτικά εφευρέθηκε ακριβώς, αλλά θα ξέρει ακόμα να καλέσετε κύρια αυτόματα, και, φυσικά, στο γραμμή 13, ζητώ τη δική μου λειτουργία. Και επειδή έχω δηλώσει ότι η λειτουργία up on line τέσσερις πριν από τα κύρια, αυτό πρόκειται να διδάξει τον compiler Τι απόσπασμα, unquote, "το όνομα εκτύπωσης" σημαίνει αυτό και τι πρέπει να κάνει. Έτσι είμαι είδος δίνει μια νέα προσαρμοσμένη μπλοκ, στο πλαίσιο της, ας πούμε, το μηδέν. Έτσι, εδώ, μπορώ να βάλω αυτό το πολύ κοινό ή επαναλαμβανόμενο μοτίβο του κώδικα κρατώ γραπτώς στην τάξη, printf % S Γεια σας,% s / n ", - Τι θέλω να βάλω εδώ; S; Θέλω, λοιπόν, να θέσει το όνομα σε αυτό το πλαίσιο. Έτσι παρατηρήσετε ένα κομμάτι από ένα διχοτόμηση εδώ. Επειδή είμαι δηλώνοντας και τη δική μου λειτουργία και έχω κάπως αυθαίρετα ονομάζεται να εκτυπώσετε το όνομα, και επειδή έχω προσδιορίζονται στις παρενθέσεις ότι αυτό function παίρνει μια παράμετρο, το είδος της η οποία είναι μια σειρά - έτσι είναι μια λέξη ή μια φράση ή κάτι τέτοιο - και Είμαι καλώντας το όνομα επιχείρημα, ότι νοείται η μόνη μεταβλητή που είναι σε πεδίο εφαρμογής, να το πω έτσι, είναι το όνομα. S υπάρχει μόνο μεταξύ του τι δύο άγκιστρα, φυσικά; Λοιπόν, πραγματικά, ακριβώς όπως η γραμμή 10, μέσω 14, έτσι ακριβώς όπως τη Δευτέρα δεν μπορούν να χρησιμοποιήσουν S, αλλά αυτό που μπορώ να κάνω είναι να περάσει S στο όνομα εκτύπωσης. Εκτύπωση όνομα ακριβώς έτσι συμβαίνει να το δώσει ένα ψευδώνυμο, ένα συνώνυμο, ένα ψευδώνυμο, καλώντας το όνομα, και τώρα χρήση του σε αυτή τη γραμμή. Έτσι, τώρα επιτρέψτε μου να το αποθηκεύσετε, σμίκρυνση. Επιτρέψτε μου να προχωρήσει και να κάνει γεια. Φαίνεται καλό. Δεν φτύσει τυχόν λάθη. . / Γεια Enter. Ποιο είναι το όνομά μου; David. Και γεια David. Έτσι, δεν είναι όλα τόσο συναρπαστικό, αλλά απλά σκεφτείτε τώρα. Τώρα έχετε την ίδια ουσία όπως κάναμε και στο Scratch για να κάνουν τις δικές μας λειτουργίες. Αλλά υπάρχει ένα κομμάτι ενός πέτυχα. Ας υποθέσουμε ότι δεν είχα σκεφτεί πραγματικά αυτό μέσω και εγώ στην πραγματικότητα, χωρίς Πραγματικά σκέφτομαι έγραψε ότι η λειτουργία εδώ κάτω. Αισθάνεται απόλυτα λογικό. Το Scratch δεν υπάρχει η έννοια από τη θέση στις σελίδες σας. Θα μπορούσε κανείς να θέσει εδώ, ένα εδώ, ένα μέχρι εδώ, και θα μπορούσε να αρχίσει να κοιτάξουμε λίγο βρώμικο, αν δεν το κάνετε απλώστε το τακτοποιημένα, αλλά δεν σημασία πού φυσικά τα σενάρια ήταν στην οθόνη. Δυστυχώς, στην C - και αυτή είναι σε αντίθεση γλώσσες όπως η Java και Python και άλλοι που ίσως να είναι εξοικειωμένοι με - δυστυχώς σε C, ώστε δεν σημασία γιατί το ρολόι αυτό είναι πρόκειται να συμβεί τώρα. Η προεπιλεγμένη λειτουργία που πρόκειται να εκτελέσει είναι, φυσικά, η κύρια. Κύρια πρόκειται να καλέσει το όνομα εκτύπωσης line οκτώ, αλλά, δυστυχώς, η compiler δεν θα ξέρουν καν το όνομα εκτύπωσης υπάρχει μέχρι να φτάσει στη γραμμή 11, που είναι, δυστυχώς, πρόκειται να είναι πολύ αργά. Ας κάνουν ένα γεια. Και τώρα βλασφημία, δύο σφάλματα που προκύπτουν. Έτσι, τώρα επιτρέψτε μου να μετακινηθείτε προς τα επάνω για την ίδια την Κατ 'αρχάς, όπως θα πρέπει να κάνουμε πάντα, και παρατηρήσετε ότι είναι φωνάζεις, "Σιωπηρή δήλωση της συνάρτησης εκτυπώσετε το όνομα. " Έτσι έχουμε δει αυτό το μήνυμα πριν, σιωπηρή δήλωση της συνάρτησης. Όταν έχουμε δει αυτό το είδος του λάθους; Όταν δεν περιλαμβάνουν βιβλιοθήκη. Αν ξέχασα cs50.h και θα έπαιρνα φώναξε για να πάρετε σπάγκο ή να int. Αλλά σε αυτή την περίπτωση, η λειτουργία Print όνομα δεν είναι σε μια βιβλιοθήκη, έτσι δεν είναι; Είναι κυριολεκτικά σε αυτό το αρχείο, έτσι ώστε τι είναι πραγματικά το πρόβλημα; Λοιπόν, δυστυχώς, σε C, θα σας μεταφέρει τόσο απίστευτα κυριολεκτικά ότι αν θέλουν μια λειτουργία που ονομάζεται όνομα εκτύπωσης υπάρχουν, θα πρέπει είτε να εφαρμόσουν που λειτουργούν στην κορυφή του σας κώδικα έτσι ώστε να είναι προσιτή σε μείωση λειτουργίες, αλλά ειλικρινά, αυτό γίνεται προχειρότητα πολύ γρήγορα. Προσωπικά, μου αρέσει βάζοντας κύρια πρώτη γιατί τότε είναι πολύ σαφές τι είναι αυτό πρόγραμμα κάνει την πρώτη ματιά. Και επιπλέον, μπορείτε να πάρετε σε περίεργα γωνία περιπτώσεις κατά τις οποίες, αν x θέλει να καλέσετε y y αλλά μπορούσαμε να ονομάσουμε x, απλά φυσικά δεν μπορεί πραγματικά να θέσει ένα πάνω από το άλλο. Αλλά αποδεικνύεται σε C, μπορούμε να λύσουμε αυτό πολύ απλά. Πάω να θέσει ένα μικρό κομμάτι του χώρου μέχρι εδώ, και είμαι απλώς πρόκειται να προληπτικά, αν και κάπως πλεονασμό, πρόκειται να διδάξουν το compiler ότι υπάρχει μια λειτουργία κάλεσε το όνομά εκτύπωσης, παίρνει ένα string, και Πάω να καλέσετε το όνομα ερωτηματικό. Έτσι, αυτό είναι τώρα στη γραμμή τέσσερα, το οποίο Δεν έχω δει πριν, είναι μια δήλωση του ονόματος εκτύπωσης λειτουργία, αλλά αυτό είναι μόνο μια υπόσχεση ότι αυτή η λειτουργία θα τελικά να οριστεί, τελικά να εφαρμοστεί. Αυτό τώρα μπορώ να αφήσει μόνο επειδή τώρα αυτό είναι ο ορισμός, η εφαρμογής, το είδος του last mile από την εφαρμογή της παρούσας συγκεκριμένη λειτουργία. Έτσι, ειλικρινά αυτό είναι ηλίθιο, αυτό είναι ενοχλητικό, αλλά αυτό είναι ο τρόπος C είναι, και είναι γιατί σας παίρνει πολύ κυριολεκτικά και, όπως ένας υπολογιστής ειλικρινά θα πρέπει, μόνο κάνει ακριβώς ό, τι σας πει να κάνουν, και έτσι ότι η παραγγελία είναι σημαντική. Έτσι, έχετε κατά νου ότι και πάλι, να αρχίσουν να παρατηρήσετε την επανάληψη των προτύπων. Οι πιθανότητες είναι εσείς θα είναι, αν δεν έχετε ήδη, αρχίσει να αντιμετωπίσετε μηνύματα όπως αυτό που εκ πρώτης όψεως φαίνεται εντελώς αινιγματικά, αλλά αν ξεκινήσετε να ψάξουν για αυτά λέξεις-κλειδιά όπως "Σιωπηρή δήλωση," αναφορά σε ένα λειτουργία σε αυτή την περίπτωση - και ειλικρινά, μερικές φορές να πάρει έστω και λίγο πράσινο σύμβολο καρότο που σου λέει πού το θέμα είναι κατά πάσα πιθανότητα - μπορείτε να αρχίσετε να εργαστεί το δρόμο σας μέσα από ακόμα αόρατο μηνύματα λάθους. Οποιεσδήποτε ερωτήσεις σχετικά με τη σύνταξη δική του λειτουργία με τον τρόπο αυτό; Ας κάνουμε κάτι που είναι λίγο πιο συναρπαστικό. Αντί απλά να κάνουμε κάτι που έχει μια παρενέργεια της εκτύπωσης, άσε με να φύγω μπροστά και να αποθηκεύσετε ένα νέο αρχείο, και θα καλέσετε αυτό positive.c, ακόμα κι αν είναι πρόκειται να είναι λίγο διαφορετικό σε σχέση με την τελευταία φορά. Και αυτή τη φορά, θέλω να επαν-εφαρμόσει positive.C παράδειγμα, την τελευταία φορά, το οποίο είναι αναγκάσει τον χρήστη να δώσει μένα ένας θετικός ακέραιος. Αλλά εγώ έπρεπε να χρησιμοποιήσει πάρει int τελευταία φορά. Δεν θα ήταν ωραίο αν υπήρχε μια λειτουργία που ονομάζεται πάρει θετικά int ότι θα μπορούσα να αναθέτουν μόνο αυτό κομμάτι της λειτουργικότητας να? Έτσι, η διαφορά εδώ είναι ότι θα εφαρμόσουν πάρει θετικά int, αλλά σε αντίθεση με Όνομα εκτύπωσης που είχε παρενέργεια - δεν επιστρέψει κάτι σαν να μου ένας αριθμός ή ένα string - να πάρει θετικά int είναι, φυσικά, πρόκειται να επιστροφή, ελπίζω, μια θετική int. Έτσι, ας το κάνουμε. Συμπεριλάβετε cs50.h, περιλαμβάνει τις τυποποιημένες io.h. Int main κενό. Και τώρα εδώ, είμαι πρόκειται να πάει μπροστά και ας πούμε int, αποκαλούν n, ισούται πάρει θετικά int. Και ακριβώς όπως να πάρει int υπάρχει ήδη επειδή το προσωπικό που έγραψε, Πάω να αναλάβει προς το παρόν που να θετική int υπάρχει, και τώρα θα πάω να προχωρήσει και να πω printf, ευχαριστίες για το% i / n ", n. Έτσι τώρα, αν έχω καταρτίσει αυτό το πρόγραμμα, τι πρόκειται να συμβεί στο τερματικό μου παράθυρο στο κάτω μέρος της οθόνης; Πάω να πάρετε πιθανώς ότι ίδιο λάθος όπως και πριν. Οπότε ας προσπαθήσουμε αυτό. Κάντε θετικές. Και πάλι, σιωπηρή δήλωση της λειτουργίας του, να πάρει θετικά int. Έτσι μπορούμε να λύσουμε αυτό το μια-δυο τρόπους. Πάω να την κρατήσουμε απλή και μόνο θέσει τη δήλωσή μου εδώ και να πάρει θετική int. Χρειάζομαι το λεγόμενο υπογραφή. Η υπογραφή αναφέρεται μόνο στην αισθητική της πρώτη γραμμή του προγράμματος. Λοιπόν, τι θα πρέπει να πάρει θετικά int επιστροφή; Έτσι, ένας int. Εννοώ στην ιδανική περίπτωση, θα επιστρέψει κάτι σαν θετικό int, αλλά ότι δεν υπάρχει. Εμείς δεν έχουμε δει ότι μεταξύ των δεδομένων μας τύπων, έτσι πρέπει να ασχοληθεί με το γεγονός ότι έχουμε πολύ λίγες τύπους δεδομένων για να εργαστεί με. Αλλά μπορούμε να επιστρέψουμε μια int και μόλις πιστεύω ότι θα είναι θετική. Είναι πρόκειται να ονομάζεται πάρει θετικά int. Και τώρα σχετικά με το πώς τα επιχειρήματά της; Έχει λάβει οποιαδήποτε είσοδο; Μήπως χρειάζεται καμία εισαγωγή; Γι 'αυτό δεν χρειάζεται να ξέρετε σε τίποτα εκ των προτέρων. Πάρτε αλφαριθμητικό, δεν, να πάρει int δεν το κάνει. Printf κάνει - θα πρέπει να έχουν κάποια εισροών περάσει σε αυτό - και το όνομα εκτύπωσης χρειάζεται κάποια στοιχεία, αλλά να θετική int δεν το κάνει. Έτσι, Πάω να ρητώς πείτε το κενό compiler. Void είναι η απουσία του από οτιδήποτε άλλο. Έτσι κενό δεν σημαίνει τίποτα συμβαίνει στο εσωτερικό των παρενθέσεων, τελεία. Και τώρα στο κάτω μέρος του αρχείου μου - και και πάλι, είμαι ακριβώς είναι το είδος του πρωκτού εδώ βάζοντας κύρια στην κορυφή, η οποία είναι καλή πρακτική, διότι αυτό τον τρόπο, οποτεδήποτε εσείς ή κάποιος άλλος ανοίγει το αρχείο σας, το λειτουργικότητα είναι ακριβώς εκεί. Μπορείτε να βουτήξετε από το μηδέν. Έτσι τώρα είμαι πρόκειται να επαναλάβει αυτό, πάρει θετικά int κενό, αλλά δεν είμαι πρόκειται να χτυπήσει ένα ερωτηματικό τώρα. Πάω να ανοίξει άγκιστρα, και τώρα πρέπει να δανειστεί μερικές ιδέες από τη Δευτέρα. Έτσι, όπως θα θυμάστε, κάναμε κάτι θέλατε να κάνετε τα εξής, ενώ κάτι που ήταν αλήθεια. Και τι έκανα; Έκανα κάτι σαν δίνουν μένα ένας θετικός ακέραιος, λίγο μια προτροπή. Θα μπορούσα να χρησιμοποιήσω όλες τις λέξεις που θέλω. Και τότε χρησιμοποίησε αυτό; Int n ισούται με πάρει int, δεν υπάρχουν επιχειρήματα για να το. Και παρατηρήσετε τη διαφορά. Όταν καλείτε μια συνάρτηση, όταν χρησιμοποιείτε μια λειτουργία, δεν μπορείτε να βάλετε στο κενό. Μπορείτε να το κάνετε μόνο ότι, όταν με την οποία μια λειτουργία, τη διδασκαλία του compiler τι θα πρέπει να περιμένουμε. Έτσι, δεν χρειάζεται να θέσει ακυρώσει τον εαυτό σας εκεί. Και τώρα τι ήταν η κατάστασή μου; Λοιπόν, το η δεν είναι ίσο με θετική, αλλά αυτό είναι μόνο η ψευδο-κώδικα. Λοιπόν, πώς μπορώ να εκφράσω αυτό πιο καθαρά; Έτσι, μικρότερη ή ίση με το μηδέν. Έτσι και πάλι, η ανακοίνωση που μπορείτε να κάνετε λιγότερο από ή ίσο με. Ακόμα κι αν είναι δύο ξεχωριστές σύμβολα, μπορείτε να το κάνετε σε πληκτρολόγιό σας ως τέτοια. Αλλά υπάρχει ακόμα ένα bug που Τα σκάτωσα τελευταία στιγμή πάρα πολύ. Έχω να δηλώσω - ακριβώς. Έχω να δηλώσω n εξωτερικό του βρόχου. Γι 'αυτό πρέπει να τεθεί n μέχρι εδώ, και εγώ δεν κάνω θέλετε να το δηλώσουν εκ νέου εδώ μήπως να πάρω μια νέα μεταβλητή. Απλά θέλω να εκχωρήσετε μια τιμή εδώ. Και τώρα δεν είμαι αρκετά γίνει εδώ. Επιτρέψτε μου να πάρει μπροστά από τον εαυτό μου και να υποκρινόμαστε είμαι γίνει. Κάντε θετικές, και τώρα υπάρχει ένα νέο σφάλμα. Έλεγχος φθάνει στο τέλος της μη άκυρη λειτουργία. Έτσι νέο μήνυμα λάθους, αλλά αν το είδος της δώσουμε έμφαση, εκτός κάθε ένα από τα λόγια, μάλλον παραπέμπει σε αυτό που είναι λάθος. Έλεγχος. Έλεγχος σημαίνει απλά τη σειρά των εργασιών σε ένα πρόγραμμα. Ο υπολογιστής έχει τον έλεγχο και την κάτι πήγε στραβά. Έτσι ώστε να φτάνει στο τέλος του ένα μη-κενό λειτουργίας. Ποια λειτουργία είναι προφανώς αναφέρεστε; Ποια είναι η λειτουργία δεν είναι άκυρη; Έτσι, να πάρει θετικά int, και λίγο σύγχυση σε αυτό το καλά, Είναι το είδος του κενού. Έχει μια προδιαγραφή του κενού για τους τα επιχειρήματα, αλλά η παραγωγή της πρόκειται να να είναι n τύπου. Έτσι, η λέξη στα αριστερά είναι η λεγόμενη τύπο επιστροφής. Η λέξη στο εσωτερικό είναι εδώ το μηδέν ή περισσότερα επιχειρήματα ότι μια συνάρτηση παίρνει. Έτσι τι πρέπει να κάνω; Σε αυτό το σημείο στον κώδικά μου, γραμμή 21, όπου αναβοσβήνει η ερώτηση είναι τώρα, έχουν θετική int μέσα της μεταβλητής που ονομάζεται n. Πώς μπορώ να δώσω πίσω στο κύριο; Κυριολεκτικά. Επιστροφή n ερωτηματικό. Έτσι ακριβώς όπως Colton επέστρεψε ένα κομμάτι της χαρτί με μια απάντηση για μένα με τη ρίψη εκείνο το κομμάτι του χαρτί στο μικρό μαύρο κουτί πάνω στο τραπέζι, για να το κάνουμε αυτό σε κώδικα, μπορείτε κυριολεκτικά να γράφουν, επιστρέφουν n, και είναι σαν να ήταν Colton να μου δίνει κάτι φυσική πίσω. Σε αυτή την περίπτωση, αυτό που συμβαίνει είναι να πάρετε θετική int πρόκειται να παραδώσει Τι είναι πιθανώς μια θετική ακέραιο σε ποιον; Πού η αξία καταλήγουν; Που καταλήγει στη μεταβλητή αυτή, η και τότε θα προχωρήσουμε με τη γραμμή εννέα. Έτσι, με άλλα λόγια, κατά σειρά εργασίες, το πρόγραμμα αυτό ξεκινά εκτέλεση, και ο compiler συνειδητοποιεί, oh, θέλετε τη βιβλιοθήκη; Επιτρέψτε μου να αρπάξει ό, τι βρίσκεται μέσα σε αυτό. Ω, θέλετε το πρότυπο βιβλιοθήκης IO; Επιτρέψτε μου να αρπάξει ό, τι βρίσκεται μέσα σε αυτό. Τι λέει ο compiler λέει στον εαυτό του όταν χτυπά γραμμή τέσσερα; Ω, υποσχέθηκε να εφαρμόσει το λειτουργία που ονομάζεται πάρει θετικά, αλλά θα πάρει πίσω σε αυτό αργότερα, κάτι προς αυτή την κατεύθυνση. Int main void σημαίνει ακριβώς εδώ είναι τα κότσια του προγράμματός μου. Γραμμή επτά είναι μόνο ένα άγκιστρο. Γραμμή οκτώ λέει στα αριστερά, δίνουν με 32 bits για ακέραιο, αποκαλούν n. Στη δεξιά πλευρά, είναι λέγοντας πάρει θετικά int. Τώρα Ας παύση αυτή η ιστορία γιατί τώρα Δεν κρατώ μετακινώντας τον κέρσορα μου κάτω. Δρομέα μου πηγαίνει τώρα εδώ κάτω, επειδή τώρα να πάρει θετικό int εκτελεί. Int n δηλώνεται. Ακολουθήστε τα παρακάτω βήματα. Printf μου δίνει ένα θετικό ακέραιο. Πάρτε μια int από το χρήστη, αποθηκεύστε το σε n, και ίσως κάνει αυτό ξανά και ξανά. Αυτός ο βρόχος σημαίνει ότι ο κώδικας αυτός θα μπορούσε εκτελέσει πάνω και κάτω, όπως αυτό πάλι και πάλι, αλλά όταν ο χρήστης τελικά συνεργάζεται και μου δίνει μια θετική int, χτύπησα γραμμή 21, σημείο στο οποίο ο αριθμός επιστρέφονται, και τα οποία το ένα θα πρέπει να τονίζουν τώρα; Εννέα. Ελέγχου, να το πω έτσι, επιστρέφει να παρατάξει εννέα. Αυτή είναι η γραμμή που είναι τώρα υπεύθυνος. Έτσι, αυτό είναι ό, τι έχει συμβεί όλα αυτή τη φορά κάτω από το καπό, αλλά όταν έχουμε χρησιμοποιούμενες λειτουργίες, όπως printf ή να πάρει ακόμη σειρά που κάποιος άλλος έγραψε για σας, ο έλεγχος να παραδοθεί γραμμή κώδικα off σε κάποιον άλλο από την γραμμή προς γραμμή. Είναι απλά δεν θα μπορούσαμε να το δούμε και εμείς δεν θα μπορούσε να απεικονίζουν πραγματικά σε αυτή την το πρόγραμμα γιατί είναι σε κάποια άλλη το αρχείο στο σκληρό δίσκο εν αγνοία μας. Οπότε ας πραγματικότητα συγκεντρώνουν και να τρέξει αυτό τώρα. Κάντε θετικές. Συντάξτε, αυτό είναι πρόοδος. . / Θετική. Δώσε μου ένα θετικό ακέραιο. Ας είναι δύσκολη. Αρνητικό 1. Μηδέν. Ας δώσει 50. Ευχαριστώ για το 50, και έτσι ο έλεγχος τώρα έχει επιστρέψει. Οποιεσδήποτε ερωτήσεις, στη συνέχεια, σχετικά με αυτό; Ναι; [Δεν ακούγεται]. Ξαναπώ. Ω, καλή ερώτηση. Έτσι, μπορείτε να παρατηρήσετε μια παράλληλη εδώ ότι Είμαι το είδος της κοπής μια γωνιά του. Στη γραμμή 12, λέω, να πάρει θετικά int επιστρέφει ένα int, αλλά και από τον ίδιο λογική, σήμερα ανέρχεται στο λόγο ότι σε line έξι, λέω ότι ο κύριος επιστρέφει ένα int, αλλά αυτό που έχουμε ποτέ είχε σε οποιοδήποτε από τα προγράμματα μας; Εμείς ποτέ δεν είχα αναφορά Αυτό το πλήκτρο επιστροφής λέξη. Έτσι, αποδεικνύεται ότι το C, τουλάχιστον η έκδοση από αυτό που χρησιμοποιούμε το 1999, από τεχνική άποψη, αυτό είναι συμβαίνει για σας αυτόματα. Κάθε φορά που εφαρμόζουν ένα πρόγραμμα και θα εφαρμόσουν μια λειτουργία που ονομάζεται κύρια, ότι η συνάρτηση θα επιστρέψει μηδέν με προεπιλεγμένες τιμές τους αν δεν πω κι αλλιώς, και το μηδέν είναι απλά μια σύμβαση. Ο κόσμος επιστρέφει μηδέν έτσι υποδεικνύοντας ότι όλα είναι καλά, αποτελεσματικά αφήνοντας μας με τέσσερα δισεκατομμύρια πιθανά πράγματα που θα μπορούσε να πάει λάθος, έτσι ώστε, αν επιστρέψει ένα, ότι θα μπορούσε να σημαίνει έναν κωδικό αυτό σημαίνει ότι το πράγμα που πήγε στραβά. Θα μπορούσαμε να επιστρέψουν δύο, πράγμα που σημαίνει αυτό το άλλο πράγμα πήγε στραβά. Θα μπορούσε να επιστρέψει τέσσερα δισεκατομμύρια, τα οποία σημαίνει ότι αυτό το άλλο πράγμα πήγε στραβά. Και αν τώρα να σκεφτούμε τη δική σας PC ή Mac, μπορεί να υπενθυμίσει ότι Μερικές φορές μπορείτε να πάρετε αινιγματικά μηνύματα λάθους από το λογισμικό που είστε χρησιμοποιώντας, και μερικές φορές έχει ένα ανθρώπινο φιλικό περιγραφή, αλλά υπάρχει συχνά ένας κώδικας ή ένας αριθμός στην οθόνη; Αν αυτό δεν έρχονται στο μυαλό, απλά να κρατήσει ένα μάτι έξω για αυτό. Αυτό είναι συνήθως ό, τι αυτά κώδικες αναφέρεστε. Είναι περιλαμβάνονται στο Microsoft Word και άλλα προγράμματα, έτσι ώστε αν καταθέσει Αναφορά σφάλματος με την εταιρεία, μπορείτε να πες τους, OH, πήρα τον αριθμό σφάλματος 45. Και μερικοί πίσω προγραμματιστής στην εταιρεία μπορεί να φανεί ότι σε του ή της κώδικα και να πει, OH, αυτό είναι επειδή έκανα Αυτό το σφάλμα και γι 'αυτό ο χρήστης πήρα αυτό το μήνυμα. Αλλά ειλικρινά, είναι λίγο αποσπούν την προσοχή και λίγο κουραστικό να καταλήγουν στο συμπέρασμα ότι, τουλάχιστον για μας πρώτα προγράμματα, έτσι έχουμε έχουν την παράλειψη. Αλλά όλο αυτό το διάστημα ο καθένας από σας βασικές λειτουργίες του είχε κρυφά αυτό γραμμής προστίθενται αυτόματα για σας από το compiler, μόνο με σύμβαση για να σας εξοικονομήσει κάποιο χρόνο. [Δεν ακούγεται]. Δεν χρειάζεται να το συμπεριλάβει στην κύρια. Αυτό είναι μια χαρά. Μπορείτε να το κάνετε πρέπει να συμπεριληφθεί αν ήταν εφαρμογή μια λειτουργία όπως αυτό. Διαφορετικά, η επίπεδη λειτουργία έξω δεν θα λειτουργήσει. Αλλά σε γενικές γραμμές, δεν είναι απαραίτητο. Σε μια εβδομάδα ή δύο, θα αρχίσετε να πάρει σε αυτή την συνήθεια όταν θέλουμε να αρχίσουμε σηματοδοτεί λάθη. Πολύ καλή ερώτηση. Έτσι, γρήγορη λεκτική διάλειμμα για να αναφέρω ότι αυτή την Παρασκευή, δεν θα πρέπει να έχει το μεσημεριανό γεύμα per se, αλλά εμείς θα πρέπει να έχει δείπνο με μερικοί από τους μαθητές και το προσωπικό. Αν θέλετε να έρθετε μαζί μας, να αισθάνονται ελεύθερος να πάει στο cs50.net/rsvp. 18:00 αυτή την Παρασκευή. Το διάστημα είναι, όπως πάντα, περιορισμένη, αλλά θα συνεχίσει να κάνει αυτά σε μια σχεδόν εβδομαδιαία βάση, εάν ο χώρος τελειώσει αυτή την εβδομάδα. Έτσι, η δραματική στιγμή που φύγαμε από την Η Δευτέρα ήταν ότι οι χορδές μπορεί στην πραγματικότητα να αναπροσαρμόζονται σε, το οποίο σημαίνει απλά μπορεί να πάρει από τον πρώτο χαρακτήρα, η δεύτερος χαρακτήρας, ο τρίτος χαρακτήρας και ούτω καθεξής, επειδή μπορείτε να αποτελεσματικά σκεφτείτε μια σειρά, όπως γειά σου, ως εν προκειμένω πέντε επιστολές στο εσωτερικό των κιβωτίων. Και μπορείτε να πάρετε σε κάθε μία από αυτές κουτιά με ποια σύνταξη κάναμε εισαγάγει τη Δευτέρα; Οι αγκύλες στο πληκτρολόγιό σας. Αυτό ακριβώς σήμαινε να πάει στη θέση μηδέν. Είμαστε αρχίζουν να μετρούν από το μηδέν, έτσι βραχίονα μηδέν σημαίνει h, ένα στήριγμα σημαίνει Ε, και ούτω καθεξής. Και έτσι όλη την ώρα, όταν έχουμε πάει χρησιμοποιώντας χορδές και πληκτρολογώντας "γεια" και "κόσμο" και άλλα πράγματα για η οθόνη, είναι ήδη αποθηκευμένα στα πλαίσια σαν και αυτό. Και να λάβει μια εικασία. Τι σημαίνει κάθε κουτάκι αντιστοιχεί σε σωματικά στο εσωτερικό του υπολογιστή σας; [Δεν ακούγεται]. Συγγνώμη; Χαρακτήρες. Έτσι, ένας χαρακτήρας, σίγουρα στην περίπτωση χορδές, και ένας χαρακτήρας είναι απλά οκτώ bits ή ένα byte. Έτσι, ίσως είναι τουλάχιστον αόριστα εξοικειωμένοι με το γεγονός ότι σας υπολογιστής έχει μνήμη. Έχει δύο τύπους μνήμης τουλάχιστον. Το ένα είναι ο σκληρός δίσκος, όπου μπορείτε να αποθηκεύσετε πράγματα μόνιμα, και αυτό είναι συνήθως μεγάλη, ώστε να μπορείτε να έχετε τις ταινίες και μουσική και ούτω καθεξής. Στη συνέχεια, έχετε ένα άλλο είδος μνήμης ονομάζεται RAM, Κ-Α-Μ, Random Access Μνήμη, και αυτό είναι το είδος της μνήμης που χρησιμοποιείται όταν ο υπολογιστής σας είναι τρέχει, αλλά αν χάσει την εξουσία ή σας πεθαίνει μπαταρία, κάτι που είναι αποθηκευμένα στη μνήμη RAM εξαφανίζεται αν χάσει την εξουσία εντελώς επειδή δεν είναι επίμονη. Θα έχουν συνήθως, αυτές τις μέρες, μια συναυλία του, δύο συναυλίες, ίσως και περισσότερο. Και η άνω πλευρά της μνήμης RAM είναι ότι είναι πολύ πολύ, πολύ πιο γρήγορα από τους σκληρούς δίσκους ή ακόμα και στερεάς κατάστασης οδηγεί αυτές τις μέρες, αλλά είναι συνήθως πιο ακριβά, ώστε έχετε λιγότερο από αυτό. Έτσι, η σημερινή συζήτηση αφορά πραγματικά στη RAM, αυτό το είδος της μνήμης που υπάρχει μόνο όσο υπάρχει εξουσία τροφοδοτείται στον υπολογιστή σας. Έτσι, όταν πληκτρολογείτε H-Ε-L-L-O, Enter στο το πληκτρολόγιο, το H συμβαίνει σε ένα byte της μνήμης RAM, η E πρόκειται στην ένα άλλο byte της μνήμης RAM, είναι όσο το υπόλοιπο της λέξης. Έτσι θυμηθούμε τι ήμασταν σε θέση να κάνει την τελευταία φορά ήταν αυτό. Επιτρέψτε μου να πάμε μπροστά και να ανοίξει το αρχείο ότι καλέσαμε string.c και ανάκληση ότι φαινόταν λίγο κάτι σαν αυτό. Επιτρέψτε μου πραγματικά roll back και να αλλάξετε να είναι ακριβώς αυτό που έμοιαζε, μήκος του νήματος του s. Έτσι, δείτε το πρόγραμμα εδώ. Θα περιλαμβάνει το CS50 βιβλιοθήκη, ώστε ότι μπορούμε να χρησιμοποιήσουμε πάρει string. Θα περιλαμβάνει στάνταρ io.h έτσι μπορούμε να χρησιμοποιήσουμε printf. Γιατί έχουμε συμπεριλάβει string.h; Αυτό ήταν νέα τη Δευτέρα. Έτσι θέλαμε μήκους. Str leng. Οι άνθρωποι αποφάσισαν χρόνια πριν, ας είναι σύντομη. Αντί χαρακτηρίζοντάς την «μήκους», ας το ονομάσουμε "str leng" και αφήστε το Εικόνα κόσμο ότι έξω, και έτσι ώστε να είναι τι έχουμε πρόσβαση σε με string.h. Αυτό είναι γνωστό. Αυτό είναι γνωστό. Αυτό είναι γνωστό. Αυτό είναι λίγο νέο. Στη γραμμή 22 - και θα επανέλθουμε σε αυτό, αλλά τώρα ξέρω - και εσείς θα ξέρετε μόνο αυτό από την κατοχή διαβάστε την τεκμηρίωση ή αν ξέρατε ήδη C - να πάρει σειρά μερικές φορές μπορεί βίδα μέχρι. Εάν ο χρήστης είναι πραγματικά αντιδικία ή μη συνεργάσιμα και αυτός ή αυτή ακριβώς δεν πληκτρολογήσετε τίποτα στο πληκτρολόγιο ή τύποι τόσο πολύ στο πληκτρολόγιο που συντρίβει τη μνήμη του υπολογιστή, στη θεωρία, να πάρει χορδών θα μπορούσε να επιστρέψει κάτι άλλο εκτός από ένα συμβολοσειρά χαρακτήρων. Θα μπορούσε να επιστρέψει ένα ειδικό ονομάζεται αξία NULL σε όλα τα καλύμματα, Ν-U-L-L, και αυτό είναι μόλις το λεγόμενο αξία δεικτών. Είναι μια ιδιαίτερη αξία, που σημαίνει κάτι κακό συνέβη στην προκειμένη περίπτωση. Είναι η απουσία μιας συμβολοσειράς. Έτσι null Είμαι ο έλεγχος για απλά έτσι ώστε, πολυλογώ, str leng και άλλες λειτουργίες που έρχονται με C, εάν περιμένουν μια σειρά, αλλά θα τους περάσει η απουσία ενός string, αν περάσει τους null, τον υπολογιστή ή το πρόγραμμα απλά θα διακοπεί εντελώς. Θα κολλήσει. Θα ρίξει κάποιο μήνυμα λάθους. Κακά πράγματα θα συμβούν. Έτσι, ακόμη κι αν αυτό είναι ακόμα δεν είναι σαφώς καθορισμένες - Αυτό θα έχει περισσότερο νόημα σε μια εβδομάδα ή δύο - στη γραμμή 22, αυτό είναι μόνο ένα παράδειγμα του εαυτού αμυντικό έλεγχος σφαλμάτων μόνο σε περίπτωση που ένα χρόνο από ένα εκατομμύριο κάτι πάει στραβά, σε τουλάχιστον το πρόγραμμά μου δεν θα συντριβή. Έτσι, αν s δεν ισοδυναμεί με κάτι κακό, Έχω αυτό για βρόχο, και αυτό ήταν όπου είχαμε αυτό το άλλο νέο κομμάτι της σύνταξης. Έχω ένα for loop επανάληψη από μηδέν μέχρι το μήκος του s. Και τότε εδώ, ήμουν εκτύπωσης έξω s i βραχίονα, αλλά γιατί δεν μπορώ να χρησιμοποιήσω γ% όλων των μια ξαφνική αντί του% s ακόμα αν s είναι ένα string; Είναι ένας χαρακτήρας, έτσι δεν είναι; S είναι ένα string, αλλά s κάτι βραχίονα, s βραχίονα i όπου i είναι μηδέν μία ή δύο, αυτό είναι ένα άτομο χαρακτήρα της συμβολοσειράς, και έτσι για ότι, printf θα πρέπει να ενημερωθεί ότι Είναι πράγματι ένα χαρακτήρα να περιμένουμε. Και στη συνέχεια να υπενθυμίσω, τι έκανε αυτό πρόγραμμα πραγματικά να κάνουμε; Τυπώθηκε έξω σε στήλες. Ναι, ακριβώς. Θα εκτυπωθεί μόνο τη λέξη που πληκτρολογείτε μια στήλη, έναν χαρακτήρα ανά γραμμή. Έτσι, ας δούμε αυτό και πάλι. Έτσι κάνουν string. Καταρτίζονται OK. . / String. Επιτρέψτε μου να πληκτρολογήσετε H-Ε-L-L-O, Enter, και Πράγματι μπορώ να το πάρει, μία ανά γραμμή. Έτσι, επιτρέψτε μου να κάνω μία βελτιστοποίηση εδώ. Εάν σκέφτεστε για αυτό, ειδικά αν έχετε προγραμματίσει πριν, υπάρχει αναμφισβήτητα η αναποτελεσματικότητα στην γραμμή 24. Με άλλα λόγια, δεν είναι κατ 'ανάγκη το καλύτερο σχεδιασμό. Απλή, τουλάχιστον μία φορά σας θυμηθείτε τι str leng είναι, αλλά είναι κάνει κάτι χαζό δυνητικά. Τι θα μπορούσε να είναι αυτό; [Δεν ακούγεται]. Ακριβώς. Είναι ο έλεγχος για το μήκος του ων κάθε φορά, ακόμη και αν H-E-L-L-O πρόκειται πάντα να είναι πέντε χαρακτήρες. Κάθε φορά μέσα από αυτόν τον βρόχο, οι πέντε δεν αλλάζει. Θα μπορούσα να έχω προσαύξηση, αλλά τι είναι το μήκος του s σε κάθε επανάληψη αυτού του βρόχου; Είναι πέντε, είναι πέντε, είναι πέντε, και όμως ζητώ, ωστόσο αυτό ερώτηση ξανά και ξανά και ξανά. Τώρα, ειλικρινά, ο υπολογιστής είναι έτσι βλασφημία γρήγορα, κανείς δεν πρόκειται να παρατηρήσετε διαφορά σε αυτή την περίπτωση, αλλά αυτά τα είδη από κακές αποφάσεις σχεδιασμού μπορεί να αρχίσει να προσθέσει επάνω εάν ο compiler ίδιο δεν προσπαθήσετε να διορθώσετε αυτό για σας που αυτό συνήθως δεν θα μπορούσε, σε τουλάχιστον στη συσκευή. Έτσι, Πάω να το κάνουμε αυτό. Πάω να προσθέσετε ένα κόμμα μετά πρώτη μεταβλητή μου. Πάω να δώσω στον εαυτό μου ένα άλλο μεταβλητή, καλώντας n, μόνο από Σύμβαση για αριθμούς, και τότε είμαι πρόκειται να αναθέσει η η τιμή του string μήκος του s. Και τότε είμαι πρόκειται να αλλάξει κατάστασή μου να είναι αυτό; Πάω να αλλάξει την κατάστασή μου να, ενώ το i είναι μικρότερο από το Ν. Έτσι τώρα, πόσες φορές είμαι ελέγχοντας το μήκος του s; Μόλις, αλλά είναι εντάξει για να μπορώ να ελέγξω κατά n ξανά και ξανά, γιατί τώρα και εκείνες αξίες δεν είναι στην πραγματικότητα αλλάζει. Τώρα για τώρα, απλά να ξέρετε ότι κάθε φορά που καλέσετε μια συνάρτηση, υπάρχει ένα κομμάτι της γενικά, δεν είναι αρκετή για να σας αποθαρρύνει πραγματικά από τη χρήση όλο και λειτουργίες, αλλά Σίγουρα όταν υπάρχει μια γραμμή κώδικα έτσι - και οι γραμμές θα πάρει πιο ενδιαφέρουσα πριν από καιρό - όπου υπάρχει μια ευκαιρία να σκεφτούμε, αν πληκτρολογήστε τον κωδικό αυτό, πόσες φορές θα το εκτελέσει; Θα αρχίσετε να βλέπετε την πάροδο του χρόνου το απόδοση των προγραμμάτων σας μπορεί να όντως αλλάξει. Στην πραγματικότητα, ένα από το πρόβλημα θέτει έχουμε κάνει εδώ και χρόνια παρελθόν περιλαμβάνει εφαρμογής, όπως ίσως θυμάστε από εβδομάδα μηδέν, ένα ορθογραφικό έλεγχο, αλλά ένα ορθογραφικός έλεγχος που έχει σχεδιαστεί για να υποστηρίξει ένα λεξικό των 150.000 συν λέξεις που θα σας δώσω. Θα πρέπει να γράψετε κώδικα που φορτώνει αυτά τα λόγια στη μνήμη RAM, έτσι ώστε σε κουτιά, όπως είδαμε στην οθόνη μια στιγμή πριν, και στη συνέχεια, όσο πιο γρήγορα μπορείτε, θα πρέπει να είναι σε θέση να απαντήσει σε μια ζήτημα της μορφής, είναι αυτή η λέξη ορθογραφικά λάθη; Είναι αυτή η λέξη με ορθογραφικά λάθη; Είναι αυτή η λέξη με ορθογραφικά λάθη; Και σε κάτι σαν αυτό που έχουμε γίνει τα προηγούμενα χρόνια είναι ότι μετατράπηκε σε, έστω και σε ένα opt-in προαιρετική βάση, ανταγωνισμού του είδους, με την οποία ο μαθητές που χρησιμοποιούν την λιγότερη μνήμη RAM και λιγότερο χρόνο, λιγότερους κύκλους CPU, καταλήγουν διοχέτευσή του μέχρι την κορυφή του λίγο πίνακα κατάταξης ή την κατάταξη που έχουμε θέσει για αρχική σελίδα του μαθήματος, όπως έχουμε γίνει τα προηγούμενα χρόνια. Έτσι και πάλι, εντελώς προαιρετική, αλλά αυτό μιλά για τις ευκαιρίες σχεδιασμού που είναι μπροστά μόλις αρχίσουμε δόμησης κορυφή μερικά από αυτά βασικά δομικά στοιχεία. Έτσι, επιτρέψτε μου να επιστρέψω σε αυτό το διάγραμμα μόνο μια στιγμή και να αποκαλύψει λίγο κάτι περισσότερο. Αυτό είναι πράγματι ένα string, και έχουμε λάβει πλεονέκτημα των λίγων βιβλιοθήκες, πρότυπο io.h η οποία έχει - Printf. Printf, μεταξύ άλλων. cs50.h, η οποία έχει πάρει int και να πάρει σειρά και ούτω καθεξής, string.h, το οποίο είχε str leng. Αλλά τελικά υπάρχει ακόμη. Ειλικρινά, υπάρχουν πολλά και πολλά header αρχεία που δηλώνουν λειτουργίες για βιβλιοθήκες, αλλά αυτό είναι ctype.h πραγματικά πρόκειται να είναι κάπως συμφέρουσα, διότι Πάω να προχωρήσει και να εφαρμόσει ένα άλλο πρόγραμμα εδώ. Επιτρέψτε μου να προχωρήσει και να ανοίξει κάτι Έγραψα στο ονομάζεται εκ των προτέρων capitalize.c, και ας ρίξουμε μια ματιά στο πώς αυτό λειτουργεί. Παρατηρήστε ότι είμαι με τη χρήση, σε αυτή την έκδοση από αυτό, τρία γνωστά αρχεία. Σημειώστε ότι στη γραμμή 18, είμαι να πάρει μια γραμμή κειμένου. Ανακοίνωση στην γραμμή 21, είμαι υποστηρίζοντας ότι ο κώδικας που ακολουθεί πρόκειται να κεφαλαιοποιήσει s, όποια και αν ο χρήστης πληκτρολογήσει σε, και πώς το κάνω αυτό; Λοιπόν, παίρνω - δίδαγμα από την τελευταία φορά - Είμαι δηλώνοντας i και n και την επανάληψη πάνω από τους χαρακτήρες του string. Και τότε τι είναι αυτή η ομάδα των κώδικα στην γραμμή 24 έως 27 κάνει σε απλή γλώσσα; Πεζό γράμμα πίσω. Ακριβώς. Αν s βραχίονα i - οπότε αν το i-οστό χαρακτήρα του S, η οποία είναι μια ειδική char σε string, είναι μεγαλύτερη από ό, τι ή ίση με πεζά ένα και - Υπενθυμίζουμε ότι διπλό ampersand σημαίνει και - και τον ίδιο χαρακτήρα, s βραχίονα i, είναι μικρότερη ή ίση με πεζά Ζ, Αυτό σημαίνει ότι είναι ένα b Α ή Α ή C ή τελεία, τελεία, τελεία, ή ένα Ζ, που σημαίνει είναι πεζά. Τι θέλω να κάνω στην περίπτωση αυτή; Λοιπόν, μπορώ να το κάνω κάπως κρυφά, αλλά ας πειράζω αυτό χώρια. Πάω να καλέσω printf, εκτυπώνει% c γιατί θέλω να ανατυπώσει αυτό χαρακτήρα στην οθόνη. Είμαι στη συνέχεια πρόκειται να λάβει s βραχίονα i, το i-ου χαρακτήρα s, και τότε γιατί κάνω αυτό το μικρό κόλπο εδώ, πεζά ένα μείον κεφαλαίου; Τι είναι αυτό πρόκειται να δώσει μου, σε γενικές γραμμές; [Δεν ακούγεται]. Ακριβώς. Πραγματικά, δεν θυμάμαι - ήταν 65 για το κεφάλαιο Α. δεν μου θυμηθείτε τι πεζά ένα είναι, αλλά δεν έχει σημασία. Ο υπολογιστής ξέρει. Έτσι, λέγοντας, πεζά ένα μείον κεφάλαιο Α, είναι περίεργο να είναι αφαιρώντας ένα char από την άλλη, αλλά ποιες είναι οι χαρακτήρες κάτω από την κουκούλα; Είναι απλά αριθμοί. Έτσι, όποια και αν είναι αυτοί οι αριθμοί, αφήστε τον υπολογιστή να θυμάστε και όχι από μένα ο άνθρωπος. Έτσι πεζά ένα αρνητικό κεφάλαιο Α είναι πρόκειται να μου δώσει μια διαφορά. Συμβαίνει να είναι 32, και ότι θα ήταν η περίπτωση για πεζό b και το κεφάλαιο Β και ούτω καθεξής. Μένει συνεπής, ευτυχώς. Έτσι είμαι ουσιαστικά λέει, να λάβει τα πεζό γράμμα, αφαιρούμε ότι τυπική διαφορά, και ότι i βραχίονα αποτελεσματικά τις αλλαγές s από πεζά, φυσικά, κεφαλαία γράμματα, χωρίς να μου πραγματικά χρειάζεται να σκεφτείτε περίπου ή να θυμηθεί, τι ήταν αυτά αριθμοί μιλήσαμε για το πότε το οκτώ εθελοντές ήρθε επάνω στη σκηνή; Τώρα, εν τω μεταξύ, στο άλλο, αν δεν είναι ένα πεζό γράμμα, όπως καθορίζεται από τη γραμμή 24, εκτυπώστε ακριβώς έξω. Το μόνο που θέλω να αγγίξει το χαρακτήρες που ήταν στην πραγματικότητα αρχικά πεζά. Έτσι, ας δούμε αυτό. Κάντε επωφεληθούμε. Καταρτίζονται, OK. . / Επωφεληθούμε. Και επιτρέψτε μου να πληκτρολογήσετε H-Ε-Ε-Ε-Ο με πεζά, Enter. Και παρατηρήσετε ότι μετατρέπεται σε κεφαλαία. Επιτρέψτε μου να το κάνουμε αυτό και πάλι με μια διαφορετική λέξη. Τι θα λέγατε για D-A-V-I-D με την πρώτη D κεφαλαιοποιείται ως όνομα είναι συνήθως; Enter. Σημειώστε ότι είναι ακόμα σωστές. Είναι εξάγεται μόνο η πρώτη D αμετάβλητη με ότι άλλο κατασκεύασμα. Έτσι, έχετε κατά νου, τότε, μερικά πράγματα εδώ. Ένα, αν ποτέ θέλετε να ελέγξετε δύο συνθήκες με τη μία, μπορείτε και να τους μαζί, όπως είχαμε προβλέψει. Μπορείτε να συγκρίνετε χαρακτήρες σε αυτόν τον τρόπο και να αντιμετωπίζουν αποτελεσματικά χαρακτήρες αριθμοί, αλλά ειλικρινά, αυτό είναι τόσο βλασφημία αινιγματικά Είμαι δεν πρόκειται ποτέ να θυμηθεί Πώς να καταλήξει σ 'αυτό από την αρχή χωρίς αιτιολογία μέσα από αυτό για αρκετό ένα κομμάτι του χρόνου. Δεν θα ήταν ωραίο αν κάποιος έξω εκεί έγραψε μια λειτουργία που ονομάζεται είναι μείωση που θα μπορούσε να απαντήσει για μένα αλήθεια ή ψευδής, αυτός ο χαρακτήρας είναι πεζά; Καλά ευτυχώς, όποιος έγραψε ctype.h έκανε ακριβώς αυτό. Επιτρέψτε μου να πάω εδώ και να προσθέσετε ctype για c τύπους, και τώρα επιτρέψτε μου να πάω εδώ κάτω και ξαναγράψουμε αυτή τη γραμμή ως εξής. Έτσι, αν αυτό λέγεται είναι χαμηλότερη, αξιώνω, s βραχίονα i, τότε Πάω να διαγράψετε αυτές οι δύο γραμμές συνολικά. Έτσι τώρα κάποιος άλλος, ελπίζω, έγραψε α ονομάζεται λειτουργία είναι χαμηλότερο, και αποδεικνύεται ότι έκανε και δήλωσαν το εσωτερικό του ctype.h. Και τώρα είμαι πρόκειται να αφήσει γραμμή 27 μόνο, Πάω να αφήσει γραμμή 31 μόνο, αλλά παρατηρήστε πόσο έχω αυστηρότερες κωδικό μου. Είναι πλέον καθαρότερα. Είναι λιγότερο δύσκολο να κοιτάξετε μέσα γιατί τώρα η λειτουργία του, άλλωστε, είναι τόσο θαυμάσια που ονομάζεται απλά κάνει ό, τι λέει. Έτσι τώρα είμαι πρόκειται να σώσει αυτό. Πάω για σμίκρυνση. Και ακριβώς όπως το Scratch θα μπορούσε να έχει Booleans, Boolean τιμές true ή ψευδείς, αυτό είναι ακριβώς ό, τι είναι αποτελεσματική μείωση αποδόσεις. Επιτρέψτε μου να μεταγλωττίσετε. Επιτρέψτε μου να re-run. Και τώρα ας το δοκιμάσω ξανά, H-Ε-L-L-O, Enter. Αυτό είναι πολύ καλό. Και προσπαθήστε ξανά, βεβαιωθείτε ότι θα δεν βίδα κάτι επάνω. Που κεφαλαιοποιείται ως καλά. Αλλά αυτό δεν είναι αρκετά καλό, διότι η Κάτι άλλο που ποτέ δεν πρόκειται να θυμηθείτε αν δουλεύω μέσα από πραγματικά προσεκτικά, ας πούμε, το χαρτί είναι αυτό το καταραμένο γραμμή. Δεν θα ήταν ωραίο αν υπήρχαν μια λειτουργία που ονομάζεται στο ανώτερο; Λοιπόν αποδεικνύεται εκεί έξω είναι στην ctype.h, καθώς και. Πάω να πάει μπροστά και τον τύπο - επιτρέψτε μου να φέρει αυτή τη γραμμή πίσω. Αντί για αυτό εδώ, επιτρέψτε μου να πάμε μπροστά και να πω, να υποκαταστήσει το γ% του αποτέλεσμα την κλήση αυτή τη λειτουργία για να πάνω στο χαρακτήρα i-s. Και τώρα παρατηρήσετε ότι παίρνει μια μικρή βάση. Έχω να παρακολουθείτε πόσα παρενθέσεις έχω ανοίξει και να κλείσει. Έτσι, τώρα είναι ακόμα πιο καθαρή. Τώρα το πρόγραμμα αυτό γίνεται όλο και καλύτερη και καλύτερα σχεδιασμένη αναμφισβήτητα επειδή είναι πολύ, πολύ πιο ευανάγνωστο, αλλά δεν είναι καμία ας διορθώσει. Κάντε επωφεληθούμε. . / Επωφεληθούμε. H-E-L-L-O. Ας τρέξει και πάλι, Ϋ-Α-V-Ι-ϋ. Εντάξει, έτσι είμαστε ακόμη σε αρκετά καλή κατάσταση. Αλλά τώρα στην ανώτερη. Προτείνω ότι υπάρχει ένα ακόμη βελτίωση θα μπορούσαμε να κάνουμε αυτό θα ήταν πολύ ωραία, που θα μπορούσε πραγματικά να σφίξετε μέχρι αυτό το κώδικα και πραγματικά να μας δώσει πέντε από πέντε για το σχεδιασμό, για παράδειγμα. Τι θα ήταν ωραίο να ξεφορτωθεί; Λοιπόν, κοίτα πώς βλασφημία καιρό αυτό το μπλοκ των κώδικας είναι απλά για να κάνουμε κάτι απλό. Τώρα, ως ένα μέρος, όπως μπορεί να έχετε δει σε σούπερ τμήμα αυτό το παρελθόν Σαββατοκύριακο, δεν χρειάζεται απολύτως η άγκιστρα όταν έχετε μόνο ένα γραμμή κώδικα, έστω και αν προτείναμε διατήρησή τους έτσι ώστε να κάνει πολύ πιο σαφής, όπως και στο Scratch του σχήματος U μπλοκ, τι υπάρχει στο εσωτερικό του υποκαταστήματος. Αλλά δεν θα ήταν ωραίο αν στην ανώτερη, όταν δίνεται εισόδου της, την μετέτρεψε σε κεφαλαία, αν δεν είναι, και τι θα είναι υπέροχο στην αντίθετη περίπτωση, αν είναι ήδη κεφαλαία; Απλά περνούν από και να το αφήσετε μόνο του. Έτσι, ίσως το κάνει αυτό. Θα μπορούσα να προσπαθήσω και απλά ελπίζω ότι το κάνει, αλλά επιτρέψτε μου εισαγάγει ένα άλλο πράγμα. Αντί να χρησιμοποιεί το ενσωματωμένο τερματικό παράθυρο εδώ κάτω, υπενθυμίζουν ότι Αυτό το τετράγωνο εικονίδιο μαύρο δίνει μια μεγαλύτερο παράθυρο τερματικού που μπορώ να FULL οθόνη αν θέλω; Έτσι, αποδεικνύεται ότι είναι είδος παραδόξως το όνομα, αλλά υπάρχουν αυτά τα πράγματα που ονομάζεται σελίδες man, σελίδες manual, ο άνθρωπος για συντομία, και μπορώ να πρόσβαση σε αυτά από πληκτρολογώντας τον άνθρωπο - Τι μπορώ να θέλετε να πληκτρολογήσετε; Ο άνθρωπος με ανώτερο. Και τώρα παρατηρήσετε εάν υφίσταται λειτουργούν στο εσωτερικό του υπολογιστή, σε αυτή την περίπτωση η συσκευή, η οποία είναι μόλις Το λειτουργικό σύστημα Linux, πρόκειται να μου δώσει μια κάπως αινιγματικό σύνολο εξόδου, αλλά θα βρείτε την πάροδο του χρόνου ότι είναι πάντα διαμορφωθεί λίγο πολύ το ίδιο έτσι ώστε να αρχίσετε να το συνηθίσετε. Ανακοίνωση στην κορυφή στην ανώτερη, και προφανώς είναι η ίδια τεκμηρίωση για να μειώσει. Όποιος έγραψε ότι το κόψιμο κάποιων γωνίες και το βάζουμε όλα σε μια σελίδα. Σκοπός αυτών των πραγμάτων »στο ζωή είναι να μετατρέψει ένα επιστολή προς ανώτερα ή πεζά. Παρατηρήστε ότι στο πλαίσιο Σύνοψη, η σελίδα man η διδασκαλία μου ποιο αρχείο που έχω να περιλαμβάνει να χρησιμοποιήσει αυτό το πράγμα. Είναι που μου δίνετε τις υπογραφές για αυτά λειτουργίες, και οι δύο από αυτούς, ακόμη και αν και τώρα μόνο νοιάζονται για ένα. Εδώ τώρα είναι μια περιγραφή. Για πάνω μετατρέπει το γράμμα c σε κεφαλαία αν είναι δυνατόν. Ακόμα δεν είναι διδακτική, αλλά επιτρέψτε μου να εξετάσουμε τώρα με τιμή επιστροφής, το πράγμα Αυτό είναι το παρέδωσε πίσω. Έτσι, η τιμή που επιστρέφεται είναι αυτή η μετατρέπεται επιστολή ή γ, αν η μετατροπή δεν ήταν δυνατή. Τι είναι το γ; Το αρχικό του χαρακτήρα. Το αρχικό του χαρακτήρα και γνωρίζουμε ότι με, πάλι, ανεβαίνοντας προς την σύνοψη, και όποιος το έγραψε αυτό λειτουργία μόλις αποφάσισε ότι η είσοδος για την άνω και κάτω είναι μόνο αυθαίρετα πρόκειται να ονομάζεται c. Θα μπορούσαν να έχουν ονόμασαν οι περισσότεροι τίποτα θέλουν, αλλά το κράτησε απλό όσο c. Έτσι έχω τη γνώμη της σελίδα man. Αυτή η φράση με καθησυχάζει ότι εάν δεν είναι ένα πεζό γράμμα, είναι πρόκειται να μου δώσει ακριβώς πίσω C, η οποία είναι τέλεια, που σημαίνει ότι μπορούμε να απαλλαγούμε από άλλο μου κατάσταση. Έτσι, επιτρέψτε μου να πάω πίσω στο gedit, και τώρα επιτρέψτε μου να κάνει ακριβώς αυτό. Πάω να αντιγράψετε printf δήλωσή μου. Πάω να πάει μπροστά και δεξιά μέσα η για εκτύπωση βρόχο ότι έξω, και να πάρει απαλλαγούμε από τώρα όλη αυτή η δομή if. Δεν ήταν μια κακή ιδέα, και ήταν πολύ πολύ σωστό και συνεπείς με ό, τι έχουμε κηρύξει, αλλά δεν είναι απαραίτητο. Μόλις έχετε συνειδητοποιήσει κάποια βιβλιοθήκη λειτουργία υπάρχει ότι κάποιος άλλος έγραψε, ή ίσως έγραψε σε άλλο σημείο το αρχείο, μπορείτε να το χρησιμοποιήσετε και πραγματικά αρχίσει να ενισχυθούν τον κωδικό. Και όταν λέω τα πράγματα όπως καλό στυλ, το γεγονός ότι το πρόσωπο αυτό ονομάζεται λειτουργούν στην ανώτερη, ή προηγουμένως είναι χαμηλότερη είναι θαυμάσια χρήσιμο, διότι ότι είναι πολύ περιγραφικό. Δεν θα θέλετε να καλέσετε λειτουργίες σας χ και Υ και Ζ, τα οποία έχουν πολύ, πολύ λιγότερο νόημα. Οποιεσδήποτε ερωτήσεις σχετικά με αυτή τη σειρά βελτιώσεων; Γι 'αυτό αρκεί να πούμε ένα από τα takeaways είναι ακόμα και το δικό σας πρόβλημα set - ίσως set πρόβλημα, αλλά σίγουρα P έθεσε δύο και έπειτα, ακόμη και όταν είναι σωστό δεν σημαίνει οπωσδήποτε σημαίνει ότι είναι τέλεια μόνο ακόμα ή ιδιαίτερα καλά σχεδιασμένη. Αυτό είναι το άλλο άξονα αρχίσουμε να σκεφτόμαστε. Έτσι, αυτό ήταν ένα εσωτερικό σειρά σας μνήμη του υπολογιστή, αλλά αν έχετε ένα σωρό των χαρακτήρων, όπως η H-Ε-Ε-Ε-Ο στο εσωτερικό της μνήμης RAM, και ας υποθέσουμε ότι στο πρόγραμμά σας καλέστε πάρει σειρά πολλές φορές έτσι ώστε να μπορείτε καλέστε πάρει σειρά φορά, τότε θα καλέσει να πάρει σειρά και πάλι. Λοιπόν, τι πρόκειται να συμβεί την πάροδο του χρόνου; Με άλλα λόγια, αν έχετε μια σειρά από κώδικα, αλλά έξω από το πλαίσιο, όπως εγχόρδων s παίρνει - ας το κάνουμε. Όνομα String ισούται πάρει string. Έτσι, ας υποθέσουμε ότι η γραμμή κώδικα εννοείται να ζητήσει από το χρήστη για του ή το όνομά της. Η επόμενη γραμμή κώδικα έχει ως στόχο να ρωτήσω ο χρήστης για του ή το σχολείο της, και Αυτό επόμενη γραμμή, και ούτω καθεξής. Ας υποθέσουμε ότι έχουμε κρατήσει ζητώντας το χρήστη για το άλλο και άλλο και άλλο string. Θα πάμε για να μείνει στη μνήμη την ίδια στιγμή. Κανείς δεν πρόκειται να κοπανάω το άλλο. Το σχολείο δεν είναι να αντικαταστήσει το άλλο. Αλλά πού κάνουν όλοι καταλήγουν στη μνήμη; Λοιπόν, αν αρχίσουμε να αντλήσει από την οθόνη, το οποίο μπορούμε να χρησιμοποιήσουμε αυτό το πράγμα εδώ σαν ένα μαυροπίνακα, αν αυτό το μαύρο ορθογώνιο αντιπροσωπεύει υπολογιστή μου μνήμη, Πάω να ξεκινήσει αυθαίρετα διαιρώντας το σε μικρά τετράγωνα, καθένα από τα οποία αντιπροσωπεύει ένα byte της μνήμης. Ειλικρινά, αν έχετε ένα gigabyte μνήμης RAM αυτές τις μέρες, έχετε ένα δισεκατομμύριο bytes μνήμης του υπολογιστή σας, έτσι ώστε ένα δισεκατομμύριο από αυτά τα τετράγωνα. Έτσι, αρκεί να πούμε ότι αυτό δεν είναι πολύ σε κλίμακα. Αλλά θα μπορούσε να κρατήσει την κατάρτιση όλα αυτά σαφώς δεν είναι σε κλίμακα πλατείες, και αυτό συλλογικά αντιπροσωπεύει μνήμη του υπολογιστή μου. Τώρα, εμείς απλώς θα τελεία, τελεία, τελεία. Έτσι, με άλλα λόγια, όταν θα ζητήσει τώρα η χρήστη με get string για να μου δώσει ένα string, τι συμβαίνει; Αν ο χρήστης πληκτρολογεί σε "γεια", που καταλήγει σε Η-Ε-Ε-Ε-Ο. Αλλά ας υποθέσουμε ότι η χρήστη τότε οι τύποι του - Στην πραγματικότητα, δεν θα έπρεπε να γίνει Γεια σας, επειδή ζητάμε αυτά για τα ονόματά τους. Οπότε ας πάμε πίσω, αν μπορώ να το κάνω αυτό. Έτσι, αν τύπου D-A-V-I-D για το όνομά μου, αλλά υπενθυμίζουν ότι η δεύτερη γραμμή κώδικας πάρει σειρά και πάλι για να πάρει το σχολείο τους. Πού είναι αυτή η λέξη που ο χρήστης τύποι του πρόκειται να πάει το επόμενο βήμα; Καλά, ίσως πρόκειται να μπω σε H-Α-Κ-V-Α-Κ-ϋ. Έτσι, ακόμα κι αν έχω αναληφθείσες ως δύο γραμμές, αυτό είναι μόνο ένα σωρό bytes σε σας RAM του υπολογιστή. Υπάρχει ένα πρόβλημα τώρα, γιατί τώρα αν είμαι χρησιμοποιώντας RAM σε αυτό το πολύ λογικό αλλά και το είδος των αφελή τρόπο, ό, τι μπορεί να σας προφανώς δεν διακρίνει; Όταν κάποιος αρχίζει και πού τελειώνει, έτσι δεν είναι; Είναι το είδος του θολώματος μαζί. Έτσι αποδεικνύεται από τον υπολογιστή δεν το κάνει αυτό. Επιτρέψτε μου πραγματικότητα μετακινηθείτε πίσω στο χρόνο μια χαρακτήρες, και αντί να του Harvard πηγαίνει αμέσως μετά το όνομα του χρήστη, ο χρήστης παίρνει στην πραγματικότητα, πίσω από οι σκηνές, ένας ειδικός χαρακτήρας εισάγεται από το υπολογιστή για αυτόν ή αυτήν. / 0, αλλιώς γνωστή ως η nul χαρακτήρα ενοχλητικά ονομάζεται Ν-U-L, δεν Ν-U-L-L, αλλά μπορείτε να το γράψετε ως / 0. Είναι ακριβώς όλα μηδέν bits είναι ένας δείκτης στην μεταξύ της πρώτης λέξης ότι το χρήστη δακτυλογραφημένες και το δεύτερο. Έτσι Χάρβαρντ πραγματικά τώρα καταλήγει όπως αυτής της ακολουθίας των χαρακτήρων και ένα ακόμα / 0. Έτσι, με άλλα λόγια, έχοντας αυτά τιμές δεικτών, οκτώ συνεχόμενα μηδέν bits, μπορείτε τώρα να αρχίσετε να διακρίνουν ένα χαρακτήρα από την άλλη. Έτσι, όλο αυτό το διάστημα τι "γεια" είναι πραγματικότητα "γεια" με / 0, και Εν τω μεταξύ, υπάρχει μπορούσε κάλλιστα να είναι αρκετά λίγο περισσότερη μνήμη RAM στο εσωτερικό του υπολογιστή. Επιτρέψτε μου να κάνω κάτι άλλο τώρα. Αποδεικνύεται ότι όλα αυτά τα τετράγωνα έχουμε σχέδιο, είναι, ναι, χορδές, αλλά γενικότερα, αυτά τα πράγματα είναι συστοιχίες. Ένας πίνακας είναι απλά ένα κομμάτι της μνήμης αυτό είναι πλάτη με πλάτη με πλάτη με πλάτη, και συνήθως χρησιμοποιούν μια σειρά από τον τρόπο αυτής της πλατείας συμβολισμός βραχίονα. Έτσι θα πάμε για να δείτε αυτά αρκετά πάροδο του χρόνου, αλλά επιτρέψτε μου να προχωρήσει και ανοίξει, ας το ονομάσουμε τις ηλικίες. Και παρατηρήστε τι μπορούμε να κάνουμε με αυτά τα ίδια κόλπα, λίγο λίγο περισσότερο σύνταξη εδώ. Έτσι, στην γραμμή 17 του προγράμματος αυτού - Στην πραγματικότητα, επιτρέψτε μου να τρέξει το πρόγραμμα πρώτα ώστε να μπορούμε να δούμε τι κάνει αυτό το πράγμα. Επιτρέψτε μου τηλεφωνήσει κάνουν τις ηλικίες για να κατάρτιση αυτού του προγράμματος. . / Ηλικιών. Πόσοι άνθρωποι είναι στο δωμάτιο; Καλέστε το τρία. Ηλικία του πρώτου προσώπου; 18, 19, και 20. Και τώρα κάπως γελοία, απλά έχουν κάνει ένα πρόγραμμα που αυτές τις ηλικίες τρία άτομα. Έτσι, υπάρχει σαφώς μια ευκαιρία για κάποια διασκέδαση αριθμητική εδώ. Ευτυχώς, τα μαθηματικά είναι σωστή. 18 πήγε στο 19, 19 πήγε έως 20 και ούτω καθεξής. Αλλά τι πραγματικά σημαίνει να είναι ενδεικτικά εδώ είναι το πώς είμαστε αποθήκευση ηλικίες των τριών αυτών ανθρώπων. Επιτρέψτε μου να ζουμ σε ό, τι είναι συμβαίνει εδώ. Έτσι, η πρώτη, αυτές οι πρώτες γραμμές θα πρέπει να να πάρει αρκετά εξοικειωμένοι. Είμαι ζητά μόνο το χρήστη για το αριθμός των ατόμων στο δωμάτιο. Τότε είμαι με τη χρήση πάρει int και να κάνουμε, ενώ στην το κάνετε αυτό ξανά και ξανά και ξανά. Έχουμε δει αυτό το μοτίβο πριν, αλλά γραμμής 27 είναι νέα και πραγματικά αρκετά χρήσιμο, και θα γίνει ολοένα και πιο χρήσιμο. Σημειώστε ότι αυτό είναι διαφορετικό στην γραμμή 27 είναι ότι φαίνεται να κηρύσσει την int ονομάζεται ηλικίες, αλλά περιμένετε. Δεν είναι μόνο int ηλικίες. Υπάρχει αυτά αγκύλες, εσωτερικό του η οποία είναι Ν. Έτσι, ο βραχίονας Ν σε αυτό το πλαίσιο, δεν μέσα σε μια printf δήλωση εδώ, αλλά σε αυτό το μοναδικό γραμμή 27, η γραμμή αυτή είναι λέει, να μου δώσει n ints, καθένα από τα οποία είναι τύπου int. Έτσι, αυτό είναι ένα κουβά, να το πω έτσι, του, σε αυτή την περίπτωση, τρεις ακέραιους πίσω στο πλάτη με πλάτη, ώστε να μπορώ αποτελεσματικά έχει τρεις μεταβλητές. Η εναλλακτική λύση, για να είναι σαφής, θα ήταν αυτό. Αν ήθελα το πρώτο μαθητή ηλικία, θα μπορούσα να κάνω αυτό. Αν ήθελα το δεύτερο μαθητή ηλικία θα μπορούσα να κάνω αυτό. Αν ήθελα το τρίτο μαθητή ηλικία, θα μπορούσα να κάνω αυτό. Και ο Θεός φυλάξοι χρειαζόμαστε καθενός ηλικίας σε αυτό το δωμάτιο - Θέλω να πω, αυτό είναι ένα καλό των πολύ αντιγράφου, επικολλήσετε ξανά και ξανά και ξανά. Και συν φορά που καταρτίζει αυτό το πρόγραμμα, εάν ένας άλλος μαθητής περπατά σε πάνω από αυτής της θύρας, σήμερα ο αριθμός μου μεταβλητών είναι εσφαλμένη. Έτσι, τι είναι καλό για μια σειρά είναι η Μόλις αρχίσετε να αισθάνεστε τον εαυτό σας αντιγραφή και επικόλληση, οι πιθανότητες είναι ότι είναι δεν είναι η καλύτερη προσέγγιση. Ένας πίνακας είναι δυνητικά δυναμικές. Δεν ξέρω εκ των προτέρων πόσοι άνθρωποι πρόκειται να είναι στο δωμάτιο, αλλά ξέρω χρειάζομαι n από αυτούς, και θα καταλάβω n όταν έρθει η ώρα. Αυτή η γραμμή κώδικα σημαίνει τώρα, να μου δώσει ένα κομμάτι της μνήμης που μοιάζει με αυτό όπου ο αριθμός των κιβωτίων στην οθόνη εξαρτάται εξ ολοκλήρου από n ότι ο χρήστης πληκτρολογήσει μέσα Έτσι τώρα το υπόλοιπο αυτού του προγράμματος είναι πραγματικά πολύ παρόμοιο με αυτό που ακριβώς έκανε με τους χαρακτήρες. Ανακοίνωση Έχω ένα for loop αρχής γενομένης από το γραμμή 30. Έτσι, αμέσως μετά παίρνω τον πίνακα, I επαναλάβει από το y ισούται με μηδέν έως n. Έχω μόνο αυτό το διδακτικό printf μήνυμα λέγοντας απλά, να μου δώσει την ηλικία του ατόμου #% i, άρα ο αριθμός ένα, νούμερο δύο, νούμερο τρία. Και γιατί το έκανα αυτό; Ειλικρινά, οι άνθρωποι προτιμούν να μετρήσει από το ένα για έως και λαμβάνοντας υπόψη ότι οι επιστήμονες της πληροφορικής, μηδέν πάνω. επιστήμονες της πληροφορικής δεν πρόκειται να χρησιμοποιήσετε αυτό το είδος του προγράμματος, έτσι είμαστε πρόκειται απλά να αρχίσουμε να μετράμε σε ένα σαν κανονικοί άνθρωποι. Και τώρα στην γραμμή 33, παρατηρούμε τα ελαφρά διαφορετικό κομμάτι της σύνταξης. Το i-th ηλικία της συγκεκριμένης μεταβλητής τύπου σειρά πρόκειται να πάρει έναν int. Και τώρα, τέλος, αυτό είναι μόνο αριθμητική εδώ κάτω. Αποφάσισα σε ένα ξεχωριστό βρόχο να διεκδικήσει κάποια στιγμή περνάει, και τώρα σε αυτό ξεχωριστό loop, εκτελέστε αυτές τις γραμμές. Σε ένα χρόνο από τώρα, άτομο που θα είναι i ετών, αλλά παρατηρήσετε αυτό δεν είναι το μεταβλητή i. Αυτό είναι τώρα% i για int. Και ανακοίνωση ως πρώτο χαρακτήρα κράτησης θέσης, I συνδέστε το i συν 1, έτσι είμαστε και εμείς σαν φυσιολογικό άτομο. Και στη συνέχεια, για την αξία της ηλικίας τους, για i ετών, έχω πάρει τις ηλικίες βραχίονα i - και γιατί κάνω συν ένα εδώ; Απλώς ηλικίας. Είναι ανόητο μου επιλογή των προγραμμάτων. Απλώς ηλικίας ενός έτους. Θα μπορούσα να πληκτρολογήσετε οποιοδήποτε αριθμό που Θέλω πραγματικά εκεί. Έτσι, τι είναι στην πραγματικότητα το σύνολο των η συνάφεια εδώ; Λοιπόν, επιτρέψτε μου να γυρίσετε πίσω στην πραγματικότητα εδώ και να ζωγραφίσει μια εικόνα το τι μέλλει γενέσθαι. Τι θα κάνουμε με το επόμενο μας Σετ Πρόβλημα Δύο είναι αδέξιος στο κόσμο της κρυπτογραφίας. Έτσι, αυτό είναι μια σειρά χαρακτήρων, έτσι, ένα αλληλουχία των πολλαπλών χαρακτήρες, και τι λέει αυτό; Δεν είναι στην ηλεκτρονική έκδοση των διαφανειών. Γι 'αυτό και ισχυρίζονται ότι αυτό ισούται με αυτό, ένα ηλίθια διαφήμιση από πολλά χρόνια Πριν από που θα μπορούσε πραγματικά να υπενθυμίσει μία από τις ρίζες της. Έτσι, αυτό είναι ένα παράδειγμα της κρυπτογράφησης ή κρυπτογραφία. Αποδεικνύεται ότι, αν θέλετε να στην πραγματικότητα στέλνουν πληροφορίες ή να μοιραστείτε πληροφορίες με κάποιον με ασφάλεια, σαν ένα μήνυμα σαν αυτό, μπορείτε να ανακατώσει τα γράμματα. Αλλά συνήθως, είναι οι λέξεις Δεν κωδικοποιημένα τυχαία. Είναι μετατεθούν κατά κάποιο τρόπο ή να αλλάξει κατά κάποιο τρόπο, έτσι ώστε - ουπς. Αυτό είναι ένα διασκεδαστικό αεροτομή για την επόμενη φορά. Έτσι, μπορείτε να αντιστοιχίσετε ό, τι είναι φαινομενικά O σε ανακοίνωση Β. που ευθυγραμμίζεται κεφαλαιοποίησης-σοφός. Προφανώς γίνεται r e. Προφανώς F-Η-Ε-Κ γίνεται S-U-Κ-Ε. Έτσι αποδεικνύεται ότι υπάρχει μια χαρτογράφηση, και αυτή την περίπτωση υπάρχει μια αρκετά ηλίθιος χαρτογράφηση αν κάποιος έχει καταλάβει; Αυτό είναι κάτι που ονομάζεται Rot 13, Περιστροφή 13. Είναι το πιο χαζό της κρυπτογράφησης μηχανισμούς γιατί κυριολεκτικά προσθέτει 13 σε κάθε ένα από τα γράμματα, ηλίθιο με την έννοια ότι αν απλά έχουν λίγο ελεύθερο χρόνο στα χέρια σας και ένα μολύβι, ή νομίζετε ότι απλά μέσα στο κεφάλι σας, θα μπορούσατε να δοκιμάσετε όλες οι πιθανές προσθήκες - ένα, δύο, τρεις, τελεία, τελεία, τελεία, 25 σε μόλις περιστρέψτε το σύνολο αλφάβητου, και τελικά, θα καταλάβω Τι είναι αυτό το μήνυμα. Έτσι, αν έκανε κάτι τέτοιο σε δημοτικό σχολείο περνώντας μηνύματα σας ο καλύτερος φίλος, εάν δημοτικό σχολείο σας δάσκαλος απλά να διαβάσετε το μήνυμα και ωμή ανάγκασε τη λύση, μπορεί να έχετε πάρει μια απάντηση από αυτό. Τώρα, φυσικά, στον πραγματικό κόσμο, κρυπτογραφία είναι πιο πολύπλοκη. Αυτό είναι ένα απόσπασμα κειμένου από μια σύστημα υπολογιστή που έχει ονόματα και κωδικούς πρόσβασης, όπως σχεδόν όλοι μας κάνουμε, και Αυτό είναι ό, τι τον κωδικό πρόσβασης σας μπορεί να μοιάζει αν είναι αποθηκευμένα στο σκληρό σας οδηγούν, αλλά σε κρυπτογραφημένη μορφή. Αυτό δεν είναι απλά μια εναλλαγή των γραμμάτων, Το Α είναι Β και το Β είναι C. Αυτό αποτελεί πολύ πιο εξελιγμένα, αλλά χρησιμοποιεί ό, τι είναι γενικά γνωστό ως μυστικό κλειδί κρυπτογραφία. Αυτή η εικόνα λέει την ακόλουθη ιστορία με λίγες εικόνες. Στα αριστερά, έχουμε ό, τι θα καλέσουμε απλό κείμενο. Στον κόσμο της κρυπτογραφίας, απλό το κείμενο είναι μόνο το αρχικό μήνυμα γραμμένο στα αγγλικά ή στα γαλλικά ή οποιαδήποτε γλώσσα. Αν θέλετε να κρυπτογραφήσετε, θα περάσει αυτό εικαστικά μέσα από ένα λουκέτο, έτσι μερικά από το είδος του αλγορίθμου, κάποια συνάρτηση ή πρόγραμμα που κάποιος έγραψε ότι ανακατεύει τα γράμματα ελπίζουμε πιο περίπλοκα από ό, τι την προσθήκη μόλις 13 σε καθένα από αυτά. Τι μπορείτε να πάρετε από αυτή τη διαδικασία στην μέση υπάρχουν λέγεται cyphertext. Έτσι, το είδος της μια σέξι λέξη. Σημαίνει απλά ότι είναι το κρυπτογραφημένο έκδοση του απλού κειμένου. Και μόνο αν έχετε το ίδιο μυστικό, 13 ή μείον 13, είστε σε θέση να αποκρυπτογραφήσει ένα μήνυμα σαν κι αυτό. Έτσι, στο πρόβλημα έθεσε δύο, ανάμεσα στα πράγματα θα κάνετε αν το Hacker Edition, θα πρέπει να γράψετε κώδικα για να σπάσει αυτούς τους κωδικούς πρόσβασης, υπολογίζοντας τι ήταν και πώς θα ήταν κρυπτογραφημένα, αν κάνουμε να σας δώσει ένα κομμάτι καθοδήγησης κατά μήκος του τρόπου. Στην Standard Edition, εισάγουμε ένα ζευγάρι των αλγόριθμους κρυπτογράφησης, κρυπτογράφησης μηχανισμούς, που ονομάζεται Caesar, ένα ονομάζεται Vigenere, που εξακολουθούν να είναι περιστροφής ciphers όπου το Α γίνεται κάτι, Β γίνεται κάτι, αλλά θα πρέπει να το κάνουν με προγραμματισμό επειδή θα υπάρχει πράγματι να είναι ένα μυστικό κλειδί που εμπλέκονται η οποία είναι τυπικά ένας αριθμός ή μια λέξη-κλειδί ότι μόνο η αποστολέας και ο παραλήπτης αυτών των μηνύματα θα πρέπει να κατανοήσουν. Τώρα, αυτό έχει στην πραγματικότητα ενσαρκώσεις στον πραγματικό κόσμο. Αυτό, για παράδειγμα, είναι λίγο ορφανά Μυστικό δαχτυλίδι αποκωδικοποιητή της Annie, και μπορούν να εφαρμόσουν στην πράξη αυτά περιστροφής ciphers - Α γίνεται κάτι, Β γίνεται κάτι - με ένα ζευγάρι των τροχών, μία για το εξωτερικό, το ένα στο εσωτερικό έτσι ώστε αν περιστρέψετε τον τροχό ή το δαχτυλίδι, μπορείτε πραγματικά να παρατάξει την γράμματα με διαφορετικά γράμματα, να πάρει ένα μυστικό κωδικό. Και έτσι η δραματική στιγμή για σήμερα, ό, τι νόμιζα ότι θα κάνω είναι ένα κομμάτι της ιστορική αναδρομή ότι αν ενεργοποιήσετε την τηλεόραση στις 24 Δεκεμβρίου, μπορείτε να παρακολουθήσετε την ταινία nauseum διαφήμιση για 24 ώρες συνεχόμενα. Αλλά για σήμερα, εγώ θα το ανοίξει εδώ και να μας δώσει μόλις δύο λεπτά από την παιδαγωγικό Χριστουγεννιάτικη Ιστορία με μια μικρή συναδέλφους που ονομάζεται Ralphie. [PLAYBACK VIDEO] -Να είναι γνωστά σε όλους και διάφορες ότι Ralph Parker διορίζεται μέλος του Little Orphan Annie μυστικό κύκλο και δικαιούται να επικαλείται όλα οι τιμητικές διακρίσεις και τα οφέλη συμβαίνουν σ 'αυτό. -Υπογραφή, Μικρή ορφανά Annie. Θεωρημένο, Pierre Andre με μελάνι. Διακρίσεις και τα οφέλη που έχουν ήδη στην ηλικία των εννέα. [Φωνάζουν RADIO] Έλα, ας προχωρήσουμε με αυτό. Δεν χρειάζεται All That Jazz για λαθρεμπόρους και τους πειρατές. -Ακούστε αύριο το βράδυ για το σύναψη περιπέτεια του μαύρου πειρατικό πλοίο. Τώρα, ήρθε η ώρα για το μυστικό της Annie Μήνυμα για εσάς τα μέλη του Secret Circle. Θυμηθείτε, τα παιδιά. Μόνο τα μέλη του Secret Circle της Annie μπορεί να αποκωδικοποιήσει μυστικό μήνυμα της Annie. Θυμηθείτε, η Annie είναι ανάλογα με σας. Ορίστε καρφίτσες σας σε B2. Εδώ είναι το μήνυμα. 12, 11, 2 - -Είμαι στην πρώτη συνεδρίαση μυστικό μου. -25, 14, 11, 18, 16 - -Pierre ήταν σε μεγάλη απόψε φωνή. Θα μπορούσα να πω το μήνυμα ότι η αποψινή του ήταν πραγματικά σημαντικό. -3, 25. Αυτό είναι ένα μήνυμα από τον εαυτό της Annie. Θυμηθείτε, μην το πω σε κανέναν. -90 Δευτερόλεπτα αργότερα, είμαι στο μοναδικό δωμάτιο στο σπίτι όπου ένα αγόρι εννέα θα μπορούσε να καθίσει στην προστασία της ιδιωτικής ζωής και να αποκωδικοποιήσει. Aha, Β. πήγα στην επόμενη. Ε. Η πρώτη λέξη "be". S. Θα ερχόταν πιο εύκολο τώρα. U. 25. Αυτό είναι R. -Έλα, Ralphie. Πρέπει να φύγω. -Θα είναι δεξιά κάτω, Ma. Gee σφυρίζω. -T. O. Να είστε βέβαιος να. Να είστε βέβαιος να τι; Ποια ήταν η Μικρή ορφανά Annie προσπαθώ να πω; Να είστε βέβαιος να τι; -Ralphie, Randy πρέπει να πάει. Θα σας παρακαλούμε να βγει; -Εντάξει, Ma. Θα είμαι έξω. -Ήμουν όλο και πιο κοντά στο σήμερα. Η ένταση ήταν φοβερή. Τι ήταν αυτό; Η μοίρα του πλανήτη μπορεί να κρέμονται στην ισορροπία. -Ralphie, να φύγουμε Ράντι. -Θα είναι σωστό για φωνάζει δυνατά. -Σχεδόν εκεί. Τα δάχτυλά μου πέταξε. Το μυαλό μου ήταν μια παγίδα χάλυβα. Κάθε πόρος δονείται. Ήταν σχεδόν καθαρό. Ναι, ναι, ναι, ναι, ναι. -Φροντίστε να πίνετε Ovaltine σας. Ovaltine; Ένα φτηνό εμπορικό; Κάθαρμα. [PLAYBACK VIDEO END] ΟΜΙΛΗΤΗΣ 1: Αυτό είναι CS50, και ότι θα οριστεί Πρόβλημα Δύο. Τα λέμε την επόμενη εβδομάδα. ΟΜΙΛΗΤΗΣ 2: Στο επόμενο CS50, αυτό συμβαίνει. ΟΜΙΛΗΤΗΣ 1: Έτσι, ένα θέμα που δεν έχει κοίταξε μέχρι σήμερα είναι ότι από δείκτες συναρτήσεων. Τώρα, ένας δείκτης λειτουργία είναι ακριβώς η διεύθυνση μιας δημόσιας λειτουργία, αλλά μοιάζει πολύ - Ο γιος του α -