1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Ενότητα 3] [λιγότερο άνετα] 2 00:00:03,000 --> 00:00:05,000 >> [Nate Hardison] [Πανεπιστήμιο του Χάρβαρντ] 3 00:00:05,000 --> 00:00:08,000 >> [Αυτό είναι CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Εντάξει, ας ξεκινήσουμε. 5 00:00:10,000 --> 00:00:13,000 Καλώς ήρθατε στην Εβδομάδα 4 του CS50. 6 00:00:13,000 --> 00:00:19,000 Αν εσείς ανοίξει ένα πρόγραμμα περιήγησης στο Web και να ανοίξουν PSET 3, 7 00:00:19,000 --> 00:00:23,000 Scramble με CS50, θα πάμε να αρχίσει να πηγαίνει 8 00:00:23,000 --> 00:00:26,000 μέσα από το τμήμα των ερωτήσεων εκεί. 9 00:00:26,000 --> 00:00:32,000 Ακριβώς όπως και την περασμένη εβδομάδα, θα πρέπει να εργάζονται σε χώρους CS50, 10 00:00:32,000 --> 00:00:35,000 αν θα τραβήξει επίσης ότι μέχρι καθώς, 11 00:00:35,000 --> 00:00:43,000 και αν πάτε μπροστά και να επισκεφτείτε αυτό το σύνδεσμο που έχω εδώ στην κορυφή. 12 00:00:43,000 --> 00:00:45,000 Ήρθε η ώρα να ξεκινήσετε. 13 00:00:45,000 --> 00:00:51,000 Έχουμε μικρό πρόγραμμα γεια μας εδώ. Τίποτα τρελό. 14 00:00:51,000 --> 00:00:55,000 Ένα από τα πρώτα πράγματα που θέλω να κάνω μαζί σας σήμερα είναι να πάτε σε μερικές λύσεις 15 00:00:55,000 --> 00:00:58,000 Πρόβλημα με Σετ 1, το είδος των λύσεων παράδειγμα, 16 00:00:58,000 --> 00:01:03,000 ακριβώς έτσι μπορείτε να πάρετε μια ιδέα για το τι είδους προσωπικό κώδικα γραφής, 17 00:01:03,000 --> 00:01:07,000 τι είδους κώδικα άλλους μαθητές γράφουν, 18 00:01:07,000 --> 00:01:10,000 και πρέπει να ρίξετε μια ματιά σε αυτό, γιατί ξέρω ότι είναι παράξενο 19 00:01:10,000 --> 00:01:14,000 όταν υποβάλλετε μια λύση σε ένα πρόβλημα σετ και να πάρει σχόλια 20 00:01:14,000 --> 00:01:18,000 για τη δική σας εκδοχή, αλλά μερικές φορές είναι χρήσιμο να δούμε πώς άλλοι άνθρωποι το έκαναν, 21 00:01:18,000 --> 00:01:22,000 ειδικά αυτά που είναι ωραίο αναζητούν. 22 00:01:22,000 --> 00:01:27,000 Για το μεγαλύτερο μέρος, ήμουν πραγματικά εντυπωσιασμένος με τις λύσεις που εσείς παράγεται. 23 00:01:27,000 --> 00:01:31,000 Δεν έχουν ακόμη αρχίσει να εξετάζουν 2s Πρόβλημα Set σας, αλλά αν είστε τίποτα όπως και το πρώτο, 24 00:01:31,000 --> 00:01:34,000 αυτό δεν σημαίνει τίποτα, αλλά τα καλά πράγματα. 25 00:01:34,000 --> 00:01:40,000 >> Αν κοιτάξετε τις αναθεωρήσεις μου, ας ξεκινήσουμε όλη τη διαδρομή σε Αναθεώρηση 1, 26 00:01:40,000 --> 00:01:47,000 και θα πάμε να ρίξουμε μια γρήγορη ματιά σε μια λύση Mario. 27 00:01:47,000 --> 00:01:54,000 Αν τραβήξετε αυτό επάνω, αυτά τα προγράμματα που πρόκειται να παρουσιάσει είναι σωστές. 28 00:01:54,000 --> 00:01:56,000 Δεν υπήρχαν προβλήματα με την ορθότητα αυτών των προβλημάτων, αλλά μάλλον, 29 00:01:56,000 --> 00:01:59,000 θέλουμε να μιλήσουμε λίγο για τα διάφορα θέματα σχεδιασμού 30 00:01:59,000 --> 00:02:03,000 που ήταν να χρησιμοποιηθεί εδώ. 31 00:02:03,000 --> 00:02:08,000 Ένα από τα πράγματα που ήταν ενδιαφέρον για τη λύση 32 00:02:08,000 --> 00:02:11,000 είναι ότι χρησιμοποιείται αυτή η νέα δομή που ονομάζεται κιλό καθορίζουν, 33 00:02:11,000 --> 00:02:15,000 μερικές φορές αναφέρεται επίσης ως ένα hash ορίζουν. 34 00:02:15,000 --> 00:02:18,000 Επιτρέψτε μου να εστιάσετε σε αυτό εδώ. 35 00:02:18,000 --> 00:02:24,000 Ένα # define σας επιτρέπει να δώσετε ονόματα σε αυτούς τους αριθμούς στο πρόγραμμά σας. 36 00:02:24,000 --> 00:02:28,000 Σε αυτή την περίπτωση, το μέγιστο ύψος της πυραμίδας στο Mario 37 00:02:28,000 --> 00:02:34,000 ήταν 23 και όχι 23 σε βάζοντας τον κωδικό μου- 38 00:02:34,000 --> 00:02:37,000 θα αναφέρεται ότι όσο πιο σκληρά κωδικοποίηση 23 - 39 00:02:37,000 --> 00:02:43,000 αντί να δίνει αυτό το όνομα MAX_HEIGHT σε αυτόν τον αριθμό, 40 00:02:43,000 --> 00:02:48,000 έτσι ώστε εδώ κάτω σε do-while loop μου 41 00:02:48,000 --> 00:02:51,000 μπορείτε πραγματικά να αναφέρονται σε MAX_HEIGHT 42 00:02:51,000 --> 00:02:55,000 αντί να τον αριθμό 23 μέσα 43 00:02:55,000 --> 00:02:57,000 [Φοιτητικό] Ποιο είναι το πλεονέκτημα του να κάνει αυτό; 44 00:02:57,000 --> 00:02:59,000 Αυτό είναι ένα μεγάλο ερώτημα. 45 00:02:59,000 --> 00:03:03,000 Το ένα είναι αναγνωσιμότητα. 46 00:03:03,000 --> 00:03:08,000 Ένα πλεονέκτημα της χρήσης αυτής # define είναι αναγνωσιμότητα. 47 00:03:08,000 --> 00:03:11,000 Όταν είμαι ανάγνωση αυτού του κώδικα, μπορώ να δω τι συμβαίνει. 48 00:03:11,000 --> 00:03:15,000 >> Μπορώ να δω σε αυτή την κατάσταση εδώ που δοκιμάζουμε 49 00:03:15,000 --> 00:03:19,000 για το ύψος που είναι <0, το οποίο θα μπορούσε επίσης να οριστεί 50 00:03:19,000 --> 00:03:22,000 να είναι ένα ελάχιστο ύψος ή ένα ύψος min. 51 00:03:22,000 --> 00:03:25,000 Το άλλο πλεονέκτημα είναι ότι μπορώ να διαβάσω τότε το υπόλοιπο της γραμμής για να δείτε 52 00:03:25,000 --> 00:03:30,000 ότι είμαστε επίσης έλεγχο για να βεβαιωθείτε ότι το ύψος δεν είναι μεγαλύτερο από το ύψος max, 53 00:03:30,000 --> 00:03:35,000 επειδή θα πάμε να συνεχιστεί, ενώ το ύψος είναι μεγαλύτερο από το ύψος max. 54 00:03:35,000 --> 00:03:40,000 Το άλλο πλεονέκτημα είναι-αν σμίκρυνση λίγο εδώ- 55 00:03:40,000 --> 00:03:49,000 αν μπορώ να εκτελέσω αυτό το πρόγραμμα και το τρέχω, ας πούμε, με 23 αυτή τη στιγμή, 56 00:03:49,000 --> 00:03:52,000 θα εκτυπώσει όλες τις 23 σειρές έτσι απλά. 57 00:03:52,000 --> 00:03:54,000 Αλλά να πω ότι ήθελε να αλλάξει το ύψος max, 58 00:03:54,000 --> 00:03:57,000 και τώρα θέλω να περιορίσει το μέγιστο ύψος των πυραμίδων 59 00:03:57,000 --> 00:04:06,000 να πω μόνο-ο άνθρωπος, που ήταν funky. 60 00:04:06,000 --> 00:04:14,000 # Include , # define MAX_HEIGHT, 61 00:04:14,000 --> 00:04:18,000 και ας πούμε ότι ήθελε να το θέσει ίση με το 10. 62 00:04:18,000 --> 00:04:22,000 Τώρα, σε αυτό το σημείο, το μόνο που είχα να κάνω ήταν να το αλλάξετε σε αυτή τη θέση ένα. 63 00:04:22,000 --> 00:04:27,000 Μπορώ να μεταγλωττίσετε τον κώδικα, και τώρα προσπαθώ, αν και πληκτρολογήστε σε 12, 64 00:04:27,000 --> 00:04:30,000 θα ζητήσει και πάλι μου. 65 00:04:30,000 --> 00:04:33,000 Σε αυτή την περίπτωση, χρησιμοποιούμε μόνο μία φορά MAX_HEIGHT. 66 00:04:33,000 --> 00:04:37,000 Δεν είναι ότι οι μεγάλες από μια ταλαιπωρία για να πάει σε 67 00:04:37,000 --> 00:04:40,000 και να αλλάξει το βρόχο, ενώ αν χρειαστεί. 68 00:04:40,000 --> 00:04:44,000 Αλλά σε προγράμματα όπου και αν αναφορά τον ίδιο αριθμό μαγεία 69 00:04:44,000 --> 00:04:47,000 ξανά και ξανά, αυτό ορίζουν # μηχανισμός είναι πολύ βολικό 70 00:04:47,000 --> 00:04:52,000 γιατί το μόνο που αλλάζει είναι μία φορά στην κορυφή του αρχείου είναι συνήθως όπου βάζετε τους- 71 00:04:52,000 --> 00:04:57,000 και η αλλαγή διαπερνά το υπόλοιπο του αρχείου. 72 00:04:57,000 --> 00:05:02,000 >> Άλλα πράγματα που ήθελα να σημειωθεί σε αυτό το εργαστήριο που νόμιζα ότι φαινόταν πολύ ωραία, 73 00:05:02,000 --> 00:05:05,000 ήταν η ονομασία των μεταβλητών. 74 00:05:05,000 --> 00:05:14,000 Βλέπετε ότι εδώ έχουμε ακέραιες μεταβλητές που ονομάζεται γραμμή και ονομάζεται ύψος. 75 00:05:14,000 --> 00:05:20,000 Χώροι, hashes, αυτό βοηθά στο να γίνει ο κώδικας είναι λίγο πιο ευανάγνωστη, 76 00:05:20,000 --> 00:05:25,000 καθιστά λίγο πιο κατανοητό το τι πραγματικά συμβαίνει. 77 00:05:25,000 --> 00:05:31,000 Αυτό είναι σε αντίθεση με τη χρήση, για παράδειγμα, τυχαία γράμματα 78 00:05:31,000 --> 00:05:35,000 ή απλά εντελώς αλαμπουρνέζικα. 79 00:05:35,000 --> 00:05:39,000 Ένα τελευταίο πράγμα που θα επισημάνω είναι ότι για βρόχους, 80 00:05:39,000 --> 00:05:45,000 Συχνά αυτές οι μεταβλητές iterator, οι μετρητές που χρησιμοποιείτε σε σας για βρόχους, 81 00:05:45,000 --> 00:05:51,000 είναι πρότυπο και για τους συμβατικούς ξεκινήσει είτε με i και j τότε και έπειτα k 82 00:05:51,000 --> 00:05:54,000 και συνεχίζεται από εκεί, αν χρειάζεστε περισσότερες μεταβλητές, 83 00:05:54,000 --> 00:05:56,000 και αυτό είναι μόνο μια σύμβαση. 84 00:05:56,000 --> 00:05:58,000 Υπάρχουν πολλές συμβάσεις. 85 00:05:58,000 --> 00:06:00,000 Εξαρτάται από τη γλώσσα προγραμματισμού που χρησιμοποιείτε. 86 00:06:00,000 --> 00:06:04,000 Αλλά σε C, που συνήθως αρχίζουν με το i. 87 00:06:04,000 --> 00:06:08,000 Δεν έχει νόημα να χρησιμοποιήσει, ας πούμε, ένα ή β 88 00:06:08,000 --> 00:06:13,000 ανάλογα με την κατάσταση. 89 00:06:13,000 --> 00:06:15,000 Αυτός είναι αυτό για αυτό. 90 00:06:15,000 --> 00:06:25,000 Αν τώρα σηκώσει Αναθεώρηση 2, θα δείτε ένα άλλο Mario, 91 00:06:25,000 --> 00:06:29,000 και αυτό είναι παρόμοιο με το άλλο που μόλις είδαμε, 92 00:06:29,000 --> 00:06:32,000 αλλά κάνει κάτι το είδος της δροσερό. 93 00:06:32,000 --> 00:06:38,000 Αν κοιτάξουμε αυτό το τμήμα ακριβώς εδώ μέσα στο εσωτερικό για βρόχο, 94 00:06:38,000 --> 00:06:44,000 από όπου και αν χρησιμοποιούν κάποια τρελή σύνταξη που αναζητούν εδώ ακριβώς σε αυτή τη γραμμή. 95 00:06:44,000 --> 00:06:47,000 Αυτό ονομάζεται χειριστής τριαδικό. 96 00:06:47,000 --> 00:06:53,000 Πρόκειται για μια δήλωση αν άλλος συμπυκνώνεται σε μία γραμμή. 97 00:06:53,000 --> 00:06:57,000 Η κατάσταση είναι αυτό το μέρος μέσα σε παρένθεση. 98 00:06:57,000 --> 00:07:05,000 Είναι ισοδύναμο με λέγοντας ότι αν j <ύψος - i - 1. 99 00:07:05,000 --> 00:07:10,000 Και τότε τι τα περιεχόμενα του ότι αν μπλοκ θα είναι ο χώρος 100 00:07:10,000 --> 00:07:16,000 και στη συνέχεια, το περιεχόμενο του τι άλλο θα είναι αυτό το #. 101 00:07:16,000 --> 00:07:20,000 Είναι ουσιαστικά μια εκχώρηση χώρου για αυτή τη μεταβλητή. 102 00:07:20,000 --> 00:07:24,000 Είναι βάζοντας ένα χώρο στα περιεχόμενα του μπλοκ μεταβλητής, 103 00:07:24,000 --> 00:07:29,000 αν πληρούται η προϋπόθεση αυτή, αν και ο όρος δεν πληρούται, 104 00:07:29,000 --> 00:07:32,000 τότε η μεταβλητή παίρνει το μπλοκ #. 105 00:07:32,000 --> 00:07:37,000 Και στη συνέχεια, φυσικά, αντί της οικοδόμησης ενός ολόκληρου συμβολοσειρά 106 00:07:37,000 --> 00:07:43,000 εκτύπωση και πάντα στο τέλος η λύση θα εκτυπώνει ένα χαρακτήρα κάθε φορά. 107 00:07:43,000 --> 00:07:48,000 Αρκετά δροσερό. 108 00:07:48,000 --> 00:07:53,000 >> Ένα άλλο ζευγάρι από τα πράγματα να δούμε. Θα προχωρήσουμε σε άπληστους. 109 00:07:53,000 --> 00:07:58,000 Τώρα, αν κοιτάξουμε άπληστοι, αυτή η πρώτη λύση 110 00:07:58,000 --> 00:08:00,000 χρησιμοποιεί αυτά τα # καθορίζει αρκετά. 111 00:08:00,000 --> 00:08:06,000 Έχουμε μία σταθερά που ορίζεται για κάθε μία από τις διαφορετικούς αριθμούς σε αυτό το πρόγραμμα. 112 00:08:06,000 --> 00:08:12,000 Έχουμε ένα για σεντς ανά δολάριο, ένα για τρίμηνα, δεκάρες, πεντάρες, και πένες, 113 00:08:12,000 --> 00:08:15,000 και τώρα αν μετακινηθείτε προς τα κάτω και να διαβάσετε τον κωδικό, 114 00:08:15,000 --> 00:08:22,000 μπορούμε να δούμε μια τυπική κάνει-ενώ όλα εκτύπωση loop out. 115 00:08:22,000 --> 00:08:25,000 Είδος την ουσία του προβλήματος αυτού ήταν να συνειδητοποιούν ότι 116 00:08:25,000 --> 00:08:29,000 που απαιτούνται για τη μετατροπή του πλωτήρα που μπορείτε να διαβάσετε μέσα από τον χρήστη σε ακέραιο 117 00:08:29,000 --> 00:08:32,000 να γίνει με ακρίβεια τα μαθηματικά, και αυτό οφείλεται στο γεγονός ότι 118 00:08:32,000 --> 00:08:36,000 με αριθμούς κινητής υποδιαστολής, όπως μιλήσαμε για λίγο σε διάλεξη, 119 00:08:36,000 --> 00:08:41,000 δεν είναι δυνατόν να αντιπροσωπεύουν με ακρίβεια την παραμικρή αξία για τον αριθμό γραμμής 120 00:08:41,000 --> 00:08:47,000 επειδή υπάρχουν απείρως πολλές τιμές μεταξύ 3 και, ας πούμε, 3,1 ακόμα. 121 00:08:47,000 --> 00:08:54,000 Μπορείτε να έχετε 3,01 και 3,001 και 3,0001, και μπορείτε να συνεχίσετε. 122 00:08:54,000 --> 00:09:00,000 Αποδεικνύεται κάθε φορά που εργάζεστε με τα χρήματα, που συχνά θέλετε να το μετατρέψετε 123 00:09:00,000 --> 00:09:05,000 σε ακέραια μορφή, έτσι ώστε δεν είστε χάσει τις πένες και τέτοιου είδους πράγματα. 124 00:09:05,000 --> 00:09:09,000 Να κάνει ότι και η στρογγυλοποίηση ήταν το κλειδί. 125 00:09:09,000 --> 00:09:14,000 Η λύση αυτή χρησιμοποιείται μια τέλεια απλή, μεγάλη αλγόριθμος, 126 00:09:14,000 --> 00:09:17,000 η οποία μειώνεται ο αριθμός των λεπτών που απομένει, πρώτα από τρίμηνα, 127 00:09:17,000 --> 00:09:19,000 έπειτα από δεκάρες, στη συνέχεια, από επινικελώνουν, στη συνέχεια, από τις πένες, 128 00:09:19,000 --> 00:09:24,000 και προσθέτοντας με τον αριθμό των κερμάτων κάθε φορά. 129 00:09:24,000 --> 00:09:31,000 >> Μια άλλη λύση που θα δούμε, όπως σμίκρυνση και να πάει στην αναθεώρηση 4, 130 00:09:31,000 --> 00:09:40,000 είχε μια πολύ παρόμοια αρχή, αλλά αντ 'αυτού χρησιμοποιείται div και mod 131 00:09:40,000 --> 00:09:44,000 δικαίωμα εδώ για να υπολογίσει τον αριθμό των λεπτών. 132 00:09:44,000 --> 00:09:50,000 Αυτό, ο αριθμός των τεταρτημορίων είναι ίσος με τον αριθμό των λεπτών διαιρούμενο με 25, 133 00:09:50,000 --> 00:09:53,000 και ο λόγος για αυτό είναι επειδή λειτουργεί κάνουμε διαίρεσης, 134 00:09:53,000 --> 00:09:58,000 έτσι είναι απορρίπτοντας κάθε υπόλοιπο. 135 00:09:58,000 --> 00:10:02,000 [Φοιτητικό] Έχουμε να σχολιάσει την έρευνα; 136 00:10:02,000 --> 00:10:05,000 Εξαρτάται πραγματικά. 137 00:10:05,000 --> 00:10:08,000 [Φοιτητικό] Είσαι σχολιάζοντας περισσότερο από ό, τι κώδικα εδώ. 138 00:10:08,000 --> 00:10:16,000 Ναι, και έτσι υπάρχουν ένα σωρό διαφορετικές φιλοσοφίες για το θέμα αυτό. 139 00:10:16,000 --> 00:10:21,000 Προσωπική φιλοσοφία μου είναι ότι ο κωδικός σας είναι πραγματικά η αλήθεια, 140 00:10:21,000 --> 00:10:24,000 όπως τον κωδικό σας είναι ό, τι είναι στην πραγματικότητα εκτελείται στον υπολογιστή, 141 00:10:24,000 --> 00:10:29,000 και έτσι κωδικός σας πρέπει να είναι όσο το δυνατόν περισσότερο αναγνώσιμη να μην απαιτήσει ως πολλά σχόλια. 142 00:10:29,000 --> 00:10:33,000 Τούτου λεχθέντος, όταν κάνετε πράγματα που είναι δύσκολο είδος μαθηματικά 143 00:10:33,000 --> 00:10:38,000 ή αλγοριθμικά, είναι καλό να σχολιάσει αυτές έτσι ώστε να μπορείτε να 144 00:10:38,000 --> 00:10:43,000 προσθέσετε μια επιπλέον διάσταση, ένα επιπλέον στρώμα σε όποιον διαβάζει τον κωδικό σας. 145 00:10:43,000 --> 00:10:49,000 Σε αυτές τις λύσεις, συχνά είναι πιο βαριά σχολίασε μόνο και μόνο επειδή 146 00:10:49,000 --> 00:10:52,000 θέλουμε να είμαστε σε θέση να τα διανείμουν και να έχουν οι άνθρωποι να τις παραλάβετε 147 00:10:52,000 --> 00:10:56,000 και να τους διαβάσει αρκετά εύκολα. 148 00:10:56,000 --> 00:11:05,000 Αλλά σίγουρα, θα συμφωνήσω ότι αυτό είναι βαρύ. 149 00:11:05,000 --> 00:11:07,000 [Φοιτητικό] Όμως, σε περίπτωση αμφιβολίας, να βαρύτερο; 150 00:11:07,000 --> 00:11:10,000 Σε περίπτωση αμφιβολίας, να βαρύτερο. 151 00:11:10,000 --> 00:11:17,000 Μερικοί άνθρωποι θα πουν μερικές φορές 0 Επιστροφή ή κάτι τέτοιο. 152 00:11:17,000 --> 00:11:20,000 Νομίζω ότι είναι ένα γελοίο σχόλιο. 153 00:11:20,000 --> 00:11:22,000 Είναι σαφές ότι αυτό είναι ό, τι συμβαίνει. 154 00:11:22,000 --> 00:11:25,000 Δεν χρειάζεται Ελληνικά να μου πει ότι. 155 00:11:25,000 --> 00:11:28,000 Μερικές φορές οι άνθρωποι θα γράψουν πράγματα όπως "kthxbai!" 156 00:11:28,000 --> 00:11:32,000 Αυτό είναι το είδος του χαριτωμένο, αλλά και μη- 157 00:11:32,000 --> 00:11:35,000 Αυτό δεν είναι που κάνουν τη διαφορά μεταξύ σχολιάζοντας τα σημεία ή όχι. 158 00:11:35,000 --> 00:11:41,000 Αυτά τα είδη των σχολίων είναι απλά χα, χα. 159 00:11:41,000 --> 00:11:43,000 Cool. 160 00:11:43,000 --> 00:11:48,000 >> Σε αυτό το σημείο, ας αρχίσουν να εργάζονται για το πρόβλημα Σετ 3 τμήμα των ερωτήσεων. 161 00:11:48,000 --> 00:11:52,000 Αν εσείς τραβήξει αυτό και πάλι, 162 00:11:52,000 --> 00:11:55,000 όπως με την προηγούμενη εβδομάδα, εμείς δεν πρόκειται να παρακολουθήσουν τα σορτς σε αυτή την ενότητα. 163 00:11:55,000 --> 00:12:00,000 Θα σας αφήσει να το κάνετε αυτό ρε παιδιά στον ελεύθερο χρόνο σας και να μιλήσουμε για τις ερωτήσεις. 164 00:12:00,000 --> 00:12:05,000 Τώρα, όμως, σε αυτή την ενότητα θα πάμε να περάσετε λίγο περισσότερο χρόνο 165 00:12:05,000 --> 00:12:11,000 μιλάμε για λιγότερο από τα βασικά κωδικοποίησης 166 00:12:11,000 --> 00:12:15,000 όπως κάναμε και την περασμένη εβδομάδα, και αντ 'αυτού, θα πάμε να επικεντρωθεί περισσότερο στην 167 00:12:15,000 --> 00:12:22,000 λίγο περισσότερο από τη θεωρία, έτσι μιλάμε για δυαδική αναζήτηση και στη συνέχεια, τη διαλογή. 168 00:12:22,000 --> 00:12:27,000 Από όσους από εσάς έχουν παρακολουθήσει μαζί με τη διάλεξη, 169 00:12:27,000 --> 00:12:30,000 μπορεί κάποιος να μου δώσει μια ανακεφαλαίωση του ποια είναι η διαφορά 170 00:12:30,000 --> 00:12:35,000 μεταξύ δυαδική αναζήτηση και γραμμική αναζήτηση; 171 00:12:35,000 --> 00:12:37,000 Τι συμβαίνει; Σίγουρα. 172 00:12:37,000 --> 00:12:42,000 Γραμμική αναζήτησης, μέσα από κάθε στοιχείο στην ταξινομημένη λίστα 173 00:12:42,000 --> 00:12:45,000 ένα-ένα από ένα προς ένα από μία, 174 00:12:45,000 --> 00:12:50,000 και δυαδική αναζήτηση χωρίζει τη λίστα σε 2 ομάδες, 175 00:12:50,000 --> 00:12:57,000 ελέγχει αν η τιμή κλειδιά που ψάχνετε για είναι μεγαλύτερη ή μικρότερη από την αξία μέσο 176 00:12:57,000 --> 00:13:00,000 που μόλις βρεθεί, αν και είναι λιγότερο από ό, τι, θα πάει με το χαμηλότερο λίστα 177 00:13:00,000 --> 00:13:03,000 και στη συνέχεια, κατανέμει ότι και πάλι, κάνει την ίδια λειτουργία 178 00:13:03,000 --> 00:13:07,000 όλος ο τρόπος κάτω μέχρι να βρει το μέσο να είναι ίση με την ίδια αξία. 179 00:13:07,000 --> 00:13:10,000 Δεξιά. 180 00:13:10,000 --> 00:13:12,000 >> Γιατί μας νοιάζει; 181 00:13:12,000 --> 00:13:20,000 Γιατί μιλάμε για δυαδική αναζήτηση σε σχέση με γραμμική αναζήτηση; 182 00:13:20,000 --> 00:13:22,000 Ναι. 183 00:13:22,000 --> 00:13:24,000 Binary είναι πολύ πιο γρήγορα, οπότε αν έχετε διπλασιάσει το μέγεθος του προβλήματος 184 00:13:24,000 --> 00:13:27,000 παίρνει ένα ακόμα βήμα παρά τα διπλάσια. 185 00:13:27,000 --> 00:13:29,000 Ακριβώς. 186 00:13:29,000 --> 00:13:31,000 Αυτό είναι μια μεγάλη απάντηση. 187 00:13:31,000 --> 00:13:36,000 Γραμμική αναζήτηση είναι πολύ επιλέγοντας ένα στοιχείο τη φορά, 188 00:13:36,000 --> 00:13:39,000 και όπως είδαμε από την πρώτη κιόλας ημέρα της διάλεξης 189 00:13:39,000 --> 00:13:42,000 όταν ο Δαβίδ πέρασε παράδειγμα τηλεφωνικό κατάλογο του 190 00:13:42,000 --> 00:13:45,000 και άρπαξαν από μια σελίδα του τηλεφωνικού καταλόγου σε ένα χρόνο 191 00:13:45,000 --> 00:13:47,000 και συνεχίσαμε να κάνουμε ότι ξανά και ξανά και ξανά, 192 00:13:47,000 --> 00:13:51,000 πρόκειται να τον πάρει ένα πραγματικά μεγάλο χρονικό διάστημα για να βρει κανείς στον τηλεφωνικό κατάλογο, 193 00:13:51,000 --> 00:13:55,000 εκτός αν, φυσικά, έψαχνε για κάποιον στην αρχή του αλφαβήτου. 194 00:13:55,000 --> 00:14:00,000 Με την δυαδική αναζήτηση, μπορείτε να πάτε πολύ πιο γρήγορα, 195 00:14:00,000 --> 00:14:05,000 και δεν είναι μόνο δύο φορές πιο γρήγορα ή 3 φορές πιο γρήγορα ή 4 φορές πιο γρήγορα. 196 00:14:05,000 --> 00:14:13,000 Αλλά το πρόβλημα γίνεται ολοένα και μικρότερο και μικρότερα πολύ γρηγορότερα. 197 00:14:13,000 --> 00:14:17,000 Για να φανεί αυτό, θα αρχίσουμε να μιλάμε για το τι συμβαίνει 198 00:14:17,000 --> 00:14:21,000 όταν γράφουμε δυαδική αναζήτηση. 199 00:14:21,000 --> 00:14:27,000 Το πρόβλημα στο χέρι είναι ότι αν έχω μια σειρά από αριθμούς, 200 00:14:27,000 --> 00:14:40,000 πούμε, 1, 2, 3, 5, 7, 23, 45, 78, 12323, 201 00:14:40,000 --> 00:14:47,000 και ακολούθως 9 με έναν τόνο των 0s μετά από αυτό, 202 00:14:47,000 --> 00:14:52,000 θέλουμε να είμαστε σε θέση να καταλάβω πολύ γρήγορα ό, τι είναι στην 203 00:14:52,000 --> 00:14:57,000 αυτή η σειρά των αριθμών. 204 00:14:57,000 --> 00:15:00,000 Ξέρω ότι αυτό φαίνεται λίγο ανόητο και λίγο σκηνοθετημένη, 205 00:15:00,000 --> 00:15:02,000 γιατί τώρα είναι. 206 00:15:02,000 --> 00:15:05,000 Έχουμε μια σειρά που δεν έχουν πολύ πολλά στοιχεία σε αυτό, 207 00:15:05,000 --> 00:15:08,000 αν και ζητώ από εσάς να καταλάβω αν ή όχι 208 00:15:08,000 --> 00:15:11,000 23 είναι στον πίνακα, μπορείτε να το κάνετε αυτό αρκετά γρήγορα 209 00:15:11,000 --> 00:15:16,000 μόνο με μια ματιά αυτό και να μου λέει ναι ή όχι. 210 00:15:16,000 --> 00:15:20,000 Το αναλογικό να εξετάσει το ενδεχόμενο να φανταστείτε αν αυτό ήταν, ας πούμε, 211 00:15:20,000 --> 00:15:27,000 ένα υπολογιστικό φύλλο Excel με 10.000 σειρές, 20.000 σειρές. 212 00:15:27,000 --> 00:15:31,000 Φυσικά, μπορείτε να κάνετε το F εντολή ή το F έλεγχο και να δούμε κάτι επάνω. 213 00:15:31,000 --> 00:15:33,000 Μπορείτε επίσης να χρησιμοποιήσετε τα φίλτρα και τα πράγματα αναζήτησης, 214 00:15:33,000 --> 00:15:37,000 αλλά αν έπρεπε να κοιτάξετε μέσα από αυτή τη γραμμή από το αρχείο γραμμή προς γραμμή, 215 00:15:37,000 --> 00:15:40,000 θα σας πάρει πολύ χρόνο για να το βρείτε. 216 00:15:40,000 --> 00:15:42,000 Είναι κάτι σαν το παράδειγμα τηλεφωνικό κατάλογο, επίσης, όπου 217 00:15:42,000 --> 00:15:44,000 κανείς δεν κοιτάζει μέσα από ένα βιβλίο σελίδα ένα τηλέφωνο σε μια στιγμή. 218 00:15:44,000 --> 00:15:47,000 Συνήθως, κάνουν την ανοίξετε στη μέση, 219 00:15:47,000 --> 00:15:50,000 ή στην περίπτωση πολλών βιβλίων και λεξικών τηλεφώνου όπου 220 00:15:50,000 --> 00:15:54,000 που πραγματικά έχουν πληκτρολογηθεί στο πρώτο γράμμα, 221 00:15:54,000 --> 00:16:01,000 μπορείτε να αναστρέψετε την πρώτη επιστολή και να ανοίξει και να αρχίσει να περάσει από εκεί. 222 00:16:01,000 --> 00:16:03,000 >> Υπενθυμίστε μου το όνομα σας. >> Sam πάλι. 223 00:16:03,000 --> 00:16:05,000 Sam. 224 00:16:05,000 --> 00:16:11,000 Όπως δήλωσε ο Σαμ, ότι γραμμική διαδικασία αναζήτησης θα είναι πολύ αργή, 225 00:16:11,000 --> 00:16:15,000 και αντ 'αυτού με δυαδική αναζήτηση, ο τρόπος με τον οποίο δουλεύει αυτό είναι ότι 226 00:16:15,000 --> 00:16:21,000 κάθε φορά που περνάμε από μια επανάληψη του αλγορίθμου μας αναζήτηση, 227 00:16:21,000 --> 00:16:27,000 θα πάμε να διαιρέσει τη λίστα κατά το ήμισυ, κατ 'ουσίαν, 228 00:16:27,000 --> 00:16:33,000 σε δύο μικρότερες λίστες. 229 00:16:33,000 --> 00:16:39,000 Και στη συνέχεια, στην επόμενη επανάληψη του βρόχου, θα το διαιρέσει και πάλι 230 00:16:39,000 --> 00:16:44,000 σε άλλες μικρότερες λίστες. 231 00:16:44,000 --> 00:16:48,000 Όπως μπορείτε να δείτε, το πρόβλημα συνεχίζει να παίρνει όλο και μικρότερα 232 00:16:48,000 --> 00:16:55,000 γιατί κρατήσουν το μισό απόρριψη της λίστας κάθε φορά. 233 00:16:55,000 --> 00:16:59,000 Πώς λειτουργεί αυτό απόρριψης; 234 00:16:59,000 --> 00:17:05,000 Ακριβώς όπως μια υπενθύμιση, τι θα πάμε να κάνουμε αν είχαμε έναν υπολογιστή 235 00:17:05,000 --> 00:17:11,000 και εμείς, ας πούμε, η αναζήτηση για τον αριθμό 5 σε αυτήν τη λίστα 236 00:17:11,000 --> 00:17:15,000 είναι ότι θα πάρει έναν αριθμό στη μέση. 237 00:17:15,000 --> 00:17:26,000 Στη μέση του καταλόγου αυτού, διότι υπάρχουν 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 αριθμοί, 238 00:17:26,000 --> 00:17:32,000 είχαμε πάρει τον αριθμό είτε στην 4η θέση ή στην 5η θέση, 239 00:17:32,000 --> 00:17:38,000 και εμείς θα την ονόμαζα τη μέση της λίστας μας. 240 00:17:38,000 --> 00:17:42,000 Διαλέξτε τον αριθμό στη μέση. 241 00:17:42,000 --> 00:17:51,000 Στη συνέχεια, όπως είπε ο Σαμ, θα δοκιμάσουμε για να δούμε αν ο αριθμός αυτός είναι ίσος 242 00:17:51,000 --> 00:17:59,000 με τον αριθμό που θέλετε να πάρετε ή επιθυμητό αριθμό μας. 243 00:17:59,000 --> 00:18:06,000 Αν είναι ίσες, τότε έχουμε βρει. Έχουμε κερδίσει. 244 00:18:06,000 --> 00:18:12,000 Αν δεν είναι ίσες, τότε υπάρχουν μια-δυο περιπτώσεις. 245 00:18:12,000 --> 00:18:15,000 Οι δύο περιπτώσεις είναι είτε ο αριθμός πρέπει να είναι μεγαλύτερος από τον αριθμό που ψάχνουμε σε, 246 00:18:15,000 --> 00:18:19,000 ή είναι λιγότερο από ό, τι. 247 00:18:19,000 --> 00:18:25,000 Αν είναι μεγαλύτερη, προχωράμε προς τα δεξιά. 248 00:18:25,000 --> 00:18:33,000 Και αν είναι λιγότερο, θα προχωρήσουμε προς τα αριστερά. 249 00:18:33,000 --> 00:18:41,000 Και τότε θα επαναλάβετε την όλη διαδικασία ξανά 250 00:18:41,000 --> 00:18:48,000 είτε στο δεξί ήμισυ ή το αριστερό ήμισυ του καταλόγου. 251 00:18:48,000 --> 00:18:51,000 >> Το πρώτο πρόβλημα σε τμήμα του σήμερα είναι να καταλάβουμε 252 00:18:51,000 --> 00:18:55,000 πώς μπορούμε πραγματικά να αρχίσει να εκφράσει αυτό σε κώδικα C. 253 00:18:55,000 --> 00:18:58,000 Έχουμε την ψευδοκώδικα εδώ. 254 00:18:58,000 --> 00:19:04,000 Τι θα αρχίσουν να κάνουν είναι ότι θα τραβήξει ένα ολοκαίνουργιο χώρο, 255 00:19:04,000 --> 00:19:09,000 αποθηκεύσετε αυτή την αναθεώρηση, ώστε να έχουμε αυτές τις σημειώσεις για αργότερα, 256 00:19:09,000 --> 00:19:20,000 θα διαγράψει όλα αυτά, και στη συνέχεια να αντιγράψετε και να επικολλήσετε από το σύνολο πρόβλημα 257 00:19:20,000 --> 00:19:26,000 η πληροφορία αυτή σε χώρους μας, και ελπίζω ότι αυτό δεν σπάσει. 258 00:19:26,000 --> 00:19:28,000 Τέλεια. 259 00:19:28,000 --> 00:19:33,000 Αν εσείς όλοι το κάνουμε αυτό, αντιγραφή και επικόλληση του κώδικα σε νέο χώρο σας, 260 00:19:33,000 --> 00:19:43,000 σε ένα κενό μία. 261 00:19:43,000 --> 00:19:47,000 Ας προσπαθήσουμε Δανιήλ. Εάν μεταγλωττίσετε και να εκτελέσετε αυτό το πρόγραμμα, δεν λειτουργεί; 262 00:19:47,000 --> 00:19:49,000 Όχι >> Τι να πω; 263 00:19:49,000 --> 00:19:53,000 Λέει ο έλεγχος φτάσει στο τέλος του μη-κενό λειτουργίας. 264 00:19:53,000 --> 00:19:55,000 Ναι, οπότε επιτρέψτε μου να προσπαθήσω τρέχει. 265 00:19:55,000 --> 00:19:59,000 Έχετε παιδιά ξαναδεί αυτό; Ξέρετε τι σημαίνει αυτό; 266 00:19:59,000 --> 00:20:01,000 Εντάξει, ας το αναλύσουμε αυτό λίγο. 267 00:20:01,000 --> 00:20:10,000 Είναι λέει στο file.c on line 9, στήλη 1 έχουμε ένα σφάλμα, όπως ακριβώς είπατε, 268 00:20:10,000 --> 00:20:16,000 και λέει ότι αυτό είναι που απορρέουν από την προειδοποίηση σφάλματος και την προειδοποίηση τύπο επιστροφής. 269 00:20:16,000 --> 00:20:18,000 Μοιάζει με κάτι συμβαίνει με τον τύπο επιστροφής, η οποία έχει νόημα. 270 00:20:18,000 --> 00:20:21,000 Έχουμε μια μη-κενό λειτουργία, πράγμα που σημαίνει ότι έχουμε μια συνάρτηση 271 00:20:21,000 --> 00:20:24,000 που δεν επιστρέφει κενό. 272 00:20:24,000 --> 00:20:27,000 Μία συνάρτηση είναι ένα κενό που μοιάζει με αυτό: 273 00:20:27,000 --> 00:20:35,000 άκυρη foo (), και είναι άκυρη, διότι ο τύπος επιστροφής είναι άκυρη, 274 00:20:35,000 --> 00:20:38,000 πράγμα που σημαίνει ότι αν είχαμε κάτι εδώ 275 00:20:38,000 --> 00:20:45,000 όπως η επιστροφή 1, είχαμε πάρει ένα σφάλμα μεταγλωττιστή για αυτό. 276 00:20:45,000 --> 00:20:49,000 Ωστόσο, έχουμε μια μη-άκυρη λειτουργία. 277 00:20:49,000 --> 00:20:51,000 Μη-κενό λειτουργία μας σε αυτή την περίπτωση είναι η λειτουργία αναζήτησης μας 278 00:20:51,000 --> 00:20:56,000 επειδή έχει ένα είδος επιστροφής του bool. 279 00:20:56,000 --> 00:20:59,000 Όταν λέει ότι ο έλεγχος φτάσει στο τέλος του ενός μη-κενού λειτουργία, 280 00:20:59,000 --> 00:21:02,000 αυτό συμβαίνει γιατί αναζήτησης δεν έχει εντολή return. 281 00:21:02,000 --> 00:21:04,000 Δεν είναι τίποτα επιστροφή του τύπου bool. 282 00:21:04,000 --> 00:21:09,000 >> Μπορούμε να ορίσουμε ότι, και τι σκέφτονται σας παιδιά 283 00:21:09,000 --> 00:21:13,000 αναζήτηση θα πρέπει να επιστρέψει από προεπιλογή; 284 00:21:13,000 --> 00:21:16,000 Ποια πρέπει να είναι η τιμή επιστροφής προεπιλογή της αναζήτησης; 285 00:21:16,000 --> 00:21:19,000 Διότι αυτό είναι που μπορούμε να βάλουμε στο τέλος. 286 00:21:19,000 --> 00:21:21,000 Charlotte, έχετε οποιαδήποτε-; 287 00:21:21,000 --> 00:21:23,000 Σωστό ή λάθος; >> Σωστό ή λάθος. 288 00:21:23,000 --> 00:21:26,000 Ποιο από τα δύο; 289 00:21:26,000 --> 00:21:28,000 Λάθος. Δεν ξέρω. 290 00:21:28,000 --> 00:21:30,000 Λάθος; Ας το προσπαθήσουμε. 291 00:21:30,000 --> 00:21:32,000 Γιατί θα λέγατε επιστροφή ψευδείς? Αυτό είναι μεγάλη διαίσθηση. 292 00:21:32,000 --> 00:21:35,000 [Charlotte] Δεν ξέρω. 293 00:21:35,000 --> 00:21:39,000 Εμείς πάμε για να επιστρέψει false σε αυτή την περίπτωση, γιατί αυτή θα είναι προεπιλεγμένη μας 294 00:21:39,000 --> 00:21:44,000 αν για κάποιο λόγο η λίστα είναι κενή ή η βελόνα 295 00:21:44,000 --> 00:21:46,000 ότι ψάχνουμε για δεν υπάρχει. 296 00:21:46,000 --> 00:21:50,000 Στη συνέχεια, στο τέλος, αν δεν επιστρέψει αλήθεια νωρίτερα σε αυτή τη λειτουργία, 297 00:21:50,000 --> 00:21:55,000 πάντα ξέρουμε ότι αυτή η λειτουργία θα πει nope, δεν είναι στον πίνακα. 298 00:21:55,000 --> 00:21:58,000 Δεν είναι στα άχυρα. 299 00:21:58,000 --> 00:22:03,000 Τώρα, αν θα μεταγλωττίσετε και να εκτελέσετε το-επιτρέψτε μου να σώσει αυτό, ώστε να μπορούμε να το σηκώσει. 300 00:22:03,000 --> 00:22:08,000 Τώρα, αν θα μεταγλώττιση και εκτέλεση του προγράμματος μας, χτίζει. 301 00:22:08,000 --> 00:22:12,000 Παίρνουμε λίγο προτροπή μας. 302 00:22:12,000 --> 00:22:20,000 Αν χτυπήσει 4-uh-oh. 303 00:22:20,000 --> 00:22:25,000 Δεν εκτυπώνει τίποτα. Μοιάζει με ό, τι τελείωσε καλά. 304 00:22:25,000 --> 00:22:35,000 Έχουμε να συμπληρώσετε αυτό μέσα 305 00:22:35,000 --> 00:22:39,000 Μιλήσαμε για τον αλγόριθμο σε ψευδοκώδικα λίγο πριν. 306 00:22:39,000 --> 00:22:44,000 Επιτρέψτε μου να δει, εκτός από αυτό, 307 00:22:44,000 --> 00:22:49,000 και εγώ θα τραβήξει ότι ο αλγόριθμος πίσω πάλι. 308 00:22:49,000 --> 00:22:51,000 Ας χτυπήσει αυτός ο τύπος. Όχι. 309 00:22:51,000 --> 00:22:58,000 Εκεί είναι. 310 00:22:58,000 --> 00:23:03,000 Πώς θα το κάνουμε αυτό; 311 00:23:03,000 --> 00:23:11,000 Τι θα ήταν μια καλή στρατηγική για την εκκίνηση αυτού του κώδικα; 312 00:23:11,000 --> 00:23:16,000 Θα πρέπει να επιλέξετε έναν αριθμό στη μέση. 313 00:23:16,000 --> 00:23:23,000 Πώς να πάρει έναν αριθμό στη μέση ενός πίνακα; 314 00:23:23,000 --> 00:23:25,000 Οποιεσδήποτε προτάσεις; 315 00:23:25,000 --> 00:23:27,000 [Φοιτητικό] strlen διαιρούμενο δια του 2. 316 00:23:27,000 --> 00:23:32,000 Strlen διαιρούμενο δια του 2. Αυτό είναι μία πολύ μεγάλη. 317 00:23:32,000 --> 00:23:35,000 Strlen έργα με ειδικές είδη συστοιχίες. 318 00:23:35,000 --> 00:23:38,000 Τι είδους πίνακες; 319 00:23:38,000 --> 00:23:44,000 String πίνακες, πίνακες χαρακτήρων. 320 00:23:44,000 --> 00:23:48,000 Είναι το ίδιο είδος της έννοιας που θέλουμε να ισχύουν, 321 00:23:48,000 --> 00:23:52,000 αλλά δεν μπορούμε να χρησιμοποιήσουμε strlen επειδή δεν έχουμε μια σειρά από χαρακτήρες. 322 00:23:52,000 --> 00:23:55,000 Έχουμε μια σειρά από χαρακτηριστικά της. 323 00:23:55,000 --> 00:23:58,000 Αλλά τι σημαίνει strlen πάρετε για μας; 324 00:23:58,000 --> 00:24:01,000 Ξέρετε τι παίρνει για μας; 325 00:24:01,000 --> 00:24:03,000 [Φοιτητικό] strlen μας παίρνει το μήκος. 326 00:24:03,000 --> 00:24:05,000 Ακριβώς, μας παίρνει το μήκος. 327 00:24:05,000 --> 00:24:09,000 Strlen παίρνει το μήκος της συστοιχίας για εμάς. 328 00:24:09,000 --> 00:24:14,000 >> Πώς θα πάρετε ότι στο πρόγραμμα δυαδική αναζήτηση μας; 329 00:24:14,000 --> 00:24:18,000 Πώς θα πάρετε το μήκος ενός πίνακα; 330 00:24:18,000 --> 00:24:20,000 [Φοιτητικό] strlen; 331 00:24:20,000 --> 00:24:25,000 Μπορείτε να πάρετε το μήκος μιας σωστή μορφή πίνακα συμβολοσειρών με C strlen. 332 00:24:25,000 --> 00:24:31,000 Το πρόβλημα, όμως, είναι ότι δεν έχουμε μια σειρά χορδών. 333 00:24:31,000 --> 00:24:36,000 Αν κοιτάξουμε πίσω σε αυτόν τον κώδικα, έχουμε αυτό το ακέραιο πίνακα. 334 00:24:36,000 --> 00:24:38,000 Πώς ξέρουμε πόσο καιρό είναι; 335 00:24:38,000 --> 00:24:44,000 [Φοιτητικό] Υπάρχει μια ισοδύναμη για τελικό σημείο, όπως int l ή κάτι άλλο; 336 00:24:44,000 --> 00:24:49,000 Αποδεικνύεται στην πραγματικότητα δεν είναι εκεί, και έτσι κατά κάποιο τρόπο, αυτό είναι 337 00:24:49,000 --> 00:24:52,000 ένα από εκείνα τα πράγματα που είναι απλά καλό να γνωρίζουμε για το C, 338 00:24:52,000 --> 00:24:57,000 ότι δεν υπάρχει τρόπος για να πάρετε το μήκος μιας συστοιχίας 339 00:24:57,000 --> 00:24:59,000 αν όλοι σας δίνω είναι η σειρά. 340 00:24:59,000 --> 00:25:02,000 Ο λόγος που λειτουργεί με χορδές, ο λόγος strlen έργα, 341 00:25:02,000 --> 00:25:06,000 οφείλεται στο γεγονός ότι αν ένα string έχει την κατάλληλη μορφή, 342 00:25:06,000 --> 00:25:12,000 θα έχουν αυτό το ιδιαίτερο \ 0 χαρακτήρας στο τέλος. 343 00:25:12,000 --> 00:25:16,000 >> Μπορείτε επίσης να φανταστείτε, εάν έχετε μια σωστά μορφοποιημένη συμβολοσειρά 344 00:25:16,000 --> 00:25:20,000 και δεν υπάρχει \ 0 χαρακτήρας εκεί, τότε το όλο πράγμα δεν λειτουργεί. 345 00:25:20,000 --> 00:25:22,000 [Φοιτητικό] Μπορείτε να προσθέσετε το \ 0; 346 00:25:22,000 --> 00:25:24,000 Θα μπορούσαμε στην περίπτωση αυτή. 347 00:25:24,000 --> 00:25:29,000 Θα μπορούσαμε να προσθέσουμε κάποια \ 0 348 00:25:29,000 --> 00:25:33,000 ή κάποιο είδος του χαρακτήρα που σηματοδοτεί και στη συνέχεια να χρησιμοποιήσετε αυτό. 349 00:25:33,000 --> 00:25:36,000 Αλλά αυτό δεν είναι αρκετά πρόκειται να λειτουργήσει 350 00:25:36,000 --> 00:25:40,000 επειδή το 0 \ είναι για έναν τύπο char, 351 00:25:40,000 --> 00:25:43,000 και εδώ έχουμε ints. 352 00:25:43,000 --> 00:25:46,000 Το άλλο πράγμα είναι εάν επρόκειτο να χρησιμοποιήσετε μια ειδική τιμή 353 00:25:46,000 --> 00:25:49,000 σαν -1 έως σηματοδοτήσει το τέλος ενός πίνακα 354 00:25:49,000 --> 00:25:54,000 τότε θα μπορούσαμε ποτέ να αποθηκεύσετε ένα ακέραιο -1 σε συστοιχίες μας. 355 00:25:54,000 --> 00:25:56,000 Θα ήθελα να κολλήσει. 356 00:25:56,000 --> 00:26:00,000 Αποδεικνύεται ότι ο μόνος τρόπος για να πάρει το μήκος 357 00:26:00,000 --> 00:26:03,000 ενός πίνακα σε C είναι να θυμόμαστε ότι στην πραγματικότητα 358 00:26:03,000 --> 00:26:08,000 όταν το ρυθμίσετε και στη συνέχεια να περάσει γύρω με την σειρά 359 00:26:08,000 --> 00:26:14,000 έτσι ώστε κάθε φορά που έχω μια λειτουργία που πρόκειται να κάνουν κάποια εργασία 360 00:26:14,000 --> 00:26:18,000 σε μια σειρά από ακέραιους αριθμούς ή πλωτήρες ή διπλασιάζεται ή ό, τι έχετε, 361 00:26:18,000 --> 00:26:22,000 Επίσης, πρέπει να δώσει το μήκος λειτουργία της συστοιχίας, 362 00:26:22,000 --> 00:26:26,000 και αυτό είναι ακριβώς ό, τι έχουμε κάνει εδώ στη λειτουργία αναζήτησης. 363 00:26:26,000 --> 00:26:30,000 Αν κοιτάξετε, τι έχουμε κάνει όταν περνάμε σε παράταξη μας εδώ, 364 00:26:30,000 --> 00:26:36,000 μπορούμε επίσης να περάσει το μήκος, το μέγεθος. 365 00:26:36,000 --> 00:26:41,000 Συμβαίνει ακριβώς ότι έχουμε αυτό που ονομάζεται μεταβλητή εδώ, 366 00:26:41,000 --> 00:26:43,000 αυτή η παράμετρος ή επιχείρημα. 367 00:26:43,000 --> 00:26:46,000 Αυτό ονομάζεται κατάλογος των argument μια λειτουργία ή λίστα παραμέτρων, 368 00:26:46,000 --> 00:26:51,000 και αυτά είναι που ονομάζεται επίσης τα επιχειρήματα ή τις παραμέτρους. 369 00:26:51,000 --> 00:26:53,000 Οι άνθρωποι χρησιμοποιούν διαφορετικούς όρους σε διαφορετικούς χρόνους. 370 00:26:53,000 --> 00:26:55,000 Μερικές φορές τον εαυτό μου να εναλλάσσονται. 371 00:26:55,000 --> 00:27:00,000 Συμβαίνει ότι αυτή η μεταβλητή εδώ ονομάζεται ομοίως 372 00:27:00,000 --> 00:27:03,000 σε αυτό το # define εδώ. 373 00:27:03,000 --> 00:27:06,000 Αλλά δεν είναι το ίδιο πράγμα. 374 00:27:06,000 --> 00:27:11,000 Η κεφαλαιοποίηση έχει σημασία. 375 00:27:11,000 --> 00:27:14,000 >> Αν κοιτάξουμε τι συμβαίνει εδώ, δηλώνουμε 376 00:27:14,000 --> 00:27:18,000 int σειρά μας, το οποίο έχουμε αριθμούς που καλέσατε. 377 00:27:18,000 --> 00:27:23,000 Έχουμε δώσει το μέγεθός μας, το οποίο αντιστοιχεί σε μας # define επάνω στην κορυφή. 378 00:27:23,000 --> 00:27:27,000 Είναι πρόκειται να είναι 8. 379 00:27:27,000 --> 00:27:35,000 Και στη συνέχεια, όταν λέμε συνέχεια, λειτουργία αναζήτησης μας κάτω, 380 00:27:35,000 --> 00:27:40,000 περνάμε στον αριθμό που θέλετε να αναζητήσετε, το οποίο έχουμε ζητηθεί, 381 00:27:40,000 --> 00:27:43,000 πάρει από το χρήστη. 382 00:27:43,000 --> 00:27:46,000 Περνάμε στη σειρά, αυτό αριθμούς, 383 00:27:46,000 --> 00:27:51,000 και στη συνέχεια πρέπει επίσης να περάσει στο μέγεθος του πίνακα, 384 00:27:51,000 --> 00:27:57,000 και στη συνέχεια η τιμή του μεγέθους 8 παίρνει αποθηκεύονται 385 00:27:57,000 --> 00:28:01,000 ή να περάσει σε αυτό που ονομάζεται ακέραιο μεταβλητό μέγεθος. 386 00:28:01,000 --> 00:28:08,000 Έχουμε το μέγεθος της συστοιχίας. 387 00:28:08,000 --> 00:28:11,000 Τώρα αν πάμε πίσω σε ό, τι μιλούσαμε για νωρίτερα, 388 00:28:11,000 --> 00:28:14,000 Νομίζω ότι Missy έφερε το σημείο ότι αυτό που χρειάζεται να κάνετε είναι να πάρετε το μήκος του πίνακα 389 00:28:14,000 --> 00:28:20,000 και το διαιρούμε με το 2, και ότι θα μας δώσει το μέσον. 390 00:28:20,000 --> 00:28:22,000 Ας δούμε. 391 00:28:22,000 --> 00:28:25,000 Μπορώ να έχω κάποιον γράψω αυτό και να το αποθηκεύσετε στο χώρο τους; 392 00:28:25,000 --> 00:28:27,000 Τι θα λέγατε για Leila; 393 00:28:27,000 --> 00:28:31,000 Μπορώ να σας έχουμε γράψει αυτό μέσα; 394 00:28:31,000 --> 00:28:35,000 Γράψτε την πρώτη γραμμή, όπου μπορείτε να το μήκος του πίνακα και να πάρει το μέσο 395 00:28:35,000 --> 00:28:41,000 και να το αποθηκεύσετε σε μια νέα μεταβλητή. 396 00:28:41,000 --> 00:28:44,000 Θα σας δώσω ένα ζευγάρι δευτερόλεπτα. Είστε έτοιμοι; 397 00:28:44,000 --> 00:28:46,000 [Φοιτητών ακούγεται] 398 00:28:46,000 --> 00:28:50,000 Σίγουρα, θα μπορούσα να έχετε υπολογίσει το μέσο 399 00:28:50,000 --> 00:28:55,000 του πίνακα άχυρα μέσα στο λειτουργία αναζήτησης 400 00:28:55,000 --> 00:29:03,000 χρησιμοποιώντας το μήκος της συστοιχίας άχυρα, το οποίο είναι η μεταβλητή μέγεθος; 401 00:29:03,000 --> 00:29:08,000 Τίποτα δεν είναι δύσκολο εδώ. 402 00:29:08,000 --> 00:29:12,000 [Leila] Ακριβώς το μέγεθος / 2 και μόνο- 403 00:29:12,000 --> 00:29:17,000 Και να το αποθηκεύσετε και πατήστε το κουμπί Αποθήκευση εδώ στην κορυφή, 404 00:29:17,000 --> 00:29:19,000 και εμείς θα το σηκώσει. 405 00:29:19,000 --> 00:29:22,000 Τέλεια. 406 00:29:22,000 --> 00:29:28,000 Εκεί πάμε. Awesome. 407 00:29:28,000 --> 00:29:30,000 >> Όπως είναι, θα καταρτίσει αυτό; 408 00:29:30,000 --> 00:29:32,000 [Leila] Όχι, δεν πρέπει να είναι υψηλότερο. 409 00:29:32,000 --> 00:29:34,000 [Nate] Ναι, έτσι τι πρέπει να κάνουμε; 410 00:29:34,000 --> 00:29:36,000 [Leila] Όπως int μέσο ή κάτι τέτοιο. 411 00:29:36,000 --> 00:29:41,000 Awesome. Ναι, ας το κάνουμε αυτό, int = μέσο μέγεθος. 412 00:29:41,000 --> 00:29:44,000 Αυτό θα συγκεντρώνουν; 413 00:29:44,000 --> 00:29:47,000 Ας διαγράψετε αυτό το σχόλιο και να το πάρετε από το δρόμο. 414 00:29:47,000 --> 00:29:50,000 Αυτό που δεν θα συγκεντρώσει γι 'αυτό; 415 00:29:50,000 --> 00:29:52,000 Εμείς δεν κάνουμε τίποτα με ακέραιο αριθμό, 416 00:29:52,000 --> 00:29:55,000 έτσι πρέπει να το εκτυπώσετε ή κάτι τέτοιο. 417 00:29:55,000 --> 00:29:58,000 Ναι, ακριβώς. 418 00:29:58,000 --> 00:30:00,000 Θα πάρετε μια μεταβλητή αχρησιμοποίητο. 419 00:30:00,000 --> 00:30:02,000 Τι άλλο δεν πρόκειται να λειτουργήσει γι 'αυτό; 420 00:30:02,000 --> 00:30:06,000 Νομίζω ότι είπατε κάτι, Σαμ. Ερωτηματικά. 421 00:30:06,000 --> 00:30:08,000 Ναι, είμαι λείπουν τα ερωτηματικά. 422 00:30:08,000 --> 00:30:14,000 Είναι πρόκειται να είναι ένα σταθερό πράγμα καθ 'όλη τη διάρκεια του χρόνου. 423 00:30:14,000 --> 00:30:17,000 Το τελευταίο πράγμα που θα κάνω είναι θα βάλω κάποιο κενό χώρο και στις δύο πλευρές 424 00:30:17,000 --> 00:30:23,000 του εν λόγω φορέα εκμετάλλευσης εδώ, αφού αυτό είναι συνήθως το πώς μπορούμε να το κάνουμε 425 00:30:23,000 --> 00:30:26,000 σύμφωνα με τον οδηγό στυλ μας. 426 00:30:26,000 --> 00:30:29,000 Έχουμε το μέσο του πίνακα μας. 427 00:30:29,000 --> 00:30:32,000 Τώρα, αν θυμηθούμε ξανά τον αλγόριθμο μας, 428 00:30:32,000 --> 00:30:37,000 ό, τι ήταν το δεύτερο βήμα που έπρεπε να κάνουμε όταν έχουμε το μέσο; 429 00:30:37,000 --> 00:30:42,000 [Φοιτητικό] Αν είναι μεγαλύτερη [δεν ακούγεται]. 430 00:30:42,000 --> 00:30:48,000 Ναι, έτσι πρέπει να κάνουμε κάποια σύγκριση, και τι είμαστε συγκρίνοντας εδώ; 431 00:30:48,000 --> 00:30:53,000 Είπατε, εάν είναι μεγαλύτερη από ό, τι. Τι είναι αυτό στο εν λόγω πρόταση αναφέρεστε; 432 00:30:53,000 --> 00:30:57,000 Ο αριθμός που εμφανίζεται, αν αυτό είναι μεγαλύτερο από το μέσο, ​​τότε πηγαίνετε μέχρι τη σειρά; 433 00:30:57,000 --> 00:31:05,000 Ακριβώς, έτσι ώστε ο αριθμός που εμφανίζεται όταν- 434 00:31:05,000 --> 00:31:10,000 Η βελόνα, έτσι είμαστε σε σύγκριση με τη βελόνα, 435 00:31:10,000 --> 00:31:12,000 και τι μπορούμε κατά τη σύγκριση της βελόνας; 436 00:31:12,000 --> 00:31:15,000 Επειδή η βελόνα είναι αυτό που ψάχνουμε. 437 00:31:15,000 --> 00:31:18,000 Είμαστε σε σύγκριση με το να φτάσετε στο μέσον. 438 00:31:18,000 --> 00:31:21,000 >> Αλλά δεν έχει νόημα να ελέγξετε 439 00:31:21,000 --> 00:31:27,000 αν βελόνα = μέσο; 440 00:31:27,000 --> 00:31:32,000 Μήπως αυτό έχει νόημα; 441 00:31:32,000 --> 00:31:35,000 Πιστεύει κανείς διαφωνείτε; 442 00:31:35,000 --> 00:31:40,000 Ας δώσει μια δοκιμή, αν (βελόνα μέσο ==). 443 00:31:40,000 --> 00:31:42,000 [Φοιτητικό] Μην printf το βρήκατε. 444 00:31:42,000 --> 00:31:51,000 [Nate] printf ("βρήκαμε \ n")? 445 00:31:51,000 --> 00:31:56,000 Διαφορετικά-Πάω να αρχίσουν να κάνουν κάτι διαφορετικό εδώ. 446 00:31:56,000 --> 00:32:00,000 Πάω να αρχίσει η εφαρμογή τιράντες γύρω δηλώσεις αν όλη την ώρα 447 00:32:00,000 --> 00:32:05,000 μόνο και μόνο επειδή αν προσθέσουμε περισσότερα πράγματα, τότε 448 00:32:05,000 --> 00:32:07,000 δεν παίρνουμε τα μεταγλωττιστές. 449 00:32:07,000 --> 00:32:09,000 Ναι, Σαμ. Έχεις ένα σημείο. 450 00:32:09,000 --> 00:32:12,000 Το πρόβλημα είναι ότι το μεσαίο σημείο παριστά μια θέση στη συστοιχία, 451 00:32:12,000 --> 00:32:15,000 αλλά μπορείτε να το πάρετε για να αντιπροσωπεύουν την αξία σε αυτή τη θέση του πίνακα. 452 00:32:15,000 --> 00:32:17,000 Αυτό είναι ένα μεγάλο σημείο. 453 00:32:17,000 --> 00:32:19,000 Μήπως όλοι ακούσει τι είπε ο Σαμ; 454 00:32:19,000 --> 00:32:22,000 Είπε ότι είναι ως μέσο 455 00:32:22,000 --> 00:32:28,000 αντιπροσωπεύει μόνο μια θέση στη συστοιχία, αλλά δεν είναι το πραγματικό στοιχείο στη συστοιχία. 456 00:32:28,000 --> 00:32:30,000 Εάν σκέφτεστε για τον κώδικα όπως γράφεται τώρα, 457 00:32:30,000 --> 00:32:35,000 εάν κοιτάξουμε αυτό εδώ κάτω σειρά, το οποίο έχει 8 στοιχεία σε αυτό, 458 00:32:35,000 --> 00:32:39,000 ποια είναι η αξία του μέσου σημείου θα είναι σε αυτή τη λειτουργία; 459 00:32:39,000 --> 00:32:41,000 [Φοιτητικό] 4. 460 00:32:41,000 --> 00:32:45,000 [Nate] 4. 461 00:32:45,000 --> 00:32:51,000 Αν κοιτάξουμε τον αριθμό 4 - 462 00:32:51,000 --> 00:32:54,000 και μπορούμε να τρέξουμε μόνο αυτόν τον κώδικα και να θέσει ένα μικρό θλιμμένο πρόσωπο εδώ 463 00:32:54,000 --> 00:32:58,000 γιατί δεν το βρείτε, αν εκτελέσετε αυτόν τον κώδικα 464 00:32:58,000 --> 00:33:04,000 όπως είναι τώρα, το φόρτωμα, κτίριο, επιτρέψτε μου να μετακινηθείτε προς τα κάτω, 465 00:33:04,000 --> 00:33:09,000 και αν κοιτάξουμε για τον αριθμό 4, 466 00:33:09,000 --> 00:33:18,000 το βρήκαμε, αλλά δεν πήραμε αυτό να printf ναι. 467 00:33:18,000 --> 00:33:23,000 Ένας λόγος είναι ότι δεν είχαμε επιστρέψει αλήθεια, 468 00:33:23,000 --> 00:33:26,000 αλλά δεν έχουμε βρει πραγματικά τον αριθμό 4; 469 00:33:26,000 --> 00:33:28,000 Και ο Σαμ λέει όχι. 470 00:33:28,000 --> 00:33:31,000 Τι θα βρούμε; 471 00:33:31,000 --> 00:33:35,000 Βρήκαμε πολύ το μέσο, ​​το οποίο, αν κοιτάξουμε την σειρά εδώ κάτω, 472 00:33:35,000 --> 00:33:38,000 πρόκειται να είναι το στοιχείο στο δείκτη 4 ότι ψάχνουμε σε, 473 00:33:38,000 --> 00:33:42,000 η οποία είναι 23. 474 00:33:42,000 --> 00:33:46,000 >> Πώς να πάρει πραγματικά αυτό το στοιχείο στο μέσο 475 00:33:46,000 --> 00:33:48,000 και όχι μόνο το ίδιο το μέσο; 476 00:33:48,000 --> 00:33:52,000 [Φοιτητικό] Θα τεθεί char ή κάτι άλλο; 477 00:33:52,000 --> 00:33:55,000 Τι θα που κάνουν, απλά από περιέργεια; 478 00:33:55,000 --> 00:33:57,000 Μπορείτε να επεκταθείτε λίγο περισσότερο; 479 00:33:57,000 --> 00:34:02,000 Θα πρέπει να μετατρέψει τη θέση στον αριθμό, 480 00:34:02,000 --> 00:34:05,000 έτσι έχετε να κάνετε κάποια σχέση, νομίζω ότι είναι char, αλλά δεν θα μπορούσε να είναι. 481 00:34:05,000 --> 00:34:07,000 Ναι, αυτό είναι ένα καλό σημείο. 482 00:34:07,000 --> 00:34:12,000 Έχουμε ήδη κάνει πολλά αυτού μετατροπή θέσεων σε χαρακτήρες, οι χαρακτήρες, 483 00:34:12,000 --> 00:34:14,000 στις πρώτες δύο σύνολα πρόβλημα. 484 00:34:14,000 --> 00:34:18,000 Αποδεικνύεται ότι εδώ, αυτό είναι σχεδόν παρόμοια με 485 00:34:18,000 --> 00:34:24,000 την πρόσβαση του i-χαρακτήρα μέσα σε ένα string, αν αυτό έχει νόημα. 486 00:34:24,000 --> 00:34:30,000 Εδώ θέλουμε να έχουν πρόσβαση στο στοιχείο μέσο. 487 00:34:30,000 --> 00:34:34,000 Πώς θα το κάνουμε αυτό; 488 00:34:34,000 --> 00:34:39,000 Κέβιν, δεν έχετε προτάσεις για το πώς θα μπορούσαμε να το κάνουμε αυτό; 489 00:34:39,000 --> 00:34:44,000 Θα μπορούσατε να κάνετε άχυρα, ανοιχτό βραχίονα, τα μέσα, έκλεισε βραχίονα. 490 00:34:44,000 --> 00:34:46,000 Μπορείτε να γράψετε ότι για μας; 491 00:34:46,000 --> 00:34:51,000 Αποθήκευση στο εδώ, και θα τραβήξει αυτό επάνω. 492 00:34:51,000 --> 00:34:56,000 Ψάχνουμε σε αυτή τη γραμμή 9, 493 00:34:56,000 --> 00:34:59,000 και είμαστε συνειδητοποιούν ότι δεν θέλουμε να συγκρίνουμε τη βελόνα στο μέσο, 494 00:34:59,000 --> 00:35:03,000 αλλά αντίθετα, θέλουμε να συγκρίνουμε τη βελόνα 495 00:35:03,000 --> 00:35:07,000 στο στοιχείο στο μέσο θέση εντός συστοιχίας άχυρα μας. 496 00:35:07,000 --> 00:35:10,000 Cool. 497 00:35:10,000 --> 00:35:12,000 Εκεί πάμε. 498 00:35:12,000 --> 00:35:15,000 Ναι, αυτό φαίνεται αρκετά καλό, αν (βελόνα στ 'άχυρα == [μέσο]). 499 00:35:15,000 --> 00:35:18,000 Το βρήκαμε. 500 00:35:18,000 --> 00:35:22,000 Τώρα, αν τρέξουμε τον κώδικα-we'll back up λίγο- 501 00:35:22,000 --> 00:35:26,000 να συγκεντρώνει, να τρέχει, και τώρα αν κοιτάξουμε για 4, 502 00:35:26,000 --> 00:35:30,000 εμείς δεν το βρείτε, γιατί τώρα είμαστε πραγματικά να πάρει τον αριθμό 23. 503 00:35:30,000 --> 00:35:33,000 Παίρνουμε την αξία 23, και αυτό είναι ό, τι είμαστε σε σύγκριση με βελόνα μας. 504 00:35:33,000 --> 00:35:35,000 Αλλά αυτό είναι καλό. Αυτό είναι ένα βήμα προς τη σωστή κατεύθυνση. 505 00:35:35,000 --> 00:35:37,000 >> Αυτό είναι που προσπαθούμε να κάνουμε. 506 00:35:37,000 --> 00:35:40,000 Εμείς δεν προσπαθούμε να συγκρίνουμε τη βελόνα κατά θέσεις στον πίνακα 507 00:35:40,000 --> 00:35:44,000 αλλά μάλλον εναντίον των πραγματικών στοιχείων της συστοιχίας. 508 00:35:44,000 --> 00:35:49,000 Αν κοιτάξουμε πίσω πάλι τώρα στο επόμενο βήμα στον αλγόριθμο μας, 509 00:35:49,000 --> 00:35:51,000 ποιο είναι το επόμενο βήμα; 510 00:35:51,000 --> 00:35:57,000 Leila αναφέρθηκε ήδη εν συντομία. 511 00:35:57,000 --> 00:36:00,000 [Φοιτητικό] Ελέγξτε για να δείτε αν είναι μεγαλύτερο ή μικρότερο από ό, τι και στη συνέχεια να αποφασίσει ποια κατεύθυνση να κινηθεί. 512 00:36:00,000 --> 00:36:03,000 [Nate] Ναι, έτσι πώς θα το κάνουμε αυτό; 513 00:36:03,000 --> 00:36:07,000 Μπορείτε να βάλετε σε κάποια-Θα αποθηκεύσετε αυτή την αναθεώρηση, 514 00:36:07,000 --> 00:36:13,000 και στη συνέχεια, αν βάλετε σε ορισμένες γραμμές που θα το κάνει αυτό. 515 00:36:13,000 --> 00:36:15,000 Ναι, Σαρλότ. >> Έχω μια ερώτηση. 516 00:36:15,000 --> 00:36:19,000 Δεν θα έπρεπε να είναι κεντρικό σημείο - 1, διότι το πρώτο πράγμα είναι 517 00:36:19,000 --> 00:36:26,000 αυτό είναι 0 ευρετήριο, έτσι αν βάλουμε 4, που δεν είναι στην πραγματικότητα ο χαρακτήρας που ψάχνουμε; 518 00:36:26,000 --> 00:36:30,000 Ναι, και το άλλο πρόβλημα με αυτό είναι- 519 00:36:30,000 --> 00:36:35,000 αυτό είναι ένα μεγάλο αλιευμάτων, γιατί ό, τι πρόκειται να καταλήξετε πιθανώς συμβαίνει 520 00:36:35,000 --> 00:36:42,000 αν θέλουμε να προχωρήσουμε και εμείς ποτέ δεν ρυθμίσετε αρχικά; 521 00:36:42,000 --> 00:36:46,000 Υποθέτω ότι αυτό που θα μπορούσε να καταλήξει να κάνει προσπαθεί να αποκτήσει πρόσβαση 522 00:36:46,000 --> 00:36:49,000 το στοιχείο κατά την 8η θέση της συστοιχίας, 523 00:36:49,000 --> 00:36:53,000 η οποία σε αυτή την περίπτωση δεν υπάρχει. 524 00:36:53,000 --> 00:36:56,000 Θα θέλετε να κάνετε κάποιο είδος της λογιστικής για το γεγονός 525 00:36:56,000 --> 00:36:59,000 ότι έχουμε κάποια μηδέν ευρετηρίαση. 526 00:36:59,000 --> 00:37:05,000 [Charlotte] Συγνώμη, εννοούσα μέσο - 1 στις αγκύλες. 527 00:37:05,000 --> 00:37:08,000 Μπορούμε να το κάνουμε αυτό. 528 00:37:08,000 --> 00:37:10,000 Θα επανέλθουμε στο θέμα αυτό σε μόλις ένα κομμάτι. 529 00:37:10,000 --> 00:37:13,000 Μόλις αρχίζουμε να φτάσουμε στην πραγματική looping, 530 00:37:13,000 --> 00:37:16,000 ότι όταν θα δείτε πραγματικά αυτό μπαίνουν στο παιχνίδι. 531 00:37:16,000 --> 00:37:21,000 Προς το παρόν, μπορούμε να το κάνουμε αυτό, αλλά είσαι εντελώς δεξιά. 532 00:37:21,000 --> 00:37:28,000 Ότι η μηδενική ευρετηρίαση θα έχουν επίδραση ότι πρέπει να αντιπροσωπεύουν. 533 00:37:28,000 --> 00:37:30,000 Ας δούμε. 534 00:37:30,000 --> 00:37:34,000 >> Πώς είναι η μεγαλύτερη από και μικρότερη από-; 535 00:37:34,000 --> 00:37:36,000 [Φοιτητικό] παίρνω το πώς να κάνει το μεγαλύτερο και μικρότερο μέρος. 536 00:37:36,000 --> 00:37:41,000 Απλά δεν ήταν σίγουρος τι να εκτυπώσετε αν διαπιστώσετε ότι είναι μικρότερο από το μέσο άχυρα ή μεγαλύτερη από ό, τι. 537 00:37:41,000 --> 00:37:43,000 Εδώ μπορώ να σώσει ό, τι I've- 538 00:37:43,000 --> 00:37:47,000 [Nate] Ναι, αν μπορείτε να αποθηκεύσετε ό, τι έχετε, και θα το σηκώσει. 539 00:37:47,000 --> 00:37:49,000 Εκεί πάμε. 540 00:37:49,000 --> 00:37:51,000 [Φοιτητικό] Και έβαλα ερωτηματικά για το τι δεν ήξερα. 541 00:37:51,000 --> 00:37:54,000 [Nate] Αυτό φαίνεται μεγάλη. 542 00:37:54,000 --> 00:37:58,000 Εδώ έχουμε ερωτηματικά, γιατί ακόμα δεν γνωρίζουμε 543 00:37:58,000 --> 00:38:06,000 τι θα πάμε να κάνουμε ακόμη αρκετά. 544 00:38:06,000 --> 00:38:12,000 Τι θα θέλουμε να κάνουμε-ουπς, έχουμε κάποια στηρίγματα για όλα τα funky μας. 545 00:38:12,000 --> 00:38:15,000 Θα διορθώσει αυτά τα σιδεράκια. 546 00:38:15,000 --> 00:38:19,000 Εκεί πάμε. 547 00:38:19,000 --> 00:38:22,000 Και έτσι αυτό που θέλουμε να κάνουμε, σύμφωνα με τον αλγόριθμο μας, 548 00:38:22,000 --> 00:38:27,000 αν δεν βρούμε τη βελόνα; 549 00:38:27,000 --> 00:38:32,000 Πείτε σε περίπτωση που η βελόνα είναι μικρότερη από ό, τι ψάχνουμε σε. Kevin. 550 00:38:32,000 --> 00:38:34,000 Μόνο ματιά στο αριστερό μισό. 551 00:38:34,000 --> 00:38:40,000 Σωστά, έτσι θα βάλουμε ένα σχόλιο εδώ που λέει "κοιτάξτε στο αριστερό μισό." 552 00:38:40,000 --> 00:38:46,000 Και αν η βελόνα είναι μεγαλύτερη από ό, τι στ 'άχυρα στο μέσον, τι θέλουμε να κάνουμε; 553 00:38:46,000 --> 00:38:48,000 [Φοιτητικό] Στη συνέχεια θα εξετάσουμε το δεξί μισό. 554 00:38:48,000 --> 00:38:53,000 Κοιτάξτε το δεξί μισό, "ματιά στο δεξιό μισό." 555 00:38:53,000 --> 00:38:58,000 Not too shabby. 556 00:38:58,000 --> 00:39:05,000 Εντάξει, έτσι σε αυτό το σημείο, τα πράγματα φαίνονται αρκετά καλά. 557 00:39:05,000 --> 00:39:13,000 Το πρόβλημα με τον κώδικα όπως είναι γραμμένο αυτό; 558 00:39:13,000 --> 00:39:15,000 [Φοιτητικό] Δεν έχουν τελικά σημεία για τα μισά. 559 00:39:15,000 --> 00:39:18,000 Σωστά, δεν έχουμε τελικά σημεία για τα μισά. 560 00:39:18,000 --> 00:39:20,000 Επίσης, είναι μόνο πρόκειται να περάσει μέσα από αυτό μια φορά. 561 00:39:20,000 --> 00:39:23,000 Είμαστε μόνο πρόκειται να δούμε σε ένα κεντρικό σημείο. 562 00:39:23,000 --> 00:39:27,000 Είτε το στοιχείο δεν υπάρχει, ή δεν είναι. 563 00:39:27,000 --> 00:39:34,000 Για να ολοκληρώσει αυτό, θα χρειαστεί να κάνετε κάποια επανάληψη. 564 00:39:34,000 --> 00:39:39,000 Πρέπει να το επαναλαμβάνουμε μέχρι να βρούμε ότι 565 00:39:39,000 --> 00:39:43,000 είτε το στοιχείο είναι εκεί, διότι έχουμε περιοριστεί και τελικά το βρήκε, 566 00:39:43,000 --> 00:39:46,000 ή δεν είναι εκεί επειδή έχουμε εξετάσει με όλα τα πράγματα 567 00:39:46,000 --> 00:39:52,000 στις κατάλληλες μισά της συστοιχίας και διαπίστωσε ότι τίποτα δεν είναι εκεί μέσα. 568 00:39:52,000 --> 00:39:56,000 >> Κάθε φορά που έχουμε αυτή την επανάληψη συμβαίνει, τι πρόκειται να χρησιμοποιήσετε; 569 00:39:56,000 --> 00:39:58,000 [Φοιτητικό] Ένας βρόχος. 570 00:39:58,000 --> 00:40:00,000 Κάποιο είδος βρόχου. Ναι. 571 00:40:00,000 --> 00:40:03,000 [Φοιτητικό] Μπορούμε να κάνουμε μια do-while loop και να το κάνουμε αυτό και στη συνέχεια, ενώ 572 00:40:03,000 --> 00:40:10,000 η βελόνα δεν είναι ίσο-σίγουρα όπου πήγαινα με αυτό. 573 00:40:10,000 --> 00:40:18,000 Αλλά κάτι σαν το κάνουμε αυτό όσο δεν ισούται με την αξία που η παρέμβαση του χρήστη. 574 00:40:18,000 --> 00:40:21,000 Ναι, γι 'αυτό ας δούμε, πώς θα μπορούσε να γράψει αυτό το ίδιο; 575 00:40:21,000 --> 00:40:23,000 Είπατε ας χρησιμοποιήσουμε ένα do-while loop. 576 00:40:23,000 --> 00:40:26,000 Σε περίπτωση που δεν το κάνει εκκίνηση; 577 00:40:26,000 --> 00:40:33,000 [Φοιτητικό] Αμέσως μετά από το μέγεθος / 2. 578 00:40:33,000 --> 00:40:42,000 [Nate] Εντάξει, και τι θα κάνουμε; 579 00:40:42,000 --> 00:40:44,000 Θα συμπληρώσετε το λίγο αργότερα. 580 00:40:44,000 --> 00:40:46,000 Τι θα κάνουμε; 581 00:40:46,000 --> 00:40:49,000 [Φοιτητικό] Μην θέλουμε να κάνουμε όλα τα πράγματα που έχουμε στην περίπτωση που τμήμα; 582 00:40:49,000 --> 00:40:52,000 [Nate] Μήπως όλα αυτά τα πράγματα, μεγάλη. 583 00:40:52,000 --> 00:40:55,000 Αντιγραφής και επικόλλησης. 584 00:40:55,000 --> 00:40:59,000 Ω, ο άνθρωπος. 585 00:40:59,000 --> 00:41:03,000 Ας δούμε αν αυτό λειτουργεί, αν μπορούμε να την καρτέλα πάνω. 586 00:41:03,000 --> 00:41:08,000 Όμορφη. 587 00:41:08,000 --> 00:41:16,000 Εντάξει, και εμείς να σώσει αυτό, έτσι ώστε να παιδιά να έχουν. 588 00:41:16,000 --> 00:41:21,000 Εντάξει, και πρόκειται να το κάνουμε αυτό, ενώ- 589 00:41:21,000 --> 00:41:25,000 ποια ήταν η κατάσταση, ενόσω ήσασταν μετά; 590 00:41:25,000 --> 00:41:31,000 [Φοιτητικό] Ενώ η βελόνα δεν ισούται, έτσι όπως το θαυμαστικό. 591 00:41:31,000 --> 00:41:37,000 Αλλά δεν είμαι σίγουρος τι ακριβώς ότι είναι ακόμη. 592 00:41:37,000 --> 00:41:39,000 [Nate] Ναι, αυτός είναι ένας τρόπος για να το κάνει. 593 00:41:39,000 --> 00:41:41,000 Sam, έχετε κάποιο σχόλιο; 594 00:41:41,000 --> 00:41:43,000 [Sam] θυμήθηκα όταν είδα το βίντεο, 595 00:41:43,000 --> 00:41:48,000 Πήρα ένα screenshot από μία από τις-όπως όταν κάναμε τον ψευδοκώδικα για αυτό, 596 00:41:48,000 --> 00:41:52,000 υπήρχε κάποια σχέση μεταξύ max και min. 597 00:41:52,000 --> 00:41:58,000 Νομίζω ότι ήταν κάτι σαν max αν είναι ποτέ λιγότερο από λεπτό. 598 00:41:58,000 --> 00:42:00,000 Πήρε αυτό. 599 00:42:00,000 --> 00:42:04,000 [Sam] Ή αν θέλετε max δεν είναι λιγότερο από λεπτό ή κάτι τέτοιο, 600 00:42:04,000 --> 00:42:06,000 γιατί αυτό θα σήμαινε ότι έχετε ψάξει τα πάντα. 601 00:42:06,000 --> 00:42:13,000 >> Ναι, ναι, τι σημαίνει αυτό ακούγεται σαν max και min αναφέρονταν; 602 00:42:13,000 --> 00:42:16,000 [Sam] Οι τιμές που-ακέραιοι που πρόκειται να αλλάξει 603 00:42:16,000 --> 00:42:18,000 σε σχέση με την οποία βάζουμε το μέσο. 604 00:42:18,000 --> 00:42:20,000 Ακριβώς. 605 00:42:20,000 --> 00:42:24,000 [Sam] Σε εκείνο το σημείο, πρόκειται να [δεν ακούγεται] υπολογίζει το max και min. 606 00:42:24,000 --> 00:42:29,000 Μέσο είναι το max και min ιδέα. 607 00:42:29,000 --> 00:42:35,000 Μήπως αυτό έχει νόημα για τους λαούς; 608 00:42:35,000 --> 00:42:39,000 Αν επρόκειτο να αρχίσει να ψάχνει το πώς θα πάμε να κάνουμε αυτή την επανάληψη, 609 00:42:39,000 --> 00:42:43,000 είστε απόλυτα σωστό ότι θέλουμε να χρησιμοποιήσουμε κάποιο είδος του do-while loop. 610 00:42:43,000 --> 00:42:49,000 Αλλά υποθέτω ότι αν θυμηθούμε τι συμβαίνει στο σημείο αυτού του πίνακα 611 00:42:49,000 --> 00:42:53,000 και τι πραγματικά συμβαίνει-Πάω να γράψω εδώ- 612 00:42:53,000 --> 00:42:58,000 κατά την πρώτη επανάληψη της δυαδικής αναζήτησης, έχουμε- 613 00:42:58,000 --> 00:43:05,000 Πάω να χρησιμοποιήσετε β και ε, η οποία χαρακτηρίζει την αρχή. 614 00:43:05,000 --> 00:43:10,000 Και μετά το τέλος του πίνακα μας. 615 00:43:10,000 --> 00:43:14,000 Γνωρίζουμε ότι η αρχή είναι 4 δεξιά πάνω από εδώ, 616 00:43:14,000 --> 00:43:18,000 και γνωρίζουμε ότι το τέλος είναι στο 108. 617 00:43:18,000 --> 00:43:23,000 Πείτε μας ψάχνετε για τον αριθμό 15. 618 00:43:23,000 --> 00:43:27,000 Την πρώτη φορά που το κάνουμε αυτό, όπως είδαμε νωρίτερα, 619 00:43:27,000 --> 00:43:30,000 το μέσο είναι είτε πρόκειται να είναι 16 ή 23 620 00:43:30,000 --> 00:43:34,000 ανάλογα με το πώς υπολογίζουμε τα πράγματα. 621 00:43:34,000 --> 00:43:37,000 Από τη διαίρεση ομοιόμορφα στη μέση θα μας δώσει αυτό το διάστημα 622 00:43:37,000 --> 00:43:42,000 μεταξύ 16 και 23, δεν μπορούμε να το διαιρέσετε ομοιόμορφα 623 00:43:42,000 --> 00:43:47,000 ή να διαιρέσει και να πάρετε σε ένα πραγματικό μέσο. 624 00:43:47,000 --> 00:43:49,000 Θα εξετάσουμε σε 16. 625 00:43:49,000 --> 00:43:55,000 Θα συνειδητοποιήσετε "Hey, 16> 15 ότι ψάχνουμε." 626 00:43:55,000 --> 00:43:59,000 Για να δούμε στη συνέχεια, στο αριστερό μισό του πίνακα 627 00:43:59,000 --> 00:44:03,000 τι θα καταλήγουν να κάνουν είναι απόρριψη 628 00:44:03,000 --> 00:44:07,000 όλο αυτό το ανώτερο τμήμα 629 00:44:07,000 --> 00:44:16,000 και λέει, "Εντάξει, τώρα τελικό σημείο μας θα είναι εδώ." 630 00:44:16,000 --> 00:44:22,000 Η επόμενη επανάληψη του βρόχου μας, είμαστε τώρα βλέπουν αυτό το φάσμα, 631 00:44:22,000 --> 00:44:25,000 ουσιαστικά έχει απορριφθεί αυτό το τμήμα, διότι τώρα 632 00:44:25,000 --> 00:44:30,000 αν είμαστε λαμβάνοντας το μέσο να είναι η διαφορά μεταξύ της αρχής και του τέλους, 633 00:44:30,000 --> 00:44:34,000 βρίσκουμε μέσο μας να είναι 8, 634 00:44:34,000 --> 00:44:40,000 το οποίο μπορούμε να ελέγξουμε τότε 8 για να δούμε πού είναι σε σχέση με τον αριθμό που ψάχνουμε, 635 00:44:40,000 --> 00:44:44,000 15, βρείτε ότι το 15 είναι μεγαλύτερο, 636 00:44:44,000 --> 00:44:49,000 έτσι πρέπει να προχωρήσουμε προς τα δεξιά μέρος της λίστας, 637 00:44:49,000 --> 00:44:51,000 οποίο γνωρίζουμε επειδή είμαστε άνθρωποι, και μπορούμε να το δούμε. 638 00:44:51,000 --> 00:44:54,000 Γνωρίζουμε ότι το δικαίωμα τμήμα πρόκειται να είναι όπου το βρείτε, 639 00:44:54,000 --> 00:45:01,000 αλλά ο υπολογιστής δεν γνωρίζει ότι, ναι, τι θα κάνουμε είναι ότι θα πραγματικότητα 640 00:45:01,000 --> 00:45:04,000 έχουν αυτό ανεβαίνουν, και τώρα η αρχή και το τέλος 641 00:45:04,000 --> 00:45:11,000 είναι το ίδιο σημείο, έτσι ώστε το μέσο γίνεται ο μοναδικός αριθμός στη λίστα σε αυτό το σημείο, 642 00:45:11,000 --> 00:45:16,000 η οποία είναι 15, και το έχουμε βρεθεί. 643 00:45:16,000 --> 00:45:21,000 Μήπως αυτό ρίξει φως σχετικά με το πού όλη αυτή η max και min σημειογραφία πρόκειται, 644 00:45:21,000 --> 00:45:24,000 την παρακολούθηση των παραμέτρων του πίνακα για να καταλάβω 645 00:45:24,000 --> 00:45:35,000 πώς να περιορίσετε τα πράγματα κάτω; 646 00:45:35,000 --> 00:45:42,000 >> Τι θα συνέβαινε αν αυτό δεν ήταν ίση με 15 τώρα; 647 00:45:42,000 --> 00:45:52,000 Τι θα συμβεί αν ψάχναμε για 15 και, αντ 'αυτού, ο αριθμός αυτός ήταν επίσης 16; 648 00:45:52,000 --> 00:45:54,000 Θα ήθελα να πω, "Ω, αυτό είναι μεγαλύτερο. 649 00:45:54,000 --> 00:45:57,000 Θέλουμε να πάμε πίσω προς τα αριστερά. " 650 00:45:57,000 --> 00:46:01,000 Και εμείς θα προχωρήσουμε ηλεκτρονικό μας προς τα δεξιά, 651 00:46:01,000 --> 00:46:06,000 Σε ποιο σημείο έχουμε ένα τελικό σημείο που θα μπορούσε να είναι αντικρουόμενες. 652 00:46:06,000 --> 00:46:09,000 Δεν θα είναι σε θέση να ψάξει για κάποια περισσότερα στοιχεία 653 00:46:09,000 --> 00:46:13,000 γιατί τώρα έχουμε τελικό σημείο μας και το σημείο έναρξης μας, 654 00:46:13,000 --> 00:46:16,000 max και min μας μας, τώρα άλλαξαν. 655 00:46:16,000 --> 00:46:23,000 Έχουμε ψάξει σε όλο το φάσμα. Εμείς δεν μπορούμε να βρούμε τίποτα. 656 00:46:23,000 --> 00:46:27,000 Αυτό είναι το σημείο στο οποίο θα ήθελα να πω, «Εντάξει, θα πάμε να σταματήσει αυτόν τον αλγόριθμο. 657 00:46:27,000 --> 00:46:34,000 Δεν έχουμε βρει τίποτα. Γνωρίζουμε ότι δεν είναι εδώ. " 658 00:46:34,000 --> 00:46:36,000 Πώς είναι αυτή η μετάβαση; 659 00:46:36,000 --> 00:46:40,000 [Φοιτητής] Πώς ακριβώς κάνει ο υπολογιστής αλλάξετε το τέλος; 660 00:46:40,000 --> 00:46:45,000 Πώς το τέλος καταλήγουν πριν από την έναρξη; 661 00:46:45,000 --> 00:46:48,000 Το τέλος καταλήγει πριν από την έναρξη 662 00:46:48,000 --> 00:46:54,000 λόγω του ότι τα μαθηματικά θα πάμε να κάνουμε κάθε φορά που το κάνουμε αυτό. 663 00:46:54,000 --> 00:47:00,000 Ο τρόπος με τον οποίο ανταλλάσσουν είναι αν δει κανείς την πρώτη κιόλας φορά που κάνουμε αυτή την ανταλλαγή 664 00:47:00,000 --> 00:47:03,000 όπου έχουμε την αρχή στο 4 και το τέλος 665 00:47:03,000 --> 00:47:13,000 όλος ο τρόπος κάτω σε 108 και μέσον μας, ας πούμε, στο 16 - 666 00:47:13,000 --> 00:47:20,000 Πάω να επαναφέρετε την πλάτη στο 15-αν ψάχνουμε για το 15, 667 00:47:20,000 --> 00:47:25,000 ξέραμε ότι αυτό που κάναμε όταν ελέγξαμε το 16 και είδε ότι ήταν μεγαλύτερη 668 00:47:25,000 --> 00:47:28,000 και ήθελε να απορρίψει το σύνολο δεξιά μέρος της λίστας, 669 00:47:28,000 --> 00:47:36,000 είδαμε ότι αυτό που θέλουμε να κάνουμε είναι να προχωρήσουμε αυτό το e δικαίωμα εδώ. 670 00:47:36,000 --> 00:47:44,000 Ουσιαστικά, το e πήρε κινήθηκε προς ένα πριν το μέσον. 671 00:47:44,000 --> 00:47:48,000 Ομοίως, όταν κάναμε αυτή την επανάληψη του αλγορίθμου 672 00:47:48,000 --> 00:47:51,000 και το μέσον ήταν στο 8, 673 00:47:51,000 --> 00:47:55,000 βρήκαμε ότι 8 <15, έτσι θελήσαμε να μετακινήσετε το β 674 00:47:55,000 --> 00:48:00,000 ένα παρελθόν το μεσαίο σημείο. 675 00:48:00,000 --> 00:48:07,000 Τώρα, η αρχή και το τέλος είναι και οι δύο μαζί σε αυτό 15. 676 00:48:07,000 --> 00:48:10,000 >> Αν είχαμε συμβαίνει να ψάξουν για κάποια άλλη αξία, όχι 15, 677 00:48:10,000 --> 00:48:14,000 ή αν αυτό το 15 είχε αντ 'αυτού ήταν 16, 678 00:48:14,000 --> 00:48:20,000 θα έχουν διαπιστώσει ότι το e θέλουμε να προχωρήσουμε ένα πριν το μέσον. 679 00:48:20,000 --> 00:48:33,000 Τώρα το e θα γυρίσει εκεί λιγότερο από ό, τι το β. 680 00:48:33,000 --> 00:48:39,000 Ας δούμε πώς μπορούμε πραγματικά να καταλήξουν κωδικοποίησης αυτόν τον αλγόριθμο. 681 00:48:39,000 --> 00:48:44,000 Ξέρουμε ότι θέλουμε να έχουμε τον υπολογισμό αυτό μέσο. 682 00:48:44,000 --> 00:48:48,000 Γνωρίζουμε, επίσης, ότι θέλουμε να παρακολουθείτε την αρχή και το τέλος της σειράς 683 00:48:48,000 --> 00:48:51,000 της τρέχουσας σειρά μας ώστε να μπορέσουμε να καταλάβουμε 684 00:48:51,000 --> 00:48:56,000 όπου αυτό αριστερό μισό της λίστας είναι και όπου το δεξί μισό της λίστας είναι. 685 00:48:56,000 --> 00:49:03,000 Εμείς το κάνουμε αυτό με είτε αρχίζει και να τελειώνει, 686 00:49:03,000 --> 00:49:07,000 ή μπορούμε να τους αποκαλούμε min και max. 687 00:49:07,000 --> 00:49:10,000 Θα χρησιμοποιήσω αρχίζει και να τελειώνει αυτή τη φορά. 688 00:49:10,000 --> 00:49:15,000 Όταν ξεκινάμε, αν κοιτάξουμε πίσω στο παράδειγμά μας εδώ κάτω, 689 00:49:15,000 --> 00:49:20,000 αρχή μας ιδρύθηκε στην αρχή του πίνακα, ως φυσικά. 690 00:49:20,000 --> 00:49:25,000 Ποια δείκτης ήταν αυτό; Τι θα πρέπει να αρχίσει να μας; 691 00:49:25,000 --> 00:49:27,000 Δανιήλ. 692 00:49:27,000 --> 00:49:30,000 [Daniel] Haystack [0]. 693 00:49:30,000 --> 00:49:37,000 [Nate] Ναι, έτσι θα μπορούσαμε να τεθεί ίση με άχυρα [0]. 694 00:49:37,000 --> 00:49:40,000 Το πρόβλημα, όμως, είναι ότι αυτό δεν μας δίνει τη θέση του πρώτου στοιχείου. 695 00:49:40,000 --> 00:49:45,000 Μας δίνει το δείκτη του πρώτου στοιχείου ή της πραγματικής αξίας σε αυτή την πρώτη θέση. 696 00:49:45,000 --> 00:49:47,000 [Φοιτητικό] Αυτό θα μετατραπούν σε 0,20; 697 00:49:47,000 --> 00:49:52,000 [Nate] Τι θα κάνουμε είναι-καλά, δεν θα κάνει καμία μετατροπή. 698 00:49:52,000 --> 00:49:56,000 Αυτό που θα κάνουμε είναι ότι θα αποθηκεύουν 4 σε αρχίζουν, 699 00:49:56,000 --> 00:49:59,000 και τότε θα είναι δύσκολο να γίνουν συγκρίσεις κατά αρχίσει 700 00:49:59,000 --> 00:50:03,000 επειδή begin θα διοργανώσει την αξία του 4, 701 00:50:03,000 --> 00:50:06,000 το οποίο είναι η αρχή της συστοιχίας μας, 702 00:50:06,000 --> 00:50:08,000 αλλά θέλουμε να παρακολουθούν τους δείκτες του πίνακα 703 00:50:08,000 --> 00:50:11,000 σε αντίθεση με τις τιμές. 704 00:50:11,000 --> 00:50:17,000 Θα χρησιμοποιήσουμε πραγματικά ένα 0, όπως αυτό. 705 00:50:17,000 --> 00:50:20,000 Για το τέλος της σειράς-Charlotte έφερε αυτό μέχρι λίγο νωρίτερα. 706 00:50:20,000 --> 00:50:23,000 Αυτό είναι όπου θα ληφθεί υπόψη η μηδενική ευρετηρίαση. 707 00:50:23,000 --> 00:50:25,000 >> Charlotte, ποιο είναι το τέλος της σειράς; 708 00:50:25,000 --> 00:50:28,000 Τι είναι ο δείκτης στο τέλος; 709 00:50:28,000 --> 00:50:30,000 [Charlotte] Μέγεθος - 1. 710 00:50:30,000 --> 00:50:32,000 Ναι, και τα οποία το μέγεθος θα πρέπει να χρησιμοποιήσω; 711 00:50:32,000 --> 00:50:35,000 Θα πρέπει να χρησιμοποιήσετε το μέγεθος του κεφαλαίου ή πεζά μέγεθος; 712 00:50:35,000 --> 00:50:37,000 Μέγεθος κεφαλαίου. 713 00:50:37,000 --> 00:50:42,000 Σε αυτή την περίπτωση, θα μπορούσαμε να χρησιμοποιήσουμε το μέγεθος του κεφαλαίου. 714 00:50:42,000 --> 00:50:45,000 Αν θέλαμε αυτή η λειτουργία να είναι φορητό 715 00:50:45,000 --> 00:50:48,000 και να χρησιμοποιήσετε αυτή τη λειτουργία σε άλλα προγράμματα, 716 00:50:48,000 --> 00:50:50,000 μπορούμε να χρησιμοποιήσουμε πραγματικά πεζά μέγεθος. 717 00:50:50,000 --> 00:50:52,000 Είναι πάρα πολύ ωραία. 718 00:50:52,000 --> 00:51:01,000 Αλλά Charlotte είναι απόλυτα σωστό ότι θέλουμε να έχουμε το μέγεθος - 1. 719 00:51:01,000 --> 00:51:03,000 Σε αυτό το σημείο- 720 00:51:03,000 --> 00:51:05,000 [Φοιτητής] Πώς είναι ότι μπορείτε να χρησιμοποιήσετε κεφαλαία μέγεθος; 721 00:51:05,000 --> 00:51:07,000 Πώς είναι ότι θα μπορούσαμε να χρησιμοποιήσουμε κεφαλαία μέγεθος; 722 00:51:07,000 --> 00:51:13,000 Αποδεικνύεται ότι αυτά ορίζει # είναι πραγματικά, 723 00:51:13,000 --> 00:51:19,000 κάτω από την κουκούλα, ένα κείμενο όπως η εύρεση και αντικατάσταση, αν αυτό έχει νόημα. 724 00:51:19,000 --> 00:51:24,000 Όταν κάνεις compile κώδικα σας, η φάση προεπεξεργασίας 725 00:51:24,000 --> 00:51:27,000 του μεταγλωττιστή περνάει από το αρχείο, 726 00:51:27,000 --> 00:51:31,000 και αυτό φαίνεται παντού για να έχετε γράψει το μέγεθος του κεφαλαίου, 727 00:51:31,000 --> 00:51:39,000 και αντικαθιστά το κείμενο αυτό κυριολεκτικά με ένα 8, έτσι απλά. 728 00:51:39,000 --> 00:51:42,000 Υπό αυτή την έννοια, αυτό είναι πολύ διαφορετική από μια μεταβλητή. 729 00:51:42,000 --> 00:51:45,000 Δεν καταλαμβάνει χώρο στη μνήμη. 730 00:51:45,000 --> 00:51:52,000 Είναι ένα απλό τέχνασμα αντικατάσταση κειμένου. 731 00:51:52,000 --> 00:51:57,000 Σε αυτή την περίπτωση, θα πάμε να χρησιμοποιήσετε το μέγεθος. 732 00:51:57,000 --> 00:52:01,000 Από εδώ θέλουμε να κάνουμε κάποιο είδος της επανάληψης, 733 00:52:01,000 --> 00:52:03,000 και είμαστε στο σωστό δρόμο με do-while loop μας. 734 00:52:03,000 --> 00:52:08,000 Θέλουμε να κάνουμε κάτι μέχρι μια κατάσταση που δεν ισχύει πια, 735 00:52:08,000 --> 00:52:12,000 και όπως είδαμε νωρίτερα, είδαμε ότι η κατάσταση 736 00:52:12,000 --> 00:52:19,000 Ήταν πράγματι ότι δεν θέλουμε το τέλος 737 00:52:19,000 --> 00:52:24,000 να είναι μικρότερο από το να αρχίσει. 738 00:52:24,000 --> 00:52:26,000 >> Αυτή είναι η στάση μας κατάσταση. 739 00:52:26,000 --> 00:52:35,000 Εάν συμβεί αυτό, θέλουμε να σταματήσουμε και να δηλώνει, όπως, «Hey, δεν έχουμε βρει τίποτα." 740 00:52:35,000 --> 00:52:43,000 Για να εκφράσουν αυτό, θέλουμε να χρησιμοποιούν κάποιο είδος του βρόχου. 741 00:52:43,000 --> 00:52:49,000 Σε αυτή την περίπτωση, θα ήταν ένα do-while loop, ένα για βρόχο, ενώ ένας βρόχος; 742 00:52:49,000 --> 00:52:51,000 Έχουμε ένα do-while loop εδώ. 743 00:52:51,000 --> 00:52:53,000 Do you guys, όπως αυτή την προσέγγιση; 744 00:52:53,000 --> 00:52:59,000 Πιστεύετε ότι θα πρέπει να δοκιμάσετε μια διαφορετική προσέγγιση; 745 00:52:59,000 --> 00:53:01,000 Κέβιν, οποιεσδήποτε σκέψεις; 746 00:53:01,000 --> 00:53:06,000 Θα μπορούσαμε να έχουμε ένα βρόχο, ενώ επειδή γνωρίζουμε κατ 'ανώτατο όριο 747 00:53:06,000 --> 00:53:11,000 θα ήταν μεγαλύτερο από min στην anyways έναρξης. 748 00:53:11,000 --> 00:53:14,000 Ναι, έτσι δεν υπάρχει καμία προετοιμασία που πρέπει να γίνει. 749 00:53:14,000 --> 00:53:17,000 Οι do-while loops είναι μεγάλη όταν έχετε κάτι να προετοιμαστεί 750 00:53:17,000 --> 00:53:21,000 πριν από τη δοκιμή, στη συνέχεια, ενώ εδώ 751 00:53:21,000 --> 00:53:26,000 ξέρουμε ότι δεν πρόκειται να κρατήσει τόσο reinitializing αρχίζει και να τελειώνει 752 00:53:26,000 --> 00:53:28,000 κάθε γύρο του βρόχου. 753 00:53:28,000 --> 00:53:32,000 Ξέρουμε ότι θέλουμε να τους προετοιμάσει, στη συνέχεια ελέγξτε μας κατάσταση. 754 00:53:32,000 --> 00:53:38,000 Σε αυτήν την περίπτωση, εγώ θα πάω στην πραγματικότητα με ένα απλό βρόχο while. 755 00:53:38,000 --> 00:53:44,000 Αποδεικνύεται ότι είναι do-while loops χρησιμοποιούνται αρκετά σπάνια. 756 00:53:44,000 --> 00:53:49,000 Μια πολλά μέρη δεν έχουν ακόμη διδάσκουν ενώ βρόχους. 757 00:53:49,000 --> 00:53:53,000 Είναι καλό για το χειρισμό είσοδο του χρήστη, έτσι έχουμε δει πολλά από αυτά μέχρι σήμερα. 758 00:53:53,000 --> 00:53:59,000 Αλλά και για την κανονική, ενώ βρόχοι είναι πολύ πιο κοινή. 759 00:53:59,000 --> 00:54:03,000 Αποδεικνύεται ότι η προϋπόθεση αυτή ως γραπτή 760 00:54:03,000 --> 00:54:09,000 δεν θα μας κάνει πραγματικά πολύ καλή, και γιατί συμβαίνει αυτό; 761 00:54:09,000 --> 00:54:11,000 Λυπάμαι, δεν ξέρω το όνομά σου. 762 00:54:11,000 --> 00:54:13,000 Είμαι Τζέρι. >> Συγνώμη; 763 00:54:13,000 --> 00:54:15,000 Είναι Β-Ο-Κ-Υ-Ι. 764 00:54:15,000 --> 00:54:18,000 Ω, εντάξει. 765 00:54:18,000 --> 00:54:23,000 Δεν βλέπετε στη λίστα μου. 766 00:54:23,000 --> 00:54:26,000 Ω, αυτό συμβαίνει γιατί-OH, που κάνει αίσθηση. 767 00:54:26,000 --> 00:54:31,000 Έχετε μια ιδέα για το γιατί αυτό το βρόχο, ενώ δεν θα μπορούσε να λειτουργήσει ως στόχο, 768 00:54:31,000 --> 00:54:38,000 όπως είναι γραμμένο με την κατάσταση; 769 00:54:38,000 --> 00:54:43,000 [Τζέρι] Εννοείς όπως θέλετε όλα τα πράγματα αφού η-σε; 770 00:54:43,000 --> 00:54:46,000 Ναι, έτσι ώστε να είναι ένα. 771 00:54:46,000 --> 00:54:49,000 Μπορεί να έχουμε να θέσει όλα αυτά τα πράγματα μέσα στο βρόχο while, η οποία είναι εντελώς αλήθεια. 772 00:54:49,000 --> 00:54:55,000 Το άλλο πράγμα που είναι λίγο πιο προβληματική, όμως, είναι ότι αυτή η κατάσταση δεν λειτουργεί. 773 00:54:55,000 --> 00:54:57,000 [Φοιτητικό] Θα πρέπει να το γυρίσετε. 774 00:54:57,000 --> 00:55:04,000 Σωστά, έτσι ώστε αυτή η κατάσταση δεν θα είναι ποτέ αλήθεια αρχικά ο τρόπος που μίλησε γι 'αυτό. 775 00:55:04,000 --> 00:55:08,000 Θέλουμε να κάνουμε κάτι μέχρι <τέλος ξεκινήσει, 776 00:55:08,000 --> 00:55:13,000 αλλά θέλουμε να κάνουμε κάτι, ενώ 777 00:55:13,000 --> 00:55:21,000 αρχίζουν ≤ τέλος. 778 00:55:21,000 --> 00:55:24,000 >> Υπάρχει ότι η αντιστροφή της λογικής εκεί. 779 00:55:24,000 --> 00:55:27,000 Είμαι ένοχοι αυτά τα λάθη όλη την ώρα. 780 00:55:27,000 --> 00:55:31,000 [Φοιτητικό] Γιατί πρέπει να είναι μικρότερη ή ίση με? 781 00:55:31,000 --> 00:55:33,000 Επειδή εσείς δεν θυμάστε την υπόθεση ότι φτάσαμε στο 782 00:55:33,000 --> 00:55:36,000 όπου υπήρχε μόνο ένα στοιχείο, και ήμασταν κάτω, 783 00:55:36,000 --> 00:55:43,000 και ψάχναμε ακριβώς στη 15 σε σειρά μας; 784 00:55:43,000 --> 00:55:47,000 Και μας αρχή και στο τέλος μας ήταν το ίδιο στοιχείο. 785 00:55:47,000 --> 00:55:50,000 Θέλουμε να είμαστε σίγουροι ότι χειριστεί την υπόθεση. 786 00:55:50,000 --> 00:55:54,000 Αν κάναμε μια ευθεία λιγότερο από ό, τι, 787 00:55:54,000 --> 00:55:58,000 θα είναι σε θέση να πιάσουμε μια σειρά 2-στοιχείο. 788 00:55:58,000 --> 00:56:06,000 Μόλις φτάσαμε μέχρι αυτό το τελευταίο στοιχείο, αν αυτό ήταν το στοιχείο μας, ποτέ δεν θα το βρείτε. 789 00:56:06,000 --> 00:56:10,000 Τώρα, εδώ, μπορούμε να κάνουμε ακριβώς όπως έλεγες. 790 00:56:10,000 --> 00:56:15,000 Μπορούμε να αρχίσουμε να plopping πράγματα δεξιά στη μέση του βρόχου while μας. 791 00:56:15,000 --> 00:56:20,000 Μπορούμε να γδούπο στο μέσον μας. 792 00:56:20,000 --> 00:56:24,000 Μπορούμε να πάρουμε όλα αυτά, αν δηλώσεις, 793 00:56:24,000 --> 00:56:30,000 τραβήξτε τους έξω από αυτό το do-while loop, 794 00:56:30,000 --> 00:56:34,000 γδούπο τους, 795 00:56:34,000 --> 00:56:39,000 καθαρίσετε τα πράγματα λίγο, 796 00:56:39,000 --> 00:56:48,000 και θα πάω μπροστά και να σώσει αυτή την αναθεώρηση. 797 00:56:48,000 --> 00:56:53,000 Και σε αυτό το σημείο, παίρνουμε πολύ κοντά. 798 00:56:53,000 --> 00:56:55,000 Sam. 799 00:56:55,000 --> 00:56:58,000 Νομίζω ότι θα πρέπει επίσης να έχουν int = μέσο μέγεθος - 1/2. 800 00:56:58,000 --> 00:57:01,000 Got it, μέγεθος - 1/2. 801 00:57:01,000 --> 00:57:05,000 Υπάρχει κάτι άλλο που πρέπει να αλλάξουμε για αυτή τη γραμμή εκεί; 802 00:57:05,000 --> 00:57:10,000 Αυτό ήταν μια καλή ψαριά. 803 00:57:10,000 --> 00:57:14,000 >> Τι μέγεθος κάνει; Είμαστε αλλάζουν ποτέ μέγεθος; 804 00:57:14,000 --> 00:57:17,000 Για να κρατήσει τη γραμμή, όπως αυτό, θα πρέπει να αλλάξετε το μέγεθος. 805 00:57:17,000 --> 00:57:21,000 Πρέπει να αλλάξετε το μέγεθος κάθε φορά που πάμε γύρω από το βρόχο for. 806 00:57:21,000 --> 00:57:25,000 Αλλά να θυμάστε όταν θα πήγαιναν με το παράδειγμά μας και λίγο νωρίτερα, 807 00:57:25,000 --> 00:57:30,000 και είχαμε την αρχή στους 4 808 00:57:30,000 --> 00:57:33,000 και το τέλος σε όλη τη διαδρομή πάνω στο 108; 809 00:57:33,000 --> 00:57:35,000 Πώς θα υπολογίσετε το μέσο; 810 00:57:35,000 --> 00:57:38,000 Αν κάνουμε χρήση του μεγέθους; 811 00:57:38,000 --> 00:57:40,000 Ή θα χρησιμοποιούσαν αρχίζει και να τελειώνει αντ 'αυτού; 812 00:57:40,000 --> 00:57:42,000 Είναι η διαφορά μεταξύ του τέλους και της αρχής. 813 00:57:42,000 --> 00:57:50,000 Ακριβώς, και πώς ακριβώς θα πρέπει να γράψω ότι, Charlotte; 814 00:57:50,000 --> 00:57:52,000 Μόλις τελειώσει - να αρχίσει. 815 00:57:52,000 --> 00:57:55,000 Δεν θα πρέπει να κάνει το - 1 816 00:57:55,000 --> 00:57:58,000 επειδή η - 1 έχει συμπεριληφθεί στο τέλος και την ξεκινήσει ήδη. 817 00:57:58,000 --> 00:58:00,000 [Nate] Μεγάλη, είσαι εντελώς δεξιά. 818 00:58:00,000 --> 00:58:03,000 Δεν έχουμε να κάνουμε το - 1 επειδή αυτό - 1 έχει συμπεριληφθεί 819 00:58:03,000 --> 00:58:08,000 και υπολογίζονται όταν έχουμε προετοιμαστεί το μεταβλητό τέλος. 820 00:58:08,000 --> 00:58:11,000 >> Υπάρχει κάτι άλλο που πρέπει να κάνω συντακτικά να έχουν αυτό το νόημα γραμμή εκεί; 821 00:58:11,000 --> 00:58:13,000 [Φοιτητικό] Plus αρχίσει. >> Plus ξεκινήσει; 822 00:58:13,000 --> 00:58:15,000 [Φοιτητικό] Στο τέλος. 823 00:58:15,000 --> 00:58:20,000 Επειδή είναι μόνο υπολογίζεται το μισό του μήκους. 824 00:58:20,000 --> 00:58:26,000 Θα πρέπει να προσθέσετε το ξεκινήσει. 825 00:58:26,000 --> 00:58:31,000 [Nate] Τι θα υπολογίσει αυτό για εμάς; 826 00:58:31,000 --> 00:58:35,000 Αν σκεφτούμε τέλος σε αυτή τη πρώτη επανάληψη του βρόχου, 827 00:58:35,000 --> 00:58:40,000 άκρο πρόκειται να είναι σε θέση δείκτη 7. 828 00:58:40,000 --> 00:58:43,000 Αρχίστε είναι στη θέση 0. 829 00:58:43,000 --> 00:58:47,000 Θυμηθείτε, ψάχνουμε είτε 830 00:58:47,000 --> 00:58:52,000 θέση 3 ή στη θέση 4. 831 00:58:52,000 --> 00:58:56,000 Αν κοιτάξουμε αυτό μαθηματικά, απλά για να γίνει λίγο πιο απτή, 832 00:58:56,000 --> 00:59:02,000 θέσει κάποιους αριθμούς εδώ, έχουμε 7, 0, 833 00:59:02,000 --> 00:59:10,000 έτσι 7 - 0, και στη συνέχεια / 2 834 00:59:10,000 --> 00:59:19,000 είναι 3 στο ακέραιο τμήμα, αυτό είναι. 835 00:59:19,000 --> 00:59:26,000 Τότε χρειαζόμαστε να προσθέσει στη συνέχεια πίσω μας ξεκινήσω; 836 00:59:26,000 --> 00:59:28,000 Εμείς δεν κάνουμε σε αυτή την περίπτωση. 837 00:59:28,000 --> 00:59:31,000 Από την πρώτη κιόλας επανάληψη, θα είναι ωραία επειδή begin είναι 0. 838 00:59:31,000 --> 00:59:36,000 Όμως, καθώς προχωρούμε, κάνουμε πραγματικά όλα το μόνο που χρειάζεται 839 00:59:36,000 --> 00:59:42,000 τέλος - να αρχίσει / 2. 840 00:59:42,000 --> 00:59:46,000 Υπάρχει ένα άλλο τέχνασμα εδώ, και ότι είναι δηλαδή ένας από τους προτεραιότητα. 841 00:59:46,000 --> 00:59:49,000 [Φοιτητικό] Χρειαζόμαστε παρενθέσεις; 842 00:59:49,000 --> 00:59:53,000 [Nate] Ακριβώς, και αυτό γιατί αν δεν βάλουμε αυτά τα παρενθέσεις, 843 00:59:53,000 --> 00:59:58,000 τότε αυτή η γραμμή θα πρέπει να ερμηνευθεί αντί 844 00:59:58,000 --> 01:00:09,000 ως (τέλος) - (έναρξη / 2), το οποίο σίγουρα δεν θέλουν. 845 01:00:09,000 --> 01:00:11,000 Προσέξτε για τους κανόνες προτεραιότητας. 846 01:00:11,000 --> 01:00:15,000 [Φοιτητικό] Γιατί δεν καταλήγουν + ξεκινήσει; 847 01:00:15,000 --> 01:00:17,000 Γιατί δεν είναι το τέλος + ξεκινήσει; 848 01:00:17,000 --> 01:00:19,000 [Φοιτητικό] Γιατί δεν είναι αυτό; 849 01:00:19,000 --> 01:00:24,000 Γιατί θα ήταν +; 850 01:00:24,000 --> 01:00:26,000 Νομίζω ότι έχεις δίκιο. 851 01:00:26,000 --> 01:00:28,000 [Φοιτητικό] Επειδή είναι κατά μέσο όρο; 852 01:00:28,000 --> 01:00:31,000 [Nate] Τέλος + αρχίσει, είσαι εντελώς δεξιά. 853 01:00:31,000 --> 01:00:34,000 Πω πω, εντελώς goofed. Έχεις δίκιο. 854 01:00:34,000 --> 01:00:39,000 Αν κάναμε το μείον, θα θέλαμε να προσθέσετε το αρχίσει ξανά μέσα 855 01:00:39,000 --> 01:00:43,000 Σε αυτή την περίπτωση, είστε πολύ σωστό ότι θέλουμε να πάρει το μέσο όρο των δύο, 856 01:00:43,000 --> 01:00:45,000 έτσι θέλουμε να τα προσθέσετε, σε αντίθεση με τους αφαιρέσετε. 857 01:00:45,000 --> 01:00:49,000 [Φοιτητικό] Θα λειτουργήσει επίσης εάν κάνατε τέλος - να αρχίσει / 2 + αρχίσει. 858 01:00:49,000 --> 01:00:55,000 Θα ήταν, αν κάνουμε-έτσι πιστεύω. 859 01:00:55,000 --> 01:01:00,000 >> Για παράδειγμα, αν ψάχναμε στο αρχίσουν, 860 01:01:00,000 --> 01:01:04,000 και εμείς θα μετατοπιστεί εδώ 861 01:01:04,000 --> 01:01:08,000 στο 15. 862 01:01:08,000 --> 01:01:12,000 Τώρα αρχίζουν είναι στη θέση 2. 863 01:01:12,000 --> 01:01:15,000 Τέλος είναι στη θέση 7. 864 01:01:15,000 --> 01:01:21,000 Αν αφαιρέσουμε τους, έχουμε 5. 865 01:01:21,000 --> 01:01:24,000 Διαιρέστε ότι με το 2, παίρνουμε 2. 866 01:01:24,000 --> 01:01:27,000 Και τότε προσθέστε 2 πίσω, 867 01:01:27,000 --> 01:01:30,000 και ότι μας παίρνει την 4η θέση, 868 01:01:30,000 --> 01:01:33,000 το οποίο είναι ακριβώς εδώ, το οποίο είναι το μέσο. 869 01:01:33,000 --> 01:01:36,000 [Φοιτητικό] Μήπως πρέπει να αναλάβει τη φροντίδα του περιτυλίγματος; 870 01:01:36,000 --> 01:01:39,000 Με ποια έννοια δεν θα πρέπει να αναλάβει τη φροντίδα του περιτυλίγματος; 871 01:01:39,000 --> 01:01:43,000 Αν το ποσό ή η διαφορά μεταξύ 872 01:01:43,000 --> 01:01:45,000 ανάλογα με το πώς το κάνουμε δεν είναι ένας άρτιος αριθμός. 873 01:01:45,000 --> 01:01:49,000 Στη συνέχεια, ο υπολογιστής μπερδεύεται αν και όταν είναι 2,5? 874 01:01:49,000 --> 01:01:52,000 δεν κινείστε προς τα αριστερά ή προς τα δεξιά για να καθορίσει ποια είναι το μέσο; 875 01:01:52,000 --> 01:01:54,000 Πήρε αυτό. 876 01:01:54,000 --> 01:01:56,000 Αποδεικνύεται ότι με διαίρεσης, 877 01:01:56,000 --> 01:01:59,000 δεν παίρνουμε ποτέ αυτές τις αριθμούς κινητής υποδιαστολής. 878 01:01:59,000 --> 01:02:01,000 Ποτέ δεν πάρετε το δεκαδικό. 879 01:02:01,000 --> 01:02:04,000 Είναι εντελώς απορρίπτονται. 880 01:02:04,000 --> 01:02:08,000 Αν έχετε έναν υπολογιστή χωρίζουν δύο int μεταβλητών, 881 01:02:08,000 --> 01:02:11,000 και το ένα είναι 7, και το άλλο είναι 2, 882 01:02:11,000 --> 01:02:13,000 δεν θα πάρετε 3,5 ως αποτέλεσμα. 883 01:02:13,000 --> 01:02:16,000 Θα πάρει 3. 884 01:02:16,000 --> 01:02:19,000 Το υπόλοιπο θα πρέπει να απορρίπτεται, έτσι ώστε να είναι αποτελεσματικά στρογγυλοποίηση 885 01:02:19,000 --> 01:02:24,000 όχι γύρο, αλλά μάλλον ένα πάτωμα, αν εσείς είστε εξοικειωμένοι με ότι στα μαθηματικά, 886 01:02:24,000 --> 01:02:27,000 όπου θα απορρίψει εντελώς το δεκαδικό, 887 01:02:27,000 --> 01:02:31,000 και έτσι είστε περικοπή κατ 'ουσίαν προς τα κάτω στο πλησιέστερο 888 01:02:31,000 --> 01:02:33,000 ολόκληρη θέση, στον πλησιέστερο ακέραιο αριθμό. 889 01:02:33,000 --> 01:02:38,000 [Φοιτητικό] Στη συνέχεια, όμως αυτό είναι προβληματικό, διότι αν έχετε μια σειρά από 7 στοιχεία 890 01:02:38,000 --> 01:02:43,000 τότε αυτό παίρνει αυτόματα το 3ο στοιχείο από το μέσο, ​​αντί του 4ου. 891 01:02:43,000 --> 01:02:46,000 Πώς μπορούμε να αντιμετωπίσουμε με αυτό; 892 01:02:46,000 --> 01:02:49,000 Είναι προβληματική, διότι αν είχαμε μια σειρά από 7, 893 01:02:49,000 --> 01:02:54,000 θα πάρει το 3ο αντί του 4ου. 894 01:02:54,000 --> 01:02:56,000 Θα μπορούσατε να μας εξηγήσετε λίγο περισσότερο; 895 01:02:56,000 --> 01:02:59,000 [Φοιτητικό] Γιατί αν έχετε 7 στοιχεία τότε το 4ο στοιχείο 896 01:02:59,000 --> 01:03:04,000 θα είναι το κεντρικό σημείο, έτσι δεν είναι; 897 01:03:04,000 --> 01:03:07,000 Θυμηθείτε το σχόλιό σας για την ύπαρξη δείκτη μηδέν, όμως. 898 01:03:07,000 --> 01:03:10,000 [Φοιτητικό] Ναι, έτσι στη θέση 3. Αυτό θα είναι το κεντρικό σημείο. 899 01:03:10,000 --> 01:03:12,000 Ναι. 900 01:03:12,000 --> 01:03:16,000 Ω, εντάξει. Βλέπω τι εννοείς. 901 01:03:16,000 --> 01:03:19,000 Είναι το είδος της παράξενο, όπως έχουμε συνηθίσει όλο αυτό έννοια της 902 01:03:19,000 --> 01:03:22,000 να απαλλαγούμε από δεκαδικών ψηφίων. 903 01:03:22,000 --> 01:03:26,000 Αυτό είναι ένα μεγάλο σημείο. 904 01:03:26,000 --> 01:03:30,000 Ας τελειώσει αυτό επάνω. 905 01:03:30,000 --> 01:03:32,000 Έχουμε υπολογίζεται μέσο μας. 906 01:03:32,000 --> 01:03:37,000 >> Εμείς δοκιμάζουμε για να δούμε αν βελόνα μας είναι ίση με τη μέση τιμή. 907 01:03:37,000 --> 01:03:41,000 Είμαστε εκτύπωση ότι το βρήκαμε, αλλά πραγματικά, τι θέλουμε να κάνουμε σε αυτή την κατάσταση; 908 01:03:41,000 --> 01:03:46,000 Έχουμε το βρήκε, έτσι θέλουμε να αφήσουμε τον καλούντα ξέρω ότι το βρήκαμε. 909 01:03:46,000 --> 01:03:49,000 Έχουμε μια λειτουργία που είναι ένα δακτυλογραφημένο boolean λειτουργία. 910 01:03:49,000 --> 01:03:54,000 Ο τρόπος που σηματοδοτούν στον καλούντα της λειτουργίας μας ότι είμαστε έτοιμοι να προχωρήσουμε 911 01:03:54,000 --> 01:03:58,000 είναι που λέμε, "Γεια σου, αυτό είναι αλήθεια." 912 01:03:58,000 --> 01:04:00,000 Πώς θα το κάνουμε αυτό, Kevin; 913 01:04:00,000 --> 01:04:02,000 Είστε κουνώντας το κεφάλι σας. >> [Kevin] Προσθήκη επιστροφή αλήθεια. 914 01:04:02,000 --> 01:04:06,000 [Nate] Ακριβώς, επιστρέφουν αλήθεια. 915 01:04:06,000 --> 01:04:12,000 Τώρα, αν αυτό δεν είναι ίσες, πώς θα δούμε στο αριστερό μισό; 916 01:04:12,000 --> 01:04:16,000 Οποιεσδήποτε ιδέες; 917 01:04:16,000 --> 01:04:18,000 Στέλλα, οποιεσδήποτε ιδέες; 918 01:04:18,000 --> 01:04:21,000 Θα πρέπει να ορίσετε μια νέα θέση για το τέλος. 919 01:04:21,000 --> 01:04:23,000 Ναι. 920 01:04:23,000 --> 01:04:29,000 Έτσι πρέπει να κάνουμε θέση του μέσο - το τέλος. 921 01:04:29,000 --> 01:04:33,000 Μεγάλη. 922 01:04:33,000 --> 01:04:36,000 Πρέπει να ορίσετε μια νέα θέση για το τέλος 923 01:04:36,000 --> 01:04:38,000 να εξετάσουμε το αριστερό μισό. 924 01:04:38,000 --> 01:04:41,000 Αυτό ήταν ό, τι μιλήσαμε πριν, όπου 925 01:04:41,000 --> 01:04:44,000 I keep going back σε αυτό το παράδειγμα. 926 01:04:44,000 --> 01:04:50,000 Έχω ξεκινήσει εδώ το, και στη συνέχεια να έχω το τέλος σε όλη τη διαδρομή πάνω από εδώ. 927 01:04:50,000 --> 01:04:53,000 >> Και πάλι, αν ψάχνουμε για 15, και κεντρικό σημείο μας είναι στα 16, 928 01:04:53,000 --> 01:04:56,000 και συνειδητοποιούμε, «Ωχ, 16 είναι μεγαλύτερη. 929 01:04:56,000 --> 01:04:59,000 Θέλουμε να προχωρήσουμε στο αριστερό μισό. " 930 01:04:59,000 --> 01:05:02,000 Θα προχωρήσουμε στη συνέχεια, το τέλος του 15, 931 01:05:02,000 --> 01:05:06,000 και να το κάνουμε αυτό με τη λήψη ενός μακριά από το μέσο 932 01:05:06,000 --> 01:05:09,000 και τον καθορισμό ότι ως νέα καταληκτική μας. 933 01:05:09,000 --> 01:05:12,000 Ομοίως, αν θέλουμε να δούμε το δεξί μισό, πώς θα το κάνουμε αυτό; 934 01:05:12,000 --> 01:05:14,000 Έχετε μια ιδέα; 935 01:05:14,000 --> 01:05:22,000 [Φοιτητικό] Απλά που αρχίζουν να κεντρικό σημείο + 1. 936 01:05:22,000 --> 01:05:24,000 [Nate] Μεγάλη. 937 01:05:24,000 --> 01:05:29,000 Και τώρα, σε περίπτωση που δεν βρουν τίποτα, 938 01:05:29,000 --> 01:05:32,000 ότι δεν παίρνουν ληφθεί μέριμνα για εμάς; 939 01:05:32,000 --> 01:05:36,000 Ντάνιελ, δεν παίρνουν ότι ληφθεί μέριμνα για εμάς; 940 01:05:36,000 --> 01:05:38,000 [Daniel] Όχι. 941 01:05:38,000 --> 01:05:40,000 [Nate] Αν το κάνουμε σε όλο το φάσμα και δεν βρίσκουν τίποτα, 942 01:05:40,000 --> 01:05:42,000 όπου θα πρέπει να ληφθεί μέριμνα, ή θα πρέπει να αναλάβει τη φροντίδα του; 943 01:05:42,000 --> 01:05:44,000 [Δανιήλ] Η κατάσταση, ενόσω. 944 01:05:44,000 --> 01:05:48,000 [Nate] Ναι, η κατάσταση, ενώ, ακριβώς. 945 01:05:48,000 --> 01:05:51,000 Θα φροντίσει να περάσει από ολόκληρο τον πίνακα, αν δεν βρούμε τίποτα. 946 01:05:51,000 --> 01:05:53,000 Αυτός ο βρόχος ενώ θα τελειώσει. 947 01:05:53,000 --> 01:05:56,000 Θα έχουμε ποτέ δεν αντιμετώπισε αυτή την κατάσταση, 948 01:05:56,000 --> 01:06:03,000 και μπορούμε να επιστρέψουμε ψευδείς. 949 01:06:03,000 --> 01:06:10,000 Μπορούμε επίσης να αφήσετε το αν σε αυτό εδώ σαν 950 01:06:10,000 --> 01:06:14,000 γιατί αν αυτή η δήλωση, αν είναι αλήθεια, 951 01:06:14,000 --> 01:06:16,000 και τη λειτουργία μας θα επιστρέψει, 952 01:06:16,000 --> 01:06:21,000 και έτσι θα διακόψει ουσιαστικά αυτή η λειτουργία σε αυτό το σημείο 953 01:06:21,000 --> 01:06:24,000 όταν θα επιστρέψουν στην αλήθεια. 954 01:06:24,000 --> 01:06:28,000 Αλλά τι συμβαίνει με αυτή τη δομή εδώ; 955 01:06:28,000 --> 01:06:34,000 Αυτό θα λειτουργήσει εξ ολοκλήρου, ή υπάρχει κάποια λογική σε ελάττωμα εκεί; 956 01:06:34,000 --> 01:06:37,000 >> Υπάρχει κάποια λογική σε ελάττωμα εκεί, με τον τρόπο που έχει συσταθεί. 957 01:06:37,000 --> 01:06:40,000 Τι θα μπορούσε να είναι; 958 01:06:40,000 --> 01:06:43,000 [Φοιτητικό] Γιατί θα πρέπει να έχετε το - και + 1s; 959 01:06:43,000 --> 01:06:47,000 Αυτό θέτει σειρά μας για να είναι νέο αριστερό μισό μας και το δεξί μισό. 960 01:06:47,000 --> 01:06:51,000 [Φοιτητικό] Αλλά γιατί δεν θα μπορούσε να το κάνει χωρίς το - 1s + και 1s; 961 01:06:51,000 --> 01:06:53,000 [Nate] Θα μπορούσε να οριστεί ίσο με το μέσο; 962 01:06:53,000 --> 01:07:04,000 Τι θα μπορούσε να είναι προβληματικό γι 'αυτό; 963 01:07:04,000 --> 01:07:08,000 [Φοιτητικό] Υποθέτω ότι είναι αναποτελεσματική, γιατί είστε έλεγχο μια τιμή που είναι ήδη ελεγχθεί. 964 01:07:08,000 --> 01:07:11,000 [Nate] Ακριβώς, έτσι Sam είναι εντελώς σωστό. 965 01:07:11,000 --> 01:07:15,000 Εάν ορίσετε το τέλος και η έναρξη ίση με το μέσο 966 01:07:15,000 --> 01:07:18,000 αντί - 1 + 1 και στοχαστικά, 967 01:07:18,000 --> 01:07:22,000 σε κάποιο σημείο στο μέλλον θα καταλήξουμε έλεγχο το μέσο ξανά. 968 01:07:22,000 --> 01:07:26,000 [Φοιτητικό] άρχισα το PSET, και τότε είχα κάτι τέτοιο 969 01:07:26,000 --> 01:07:30,000 όπου Ξέχασα το + 1, και κόλλησε σε ένα άπειρο βρόχο. 970 01:07:30,000 --> 01:07:34,000 Σωστά, γιατί σε κάποιο σημείο δεν πρόκειται ποτέ να πάρει αρχίζουν και τελειώνουν 971 01:07:34,000 --> 01:07:39,000 πραγματικά να επικαλύπτονται. 972 01:07:39,000 --> 01:07:41,000 Cool. 973 01:07:41,000 --> 01:07:44,000 Υπάρχει ένα πιο λογικό σφάλμα, και αυτό είναι ότι αυτό θα πρέπει οπωσδήποτε να 974 01:07:44,000 --> 01:07:48,000 ένα άλλο, εάν. 975 01:07:48,000 --> 01:07:55,000 Γιατί μπορεί να συμβαίνει αυτό; 976 01:07:55,000 --> 01:07:59,000 >> Ο λόγος είναι, αν δεν είναι ένας άλλος-αν είδες αυτό, Kevin; 977 01:07:59,000 --> 01:08:02,000 [Kevin] Ναι, επειδή είστε αλλάζει το τελικό σημείο. 978 01:08:02,000 --> 01:08:05,000 [Nate] Ακριβώς. 979 01:08:05,000 --> 01:08:07,000 Αλλάζουμε το τελικό σημείο, 980 01:08:07,000 --> 01:08:12,000 και αν είναι γραμμένο σαν αυτό-we'll κάνει διαστήματα μεταξύ- 981 01:08:12,000 --> 01:08:14,000 θα ελέγξει αυτή την υπόθεση. 982 01:08:14,000 --> 01:08:18,000 Η υπόθεση αυτή, αν πετύχει, θα ματαιωθεί από τη λειτουργία. 983 01:08:18,000 --> 01:08:21,000 Στη συνέχεια, θα ελέγξει την επόμενη περίπτωση, 984 01:08:21,000 --> 01:08:24,000 και αν αυτό πετύχει, θα προσαρμόσει το τελικό σημείο, 985 01:08:24,000 --> 01:08:28,000 και στη συνέχεια θα συνεχίσει και να ελέγξει αυτή την υπόθεση. 986 01:08:28,000 --> 01:08:31,000 Αλλά σε αυτό το σημείο, δεν θέλουμε να συνεχιστεί ο έλεγχος. 987 01:08:31,000 --> 01:08:35,000 Ευτυχώς, δεν έχουμε να επαναφέρετε το μέσο εδώ, 988 01:08:35,000 --> 01:08:39,000 και γνωρίζουμε ότι αυτή η υπόθεση δεν θα πετύχει. 989 01:08:39,000 --> 01:08:44,000 Αλλά σίγουρα θέλει να βάλει το άλλο αν εκεί 990 01:08:44,000 --> 01:08:48,000 παρά το γεγονός ότι θα μπορούσε-σε αυτή την περίπτωση 991 01:08:48,000 --> 01:08:52,000 αφού δεν είμαστε ρύθμιση το μέσο, ​​θα κάνουν ότι μια διαφορά; 992 01:08:52,000 --> 01:08:54,000 Όχι, γιατί αυτές οι περιπτώσεις είναι όλα τα αποκλειστικά. 993 01:08:54,000 --> 01:08:58,000 Και πάλι, η κακή μου. 994 01:08:58,000 --> 01:09:01,000 Δεν νομίζω ότι χρειάζεται αυτό το else if. 995 01:09:01,000 --> 01:09:05,000 Μπορούμε να δώσουμε μια δοκιμή και να τρέξει και να δούμε τι θα συμβεί. 996 01:09:05,000 --> 01:09:08,000 Κτίριο, ένα σφάλμα. 997 01:09:08,000 --> 01:09:12,000 Είναι πιθανώς επειδή έφυγα από αυτά και β ηλεκτρονικού εδώ. 998 01:09:12,000 --> 01:09:14,000 Έχω κάποια περισσότερα από αυτά μέχρι την κορυφή; 999 01:09:14,000 --> 01:09:16,000 Δεν μοιάζει με αυτό. 1000 01:09:16,000 --> 01:09:20,000 Εμείς σμίκρυνση, την κατασκευή, 1001 01:09:20,000 --> 01:09:24,000 εκεί πηγαίνει, έτσι και τώρα, αν ψάχνουμε για 15, 1002 01:09:24,000 --> 01:09:28,000 Ναι. 1003 01:09:28,000 --> 01:09:30,000 Επιτρέψτε μου να μεγεθύνετε 1004 01:09:30,000 --> 01:09:33,000 15, ναι. Μπορούμε να τρέξει ξανά. 1005 01:09:33,000 --> 01:09:36,000 Μεταφόρτωση του πηγαίου κώδικα, τη δημιουργία, λειτουργία. 1006 01:09:36,000 --> 01:09:41,000 Μπορούμε να ψάξει για κάτι σαν 13, 1007 01:09:41,000 --> 01:09:45,000 και εμείς δεν παίρνουν τίποτα εκτύπωση, έτσι δεν είναι διαπίστωση ότι για μας. 1008 01:09:45,000 --> 01:09:51,000 Αυτό είναι μεγάλη, επειδή δεν είναι στη λίστα μας. 1009 01:09:51,000 --> 01:09:53,000 >> Είμαστε τώρα από του χρόνου. 1010 01:09:53,000 --> 01:09:55,000 Αυτό πρόκειται να είναι αυτό για αυτήν την εβδομάδα. 1011 01:09:55,000 --> 01:10:00,000 Ευχαριστώ για την ένταξη, και τα λέμε αργότερα. 1012 01:10:00,000 --> 01:10:02,000 >> [CS50.TV]