JASON Hirschhorn: Welcome σε τρεις εβδομάδες, ο καθένας. Έχουμε μια κουραστική, αλλά συναρπαστικό, τμήμα μπροστά μας. Έτσι, η πρώτη, γιατί έχουμε κάνει κάποια πρόοδο με την πορεία, αλλά έχουμε ακόμα έχουν πολλή μάθησης που μένει να γίνει, είμαι πρόκειται να σας δείξω παιδιά κάποιους πόρους ότι θα πρέπει να αποδειχθεί εξαιρετικά χρήσιμο καθώς πλησιάζετε όχι μόνο σας πρόβλημα θέτει, αλλά και αφομοιώσει όλα το υλικό που σας δίνουμε σε παιδιά διαλέξεις και σορτς και ενότητα. Στη συνέχεια, θα πάμε να περάσουν τα πρώτα 20 25 λεπτά από το τμήμα που πηγαίνει πέρα ​​από GDB, η οποία μπορεί ή δεν μπορεί να έχει χρησιμοποιηθεί στο σημείο αυτό, αλλά είναι ένα απίστευτα χρήσιμο εργαλείο που θα να σας βοηθήσει να debug τα προγράμματά σας. Πολλοί από εσάς μπορεί να έχετε χρησιμοποιήσει printf στην μέσα από το πρόγραμμά σας για να καταλάβουμε τι ισοφάρισε μια μεταβλητή. GDB είναι ακόμα καλύτερα από ό, τι printf και δεν βίδα μέχρι τον κωδικό σας επειδή να το εκτελέσετε ένα εκτελέσιμο αρχείο. Έτσι θα πάμε πάνω από τα 10 πιο χρήσιμες εντολές που χρειάζεστε για GDB, και είμαστε πρόκειται να πάει σε μια άσκηση από κοινού, ώστε στο πρόβλημα που τρεις και πέρα, θα μπορούν να χρησιμοποιήσουν GDB για να βοηθήσει στον εντοπισμό σφαλμάτων προγράμματά σας. Και τέλος, θα πάμε να πάει πέρα ​​από μερικές ταξινόμησης και αναζήτησης αλγορίθμων ότι είδατε στην διάλεξη, και είμαστε πρόκειται πραγματικά κώδικα, όχι μόνο ψευδοκώδικα, αλλά κώδικα δυαδική αναζήτηση, bubble sort, και το είδος επιλογής. Έτσι, η πρώτη, θέλω να πάω επί των πόρων. Αυτό είναι μια μεγάλη λίστα, και είναι μικρότερη γραμματοσειρά γιατί είχα πολλά να ταιριάζουν εδώ. Αλλά αυτά θα σας βοηθήσει όχι μόνο, και πάλι, με τις προβληματικές σύνολα και εύπεπτος πληροφορίες μάθατε, αλλά σίγουρα, έρθει η ώρα κουίζ, αυτά θα είναι απίστευτα χρήσιμο. Έτσι, η πρώτη, η διάλεξη σημειώνει. Αν πάτε σε cs50.net/lectures και μεταβείτε στην συγκεκριμένη εβδομάδα και την ημέρα, θα δείτε ότι υπάρχουν σημειώσεις για κάθε διάλεξη, η οποία δεν είναι απλώς μια μεταγραφή, αλλά μια επεξεργασμένη εκδοχή της τι καλύφθηκε σε διάλεξη με κωδικό αποσπάσματα και άλλες χρήσιμες μεζέδες. Συστήνω ανεπιφύλακτα να πάτε σε σχέση με αυτές. Και στη συνέχεια, καθώς, υπάρχει πηγαίο κώδικα διατίθεται από κάθε διάλεξη. Και πάλι, αυτές οι διαφάνειες θα είναι επίσης διαθέσιμο στην ηλεκτρονική διεύθυνση cs50.net/sections αυτό το βράδυ. Έτσι, το δεύτερο είναι τα σορτς κάθε εβδομάδα που καλύπτουν θέματα, συνήθως 5 έως 15 λεπτά σε μήκος. Και αυτά ελπίζουμε ότι θα σας δώσει μια μεγάλη αλφαβητάρι για διάφορα θέματα. Τρίτον - και αυτό είναι το ολοκαίνουργιο αυτό έτος - είναι study.cs50.net. Αν δεν το έχετε ελέγξει έξω, συνιστούμε να το κάνετε αυτό. Μπορείτε να επιλέξετε ένα θέμα. Έχουμε δεκάδες θέματα εκεί. Έτσι, για παράδειγμα, μπορείτε να επιλέξετε λειτουργίες. Σας δίνει κάποιες διαφάνειες και σημειώνει τις λειτουργίες. Αυτοί είναι στην πραγματικότητα οι διαφάνειες που TFs ενθαρρύνονται να χρησιμοποιούν κατά τη διάρκεια μας παρουσιάσεις στο τμήμα. Υπάρχει, επίσης, συμβουλές και κόλπα για την αντιμετώπιση με λειτουργίες, και δεν υπάρχει προβλήματα πρακτικής που βοηθούν εργάζεστε με λειτουργίες. Μπορούμε επίσης να σας δώσει τις συνδέσεις με την σε σύντομο λειτουργίες και οι χρόνοι που λειτουργεί έχουν καταλήξει σε διάλεξη. Έτσι study.cs50.net, ολοκαίνουργιο αυτό χρόνο, ένας φανταστικός πόρος. Στη συνέχεια, έχω τον άνθρωπο, που είναι το εγχειρίδιο εντολών που μπορείτε να εκτελέσετε το γραμμή εντολών. Έτσι, εάν έχετε οποιαδήποτε απορία σχετικά με το εντολή, για παράδειγμα, ραντ, η οποία θα αντιμετώπισε την περασμένη εβδομάδα κατά τη διάρκεια του τμήματος και έχετε αντιμετωπίσει πιθανό το το πρόβλημά σας που όταν διέρχεται από το δημιουργήσετε κώδικα, αλλά αν πληκτρολογήσετε τον άνθρωπο rand, θα έχετε τη σελίδα που Σας λέει όλα σχετικά με ραντ. Σας δίνει ό, τι χρειάζεται, η παραμέτρους που χρειάζεται, καθώς και η απόδοση τύπου και μια σύντομη περιγραφή αυτής της λειτουργίας. Έτσι ελέγξτε έξω ραντ. Μπορεί να είναι λίγο φλύαρος και σύγχυση, έτσι μερικές φορές θεωρώ ότι απλά Googling αυτό που θέλω να μάθω είναι ο καλύτερος τρόπος για να βρείτε την απάντηση. Έτσι πρακτική με την Google. Πάρτε καλός στο Google. Θα γίνει ο καλύτερος φίλος σας. Όπως και το Google, αν δεν μπορείτε να το βρείτε στο Google, cs50.net/discuss, είναι το φόρουμ συζήτησης. Οι πιθανότητες είναι, εάν έχετε μια ερώτηση, ένα 700 + συμμαθητές σας έχει, επίσης, ότι ζήτημα και μπορεί να ζητήσει ήδη στην συζητούν φόρουμ και έχουν απαντηθεί. Έτσι, εάν έχετε μια κοινή ερώτηση ή έχετε μια ερώτηση που νομίζετε Ίσως άλλοι άνθρωποι θα μπορούσαν να έχουν τρέξει σε, ελέγξτε cs50.net/discuss. Τέλος, τα δύο τελευταία, αν θέλετε να μιλήσετε σε ένα πραγματικό ανθρώπινο ον, το γραφείο Ώρες λειτουργίας Δευτέρα έως Παρασκευή. Υπάρχει, επίσης, σε απευθείας σύνδεση ώρες γραφείου για φοιτητές επέκτασης. Και τελευταίο, αλλά σίγουρα όχι λιγότερο σημαντικό, μου, θαυμαστικό. Έχετε όλοι τα στοιχεία επικοινωνίας μου. Αν χρειαστείς κάτι, παρακαλώ ποτέ διστάσετε να επικοινωνήσετε μαζί μου. Πάντα να αισθάνονται ελεύθεροι να το πράξουν. Πολύ λίγοι από εσάς με έχουν προστεθεί στο Gchat, έτσι ώστε να ήταν απογοητευτική, αλλά ελπίζουμε ότι θα αλλάξει μεταξύ αυτό και το επόμενο τμήμα. Οποιεσδήποτε ερωτήσεις μέχρι τώρα σχετικά με τους πόρους; Μεγάλη. Τέλος, ένα άλλο βύσμα για ανατροφοδότηση, sayat.me/cs50. Μπορείτε να μου δώσετε ανώνυμα ανατροφοδότηση σχετικά με το πώς κάνω. Αυτό ήταν πραγματικά χρήσιμη την περασμένη εβδομάδα. Πήρα ένα ζευγάρι των σχολίων από σας παιδιά αμέσως μετά το τμήμα, καθώς και από άλλους μαθητές που την παρακολούθησαν κατά τη διάρκεια της εβδομάδας, και ήταν απίστευτα χρήσιμο. Πάω να προσπαθήσουμε και να περιορίσει τη χρήση μου η λέξη «γλυκό», αλλά θα δείξω μου τον ενθουσιασμό και τον ενθουσιασμό με άλλους τρόπους. Αλλά υπήρχαν και άλλες πρόσθετες ουσιαστικές ανατροφοδοτήσεις, τόσο συν και τα δέλτα. Επομένως, σας παρακαλώ, σας δίνω παιδιά ανατροφοδότηση σχετικά με το πρόβλημα σύνολα σας. Μη διστάσετε να μου δώσει πληροφορίες για τη διδασκαλία μου. Είμαι εδώ για σας παιδιά. Μεγάλη. Αυτό είναι το μόνο που έχω για το πρώτο τμήμα. Πιστεύει κανείς να έχει οποιαδήποτε ερωτήσεις μέχρι τώρα; Και έχω ένα σημείωμα για το κέντρο ελέγχου. Παράταση μαθητές μου έχουν στείλει μήνυμα λέγοντας ότι δεν παίρνετε οποιοδήποτε αρχείο ήχου, αλλά αυτό είναι από την εξουσία μου για να διορθώσετε. Έτσι, ελπίζουμε, ότι παίρνει επιλυθούν σύντομα. Αν παρακολουθείτε σε απευθείας σύνδεση, γεια, αλλά δεν μπορείτε να με ακούσετε. Έτσι, η πρώτη, πρόκειται να περάσουν από GDB. GDB, όπως άφησε να εννοηθεί σε νωρίτερα, είναι ένα εργαλείο εντοπισμού σφαλμάτων πολύ καλύτερα από ό, τι printf. Έτσι για να ξεκινήσετε με το GDB, εσείς, αν Θέλετε να ανοίξει η συσκευή σας και να λάβει το αρχείο που θα σας αποσταλεί με email νωρίτερα - το αρχείο αυτό θα είναι επίσης Διατίθεται σε ένα κομμάτι - και να τρέξει GDB. / το όνομα του αρχείου. Πρώτον, φυσικά, θα πρέπει να καταρτίζουν αρχείο επειδή GDB λειτουργεί μόνο σε εκτελέσιμα αρχεία. Αλλά αν ποτέ θέλετε να ξεκινήσετε GDB, το πρώτο πράγμα που κάνετε, τρέχετε GDB. / Καίσαρα. Έτσι, αυτό είναι το όνομα του προγράμματος είμαστε πρόκειται να πάει με αυτό τώρα. Έτσι, Πάω να γράψω κάνει Καίσαρα, η οποία θα μου δώσει ένα εκτελέσιμο αρχείο εδώ επισημαίνονται με πράσινο. Και στη συνέχεια, Πάω να τρέξει GDB. / Cesar. Και εκεί θα πάτε. Βλέπετε έχουμε κάποιο κείμενο μου λέει σχετικά με την έκδοση της GDB, δίνοντάς μου ορισμένες πληροφορίες για την εγγύηση, και στη συνέχεια θα έχουν την προτροπή του ΑΕΠ, το οποίο μοιάζει κάπως της παρόμοια με την εντολή μας prompt γραμμή, αλλά θα δείτε ότι είναι ανοιχτό paren, GDB, κοντά paren. Πριν συνεχίσουμε και να διορθώσετε αυτό το αρχείο που έστειλα σε όλους σας, ας δούμε μερικές χρήσιμες εντολές έτσι έχουμε μια αίσθηση του τι πρόκειται να καλύψει. Αυτές οι εντολές που αναφέρονται εδώ στο σειρά με την οποία μπορώ να χρησιμοποιήσω γενικά τους. Έτσι, μπορώ να ξεκινήσω το πρόγραμμά μου με το τρέξιμο GBD. / Όνομα του προγράμματος, στην περίπτωση αυτή, ο Καίσαρας. Και τότε το πρώτο πράγμα που κάνω το 99,9% από τη στιγμή της διακοπής τύπου σημαίνει. Αυτό θέτει ένα σημείο καμπής στο κεντρικό. Ουσιαστικά, αυτό που κάνετε εκεί είναι το πρόγραμμα πρόκειται να σταματήσει σε κύριες ώστε να μπορείτε να αρχίσει να εξετάζει το line από τη γραμμή, αντί να τρέχει όλα ο τρόπος μέσω του. Μπορείτε να σπάσει σε διάφορα σημεία κωδικό σας, αλλά το κύριο είναι γενικά μια καλό μέρος για να ξεκινήσετε. Η επόμενη εντολή τρέχω Είναι τρέξιμο. Αυτό ξεκινά το πρόγραμμα που εκτελείται, και αν χρειαστεί να εισαγάγετε γραμμή εντολών επιχειρήματα, μπορείτε να εκτελέσετε αυτή την εντολή. Τρέξτε με τα επιχειρήματα. Έτσι, δεδομένου ότι πρόκειται πάνω από μια έκδοση C, η οποία είναι το πρόγραμμα σας παιδιά έγραψε για το chipset δύο - αυτό, φυσικά, έχει κάποια σφάλματα σε αυτό που ελπίζουμε ότι θα βρούμε - θα πάμε να τρέχει τρέχει με κάποια εντολή τα επιχειρήματα της γραμμής επειδή Καίσαρα, όπως εσείς γνωρίζετε ανά το πρόβλημα που spec, παίρνει κάποιο επιχειρήματα της γραμμής εντολών. Το επόμενο ζευγάρι των εντολών, η επόμενη το ένα είναι στην πραγματικότητα ονομάζεται το επόμενο. Αυτό παίρνει γραμμή σας από τη γραμμή μέσω του προγράμματος σας. Έτσι, το χτύπημα n τότε το Enter, θα παίρνει στην επόμενη γραμμή, εκτέλεση η προηγούμενη γραμμή. Βήμα που χρειάζεται όχι μόνο να η επόμενη γραμμή, αλλά σας μεταφέρει μέσα στις συναρτήσεις. Έτσι, αν έχετε γράψει μια λειτουργία στην τον κωδικό σας ή αν θέλετε να εξερευνήσετε ένα να θ, για παράδειγμα, μπορείτε να πατήσετε s, και αντί να πηγαίνει στην επόμενη γραμμή το αρχείο που περνάτε δεξιά τώρα, θα είστε πραγματικά βήμα σε αυτή τη λειτουργία και να δείτε τον κωδικό της. Λίστα σας δείχνει, σε πολύ φιλικό προς το χρήστη μορφή, οι 10 περίπου γραμμές γύρω από όπου σήμερα είναι στον κώδικά σας ώστε να μπορείτε να δείτε πραγματικά το αρχείο αντί να χρειάζεται να προβείτε σε διέπουν τις σχέσεις μεταξύ των διαφορετικών απόψεων. Εκτύπωση είναι σαν printf, όπως υποδηλώνει το όνομά του. Αυτό σας δείχνει ό, τι ισούται με μια μεταβλητή. Πληροφορίες ντόπιοι είναι πραγματικά χρήσιμη. Αυτή είναι μια ειδική έκδοση της εκτύπωσης. Πληροφορίες ντόπιοι σας παρουσιάζει όλες της τοπικής μεταβλητές, όλα αυτά εκτυπώνει για σας που είναι σήμερα διαθέσιμα. Γι 'αυτό και γενικά, αντί να χρειάζεται να εκτυπώσετε τις τέσσερις μεταβλητές που είμαι περίεργος για το αν είμαι σε ένα βρόχο for, για παράδειγμα, γράφω μόνο πληροφορίες ντόπιους, και θα μου τι μου μετρητή i δείχνουν ισούται, καθώς και η συστοιχία που είμαι εργάζονται σε ίσους. Τέλος, συνεχίζονται. Πληκτρολογώντας διάλειμμα που σταματά στο σημείο θραύσης. Μπορείτε να περπατήσετε μέσω της γραμμής από Σύμφωνα με το επόμενο βήμα και. Συνέχεια τρέχει το πρόγραμμα για την επόμενη σας σπάσει το σημείο ή μέχρι την ολοκλήρωση εάν δεν υπάρχουν περισσότερα σημεία διάλειμμα. Απενεργοποίηση αφαιρεί τα σημεία διάλειμμα, αν αποφασίστηκε η διακοπή στα κυριότερα ήταν ακατάλληλη, θέλετε να που κάπου αλλού. Και, τέλος, q, σταματήσουν το κάπνισμα, ξεφεύγει από τον GDB. Έτσι, αυτό το πρόγραμμα,. / Καίσαρα, πρόκειται να δούμε μέσα από αυτή τη στιγμή και πρόκειται να χρησιμοποιήσετε για να βρείτε GDB τα σφάλματα σε αυτό το πρόγραμμα. Έτρεξα αυτό το πρόγραμμα νωρίτερα με Ελέγξτε 50, και πήρα ένα συνοφρύωμα. Τα πάντα υπήρχε, καταρτίζονται, το πέρασε πολλά από τα τεστ, αλλά για κάποιο λόγο, δεν περάσει το πέμπτο δοκιμή, μετατρέποντας BARFOO, όλα τα καλύμματα, σε E-D-U-Ι-Κ-Κ, όλα τα καπάκια, χρησιμοποιώντας τρία ως βασικός. Πήρα αρκετά κοντά. Πήρα εκτός από ένα γράμμα. Έτσι, υπάρχει κάποιο μικρό λάθος εδώ. Έχω κοίταξε μέσα από τον κωδικό μου. Δεν μπορούσα να το καταλάβω. Ας ελπίσουμε ότι, εσείς μπορεί να με βοηθήσει καταλάβω τι είναι αυτό το bug είναι. Έτσι, αυτό είναι το λάθος είμαστε αναζητάτε. Ας προχωρήσουμε σε GDB. Και πάλι, έχω τρέξει GDB. / Καίσαρα, έτσι και τώρα είμαστε στην GDB. Και ποια είναι η πρώτη πράγμα που πρέπει να κάνω; Έχω μόλις άρχισε GDB. Κάποιος να μου δώσει μια καλή εντολή για να εισέλθουν. ΦΟΙΤΗΤΗΣ: Διάλειμμα κύριο. JASON Hirschhorn: Διάλειμμα κύριο. Fantastic. Ας πληκτρολογήσουμε ότι μέσα Εσείς μπορείτε να παρακολουθήσετε εδώ ή ακολουθήστε μαζί στους υπολογιστές σας. Σπάστε κύρια, και θα δείτε ένα σημείο καμπής καθορίστηκε σε - αυτό μου δίνει κάποια περίεργα διεύθυνση μνήμης, και μου δίνει επίσης τον αριθμό της γραμμής. Εάν επρόκειτο να κοιτάξουμε πίσω σε αυτό το αρχείο, Θα ήθελα να συνειδητοποιήσουμε ότι η κύρια συνέβη στη γραμμή 21. Τι θα πρέπει να τρέξει το επόμενο βήμα; Είναι το πρόγραμμα μου τρέχει; Όχι. Λοιπόν, τι θα πρέπει να τρέξει το επόμενο βήμα; ΣΠΟΥΔΑΣΤΩΝ: Τρέξτε. JASON Hirschhorn: Run. Θα πρέπει απλά να τρέχει τρέχει, ή θα πρέπει να Μπορώ να προσθέσω κάποια άλλα πράγματα μέσα; ΦΟΙΤΗΤΗΣ: Τρέξτε με το επιχείρημα. JASON Hirschhorn: Εκτέλεση με τα επιχειρήματα εντολή. Και επειδή είμαι debugging μια πολύ συγκεκριμένη περίπτωση, θα πρέπει να τεθεί η Το όρισμα της γραμμής εντολών. Γι 'αυτό θα τρέχουν τρεις, που είναι, και πάλι, η έξοδος πήρα από Έλεγχος 50. Έναρξη προγράμματος. Περνάμε μέσα από ένα ζευγάρι των γραμμών. Μπορείτε τώρα θα δείτε ότι είμαστε στη γραμμή 21. Πώς μπορώ να ξέρω ότι είμαστε στη γραμμή 21; Γιατί αν κοιτάξετε προς τα αριστερά από το παράθυρο τερματικού μου, εκεί λέει γραμμή 21. Και αυτό μου δίνει, στην πραγματικότητα, η κώδικα που είναι στη γραμμή 21. Γι 'αυτό και έκανε λάθος νωρίτερα. Κύριο δεν είναι στην πραγματικότητα στη γραμμή 21. Main είναι μια-δυο γραμμές πάνω από 21. Αλλά στη γραμμή 21, που είναι όπου είμαστε το σπάσιμο. Αυτή η γραμμή κώδικα έχει δεν έχει ακόμη εκτελεστεί. Αυτό είναι σημαντικό. Η γραμμή που βλέπετε δεν έχει έχει εκτελεστεί ακόμη. Αυτή είναι η επόμενη γραμμή κώδικα είστε έτοιμος να εκτελέσει. Έτσι, η επόμενη γραμμή, όπως εσείς είστε πιθανώς εξοικειωμένοι με, είναι αυτό προϋπόθεση έλεγχο για να δούμε αν έχω εισέλθει σε μια όρισμα γραμμής εντολών. Και για i, ποια είναι η δεύτερη μέρος ότι το να κάνουμε; Τι είναι σε θ? ΣΠΟΥΔΑΣΤΩΝ: Η αλλαγή είναι σε ακέραιο. JASON Hirschhorn: Συγγνώμη; ΦΟΙΤΗΤΗΣ: Είναι η αλλαγή της επιχείρημα σε ακέραιο. JASON Hirschhorn: Έτσι, ένα για i αλλάζει arg v1 από ένα string σε ακέραιο. Και τότε τι είναι αυτό που τον έλεγχο; ΦΟΙΤΗΤΗΣ: Αν υπάρχει ένα δεύτερο όρισμα της γραμμής εντολών, εκτός από την εκτέλεση του προγράμματος. JASON Hirschhorn: Και τι είναι το δεύτερο ήμισυ του εν λόγω Έλεγχο Boolean έκφραση; Αυτό το μέρος εδώ, το να θ? ΦΟΙΤΗΤΗΣ: Αν είναι αρνητική. JASON Hirschhorn: Αφού βεβαιωθείτε τι; ΦΟΙΤΗΤΗΣ: Αφού βεβαιωθείτε ότι είναι, στην πραγματικότητα, θετική. JASON Hirschhorn: Ακριβώς. Αυτό έλεγχο για να δούμε αν είναι αρνητικά, και εάν είναι αρνητική, Ι έχουν μια αίσθηση της επόμενης γραμμής θα μπορούσε να μου φωνάζει στο χρήστη. Έτσι, ας χτυπήσει τέλος να εκτελέσει αυτή τη γραμμή. Δεν βλέπουμε ότι η γραμμή την οποία εσείς ίσως περίμενε να δει να φωνάζει κατά τη του χρήστη και στη συνέχεια επιστρέφει, διότι αυτή η γραμμή δεν εκτελέσει. Μπήκα 3. Έτσι έκανα, στην πραγματικότητα, εισάγετε τις δύο εντολών τα επιχειρήματα της γραμμής, και 3 είναι μεγαλύτερη από το μηδέν. Έτσι είδαμε αυτή τη γραμμή, έχουμε εκτελούνται, αλλά δεν είχαμε βήμα μέσα στο αν η κατάσταση. Έτσι τώρα, το επόμενο, βλέπω Στήνω κλειδί int να ισούται με ένα i arg v1. Έτσι ώστε να είναι με τη δημιουργία μιας μεταβλητής κλειδί. Έτσι, αν μπορώ να εκτυπώσετε το κλειδί τώρα, γιατί που σας επιτρέπει να δείτε την αξία στο εσωτερικό της μεταβλητής, κλειδί ισούται με 47. Αυτό είναι παράξενο, αλλά, βεβαίως, αυτό γιατί δεν έχω εκτέλεσε τη γραμμή ακόμα. Έτσι τώρα, αν χτύπησα n, εκτελούν αυτή τη γραμμή, και να κάνουμε το κλειδί εκτύπωσης, το κλειδί θα είναι ίσο με 3, το οποίο είναι αυτό που περιμένουμε να είναι ίσο. Έτσι και πάλι, στην GDB, τη γραμμή που δείτε δεν έχετε ακόμη εκτελεστεί. Θα πρέπει να χτυπήσει n ή s ή έναν αριθμό από άλλες εντολές πραγματικά εκτελέσει αυτή τη γραμμή. Πλήκτρο Print. Βασικά κατά 3. Μέχρι στιγμής, όλα καλά. String είναι απλό κείμενο. Ας εκτελέσει αυτή τη γραμμή. Παίρνω ένα string από τον χρήστη. Ας δούμε Έλεγχος 50 μου, έχω εισάγετε BARFOO όλα τα καλύμματα, έτσι αυτό είναι που θα μπω. Αν τώρα εκτυπώσει απλό κείμενο. Θα δείτε ότι ισούται με ένα string. Μου δίνει κάποια άλλα παράξενα δεκαεξαδικό αριθμός, αλλά το κάνει σε να πούμε ότι η σειρά μου BARFOO. Αν ήθελα να δω τι κλειδί ισοφάρισε σε αυτό το σημείο, πώς θα μπορούσα να ελέγξω το κλειδί; ΦΟΙΤΗΤΗΣ: πλήκτρο Print. JASON Hirschhorn: πλήκτρο Print, ακριβώς. Και στην πραγματικότητα, υπάρχει μια συντόμευση. Αν έχετε κουραστεί από την πληκτρολόγηση εκτύπωσης, μπορείτε απλά να πληκτρολογήσετε p. Έτσι πλήκτρο p κάνει ακριβώς το ίδιο πράγμα. Και πάλι, βλέπω ότι ισούται με 3. Αν ήθελα να μάθετε τι δύο βασικά και BARFOO ισοφάρισε ταυτόχρονα αλλά ήμουν κουρασμένος από την πληκτρολόγηση κάθε ένας ξεχωριστά, I θα μπορούσε να πληκτρολογήσετε πληροφορίες ντόπιους. Αυτό μου δίνει το κλειδί ίσων 3. Απλό κείμενο ισούται BARFOO. Μου δίνεται επίσης αυτά τα δύο περίεργα πράγματα στην κορυφή, αυτή η μεταβλητή i και αυτή η μεταβλητή n. Αυτά είναι υπαρκτού το κυριότερο πρόγραμμα μου. Εμείς δεν έχετε τους αντιμετωπίζουν ακόμα, αλλά ως μια προεπισκόπηση, εκείνες υπάρχουν κατά τη γνώμη μου για το βρόχο. Έτσι, αυτή τη στιγμή, που ισούται με κάποιο περίεργο αριθμούς, επειδή δεν έχουν προετοιμαστεί ακόμα, αλλά δεν υπάρχουν ακόμα στη μνήμη, έτσι είναι ακριβώς που σε κάποια τιμή σκουπίδια. Αλλά μπορούμε να δούμε το κλειδί στην πεδιάδα κείμενο εκεί. Έτσι, Πάω να εκτελέσει αυτή τη γραμμή, γραμμή 34, ο βρόχος. Εμείς πάμε για να πηδήξουν το για loop πατώντας n. Και είμαστε μέσα στο for loop. Είμαστε στο πρώτο μας έλεγχο. Και πάλι, αυτές θα πρέπει να εξετάσουμε το είδος των γνωστά σε σας, επειδή αυτό ήταν ένα Πρόγραμμα Καίσαρα που γράφτηκε, αλλά πάλι, έχει κάποια bug. Και τώρα αν κάνω πληροφορίες ντόπιοι, επειδή είμαι μέσα σε αυτό για βρόχο, θα δείτε ότι i ισούται με μηδέν, όπως περιμένουμε. Αυτό είναι αυτό που έθεσε και να προετοιμαστεί είναι στο βρόχο for. η ισούται 6. Αυτό επίσης λογικό, διότι θέτουμε να το strlen του απλού κειμένου. Έτσι μου αρέσει να κάνω πληροφορίες ντόπιους ή να εκτυπώσετε σε μια μεταβλητή συχνά για να βεβαιωθείτε ότι όλα είναι πάντα ό, τι Περιμένω να είναι ίσο. Στην περίπτωση αυτή, τα πάντα είναι αυτό που περιμένω να είναι ίσο. Οπότε ας αρχίσουμε να κινούμαστε μέσα αυτό για το βρόχο. Η γραμμή Είμαι είναι η γραμμή 36, αν απλά i κειμένου είναι μεγαλύτερη από ό, τι ένα απλό και i κειμένου είναι μικρότερη ή ίση με το z. Ξέρω το πρόβλημά μου δεν είναι με την πρώτη μου e-mail, είναι με το δεύτερο γράμμα. Αν κοιτάξουμε πίσω στο Έλεγχος 50, Β πηγαίνει στην Ε πρόστιμο. Παίρνω το Α και αφήνοντας ως Α, δεν το αλλάζει με τον D. Έτσι, κάτι δεν πάει καλά με η δεύτερη επιστολή. Έτσι, Πάω να κινηθεί εκεί σε ένα δευτερόλεπτο. Αλλά αν δεν θέλετε να ελέγξετε τι κάμπο κείμενο που ισοφάρισε στο συγκεκριμένο περίπτωση, νομίζω ότι πρέπει να είναι αυτό; Τι θα πρέπει να απλό κείμενο που ισοδυναμούσε αυτό πρώτο γύρο με το βρόχο for; ΦΟΙΤΗΤΗΣ: Μηδέν; JASON Hirschhorn: Απλό κείμενο του εγώ; Γι 'αυτό πρέπει να είναι κεφάλαιο Β. Εγώ, βέβαια, ισούται με μηδέν, αλλά απλό κείμενο βραχίονα μηδέν κλειστό βραχίονα ισούται με B γιατί χορδές, όπως είδαμε την περασμένη εβδομάδα, είναι array, οπότε παίρνουμε το πρώτο χαρακτήρα από αυτό. Έτσι και πάλι, αν εκτυπωθεί απλό κείμενο Εγώ, εγώ, στην πραγματικότητα, να πάρει τον χαρακτήρα Β. Και αυτό είναι τακτοποιημένο, έτσι δεν είναι; Δεν έχω πραγματικά απλό κείμενο I. Αυτό δεν είναι μία από τις μεταβλητές που καθορίζονται ή προετοιμασία του, αλλά μπορείτε να εκτυπώσετε από μια ολόκληρη σειρά από πράγματα αν θέλετε να. Αλλά ας προχωρήσουμε μέσα. Αν απλού κειμένου που είναι μεγαλύτερη από Α και απλό κείμενο Ι είναι μικρότερο ή ίσο προς Z, που σαφώς είναι αλήθεια, διότι έχουμε ένα κεφάλαιο Β. Πάω να τρέξει κάποια εντολή σε αυτό. Είδαμε ότι τα μαθηματικά την περασμένη εβδομάδα, οπότε θα θεωρούμε δεδομένο ότι λειτουργεί δικαίωμα σύμφωνα με το Έλεγχος 50. Αυτά τα άγκιστρα, ο πρώτος έδειξε ότι ήμουν την έξοδο από το αν κατάσταση, ο δεύτερος έδειξε ότι είμαι έξοδο από το βρόχο for. Και έτσι τώρα όταν χτύπησα Στη συνέχεια, θα δούμε είμαστε πίσω στο βρόχο for και πάλι. Θα πάμε μέσα από το για την εκ νέου βρόχου. Ας πραγματικά βήμα προς το δεύτερο επανάληψη του βρόχου και το είδος info ντόπιους. Έτσι, είμαστε στην δεύτερη επανάληψη του βρόχου για μας. I ισούται με 1, η οποία αναμένουμε. Ν ισούται με 6, το οποίο περιμένουμε. Βασικά ισούται με 3, το οποίο περιμένουμε. Και απλό κείμενο, θα δείτε, ισούται EARFOO τώρα, όχι πια γιατί BARFOO στο προηγούμενο επανάληψη μας, ο Β ήταν άλλαξε σε ένα κεφάλαιο Ε. Έτσι είμαστε έτοιμοι να αντιμετωπίσει το πρόβλημα, οπότε αυτό Εκεί θα πάμε να βουτήξει στο debugging. Αλλά κανείς δεν έχει απορίες σχετικά με το τι έχουμε κάνει μέχρι τώρα; Fantastic. Έτσι είμαστε έτοιμοι να εκτελέσουν αυτό, αν κατάσταση, απλό βραχίονα κείμενο που έκλεισε βραχίονα μεγαλύτερο από ένα και απλό κείμενο που μικρότερη ή ίση με Ζ. Αλλά πριν Μπω σε αυτό, επειδή αυτό είναι όπου Ξέρω ότι είναι λάθος μου, θέλω να επισημάνω από απλό κείμενο του Ι. Έτσι, ας βάλουμε εκτύπωση. Κάνει ισούται με το χαρακτήρα A, έτσι ώστε να φαίνεται μέχρι στιγμής, όλα είναι ωραία και καλά. Γι 'αυτό και περιμένουμε αυτή τη γραμμή ανά τη λογική μου, η γραμμή αυτή θα πρέπει να είναι αλήθεια. Είναι ένα κεφαλαίο γράμμα. Αλλά αν χτύπησα n, συνειδητοποιούμε ότι αυτή η γραμμή, στην πραγματικότητα, δεν εκτελέσει. Πήδηξα προς τα κάτω στο άλλο, εάν. Γιατί συνέβη αυτό; ΦΟΙΤΗΤΗΣ: Επειδή έχετε την κατάστασή σας απλού κειμένου είναι μεγαλύτερη από Α, δεν είναι ίση ή μεγαλύτερη από ό, τι. JASON Hirschhorn: Έτσι είχα απλού κειμένου μου Ι είναι μεγαλύτερη από μία, όχι μεγαλύτερο από ή ίσο με. Έτσι, σαφώς, το κεφάλαιο Α δεν έκανε ενεργοποιούν αυτό αν η κατάσταση, και το κάναμε Δεν το βήμα σε αυτό, και το κάναμε δεν κάνει την απαραίτητη στροφή. Έτσι, αυτό είναι, στην πραγματικότητα. Κατάλαβα bug μου. Θα μπορούσα να πάω πίσω στο αρχείο προέλευσης μου, αλλάξετε, και να ενημερώνει και Ελέγξτε τρέξει 50 και πάλι. Αλλά θα δούμε, μόνο για την παιδαγωγική του χάρη, αν συνεχίζω. Το άλλο, αν δεν εκτελεί ούτε, αλλά τι αντί ισούται είναι η εντολή αυτό δεν αλλάζει. Γι 'αυτό δεν έχει αλλάξει καθόλου, και αν εκτυπώσει απλό κείμενο εδώ, θα δούμε θα μέσα από αυτό για το βρόχο δεν το έκανε, στην πραγματικότητα, αλλάξει αυτό το δεύτερο χαρακτήρα σε όλα. Είναι ακόμα ένα κεφάλαιο Α. Έτσι και πάλι, εμείς λάθη λάθος μας. Συνειδητοποιήσαμε ότι υπήρχε κάποια λογική λείπει. Και το debugged μπροστά από την εποχή πριν από την στην πραγματικότητα εκτελεί αυτή τη γραμμή, αλλά θα έχετε παρατηρήσει αν είχαμε μόνο χτύπησε στο Επόμενο και μεταβείτε σε αυτό το άλλο αν, Αυτό σημαίνει ότι αν η κατάσταση Δεν ήταν αλήθεια. Εμείς δεν είχε, στην πραγματικότητα, να πάρει το αποτέλεσμα που περιμέναμε. Έτσι, τότε θα μπορούσε να είχε ζητηθεί, είχε δεν ήταν τόσο έξυπνη, για να δούμε ότι αν η κατάσταση και να ελέγξει αν, στην πραγματικότητα, κατάστασή μας θα πρέπει να αξιολογήσει σε αλήθεια στο σημερινό πλαίσιο. Αυτό είναι όλο για τον εντοπισμό σφαλμάτων σε αυτό το πρόγραμμα. Μήπως κάποιος έχει απορίες; Ποια εντολή θα μπορούσε χτύπησα να σταματήσουν GDB; Ερ: Και τότε θα σας ζητηθεί, εγκαταλείψει ούτως ή άλλως; Ναι ή όχι. Θα χτυπήσει ναι, και εγώ θα έχουν εγκαταλείψει GDB. Έτσι, αυτό ήταν μια γρήγορη αλφαβητάρι για GDB. Στην πραγματικότητα, σε ένα πραγματικό σενάριο, Το έκανα αυτό σε ώρες γραφείου. I GDBed αυτό το ακριβές πρόγραμμα σε ώρες γραφείου με έναν μαθητή. Και αν πάμε πίσω στις εντολές που είδαμε πριν, χρησιμοποιήσαμε διάλειμμα κύρια, πρώτη πράγμα που κάναμε. Χρησιμοποιήσαμε τρέχει με τα επιχειρήματα της γραμμής εντολών, δεύτερο πράγμα που κάναμε. Χρησιμοποιήσαμε το επόμενο πολλά να κινηθεί μας μέσω των γραμμών. Και πάλι, η σύντομη εκδοχή του είναι το επόμενο n. Αυτό είναι στις παρενθέσεις σε γκρι χρώμα στη διαφάνεια. Εμείς δεν χρησιμοποίησε το βήμα, αλλά δεν το κάναμε απαραιτήτως να για την περίπτωση αυτή. Αλλά θα μπορούσαμε να το χρησιμοποιήσετε σε ένα λίγο αργότερα σήμερα, αν είμαστε εντοπισμού σφαλμάτων, για παράδειγμα, δυαδική αναζήτηση, όταν δυαδικό αναζήτηση καλείται σε ένα ξεχωριστό λειτουργία, αλλά υπάρχει κάποιο λάθος με αυτό. Εμείς πάμε να θέλετε να μπείτε η κλήση σε δυαδική αναζήτηση και πραγματικά να διορθώσετε αυτό. Λίστα εμείς δεν χρησιμοποιούν είτε επειδή είχαμε μια καλή αίσθηση του κώδικά μας, αλλά αν δεν θέλετε να πάρετε μια αίσθηση του τι κωδικού ήταν περίπου, θα μπορούσα απλά να χρησιμοποιήσετε λίστα. Εκτυπώστε χρησιμοποιήσαμε, πληροφορίες ντόπιοι που χρησιμοποιούνται. Συνέχεια εμείς δεν πρέπει να χρησιμοποιήσετε αυτό το περίπτωση, ούτε κάναμε πρέπει να χρησιμοποιήσετε απενεργοποιήσετε, αλλά κάναμε χρήση σταματήσουν το κάπνισμα. Και πάλι, αυτές οι 10 εντολές, τους πρακτική. Αν καταλαβαίνετε αυτές τις 10 εντολές, θα πρέπει να καθοριστούν για τον εντοπισμό σφαλμάτων κάθε εκδώσουμε GDB. Έτσι είμαστε έτοιμοι να πάμε σε, και πάλι, με την ουσία του τμήματος σήμερα, που πηγαίνει πέρα ​​από αυτές η ταξινόμηση και αναζήτηση αλγορίθμων. Πριν το κάνουμε αυτό, και πάλι, οποιεσδήποτε ερωτήσεις, σχόλια, τις ανησυχίες για την GDB; Έτσι είναι όλοι πρόκειται να χρησιμοποιήσει GDB παρά printf; Έτσι, ο καθένας, για χάρη του διηνεκές, όλοι κουνώντας το κεφάλι τους το δικαίωμα τώρα, γι 'αυτό θα σας δούμε σε ώρες γραφείου και όλα τα TFs θα σας και να δείτε θα πουν, να μου δείξει πώς να χρησιμοποιούν GDB, και θα είστε σε θέση να τους δείξουμε, έτσι δεν είναι; Το είδος του; Ίσως ελπίζουμε. Cool. Έτσι θα πάμε για να προχωρήσουμε σε ταξινόμησης και αναζήτησης. Θα δείτε έχω μια λίστα που ήδη ταξινόμηση για μας, αλλά ότι δεν πρόκειται να είναι η περίπτωση πάντα. Έτσι, το πρόβλημα που προδιαγραφές πρόβλημα που τρεις, έχετε σορτς ότι μπορείτε να παρακολουθήσετε, και στην πραγματικότητα σας ζητά να παρακολουθήσουν αυτά τα σορτς. Επίσης, σε διάλεξη την περασμένη εβδομάδα, πήγαμε πάνω πολλοί από αυτούς τους αλγορίθμους, έτσι είμαι δεν πρόκειται να περνούν το χρόνο τους στην τάξη θα πάνω από αυτούς τους αλγόριθμους και πάλι ή σχέδιο εικόνες για το πώς αυτά τα αλγόριθμοι λειτουργούν. Και πάλι, οι πληροφορίες αυτές μπορείτε να επαν-watch διάλεξη, ή ότι οι πληροφορίες συλλαμβάνεται εξαιρετικά στις σορτς για αυτές τις αναζητήσεις, όλοι τα οποία είναι διαθέσιμα στο cs50.net. Έτσι, αντ 'αυτού, τι θα πάμε να κάνετε είναι να γράψετε αυτά τα προγράμματα. Έχουμε την αίσθηση, ένα νοητικό μοντέλο, πώς εργάζονται, και έτσι αυτό που θα πάμε να κάνουμε είναι να κωδικοποιήσει τα αληθινά. Εμείς πάμε για να μετατρέψει το νοητικό μοντέλο, ότι η εικόνα, αν θέλετε, σε ο πραγματικό κώδικα. Και αν ήταν μια μικρή σύγχυση ή θολό σχετικά με το νοητικό μοντέλο, Είμαι απόλυτα καταλαβαίνουν. Δεν είμαστε πραγματικά πρόκειται να άλμα στον κώδικα αμέσως. Έτσι, ενώ αυτό το μήνυμα σε αυτή τη διαφάνεια ζητά να κωδικοποιήσει δυαδική αναζήτηση, και στην πραγματικότητα, μια επαναληπτική εκδοχή δυαδική αναζήτηση, το πρώτο πράγμα που πραγματικά θέλετε να κάνετε είναι να γράψετε κάποιο ψευδοκώδικα. Έτσι, έχετε αυτό το νοητικό μοντέλο πώς λειτουργεί δυαδικά αναζήτησης. Πάρτε ένα φύλλο χαρτί, αν έχετε μια άμεσα διαθέσιμη, ή να ανοίξει ένα επεξεργαστή κειμένου, και θα ήθελα ο καθένας να γράψει. Πάρτε τέσσερα λεπτά για να γράψει το pseudocode για δυαδική αναζήτηση. Πάλι, σκεφτείτε για αυτό το νοητικό μοντέλο. Θα έρθει γύρω, αν έχετε ερωτήσεις και μπορούμε να εξάγουμε την εικόνα έξω. Αλλά πρώτα, πριν ξεκινήσουμε τον προγραμματισμό, Θα ήθελα να γράψω το pseudocode για δυαδική αναζήτηση έτσι ώστε όταν θα βουτήξει μέσα, έχουμε κάποια κατεύθυνση, όπως όπου θα πρέπει να το κεφάλι. ΦΟΙΤΗΤΗΣ: Μπορούμε να υποθέσουμε την σειρά τιμές που παίρνουμε είναι ήδη ταξινομημένο; JASON Hirschhorn: Έτσι, για δυαδική αναζήτηση να εργαστούν - εξαιρετική ερώτηση - θα πρέπει να ληφθούν σε ταξινομημένη πίνακα τιμών. Έτσι υποθέσουμε ότι θα λειτουργήσει. Θα πάμε πίσω σε αυτή τη διαφάνεια. Θα δείτε σε μωβ λειτουργία δήλωση είναι bool binary_search int αξία, int τιμές, int n. Αυτό θα φανεί γνωστή, αν έχετε ήδη προσεγγίσει ή να πάρει σας τα χέρια βρώμικα με το σύνολο του προβλήματος. Αλλά αυτό είναι δήλωση της συνάρτησης σας. Και πάλι, δεν χρειάζεται να ανησυχείτε για ότι ένα μεγάλο μέρος αυτή τη στιγμή. Αυτό που θέλω πραγματικά να κάνετε είναι να πάρετε τέσσερα λεπτά για να ψευδοκώδικα δυαδικό αναζήτηση, και στη συνέχεια θα πάμε πάνω από ότι ως ομάδα. Και θα έρθει γύρω. Εάν έχετε απορίες, μπορείτε χωρίς να σηκώσεις το χέρι σου. Γιατί δεν παίρνετε δύο λεπτά να ολοκληρωθεί μέχρι το ψευδοκώδικα; Ξέρω ότι αυτό μπορεί να φαίνεται γελοίο το γεγονός ότι ξοδεύουμε τόσο πολύ χρόνο για κάτι που δεν είναι ακόμα πραγματικότητα σε C, αλλά ειδικά για αυτούς, περισσότεροι προκλητική αλγόριθμοι και το πρόβλημα σύνολα που έχουμε για να καταλάβουμε, αρχής γενομένης από το ψευδοκώδικα δεν είναι ανησυχητικό σχετικά με τη σύνταξη, ακριβώς ανησυχούν για η λογική, είναι απίστευτα χρήσιμη. Και με αυτόν τον τρόπο, δεν είστε επίλυση δύο απίστευτα δύσκολα προβλήματα ταυτόχρονα. Είσαι μόνο με επίκεντρο τη λογική, και στη συνέχεια θα προχωρήσουμε στη σύνταξη. OK. Ας ξεκινήσουμε διέρχεται ο ψευδοκώδικας. Έχω γράψει εδώ, δυαδική αναζήτηση ψευδοκώδικα. Θα γράψω αυτό για το επιβιβαστεί μαζί. Ή εγώ θα το γράψω και θα δώσει μου τις προτροπές που χρειάζομαι. Έτσι, μπορεί κανείς να μου δώσει την πρώτη γραμμή του ψευδοκώδικα σας έγραψε για την δυαδική αναζήτηση; Ναι, Annie; ΦΟΙΤΗΤΗΣ: Αν και το μήκος της κατάλογος είναι μεγαλύτερο από μηδέν. JASON Hirschhorn: Ενώ το μήκος της λίστας μεγαλύτερη από μηδέν. Και πάλι, βλέπουμε μερικά C-αναζητούν συντακτικά πράγματα εδώ. Αλλά τα περισσότερα από αυτά είναι στα αγγλικά. Μήπως κάποιος έχει κάποια γραμμή βάζουν πριν από αυτό το ψευδο-κώδικα τους; ΦΟΙΤΗΤΗΣ: Πάρτε μια σειρά ταξινόμηση των αριθμών. JASON Hirschhorn: Έγραψες "πάρετε μια σειρά των ταξινομημένων αριθμών. "Per η δήλωση της συνάρτησης, θα πρέπει να περνά μια σειρά από αριθμούς ταξινομημένο. ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]. JASON Hirschhorn: Έτσι θα έχουμε ότι. Αλλά ναι, αν δεν είχαμε αυτό, θα πρέπει να ταξινομήσετε μας σειρά αριθμοί, διότι δυαδική αναζήτηση λειτουργεί μόνο για ταξινόμηση συστοιχίες. Έτσι, ενώ το μήκος της λίστας ισούται με μηδέν, είμαι πρόκειται να τεθεί σε κάποια άγκιστρα για να φανεί λίγο περισσότερο σαν C. Όμως, ενώ, φαίνεται να χαρτογραφήσει σε ένα while loop, έτσι ώστε μέσα σε αυτό, ενώ βρόχο, τι χρειαζόμαστε για να κάνει για δυαδική αναζήτηση; Κάποιος άλλος που δεν μου έχει δοθεί απαντήσει ακόμα, αλλά ποιος το έγραψε αυτό; ΦΟΙΤΗΤΗΣ: Πηγαίνετε στη μέση της λίστας. JASON Hirschhorn: Τομ. Πάνε στη μέση της λίστας. Και η παρακολούθηση ερώτηση, τι κάνουμε μόλις είμαστε κατά τη μέση της λίστας; ΦΟΙΤΗΤΗΣ: Κάνετε έναν έλεγχο αν αυτό είναι ο αριθμός που ψάχνετε. JASON Hirschhorn: Εξαιρετική. Πηγαίνετε στη μέση της λίστας και ελέγξτε αν η αξία μας είναι εκεί - φανταστική. Μήπως κάποιος έχει τίποτα άλλο ότι ήταν διαφορετικό από αυτό; Αυτό είναι ακριβώς σωστό. Το πρώτο πράγμα που κάνουμε σε δυαδική αναζήτηση είναι να πάτε στη μέση της λίστας και ελέγξτε για να δείτε εάν η αξία μας είναι εκεί. Έτσι υποθέτω ότι αν η τιμή μας είναι εκεί, τι θα κάνουμε; ΦΟΙΤΗΤΗΣ: Θα επιστρέψει το μηδέν [δεν ακούγεται]. JASON Hirschhorn: Ναι, αν μας τιμή είναι εκεί, το βρήκαμε. Έτσι, μπορούμε να πούμε κατά κάποιο τρόπο, ωστόσο αυτό συνάρτηση ορίζεται, θα πει ο χρήστης το βρήκαμε. Αν δεν είναι εκεί, όμως, ότι είναι όπου αυτό γίνεται δύσκολη. Έτσι, αν δεν είναι εκεί, κάποιος άλλος που δούλευε στη δυαδική αναζήτηση ή έχει μια ιδέα τώρα, τι κάνουμε; ΣΠΟΥΔΑΣΤΩΝ: Ερώτηση. JASON Hirschhorn: Ναι; ΦΟΙΤΗΤΗΣ: Είναι η σειρά έχει ήδη ταξινόμηση; JASON Hirschhorn: Ναι, υποθέτουμε η σειρά είναι ήδη ταξινομημένο. ΦΟΙΤΗΤΗΣ: Μέχρι τότε θα πρέπει να ελέγξετε εάν η τιμή που βλέπετε είναι μεγαλύτερη από ό, τι η τιμή που θέλετε, μπορείτε να μετακινήσετε στη μέση του άλλου ημίσεως. JASON Hirschhorn: Έτσι, αν η μέση η λίστα είναι μεγαλύτερη από ό, τι είμαστε ψάχνετε, τότε κάνουμε τι; Προχωράμε πού; ΦΟΙΤΗΤΗΣ: Θέλετε να μετακινηθούν σε το ήμισυ του καταλόγου με αριθμοί χαμηλότερη από εκείνη. JASON Hirschhorn: έτσι θα καλέστε ότι η αριστερά. Έτσι, αν μεσαίο είναι μεγαλύτερο, μπορούμε να ψάξουμε το αριστερό μισό της λίστας. Και στη συνέχεια με την αναζήτηση, τι εννοώ με την αναζήτηση; ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]. JASON Hirschhorn: Πάμε στη μέση. Είμαστε πραγματικά επαναλάβετε αυτό το πράγμα. Εμείς πάμε πίσω μέσω βρόχο while μας. Θα σας δώσω το τελευταίο - άλλο, εάν, μέση είναι μικρότερη από ό, τι εμείς, τι κάνουμε εδώ; ΦΟΙΤΗΤΗΣ: Μετάβαση προς τα δεξιά. JASON Hirschhorn: Αναζήτηση το δικαίωμα. Αυτό φαίνεται καλό, αλλά δεν έχει κανέναν κάτι που μπορεί να λείπει ή οτιδήποτε άλλο που βάζετε σε ψευδο-κώδικα σας; Έτσι, αυτό είναι ό, τι έχουμε μέχρι τώρα. Ενώ το μήκος του καταλόγου είναι μεγαλύτερο από το μηδέν, θα πάμε για να πάει στη μέση της λίστας και ελέγξτε αν η αξία μας είναι εκεί. Εάν η μέση τιμή είναι μεγαλύτερη, θα πάμε να αναζήτηση αριστερά, αλλιώς αν το μεσαίο είναι λιγότερο, θα πάμε για να αναζητήσετε το δικαίωμα. Έτσι, έχουμε όλοι είχαν κάποια εξοικείωση με οι όροι που χρησιμοποιούμε στην επιστήμη των υπολογιστών και τα εργαλεία που έχουμε. Αλλά θα παρατηρήσετε ήδη ήμασταν μιλώντας στα αγγλικά, αλλά βρήκαμε μια πολλά πράγματα που φαινόταν στο χάρτη για να εργαλεία που έχουμε στην κωδικοποίηση εργαλειοθήκη μας. Έτσι, δεξιά από το ρόπαλο, δεν είμαστε πρόκειται να κωδικοποιήσει στην πραγματικότητα ακόμα. Τι βλέπουμε εδώ στα αγγλικά ότι οι χάρτες για τα πράγματα που μπορεί να γράψει σε C; ΣΠΟΥΔΑΣΤΩΝ: Ενώ. JASON Hirschhorn: Ενώ. Έτσι αυτό, ενώ εδώ χάρτες για να κάνουν τι; ΦΟΙΤΗΤΗΣ: A βρόχο while. JASON Hirschhorn: Α, ενώ βρόχος; Ή μάλλον, γενικότερα, ένας βρόχος. Θέλουμε να κάνουμε κάτι ξανά και ξανά. Έτσι θα πάμε για να κωδικοποιήσει ένα βρόχο. Και εμείς ήδη ξέρουμε, γιατί έχουμε κάνει αυτό μια-δυο φορές και εμείς έχουν πολλά παραδείγματα εκεί έξω, πώς πράγματι να γράψω Ο δείκτης αυτός για έναν βρόχο. Έτσι ώστε να είναι αρκετά εύκολο. Θα πρέπει να είναι σε θέση να πάρει ότι ξεκίνησε αρκετά γρήγορα. Τι άλλο μπορούμε να δούμε εδώ; Ποιες άλλες δομές συντάξεις, τα πράγματα ότι είμαστε εξοικειωμένοι με το C, εμείς έχουν ήδη μια αίσθηση βασισμένη εκτός από τις λέξεις που χρησιμοποιούνται; Ναι, η Άννα; [Δεν ακούγεται] Αστειεύομαι. Άννα, να προχωρήσει. ΦΟΙΤΗΤΗΣ: Αν και αλλού. JASON Hirschhorn: Αν και άλλο - ακριβώς εδώ. Λοιπόν, τι κάνουν εκείνοι μοιάζουν; ΦΟΙΤΗΤΗΣ: Μια if else δήλωση. JASON Hirschhorn: Ναι, συνθήκες, έτσι δεν είναι; Γι 'αυτό και θα πρέπει πιθανώς να γράψουν κάποιες προϋποθέσεις. Και πάλι, αν και ίσως προκαλέσει σύγχυση στην Πρώτα, θα έχουν γενικά μια αίσθηση τώρα πώς να γράψει τις συνθήκες και η σύνταξη για τις συνθήκες. Και αν δεν το κάνουμε, απλά κοιτάζω προς τα πάνω το σύνταξη για τις συνθήκες, αποκοπή και επικόλληση ότι, επειδή εμείς ξέρουμε χρειάζονται μια κατάσταση εδώ. Οποιαδήποτε άλλα πράγματα που βλέπουμε ότι σε χάρτη πράγματα που ίσως χρειαστεί να κάνετε σε C; Ναι, Aleha; ΦΟΙΤΗΤΗΣ: Αυτό μπορεί να είναι προφανής, με ακριβώς τον έλεγχο, αν μια αξία ισούται με κάτι. JASON Hirschhorn: Επομένως, πώς θα ελέγξει και - έτσι πάμε στην μέση της λίστας και ελέγξτε αν η αξία μας είναι εκεί; Πώς θα το κάνουμε αυτό σε C; Ποια είναι η σύνταξη για αυτό; ΦΟΙΤΗΤΗΣ: Ίσο, ισούται με. JASON Hirschhorn: Ίσο, ισούται με. Έτσι, ο έλεγχος αυτός κατά πάσα πιθανότητα θα να εξισώνουν, ισούται με. Έτσι θα ξέρουμε ότι χρειαζόμαστε κάπου. Και στην πραγματικότητα, απλά εγγράφως ότι, βλέπουμε αυτά τα άλλα πράγματα. Εμείς πάμε να χρειαστεί να κάνετε κάποια τελεστές σύγκρισης εκεί - φανταστική. Έτσι φαίνεται πραγματικά σαν, από και μεγάλη, δεν έχουμε γράψει ένα λέξη του κώδικα C ακόμα. Αλλά πήραμε το νοητικό μοντέλο κάτω μέσω διαλέξεων και αυτές σορτς. Γράψαμε ψευδο-κώδικα ως ομάδα. Και ήδη, έχουμε 80%, εφόσον δεν Το 90% του τι πρέπει να κάνουμε. Τώρα, εμείς απλά πρέπει να κωδικοποιήσει αυτό, το οποίο και πάλι, είναι ένα μη τετριμμένη πρόβλημα προς επίλυση. Αλλά τουλάχιστον έχουμε κολλήσει στη λογική. Τουλάχιστον τώρα όταν πάμε σε ώρες γραφείου, Μπορώ να πω, ξέρω τι χρειάζομαι να κάνει, αλλά μπορεί να σας υπενθυμίσω Θέλω τη σύνταξη; Ή ακόμα και αν οι ώρες γραφείου γεμάτο, μπορείτε να το Google για τη σύνταξη, μάλλον από το να κολλήσει στη λογική. Και πάλι, αντί να προσπαθούν να λύσουν η λογική και τα προβλήματα σύνταξη όλων με τη μία, είναι συχνά πολύ καλύτερο να να σπάσει αυτά τα δύο δύσκολα προβλήματα μακριά στο δύο πιο εύχρηστο αυτά και να κάνει το ψευδο-κώδικα και στη συνέχεια κώδικα σε C. Ας δούμε λοιπόν τι έκανα για την ψευδο-κώδικα μπροστά από το χρόνο. Ενώ το μήκος του καταλόγου είναι μεγαλύτερο από το μηδέν, να δούμε στη μέση του καταλόγου. Αν βρεθεί αριθμός που επιστρέφει αληθές, αλλιώς αν υψηλότερο αριθμό, αναζήτησης αριστερά. Αλλιώς, εάν ο αριθμός κάτω, αναζήτηση δεξιά, επιστρέφει false. Έτσι ώστε να είναι σχεδόν ίδιο, αν όχι σχεδόν πανομοιότυπο με αυτό που έγραψε. Στην πραγματικότητα, ο Τομ, τι είπε το πρώτο, σπάζοντας την μέση της λίστας και, εάν αριθμό που βρίσκεται σε δύο καταστάσεις είναι στην πραγματικότητα αυτό που έκανα. Τα συνδύασα εκεί. Θα έπρεπε να είχα ακούσει σας την πρώτη φορά. Αυτή είναι λοιπόν η ψευδο-κώδικα που έχουμε. Αν θέλετε τώρα, συγνώμη, πηγαίνετε πίσω στο αρχικό μας πρόβλημα. Ας κωδικό binary.c. Έτσι εφαρμόσει μια επαναληπτική έκδοση των δυαδική αναζήτηση χρησιμοποιώντας την ακόλουθη δήλωση της συνάρτησης. Και δεν χρειάζεται να αντιγράψετε κάτω ακριβώς ακόμα. Είμαι πραγματικά πρόκειται να ανοίξει μέχρι εδώ binary.c. Έτσι, υπάρχει η δήλωση της συνάρτησης στη μέση της οθόνης. Και θα δείτε Πήρα το ψευδο-κώδικα από στις πλευρές μου, αλλά σχεδόν ταυτόσημες σε ό, τι γράψαμε, και θέσω σε σας. Έτσι τώρα, ας πέντε λεπτά να κωδικοποιήσει αυτή τη λειτουργία. Και πάλι, αν έχετε οποιεσδήποτε ερωτήσεις, σηκώστε το χέρι σας, επιτρέψτε μου να ξέρω, εγώ θα έρθουν κοντά. ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]. JASON Hirschhorn: Έτσι πήρα το δυαδικό ορισμό αναζήτησης κατά τη κορυφή, στη γραμμή 12. Αυτό είναι ό, τι πήρα για την slide μου. Και τότε όλη αυτή η ψευδο-κώδικα που μόλις αντιγραφή και επικόλληση από το κλείστρο, ψευδο-κώδικα διαφάνεια. Δεν είμαι ακόμα άκουσε [δεν ακούγεται]. Έτσι, αν έχετε τελειώσει σας εφαρμογή, θέλω να το ελέγξουμε. Σας αποσταλεί το αρχείο helpers.h νωρίτερα σε αυτή την κατηγορία. Και θα είναι διαθέσιμα στο διαδίκτυο, καθώς και για download για άτομα που παρακολουθούν αυτή τη φορά το τμήμα καθυστερήσει. Και χρησιμοποίησα μόνο τη γενική κατανομή κώδικα από pset3. Έτσι πήρα ΡΓΝϋ.Ο, χρησιμοποιήστε το αρχείο helpers.h μου και όχι στο αρχείο helpers.h που σας δίνεται στον κώδικα της διανομής. Και έπρεπε να κάνω άλλη μια αλλαγή στην ΡΓΝϋ.Ο όχι καλώντας απλά αναζήτησης, καλέστε binary_search. Έτσι, εάν θέλετε να δοκιμάσετε τον κωδικό σας, Γνωρίζουμε ότι αυτό είναι το πώς να το κάνουμε. Στην πραγματικότητα, όταν εμείς θα πρέπει να τρέξεις αυτό τον κώδικα τώρα, μόλις έκανα ένα αντίγραφο του Κατάλογος pset3 μου, και πάλι, ανταλλαχθούν έξω τα αρχεία βοηθοί και στη συνέχεια έκανε ότι αλλάξει ΡΓΝϋ.Ο να καλέσετε binary_search και όχι απλά αναζήτηση. JASON Hirschhorn: Ναι. Έχετε μια ερώτηση; ΣΠΟΥΔΑΣΤΩΝ: Nevermind. JASON Hirschhorn: Μην ανησυχείτε. Λοιπόν, ας ξεκινήσουμε. Εμείς θα κωδικοποιήσει αυτό ως ομάδα. Ένα άλλο σημείωμα. Και πάλι, αυτό είναι, μπορεί εύκολα να ανταλλαχθούν in για το πρόβλημα Set Τρία. Έχω το αρχείο helpers.h μου ο οποίος, αντί από το helpers.h μας δίνεται, δηλώνει δυαδική αναζήτηση, φούσκα το είδος και το είδος επιλογής. Και σε ΡΓΝϋ.Ο θα παρατηρήσετε on line, τι είναι αυτό, γραμμή 68, που ονομάζουμε δυαδικό αναζήτηση και όχι την αναζήτηση. Έτσι και πάλι, ο κώδικας που είναι διαθέσιμα σε απευθείας σύνδεση ή ο κωδικός που είστε δημιουργώντας τώρα μπορεί εύκολα να ανταλλαχθούν μέσα για p set 3 για να το ελέγξει. Αλλά πρώτα, ας την κωδικοποίηση δυαδική αναζήτηση. Δήλωση της συνάρτησης μας, επιστρέφουμε μια bool. Παίρνουμε έναν ακέραιο αριθμό που ονομάζεται αξία. Παίρνουμε μια σειρά ακεραίων ονομάζεται αξίες, και παίρνουμε n είναι το μέγεθος της συστοιχίας. Στη γραμμή 10, ακριβώς εδώ, έχω απότομη περιλαμβάνουν stdbool.h. Ξέρει κανείς γιατί αυτό είναι εκεί; Λοιπόν, τι σημαίνει ότι η γραμμή του κώδικα κάνει; ΦΟΙΤΗΤΗΣ: Σας επιτρέπει να χρησιμοποιήστε ένα είδος επιστροφής bool. JASON Hirschhorn: Ακριβώς. ΦΟΙΤΗΤΗΣ: Ή είναι μια βιβλιοθήκη που επιτρέπει να χρησιμοποιούν ένα είδος επιστροφής bool. JASON Hirschhorn: Έτσι, η απότομη περιλαμβάνουν stdbool.h γραμμή μου δίνει κάποια ορισμούς και τις δηλώσεις για τα πράγματα ότι είμαι επιτρέπεται να χρησιμοποιούν Αυτή η βιβλιοθήκη. Έτσι, μεταξύ εκείνων που λέει ότι δεν υπάρχει Αυτός ο τύπος ονομάζεται bool, και μπορεί να είναι αληθείς ή ψευδείς. Οπότε αυτό είναι που κάνει αυτή τη γραμμή. Και αν δεν είχα αυτή τη γραμμή, θα ήθελα να πάρει στο πρόβλημα για να γράψω αυτό σωστή λέξη εδώ, bool, ακριβώς εκεί. Ακριβώς δεξιά. Γι 'αυτό χρειάζεται ότι σε αυτόν τον κώδικα. OK. Έτσι αυτό, πάλι, είναι μια επαναληπτική έκδοση, δεν είναι ένα αναδρομικό ένα. Έτσι, ας ξεκινήσουμε. Ας ξεκινήσουμε με αυτό το πρώτο γραμμή κώδικα ψευδο. Και ελπίζω, θα το κάνουμε - ή δεν ελπίζουμε. Εμείς πάμε για να πάει γύρω από το δωμάτιο. Θα πάμε γραμμή προς γραμμή, και θα βοηθήσει να καταλάβω τη γραμμή που χρειαζόμαστε να γράψει το πρώτο. Έτσι, ενώ το μήκος της λίστας είναι μεγαλύτερη από το μηδέν. Ας ξεκινήσει το μέτωπο. Σε ποια γραμμή πρέπει να γράψω εδώ, στον κώδικα; ΦΟΙΤΗΤΗΣ: Ενώ η παρένθεση η είναι μεγαλύτερο από μηδέν. JASON Hirschhorn: Ενώ n είναι μεγάλη από 0. Έτσι n είναι το μέγεθος του καταλόγου, και είμαστε ελέγχοντας αν - [Παρεμβάλλοντας VOICES] JASON Hirschhorn: - Ορίστε; ΦΟΙΤΗΤΗΣ: Πώς ξέρουμε ότι n είναι το μέγεθος του καταλόγου; JASON Hirschhorn: Συγγνώμη. Σύμφωνα με τις προδιαγραφές από το chipset, η αναζήτηση και το είδος λειτουργεί θα πρέπει να γράψετε, n είναι το μέγεθος του καταλόγου. Ξέχασα να εξηγήσω ότι εδώ. Αλλά ναι. n είναι το μέγεθος του ο κατάλογος, σε αυτή την περίπτωση. Έτσι ενώ η είναι μεγαλύτερο από μηδέν. OK. Αυτό μπορεί να αποδειχθεί λίγο προβληματική όμως, αν τα πράγματα πάνε. Επειδή θα συνεχίσουμε να γνωρίζουν την μέγεθος της λίστας όλη αυτή λειτουργία, αλλά λένε θα ξεκινήσει με μια σειρά από 5 ακεραίων. Και περνάμε και έχουμε τώρα τον περιόρισε σε μια σειρά από 2 ακεραίων. Ποια 2 ακέραιοι είναι αυτό; Το μέγεθος είναι 2 τώρα ότι θέλουμε να εξετάσουμε, αλλά ποια 2 είναι αυτό; Μήπως αυτό έχει νόημα, αυτό το ερώτημα; OK. Θα το ρωτήσω και πάλι. Έτσι ξεκινάμε με αυτή την σειρά 5 ακέραιοι και n ισούται με 5, σωστά; Θα τρέχει μέσα από εδώ. εμείς πιθανόν να αλλάξετε το μέγεθος, δικαίωμα, όπως έχουν τα πράγματα πάνε. Ποιο είναι αυτό που λέμε ότι θέλουμε να κάνουμε. Δεν θέλετε να αναζητήσετε το πλήρες πράγμα ξανά. Έτσι λέω να το αλλάξετε σε 2. Έχουμε λάβει το ήμισυ του καταλόγου που είναι περίεργο. Έτσι, απλά επιλέξτε 2. Έτσι τώρα ισούται με n 2. Ζητώ συγγνώμη για τους φτωχούς ξηρό μαρκαδόρους. Σωστά; Και ψάχνουμε μέσα από τη λίστα και πάλι με μια λίστα μεγέθους 2. Λοιπόν, σειρά μας εξακολουθεί να είναι το μέγεθος 5. Εμείς λέμε ότι το μόνο που θέλουν να αναζήτηση 2 σημεία σε αυτό. Έτσι, ποιο 2 σημεία είναι αυτά; Μήπως αυτό έχει νόημα; Είναι τα αριστερά 2 σημεία; Είναι τα σωστά σημεία 2; Είναι το μεσαίο 2 θέσεις; Έχουμε σπάσει το πρόβλημα κάτω, αλλά εμείς πραγματικά δεν ξέρω ποιο μέρος του το πρόβλημα είμαστε ακόμα κοιτάζοντας, ακριβώς από την κατοχή αυτών των 2 μεταβλητών. Έτσι χρειαζόμαστε λίγο περισσότερο στη συνέχεια, ενώ η είναι μεγαλύτερο από μηδέν. Πρέπει να ξέρεις που n είναι στην πραγματικότητα σειρά μας. Έτσι, έχει κάνει κανείς μια αλλάξετε αυτή τη γραμμή; Οι περισσότεροι αυτής της γραμμής είναι απολύτως σωστό. Είναι μια άλλη εκτός από εκεί; Μπορούμε να ανταλλάξουν κάτι προς n για να κάνει αυτή τη γραμμή λίγο καλύτερα; Mm-hm; ΦΟΙΤΗΤΗΣ: Μπορείτε να προετοιμάσει μια μεταβλητή όπως το μήκος με n οποία θα πρέπει στη συνέχεια να χρησιμοποιηθεί αργότερα στη λειτουργία; JASON Hirschhorn: Έτσι η προετοιμασία ένα μεταβλητό μήκος έως n, και χρησιμοποιούμε αυτό αργότερα; Στη συνέχεια, όμως απλώς να ενημερώσετε το μήκος και εξακολουθούν να τρέχουν σε αυτό το πρόβλημα όπου μειώσουμε το μήκος του προβλήματός μας, αλλά ποτέ δεν ξέρουμε πού, στην πραγματικότητα, ότι το μήκος χάρτες επάνω. ΦΟΙΤΗΤΗΣ: Δεν είναι ότι πρόκειται να συμβεί αργότερα, όταν λέτε, αναζήτηση αριστερά, αναζήτηση σωστά; Θα πάμε για να πάει σε ένα διαφορετικό περιοχή σας - JASON Hirschhorn: Εμείς πάμε για να πάει σε μια περιοχή, αλλά πώς ξέρουμε η οποία είναι να μεταβείτε στον ιστότοπο; Αν έχουμε μόνο τη σειρά και αυτό n, πώς ξέρουμε πού να πηγαίνουν στην συστοιχία. Στο πίσω μέρος, ναι; ΦΟΙΤΗΤΗΣ: Έχετε, όπως, ένα κατώτερο εξώφυλλο και ένα άνω φράγμα μεταβλητή ή κάτι τέτοιο; JASON Hirschhorn: OK. Έτσι, αυτό είναι μια άλλη ιδέα. Αντί απλά την παρακολούθηση της μέγεθος, θα παρακολουθείτε την κάτω και άνω όριο μεταβλητή. Επομένως, πώς θα υπολογίσετε το μέγεθος από ένα κατώτερο όριο και άνω όριο; [Παρεμβάλλοντας VOICES] JASON Hirschhorn: Αφαίρεση. Και, επίσης, την παρακολούθηση του κατώτερου δεσμεύεται και άνω όριο για να μας ενημερώσετε, είμαστε ψάχνουν αυτά τα δύο; Είμαστε ψάχνουν αυτά τα δύο εδώ πέρα; Είμαστε ψάχνουν το μεσαίο δύο; Μάλλον δεν το μεσαίο δύο, γιατί Αυτό, στην πραγματικότητα, είναι η δυαδική αναζήτηση. Αλλά τώρα θα είμαστε σε θέση να πάρει το μέγεθος, αλλά επίσης και τα όρια της συστοιχίας. Στην ουσία, αν έχουμε γίγαντας μας τηλεφωνικό κατάλογο, θα το rip στο μισό. Γνωρίζουμε πλέον ότι οι μικρότερες, όπου τηλεφωνικού καταλόγου. Αλλά δεν είμαστε πραγματικά εξαίρετος τον τηλεφωνικό κατάλογο στη μέση. Θα πρέπει ακόμα να γνωρίζουμε όταν η νέα όρια του προβλήματός μας είναι. Μήπως κάποιος έχει απορίες γι 'αυτό; Ναι; ΦΟΙΤΗΤΗΣ: Θα συνεργαστεί με τη δημιουργία ενός μεταβλητή, i, ότι τότε μόνο μετατόπιση η θέση του i σε σχέση με τους τρέχουσα θέση και το μήκος, το η; JASON Hirschhorn: Και τι είναι το i; ΦΟΙΤΗΤΗΣ: Όπως το i είναι σαν είδος - Όπως και εσείς θα προετοιμαστεί i να είναι η μεσαία θέση της συστοιχίας. Και στη συνέχεια, εάν η τιμή στη θέση i σε η μέση της συστοιχίας διαπιστώθηκε είναι μικρότερη από την αξία που χρειάζεστε, εγώ τώρα γίνεται το μήκος της συστοιχίας, συν η τιμή του i διαιρείται δια 2. Όπως, βλέπετε, εγώ στροφή - JASON Hirschhorn: Σωστά. ΦΟΙΤΗΤΗΣ: - μέχρι το - JASON Hirschhorn: Είμαι, λοιπόν, σχεδόν θετικό που θα λειτουργήσει. Αλλά το θέμα είναι, θα πρέπει να έχετε δύο κομμάτια των πληροφοριών εδώ. Μπορείτε να το κάνετε με την αρχή και το τέλος, ή μπορείτε να το κάνετε με το μέγεθος του, και στη συνέχεια κάποια δείκτη. Αλλά χρειάζεται δύο κομμάτια πληροφορίες εδώ. Δεν μπορείτε να πάρετε από ένα και μόνο. Μήπως αυτό έχει νόημα; Έτσι θα πάμε για να πάει μέσα, και θα πάμε να κάνουμε [δεν ακούγεται] και να δημιουργήσει κάποια σημάδια. Τι έκανες γράψετε στον κώδικά σας; ΦΟΙΤΗΤΗΣ: Μόλις είπα int εξώφυλλο ένα είναι ίσο με 0. JASON Hirschhorn: Ας ονομάσουμε ότι int, αρχίζει. ΣΠΟΥΔΑΣΤΩΝ: OK. JASON Hirschhorn: Αυτό κάνει περισσότερο νόημα για μένα. Και; ΦΟΙΤΗΤΗΣ: Είπα, υποθέτω, int τελειώνει. JASON Hirschhorn: int τελειώνει. ΦΟΙΤΗΤΗΣ: Υποθέτω, n μείον 1, ή κάτι τέτοιο. Όπως, το τελευταίο στοιχείο. JASON Hirschhorn: Έτσι έγραψε, int αρχίζουν ίσων 0, τελεία και int τέλος ισούται με n μείον 1, τελεία. Έτσι, ουσιαστικά, αυτό που κάνουμε εδώ, 0 την πρώτη θέση. Και όπως γνωρίζουμε σε συστοιχίες, δεν πηγαίνουν μέχρι n, πάνε μέχρι n μείον 1. Έτσι έχουμε κάποια όρια του πίνακα μας. Και αυτά τα αρχικά όρια τυχαίνει να είναι τα αρχικά όρια του προβλήματός μας. OK. Έτσι ώστε να ακούγεται καλό. Στη συνέχεια, αν πάμε πίσω σε αυτή τη γραμμή, ενώ μήκος της λίστας είναι μεγαλύτερο από 0, τι, αντί της Ν, πρέπει βάζουμε εδώ; ΦΟΙΤΗΤΗΣ: Γράψτε τελειώνει μείον αρχή. JASON Hirschhorn: Ενώ τελειώνει μείον αρχίζοντας είναι μεγαλύτερη από 0; OK. Και θα μπορούσαμε, αν θέλαμε να κάνουν ότι λίγο καλύτερο, ό, τι άλλο θα μπορούσαμε να κάνουμε; Αν θέλαμε να καθαρίσετε αυτός ο κώδικας επάνω ένα κομμάτι; Πώς μπορούμε να απαλλαγούμε από το 0; Αυτό είναι μόνο ένα ζήτημα στυλ. Είναι σωστή αυτή τη στιγμή. ΦΟΙΤΗΤΗΣ: Ending δεν ίση αρχή; JASON Hirschhorn: Μπορούμε να κάνουμε τι; [Παρεμβάλλοντας VOICES] ΦΟΙΤΗΤΗΣ: Ολοκληρώνεται είναι μεγαλύτερη; JASON Hirschhorn: Ναι. Μπορούμε να κάνουμε ακριβώς ενώ τέλος είναι μεγαλύτερη από αρχή. Δεξιά. Προσθέσαμε ξεκινώντας προς την άλλη πλευρά από αυτό, και ξεφορτώθηκε το 0. Έτσι, αυτό φαίνεται μόνο ένα λίγο πιο καθαρό κομμάτι. OK. Έτσι, ενώ το μήκος της λίστας είναι 0, γράψαμε ότι, ενώ τέλος είναι μεγαλύτερη από την έναρξη. Εμείς πάμε για να θέσει σε απαραίτητα μας άγκιστρα, και, στη συνέχεια, το πρώτο πράγμα που θέλουμε να κάνουμε είναι να εξετάσουμε τους σε μια μικρή λίστα. Μπορείτε; Μπορείς να μου δώσει το - ΦΟΙΤΗΤΗΣ: Αν παρένθεση στήριγμα πλατεία αξία - JASON Hirschhorn: Αν παρενθέσεις βραχίονα πλατεία αξία. ΦΟΙΤΗΤΗΣ: Τερματισμός διαιρούμενο δια του 2. JASON Hirschhorn: Ολοκληρώνεται; ΦΟΙΤΗΤΗΣ: Βλέπω ένα πρόβλημα με σας - JASON Hirschhorn: OK. Λοιπόν, κοιτάξτε στη μέση. Πώς μπορούμε να γνωρίζουμε ποια είναι η μέση είναι; Ναι. Έτσι, επιτρέψτε μου να διαγράψετε αυτόν τον κωδικό. Πώς μπορούμε να γνωρίζουμε ποια είναι η μέση είναι; Σε τίποτα, όταν έχετε την αρχή και το τέλος, πώς θα βρείτε η μέση; ΦΟΙΤΗΤΗΣ: Έχετε κατά μέσο όρο. ΦΟΙΤΗΤΗΣ: Μπορείτε να προσθέσετε μαζί και στη συνέχεια - JASON Hirschhorn: Προσθέστε τα μαζί και στη συνέχεια; ΦΟΙΤΗΤΗΣ: Και κατά μέσο όρο. Διαιρέσουμε με το 2. JASON Hirschhorn: Προσθέστε τα μαζί και διαιρούμε με το 2. Έτσι, int μέση ισούται; Tom, μπορείτε να το δώσει σε μένα; ΦΟΙΤΗΤΗΣ: Ξεκινώντας συν τελειώνει - JASON Hirschhorn: Αρχή συν τελειώνει. ΦΟΙΤΗΤΗΣ: Όλα, βραχίονα, διαιρείται δια 2. JASON Hirschhorn: Όλα, σε παρένθεση, διαιρείται δια 2. Έτσι, αυτό μου δίνει τη μέση τίποτα, να διορθώσει; ΦΟΙΤΗΤΗΣ: Θα πρέπει επίσης να στρογγυλοποιεί προς τα πάνω. JASON Hirschhorn: Τι να κάνετε Εννοώ, πρέπει να στρογγυλοποιεί προς τα πάνω; [Παρεμβάλλοντας VOICES] ΦΟΙΤΗΤΗΣ: Γιατί αν Είναι ένα περίεργο αριθμός, τότε είναι σαν - JASON Hirschhorn: Καλά, εντάξει. Έτσι θα μπορούσα να στρογγυλοποιεί προς τα πάνω. Αλλά αν είναι ένας περιττός αριθμός, 5, μπορώ λαμβάνοντας 1 μακριά από τη μέση. Ή αν είναι άρτιος αριθμός, μάλλον, ότι είναι η καλύτερη περίπτωση. Αν είναι 4, έχουμε μόνο 4, μπορώ να πάρω το πρώτο «μεσαίο», απόσπασμα, χωρίς εισαγωγικά ή η δεύτερη "μέση" ένα. Είτε θα μπορούσε να λειτουργήσει για μια δυαδική αναζήτηση, γι 'αυτό δεν πρέπει πραγματικά να το γύρο. Αλλά υπάρχει ένα άλλο πράγμα που πρέπει να εξετάσουμε σε αυτή τη γραμμή. Μπορεί να μην το συνειδητοποιούν ακόμα, αλλά θα επανέλθω σε αυτό. Επειδή αυτή η γραμμή στην πραγματικότητα εξακολουθούν να χρειάζεται ένα άλλο πράγμα. Αλλά μέχρι στιγμής, έχουμε γράψει τέσσερις γραμμές κώδικα. Έχουμε αρχή μας και τελειώνει δείκτες. Έχουμε βρόχο, ενώ μας, η οποία χαρτογραφεί άμεσα στο ψευδοκώδικα μας. Ψάχνουμε στη μέση που χαρτογραφεί απευθείας σε ψευδοκώδικα μας. Θα έλεγα ότι αυτό πηγαίνει στη μέση της λίστας, αυτή η γραμμή κώδικα. Και στη συνέχεια, όταν θα πάτε στη μέση του η λίστα, το επόμενο πράγμα που πρέπει να κάνουμε είναι να ελέγξετε αν η τιμή μας είναι εκεί για η pseudocode γράψαμε νωρίτερα. Επομένως, πώς θα ελέγξει αν η αξία μας είναι στην μέση της λίστας; Μπορείτε. Γιατί δεν το κάνεις αυτό; ΦΟΙΤΗΤΗΣ: Εάν η τιμή μας είναι στη μέση είναι ίση με ό, τι θέτουμε τον - Εννοώ ίσα ίσα για να - JASON Hirschhorn: It - OK. ΦΟΙΤΗΤΗΣ: Δεν είμαι σίγουρος ποια είναι η μεταβλητή ψάχνουμε Για το γεγονός, είναι επειδή - [Παρεμβάλλοντας VOICES] ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]. JASON Hirschhorn: Ακριβώς. Σύμφωνα με την δήλωση της συνάρτησης, ψάχνουμε για μια τιμή. Έτσι, ψάχνουμε για μια τιμή σε μια σειρά τιμών. Έτσι, είστε ακριβώς δεξιά. Θα κάνετε, αν βραχίονα αξία ανοικτή paren μέση έκλεισε ισούται με βραχίονα ισούται με την αξία, και εκεί μέσα τι πρέπει να κάνουμε; Αν η αξία μας είναι εκεί, τι Δεν πρέπει να κάνουμε; [Παρεμβάλλοντας VOICES] ΦΟΙΤΗΤΗΣ: Επιστροφή μηδέν. JASON Hirschhorn: Επιστροφή αλήθεια. ΦΟΙΤΗΤΗΣ: Επιστροφή αλήθεια. JASON Hirschhorn: Michael, Τι σημαίνει αυτή η γραμμή κάνει; ΦΟΙΤΗΤΗΣ: [δεν ακούγεται] το πρόγραμμα έχει τρέξει την πορεία του, και ότι είναι πάνω, και έχετε τι πρέπει να κάνετε; JASON Hirschhorn: Το πρόγραμμα ή τι; Σε αυτή την περίπτωση; ΣΠΟΥΔΑΣΤΩΝ: Η λειτουργία. JASON Hirschhorn: Η λειτουργία. Και έτσι, για να επιστρέψουν σε ό, τι ονομάζεται αυτό και δίνουν την αξία, αλήθεια. Ακριβώς δεξιά. Κύριο. Τι είναι ο τύπος επιστροφής από τις κύριες, Μάικλ; ΦΟΙΤΗΤΗΣ: int, ακέραιος; JASON Hirschhorn: int, ακριβώς. Ένας ακέραιος. Αυτό ήταν μόνο μια ερώτηση για να βεβαιωθείτε ότι εσείς έχουν πάνω του. Τι σημαίνει αυτό συνήθως να επιστρέψουν, αν όλα τα πράγματα λειτουργούν καλά; ΣΠΟΥΔΑΣΤΩΝ: Μηδέν. JASON Hirschhorn: Μηδέν. Ακριβώς δεξιά. ΦΟΙΤΗΤΗΣ: Εάν αυτό ακριβώς επιστρέφει true, δεν υπάρχει καμία πληροφορία δίνεται σχετικά με το τι η - Ω, αυτό είναι ακριβώς λέγοντας ότι αξία είναι μέσα στον πίνακα. JASON Hirschhorn: Ακριβώς. Αυτό το πρόγραμμα δεν δίνει πληροφορίες πού ακριβώς είναι η αξία. Είναι μόνο λέγοντας, ναι, βρήκαμε αυτό, είτε όχι, εμείς δεν το βρείτε. Έτσι, αν ο αριθμός που βρέθηκαν, επιστρέφουν αλήθεια. Λοιπόν, στην πραγματικότητα μόλις κάναμε ότι πραγματικά γρήγορα με την εν λόγω μία γραμμή κώδικα. Γι 'αυτό θα προχωρήσουμε αυτή τη γραμμή του ψευδοκώδικα. ΦΟΙΤΗΤΗΣ: Δεν χρειαζόμαστε για να αλλάξετε τη σειρά; Θα πρέπει να είναι τιμές, όχι την αξία, έτσι δεν είναι; JASON Hirschhorn: Συγγνώμη. Σας ευχαριστώ. ΦΟΙΤΗΤΗΣ: Ναι. JASON Hirschhorn: Αυτή η γραμμή θα πρέπει να είναι οι τιμές. Ακριβώς δεξιά. OK. Έτσι έχουμε κοίταξε το μεσαίο λίστα. Εάν ο αριθμός που βρέθηκαν return true. Συνεχίζοντας με ψευδοκώδικα μας, αν μεσαίο είναι μεγαλύτερο, αναζήτηση αριστερά. Είχα, λοιπόν, εδώ, εάν ο αριθμός υψηλότερα, αναζήτησης αριστερά. Κωνσταντίνου, μπορεί να σας δώσει με αυτή τη γραμμή κώδικα; ΦΟΙΤΗΤΗΣ: Εάν η τιμή της μέσης - JASON Hirschhorn: Έτσι, αν η αξία - αν είναι ανοιχτό paren τιμές βραχίονα μέση κλείσιμο παρένθεσης - ΦΟΙΤΗΤΗΣ: Είναι μικρότερη από την αξία; JASON Hirschhorn: Είναι λιγότερο από ό, τι. ΦΟΙΤΗΤΗΣ: Λιγότερο από αξία. JASON Hirschhorn: Αξία. Λοιπόν, στην πραγματικότητα, θέλετε να ελέγξτε αν ο αριθμός - Λυπάμαι. Αυτή είναι μια μικρή σύγχυση. Αλλά αλλιώς αν ο αριθμός στην μέση του καταλόγου είναι μεγαλύτερη. ΦΟΙΤΗΤΗΣ: Ναι, εντάξει. JASON Hirschhorn: Θα αλλάξει αυτό. Αλλιώς, αν είναι υψηλότερη μέση, εμείς θέλετε να αναζητήσετε αριστερά, εντάξει; Και τι κάνουμε μέσα αυτό, αν η κατάσταση; ΦΟΙΤΗΤΗΣ: Μπορώ να κάνω μια μικρή αλλαγή η κατάσταση, το αλλάξετε σε άλλο εάν; JASON Hirschhorn: Else εάν; OK. Έτσι, αυτός ο κώδικας θα εκτελέσει περίπου το ίδιο. Αλλά το ωραίο πράγμα για τη χρησιμοποίηση if, else if, else if ή if, else if, else σημαίνει ότι μόνο ένα από αυτά πρόκειται να να ελέγχεται, όχι οι τρεις από αυτούς, δυνητικά. Και ότι λίγο κάνει καλύτερο στον υπολογιστή που είναι τρέχει το πρόγραμμά σας. Έτσι, [; Κωνσταντίνου,?] είμαστε μέσα αυτή τη γραμμή, αλλιώς αν οι τιμές, βραχίονα μέση κλείσιμο παρένθεσης είναι μεγαλύτερη από την τιμή. Τι πρέπει να κάνουμε; Πρέπει να ψάξετε το αριστερό. Πώς θα το κάνουμε αυτό; Πάω να σας δώσω μια αρχή. Έχουμε αυτά τα δύο πράγματα που ονομάζεται αρχίζει και τελειώνει. Λοιπόν, τι πρέπει να συμβεί στην αρχή; Αν θέλετε να αναζητήσετε το αριστερό του κατάλογο, θα έχουμε την τρέχουσα αρχή μας. Τι πρέπει να κάνουμε; ΦΟΙΤΗΤΗΣ: Θέτουμε την αρχή με μέση συν 1. JASON Hirschhorn: Έτσι, αν είμαστε ψάχνοντας το αριστερό; ΦΟΙΤΗΤΗΣ: Συγγνώμη, μέση μείον - οπότε η κατάληξη θα είναι μέσης μείον 1 και τις αρχές - JASON Hirschhorn: Και τι συμβαίνει στην αρχή; ΦΟΙΤΗΤΗΣ: Παραμένει το ίδιο. JASON Hirschhorn: Έτσι, η έννοια παραμένει η ίδια. Αν ψάχνετε το αριστερό, είμαστε χρησιμοποιώντας την ίδια αρχή - ακριβώς δεξιά. Και η κατάληξη; Συγγνώμη, τι κάνει το λήγει ίσα και πάλι; ΦΟΙΤΗΤΗΣ: Μέσης μείον 1. JASON Hirschhorn Μέσης μείον 1. Τώρα, γιατί μείον 1, όχι μόνο μέση; ΣΠΟΥΔΑΣΤΩΝ: Η μέση είναι έξω από το εικόνα ήδη, γιατί είχαμε ελεγχθεί ότι είναι έξω; JASON Hirschhorn: Αυτό είναι ακριβώς δεξιά. Η μέση είναι έξω από την εικόνα. Έχουμε ήδη ελεγχθεί από τη μέση. Έτσι, δεν θέλουμε "στη μέση", απόσπασμα unquote, να συνεχίσει να είναι στην array ότι ψάχνουμε. Έτσι, αυτό είναι φανταστικό. Αλλιώς αν οι τιμές βραχίονα μέση είναι μεγαλύτερη από την αξία που έληξε ισούται μέση μείον 1. Jeff, τι γίνεται με αυτήν την τελευταία γραμμή; ΣΠΟΥΔΑΣΤΩΝ: Else. Αξίες μέση είναι μικρότερη από την αξία; JASON Hirschhorn: Θα θα μου δώσεις άλλο. Έτσι, αν δεν μου δώσεις - ΦΟΙΤΗΤΗΣ: Άρα λοιπόν αρχίζουν θα είναι μέσης συν 1. JASON Hirschhorn: Ξεκινώντας ισούται μεσαία συν 1, και πάλι, για το ίδιο λόγο ότι ο Κωνσταντίνος μας έδωσε νωρίτερα. Και στο τέλος, ο οποίος δεν έχει δώσει με μια γραμμή κώδικα ακόμα; Επιστροφή ψευδείς, Aleha, τι γράφουμε εδώ; ΦΟΙΤΗΤΗΣ: Επιστροφή ψευδείς. JASON Hirschhorn: Επιστροφή ψευδείς. Και πρέπει να το κάνουμε αυτό, γιατί αν δεν το βρείτε, θα πρέπει να πούμε ότι δεν το βρείτε. Και είπαμε ότι πρόκειται να επιστρέψει μια bool, οπότε σίγουρα έχουμε να επιστρέψετε κάπου μια bool. Οπότε ας εκτελέσετε αυτόν τον κώδικα. Είμαι πραγματικά πρόκειται να - έτσι είμαστε στο τερματικό. Θα καθαρίσει το παράθυρό μας. Ας κάνουν όλες. Βρήκαμε ότι υπάρχει ένα λάθος. Υπάρχει ένα σφάλμα στη γραμμή 15, η οποία αναμένεται ερωτηματικό στο τέλος της δήλωση. Έτσι, αυτό που έκανε ξεχάσω; ΣΠΟΥΔΑΣΤΩΝ: Η άνω τελεία. JASON Hirschhorn: Άνω τελεία μέχρι εδώ. Νομίζω ότι ήταν κώδικα του Τομ. Έτσι, ο Tom, [δεν ακούγεται]. Αστειεύομαι. Ας μην κάνουν όλες και πάλι. ΦΟΙΤΗΤΗΣ: Τι κατάλογο Dropbox θα πρέπει να είμαστε σε αυτό; JASON Hirschhorn: Έτσι, μπορείτε να Απλά προσέξτε για αυτό το κομμάτι. Αλλά και πάλι, αν θέλετε να μετακινήσετε αυτό κωδικοποίηση σε κατάλογο pset3 σας για να δοκιμάσετε έξω, αυτό είναι ό, τι έκανα. Αν θα παρατηρήσετε εδώ - Λυπάμαι, καλή ερώτηση. [? LS,?] Έχω εδώ ο κώδικας ΡΓΝϋ.Ο από τον κώδικα διανομή αυτής της εβδομάδας. Έχω helpers.h. Έχω ένα αρχείο Μάρκα που έχω πραγματικά επεξεργαστεί ένα κομμάτι για να συμπεριλάβει αυτά τα νέα αρχεία γράφουμε. Όλα του κώδικα αυτού θα είναι διαθέσιμα, δεν ο κωδικός της διανομής, αλλά και το νέο Κάντε το αρχείο, το νέο αρχείο θα helpers.h είναι διαθέσιμα στο διαδίκτυο για download. Και πάλι, οπότε αυτά είναι τα επιπλέον κωδικούς που έχουμε. Έτσι κάνουν όλα, κατ 'αυτή τη γραμμή, κάνει βρείτε, δυαδική, η επιλογή φούσκα - οι μάρκες και τα τρία από αυτά και συγκεντρώνει σε αυτό το εκτελέσιμο κώδικα find. Έτσι, γενικά, δεν θέλουμε με κατ 'ευθείαν στο check50. Θέλουμε να εκτελέσετε κάποιες δοκιμές για τη δική μας. Αλλά μόνο έτσι μπορούμε να επισπεύσουμε τη λίγο, check50 2013 pset3.find θα περάσει στο helpers.c-- κακό μου. Δεν έχω αυτό το δικαίωμα τώρα. Έτσι, είμαστε πραγματικά πρόκειται να την εκτέλεση του κώδικα για την πραγματική. Usage.find /, ξέρετε τι σημαίνει αυτό; ΦΟΙΤΗΤΗΣ: Χρειάζεται ένα δεύτερο γραμμή εντολών σε αυτό. JASON Hirschhorn: χρειάζομαι μια δεύτερη γραμμή εντολών. Και σύμφωνα με τις προδιαγραφές, θα πρέπει να εισέλθουν αυτό που ψάχνετε. Ας ρίξουμε μια ματιά για το 42. Θα το κρατήσει σε ταξινομημένη, γιατί Δεν έχω γράψει μια λειτουργία ταξινόμησης ακόμα - 42, 43, 44. Και Ελέγχου D δεν βρίσκουν το βελόνα στα άχυρα. Αυτό είναι κακό. Είναι σίγουρα εκεί. Ας δοκιμάσουμε κάτι άλλο. Ίσως αυτό συμβαίνει γιατί έβαλα αυτό στην αρχή. Ας κάνουμε 41, 42, 43. Εκεί πάμε. Αυτό το βρήκα. Ας το θέσω στο τέλος τώρα, απλά ώστε να μπορούμε να είναι διεξοδική - 40, 41, 42. Δεν βρήκατε τη βελόνα. Γι 'αυτό το ανέφερα νωρίτερα. Δυστυχώς, ήξερα αυτό επρόκειτο να συμβεί. Αλλά για παιδαγωγικούς σκοπούς, είναι καλό να το εξερευνήσουν. Δεν λειτουργεί. Για κάποιο λόγο, δεν μπορεί να το βρει. Ξέρουμε τι είναι εκεί, αλλά δεν το βρίσκουν. Έτσι, ένα πράγμα που μπορούμε να κάνουμε είναι να περάσουν GDB να το βρείτε, αλλά κάνει κανείς, χωρίς να περάσει από GDB, έχουν αίσθηση για το πού είμαστε μαντάρα; [? Madu; ?] ΦΟΙΤΗΤΗΣ: Νομίζω ότι θα μπορούσε να είναι όταν τελειώνει είναι ίσο με αρχή, και αυτό είναι μόνο μια λίστα με ένα στοιχείο. Στη συνέχεια, αγνοεί απλά αντί του πραγματικά τον έλεγχο. JASON Hirschhorn: Αυτό είναι ακριβώς δεξιά. Όταν τέλος ισούται με αρχή, εμείς εξακολουθούν να έχουν ένα στοιχείο στη λίστα μας; ΦΟΙΤΗΤΗΣ: Ναι. JASON Hirschhorn: Ναι, στην πραγματικότητα, έχουν ένα και μόνο ένα στοιχείο. Και αυτό πιθανότατα θα συμβεί όταν, ανά τον κώδικα που δοκιμάσαμε, τώρα βρισκόμαστε στην μπροστά από άχυρα ή το τέλος του άχυρα. Αυτός είναι όπου αρχή και τέλος πρόκειται να ίση ένα, με δυαδική αναζήτηση. Έτσι, σε αυτές τις δύο περιπτώσεις δεν λειτούργησε, γιατί τελειώνει ήταν ίση με αρχή. Αλλά αν τελειώνει είναι ίση με αρχή, αυτός ο βρόχος while εκτελέσει; Δεν το κάνει. Και θα μπορούσαμε να ελεγχθεί ότι και πάλι μέσω του GDB. Λοιπόν, πώς μπορούμε να διορθώσετε αυτό τον κωδικό, επειδή όταν ενώ τέλος είναι ίσο με αρχή, θέλουμε και αυτό while loop για να τρέξει. Οπότε τι κώδικα μπορούμε να κάνουμε με τη γραμμή 18; ΦΟΙΤΗΤΗΣ: [δεν ακούγεται] είναι μεγαλύτερη από ή ίσο με. JASON Hirschhorn: Ακριβώς δεξιά. Ενώ η κατάληξη είναι μεγαλύτερη από ό, τι ή ίση με αρχή. Οπότε τώρα, φροντίστε να πάρετε ότι γωνιά περίπτωση στο τέλος. Και ας δούμε. Ας τρέξουμε μία ακόμη φορά. Ας κάνουμε όλοι. Και πάλι, θα πρέπει απλά να ακολουθήστε μαζί εδώ. Βρείτε 41 αυτή τη φορά. Απλά κρατήστε το σύμφωνο. Βρείτε 42. Ας το θέσω στην αρχή - 42, 43, 44. Το βρήκαμε. Έτσι, αυτό ήταν πράγματι η αλλαγή έπρεπε να κάνουν. Αυτό ήταν πολύ κωδικοποίησης που ακριβώς έκανε, δυαδική αναζήτηση. Μήπως κάποιος έχει οποιεσδήποτε ερωτήσεις πρίν Θα προχωρήσουμε σε γραμμές γράψαμε δυαδική αναζήτηση ή πώς καταλάβαμε τι κάναμε καταλάβω; Πριν προχωρήσουμε, θα ήθελα επίσης να επισημάνω έξω που σε μεγάλο βαθμό, θα χαρτογραφηθεί μας ψευδο-κώδικα ενός έως ένα πάνω μας κώδικα. Εμείς είχαμε αυτό το δύσκολο πράγμα να καταλάβω με το αρχίζει και τελειώνει. Αλλά δεν είχε καταλάβει ότι έξω, θα είχε γράψει λίγο πολύ το πανομοιότυπο κώδικα, εκτός αυτές οι δύο πρώτες γραμμές. Και τότε θα έχουν συνειδητοποιήσει όταν θα έκανε τους ελέγχους και τις περιπτώσεις που χρειάζεστε κάτι άλλο. Έτσι ακόμα κι αν είχε ακολουθηθεί μας ψευδο-κώδικα γραμμή προς γραμμή, θα είχατε πάρει όλα εκτός από δύο γραμμές κώδικα που απαιτούνται για να γράψει. Και θα ήμουν πρόθυμος να στοιχηματίσει ότι εσείς θα έχουν όλοι καταλάβει ότι έξω αρκετά γρήγορα, που χρειάζεται για να τεθεί κάποιο είδος δείκτη εκεί για να καταλάβω πού ήσουν. Αυτό πάλι, είναι η δύναμη του να κάνει ψευδο-κώδικα μπροστά από το χρόνο. Έτσι, μπορούμε να κάνουμε τη λογική πρώτα, και στη συνέχεια μπορούμε να ανησυχείτε για τη σύνταξη. Αν είχαμε ήδη σύγχυση σχετικά με τη λογική ενώ προσπαθεί να γράψει τον κώδικα σε C, θα είχαμε πάρει όλα άνω-κάτω. Και τότε θα ήμασταν ερωτήσεις σχετικά με λογική και τη σύνταξη και συγκερασμό όλα αυτά μαζί. Και θα είχαμε πάρει τα χαμένα σε ό, τι μπορεί να γίνει γρήγορα ένα πολύ δύσκολο πρόβλημα. Έτσι, ας προχωρήσουμε τώρα να ταξινομήσετε επιλογής. Έχουμε 20 λεπτά για. Έτσι έχω την αίσθηση ότι δεν θα είναι σε θέση να περάσει όλες είδος επιλογής και bubble sort. Αλλά ας τουλάχιστον προσπάθεια για να τελειώσει το είδος επιλογής. Έτσι εφαρμοστεί η επιλογή ταξινόμησης χρησιμοποιώντας το μετά από δήλωση της συνάρτησης. Και πάλι, αυτό λαμβάνεται από το πρόβλημα που προδιαγραφές. Int τιμές είναι παρένθεση, είναι μια σειρά ακεραίων. Και int.n είναι το μέγεθος της εν λόγω συστοιχίας. Η επιλογή του είδους θα για να ταξινομήσετε αυτό το array. Έτσι, κάθε νοητικό μοντέλο μας της επιλογής ταξινόμησης, τραβάμε το - Πρώτα, θα περάσουν από τη λίστα, την πρώτη χρόνο, τον μικρότερο αριθμό, το βάζουμε στην αρχή, βρείτε το δεύτερο μικρότερος αριθμός, το έθεσε στο δεύτερη θέση, αν θέλουμε να ταξινόμησης σε αύξουσα σειρά. Δεν είμαι αναγκάζοντάς σας να γράψετε ψευδο-κώδικα τώρα. Αλλά πριν το κάνουμε τον κώδικα ως τάξη σε πέντε λεπτά, πρόκειται να γράψω ψευδο-κώδικα έτσι έχουμε κάποια αίσθηση για το πού θα πάμε. Έτσι, προσπαθούν να γράψουν ψευδο-κώδικα για τη δική σας. Και στη συνέχεια να προσπαθήσει να μετατρέψει ότι ψευδο-κώδικα στον κώδικα. Εμείς θα κάνουμε ότι ως ομάδα σε πέντε λεπτά. Και φυσικά, επιτρέψτε μου να ξέρω αν έχετε απορίες. ΦΟΙΤΗΤΗΣ: Αυτό είναι; JASON Hirschhorn: Δείτε πόσο μακριά μπορείτε μπορεί να πάρει σε δύο λεπτά. Καταλαβαίνω ότι δεν θα να είναι σε θέση να τελειώσει. Αλλά εμείς θα πάμε πάνω από αυτό ως ομάδα. Είστε όλοι κωδικοποίησης έτσι [δεν ακούγεται], έτσι είμαι Συγγνώμη για παύση τι κάνεις. Αλλά ας πάμε μέσα από αυτό ως ομάδα. Και πάλι, δυαδική αναζήτηση, θα δώσει σε όλους Θέλω ένα, αν όχι περισσότερες γραμμές κώδικα. Σας ευχαριστώ γι 'αυτό. Εμείς πάμε να κάνουμε το ίδιο πράγμα εδώ, ο κώδικας μαζί ως ομάδα. Έτσι, το είδος επιλογής - ας γράψουμε κάποια γρήγορη ψευδο-κώδικα. Ανά νοητικό μοντέλο, μπορεί κάποιος να μου δώσει η πρώτη γραμμή της ψευδο-κώδικα, παρακαλώ; Τι θέλω να κάνω; ΦΟΙΤΗΤΗΣ: Ενώ ο κατάλογος είναι εκτός λειτουργίας. JASON Hirschhorn: OK, ενώ ο κατάλογος είναι εκτός λειτουργίας. Και τι εννοείς "out of order;" ΦΟΙΤΗΤΗΣ: Ενώ [δεν ακούγεται] δεν έχει ταξινομηθεί. JASON Hirschhorn: Ενώ ο κατάλογος είναι εκτός λειτουργίας, τι κάνουμε; Δώσε μου τη δεύτερη γραμμή, παρακαλώ, Μάρκους. ΦΟΙΤΗΤΗΣ: Έτσι βρείτε την επόμενη μικρότερο αριθμό. Αυτό θα εσοχή. JASON Hirschhorn: Έτσι βρείτε το αμέσως μικρότερο αριθμό. Και τότε κάποιος άλλος; Μόλις βρούμε την επόμενη μικρότερη αριθμό, τι θα κάνουμε; Πάω να πω βρείτε το μικρότερο αριθμό. Αυτό είναι που θέλουμε να κάνουμε. Έτσι, βρείτε το μικρότερο αριθμό. Τότε τι κάνουμε; ΦΟΙΤΗΤΗΣ: [δεν ακούγεται] στην αρχή. JASON Hirschhorn: Συγγνώμη; ΦΟΙΤΗΤΗΣ: Τοποθετήστε το στο ξεκινώντας από τη λίστα. JASON Hirschhorn: Γι 'αυτό τοποθετήστε σε η αρχή της λίστας. Και τι θα κάνουμε με το πράγμα ότι ήταν στην αρχή του καταλόγου, έτσι δεν είναι; Είμαστε αντικατάσταση κάτι. Έτσι από πού να θέσει αυτό; Ναι, η Άννα; ΦΟΙΤΗΤΗΣ: Όταν το μικρότερο αριθμός ήταν; JASON Hirshhorn: Έτσι βάλτε την αρχή του καταλόγου, όπου η μικρότερος αριθμός ήταν. Έτσι, ενώ ο κατάλογος είναι εκτός λειτουργίας, να βρουν ο μικρότερος αριθμός, τοποθετήστε το η αρχή της λίστας, να θέσει το αρχίζοντας από τον κατάλογο, όπου η μικρότερος αριθμός ήταν. Marcus, μπορείτε να αναδιατυπώσει αυτή τη γραμμή ενώ ο κατάλογος είναι εκτός λειτουργίας; ΦΟΙΤΗΤΗΣ: Ενώ οι αριθμοί δεν έχουν ταξινομηθεί; JASON Hirshhorn: Εντάξει, έτσι ώστε να γνωρίζουμε ότι οι αριθμοί δεν έχουν ταξινόμηση, τι πρέπει να κάνουμε; Πόσο θα πρέπει να περάσουν από αυτή τη λίστα; ΦΟΙΤΗΤΗΣ: Έτσι υποθέτω ένα βρόχο, ή ενώ, ενώ οι αριθμοί που ελέγχθηκαν είναι λιγότερο από το μήκος του καταλόγου; JASON Hirshhorn: Εντάξει, αυτό είναι καλό. Νομίζω ότι misphrased ερώτησή μου άσχημα. Ήμουν απλώς προσπαθεί να πάρει στο θα πάμε να πρέπει να πάει όλη τη λίστα. Έτσι, ενώ ο κατάλογος είναι εκτός λειτουργίας, για μένα, είναι δύσκολο να χαρτογραφηθούν οι. Αλλά βασικά, αυτό είναι το πώς Νομίζω ότι γι 'αυτό. Περάστε από ολόκληρη τη λίστα, βρείτε το μικρότερο αριθμό, τοποθετήστε το στο αρχίζουν - στην πραγματικότητα, έχεις δίκιο. Ας βάλει και τους δύο. Έτσι, ενώ ο κατάλογος είναι εκτός λειτουργίας, θα πρέπει να περάσουν από ολόκληρη τη λίστα φορά, τον μικρότερο αριθμό, τον τόπο αυτό στην αρχή της λίστας, βάλτε η αρχή της λίστας, όπου η ήταν μικρότερος αριθμός, και στη συνέχεια, αν η λίστα είναι ακόμα εκτός λειτουργίας, έχουμε Πρέπει να περάσει μέσα από αυτό διαδικασία και πάλι, έτσι δεν είναι; Γι 'αυτό το είδος επιλογής, Big-O runtime του είδους επιλογής, ο καθένας; ΦΟΙΤΗΤΗΣ: n στο τετράγωνο. JASON Hirshhorn: n τετράγωνο. Επειδή, όπως ο Marcus και εγώ μόλις συνειδητοποίησα εδώ, θα πάμε να πρέπει να περάσουν από τη λίστα καταλόγου αριθμό φορών. Έτσι περνάει κάτι από μήκους n, n: αριθμός των φορές είναι στην πραγματικότητα n τετράγωνο. Έτσι, αυτό είναι ψευδοκώδικα μας. Αυτό φαίνεται πολύ καλή. Μήπως κάποιος έχει απορίες για το ψευδοκώδικα; Διότι στην πραγματικότητα το είδος επιλογής πρέπει να ίσως έρθει ένας προς ένα, από τον κωδικό ψευδοκώδικα. Έτσι, οποιεσδήποτε ερωτήσεις σχετικά με το λογική του ψευδοκώδικα; Παρακαλώ ρωτήστε το τώρα. Επιλογή είδους - ενώ η λίστα είναι έξω της τάξης, θα πάμε για να περάσει μέσα από αυτό και να βρει το μικρότερο κάθε φορά και το βάζουμε στο μπροστινό μέρος. Έτσι, ενώ ο κατάλογος είναι εκτός λειτουργίας, μπορεί να κάποιος να μου δώσει αυτή τη γραμμή του κώδικα που Δεν μου έχει δώσει μια γραμμή κώδικα ακόμα, παρακαλώ; Ακούγεται σαν τι; ΦΟΙΤΗΤΗΣ: Αυτό είναι ένα βρόχο. JASON Hirshhorn: Ακούγεται ήθελα ένα βρόχο. Εντάξει, μπορείτε να μου δώσετε την για βρόχο; Για - ΦΟΙΤΗΤΗΣ: i ισούται με 0. JASON Hirshhorn: i ή - τι μας λείπει; Τι συμβαίνει εδώ; ΣΠΟΥΔΑΣΤΩΝ: Int. JASON Hirshhorn: Ακριβώς. (Int i = 0? - ΦΟΙΤΗΤΗΣ: i