[Powered by Google Translate] DAVID J. Malan: Εντάξει, αυτό είναι CS50, και αυτή είναι η έναρξη της δεύτερης εβδομάδας. Σας ευχαριστώ. Ας ξεκινήσει εδώ με ένα τηλεφώνημα. Είμαι έτοιμος να καλέσετε 617-BUG-CS50. CS50: Αυτό είναι CS50. Για Αγόρι Μεταφορά, πατήστε 1. Για να ξεκινήσετε από την αρχή, πατήστε το πλήκτρο 9. David J. Malan: Έτσι είπε για αγόρι Μεταφορά, πατήστε 1. Έτσι θα πάμε να πατήστε 1. CS50: Ποια είναι η καταγωγή σας; Για quad, πατήστε 1. Mather, πατήστε 2. Boylston, πατήστε 3. Lamont, πιέστε 4. Mem Hall, πατήστε 5. Για να ξεκινήσετε από την αρχή, πατήστε το 0. David J. Malan: Θα πατήστε 1 για quad. CS50: Επόμενη λεωφορείο αφήνει αυτό το πολύ λεπτό σε PM 1:10, και στη συνέχεια, στις 1:20 μ.μ., 13.30 μ.μ., 13.40 μ.μ.. Αυτό είναι CS50. David J. Malan: Έτσι αυτή είναι η φωνή του CS50. Και αυτό είναι ένα παράδειγμα του είδους των τελικών σχεδίων, για παράδειγμα, μπορείτε να δαγκώνουν προς στο τέλος του εξαμήνου. Για παράδειγμα, ότι υπάρχει shuttleboy.cs50.net - στην πραγματικότητα ένα έργο που έγραψε για πρώτη φορά μετά τη λήψη CS51 πίσω όταν ήμουν ένα προπτυχιακό. Και η έμπνευση εδώ ήταν τότε, το μόνο που είχε ήταν τυπωμένα τα δρομολόγια μεταφοράς με λεωφορείο, και δεν υπήρχε έννοια του ψάχνουν τα πράγματα σε απευθείας σύνδεση. Και γι 'αυτό το είδος της περιστέρι σε ένα Σαββατοκύριακο, χύνεται μέσα από το τυπωμένο χρονοδιάγραμμα, και μεταφερθούν σε ένα πρόγραμμα υπολογιστή. Εκείνη την εποχή, το πρόγραμμα του υπολογιστή έτυχε να γράφονται στο Γ. Και έτρεξε πραγματικά πληκτρολογώντας Boy Μεταφορά σε ένα αναβοσβήνει ζητήσει όπως έχουμε κάνει μέχρι τώρα. Αλλά όλα αυτά τα χρόνια, είναι εξελίχθηκε σε μια στιγμή μηνυμάτων bot. Είναι εξελιχθεί πιο πρόσφατα σε αυτή την ιστοσελίδα, σε ένα SMS-based εργαλείο, καθώς και σε αυτή τη φωνή που βασίζεται εργαλείο. Και αυτό είναι να δείξουν τα είδη των πραγμάτων που μπορείτε να κάνετε για τον εαυτό σας μέχρι το τέλος του εξαμήνου. Για παράδειγμα, υπάρχει η έκδοση του Boy SMS Μεταφορά συμβαίνει να λειτουργεί ως εξής. Αν, στο κινητό σας τηλέφωνο, μπορείτε να στείλετε ένα μήνυμα κειμένου σε 41411 και στη συνέχεια να στείλετε το ειδικό σύμβολο sboy, για αγόρι Μεταφορά, ακολουθούμενη από τα Α και Β, όπου το Α είναι μία αρχή και το Β είναι ένα προορισμού - για παράδειγμα, Boylston Space Quad - τι θα πρέπει να πάρει πίσω μέσα σε λίγα δευτερόλεπτα είναι ένα κείμενο μήνυμα από το αγόρι Μεταφορά σας λέω ακριβώς όταν η προσεχών λεωφορεία είναι, από εκείνο το σημείο Α που πρόκειται να σημείο Β. Και αυτό είναι ένα γενικότερο παράδειγμα αυτό που είναι γνωστό ως χρησιμοποιώντας ένα API. Έτσι, για παράδειγμα, αυτό εδώ είναι απλά shuttleboy.cs50.net, η πραγματικό web-based ενσάρκωση αυτού. Αλλά τα δεδομένα που υπογραμμίζει αυτό και άλλες εφαρμογές που CS50 έχει αναπτύξει όλα εκτίθενται σε όλους εδώ με τη μορφή του ΑΡΙ, διεπαφές προγραμματισμού εφαρμογών. Και αυτό είναι μόνο ένα φανταχτερό τρόπο λέγοντας ότι οι άνθρωποι που μας αρέσουν σε το Διαδίκτυο και άλλοι έχουν περάσει κάποιο χρονικό διάστημα τη δημιουργία λογισμικό που μπορείτε να χρησιμοποιήσετε για να αρπάξει τα στοιχεία από εμάς και στη συνέχεια να οικοδομήσουν τις δικές σας εφαρμογές στην κορυφή αυτού του συνόλου δεδομένων. Έτσι, για παράδειγμα, αυτό το αγόρι Μεταφορά σελίδα API εδώ, η οποία συμβαίνει να είναι στο εγχειρίδιο CS50, ουσιαστικά έγγραφα πώς μπορείτε να πάτε για ζητώντας CS50 servers για τα δεδομένα. Για παράδειγμα, αν είστε εξοικειωμένοι με τα αρχεία CSV, κόμμα χωρίζονται αξίες, αυτά είναι ακριβώς το είδος της μπακάλικος Excel-όπως αρχεία. Έτσι, μπορείτε να ζητήσετε Boy Μεταφορά για όλα τα δεδομένα σχετικά με όλα τα σπίτια και συντεταγμένες GPS τους, και θα πάρετε πίσω, ουσιαστικά, ένα υπολογιστικό φύλλο, όπως ότι μπορείτε να διαβάσετε στη συνέχεια, σε ένα πρόγραμμα του δικού σας και στη συνέχεια, παράγουν αποτελέσματα, όπως το Αγόρι Μεταφορά από και προς το ίδιο συμβαίνει να κάνει. Για τους πιο οικείο, πιο σύγχρονες αναπαραστάσεις δεδομένων περιλαμβάνουν JSON, Object Notation JavaScript. Κάτι θα έρθει πίσω σε σας προς στο τέλος του εξαμήνου. Αλλά και πάλι, αυτό είναι μόνο ένα από τα πολλά της δικής APIs CS50 του. Και το συναρπαστικό πράγμα είναι τώρα, αυτές τις μέρες, το Facebook και το Twitter και το Google και λίγο πολύ κάθε δημοφιλή ιστοσελίδα από πρέπει να υπάρχει κάποιο είδος του API, το οποίο σημαίνει ότι αν έχετε διαβάσει το έγγραφα στην ιστοσελίδα τους, μπορείτε να εγγραφείτε για μια λογαριασμό, τότε μπορείτε να αρχίσετε να γράφετε λογισμικό στην κορυφή του ό, τι εργαλεία ή δεδομένα που παρέχει η εταιρεία εκεί. Και έτσι ένα από τα δικά μας υποτρόφων διδασκαλία ένα-δύο χρόνια πίσω έγραψε μια έκδοση Mac του αυτό. Έτσι, στο σύνδεσμο με τίτλο Mac εδώ στο πάνω αριστερά, μπορείτε πραγματικά να κατεβάσετε ένα λειτουργικό σύστημα Mac OS widget που τρέχει σε Mac δική σας να κάνει το ίδια είδη των πραγμάτων. Έτσι είναι όλα σχετικά με την οικοδόμηση πάνω από σύνολα δεδομένων, όπως αυτά. Αλλά περισσότερα για αυτό προς το τέλος του εξαμήνου. Έτσι, ας βουτήξει σε πραγματικό γρήγορα με κάποιο bug, απλά για να πάρει το είδος της τα πράγματα θερμαίνεται μέχρι σήμερα, και ότι πίσω σε μερικά από τα πράγματα που κοίταξε την περασμένη εβδομάδα. Ειδικότερα, επιτρέψτε μου να προχωρήσει και να σηκώσει, ας πούμε, αυτό το παράδειγμα εδώ. Buggy1.c, αυτό είναι διαθέσιμα στην ιστοσελίδα του μαθήματος αν θέλετε ήθελα να το κατεβάσετε και να σακί γύρω από τον εαυτό σας. Αλλά ας μεγέθυνση εδώ σε αυτό το αρκετά σύντομο πρόγραμμα, και μόλις μια υπερ-γρήγορη ανακεφαλαίωση του μερικά από τα βασικά δομικά στοιχεία που είμαστε πραγματικά πρόκειται απλά να αρχίσετε να παίρνετε ως δεδομένο. Έτσι, το μπλε πράγματα, στις γραμμές 1 έως 9, είναι μόνο softball ερωτήσεις. Έτσι, αυτά είναι μόνο τα σχόλια. Δεν έχουν λειτουργική σημασία. Αλλά είναι τα σχόλια, με την έννοια ότι είμαστε σημειώνει ότι Εγώ, ο άνθρωπος, έκανε στον εαυτό μου, έτσι ώστε σε διάλεξη και μετά διάλεξη, πραγματικά δεν μπορώ να θυμηθώ τι αυτό το πρόγραμμα κάνει χωρίς να χρειάζεται να διαβάσει μέσα από το γραμμή προς γραμμή και αναδημιουργία της ιστορίας στο μυαλό μου. Επιπλέον, αν το χέρι αυτό το πρόγραμμα σε κάποιον άλλο, όπως σας, είναι πολύ πιο σαφής για εσάς, γιατί από σχόλια όπως αυτό, τι το πρόγραμμα είναι πραγματικά κάνει, ή τουλάχιστον ό, τι η πρόγραμμα υποτίθεται ότι πρέπει να κάνει. Ανεξάρτητα από το αν είναι σωστό είναι ένα άλλο θέμα εντελώς. Τώρα, σε C, με multi-line σχόλια, υπενθυμίζουν ότι στη γραμμή το ένα είναι εδώ το μαγικό σύμβολο, / *. Αυτό σημαίνει ότι εδώ έρχεται η αρχή ενός σχολίου. Και τίποτα άλλο δεν έχει σημασία μέχρι να φτάσετε στο τέλος τερματισμού, το οποίο είναι * /, το αντίθετο. Έτσι, το γεγονός ότι έχω 80-κάποιες περίεργες αστέρια από εδώ αριστερά προς τα δεξιά είναι πραγματικά μόνο μια αισθητική λεπτομέρεια. Δεν έχει λειτουργική σημασία. Τώρα, σχετικά με το πώς γραμμή 11; Τι σημαίνει αυτό κάνουμε σε απλή γλώσσα; Τι είναι αυτό; ΚΟΙΝΟ: Περιλαμβάνει το πρότυπο. David J. Malan: Εντάξει, καλά. Έτσι περιλαμβάνει την βιβλιοθήκη stdio.h. Λοιπόν, τι σημαίνει αυτό; Λοιπόν, μέσα σε αυτό το αρχείο, stdio.h, είναι ένα σωρό δηλώσεις λειτουργία - δηλαδή, κώδικα που έγραψε κάποιος άλλος. Και ένα τέλειο παράδειγμα μιας συνάρτησης που είναι δηλώθηκαν στην stdio.h είναι - η οποία αγαπημένο από τώρα; Έτσι printf, μία από τις πιο συνηθισμένες να χρησιμοποιούν, ασφαλώς νωρίς, από την εν λόγω βιβλιοθήκη είναι εκεί. Αν μπορώ να εξαιρέσω ότι η γραμμή του κώδικα, Clang πρόκειται να φωνάζω σε μένα κάτι σχετικά με τη χρήση της αδήλωτης ένα σύμβολο. Κάτι αδήλωτη είναι ίσως η λέξη-κλειδί, διότι δεν έχουν ενημερώσει τον compiler τι φαίνεται printf όπως αν δεν περιλαμβάνουν την εν λόγω γραμμή. Και πιο κάτω στη Γη, πραγματικά, τι γραμμή που λέει είναι ανοίξει το αρχείο, stdio.h, όπου και αν βρίσκεται στο διακομιστή σκληρό δίσκο ή σκληρό δίσκο της συσκευής, και copy-paste το δεξιά υπάρχει στο αρχείο μου, χωρίς να μου που έχει να κάνει αυτό με το χέρι. Τώρα, όταν έχουμε εδώ κάτω στην κύρια, σε λίγο θα αρχίσουμε πειράγματα πέρα ​​τι int και τι είναι άκυρη. Αλλά για τώρα, ας δούμε τις τρεις γραμμές εντός 15 έως 17. Αυτό εδώ θα διεκδικήσει ως λάθη. Γραμμή 7 σε σχόλιά μου λέει "Εάν εκτυπώσετε 10 αστερίσκους, αλλά δεν. "Γιατί αυτό δεν εκτυπώνει, στην πραγματικότητα, 10 τέτοια άστρα; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ακριβώς. Έτσι, παρατηρούμε ότι είμαστε αρχίζουν να μετράνε από το 0. Και αυτό είναι στην πραγματικότητα μια σύμβαση στον προγραμματισμό και επιστήμη των υπολογιστών γενικότερα, αρχίζουν να μετράνε από 0 αντί του 1. Και αυτό πραγματικά ακριβώς προέρχεται από το γεγονός ότι, για παράδειγμα, όταν είχαμε οκτώ άτομα πάνω στη σκηνή, όταν κανείς δεν σηκώνοντας το χέρι τους, ήταν όλα τα μηδενικά αποτελεσματικά. Και γι 'αυτό είναι ακριβώς το είδος της σύμβασης υπολογιστή έτσι, ως εκ τούτου, να αρχίζουν να μετρούν από το 0. Εάν αυτό είναι ο μικρότερος αριθμός που μπορεί να αντιπροσωπεύει το δυαδικό. Έτσι, εδώ έχουμε ξεκινήσει την προετοιμασία i στο 0. Έχουμε που θ ίση με 0. Στη συνέχεια, όμως έκανα αυτό το λάθος εδώ, λέγοντας ότι το i είναι μικρότερο ή ίση με 10. Αλλά αν νομίζετε ότι μέσα, αν αρχίσω σε 0 και στη συνέχεια να πάω έως 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, είμαι πραγματικά πρόκειται να εκτυπώσετε 11 αστέρια στην οθόνη, επειδή έχω ανέβει και ίσο με 10. Έτσι, η εύκολη λύση είναι εδώ τότε τι; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Απλά αλλάξτε σε λιγότερο από. Αν θέλετε πραγματικά, θα μπορούσατε να το κάνετε αυτό. Αλλά σε γενικές γραμμές, αυτό είναι παρακινδυνευμένο. Και έτσι αρχίζει να μετρά από το 0 είναι απλώς κάτι που θα πρέπει να συνήθως συνηθίσει. Τώρα, τι θα γίνει με όλο αυτό το κατασκεύασμα και αυτή η ίδια; Αυτή η γραμμή 15 demarks ένα για βρόχο. Έτσι, δεν είναι μια συνάρτηση. Είναι απλά μια δήλωση. Είναι ένα κατασκεύασμα looping, όπως είδαμε στο Scratch. Και αυτό έχει τρία μέρη. Σημειώστε ότι δεν υπάρχει το πρώτο μέρος να το αριστερό του άνω τελεία. Υπάρχει το μεσαίο τμήμα μεταξύ των δύο ερωτηματικά. Και έπειτα υπάρχει το δεξιό μέρος προς τα δεξιά από το δεύτερο ερωτηματικό. Τώρα, το πρώτο από αυτά τα κάνει τι; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Επιστροφή εκεί; Ναι; ΚΟΙΝΟ: Αρχικοποίηση. David J. Malan: Αρχικοποίηση. Λοιπόν, τι σημαίνει αυτό; Έχουμε δηλώσει μια μεταβλητή που ονομάζεται i. Είναι τύπου int, επειδή έχω καθορίζεται int i. Και είμαι i αρχικοποίηση με την τιμή 0. Λοιπόν, τι είναι αυτό πραγματικά λένε; Είναι ουσιαστικά λέει στον υπολογιστή hey, να μου δώσει αρκετά μνήμη, αρκετή μνήμη RAM, για να χωρέσει μια σειρά, και στη συνέχεια, τοποθετήστε το αριθμός 0 σε αυτό το κομμάτι της μνήμης RAM. Και ως ένα μέρος, πόσο μεγάλη είναι μια int τυπικά, τουλάχιστον στο εσωτερικό της συσκευής; ΚΟΙΝΟ: 32 bit. David J. Malan: 32 bits. Έτσι, αυτό σημαίνει να μου δώσει 32 bits, αλλιώς γνωστή ως 4 bytes, και να θέσει την τιμή 0 σε αυτό, το οποίο είναι αρκετά εύκολο, διότι αυτό σημαίνει ότι μόλις που όλα τα κομμάτια στο 0. Μέχρι τώρα, το δεύτερο μέρος εδώ είναι η κατάσταση. Και η κατάσταση, όπως υποδηλώνει το όνομα, είναι αυτό που ελέγχεται ξανά και ξανά και ξανά για το αν είναι αληθείς ή ψευδείς. Έτσι, αυτό είναι ακριβώς λέγοντας κάνει τις παρακάτω γραμμές κώδικα - δηλαδή γραμμή 16, γιατί αυτό είναι το μόνο μία εσοχή κάτω - εφ 'όσον το i είναι μικρότερο από 10. Και μετά από κάθε επανάληψη μέσα από αυτό το βρόχο, κάνει το προσαύξηση, η οποία στην περίπτωση αυτή είναι i + +. Τώρα, δεν πρέπει να είναι i + +. Θα μπορούσε να είναι ί -. Αλλά αν το έκανα αυτό, τι η συμπεριφορά θα να είναι αυτό το πρόγραμμα; ΚΟΙΝΟ: Είναι πρόκειται να είναι ένα άπειρο βρόχο. David J. Malan: Είναι πρόκειται να είναι κάποιο είδος του άπειρο βρόχο, αν δεν τυχεροί μετά από 2 δισεκατομμύρια αρνητικά ή έτσι. Ίσως τα πράγματα θα τυλίξετε γύρω, μόνο από τη φύση του πεπερασμένου αριθμός των bits που έχουμε διαθέσει για έναν int. Αλλά είναι βέβαιο ότι θα επαναλάβει πολύ περισσότερο από ό, τι 10 και σίγουρα περισσότερο από 11 φορές εδώ. Και τώρα, ακριβώς όπως ένα μέρος, συνειδητοποιούν ότι i + + και i - είναι πραγματικά ακριβώς συντακτική ζάχαρη. Είναι ακριβώς σημειογραφία στενογραφία για ό, τι είναι λίγο πιο ρητά γράφεται ως εξής: i = i + 1. Αυτό είναι πανομοιότυπο με i + +. Είναι ακριβώς το είδος του φαίνεται πιο όμορφη να πω ότι + +. Είναι πιο περιεκτικό, πιο ευανάγνωστο. Και έτσι οι περισσότεροι άνθρωποι κάνουν ότι αντ 'αυτού. Αλλά αυτό είναι ταυτόσημο με λειτουργικά αυτό που μόλις είδαμε. Έτσι, με λίγα λόγια, η γρήγορη λύση εδώ είναι απλά να πω επαναλάβει i από 0 σε όλη τη διαδρομή μέχρι λιγότερο από 10. Και τότε θα πάρει πράγματι 10 αστέρια. Ας προσπαθήσουμε αυτό. Επιτρέψτε μου να ανοίξει το τερματικό στο κάτω μέρος. Επιτρέψτε μου να πάω στον κατάλογο αυτό είναι ότι μέσα Και Πάω να το υπολογίσουν με το χέρι Clang για τώρα. Και Πάω να συγκεντρώσει αυτό το buggy1.c, Enter. Και τώρα buggy1, γιατί δεν υπάρχει τέτοιο αρχείο ή κατάλογος υπάρχει που ονομάζεται buggy1; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ναι. Γι 'αυτό είναι πραγματικά αποκαλείται a.out. Έτσι θυμάμαι αν τρέχετε απλώς Clang, όπου είναι η Clang compiler, και δεν καθορίσετε το όνομα που θέλετε να δώσει στο πρόγραμμά σας, πρόκειται να προεπιλογή a.out. Έτσι, αν πράγματι κάνω ls - ουπς. Και didn't - το μαύρο-άσπρο-και το θέμα μερικά από που αντιμετώπισε έχει καθοριστεί. Αλλά επιτρέψτε μου να το κάνετε αυτό. Εκεί έχουμε a.out στην αριστερή πλευρά εκεί. Γι 'αυτό και πρέπει να τρέξει a.out αντί buggy1. Επιτρέψτε μου λοιπόν να προχωρήσει και να το κάνουμε αυτό. . / A.out, Enter. Και προφανώς δεν κάνει ό, τι; ΚΟΙΝΟ: Save. David J. Malan: Αποθηκεύστε το αρχείο μου. Έτσι που λύνεται εύκολα με το χτύπημα S Ελέγχου, ή πρόκειται να Αρχείο, Αποθήκευση, όπως και στα περισσότερα προγράμματα. Επιτρέψτε μου να πάω εδώ κάτω, καθαρίσετε την οθόνη, εκτελέστε ξανά. Και υπάρχει ακόμα ένα bug. Έτσι τι συμβαίνει - ΚΟΙΝΟ: Δεν μεταγλωττίσετε. David J. Malan: Αχ, καλά. Εγώ δεν το υπολογίσουν. Όπως και ηλίθιος, κοιτάζω τον κωδικό για να δείτε τι συμβαίνει. Έτσι buggy1.c κλαγγή, τώρα a.out. Και φτου, έσωσε. Γι 'αυτό φαίνεται λίγο άσχημο γιατί δεν υπάρχει νέα γραμμή οπουδήποτε στο πρόγραμμα. Αλλά και πάλι, αυτό είναι απλά μια αισθητική λεπτομέρεια. Και τουλάχιστον αν μετράμε από αυτούς, θα πρέπει να Τώρα δείτε 10 τέτοια άστρα. Λοιπόν, τι γίνεται με αυτή τη δεύτερη προθέρμανσης παράδειγμα; Έτσι, σε buggy2, εγώ ισχυρίζονται ότι αυτή η έκδοση, επίσης, θα εκτυπωθούν 10 αστέρια, ένα για κάθε γραμμή. Έτσι, αυτή τη στιγμή, έχω ένα χαρακτήρα νέας γραμμής, μόνο και μόνο για να κάνουν τα πράγματα είναι λίγο πιο όμορφη. Όμως, αντί να παίρνω ό, τι είναι αυτό. Έτσι, επιτρέψτε μου να κάνω buggy2.c κλαγγή, Enter. Τώρα είναι και πάλι λέγεται a.out. Enter. Βλέπω μόνο μια νέα γραμμή, μόνο το τελευταίο νέα γραμμή που κινείται προτροπή μου στην επόμενη γραμμή. Και όμως, σαφώς έχω την εκτύπωση *, στη συνέχεια, μια νέα γραμμή, *, Τότε μια νέα γραμμή. Αλλά ποιο είναι το σφάλμα εδώ; Ναι; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ακριβώς. Έτσι, σε αντίθεση με μερικές γλώσσες, όπως η Python, όπου εσοχή στην πραγματικότητα έχει λειτουργική έννοια, σε ένα γλώσσα όπως η C - όπως θα δούμε, PHP, JavaScript - η εσοχή είναι πραγματικά μόνο για όφελος των ανθρώπων. Έτσι, το γεγονός ότι έχω χαραγμένη γραμμή 16 και 17 φαίνεται μεγάλη, αλλά δεν έχει λειτουργική έννοια εδώ. Αν θέλω δύο γραμμές για να εκτελέσει ως μέρος της για βρόχου, τότε θα πρέπει να τα βάλετε μέσα σε άγκιστρα με τον τρόπο αυτό. Μπορείτε να κόψετε μόνο ότι η γωνία και να παραλείψετε τις αγκύλες, αν ποια είναι η περίπτωση; ΚΟΙΝΟ: Μόνο μία γραμμή. David J. Malan: Μόνο μια γραμμή. Έτσι, αυτό είναι ακριβώς το είδος του ένα ωραίο είδος της σύνταξης λεπτομέρεια, έτσι ώστε να μην χάνετε χρόνο για να γράψω τρεις γραμμές, δύο από τις οποίες είναι άγκιστρα, μόνο και μόνο για να γράψει μια γραμμή κώδικα. Αλλά εάν έχετε δύο ή περισσότερες γραμμές, εμείς Πράγματι, πρέπει να το κάνουμε αυτό. Έτσι, τώρα επιτρέψτε μου να σώσει αυτό. Επιτρέψτε μου να προχωρήσει και να εκτελέσετε ξανά Clang. Στη συνέχεια, επιτρέψτε μου να a.out επανάληψη, και τώρα έχω μία ανά γραμμή. Τώρα, a.out είναι και πάλι το είδος του μια χαζή όνομα για ένα πρόγραμμα. Πώς μπορώ να πω Clang πραγματικά να μου δώσει ένα όνομα αρχείου αυτό είναι πιο φιλικό προς το χρήστη, όπως buggy2 ίδια; Λίγο πιο καθαρά; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Εντάξει, γι 'αυτό μπορεί να πάρει πραγματικά την ίδια την φιλικό προς το χρήστη και συντόμευση απλά γράψτε κάνει buggy2. Δεν προσδιορίζει. Γ. στην περίπτωση αυτή, και πατήστε Enter. Και τι να κάνει είναι να συγκεντρώνει buggy2.c για μένα από ζητώντας Clang να το κάνει. Συγκεκριμένα, καλεί Clang, τρέχει Clang με τρόπο περισσότερο ορίσματα της γραμμής εντολών ή διακόπτες από ό, τι πραγματικά χρειάζεται. Με τον καιρό, θα έρθει πίσω σε ό, τι όλα αυτά τα διάφορα αινιγματικά ενωτικό εκφράσεις σημαίνει. Αλλά για τώρα, που είναι μόλις γλίτωσε από τον κόπο του χρειάζεται να θυμάστε και να χρειάζεται να πληκτρολογήσετε από όλους εκείνους διάφορες εκφράσεις ενωτικό. Και η ανοδική του είναι τελικά ότι τώρα έχω buggy2. Αν θέλω να κάνω αυτό με το χέρι, όμως, εγώ αντί να το κάνετε αυτό - κλαγγή-o buggy2 και στη συνέχεια buggy2.c. Και ομοίως ότι θα μου δώσει ένα αρχείο που ονομάζεται buggy2. Έτσι, με λίγα λόγια, Clang είναι ο compiler. Κάνετε είναι απλά ένα εύχρηστο εργαλείο που θα χρησιμοποιείτε περισσότερο και περισσότερο, επειδή ακριβώς αρχίζει να απλοποιήσει τα πράγματα για εμάς. Και θα επιστρέψουμε 0, τέλος. Προς το παρόν, μόνο και μόνο επειδή, αλλά θα αρχίσει τα πειράγματα το τμήμα σήμερα και την Τετάρτη. Οποιεσδήποτε ερωτήσεις σχετικά με οποιοδήποτε από αυτό; Ναι; ΚΟΙΝΟ: [δεν ακούγεται] ls σε εισαγωγικά εκεί; David J. Malan: OK. Όταν δακτυλογραφημένες ls σε εισαγωγικά, που μου κάνει κάποια μαγεία πίσω από τα παρασκήνια για να διορθώσετε ένα σφάλμα. Ξέχασα, όπως έχουμε ήδη πει πολλοί από εσάς για την πίνακες συζητήσεων, να κάνουμε - εμείς θα κάνουμε αυτό τώρα - sudo yum-y update appliance50. Ωχ, ότι αυτό είναι σωστό ορθογραφία. Έτσι, η συσκευή είναι σαν ένα λειτουργικό σύστημα. Είναι τρέχει αυτό το λειτουργικό σύστημα που ονομάζεται Fedora. Και τώρα, λόγω της αργή σύνδεση στο Διαδίκτυο μου, έχω πραγματικά το hosed. Έτσι τρέχοντας sudo yum update, όπως σας λέμε να κάνετε στο σετ πρόβλημα, ουσιαστικά λειτουργεί όπως αυτόματες ενημερώσεις σε Mac OS ή Windows. Και ο λόγος για τη λειτουργία αυτή κατά την έναρξη της σύνολο πρόβλημα οφείλεται στο γεγονός ότι όταν δημιουργήσαμε τη συσκευή, θα μπέρδεμα πάνω, και έχω κάνει λάθος όλα τα προγράμματα σας να φανεί μαύρο σε μια μαύρη οθόνη, η οποία είναι ο λόγος που δεν τις βλέπουμε από προεπιλογή. Όμως, η τελευταία έκδοση της συσκευής καθορίζει αυτό. Και εγώ θα καθορίσει ότι κατά τη διάρκεια της διακοπής όταν έχω Internet συνδεσιμότητα. Έτσι, τα εισαγωγικά κρύβει μόνο λάθος μου, πολύ διακριτικά, προφανώς. Άλλες ερωτήσεις; Ναι; ΚΟΙΝΟ: Πού να προέρχονται από; [Δεν ακούγεται] David J. Malan: Καλή ερώτηση. Σε περίπτωση που κάνει προέρχεται από; Πρόκειται για ένα πρόγραμμα Linux που υπάρχει εδώ και πολλά χρόνια, πολύ πριν CS50. Και έρχεται με ένα λειτουργικό σύστημα όπως το Fedora. Δεν προέρχεται από τη βιβλιοθήκη CS50. Στην πραγματικότητα, τα μόνα πράγματα που έρχονται από τη βιβλιοθήκη CS50 μέχρι σήμερα, που έχουμε δει, είναι GetString, GetInt, όλα Λήψη λειτουργίες αυτές, και το string λέξη, και σε ορισμένες βαθμό, η λέξη bool. Αλλά εμείς θα δώσουμε έμφαση ότι πέρα ​​όταν θα βουτήξει στο CS50 ίδια τη συσκευή. Ναι λοιπόν, ένα ακόμη ερώτημα εδώ. ΚΟΙΝΟ: Όταν είπατε να κάνει λάθη και, στη συνέχεια, πώς η υπολογιστή ξέρω [δεν ακούγεται]; David J. Malan: Καλή ερώτηση. Έτσι, όταν μπορείτε απλά να τρέξει ή να κάνει buggy1 buggy2, πώς κάνει ξέρει; Έτσι, από προεπιλογή, εάν πληκτρολογήσετε κάνει buggy1, κάνουν την εμφάνιση για μια αρχείο με όνομα buggy1.c. Και τότε θα εκτελεί τις κατάλληλες εντολές Clang, παραμερίζοντας έτσι το αρχείο εξόδου ονομάζεται προεπιλογή a.out. Στην πραγματικότητα, αν κοιτάξουμε τι κάνουν, τι - Ας σταματήσουν αυτό. Αν κοιτάξουμε τι κάνουν πραγματικά να κάνει, να buggy2, είναι ήδη μέχρι σήμερα. Έτσι, επιτρέψτε μου να καταργήσετε την εντολή rm, η πρόγραμμα που έγραψα πριν. Πληκτρολογώντας Υ-Ε-S για να επιβεβαιώσετε ότι θέλετε να το αφαιρέσετε. Αν τώρα κάνουν, παρατηρούμε ότι σε αυτή την πολύ μεγάλη γραμμή, υπάρχει αυτό το τελευταίο πράγμα εδώ,-o buggy2. Όλα μάρκα κάνει περνάει το επιχείρημα αυτό, να το πω έτσι, να Clang, έτσι ώστε δεν έχω να πληκτρολογήσετε τον εαυτό μου αυτό. Εντάξει, έτσι ώστε ένα γρήγορο ζευγάρι των διοικητικών ανακοινώσεις. Έτσι, για τα τμήματα, η οποία ξεκίνησε επίσημα την ερχόμενη Κυριακή, θα θέλουν πάντα να φέρει, αν έχετε ένα, ένα φορητό υπολογιστή. Αν δεν έχετε ένα φορητό υπολογιστή, να φτάσει σε μένα από πτώση μου ένα email. Και εμείς θα καταλάβουμε μια ροή εργασίας. Τι γενικά θα βρείτε στο τμήμα είναι ότι είναι μέρος εννοιολογική, μέρος hands-on. Θα χρησιμοποιήσουμε ειδικά το τμήμα των ερωτήσεων, μέρος του πρόβλημα σύνολο της εβδομάδας, για να περπατήσει μέσα από μερικά από τα εννοιολογικό υλικό από τη διάλεξη. Και αυτό είναι το μόνο στο τρέχον σύνολο πρόβλημα. Και εμείς επίσης θα βουτήξετε σε κάποια χέρια-για τις δραστηριότητες, μερικές φορές των οποίων θα πρέπει να υποβληθούν, μερικές φορές το οποίο δεν θα το κάνει. Για παράδειγμα, αυτή η πρώτη εβδομάδα, όπου και αν εννοείται μόνο ως προθέρμανσης άσκηση. Και θα διαπιστώσετε ότι αυτά τα προβλήματα είναι πραγματικά ακριβώς αυτό. Θα είναι γραφτό να είναι αρκετά μικρό, αλλά όχι κατ 'ανάγκη τετριμμένα προγράμματα για να γράψει, που δεν είναι κατ 'ανάγκη συναρπαστικό από μόνα τους, αλλά είναι καλές ευκαιρίες για να πράξη με τη σύνταξη, με νέες λειτουργίες, στην άνεση του ένα τμήμα όπου έχετε μερικά από συμμαθητές σας παρουσιάσει ως καθώς TF σας. Και τι θα κάνουμε την πάροδο του χρόνου είναι η χρήση ενός εργαλείου που ονομάζεται CS50 χώρους, σύμφωνα με την οποία όχι μόνο τη χρήση του CS50 συσκευή, θα αντί να πάτε σε μια ιστοσελίδα σε ένα πρόγραμμα περιήγησης, όπου θα είστε σε θέση για να γράψουν κώδικα σε ένα παράθυρο του προγράμματος περιήγησης κατά τη διάρκεια της τμήμα. Και στη συνέχεια, αν έχετε επιλέξει το, τους συναδέλφους διδασκαλία σας μπορεί στη συνέχεια να δείξει ό, τι είναι εσείς πληκτρολογείτε στην οθόνη σας στο πρόγραμμα περιήγησής σας παράθυρο επάνω στο μπροστινό μέρος της κατηγορίας, είτε ανώνυμα είτε δημοσίως, έτσι ώστε αυτός ή αυτή μπορεί στη συνέχεια να περπατήσετε μέσα με συμμαθητές σας τι κάνατε καλά, τι δεν κάνουμε καλά. Και πάλι, να είστε σίγουροι όλα αυτά μπορεί να είναι όμορφα ανώνυμα. Αλλά αυτό θα είναι μια ωραία ευκαιρία για πολύ περισσότερα διαδραστικότητα από κάτι σαν διάλεξη επιτρέπει. Εν τω μεταξύ, θα έχουμε αυτά τα πράγματα που ονομάζεται σούπερ τμήματα, τα οποία είναι προαιρετικά, αλλά είναι ανοιχτή σε όλους σε η τάξη, έτσι ώστε να μπορείτε να το κάνετε αυτό για περισσότερο συλλογικά ορίσετε ένα πρόβλημα. Εδώ είναι το χρονοδιάγραμμα. Αυτό είναι επίσης αναρτημένες στην ιστοσελίδα του στο cs50.net. Παρατηρήστε ότι θα υπάρξει ένας χάκερ ειδικά ένα απόγευμα αύριο. Και εμείς θα κινηματογραφήσει ένα σήμερα και ένα αύριο και μετά τις σε απευθείας σύνδεση μέσα σε 24 ώρες. Έτσι, αν δεν μπορείτε να κάνετε οποιαδήποτε από αυτές τις φορές, για να μην ανησυχείτε. Και πάλι, το πρόγραμμα είναι σε απευθείας σύνδεση τώρα στο cs50.net. Όσον αφορά την ίδια τομή, θα πρέπει να έχετε πάρει ένα αναθέτοντας email σας για να πάτε στην αρχική σελίδα του μαθήματος για να βρείτε από το τμήμα σας. Αν η ζωή έχει αλλάξει και πρέπει να αλλάξετε το τμήμα σας, δεν αποτελεί πρόβλημα. Επιστρέψτε στην ίδια διεύθυνση URL, cs50.net/section, ενικό, και θα συμπληρώσετε την παρόμοια μορφή, ώστε να μπορείτε να τότε να μας δώσει τις προτιμήσεις σας. Και θα συνεχίσει να παρακολουθεί από το τέλος της εβδομάδας για το τι μπορούμε φιλοξενήσουν. Την περασμένη εβδομάδα, θυμάμαι ότι είχαμε προτείνει τη χρήση CS50 Συζητήστε, εργαλείο συζήτηση του μαθήματος, σε διάλεξη. Έτσι, είχαμε 40 ερωτήσεις που τέθηκαν και απαντηθούν κατά τη διάρκεια της διάλεξης. Έτσι, φάνηκε να λειτουργεί καλά, έτσι θα συνεχίσουμε προσπαθεί να το κάνει αυτό. Εάν, κατά τη διάρκεια της διάλεξης, που δεν αισθάνονται άνετα μόνο αύξηση χέρι σας, δεν είναι ένα πρόβλημα. Μετάβαση στο cs50.net/discuss, μετά εκεί, και ένα της διδασκαλίας μας υπότροφοι θα απαντήσει είτε ηλεκτρονικά ή να αυξήσει τους χέρι για λογαριασμό σας ανώνυμα να ζητήσει, ανάλογα με σχετικά με την φύση της ερώτησης. Και από την άποψη της ανάδρασης, γενικά psets θα είναι επιστρέφονται μέσα σε μια εβδομάδα. Επειδή χρειάζεται κάποιο χρονικό διάστημα για να επιτευχθεί τμήματα ισορροπίας, η πρώτη PSET, 0 και 1, θα είναι λίγο καθυστέρηση καθώς τα πράγματα ησυχάσουν. Αλλά μείνετε συντονισμένοι για ότι τις προσεχείς εβδομάδες. Εντάξει, οπότε επιτρέψτε μου να θέσει σε σοβαρό μου φωνή μόνο για μια στιγμή. Έτσι, αυτό είναι πραγματικά ένα ενδιαφέρον κλίμα να είναι αυτή η συζήτηση, τι με όλα τα άλλα πράγματα συμβαίνει στην πανεπιστημιούπολη που σχετίζονται με αυτό. Αλλά CS50 έχει σίγουρα την ιστορία του συγκεκριμένου θέμα, στο βαθμό που κάθε χρόνο, αυτή η σειρά μαθημάτων, για πολλούς χρόνια, Ad-πίνακες περίπου το 3% της κατηγορίας. Αυτό το πιο πρόσφατο έτος, 2011, Ad-CS50 επιβιβάστηκαν 35 μαθητές. Αυτό δεν είναι, νομίζω, λόγω της έλλειψης σαφήνειας. Συνειδητοποιήστε ότι στην εξεταστέα ύλη του μαθήματος, υπάρχει μια σελίδα δήλωση εξηγώντας πού είναι οι γραμμές. Την ίδια δήλωση αυτή επαναλαμβάνεται για κάθε ένα από τα θέτει το πρόβλημα στην πρώτη σελίδα. Γι 'αυτό και το αναφέρω αυτό σήμερα πραγματικά μόνο για να λαοί επίγνωση αυτού του γεγονότος. Και έχουμε δοκιμάσει διαφορετικά πράγματα. Και ό, τι νόμιζα ότι θα κάνουμε σήμερα είναι να λάβει μόνο μια στιγμή για να πραγματικά μια ματιά σε μερικά από το παρελθόν περιπτώσεις που έχουν καταλήξει. Αντί να κρατήσει αυτά ως βρώμικα μικρά μυστικά, στην πραγματικότητα επισημάνει τι οι μαθητές έχουν κάνει και πώς μπορούμε να ανιχνευθεί αυτό και πραγματικά ποιο είναι το πρωταρχικό κίνητρο είναι για ακόμη και με αυτή τη συζήτηση. Έτσι, με ότι είπε, η γραμμή είναι ουσιαστικά αυτό - σύμφωνα με την εξεταστέα ύλη, είστε ευπρόσδεκτοι, σας ενθαρρύνουμε, να μιλήσετε με τους συμμαθητές. Αυτό είναι όλος ο σκοπός της συνεργασίας που έχουν αυτά τα ώρες γραφείου στο Annenberg και την ενθάρρυνση των ανθρώπων για το τελικό σχέδιο να εργαστούν από κοινού. Αλλά η γραμμή είναι ισόπαλη, όταν έρχεται η ώρα να γράψει στην πραγματικότητα τελική λύση σας. Μιλώντας στα αγγλικά, εντελώς καλά, μιλώντας σε ψευδο κώδικα, εντελώς καλά. Στέλνοντας ένα συμμαθητή PSET σας, επιτρέποντάς τους να κοιτάξουν πέρα ​​από η οθόνη, όπως τα χέρια συνεχίσετε τη δακτυλογράφηση, πάνω από τη γραμμή, καθώς και. Να δούμε την εξεταστέα ύλη για τις συγκεκριμένες γραμμές. Αλλά μόνο και μόνο για να ζωγραφίσει μια εικόνα του πώς αυτό είναι, δυστυχώς, ένα πραγματικότητα, συνειδητοποιούν ότι υπάρχουν ιστοσελίδες εκεί έξω που έχουν λύσεις από αυτή την κατηγορία και πολλές άλλες κατηγορίες. Το γεγονός ότι εσείς ή το 3% από εσάς γνωρίζετε ότι αυτό υπάρχει σημαίνει ότι γνωρίζουμε ότι αυτό υπάρχει. Το γεγονός ότι υπάρχουν ιστοσελίδες όπως αυτή, όπου μπορείτε μπορεί να πληρώσει κάποιος για να κάνει πραγματικά σύνολα πρόβλημά σας - αυτό ήταν μια πραγματική περίπτωση που ήρθε το περασμένο έτος. Αυτή είναι μια ιστοσελίδα που ονομάζεται odesk.com. Και ο Tim ήταν το όνομα του προσώπου που ήταν εδώ για απόσπαση αυτή η ιστοσελίδα και ζήτησε από κάποιον να κάνει PSET του 7 σε αυτή η συγκεκριμένη περίπτωση. Λοιπόν, είναι πολύ odesk.com Google-είναι σε θέση, και εμείς οι πολύ καλός στο Googling. Εδώ, επίσης, υπάρχουν περιοχές - και αυτό είναι μάλλον αποτρόπαια, ειλικρινά. [Γέλια] David J. Malan: Το αστείο πράγμα σχετικά με αυτό το site είναι αν μπορείτε να διαβάσετε στη σελίδα Πληροφορίες, μιλούν για την εταιρική τους τον πολιτισμό και τον τρόπο εξυπηρέτησης των πελατών τους είναι νούμερο ένα προτεραιότητα, για να βεβαιωθείτε ότι έχετε τις αναθέσεις σας γύρισε στην ώρα. Αλλά σε όλη τη σοβαρότητα, και πάλι, το γεγονός ότι αυτές οι περιοχές υπάρχουν, διαπιστώνουμε, επίσης, επίγνωση του αυτά τα είδη των χώρων. Και για να σας δώσει μια αίσθηση του τι αποτελεί αυτό γενικά παίρνει, γενικά δεν έχουν μεγάλη σκάνδαλα όπου οι άνθρωποι συνεργάζονται σε κάθε είδους μαζική κλίμακα, αλλά μάλλον Είναι αυτά τα αργά τη νύχτα στιγμές αδυναμίας, όπου έχετε έτσι πολλά να κάνουμε, είναι 4:00 π.μ., είστε εξαντληθεί, και σας σκεφτείτε τον εαυτό σας, αλλά, επιτρέψτε μου απλά ρίξτε μια ματιά στο μου συγκάτοικο ή τον κωδικό του φίλου μου ή κάτι παρόμοιο. Και οι εκδηλώσεις του αυτό συνεπάγεται, δυστυχώς, Φοιτητής Η υποβολή κάτι τέτοιο και Φοιτητικής υποβολή Β κάτι σαν αυτό, το οποίο βεβαίως, σε έναν υπολογιστή επιστήμη τάξη, είναι εξαιρετικά εύκολο για τους επιστήμονες υπολογιστών για την ανίχνευση με το λογισμικό. Αυτό είναι ένα άλλο κοινό παράδειγμα, όπου έχετε το είδος της εργάζεται μαζί του κάποιος, ίσως να μιλάμε σε Ελληνικά, μια χαρά, ψευδοκώδικας. Αλλά τότε έρχεται η ώρα να υποβάλει στην πραγματικότητα, και οι psets απλά να ανταλλάσσονται μέσω e-mail ή Dropbox ή παρόμοια. Αλλά σε μια προσπάθεια να καταστεί λιγότερο εμφανές ότι αυτό είναι ό, τι έχει συμβεί, τότε αυτό είναι αυτό που υποβλήθηκαν. Αυτό, επίσης, δεν το ταξίδι μέχρι καλογραμμένο κομμάτια λογισμικό, όπως έχουμε πραγματικά να ανιχνεύσει αυτά τα είδη των πραγμάτων. Και πράγματι, αυτό που κάνουμε είναι το λογισμικό που τρέχει συγκρίνει όλα ισχυρισμοί του τρέχοντος έτους έναντι όλων των προηγούμενων έτους υποβολές, ενάντια σε ό, βρήκαμε για το Internet, ενάντια σε κάθε ιστοσελίδα δουλειά εκεί έξω. Είναι όλα πολύ αυτοματοποιημένη. Και έτσι το κάνουμε αυτό πραγματικά με μεγάλη δικαιοσύνη για το 97% που εργάζονται πραγματικά γαϊδούρια τους μακριά σε αυτό και σε άλλα τάξεων και τη θέση σε όλα αυτή την προσπάθεια, έτσι ώστε το έργο να υποβάλουν τελικά είναι η δική τους. Και μπορώ να συνεχίσω για πολύ καιρό. Αυτά είναι μόνο μια χούφτα από τις περιπτώσεις του προηγούμενου έτους. Λίγες οι μαθητές που υποβάλλονται σε αυτά τα αρχεία για τον ίδιο PSET 2, PSET 3, PSET 4, PSET 5, PSET 6, PSET 9. Σε αυτήν την περίπτωση, αυτό ήταν κουίζ σε 0 και πέρυσι, όπου δύο οι μαθητές που υποβάλλονται με τον ίδιο αυτή τη φράση μεταξύ πολλών άλλων, «Το αίτημα του τύπου -" τελεία, τελεία, τελεία. Έτσι, ακόμη και σε μια κατηγορία των 600 είχαμε εντοπίσει αυτό που υποβλήθηκαν κουίζ. Έτσι, με λίγα λόγια, αυτό - ειλικρινά, μου αρέσει που έχει αυτό το είδος του συζήτηση - αλλά αυτό είναι πραγματικά μια σκόπιμη προσπάθεια φέτος για να προσπαθήσει να μειώσει τον αριθμό αυτό. Διότι ακόμα κι αν λένε αυτά τα πράγματα κάθε το χρόνο, νομίζω ότι η πραγματικότητα του έχουν κατοικούσαν σε αυτό για λίγα δευτερόλεπτα από το συνηθισμένο και στην πραγματικότητα απλά επισημαίνοντας ότι αυτό μπορεί να φαίνεται σαν, ε, δεν είναι μια τέτοια μεγάλη υπόθεση, τουλάχιστον ότι πίσω σε αυτή τη συγκεκριμένη στιγμή, τόσο στην δικαιοσύνη για τον εαυτό σας και τους συμμαθητές σας εδώ. Έτσι, αν έχετε ποτέ οποιεσδήποτε ερωτήσεις για το πού η γραμμή είναι, παρακαλώ απλώς φτάσει σε μένα προσωπικά. Αλλά η απάντηση είναι πάντα, εντελώς τόνισε κατά την τελευταία στιγμή, τα μετρητά σε μια καθυστερημένη ημέρα. Ή αν είναι ένα θέμα που δεν έχει οποιεσδήποτε τελευταίες μέρες, Ειλικρινά, εγώ προσωπικά email. Θα καταλάβω κάτι. Παρακαλώ μην βάλετε το χρόνο σας εδώ στο Χάρβαρντ σε κίνδυνο. Τώρα, σκέφτηκα ότι θα έπρεπε να ελαφρύνει το κλίμα, γι 'αυτό περιλαμβάνονται όπως αυτό στην επόμενη διαφάνεια. [Γέλια] David J. Malan: Αυτή η ιστοσελίδα ήταν μεγάλη. Πήρα πραγματικά λίγο έξαλλος. Υπάρχει αυτό. Και τότε αυτό ήταν καταπληκτικό. Εντάξει, έτσι σκεφτείτε το γατάκι αργά το βράδυ κατά τη λήψη οι εν λόγω αποφάσεις. Εντάξει, έτσι πίσω στο πιο διασκεδαστικό και λιγότερο σοβαρά πράγματα, όπως συνθήκες. Εντάξει, έτσι μιλήσαμε για λίγο για αυτά. Αυτό είναι κάτι που είναι πιθανώς αρκετά εξοικειωμένοι από ο κόσμος του Scratch. Και στον κόσμο της Scratch, έχουμε αυτή την ανάγκη μερικές φορές να να κάνουν πιρούνια στο δρόμο. Είτε το κάνετε αυτό ή εκείνο ή το άλλο πράγμα εδώ. Και όταν θέλουμε να το κάνουμε αυτό, μπορούμε να χρησιμοποιήσουμε, σε C τώρα, αν αυτό αλλιώς κατασκευή. Και τότε εδώ έχουμε Boolean εκφράσεις. Για παράδειγμα, Boolean εκφράσεις εδώ, μπορούμε Ή μαζί τους, με την έννοια ότι έχουμε αυτήν την κατάσταση ή την πάθηση αυτή. Μπορούμε και μαζί τους, με την έννοια ότι θέλουμε να ελέγξετε την κατάσταση και ότι προϋπόθεση. Και εδώ έχουμε μια δήλωση switch τώρα, που δεν είναι τόσο συντακτικά όμοια με εκείνα τα είδη των συνθηκών, αλλά μας επιτρέπει να κάνουμε το ισοδύναμο του if, else if, else if, else αν, και τα παρόμοια με απλά απαριθμώντας τους κατά περίπτωση από την κατά περίπτωση. Έτσι είδαμε εκείνους τελευταία φορά. Και τότε αρχίσαμε αγγίζοντας τα πράγματα όπως βρόχους. Είδαμε ένα από αυτά μόλις πριν από λίγο. Υπάρχουν, όμως, αυτές οι άλλες δομές επανάληψης. Για παράδειγμα, αυτό εδώ. Έτσι, ενώ η (συνθήκη), κάνουν αυτό το πράγμα ξανά και ξανά. Έτσι, ουσιαστικά, αυτό που φαίνεται να είναι διαφορετικές μεταξύ αυτού βρόχο και για αυτό το βρόχο, ενώ εδώ; Αυτό το βρόχο και για αυτό το βρόχο while. Ναι; Τι είναι αυτό; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ωραία. Έτσι, ενώ σε κατάσταση για το βρόχο, υπάρχει σαφώς μεγαλύτερη σύνταξη. Υπάρχει αυτή η αρχικοποίηση, υπάρχει αυτή η ενημερωμένη έκδοση. Σε ένα βρόχο, ενώ, υπάρχει μόνο αυτή η κατάσταση. Έτσι, φαίνεται ότι είναι λίγο περικοπεί σε σχέση με το για βρόχο, το οποίο σημαίνει ότι αν θέλουμε να έχουμε μεταβλητές και θέλουμε να έχουν προσαυξήσεως, που πραγματικά πρέπει να κάνουμε μόνοι μας αυτό το πράγμα. Επιτρέψτε μου λοιπόν να προχωρήσει και να ανοίξει το gedit. Επιτρέψτε μου να στραφούν πάνω στη συσκευή. Και ας κάνουμε ένα γρήγορο μικρό παράδειγμα ότι διακρίνει μία από αυτές από τον άλλο. Και στο πίσω μέρος του μυαλού μου εδώ, θα ήθελα να πω ένα πράγμα. Ανέφερα συγκεκριμένα το όνομα του Τιμ. Τιμ ήταν στην πραγματικότητα κάποιος ότι ένας μαθητής προσπάθησε να βρει να κάνει τη δουλειά τους γι 'αυτούς. Δεν είχαμε καμία Tim στο συγκεκριμένο τμήμα. Έτσι αντιλαμβάνονται, μήπως θα αποκαλυφθεί ένα μαθητή, δεν ήταν ένας φοιτητής. Ήταν ένα τυχαίο πρόσωπο στο διαδίκτυο κάνει τα πράγματα δι 'αντιπροσώπου το περασμένο έτος. Έτσι διαπιστώνουμε ότι, πάρα πολύ. Έτσι, στην περίπτωση αυτή εδώ, επιτρέψτε μου να προχωρήσει και ανοίξει ένα νέο αρχείο. Αρχείο, Νέα. Αυτό μου δίνει μια καρτέλα εδώ. Επιτρέψτε μου να προχωρήσει και να το αποθηκεύσετε ως loop.c. Επιτρέψτε μου να πάω και κάντε κλικ στο κουμπί Αποθήκευση. Και τότε εδώ κάτω, ας προχωρήσουμε και να αρχίσετε να γράφετε # Include . Επιτρέψτε μου να μεγεθύνετε Τώρα θα κάνουμε int main (void). Τώρα, επιτρέψτε μου να προχωρήσει και να κάνει για (int i = 0? I < Ω, 10? i + +). Και τώρα είμαι πρόκειται να πάει μπροστά και να εκτυπώσετε το αστέρι που έκανε νωρίτερα. Και τότε, στο τέλος αυτού του προγράμματος, είμαστε ακριβώς πρόκειται να εκτυπώσετε μια νέα γραμμή, ακριβώς έτσι ώστε προτροπή μου δεν φαίνεται βρώμικο όλα. return 0. Φανείτε συντακτικά σωστές; Μέχρι τώρα. Ας δούμε λοιπόν. Επιτρέψτε μου λοιπόν να σμίκρυνση, πηγαίνετε στο παράθυρο του τερματικού μου. Και επιτρέψτε μου να πάμε μπροστά και να τρέξει βρόχο, γιατί αυτό που ονομάζεται loop.c. πράγμα Έτσι, βεβαιωθείτε βρόχο. Φαίνεται να συγκεντρώσει OK. Επιτρέψτε μου να τρέξει βρόχο, και τώρα Enter. Και αυτό φαίνεται να έχει εκτυπωθεί 10 αστέρια. Έτσι, ας μετατρέψει αυτό σε ένα βρόχο, ενώ και να δούμε τι τα είδη των θεμάτων που σκοντάψει. Έτσι, αντί αυτού, επιτρέψτε μου να πάω εδώ και να πω, ενώ το i είναι λιγότερο από 10 - επιτρέψτε μου να απαλλαγούμε από το βρόχο for. Εντάξει, έτσι έχουμε ένα ζευγάρι των προβλημάτων που έχουν ήδη. Έτσι, η κατάσταση είναι η ίδια, αλλά είμαι λείπει προφανώς η αρχικοποίηση. Είμαι λείπει η προσαύξηση. Έτσι τι θα έπρεπε ο compiler μου πείτε πιθανό όταν προσπαθώ να καταρτίζουν το πρόγραμμα αυτό; Ναι; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ωραία. Έτσι πρόκειται να πω κάτι σαν την αδήλωτη - σε αυτό περίπτωση, i μεταβλητή. Και πράγματι, η χρήση της αδήλωτης αναγνωριστικό i. Και έτσι αυτό είναι σε αντίθεση με γλώσσες όπως η PHP και Python και Ruby, με την οποία κάποιοι από εσάς μπορεί να είναι εξοικειωμένοι, όπου μπορείτε ακριβώς το είδος της εκκίνησης χρησιμοποιώντας μεταβλητές θέλοντας και μη και δεν έχετε να ανησυχείτε για την κήρυξη τους ρητά πάντα. Στο C και σε γλώσσες όπως η Java και C + +, θα πρέπει να είναι σούπερ σαφής. Και αν θέλετε μια μεταβλητή που ονομάζεται i, θα πρέπει να μου πεις Τι είδους μεταβλητή είναι. Έτσι θα πάμε να πρέπει να διορθώσετε αυτό ως εξής. Πάω να πρέπει να φτάσει μέχρι εδώ και πληκτρολογήστε int i? Ως εκ τούτου, Έχω δηλώσει μια μεταβλητή που ονομάζεται i. Τώρα, έχω παραληφθεί ένα βήμα. Έχω προετοιμαστεί δεν είναι προφανώς, αλλά ας δούμε αν αυτό σε τουλάχιστον στάση Clang κάνει παράπονα. Επιτρέψτε μου λοιπόν να ξανακάνω αυτό το πρόγραμμα. Εντάξει, τώρα είναι απλώς διαμαρτύρονται για διαφορετικό λόγο. "Μεταβλητή« i »είναι uninitialized όταν χρησιμοποιείται εδώ." Εντάξει, έτσι αυτό είναι αρκετά σαφής. Initialized σημαίνει απλώς ότι αυτό ισούται με μια τιμή. Και δεν έχουμε κάνει αυτό, οπότε επιτρέψτε μου να προσπαθήσω ισούται με 0. Τώρα, ας προσπαθήσουμε ξανά και ξανά τρέξει Clang. Compiled αυτή τη φορά. Και είμαι έτοιμος να το τρέξει. Αλλά το μεγάλο παλαιό άπειρο βρόχο, επειδή έχω κάνει το αρχικοποίηση, έχω κάνει την κατάσταση, αλλά δεν έχω κάνει ποτέ κάθε είδους προσαύξηση. Λοιπόν, πώς μπορώ να κάνω την προσαύξηση; Λοιπόν, σε ένα βρόχο, ενώ, αισθάνεται σαν να είμαι πρόκειται να έχουν να το κάνουν μέσα από το βρόχο, επειδή μοιάζει πολύ με την πρώτη παραδείγματα της εβδομάδας για να γίνει δομές επανάληψης, όπως και με οι κάλτσες και με την αυτο-καταμέτρηση, είχαμε να κάνουμε κάτι στο τέλος, όπως πάμε πίσω στην επόμενη γραμμή. Τι θα συμβεί αν πάω μπροστά και να κάνουμε αυτό το i + + εδώ; Ας μην συγκεντρώνουν καν αυτό. Πιάσε μου ήδη. Τι συμβαίνει εδώ; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Έτσι δεν είναι σίγουρα int. Είναι i. Και οι αγκύλες, όπως και πριν, εσοχή δεν είναι αρκετό. Έτσι, τώρα έχω αυτή την κατασκευή. Έτσι, ενώ το i είναι μικρότερο από 10, εκτυπώστε ένα αστέρι, τότε θ αυξήσετε. Και ο τρόπος που λειτουργεί, ενώ ένας βρόχος είναι ότι μόλις πατήσετε το πυθμένα του βρόχου, το οποίο στην περίπτωση αυτή μοιάζει γραμμής 10, πρόκειται να επιστρέψει στην γραμμή 6, σημείο στο οποίο ο κατάσταση θα ελεγχθεί και πάλι. Και αν μπορώ να εξακολουθεί να είναι μικρότερη από 10, θα κάνουμε τις γραμμές 8 και τότε 9, τότε θα χτυπήσει 10, και να πάει πίσω έως 6, και πάλι ξανά και ξανά και ξανά, εφ 'όσον το i είναι μικρότερο από 10. Έτσι, ας επαναληφθεί κάνουν εδώ. Εντάξει, έχουμε συγκεντρώσει εντάξει. Επιτρέψτε μου να τρέχει εκ νέου βρόχου. Και τώρα φαίνεται πράγματι να λειτουργήσει. Έτσι συν και τα πλην εδώ; Λοιπόν, μέχρι στιγμής δεν υπάρχει στην πραγματικότητα δεν είναι στο σύνολό του ΟΑΠ - τόσο χαριτωμένα. Εντάξει, αυτό ήταν ένα - αχ, αυτό ήταν ένα ατύχημα. Εντάξει, ας πάμε πίσω στο βρόχο for. Έτσι, για βρόχους είναι ωραία επειδή είναι εξαιρετικά σαφής. Και ακόμα κι αν είναι λίγο clunky να γράψει, είναι πολύ ισχυρή και σας επιτρέπει να κάνετε πολλαπλά πράγματα ταυτόχρονα. Ενώ οι βρόχοι δεν φαίνεται να έχουν ένα τεράστιο ποσό της αξίας μόλις ακόμα, γιατί αισθάνεται σαν εμείς απλά πρέπει να κάνουμε περισσότερη δουλειά. Πρέπει να βάλουμε την προετοιμασία μέχρι εδώ, η ενημέρωση εδώ κάτω, και πρέπει να θυμόμαστε για να τα κάνω όλα αυτά. Έτσι, θα δούμε ότι σε χρονικό διάστημα βρόχων, ενώ στην πραγματικότητα δανείζουν ίδιοι ακριβώς διαφορετικά περιβάλλοντα, διαφορετικά δεδομένα δομών, όπως λίστες και πίνακες κατακερματισμού, τα πράγματα θα πάρουν για να μέσα του εξαμήνου. Αλλά για τώρα, ξέρω ότι υπάρχει αυτός ο τρίτος τύπος είναι γνωστό ως ένα do- ενώ βρόχο. Και έχουμε δει αυτό το σύντομο χρονικό διάστημα. Και αυτό μπορεί να είναι χρήσιμο με σούπερ PSET 1. Κάθε φορά που θέλετε να κάνετε κάτι και στη συνέχεια ελέγξτε αν ο χρήστης συνεργάστηκε, και αν δεν το έκανε, το κάνει και πάλι, ένα do- ενώ βρόχο προσφέρεται για αυτού του είδους τη λογική. Επειδή η παραγγελία από πάνω προς τα κάτω υποδηλώνει εδώ, δεν σημαίνει κυριολεκτικά το κάνετε αυτό. Και το κάνουμε αυτό ξανά και ξανά, τι θα μπορούσε να είναι; Ίσως αυτό σημαίνει καλώντας GetInt ή GetString και στη συνέχεια ελέγχοντας την τιμή του ή GetInt GetString και ακολούθως φωνάζοντας στο χρήστη, εφόσον δεν έχουν συνεργαστεί, ζητώντας τους ξανά και ξανά και ξανά. Σε περίπτωση που θέλετε να κάνετε κάτι μια φορά, στη συνέχεια, ελέγξτε κάποια κατάσταση. Ας προσπαθήσουμε αυτό. Επιτρέψτε μου να αλλάξει αυτό τώρα στην πραγματικότητα σε ένα do-while loop. Και εγώ είμαι πρόκειται να πάει μπροστά και να κάνουμε το εξής. Έτσι κάνετε τα εξής. Ας κάνουμε int i = GetInt ()? Αλλά ας πω πρώτα το χρήστη τι πρέπει να κάνουμε. Έτσι, λίγο διαφορετικά αυτή τη φορά. "Δώστε μου ένα int". Γι 'αυτό και θα χρησιμοποιήσει printf για αυτό. Και τώρα είμαι πρόκειται να πάει κάτω εδώ, και θα πάω να το κάνετε αυτό ενώ εγώ είναι, ας πούμε, μεγαλύτερη από ό, τι - Ας δούμε, i είναι, ας πούμε, λιγότερο από 0, ή i είναι μεγαλύτερη από 10. Με άλλα λόγια, θέλω έναν αριθμό από 1 έως 9, μόλις αυθαίρετα. Έτσι είμαι χρησιμοποιώντας ένα συνδυασμένο Boolean έκφραση εδώ βεβαιωθείτε ότι το i είναι μικρότερο από 0 ή μεγαλύτερο από 10, στο οποίο περίπτωση θα κάνω αυτό το βρόχο και πάλι εδώ. Έτσι, και πάλι, να το κάνετε αυτό - ενώ θ είναι μικρότερη από 0 ή i είναι μεγαλύτερος από 10. Έτσι τώρα ας προχωρήσουμε και να κάνουμε αυτό όταν έχουμε κάνει αυτό. Ας κάνουμε απλά ένα γρήγορο έλεγχο λογική. printf ("Ευχαριστώ, i είναι% d", i). Έτσι, αυτό το απλό πρόγραμμα ζητά από το χρήστη για έναν int, σιγουρεύεται ότι είναι μέσα σε κάποιο εύρος 1 έως και 9, και στη συνέχεια ευχαριστεί τον χρήστη υπενθυμίζοντάς τους τι ακριβώς πληκτρολογήσει, ακριβώς όπως ένα μικρό έλεγχο λογική. Αλλά ας δούμε αν αυτό λειτουργεί όπως θα έπρεπε. Επιτρέψτε μου να πάω το κεφάλι κάτω και εδώ πάλι τρέχουν να βρόχο. Χμμ. "Η χρήση της αδήλωτης αναγνωριστικό« i ». Αυτό είναι παράξενο. Νόμιζα ότι θα επιλυθούν. Το ίδιο σύμπτωμα αλλά διαφορετικό κωδικό. Ναι; ΚΟΙΝΟ: [δεν ακούγεται] στο εσωτερικό των δύο, θα πρέπει να [Δεν ακούγεται]. David J. Malan: Ακριβώς. Έτσι, αυτό μας οδηγεί στην πραγματικότητα σε ένα θέμα γνωστό ως πεδίο. Αποδεικνύεται ότι η C, και πάλι, σας παίρνει πραγματικά κυριολεκτικά. Και αν κάνετε κάτι σαν αυτό που δηλώνετε μια int και στη συνέχεια να αντιστοιχίσετε κάποια αξία, αλλά θα το κάνουμε αυτό μέσα από ένα ζευγάρι αγκύλες, τι C που κάνει είναι να υποθέτει ότι το μόνο που θέλουν τα 32 bit είναι γνωστό ως i να υπάρχουν εντός της πλαίσιο αυτών των αγκύλες, στο πλαίσιο των γραμμών 6 έως 9. Γι 'αυτό και έχει δηλωθεί, και αποδίδεται σε αξία στην γραμμή 8, αλλά μόλις πάρετε έξω από γραμμή 9 κάτω από το στήριγμα σγουρά, i είναι πλέον σε πεδίο εφαρμογής, να το πω έτσι. S-C-Ο-Ρ-Ε. Δεν είναι πλέον στο σωστό πλαίσιο. Μέχρι τώρα δεν υπάρχει καμία i, έτσι είναι σαν να μην είχε καν δήλωσε ότι καθόλου. Έτσι τι είναι μια λύση τότε για κάτι τέτοιο, αν η λόγος είναι ότι i δηλώνεται μέσα στα άγκιστρα, τα οποία είναι προφανώς κακό; Εδώ; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ναι. Έτσι, μπορούμε να προετοιμαστεί έξω. Επιτρέψτε μου λοιπόν να προχωρήσουμε και να διαγράψετε τα τμήματα δήλωση σύμφωνα με την οποία Μπορώ να προσδιορίσω τον τύπο, και επιτρέψτε μου να το κάνω εδώ. Έτσι, στη γραμμή 5, λέει τώρα "Δώστε μου ένα int." Καλέστε το i. Παρατηρήστε στην γραμμή 9, δεν θέλω να το κάνετε αυτό, γιατί έχουν ήδη τα 32 bit. Δεν θέλω να ζητήσω από τον υπολογιστή σας για μια 32 διαφορετικά bits. Θέλω να χρησιμοποιήσω αυτά τα ίδια 32 bit. Και τώρα επειδή i δηλώνεται στη γραμμή 5, είναι ακόμα legit να το χρησιμοποιήσετε στη γραμμή 11 και η γραμμή 12. Έτσι, επιτρέψτε μου να προσπαθήσω να μεταγλωττίσετε και να δούμε αυτό αν Clang σταματά να φωνάζει. κάνει βρόχο. Έτσι, τώρα είναι "έμμεση δήλωση της συνάρτησης «GetInt» είναι άκυρο C99. "Τι είναι αυτό; Ναι; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ναι. Έτσι, τώρα που είμαι με τη χρήση πραγματικά GetInt, αυτό δεν είναι κάτι που έρχεται μόνο με το Γ. Αυτό προέρχεται από CS50. Έτσι, αυτό που χρειαζόμαστε εδώ. Και επιτρέψτε μου να πάω πίσω στην άμεση κάτω εδώ και εκτελέστε ξανά κάνει. Εντάξει, τελικά. Τώρα έχουμε αποφάσισαν ότι και το άλλο σφάλμα. Επιτρέψτε μου να τρέχουν τώρα βρόχο και να δούμε τι θα συμβεί. "Δώσε μου ένα int." Θα σας δώσω το 11. Θα σας δώσω το -1. Θα σας δώσω το foo. Θα σας δώσω το 5. Και τώρα λειτουργεί πραγματικά. Αλλά η προτροπή αλλάξει για κάποιο λόγο εδώ. Γιατί το πω ξανά μια από αυτές τις φορές, αλλά να μου δώσει μια int τις άλλες τρεις φορές; Γιατί είναι διαφορετική η συμπεριφορά; ΚΟΙΝΟ: Έδωσε το ένα string. David J. Malan: Συγνώμη; ΚΟΙΝΟ: Μπορείτε έδωσε ένα string. David J. Malan: Ναι. Γι 'αυτό και έδωσε μια σειρά σε αυτό τρίτη προσπάθεια, όταν πληκτρολογούνται foo. Foo είναι ένα string. Είναι προφανές ότι δεν είναι int. Και ο τρόπος που CS50 έχει εφαρμόσει GetInt είναι ότι εμείς Δεν ελέγξτε αν είναι κάτι λιγότερο από το 0 ή μεγαλύτερο από 10 για σας, γιατί πώς μπορούμε να γνωρίζουμε εκ των προτέρων τι είδους int θέλετε; Αλλά μπορούμε να ελέγχει ελάχιστα για σας, δεν τον χρήστη τουλάχιστον πληκτρολογήστε έναν ακέραιο; Και αν δεν το έκανε, θα φωνάζω στο χρήστη, πληκτρολογώντας "ξανά" στο η οθόνη. Έτσι τώρα έχουμε ένα πρόγραμμα που είναι looping. Εντάξει. Τώρα, ποια από αυτά είναι το είδος της κατασκευής καλύτερα; Έτσι, αυτό είναι όπου τα πράγματα αρχίζουν να πάρει λίγο ακατάστατο, η γεγονός ότι θα πρέπει να θυμηθείτε να δηλώσετε μια μεταβλητή εδώ αν θέλετε να το χρησιμοποιήσετε μέσα από κάποια άγκιστρα και έξω. Αλλά ακόμα και αν αυτό μοιάζει λίγο αινιγματικό στην αρχή ματιά, μόνο μια φορά, θυμηθείτε την απλή λογική. Για να χρησιμοποιήσετε οτιδήποτε σε C, είτε πρόκειται για μια λειτουργία ή είναι μια μεταβλητή, θα πρέπει να περιλαμβάνουν το αν είναι μια λειτουργία σε κάποια βιβλιοθήκη, ή θα πρέπει να το δηλώσετε. Τώρα, όμως, πρέπει να είστε προσεκτικοί επιπλέον από το γεγονός ότι είστε το δηλώνοντας στο σωστό πεδίο. Δεν είστε το θέτει πολύ σφιχτά στο εσωτερικό των παρενθέσεων. Έτσι, επιτρέψτε μου να κυλήσει πίσω στην πραγματικότητα. Αν πάμε πίσω σε μας για παράδειγμα από τις προηγούμενες, και πάω πίσω για int, int i = 0? θ <10? i + +, και εγώ printf κάνει αστέρια, όπως αυτό, και στη συνέχεια κλείστε παρένθεση, και τώρα printf i είναι τώρα - σύμφωνα με την ίδια λογική, τι θα συμβεί όταν προσπαθώ να καταρτίζουν το πρόγραμμα αυτό; ΚΟΙΝΟ: Μη έγκυρο αναγνωριστικό. David J. Malan: Έτσι είναι άλλο ένα άκυρο αναγνωριστικό, αδήλωτης αναγνωριστικό. Τώρα, ο λόγος είναι λίγο διαφορετική. Υπάρχει προφανώς δεν άγκιστρα εδώ, αλλά το ίδιο ιδέα, η ίδια η ιστορία του πεδίου εφαρμογής ισχύει. Αν έχετε δηλώσει μια μεταβλητή όπως εγώ μέσα από ένα για βρόχο, ακόμη και αν δεν έχετε γράψει ρητά τα σγουρά τιράντες, σκεφτείτε τους ως διανοητικά εξακολουθούν να είναι εκεί, στην οποία περίπτωση i ισχύει μόνο μέσα από το βρόχο for. Δεν ισχύει τη στιγμή που θα φτάσετε στην επόμενη γραμμή, η οποία σε η παρούσα υπόθεση είναι τώρα 10. Έτσι, μόλις λίγα θέματα του πεδίου εφαρμογής και τα παρόμοια. Εντάξει, οι ερωτήσεις; Εντάξει, έτσι αυτό είναι το είδος του ένα ασήμαντο μικρό πρόγραμμα, εκτύπωση μόνο αστεράκια. Αλλά ας δούμε αν θυμάστε αυτό το τραγούδι εδώ. Αυτό είναι ένα απίστευτα ενοχλητικό τραγούδι τα παιδιά θα τραγουδήσουν για το σχολικό λεωφορείο και τα παρόμοια. Αλλά τι είναι ωραίο γι 'αυτό είναι ότι έχει αυτή την κυκλικότητα, σύμφωνα με την οποία είναι "99 μπουκάλια της μπύρας στον τοίχο, 99 μπουκάλια της μπύρας. Πάρτε ένα κάτω, να περάσει γύρω από, 98 μπουκάλια μπύρας για τα τοίχο. "Και τότε το τραγούδι επαναλαμβάνει το 97, τότε 96, τότε 95, τότε 94, όλος ο τρόπος κάτω στο 0, αν πραγματικά έχεις ότι μακριά με το λεωφορείο. Έτσι, αυτό είναι ένα ωραίο πρόγραμμα για να ταξινομήσετε του εργαλείου, επειδή μου Ο Θεός, αν θα μπορούσατε να εφαρμόσει ακριβώς αυτό με λίγα γραμμές κώδικα, μπορείτε να φτύσει το σύνολο στίχους σε αυτό τραγούδι αρκετά γρήγορα. Αλλά στην πορεία, μπορούμε να αρχίσουμε να δώσουμε έμφαση, εκτός τώρα κάποια από αυτές τις βασικές δομές επανάληψης και τώρα επίσης εισαγάγει λειτουργίες που εμείς οι ίδιοι γράφουν, επιστρέφουν τιμές ότι περνάμε περίπου. Αλλά πρώτα, γιατί δεν πάμε μπροστά και να μας πέντε λεπτά σπάσει εδώ; Και όταν παίρνουμε πίσω, θα τραγουδήσει αυτό το τραγούδι. Εντάξει, έτσι είμαστε πίσω. Και όταν λέω εμείς θα τραγουδήσει αυτό το τραγούδι τώρα, εννοώ προγραμματισμού, όχι προφορικά. Έτσι, εδώ έχουμε beer1.c, η οποία είναι μία υλοποίηση της παρούσας συγκεκριμένο τραγούδι. Και ακριβώς για να είναι σαφής, για όσους δεν είναι εξοικειωμένοι με ό, τι αυτό το πράγμα μοιάζει, επιτρέψτε μου να προχωρήσει και να beer1, Enter. Τώρα, επιτρέψτε μου να τρέξει beer1, και τι θα δούμε - πόσα μπουκάλια μπύρας θα υπάρξουν; Θα πληκτρολογήσετε 99, όπως λέει το τραγούδι. Enter. Και τώρα, αν έχουμε κύλιση - ουπς - αν μετακινηθείτε μέσα από όλα αυτά, θα δούμε ότι αυτό δεν τραγουδούν πράγματι ολόκληρο το τραγούδι. Περιμένετε ένα λεπτό. Γραμμή κύλισης μου είναι λίγο μπερδεμένο. Ας χρησιμοποιήσουμε το μεγαλύτερο παράθυρο. Έτσι beer1, 99, εκεί πάμε. Έτσι, εδώ έχουμε ολόκληρο το τραγούδι, τραγούδησε πολύ πιο γρήγορα από το υπολογιστή από ό, τι θα μπορούσε να ήταν από εμάς. Έτσι παρατηρούμε, όμως την κυκλική φύση εδώ. Λέει 99, τότε 99, τότε "να λάβει μία κάτω, να περάσει περίπου, "και στη συνέχεια 98. Και τώρα το επαναλαμβάνει ξανά και ξανά. Έτσι, αυτό είναι πραγματικά μια τέλεια ευκαιρία για κάποιο είδος looping κατασκευή. Παρατηρήστε ότι είμαι το είδος της κοπής μια γωνία εδώ. Σημειώστε ότι λέω "98 μπουκάλια της μπύρας στον τοίχο, 97 μπουκάλια της μπύρας στον τοίχο, "και ότι ήταν ακριβώς έτσι ότι, όταν φτάσουμε σε ένα μπουκάλια μπύρας, δεν έχω να ανησυχείτε για την αγγλική γραμματική. Αλλά μπορούμε επίσης να καθορίσει αυτό με ένα μικρό κομμάτι της, αν κατάσταση, ίσως. Αν ο αριθμός αυτός είναι μοναδικό, να προχωρήσει και να πω "μπουκάλι", αλλιώς αν είναι στον πληθυντικό, λένε "μπουκάλια". Αλλά για τώρα, είμαι απόλυτα ότι η κοπή γωνία. Ας δούμε λοιπόν τι έχουμε εδώ. Έτσι έχουμε μερικά σχόλια στην κορυφή. Είμαι συμπερίληψη αυτών των δύο βιβλιοθήκες, όπως έχουμε συνήθως έχουν. Και τώρα επιτρέψτε μου να μετακινηθείτε προς τα κάτω μέχρι το πρώτο πραγματικές γραμμές κώδικα. Γραμμή 17 ξεκινά κύρια. Γραμμή 21 και 20 έχει πόσα μπουκάλια μπύρας θα υπάρξουν; Και τότε καλώ GetInt. Και τώρα έχω ένα κομμάτι του ελέγχου λογική. Έτσι, αυτό είναι μια σύμβαση που τώρα θα αρχίσει την έγκριση να πιο αυστηρά έλεγχος εισόδου του χρήστη. Μερικές φορές απλά δεν θέλουν να τους προτρέψει και πάλι και ξανά και ξανά. Εάν ο χρήστης βίδες και δεν συνεργάζεται, πρόστιμο. Κλείστε και απλά δεν ασχολούνται μαζί τους. Και έτσι αυτό είναι αυτό που κάνω εδώ. Αν το n είναι μικρότερο από το 1, είμαι απλώς πρόκειται να φωνάζω στο χρήστη, "Συγγνώμη, αυτό δεν έχει κανένα νόημα." Και τότε Πάω να αυθαίρετα επιστρέψει 1. Έτσι, και πάλι, αυτό είναι μόνο μια σύμβαση για να συνηθίσει. Προς το παρόν, πάρτε την πίστη. Αλλά μέχρι τώρα, έχουμε πάντα επιστρέφουν 0, επειδή έχουμε πει 0 υποδηλώνει την επιστροφή τι; ΚΟΙΝΟ: Επιτυχία. David J. Malan: Επιτυχία, αυτό είναι όλο. Έτσι, τώρα που είμαστε τελικά θα αρχίσουν να σκέφτονται μη-επιτυχίες - Με άλλα λόγια, γωνία περιπτώσεις, συνθήκες σφάλματος - τώρα έχω μια άπειρη προσφορά, ή τουλάχιστον τέσσερα δισεκατομμύρια δυνατόν πράγματα που μπορεί να πάει στραβά σε προγράμματα μου. Και μπορώ να ξεκινήσω την ανάθεση τους μεμονωμένους αριθμούς. Τώρα, γενικά αρκεί απλά να επιστρέψει κάτι άλλο εκτός από 0. Έτσι θα πάμε για να επιστρέψουν απλά 1 για τώρα. Όμως, ο λόγος για την επιστροφή 1 είναι ότι μόλις επιστρέψει 1, μάντεψε τι συμβαίνει στο υπόλοιπο του προγράμματος; Σταματά. Αυτό είναι όλο. Έτσι, το γεγονός ότι είμαι επιστροφή 1 είναι αποτελεσματικά βραχυκυκλώνοντας την εκτέλεση αυτού του προγράμματος, έτσι ώστε τίποτα κάτω από τη γραμμή 27 θα συνεχίσει την εκτέλεση. Μόλις κύριες αποδόσεις, αυτό είναι. Εντάξει, έτσι ώστε αν ο χρήστης δεν συνεργάζονται και φτάνουμε γραμμή 30 επειδή πληκτρολογήσατε σε ένα νόμιμο αριθμό, είναι εδώ μου εφαρμογή αυτού του τραγουδιού. Έτσι, για πρώτη φορά εκτυπώσετε ένα χαρακτήρα νέας γραμμής, μόνο και μόνο για αισθητική. Τώρα έχω ένα για βρόχο. Και παρατηρήσετε κάνω τα πράγματα σε λίγο από μια διαφορετική κατεύθυνση. Δεν έχω να κάνω λιγότερα από ό, τι, δεν έχω να κάνω + +. Μπορώ να πω αντί να προετοιμάσει μια μεταβλητή i, που είναι ίσο με το n, ο αριθμός ο χρήστης πληκτρολογήσει, τότε κάντε τα παρακάτω, ώστε εφ 'όσον το i είναι μεγαλύτερο από μηδέν, τότε το i - μόλις τελειώσετε μία επανάληψη του βρόχου. Έτσι μπορούμε να βασιστούμε κάτω χρησιμοποιώντας ένα βρόχο for. Τώρα, αυτό είναι λίγο πολύ εβδομάδα τα πράγματα τώρα, με printf. Έτσι εκτύπωσης "μπουκάλια δ% της μπύρας στον τοίχο." Εκτύπωση "% d μπουκάλια μπύρας. "" Πάρτε ένα κάτω, να περάσει γύρω. "Εκτύπωση "% D μπουκάλια μπύρας στον τοίχο." Γι 'αυτό είναι ακόμα d%, αλλά παρατηρήσετε ότι το επιχείρημα για την printf αλλάζει. Μετά το κόμμα, εγώ έχω, γιατί θέλω να πω 99. Μετά από αυτό το κόμμα, εγώ έχω, γιατί θέλω να πω 99. Μετά από αυτό το κόμμα, εγώ έχω - 1, γιατί θέλω να πω 98, Αυτή η πρώτη επανάληψη, και ούτω καθεξής. Και τώρα εδώ κάτω, έχω μόνο κάποια ηλίθια μικρή παρατήρηση. Και στη συνέχεια, γραμμή 42, επιστρέφω 0 από σύμβαση, που σημαίνει ότι όλα είναι εντάξει. Τι κι αν εγώ goofed; Τι θα μπορούσε ένα συνηθισμένο λάθος είναι εδώ; Λοιπόν, τι γίνεται αν έχω λάθος, δήλωσε καλά, θέλω να μετράνε στο 0, 0 Θέλω μπουκάλια μπύρας στον τοίχο; Έτσι λέω, θ είναι μεγαλύτερη από ή ίση με 0. Τι πρόκειται να είναι το σύμπτωμα που έχω τώρα να δω αν μπορώ ξαναμεταγλωττίσετε beer1 και να τρέξει; ΚΟΙΝΟ: Αρνητική. David J. Malan: Ναι, αυτό είναι gonna go αρνητική. Αυτό είναι μια off-ένα σφάλμα, μια απίστευτα κοινό να κάνει λάθος. Ας επιστρέψουμε στην πραγματικότητα στο παράθυρο τερματικού και να το κάνουμε εδώ, έτσι μπορούμε να δούμε περισσότερο σε μια στιγμή. Εισάγετε, 99 μπουκάλια της μπύρας. Κλείσιμο, αλλά πήγαμε ποτέ τόσο λίγο πάρα πολύ μακριά. Εμείς τραγούδησε το τραγούδι πάρα πολύ μακριά κάτω, έτσι ώστε να χτυπήσει τώρα το αρνητικός αριθμός. Έτσι δεν εργάζονται αρκετά. Εντάξει, έτσι ώστε να μπορούμε εύκολα να καθορίσει ότι πηγαίνοντας πίσω στο τρόπο που ήταν κάποτε. Αλλά τι είναι τώρα κάποιες ευκαιρίες για βελτίωση; Λοιπόν, επιτρέψτε μου να ανοίξει beer2.c και μετακινηθείτε προς τα κάτω εδώ και να πάρει μια εξετάσουμε αυτή την έκδοση. Ποιο είναι το πρώτο πράγμα που πηδά έξω σε σας ως διαφορετικές σε αυτή την έκδοση εδώ; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ναι, έτσι δεν θ περισσότερο, γιατί αυτό συνέβη σε Θέλω να ξέρετε τι, ζητάω από τον χρήστη n, και στη συνέχεια, είμαι ρύθμιση i ίσο με n, και στη συνέχεια, είμαι i αλλάζει, αλλά εγώ ποτέ δεν είμαι n αγγίζοντας ξανά. Λοιπόν, τι στο καλό ήταν το σημείο που μια άλλη κατανομή 32 bits που ονομάζεται i ακριβώς έτσι ώστε να μπορώ να έχω μια διαφορετική μεταβλητή; Έτσι, σε αυτή την περίπτωση, εγώ το είδος του αναγνώρισε ότι περιττές χαρακτηριστικό του σχεδιασμού. Και τώρα είμαι πρόκειται να πει, ενώ n είναι μεγαλύτερη από 0, πηγαίνετε μπροστά και να εκτυπώσετε το ίδιο τραγούδι, περνώντας ένα n printf ως προς το Το δεύτερο επιχείρημα, και n - 1 ως το δεύτερο επιχείρημα εδώ κάτω. Και στη συνέχεια, σε κάθε επανάληψη του βρόχου αυτού, να προχωρήσει και μόνο n μειώσετε το ίδιο. Τώρα, λειτουργικά, αυτό το πρόγραμμα πρόκειται να είναι πανομοιότυπα. Αν πληκτρολογήσετε 99, n ξεκινά στις 99. I μείωση, μείωση, μείωση, μείωση. Πάω να πάρει όλος ο τρόπος κάτω στο "Ένα μπουκάλι μπύρα στο το τείχος, ένα μπουκάλι μπύρα. Πάρτε ένα κάτω, να περάσει γύρω. 0 μπουκάλια μπύρας στον τοίχο. "Το τέλος, γιατί το έκανα να πάρει την κατάσταση σωστά. Είναι μεγαλύτερη από μηδέν. Δεν είχα κάνει αυτό το λάθος. Έτσι, η οποία είναι καλύτερη, η μία εκδοχή ή έκδοση δύο; Έτσι άκουσα ένα σωρό χαμηλόφωνα για δύο. Γιατί δύο; Τι είναι αυτό; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ναι, εντάξει. Γι 'αυτό δεν θα πάει κάτω από το 0, αλλά να θυμάστε, στην έκδοση ενός, η πρωτότυπο σωστή έκδοση δεν πήγε κάτω από το 0, είτε. Έτσι, να θυμάστε ότι αυτή είναι η σωστή έκδοση. Ας είναι τουλάχιστον συγκρίνετε τις δύο σωστές εκδόσεις. Τι είναι ένα επιχείρημα υπέρ της έκδοσης δύο είναι, μμμ, καλύτερα; Ναι; ΚΟΙΝΟ: Χρησιμοποιεί λιγότερο χώρο. David J. Malan: Εντάξει, έτσι ώστε να χρησιμοποιεί λιγότερο χώρο, έτσι δεν είναι; Ότι μια έκδοση 32 bit που χρησιμοποιούνται για n, και στη συνέχεια ένα άλλο 32 bits για το i. Έκδοση δύο χρησιμοποιεί μόνο 32 bits για n, έτσι ώστε να φαίνεται να είναι ένα συν. Άλλες σκέψεις; Θέλει κανείς να επιχειρηματολογήσει υπέρ του ενός; Ναι; ΚΟΙΝΟ: Θα πρέπει να χρησιμοποιήσετε επιπλέον γραμμή κώδικα για n -. David J. Malan: Εντάξει, σίγουρα. Έτσι ώστε να είναι δίκαιο. Έτσι, αυτό ακριβώς, τουλάχιστον για μένα - Θέλω να πω, αυτό το αισθάνεται πραγματικά λίγο πιό ακατάστατο, το γεγονός ότι Δεν μπορώ να ταξινομήσετε από ενσωματώσει όλες της λογικής μου σε ένα όμορφη γραμμή, ο βρόχος for, όπως ο βρόχος for μπορεί. Εδώ, εγώ το είδος πρέπει να ποντάρετε σε αυτό το n - στο τέλος του βρόχου, διότι είναι λογικά αναγκαία. Αλλά αυτό το είδος της τρίβει με το λάθος τρόπο, μόνο και μόνο επειδή φαίνεται ξεχωριστή από τη λογική της μέχρι εδώ, ακόμα κι αν, και πάλι, αυτό είναι απαραίτητο. Άλλες σκέψεις; Ναι; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ναι. Έτσι τι εάν αντ 'αυτού, στο τέλος του τραγουδιού, ήθελε να εκτυπώσετε και πάλι το όνομα του τραγουδιού; Like "Ευχαριστώ για την αναπαραγωγή 99 μπουκάλια της μπύρας", ή κάτι ανόητο έτσι; Αλλά το θέμα είναι, θα ήθελαν πρόσβαση στην αρχική τιμή. Το γεγονός ότι έχετε μεταλλαχθεί ή να αλλάξει n για κάθε επανάληψη και ως εκ τούτου έχουν καταστραφεί αρχική αξία του σημαίνει ότι δεν μπορείτε ακριβώς να το κάνουμε αυτό στο τέλος. Τώρα, αναμφισβήτητα, είναι σαφές ότι δεν θέλουν να κάνουν ότι σε αυτό το πρόγραμμα. Έτσι, ποιος νοιάζεται; Αλλά αυτό είναι ένα πολύ έγκυρο σημείο. Και για να είμαι ειλικρινής, δεν υπάρχει πραγματικά κανένας δικαίωμα απαντήσει εδώ. Είναι και οι δύο εξίσου σωστή. Θα μπορούσα να πειστεί ή τον άλλο τρόπο. Θα ήθελα να πω ότι, σε γενικές γραμμές, είναι μια καλή αρχή, αν ζήτησε από το χρήστη για κάποια αξία και θα αποθηκεύεται σε μια μεταβλητή όπως n, ακριβώς το είδος του κατ 'αρχήν, είναι πιθανώς καλή για να κρατήσει ότι γύρω. Και όλα τα δεδομένα που θέλετε να μεταλλαχθεί ξανά και ξανά, μόλις δώστε στον εαυτό σας ένα αντίγραφο της εν λόγω μεταβλητή, απλά, έτσι ώστε να έχουν πρόσβαση στο πρωτότυπο. Θα ξοδεύουν 32 περισσότερα κομμάτια, αλλά η πραγματικότητα είναι αυτή υπολογιστής, όπως, δύο gigabytes μνήμης RAM αυτές τις μέρες, και είμαστε υπεκφυγές πάνω από 32 bit; Πραγματικά δεν είναι μια τέτοια μεγάλη υπόθεση. Και ακόμη και σε αυτή τη συσκευή εδώ, με μια συναυλία μισό ή ένα gigabyte μνήμης RAM, έναντι 32 bits 64 bits, δεν είναι μια τέτοια μεγάλη υπόθεση. Σίγουρα σήμερα, πρόκειται να είναι ο τρόπος συγκλονισμένοι από το μέγεθος του ίδιου του προγράμματος, το οποίο πρόκειται να είναι αρκετές εκατοντάδες kilobytes, αν όχι μερικά megabytes, αυτές τις μέρες. Έτσι, λογικές ανησυχίες, κανείς δεν σωστή απάντηση. Αλλά τουλάχιστον αυτοί είναι οι σκέψεις που θα πρέπει να αρχίσει να περνούν από το μυαλό σας; Επειδή σε PSET 0, ακόμα κι αν πραγματικά μόνο αναμένεται ορθότητα, ή τουλάχιστον αρνείται ότι διάφορα σφάλματα ίσως να έχουν αντιμετωπίσει, καθώς προχωρούμε προς τα εμπρός, ο σχεδιασμός είναι πρόκειται να είναι μια άλλη βασική πτυχή, τόσο από τη σύνταξη κώδικα και επίσης την αξιολόγηση μας κώδικα. Και έτσι, τουλάχιστον να σκεφτεί τα πράγματα όπως αυτό. Και ακριβώς επειδή τα έργα κάτι δεν σημαίνει ότι είναι καλό, δεν σημαίνει ότι είναι καλά σχεδιασμένη. Και αυτό είναι ένα από τα πράγματα που οι υπότροφοι και διδασκαλία σύνολα πρόβλημα θα μας βοηθήσει να δώσουμε έμφαση μέρος την πάροδο του χρόνου. Λοιπόν, τι γίνεται, ας πούμε, αυτό το κείμενο εδώ; Επιτρέψτε μου να κάνω κάτι λίγο σέξι εδώ σε μια στιγμή. Καταρχάς, επιτρέψτε μου να απαλλαγούμε από αυτό. Και τώρα ας διορθώσετε αυτό το ζήτημα γραμματική. Έτσι, σε αυτή την έκδοση, θέλω να καθορίσουν τη γραμματική, έτσι ώστε, παρά μόνο να πω παρενθετικά s, όπως το "μπουκάλι" ή "φιάλες" - Δεν θέλω να κοπεί αυτό γωνία - Θέλω, επίσης, να εκτυπώσετε δυναμικά τις λέξεις "μπουκάλια" ή "μπουκάλι", χρησιμοποιώντας ως εκ τούτου τα εν λóγω κράτησης θέσης% s σήμερα. Γι 'αυτό πρέπει να ελέγξετε τι όρους είναι η τιμή του i. Και αν είναι 1, θέλω να πω "μπουκάλι", και αν μη τι άλλο αυτό είναι άλλο, θέλω να πω "μπουκάλια". Ας προσπαθήσουμε να το κάνουμε αυτό. Έτσι, εάν i == 1, τότε επιτρέψτε μου να πάμε μπροστά και να δηλώσει - Χρειάζομαι μια σειρά, οπότε επιτρέψτε μου να κάνω s1 χορδών, γιατί είναι η πρώτη σειρά με νοιάζει αυτή τη στιγμή. Πάω να πω "μπουκάλι". Και τότε, ας δούμε, string s2 - και θα εξηγήσω πού πάω σε μια στιγμή - "Φιάλες". Έτσι, υπενθυμίζουν ότι, σε αυτό το τραγούδι, θα πρέπει να είναι σε θέση να εκτυπώσετε τα πράγματα, δύο διαφορετικές λέξεις δυνητικά. Έτσι, αν κοιτάξουμε πίσω εδώ, παρατηρούμε ότι όταν έχουμε να αυτό το παράδειγμα εδώ, "δύο μπουκάλια μπύρας στον τοίχο, δύο μπουκάλια μπύρας, πάρτε ένα κάτω, να περάσει γύρω ", θέλω αυτή η τέταρτη γραμμή τώρα λένε "ένα μπουκάλι μπύρα για το τοίχο ". Γι 'αυτό πρέπει να αποφασίσει, δεν θέλω να πω" μπουκάλια "ή "Μπουκάλι"; Έτσι, Πάω να πω αυθαίρετα, εντάξει, Πάω τώρα να δηλώσει μια μεταβλητή που ονομάζεται s1, string μία, η οποία πρόκειται να πάρει συνδεθεί εδώ και εδώ επίσης, επειδή αυτές οι λέξεις είναι πάντοτε οι ίδιες, μόνο και μόνο επειδή του το φύση του τραγουδιού. Και Πάω να καλέσετε λέξη s2 ό, τι θέλω να τελικά φαίνεται εδώ κάτω. Τώρα, κυριολεκτικά, 99 φορές από 100, πρόκειται να είναι ο ίδια και στις δύο αυτές περιπτώσεις, διότι 3 είναι στον πληθυντικό, 2 είναι πληθυντικό, 4 είναι στον πληθυντικό. Αλλά στην περίπτωση αυτή γωνιά, όπου θα έχουμε σε 2 και, στη συνέχεια 1, ή ούτε το 1 και το 0, χρειάζομαι αυτή τη λογική. Γι 'αυτό και πρέπει να περάσετε κάποιο χρονικό διάστημα στον κώδικα μου να πάρει αυτό το δικαίωμα. Έτσι, αν το κάνω αυτό, αν i == 1, στη συνέχεια, ορίστε s1 ίσο με το "μπουκάλι" και s2 ίση με "φιάλες", γιατί αυτό θα είναι για 1 μπουκάλι, και αυτό θα είναι για το 0 φιάλες. Και αυτό εδώ, τι αυτό αντιπροσωπεύει; Ακριβώς για να είναι σαφής. Αυτό είναι μόνο ένα σχόλιο. Έτσι, το γεγονός ότι μπορείτε να έχετε μονής γραμμής σχόλια που σημαίνει μπορεί να σχολιάσει τον κωδικό σας σαν αυτό, αλλά ένα άλλο κοινό παράδειγμα, επίσης, είναι ότι αν έχετε ένα σούπερ-σύντομη φράση ότι θέλετε να θέσει τον εαυτό σας και είναι απλά πιο ευανάγνωστο να θέσει το δικαίωμα στο τέλος της γραμμής του κώδικα, μπορείτε να απολύτως να κάνει κάτι τέτοιο. Και τώρα τι αν το κάνω αυτό; Αλλιώς αν θ δεν είναι ίση με 1. Έτσι Έκρηξη ισούται με - θαυμαστικό είναι γνωστή ως "Έκρηξη". Έτσι Έκρηξη = 1. Έτσι, αν δεν είναι ίσο με το 1, τι μπορώ να κάνω αντί να θέλετε να κάνετε; Λοιπόν, η πρώτη λέξη που θέλω να είναι αυτό; Έτσι σειρά 1 θα πρέπει να είναι "μπουκάλια" για φιάλες πληθυντικό, και τότε αυτό θα είναι στον πληθυντικό "φιάλες", καθώς, προς το παρόν. Και θα δούμε αν αυτό μας παίρνει στην πραγματικότητα να όπου θέλουμε να πάμε. Έτσι τώρα αν μετακινηθείτε προς τα κάτω εδώ, παρατηρούμε ότι είμαι συνδέοντας όχι μόνο εγώ, αλλά s1. Είμαι συνδέοντας i και s1. Και τότε εδώ κάτω, είμαι μείον 1, το οποίο είναι το ίδιο με πριν, αλλά s2. Με άλλα λόγια, θέλω την αγγλική λέξη για να αλλάξει με βάση σε αυτή τη λογική. Τώρα, υπάρχει ήδη κάποια προβλήματα σε αυτόν τον κώδικα. Τι έχει σπάσει ήδη από την πύλη εδώ; Ναι; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ακριβώς. Έτσι έχω ήδη παραβιάσει το μάθημα του πεδίου εφαρμογής. Έτσι έχω δηλώσει S1 και S2, αλλά έχω κάνει στο εσωτερικό της άγκιστρα, που σημαίνει ναι, αυτός ο κώδικας θα λειτουργήσει μέχρι μέχρι γραμμή 42, αλλά μόλις χτύπησα γραμμή 43, μάντεψε τι δεν υφίσταται πλέον; Λοιπόν, μάντεψε τι δεν είναι πλέον στο πεδίο εφαρμογής - ούτε S1 ή S2. Γι 'αυτό και πρέπει να το διορθώσετε αυτό. Έτσι, επιτρέψτε μου να διαγράψετε τις δηλώσεις. Και εγώ θα αφήσει τα ονόματα των μεταβλητών και να διαγράψετε αυτό εδώ και να διαγράψετε αυτό εδώ. Και σε ποια γραμμές θα πρέπει να δηλώνω πραγματικά αυτά τα πράγματα; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ναι, έτσι πιθανώς μέχρι εδώ, 33-ish. Έτσι s1 συμβολοσειρά και στη συνέχεια σειρά s2. Και αποδεικνύεται, μπορώ να το κάνω αυτό. Αν δηλώνοντας δύο μεταβλητές του ίδιου τύπου, μπορείτε πραγματικά να χρησιμοποιήσετε μόνο ένα κόμμα και να το κάνουμε αυτό σε C. Όλα Εντάξει, έτσι τώρα έχω δύο μεταβλητές - S1 και S2. Είμαι ανάθεση σε αυτές τις τιμές σε αυτά συνθήκες εδώ, ή εδώ. Και τότε είμαι χρησιμοποιώντας τους κάτω. Πόσο καλά είναι τώρα αυτό πρόκειται να λειτουργήσει; Λοιπόν, είναι ακόμα ένα μικρό αμαξάκι, αλλά ας δούμε τουλάχιστον πόσο μακριά έχουμε φτάσει. Επιτρέψτε μου λοιπόν να προχωρήσουμε και να beer3. Είναι αυτό beer3; Ναι, αυτό είναι beer3. Και τώρα επιτρέψτε μου να πάμε μπροστά και να τρέξει beer3. 399 99. Μπορούμε να προσπεράσετε τα περισσότερα από αυτά. Και εδώ κάτω, κοίτα αυτό. "Ένα μπουκάλι μπύρας στον τοίχο, ένα μπουκάλι μπύρα, να ένα κάτω, να περάσει γύρω, 0 μπουκάλια μπύρας στον τοίχο. " Αλλά είμαι εφιστώντας την προσοχή σας μόνο το μισό της λύσης. Είδος μαντάρα εδώ. Έτσι, φαίνεται ότι οι περιπτώσεις προκύπτουν όταν γωνία θ ισούται με ό, τι δύο τιμές; ΚΟΙΝΟ: 2, 1. David J. Malan: 2 και 1. Είναι 1 δεν 1 και όχι. Είναι πραγματικά ακριβώς αυτές οι δύο τελευταίες στροφές του τραγουδιού αυτού. Λοιπόν, τι μπορώ να κάνω αντί να θέλετε να κάνετε; Γι 'αυτό και φαίνεται να έχουν πιάσει την περίπτωση κατά την οποία, αν μπορώ να είναι == 1, τότε η πρώτη λέξη είναι «φιάλη», αλλά η δεύτερη λέξη είναι "φιάλες". Αλλά εδώ, θέλω να το αλλάξετε αυτό να είναι == 2. Και αν αυτή είναι η περίπτωση, τι θέλω το πρώτη λέξη να είναι; ΚΟΙΝΟ: "μπουκάλια". David J. Malan: "μπουκάλια", έτσι για δύο μπουκάλια. Και τότε αυτή η λέξη εδώ πρέπει να είναι - ΚΟΙΝΟ: "μπουκάλι". David J. Malan: "μπουκάλι", ενικός αριθμός. Εντάξει, ας σμίκρυνση, επιστρέψτε εδώ, εκτελέστε ξανά κάνει, επανάληψη beer3, τύπου 99 και πάλι. Εντάξει, "σφάλμα Segmentation (πυρήνας ντάμπινγκ)." Τι έχω κάνει λάθος; ΚΟΙΝΟ: Δεν έχει τιμή [δεν ακούγεται]. David J. Malan: Αχ, εξαιρετικό σημείο. Εντάξει, έτσι τι συμβαίνει εδώ; Έτσι σφάλμα κατάτμησης, και είμαστε πραγματικά πρόκειται να δούμε αυτό αρκετές φορές στο μέλλον, σκόπιμα. Αλλά για τώρα, τι ακριβώς σημαίνει αυτό; Ένα σφάλμα κατάτμησης σχεδόν πάντα σημαίνει ότι έχετε κατά κάποιο τρόπο προσπάθησε να έχουν πρόσβαση μνήμη, μνήμη RAM του υπολογιστή σας, ότι δεν σας ανήκει, ότι δεν έχετε ζητήσει την πραγματικότητα λειτουργικού συστήματος για. Έτσι, στην περίπτωση αυτή, παρατηρούμε τι έχω κάνει, το οποίο είναι εσφαλμένη στη λογική μου. Έχω αναθέσει S1 και S2 αξία αν μπορώ να ισούται με 1. Έχω κάνει, επίσης, ότι αν i ισούται με 2. Αλλά δεν έχω κάνει στο άπειρο αριθμό άλλων δυνατότητες - ειδικότερα, 3 ή 4 ή τελεία, τελεία, τελεία, 99. Έτσι μια λύση για αυτό θα μπορούσε απλώς να είναι ας έχουν ένα άλλο όρο. Και επιτρέψτε μου να πάω εδώ και να πω s1 ισούται με - τι θα πρέπει να είναι εδώ; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: "μπουκάλια", επειδή στην κοινή υπόθεση, Είναι ακριβώς το ίδιο πράγμα. Έτσι ισούται με παράθεση αυτού του μηνύματος, unquote, «μπουκάλια». Έτσι για πληθυντικό μπουκάλια, και στη συνέχεια μέχρι εδώ, για φιάλες πληθυντικό. Εντάξει, έτσι τώρα επιτρέψτε μου να πάω πίσω στο παράθυρο του τερματικού μου, recompile, είναι επανάληψη. 99. Ουφ. Και ας κάνουμε ένα γρήγορο έλεγχο λογική. Τεχνικά, θα θέλατε να διαβάσετε όλα αυτά για να βεβαιωθείτε ότι ότι είναι σωστό, αλλά ας ρίξουμε μια ματιά στο τουλάχιστον οι γνωστοί ένοχοι. 3 φιάλες, 2 μπουκάλια, 2 μπουκάλια, 1 μπουκάλι, 1 μπουκάλι, 0 μπουκάλια. Φαίνεται να έχουμε τουλάχιστον αυτό που καθορίστηκε για σήμερα. Όμως, τα αλιεύματα εδώ είναι ότι αυτό που ένας θεός φοβερό χάος αυτό είναι ακριβώς για να λύσει ένα ηλίθιο ενός χαρακτήρα γραμματική λεπτομέρεια. Έτσι υπάρχει ένα είδος λόγος που έκοψα αυτή τη γωνιά νωρίτερα, επειδή είναι απλά εντελώς ενοχλητικό να πρέπει να γράψω αυτό το πολύ κώδικα. Αλλά αποδεικνύεται ότι υπάρχει ελαφρώς πιο κομψό τρόπους εκφράζει ακριβώς το ίδιο πράγμα. Και μπορούμε να το κάνουμε αυτό ως εξής. Επιτρέψτε μου να το αφήσουμε αυτό στην οθόνη για μια στιγμή και εισαγάγει κάτι που είναι γνωστό ως ένα τριαδικό φορέα. Αυτό είναι το είδος του ένα σκάφος της γραμμής που είναι ακριβώς σήμαινε να μας ζει λίγο πιο σέξι, όπως είχε υποσχεθεί. Και Πάω να κάνω αυτό ως εξής. Δώσε μου μια σειρά που ονομάζεται s1, και επιτρέψτε μου να αντιστοιχίσετε ως εξής. (I == 1); "Μπουκάλι", αλλιώς "μπουκάλια". String s2 παίρνει (i == 2); "Μπουκάλι", αλλιώς "μπουκάλια". Έτσι, τότε ποια είναι η διαφορά εδώ; Αυτές οι δύο γραμμές του κώδικα, που υποστηρίζουν, μπορεί να αντικαταστήσει όλο αυτό το χάος. Γι 'αυτό και το ονομάσουμε ένα χάος, μόνο και μόνο επειδή αυτό το είδος της τρίβει με το λάθος τρόπο ώστε να είναι τόσες πολλές γραμμές κώδικα. Δεν είναι λάθος. Δεν είναι κακό σχεδιασμό. Όπως, αυτό είναι απολύτως σωστό και απολύτως εντάξει. Αλλά κωδικοποίηση γίνεται κουραστική, αν έχετε να εκφράσουν τον εαυτό σας έτσι γαμώτο ειδικά ξανά και ξανά και ξανά με ένα απλό σενάριο σαν αυτό. Έτσι C έχει κάποιες συντομεύσεις, όπως αυτό. Έτσι, αυτό που ουσιαστικά λέει κηρύξει μια σειρά που ονομάζεται s1 και εκχωρήσετε είτε αυτή η τιμή ή η τιμή είναι αν θ == - Συγγνώμη, εγώ θα πρέπει να το πω αυτό με μεγαλύτερη σαφήνεια. Δηλώσει μια μεταβλητή s1, αντιστοιχίσετε αυτή την τιμή, αν αυτό είναι αλήθεια. Σε αντίθετη περίπτωση, αντιστοιχίσετε αυτήν την τιμή. Έτσι με άλλα λόγια, αυτή είναι ένα είδος τρόπο μιας γραμμής του λέγοντας ότι αν άλλο, αλλά να κάνει μια αποστολή κατά μήκος του τρόπου. Έτσι, αν θ είναι 1, τότε να προχωρήσει και να καλέσετε αυτό το "μπουκάλι". Και τότε αυτό το άλλο, το αποκαλούν "μπουκάλια". Εν τω μεταξύ, s2, η δεύτερη λέξη που θα πρέπει να καθορίζουν, αν i ισούται με 2, θα s2 που να "μπουκάλι". Σε αντίθετη περίπτωση, ρυθμίστε το "μπουκάλια". Και ό, τι αυτό σημαίνει ότι τώρα είναι που μπορώ να περάσει μέσα από αυτό και να διαγράψετε όλα αυτές οι γραμμές κώδικα. Και όταν λέω, κάπως γελοία, ότι αυτό είναι τώρα σέξι, είναι πιο σέξι στο είδος της στιλιστική άποψη. Το γεγονός ότι λειτουργικά, αυτός ο κώδικας είναι πραγματικά πρόκειται να κάνει ακριβώς το ίδιο πράγμα. Και ακόμα κι αν αυτό μπορεί να φαίνεται μια περίεργη στην αρχή ματιά, γιατί δεν έχω δει αυτό το κατασκεύασμα πριν, θα ήθελα να υποστηρίζουν ότι αυτό είναι τελικά πρόκειται να είναι πολύ πιο ευανάγνωστο και έτσι πολύ πιο εύκολο για τους ανθρώπους που να ταξινομήσετε του καταλάβουμε, γιατί τώρα μπορείτε απλά να διαβάσετε το Κωδικός όλα σε μια γραμμή. Είναι ακόμα παρόμοια στο πνεύμα με την περίπτωση, όπου αυτό είναι το κατάσταση και στη συνέχεια, αυτό είναι ό, τι υπάρχει μέσα στο αν και αυτό είναι ό, τι υπάρχει μέσα στο άλλο. Αλλά μπορούμε να κάνουμε αυτό ακριβώς πολύ πιο κομψά. Και αν εγώ τώρα πάω πίσω στο τερματικό μου, αφού διαγραφούν όλα από αυτές τις γραμμές και τους αντικατέστησε με μόνο αυτά τα δύο, recompile, re-run μπουκάλια της μπύρας με 99, ειδοποίηση ότι μου γραμματική είναι, στην πραγματικότητα, εξακολουθεί να ισχύει. Έτσι, και πάλι, κάτι για να ξεκινήσει. 2 μπουκάλια μπίρα, 1 μπουκάλι μπύρα. Φαίνεται δεξιά. Ναι. Έτσι εκεί έχουμε μια πολύ πιο σύντομη λύση. Έτσι αυτό, πάρα πολύ, όπως μπορείτε να πάρετε πιο άνετα με το C και όχι αναγκαστικά με το πρώτο PSET ή ακόμη δευτερόλεπτα, αλλά συνειδητοποιήσουν ότι αυτές οι δομές μπορούν να μας επιτρέψει να κάνουμε τα πράγματα ποτέ πιο κομψά. Τώρα ας κάνουμε κάτι άλλο εδώ. Επιτρέψτε μου να προχωρήσει και να ανοίξει return1.c. Τώρα, ας αρχίσουμε να λύσει ένα άλλο πρόβλημα με έναν τρόπο που μας επιτρέπει να γράφετε πιο εξελιγμένα κώδικα. Έτσι, εδώ είναι μια απλή μικρή πρόγραμμα, του οποίου σκοπός στη ζωή είναι να αυξήσετε τις τιμές. Και πραγματικά, ας κάνουμε ένα βήμα πίσω. Επιτρέψτε μου να κάνω αυτό το χέρι. Επιτρέψτε μου να κάνω και περιλαμβάνουν int main (void). Και επιτρέψτε μου να ονομάσουμε αυτό increment.c. Και τι θέλω να κάνω; Πάω να πάει μπροστά και να πει κάτι σαν - Θα λέμε στους αριθμούς το ίδιο - int x. Έτσι, int x παίρνει 2? Printf x είναι% d, νέα γραμμή, x. Έτσι γράφω γρήγορα, αλλά το είδος της γνωστής πράγματα τώρα. Στη συνέχεια, Πάω να κάνουμε x + +. Στη συνέχεια, Πάω να εκτυπώσετε την ίδια φράση ξανά. Και τότε Πάω να επιστρέφει 0 ακριβώς για να κλείσετε το πρόγραμμα. Εντάξει, έτσι αυτό είναι ένα πρόγραμμα που προσαυξήσεις ένας αριθμός. Είναι η πρώτη θα προετοιμάσει κάτι σε 2, και τότε είναι πρόκειται να το αυξήσετε και να το εκτυπώσετε ξανά. Έτσι, ας τρέξει αύξηση, απίστευτα απλό πρόγραμμα. Αλλά ας υποθέσουμε τώρα ότι θέλω να κύβο του αξία, το ίδιο κάνουν και κάτι κάπως αυθαίρετη. Και εγώ πραγματικά θέλουν να κάνουν x παίρνει τον κύβο του. Γι 'αυτό και θα μπορούσε να χρησιμοποιήσει αυτό που ονομάζεται τη λειτουργία pow, αλλά εγώ δεν κάνω πραγματικά γνωρίζουν πού είναι ότι ακόμη. Έτσι, Πάω να κάνω αυτό το απαρχαιωμένο τρόπο. x φορές αυτό ισούται με x φορές το x φορές το x. Έτσι είμαι cubing την αξία, πολλαπλασιάζοντάς την με ίδια πάλι και ξανά και ξανά, έτσι ώστε να πάρει την εξουσία της 3 σε αυτή την περίπτωση. Έτσι, τώρα οι αριθμοί θα πρέπει να εκτυπώσετε θα πρέπει να είναι, όπως θα δούμε εδώ - κάνει αύξηση, έτσι είναι στην πραγματικότητα δεν είναι πραγματικά αυξήσετε πια, αλλά θα αφήσει το όνομα και μόνο - 2 και ακολούθως 8. Τώρα, έχουμε τις απαρχές της μια ευκαιρία για βελτίωση εδώ, σύμφωνα με την οποία αυτό το πράγμα κοπής σε κύβους από τον πολλαπλασιασμό ενός αριθμού από μόνη της η ίδια από μόνη της μοιάζει με αυτό θα μπορούσε απλώς να είναι χρήσιμο να έχουμε σαν λειτουργία, σαν κάποιος αποφάσισε χρόνια - ξέρετε, το είδος των χρήσιμο αν ένας από εμάς κάθεται printf και γράφει έτσι ώστε το υπόλοιπο του κόσμου μπορεί να το χρησιμοποιήσει, γιατί δεν έχουμε καθίσει και να γράψει μια λειτουργία που ονομάζεται κύβος που το κάνει αυτό για εμάς κοπής σε κύβους, έτσι δεν έχουμε με το χέρι την εφαρμογή της έννοιας του cubing τιμές εδώ; Έτσι, ένα απλό παράδειγμα, αλλά ας πάμε μπροστά και να χρησιμοποιήσετε αυτό ως μια ευκαιρία να γράψει τη δική του λειτουργία μας. Έτσι, μέχρι στιγμής, έχουμε μόνο χρησιμοποιείται κυρίως, και έχουμε χρησιμοποιήσει άλλα λειτουργίες των ανθρώπων, αλλά δεν έχουμε γράψει τη δική μας. Έτσι, εδώ πηγαίνουμε. Πάω να προχωρήσει και να γράψει μια λειτουργία που ονομάζεται κύβος. Και Πάω να έχουν πάρει μια είσοδο. Έτσι είσοδο του πρόκειται να είναι ένας ακέραιος. Και τι είναι αυτό που πρόκειται να κάνει; Είναι πρόκειται να δηλώσει int = έξοδος εισόδου εισόδου φορές φορές εισόδου. Και στη συνέχεια, πρόκειται να επιστρέψει το προϊόν. Και τότε πρέπει να είμαι πιο συγκεκριμένος τώρα. Αυτή η λειτουργία θα επιστρέψει ένα int. Μέχρι τότε εδώ είναι πώς θα γράψετε τις δικές σας συναρτήσεις. Μπορείτε πρώτα να αποφασίσετε ποιο είναι το όνομα του σας λειτουργία πρόκειται να είναι. Και γενικά, κάτι επεξηγηματικό είναι καλό, γι 'αυτό θα ονομάζουν κύβο. Στη συνέχεια θα πρέπει να διευκρινίσει τι πρόκειται να επιστρέψει, τι παραγωγή της θα είναι. Και δεν έχουμε ότι πολλές επιλογές ακόμα. Int, char, float, bool, string. Προς το παρόν, είμαι πρόκειται να κολλήσει με έναν int, επειδή το θέλω για να επιστρέψει έναν ακέραιο. Στη συνέχεια θα πρέπει να προσδιορίσετε τι είναι οι συντελεστές του, αν υπάρχουν,. Και αν κύβος παίρνει ένα επιχείρημα, παίρνει κάτι μεταξύ παρενθέσεις, θα πρέπει να δώσουμε ότι το επιχείρημα ένα όνομα, έτσι ώστε μπορείτε να καλέσετε κάτι όπως εσείς την εφαρμογή ή την εγγραφή αυτή τη λειτουργία, και θα πρέπει να του δώσετε έναν τύπο, ο οποίος σε αυτή την περίπτωση πρόκειται να είναι int. Έτσι, με λίγα λόγια, ο κύβος είναι μια λειτουργία που παίρνει έναν ακέραιο ως είσοδο και επιστρέφει ένας ακέραιος ως έξοδο. Έτσι, τι κάνει με την είσοδο; Λοιπόν, στη γραμμή 14, δηλώνω μια μεταβλητή που ονομάζεται εξόδου, και εγώ αντιστοιχίσετε την τιμή, εισαγωγή εισόδου φορές φορές εισόδου. Και τότε θα επιστρέψει εξόδου. Λοιπόν, πώς μπορώ να χρησιμοποιήσω αυτό τότε; Τι μπορώ να αλλάξω αυτά επισημαίνονται χαρακτήρες στη γραμμή 7 για να, δεν νομίζετε; ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Ναι, έτσι κύβος του x. Έτσι x είναι μια μεταβλητή, που σημαίνει ότι έχει κάποια αξία. Ευτυχώς, αυτό είναι του τύπου integer. Και επειδή το x είναι int, αυτό σημαίνει ότι μπορώ να το δώσετε σε κύβο. Και ακόμα κι αν είμαι επιτακτικούς την τιμή του x με την τιμή κύβος του x, όπως έχει συμβεί μέχρι τώρα, κάθε φορά που έχουν ίσα σημεία και μια γραμμή κώδικα, τα πράγματα σχετικά με το δικαίωμα εκτελείται και στη συνέχεια παίρνει ανατεθεί η αξία στα αριστερά. Έτσι, η σειρά των εργασιών είναι όπως ελπίζουμε. Έτσι κάνει αυτό το έργο; Λοιπόν, επιτρέψτε μου να πάω εδώ κάτω. Επιτρέψτε μου να ανοίξει παράθυρο τερματικού μου. Επιτρέψτε μου να κάνουν αύξηση, Enter. «Σιωπηρή δήλωση του« κύβου »λειτουργία είναι άκυρο C99. "Ως μέρος, C99 αναφέρεται στη γλώσσα C, όπως ήταν καθορίστηκε το 1999, η οποία ήταν μια ενημέρωση για την έκδοση από 1989, η οποία είναι μια ενημερωμένη έκδοση πέρα ​​από το αρχικό. Έτσι, αυτό είναι το μόνο που μέσα. Λοιπόν, τι σημαίνει αυτό ότι «σιωπηρή δήλωση του «κύβος» λειτουργία δεν είναι έγκυρη; "Είναι ακριβώς εδώ. Είναι ακριβώς εκεί, στην γραμμή 12. ΚΟΙΝΟ: [δεν ακούγεται]. David J. Malan: Τι είναι αυτό; ΚΟΙΝΟ: Δεν είναι πριν. David J. Malan: Δεν είναι πριν. Έτσι, αυτό είναι το πράγμα. C είναι κάπως ανόητο, ή C compilers είναι ηλίθια. Πραγματικά μόνο κάνει ό, τι σας πει να κάνετε. Και, ειδικότερα, μόνο για ανάγνωση κορυφή κωδικό σας προς τα κάτω, αριστερά προς τα δεξιά. Έτσι, αν ο compiler, Clang, διαβάζει τον κωδικό σας, γραμμή 1, υπολογίζει πώς να το κάνουμε αυτό. Αχ, εδώ έρχεται κύρια. Εντάξει, επιτρέψτε μου να πάμε μπροστά και να δηλώσει μια μεταβλητή x. Επιτρέψτε μου να εκτυπώσετε κάτι. Γραμμή 7, τι στο καλό είναι κύβος; Δεν είναι δηλώνονται στο stdio.h. Δεν έρχονται με Γ. Δεν έχω ιδέα τι να κάνω. Και έτσι ακριβώς Clang Bails και κλείνει με αυτό το μήνυμα λάθους. Έτσι, μπορούμε να το διορθώσω αυτό σε μια-δυο τρόπους. Μπορούμε να διδάξουμε Clang τι κύβος είναι από μόνο κίνηση, όπου η δήλωση. Γι 'αποκοπή και επικόλληση το κύριο κορυφή. Τώρα συνειδητοποιούν ότι μόνο και μόνο επειδή ο κύριος δεν είναι πλέον πρώτη, είναι εξακολουθεί να εκτελείται από προεπιλογή. Βασικό είναι το κύριο. Είναι το όνομα προεπιλεγμένη λειτουργία. Δεν έχει σημασία που είναι σε ένα αρχείο. Αλλά τουλάχιστον τώρα Clang κύβος έχει δει πριν το χρησιμοποιήσετε. Ας δούμε λοιπόν αν Clang είναι πιο ευτυχισμένοι τώρα. Κάντε αύξηση, που δεν συγκεντρώνουν αυτή τη φορά. Επιτρέψτε μου να τρέξει αύξηση. Και πράγματι, φαίνεται να λειτουργεί. Τώρα, μπορείτε να έρθετε επάνω με τα σενάρια που τελικά δεν είναι εφικτό να καταβάλουν κάθε λειτουργία πάνω από κάθε άλλη λειτουργία. Θα κολλήσει σε αυτό το άπειρο βρόχο, στην πραγματικότητα, όπου αυτός ο τύπος θέλει να είναι εδώ, αλλά αυτό ο τύπος πρέπει να είναι εκεί. Έτσι, αυτό δεν λειτουργεί πάντα. Έτσι, ευτυχώς, C έχει μια πιο κομψή λύση. Πάω να θέσει αυτό πίσω εκεί που ήταν, μόνο και μόνο επειδή εγώ προτιμούν, ως θέμα αρχής, ότι το κύριο είναι πάντα στην κορυφή, γιατί είναι απλά ωραίο να δούμε τι είναι αυτό το πρόγραμμα κάνει από προεπιλογή. Και τι Πάω να κάνουμε εδώ είναι να δηλώσετε αυτό που ονομάζεται ένα πρωτότυπο. Πάω να δηλώσουν εκ νέου λειτουργία κύβος μου κυριολεκτικά αντιγραφή και επικόλληση. Στην πραγματικότητα, αυτό δεν είναι κυριολεκτικά. Έτσι κυριολεκτικά αντιγραφή και επικόλληση γραμμή 15 μέχρι πάνω από τη γραμμή 6. Δεν έχει σημασία ποια γραμμή αυτή καταλήγει σε. Συμβαίνει να είναι στη γραμμή 4. Αλλά δεν πρέπει να είναι πριν από τα κύρια. Αλλά παρατηρήσετε τη διαφορά. Γραμμή 4 τελειώνει με ένα ερωτηματικό, πράγμα που σημαίνει hey, Clang, πάρτε τη λέξη μου για το ότι υπάρχει μια συνάρτηση που ονομάζεται κύβος που παίρνει ένα int και επιστρέφει int. Αλλά δεν είμαι Θα σας πω ό, τι είναι ακόμη. Απλά ξέρω ότι υπόσχομαι να σας πω τελικά. Και πράγματι, τώρα είναι εντάξει ότι αυτό είναι κάτω. Έτσι, αυτό είναι γενικά καλύτερες, γιατί τότε στην κορυφή της το αρχείο σας, μπορείτε απλά να κουδουνίστρα off, ταχεία-φωτιά, μια γραμμή το καθένα, ποια είναι τα ονόματα των λειτουργιών σας, ό, τι τους είσοδοι είναι, ποια είναι τα αποτελέσματα τους. Και για να γίνω πιο σαφής, η είσοδος σημαίνει γενικά επιχείρημα ή παράμετρο, συνώνυμο. Έξοδος σημαίνει επιστροφή αξία, τι κάνει χέρι πίσω σε μένα. Έτσι, στην περίπτωση αυτή εδώ, κύβος έχει δηλωθεί στην κορυφή, αλλά ορίζεται, αλλιώς γνωστή ως εφαρμοστεί, στο κάτω μέρος. Έτσι τώρα ας πάμε πίσω εδώ και επαναληφθεί αυτό. Έτσι, τώρα επιτρέψτε μου να προχωρήσει και να εκτελέσετε ξανά κάνει, εκτελέστε ξανά αύξηση. Και τώρα φαίνεται να λειτουργεί μια χαρά. Έτσι, τώρα μπορούμε να πάμε μπροστά και να συνυπολογίσει κάτι σαν το μπύρα παράδειγμα σε αυτή την τέταρτη έκδοση. Έτσι, επιτρέψτε μου να μετακινηθείτε προς τα κάτω εδώ. Και παρατηρώ ότι το είδος του πήρε αυτό το μάθημα στην καρδιά μόλις τώρα. Το γεγονός ότι ήμουν το ίδιο τραγούδι ξανά και στροφή ξανά και ξανά, η ίδια γραμμή χορωδία στο τραγούδι, αισθάνθηκε αρέσει να κάνω γιατί δεν έχω παράγοντας που έξω σε μια συνάρτηση; Και πράγματι, αυτό πρέπει να είναι ένα από τα κίνητρα. Εκτός από το γεγονός ότι κάποιος άλλος στον κόσμο να θέλετε να χρησιμοποιήσετε μια συνάρτηση κύβου - αυτός είναι ένας καλός λόγος για τον παράγοντα κάτι σας και να γράψετε τη δική σας προσαρμοσμένη λειτουργία - αν υπάρχει ένα κομμάτι του κώδικα στο πρόγραμμά σας που απλά κάνει εννοιολογική άποψη, η οποία κατά κάποιο τρόπο θέλει να δώσει μια όνομα - όπως στην προκειμένη περίπτωση, χορωδία - τότε μπορείτε να γράψετε ότι ομοίως ως μια ξεχωριστή λειτουργία. Δεν χρειάζεται να γράψετε τα πάντα στην κύρια αν απλά αισθάνεται καθαρότερα να διαχωριστούν και να του δώσετε ένα όνομα. Έτσι, στην περίπτωση αυτή εδώ, παρατηρούμε ότι έχω ένα σχόλιο στην κορυφή αυτή η λειτουργία που απλά τραγουδάει για το προσδιορίζονται οι αριθμοί των φιαλών. Σημειώστε εδώ ότι εγώ δεν χρειάζεται να καλέσετε αυτά τα πράγματα εισόδου και εξόδου. Στην πραγματικότητα, αυτή τη φορά ονομάζεται απλά β εισόδου μου για μπουκάλι. Και εδώ παρατηρούμε, κενό δείχνει τι; Η χορωδία - ΚΟΙΝΟ: Δεν θα επιστρέψει. David J. Malan: Δεν επιστρέφει μια τιμή. Και πράγματι, οι λειτουργίες δεν πρέπει να επιστρέψει τιμές. Απλώς μπορεί να κάνει κάτι. Μπορούν να έχουν τα λεγόμενα παρενέργειες, η οποία σε αυτή περίπτωση είναι μόλις ένα σωρό εκτύπωση στην οθόνη. Έτσι, παρατηρούμε ότι αυτός ο κώδικας εδώ, έχω κυριολεκτικά έκλεψε από το προηγούμενο παράδειγμα. Η μόνη διαφορά είναι αντί της χρησιμοποίησης i ως μου μεταβλητή, είμαι με τη χρήση β τώρα ως μεταβλητή μου. Γι 'αυτό και έχουν β εδώ κάτω, έχω β εδώ κάτω, έχω β μείον 1 εδώ κάτω. Αλλά ο κώδικας είναι ακριβώς το ίδιο. Αλλά μόνο και μόνο για να σας δείξω τώρα πώς μπορούμε να χρησιμοποιήσουμε αυτό, επιτρέψτε μου να πάω μπροστά και να αλλάξει πραγματικά αυτό να είναι ένα για βρόχο. για (int i = n? ί> ν? i -). Έτσι έχω κλέψει ότι από το προηγούμενο παράδειγμα μας. Προηγουμένως, είναι στη γραμμή 37 που θα έχουν αρχίσει τραγουδώντας αυτό το ενοχλητικό τραγούδι. Αλλά αντ 'αυτού, είμαι απλώς πρόκειται να καλέσετε τώρα χορωδία του i. Τέλος. Έτσι τώρα σε κάθε επανάληψη του βρόχου αυτού, καλώ αυτό το άλλο λειτουργία, χορωδία, που έτυχε να γράψω. Δεν γράφτηκε από κάποιον άλλο χρόνια. Αλλά χορωδία, εν τω μεταξύ, χρησιμοποιεί printf για να εκτυπώσετε από αυτές τις τέσσερις γραμμές. Αλλά το γεγονός ότι είμαι καλώντας χορωδία ξανά και ξανά σε μια βρόχο σημαίνει ότι είμαι πρόκειται να πάρει, στο τέλος, η ακριβώς το ίδιο τραγούδι όπως έχω μέχρι στιγμής. Έτσι, με λίγα λόγια, τώρα αν κοιτάζω πίσω μου κώδικα, ακόμη και αν λειτουργικά αυτό είναι ισοδύναμο, παρατηρούμε ότι είναι αρχίζει να παίρνει ακόμα πιο ευανάγνωστο. Δεν ξέρω ακριβώς πώς GetInt υλοποιείται. Ειλικρινά, δεν ξέρω πώς χορωδία υλοποιείται. Αλλά δεν έχει σημασία για μένα. Δεν με νοιάζει, γιατί τώρα μπορώ να ταξινομήσετε του, ως άνθρωπος, διαβάστε αυτό από πάνω προς τα κάτω. Και επειδή οι λειτουργίες ονομάζεται σύμφωνα με ό, τι κάνει, κωδικός μου είναι όλο και πιο ευανάγνωστο. Και τα προγράμματα μας πάρει πολύ πιο σύνθετη - μέχρι το τέλος του εξαμήνου, θα σας γραπτώς εκατοντάδες γραμμές του κώδικα σε γλώσσες όπως η PHP και JavaScript και τα παρόμοια - θα διαπιστώσετε ότι είναι πολύ πιο εύκολο από το να παρακολουθείτε τι έχετε κάνει. Και όταν ξεκινάτε συνεργασία με φίλους ή συνεργάτες ή συναδέλφους, θα είστε σε θέση να γράψει πολύ πιο μαζικά προγράμματα από την έναρξη της άσκησης αυτά τα βασικά οικοδομικά τετράγωνα. Έτσι, με ότι είπε, γιατί δεν λέμε ότι μια μέρα; Και εμείς θα σας δούμε την Τετάρτη. [Χειροκρότημα]