[Powered by Google Translate] [Ενότητα 4] [λιγότερο άνετα]
[Nate Hardison] [Πανεπιστήμιο του Χάρβαρντ]
[Αυτό είναι CS50.] [CS50.TV]
>> Εντάξει, καλώς ήρθατε πίσω στο τμήμα.
Στο τμήμα αυτής της εβδομάδας θα πάμε να κάνουμε κάποια πράγματα.
Εμείς πάμε στο πρώτο σετ Πρόβλημα recap 2,
το οποίο είναι το σύνολο πρόβλημα Καίσαρα και Vigenere.
Και μετά θα πάμε να βουτήξει αναθεώρηση Quiz 0
και να περάσουν λίγο χρόνο ανακεφαλαιώνοντας το τι έχουμε μιλήσει για
σε κάθε μία από τις διαλέξεις μέχρι τώρα, και θα κάνουμε επίσης μερικά προβλήματα
από κουίζ προηγούμενου έτους.
Με αυτόν τον τρόπο εσείς έχετε έναν καλό τρόπο για να προετοιμαστεί για αυτό.
>> Για να ξεκινήσετε, θα έχετε καταφέρει να εκκινήσετε μια-δυο καλές λύσεις
για το προηγούμενο σετ πρόβλημα, πρόβλημα Set 2, σε αυτό το χώρο.
Αν εσείς χτυπήσει όλα αυτό το σύνδεσμο,
και αν κάνετε κλικ στο όνομά μου και κάντε κλικ στην πρώτη αναθεώρηση μου
θα δείτε caesar.c, το οποίο είναι ακριβώς αυτό που ψάχνω σε.
Ας μιλήσουμε γι 'αυτό πολύ γρήγορα.
Αυτό είναι μόνο ένα διάλυμα δείγματος.
Αυτό δεν είναι απαραιτήτως η τέλεια λύση.
Υπάρχουν πολλοί διαφορετικοί τρόποι για να γράψει αυτό,
αλλά υπάρχουν μερικά πράγματα που θα ήθελα να επισημάνω
που είδα όπως ήμουν ταξινόμησης, κοινά λάθη που πιστεύω ότι
η λύση αυτή κάνει μια πολύ καλή δουλειά από το χειρισμό.
>> Το πρώτο έχει κάποιο είδος της σχόλιο κεφαλίδα στην κορυφή.
Στις γραμμές 1 έως 7 μπορείτε να δείτε τις λεπτομέρειες,
τι ακριβώς αυτό το πρόγραμμα κάνει.
Μια καλή συνήθης πρακτική όταν γράφετε κώδικα C
ανεξάρτητα από το εάν το πρόγραμμά σας περιέχεται μέσα σε ένα ενιαίο αρχείο ή
είτε πρόκειται για χωρίζεται σε πολλαπλά αρχεία είναι να έχουν κάποιο είδος της
προσανατολισμό σχόλιο στην κορυφή.
Αυτό είναι, επίσης, για τους ανθρώπους που πηγαίνουν έξω και να γράφουν κώδικα στον πραγματικό κόσμο.
Αυτό είναι που θα βάλουν τις πληροφορίες πνευματικών δικαιωμάτων.
Παρακάτω είναι το # περιλαμβάνει.
Στις γραμμή 16 υπάρχει το # define, το οποίο θα επανέλθουμε σε λίγο λίγο.
Και στη συνέχεια, όταν η λειτουργία ξεκινά, μόλις κύριες ενάρξεις,
επειδή αυτό το πρόγραμμα έχει όλα περιέχονται σε μια ενιαία λειτουργία
το πρώτο πράγμα που συμβαίνει-και αυτό είναι πολύ ιδιότυπο και χαρακτηριστικό ενός προγράμματος C
που λαμβάνει σε γραμμή εντολών επιχειρήματα-είναι ότι ελέγχει άμεσα
>> για την καταμέτρηση επιχείρημα, argc.
Εδώ βλέπουμε ότι αυτό το πρόγραμμα περιμένει ακριβώς επιχειρήματα 2.
Να θυμάστε ότι δεν υπάρχει ότι το πρώτο επιχείρημα που είναι το ειδικό ένα
αυτό είναι πάντα το όνομα του προγράμματος που είναι να τρέξει,
το όνομα του εκτελέσιμου αρχείου.
Και έτσι τι είναι αυτό που κάνει είναι να αποτρέπει το χρήστη από την εκτέλεση του προγράμματος
με περισσότερα ή λιγότερα επιχειρήματα.
Ο λόγος που θέλετε να ελέγξετε για αυτό το δικαίωμα μακριά είναι γιατί
δεν μπορούν να έχουν πρόσβαση στην πραγματικότητα αυτό το argv array εδώ αξιόπιστα
μέχρι να έχουμε έλεγχο για να δείτε πόσο μεγάλο είναι.
>> Ένα από τα συνηθισμένα λάθη που είδα ήταν οι άνθρωποι θα πάνε αμέσως σε
και πιάσε argv [1].
Είχαν αρπάξει το βασικό επιχείρημα από την παράταξη και δεν το ένα για να μπορώ να ελέγξω σε αυτό,
και στη συνέχεια θα έκαναν το τεστ για argc, καθώς και την επόμενη δοκιμή,
πόσον ή όχι το πρώτο επιχείρημα ήταν πράγματι ένας ακέραιος την ίδια στιγμή,
και ότι δεν λειτουργεί γιατί σε περίπτωση που δεν υπάρχουν επιχειρήματα που παρέχονται
θα σας αρπάζοντας ένα επιχείρημα που δεν είναι εκεί ή προσπαθεί να αρπάξει αυτό που δεν είναι εκεί.
>> Το άλλο μεγάλο πράγμα που πρέπει να παρατηρήσετε είναι ότι
θέλετε πάντα να εκτυπώσετε κάποιο είδος χρήσιμο μήνυμα σφάλματος
στο χρήστη να προσανατολίζεται αυτούς.
Είμαι βέβαιος ότι έχετε όλα τα προγράμματα που τρέχει ξαφνικά συντρίβει,
και μπορείτε να πάρετε αυτό το γελοίο μικρό παράθυρο που εμφανίζεται και λέει
κάτι φρικτά αινιγματικά και ίσως σας δίνει έναν κωδικό σφάλματος ή κάτι τέτοιο
που δεν έχει κανένα νόημα.
Αυτό είναι όπου θέλετε πραγματικά να προσφέρουν κάτι χρήσιμο
και απευθύνεται προς το χρήστη, έτσι ώστε όταν το τρέξετε πάνε "Ω," πρόσωπο παλάμη.
"Ξέρω ακριβώς τι πρέπει να κάνουμε. Ξέρω πώς να διορθώσετε αυτό."
>> Εάν δεν εκτυπώσετε ένα μήνυμα, τότε θα καταλήξετε πραγματικά
αφήνοντας το χρήστη να πάει να εξετάσει τον πηγαίο κώδικα σας
να καταλάβω τι πήγε στραβά.
Υπάρχουν, επίσης, κάποιες φορές που θα χρησιμοποιήσετε διαφορετικούς κωδικούς σφάλματος.
Εδώ χρησιμοποιούνται μόνο ένα να πω υπήρχε ένα σφάλμα,
υπήρχε ένα σφάλμα, υπήρξε ένα σφάλμα.
Μεγαλύτερη προγράμματα, συχνά τα προγράμματα που καλούνται από άλλα προγράμματα,
θα επιστρέψει κάποια ειδική κωδικούς σφαλμάτων σε διαφορετικά σενάρια
να επικοινωνούν με προγραμματισμό τι θα κάνατε διαφορετικά
απλά χρησιμοποιήστε ένα ωραίο μήνυμα για Αγγλικά.
Cool.
Καθώς εργαζόμαστε προς τα κάτω, μπορείτε να δείτε τραβάμε το κλειδί έξω.
Δοκιμάζουμε για να δούμε αν το κλειδί ταιριάζει.
Θα λάβετε ένα μήνυμα από το χρήστη.
Ο λόγος που το κάνουμε αυτό σε κάνει ενώ βρόχο-και αυτό είναι κάτι που θα καλύψει
σε λίγο, αλλά αποδεικνύεται ότι αν πληκτρολογήσετε τον έλεγχο D
όταν παίρνετε ότι GetString εντολών στο τερματικό
τι που πραγματικά κάνει είναι να στέλνει έναν ειδικό χαρακτήρα
στο πρόγραμμα.
Έχει καλέσει το ELF ή το τέλος των αρχείων χαρακτήρα.
Και σε αυτή την περίπτωση, string το μήνυμά μας θα είναι μηδενική,
έτσι αυτό δεν ήταν κάτι που ελέγχονται για το πρόβλημα που η ίδια.
>> Αλλά, όπως πάμε, τώρα που έχουμε αρχίσει να μιλάμε για δείκτες
και δυναμική κατανομή μνήμης στο σωρό,
έλεγχο για null κάθε φορά που έχετε μια λειτουργία που θα μπορούσε
επιστρέψει null ως αξία είναι κάτι που θα θέλετε να αποκτήσετε τη συνήθεια να κάνει.
Αυτό είναι εδώ κυρίως για απεικόνιση.
Αλλά όταν βλέπεις GetString στο μέλλον,
έτσι από πρόβλημα Σετ 4 επάνω, θα θέλετε να λάβετε αυτό υπόψη.
Και πάλι, αυτό δεν είναι ένα θέμα για το πρόβλημα Σετ 3, είτε γιατί δεν είχε καλύπτονται ακόμη.
Τέλος, έχουμε φτάσει σε αυτό το μέρος όπου θα έχουμε την κύρια βρόχο κρυπτογράφησης,
και υπάρχουν μερικά πράγματα που συμβαίνουν εδώ.
Κατ 'αρχάς, θα επαναλάβει ολόκληρη σειρά ίδιο το μήνυμα.
Εδώ έχουμε κρατήσει το strlen κλήση στην κατάσταση,
το οποίο ένας αριθμός που έχετε επισημάνει δεν είναι ένας πολύ καλός τρόπος να πάει.
Βγάζει σε αυτή την περίπτωση δεν είναι επίσης μεγάλη,
εν μέρει επειδή είμαστε τροποποιώντας τα περιεχόμενα του ίδιου του μηνύματος
μέσα για το βρόχο, οπότε αν έχουμε ένα μήνυμα που είναι 10 χαρακτήρες,
η πρώτη φορά που ξεκινάμε ότι για βρόχο strlen θα επιστρέψει ό, τι;
10.
>> Αλλά αν θέλουμε να τροποποιήσει στη συνέχεια το μήνυμα, να πούμε ότι τροποποιήσετε 5ης χαρακτήρα του,
και ρίχνουμε σε ένα \ 0 χαρακτήρας στην 5η θέση,
σε μεταγενέστερη επανάληψη strlen (μήνυμα) δεν θα επιστρέψει ό, τι έκανε
η πρώτη φορά που επαναλαμβάνεται,
αλλά θα επιστρέψει αντί 5 επειδή ρίξαμε σε αυτό το null τερματισμού,
και το μήκος της στοιχειοσειράς ορίζεται
από τη θέση του εν λόγω \ 0.
Σε αυτήν την περίπτωση, αυτό είναι ένας πολύ καλός τρόπος για να πάει, γιατί είμαστε το τροποποιώντας στη θέση του.
Αλλά θα παρατηρήσετε ότι αυτό είναι πραγματικά εκπληκτικά απλό να κρυπτογραφήσετε
αν μπορείτε να πάρετε τα μαθηματικά σωστή.
Το μόνο που απαιτείται είναι να ελέγξει εάν ή όχι το γράμμα που ψάχνετε στο
είναι πεζά ή κεφαλαία.
>> Ο λόγος που δεν έχουμε παρά να ελέγξει γι 'αυτό και δεν έχουμε για να ελέγξει για
η υπόθεση είναι επειδή είναι άλφα
αν ένας χαρακτήρας είναι κεφαλαία ή αν είναι πεζό
τότε είναι σίγουρα ένα αλφαβητικό χαρακτήρα,
επειδή δεν έχουμε κεφαλαία και πεζά ψηφία.
Το άλλο πράγμα που κάνουμε-και αυτό είναι λίγο δύσκολο-
είναι ότι έχουμε τροποποιήσει το πρότυπο κρυπτογράφησης του Καίσαρα τύπο
που δώσαμε στην προδιαγραφή σύνολο πρόβλημα.
Ποια είναι η διαφορά εδώ είναι ότι αφαιρείται
στην περίπτωση κεφαλαία κεφάλαιο Α, και στη συνέχεια θα προστεθεί ένα κεφάλαιο
πίσω μέσα στο τέλος.
>> Ξέρω ότι μερικοί από εσάς έχετε κάνει αυτό στον κώδικά σας.
Μήπως κάποιος από εσάς να το κάνετε αυτό στην επιχειρηματολογία σας;
Θα το έκανε αυτό. Μπορείτε να εξηγήσετε τι κάνει αυτό, Sahb;
Αφαιρώντας από αυτό, επειδή κάνατε ένα mod δικαίωμα μετά από αυτό,
θα πρέπει να το πάρουν, έτσι με αυτόν τον τρόπο μπορείτε να πάρετε [βήχα] θέση.
Και στη συνέχεια, με την προσθήκη ότι αργότερα θα μετατοπιστεί πάνω από αυτό που θα ήθελε.
Ναι, ακριβώς.
Τι Sahb είπε ήταν ότι όταν θέλουμε να προσθέσουμε
το μήνυμά μας και το κλειδί μαζί μας
και στη συνέχεια mod ότι, mod ότι με NUM_LETTERS,
εάν δεν κλιμακωθούν το μήνυμά μας στο κατάλληλο 0 έως 25 σειρά πρώτη,
τότε θα μπορούσαμε να καταλήξετε να πάρει μια πραγματικά περίεργο αριθμό
διότι οι αξίες που ψάχνουν σε όταν κοιτάξουμε μήνυμα [i],
όταν κοιτάξουμε την i-οστή χαρακτήρα του απλού κειμένου το μήνυμά μας,
είναι μια τιμή κάπου σε αυτό το εύρος 65 έως 122
με βάση τις τιμές ASCII για κεφαλαία Α με πεζά γράμματα z.
Και έτσι όταν το mod με 26 ή με NUM_LETTERS,
δεδομένου ότι ήταν μας # define στην κορυφή μέχρι εδώ,
που πρόκειται να μας δώσει μια τιμή που είναι στο εύρος 0 έως 25,
και χρειαζόμαστε έναν τρόπο να κλιμακωθούν στη συνέχεια, ότι πίσω μέχρι
και να το πάρετε με την κατάλληλη σειρά ASCII.
Ο ευκολότερος τρόπος να γίνει αυτό είναι να περιορίσει τα πάντα κάτω
μέσα στο εύρος από 0 έως 25 προς αρχίσει με,
στροφή και τότε τα πάντα πίσω στο τέλος.
>> Ένα άλλο κοινό λάθος που είδα άνθρωποι τρέχουν είναι ότι
αν δεν το κάνουμε πραγματικότητα αυτό το δικαίωμα μακριά κλιμάκωση
και μπορείτε να προσθέσετε μήνυμα και το κλειδί μαζί σας και να προσθέσετε, ας πούμε,
σε μια μεταβλητή char, το πρόβλημα με αυτό
είναι από το μήνυμα [i] είναι ένα σχετικά μεγάλο αριθμό για να αρχίσει με-
να θυμάστε ότι είναι τουλάχιστον 65, αν αυτό είναι ένα κεφαλαίο χαρακτήρα-
αν έχετε ένα μεγάλο κλειδί, ας πούμε, κάτι σαν 100,
και μπορείτε να προσθέσετε αυτές τις 2 μαζί σε ένα υπογεγραμμένο char θα πάμε να πάρετε μια υπερχείλιση.
Θα πάμε για να πάρετε μια τιμή που είναι μεγαλύτερη από 127,
η οποία είναι η μεγαλύτερη τιμή που ένας char μεταβλητή μπορεί να κρατήσει.
Και πάλι, αυτό είναι ο λόγος που θα θέλετε να κάνετε αυτό το είδος των πράγμα που πρέπει να αρχίσει με.
Μερικοί άνθρωποι γύρω πήρε αυτή την περίπτωση κάνοντας ένα άλλο, αν και δοκιμές
για να δούμε αν θα υπερχείλισης πριν το κάνουμε αυτό,
αλλά με αυτό τον τρόπο παίρνει γύρω από αυτό.
Και τότε σε αυτή την λύση που εκτυπώνονται από το σύνολο εγχόρδων στο τέλος.
Άλλοι άνθρωποι εκτυπώνονται από ένα χαρακτήρα σε μια στιγμή. Και οι δύο είναι φοβερό.
Σε αυτό το σημείο, κάντε εσείς έχετε οποιεσδήποτε απορίες, παρατηρήσεις σχετικά με αυτό;
Τα πράγματα που σας αρέσουν, πράγματα που δεν σας αρέσουν;
>> Είχα μια ερώτηση.
Ίσως το έχασα κατά τη διάρκεια της δική σας εξήγηση, αλλά πώς αυτό το πρόγραμμα
παρακάμψετε τους χώρους για τη σύνδεση το κλειδί για το μήκος του κειμένου;
Αυτό είναι ακριβώς cipher Caesar. >> Συγνώμη, ναι.
Ναι, θα δούμε ότι.
Στο κρυπτογράφησης του Καίσαρα πήραμε γύρω από αυτό, επειδή
θα γυρίσει μόνο χαρακτήρες.
Εμείς περιστρέφεται τους μόνο αν ήταν πεζά ή κεφαλαία.
Εσείς αισθάνεστε αρκετά καλά γι 'αυτό;
Νιώστε ελεύθεροι να αντιγράψετε αυτό το σπίτι, πάρτε,
συγκρίνετε με αυτό που εσείς γράψατε.
Σίγουρα διστάσετε να στείλετε τις ερωτήσεις γι 'αυτό πάρα πολύ.
Και πάλι, συνειδητοποιούν ότι ο στόχος εδώ με το πρόβλημά σας παρουσιάζει
δεν είναι να σας πάρει τα παιδιά να γράψουν κώδικα για τέλεια σύνολα πρόβλημά σας.
Είναι μια εμπειρία εκμάθησης. Ναι.
>> Επιστροφή στην do while loop, αν ισούται με μηδέν,
έτσι null σημαίνει απλά τίποτα, χτυπούν Απλά εισάγετε;
Null είναι μια ειδική αξία δείκτη,
και χρησιμοποιούμε null όταν θέλουμε να πούμε
έχουμε μια μεταβλητή δείκτη που δείχνει σε τίποτα.
Και έτσι τυπικά αυτό σημαίνει ότι αυτή η μεταβλητή, η μεταβλητή μηνύματος
είναι άδειο, και εδώ, επειδή είμαστε χρησιμοποιώντας το CS50 ειδικού τύπου string,
ποια είναι η CS50 τύπου string;
Έχετε δει τι είναι όταν ο Δαβίδ σύρεται προς τα πίσω την κουκούλα σε διάλεξη;
Είναι ένα funky-είναι ένας δείκτης, έτσι δεν είναι;
Εντάξει, ναι. >> Είναι ένα char *.
Και έτσι πραγματικά θα μπορούσε να αντικαταστήσει το
δεξιά εδώ με char * μήνυμα,
και έτσι η GetString λειτουργία, εάν δεν πάρει επιτυχώς μια συμβολοσειρά από τον χρήστη,
δεν μπορεί να αναλύσει μια σειρά, και η μία περίπτωση κατά την οποία δεν μπορεί να αναλύσει μια σειρά
είναι αν ο χρήστης πληκτρολογεί το τέλος του αρχείου χαρακτήρα, ο έλεγχος ϋ,
η οποία δεν είναι κάτι που κάνετε συνήθως, αλλά αν αυτό συμβαίνει
τότε η συνάρτηση θα επιστρέψει μηδενική τιμή αυτή ως έναν τρόπο για να πούμε
"Γεια σου, δεν είχα πάρει ένα string."
Τι θα συνέβαινε αν δεν βάλουμε μήνυμα = null,
το οποίο είναι κάτι που δεν έχουν κάνει ακόμα;
Γιατί θα ήταν αυτό να είναι ένα πρόβλημα εδώ;
Επειδή ξέρω ότι μιλήσαμε λίγο σε διάλεξη για διαρροές μνήμης.
Ναι, ας το κάνουμε αυτό, και ας δούμε τι θα συμβεί.
>> Βασίλης ερώτηση ήταν τι θα συμβεί αν δεν έχουν στην πραγματικότητα
αυτό το μήνυμα = null δοκιμή;
Ας μετακινηθείτε μέχρι την κορυφή.
Εσείς μπορείτε να σχολιάσετε αυτό το έξω.
Στην πραγματικότητα, εγώ θα το αποθηκεύσετε σε μια αναθεώρηση.
Αυτό θα είναι Αναθεώρηση 3.
Τι θα πρέπει να κάνω για να τρέξει αυτό το πρόγραμμα είναι ότι θα πρέπει να κάνετε κλικ σε αυτό το εικονίδιο ταχυτήτων μέχρι εδώ,
και θα πρέπει να προσθέσετε ένα επιχείρημα σε αυτό.
Θα πρέπει να δώσετε το βασικό επιχείρημα από τη στιγμή που θέλουν να περάσουν σε ένα όρισμα γραμμής εντολών.
Εδώ είμαι πρόκειται να δώσει τον αριθμό 3. Μου αρέσει 3.
Τώρα ζουμ πίσω έξω, τρέχει το πρόγραμμα.
Είναι το τρέξιμο, την κατάρτιση, την οικοδόμηση.
Εδώ πάμε. Είναι σε αναμονή για να ζητηθεί.
Αν πληκτρολογήσετε κάτι σαν γεια-όπου πήγε;
Ω, το πρόγραμμά μου πήρε πολύ καιρό για να τρέξει. Ήμουν jawing για πάρα πολύ καιρό.
Εδώ πηγαίνει.
Τώρα πληκτρολογήστε το γεια.
Βλέπουμε ότι κρυπτογραφεί κατάλληλα.
Τώρα, τι θα συμβεί αν κάνουμε άμεση GetString να επιστρέψει null;
Να θυμάστε, είπα ότι κάναμε αυτό πατώντας τον έλεγχο D ταυτόχρονα.
Θα μετακινηθείτε προς τα εδώ. Θα τρέξει ξανά.
Κτίριο. Εκεί πηγαίνει.
Τώρα, όταν χτύπησα τον έλεγχο D
Πήρα αυτή τη γραμμή που λέει opt/sandbox50/bin/run.sh, Τμηματοποίηση σφάλμα.
Έχετε δει παιδιά ότι πριν;
>> [Φοιτητικό] Γιατί δεν υπάρχει->> Συγνώμη;
[Φοιτητικό] Γιατί δεν υπάρχει πυρήνας χωματερή σε αυτή την περίπτωση υπάρχει;
Η χωματερή πυρήνα είναι-το ερώτημα είναι γιατί δεν υπάρχει χωματερή πυρήνα εδώ;
Το θέμα είναι ότι μπορεί να υπάρχει, αλλά η χωματερή πυρήνας είναι ένα αρχείο
που παίρνει αποθηκεύονται στο σκληρό δίσκο.
Σε αυτή την περίπτωση έχουμε απενεργοποιήσει πυρήνα χωματερές
στον server τρέχει, έτσι ώστε να μην έχουν οι άνθρωποι διαχωρίζονται από διαρρήξεις
και δημιουργία τόνους πυρήνα χωματερές.
Αλλά μπορείτε να πάρετε ένα.
Χωματερές Core είναι το είδος των πράγμα που μπορείτε να απενεργοποιήσετε συχνά,
και μερικές φορές το κάνετε.
Το σφάλμα κατάτμησης, για να απαντήσω στην ερώτησή σας, Βασίλειος,
λέει ότι θα προσπαθήσει να αποκτήσει πρόσβαση σε ένα δείκτη
Αυτό δεν ήταν στο σημείο που σε τίποτα.
Θυμηθείτε Binky στο βίντεο όταν προσπαθεί να Binky
να αποκτήσετε πρόσβαση σε ένα δείκτη που δείχνει δεν είναι σε τίποτα;
Σε αυτή την περίπτωση υποθέτω ότι τεχνικά ο δείκτης δείχνει σε κάτι.
Είναι δείχνοντας μηδενική, το οποίο είναι τεχνικά 0,
ο οποίος, όμως ορίζεται να είναι σε ένα τμήμα που δεν είναι προσβάσιμες
από το πρόγραμμά σας, ώστε να έχετε ένα σφάλμα καταμερισμού
επειδή δεν είστε πρόσβαση σε μνήμη που είναι σε ισχύ τμήμα
όπως το τμήμα σωρού ή του τμήματος στοίβας ή το τμήμα δεδομένων.
Cool.
Οι περισσότερες ερωτήσεις σχετικά με Καίσαρα;
>> Ας προχωρήσουμε. Ας δούμε Αναθεώρηση 2 πολύ γρήγορα.
Αυτό είναι Vigenere.
Εδώ στην Vigenere
θα περπατήσετε μέσα από αυτό το σημείο αρκετά γρήγορα γιατί, και πάλι,
Vigenere Καίσαρα και είναι αρκετά παρόμοια.
Σχόλιο Header είναι πριν,
# Define είναι πριν να αποφεύγουν να χρησιμοποιούν αυτά τα μαγικά νούμερα.
Το ωραίο είναι να πούμε ότι ήθελε να κινηθεί προς
ένα διαφορετικό αλφάβητο ή κάτι τέτοιο.
Αντί να χρειάζεται να πάει το χέρι να αλλάξει όλα το 26 στο κώδικα
θα μπορούσαμε να το αλλάξετε αυτό σε 27 ή πέσει προς τα κάτω
αν ήμασταν με τη χρήση διαφορετικών αλφαβήτων, διαφορετικές γλώσσες.
Και πάλι, έχουμε αυτόν τον έλεγχο της καταμέτρησης επιχείρημα,
και πραγματικά μπορείτε να πάρετε σχεδόν αυτό ως πρότυπο.
Λίγο πολύ κάθε πρόγραμμα που γράφετε θα πρέπει να έχουν-
αν παίρνει γραμμή εντολών επιχειρήματα-κάποια ακολουθία των γραμμών
που διαβάζει όπως αυτό στην αρχή.
Αυτό είναι ένα από τα πρώτα τεστ λογική που θέλετε να κάνετε.
>> Εδώ κάναμε ό, τι κάναμε ήταν σίγουρος ότι
η λέξη-κλειδί ήταν έγκυρη, και αυτός ήταν ο δεύτερος έλεγχος που κάναμε.
Παρατηρήστε και πάλι ότι χωρίσαμε αυτό από argc και 2.
Να σημειωθεί ότι σε αυτή την περίπτωση ένα πράγμα που έπρεπε να κάνουμε ήταν αντ 'αυτού
του χρησιμοποιώντας ένα i να θέλαμε να επικυρώσει το σύνολο εγχόρδων,
και για να γίνει αυτό θα πρέπει πραγματικά να πάει χαρακτήρα προς χαρακτήρα
πάνω από το string.
Δεν υπάρχει καλός τρόπος για να καλέσετε κάτι για το
γιατί ακόμα, για παράδειγμα, ένα έως i θα επιστρέψει 0
αν δεν μπορεί να αναλύσει έναν ακέραιο αριθμό, έτσι ώστε δεν είναι καν δουλειά.
Και πάλι, ωραίο μήνυμα που ενημερώνει το χρήστη τι ακριβώς συνέβη.
Στη συνέχεια, εδώ, πάλι, αναλαμβάνουμε επίσης την περίπτωση κατά την οποία
ο χρήστης πληκτρολογεί σε ένα στοιχείο ελέγχου D τυχαίο χαρακτήρα.
>> Και τότε Charlotte είχε μια ερώτηση νωρίτερα σχετικά με το πώς θα καταφέρουμε να παρακάμψετε χώρους
στη σειρά μας εδώ.
Αυτό ήταν το είδος παρόμοιο με αυτό που κάναμε με το πρόγραμμα Myspace
που κάναμε στο τμήμα, και ο τρόπος με τον οποίο λειτούργησε
είναι ότι παρακολουθείται ο αριθμός των γραμμάτων που είχαμε δει.
Καθώς περπατούσαμε πάνω από το string μήνυμα, καθώς περπατούσαμε πάνω από χαρακτήρα προς χαρακτήρα,
να ανακαλύψουμε το ευρετήριο ως μέρος του βρόχου για μας, και τότε θα παρακολουθούνται επίσης
ο αριθμός των γραμμάτων, τόσο μη-ειδικούς χαρακτήρες, μη-ψηφία, μη-λευκό χώρο
ότι είχαμε δει στην ξεχωριστή μεταβλητή.
Και κατόπιν το διάλυμα αυτό τροποποιεί το κλειδί
για να πάρετε μια πραγματική κλειδί ακέραιο, και το κάνει αυτό με την μύγα,
δικαίωμα πριν μεταβεί στη συνέχεια να κρυπτογραφήσετε το πραγματικό μήνυμα χαρακτήρα.
Υπάρχουν κάποιες λύσεις που ήταν απολύτως πάρα πολύ μεγάλη
που θα τροποποιήσει το κλειδί επάνω κατά τη δοκιμή για την εγκυρότητα του κλειδιού.
Εκτός από τη διασφάλιση ότι ο χαρακτήρας και η λέξη-κλειδί
ήταν ένα αλφαβητικό χαρακτήρα που επίσης αποδείχθηκε ότι σε έναν ακέραιο
στο εύρος 0 έως 25 για να παρακάμψετε τότε χρειάζεται να το κάνουμε αυτό αργότερα σε αυτό για βρόχο.
Και πάλι, μπορείτε να δείτε εδώ αυτό είναι πραγματικά ακριβώς το ίδιο κωδικό
ότι χρησιμοποιείται στην Καίσαρα σε αυτό το σημείο.
Κάνεις ακριβώς το ίδιο πράγμα, έτσι το πραγματικό τέχνασμα υπολογίζει
πώς να μετατρέψει τη λέξη-κλειδί στο ακέραιο.
>> Ένα πράγμα που κάναμε εδώ που είναι λίγο πυκνό
είναι επαναλάβαμε αυτή τη φράση, υποθέτω ότι θα μπορούσατε να το ονομάσετε,
3 ξεχωριστές φορές στις γραμμές 58, 59, και 61.
Μπορεί κάποιος να εξηγήσει τι ακριβώς κάνει αυτή η φράση;
Είναι πρόσβαση σε ένα χαρακτήρα, όπως είπατε.
Ναι, είναι [δεν ακούγεται] ένας χαρακτήρας στη λέξη-κλειδί,
και γι 'αυτό είναι ο αριθμός των γραμμάτων δει επειδή είστε μόνο κινείται κατά μήκος
η λέξη-κλειδί αφού έχετε δει την επιστολή,
έτσι ότι πρόκειται να παραλείψετε αποτελεσματικά χώρους και τέτοια πράγματα.
Ναι, ακριβώς.
Και στη συνέχεια, αφού έχετε δει το κενό λέξη-κλειδί που μόλις mod έτσι ώστε να κινούνται γύρω από πίσω.
Ακριβώς. Αυτό είναι μια τέλεια εξήγηση.
Τι είπε ο Kevin είναι ότι θέλουμε να δείκτη στην λέξη-κλειδί.
Θέλουμε να πάρετε το num_letters_seen χαρακτήρα, αν θέλετε,
αλλά αν num_letters_seen υπερβαίνει το μήκος της λέξης-κλειδιού,
ο τρόπος που παίρνουμε πίσω στην κατάλληλη σειρά είναι να χρησιμοποιήσουμε τον τελεστή mod
για την αποτελεσματική τυλίγετε γύρω.
Για παράδειγμα, όπως και σε βραχυπρόθεσμο, λέξη-κλειδί μας είναι μπέικον,
και είναι πολύ 5 γράμματα.
Αλλά έχουμε δει 6 γράμματα σε μορφή απλού κειμένου μας σε αυτό το σημείο
και κρυπτογραφημένα 6.
Θα καταλήξετε πρόσβαση στο num_letters_seen,
η οποία είναι 6, mod το μήκος της λέξης-κλειδιού, 5,
και έτσι θα πάρει 1, και έτσι αυτό που θα κάνουμε είναι ότι θα
πρόσβαση του πρώτου χαρακτήρα στο εσωτερικό των λέξεων-κλειδιών μας σε εκείνο το σημείο.
>> Εντάξει, τυχόν ερωτήσεις σχετικά με Vigenere
πριν προχωρήσουμε;
Εσείς αισθάνεστε αρκετά καλά γι 'αυτό;
Cool, μεγάλη.
Θέλω να βεβαιωθείτε ότι έχετε πάρει τα παιδιά την ευκαιρία να δείτε τον κώδικα
νομίζουμε ότι φαίνεται καλό και έχουν την ευκαιρία να μάθουν από αυτό.
Αυτό πρόκειται να είναι το τελευταίο που θα πρέπει να χρησιμοποιούν τους χώρους προς το παρόν,
και θα πάμε για τη μετάβαση τώρα, και είμαι πρόκειται να πάει στο cs50.net/lectures
έτσι μπορούμε να κάνουμε ένα μικρό κομμάτι της κριτικής κουίζ.
Ο καλύτερος τρόπος νομίζω να αρχίσουν να κάνουν κουίζ αναθεώρηση
είναι να έρθει σε αυτή τη σελίδα Διαλέξεις, cs50.net/lectures,
και κάτω από κάθε μία από τις κλάσεις εβδομάδα, οπότε αν βλέπω εδώ την Εβδομάδα 0,
Βλέπω ότι έχουμε μια λίστα με τα θέματα που καλύπτονται από την Εβδομάδα 0.
>> Εάν οποιαδήποτε από αυτά τα θέματα φαίνεται άγνωστη σε εσάς
σίγουρα θα θέλετε να πάτε πίσω και να καθαρίζουν τις σημειώσεις διάλεξης και, ενδεχομένως,
ακόμη και μέσα από το άπαχο διαλέξεις, να τους δεις ξανά, αν θέλετε
για να πάρετε μια ιδέα για το τι συμβαίνει με κάθε ένα από αυτά τα θέματα.
Θα πω επιπλέον φέτος ένα από τα δροσερά πόρους που έχουμε
Είναι αυτά τα σορτς που έχουμε δημιουργήσει, και αν κοιτάξετε την Εβδομάδα 0,
δεν έχουμε όλα τα θέματα που καλύπτονται, αλλά έχουμε αρκετά μερικά από αυτά,
μερικές από τις πιο λεπτές αυτές, βλέποντας έτσι αυτά τα σορτς και πάλι
είναι ένας καλός τρόπος για να σας πάρει μέχρι την ταχύτητα.
Ειδικότερα, Πάω να βάλει σε μια πρίζα για το 3 στο κάτω μέρος, αφού έκανα αυτές.
Αλλά αν είστε αγωνίζεται με δυαδικό, bits, hex, τέτοιου είδους πράγματα,
δυαδικό είναι ένα εξαιρετικό μέρος για να ξεκινήσετε.
ASCII είναι ένα άλλο που είναι καλό να δείτε πάρα πολύ.
Μπορείτε να παρακολουθήσετε ακόμη και με ταχύτητα 1.5x αν πάω πολύ αργά για σας.
Δεδομένου ότι η αναθεώρηση είναι, μη διστάσετε να το κάνετε αυτό.
>> Ακριβώς για να ξεκινήσει πολύ γρήγορα, θα πάμε για να περάσει ένα ζευγάρι από αυτά τα προβλήματα κουίζ
απλώς να επαναλαμβάνουμε γρήγορα μέσω αυτών.
Για παράδειγμα, ας ρίξουμε μια ματιά στο πρόβλημα 16 που έχω μέχρι εδώ στο διοικητικό συμβούλιο.
Έχουμε αυτό το ακόλουθο υπολογισμό σε δυαδική,
και θέλουμε να δείξουμε οποιαδήποτε εργασία.
Εντάξει, Πάω να δώσει αυτό έναν πυροβολισμό.
Εσείς θα πρέπει να ακολουθήσουν μαζί με χαρτί,
και εμείς θα κάνουμε αυτό πολύ γρήγορα.
Θέλουμε να εκτελέσει τον ακόλουθο υπολογισμό σε δυαδικό.
Έχω 00110010.
Και Πάω να προσθέσει σε αυτό 00110010.
Για τα μαθηματικά ιδιοφυΐες μετά μαζί στο σπίτι,
αυτό αποτελεσματικά πολλαπλασιάζοντας επί 2.
Ας ξεκινήσει.
Εμείς πάμε για να ακολουθήσει τον ίδιο αλγόριθμο επιπλέον ότι κάνουμε
όταν προσθέτουμε δεκαδικούς αριθμούς μαζί.
Πραγματικά η μόνη διαφορά εδώ είναι ότι πίσω βρόχο γύρω από
τη στιγμή που έχουμε 1 + 1 αντί για τη στιγμή που θα φτάσετε στο 10.
>> Αν αρχίσουμε από τα δεξιά, πολύ γρήγορα, ποιο είναι το πρώτο ψηφίο;
[Φοιτητικό] 0. >> [Nate H] 0.
Μεγάλη, το δεύτερο ψηφίο;
[Φοιτητικό] 1.
[Nate H] Είναι ένα 1; 1 + 1 είναι?
[Φοιτητικό] 10.
[Nate Η.] Ακριβώς, έτσι ποιο είναι το ψηφίο που γράφω ακριβώς κάτω από τα 2 αυτά αθροίζονται;
[Φοιτητικό] 1, 0, ή 0 και στη συνέχεια μεταφέρετε το 1.
[Nate Η.] 0 και φέρουν 1, ακριβώς.
Στη συνέχεια το ένα, Βασίλειος, είστε επάνω.
Τι είναι ο τρίτος; >> [Βασίλης] 1.
[Nate Η.] 1, τέλεια. Kevin;
[Kevin] 0. >> [Nate Η.] 0, Charlotte;
[Charlotte] 0. >> [Nate H] Ναι, και τι μπορώ να κάνω;
[Φοιτητικό] Η 1.
[Nate H] Και τι μπορώ να κάνω; Και τότε θα φέρουν το 1.
Τέλεια, Sahb; >> [Sahb] Τώρα έχετε 1.
[Nate H] Και κάνω τίποτα εδώ;
[Sahb] Στη συνέχεια, για την επόμενη έχετε 1 γιατί μεταφέρονται πάνω από 1.
[Nate Η.] Μεγάλη, έτσι και εδώ μπορούμε να το τελειώσω.
Cool.
[Φοιτητικό] Μήπως 0 + 0 = 0;
0 + 0 = 0.
1 + 1, όπως είπατε, είναι 10, ή 1, 0, μάλλον.
10 είναι μια ακυριολεξία επειδή για μένα 10 σημαίνει τον αριθμό 10,
και είναι η ιδιορρυθμία του πώς είμαστε αυτό που αντιπροσωπεύει, όταν είμαστε το γράψιμο.
Εμείς αντιπροσωπεύουν τον αριθμό 2 από 1, 0, και ο αριθμός 10 είναι ελαφρώς διαφορετική.
>> Τι είδος της Νίκαιας σχετικά με δυαδική είναι ότι πραγματικά δεν είναι ότι πολλοί
περιπτώσεις που πρέπει να μάθετε.
Υπάρχει 0 + 0 = 0, 0 + 1 = 1,
1 + 1 είναι 0, και στη συνέχεια να φέρουν 1,
και στη συνέχεια μπορείτε να δείτε εδώ την τρίτη στήλη από τα δεξιά
είχαμε αυτό το 1, 1, και 1.
Και 1 + 1 + 1 είναι ένα 1,
και σας μεταφέρει άλλο 1.
Όταν κάνετε δυαδικό Επιπλέον, αρκετά απλή.
Θα ήθελα να κάνω μια-δυο περισσότερα από αυτά να ελέγξετε τον εαυτό σας λογική
πριν πάτε σε αυτό, διότι είναι
ίσως κάτι που θα δούμε στο κουίζ.
Τώρα ας κάνουμε αυτό το επόμενο, καθώς και.
Ας κάνουμε πρόβλημα 17.
Εμείς πάμε για να μετατρέψετε το παρακάτω δυαδικό αριθμό σε δεκαδικό.
Έχω 10100111001.
Θυμηθείτε το δυαδικό βίντεο που έκανα
Περπάτησα μέσα από μερικά παραδείγματα, και μου έδειξε πώς
ό, τι λειτουργεί όταν το κάνετε σε δεκαδικό.
Όταν εργάζεστε σε δεκαδική αναπαράσταση Νομίζω ότι είμαστε
σε αυτό το σημείο στη ζωή μας τόσο πολύ καλά σε αυτό που
Είναι αρκετά εύκολο να αποσιωπήσει τους μηχανισμούς για το πώς λειτουργεί πραγματικά.
>> Αλλά για να κάνουμε μια γρήγορη ανακεφαλαίωση, αν έχω τον αριθμό 137
αυτό σημαίνει-και πραγματικά πάλι, αυτό είναι σε δεκαδική αναπαράσταση-
ο αριθμός 137 σε δεκαδικό σημαίνει ότι έχω 1 x 100 + 3 x 10 + 7 x 1.
Αυτό είναι το μόνο που διαμένουν στην οθόνη.
Και στη συνέχεια, αν δείτε αυτούς τους αριθμούς εδώ,
100, 10 και 1, θα δείτε ότι είναι στην πραγματικότητα όλες οι δυνάμεις του 10.
Έχω 10 ², 10 Rl, και 10 στο μηδέν.
Έχουμε ένα παρόμοιο είδος του πράγματος σε δυαδική,
εκτός από το ότι βάση μας, όπως την αποκαλούμε, είναι 2 αντί για 10.
Αυτά τα 10s που έγραψα εδώ κάτω στο κάτω μέρος,
αυτό το 10 ², 10 ¹, 10 στο μηδέν, το 10 είναι η βάση μας,
και ο εκθέτης, 0, 1, ή 2,
υπονοείται από τη θέση του ψηφίο του αριθμού που γράφουμε.
1, αν το δει κανείς, αυτό το 1 είναι στη 2η θέση.
Το 3 είναι στην θέση πρώτου, και το 7 είναι στην 0κή θέση.
Αυτό είναι το πώς θα πάρει τα διάφορα εκθέτες παρακάτω για βάσεις μας.
>> Μετά από όλα αυτά we'll-στην πραγματικότητα, ξέρετε τι;
Θα κάνουμε-πού κουμπί undo μου;
Εκεί πηγαίνει.
Λατρεύω αυτό το πράγμα αναίρεση.
Μετά από αυτό νομίζω ότι για μένα τουλάχιστον
ο ευκολότερος τρόπος για να ξεκινήσετε τη μετατροπή ενός δυαδικού αριθμού
ή ένας δεκαεξαδικός αριθμός όπου η βάση είναι 16
και όχι 10 ή 2 είναι να προχωρήσει και να γράψουν
οι βάσεις και εκθέτες για όλους τους αριθμούς σε δυαδική αριθμός μου στην κορυφή.
Αν αρχίσουμε από τα αριστερά προς τα δεξιά και πάλι,
το οποίο είναι το είδος της αντιφατικό,
Θα αλλάξει πίσω σε μαύρο εδώ, έχουμε το 2 έως το 0th θέση,
και τότε έχουμε 2 ¹, 2 ²,
και στη συνέχεια 2 στο 3, 2 έως το 4, με το 2 5, 6,
7, 8, 9, και 10.
Οι αριθμοί που έχω γράψει από όλα είναι οι εκθέτες.
Έγραψα μόνο τις βάσεις εδώ στο 3 πρώτα μόνο για το διάστημα.
>> Σε αυτό το σημείο είμαι πρόκειται να πάει μπροστά και είμαι πραγματικά πρόκειται να διαγράψετε
τα πράγματα που κάναμε σε δεκαδικό, αν αυτό είναι εντάξει.
Έχετε όλοι ότι έχεις.
Όσοι από εσάς παρακολουθούν σε απευθείας σύνδεση Είμαι σίγουρος ότι θα είναι σε θέση να μου προς τα πίσω, αν θέλετε.
Ενεργοποίηση πίσω στο στυλό.
Τώρα, αυτό που μπορούμε να κάνουμε-αν εσείς δεν είναι εντελώς μέχρι την ταχύτητα στην εξουσία σας από 2,
αυτό είναι εντελώς δροσερό.
Συμβαίνει. Καταλαβαίνω.
Κάποτε είχα μια συνέντευξη για δουλειά, όπου μου είπαν ότι θα πρέπει να γνωρίζουν όλες τις δυνάμεις του 2
μέσα από 2 έως την 30η.
Δεν ήταν μια δουλειά που πήρα.
Εν πάση περιπτώσει, εσείς μπορεί να πάει μπροστά και να κάνουμε τα μαθηματικά εδώ,
αλλά με δυαδική δεν κάνει πραγματικά την αίσθηση,
και ούτε έχει νόημα με δεκαδική ή δεκαεξαδική μορφή είτε,
να κάνετε τα μαθηματικά από όπου έχετε μηδενικά.
Μπορείτε να δείτε έχω 0, εδώ εδώ ένα 0, 0 εδώ, 0 εδώ, 0 εδώ, 0 εδώ.
Γιατί μπορεί να μην έχει νόημα να κάνουμε την πραγματική μαθηματικά
να υπολογίσει την κατάλληλη δύναμη του 2 για το εν λόγω θέση;
Ακριβώς, όπως η Charlotte είπε, θα είναι 0.
Μπορεί επίσης να αποθηκεύσετε στον εαυτό σας το χρόνο, αν τον υπολογισμό δυνάμεις του 2 δεν είναι ισχυρό κοστούμι σας.
Σε αυτή την περίπτωση το μόνο που χρειάζεται για να υπολογίσει για 2 έως το 0 που είναι-;
[Φοιτητικό] 1.
[Nate Η.] 1, 2 με την 3 η οποία είναι-;
[Φοιτητικό] 8. >> [Nate H] 8.
2 με το 4;
[Φοιτητικό] 2. Λυπάμαι, 1.
[Nate Η.] 2 στο 4 είναι 16, ακριβώς.
2 στο 5, Kevin; >> 32.
[Nate H.] 32, 2 έως τις 8;
[Φοιτητικό] 32 x 8, 256.
[Nate Η.] Perfect.
Και 2 στην 10;
[Φοιτητικό] 1024.
[Nate Η.] Ναι, 1024.
>> Μόλις έχουμε αυτούς τους αριθμούς μπορούμε να συνοψίσουμε όλα αυτά επάνω.
Και αυτό είναι όπου είναι πραγματικά σημαντικό να κάνουμε κάποια πράγματα.
Η μία είναι να επιβραδύνει και να ελέγξετε την εργασία σας.
Μπορείτε να πείτε ότι υπάρχει το 1 στο τέλος αυτού του αριθμού,
γι 'αυτό θα πρέπει να έχετε σίγουρα ένα μονό αριθμό ως αποτέλεσμα μου,
επειδή όλες οι άλλες που πρόκειται να είναι ζυγοί αριθμοί
δεδομένου ότι είναι ένα δυαδικό αριθμό.
Το άλλο πράγμα που πρέπει να κάνουμε είναι αν φτάσετε σε αυτό το σημείο για τη δοκιμή
και έχετε γράψει αυτό το πολύ
και τρέχετε από το χρόνο
να δούμε τον αριθμό των σημείων ότι το πρόβλημα αυτό αξίζει.
Αυτό το πρόβλημα, όπως μπορείτε να δείτε-αν αναστρέψετε πίσω στο laptop μου πολύ γρήγορα-
το πρόβλημα αυτό αξίζει 2 πόντους, οπότε αυτό δεν είναι το είδος της προσθήκης
θα πρέπει να περνάει, αν είστε πραγματικά πιεστεί για το χρόνο.
Αλλά θα επιστρέψετε στο iPad, και θα πάμε μέσα από αυτό πολύ γρήγορα.
>> Μου αρέσει να κάνω τις πρώτες μικρούς αριθμούς
επειδή θεωρώ ότι πιο εύκολο.
Μου αρέσει 32 και 8, διότι πηγαίνουν μαζί αρκετά εύκολα, και έχουμε 50.
16 και 1 παίρνει 17.
Εκεί θα έχουμε 57,
και τότε μπορούμε να κάνουμε το υπόλοιπο αυτό, ώστε να μπορούμε να κάνουμε 57, 156.
Έλα.
Ο άνθρωπος, λοιπόν, ας δούμε.
Είχαμε 57, 256, και 1024.
Σε αυτό το σημείο, θα προτιμούσα να πήγαινε μέσα.
Δεν έχω ιδέα. I σαφώς πρέπει να διαβάσετε επάνω σε αυτό.
7, 6, και 4, μπορείτε να πάρετε 17.
1, 5, 5, 2, 13.
Στη συνέχεια, παίρνουμε 3, και στη συνέχεια παίρνουμε 1.
1337.
Πασχαλινό αυγό, κανείς;
Ο καθένας αναγνωρίζει αυτόν τον αριθμό;
Chris αναγνωρίζει τον αριθμό. Τι σημαίνει αυτό, Κρις;
[Chris] Leet.
Leet, οπότε αν κοιτάξετε αυτό, μοιάζει leet.
Hacker πράγματα. Προσέξτε για τέτοιου είδους πράγματα σχετικά με την ενδιάμεση ή κουίζ, μάλλον.
Αν δείτε τέτοιου είδους πράγματα και αναρωτιέστε "Εεε,"
αυτό μπορεί να σημαίνει πραγματικά κάτι.
Δεν ξέρω. David αρέσει αυτό βάζοντας μέσα
Είναι ένας καλός τρόπος για να το ελέγξουμε λογική.
Όπως εντάξει, μπορώ να δω τι συμβαίνει.
>> Αυτό είναι 0/Week 1 Εβδομάδα πράγματα.
Αν επιστρέψετε στο laptop μας τώρα,
σμίκρυνση, και μερικά άλλα πράγματα.
Υπάρχει ASCII, το οποίο έχουμε ήδη κάνει πολλά με τις ομάδες πρόβλημα.
Αυτή η έννοια του κεφαλαίου Α. Τι είναι αυτό πραγματικά;
Γνωρίζοντας ότι είναι ο ακέραιος.
65 είναι αυτό που θα χαρτογραφηθεί στο ASCII πίνακα,
και ότι ως εκ τούτου είναι πώς ο υπολογιστής θα γράφει,
και αυτό είναι το πώς έχουμε πάρει μακριά με πραγματικά εγγράφως
η πρωτεύουσα του χαρακτήρα A και ο χαρακτήρας πεζά ένα
σε ορισμένες από αυτές τις λύσεις και θέτει το πρόβλημα που έχετε κάνει.
Ένα ζευγάρι από άλλα πράγματα.
Έχουμε δηλώσεις, boolean εκφράσεις, τις συνθήκες, βρόχους, οι μεταβλητές και τα θέματα.
>> Αυτοί όλοι φαίνεται να έχει νόημα για το μεγαλύτερο μέρος;
Μέρος αυτής της ορολογίας είναι λίγο funky κατά καιρούς.
Θέλω να πιστεύω ότι του δήλωση ως επί το πλείστον κάτι που τελειώνει με ένα ερωτηματικό.
Καταστάσεις όπως η x = 7, το οποίο ορίζει μια μεταβλητή,
προφανώς ονομάζεται x = 7.
Προφανώς το x είναι επίσης ένας τύπος που μπορεί να αποθηκεύσει τον αριθμό 7,
γι 'αυτό είναι ένα int ή float, ενδεχομένως, ένα ή μια μικρή ή μια char,
κάτι τέτοιο.
Μια boolean έκφραση χρησιμοποιεί αυτά τα διπλά ισούται
και το κτύπημα ή ο ισούται δεν ισούται, μικρότερο από, μεγαλύτερο από,
μικρότερη ή ίση με, όλα τέτοιου είδους πράγματα.
Προϋποθέσεις τότε είναι εάν άλλος δηλώσεις.
Θέλω να θυμάστε ότι δεν μπορείτε να έχετε ένα άλλο χωρίς αντίστοιχη περίπτωση.
Ομοίως, δεν μπορείτε να έχετε ένα άλλο, αν χωρίς αντίστοιχη αν.
Loops, υπενθυμίζουν τα 3 είδη βρόχων έχουμε σφυρηλάτηση σε σας
για τα τελευταία δύο τμήματα και σύνολα πρόβλημα.
Χρησιμοποιώντας μην ενώ όταν παίρνετε είσοδο του χρήστη,
ενώ χρησιμοποιώντας βρόχους μέχρι μια συγκεκριμένη συνθήκη είναι αληθής,
και στη συνέχεια, χρησιμοποιώντας τα για βρόχους, αν πρέπει να
γνωρίζουμε ποια επανάληψη του βρόχου είστε σήμερα είναι το πώς το σκέφτομαι.
Ή αν κάνεις ένα για κάθε χαρακτήρα σε μια σειρά που θέλω να κάνω κάτι,
για κάθε στοιχείο σε μια σειρά που θέλω να κάνω κάτι για αυτό το στοιχείο.
>> Κλωστές και εκδηλώσεις.
Αυτά δεν έχουμε καλύπτονται ρητώς στην C,
αλλά να θυμάστε αυτό από την αρχή.
Αυτή είναι η έννοια της ύπαρξης διαφορετικών σεναρίων.
Αυτό είναι, επίσης, η έννοια της μετάδοσης μιας εκδήλωσης.
Μερικοί άνθρωποι δεν χρησιμοποιούν ραδιοτηλεόρασης στα έργα τους αρχικά,
η οποία είναι εντελώς δροσερό,
αλλά αυτά είναι 2 διαφορετικούς τρόπους από το χειρισμό αυτού του ζητήματος που ονομάζεται μεγαλύτερο συναγωνισμό,
το οποίο είναι πώς μπορείτε να πάρετε τα προγράμματα για την εκτέλεση
ή φαινομενικά εκτελεί την ίδια στιγμή;
Διαφορετικές εργασίες εκτελούνται ενώ άλλες εργασίες εκτελούνται επίσης.
Αυτό είναι το πώς το λειτουργικό σας σύστημα φαίνεται να λειτουργεί.
Αυτός είναι ο λόγος, ακόμη και αν, για παράδειγμα,
Έχω browser μου τρέξιμο, μπορώ επίσης να ενεργοποιήσετε την Spotify και να παίξουν ένα τραγούδι.
Αυτό είναι περισσότερο από μια εννοιολογική πράγμα που πρέπει να καταλάβουμε.
Θα ήθελα να ρίξουμε μια ματιά στα θέματα σύντομο
αν θέλετε να μάθετε περισσότερα γι 'αυτό.
>> Ας δούμε, πιστεύω ότι μπορεί να υπήρξαν
ένα πρόβλημα σχετικά με αυτό σε μία από αυτές.
Και πάλι, νομίζω ότι τα θέματα και τα γεγονότα δεν είναι κάτι που θα καλύψουμε σε C
μόνο και μόνο επειδή είναι πολύ πιο δύσκολο από ό, τι στο Scratch.
Δεν πρέπει να ανησυχείτε γι 'αυτό εκεί, αλλά σίγουρα κατανοούν τις έννοιες,
καταλάβουμε τι συμβαίνει.
Πριν προχωρήσουμε, οποιεσδήποτε ερωτήσεις σχετικά Εβδομάδα 0 υλικό;
Όλοι αισθάνονται αρκετά καλά;
Κατανόηση μεταβλητές και τι είναι μεταβλητή;
>> Προχωρώντας. Εβδομάδα 1.
Ένα ζευγάρι από τα πράγματα εδώ που δεν ήταν ιδιαίτερα καλύπτονται
στο πλαίσιο της αναθεώρησης κουίζ κατ 'ανάγκη και επίσης είναι πιο εννοιολογική πράγματα να σκεφτώ.
Η πρώτη είναι η έννοια του τι είναι πηγαίου κώδικα, μεταγλωττιστές και αντικειμενικό κώδικα.
Ο καθένας; Βασίλειος.
Είναι αντικείμενο κώδικα-εννοώ ο πηγαίος κώδικας είναι ό, τι βάζετε στο κλαγγή,
και αντικειμενικού κώδικα είναι ό, τι κλαγγή βάζει έξω, έτσι ώστε ο υπολογιστής σας μπορεί να διαβάσει το πρόγραμμα.
Ακριβώς.
Ο πηγαίος κώδικας είναι ο κώδικας C που πραγματικά πληκτρολογήστε επάνω.
Κωδικός αντικειμένου είναι ό, τι μπορείτε να πάρετε από κλαγγή.
Είναι η 0s και 1s σε αυτό το δυαδική μορφή.
Στη συνέχεια, αυτό που συμβαίνει είναι όταν έχετε μια δέσμη των αρχείων αντικειμένου,
λένε είστε σύνταξη ενός σχεδίου ή ενός προγράμματος που χρησιμοποιεί πολλαπλά αρχεία πηγαίου κώδικα,
το οποίο με σύμβαση δίνεται η επέκταση αρχείου. γ..
Γι 'αυτό έχουμε caesar.c, vigenère.c.
Αν είστε γραπτώς Java προγράμματα που τους δίνουν την επέκταση. Java.
Python προγράμματα έχουν την επέκταση. Py συχνά.
>> Μόλις έχετε πολλαπλά αρχεία. Γ, μπορείτε να μεταγλωττίσετε.
Clang φτύσει όλα αυτά σκουπίδια δυαδική.
Τότε γιατί θέλετε μόνο 1 πρόγραμμα
έχετε το συνδετικό κρίκος όλων αυτών των αρχείων μαζί αντικείμενο
σε 1 εκτελέσιμο αρχείο.
Αυτό είναι επίσης τι συμβαίνει όταν χρησιμοποιείτε το CS50 βιβλιοθήκη, για παράδειγμα.
Η βιβλιοθήκη CS50 είναι τόσο ότι. Η αρχείο κεφαλίδας
ότι έχετε διαβάσει, ότι # includecs50.h.
Και τότε είναι επίσης ένα ειδικό αρχείο της βιβλιοθήκης δυαδικό
Αυτός είναι ο συνταχθεί δηλαδή 0s και 1s,
και ότι-l σημαία, οπότε αν πάμε πίσω στο Spaces μας και περιμένουμε πολύ γρήγορα
σε ό, τι συμβαίνει εδώ όταν κοιτάξουμε εντολή κλαγγή μας,
αυτό που έχουμε είναι αυτό το αρχείο είναι η πηγή μας κώδικα εδώ.
Αυτά είναι ένα μάτσο από τις σημαίες μεταγλώττισης.
Και στη συνέχεια, στο τέλος, αυτά-l σημαίες σε σύνδεσμο
οι πραγματικές δυαδικά αρχεία για αυτές τις 2 βιβλιοθήκες, η CS50 βιβλιοθήκη και στη συνέχεια η βιβλιοθήκη μαθηματικά.
>> Η κατανόηση κάθε τύπο αρχείων σκοπό »
στη διαδικασία κατάρτισης είναι κάτι που θα θελήσετε να είναι σε θέση να
δώσει τουλάχιστον ένα υψηλό επίπεδο επισκόπησης της.
Ο πηγαίος κώδικας μπαίνει Αντικείμενο κωδικός βγαίνει.
Αρχεία κώδικα αντικειμένου συνδέουν μεταξύ τους, και θα έχετε ένα όμορφο, εκτελέσιμο αρχείο.
Cool.
Αυτό είναι, επίσης, όπου μπορείτε να πάρετε τα σφάλματα σε πολλαπλά σημεία
στη διαδικασία κατάρτισης.
Αυτό είναι όπου, για παράδειγμα, αν πάρετε αυτό που συνδέει τη σημαία,
CS50 η σημαία, και μπορείτε να το παραλείψετε σε χώρους ή όταν τρέχετε τον κωδικό σας,
αυτό είναι όπου θα πάρετε ένα λάθος στη φάση σύνδεσης,
και ο σύνδεσμος θα πει, «Hey, εσείς ονομάζεται GetString λειτουργία
που είναι στη βιβλιοθήκη CS50. "
"Μου είπε ότι ήταν στη βιβλιοθήκη CS50, και δεν μπορώ να βρω τον κωδικό για αυτό."
Αυτό είναι όπου μπορείτε να το συνδέσετε σε, και ότι είναι ξεχωριστή
από ένα σφάλμα μεταγλωττιστή επειδή ο compiler ψάχνει στο συντακτικό και τέτοιου είδους πράγματα.
Είναι καλό να γνωρίζουμε τι συμβαίνει όταν.
>> Άλλα πράγματα που γνωρίζουν.
Θα έλεγα σίγουρα θέλετε να ρίξετε μια ματιά στη σύντομη για typecasting γίνει από την Ιορδανία
να καταλάβουμε τι είναι ints κάτω από την κουκούλα,
ποιο χαρακτήρες είναι κάτω από την κουκούλα.
Όταν μιλάμε για ASCII και να δούμε πραγματικά στο τραπέζι ASCII,
τι που κάνει μας δίνει μια ματιά κάτω από την κουκούλα
στο τρόπο με τον οποίο ο υπολογιστής αντιπροσωπεύει πραγματικά κεφάλαια Α και το ψηφίο 7
και ένα κόμμα και ένα ερωτηματικό.
Ο υπολογιστής έχει επίσης ειδικούς τρόπους να εκπροσωπεί
ο αριθμός 7 ως ακέραιος.
Έχει ένα ιδιαίτερο τρόπο να αντιπροσωπεύουν τον αριθμό 7 ως αριθμό κινητής υποδιαστολής,
και αυτά είναι πολύ διαφορετικά.
Typecasting είναι πώς να σας πω τον υπολογιστή "Γεια σου, θέλω να μετατρέψετε
από τη μια αναπαράσταση σε άλλη παράσταση. "
Γιατί δεν ρίχνουμε μια ματιά σε αυτό.
>> Θα ήθελα, επίσης, να λάβει μια ματιά στην μικρή σε βιβλιοθήκες και βραχυπρόθεσμα για μεταγλωττιστές.
Εκείνοι που μιλούν για τη διαδικασία σύνταξης,
τι είναι μια βιβλιοθήκη, και πάει πέρα ​​από μερικές από αυτές τις ερωτήσεις που μπορεί να πάρει ζητηθεί.
Ερωτήσεις σχετικά εβδομάδα 1 υλικό;
Υπάρχουν θέματα που εδώ φαίνεται δύσκολο θα θέλατε να καλύψει εκεί;
Προσπαθώ να φυσήξει μέσα από τα περισσότερα από αυτά τα θέματα νωρίτερα, έτσι ώστε να μπορούμε να φτάσουμε στην
δείκτες και να κάνουμε λίγο αναδρομή.
Σκέψεις;
Οτιδήποτε για να καλύψει;
Ώρα για κάποια σοκολάτα ίσως;
Εσείς εργάζονται μέσα από αυτό.
Πάω να κρατήσει πίνοντας τον καφέ μου.
Εβδομάδα 2.
Καλή κλήση, καλή κλήση.
Στην Εβδομάδα 2 μιλήσαμε λίγο περισσότερα για τις λειτουργίες.
>> Στις πρώτες σειρές πρόβλημα που δεν γράφουν πραγματικά οποιεσδήποτε λειτουργίες σε όλα
άλλα από τα οποία λειτουργούν;
[Φοιτητικό] Κύριο. >> Κύριο, ακριβώς.
Και έτσι έχουμε δει τα διαφορετικά κοστούμια που φοράει κύριος.
Υπάρχει η μία στην οποία δεν παίρνει ορίσματα,
και λέμε απλά κενό ανάμεσα στις παρενθέσεις,
και στη συνέχεια, υπάρχει η άλλη, όπου θέλουμε να λάβουν τα επιχειρήματα της γραμμής εντολών,
και όπως είδαμε, αυτό είναι όπου έχετε int argc και argv array εγχόρδων
ή τώρα που έχουμε εκτεθεί στην πραγματικότητα σειρά να είναι ο char * ότι είναι
θα πάμε για να αρχίσετε να γράφετε ως char * argv και στη συνέχεια παρένθεση.
Σε Σετ Πρόβλημα 3, εσείς είδε ένα σωρό λειτουργίες,
και θα εφαρμόσει μια δέσμη των λειτουργιών, ισοπαλία, κοιτάζω προς τα πάνω, αγωνίζομαι.
Τα πρωτότυπα ήταν όλα γραμμένα εκεί για σας.
>> Αυτό που ήθελα να μιλήσω για εδώ με λειτουργίες πολύ γρήγορα
είναι ότι υπάρχουν 3 τμήματα για τους κάθε φορά που θα γράψει μια λειτουργία.
Θα πρέπει να καθορίσετε τον τύπο επιστροφής της συνάρτησης.
Θα πρέπει να ορίσετε ένα όνομα για τη λειτουργία, και τότε θα πρέπει να καθορίσετε
ο κατάλογος των argument ή η λίστα παραμέτρων.
Για παράδειγμα, εάν επρόκειτο να γράψει μια λειτουργία για να συνοψίσω μια δέσμη των ακεραίων
και στη συνέχεια να επιστρέψει σε μένα το ποσό αυτό που θα ήταν τύπου επιστροφή μου
αν ήθελα να συνοψίσω ακέραιοι και στη συνέχεια επιστρέφει το ποσό;
Τότε το όνομα της συνάρτησης.
Αν πάω μπροστά και να γράφουν σε πράσινο, αυτό το μέρος είναι ο τύπος επιστροφής.
Αυτό το μέρος είναι το όνομα.
Και στη συνέχεια, στο εντός παρενθέσεων
Εκεί δίνω τα επιχειρήματα,
συχνά συντομογραφία args, μερικές φορές ονομάζεται params για τις παραμέτρους.
Και αν έχετε ένα, μπορείτε να καθορίσετε μόνο το ένα.
Αν έχετε πολλαπλές σας ξεχωριστά το καθένα με ένα κόμμα.
Και για κάθε επιχείρημα δίνετε 2 πράγματα που είναι-Kevin;
[Kevin] Θα πρέπει να δώσουμε τον τύπο και στη συνέχεια το όνομα.
Και τότε το όνομα, και το όνομα είναι το όνομα που πρόκειται να χρησιμοποιήσετε
να αναφερθώ σε αυτό το επιχείρημα στο πλαίσιο της λειτουργίας άθροισμα,
μέσα στη συνάρτηση που είστε σήμερα γραπτώς.
>> Δεν χρειάζεται να-για παράδειγμα, αν είμαι πρόκειται να συνοψίσω,
ας πούμε, μια σειρά από ακέραιους αριθμούς-we'll do int array,
και εγώ θα δώσω στον εαυτό μου μερικές αγκύλες εκεί-
στη συνέχεια, όταν θα περάσει μια σειρά για τη λειτουργία άθροισμα
I να περάσει στην πρώτη θέση της λίστας επιχείρημα.
Αλλά η σειρά που έχω περάσει στο δεν πρέπει να έχουν το όνομα σύλλ.
Arr πρόκειται να είναι το πώς θα αναφέρονται σε αυτό το επιχείρημα μέσα στο σώμα της συνάρτησης.
Το άλλο πράγμα που πρέπει να λάβουμε υπόψη,
και αυτό είναι ελαφρώς διαφορετική από τις λειτουργίες, αλλά νομίζω ότι είναι ένα σημαντικό σημείο,
είναι ότι σε C, όταν γράφω μια λειτουργία όπως αυτό
πώς μπορώ να ξέρω πόσα στοιχεία είναι σε αυτή την σειρά;
Αυτό είναι κάπως από μια ερώτηση παγίδα.
Μιλήσαμε για αυτό λίγο στο τμήμα της περασμένης εβδομάδας.
Πώς μπορώ να ξέρω τον αριθμό των στοιχείων μέσα σε ένα πίνακα σε C;
Είναι ένας τρόπος υπάρχει;
>> Αποδεικνύεται ότι δεν υπάρχει τρόπος να γνωρίζουμε.
Θα πρέπει να το δώσετε σε χωριστά.
Υπάρχει ένα τέχνασμα που μπορείτε να κάνετε
αν είστε στην ίδια λειτουργία στην οποία ο πίνακας έχει δηλωθεί,
και εργάζεστε με μια σειρά στοίβα.
Αλλά αυτό λειτουργεί μόνο αν είστε στην ίδια λειτουργία.
Μόλις περάσετε μια σειρά σε μια άλλη λειτουργία ή εάν έχετε δηλώσει μια σειρά
και να βάλετε ότι η σειρά στο σωρό, που έχετε χρησιμοποιήσει malloc
και τέτοιου είδους πράγματα, τότε όλα τα στοιχήματα είναι off.
Στη συνέχεια, μπορείτε πραγματικά να περάσει γύρω από
ένα ειδικό επιχείρημα ή άλλη παράμετρος
να σας πω πόσο μεγάλη είναι η σειρά είναι.
Στην περίπτωση αυτή, θα ήθελα να θέλετε να χρησιμοποιήσετε ένα κόμμα-Συγγνώμη, αυτό συμβαίνει από την οθόνη εδώ-
και θα ήθελα να περάσει σε ένα άλλο επιχείρημα
και να το ονομάσουμε int len ​​για το μήκος.
>> Ένα πράγμα που θα μπορούσε να καταλήξει στο κουίζ
σας ζητούμε να γράψει ή να εφαρμόσουν μια συγκεκριμένη λειτουργία που ονομάζεται κάτι.
Αν δεν σας δίνουν το πρωτότυπο, έτσι ώστε όλο αυτό το πράγμα εδώ,
όλο αυτό το χάος που ονομάζεται τη δήλωση λειτουργία ή το πρωτότυπο της συνάρτησης,
αυτό είναι ένα από τα πρώτα πράγματα που θα θέλετε να καρφώσετε κάτω αν δεν είναι δεδομένη
για να σας αμέσως στο κουίζ.
Το άλλο τέχνασμα που έχω μάθει είναι ότι
να πούμε ότι σας δίνουν ένα πρωτότυπο για μια λειτουργία, και λέμε, "Γεια σου, έχεις να το γράψω."
Μέσα στα άγκιστρα που έχετε για το κουίζ
αν παρατηρήσετε ότι υπάρχει ένα είδος επιστροφής και θα παρατηρήσετε ότι ο τύπος επιστροφής
είναι κάτι άλλο από κενό, πράγμα που σημαίνει ότι η λειτουργία δεν επιστρέφει τίποτα,
τότε ένα πράγμα που σίγουρα θέλετε να κάνετε είναι να γράψετε
κάποιο είδος της δήλωσης επιστροφής στο τέλος της λειτουργίας.
Επιστροφή, και σε αυτή την περίπτωση, θα βάλουμε ένα κενό, διότι θέλουμε να συμπληρώσει το κενό.
Αλλά αυτό παίρνει σκέφτεσαι με το σωστό τρόπο για το πώς θα πάω να προσεγγίσουμε αυτό το πρόβλημα;
Και αυτό σας θυμίζει εσείς πρόκειται να πρέπει να επιστρέψει μια τιμή
στον καλούντα της συνάρτησης.
>> Ναι. >> [Φοιτητικό] Μήπως το στυλ εφαρμόζονται όταν γράφουμε κώδικα για το κουίζ;
Όπως εσοχές και τέτοιου είδους πράγματα; >> [Φοιτητικό] Ναι.
Όχι, όχι τόσο πολύ.
Νομίζω ότι πολλοί-αυτό είναι κάτι που θα διευκρινιστεί στο κουίζ για την ημέρα του,
αλλά συνήθως περιλαμβάνει ανησυχία για # και τέτοιου είδους πράγματα, αυτό είναι το είδος του έξω.
[Φοιτητικό] Θέλετε να σχολιάσετε χειρόγραφες τον κωδικό σας;
Θέλετε να σχολιάσετε χειρόγραφες τον κωδικό σας;
Σχολιάζοντας είναι πάντα καλό, αν είστε ανησυχούν για μερική πίστωση
ή θέλετε να επικοινωνήσετε πρόθεσή σας να το γκρέιντερ.
Αλλά, και πάλι, θα διευκρινιστεί στο κουίζ ίδιο και την ημέρα κουίζ,
αλλά δεν πιστεύω ότι θα πρέπει να γράψουν ένα σχόλιο, όχι.
Συνήθως όχι, αλλά είναι σίγουρα το είδος του πράγματος, όπου
μπορείτε να επικοινωνείτε πρόθεσή σας, όπως "Γεια σου, αυτό είναι που Πάω με αυτό."
Και μερικές φορές που μπορεί να βοηθήσει με μερική πίστωση.
Cool.
>> Βασίλειος.
[Βασίλης] Ποια είναι η διαφορά μεταξύ δήλωση, ας πούμε, int lang
στα επιχειρήματα ή τις παραμέτρους σε σχέση με την οποία μια μεταβλητή μέσα στη συνάρτηση;
Πω πω, καφέ πήγε στην τραχεία.
[Βασίλης] Όπως οποίων πράγματα που θέλουμε να θέσει σε επιχειρήματα.
Ναι, αυτό είναι ένα μεγάλο ερώτημα.
Πώς επιλέγετε ποια πράγματα θέλετε να βάλετε τα επιχειρήματα
σε σχέση με ό, τι πράγματα που πρέπει να κάνετε μέσα από τη λειτουργία;
Σε αυτή την περίπτωση θα περιλαμβάνονται τα δύο αυτά επιχειρήματα ως
επειδή είναι κάτι που όποιος πρόκειται να χρησιμοποιήσετε τη λειτουργία άθροισμα
πρέπει να καθορίσετε αυτά τα πράγματα.
>> Η λειτουργία άθροισμα, όπως μιλήσαμε, δεν έχει καμία δυνατότητα να γνωρίζει
πόσο μεγάλη είναι η σειρά παίρνει από του καλούντος ή όποιος χρησιμοποιεί τη λειτουργία άθροισμα.
Δεν έχει καμία δυνατότητα να γνωρίζει πόσο μεγάλη είναι η σειρά είναι.
Ο λόγος που περνάμε σε αυτό το μήκος εδώ ως επιχείρημα
Είναι επειδή αυτό είναι κάτι που λέμε ουσιαστικά τον καλούντα της λειτουργίας,
όποιος πρόκειται να χρησιμοποιήσετε τη λειτουργία άθροισμα, "Hey, όχι μόνο δεν θα πρέπει να μας δώσει μια σειρά
από ints, θα πρέπει επίσης να μας πει πόσο μεγάλη είναι η σειρά που έχετε δώσει είναι. "
[Βασίλης] Αυτοί οι δύο θα είναι τα επιχειρήματα της γραμμής εντολών;
Όχι, αυτά είναι πραγματικά επιχειρήματα που θα περάσει στη λειτουργία.
>> Επιτρέψτε μου να κάνω μια νέα σελίδα εδώ.
[Βασίλης] Όπως το όνομα θα περνούσε-
[Nate H] Αν έχω int main (void),
και Πάω να θέσει σε 0 την επιστροφή μου εδώ κάτω στο κάτω μέρος,
και να πω ότι θέλετε να καλέσετε τη λειτουργία άθροισμα.
Θέλω να πω int x = άθροισμα ()?
Για να χρησιμοποιήσετε τη λειτουργία άθροισμα πρέπει να περάσει τόσο τη σειρά που θέλω να συνοψίσω
και το μήκος της συστοιχίας, έτσι αυτό είναι όπου
υποθέτοντας είχα μια σειρά από ints,
πω είχα int numbaz [] = 1, 2, 3,
το είδος της χρήσης που hacked μέχρι τη σύνταξη εκεί,
τότε τι θα έκανα είναι σε ποσό θα ήθελα να περάσει σε
τόσο numbaz και ο αριθμός 3
να πει τη λειτουργία άθροισμα "Εντάξει, εδώ είναι η σειρά που θέλω να συνοψίσω."
"Εδώ είναι το μέγεθός του."
Μήπως αυτό έχει νόημα; Μήπως αυτό απαντήσω στην ερώτησή σας;
>> Με πολλούς τρόπους θα κάνει παράλληλα ό, τι κάνουμε με κύρια
όταν έχουμε τα επιχειρήματα της γραμμής εντολών.
Ένα πρόγραμμα όπως το Caesar cipher, για παράδειγμα, που απαιτείται
τα επιχειρήματα της γραμμής εντολών δεν θα είναι σε θέση να κάνει τίποτα.
Δεν θα ξέρετε πώς να κρυπτογραφήσετε αν δεν πει το τι κλειδί για να χρησιμοποιήσουν
ή αν δεν το πει τι σειρά θα ήθελε να κρυπτογραφήσετε.
Προτροπή για είσοδο, αυτό είναι όπου έχουμε 2 διαφορετικούς μηχανισμούς
για τη λήψη εισόδου στην από το χρήστη, για τη λήψη πληροφοριών από το χρήστη.
Για Πρόβλημα Set 1 είδαμε αυτό GetInt, GetString, GetFloat τρόπο
την παρακίνηση για την είσοδο, και αυτό είναι που ονομάζεται με το πρότυπο ρεύμα εισόδου.
Είναι ελαφρώς διαφορετική.
Είναι κάτι που μπορείτε να κάνετε σε ένα χρόνο, σε αντίθεση με
όταν επικαλούνται το πρόγραμμα, όταν ξεκινάτε το πρόγραμμα που εκτελείται.
Τα επιχειρήματα της γραμμής εντολών όλα καθορίζονται όταν ξεκινάτε τη λειτουργία του προγράμματος.
Έχουμε την ανάμειξη των δύο αυτών.
Όταν χρησιμοποιούμε επιχειρήματα σε μια λειτουργία, είναι σαν τα επιχειρήματα της γραμμής εντολών στην κύρια.
Είναι όταν επικαλούνται τη λειτουργία θα πρέπει να το πείτε
ό, τι ακριβώς χρειάζεται για να εκτελέσει τα καθήκοντά του.
Ένα άλλο καλό πράγμα για να εξετάσει-και εγώ θα σας αφήσει να το δει κανείς στον ελεύθερο χρόνο σας,
και καλύφθηκε στο κουίζ-ήταν αυτή η έννοια του πεδίου εφαρμογής
και σε σχέση με τις τοπικές μεταβλητές καθολικές μεταβλητές.
Κάντε δώσουν προσοχή σε αυτό.
>> Τώρα που παίρνουμε σε αυτό άλλα πράγματα,
στην Εβδομάδα 3 αρχίσαμε να μιλάμε για την αναζήτηση και τη διαλογή.
Αναζήτηση και διαλογή, τουλάχιστον σε CS50,
είναι πάρα πολύ μια εισαγωγή σε μερικά από τα πιο θεωρητικά τμήματα της επιστήμης των υπολογιστών.
Το πρόβλημα της αναζήτησης, το πρόβλημα της διαλογής
είναι μεγάλα, κανονικά προβλήματα.
Πώς μπορείτε να βρείτε ένα συγκεκριμένο αριθμό σε μια σειρά από τα δισεκατομμύρια των ακεραίων;
Πώς μπορείτε να βρείτε ένα συγκεκριμένο όνομα μέσα σε ένα τηλεφωνικό
που είναι αποθηκευμένη στον υπολογιστή σας;
Και έτσι έχουμε εισαγάγει αυτή την έννοια της ασυμπτωτικής ώρες λειτουργίας
να ποσοτικοποιηθούν πραγματικά πόσο καιρό, πόσο σκληρά είναι αυτά τα προβλήματα,
πόσο καιρό θα πάρει για να λύσει.
Σε πιστεύω, κουίζ του 2011 υπάρχει ένα πρόβλημα που πιστεύω ότι αξίζει
καλύπτοντας πολύ γρήγορα, το οποίο είναι αυτό το ένα, το πρόβλημα 12.
O όχι, είναι Ωμέγα.
>> Εδώ μιλάμε για τον ταχύτερο δυνατό χρόνο λειτουργίας
για ένα συγκεκριμένο αλγόριθμο και στη συνέχεια ο πιο αργός δυνατό χρόνο εκτέλεσης.
Αυτή η Omega και O είναι πραγματικά ακριβώς συντομεύσεις.
Είναι συμβολισμούς συντομεύσεις για το ρητό
πόσο γρήγορα στην καλύτερη δυνατή περίπτωση θα τρέχει ο αλγόριθμος μας,
και πόσο αργά στη χειρότερη δυνατή περίπτωση θα τρέξει ο αλγόριθμος μας;
Ας κάνουμε ένα ζευγάρι από αυτά, και αυτά καλύπτονται επίσης
σε σύντομο χρονικό για ασυμπτωτική σημειογραφία, που συστήνω ιδιαίτερα.
Τζάκσον έκανε πραγματικά καλή δουλειά.
Με την δυαδική αναζήτηση, μιλάμε για δυαδική αναζήτηση ως ένας αλγόριθμος,
και συνήθως μιλάμε από την άποψη του μεγάλου του Ο.
Ποια είναι η μεγάλη O;
Ποια είναι η πιο αργή δυνατό χρόνο εκτέλεσης της δυαδικής αναζήτησης;
[Φοιτητικό] Ν ²;
Κλείσιμο, υποθέτω παρόμοια με αυτή.
Είναι πολύ πιο γρήγορα από ό, τι αυτό.
[Φοιτητικό] Binary; >> Ναι, δυαδική αναζήτηση.
[Φοιτητικό] Είναι log n.
Σύνδεση n, έτσι τι κάνει log n σημαίνει;
Είναι τα μισά είναι σε κάθε επανάληψη.
Ακριβώς, έτσι και στο πιο αργή πιθανή περίπτωση,
πείτε εάν έχετε ένα ταξινομημένο πίνακα
από ένα εκατομμύριο ακέραιοι και τον αριθμό που ψάχνετε
είναι είτε το πρώτο στοιχείο στην συστοιχία ή πολύ τον τελευταίο στοιχείο στη συστοιχία.
Θυμηθείτε, η δυαδική αλγόριθμος αναζήτησης λειτουργεί με κοιτάζετε το κέντρο στοιχείο,
να δει αν αυτός είναι ο αγώνας που ψάχνετε.
Αν είναι, τότε μεγάλη, που το βρήκε.
>> Στην καλύτερη δυνατή περίπτωση, πόσο γρήγορα τρέχει κάνει δυαδική αναζήτηση;
[Φοιτητές] 1.
1, είναι σταθερό χρόνο, μεγάλο Ο του 1. Ναι.
[Φοιτητικό] Έχω μια ερώτηση. Όταν λέτε συνδεθείτε του n, που σημαίνει ότι σε σχέση με βάση 2, έτσι δεν είναι;
Ναι, έτσι ώστε να είναι το άλλο πράγμα.
Λέμε n log, και υποθέτω ότι όταν ήμουν στο γυμνάσιο
Πάντα υποτίθεται ότι ήταν ημερολόγιο βάσης 10.
Ναι, ναι, έτσι, log 2 βάσης είναι συνήθως αυτό που χρησιμοποιείτε.
Και πάλι, πηγαίνοντας πίσω στο δυαδική αναζήτηση, αν ψάχνετε για είτε
το στοιχείο στο τέλος ή το στοιχείο στην αρχή,
επειδή ξεκινήσετε στη μέση και στη συνέχεια να απορρίψετε
Όποια κι αν οι μισοί δεν πληροί τα κριτήρια που ψάχνετε,
και πηγαίνετε στο επόμενο εξάμηνο και το επόμενο εξάμηνο και το επόμενο εξάμηνο.
Αν ψάχνω για το μεγαλύτερο στοιχείο του πίνακα εκατομμυρίων ακέραιο
Πάω να το μειώσει κατά το ήμισυ το πολύ log του 1 εκατ. φορές
πριν τελικά τη δοκιμή και να δούμε ότι το στοιχείο που ψάχνω
είναι στο μεγαλύτερο ή στο υψηλότερο δείκτη της συστοιχίας,
και ότι θα λάβει ημερολόγιο του n, συνδεθείτε από 1 εκατομμύριο φορές.
>> Bubble sort.
Μήπως εσείς θυμάστε τον αλγόριθμο ταξινόμησης φυσαλίδας;
Kevin, μπορείτε να μου δώσετε μια γρήγορη ανακεφαλαίωση του τι συνέβη στον αλγόριθμο ταξινόμησης φυσαλίδας;
[Kevin] Βασικά ό, τι περνά από τη λίστα.
Εξετάζει τις δύο πρώτες.
Εάν το πρώτο είναι μεγαλύτερο από το δεύτερο αυτό τους ανταλλαγές.
Στη συνέχεια συγκρίνει δεύτερο και το τρίτο, το ίδιο πράγμα, swaps,
τρίτο και το τέταρτο, σε όλη τη διαδρομή προς τα κάτω.
Μεγαλύτερη αριθμοί θα ακολουθήσουν μέχρι το τέλος.
Και μετά, ωστόσο πολλοί βρόχοι τελειώσατε.
Ακριβώς, έτσι ώστε ό, τι είπε ο Kevin είναι ότι θα παρακολουθήσουν μεγαλύτερους αριθμούς
φούσκα μέχρι το τέλος του πίνακα.
Για παράδειγμα, δεν σας πείραζε τα πόδια μας μέσα από αυτό το παράδειγμα, εάν αυτή είναι η σειρά μας;
[Kevin] Θα πάρετε 2 και 3.
3 είναι μεγαλύτερο από 2, έτσι ώστε να τα ανταλλάξουν.
[Nate Η.] Δεξιά, έτσι ώστε να ανταλλάξουν αυτά, και έτσι έχουμε 2, 3, 6, 4, και 9.
[Kevin] Στη συνέχεια, μπορείτε να συγκρίνετε τις 3 και 6.
3 είναι μικρότερο από 6, έτσι ώστε να τους αφήσει,
και 6 και 4, που θα τους ανταλλάξουν επειδή 4 είναι μικρότερο από 6.
[Nate Η.] Δεξιά, ώστε να πάρω 2, 3, 4, 6, 9.
[Kevin] και 9 είναι μεγαλύτερος από 6, ώστε να μπορείτε να φύγετε.
Και θέλετε να επιστρέψετε ξανά μέσα από αυτό.
>> [Nate H] Είμαι γίνει σε αυτό το σημείο; >> [Kevin] Όχι.
Και γιατί δεν είμαι γίνει σε αυτό το σημείο;
Επειδή μοιάζει σειρά μου είναι ταξινομημένο. Ψάχνω σε αυτό.
[Kevin] Πήγαινε μέσα από αυτό ξανά και βεβαιωθείτε ότι δεν υπάρχουν πλέον swaps
για να μπορέσετε να σταματήσει πλήρως.
Ακριβώς, έτσι πρέπει να συνεχίσουμε, μέσω και βεβαιωθείτε ότι δεν υπάρχουν ανταλλαγές
ότι μπορείτε να κάνετε σε αυτό το σημείο.
Ήταν πραγματικά μόνο τυχερός, όπως είπατε και εσείς, ότι καταλήξαμε
μόνο που έχει να κάνει 1 περνούν και είμαστε ταξινομημένο.
Αλλά για να γίνει αυτό στη γενική περίπτωση θα πρέπει πραγματικά να το κάνετε αυτό ξανά και ξανά.
Και στην πραγματικότητα, αυτό ήταν ένα παράδειγμα του καλύτερου δυνατού περίπτωση,
όπως είδαμε στο πρόβλημα.
Είδαμε ότι η καλύτερη δυνατή περίπτωση το n.
Πήγαμε μέσω του πίνακα 1 φορά.
Ποια είναι η χειρότερη δυνατή περίπτωση για αυτόν τον αλγόριθμο;
[Kevin] Ν ².
Και τι που μοιάζουν; Τι θα δείτε μια σειρά, όπως αυτό θα λάβει n ² χρόνο;
[Kevin] [δεν ακούγεται] ταξινομημένο.
Ακριβώς, οπότε αν είχα τον πίνακα 9, 7, 6, 5, 2,
πρώτα το 9 θα φούσκα σε όλη τη διαδρομή επάνω.
Μετά από 1 επανάληψη θα είχαμε 7, 6, 5, 2, 9.
Στη συνέχεια, το 7 θα φούσκα επάνω, 6, 5, 2, 7, 9, και ούτω καθεξής και ούτω καθεξής.
>> Εμείς θα πρέπει να περάσουν από όλη τη σειρά n φορές,
και μπορείτε πραγματικά να πάρετε λίγο πιο ακριβή από ό, τι αυτό
γιατί από τη στιγμή που έχουμε μετακινηθεί το 9 σε όλη τη διαδρομή μέχρι και σε τελευταία πιθανή θέση του
ξέρουμε ότι ποτέ δεν πρέπει να συγκρίνουμε κατά της εν λόγω στοιχείο και πάλι.
Μόλις αρχίζουμε τη διοχέτευση 7 έως
γνωρίζουμε ότι μπορούμε να σταματήσουμε μια φορά το 7 είναι ακριβώς πριν την 9
αφού έχουμε ήδη την σύγκριση 9 έως αυτό.
Εάν το κάνετε αυτό με έξυπνο τρόπο δεν είναι αληθινά, υποθέτω, ότι ένα μεγάλο μέρος του χρόνου.
Δεν πρόκειται να συγκρίνει όλες τις πιθανές [δεν ακούγεται] συνδυασμούς
κάθε φορά που περνάτε από κάθε επανάληψη.
Αλλά και πάλι, όταν μιλάμε για αυτό το άνω όριο λέμε ότι
ψάχνετε σε n ² συγκρίσεις σε όλη τη διαδρομή μέσω.
>> Ας πάμε πίσω, και από τη στιγμή που αρχίζουμε να πάρει λίγο χρόνο για σύντομο
Θα έλεγα ότι σίγουρα θα πρέπει να περάσει μέσα από το υπόλοιπο αυτού του πίνακα,
συμπληρώστε όλα έξω.
Σκεφτείτε παραδείγματα. Σκεφτείτε συγκεκριμένα παραδείγματα.
Αυτό είναι πολύ βολικό και χρήσιμο να κάνουμε.
Τραβήξτε προς τα έξω.
Αυτό είναι το είδος του πίνακα ότι καθώς περνάτε στην επιστήμη των υπολογιστών
θα πρέπει πραγματικά να αρχίσουν να γνωρίζουν αυτά από την καρδιά.
Αυτά είναι τα είδη των ερωτήσεων μπορείτε να έρθετε σε συνεντεύξεις.
Αυτά είναι τα είδη των πραγμάτων που είναι καλό να γνωρίζουμε,
και να σκεφτούμε αυτές τις περιπτώσεις άκρη, πραγματικά αναφέρονται για το πώς να σκεφτούμε
γνωρίζοντας ότι για φούσκα ταξινομήσετε τη χειρότερη δυνατή σειρά
να ταξινομήσετε με αυτό είναι ένα που είναι σε αντίστροφη σειρά.
>> Δείκτες. Ας μιλήσουμε λίγο για δείκτες.
Κατά τα τελευταία λίγα λεπτά που έχουμε εδώ
Ξέρω ότι αυτό είναι κάτι που, μαζί με το αρχείο I / O που είναι σχετικά νέα.
Όταν μιλάμε για δείκτες το λόγο θέλουμε να μιλήσουμε για δείκτες
οφείλεται στο γεγονός ότι, ένα, όταν δουλεύουμε σε C
είμαστε πραγματικά σε αρκετά χαμηλά επίπεδα σε σύγκριση με τις περισσότερες σύγχρονες γλώσσες προγραμματισμού.
Είμαστε πραγματικά σε θέση να χειριστούν τις μεταβλητές στη μνήμη,
καταλάβω πού είναι στην πραγματικότητα βρίσκεται μέσα μας μνήμη RAM.
Μόλις πάει για να παρακολουθήσει μαθήματα του λειτουργικού συστήματος που θα δείτε
ότι αυτό είναι, και πάλι, το είδος της αφαίρεσης.
Αυτό δεν είναι πραγματικά η περίπτωση.
Έχουμε την εικονική μνήμη που κρύβεται αυτές τις λεπτομέρειες από εμάς.
>> Αλλά για τώρα, μπορείτε να υποθέσετε ότι όταν έχετε ένα πρόγραμμα,
για παράδειγμα, όταν αρχίσει να τρέχει το πρόγραμμα του Καίσαρα-σας cipher
Θα επιστρέψετε στο iPad μου πολύ γρήγορα-
ότι από την αρχή κιόλας το πρόγραμμά σας, αν έχετε, ας πούμε,
4 gigabytes μνήμης RAM για το laptop σας,
έχετε να αναιρέσει αυτό το κομμάτι, και θα καλέσουμε το RAM.
Και αρχίζει σε ένα μέρος θα πάμε να καλέσετε 0,
και καταλήγει σε μια θέση που θα καλέσουμε 4 gigabytes.
Πραγματικά δεν μπορώ να γράψω. Ο άνθρωπος, που είναι hacked.
Όταν εκτελεί το πρόγραμμα σας
το λειτουργικό σύστημα χαράζει επάνω RAM,
και προσδιορίζει διαφορετικά τμήματα για διάφορα μέρη του προγράμματος σας για να ζήσει μέσα
Εδώ κάτω, αυτή η περιοχή είναι ένα είδος γη του κανενός.
Όταν ανεβείτε λίγο μακρύτερα εδώ
έχετε πραγματικά τον τόπο όπου
ο κώδικας για τη ζωή σας πρόγραμμα.
Η πραγματική δυαδικό κώδικα, εκτελέσιμο αρχείο που πραγματικά παίρνει φορτωθεί στη μνήμη
όταν εκτελείτε ένα πρόγραμμα, και ζει στο τμήμα κώδικα.
Και καθώς το πρόγραμμά σας εκτελεί ο επεξεργαστής φαίνεται σε αυτό το τμήμα κώδικα
για να καταλάβουμε ποια είναι η επόμενη εντολή;
Ποια είναι η επόμενη γραμμή του κώδικα που πρέπει να εκτελέσει;
>> Υπάρχει επίσης ένα τμήμα των δεδομένων, και αυτό είναι όπου οι σταθερές συμβολοσειράς
πάρει αποθηκεύονται ότι έχετε χρησιμοποιήσει.
Και τότε μέχρι μακρύτερα υπάρχει αυτό το μέρος που ονομάζεται το σωρό.
Έχουμε πρόσβαση σε μνήμη εκεί με τη χρήση malloc,
και στη συνέχεια προς την κορυφή του προγράμματός σας
υπάρχει η στοίβα,
και εκεί είναι που έχουμε το παιχνίδι για περισσότερα από την αρχή.
Αυτό δεν είναι σε κλίμακα ή οτιδήποτε.
Πολλά από αυτά είναι πολύ εξαρτάται από μηχάνημα,
εξαρτάται από το λειτουργικό σύστημα, αλλά αυτό είναι το πώς τα πράγματα σχετικά κατατμημένη πάρει επάνω.
Όταν εκτελείτε ένα πρόγραμμα και δηλώνετε μια μεταβλητή που ονομάζεται x-
Πάω να συντάξει ένα άλλο κουτί κάτω, και αυτό πρόκειται να είναι μνήμη RAM, καθώς και.
Και εγώ είμαι πρόκειται να δούμε.
Θα επιστήσω την ακανόνιστες γραμμές να δείχνουν αυτό είναι μόνο ένα μικρό τμήμα της μνήμης RAM
και δεν είναι όλοι σαν εφιστούμε στην κορυφή.
>> Αν Δηλώνω μια ακέραια μεταβλητή που ονομάζεται x,
τότε αυτό που πραγματικά να πάρει είναι μια χαρτογράφηση
το οποίο είναι αποθηκευμένο στον πίνακα συμβόλων του προγράμματος μου
που συνδέει το όνομα x σε αυτήν την περιοχή της μνήμης που έχω σχεδιάσει
δεξιά εδώ μεταξύ των κατακόρυφων ράβδων.
Αν έχω μια γραμμή κώδικα στο πρόγραμμά μου, που λέει ότι x = 7
ο επεξεργαστής γνωρίζει "Ω, εντάξει, ξέρω ότι η ζωή x σε αυτή τη θέση στη μνήμη."
"Πάω να προχωρήσει και να γράψει ένα 7 εκεί."
Πώς ξέρεις τι είναι αυτό τοποθεσία στη μνήμη;
Λοιπόν, αυτό είναι όλα γίνονται κατά τη μεταγλώττιση.
Ο μεταγλωττιστής φροντίζει για την κατανομή, όπου κάθε μία από τις μεταβλητές που πρόκειται να πάει
και δημιουργώντας μια ειδική χαρτογράφηση ή μάλλον που συνδέει τις τελείες
ανάμεσα σε ένα σύμβολο και πού πηγαίνει, το όνομα μιας μεταβλητής
και όπου πρόκειται να ζήσουν στη μνήμη.
Αλλά αποδεικνύεται ότι μπορούμε να έχουμε πρόσβαση σε πραγματικά προγράμματα μας, καθώς και.
Αυτό γίνεται σημαντικό όταν αρχίσουμε να μιλάμε για κάποιες από τις δομές δεδομένων,
η οποία είναι μια έννοια ότι θα πάμε να εισαγάγει αργότερα.
>> Αλλά για τώρα, ό, τι μπορείτε να ξέρετε είναι ότι μπορώ να δημιουργήσω ένα δείκτη προς αυτό το σημείο, x.
Για παράδειγμα, μπορώ να δημιουργήσω μια μεταβλητή δείκτη.
Όταν δημιουργούμε μια μεταβλητή δείκτη που χρησιμοποιούμε τον συμβολισμό αστέρι.
Σε αυτήν την περίπτωση, αυτό λέει Πάω να δημιουργήσει ένα δείκτη σε int.
Είναι ένα είδος ακριβώς όπως οποιοδήποτε άλλο.
Έχουμε δώσει μια μεταβλητή, όπως y,
και στη συνέχεια θέτουμε ίση με την διεύθυνση, σε μια διεύθυνση.
Σε αυτή την περίπτωση, μπορούμε να θέσουμε y στο σημείο να χ
λαμβάνοντας τη διεύθυνση του x, που κάνουμε με αυτό το εμπορικό,
και στη συνέχεια θέτουμε y να επισημάνω σε αυτό.
Αυτό δεν είναι κατ 'ουσίαν, αν κοιτάξουμε RAM μας
αυτό δημιουργεί μια ξεχωριστή μεταβλητή.
Είναι πρόκειται να καλέσετε το y,
και όταν αυτή η γραμμή του κώδικα εκτελεί
αυτό είναι πραγματικά πρόκειται να δημιουργήσει ένα μικρό δείκτη ο οποίος θα συντάξει συνήθως ως ένα βέλος,
και θέτει στο σημείο y στο x.
Ναι.
[Φοιτητικό] Αν το x είναι ήδη ένας δείκτης, θα σας κάνει μόνο
int * y = x, αντί να έχει το εμπορικό;
Ναι.
Αν το x είναι ήδη ένα δείκτη, τότε μπορείτε να set 2 δείκτες ίσες μεταξύ τους,
στην οποία περίπτωση y που δεν υποδηλώνει x,
αλλά θα επισημάνω σε ό, τι χ δείχνει να.
Δυστυχώς, είμαστε έξω από το χρόνο.
>> Αυτό που θα ήθελα να πω σε αυτό το σημείο, μπορούμε να μιλήσουμε για αυτό το offline,
αλλά θα έλεγα να αρχίσει να εργάζεται μέσα από αυτό το πρόβλημα, # 14.
Μπορείτε να δείτε ότι υπάρχει ήδη λίγο συμπληρωθεί για σας εδώ.
Μπορείτε να δείτε ότι όταν δηλώνουμε 2 δείκτες, int * x και y *,
και σημειώστε ότι δείχνει το * δίπλα στην μεταβλητή ήταν κάτι που έγινε πέρυσι.
Αποδεικνύεται ότι αυτό είναι παρόμοιο με αυτό που κάνουμε φέτος.
Δεν έχει σημασία, όπου μπορείτε να γράψετε το * όταν είστε δηλώνοντας το δείκτη.
Αλλά έχουμε γράψει το * δίπλα στον τύπο
γιατί αυτό καθιστά πολύ σαφές ότι είστε δηλώνοντας μια μεταβλητή δείκτη.
Μπορείτε να δείτε ότι δηλώνοντας τα 2 δείκτες μας δίνει 2 κουτιά.
Εδώ όταν θέτουμε x ίσο με malloc
τι είναι αυτό που λέει η αναίρεση μνήμη στο σωρό.
Αυτό το μικρό κουτί δεξιά εδώ, αυτός ο κύκλος, βρίσκεται στο σωρό.
Το Χ είναι οδηγούν σε αυτό.
Σημειώστε ότι y εξακολουθεί να μην δείχνει σε τίποτα.
Για να πάρετε μνήμη για να αποθηκεύσετε τον αριθμό σε 42 x
θα χρησιμοποιήσει ό, τι συμβολισμό;
[Φοιτητής] * x = 42.
Ακριβώς, * x = 42.
Αυτό σημαίνει ότι ακολουθούν το βέλος και να ρίξει 42 σε εκεί.
Εδώ όπου θέτουμε y και x έχουμε y επισημαίνοντας x.
Και πάλι, αυτό είναι ακριβώς όπως αυτό που είπε ο Kevin όπου θέτουμε y ίση με x.
Υ δεν δείχνει να x.
Μάλλον, αυτό είναι ό, τι δείχνει προς x δείχνει ως καλά.
>> Και τελικά σε αυτό το τελευταίο κουτί υπάρχουν 2 πιθανές πράγματα που θα μπορούσαμε να κάνουμε.
Το ένα είναι θα μπορούσαμε να πούμε * x = 13.
Το άλλο πράγμα είναι θα μπορούσαμε να πούμε-Άλεξ, ξέρεις τι θα μπορούσαμε να κάνουμε εδώ;
Θα μπορούσαμε να πούμε * x = 13 ή-
[Φοιτητικό] Θα μπορούσαμε να πούμε οτιδήποτε int.
[Nate H] Εάν αυτό αναφέρεται ως μια μεταβλητή int θα μπορούσαμε να το κάνουμε αυτό.
Θα μπορούσαμε να πούμε επίσης * y = 13 επειδή είναι και οι δύο δείχνουν στο ίδιο μέρος,
έτσι θα μπορούσαμε να χρησιμοποιήσουμε είτε μεταβλητή για να φτάσει εκεί.
Ναι. >> [Φοιτητικό] Τι θα μοιάζουν αν απλά λέμε int x είναι 13;
Αυτό θα πρέπει να κηρύσσει μια νέα μεταβλητή με όνομα x, η οποία δεν θα μπορούσε να λειτουργήσει.
Θα είχαμε μια σύγκρουση, διότι δηλώσαμε x να είναι ένας δείκτης εδώ.
[Φοιτητικό] Αν είχαμε ακριβώς αυτή τη δήλωση από μόνη της τι θα μοιάζει με την άποψη του κύκλου;
Αν είχαμε x = 13 τότε θα είχαμε ένα κουτί, και αντί να έχουν ένα βέλος
βγαίνει από το κουτί που θα το συντάξει, όπως ακριβώς ένα 13.
[Φοιτητικό] Στο πλαίσιο. Εντάξει.
>> Σας ευχαριστώ για την προσοχή, και καλή τύχη στις Quiz 0.
[CS50.TV]