1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Walkthrough - Σετ Πρόβλημα 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Πανεπιστήμιο του Χάρβαρντ] 3 00:00:05,170 --> 00:00:07,490 [Αυτό είναι CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Εντάξει. Γεια σας, όλοι, και καλωσορίζουμε στο Walkthrough 2. 5 00:00:10,750 --> 00:00:14,330 Κατ 'αρχάς, θέλω να σας συγχαρώ για το τελείωμα των PSET 1. 6 00:00:14,330 --> 00:00:18,140 Ξέρω ότι θα μπορούσε να ήταν λίγο δύσκολο για μερικούς από εσάς, 7 00:00:18,140 --> 00:00:20,460 θα μπορούσε να είναι το πρώτο πρόγραμμα στον υπολογιστή σας που γράψατε, 8 00:00:20,460 --> 00:00:24,500 αλλά απλά να θυμάστε ότι στο τέλος του αυτό, όταν κοιτάξουμε πίσω στο τέλος του εξαμήνου, 9 00:00:24,500 --> 00:00:29,820 θα δούμε PSET 1 και θα πείτε, "Γεια σου, θα μπορούσα να έχω κάνει ότι σε 5 λεπτά." 10 00:00:29,820 --> 00:00:35,700 Έτσι γνωρίζετε και εμπιστεύεστε ότι στο τέλος αυτό θα βρείτε σίγουρα PSET 1 αρκετά απλή. 11 00:00:35,700 --> 00:00:40,640 Αλλά για τώρα είναι ένα τεράστιο επίτευγμα, συγχαρητήρια και για να πάρει γίνει. 12 00:00:40,640 --> 00:00:44,010 Τώρα, επίσης, μια γρήγορη σημείωση πριν φτάσουμε στο κρέας του πέρασμα. 13 00:00:44,010 --> 00:00:48,340 Θέλω μόνο να κάνω μια γρήγορη σημείωση ότι μερικές φορές δεν θα έχουν αρκετό χρόνο 14 00:00:48,340 --> 00:00:52,500 κατά τη διάρκεια των walkthroughs να περάσει κάθε τρόπο για να γίνει το σύνολο πρόβλημα 15 00:00:52,500 --> 00:00:56,140 και όχι απλά ίσως επικεντρωθεί σε 1 ή 2 είδος των εφαρμογών, 16 00:00:56,140 --> 00:00:57,750 τρόπους με τους οποίους θα μπορούσατε να το κάνετε αυτό. 17 00:00:57,750 --> 00:01:01,970 Αλλά αυτό δεν σημαίνει ότι απαγορεύεται να το κάνουν με έναν άλλο τρόπο. 18 00:01:01,970 --> 00:01:05,980 Υπάρχουν συχνά, όπως με την επιστήμη των υπολογιστών, πολλοί τρόποι για να κάνει τα πράγματα, 19 00:01:05,980 --> 00:01:12,190 και έτσι σίγουρα διστάσετε να χρησιμοποιήσετε ένα διαφορετικό είδος της λύσης από ό, τι μπορεί να παρουσιάζονται. 20 00:01:12,190 --> 00:01:14,520 [PSET 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. Ένα τμήμα των ερωτήσεων - 1. Καίσαρα - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Εντάξει. Έτσι, το πρόβλημα σετ 2: Crypto είναι ένα διασκεδαστικό ένα. 23 00:01:20,650 --> 00:01:24,500 Και πάλι, με κάθε PSET θα ξεκινήσει με ένα τμήμα των ερωτήσεων 24 00:01:24,500 --> 00:01:29,600 που πρόκειται να διεξαχθεί στις ενότητες σας με τους συναδέλφους ανατεθεί διδασκαλία σας. 25 00:01:29,600 --> 00:01:31,670 Εμείς δεν πρόκειται να περάσουν από αυτά πάνω από το πέρασμα, 26 00:01:31,670 --> 00:01:35,100 αλλά σίγουρα θα σας βοηθήσει να ολοκληρώσει το PSET. 27 00:01:35,100 --> 00:01:38,100 Έτσι, το πρώτο μέρος του συνόλου πρόβλημα είναι Καίσαρα. 28 00:01:38,100 --> 00:01:43,470 Και έτσι σε Καίσαρα κάποιος θα σας περάσει ένα κλειδί με έναν ακέραιο αριθμό, 29 00:01:43,470 --> 00:01:48,420 και θα κρυπτογραφήσει μια συμβολοσειρά κειμένου που σας παρέχουμε 30 00:01:48,420 --> 00:01:50,670 και να τους δώσει πίσω ένα κρυπτογραφημένο πράγμα. 31 00:01:50,670 --> 00:01:56,050 Αν κάποιος παρακολουθούσε Μια ιστορία των Χριστουγέννων, υπάρχει ένα παράδειγμα του ότι υπάρχουν. 32 00:01:56,050 --> 00:01:59,090 Στη συνέχεια, το δεύτερο μέρος της σειράς πρόβλημα είναι Vigenere, 33 00:01:59,090 --> 00:02:01,790 η οποία είναι μια πιο προηγμένη τεχνική κρυπτογράφησης. 34 00:02:01,790 --> 00:02:05,640 Και έτσι θα πάμε για την κρυπτογράφηση ένα κομμάτι του κειμένου, 35 00:02:05,640 --> 00:02:09,600 εκτός αντί με ένα μόνο ακέραιο, είμαστε πραγματικά πρόκειται να κωδικοποιήσει 36 00:02:09,600 --> 00:02:13,340 με μια λέξη-κλειδί που ο χρήστης θα μας προσφέρει. 37 00:02:16,270 --> 00:02:22,090 Εντάξει, έτσι το πρώτο εργαλείο στην εργαλειοθήκη σήμερα είναι πραγματικά πρόκειται να την ενημέρωση της συσκευής. 38 00:02:22,090 --> 00:02:26,430 Στον πίνακα συζήτησης θα δούμε τα πράγματα όπως, "Γιατί δεν το έργο αυτό;" 39 00:02:26,430 --> 00:02:28,110 "Γιατί δεν Υποβολή εργασίας 50;" 40 00:02:28,110 --> 00:02:31,830 και συχνά η λύση είναι στην πραγματικότητα απλά να ενημερώσετε τη συσκευή σας. 41 00:02:31,830 --> 00:02:36,730 Και έτσι αν απλά τρέχει σε ένα παράθυρο τερματικού sudo συσκευή σας yum-y - 42 00:02:36,730 --> 00:02:40,040 αυτό είναι μια σημαία λέγοντας ναι, να ενημερώσετε τα πάντα - ενημέρωση, 43 00:02:40,040 --> 00:02:42,280 τότε η συσκευή σας θα ενημερωθεί, εάν είναι ανάγκη. 44 00:02:42,280 --> 00:02:46,960 Και δεν βλάπτει, αν είστε ήδη στην πιο πρόσφατη έκδοση της συσκευής. 45 00:02:46,960 --> 00:02:51,280 Στη συνέχεια, θα σας πω μόνο δεν νέες ενημερώσεις διαθέσιμες και μπορείτε να συνεχίσετε να εργάζεστε μαζί. 46 00:02:51,280 --> 00:02:55,800 Αλλά αυτό είναι καλό να εκτελέσει ακόμη και κάθε φορά που ανοίγετε τη συσκευή 47 00:02:55,800 --> 00:02:57,140 γιατί είμαστε ακόμα πολύ - 48 00:02:57,140 --> 00:03:00,320 Μερικές φορές, αν έρθουμε σε ένα bug - τον καθορισμό αυτό στη συσκευή. 49 00:03:00,320 --> 00:03:03,180 Έτσι, βεβαιωθείτε ότι έχετε την πιο πρόσφατη έκδοση της συσκευής 50 00:03:03,180 --> 00:03:07,710 και τρέξτε ότι υπάρχει ενημέρωση. 51 00:03:07,710 --> 00:03:14,360 Εντάξει. Έτσι, δεδομένου ότι έχουμε να κάνουμε με τα γράμματα και την αλλαγή, κρυπτογράφηση πράγματα, 52 00:03:14,360 --> 00:03:20,410 θα πάμε να θέλουν πραγματικά να γίνουν οι καλύτεροι φίλοι με ASCII διάγραμμα μας. 53 00:03:20,410 --> 00:03:24,350 Υπάρχουν πολλά σε απευθείας σύνδεση αυτά, αν βρείτε. Ίσως ακόμη και να φτιάξετε το δικό σας. 54 00:03:24,350 --> 00:03:29,950 Βασικά, με κάθε γράμμα και κάθε αριθμό και κάθε χαρακτήρα 55 00:03:29,950 --> 00:03:32,210 υπάρχει ένας αριθμός που σχετίζεται με αυτά, 56 00:03:32,210 --> 00:03:38,670 και γι 'αυτό είναι καλό να δούμε ASCII τιμές τους παράλληλα με την πραγματική επιστολή. 57 00:03:38,670 --> 00:03:42,310 Αυτό θα σας βοηθήσει σίγουρα στο σύνολο του προβλήματος. 58 00:03:42,310 --> 00:03:45,750 Ένα πράγμα που με βοήθησε πραγματικά σε αυτό το σύνολο το πρόβλημα ήταν να εκτυπώσετε πραγματικά έξω, 59 00:03:45,750 --> 00:03:48,380 και καθώς πήγαινα κατευθείαν, θα ήθελα να επιστήσω την πραγματικότητα σε αυτό, 60 00:03:48,380 --> 00:03:51,150 γράφουν, "Αν αυτό πρέπει να πάει εκεί, τότε ..." 61 00:03:51,150 --> 00:03:55,270 Είδος αντλήσει από αυτό και το σήμα επάνω, γίνει οι καλύτεροι φίλοι με ASCII τραπέζι σας. 62 00:03:57,240 --> 00:04:00,750 Στη συνέχεια, έχουμε μερικά άλλα εργαλεία στη διάθεσή μας. 63 00:04:00,750 --> 00:04:03,750 Αυτή τη φορά αντί να προωθηθούν πραγματικά το χρήστη για όλες της εισόδου τους 64 00:04:03,750 --> 00:04:05,230 θα πάμε να κάνουμε ένα συνδυασμό. 65 00:04:05,230 --> 00:04:06,880 Εμείς πάμε για να τους προτρέψει για κάποια είσοδο, 66 00:04:06,880 --> 00:04:11,350 αλλά είμαστε επίσης πρόκειται να χρησιμοποιήσετε μόνο τα επιχειρήματα της γραμμής εντολών. 67 00:04:11,350 --> 00:04:15,600 Έτσι, όταν τρέξουμε το πρόγραμμά τους, συνήθως λέτε. / Γειά σου, για παράδειγμα, 68 00:04:15,600 --> 00:04:17,310 αν το πρόγραμμά σας ήταν hello.c. 69 00:04:17,310 --> 00:04:22,500 Αλλά αυτή τη φορά, αντί να λέμε απλώς ότι, μπορούν να βάλουν λόγια, τα επιχειρήματα των υστέρων. 70 00:04:22,500 --> 00:04:27,210 Και έτσι θα πάμε να χρησιμοποιήσετε ό, τι περνούν σε μας ως συμβολή τους, καθώς και, 71 00:04:27,210 --> 00:04:31,720 έτσι κινείται πέρα ​​από την απλή προτροπή για ακέραιο, αλλά και με τα επιχειρήματα της γραμμής εντολών. 72 00:04:31,720 --> 00:04:36,590 Και μετά θα πάμε σε πίνακες και συμβολοσειρές, οι οποίες θα πρέπει να χρησιμοποιούν πολύ επίσης. 73 00:04:41,460 --> 00:04:44,810 Εδώ είναι μόνο ένα παράδειγμα από 1 μίνι ASCII διάγραμμα. 74 00:04:44,810 --> 00:04:48,460 Όπως είπα, κάθε γράμμα αντιστοιχεί σε έναν αριθμό, 75 00:04:48,460 --> 00:04:52,510 και να εξοικειωθείτε έτσι με αυτό. Θα έρθει σε πρακτικό. 76 00:04:52,510 --> 00:04:55,610 Και αργότερα, όταν θα αρχίσει να κάνει κάποια ASCIIMath που ασχολούνται με τους αριθμούς - 77 00:04:55,610 --> 00:05:00,110 προσθέτοντας, αφαιρώντας τους - τότε σίγουρα καλό να αναφερθώ σε αυτό το διάγραμμα. 78 00:05:02,860 --> 00:05:06,920 Τόσο εδώ είναι ένα παράδειγμα κρυπτογράφησης του Καίσαρα - κάτι που μπορεί να έχουν παίξει με. 79 00:05:06,920 --> 00:05:11,190 Είναι απλά ένας τροχός. Ουσιαστικά, υπάρχει ένα εξωτερικό αλφάβητο και έπειτα υπάρχει ένα εσωτερικό αλφάβητο. 80 00:05:11,190 --> 00:05:15,290 Έτσι, είναι σωστό εδώ ένα παράδειγμα της κρυπτογράφησης του Καίσαρα, αλλά με ένα κλειδί από το 0. 81 00:05:15,290 --> 00:05:21,540 Ουσιαστικά, το Α είναι ευθυγραμμισμένη με τα Α, Β είναι ευθυγραμμισμένο με Β, σε όλη τη διαδρομή μέχρι το Ζ. 82 00:05:21,540 --> 00:05:26,590 Στη συνέχεια, όμως να πούμε ότι ήθελε ένα κλειδί των 3, για παράδειγμα. 83 00:05:26,590 --> 00:05:33,280 Στη συνέχεια θα περιστρέφεται το εσωτερικό τροχό, έτσι ώστε Ένα ευθυγραμμίζεται πλέον με D, κλπ. 84 00:05:33,280 --> 00:05:35,250 Και έτσι αυτό είναι ουσιαστικά αυτό που πάμε να κάνουμε. 85 00:05:35,250 --> 00:05:38,340 Δεν έχουμε έναν τροχό, αλλά τι θα πάμε να κάνουμε είναι να κάνει το πρόγραμμά μας 86 00:05:38,340 --> 00:05:44,490 το είδος της βάρδιας, το αλφάβητο μαζί μας ένα ορισμένο ποσό των αριθμών. 87 00:05:44,490 --> 00:05:48,650 Έτσι, όπως είπα και πριν, θα πάμε να ασχολούνται με τα επιχειρήματα της γραμμής εντολών 88 00:05:48,650 --> 00:05:50,390 καθώς και να πάρει έναν ακέραιο. 89 00:05:50,390 --> 00:05:55,050 Έτσι, ο τρόπος που ένας χρήστης θα τρέξει το πρόγραμμά σας Καίσαρας είναι λέγοντας. / Caesar 90 00:05:55,050 --> 00:05:58,090 και μετά εισάγοντας έναν αριθμό μετά από αυτό. 91 00:05:58,090 --> 00:06:01,130 Και ο αριθμός αυτός αντιπροσωπεύει το κλειδί, η μετατόπιση, 92 00:06:01,130 --> 00:06:06,740 πόσες φορές θα πάμε να περιστρέφεται το εσωτερικό τροχό του Καίσαρα κρυπτογράφησης σας. 93 00:06:06,740 --> 00:06:08,390 Και έτσι θα δείτε εδώ ένα παράδειγμα. 94 00:06:08,390 --> 00:06:14,550 Αν μπήκαμε από τα γράμματα Α έως L cipher Caesar σε μας, 95 00:06:14,550 --> 00:06:19,520 τότε θα είσοδος D μέσω O γιατί αυτό είναι κάθε επιστολή μετατοπίζεται πάνω από 3 φορές, 96 00:06:19,520 --> 00:06:22,080 ακριβώς όπως το παράδειγμα του τροχού που σας έδειξα. 97 00:06:22,080 --> 00:06:25,300 Έτσι λοιπόν, αν έχετε εισάγει, για παράδειγμα, αυτό είναι CS50! 98 00:06:25,300 --> 00:06:27,960 τότε θα κινηθεί επίσης όλα τα γράμματα. 99 00:06:27,960 --> 00:06:31,040 Και αυτό είναι ένα σημαντικό πράγμα και στις δύο Καίσαρα και Vigenere 100 00:06:31,040 --> 00:06:34,890 είναι ότι θα πάμε για να υπερπηδήσει τα μη-γράμματα. 101 00:06:34,890 --> 00:06:39,160 Έτσι, τυχόν κενά, χαρακτήρες, κλπ, τους αριθμούς, θα πάμε να τους κρατήσει ο ίδιος. 102 00:06:39,160 --> 00:06:42,920 Είμαστε μόνο πρόκειται να αλλάξει τα γράμματα σε αυτή την περίπτωση. 103 00:06:42,920 --> 00:06:45,870 Έτσι, όπως βλέπετε στο τιμόνι, έχουμε μόνο τα γράμματα στη διάθεσή μας, 104 00:06:45,870 --> 00:06:50,150 έτσι το μόνο που θέλουν να μετατοπίσουν τα γράμματα και την κρυπτογράφηση των γραμμάτων. 105 00:06:51,370 --> 00:06:56,720 Έτσι, το πρώτο πράγμα που πρέπει να κάνετε, είδε ότι η χρήση του Καίσαρα για το πρόβλημα set 2 106 00:06:56,720 --> 00:07:05,280 είναι να τρέξει Καίσαρα και στη συνέχεια να εισαγάγετε έναν αριθμό, όταν το τρέξετε στο τερματικό. 107 00:07:05,280 --> 00:07:10,940 Έτσι, αυτό που πρέπει να κάνουμε είναι να πάρει με κάποιον τρόπο αυτό το κλειδί και πρόσβαση σε αυτό. 108 00:07:10,940 --> 00:07:14,730 Και έτσι θέλουμε να δούμε κάποιο τρόπο πρόκειται να είναι το δεύτερο όρισμα της γραμμής εντολών. 109 00:07:14,730 --> 00:07:20,950 Η πρώτη θα είναι. / Καίσαρα, και η επόμενη θα είναι το κλειδί αριθμό. 110 00:07:22,190 --> 00:07:29,200 Έτσι, πριν είχαμε int main (void) για την έναρξη προγραμμάτων C μας. 111 00:07:29,200 --> 00:07:31,790 Εμείς πάμε για να φλούδα πίσω ένα στρώμα λίγο 112 00:07:31,790 --> 00:07:34,720 και πραγματικά βλέπουμε ότι αντί να περάσει σε κενό με το κύριο έργο μας 113 00:07:34,720 --> 00:07:37,920 είμαστε πραγματικά ασχολούνται με 2 παραμέτρους. 114 00:07:37,920 --> 00:07:44,070 Έχουμε μια int argc το όνομα και στη συνέχεια μια σειρά από χορδές που ονομάζεται argv. 115 00:07:44,070 --> 00:07:46,030 Έτσι argc είναι ένας ακέραιος, 116 00:07:46,030 --> 00:07:49,640 και αντιπροσωπεύει τον αριθμό των arguments που περνιούνται στο πρόγραμμα για σας. 117 00:07:49,640 --> 00:07:53,590 Και τότε argv είναι στην πραγματικότητα η λίστα των πέρασε τα επιχειρήματα. 118 00:07:53,590 --> 00:08:00,820 Όλα τα επιχειρήματα είναι χορδές, και έτσι argv αντιπροσωπεύει μια σειρά, μια λίστα, των χορδών. 119 00:08:01,830 --> 00:08:03,990 Ας μιλήσουμε για συστοιχίες λίγο. 120 00:08:03,990 --> 00:08:05,940 Οι πίνακες είναι ουσιαστικά μια νέα δομή δεδομένων. 121 00:08:05,940 --> 00:08:09,660 Έχουμε ints, έχουμε διπλασιάζεται, έχουμε χορδές, και τώρα έχουμε συστοιχίες. 122 00:08:09,660 --> 00:08:13,820 Συστοιχίες είναι δομές δεδομένων που μπορεί να κρατήσει πολλαπλές τιμές του ίδιου τύπου, 123 00:08:13,820 --> 00:08:18,320 τόσο ουσιαστικά, μια λίστα με ό, τι είδος θέλετε. 124 00:08:18,320 --> 00:08:24,400 Ουσιαστικά, αν θέλετε μια λίστα ακεραίων όλα σε 1 μεταβλητή, 125 00:08:24,400 --> 00:08:29,090 τότε θα δημιουργήσει μια νέα μεταβλητή που ήταν σειρά τύπου int. 126 00:08:29,090 --> 00:08:34,450 Έτσι συστοιχίες είναι μηδενικό δείκτη, που σημαίνει ότι το πρώτο στοιχείο του πίνακα είναι στο δείκτη 0. 127 00:08:34,450 --> 00:08:41,799 Εάν η συστοιχία είναι μήκους 4, όπως σε αυτό το παράδειγμα, τότε το τελευταίο στοιχείο σας θα είναι στον δείκτη 3, 128 00:08:41,799 --> 00:08:44,810 η οποία είναι 4 - 1. 129 00:08:45,940 --> 00:08:48,420 Έτσι για να δημιουργήσει σειρά, θα κάνει κάτι τέτοιο. 130 00:08:48,420 --> 00:08:51,440 Ας υποθέσουμε ότι έχετε ήθελε μια διπλή σειρά. 131 00:08:51,440 --> 00:08:56,520 Αυτό ισχύει και για οποιοδήποτε τύπο δεδομένων τύπου, όμως. 132 00:08:56,520 --> 00:09:00,210 Έτσι, ας πούμε ότι θέλετε μια διπλή σειρά. Ας πούμε ότι θέλετε να το ονομάσουμε γραμματοκιβώτιο. 133 00:09:00,210 --> 00:09:04,760 Ακριβώς όπως θα προετοιμάσει οποιοδήποτε άλλο διπλό, 134 00:09:04,760 --> 00:09:09,760 θα σας πω διπλό και στη συνέχεια το όνομα, αλλά αυτή τη φορά βάλαμε τις αγκύλες, 135 00:09:09,760 --> 00:09:13,570 και στη συνέχεια ο αριθμός θα υπάρχει το μήκος της συστοιχίας. 136 00:09:13,570 --> 00:09:16,840 Σημειώστε ότι σε πίνακες που δεν μπορεί να αλλάξει ποτέ το μήκος, 137 00:09:16,840 --> 00:09:21,230 ώστε να έχετε πάντα να ορίσει και να επιλέξετε πόσα τετράγωνα, 138 00:09:21,230 --> 00:09:25,440 πόσες τιμές σειρά σας πρόκειται να κρατήσει. 139 00:09:25,440 --> 00:09:31,820 Έτσι για να ορίσετε διαφορετικές τιμές σε σειρά σας, εσείς πρόκειται να χρησιμοποιήσετε αυτό το ακόλουθη σύνταξη, 140 00:09:31,820 --> 00:09:33,200 όπως βλέπετε στη διαφάνεια. 141 00:09:33,200 --> 00:09:37,620 Γραμματοκιβώτιο 0 Μπορείτε να έχουν δείκτη θα οριστεί στο 1,2, 142 00:09:37,620 --> 00:09:42,180 γραμματοκιβώτιο 1 σετ δείκτη στο 2,4, κλπ. 143 00:09:42,180 --> 00:09:47,910 Έτσι τώρα που έχουμε αξιολόγηση συστοιχίες λίγο, ας πάμε πίσω στο argc και argv. 144 00:09:47,910 --> 00:09:52,220 Γνωρίζουμε ότι argv είναι τώρα μια σειρά από χορδές. 145 00:09:52,220 --> 00:09:55,080 Έτσι, όταν ένας χρήστης περνάει - λένε ότι τρέχετε ένα πρόγραμμα - 146 00:09:55,080 --> 00:09:58,740 λένε. / γεια David Malan, 147 00:09:58,740 --> 00:10:05,160 τι το πρόγραμμα θα κάνουμε για εσάς είναι ήδη πραγματικότητα καταλήξει σε ό, τι argc και argv είναι. 148 00:10:05,160 --> 00:10:07,620 Έτσι, δεν χρειάζεται να ανησυχείτε γι 'αυτό. 149 00:10:07,620 --> 00:10:14,370 Argc σε αυτή την περίπτωση θα είναι 3, επειδή βλέπει 3 ξεχωριστές λέξεις χωρισμένες με κενά. 150 00:10:14,370 --> 00:10:18,850 Και έτσι, τότε η σειρά σε αυτό το παράδειγμα, ο πρώτος δείκτης θα ήταν. / Γεια σου, 151 00:10:18,850 --> 00:10:21,770 το επόμενο David, η επόμενη Malan. 152 00:10:21,770 --> 00:10:25,640 Υπάρχει κάποιος που να δείτε αμέσως ποια είναι η σχέση μεταξύ argv, 153 00:10:25,640 --> 00:10:28,990  η σειρά, και argc είναι; 154 00:10:32,820 --> 00:10:38,090 Ναι. Θα μπει σε ότι σε ένα παράδειγμα σε args.c. 155 00:10:38,090 --> 00:10:42,880 Ας δούμε αν μπορούμε να επωφεληθούν από τη σχέση μεταξύ του 2. 156 00:10:42,880 --> 00:10:46,550 Εδώ μπορείτε να βρείτε ότι στη συσκευή η προεπιλεγμένη εφαρμογή 157 00:10:46,550 --> 00:10:49,450 για να ανοίξει. αρχεία c είναι μερικές φορές Emacs. 158 00:10:49,450 --> 00:10:54,660 Αλλά θέλουμε να ασχοληθεί με το gedit, έτσι ώστε ό, τι μπορείτε να κάνετε είναι να μπορείτε να κάνετε δεξί κλικ στο αρχείο C σας, 159 00:10:54,660 --> 00:11:04,580 πηγαίνετε στο Ιδιότητες, Άνοιγμα με, και στη συνέχεια επιλέξτε το gedit, Ορισμός ως προεπιλογή, 160 00:11:04,580 --> 00:11:13,020 και τώρα το πρόγραμμά σας θα πρέπει να ανοίξει το gedit αντί του Emacs. 161 00:11:14,710 --> 00:11:16,290 Τέλεια. 162 00:11:17,120 --> 00:11:25,520 Έτσι, εδώ έχω ένα πρόγραμμα που θέλετε να εκτυπώσετε από κάθε όρισμα της γραμμής εντολών. 163 00:11:25,520 --> 00:11:32,050 Έτσι, ανεξάρτητα από το χρήστη εισόδους, θέλω να επιστρέψουν κατ 'ουσίαν την επιστροφή τους σε μια νέα γραμμή. 164 00:11:32,050 --> 00:11:36,710 Έτσι τι είναι μια δομή που μπορούμε να χρησιμοποιήσουμε για να επαναλάβει κάτι πάνω - 165 00:11:36,710 --> 00:11:40,380 κάτι που ίσως χρησιμοποιηθούν σε PSET 1 σας; 166 00:11:40,380 --> 00:11:45,840 Αν θέλετε να περάσει μέσα από ένα συγκεκριμένο αριθμό από τα πράγματα; >> [Φοιτητής] Για την μέθοδο loop. 167 00:11:45,840 --> 00:11:48,910 Για βρόχο. Ακριβώς. Ας αρχίσουμε με το βρόχο for. 168 00:11:48,910 --> 00:11:56,900 Έχουμε για int i = 0. Ας ξεκινήσουμε με ένα τυποποιημένο αρχικοποίηση μεταβλητών. 169 00:11:56,900 --> 00:12:02,370 Πάω να αφήσει την κατάσταση για ένα σετ και στη συνέχεια να πω i + +, πρόκειται να κάνει τα πράγματα εκεί. 170 00:12:02,370 --> 00:12:04,090 Εντάξει. 171 00:12:04,090 --> 00:12:11,590 Έτσι, σκέφτεται πίσω στο argv, εάν argv είναι η λίστα των επιχειρημάτων περάσει μέσα στο πρόγραμμα 172 00:12:11,590 --> 00:12:15,380 και argc είναι ο αριθμός των επιχειρημάτων στο πλαίσιο του προγράμματος, 173 00:12:15,380 --> 00:12:21,280 τότε αυτό σημαίνει ότι argc είναι ουσιαστικά το μήκος του argv, δεξιά, 174 00:12:21,280 --> 00:12:28,970 επειδή θα υπάρξουν πολλά ως επιχειρήματα με την αξία του argc. 175 00:12:28,970 --> 00:12:35,910 Έτσι, αν θέλουμε να επαναλάβει σε κάθε στοιχείο στο argv, 176 00:12:35,910 --> 00:12:43,290 θα πάμε να θέλουν να έχουν πρόσβαση κάθε χρόνο τη μεταβλητή argv μέσα στο συγκεκριμένο δείκτη. 177 00:12:43,290 --> 00:12:49,060 Που μπορεί να αναπαρασταθεί με αυτό, έτσι δεν είναι; 178 00:12:49,060 --> 00:12:53,430 Αυτή η μεταβλητή εδώ αντιπροσωπεύει τη συγκεκριμένη σειρά σε αυτή την περίπτωση 179 00:12:53,430 --> 00:12:57,030 επειδή είναι μια σειρά χορδών - η συγκεκριμένη σειρά σε αυτό το συγκεκριμένο δείκτη. 180 00:12:57,030 --> 00:13:00,690 Αυτό που θέλουμε να κάνουμε, σε αυτή την περίπτωση θέλουμε να το εκτυπώσετε, οπότε ας πούμε printf. 181 00:13:00,690 --> 00:13:04,680 Και τώρα argv είναι ένα string, έτσι θέλουμε να θέσει αυτό το σύμβολο κράτησης θέσης εκεί. 182 00:13:04,680 --> 00:13:08,430 Θέλουμε μια νέα γραμμή μόνο για να φανεί καλό. 183 00:13:08,430 --> 00:13:12,530 Έτσι εδώ έχουμε ένα για βρόχο. Δεν έχουμε ακόμα την κατάσταση. 184 00:13:12,530 --> 00:13:20,020 Γι 'αυτό και ξεκινά από το 0, και στη συνέχεια, κάθε φορά που πρόκειται να εκτυπώσετε τη δοθείσα συμβολοσειρά 185 00:13:20,020 --> 00:13:22,980 σε αυτή τη συγκεκριμένη δείκτη στη συστοιχία. 186 00:13:22,980 --> 00:13:28,410 Έτσι, όταν θέλουμε να σταματήσει η εκτύπωση από τα στοιχεία του πίνακα; 187 00:13:28,410 --> 00:13:35,720 Όταν τελειώσετε, έτσι δεν είναι; Όταν έχουμε φτάσει στο τέλος του πίνακα. 188 00:13:35,720 --> 00:13:38,870 Έτσι, δεν θέλουμε να υπερβαίνει πέρα ​​από το μήκος της συστοιχίας, 189 00:13:38,870 --> 00:13:43,700 και ήδη γνωρίζουμε ότι δεν χρειάζεται πραγματικά ενεργά μάθετε ποιο είναι το μήκος του είναι argv 190 00:13:43,700 --> 00:13:47,520 επειδή αυτό είναι που μας δόθηκαν, και τι είναι αυτό; Argc. Ακριβώς. 191 00:13:47,520 --> 00:13:56,640 Έτσι, θέλουμε να κάνουμε αυτή την διαδικασία argc αριθμός των φορές. 192 00:13:56,640 --> 00:13:59,550 Δεν είμαι στο σωστό κατάλογο. 193 00:14:02,100 --> 00:14:03,490 Εντάξει. 194 00:14:03,490 --> 00:14:08,990 Τώρα ας κάνουμε args. Δεν υπάρχουν σφάλματα, η οποία είναι μεγάλη. 195 00:14:08,990 --> 00:14:11,430 Ας τρέξει μόνο args. 196 00:14:11,430 --> 00:14:15,130 Τι είναι αυτή η μετάβαση να επιστρέψει σε μας; Είναι ακριβώς πρόκειται να το εκτυπώσετε ξανά. 197 00:14:15,130 --> 00:14:18,320 "Θα εισαχθούν args στο πρόγραμμα? Πάω να το δώσει πίσω σε σας." 198 00:14:18,320 --> 00:14:23,170 Ας πούμε ότι θέλουμε να πούμε args τότε foo bar. 199 00:14:23,170 --> 00:14:26,570 Άρα, λοιπόν, δεν εκτυπώνει πίσω σε μας. Εντάξει; 200 00:14:26,570 --> 00:14:30,790 Υπάρχει λοιπόν ένα παράδειγμα για το πώς μπορείτε να χρησιμοποιήσετε το argc και argv 201 00:14:30,790 --> 00:14:33,460 γνωρίζοντας ότι argc αντιπροσωπεύει το μήκος του argv. 202 00:14:33,460 --> 00:14:42,750 Βεβαιωθείτε ότι δεν έχετε ποτέ με συστοιχίες πρόσβαση με ένα πέρα ​​από το μήκος του πίνακα 203 00:14:42,750 --> 00:14:45,140 C γιατί σίγουρα θα φωνάξει σε σας. 204 00:14:45,140 --> 00:14:47,560 Θα πάρετε κάτι που ονομάζεται ένα σφάλμα κατάτμησης, 205 00:14:47,560 --> 00:14:52,470 η οποία δεν είναι ποτέ διασκέδαση, λέγοντας ουσιαστικά προσπαθείτε να αποκτήσετε πρόσβαση σε κάτι 206 00:14:52,470 --> 00:14:55,000 , που δεν υπάρχει, δεν ανήκουν σε σας. 207 00:14:55,000 --> 00:14:59,430 Γι 'αυτό φροντίστε, και ειδικά με το μηδέν-ευρετηρίασης, δεν θέλουμε να - 208 00:14:59,430 --> 00:15:02,390 Όπως για παράδειγμα, αν έχουμε μια σειρά από 4 μήκους, 209 00:15:02,390 --> 00:15:07,240 ότι ο δείκτης σειρά 4 δεν υπάρχει, γιατί ξεκινούν από 0, με μηδενικό δείκτη. 210 00:15:07,240 --> 00:15:11,730 Θα γίνει δεύτερη φύση όπως ακριβώς και για βρόχους, όταν αρχίζουμε από το 0. 211 00:15:11,730 --> 00:15:13,610 Έτσι, απλά συνεχίστε να το έχουμε κατά νου. 212 00:15:13,610 --> 00:15:22,590 Δεν θέλετε να αποκτήσετε πρόσβαση ποτέ το δείκτη ενός πίνακα που είναι πέρα ​​από την προσιτότητά σας. 213 00:15:26,710 --> 00:15:32,560 Έτσι, μπορούμε να δούμε τώρα πώς μπορούμε να το είδος της πρόσβασης 214 00:15:32,560 --> 00:15:35,930 τα επιχειρήματα της γραμμής εντολών που περνούν μέσα 215 00:15:35,930 --> 00:15:41,330 Αλλά όπως είδατε το string, το argv είναι στην πραγματικότητα μια σειρά χορδών. 216 00:15:41,330 --> 00:15:45,740 Έτσι, στην πραγματικότητα δεν είναι ένας ακέραιος ακόμη, αλλά σε Καίσαρα θέλουμε να αντιμετωπίσουμε με ακέραιους αριθμούς. 217 00:15:45,740 --> 00:15:54,430 Ευτυχώς, υπάρχει μια λειτουργία που δημιουργήθηκε για μας που μπορεί να μετατρέψει πραγματικά ένα string σε ακέραιο. 218 00:15:54,430 --> 00:15:58,710 Επίσης, εδώ δεν έχουμε να κάνουμε με παρέμβαση του χρήστη, όπου είμαστε προτρέποντας τους 219 00:15:58,710 --> 00:16:03,740 για την είσοδο εδώ για το κλειδί, έτσι ώστε να μπορούμε πραγματικά δεν reprompt και λένε, 220 00:16:03,740 --> 00:16:07,840 "Αχ, να μου δώσει ένα άλλο ακέραιο, ας πούμε, αν δεν είναι έγκυρη." 221 00:16:07,840 --> 00:16:10,540 Αλλά εμείς δεν πρέπει ακόμα να βεβαιωθείτε για τη σωστή χρήση. 222 00:16:10,540 --> 00:16:13,520 Σε Καίσαρα που επιτρέπεται να περάσει σε 1 αριθμό, 223 00:16:13,520 --> 00:16:18,030 και έτσι πρέπει να τρέξει. / καίσαρα και τότε θα πρέπει να σας δώσει έναν αριθμό. 224 00:16:18,030 --> 00:16:23,660 Έτσι argc πρέπει να είναι ένα ορισμένο αριθμό. 225 00:16:23,660 --> 00:16:29,060 Τι αριθμό θα είναι ότι εάν πρέπει να σας περάσει το. / Καίσαρα και στη συνέχεια, ένα κλειδί; 226 00:16:29,060 --> 00:16:32,920 Τι είναι το argc; >> [Φοιτητής] 2. Δύο >>. Ακριβώς. 227 00:16:32,920 --> 00:16:35,490 Έτσι, θέλετε να βεβαιωθείτε ότι argc είναι 2. 228 00:16:35,490 --> 00:16:39,620 Διαφορετικά, μπορείτε ουσιαστικά να αρνηθεί να τρέξει το πρόγραμμα. 229 00:16:39,620 --> 00:16:43,040 Το κύριο είναι μια λειτουργία που λέει int main, 230 00:16:43,040 --> 00:16:47,360 έτσι τότε είμαστε πάντα σε καλή 0 Επιστροφή πρακτική στο τέλος ενός επιτυχημένου προγράμματος. 231 00:16:47,360 --> 00:16:50,840 Έτσι, αν, για παράδειγμα, σας δίνουν 3 επιχειρήματα της γραμμής εντολών αντί για 2 232 00:16:50,840 --> 00:16:54,350 ή να σας δώσει 1, για παράδειγμα, τότε τι θα κάνουμε είναι θα θελήσετε να ελέγξετε για να 233 00:16:54,350 --> 00:16:59,900 και στη συνέχεια να επιστρέψετε 1 λένε, όχι, δεν μπορώ να προχωρήσουμε με αυτό το πρόγραμμα. 234 00:16:59,900 --> 00:17:03,190 [Φοιτητής] Εκεί δεν μπορεί να είναι ένας χώρος στο κείμενό σας. >> Με συγχωρείτε; 235 00:17:03,190 --> 00:17:06,780 [Φοιτητής] δεν μπορεί να υπάρξει ένας χώρος στο κείμενο που προσπαθείτε για την κρυπτογράφηση. 236 00:17:06,780 --> 00:17:08,480 Αχ! 237 00:17:08,480 --> 00:17:11,280 Όσον αφορά το κείμενο που προσπαθούμε για την κρυπτογράφηση, το οποίο προέρχεται πράγματι αργότερα 238 00:17:11,280 --> 00:17:13,970 όταν δίνουμε αυτό το κείμενο. 239 00:17:13,970 --> 00:17:18,260 Μέχρι τώρα είμαστε ακριβώς την αποδοχή ως επιχειρήματα εντολή ο πραγματικός αριθμός, 240 00:17:18,260 --> 00:17:21,579 η πραγματική αλλαγή για την κρυπτογράφηση του Καίσαρα. 241 00:17:21,579 --> 00:17:27,569 [Φοιτητής] Γιατί χρειάζεστε 2, σε αντίθεση με μόλις 1 argc; Υπάρχει σίγουρα 1 αριθμός. 242 00:17:27,569 --> 00:17:32,200 Δικαίωμα. Ο λόγος για τον οποίο χρειαζόμαστε 2 για argc αντί του 1 243 00:17:32,200 --> 00:17:36,260 οφείλεται στο γεγονός ότι όταν εκτελείτε ένα πρόγραμμα και να πω. / καίσαρα ή. / γεια σου, 244 00:17:36,260 --> 00:17:38,280 που μετράει πραγματικά ως όρισμα γραμμής εντολών. 245 00:17:38,280 --> 00:17:43,020 Έτσι, στη συνέχεια, η οποία λαμβάνει ήδη το 1 και έτσι τότε είμαστε εισαγωγή 1 επιπλέον. 246 00:17:45,030 --> 00:17:49,440 Έτσι είστε εισαγωγή στην πραγματικότητα μια σειρά στο επιχείρημα της γραμμής εντολών. 247 00:17:49,440 --> 00:17:52,730 Τι θέλετε να κάνετε, για Καίσαρα θέλουμε να αντιμετωπίσουμε με έναν ακέραιο αριθμό, 248 00:17:52,730 --> 00:17:57,180 ώστε να μπορείτε να χρησιμοποιήσετε αυτή τη λειτουργία atoi. 249 00:17:57,180 --> 00:18:02,850 Και βασικά, μπορείτε να το δώσετε σε μια σειρά και στη συνέχεια θα επιστρέψει πίσω έναν ακέραιο 250 00:18:02,850 --> 00:18:06,070 αν είναι δυνατόν να κάνει ότι string σε ακέραιο. 251 00:18:06,070 --> 00:18:10,960 Τώρα θυμηθείτε, όταν έχουμε να κάνουμε με printf ή GetString, τέτοια πράγματα, 252 00:18:10,960 --> 00:18:13,390 που περιλαμβάνουν τις βιβλιοθήκες που είναι ειδικά για εμάς. 253 00:18:13,390 --> 00:18:19,450 Έτσι, στην αρχή ξεκινάμε με ένα hash tag πρότυπο I / O,. H, κάτι τέτοιο. 254 00:18:19,450 --> 00:18:22,430 Λοιπόν, δεν είναι atoi σε μία από αυτές τις βιβλιοθήκες, 255 00:18:22,430 --> 00:18:26,600 οπότε αυτό που έχουμε να κάνουμε είναι να έχουμε να συμπεριληφθεί το δικαίωμα βιβλιοθήκη για αυτό. 256 00:18:26,600 --> 00:18:32,720 Έτσι, θυμάμαι πίσω στο Walkthrough 1, όπου συζήτησα το εγχειρίδιο λειτουργίας. 257 00:18:32,720 --> 00:18:37,110 Πληκτρολογείτε τον άνθρωπο στο τερματικό σας και στη συνέχεια ακολουθείται από το όνομα της συνάρτησης. 258 00:18:37,110 --> 00:18:39,720 Και έτσι που θα φέρει μια ολόκληρη λίστα από τη χρήση του, 259 00:18:39,720 --> 00:18:42,890 αλλά καθώς αυτό θα φέρει επάνω το οποίο βιβλιοθήκη που ανήκει. 260 00:18:42,890 --> 00:18:47,000 Γι 'αυτό θα αφήσω αυτό να μπορείτε να χρησιμοποιήσετε τη χειροκίνητη λειτουργία με atoi 261 00:18:47,000 --> 00:18:53,360 και να καταλάβω ποια βιβλιοθήκη θα πρέπει να περιλαμβάνει να είναι σε θέση να χρησιμοποιήσετε τη λειτουργία atoi. 262 00:18:54,450 --> 00:18:57,670 Έτσι, έχουμε το κλειδί και τώρα πρόκειται να πάρει τη μορφή απλού κειμένου, 263 00:18:57,670 --> 00:19:01,820 και έτσι που πραγματικά θα είναι είσοδο του χρήστη, όπου σας ζητηθεί. 264 00:19:01,820 --> 00:19:05,540 Ασχοληθήκαμε με GetInt και GetFloat, και έτσι στο ίδιο πνεύμα 265 00:19:05,540 --> 00:19:07,670 θα πάμε να ασχολούνται με GetString. 266 00:19:07,670 --> 00:19:12,440 Αλλά σε αυτή την περίπτωση δεν χρειάζεται να κάνετε καμία do ενώ παράλληλα βρόχους ή να ελέγξει. 267 00:19:12,440 --> 00:19:14,480 GetString σίγουρα θα μας δώσει μια σειρά, 268 00:19:14,480 --> 00:19:17,630 και θα πάμε για την κρυπτογράφηση ό, τι ο χρήστης μας δίνει. 269 00:19:17,630 --> 00:19:23,770 Έτσι, μπορείτε να υποθέσουμε ότι όλα αυτά τα εισαγόμενα χρήστη είναι σωστές χορδές. 270 00:19:23,770 --> 00:19:24,670 Μεγάλη. 271 00:19:24,670 --> 00:19:27,270 Έτσι, στη συνέχεια, από τη στιγμή που έχεις το κλειδί και αφού έχετε το κείμενο, 272 00:19:27,270 --> 00:19:31,660 τώρα τι έχει απομείνει είναι να έχετε την κρυπτογράφηση plaintext. 273 00:19:31,660 --> 00:19:36,530 Ακριβώς για να καλύψει γρήγορα πάνω από κορακίστικα, το απλό είναι αυτό που ο χρήστης που δίνει, 274 00:19:36,530 --> 00:19:41,030 και το κρυπτογράφημα είναι ό, τι να τους επιστρέψει. 275 00:19:42,450 --> 00:19:45,850 Έτσι, χορδές, να είναι σε θέση να περάσει μέσα από πραγματικά επιστολή με επιστολή 276 00:19:45,850 --> 00:19:48,550 γιατί πρέπει να στρέψουμε κάθε γράμμα, 277 00:19:48,550 --> 00:19:51,390 καταλαβαίνουμε ότι οι χορδές, αν το είδος του φλοιού πλάτη στο στρώμα, 278 00:19:51,390 --> 00:19:54,130 βλέπουμε ότι είναι πραγματικά μόνο μια λίστα των χαρακτήρων. 279 00:19:54,130 --> 00:19:55,930 Ένα έρχεται μετά το άλλο. 280 00:19:55,930 --> 00:20:01,690 Και έτσι μπορούμε να θεωρήσουμε ως χορδές συστοιχίες επειδή είναι πίνακες χαρακτήρων. 281 00:20:01,690 --> 00:20:05,640 Έτσι πούμε ότι έχετε μια σειρά κειμένου με το όνομα, 282 00:20:05,640 --> 00:20:09,400 και εντός της εν λόγω μεταβλητής κείμενο αποθηκεύεται Αυτό είναι CS50. 283 00:20:09,400 --> 00:20:15,680 Στη συνέχεια, το κείμενο στο δείκτη 0 θα είναι ένα κεφαλαίο Τ, ο δείκτης 1 θα είναι h, κλπ. 284 00:20:17,530 --> 00:20:23,970 Και στη συνέχεια, με συστοιχίες, στο argc παράδειγμα σε args.c, 285 00:20:23,970 --> 00:20:27,090 είδαμε ότι έπρεπε να επαναλάβει για μια σειρά 286 00:20:27,090 --> 00:20:32,440 και έτσι θα έπρεπε να επαναλάβει από i = 0 μέχρι το i είναι μικρότερο από το μήκος. 287 00:20:32,440 --> 00:20:35,560 Γι 'αυτό και πρέπει με κάποιο τρόπο υπολογίζει τι το μήκος της συμβολοσειράς μας είναι 288 00:20:35,560 --> 00:20:37,090 αν θα πάμε να επαναλάβει πάνω του. 289 00:20:37,090 --> 00:20:42,300 Ευτυχώς πάλι, υπάρχει μια λειτουργία εκεί για μας, αν και αργότερα το CS50 290 00:20:42,300 --> 00:20:45,860 σίγουρα θα είναι σε θέση να εφαρμόσουν και να φτιάξετε το δικό σας λειτουργία 291 00:20:45,860 --> 00:20:48,260 που μπορεί να υπολογίσει το μήκος μιας συμβολοσειράς. 292 00:20:48,260 --> 00:20:52,120 Αλλά για τώρα θα πάμε να χρησιμοποιήσετε το μήκος συμβολοσειράς, έτσι strlen. 293 00:20:52,120 --> 00:21:00,440 Περνάτε σε μια σειρά, και στη συνέχεια θα σας επιστρέψει έναν int που αντιπροσωπεύει το μήκος των χορδών σας. 294 00:21:00,440 --> 00:21:05,840 Ας δούμε ένα παράδειγμα για το πώς μπορεί να είμαστε σε θέση να επαναλάβει σε κάθε χαρακτήρα σε μια σειρά 295 00:21:05,840 --> 00:21:08,470 και να κάνει κάτι με αυτό. 296 00:21:08,470 --> 00:21:13,250 Αυτό που θέλουμε να κάνουμε είναι να επαναλάβει σε κάθε χαρακτήρα του string, 297 00:21:13,250 --> 00:21:19,150 και αυτό που θέλουμε να κάνουμε είναι να εκτυπώσετε ξανά κάθε χαρακτήρα 1 από 1 298 00:21:19,150 --> 00:21:22,060 εκτός προσθέσουμε κάτι δίπλα του. 299 00:21:22,060 --> 00:21:27,020 Ας αρχίσουμε με το βρόχο for. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Εμείς πάμε για να αφήσει χώρο για την κατάσταση. 301 00:21:32,700 --> 00:21:36,840 Θέλουμε να επαναλάβει μέχρι να φτάσουμε στο τέλος του string, έτσι δεν είναι; 302 00:21:36,840 --> 00:21:41,340 Έτσι, τότε ποια είναι η λειτουργία μας δίνει το μήκος του string; 303 00:21:41,340 --> 00:21:43,160 [Ακούγεται ανταπόκριση των φοιτητών] 304 00:21:43,160 --> 00:21:46,420 Αυτό είναι το μήκος του τα επιχειρήματα της γραμμής εντολών. 305 00:21:46,420 --> 00:21:50,650 Αλλά για μια σειρά που θέλετε να χρησιμοποιήσετε μια λειτουργία που μας δίνει το μήκος του string. 306 00:21:50,650 --> 00:21:53,090 Έτσι ώστε να είναι μήκους. 307 00:21:53,090 --> 00:21:57,130 Και έτσι τότε θα πρέπει να περάσει σε μια σειρά σε αυτό. 308 00:21:57,130 --> 00:21:59,760 Πρέπει να ξέρετε τι σειρά που χρειάζεται για να υπολογίσει το μήκος του. 309 00:21:59,760 --> 00:22:03,160 Έτσι λοιπόν σε αυτή την περίπτωση έχουμε να κάνουμε με string s. 310 00:22:04,790 --> 00:22:05,860 Μεγάλη. 311 00:22:05,860 --> 00:22:10,770 Και τότε τι θέλουμε να κάνουμε, ας printf. 312 00:22:10,770 --> 00:22:14,850 Τώρα, θέλουμε να ασχοληθεί με τους χαρακτήρες. Θέλουμε να εκτυπώσετε κάθε μεμονωμένο χαρακτήρα. 313 00:22:14,850 --> 00:22:22,150 Όταν θέλετε να εκτυπώσετε ένα πλωτήρα, θα πρέπει να χρησιμοποιήσετε το σύμβολο κράτησης θέσης, όπως f%. 314 00:22:22,150 --> 00:22:24,580 Με έναν int που θα χρησιμοποιήσει% d. 315 00:22:24,580 --> 00:22:30,890 Και έτσι ομοίως, με ένα χαρακτήρα που χρησιμοποιείτε γ% να πω ότι είμαι πρόκειται να εκτυπώσετε ένα χαρακτήρα 316 00:22:30,890 --> 00:22:34,570 που είναι αποθηκευμένα μέσα σε μια μεταβλητή. 317 00:22:34,570 --> 00:22:40,840 Έχουμε λοιπόν αυτό, και ας προσθέσουμε μια περίοδο και ένα χώρο για αυτό. 318 00:22:40,840 --> 00:22:45,430 Ποια είναι χαρακτήρας που χρησιμοποιείτε; 319 00:22:45,430 --> 00:22:49,780 Εμείς πάμε για να χρησιμοποιούν ό, τι χαρακτήρας είμαστε στο της σειράς. 320 00:22:49,780 --> 00:22:52,890 Έτσι λοιπόν θα πάμε να χρησιμοποιούν κάτι με κορδόνι, 321 00:22:52,890 --> 00:22:56,420 αλλά θέλουμε να την πρόσβαση στο συγκεκριμένο χαρακτήρα εκεί. 322 00:22:56,420 --> 00:23:02,740 Έτσι, αν μια σειρά είναι απλά ένας πίνακας, τότε πώς έχουμε πρόσβαση στα στοιχεία ενός πίνακα; 323 00:23:02,740 --> 00:23:06,480 Έχουμε αυτές τις αγκύλες, και στη συνέχεια βάζουμε το δείκτη εκεί. 324 00:23:06,480 --> 00:23:11,820 Έτσι έχουμε αγκύλες. Δείκτης μας σε αυτή την περίπτωση μπορούμε να χρησιμοποιήσουμε απλά i. Ακριβώς. 325 00:23:15,290 --> 00:23:22,370 Έτσι, εδώ λέμε θα πάμε να εκτυπώσετε ένα χαρακτήρα ακολουθούμενο από μια τελεία και ένα κενό, 326 00:23:22,370 --> 00:23:30,870 και ότι ο χαρακτήρας θα είναι το i-επιστολή σε s σειρά μας. 327 00:23:32,920 --> 00:23:39,330 Είμαι ακριβώς πρόκειται να σώσει αυτό. Εντάξει. 328 00:23:42,510 --> 00:23:46,840 Τώρα είμαι πρόκειται να τρέξει μήκους. 329 00:23:46,840 --> 00:23:53,440 Έτσι, είχαμε μια σειρά που ονομάζεται OMG, και τώρα είναι ακόμα πιο τόνισε. 330 00:23:53,440 --> 00:23:57,870 Επίσης, ας πούμε ότι πραγματικά θέλετε να πάρετε μια σειρά από τον χρήστη. 331 00:23:57,870 --> 00:23:59,580 Πώς να το κάνουμε αυτό; 332 00:23:59,580 --> 00:24:01,610 Πριν, πώς φτάσαμε σε int; 333 00:24:01,610 --> 00:24:08,040 Είπαμε GetInt, έτσι δεν είναι; Αλλά αυτό δεν είναι int, οπότε ας GetString. 334 00:24:11,780 --> 00:24:17,770 Ας κάνουμε μήκους. Εδώ δεν τίθεται μια συγκεκριμένη ερώτηση. 335 00:24:17,770 --> 00:24:19,940 Έτσι, δεν ξέρω. 336 00:24:19,940 --> 00:24:23,820 Πάω να βάλω το όνομά μου εδώ και έτσι τότε μπορώ να κάνω ένα από εκείνα τα πράγματα 337 00:24:23,820 --> 00:24:29,600 όπου μπορώ να ορίσω μια λέξη για κάθε επιστολή ή κάτι τέτοιο. Cool. 338 00:24:29,600 --> 00:24:31,900 Έτσι ώστε να είναι μήκους. 339 00:24:33,000 --> 00:24:34,640 Έτσι, είμαστε πίσω στον Καίσαρα. 340 00:24:34,640 --> 00:24:38,620 Έχουμε μερικά εργαλεία για το πώς θα επαναλάβει σε μια σειρά, 341 00:24:38,620 --> 00:24:41,250 πώς έχουμε πρόσβαση σε κάθε μεμονωμένο στοιχείο. 342 00:24:41,250 --> 00:24:44,720 Έτσι, τώρα μπορούμε να επιστρέψουμε στο πρόγραμμα. 343 00:24:44,720 --> 00:24:48,650 Όπως ανέφερα και πριν, στον πίνακα ASCII, ο καλύτερος φίλος σας, 344 00:24:48,650 --> 00:24:52,300 θα πάμε να δούμε τους αριθμούς που σχετίζονται με κάθε γράμμα. 345 00:24:52,300 --> 00:24:55,900 Έτσι, εδώ να πω plaintext μας είναι ότι είμαι ζαλισμένος! 346 00:24:55,900 --> 00:25:01,090 Στη συνέχεια, κάθε ένα από αυτούς τους χαρακτήρες θα έχει έναν αριθμό και τιμή ASCII που συνδέονται με αυτήν, 347 00:25:01,090 --> 00:25:04,710 ακόμη και η απόστροφος, ακόμη και ο χώρος, ακόμη και το θαυμαστικό, 348 00:25:04,710 --> 00:25:06,600 έτσι θα θελήσετε να κρατήσετε αυτό κατά νου. 349 00:25:06,600 --> 00:25:12,360 Έτσι λένε βασικά μας ότι ο χρήστης που περιλαμβάνονται στο όρισμα γραμμής εντολών τους είναι 6. 350 00:25:12,360 --> 00:25:17,770 Αυτό σημαίνει για το πρώτο γράμμα, το οποίο είναι Ι, το οποίο αντιπροσωπεύεται από 73, 351 00:25:17,770 --> 00:25:25,610 θέλετε να επιστρέψετε στην επιστολή τους ό, τι αντιπροσωπεύεται από την τιμή ASCII 73 + 6. 352 00:25:25,610 --> 00:25:29,020 Σε αυτή την περίπτωση αυτό θα ήταν 79. 353 00:25:30,840 --> 00:25:35,040 Τώρα θέλουμε να πάμε στον επόμενο χαρακτήρα. 354 00:25:35,040 --> 00:25:40,960 Έτσι, η επόμενη δείκτης 1 του plaintext θα είναι η απόστροφος. 355 00:25:40,960 --> 00:25:46,780 Αλλά να θυμάστε ότι το μόνο που θέλουν για την κρυπτογράφηση των γραμμάτων. 356 00:25:46,780 --> 00:25:50,040 Έτσι, θέλουμε να βεβαιωθείτε ότι η απόστροφος παραμένει στην πραγματικότητα το ίδιο, 357 00:25:50,040 --> 00:25:54,310 ότι δεν αλλάξουμε από 39 έως 45 είναι οτιδήποτε άλλο. 358 00:25:54,310 --> 00:25:57,150 Θέλουμε να το κρατήσει ως μια απόστροφο. 359 00:25:57,150 --> 00:26:00,780 Έτσι θέλουμε να θυμόμαστε μόνο για την κρυπτογράφηση των γραμμάτων 360 00:26:00,780 --> 00:26:04,560 γιατί θέλουμε όλα τα άλλα σύμβολα για να παραμείνει αμετάβλητο το πρόγραμμα μας. 361 00:26:04,560 --> 00:26:07,130 Ένα άλλο πράγμα που θέλουμε είναι να διατηρήσει την κεφαλαιοποίηση. 362 00:26:07,130 --> 00:26:10,250 Έτσι, όταν έχεις ένα κεφαλαίο γράμμα, θα πρέπει να παραμείνει ως ένα κεφαλαίο. 363 00:26:10,250 --> 00:26:12,830 Πεζά γράμματα πρέπει να μείνουν ως πεζά. 364 00:26:13,620 --> 00:26:19,480 Έτσι, μερικές χρήσιμες λειτουργίες για να είναι σε θέση να ασχοληθεί μόνο με κρυπτογράφηση γράμματα 365 00:26:19,480 --> 00:26:22,380 και να κρατήσει τη διατήρηση της κεφαλαιοποίησης των πραγμάτων 366 00:26:22,380 --> 00:26:25,130 είναι οι λειτουργίες islower isalpha, isupper,. 367 00:26:25,130 --> 00:26:29,270 Και έτσι αυτά είναι συναρτήσεις που επιστρέφουν μια τιμή Boolean. 368 00:26:29,270 --> 00:26:34,180 Βασικά, αληθής ή ψευδής. Είναι αυτό ένα κεφαλαίο; Είναι αυτό το αλφαριθμητικό; 369 00:26:34,180 --> 00:26:37,180 Είναι αυτό μια επιστολή, κατ 'ουσίαν. 370 00:26:37,180 --> 00:26:41,070 Έτσι, εδώ είναι 3 παραδείγματα για το πώς θα πρέπει να χρησιμοποιήσετε τη λειτουργία αυτή. 371 00:26:41,070 --> 00:26:47,060 Βασικά, μπορείτε να ελέγξετε αν η τιμή που επιστρέφεται σε εσάς με αυτή τη λειτουργία είναι αληθής ή ψευδής 372 00:26:47,060 --> 00:26:49,400 βασίζονται στην εν λόγω είσοδο. 373 00:26:49,400 --> 00:26:54,880 Είτε δεν encipher κάτι ή κρυπτογραφημένο ή να βεβαιωθείτε ότι είναι κεφαλαία, κλπ. 374 00:26:54,880 --> 00:27:01,080 [Φοιτητής] Μπορείτε να εξηγήσετε ακριβώς αυτά λίγο περισσότερο και πώς μπορείτε να χρησιμοποιήσετε; >> Ναι, σίγουρα. 375 00:27:01,080 --> 00:27:08,470 Έτσι, αν κοιτάξουμε πίσω, εδώ έχουμε ένα κεφάλαιο Ι, έτσι δεν είναι; 376 00:27:08,470 --> 00:27:14,550 Γι 'αυτό και ξέρω ότι πηγαίνει στο O γιατί είναι + 6 Ο. 377 00:27:14,550 --> 00:27:18,740 Αλλά θέλουμε να βεβαιωθείτε ότι το O πρόκειται να είναι ένα κεφάλαιο O. 378 00:27:18,740 --> 00:27:22,940 Έτσι, βασικά, αυτό είναι το είδος του πρόκειται να αλλάξετε την είσοδο μας. 379 00:27:22,940 --> 00:27:26,870 Έτσι, αν είναι κεφαλαία ή δεν θα το είδος του να αλλάξει τον τρόπο που ασχολούμαστε με αυτό. 380 00:27:26,870 --> 00:27:32,360 Έτσι λοιπόν, αν χρησιμοποιείτε τη λειτουργία isupper για το συγκεκριμένο δείκτη, 381 00:27:32,360 --> 00:27:36,480 έτσι isupper ("I"), που επιστρέφει για να μας αλήθεια, έτσι ξέρουμε ότι είναι ανώτερη. 382 00:27:36,480 --> 00:27:40,360 Έτσι, στη συνέχεια, με βάση ότι, αργότερα θα πάμε σε έναν τύπο 383 00:27:40,360 --> 00:27:42,750 ότι θα πρέπει να χρησιμοποιούν για να αλλάξει τα πράγματα σε Καίσαρα, 384 00:27:42,750 --> 00:27:46,560 έτσι τότε βασικά, υπάρχει μετάβαση να είναι ένα ελαφρώς διαφορετικό τύπο αν είναι κεφαλαία 385 00:27:46,560 --> 00:27:50,670 σε αντίθεση με πεζά γράμματα. Κάντε νόημα; 386 00:27:51,020 --> 00:27:52,760 Ναι. Μην ανησυχείτε. 387 00:27:54,900 --> 00:27:58,990 Μίλησα λίγο σχετικά με την προσθήκη 6, σε ένα γράμμα, το οποίο δεν κάνει αρκετά λογικό 388 00:27:58,990 --> 00:28:05,500 εκτός από την περίπτωση που το είδος των καταλάβουμε ότι αυτοί οι χαρακτήρες 389 00:28:05,500 --> 00:28:08,920 είναι το είδος του εναλλάξιμα με ακέραιους αριθμούς. 390 00:28:08,920 --> 00:28:11,250 Αυτό που κάνουμε εμείς είναι το είδος της χρήσης σιωπηρή χύτευσης. 391 00:28:11,250 --> 00:28:18,100 Θα πάμε σε χύτευση λίγο αργότερα για το πού παίρνετε μια τιμή και να το μετατρέψει σε ένα διαφορετικό είδος 392 00:28:18,100 --> 00:28:20,440 από ό, τι ήταν αρχικά. 393 00:28:20,440 --> 00:28:25,910 Αλλά με αυτό το PSET θα είμαστε σε θέση να το είδος των χαρακτήρων χρησιμοποιούν εναλλακτικά 394 00:28:25,910 --> 00:28:30,880 και τους που αντιστοιχούν ακέραιες τιμές. 395 00:28:30,880 --> 00:28:35,140 Έτσι, αν ενθυλακώσει απλά ένα χαρακτήρα με μόνο τα μονά εισαγωγικά, 396 00:28:35,140 --> 00:28:40,390 τότε θα είστε σε θέση να συνεργαστεί με με ακέραιους αριθμούς, που ασχολούνται με αυτό ως ακέραιος. 397 00:28:40,390 --> 00:28:48,040 Έτσι, το κεφάλαιο Γ σχετίζεται με 67. Πεζά στ σχετίζεται με 102. 398 00:28:48,040 --> 00:28:51,480 Και πάλι, αν θέλετε να μάθετε τις τιμές αυτές, να δούμε ASCII τραπέζι σας. 399 00:28:51,480 --> 00:28:56,160 Οπότε ας πάμε σε μερικά παραδείγματα για το πώς μπορεί να είναι σε θέση να αφαιρέσετε και να προσθέσετε, 400 00:28:56,160 --> 00:29:03,130 πώς μπορείτε πραγματικά να λειτουργήσει πραγματικά με αυτούς τους χαρακτήρες, τα χρησιμοποιούν εναλλακτικά. 401 00:29:03,870 --> 00:29:11,350 Λέω ότι ASCIIMath πρόκειται να υπολογίσει την προσθήκη ενός χαρακτήρα σε ένα ακέραιο 402 00:29:11,350 --> 00:29:17,590 και στη συνέχεια εμφανίζει το προκύπτον χαρακτήρα καθώς και την προκύπτουσα τιμή ASCII. 403 00:29:17,590 --> 00:29:22,290 Και έτσι εδώ λέω - we'll ασχολούνται με αυτό το μέρος αργότερα - 404 00:29:22,290 --> 00:29:29,100 αλλά ουσιαστικά, λέω ότι ο χρήστης πρέπει να πω ASCIIMath τρέξει μαζί με ένα κλειδί, 405 00:29:29,100 --> 00:29:30,880 και λέω ότι το κλειδί θα είναι ο αριθμός 406 00:29:30,880 --> 00:29:34,600 με το οποίο θα πάμε για να προσθέσετε αυτό το χαρακτήρα. 407 00:29:34,600 --> 00:29:38,560 Έτσι, εδώ παρατηρήσετε ότι επειδή είμαι απαιτητική ένα πλήκτρο, 408 00:29:38,560 --> 00:29:40,590 επειδή είμαι απαιτητική ότι από όπου και αν μου δίνετε 1 πράγμα, 409 00:29:40,590 --> 00:29:45,600 Το μόνο που θέλω να αποδεχθεί. / Asciimath και ένα κλειδί. 410 00:29:45,600 --> 00:29:49,330 Έτσι, Πάω να απαιτήσει ότι argc είναι ίση με 2. 411 00:29:49,330 --> 00:29:54,360 Αν δεν είναι, τότε θα πάω να επιστρέψει 1 και το πρόγραμμα θα κλείσει. 412 00:29:55,070 --> 00:29:58,540 Γι 'αυτό και λέω το κλειδί δεν πρόκειται να είναι το πρώτο επιχείρημα της γραμμής εντολών, 413 00:29:58,540 --> 00:30:05,080 πρόκειται να είναι η δεύτερη, και όπως μπορείτε να δείτε εδώ, 414 00:30:05,080 --> 00:30:11,790 Πάω να τη σειρά του ότι σε έναν ακέραιο. 415 00:30:15,740 --> 00:30:19,230 Στη συνέχεια, Πάω να ορίσετε ένα χαρακτήρα για να είναι r. 416 00:30:19,230 --> 00:30:23,970 Παρατηρήστε ότι ο τύπος της μεταβλητής chr είναι στην πραγματικότητα ένας ακέραιος. 417 00:30:23,970 --> 00:30:30,480 Ο τρόπος που είμαι σε θέση να χρησιμοποιήσει το r ως ακέραιος είναι το περικλείει με αυτά τα μονά εισαγωγικά. 418 00:30:33,850 --> 00:30:40,560 Έτσι, πίσω στο printf δήλωση μας, όπου έχουμε ένα σύμβολο κράτησης θέσης για το χαρακτήρα 419 00:30:40,560 --> 00:30:43,590 και στη συνέχεια, ένα σύμβολο κράτησης θέσης για έναν ακέραιο αριθμό, 420 00:30:43,590 --> 00:30:49,450 ο χαρακτήρας αντιπροσωπεύεται από την chr, και ο ακέραιος είναι το κλειδί. 421 00:30:49,450 --> 00:30:54,320 Και έτσι στη συνέχεια θα πάμε στο αποτέλεσμα προσθέστε το 2 μαζί. 422 00:30:54,320 --> 00:30:58,420 Έτσι θα πάμε για να προσθέσετε ό, τι r + είναι το κλειδί, 423 00:30:58,420 --> 00:31:03,520 και στη συνέχεια θα πάμε για να εκτυπώσετε το αποτέλεσμα αυτό. 424 00:31:06,210 --> 00:31:14,220 Ας κάνουν asciimath. Είναι μέχρι σήμερα, οπότε ας τρέξει μόνο asciimath. 425 00:31:14,220 --> 00:31:18,290 Ω, αλλά δείτε, δεν κάνει τίποτα, γιατί δεν είχαμε πραγματικά να δώσει μια κλειδί. 426 00:31:18,290 --> 00:31:23,850 Έτσι, όταν επέστρεψε μόλις 1, κύρια λειτουργία μας, μόλις επέστρεψε πίσω σε μας. 427 00:31:23,850 --> 00:31:29,250 Μέχρι τότε ας περάσει σε ένα κλειδί. Κάποιος να μου δώσει έναν αριθμό. >> [Φοιτητής] 4. 428 00:31:29,250 --> 00:31:30,920 4. Εντάξει. 429 00:31:30,920 --> 00:31:39,280 Έτσι r αυξήθηκε κατά 4 πρόκειται να μας δώσει v, το οποίο αντιστοιχεί στην τιμή ASCII 118. 430 00:31:39,280 --> 00:31:43,880 Άρα, λοιπόν, το είδος του κάνει νόημα ότι - 431 00:31:43,880 --> 00:31:51,250 Στην πραγματικότητα, μπορώ να σας ρωτήσω, τι νομίζετε ότι η τιμή ASCII του r είναι αν r + 4 είναι 118; 432 00:31:53,070 --> 00:31:55,470 Τότε ναι, r είναι 114. 433 00:31:55,470 --> 00:32:03,010 Έτσι, αν ψάχνετε για το ASCII πίνακα, στη συνέχεια, αρκετά βέβαιος, θα δείτε ότι r αντιπροσωπεύεται από 114. 434 00:32:03,010 --> 00:32:08,610 Έτσι, τώρα που ξέρουμε ότι μπορούμε να προσθέσουμε και ακέραιοι χαρακτήρες με, αυτό φαίνεται αρκετά απλό. 435 00:32:08,610 --> 00:32:12,740 Εμείς απλά θα επαναλάβει πάνω από ένα string όπως είδαμε στο παράδειγμα πριν. 436 00:32:12,740 --> 00:32:17,170 Θα ελέγξουμε αν είναι ένα γράμμα. 437 00:32:17,170 --> 00:32:20,420 Αν είναι, τότε θα το αλλάξει από ό, τι είναι το κλειδί. 438 00:32:20,420 --> 00:32:23,650 Πολύ απλά, εκτός εάν μπορείτε να πάρετε για να σας αρέσει αυτό, 439 00:32:23,650 --> 00:32:32,140 θα δείτε ότι z, εκπροσωπούμενη από 122, τότε θα σας δώσει ένα διαφορετικό χαρακτήρα. 440 00:32:32,140 --> 00:32:37,770 Είμαστε πραγματικά θέλουν να μείνουν μέσα μας αλφάβητο, έτσι δεν είναι; 441 00:32:37,770 --> 00:32:43,180 Πρέπει λοιπόν να καταλάβουμε κάποιο τρόπο το είδος του περιτυλίγματος γύρω. 442 00:32:43,180 --> 00:32:47,190 Όταν φτάσετε zed και θέλετε να αυξηθεί κατά έναν ορισμένο αριθμό, 443 00:32:47,190 --> 00:32:51,230 δεν θέλετε να πάτε σε ASCII πέρα ​​από το τμήμα αλφάβητο? 444 00:32:51,230 --> 00:32:54,140 θέλετε να γυρίσει πίσω σε όλη τη διαδρομή προς Α. 445 00:32:54,140 --> 00:32:58,550 Αλλά να έχετε κατά νου είστε διατηρώντας ακόμα την υπόθεση. 446 00:32:58,550 --> 00:33:00,980 Έτσι, γνωρίζοντας ότι οι επιστολές δεν μπορούν να γίνουν σύμβολα 447 00:33:00,980 --> 00:33:05,290 όπως ακριβώς και τα σύμβολα δεν πρόκειται να αλλάζει επίσης. 448 00:33:05,290 --> 00:33:08,170 Στην τελευταία PSET σίγουρα δεν χρειάζεται να, 449 00:33:08,170 --> 00:33:14,310 αλλά ήταν μια επιλογή για την εφαρμογή άπληστοι PSET σας με τη χρήση του συντελεστή λειτουργία. 450 00:33:14,310 --> 00:33:17,230 Αλλά τώρα είμαστε στην πραγματικότητα θα χρειαστεί να χρησιμοποιήσετε μέτρο, 451 00:33:17,230 --> 00:33:19,900 οπότε ας πάμε πάνω από αυτό το λίγο. 452 00:33:19,900 --> 00:33:26,920 Ουσιαστικά, όταν έχετε x modulo y, που σας δίνει το υπόλοιπο του x διαιρούμενο με y. 453 00:33:26,920 --> 00:33:30,930 Εδώ είναι μερικά παραδείγματα εδώ. Έχουμε 27% 15. 454 00:33:30,930 --> 00:33:36,200 Βασικά, όταν αφαιρέσουμε 15 από 27, όπως πολλές φορές είναι δυνατόν χωρίς να πάρει αρνητική 455 00:33:36,200 --> 00:33:39,060 τότε θα πάρετε 12 πάνω αριστερά. 456 00:33:39,060 --> 00:33:44,650 Έτσι, αυτό είναι το είδος της, όπως στο πλαίσιο μαθηματικά, αλλά πώς μπορούμε να χρησιμοποιήσουμε πραγματικά αυτό; 457 00:33:44,650 --> 00:33:47,100 Είναι πρόκειται να είναι χρήσιμα για τύλιξης μας. 458 00:33:47,100 --> 00:33:55,420 Γι 'αυτό, ας πούμε ρώτησα όλους σας να χωρίζονται σε 3 ομάδες. 459 00:33:55,420 --> 00:33:58,010 Μερικές φορές μπορείτε να το κάνετε αυτό σε ομάδες και κάτι τέτοιο. 460 00:33:58,010 --> 00:34:01,320 Πες μου είπε, "Εντάξει, θέλω όλοι σας να χωριστεί σε 3." 461 00:34:01,320 --> 00:34:04,240 Πώς θα μπορούσε να το κάνεις αυτό; 462 00:34:04,240 --> 00:34:06,810 [Ακούγεται ανταπόκριση των φοιτητών] Ναι, ακριβώς. Μετρήστε off. Εντάξει. 463 00:34:06,810 --> 00:34:10,260 Ας κάνουμε πραγματικότητα αυτό. Θέλετε να ξεκινήσετε; 464 00:34:10,260 --> 00:34:13,810 [Φοιτητές καταμέτρηση off] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Αλλά να θυμάστε ... >> [Φοιτητής] Ω, συγγνώμη. 466 00:34:16,620 --> 00:34:18,730 Αυτό είναι ένα πολύ καλό σημείο. 467 00:34:18,730 --> 00:34:24,130 Είπατε 4, αλλά πραγματικά θέλουμε να πούμε 1 επειδή θέλουμε μόνο 3 ομάδες. 468 00:34:24,130 --> 00:34:30,159 Έτσι λοιπόν, πώς - Όχι, αυτό είναι ένα πολύ καλό παράδειγμα, γιατί τότε πώς μπορεί να σας πει 1; 469 00:34:30,159 --> 00:34:33,370 Ποια είναι η σχέση μεταξύ 4 και 1; 470 00:34:33,370 --> 00:34:36,760 Λοιπόν, 4 mod 3 είναι 1. 471 00:34:36,760 --> 00:34:41,460 Έτσι, αν συνεχιστεί, θα είναι 2. 472 00:34:41,460 --> 00:34:44,540 Έτσι έχουμε 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Και πάλι, είστε πραγματικά το 5ο άτομο. Πώς ξέρεις να πω 2 αντί για 5; 474 00:34:49,420 --> 00:34:53,760 Λέτε 5 mod 3 είναι 2. 475 00:34:53,760 --> 00:34:59,100 Θέλω να δω πόσες ομάδες των 3 έχουν απομείνει, τότε ποια σειρά am I. 476 00:34:59,100 --> 00:35:02,860 Και έτσι στη συνέχεια, αν συνεχιστεί σε όλο το δωμάτιο, 477 00:35:02,860 --> 00:35:07,760 τότε θα βλέπαμε ότι είμαστε πάντα εφαρμόζοντας στην πραγματικότητα τη λειτουργία mod για τους εαυτούς μας 478 00:35:07,760 --> 00:35:09,990 το είδος της μετράνε μακριά. 479 00:35:09,990 --> 00:35:14,490 Αυτό είναι ένα είδος πιο απτό παράδειγμα για το πώς μπορείτε να χρησιμοποιήσετε modulo 480 00:35:14,490 --> 00:35:17,960 επειδή είμαι βέβαιος ότι οι περισσότεροι από μας έχουν κατά πάσα πιθανότητα περάσει από αυτή τη διαδικασία 481 00:35:17,960 --> 00:35:19,630 όπου είχαμε να υπολογίζει. 482 00:35:19,630 --> 00:35:21,840 Οποιεσδήποτε ερωτήσεις σχετικά με modulo; 483 00:35:21,840 --> 00:35:25,360 Θα είναι πολύ σημαντικό να κατανοήσουμε τις έννοιες του αυτό, 484 00:35:25,360 --> 00:35:28,640 έτσι θέλω να βεβαιωθείτε ότι έχετε κατανοήσει παιδιά. 485 00:35:28,640 --> 00:35:34,660 [Φοιτητής] Αν δεν υπάρχει υπόλοιπο, δεν θα σας δώσει τον πραγματικό αριθμό; 486 00:35:34,660 --> 00:35:40,430 Εάν ένα από τα πρώτα 3 από αυτούς είχαν κάνει, θα είναι να τους δοθεί αυτό που πραγματικά ήταν, 487 00:35:40,430 --> 00:35:43,310 ή θα τους έχουν δώσει [δεν ακούγεται] >> Αυτό είναι μια καλή ερώτηση. 488 00:35:43,310 --> 00:35:48,750 Όταν δεν υπάρχει υπόλοιπο για την modulo - έτσι λένε έχετε 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 που σας δίνει πραγματικά πίσω 0. 490 00:35:53,670 --> 00:35:57,290 Θα μιλήσουμε γι 'αυτό λίγο αργότερα. 491 00:35:58,810 --> 00:36:07,720 Ω ναι, για παράδειγμα, το 3ο άτομο - 3 mod 3 είναι 0, αλλά στην πραγματικότητα είπε 3. 492 00:36:07,720 --> 00:36:14,900 Έτσι, αυτό είναι το είδος του σαν ένα εσωτερικό αλιευμάτων, για παράδειγμα, 493 00:36:14,900 --> 00:36:17,620 όπως εντάξει, αν το mod είναι 0 τότε Πάω να είναι το 3ο πρόσωπο. 494 00:36:17,620 --> 00:36:22,740 Αλλά θα μπει σε είδος για το πώς θα μπορούσαμε να θέλουμε να ασχοληθεί με ό, τι 0 είναι αργότερα. 495 00:36:22,740 --> 00:36:32,750 Έτσι τώρα έχουμε κατά κάποιο τρόπο έναν τρόπο χαρτογράφησης της zed στο σωστό γράμμα. 496 00:36:32,750 --> 00:36:34,920 Έτσι τώρα έχουμε περάσει από αυτά τα παραδείγματα, 497 00:36:34,920 --> 00:36:37,880 έχουμε το είδος του Καίσαρα δούμε πώς θα μπορούσε να λειτουργήσει. 498 00:36:37,880 --> 00:36:42,640 Μπορείτε να δείτε τα 2 αλφάβητα και τότε θα δείτε τους μετατόπιση. 499 00:36:42,640 --> 00:36:44,430 Ας προσπαθήσουμε και να εκφράσει την άποψη ότι του τύπου. 500 00:36:44,430 --> 00:36:46,940 Αυτός ο τύπος είναι πραγματικά που σας έχει δοθεί στο spec, 501 00:36:46,940 --> 00:36:52,070 αλλά ας το είδος του εμφάνιση με το τι σημαίνει κάθε μεταβλητή. 502 00:36:52,070 --> 00:36:55,000 Τελικό αποτέλεσμα μας θα είναι το ciphertext. 503 00:36:55,000 --> 00:36:58,300 Έτσι, αυτό λέει ότι το i-οστό χαρακτήρα του ciphertext 504 00:36:58,300 --> 00:37:02,500 πρόκειται να αντιστοιχεί στο i-οστό χαρακτήρα του plaintext. 505 00:37:02,500 --> 00:37:08,130 Αυτό είναι λογικό, διότι θέλουμε να είναι πάντα επένδυση αυτά τα πράγματα. 506 00:37:08,130 --> 00:37:13,480 Γι 'αυτό πρόκειται να είναι το i-οστό χαρακτήρα του ciphertext συν k, η οποία είναι το κλειδί μας - 507 00:37:13,480 --> 00:37:17,230 αυτό έχει νόημα - και τότε θα έχουμε αυτό το mod 26. 508 00:37:17,230 --> 00:37:19,860 Θυμηθείτε πίσω όταν είχαμε την zed 509 00:37:19,860 --> 00:37:24,190 δεν θέλαμε να μπει στο χαρακτήρα, γι 'αυτό ήθελε να το mod 510 00:37:24,190 --> 00:37:26,540 και το είδος του τυλίγονται γύρω από το αλφάβητο. 511 00:37:26,540 --> 00:37:33,430 Μετά zed θα πάει στο α, β, γ, δ, μέχρι να φτάσει στο σωστό αριθμό. 512 00:37:33,430 --> 00:37:44,690 Έτσι, γνωρίζουμε ότι zed, αν + 6, θα μας δώσει στ επειδή έρχεται μετά zed α, β, γ, δ, ε, στ. 513 00:37:44,690 --> 00:37:52,530 Ας θυμηθούμε γνωρίζουμε με βεβαιότητα ότι zed + 6 θα μας δώσει στ. 514 00:37:52,530 --> 00:38:03,530 Σε τιμές ASCII, ζ είναι 122 και το f είναι 102. 515 00:38:03,530 --> 00:38:10,570 Γι 'αυτό πρέπει να βρούμε κάποιο τρόπο να καταστεί Καίσαρα φόρμουλα μας να μας δώσουν 102 516 00:38:10,570 --> 00:38:13,590 μετά τη λήψη του σε 122. 517 00:38:13,590 --> 00:38:19,550 Έτσι, εάν εφαρμόσουμε ακριβώς αυτόν τον τύπο, το («z» + 6) το 26%, που στην πραγματικότητα σας δίνει 24 518 00:38:19,550 --> 00:38:25,980 διότι 122 + 6 είναι 128? 128% 26 σας δίνει 24 υπόλοιπο. 519 00:38:25,980 --> 00:38:29,140 Αλλά αυτό δεν σημαίνει ότι πραγματικά στ. Αυτό σίγουρα δεν είναι 102. 520 00:38:29,140 --> 00:38:33,590 Αυτό είναι, επίσης, δεν είναι το 6ο γράμμα του αλφαβήτου. 521 00:38:33,590 --> 00:38:41,550 Έτσι, προφανώς, πρέπει να έχουμε κάποιο τρόπο μικροαλλαγές αυτό το λίγο. 522 00:38:42,970 --> 00:38:51,340 Όσον αφορά την τακτική αλφάβητο, γνωρίζουμε ότι z είναι η 26η γράμμα και f είναι η 6η. 523 00:38:51,340 --> 00:38:55,460 Αλλά είμαστε στην επιστήμη των υπολογιστών, έτσι θα πάμε με τον δείκτη σε 0. 524 00:38:55,460 --> 00:39:00,690 Έτσι λοιπόν, αντί του z είναι ο αριθμός 26, θα πάμε να πούμε το νούμερο 25 του 525 00:39:00,690 --> 00:39:02,630 επειδή το α είναι 0. 526 00:39:02,630 --> 00:39:04,770 Έτσι τώρα ας εφαρμόσουμε αυτόν τον τύπο. 527 00:39:04,770 --> 00:39:11,710 Έχουμε z εκπροσωπείται από 25 + 6, το οποίο σας δίνει 31. 528 00:39:11,710 --> 00:39:15,790 Και 31 mod 26 σας δίνει 5 ως υπόλοιπο. 529 00:39:15,790 --> 00:39:20,500 Αυτό είναι τέλειο, γιατί γνωρίζουμε ότι η f είναι η 5η γράμμα του αλφαβήτου. 530 00:39:20,500 --> 00:39:26,400 Αλλά δεν είναι ακόμα στ, έτσι δεν είναι; Δεν είναι ακόμα 102. 531 00:39:26,400 --> 00:39:32,730 Έτσι λοιπόν για αυτό το PSET, μια πρόκληση που θα πρέπει να προσπαθούν να βρουν τη σχέση 532 00:39:32,730 --> 00:39:36,910 μεταξύ μετατροπή μεταξύ αυτών των τιμών ASCII και το αλφαβητικό ευρετήριο. 533 00:39:36,910 --> 00:39:40,280 Ουσιαστικά, αυτό που θα θέλετε να το κάνετε, θέλετε να ξεκινήσετε με τις τιμές ASCII, 534 00:39:40,280 --> 00:39:45,390 αλλά στη συνέχεια θέλετε να μεταφράσετε κάποιο τρόπο ότι σε ένα αλφαβητικό ευρετήριο 535 00:39:45,390 --> 00:39:52,610 στη συνέχεια να υπολογίσει τι επιστολή θα πρέπει να είναι - ουσιαστικά, αυτό που αλφαβητικό ευρετήριο του είναι 536 00:39:52,610 --> 00:39:57,660 του χαρακτήρα κρυπτογράφησης - μεταφράσει τότε ότι πίσω στις τιμές ASCII. 537 00:39:57,660 --> 00:40:04,870 Έτσι, αν μαστίγιο ASCII τραπέζι σας, στη συνέχεια, δοκιμάστε και να βρούμε τις σχέσεις μεταξύ, ας πούμε, 102 και 5 538 00:40:04,870 --> 00:40:10,440 ή το 122 και 25. 539 00:40:12,140 --> 00:40:15,690 Έχουμε πάρει το κλειδί μας από τα επιχειρήματα της γραμμής εντολών, έχουμε πάρει το απλό, 540 00:40:15,690 --> 00:40:17,520 έχουμε το κρυπτογραφημένες. 541 00:40:17,520 --> 00:40:19,820 Τώρα το μόνο που μας απομένει να κάνουμε είναι να το εκτυπώσετε. 542 00:40:19,820 --> 00:40:22,040 Θα μπορούσαμε να το κάνουμε αυτό μια-δυο διαφορετικούς τρόπους. 543 00:40:22,040 --> 00:40:24,570 Τι θα μπορούσαμε να κάνουμε είναι στην πραγματικότητα εκτύπωση όσο προχωράμε. 544 00:40:24,570 --> 00:40:28,250 Όπως έχουμε επαναλάβει πάνω από τους χαρακτήρες στη σειρά, 545 00:40:28,250 --> 00:40:31,660 θα μπορούσαμε απλά να εκτυπώσετε μόνο το δικαίωμα στη συνέχεια, όταν εμείς τον υπολογισμό του. 546 00:40:31,660 --> 00:40:36,030 Εναλλακτικά, μπορείτε να αποθηκεύσετε επίσης σε μια σειρά και να έχουν μια σειρά από χαρακτήρες 547 00:40:36,030 --> 00:40:39,280 και στο τέλος επαναλάβει πάνω από το σύνολο της διάταξης και να το τυπώσετε έξω. 548 00:40:39,280 --> 00:40:40,980 Έτσι, έχετε δύο επιλογές για αυτό. 549 00:40:40,980 --> 00:40:47,280 Και να θυμάστε ότι το γ% θα είναι η κράτηση θέσης για την εκτύπωση ενός χαρακτήρα. 550 00:40:47,280 --> 00:40:50,420 Έτσι εκεί έχουμε Καίσαρα, και τώρα προχωράμε για να Vigenere, 551 00:40:50,420 --> 00:40:57,580 η οποία είναι πολύ παρόμοια με Καίσαρα αλλά μόνο ελαφρώς πιο περίπλοκη. 552 00:40:57,580 --> 00:41:03,310 Έτσι, κατ 'ουσίαν, με Vigenere είναι εσείς πρόκειται να πρέπει να περνάει σε μια λέξη-κλειδί. 553 00:41:03,310 --> 00:41:06,510 Έτσι, αντί ενός αριθμού, θα πάμε να έχουν ένα string, 554 00:41:06,510 --> 00:41:09,200 και έτσι ότι πρόκειται να λειτουργήσει ως λέξη-κλειδί σας. 555 00:41:09,200 --> 00:41:14,440 Στη συνέχεια, ως συνήθως, θα πάμε για να πάρετε μια προτροπή για μια σειρά από τον χρήστη 556 00:41:14,440 --> 00:41:19,050 κρυπτογράφηση και στη συνέχεια και στη συνέχεια να τους δώσουμε πίσω το ciphertext. 557 00:41:19,050 --> 00:41:24,650 Έτσι, όπως είπα, είναι πολύ παρόμοια με τον Καίσαρα, εκτός αντί μετατόπιση από έναν ορισμένο αριθμό, 558 00:41:24,650 --> 00:41:30,620 ο αριθμός είναι στην πραγματικότητα πρόκειται να αλλάξει κάθε φορά από χαρακτήρα σε χαρακτήρα. 559 00:41:30,620 --> 00:41:34,890 Για να εκπροσωπεί ότι πραγματικός αριθμός να αλλάξει, αυτό είναι αντιπροσωπεύονται από τα γράμματα του πληκτρολογίου. 560 00:41:34,890 --> 00:41:43,150 Έτσι, εάν μπείτε σε μια στροφή του α, για παράδειγμα, τότε αυτό θα αντιστοιχεί σε μετατόπιση του 0. 561 00:41:43,150 --> 00:41:45,900 Έτσι είναι και πάλι πίσω στο αλφαβητικό ευρετήριο. 562 00:41:45,900 --> 00:41:49,100 Τι θα μπορούσε να είναι χρήσιμο αν βλέπουμε ότι είμαστε στην πραγματικότητα που ασχολούνται με τιμές ASCII 563 00:41:49,100 --> 00:41:51,790 καθώς και τα γράμματα, καθώς και το αλφαβητικό ευρετήριο, 564 00:41:51,790 --> 00:41:58,020 ίσως βρείτε ή να φτιάξετε το δικό σας ASCII πίνακα που δείχνει το αλφαβητικό ευρετήριο από το 0 έως το 25, 565 00:41:58,020 --> 00:42:03,750 Α έως το Ζ, και τις τιμές ASCII, έτσι ώστε να μπορείτε να δείτε το είδος της σχέσης 566 00:42:03,750 --> 00:42:07,020 και σκιαγραφήσει και να προσπαθήσουμε και να βρούμε κάποια μοτίβα. 567 00:42:07,020 --> 00:42:11,010 Ομοίως, αν οι μετατόπιση στο παράδειγμα ορισμένα από f - 568 00:42:11,010 --> 00:42:21,110 και αυτό είναι είτε πεζά ή κεφαλαία στ - τότε αυτό θα αντιστοιχεί στο 5. 569 00:42:21,110 --> 00:42:24,180 Είμαστε καλά μέχρι στιγμής; 570 00:42:25,770 --> 00:42:30,050 Ο τύπος για Vigenere είναι λίγο διαφορετική. 571 00:42:30,050 --> 00:42:32,960 Βασικά, μπορείτε να δείτε ότι είναι ακριβώς όπως Καίσαρα, 572 00:42:32,960 --> 00:42:37,390 εκτός και όχι μόνο έχουμε k k δείκτη j. 573 00:42:37,390 --> 00:42:44,810 Παρατηρήστε ότι δεν είμαστε i χρησιμοποιώντας επειδή ουσιαστικά, το μήκος των λέξεων-κλειδιών 574 00:42:44,810 --> 00:42:49,850 δεν είναι κατ 'ανάγκη το μήκος του ciphertext μας. 575 00:42:49,850 --> 00:42:56,130 Αυτό θα είναι μια σαφέστερη λίγο όταν βλέπουμε ένα παράδειγμα ότι έχω λίγο αργότερα. 576 00:42:56,130 --> 00:43:03,160 Βασικά, αν τρέξετε το πρόγραμμά σας με μια λέξη-κλειδί του ohai, 577 00:43:03,160 --> 00:43:08,560 τότε αυτό σημαίνει ότι κάθε φορά, ohai πρόκειται να είναι βάρδια σας. 578 00:43:08,560 --> 00:43:11,060 Έτσι, ανάλογα με το ποια είναι η θέση σας είναι στη λέξη-κλειδί σας, 579 00:43:11,060 --> 00:43:15,800 πρόκειται να αλλάξει ορισμένα χαρακτήρα σας ciphertext από το εν λόγω ποσό. 580 00:43:15,800 --> 00:43:19,630 Και πάλι, όπως ακριβώς και ο Καίσαρας, θέλουμε να διασφαλίσουμε ότι θα διατηρηθεί η κεφαλαιοποίηση των πραγμάτων 581 00:43:19,630 --> 00:43:22,900 και εμείς μόνο γράμματα δεν encipher, χαρακτήρες ή κενά. 582 00:43:22,900 --> 00:43:26,330 Έτσι κοιτάξουμε πίσω στον Καίσαρα για τις λειτουργίες που μπορεί να έχετε χρησιμοποιήσει, 583 00:43:26,330 --> 00:43:32,570 ο τρόπος που θα αποφασίσει πώς να αλλάξει τα πράγματα, και ότι για να εφαρμόσει το πρόγραμμά σας εδώ. 584 00:43:32,570 --> 00:43:35,260 Ας χάρτη αυτό. 585 00:43:35,260 --> 00:43:39,680 Έχουμε ένα απλό κείμενο που έχουμε πάρει από το χρήστη από GetString 586 00:43:39,680 --> 00:43:44,090 Αυτό λέει ... CS50 είναι! 587 00:43:44,090 --> 00:43:47,090 Στη συνέχεια, έχουμε μια λέξη-κλειδί του ohai. 588 00:43:47,090 --> 00:43:50,930 Τα πρώτα 4 χαρακτήρες είναι αρκετά απλή. 589 00:43:50,930 --> 00:43:55,580 Γνωρίζουμε ότι το Τ πρόκειται να μετατοπιστεί από o, 590 00:43:55,580 --> 00:44:01,990 h τότε πρόκειται να μετατοπιστεί από h, i πρόκειται να μετατοπιστεί από ένα. 591 00:44:01,990 --> 00:44:04,610 Εδώ μπορείτε να δείτε ότι αντιπροσωπεύει 0, 592 00:44:04,610 --> 00:44:11,940 έτσι, τότε η τελική τιμή είναι πραγματικά ακριβώς το ίδιο γράμμα όπως και πριν. 593 00:44:11,940 --> 00:44:15,250 Στη συνέχεια s μετατοπίζεται από i. 594 00:44:15,250 --> 00:44:19,370 Αλλά τότε θα πρέπει αυτές τις περιόδους εδώ. 595 00:44:19,370 --> 00:44:25,960 Δεν θέλουμε να κρυπτογράφηση ότι, έτσι, τότε δεν το αλλάζουν με τίποτα 596 00:44:25,960 --> 00:44:31,280 και απλά εκτυπώστε την περίοδο αμετάβλητη. 597 00:44:31,280 --> 00:44:38,020 [Φοιτητής] Δεν καταλαβαίνω πώς ξέρετε ότι αυτό μετατοπίζεται από - Πού κάνατε - >> Ω, συγγνώμη. 598 00:44:38,020 --> 00:44:41,620 Στην κορυφή εδώ μπορείτε να δείτε ότι η γραμμή εντολών ohai επιχείρημα εδώ, 599 00:44:41,620 --> 00:44:43,740 που πρόκειται να είναι η λέξη-κλειδί. 600 00:44:43,740 --> 00:44:49,550 Και έτσι, βασικά, είστε το ποδήλατο πάνω από τους χαρακτήρες τη λέξη-κλειδί. 601 00:44:49,550 --> 00:44:52,020 [Φοιτητής] Έτσι, o πρόκειται να μετατοπίζεται το ίδιο - 602 00:44:52,020 --> 00:44:56,260 Έτσι o αντιστοιχεί σε έναν ορισμένο αριθμό στο αλφάβητο. 603 00:44:56,260 --> 00:44:58,400 [Φοιτητής] Δεξιά. Αλλά πού μπορείτε να πάρετε το μέρος από CS50; 604 00:44:58,400 --> 00:45:02,540 Αχ. Αυτό είναι το GetString όπου είστε όπως, «Δώστε μου ένα string για να κωδικοποιήσουν." 605 00:45:02,540 --> 00:45:07,510 [Φοιτητής] Θα πάμε για να σας δώσει αυτό το επιχείρημα για να μετατοπιστεί από 606 00:45:07,510 --> 00:45:09,380 και στη συνέχεια θα ζητήσει για την πρώτη σειρά σας. Ναι >>. 607 00:45:09,380 --> 00:45:12,440 Έτσι, όταν την εκτέλεση του προγράμματος, από όπου και αν πρόκειται να περιλαμβάνει τη λέξη-κλειδί 608 00:45:12,440 --> 00:45:14,740 στα επιχειρήματα της γραμμής εντολών τους, όταν το τρέξετε. 609 00:45:14,740 --> 00:45:19,740 Στη συνέχεια, αφού έχετε ελέγξει ότι έχουν πραγματικά δώσει 1 και όχι περισσότερο, όχι λιγότερο, 610 00:45:19,740 --> 00:45:23,750 τότε θα πάμε να τους ζητήσει για μια σειρά, ας πούμε, "Δώστε μου ένα string." 611 00:45:23,750 --> 00:45:27,630 Έτσι, αυτό είναι όπου σε αυτή την περίπτωση θα έχουμε δώσει αυτό ... CS50 είναι! 612 00:45:27,630 --> 00:45:32,090 Έτσι λοιπόν θα πάμε να χρησιμοποιήσετε και ότι χρησιμοποιούν ohai επαναλάβει και πάνω. 613 00:45:32,090 --> 00:45:38,200 Σημειώστε ότι εδώ έχουμε πηδήξει πάνω κρυπτογράφηση των περιόδων, 614 00:45:38,200 --> 00:45:51,660 αλλά από την άποψη της θέσης μας για ohai, η επόμενη χρησιμοποιήσαμε o. 615 00:45:51,660 --> 00:45:54,990 Σε αυτή την περίπτωση είναι λίγο πιο δύσκολο να δούμε γιατί αυτό είναι 4, 616 00:45:54,990 --> 00:45:57,710 οπότε ας συνεχίσουμε λίγο. Απλά κολλήσει μαζί μου εδώ. 617 00:45:57,710 --> 00:46:02,960 Τότε έχουμε i και δ, τα οποία στη συνέχεια μεταφράστηκε από o και h αντίστοιχα. 618 00:46:02,960 --> 00:46:09,370 Στη συνέχεια έχουμε ένα χώρο, έτσι και τότε ξέρουμε ότι δεν πρόκειται για την κρυπτογράφηση των χώρων. 619 00:46:09,370 --> 00:46:18,930 Αλλά ειδοποίηση ότι αντί να πηγαίνουν σε ένα σε αυτό το σημείο ακριβώς εδώ, 620 00:46:18,930 --> 00:46:28,330 είμαστε κρυπτογράφηση από ένα - δεν ξέρω αν μπορείτε να δείτε ότι - ακριβώς εδώ. 621 00:46:28,330 --> 00:46:33,710 Έτσι, δεν είναι όπως εσείς πραγματικά προκαθορισμένη, δηλαδή, o πηγαίνει εδώ, η πηγαίνει εδώ, 622 00:46:33,710 --> 00:46:39,200 α πηγαίνει εδώ, ί πηγαίνει εδώ, o, h, α, ι, ο, h, α, ί. Δεν το κάνουμε αυτό. 623 00:46:39,200 --> 00:46:43,760 Θα αλλάξει μόνο η θέση σας στην λέξη-κλειδί 624 00:46:43,760 --> 00:46:51,020 όταν ξέρετε ότι είστε πραγματικά πρόκειται να κρυπτογραφήσετε ένα πραγματικό γράμμα. 625 00:46:51,020 --> 00:46:53,920 Μήπως αυτό το είδος της νόημα; 626 00:46:53,920 --> 00:46:55,800 Εντάξει. 627 00:46:56,490 --> 00:46:58,500 Έτσι, μόλις μερικές υπενθυμίσεις. 628 00:46:58,500 --> 00:47:03,760 Θέλετε να βεβαιωθείτε ότι έχετε μόνο προχωρήσετε στο επόμενο γράμμα στη λέξη-κλειδί σας 629 00:47:03,760 --> 00:47:06,390 αν ο χαρακτήρας σας στο plaintext είναι ένα γράμμα. 630 00:47:06,390 --> 00:47:09,120 Έτσι λένε ότι είμαστε στο o. 631 00:47:09,120 --> 00:47:19,310 Θα παρατηρήσετε ότι ο επόμενος χαρακτήρας, ο δείκτης i του plaintext, είναι ένας αριθμός, για παράδειγμα. 632 00:47:19,310 --> 00:47:31,630 Τότε δεν προχωρήσει j, ο δείκτης-κλειδί για μας, μέχρι να φτάσουμε άλλη επιστολή. 633 00:47:31,630 --> 00:47:36,230 Και πάλι, μπορείτε επίσης να θέλετε να βεβαιωθείτε ότι έχετε wraparound στην αρχή της λέξης-κλειδιού 634 00:47:36,230 --> 00:47:37,770 όταν είστε στο τέλος της. 635 00:47:37,770 --> 00:47:42,030 Αν δείτε εδώ είμαστε στο i, το επόμενο πρέπει να είναι o. 636 00:47:42,030 --> 00:47:47,690 Έτσι, θέλετε να βρείτε κάποιο τρόπο να είναι σε θέση να wraparound στην αρχή των λέξεων-κλειδιών σας 637 00:47:47,690 --> 00:47:49,470 κάθε φορά που θα φτάσετε στο τέλος. 638 00:47:49,470 --> 00:47:55,040 Και έτσι πάλι, τι είδους του χειριστή είναι χρήσιμο σε αυτή την περίπτωση για περιτύλιγμα γύρω; 639 00:47:56,630 --> 00:47:59,840 Όπως και κατά την καταμέτρηση off παράδειγμα. 640 00:47:59,840 --> 00:48:03,710 [Φοιτητής] Το σύμβολο τοις εκατό. >> Ναι, το σύμβολο τοις εκατό, το οποίο είναι modulo. 641 00:48:03,710 --> 00:48:11,250 Έτσι modulo θα έρθει σε πρακτικό εδώ όταν θέλετε να τυλίξετε πάνω από το δείκτη ohai σας. 642 00:48:11,250 --> 00:48:17,700 Και ακριβώς μια γρήγορη υπόδειξη: Προσπαθήστε να σκεφτείτε περιτυλίγματος πάνω από τη λέξη-κλειδί κάπως σαν την καταμέτρηση μακριά, 643 00:48:17,700 --> 00:48:23,590 όπου αν δεν υπάρχει 3 ομάδες, το 4ο πρόσωπο, 644 00:48:23,590 --> 00:48:30,610 αριθμός τους είπαν ότι ήταν 4 mod 3, το οποίο ήταν 1. 645 00:48:30,610 --> 00:48:32,880 Έτσι δοκιμάστε και σκεφτείτε με αυτόν τον τρόπο. 646 00:48:34,770 --> 00:48:42,740 Όπως είδατε στον τύπο, όπου κι αν έχουν ci pi και στη συνέχεια, αλλά στη συνέχεια kj, 647 00:48:42,740 --> 00:48:44,700 θέλετε να βεβαιωθείτε ότι μπορείτε να παρακολουθείτε αυτά. 648 00:48:44,700 --> 00:48:47,580 Δεν χρειάζεται να καλέσετε το i, δεν χρειάζεται να το ονομάσουμε j, 649 00:48:47,580 --> 00:48:53,270 αλλά θέλετε να βεβαιωθείτε ότι μπορείτε να παρακολουθείτε τη θέση ότι είστε σε plaintext σε σας 650 00:48:53,270 --> 00:48:55,790 καθώς και τη θέση ότι είστε σε το κλειδί σας 651 00:48:55,790 --> 00:48:59,840 επειδή αυτά δεν είναι απαραίτητα πρόκειται να είναι το ίδιο. 652 00:48:59,840 --> 00:49:06,400 Όχι μόνο η λέξη-κλειδί - θα μπορούσε να είναι ένα εντελώς διαφορετικό μήκος από plaintext σας. 653 00:49:06,400 --> 00:49:09,140 Επίσης, plaintext σας, υπάρχουν οι αριθμοί και χαρακτήρες, 654 00:49:09,140 --> 00:49:14,450 γι 'αυτό δεν πρόκειται να ταιριάζουν απόλυτα μαζί. Ναι. 655 00:49:14,450 --> 00:49:19,280 [Φοιτητής] Υπάρχει μια λειτουργία για να αλλάξετε την περίπτωση; 656 00:49:19,280 --> 00:49:24,530 Μπορείτε να αλλάξετε ένα στο κεφάλαιο Α; >> Ναι, σίγουρα υπάρχει. 657 00:49:24,530 --> 00:49:27,890 Μπορείτε να ελέγξετε έξω - Πιστεύω ότι αυτό είναι toupper, όλα 1 λέξη. 658 00:49:30,650 --> 00:49:36,310 Αλλά όταν προσπαθείτε να κρυπτογραφημένη τα πράγματα και να διατηρήσουν το κείμενο, 659 00:49:36,310 --> 00:49:39,350 Είναι καλύτερο να έχουμε βασικά ξεχωριστές περιπτώσεις. 660 00:49:39,350 --> 00:49:42,040 Αν είναι ένα κεφαλαίο, τότε θέλετε να μετατοπιστεί από αυτό 661 00:49:42,040 --> 00:49:46,460 επειδή στον τύπο σας, όταν κοιτάς πίσω το πώς θα πρέπει να πάει το είδος του 662 00:49:46,460 --> 00:49:50,900 εναλλακτικά μεταξύ του ASCII τρόπο που εκπροσωπούν τους αριθμούς 663 00:49:50,900 --> 00:49:55,020 και η πραγματική αλφαβητικό ευρετήριο, θέλουμε να βεβαιωθείτε 664 00:49:55,020 --> 00:50:01,850 υπάρχει μετάβαση να είναι κάποιο είδος του σχεδίου που πρόκειται να χρησιμοποιήσετε. 665 00:50:01,850 --> 00:50:04,580 Ένα άλλο σημείωμα σχετικά με το σχέδιο, στην πραγματικότητα. 666 00:50:04,580 --> 00:50:07,250 Θα πάμε με σίγουρα να ασχολούνται με τους αριθμούς. 667 00:50:07,250 --> 00:50:11,280 Προσπαθήστε να μην χρησιμοποιείτε μαγικό αριθμό, το οποίο είναι ένα παράδειγμα του στυλ. 668 00:50:11,280 --> 00:50:18,470 Έτσι, ας πούμε ότι θέλετε σε κάθε αλλαγή της ώρας κάτι από θέλαμε - 669 00:50:18,470 --> 00:50:22,400 Εντάξει, έτσι υπαινιγμό, μια άλλη αεροτομή είναι όταν πάμε να μεταφέρουμε κάτι 670 00:50:22,400 --> 00:50:26,310 από ένα ορισμένο ποσό, προσπαθήστε να μην δηλώνετε ότι από ένα πραγματικό αριθμό 671 00:50:26,310 --> 00:50:32,810 αλλά μάλλον προσπαθήσουμε και να δούμε αν μπορείτε να χρησιμοποιήσετε την τιμή ASCII, το οποίο θα το είδος του να έχει περισσότερο νόημα. 672 00:50:32,810 --> 00:50:35,470 Ένα άλλο σημείωμα: Επειδή έχουμε να κάνουμε με τύπους, 673 00:50:35,470 --> 00:50:41,200 ακόμα κι αν TF θα σας το είδος του σχεδίου γνωρίζουν τι μπορεί να χρησιμοποιείτε, 674 00:50:41,200 --> 00:50:44,430 καλύτερα στο είδος σχόλια σας εξηγήσει τη λογική, όπως, 675 00:50:44,430 --> 00:50:51,880 "Είμαι χρησιμοποιώντας αυτό το μοτίβο, επειδή ..." και το είδος της να εξηγήσει το σχέδιο συνοπτικά τα σχόλιά σας. 676 00:50:54,090 --> 00:50:58,990 [Αυτό ήταν περιδιάβαση 2] Εάν δεν υπάρχουν άλλες ερωτήσεις, τότε θα μείνουμε εδώ για λίγο. 677 00:50:58,990 --> 00:51:04,370 Καλή τύχη με PSET σας 2: Crypto και ευχαριστώ που ήρθατε. 678 00:51:06,070 --> 00:51:08,620 [Φοιτητής] Σας ευχαριστώ. >> Ευχαριστώ. 679 00:51:09,220 --> 00:51:10,800 [Media Αποσυνδεδεμένος intro]