[ΜΟΥΣΙΚΗ Playing]
>> DAVID J. Malan: Εντάξει, αυτό είναι CS50.
Και αυτό είναι μία εβδομάδα.
Έτσι, υπενθυμίζουν ότι η τελευταία φορά την εβδομάδα μηδέν, επικεντρωθήκαμε στην υπολογιστική σκέψη.
Και εμείς μεταπηδά από ότι για να Το μηδέν, μια γραφική προγραμματισμού
γλώσσας από τους φίλους μας στο Media Lab του MIT.
>> Και με το Scratch, δεν έχουμε διερευνήσει ιδέες όπως τις λειτουργίες και τις συνθήκες,
και βρόχους, και μεταβλητές, και ακόμη και εκδηλώσεις, και κλωστές, και άλλα.
Και σήμερα, θα πάμε να συνεχίσετε να χρησιμοποιείτε αυτές τις ιδέες,
και πραγματικά λήψη τους για χορηγηθεί, αλλά μεταφράζει τους
σε μια άλλη γλώσσα γνωστή ως C. Τώρα, C είναι μια πιο παραδοσιακή γλώσσα.
Είναι ένα χαμηλότερο επίπεδο γλώσσα, αν θέλετε.
>> Είναι καθαρά κειμένου.
Και έτσι με την πρώτη ματιά, είναι όλοι πρόκειται να δούμε μάλλον αινιγματική
αν δεν έχετε προγραμματιστεί πριν.
Εμείς πάμε για να έχουν ημι-παχύ έντερο, και παρενθέσεις,
και άγκιστρα, και πολλά άλλα.
Αλλά συνειδητοποιούν ότι ακόμα και αν και η σύνταξη είναι
για να κοιτάξουμε λίγο εξοικειωμένοι για τους περισσότερους από εσάς, δείτε το παρελθόν αυτό.
Και να προσπαθήσουμε να δούμε τις ιδέες που είναι, πράγματι, οικείο,
γιατί εδώ στην εβδομάδα μία ποιο θα αρχίσουμε να κάνουμε είναι να συγκρίνουμε,
Αρχικά, Scratch έναντι C.
>> Έτσι, για παράδειγμα, να υπενθυμίσω ότι όταν υλοποιηθεί το πρώτο από τα προγράμματα μας
τελευταία φορά, είχαμε ένα μπλοκ που φαινόταν ένα μικρό κάτι σαν this-- όταν
πράσινη σημαία κλικ, και στη συνέχεια είχαμε ένα ή περισσότερα κομμάτια του παζλ κάτω από αυτό,
σε αυτή την περίπτωση, λένε, γεια κόσμο.
Έτσι, πράγματι, στο Ξυστό, όταν κάνω κλικ ότι η πράσινη σημαία
να τρέξει το πρόγραμμά μου, έτσι να μιλήσει, αυτά είναι
τα μπλοκ που παίρνουν εκτελεστεί, ή να τρέξει.
Και, συγκεκριμένα, Ξυστό είπε, γειά σου, τον κόσμο.
>> Τώρα, θα μπορούσα να έχω καθορίζονται διαφορετικές λέξεις εδώ.
Αλλά θα δούμε ότι, πράγματι, πολλοί αυτών blocks-- και μάλιστα,
σε C πολλά functions-- μπορεί να είναι παραμετροποιημένη ή προσαρμοσμένη
να κάνει διαφορετικά πράγματα.
Στην πραγματικότητα, σε C αν θέλετε να μετατρέψετε, τώρα,
Αυτό το πρόγραμμα Scratch σε αυτή την άλλη γλώσσα,
θα πάμε να γράψει ένα λίγο κάτι σαν αυτό.
>> Σύμφωνοι, υπάρχει κάποια άγνωστη σύνταξη υπάρχει πιθανότατα, int,
και παρενθέσεις, και άκυρη.
Αλλά printf-- ακόμα κι αν κάνατε πιστεύω ότι θα ήταν απλά εκτύπωσης.
Αλλά εκτύπωση σημαίνει εκτύπωση διαμορφωθεί, όπως θα δούμε σύντομα.
Αυτό κυριολεκτικά θα εκτυπώσει στην οθόνη ανεξαρτήτως
είναι μέσα από αυτές τις παρενθέσεις, η οποία Φυσικά σε αυτή την περίπτωση είναι, γεια κόσμο.
>> Αλλά θα παρατηρήσετε κάποια άλλα σύνταξη, μερικά διπλά εισαγωγικά,
ότι οι παρενθέσεις στο τέλος, η άνω τελεία και τα παρόμοια.
Έτσι, υπάρχει ένα κομμάτι των γενικών εξόδων, να το πω έτσι, τόσο γνωστικά
και συντακτικά, ότι θα πάμε να πρέπει να θυμάστε πριν από καιρό.
Αλλά συνειδητοποιούν ότι με την πρακτική, αυτό θα αρχίσει να πηδούν έξω σε σας.
>> Στην πραγματικότητα, ας επικεντρωθεί σε εκείνο το ένα λειτουργία specifically-- σε αυτή την περίπτωση,
πω γεια κόσμο.
Έτσι λένε είναι η λειτουργία.
Γεια σας κόσμος είναι παράμετρος του, ή επιχειρήματος, προσαρμογή της.
>> Και η ισοδυναμία σε C είναι ακριβώς πρόκειται να είναι αυτό μια γραμμή εδώ,
όπου printf είναι ισοδύναμη με την, ας πούμε, η διπλή εισηγμένες string, γεια
κόσμος είναι ισοδύναμο, φυσικά, σε ό, τι είναι στο λευκό κουτί εκεί.
Και η ανάστροφη κάθετο n, αν και λίγο παράξενο και απουσιάζει από το μηδέν,
απλά πρόκειται να έχουμε το αποτέλεσμα που θα δείτε σε έναν υπολογιστή, όπως το Mac μου ή έναν υπολογιστή,
ακριβώς κινείται η δρομέα στην επόμενη γραμμή.
Είναι σαν το χτύπημα Enter στο πληκτρολόγιό σας.
>> Έτσι, θα δούμε ότι και πάλι πριν από καιρό.
Αλλά πρώτα, ας ρίξουμε μια ματιά σε αυτό άλλα παράδειγμα στην περίπτωση των βρόχων.
Είχαμε αυτό πάντα βρόχο τελευταία φορά, η οποία ήταν μια σειρά από κομμάτια του παζλ
ότι έκανε κάτι κυριολεκτικά forever-- σε αυτή την περίπτωση,
λένε, γεια κόσμο, γεια κόσμο, Γεια σας κόσμο, γεια κόσμο.
Έτσι είναι ένας άπειρος βρόχος από το σχεδιασμό.
>> Στην C, αν θέλουμε να εφαρμόσουμε ίδια ιδέα, θα μπορούσαμε απλά να κάνουμε αυτό.
Ενώ είναι αλήθεια, printf γεια world-- τώρα ενώ, μόνο σημασιολογικά, το είδος της
φέρνει στο νου την ιδέα του να κάνει κάτι ξανά, και ξανά, και ξανά,
και για πόσο καιρό;
Λοιπόν, true-- υπενθυμίζουν ότι αλήθεια είναι μόνο ή ένα.
>> Και αλήθεια είναι, βέβαια, πάντα αλήθεια.
Έτσι είναι το είδος της μια ανούσια Δήλωση απλά να πω αλήθεια.
Αλλά πράγματι, αυτό είναι σκόπιμη, γιατί αν αληθεύει είναι απλά πάντα αλήθεια,
από ό, τι κατά την αλήθεια ακριβώς συνεπάγεται, αν και λίγο έμμεσα,
ότι οι παρακάτω γραμμές κώδικα μεταξύ αυτών άγκιστρα
θα πρέπει να εκτελέσει απλά ξανά, και ξανά, και πάλι, και στην πραγματικότητα ποτέ δεν σταματούν.
>> Αλλά αν θέλετε σας βρόχος να σταματήσει, όπως έχουμε
έκανε την τελευταία φορά με κάτι σαν αυτό, επαναλάβετε τα ακόλουθα 50 φορές,
στο C μπορούμε να κάνουμε το ίδιο με αυτό που είναι ονομάζεται για loop-- τη λέξη-κλειδί
Δεν είναι λίγο, αλλά για.
Και τότε έχουμε κάποια νέα σύνταξη εδώ, με int i ισούται με 0, i μικρότερη από 50,
i ++.
Και θα επανέλθουμε σε αυτό.
Αλλά αυτό είναι απλά το πώς θα μεταφράσει το σύνολο των μπλοκ Scratch
σε ένα σύνολο C γραμμές κώδικα.
>> Εν τω μεταξύ, να εξετάσει τις μεταβλητές.
Και, στην πραγματικότητα, εμείς απλά είδε ένα προ ολίγου.
Και στην περίπτωση του Scratch, αν ήθελε να δηλώσει μια μεταβλητή που ονομάζεται i
για το i είναι ακέραιος, απλά ένας αριθμός, και θέλουμε να το θέσετε σε κάποια τιμή,
θα χρησιμοποιήσετε αυτό το πορτοκαλί μπλοκάρουν here-- που θ 0.
>> Και θα δούμε σήμερα και πέρα, ακριβώς όπως και την περασμένη εβδομάδα,
προγραμματιστές κάνουν σχεδόν τα πάντα αρχίζουν να μετρούν από το μηδέν, πραγματικά
κατά συνθήκη.
Αλλά και επειδή ανάκληση από συζήτησή μας δυαδικών,
ο μικρότερος αριθμός που μπορεί να αντιπροσωπεύουν με οποιοδήποτε αριθμό από bits
είναι ακριβώς πρόκειται να είναι 0 ίδια.
Και έτσι θα ξεκινήσει γενικά αρχικοποίηση ακόμη μεταβλητές μας στο 0.
>> Και σε C για να κάνουν το ίδιο, θα πάμε να πούμε int
για ακέραιος, εγώ απλά από τη σύμβαση.
Θα μπορούσα να ονομάζεται αυτή η μεταβλητή οτιδήποτε θέλω, όπως ακριβώς και στο Ξυστό.
Και τότε ισούται με 0 απλά εκδοχείς η τιμή 0 από τα δεξιά
και το θέτει σε μεταβλητή, ή ο δοχείο αποθήκευσης εκεί, στα αριστερά.
Και το ερωτηματικό όπως θα see-- και έχουμε δει μερικές από αυτές τις already--
Σημαίνει απλώς τέλος της σκέψης.
Προχωρήστε να κάνουμε κάτι άλλο στις γραμμές που ακολουθούν.
>> Τώρα, τι γίνεται με Boolean εκφράσεις;
Υπενθυμίζουμε ότι το Ξυστό, αυτά ήταν εκφράσεις
που είτε είναι αλήθεια ή false-- ερωτήσεις,
Πραγματικά, τα οποία είναι είτε αληθείς ή ψευδείς.
Έτσι, στην περίπτωση του Scratch, θα μπορούσαμε θέσω ένα απλό ερώτημα, όπως αυτό,
είναι i λιγότερο από 50;
Έτσι i, πάλι, είναι ένας ακέραιος.
Ίσως είμαστε το χρησιμοποιείτε σε ένα πρόγραμμα Scratch
να παρακολουθείτε σκορ ή κατι τετοιο.
Έτσι, αυτό το συντακτικό εδώ στο Scratch σημαίνει απλά, είναι θ λιγότερο από το 50;
Λοιπόν, ευτυχώς, κάτι που είναι απλά σε C. Και να μεταφράσει,
Αυτό θα λέγαμε απλά i λιγότερο από 50, χρησιμοποιώντας το πλήκτρο εξοικειωμένοι
στο πληκτρολόγιό σας.
>> Εν τω μεταξύ, αν θέλετε να να πω κάτι πιο γενικό,
όπως, επίσης, είναι χ λιγότερο από το y, όπου κάθε Χ και Υ είναι οι ίδιες μεταβλητές;
Μπορούμε να κάνουμε το ίδιο πράγμα στο Γ, εφ 'όσον έχουμε
δημιούργησε αυτές τις μεταβλητές που έχουν ήδη.
Και θα δούμε πώς θα το κάνει αυτό πριν από καιρό.
Θα πω απλώς x λιγότερο από το y.
>> Έτσι είστε αρχίζουν να δείτε κάποιες ομοιότητες.
Και εκείνοι οι λαοί που έκαναν Scratch ήταν σίγουρα
εμπνευσμένο από κάποιες από αυτές τις βασικές ιδέες.
Και θα δείτε αυτό το είδος της σύνταξη σε πολλές languages--
όχι μόνο το μηδέν, δεν μόνο C, αλλά Python,
και JavaScript, και άλλες γλώσσες ακόμα.
>> Ας εξετάσουμε ένα άλλο κατασκεύασμα από C, η έννοια μιας κατάστασης,
κάνει κάτι όρους.
Αν κάτι είναι αλήθεια, να το κάνετε αυτό.
Εάν κάτι άλλο είναι αλήθεια, το κάνουμε αυτό.
Είναι το είδος του προγραμματισμού ισοδύναμο ενός διακλάδωση του δρόμου.
Ίσως είναι μια αμφίδρομη πιρούνι, ένας τριοδικός πιρούνι, ή και περισσότερο.
Και στο Scratch, μπορεί να έχουμε δει κάτι σαν αυτό.
>> Έτσι, αυτό είναι ένα μεγάλο.
Αλλά σκεφτείτε το σχετικό απλότητα της λογικής.
Αν το x είναι μικρότερο από y, τότε πείτε το x είναι μικρότερο από το y, αλλιώς αν το x είναι μεγαλύτερο από το y,
στη συνέχεια να πω το x είναι μεγαλύτερο από το y.
Και τότε, λογικά, αν νομίζετε ότι πίσω στο Scratch
ή απλά τη δική σας ανθρώπινη διαίσθηση, καλά, εάν το Χ δεν είναι μεγαλύτερη από y και χ
δεν είναι μικρότερη από y, τότε φυσικά x θα είναι ίσο με το y.
Έτσι, στην περίπτωση αυτή, με φωλιές αυτά τα μπλοκ Ξυστό,
μπορούμε να επιτύχουμε μια τριών τρόπο διακλάδωση του δρόμου;
>> Εν τω μεταξύ, αν θέλουμε να το κάνουμε αυτό σε C, είναι αναμφισβήτητα
φαίνεται λίγο simpler-- τουλάχιστον Μόλις εξοικειωθείτε με τη σύνταξη.
Αν το χ είναι μικρότερο από y, printf x είναι μικρότερο από y.
Αλλιώς αν το x είναι μεγαλύτερο από το y, printf x είναι μεγαλύτερο από το y.
Άλλο printf x είναι ίσο με y-- και, και πάλι, με εκείνους backslash τελειώνει ακριβώς
για εκείνες τις νέες γραμμές, έτσι ώστε αν έτρεξε στην πραγματικότητα αυτό το είδος του προγράμματος
θα κινηθεί μόνο κέρσορα τελικά
στην επόμενη γραμμή της οθόνης.
>> Τώρα, εν τω μεταξύ Scratch είχε άλλα πιο εξελιγμένα χαρακτηριστικά, μόνο
μερικά από τα οποία πρόκειται να αρχικά κινούνται πάνω στον κόσμο του C.
Και ένας από αυτούς ήταν που ονομάζεται μια λίστα στο Scratch.
Και αυτό ήταν μια ειδική το είδος της μεταβλητής, ότι
σας επιτρέπεται να αποθηκεύσετε πολλαπλές πράγματα στο πίσω, προς τα πίσω, προς τα πίσω, προς τα πίσω.
>> Στην C, δεν έχει λίστες, per se, αλλά κάτι
που είναι πιο γενικά ονομάζονται συστοιχίες, αν και θα
επανέλθω αργότερα αυτό το εξάμηνο να ψάχνει σε κάτι
που ονομάζεται μια λίστα, ή πραγματικά μια συνδεδεμένη λίστα.
Αλλά για τώρα, το πλησιέστερο ισοδύναμο σε C για εμάς
πρόκειται να είναι κάτι που ονομάζεται μια σειρά.
Και μια σειρά είναι απλά ένα ειδικός τύπος μεταβλητής
που σας επιτρέπει να αποθηκεύσετε τα δεδομένα πίσω, προς τα πίσω, προς τα πίσω, προς τα πίσω.
>> Και, πράγματι, στο Ξυστό, αν θέλαμε να αποκτήσετε πρόσβαση
το πρώτο στοιχείο ενός πίνακα ή ένα list-- και πάω να την αποκαλούμε,
κατά συνθήκη, argv, το επιχείρημα φορέα, αλλά περισσότερα για αυτό πριν από καιρό.
Αν θέλω να πάρω το πρώτο στοιχείο του argv, στον κόσμο του Scratch
μπορείτε πραγματικά να κάνετε συνήθως αρχίζουν να μετρούν από το 1.
>> Και γι 'αυτό θα μπορούσε να πάρει το στοιχείο 1 του argv.
Αυτό είναι ακριβώς το πώς υλοποιείται το MIT η έννοια των καταλόγων.
Αλλά σε C, Πάω να πιο απλά μόνο να πω, argv,
η οποία και πάλι είναι το όνομα μου list-- ή να είναι σαφής, ένας πίνακας.
Και αν θέλω το πρώτο στοιχεία, Πάω
να χρησιμοποιήσετε αγκύλες, η οποία θα Μπορεί να μην χρησιμοποιούνται συχνά κάτω από ένα πληκτρολόγιο.
>> Αλλά 0 σημαίνει απλά, να μου το πρώτο.
Έτσι, σε ορισμένες περιπτώσεις και ως περνάει ο καιρός, θα πάμε
για να αρχίσετε να βλέπετε αυτές τις διχοτομήσεις μεταξύ Ξυστό και C,
σύμφωνα με την οποία Scratch χρησιμοποιεί ένα.
Εμείς στο Γ χρησιμοποιήσετε 0 εδώ.
Αλλά θα δείτε γρήγορα μόλις καταλάβετε
τα θεμέλια της κάθε γλώσσας, ότι αυτά τα πράγματα αρχίζουν να πάρετε όλες τις πιο
εξοικειωμένοι με την πρακτική και την πρακτική.
>> Ας δούμε πραγματικά τώρα σε ένα πρόγραμμα.
Εδώ θα πρέπει να είναι η πρώτη του Γ μας πηγαίου κώδικα για την πλήρη προγράμματα.
Και το πρόγραμμα θα πάμε να προσφέρει για εξέταση
είναι αυτή που είναι ισοδύναμη σε εκείνη την προγενέστερη κομμάτι Scratch.
>> Έτσι, εδώ, έχουμε ό, τι είναι αναμφισβήτητα το πιο απλό πρόγραμμα C
μπορείτε να γράψετε ότι στην πραγματικότητα κάνει κάτι.
Τώρα, θα εξετάσουμε το παρελθόν, για τώρα, έχει περιλαμβάνουν,
πρότυπο io.h, και αυτά γωνία παρένθεση, και int, και άκυρη,
και τα άγκιστρα, και τα παρόμοια.
>> Και ας επικεντρωθεί σε τι, τουλάχιστον διαισθητικά,
θα μπορούσε να πηδούν έξω σε σας ήδη.
Στην πραγματικότητα, η κύρια, δεν το κάνω γνωρίζουν απαραιτήτως τι είναι αυτό,
αλλά μοιάζει πολύ με Scratch είχε ότι όταν πράσινη σημαία κλικ κομμάτι του παζλ,
το ίδιο κάνει και C ως γλώσσα προγραμματισμού έχουν ένα κύριο κομμάτι του κώδικα που
παίρνει εκτελείται από προεπιλογή. Και, πράγματι, αυτό είναι κυριολεκτικά πρόκειται να ονομάζεται κύρια.
>> Έτσι, κύρια είναι μια λειτουργία.
Και είναι μια ειδική λειτουργία που υπάρχει σε C ότι όταν εκτελείτε ένα πρόγραμμα,
είναι κύριος που παίρνει διοικούνται από αθέτηση. Στον κόσμο του Scratch,
ήταν συνήθως όταν πράσινη σημαία κλικ που έχεις τρέξει από προεπιλογή.
>> Εν τω μεταξύ, έχουμε δει αυτό πριν, printf ή εκτύπωση διαμορφωθεί, αυτό είναι
πρόκειται να είναι μια συνάρτηση που έρχεται με C, μαζί με ένα σωρό άλλα,
ότι η βούληση από το χρόνο και το χρόνο και πάλι, για να κάνουμε ακριβώς
όπως υποδηλώνει η ονομασία του, εκτυπώνει κάτι.
Τι θέλουμε να εκτυπώσετε;
Λοιπόν, θα δούμε ότι περικλείοντας χαρακτήρες
όπως these-- κόσμο Γεια σας, ανάστροφη κάθετο n σε διπλά εισαγωγικά,
μπορούμε να πούμε printf ακριβώς τι να εκτυπώσετε στην οθόνη.
>> Αλλά για να το κάνουμε ότι, δυστυχώς,
πρέπει να πάρετε κάτι που είναι ήδη αινιγματικά σε εμάς τους ανθρώπους,
αλλά τουλάχιστον είναι κάπως readable-- απότομη περιλαμβάνουν, πρότυπο io.h, int,
κύρια, κενό, printf, όλα τα μαγικά ξόρκια μόλις είδαμε στην οθόνη.
Αλλά στην πραγματικότητα έχουμε να πάει πιο απόκρυφες ακόμα.
Εμείς πρέπει πρώτα να μεταφράσει τον κωδικό ότι έχουμε γράψει σε κώδικα μηχανής.
Και ανάκληση από την περασμένη εβδομάδα ότι οι μηχανές, τουλάχιστον αυτά που γνωρίζουμε εδώ,
Στο τέλος της ημέρας μόνο κατανοήσουν μηδενικά και μονάδες.
>> Και Θεέ μου, αν είχαμε να γράψει αυτά μηδενικά και αυτοί που πραγματικά το πρόγραμμα,
θα ήταν πολύ, πολύ γρήγορα να λάβει τη διασκέδαση από τίποτα.
Αλλά αποδεικνύεται, ανά την περασμένη εβδομάδα, ότι αυτά τα πρότυπα μηδενικά και μονάδες
απλά έχουν ιδιαίτερη σημασία.
Σε ορισμένες περιπτώσεις, μπορεί να σημαίνουν οι αριθμοί.
>> Υπό ορισμένες συνθήκες, μπορεί να σημαίνουν γράμματα, ή τα χρώματα, ή οποιοδήποτε αριθμό
άλλων αφαιρέσεις εκεί πάνω.
Αλλά ακριβώς όπως ο υπολογιστής σας έχει μια CPU, Κεντρική Μονάδα Επεξεργασίας,
ή οι εγκέφαλοι στο εσωτερικό του υπολογιστή σας.
Είναι συνήθως η Intel στο εσωτερικό, γιατί αυτό είναι
μία από τις μεγαλύτερες εταιρείες που κάνει επεξεργαστές για υπολογιστές.
>> Λοιπόν, η Intel CPUs και άλλους απλά έχουν αποφασίσει εκ των προτέρων
ότι ορισμένα πρότυπα μηδενικά και αυτοί θα σημαίνει συγκεκριμένα πράγματα.
Ορισμένα πρότυπα μηδενικά και μονάδες θα σημαίνει, εκτυπώστε αυτό στην οθόνη,
ή να προσθέσετε αυτούς τους δύο αριθμούς, ή αφαιρέσουμε αυτά τα δύο αριθμούς,
ή να μετακινήσετε αυτό το κομμάτι των δεδομένων από μνήμη του υπολογιστή μου εδώ,
ή οποιοδήποτε αριθμό άλλων πολύ χαμηλό επίπεδο, αλλά τελικά χρήσιμο, λειτουργίες.
Αλλά, ευτυχώς, εμείς οι άνθρωποι δεν πρόκειται πρέπει να γνωρίζουν αυτό το επίπεδο λεπτομέρειας.
Πράγματι, ακριβώς όπως την τελευταία φορά, όπου θα αντλείται ξανά, και ξανά, και ξανά,
κτίριο από πολύ χαμηλό επίπεδο πρωτόγονων όπως μηδενικά και μονάδες
σε υψηλότερο επίπεδο εννοιών όπως αριθμούς και γράμματα,
και τα χρώματα, και πολλά άλλα, έτσι μπορούμε εμείς ως προγραμματιστές
σταθεί στους ώμους του άλλοι που έχουν έρθει πριν από εμάς
και να χρησιμοποιούν λογισμικό που άλλα οι άνθρωποι έχουν γράψει πριν ΕΜΕΙΣ--
συγκεκριμένα προγράμματα που ονομάζονται μεταγλωττιστές.
>> C είναι μια γλώσσα που συνήθως συγκεντρώνονται,
το οποίο σημαίνει ότι μετατρέπονται από πηγαίου κώδικα σε κώδικα μηχανής.
Συγκεκριμένα, τι σημαίνει αυτό είναι ότι αν έχεις την πηγή σας
κωδικό που εσείς γράφετε, όπως έχουμε σύντομα θα σε μια στιγμή στην οθόνη,
και θέλετε να το μετατρέψετε τελικά στην μηχανή code--
αυτά τα μηδενικά και αυτοί που μόνο Mac ή το PC σας
understands-- έχετε μια πρώτη Οι ζωοτροφές που τον πηγαίο κώδικα ως
εισόδου σε μια ειδική πρόγραμμα που ονομάζεται ένα compiler,
η έξοδος του οποίου θα δείτε είναι ο κώδικας μηχανής.
Και, πράγματι, την τελευταία φορά που μιλήσαμε περίπου, πραγματικά, στο τέλος της ημέρας,
επίλυση προβλήματος.
Έχετε εισόδους.
Και έχετε εξόδους.
Και έχεις κάποιο είδος του αλγορίθμου στη μέση.
>> Αλγόριθμοι μπορεί σίγουρα να είναι υλοποιείται σε λογισμικό,
όπως είδαμε με ψευδοκώδικα την περασμένη εβδομάδα και όπως θα δούμε με το πραγματικό κώδικα
αυτή την εβδομάδα.
Και έτσι, ένα compiler πραγματικά ακριβώς έχει ένα σύνολο αλγορίθμων μέσα
από αυτό που ξέρουν πώς να μετατρέπουν τις ειδικές λέξεις-κλειδιά,
όπως κύρια και printf, και άλλοι που μόλις
είδε στα πρότυπα μηδενικά και αυτοί ότι η Intel μέσα και άλλες CPUs
πραγματικά καταλαβαίνει.
Επομένως, πώς θα το κάνουμε αυτό;
Πού θα πάρετε μια compiler;
>> Οι περισσότεροι από εμάς εδώ έχουν ένα Mac ή PC.
Και τρέχετε Mac OS, ή Windows ή Linux ή Solaris,
ή οποιοδήποτε αριθμό άλλων λειτουργικά συστήματα.
Και, πράγματι, θα μπορούσαμε να βγείτε στο διαδίκτυο
και να κατεβάσετε ένα πρόγραμμα μεταγλώττισης για Mac ή το PC σας
για το συγκεκριμένο λειτουργικό σας σύστημα.
Αλλά όλοι θα είναι σε διαφορετικές σελίδες, να το πω έτσι.
Εμείς θα έχουν ελαφρώς διαφορετικές διαμορφώσεις.
Και τα πράγματα δεν θα μπορούσε να λειτουργήσει όλοι το ίδιο.
Και, πράγματι, αυτές τις μέρες πολλοί από εμάς δεν χρησιμοποιούν
λογισμικού που τρέχει μόνο σε φορητούς υπολογιστές μας.
Αντ 'αυτού, χρησιμοποιούμε κάτι όπως ένα πρόγραμμα περιήγησης που
μας επιτρέπει να έχουν πρόσβαση σε web-based εφαρμογών στο cloud.
Και αργότερα αυτό το εξάμηνο, θα κάνουμε ακριβώς αυτό.
Θα γράψουν εφαρμογές ή λογισμικού χρησιμοποιώντας code-- δεν C,
αλλά και άλλες γλώσσες όπως Python και JavaScript-- που εκτελούνται στο cloud.
>> Και για να το κάνουμε αυτό, εμείς οι ίδιοι κατά τη διάρκεια του εξαμήνου
θα χρησιμοποιήσει πραγματικά μια cloud-based περιβάλλον γνωστό ως CS50 IDE.
Αυτή είναι μια web-based προγραμματισμό περιβάλλον, ή ολοκληρωμένη ανάπτυξη
περιβάλλον, IDE, ότι είναι χτισμένο στην κορυφή μερικά λογισμικό ανοικτού κώδικα που ονομάζεται Cloud 9.
Και έχουμε κάνει κάποια παιδαγωγική απλουστεύσεις για να την
έτσι ώστε να κρύψει ορισμένα χαρακτηριστικά οι πρώτες εβδομάδες που δεν χρειαζόμαστε,
μετά την οποία μπορείτε να αποκαλύπτουν τους και να κάνουν πιο
ό, τι θέλετε με το περιβάλλον.
>> Και αυτό μας επιτρέπει, επίσης, να προ-εγκατάσταση συγκεκριμένου λογισμικού.
Τα πράγματα όπως το λεγόμενο CS50 βιβλιοθήκη, η οποία σύντομα θα δούμε
μας παρέχει σε C με μερικά πρόσθετη λειτουργικότητα.
Έτσι, αν πάνε, τελικά, CS50.io, θα σας ζητηθεί να συνδεθείτε,
και μια φορά που κάνετε και να δημιουργήσετε ένας λογαριασμός για δωρεάν,
θα είστε σε θέση να έχουν πρόσβαση σε μια περιβάλλον που μοιάζει αρκετά σαν αυτό.
>> Τώρα, αυτό είναι στην προεπιλεγμένη λειτουργία.
Τα πάντα είναι ωραία και φωτεινή στην οθόνη.
Πολλοί από εμάς έχουν μια συνήθεια της που εργάζονται για το κομμάτι CS50 που είναι
αρκετά αργά τη νύχτα.
Και έτσι κάποιοι από εσάς μπορεί να προτιμούν να μετατρέψει σε νυχτερινή λειτουργία, να το πω έτσι.
>> Αλλά, σε τελική ανάλυση, αυτό που είσαι πρόκειται να δείτε στο CS50 IDE
Είναι τρεις διαφορετικές areas-- μια περιοχή στα αριστερά, όπου
Τα αρχεία σας θα είναι στο σύννεφο, μια περιοχή στην πάνω δεξιά
όπου κωδικό σας πρόκειται να είναι επεξεργάσιμο.
Θα είστε σε θέση να ανοίξει ατομικές καρτέλες για κάθε πρόγραμμα
ότι μπορείτε να γράψετε αυτό το εξάμηνο στο εσωτερικό του εν λόγω πάνω δεξιά γωνία.
Και τότε οι περισσότεροι arcanely, και όμως με δύναμη,
πρόκειται να είναι αυτό το πράγμα κατά τη πυθμένα είναι γνωστή ως ένα παράθυρο τερματικού.
>> Αυτό είναι ένα παλιό σχολείο Command Line Interface,
ή CLI, που επιτρέπει να εκτελέσει τις εντολές
σχετικά με την computer-- σε αυτή την περίπτωση, ο υπολογιστής στο cloud--
για να κάνουμε τα πράγματα όπως καταρτίζουν τον κωδικό σας από τον πηγαίο κώδικα σε κώδικα μηχανής,
για την εκτέλεση προγραμμάτων σας, ή για να ξεκινήσετε σας web server, ή να έχουν πρόσβαση σε βάση δεδομένων σας,
και οποιοδήποτε αριθμό άλλων τεχνικών ότι θα αρχίσετε να χρησιμοποιείτε πριν από καιρό.
Αλλά για να φτάσουμε εκεί, είμαστε πρόκειται να έχουν στην πραγματικότητα
για να πάει σε απευθείας σύνδεση και να αρχίσετε να παίζετε.
Και για να το κάνουμε αυτό, ας πρώτη ξεκινήσετε πειραματίζονται με κύριο,
και να γράψει το κύριο μέρος του προγράμματος.
Και ας χρησιμοποιήσουμε αυτή τη λειτουργία printf, το οποίο χρησιμοποιήσαμε νωρίτερα,
απλά να πω κάτι.
>> Έτσι, εδώ είμαι ήδη στο εσωτερικό του CS50 IDE.
Έχω συνδεθεί εκ των προτέρων.
Και εγώ πλήρη προβληθεί το παράθυρο.
Και έτσι, τελικά, θα πάρα πολύ στο προσεχές προβλήματα
θα ακολουθήσουν παρόμοια βήματα που θα παρέχει ηλεκτρονική τεκμηρίωση.
Έτσι, δεν χρειάζεται να ανησυχείτε για απορροφώντας κάθε μικρό τεχνικό βήμα
ότι κάνω εδώ σήμερα.
>> Αλλά θα πάρετε μια οθόνη σαν αυτή.
Τυχαίνει να είναι σε λειτουργία νύχτας.
Και μπορείτε να φωτίζει τα πάντα up με την απενεργοποίηση της νυχτερινής λειτουργίας.
Και στο τέλος της ημέρα, θα πάμε να δούμε
αυτά τα τρία κύρια areas-- το αρχείο πρόγραμμα περιήγησης στα αριστερά, ο κώδικας καρτέλες επάνω στην κορυφή,
και το τερματικό παράθυρο στο κάτω μέρος.
>> Επιτρέψτε μου να προχωρήσει και να γράψει το πρώτο μου πρόγραμμα.
Πάω να πάει προληπτικά σε αρχείο, Αποθήκευση και αποθηκεύστε το αρχείο μου ως hello.c.
Πράγματι, κατά συνθήκη, κάθε μας πρόγραμμα γράφουν ότι είναι γραμμένο σε γλώσσα C
θα πρέπει να ονομαστεί κάτι dot γ, κατά συνθήκη.
Έτσι, Πάω να το ονομάσετε hello.c, επειδή Θέλω απλώς να πω ένα γεια στον κόσμο.
Τώρα πάω για μεγέθυνση έξω και κάντε κλικ στο κουμπί Αποθήκευση.
Και το μόνο που έχω τώρα εδώ είναι μια καρτέλα στο οποίο μπορώ να αρχίσετε να γράφετε κώδικα.
>> Αυτό δεν πρόκειται να καταρτίσει.
Αυτό δεν σημαίνει τίποτα.
Και έτσι ακόμα κι αν μετατραπεί αυτό να μηδενικά και μονάδες,
η CPU πρόκειται να έχει καμία ιδέα για το τι συμβαίνει γύρω.
Αλλά αν γράφω γραμμές που ταιριάζουν με conventions-- C ον Γ,
και πάλι, αυτό language-- με τη σύνταξη, όπως αυτό, printf γεια world-- και έχω
πάρει άνετα με αυτόν τον τρόπο την πάροδο του χρόνου.
Έτσι, δεν νομίζω ότι έκανα τυχόν τυπογραφικά λάθη.
>> Αλλά, πάντα, το πρώτο φορά που το κάνετε αυτό, θα σας.
Και τι είμαι έτοιμος να κάνω ίσως πολύ και δεν λειτουργεί για σας την πρώτη φορά.
Και αυτό είναι απολύτως εντάξει, γιατί τώρα σας
μπορεί να δει μόνο ένα σωρό νεότητα, αλλά με την πάροδο του χρόνου μόλις εξοικειωθείτε
με αυτό το περιβάλλον, και Αυτή η γλώσσα, και άλλοι,
θα αρχίσετε να βλέπετε τα πράγματα ότι είτε είναι σωστή ή λανθασμένη.
>> Και αυτό είναι ό, τι το διδασκαλία τους συνανθρώπους και την πορεία
βοηθούς πάρει τόσο καλοί στο πέρασμα του χρόνου, είναι εντοπισμό λάθη ή σφάλματα στον κώδικά σας.
Αλλά εγώ ισχυρίζονται ότι υπάρχει υπάρχουν σφάλματα σε αυτόν τον κώδικα.
Γι 'αυτό και τώρα θέλετε να εκτελέσετε αυτό το πρόγραμμα.
>> Τώρα για τη δική μου Mac ή PC, είμαι σε η συνήθεια της διπλής εικονίδια κλικ
όταν θέλω να τρέχει κάποιο πρόγραμμα.
Αλλά αυτό δεν είναι το μοντέλο εδώ.
Σε αυτό το περιβάλλον, η οποία είναι CS50 IDE.
Είμαστε χρησιμοποιώντας ένα λειτουργικό σύστημα που ονομάζεται Linux.
Linux θυμίζει ένα άλλο λειτουργικό σύστημα, είναι γενικά γνωστές
όπως Unix.
Και το Linux είναι ιδιαίτερα γνωστή για έχει μια γραμμή εντολών Περιβάλλοντος, CLI.
Τώρα, είμαστε χρησιμοποιώντας ένα ειδικό γεύση του Linux που ονομάζεται Ubuntu.
Και το Ubuntu είναι απλά ένα ορισμένες έκδοση του Linux.
>> Αλλά αυτά τα Linux αυτές τις μέρες κάνει πραγματικότητα έρχονται με γραφικές διεπαφές χρήστη.
Και το ένα τυχαίνει να να χρησιμοποιούν εδώ είναι web-based.
Έτσι, αυτό μπορεί να μοιάζει ακόμη και μια λίγο διαφορετικό από κάτι
εσείς ο ίδιος θα μπορούσε να έχει δει ή να τρέξει στο παρελθόν.
>> Έτσι, Πάω να πάει μπροστά τώρα και να κάνουμε το εξής.
Έχω αποθηκεύσει αυτό το αρχείο ως hello.c.
Πάω να πάει μπροστά και να Τύπος clanghello.c Έτσι Clang
για τη γλώσσα C είναι ένας compiler.
Είναι προ-εγκατεστημένο στο CS50 IDE.
Και πρέπει οπωσδήποτε να κατεβάσετε και να εγκαταστήσετε αυτό για τη δική σας Mac ή PC.
>> Αλλά, πάλι, δεν θα έχουν όλα η προ-ρύθμιση γίνεται για σας.
Έτσι, για τώρα, είμαι απλά πρόκειται να τρέξει clanghello.c.
Και τώρα παρατηρήσετε αυτή τη σύνταξη εδώ τελικά θα
συνειδητοποιήσει απλά σημαίνει ότι είμαι σε μια φάκελο ή κατάλογο που ονομάζεται Workspace.
Αυτό το σύμβολο του δολαρίου είναι μόνο σύμβαση για την έννοια, πληκτρολογήστε τις εντολές σας εδώ.
>> Είναι αυτό που ονομάζεται ένα μήνυμα, απλά κατά συνθήκη είναι το σύμβολο του δολαρίου.
Και αν πάω μπροστά τώρα και κάντε κλικ Εισάγετε, τίποτα δεν φαίνεται να έχει συμβεί.
Αλλά αυτό είναι πραγματικά ένα καλό πράγμα.
Το λιγότερο που συμβαίνει σε οθόνη σας, το πιο πιθανό
κωδικός σας είναι να είναι σωστή, τουλάχιστον συντακτικά.
>> Έτσι, αν θέλετε να εκτελέσετε αυτό το πρόγραμμα, τι μπορώ να κάνω;
Λοιπόν, αποδεικνύεται ότι η προεπιλεγμένο όνομα με βάση σύμβαση
για τα προγράμματα όταν δεν ορίσετε ένα όνομα για το πρόγραμμά σας είναι ακριβώς a.out.
Και αυτή η σύνταξη πάρα πολύ, θα εξοικειωθείτε με πριν από καιρό.
>> Dot κάθετος ακριβώς σημαίνει, hey, CS50 IDE, τρέχει ένα πρόγραμμα που ονομάζεται a.out
που είναι μέσα στον τρέχοντα κατάλογο μου.
Αυτό τελεία σημαίνει τον τρέχοντα κατάλογο.
Και θα δούμε τι άλλες τέτοιες ακολουθίες χαρακτήρων σημαίνει πριν από καιρό.
>> Έτσι, εδώ πηγαίνουμε, Enter, γεια κόσμο.
Και θα παρατηρήσετε, ότι αυτό που συνέβη;
Όχι μόνο δεν θα εκτυπώσετε hello world.
Κινήθηκε επίσης η δρομέα στην επόμενη γραμμή.
>> Και γιατί έγινε αυτό;
Τι ήταν ο κώδικας που γράψαμε πριν ότι εξασφαλίζεται ότι ο κέρσορας θα
πηγαίνετε στην επόμενη γραμμή;
Αστείο πράγμα για ένα υπολογιστής είναι πρόκειται μόνο
να κάνει κυριολεκτικά ό, τι θα πει να κάνουμε.
>> Έτσι, αν το πείτε για να printf γεια, κόμμα, το διάστημα, τον κόσμο, κοντά απόσπασμα,
αυτό είναι κυριολεκτικά μόνο θα για να εκτυπώσετε αυτούς τους χαρακτήρες.
Αλλά είχα αυτό το ειδικό χαρακτήρα στο τέλος, ανάκληση, backslash n.
Και αυτό είναι που εξασφάλισε ότι ο χαρακτήρας πήγε
στην επόμενη γραμμή της οθόνης.
>> Στην πραγματικότητα, επιτρέψτε μου να πάω και να το κάνουμε αυτό.
Επιτρέψτε μου να προχωρήσει και να διαγράψετε αυτό.
Τώρα, παρατηρούμε ότι η πάνω μέρος της οθόνης μου δεν υπάρχει
λίγο κόκκινο φως στην η καρτέλα δείχνει,
hey, δεν έχετε αποθηκεύσει το αρχείο σας.
Έτσι, Πάω να προχωρήσει με τον έλεγχο S ή εντολή S, αποθηκεύστε το αρχείο.
Τώρα goes-- πήγε για ένα moment-- πράσινο.
Και τώρα είναι πίσω στο απλά να είναι μια στενή εικονίδιο.
>> Αν τρέξω τώρα clanghello.c και πάλι, Enter, dot κάθετος, a.out, Enter,
θα δείτε ότι εξακολουθεί να εργαστεί.
Αλλά είναι αναμφισβήτητα ένα μικρό αμαξάκι.
Αυτή τη στιγμή, prompt-- χώρο εργασίας μου, και, στη συνέχεια, ότι το σύμβολο του δολαρίου,
και, στη συνέχεια, την πραγματική prompt-- μου είναι όλα στην ίδια γραμμή.
Έτσι, αυτό σίγουρα ένα αισθητικό σφάλμα, ακόμη και αν δεν είναι πραγματικά ένα λογικό σφάλμα.
>> Έτσι, Πάω να αναιρέσετε αυτό που μόλις έκανε.
Πάω να επαναληφθεί a.out.
Ανακοίνωση Έχω προσθέσει το αλλαγή γραμμής πίσω χαρακτήρα.
Έχω αποθηκεύσει το αρχείο.
>> Έτσι, Πάω να επαναληφθεί a.out, and-- διάολε, ένα bug, ένα bug που σημαίνει λάθος.
Έτσι, το σφάλμα είναι ότι ακόμα κι αν Πρόσθεσα την ανάστροφη κάθετο n εκεί,
εκ νέου σωθεί, εκ νέου έτρεξε το πρόγραμμα, η συμπεριφορά ήταν το ίδιο.
Γιατί θα ήταν αυτό;
>> Είμαι λείπει ένα βήμα, έτσι δεν είναι;
Ότι βασικό βήμα νωρίτερα ήταν ότι έχετε to-- όταν αλλάζετε τον πηγαίο κώδικα σας,
αποδεικνύεται επίσης να εκτελέσετε μέσω του compiler
και πάλι έτσι μπορείτε να πάρετε νέο κώδικα μηχανής.
Και ο κώδικας της μηχανής, τα μηδενικά και μονάδες,
πρόκειται να είναι σχεδόν όμοια, αλλά όχι τέλεια, διότι χρειαζόμαστε,
Φυσικά, η νέα γραμμή.
>> Έτσι για να το διορθώσετε αυτό, Πάω να χρειαστεί να επαναληφθεί clanghello.c, εισάγετε, τελεία
κάθετος, a.out.
Και τώρα, γεια σου κόσμος είναι πίσω όπου περιμένω να είναι.
Έτσι, αυτό είναι όλα ωραία και καλά.
Αλλά a.out είναι ένα πολύ ηλίθιο όνομα για ένα πρόγραμμα, αν και συμβαίνει να είναι,
για ιστορικούς λόγους, η default-- σημαίνει εξόδους συναρμολόγησης.
>> Αλλά επιτρέψτε μου να προχωρήσει εδώ και να το κάνουμε αυτό με διαφορετικό τρόπο.
Θέλω γεια κόσμο μου πρόγραμμα πραγματικά να ονομάζεται γεια.
Έτσι, αν ήταν ένα εικονίδιο στην μου επιφάνεια εργασίας, δεν θα πρέπει να a.out.
Θα πρέπει να ονομάζεται γεια.
>> Έτσι για να το κάνετε αυτό, αποδεικνύεται ότι Clang, όπως πολλά προγράμματα,
υποστηρίζει τα επιχειρήματα της γραμμής εντολών, ή σημαίες ή διακόπτες,
που απλώς επηρεάζουν τη συμπεριφορά του.
Συγκεκριμένα, Clang υποστηρίζει μια εξόρμηση o σημαία, τα οποία στη συνέχεια παίρνει μια δεύτερη λέξη.
Σε αυτήν την περίπτωση, θα αυθαίρετα, αλλά λογικά, αποκαλούν γεια.
Αλλά θα μπορούσα να το ονομάσουμε κάτι Θέλω, εκτός a.out, η οποία
Θα ήταν μάλλον εκτός από το σημείο.
>> Και στη συνέχεια απλά να καθορίσετε το όνομα του αρχείου που θέλετε να μεταγλωττίσετε.
Έτσι τώρα, ακόμη και αν στην αρχή της εντολής έχω ακόμα Clang,
στο τέλος της εντολής Εξακολουθώ να έχω το όνομα του αρχείου,
Τώρα έχω αυτά της γραμμής εντολών επιχειρήματα, αυτές οι σημαίες που λένε,
Ω, από τον τρόπο, έξοδος-o, ένα αρχείο που ονομάζεται γεια, δεν είναι η προεπιλογή a.out.
>> Έτσι, αν χτύπησα Εισάγετε τώρα, τίποτα φαίνεται να έχουν συμβεί.
Και, όμως, τώρα μπορώ να κάνω dot κάθετος γεια.
Έτσι είναι το ίδιο πρόγραμμα.
Τα μηδενικά και αυτοί είναι ταυτόσημες στο τέλος της ημέρας.
>> Αλλά είναι σε δύο διαφορετικά files-- a.out,
η οποία είναι η πρώτη έκδοση και μόλις ανόητα ονομάζεται,
και τώρα γειά σου, η οποία είναι μια πολύ πιο συναρπαστικό όνομα για ένα πρόγραμμα.
Αλλά, ειλικρινά, είμαι ποτέ πρόκειται να το θυμάστε αυτό και πάλι,
και ξανά, και ξανά.
Και, στην πραγματικότητα, όπως γράφουμε πιο πολύπλοκα προγράμματα,
οι εντολές είστε Θα πρέπει να γράψετε
πρόκειται να πάρει ακόμη πιο περίπλοκη ακόμα.
>> Και έτσι για να μην ανησυχείτε.
Αποδεικνύεται ότι οι άνθρωποι πριν μας έχουν συνειδητοποιήσει ότι είναι πολύ
είχε ακριβώς το ίδιο πρόβλημα.
Και αυτοί δεν απολαμβάνουν να χρειάζεται να πληκτρολογήστε αρκετά μεγάλο, απόκρυφες εντολές,
πόσο μάλλον να τους θυμόμαστε.
Και έτσι οι άνθρωποι πριν από εμάς έχουν κάνει άλλα προγράμματα που διευκολύνουν
για την κατάρτιση του λογισμικού σας.
>> Και, πράγματι, ένας τέτοιος πρόγραμμα ονομάζεται Make.
Έτσι, Πάω να προχωρήσει και να το κάνουμε αυτό.
Πάω να αναιρέσετε ό, τι ακριβώς έκανε με τον ακόλουθο τρόπο.
Επιτρέψτε μου να πληκτρολογήσετε LS.
Και θα παρατηρήσετε τρεις things-- a.out, και ένα αστέρι, γεια
και ένα αστέρι, και hello.c.
Ας ελπίσουμε ότι αυτό θα πρέπει να είναι λίγο διαισθητική,
εφόσον νωρίτερα υπήρχε τίποτα σε αυτόν τον χώρο εργασίας.
Δεν υπήρχε τίποτα που είχα δημιουργήθηκε μέχρι να αρχίσει κατηγορία.
>> Και έχω δημιουργήσει hello.c.
Στη συνέχεια θα καταρτίζονται, και το ονόμασε a.out.
Και τότε μου συγκεντρώνονται και πάλι ελαφρώς με διαφορετικό τρόπο και ονομάζεται γεια.
Έτσι έχω τρία αρχεία σε αυτόν τον κατάλογο, σε αυτόν το φάκελο που ονομάζεται Workspace.
Τώρα, βλέπω ότι, καθώς αν σμίκρυνση πραγματικότητα.
>> Αν μου σμίκρυνση εδώ και κοίτα πάνω δεξιά πλευρά
γωνία, όπως είχε υποσχεθεί η αριστερά πλευρά της οθόνης σας
πρόκειται πάντα να σας δείξω τι είναι στο λογαριασμό σας, τι είναι
εσωτερικό του CS50 IDE.
Και υπάρχει τρία αρχεία εκεί.
>> Θέλω, λοιπόν, να απαλλαγούμε από a.out και γειά σου.
Και όπως ίσως φανταστείτε διαισθητικά, θα
θα μπορούσε να ταξινομήσετε του ελέγχου κλικ ή κάντε δεξί κλικ σε αυτό.
Και αυτό το μικρό μενού αναδύεται.
Μπορείτε να κατεβάσετε το αρχείο, εκτελέστε αυτό, προεπισκόπηση, ανανεώνουν, να μετονομάσετε,
ή τι όχι.
>> Και θα μπορούσα απλά να διαγράψετε, και θα πάει μακριά.
Αλλά ας κάνουμε τα πράγματα με μια εντολή γραμμή για τώρα, έτσι ώστε να πάρει άνετα
με αυτό, και να κάνουμε το εξής.
Πάω να πάει μπροστά και να αφαιρέσετε a.out πληκτρολογώντας κυριολεκτικά rma.out.
Αποδεικνύεται, την εντολή για αφαίρεση ή διαγραφή κάτι,
δεν είναι αφαιρέσετε ή να διαγράψετε.
>> Είναι πιο συνοπτικά RM, απλά για να σώσει σας μερικές πληκτρολογήσεις, και πατήστε Enter.
Τώρα θα πάμε να είναι κάπως κρυφά αφαιρέσετε τακτική a.out αρχείο.
Δεν ξέρω πραγματικά τι ένα ακανόνιστο αρχείο θα είναι ακόμα.
Αλλά θέλω να το αφαιρέσετε.
>> Έτσι, Πάω να y τύπου για ναι.
Ή θα μπορούσα να το πληκτρολογήσετε και πατήστε Enter.
Και, πάλι, τίποτα δεν φαίνεται να συμβαίνει.
Αλλά αυτό είναι, σε γενικές γραμμές, ένα καλό πράγμα.
>> Αν έχω πληκτρολογήστε LS αυτή τη φορά, τι πρέπει να δω;
Ας ελπίσουμε, μόνο γεια και hello.c.
Τώρα, ως ένα μέρος, θα παρατηρήσετε αυτό το αστέρι, αστερίσκος,
ότι στο τέλος των προγραμμάτων μου.
Και είναι επίσης εμφανίζονται με πράσινο χρώμα.
Αυτός είναι ακριβώς ο τρόπος CS50 IDE του της cluing σας στο γεγονός
ότι αυτό δεν είναι πηγαίο κώδικα.
Αυτό είναι ένα εκτελέσιμο, μια εκτελέσιμη πρόγραμμα που μπορείτε πραγματικά να τρέξει
κάνοντας dot κάθετος, και στη συνέχεια το όνομά της.
>> Τώρα, επιτρέψτε μου να πάει μπροστά και να αφαιρέσετε αυτό, RM γεια, Enter, αφαιρέστε την τακτική
αρχείο γεια, ναι.
Και τώρα αν πληκτρολογήσετε LS, είμαστε πίσω στο hello.c.
Προσπαθήστε να μην διαγράψετε σας τον πηγαίο κώδικα.
Ακόμα κι αν υπάρχουν δυνατότητες ενσωματωμένη στο CS50 IDE όπου
μπορείτε να πάτε μέσα από την ιστορία αναθεώρησης σας και rewind στο χρόνο, αν κατά λάθος
διαγράψετε κάτι, το κάνουμε να είναι προσεκτικοί σύμφωνα με αυτές τις προτροπές ναι ή όχι,
για το τι πραγματικά θέλετε να κάνετε.
Και αν πάω μέχρι την κορυφή αριστερή γωνία εδώ,
το μόνο που απομένει είναι hello.c.
Έτσι υπάρχει ματσάκια άλλες εντολές που
μπορεί να εκτελέσει στον κόσμο του Linux, ένα εκ των οποίων είναι, και πάλι, Μάρκα.
Και θα πάμε για να βγάλουν πρόγραμμά μου τώρα ως εξής.
>> Αντί να κάνει κλαγγή, αντί να κάνει κλαγγή-o,
Πάω να απλά κυριολεκτικά τύπου, κάνουν γεια.
Και τώρα παρατηρήσετε, είμαι Δεν πληκτρολογώντας κάνουν hello.c.
Είμαι πληκτρολογώντας make γεια.
>> Και αυτό το πρόγραμμα Βεβαιωθείτε ότι έρχεται με CS50 IDE, και πολλά άλλα
γενικά με το Linux, είναι ένα πρόγραμμα που είναι
πρόκειται να κάνει ένα πρόγραμμα που ονομάζεται Hello.
Και πρόκειται να αναλάβει, κατά συνθήκη, ότι, αν μπορεί να γίνει αυτό το πρόγραμμα,
πρόκειται να γίνει από μια πηγή αρχείο κώδικα που τελειώνουν σε τελεία γ, hello.c.
>> Έτσι, αν χτύπησα Εισάγετε τώρα, παρατηρήστε ότι η εντολή που παίρνει εκτελεστεί
είναι στην πραγματικότητα ακόμη περισσότερο πριν από ό, τι πριν.
Και αυτό γιατί έχουμε προρυθμισμένο CS50 IDE να έχουν
κάποια επιπλέον χαρακτηριστικά που χτίστηκε το ότι δεν χρειαζόμαστε λίγο ακόμα, αλλά σύντομα θα.
Αλλά το βασικό πράγμα που πρέπει να συνειδητοποιήσουμε Είναι τώρα έχω ένα πρόγραμμα Hello.
>> Αν μου πληκτρολογήσετε ξανά LS, Ι έχουν ένα πρόγραμμα γεια.
Και μπορώ να το τρέξει με dot κάθετος a.out, όχι,
επειδή το όλο θέμα αυτό άσκηση ήταν dot γεια κάθετος.
Και τώρα έχω γεια κόσμο μου πρόγραμμα.
Έτσι κινείται προς τα εμπρός, είμαστε σχεδόν πάντα απλά
πρόκειται για την κατάρτιση των προγραμμάτων μας χρησιμοποιώντας την εντολή make.
Και μετά θα πάμε να τους τρέξει από dot κάθετος, και το όνομα του προγράμματος.
Αλλά συνειδητοποιούν αυτό που κάνει το κάνει για σας, είναι ότι είναι μόνη της δεν είναι ένα compiler.
Είναι απλά ένα πρόγραμμα ευκολία ότι ξέρει πώς να προκαλέσει μια compiler
να τρέξει, ώστε να μπορείτε μόνοι σας να το χρησιμοποιήσετε.
>> Τι υπάρχουν και άλλες εντολές στο Linux, και με τη σειρά του το CS50 IDE;
Σύντομα θα δούμε ότι υπάρχει μια εντολή CD, Αλλαγή Directory.
Αυτό σας επιτρέπει μέσα διεπαφή γραμμής εντολών σας
να προχωρήσουμε μπροστά, και πίσω, και να ανοίξει διαφορετικούς φακέλους
χωρίς τη χρήση του ποντικιού σας.
>> LS είδαμε, η οποία αντιπροσωπεύει για τη λίστα τα αρχεία στον τρέχοντα κατάλογο.
Κάντε Dir, μπορείτε πιθανόν να αρχίσει να συμπεράνουμε
τι σημαίνουν αυτά now-- κάνει τον κατάλογο, εάν θέλετε να δημιουργήσετε ένα φάκελο.
RM για αφαίρεση, RM Dir για αφαιρέστε directory-- και αυτά,
και πάλι, είναι η γραμμή εντολών ισοδύναμα τι
θα μπορούσε να κάνει σε CS50 IDE με το ποντίκι σας.
Αλλά σύντομα θα βρείτε ότι μερικές φορές είναι απλά
πολύ πιο γρήγορα για να κάνει τα πράγματα με ένα πληκτρολόγιο,
και τελικά μια πολύ πιο ισχυρή.
>> Αλλά είναι δύσκολο να υποστηρίξει κανείς ότι η οτιδήποτε έχουμε κάνει μέχρι τώρα
είναι ότι οι ισχυροί, όταν όλα έχουμε πει είναι, γεια κόσμο.
Και, στην πραγματικότητα, είναι ενσωματωμένες η λέξεις Hello World στο πρόγραμμά μου.
Δεν υπάρχει δυναμισμό ακόμα.
Scratch ήταν μια τάξη μεγέθους πιο ενδιαφέρουσα την περασμένη εβδομάδα.
>> Και έτσι ας φτάσει εκεί.
Ας κάνουμε ένα βήμα προς την κατεύθυνση ότι με την τρόπος μερικών από αυτές τις λειτουργίες.
Έτσι, όχι μόνο δεν C έρχονται με printf, και τσαμπιά από άλλες λειτουργίες
μερικά από τα οποία θα δούμε πάροδο του χρόνου, αυτό δεν γίνεται
κάνουν όλα τόσο εύκολο δεξιά έξω από την πύλη για να πάρει εισόδου του χρήστη.
>> Στην πραγματικότητα, μια από τις αδυναμίες γλώσσες όπως η C,
και ακόμη και Java και ακόμα άλλους, είναι ότι δεν
να είναι εύκολο να πάρει ακριβώς τα πράγματα όπως ακέραιοι από τους χρήστες, ή χορδές, λόγια,
και φράσεις, πόσο μάλλον τα πράγματα όπως κινητής υποδιαστολής αξίες, ή πραγματικούς αριθμούς
με δεκαδικά ψηφία, και πραγματικά μακρά αριθμούς, όπως θα δούμε σύντομα.
Έτσι, αυτός ο κατάλογος των λειτουργιών εδώ, αυτά είναι όπως και τα άλλα κομμάτια του παζλ Scratch
ότι έχουμε προ-εγκατεστημένο στο CS50 IDE που θα χρησιμοποιήσουμε για μερικές εβδομάδες
ως βοηθητικές ρόδες των ειδών, και τελικά να απογειωθεί, και να εξετάσουμε
κάτω από την κουκούλα, ίσως, πώς υλοποιούνται αυτά τα πράγματα.
>> Αλλά για να γίνει αυτό, ας στην πραγματικότητα γράψετε ένα πρόγραμμα.
Επιτρέψτε μου να προχωρήσει τώρα.
Και Πάω να δημιουργήσετε ένα νέο αρχείο κάνοντας κλικ σε αυτό το μικρό συν,
και κάνοντας κλικ νέο αρχείο.
>> Πάω να σώσει αυτό το επόμενο το ένα ως, ας πούμε, string.c,
γιατί θέλω να παίξω με χορδές.
Και κορδόνι σε C είναι ακριβώς μία ακολουθία χαρακτήρων.
Έτσι τώρα ας πάμε μπροστά και να κάνει τα εξής.
>> Περιλαμβάνει τις τυποποιημένες IO.h-- και αποδεικνύεται πρότυπο IO,
IO σημαίνει απλώς εισόδου και εξόδου.
Έτσι αποδεικνύεται ότι Αυτή η γραμμή εδώ είναι ό, τι
είναι το να μας γειτονική να χρησιμοποιήσει printf.
Printf, φυσικά, παράγει έξοδο.
Έτσι, προκειμένου να χρησιμοποιήσει printf, αποδεικνύεται έξω πρέπει να έχετε αυτή τη γραμμή κώδικα
στο επάνω μέρος του αρχείου σας.
>> Και θα έρθει πίσω σε ό, τι αυτό σημαίνει ότι πραγματικά πριν από καιρό.
Αποδεικνύεται ότι σε οποιοδήποτε πρόγραμμα C που γράφω,
Έχω να το ξεκινήσετε με κώδικα που μοιάζει με αυτό.
Και θα παρατηρήσετε CS50 IDE, και άλλα ολοκληρωμένη ανάπτυξη
περιβάλλοντα, όπως αυτό, Θα προσπαθήσουμε όσο καλύτερα
μπορούν να ολοκληρώσετε τη σκέψη σας.
Στην πραγματικότητα, πριν από λίγο, αν μπορώ να αναιρέσω ό, τι ακριβώς έκανα, πατήστε Enter.
>> Στη συνέχεια χτύπησε ανοιχτά σγουρά τιράντες, πατήστε Enter και πάλι.
Και τελείωσε η σκέψη μου.
Μου έδωσε μια νέα γραμμή, εσοχή όχι λιγότερο για ωραία στιλιστική λόγους θα δούμε.
Και τότε μου έδωσε αυτόματα ότι σγουρά κηδεμόνα να τελειώσω τη σκέψη μου.
Τώρα, αυτό δεν είναι πάντα μάντεψε τι θέλετε να κάνετε.
Αλλά σε μεγάλο μέρος, το κάνει μπορείτε να αποθηκεύσετε μερικές πληκτρολογήσεις.
Έτσι, πριν από λίγο, τρέξαμε αυτό program-- γειά σου, τον κόσμο, και στη συνέχεια να συντάξει,
και στη συνέχεια έτρεξε.
Αλλά δεν υπάρχει δυναμισμός εδώ.
Τι θα συμβεί αν θέλαμε να κάνω κάτι διαφορετικό;
Λοιπόν, τι αν ήθελα πραγματικά να να πάρετε μια σειρά από το χρήστη;
Πάω να χρησιμοποιήσετε ένα κομμάτι του παζλ που ονομάζεται ακριβώς ερμήνευα-- πάρει εγχόρδων.
>> Βγάζει σε C ότι όταν δεν θέλετε να συνεισφέρουν σε ένα κομμάτι του παζλ,
ή πιο σωστά σε μια λειτουργία, θα κυριολεκτικά ακριβώς κάνει ανοιχτή παρένθεση,
κοντά παρένθεση.
Έτσι είναι σαν να υπάρχει δεν άσπρο κουτί για να πληκτρολογήσετε σε.
Το μπλοκ ας πούμε, πριν είχε ένα μικρό άσπρο κουτί.
Δεν έχουμε αυτό το άσπρο κουτί τώρα.
>> Αλλά όταν καλώ εγχόρδων πάρει, εγώ θέλετε να βάλετε το αποτέλεσμα κάπου.
Έτσι, ένα πολύ κοινό παράδειγμα σε C είναι να καλέσετε μια συνάρτηση, όπως εγχόρδων φτάσετε εδώ,
και στη συνέχεια να αποθηκεύσετε τιμή επιστροφής της.
Είναι το αποτέλεσμα της της προσπάθεια σε κάτι.
>> Και ποια είναι η κατασκευάσει στον προγραμματισμό,
είτε στο Ξυστό ή τώρα C, ώστε να μπορεί να χρησιμοποιήσει για να αποθηκεύσει πραγματικά κάτι;
Ονόμασε μια μεταβλητή, έτσι δεν είναι;
Και στο Scratch, εμείς δεν κάνουμε πραγματικά με νοιάζει τι συνέβαινε στις μεταβλητές.
>> Αλλά σε αυτή την περίπτωση, μπορούμε πραγματικά να κάνουμε.
Πάω να πω εγχόρδων.
Και τότε θα μπορούσα να καλέσετε αυτό το κάτι που θέλω.
Πάω να το ονομάσουμε όνομα, παίρνει πάρει εγχόρδων.
>> Και τώρα ακόμα και αν είστε λίγο νέος σε αυτό,
παρατηρήσετε ότι είμαι λείπουν κάποιες λεπτομέρειες.
Είμαι ξεχνώντας μια άνω τελεία.
Θέλω να τελειώσω αυτή τη σκέψη.
Έτσι, Πάω να μετακινήσετε τον κέρσορα μου, και χτύπησε άνω τελεία εκεί.
Και τι έχω ακριβώς κάνει;
Σε αυτή τη γραμμή του κώδικα, αριθμός 5 στο παρόν,
Είμαι καλώντας κορδόνι get χωρίς εισόδους.
Έτσι, δεν υπάρχει λίγο άσπρο κουτί, όπως η Save μπλοκ έχει.
>> Απλά λέω, hey, υπολογιστή, φέρε μου ένα string.
Το σύμβολο της ισότητας δεν είναι πραγματικά ένα σύμβολο της ισότητας, per se.
Είναι η εκχώρηση χειριστή, πράγμα που σημαίνει,
hey, υπολογιστή, μετακινήστε την τιμή από τη δεξιά πάνω προς τα αριστερά.
Και στο αριστερό, έχω το εξής.
>> Γεια σου, υπολογιστή, να μου δώσει μια string-- μία ακολουθία χαρακτήρων.
Και να καλέσει αυτό το αλφαριθμητικό όνομα.
Και δεν χρειάζεται καν να το ονομάσουμε Όνομα.
>> Θα μπορούσα να το ονομάσουμε, συμβατικά, κάτι σαν S,
πολύ όπως εμείς i χρησιμοποιείται για να καλέστε Η μεταβλητή i.
Αλλά τώρα πρέπει να κάνω κάτι με αυτό.
Θα ήταν πολύ ανόητο να δοκιμάστε την κατάρτιση αυτού του κώδικα, το τρέξιμο
Αυτό το πρόγραμμα, ακόμα και αν Παίρνω ένα string,
γιατί ακόμα είναι απλά πρόκειται να πω ένα γεια κόσμο.
>> Αλλά τι γίνεται αν θέλω να το αλλάξουμε αυτό.
Γιατί δεν μπορώ να το κάνω αυτό;
Ποσοστό s, κόμμα s.
Και αυτό είναι λίγο αινιγματικό ακόμα.
>> Έτσι, επιτρέψτε μου να κάνω μεταβλητές μου πιο σαφής.
Επιτρέψτε μου να ονομάσει αυτό το όνομα μεταβλητής.
Και ας δούμε αν δεν μπορούμε να πειράζω εκτός τι συμβαίνει εδώ.
>> Έτσι, στη γραμμή πέντε, παίρνω ένα string.
Και είμαι αποθήκευση της σειράς, ό, τι ο χρήστης έχει πληκτρολογήσει
στο πληκτρολόγιό του, σε μια μεταβλητή που ονομάζεται Όνομα.
Και αποδεικνύεται ότι printf κάνει όχι μόνο
πάρτε ένα επιχείρημα σε δίκλινο εισαγωγικά, μία είσοδο σε διπλά εισαγωγικά.
>> Μπορεί να πάρει δύο, ή τρία, ή περισσότερα, όπως ότι η δεύτερη ή τρίτη, ή τέταρτη,
είναι όλα τα ονόματα των μεταβλητών, ή ειδικά αξίες,
που θέλετε να συνδέσετε σε, δυναμικά, αυτή η συμβολοσειρά σε εισαγωγικά.
Με άλλα λόγια, ό, τι θα ήταν λάθος με αυτό;
Αν μόλις είπα γειά σου όνομα, backslash n, αποθηκευμένο αρχείο μου, μεταγλωττισμένο κώδικα μου,
και έτρεξε αυτό, τι θα συμβεί;
>> Είναι ακριβώς πρόκειται να πω, γεια όνομα, κυριολεκτικά Ν-Α-Μ-Ε,
που είναι κάπως ανόητο, διότι δεν είναι κανένας διαφορετικός από τον κόσμο.
Έτσι τίποτα σε εισαγωγικά είναι τι κυριολεκτικά παίρνει εκτυπωθεί.
Έτσι, αν θέλω να έχω ένα σύμβολο κράτησης θέσης εκεί,
Εγώ πραγματικά πρέπει να χρησιμοποιήσετε κάποια ειδική σύνταξη.
Και αποδεικνύεται αν έχετε διαβάσει το τεκμηρίωση για τη λειτουργία printf,
θα σας πω ότι αν χρησιμοποιείτε τοις εκατό s,
μπορείτε να αντικαταστήσετε μια τιμή ως εξής.
>> Μετά από ένα κόμμα μετά από αυτό διπλά εισαγωγικά, μπορείτε απλά
γράψει το όνομα του μεταβλητή που θέλετε
για να συνδέσετε σε αυτή τη μορφή κώδικα, ή σε μορφή προσδιοριστή,
τοις εκατό s για έγχορδα.
Και τώρα, αν έχω αποθηκεύσει το αρχείο μου, Έχω πάει πίσω στο τερματικό μου.
Και εγώ πληκτρολογήστε Κάντε String, γιατί, και πάλι, το όνομα αυτό
αρχείο που επέλεξα πριν είναι string.c.
>> Έτσι, Πάω να πω Κάντε String, πληκτρολογήστε.
Ω Θεέ μου, κοίτα όλα τα λάθη που έχουμε κάνει ήδη.
Και αυτό is-- αυτό, αυτό είναι πραγματικά σαν ένα, επτά πρόγραμμα έξι γραμμή;
Έτσι, αυτό είναι όπου μπορεί πολύ γρήγορα να πάρει συντριπτική.
>> Αυτό το παράθυρο τερματικού έχει τώρα μόλις αναμασημένων
ένας τεράστιος αριθμός των μηνυμάτων λάθους.
Σίγουρα, δεν έχω περισσότερα σφάλμα μηνύματα από ό, τι έχω γραμμές κώδικα.
Λοιπόν, τι συμβαίνει;
>> Λοιπόν, η καλύτερη στρατηγική να κάνει ανά πάσα στιγμή να
να αντιμετωπίσετε μια συντριπτική κατάλογος των λαθών, όπως ότι,
είναι μετακινηθείτε πίσω, αναζητήστε την εντολή απλά έτρεξε, η οποία στην περίπτωσή μου
είναι η δημιουργία της συμβολοσειράς.
Κοιτάξτε τι κάνει το έκανε, και αυτό είναι ότι μακρά Clang εντολή, δεν είναι μεγάλη υπόθεση εκεί.
>> Αλλά το κόκκινο είναι κακό.
Πράσινο προσπαθεί να είναι ήπια και εξυπηρετικό.
Αλλά είναι ακόμα κακό, σε αυτή την περίπτωση.
Αλλά πού είναι το κακό;
>> String.c, γραμμή πέντε, χαρακτήρας πέντε.
Έτσι, αυτό είναι μόνο η κοινή σύμβαση.
κάτι κάτι παχέος εντέρου σημαίνει αριθμό γραμμής και τον αριθμό του χαρακτήρα.
Σφάλματος, η χρήση της αδήλωτης συμβολοσειρά αναγνωριστικού.
Μήπως εννοείτε πρότυπο;
>> Έτσι, δυστυχώς, Clang προσπαθεί να είναι χρήσιμη.
Αλλά είναι λάθος, σε αυτή την περίπτωση.
Όχι, Clang, εγώ δεν σημαίνει πρότυπο IO.
Θα σήμαινε ότι σε μία γραμμή, ναι.
>> Αλλά γραμμή πέντε είναι αυτό εδώ.
Και Clang δεν κατανοήσουν S-Τ-Ρ-Ι-Ν-G.
Είναι μια αδήλωτη αναγνωριστικό, ένα λέξη απλά δεν έχει δει ποτέ πριν.
Και αυτό γιατί C, η γλώσσα γράφουμε κώδικα σε αυτή τη στιγμή,
δεν έχει μεταβλητές που ονομάζεται χορδές.
>> Δεν το κάνει, από προεπιλογή, η υποστήριξη κάτι που ονομάζεται ένα string.
Αυτό είναι ένα κομμάτι CS50 της ορολογία, αλλά πολύ συμβατική.
Αλλά μπορώ να το διορθώσω αυτό ως εξής.
>> Αν μπορώ να προσθέσω μία γραμμή κώδικα στην κορυφή του εν λόγω προγράμματος,
περιλαμβάνουν CS50.h, το οποίο είναι ένα άλλο αρχείο κάπου μέσα του CS50 IDE, κάπου
στο σκληρό δίσκο, να το πω έτσι, του λειτουργικού συστήματος Ubuntu
ότι Τρέχω, ότι είναι το αρχείο που είναι
πρόκειται να διδάξουν το λειτουργικό σύστημα τι ένα string είναι, απλά
σαν πρότυπο io.h είναι το αρχείο στο λειτουργικό σύστημα που είναι
πρόκειται να το διδάξει τι printf είναι.
>> Πράγματι, θα είχαμε πάρει ένα πολύ παρόμοιο μήνυμα
αν IO είχε παραδεχθεί πρότυπο IO.h και προσπάθησε να χρησιμοποιήσει printf.
Έτσι, Πάω να πάει μπροστά και μόλις Πάρτε τον έλεγχο L για να καθαρίσετε την οθόνη μου.
Ή μπορείτε να πληκτρολογήσετε σαφής και θα απλώς καθαρίστε το παράθυρο τερματικού.
Αλλά μπορείτε ακόμα να μετακινηθείτε προς τα πίσω στο χρόνο.
>> Και Πάω να επαναληφθεί Κάντε String.
Διασχίζουν τα δάχτυλά μου αυτή τη φορά, Enter.
Θεέ μου, δούλεψε.
Μου δείχνει ένα μακρύ αινιγματική εντολή ότι είναι αυτό που κάνει δημιουργείται μέσω Clang,
αλλά χωρίς μηνύματα λάθους.
Έτσι συνειδητοποιήσει, ακόμη και αν μπορείτε να πάρετε εντελώς
συγκλονισμένοι με το σειρά από μηνύματα λάθους,
αυτό ακριβώς μπορεί να είναι αυτό το ενοχλητικό υπερχείλιση επίδραση, όπου Clang δεν καταλαβαίνει
ένα πράγμα, το οποίο σημαίνει ότι τότε δεν καταλαβαίνει την επόμενη λέξη,
ή η επόμενη γραμμή.
Και γι 'αυτό ακριβώς πνίγει για τον κωδικό σας.
Αλλά η λύση θα μπορούσε να είναι απλή.
Και έτσι πάντα έμφαση στην ο πρώτη γραμμή της εξόδου.
Και αν δεν το κάνετε καταλαβαίνω, απλά κοιτάξτε
για λέξεις-κλειδιά που θα μπορούσαν να ενδείξεις, και ο αριθμός της γραμμής,
και ο χαρακτήρας, όπου αυτό το λάθος μπορεί να είναι.
>> Τώρα, επιτρέψτε μου να προχωρήσει και πληκτρολογήστε dot κάθετος, string, εισάγετε.
Χμ, δεν είναι λέει γεια τίποτα.
Γιατί;
Λοιπόν, θυμάστε, όπου τρέχει;
>> Είναι πιθανόν να κολλήσει αυτή τη στιγμή σε ένα βρόχο, αν θέλετε, στη γραμμή έξι,
επειδή Πάρτε String από το σχεδιασμό, γράφτηκε από τον προσωπικό του CS50,
είναι κυριολεκτικά σήμαινε απλά να καθίσετε περιμένουν εκεί, και να περιμένει,
και η αναμονή για ένα string.
Όλα εννοούμε με κορδόνι είναι ανθρώπινο εισόδου.
Έτσι, ξέρετε τι;
Επιτρέψτε μου να πάει μπροστά.
Και ακριβώς σε μια ιδιοτροπία, επιτρέψτε μου πληκτρολογήστε το όνομά μου, Ντέιβιντ, εισάγετε.
Τώρα έχω ένα πιο δυναμικό πρόγραμμα.
Είπε, γεια Δαβίδ.
>> Αν πάω μπροστά και να εκτελέσετε αυτό και πάλι, επιτρέψτε μου να προσπαθήσω να πω το όνομά Zamila, εισάγετε.
Και τώρα έχουμε ένα δυναμικό πρόγραμμα.
Δεν έχω σκληρά κωδικοποιημένο κόσμο.
Δεν έχω σκληρά κωδικοποιημένες το όνομα, ή Δαβίδ, ή Zamila.
>> Τώρα είναι πολύ περισσότερο σαν τα προγράμματα γνωρίζουμε, όπου και αν λάβει εισόδου,
παράγει ελαφρώς διαφορετική έξοδο.
Τώρα, αυτό δεν είναι η καλύτερη εμπειρία του χρήστη, ή UX.
Τρέχω το πρόγραμμα.
>> Δεν ξέρω τι είμαι υποτίθεται να κάνουμε, εκτός κι αν πραγματικά εξετάσουμε
ή να θυμηθείτε τον πηγαίο κώδικα.
Ας κάνει ο χρήστης ζήσετε λίγο καλύτερα
με τον απλούστερο των πραγμάτων.
Επιτρέψτε μου να επιστρέψω σε αυτό το πρόγραμμα, και απλά να πω printf.
>> Και επιτρέψτε μου να πάει μπροστά και να πει το όνομα, του παχέος εντέρου, και χώρο, και στη συνέχεια μια άνω τελεία.
Και μόνο για κλωτσιές, καμία αντίδραση Ν.
Και αυτό είναι σκόπιμη, γιατί δεν θέλω
η προτροπή για να μετακινηθείτε στην επόμενη γραμμή.
>> Θέλω να, αντ 'αυτού, να το κάνετε αυτό, κάντε εγχόρδων να ξαναμεταγλωττίσετε τον κωδικό μου σε νέο μηχάνημα
Κωδικός dot κάθετος εγχόρδων.
Αχ, αυτό είναι πολύ πιο όμορφη.
Τώρα ξέρει πραγματικά τι ο υπολογιστής Θέλει να κάνω, να του δώσετε ένα όνομα.
>> Έτσι, Πάω να πάει μπροστά και πληκτρολογήστε στο Rob, εισάγετε, και γειά σου, Ρομπ.
Έτσι, συνειδητοποιήσει, αυτό εξακολουθεί να είναι, στο τέλος της ημέρας, μόνο ένα πρόγραμμα εννέα γραμμή.
Αλλά έχουμε πάρει αυτά τα βήματα του μωρού.
>> Γράψαμε μία γραμμή με την οποία ήταν εξοικειωμένοι, printf, γεια κόσμο.
Τότε ηνάτρεψε λίγο αυτό.
Και εμείς πράγματι χρησιμοποιήσει εγχόρδων get.
Και εμείς πέταξε αυτή την τιμή σε μια μεταβλητή.
Και μετά πήγαμε μπροστά και να βελτιωθεί ότι περαιτέρω με μια τρίτη γραμμή.
Και αυτή η επαναληπτική διαδικασία της γράφοντας λογισμικό είναι πραγματικά το κλειδί.
Στο CS50, και στη ζωή γενικά, θα πρέπει γενικά να μην καθίσει,
έχουν ένα πρόγραμμα στο μυαλό, και να προσπαθήσουμε εγγράφως το όλο πράγμα βλασφημίας όλα με τη μία.
>> Θα είναι, αναπόφευκτα, έχουν ως αποτέλεσμα τον τρόπο περισσότερα λάθη από ό, τι εμείς οι ίδιοι είδαμε εδώ.
Ακόμη και εγώ, σε αυτήν την ημέρα, συνεχώς κάνουν άλλα ηλίθια λάθη,
είναι πραγματικά δύσκολο λάθη που είναι πιο δύσκολο να καταλάβω.
Αλλά θα κάνουν περισσότερα λάθη το περισσότερο γραμμές κώδικα που γράφετε όλα με τη μία.
Και έτσι αυτή η πρακτική της, γράψει ένα μικρό κομμάτι του κώδικα
ότι είστε άνετοι με, συγκεντρώνουν αυτό, να τρέξει, δοκιμάστε το γενικότερα,
στη συνέχεια να προχωρήσουμε on-- έτσι ακριβώς όπως κρατήσαμε layering και layering την περασμένη εβδομάδα,
κτίριο από κάτι πολύ απλό σε κάτι πιο σύνθετο,
κάνει το ίδιο εδώ.
Μην κάθεστε, και να προσπαθήσουμε να γράψει ένα ολόκληρο πρόβλημα.
Στην πραγματικότητα κάνει αυτά τα βήματα του μωρού.
>> Τώρα, χορδές δεν είναι όλα ότι χρήσιμο για τον εαυτό τους.
Είχαμε πράγματι, στην ιδανική περίπτωση, όπως και σε έχουν κάτι άλλο στο εργαλειοθήκη μας.
Οπότε ας πραγματικότητα κάνουν ακριβώς αυτό.
>> Επιτρέψτε μου να προχωρήσει τώρα και μαστίγιο μέχρι ένα ελαφρώς διαφορετικό πρόγραμμα.
Και εμείς θα ονομάζουμε int.c, για ακέραιο αριθμό.
Πάω να, ομοίως, περιλαμβάνουν CS550.h.
Πάω να περιλαμβάνει τις τυποποιημένες IO.
Και αυτό πρόκειται να είναι αρκετά κοινό σε αυτές τις πρώτες ημέρες της κατηγορίας.
>> Και Πάω να είναι έτοιμη τον εαυτό μου με μια κύρια λειτουργία.
Και τώρα αντί να πάρει μια σειρά, ας πάμε μπροστά και να πάρει μια int.
Ας το ονομάσουμε i, και καλέστε το πάρει int, κοντά παρενθέσεις, άνω τελεία.
Και τώρα ας κάνουμε κάτι με αυτό, printf.
>> Ας πούμε κάτι σαν Γεια σας, backslash n, κόμμα i.
Έτσι είμαι λίγο πολύ μιμούνται ό, τι έκανα πριν από λίγο.
Έχω ένα σύμβολο κράτησης θέσης εδώ.
Έχω με κόμμα i εδώ, γιατί θέλω να συνδέσετε i σε αυτό το σύμβολο κράτησης θέσης.
>> Ας πάμε μπροστά και να προσπαθήσουμε την κατάρτιση αυτού του προγράμματος.
Το αρχείο ονομάζεται int.c.
Έτσι, Πάω να πω, κάνουν int, εισάγετε.
Θεέ μου, αλλά δεν είναι μεγάλη υπόθεση, έτσι;
Υπάρχει ένα λάθος.
>> Υπάρχει μια συντακτική λάθος εδώ, έτσι ώστε το πρόγραμμα δεν μπορεί να
να συνταχθεί μέσα int.c, γραμμή επτά, χαρακτήρα 27, μορφή σφάλματος
καθορίζει τον τύπο char αστέρι, όποια και αν είναι.
Αλλά ο τύπος επιχείρημα είναι int.
>> Έτσι και εδώ, εμείς δεν πρόκειται to-- αν και σήμερα είναι ένα πολύ υλικό,
θα πάμε για να σας συναρπάσει με τις απολύτως κάθε χαρακτηριστικό της C,
και τον προγραμματισμό γενικότερα, σε μόλις αυτές τις πρώτες εβδομάδες.
Έτσι εκεί είναι συχνά πρόκειται να είναι ορολογία με την οποία δεν είστε εξοικειωμένοι.
Και, στην πραγματικότητα, char αστέρι είναι κάτι θα πάμε να επανέλθει στο
σε μια εβδομάδα ή δύο το χρόνο του.
>> Αλλά για τώρα, ας δούμε αν μπορούμε να αναλύσει τις λέξεις που είναι εξοικειωμένοι.
Μορφές-- έτσι ακούσαμε μορφή προσδιοριστή, κωδικός μορφή πριν.
Αυτό είναι γνωστό.
Type-- αλλά το επιχείρημα έχει τύπο int.
Περιμένετε ένα λεπτό, i είναι ένας int.
>> Ίσως τοις εκατό s πραγματικότητα έχει κάποιο καθορισμένο νόημα.
Και, πράγματι, το κάνει.
Ένας ακέραιος, αν θέλετε printf για να το αντικαταστήσει,
που πραγματικά πρέπει να χρησιμοποιήσετε ένα διαφορετικά προσδιοριστή μορφή.
Και δεν θα το γνωρίζουν αυτό αν κάποιος σας πει,
ή είχατε κάνει πριν.
Αλλά τοις εκατό i είναι ό, τι μπορούν να χρησιμοποιηθούν ευρέως
στην printf για τη σύνδεση σε έναν ακέραιο.
Μπορείτε επίσης να χρησιμοποιήσετε τοις εκατό δ για ένα δεκαδικό ακέραιο.
Αλλά εγώ είναι ωραίο και απλό εδώ.
Έτσι θα πάμε με αυτό.
>> Τώρα, επιτρέψτε μου να πάει μπροστά και να επανάληψη make int, Enter.
Αυτό είναι καλό, δεν υπάρχουν σφάλματα.
Dot κάθετος int-- ΟΚ, κακή εμπειρία του χρήστη, επειδή δεν έχω στον εαυτό μου
τι να κάνω.
Αλλά αυτό είναι μια χαρά.
Είμαι αλίευση γρήγορα.
>> Και τώρα επιτρέψτε μου να πάει μπροστά και να πληκτρολογήστε το Δαβίδ, ΟΚ, Zamila, Rob.
Εντάξει, έτσι αυτό είναι ένα καλό πράγμα.
Αυτή τη φορά, είμαι χρησιμοποιώντας μια λειτουργία, ένα κομμάτι του παζλ, που ονομάζεται get int.
Και αποδεικνύεται out-- και θα δείτε αυτό αργότερα στο term--
το προσωπικό CS50 έχει εφαρμόσει πάρετε κορδόνι με τέτοιο τρόπο
ότι θα είναι μόνο σωματικά να πάρετε μια σειρά για σας.
>> Έχει εφαρμοστεί get int στην ένα τέτοιο τρόπο ώστε να μόνο θα
να πάρει έναν ακέραιο για σας.
Και αν, το ανθρώπινο, δεν συνεργάζονται, είναι
κυριολεκτικά ακριβώς πρόκειται να πούμε ξανά, ξανά, ξανά,
κυριολεκτικά κάθεται εκεί looping, έως ότου σας υποχρεώσουμε με κάποιο μαγικό αριθμό,
όπως 50, και γειά σου 50.
>> Ή αν τρέξουμε αυτό πάλι και τον τύπο σε 42, γεια σου 42.
Και έτσι η λειτουργία get int στο εσωτερικό του εν λόγω κομμάτι του παζλ
είναι αρκετά λογική, αρκετή σκέψη, να καταλάβω, τι είναι μια λέξη;
Και τι είναι ένας αριθμός;
Μόνο αποδέχεται, εν τέλει, οι αριθμοί.
>> Έτσι αποδεικνύεται ότι η εν λόγω Δεν είναι όλα αυτά εκφραστική.
μέχρι τώρα.
Έτσι, yay, την τελευταία φορά που πήγε αρκετά γρήγορα
σε εφαρμογή παιχνίδια και κινούμενα σχέδια, και καλλιτεχνικών έργων στο Scratch.
Και εδώ, είμαστε περιεχόμενο με τον κόσμο γεια, και γειά σου 50.
>> Δεν είναι όλα αυτά που εμπνέει.
Και, πράγματι, αυτά τα πρώτα λίγα παραδείγματα θα πάρει κάποιο χρόνο
να ράμπα μέχρι στον ενθουσιασμό.
Αλλά έχουμε πολύ περισσότερα ελέγχουν τώρα, στην πραγματικότητα.
Και θα πάμε σε πολύ γρήγορα να ξεκινήσει layering
πάνω από αυτά τα βασικά αρχέτυπα.
>> Αλλά πρώτα, ας καταλάβουμε ποιες είναι οι περιορισμοί.
Στην πραγματικότητα, ένα από τα πράγματα Το μηδέν δεν εύκολα
ας κάνουμε είναι να το δούμε κάτω από την κουκούλα,
και να κατανοήσουν τι υπολογιστής είναι, τι μπορεί να κάνει,
και ποια τα όριά της είναι.
Και, πράγματι, ότι η έλλειψη κατανόηση, δυνητικά, μακροπρόθεσμη
μπορεί να οδηγήσει σε δική μας mistakes-- γραφής σφάλματα, γράφοντας ανασφαλής λογισμικού που
παίρνει hacked με κάποιο τρόπο.
>> Έτσι, ας ρίξουμε μερικά βήματα προς την κατεύθυνση κατανόηση αυτής της λίγο καλύτερα από
τρόπο, ας πούμε, το ακόλουθο παράδειγμα.
Πάω να προχωρήσει και να εφαρμόσει πραγματικά γρήγορα ένα πρόγραμμα που ονομάζεται αθροιστής.
Όπως, ας προσθέσουμε μερικούς αριθμούς μαζί.
Και Πάω να κωδικοποιήσει κάποιες γωνίες εδώ, και μόνο αντιγραφή και επικόλληση
όπου ήμουν πριν, απλά έτσι ώστε να μπορούμε να προχωρήσουμε πιο γρήγορα.
Έτσι τώρα έχω τις βασικές αρχές ενός προγράμματος που ονομάζεται αθροιστής.
>> Και ας πάμε μπροστά και να το κάνουμε αυτό.
Πάω να πάει μπροστά και να ας πούμε, intx παίρνει πάρει int.
Και ξέρετε τι;
Ας κάνουμε μια καλύτερη εμπειρία χρήστη.
>> Έτσι, ας πούμε Χ είναι, και αποτελεσματικά ζητήσει από το χρήστη να μας δώσει Χ.
Και τότε επιτρέψτε μου να πάει μπροστά και να πω, printf πώς για y είναι, αυτή τη φορά περιμένουμε
δύο τιμές από το χρήστη.
Και τότε ας πάει μπροστά και να ας πούμε, printf, το άθροισμα των x και y είναι.
Και τώρα δεν θέλω να κάνω τοις εκατό s.
Θέλω να κάνω τοις εκατό i, backslash n, και στη συνέχεια, συνδέστε σε αξία ποσό.
>> Λοιπόν, πώς μπορώ να πάω για να κάνει αυτό;
Ξέρεις τι?
Ξέρω πώς να χρησιμοποιούν μεταβλητές.
Επιτρέψτε μου μόνο να δηλώσει ένα νέο, int z.
>> Και Πάω να λάβει μια εικασία εδώ.
Αν υπάρχουν ίσες πινακίδες σε αυτό γλώσσα, ίσως μπορώ να κάνω ακριβώς x συν y,
εφ 'όσον έχω τελειώσει μου σκέφτηκε με άνω τελεία;
Τώρα μπορώ να επιστρέψω εδώ κάτω, συνδέστε το z, τελειώσω αυτή τη σκέψη με μια άνω τελεία.
Και ας δούμε τώρα, αν αυτά ακολουθίες lines-- x είναι να πάρετε int.
Υ είναι να πάρετε int.
>> Προσθέστε x και y, αποθηκεύει την τιμή σε z-- Έτσι, και πάλι, να θυμάστε το σύμβολο ίσον
δεν είναι ίση.
Είναι ανάθεση από δεξιά προς τα αριστερά.
Και ας εκτυπώσετε ότι το άθροισμα τα Χ και Υ δεν είναι κυριολεκτικά z,
αλλά αυτό που είναι μέσα του z.
Έτσι, ας κάνουμε Adder - ωραία, χωρίς λάθη αυτή τη φορά.
Dot κάθετος Adder, εισάγετε, x θα είναι 1.
>> Υ θα είναι 2.
Και το άθροισμα των χ και γ είναι 3.
Έτσι ώστε να είναι όλα ωραία και καλά.
>> Έτσι, μπορείτε να φανταστείτε ότι τα μαθηματικά θα πρέπει να εργαστεί σε ένα πρόγραμμα σαν αυτό.
Αλλά ξέρετε τι;
Είναι αυτή η μεταβλητή, γραμμή 12, ακόμα και απαραίτητη;
Δεν χρειάζεται να πάρετε στη συνήθεια μόνο την αποθήκευση των πραγμάτων σε μεταβλητές
μόνο και μόνο επειδή μπορείτε.
Και, στην πραγματικότητα, είναι γενικά Θεωρείται κακή σχεδίαση
εάν δημιουργείτε μια μεταβλητή, που ονομάζεται z σε αυτή την περίπτωση, η αποθήκευση κάτι σε αυτό,
και στη συνέχεια αμέσως χρήση του, αλλά ποτέ ξανά.
Γιατί να δώσουμε κάτι ένα όνομα όπως z αν είστε κυριολεκτικά
πρόκειται να χρησιμοποιήσετε αυτό πράγμα μόνο μια φορά, και έτσι
εγγύς όπου δημιουργήσατε αυτό στην πρώτη θέση,
τόσο κοντά από την άποψη των γραμμών του κώδικα;
Έτσι, ξέρετε τι;
Αποδεικνύεται ότι η C είναι αρκετά ευέλικτο.
Αν εγώ πραγματικά θέλουν να plug-in τιμές εδώ,
Δεν χρειάζεται να δηλώσει μια νέα μεταβλητή.
Θα μπορούσα απλά plug-in x συν y, γιατί C καταλαβαίνει
αριθμητική, και μαθηματικά φορείς.
>> Έτσι απλά μπορώ να πω, κάνουν αυτό τα μαθηματικά, x συν y, όποια και αν οι αξίες αυτές είναι,
συνδέστε το προκύπτον ακέραιος σε αυτό το κορδόνι.
Έτσι, αυτό μπορεί να είναι, αν και μόνο μία γραμμή μικρότερη,
ένα καλύτερο σχεδιασμό, ένα καλύτερο πρόγραμμα, επειδή υπάρχει λιγότερο κώδικα, ως εκ τούτου,
λιγότερο για μένα να καταλάβω.
Και είναι επίσης μόλις καθαρότερο, στο βαθμό που δεν είμαστε
εισάγοντας νέες λέξεις, νέα σύμβολα, όπως το z,
ακόμη και αν δεν το κάνουν πραγματικά εξυπηρετούν ένα μεγάλο μέρος ενός σκοπού.
>> Δυστυχώς, τα μαθηματικά δεν είναι όλα ότι οι αξιόπιστες μερικές φορές.
Ας πάμε μπροστά και να το κάνουμε αυτό.
Πάω να πάει μπροστά τώρα και να κάνουμε το εξής.
>> Ας κάνουμε printf, τοις εκατό i, συν τοις i, είναι τοις εκατό i, backslash n.
Και Πάω να κάνω this-- xyx συν y.
Έτσι, είμαι απλώς πρόκειται να ξαναγράψει αυτό λίγο διαφορετικά εδώ.
Επιτρέψτε μου να κάνω ένα γρήγορο έλεγχο λογικότητας.
Και πάλι, ας μην πάρει μπροστά του τον εαυτό μας.
Κάντε αθροιστή, dot κάθετος αθροιστή.
το χ είναι 1, το γ είναι 2, 1 και 2 είναι 3.
Έτσι, αυτό είναι καλό.
Αλλά ας περιπλέκουν αυτό τώρα λίγο, και να δημιουργήσετε ένα νέο αρχείο.
>> Πάω να καλέσετε αυτό το ένα, λένε, ints, πληθυντικό για ακέραιους αριθμούς.
Επιτρέψτε μου να ξεκινήσω από εκεί που ήμουν πριν από λίγο.
Αλλά τώρα ας κάνουμε μερικές άλλες γραμμές.
Επιτρέψτε μου να πάει μπροστά και να κάνουμε το εξής, printf, τοις εκατό i, μείον θ τοις εκατό,
Είναι τοις εκατό i, κόμμα x, κόμμα yx μείον y.
Έτσι κάνω ελαφρώς διαφορετικά μαθηματικά εκεί.
Ας κάνουμε άλλο ένα.
Έτσι τοις εκατό i φορές τοις εκατό i είναι τοις εκατό i, backslash n.
Ας plug-in x, και y, και οι χρόνοι x y.
Θα χρησιμοποιήσουμε τον αστερίσκο για υπολογιστή σας για ώρες.
>> Δεν χρησιμοποιείτε x. χ είναι μια μεταβλητή όνομα εδώ.
Μπορείτε να χρησιμοποιήσετε το αστέρι για τον πολλαπλασιασμό.
Ας κάνουμε ένα ακόμη.
Printf τοις εκατό Ι, διαιρούμενο με ποσοστό i, είναι τοις εκατό Ι,
backslash n. xy διαιρείται με y-- ώστε να μπορείτε να χρησιμοποιήσετε το κάθετο σε C
να κάνει διαίρεση.
Και ας κάνουμε ένα άλλο.
Υπόλοιπο ποσοστό θ, διαιρούμενο με ποσοστό i, είναι τοις εκατό i.
xy-- και τώρα υπόλοιπο είναι ό, τι έχει απομείνει.
Όταν προσπαθείτε να τη διαίρεση ενός παρονομαστής σε ένα αριθμητή,
πόσο έχει απομείνει πάνω από αυτό δεν θα μπορούσατε να διαιρέσετε έξω;
>> Έτσι, δεν υπάρχει πραγματικά, αναγκαστικά, ένα σύμβολο
έχουμε χρησιμοποιήσει στο δημοτικό σχολείο για αυτό.
Αλλά υπάρχουν σε C. Μπορείτε λένε x modulo y, όπου
αυτό το σύμβολο τοις εκατό σε αυτό το context-- συγκεχυμένα όταν είστε μέσα
των διπλά εισαγωγικά, στο εσωτερικό της printf, τοις εκατό
χρησιμοποιείται ως προσδιοριστής μορφή.
>> Όταν χρησιμοποιείτε τοις εκατό εκτός της ότι σε μια μαθηματική έκφραση,
είναι ο φορέας modulo για σπονδυλωτή arithmetic-- για τους σκοπούς μας
εδώ, σημαίνει απλά, ποια είναι η υπόλοιπο του x διαιρούμενο με y;
Έτσι x διαιρούμενο με y είναι x κάθετο y.
Ποιο είναι το υπόλοιπο του x διαιρούμενο με y;
Είναι x mod y, όπως ένας προγραμματιστής θα έλεγα.
>> Έτσι, αν έκανα κανένα λάθος εδώ, επιτρέψτε μου να προχωρήσει και να κάνει ints, στον πληθυντικό, ωραία,
και dot ints κάθετος.
Και ας πάμε μπροστά και να κάνει, ας πούμε, 1, 10.
Εντάξει, 1 συν 10 είναι 11, επιταγή.
1 μείον 10 είναι αρνητικό 9, ελέγξτε.
>> 1 φορές 10 είναι 10, επιταγή.
1 διαιρούμενο με το 10 is-- Εντάξει, θα παραλείψετε αυτό το ένα.
Υπόλοιπο 1 διαιρούμενο με το 10 είναι 1.
Αυτό είναι σωστό.
Αλλά υπάρχει ένα σφάλμα το οποίο εδώ.
>> Έτσι, η μία έβαλα μου παραδώσει, δεν είναι σωστό.
Θέλω να πω, ότι είναι κοντά στο 0.
1 διαιρούμενο με 10, ξέρετε, αν είμαστε κοπή κάποιες γωνιές, βέβαιος, ότι είναι μηδέν.
Αλλά θα πρέπει πραγματικά να είναι 1/10, 0.1, ή 0.10, 0.1000, ή ούτω καθεξής.
>> Δεν πρέπει πραγματικά να είναι μηδέν.
Λοιπόν, αποδεικνύεται ότι ο υπολογιστής είναι κάνει κυριολεκτικά ό, τι αυτό είπε να κάνουμε.
Κάνουμε τα μαθηματικά σαν x διαιρούμενο με y.
Και οι δύο Χ και Υ, σύμφωνα με τις γραμμές του κώδικα νωρίτερα, είναι ακέραιοι αριθμοί.
>> Επιπλέον, στη γραμμή 15, είμαστε λέει printf, hey, printf plug-in
ένας ακέραιος, το plug-in ακέραιο, plug-in μια integer-- ειδικά
x, και στη συνέχεια γ, και στη συνέχεια x διαιρούμενο με y. x και y είναι ints.
Είμαστε καλά εκεί.
>> Αλλά τι είναι x διαιρείται με το x;
x διαιρούμενο με y πρέπει να είναι, μαθηματικά, 1/10, ή 0,1,
η οποία είναι ένας πραγματικός αριθμός, ένας πραγματικός αριθμός που έχουν, ενδεχομένως, ένα δεκαδικό σημείο.
Δεν είναι ένας ακέραιος.
>> Αλλά αυτό που είναι το πιο κοντινό ακέραιο στο 1/10, ή 0.1;
Ναι, αυτό το είδος του είναι μηδέν.
0.1 είναι σαν αυτό το πολύ.
Και 1 είναι αυτό το πολύ.
Έτσι 1/10 είναι πιο κοντά στο 0 ό, τι είναι προς ένα.
>> Και έτσι τι κάνει η C για ΕΜΕΙΣ-- είδος γιατί το είπε to--
Είναι περικοπή αυτή ακέραιος.
Είναι λαμβάνοντας την τιμή, η οποία είναι και πάλι υποτίθεται ότι είναι κάτι σαν 0,1000,
0 και ούτω καθεξής.
Και αυτό είναι ό, τι περικοπή μετά την υποδιαστολή
έτσι ώστε όλα αυτά πράγματα, γιατί δεν το κάνει
ταιριάζει στην έννοια του ακεραίου, η οποία είναι απλά ένας αριθμός, όπως αρνητική 1, 0, 1,
πάνω και κάτω, ρίχνει μακριά τα πάντα μετά την υποδιαστολή, γιατί
δεν μπορεί να χωρέσει ένα υποδιαστολής σε έναν ακέραιο αριθμό εξ ορισμού.
>> Έτσι, η απάντηση εδώ είναι μηδέν.
Επομένως, πώς θα το διορθώσω αυτό;
Χρειαζόμαστε μια άλλη λύση όλοι μαζί.
Και μπορούμε να το κάνουμε αυτό, ως εξής.
>> Επιτρέψτε μου να προχωρήσει και να δημιουργήσει μια νέα αρχείο, αυτό ονομάζεται floats.c.
Και το αποθηκεύσετε εδώ στο ίδιο κατάλογο, float.c.
Και επιτρέψτε μου να πάει μπροστά και να αντιγράψετε μερικές από τις εν λόγω κώδικα από τις προηγούμενες.
>> Αλλά αντί να πάρει ένας int, ας κάνουμε αυτό.
Δώσε μου μια τιμή κινητής υποδιαστολής που ονομάζεται x. όπου ένας κινητής υποδιαστολής
αξία είναι μόλις κυριολεκτικά κάτι με κυμαινόμενο σημείο.
Μπορεί να κινηθεί προς τα αριστερά, προς τα δεξιά.
Είναι ένας πραγματικός αριθμός.
>> Και επιτρέψτε μου να μην καλέσει πάρετε int, αλλά να πάρει float,
η οποία ήταν επίσης μεταξύ των μενού επιλογών στη βιβλιοθήκη C250.
Ας αλλάξουμε y σε ένα πλωτήρα.
Έτσι, αυτό γίνεται πάρει πλωτήρα.
>> Και τώρα, δεν θέλουμε να συνδέσετε ints.
Αποδεικνύεται πρέπει να χρησιμοποιήσουμε τοις εκατό f για float, τοις εκατό f για float,
και τώρα το αποθηκεύσετε.
Και τώρα, τα δάχτυλα σταυρωμένα, να άρματα, ωραία, τελεία άρματα κάθετος.
x πρόκειται να είναι ένα 1. y Πρόκειται να είναι 10 και πάλι.
>> Και, ωραία, εντάξει Επιπλέον μου είναι σωστή.
Ήλπιζα για περισσότερα, αλλά ξέχασα να το γράψω.
Οπότε ας πάει και να διορθώσετε αυτό το λογικό σφάλμα.
>> Ας πάμε μπροστά και να αρπάξει τα ακόλουθα.
Θα κάνουμε λίγο αντιγραφή και επικόλληση.
Και Πάω να πω μείον.
>> Και Πάω να πω φορές.
Και Πάω να πω διαιρεμένη.
Και εγώ δεν πρόκειται να κάνω modulo, η οποία δεν είναι τόσο σχετικός εδώ,
διαιρούμενο με το f, και οι χρόνοι plus-- Εντάξει, ας το κάνουμε αυτό και πάλι.
>> Κάντε πλωτήρες, τελεία άρματα κάθετος, και 1, 10, and-- ωραίο, όχι, εντάξει.
Έτσι είμαι ηλίθιος.
Έτσι, αυτό είναι πολύ κοινό στην επιστήμη των υπολογιστών
να κάνουν ηλίθια λάθη όπως αυτό.
>> Για παιδαγωγικούς σκοπούς, αυτό που πραγματικά ήθελε να κάνει
είχε αλλάξει την επιστήμη εδώ να συν, μείον, σε χρόνους,
και να διαιρέσει, όπως μπορείτε να ελπίζουμε παρατηρήσει κατά τη διάρκεια αυτής της άσκησης.
Έτσι τώρα ας μεταγλωττίσετε ξανά αυτό πρόγραμμα, κάνουν dot άρματα κάθετος.
>> Και για τρίτη φορά, ας δείτε αν αυτό ανταποκρίνεται στις προσδοκίες μου.
1, 10, εισάγετε, ναι, εντάξει, 1.000, διαιρούμενο με το 10.000, είναι 0,100000.
Και αποδεικνύεται μπορούμε να ελέγξουμε πόσα αριθμοί είναι μετά από αυτά τα δεκαδικά σημεία.
Εμείς πραγματικά θα.
Θα επανέλθω στο θέμα αυτό.
>> Αλλά τώρα, στην πραγματικότητα, τα μαθηματικά είναι σωστή.
Έτσι, και πάλι, ποια είναι η takeaway εδώ;
Αποδεικνύεται ότι σε C, υπάρχουν όχι μόνο απλώς strings-- και, στην πραγματικότητα,
Δεν υπάρχουν πραγματικά, γιατί προσθέστε αυτές με τη βιβλιοθήκη CS50.
Αλλά δεν υπάρχουν μόνο ints.
>> Υπάρχουν επιπλέει επίσης.
Και αποδεικνύεται ένα σωρό άλλα δεδομένα τύπους επίσης, ότι θα χρησιμοποιήσουμε πριν από καιρό.
Βγάζει αν θέλετε μια ενιαία χαρακτήρα, δεν είναι μια σειρά χαρακτήρων,
μπορείτε να χρησιμοποιήσετε μόνο ένα char.
>> Αποδεικνύεται ότι αν θέλετε μια bool, μια τιμή Boolean, true ή false μόνο,
χάρη στη βιβλιοθήκη CS50, έχουμε προστίθεται στο C τύπου δεδομένων bool, καθώς και.
Αλλά είναι επίσης παρούσα σε πολλές άλλες γλώσσες.
Και αποδεικνύεται ότι μερικές φορές σας Πρέπει μεγαλύτερους αριθμούς, στη συνέχεια, έρχονται από προεπιλογή
με ints και επιπλέει.
>> Και, στην πραγματικότητα, ένα διπλό είναι ένας αριθμός ότι δεν χρησιμοποιεί 32 bits, αλλά 64 bits.
Και ένα μεγάλο χρονικό διάστημα είναι ένας αριθμός που χρησιμοποιεί όχι 32, bits αλλά 64 bits,
αντίστοιχα, για κινητής υποδιαστολής αξιών και ακέραιοι, αντίστοιχα.
Ας πραγματικότητα τώρα δείτε αυτό σε δράση.
>> Πάω να προχωρήσει εδώ και μαστίγιο μέχρι ένα άλλο πρόγραμμα.
Εδώ, Πάω να πάει μπροστά και δεν περιλαμβάνουν CS50.h.
Και επιτρέψτε μου να πάω, περιλαμβάνει τις τυποποιημένες IO.h.
>> Και θα παρατηρήσετε κάτι funky συμβαίνει εδώ.
Δεν είναι χρωματική κωδικοποίηση πράγματα στη με τον ίδιο τρόπο όπως και πριν.
Και αποδεικνύεται, ότι είναι γιατί δεν έχουν δώσει το πράγμα ένα όνομα αρχείου.
>> Πάω να καλέσετε αυτό το ένα sizeof.c, και χτύπησε Αποθήκευση.
Και παρατηρήστε τι συμβαίνει στο μου πολύ άσπρο κωδικός κατά της μαύρο φόντο.
Τώρα, τουλάχιστον υπάρχει κάποια μωβ εκεί.
Και είναι σύνταξη τονίζεται.
>> Αυτό συμβαίνει γιατί, πολύ απλά, δεν έχω είπε ο IDE τι τύπο αρχείου
είναι δίνοντάς του ένα όνομα, και συγκεκριμένα μια επέκταση αρχείου.
Τώρα, ας πάμε μπροστά και να το κάνουμε αυτό.
Πάω να πάει μπροστά και πολύ απλά εκτυπώσετε το following-- bool
Είναι τοις εκατό LU.
>> Θα επανέλθω σε ότι ακριβώς σε μια στιγμή.
Και τότε Πάω να μέγεθος εκτύπωσης bool.
Και τώρα, απλά για να σώσει τον εαυτό μου κάποια στιγμή, είμαι
πρόκειται να κάνει μια ολόκληρη μάτσο αυτά ταυτόχρονα.
Και, συγκεκριμένα, Πάω να αλλάξετε αυτό σε ένα char και χαρα.
Αυτό και μόνο, είμαι πρόκειται να αλλάξει με ένα διπλό και ένα διπλό.
>> Αυτό και μόνο, είμαι πρόκειται να αλλάξει σε ένα πλωτήρα και έναν πλωτήρα.
Αυτό και μόνο, Πάω να αλλάξει σε έναν int και έναν int.
Και αυτό, Πάω να αλλάξει σε πολύ μεγάλο.
Και είναι ακόμα λαμβάνοντας εδώ και πολύ καιρό, πολύ καιρό.
>> Και στη συνέχεια, τέλος, έδωσα τον εαυτό μου ένα πάρα πολλές, string.
Αποδεικνύεται ότι σε C, υπάρχει το ειδικό φορέα που ονομάζεται
μέγεθος αυτό είναι κυριολεκτικά πρόκειται να, όταν τρέχει,
πείτε μας το μέγεθος της κάθε μία από αυτές τις μεταβλητές.
Και αυτό είναι ένας τρόπος, τώρα, μπορούμε να συνδέσουμε πίσω
στη συζήτηση της περασμένης εβδομάδας των δεδομένων και την εκπροσώπηση.
>> Επιτρέψτε μου να προχωρήσει και να συντάξει το μέγεθος της dot μέγεθος κάθετο της.
Και ας δούμε.
Αποδεικνύεται ότι σε C, ειδικά για CS50 IDE,
ειδικά για το λειτουργικό σύστημα Ubuntu,
η οποία είναι ένα λειτουργικό 64-bit σύστημα σε αυτή την περίπτωση,
μια bool πρόκειται να χρησιμοποιήστε ένα byte του χώρου.
Αυτό είναι το πώς μετριέται το μέγεθος, όχι σε bits, αλλά σε bytes.
Και υπενθυμίζουν ότι ένα byte είναι οκτώ bits.
Έτσι, μια bool, ακόμα κι αν τεχνικά μόνο που χρειάζεται είναι 0 ή 1,
είναι λίγο σπάταλη πώς έχουμε εφαρμόσει.
Είναι πραγματικά πρόκειται να χρησιμοποιήσετε ένα ολόκληρο byte-- έτσι ώστε όλα τα μηδενικά, είναι ίσως
όλα αυτά, ή κάτι τέτοιο, ή απλά ένα 1 μεταξύ των οκτώ bits.
>> Μια χαρα, εν τω μεταξύ, που χρησιμοποιείται για ένα χαρακτήρα σαν χαρακτήρων ASCII ανά την περασμένη εβδομάδα,
πρόκειται να είναι ένα χαρακτήρα.
Και αυτό synchs με την αντίληψή μας της να είναι όχι περισσότερο από 256 bits-- μάλλον,
synchs επάνω με το που είναι όχι περισσότερο από 8 bits, η οποία
μας δίνει όσο το 256 τιμές.
Ένα διπλό πρόκειται να είναι 8 bytes ή 64 bits.
>> Ο πλωτήρας είναι 4.
Ένας int είναι 4.
Ένα μακρύ, μακρύ είναι 8.
Και μια σειρά είναι 8.
Αλλά μην ανησυχείτε γι 'αυτό.
Εμείς πάμε για να ξεκολλήσετε το στρώμα.
Αποδεικνύεται, χορδές μπορούν να να είναι μεγαλύτερο από 8 bytes.
>> Και, πράγματι, έχουμε γράψει χορδές ήδη, γεια κόσμο,
περισσότερο από 8 bytes.
Αλλά θα επανέλθουμε ότι ακριβώς σε μια στιγμή.
Αλλά η Take Away εδώ είναι η ακόλουθη.
>> Κάθε υπολογιστής έχει μόνο ένα πεπερασμένο ποσότητα της μνήμης και του χώρου.
Μπορείτε να αποθηκεύσετε μόνο τόσα πολλά αρχεία στο Mac ή το PC σας.
Μπορείτε να αποθηκεύσετε μόνο τόσα πολλά προγράμματα RAM που εκτελούνται ταυτόχρονα, κατ 'ανάγκη, ακόμη και
με εικονική μνήμη, διότι Έχετε ένα πεπερασμένο ποσό της μνήμης RAM.
>> Και ακριβώς για να picture-- αν δεν έχετε ανοίξει ένα φορητό υπολογιστή
ή να το παραγγείλετε επιπλέον μνήμη για έναν υπολογιστή, μπορείτε
μπορεί να μην γνωρίζουν ότι στο εσωτερικό του υπολογιστή σας
Είναι κάτι που φαίνεται λίγο σαν αυτό.
Έτσι, αυτό είναι απλά μια κοινή εταιρεία με την επωνυμία Κρίσιμης σημασίας που κάνει RAM για υπολογιστές.
Και μνήμη RAM είναι όπου τα προγράμματα ζουν, ενώ τρέχετε.
>> Έτσι, σε κάθε Mac ή PC, όταν κάνετε διπλό κάντε κλικ σε ένα πρόγραμμα, και ανοίγει,
και ανοίγει κάποιο έγγραφο του Word ή κατι τετοιο,
το αποθηκεύει προσωρινά στην RAM, διότι RAM είναι ταχύτερη
από τον σκληρό σας δίσκο, ή δίσκο στερεάς κατάστασης σας.
Έτσι είναι ακριβώς όπου τα προγράμματα πάτε για να ζήσουν όταν τρέχετε,
ή όταν τα αρχεία που χρησιμοποιούνται.
>> Έτσι ώστε να έχετε τα πράγματα που φαίνονται όπως αυτό στο εσωτερικό του φορητού υπολογιστή σας,
ή ελαφρώς μεγαλύτερα πράγματα στο εσωτερικό του υπολογιστή σας.
Αλλά το κλειδί είναι να έχετε μόνο ένα πεπερασμένο αριθμό από αυτά τα πράγματα.
Και υπάρχει μόνο ένα πεπερασμένο ποσό της hardware που κάθεται σε αυτό το γραφείο δεξιά
εδώ.
>> Έτσι, σίγουρα, δεν μπορούμε να αποθηκεύσει απείρως μακρύ αριθμούς.
Και, όμως, αν νομίζετε ότι πίσω στο δημοτικό σχολείο, πόσα ψηφία μπορούν να
έχετε το δικαίωμα της υποδιαστολής;
Για το θέμα αυτό, πόσα ψηφία μπορούν να έχετε στα αριστερά του υποδιαστολή;
Πραγματικά, απείρως πολλά.
>> Τώρα, εμείς οι άνθρωποι θα μπορούσαν μόνο ξέρουν πώς να προφέρει εκατομμύρια,
και δισεκατομμύρια, τρισεκατομμύρια, και τετράκις εκατομμύρια, και τετράκις εκατομμύρια.
Και είμαι πιέζει τα όρια της μου understanding-- ή my-- καταλαβαίνω
αριθμούς, αλλά μου προφορά των αριθμών.
Αλλά μπορεί να πάρει απείρως μεγάλο με απείρως πολλά ψηφία προς τα αριστερά
ή προς τα δεξιά ενός δεκαδικού ψηφίου.
>> Αλλά υπολογιστές έχουν μόνο ένα πεπερασμένο ποσό της μνήμης,
ένας πεπερασμένος αριθμός των τρανζίστορ, ένα πεπερασμένο αριθμό λαμπτήρων μέσα.
Έτσι τι συμβαίνει όταν έχετε ξεμείνει από χώρο;
Με άλλα λόγια, αν σκεφτείτε την περασμένη εβδομάδα
όταν μιλήσαμε για τους αριθμούς οι ίδιοι που εκπροσωπούνται σε δυαδική,
ας υποθέσουμε ότι έχουμε Αυτή η τιμή 8-bit εδώ.
>> Και έχουμε επτά του 1 και ένα 0.
Και ας υποθέσουμε ότι θέλουμε για να προσθέσετε 1 σε αυτήν την τιμή.
Αυτό είναι ένα πραγματικά μεγάλο αριθμό τώρα.
>> Αυτό είναι 254, αν θυμάμαι τα μαθηματικά από την προηγούμενη εβδομάδα δεξιά.
Αλλά τι γίνεται αν αλλάξω ότι η δεξιότερη το 0 έως το 1;
Το ακέραιο αριθμό, των Φυσικά, γίνεται οκτώ 1 του.
Έτσι, είμαστε ακόμα καλά.
>> Και ότι αντιπροσωπεύει πιθανώς 255, αν και ανάλογα με το περιεχόμενο
θα μπορούσε στην πραγματικότητα αντιπροσωπεύουν ένας αρνητικός αριθμός.
Αλλά περισσότερα για αυτό κάποια άλλη στιγμή.
Αυτό αισθάνεται σαν να είναι περίπου τόσο υψηλές όσο μπορώ να μετρήσω.
>> Τώρα, αυτό είναι μόνο 8 bits.
Και το Mac μου, σίγουρα, έχει τον τρόπο περισσότερο από 8 bits της μνήμης.
Αλλά έχει πεπερασμένη.
Έτσι, το ίδιο επιχείρημα ισχύει, έστω και αν έχουν περισσότερα από αυτά τα αυτά στην οθόνη.
>> Αλλά τι θα συμβεί αν είστε αποθήκευση αυτού του αριθμού, 255,
και θέλετε να μετρήσει 1 bit υψηλότερο;
Θέλετε να πάτε 255-256.
Το πρόβλημα, βέβαια, είναι ότι αν αρχίζουν να μετρούν από το μηδέν, όπως την περασμένη εβδομάδα,
δεν μπορεί να μετρήσει ως υψηλής ως 256, πόσο μάλλον 257,
πόσο μάλλον 258, m γιατί αυτό συμβαίνει όταν προσθέτετε ένα 1;
Εάν έχετε κάνει το παλιό δημοτικό σχολείο προσέγγιση, μπορείτε να βάλετε ένα 1 εδώ,
και, στη συνέχεια, 1 συν 1 είναι 2, αλλά αυτό είναι πραγματικά ένα μηδέν, θα μεταφέρουν το 1,
φέρουν το 1, φέρουν το 1.
Όλα αυτά τα πράγματα, αυτά τα 1, πηγαίνετε στο μηδέν.
Και θα περατωθεί, ναι, όπως κάποιος επεσήμανε, ένα 1 στην αριστερή πλευρά.
Αλλά ό, τι μπορείτε πραγματικά να δείτε και να ταιριάζει στη μνήμη
είναι μόλις οκτώ 0, το οποίο είναι να πούμε σε κάποιο σημείο, αν, ένας υπολογιστής,
Προσπάθησα μετρώντας αρκετά ψηλά, είστε πρόκειται να τυλίξει γύρω, φαίνεται,
στο μηδέν, ή ίσως ακόμη και αρνητική αριθμοί, οι οποίοι είναι ακόμα χαμηλότερα από το μηδέν.
>> Και μπορούμε να το είδος δείτε αυτό.
Επιτρέψτε μου να προχωρήσει και να γράψετε ένα πραγματικό γρήγορο πρόγραμμα εδώ.
Επιτρέψτε μου να προχωρήσει και να γράψετε ένα πρόγραμμα που ονομάζεται υπερχείλιση.
Περιλαμβάνουν CS50.h, περιλαμβάνουν πρότυπο IO.h-- OH,
Έχω πραγματικά χαμένη επισήμανση σύνταξης μου.
Ας σώσει αυτό ως overflow.c.
>> Και τώρα int main void-- και πριν από καιρό, εμείς θα
επανέλθει στο εξηγεί γιατί κρατάμε το γράψιμο int main άκυρη.
Αλλά για τώρα, ας το κάνουμε αυτό, λαμβάνοντας ως δεδομένο.
Ας δώσω στον εαυτό μου μια int, και η προετοιμασία στο 0.
>> Ας στη συνέχεια να κάνουμε για int πάρω zero-- στην πραγματικότητα, ας κάνουμε ένα άπειρο βρόχο
και να δούμε τι θα συμβεί.
Ενώ είναι αλήθεια, τότε ας εκτυπώσετε n Είναι τοις εκατό i, ανάστροφη κάθετο n, plug-in n.
Αλλά, τώρα, ας κάνουμε n παίρνει n + 1.
>> Έτσι με άλλα λόγια, για κάθε επανάληψη αυτού του άπειρο βρόχο,
ας ρίξουμε τιμή του n, και προσθέστε 1 σε αυτό, και στη συνέχεια
αποθηκεύσει το αποτέλεσμα πίσω στο ν στα αριστερά.
Και, στην πραγματικότητα, έχουμε δει σύνταξη ελαφρώς όπως αυτό, εν συντομία.
Ένα δροσερό τέχνασμα είναι αντί της γραφής όλα αυτά έξω,
μπορείτε πραγματικά να πω ένα n συν ισούται με 1.
>> Ή αν θέλετε πραγματικά να είναι φανταχτερό, μπορείτε να πείτε n συν συν ημι-παχύ έντερο.
Αλλά αυτά τα δύο τελευταία είναι ακριβώς αυτό που θα αποκαλούσαμε συντακτική ζάχαρη
για το πρώτο πράγμα.
>> Το πρώτο πράγμα είναι πιο σαφής, εντελώς εντάξει, εντελώς σωστό.
Αλλά αυτό είναι πιο συχνή, θα πω.
Γι 'αυτό και θα το κάνουμε αυτό για μια στιγμή.
>> Ας κάνει τώρα υπερχείλισης, το οποίο ακούγεται μάλλον δυσοίωνο, τελεία υπερχείλιση κάθετος.
Ας δούμε, n πάρει αρκετά μεγάλο.
Αλλά ας σκεφτούμε, πόσο μεγάλη μπορεί ν πάρει;
>> το η είναι ένας int.
Είδαμε πριν από λίγο με το μέγεθος της παράδειγμα, ότι ένας int είναι τέσσερα bytes.
Γνωρίζουμε από την προηγούμενη εβδομάδα, τέσσερα bytes είναι 32 bits, διότι 8 φορές 4, που είναι 32.
Αυτό πρόκειται να είναι 4000000000.
>> Και είμαστε μέχρι 800.000.
Αυτό πρόκειται να πάρει για πάντα για να μετράνε τόσο υψηλές όσο μπορώ ενδεχομένως.
Έτσι, Πάω να πάει μπροστά, όπως ίσως πριν από καιρό,
και χτύπησε Ελέγχου Ντο-- ειλικρινά, Ελέγχου C, πολλή, όπου ο έλεγχος C γενικά
μέσα ακυρώσετε.
Δυστυχώς, επειδή αυτό τρέχει στο σύννεφο,
Μερικές φορές το σύννεφο είναι φτύσιμο τόσα πολλά πράγματα,
τόσο πολύ εξόδου, πρόκειται να πάρει λίγο χρόνο για την είσοδο μου
για να φτάσουμε στο σύννεφο.
Έτσι ακόμα κι αν χτύπησα Ελέγχου C πριν από λίγα δευτερόλεπτα,
αυτό είναι σίγουρα η πλευρά επίδραση της ένα άπειρο βρόχο.
>> Και έτσι σε αυτές τις περιπτώσεις, είμαστε πρόκειται να αφήσει ότι είναι.
Και θα πάμε να προσθέσετε ένα άλλο τερματικό παράθυρο εδώ
με το συν, το οποίο φυσικά δεν όπως ότι, δεδομένου ότι είναι ακόμα σκέφτεται.
Και ας πάμε μπροστά και να είναι λίγο πιο λογικό.
>> Πάω να πάει μπροστά και να κάνουμε αυτό μόνο finitely πολλές φορές.
Ας χρησιμοποιήσουμε ένα για το βρόχο, η οποία αναφέρθηκα νωρίτερα.
Ας το κάνουμε.
Δώστε μου ένα άλλο int μεταβλητή i παίρνει 0.
i είναι μικρότερο από ό, τι, ας πούμε, 64 i ++.
Και τώρα επιτρέψτε μου να πάει μπροστά και να εκτυπώσετε από n είναι τοις εκατό i, το κόμμα n.
Και τότε n-- αυτό εξακολουθεί να είναι πρόκειται να πάρει για πάντα.
Ας το κάνουμε.
>> n παίρνει n φορές 2.
Ή θα μπορούσε να είναι φανταχτερό και να κάνουμε φορές ισούται με 2.
Αλλά ας πούμε n ισούται με την ίδια, οι χρόνοι 2.
Με άλλα λόγια, σε αυτή την νέα έκδοση του προγράμματος,
Δεν θέλω να περιμένω για πάντα από παρόμοια 800.000 έως 4 δισ.
Ας πάρει αυτό το τελειώνουμε.
>> Ας πραγματικότητα διπλασιαστεί n κάθε φορά.
Η οποία, ανάκληση, διπλασιασμός είναι η απέναντι από έχοντας, φυσικά.
Και ενώ την περασμένη εβδομάδα έχουμε κάτι ξανά, και ξανά,
και πάλι, σούπερ γρήγορο, διπλασιασμό σίγουρα θα
να μας πάρει από το 1 έως το μεγαλύτερο δυνατό τιμή που μπορούμε να υπολογίζουμε σε με μια int.
>> Έτσι, ας κάνουμε ακριβώς αυτό.
Και θα επανέλθουμε σε αυτό πριν από καιρό.
Αλλά αυτό, πάλι, είναι ακριβώς όπως το μπλοκ επανάληψη στο Scratch.
Και θα χρησιμοποιήσετε αυτό πριν από καιρό.
>> Αυτό σημαίνει απλά αρίθμηση από το μηδέν μέχρι, αλλά όχι ίσες, με 64.
Και σε κάθε εκδοχή αυτής της βρόχο, απλά συνεχίστε προσαύξηση i.
Έτσι i ++ - και αυτή η γενική δομή στη γραμμή 7 είναι απλά ένα σούπερ κοινός τρόπος
των επαναλαμβάνοντας κάποιες γραμμές κωδικός, μερικοί αριθμό φορών.
Ποια γραμμές κώδικα;
Αυτά τα άγκιστρα, όπως σας μπορεί να φανεί από τώρα,
σημαίνει, κάντε τα εξής.
>> Είναι το σαν Scratch, όταν έχει τα κίτρινα μπλοκ
και άλλα χρώματα αυτό το είδος της ενστερνίζεται ή αγκαλιάζουν άλλα μπλοκ.
Αυτό είναι ό, τι αυτά τα σγουρά τιράντες κάνει εδώ.
Έτσι, αν πήρα τη σύνταξη μου right-- σας μπορείτε να δείτε το σύμβολο καρότο σε C μέσα
αυτό είναι το πώς πολλές φορές ήμουν προσπαθεί να λύσει αυτό το πρόβλημα.
Ας απαλλαγούμε από εκείνο το ένα συνολικά, και να κλείσετε αυτό το παράθυρο.
Και θα χρησιμοποιήσουμε το νέο.
Κάντε υπερχείλιση, dot κάθετος υπερχείλιση, Enter, εντάξει,
φαίνεται άσχημα στην αρχή.
Αλλά ας μετακινηθείτε πίσω στο χρόνο, γιατί έκανα αυτό 64 φορές.
>> Και παρατηρήστε την πρώτη φορά, n είναι 1.
Για δεύτερη φορά, η είναι 2, τότε 4, τότε 8, στη συνέχεια 16.
Και φαίνεται ότι μόλις Παίρνω σε περίπου 1 δισεκατομμύριο,
αν μπορώ να διπλασιαστεί και πάλι, ότι θα πρέπει να μου δώσει 2 δισ.
Αλλά αποδεικνύεται, είναι ακριβώς πάνω στην ακμή.
>> Και γι 'αυτό πραγματικά ξεχειλίζει ένας int από 1 δισεκατομμύριο
σε περίπου αρνητικά 2 δισεκατομμύρια, επειδή ένας ακέραιος,
σε αντίθεση με τον έχουμε αριθμούς καταντούν την περασμένη εβδομάδα,
μπορεί να είναι τόσο θετικές όσο και αρνητικές στην πραγματικότητα και σε έναν υπολογιστή.
Και έτσι τουλάχιστον ένα από αυτά bits αποτελεσματικά κλαπεί.
Έτσι έχουμε πραγματικά μόνο 31 bits, ή 2 δισ πιθανές τιμές.
>> Αλλά για τώρα, το πακέτο είναι αρκετά Με απλά λόγια, όποια και αν αυτοί οι αριθμοί είναι
και ό, τι τα μαθηματικά είναι, κάτι κακό θα συμβεί τελικά,
γιατί τελικά προσπαθείτε να μεταθέτει τα bits μία πάρα πολλές φορές.
Και μπορείτε αποτελεσματικά να πάει από όλους 1 προς ίσως Όλα τα 0, ή ίσως
απλά κάποιο άλλο μοτίβο που σαφώς, ανάλογα με τα συμφραζόμενα,
μπορεί να ερμηνευθεί ως αρνητικός αριθμός.
Και έτσι φαίνεται το υψηλότερο I μπορεί να υπολογίζει σε αυτό το συγκεκριμένο πρόγραμμα
Είναι μόνο περίπου 1 δις.
Αλλά υπάρχει μια μερική λύση εδώ.
Ξέρεις τι?
>> Επιτρέψτε μου να αλλάξει από μια int σε μια πολύ καιρό.
Και επιτρέψτε μου να προχωρήσει εδώ και say-- Πάω να έχουν
να αλλάξει αυτό σε ένα ανυπόγραφο καιρό.
Ή, ας δούμε, εγώ ποτέ δεν θυμάμαι τον εαυτό μου.
>> Ας πάμε μπροστά και να κάνουν υπερχείλισης.
Όχι, δεν είναι αυτό, Δ.Ν., σας ευχαριστώ.
Έτσι, μερικές φορές Clang μπορεί να είναι χρήσιμη.
Εγώ δεν θυμάμαι ποιο είναι το format προσδιοριστή ήταν για πολύ καιρό.
>> Αλλά, πράγματι, Clang μου είπε.
Το πράσινο είναι ένα είδος καλά, εξακολουθεί να σημαίνει ότι θα κάνει ένα λάθος.
Είναι μαντέψουν ότι εννοούσα LLD.
>> Έτσι, επιτρέψτε μου να εκμεταλλευτώ αυτή είναι η συμβουλή, μια μακρά μακρά δεκαδικός αριθμός, εκτός από αυτό.
Και επιτρέψτε μου να επαναληφθεί, dot κάθετο υπερχείλιση, Enter.
Και τώρα τι είναι cool είναι αυτό.
>> Αν μου μετακινηθείτε πίσω στο χρόνο, έχουμε ακόμα αρχίσει μετρώντας την ίδια place-- 1, 2, 4,
8, 16.
Ανακοίνωση, παίρνουμε όλα τα τρόπο έως 1 δισ.
Αλλά τότε μπορούμε με ασφάλεια να πάρει στο 2000000000.
>> Στη συνέχεια έχουμε την ευκαιρία να 4000000000, τότε 8000000000, 17000000000.
Και πάμε ψηλότερα, και υψηλότερη, και υψηλότερη.
Τελικά, αυτό, επίσης, τα διαλείμματα.
>> Τελικά, με ένα πολύ μακρύ, η οποία είναι η τιμή 64-bit, δεν
μια τιμή 32-bit, αν μετράνε πολύ υψηλή, μπορείτε τυλίξτε γύρω από το 0.
Και σε αυτή την περίπτωση, μπορούμε να συμβεί σε καταλήξετε με ένα αρνητικό αριθμό.
>> Έτσι, αυτό είναι ένα πρόβλημα.
Και αποδεικνύεται ότι αυτό το πρόβλημα δεν είναι το μόνο που απόκρυφες.
Ακόμα κι αν έχω σκόπιμα που προκαλείται με αυτά τα λάθη,
αποδεικνύεται βλέπουμε το είδος όλων γύρω μας, ή τουλάχιστον κάποιοι από εμάς κάνουμε.
>> Έτσι, σε Lego Star Wars, αν έχετε παίξει ποτέ το παιχνίδι,
αποδεικνύεται μπορείτε να πάτε γύρω από σπάζοντας τα πράγματα στον κόσμο LEGO,
και συλλογή νομισμάτων, κατ 'ουσίαν.
Και αν έχετε παίξει ποτέ Με αυτό τον τρόπο το παιχνίδι πάρα πολύ χρόνο,
όπως αυτή ανώνυμο επιμέρους Εδώ έκανε, ο συνολικός αριθμός
των κερμάτων που μπορείτε να συλλέξετε είναι, όπως φαίνεται, 4000000000.
>> Τώρα, με το είναι πραγματικά στρογγυλεμένες.
Έτσι LEGO προσπαθούσε να να κρατήσει τα πράγματα φιλική προς το χρήστη.
Δεν το κάνει ακριβώς 2 το 32 δύναμη, ανά την περασμένη εβδομάδα.
Αλλά 4000000000 είναι ένας λόγος.
Φαίνεται, με βάση αυτές τις πληροφορίες, ότι LEGO, και η εταιρεία που
έκανε αυτό το πραγματικό λογισμικό, αποφάσισε ότι ο μέγιστος αριθμός των κερμάτων
ο χρήστης μπορεί να συσσωρευτούν Είναι, πράγματι, 4000000000,
επειδή επέλεξαν τον κωδικό τους να χρησιμοποιήσει όχι πολύ καιρό, προφανώς,
αλλά απλά ένας ακέραιος αριθμός, ένα ανυπόγραφο ακέραιος, μόνο ένας θετικός ακέραιος, των οποίων η
μέγιστη τιμή περίπου είναι αυτό.
Λοιπόν, εδώ είναι ένα άλλο αστείο ένα.
Έτσι, στον πολιτισμό παιχνίδι, το οποίο κάποιοι από εσάς μπορεί να είναι εξοικειωμένοι με
αποδεικνύεται ότι πριν από χρόνια υπάρχει Ήταν ένα σφάλμα σε αυτό το παιχνίδι σύμφωνα με την οποία
αν έχετε παίξει το ρόλο του Γκάντι στο παιχνίδι,
αντί γι 'αυτόν είναι πολύ ειρηνιστής, αντ 'αυτού ήταν απίστευτα, απίστευτα
επιθετική, σε ορισμένες περιστάσεις.
Ειδικότερα, ο τρόπος που Πολιτισμός έργα είναι ότι εάν εσείς, ο παίκτης,
υιοθετήσει τη δημοκρατία, σας επιθετικότητα βαθμολογία παίρνει
μειώνεται κατά δύο, έτσι μείον μείον, και στη συνέχεια, μείον μείον.
>> Έτσι, μπορείτε να αφαιρέσετε 2 από πραγματική επαναλαμβάνετε.
Δυστυχώς, αν την επανάληψη σας είναι αρχικά 1, και μπορείτε να αφαιρέσετε 2 από αυτό
μετά την έγκριση της δημοκρατίας όπως ο Γκάντι εδώ ενδέχεται να
έχουν κάνει, γιατί ήταν πολύ passive-- 1 στην κλίμακα της επιθετικότητας.
Αλλά αν υιοθετεί τη δημοκρατία, στη συνέχεια, πηγαίνει από 1 έως αρνητική 1.
>> Δυστυχώς, ήταν χρησιμοποιώντας ανυπόγραφο αριθμούς,
πράγμα που σημαίνει ότι αντιμετωπίζονται ακόμα και αρνητική αριθμούς σαν να ήταν θετικές.
Και αποδεικνύεται ότι η θετικό ισοδύναμο της αρνητικής 1,
σε τυπικά προγράμματα υπολογιστών, είναι 255.
Έτσι, αν ο Γκάντι υιοθετεί , Και ως εκ τούτου η δημοκρατία έχει
βαθμολογία επιθετικότητα του μειώθηκε, στην πραγματικότητα κυλά γύρω στο 255
και τον πιο καθιστά επιθετικό χαρακτήρα στο παιχνίδι.
Έτσι, μπορείτε να το google επάνω σε αυτό.
Και ήταν, πράγματι, μία τυχαίο σφάλμα προγραμματισμού,
αλλά ότι μπήκαν αρκετά η γνώση από τότε.
>> Αυτό είναι όλα διασκέδαση και χαριτωμένο.
Πιο τρομακτικό είναι όταν πραγματικά πραγματικό κόσμο συσκευές, και όχι τα παιχνίδια,
έχουν αυτά τα ίδια σφάλματα.
Στην πραγματικότητα, μόλις πριν από ένα χρόνο ένα άρθρο ήρθε περισσότερα για το Boeing 787 Dreamliner.
>> Και το άρθρο σε πρώτη ματιά διαβάζει λίγο απόκρυφες.
Αλλά είπε αυτό, ένα λογισμικό ευπάθεια σε της Boeing
νέα 787 jet Dreamliner έχει η δυνατότητα να προκαλέσουν πιλότους
να χάσει τον έλεγχο της το αεροσκάφος, ενδεχομένως
στα μέσα της πτήσης, οι υπάλληλοι της FAA προειδοποίησε τις αεροπορικές εταιρείες πρόσφατα.
Ήταν ο προσδιορισμός ότι ένα μοντέλο 787
αεροπλάνο, το οποίο έχει τροφοδοτείται συνεχώς για 248 ημέρες
μπορεί να χάσει όλο το εναλλασσόμενο ρεύμα, AC, ηλεκτρική ενέργεια, λόγω της γεννήτριας
μονάδες ελέγχου, GCUs, ταυτόχρονα υπεισέλθω σε αποτυγχάνουν ασφαλή λειτουργία.
Είναι το είδος της απώλειας μου.
Αλλά το σημείωμα ανέφερε, εντάξει, τώρα πήρα ότι, η κατάσταση προκλήθηκε από ένα λογισμικό
αντιμετωπίσει στο εσωτερικό ο έλεγχος της γεννήτριας
μονάδες που θα ξεχειλίσει μετά 248 ημέρες συνεχούς ρεύματος.
Είμαστε έκδοση αυτή παρατηρήσετε να αποτρέψει την απώλεια
όλων των AC ηλεκτρικές δύναμη, η οποία θα μπορούσε να οδηγήσει
σε απώλεια του ελέγχου του αεροπλάνου.
>> Έτσι, κυριολεκτικά, υπάρχει κάποια ακέραιος, ή κάποιο ισοδύναμο τύπο δεδομένων,
που χρησιμοποιούνται στο λογισμικό σε ένα πραγματικό αεροπλάνο
ότι αν κρατήσει αεροπλάνο σας για αρκετά μεγάλο χρονικό διάστημα, το οποίο προφανώς
μπορεί να είναι η περίπτωση, αν είστε λίγο τρέξιμο τους συνεχώς και ποτέ δεν αποσυνδέοντας
αεροπλάνο σας, όπως φαίνεται, ή αφήνοντας τις μπαταρίες του πεθαίνουν,
τελικά θα μετρήσει μέχρι και πάνω, και πάνω, και επάνω, και επάνω, και επάνω.
>> Και, από τη φύση, πεπερασμένη ποσότητα μνήμης
θα ξεχειλίσει, το τροχαίο πίσω στο μηδέν ή κάποια αρνητική τιμή,
μια παρενέργεια της οποίας είναι η τρομακτικά πραγματική πραγματικότητα
ότι το αεροπλάνο μπορεί να χρειαστεί να γίνει επανεκκίνηση, αποτελεσματικά,
ή θα μπορούσε να πέσει, ακόμη χειρότερα, καθώς πετάει.
Έτσι, αυτά τα είδη των θεμάτων εξακολουθούν να είναι μαζί μας,
even-- αυτό ήταν ένα άρθρο το 2015, όλα τα πιο τρομακτικό
όταν δεν κάνουν απαραίτητα κατανοήσουν, να εκτιμήσουν, ή να προβλέψει
αυτά τα είδη των λαθών.
>> Έτσι αποδεικνύεται ότι υπάρχει μία άλλη κακό πράγμα για αναπαράσταση δεδομένων.
Αποδεικνύεται ότι ακόμα και άρματα είναι είδος εσφαλμένη, διότι άρματα, πάρα πολύ,
Πρότεινα τα 32 bits, ή ίσως 64, αν χρησιμοποιείτε ένα διπλό.
Αλλά αυτό είναι ακόμα περιορισμένη.
>> Και η σύλληψη είναι ότι, αν μπορείτε να θέσει έναν άπειρο αριθμό των αριθμών
μετά την υποδιαστολή, δεν υπάρχει κανένας τρόπος που μπορείτε
μπορεί να αντιπροσωπεύουν όλες τις δυνατές αριθμούς που διδαχθήκαμε
σε βαθμό σχολείο μπορούν να υπάρχουν στον κόσμο.
Ένας υπολογιστής, κατ 'ουσίαν, πρέπει να επιλέξετε ένα υποσύνολο αυτών των αριθμών
να εκπροσωπεί με ακρίβεια.
>> Τώρα, ο υπολογιστής μπορεί να γύρο ίσως λίγο,
και μπορεί να σας επιτρέψει να χονδρικά κατάστημα οποιοσδήποτε αριθμός που θα μπορούσε ενδεχομένως να θέλετε.
Αλλά ακριβώς διαισθητικά, αν έχουν ένα πεπερασμένο αριθμό bits,
μπορείτε να τις μεταθέτει μόνο με τόσους πολλούς τρόπους πεπερασμένο.
Έτσι, δεν μπορείτε ενδεχομένως χρησιμοποιούν έναν πεπερασμένο αριθμό
του μετάθεση των bits, πρότυπα μηδενικά και μονάδες,
να αντιπροσωπεύουν μια άπειρη αριθμός των αριθμών,
γεγονός που υποδηλώνει ότι οι υπολογιστές θα μπορούσε κάλλιστα να είναι ψέματα για να μας μερικές φορές.
>> Στην πραγματικότητα, ας το κάνουμε αυτό.
Επιτρέψτε μου να πάω πίσω στο CS50 IDE.
Επιτρέψτε μου να προχωρήσει και να δημιουργήσετε ένα μικρό πρόγραμμα
που ονομάζεται ανακρίβεια, για να δείξει ότι υπολογιστές είναι, πράγματι, ανακριβή.
>> Και επιτρέψτε μου να προχωρήσει και να αρχίσει με μερικές από τις εν λόγω κώδικα από το παρελθόν,
και τώρα κάνει ακριβώς το εξής.
Επιτρέψτε μου να προχωρήσει και να κάνει printf, τοις εκατό f, backslash n, 1 διαιρείται με το 10.
Με άλλα λόγια, ας βουτήξει στα βαθιά 1/10, όπως και 1 και διαιρείται με το 10.
Σίγουρα, ένας υπολογιστής μπορεί να αντιπροσωπεύει το 1/10.
>> Ας πάμε μπροστά και να κάνουν ανακρίβεια.
Ας δούμε.
Μορφή καθορίζει τύπου double.
Αλλά το επιχείρημα του τύπου int.
Τι συμβαίνει?
>> Ω, ενδιαφέρουσα, γι 'αυτό είναι ένα μάθημα που πήραμε από πριν.
Λέω, hey, υπολογιστή show μου ένα πλωτήρα με ποσοστό f.
Αλλά είμαι δίνοντας 2 ints.
Έτσι αποδεικνύεται, μπορώ να διορθώσετε αυτό σε μια-δυο τρόπους.
>> Θα μπορούσα απλά μετατρέψει ένα σε 1.0, και 10 σε 10,0, η οποία θα ήταν, πράγματι,
έχει ως αποτέλεσμα τη μετατροπή τους σε floats-- εξακολουθούν να ελπίζουμε
τον ίδιο αριθμό.
Ή αποδεικνύεται ότι υπάρχει κάτι θα δούμε και πάλι πριν από καιρό.
Θα μπορούσατε να ρίξει τους αριθμούς.
>> Μπορείτε, χρησιμοποιώντας αυτήν την παρενθετική έκφραση, μπορείτε να πείτε,
hey, υπολογιστή, πάρτε αυτό το 10, το οποίο γνωρίζω είναι μια int.
Αλλά θεραπεία, παρακαλώ, σαν να πρόκειται για ένα πλωτήρα.
Αλλά αυτό αισθάνεται άσκοπα περίπλοκες.
>> Για τους σκοπούς μας σήμερα, ας κυριολεκτικά
κάνουν τους τιμές κινητής υποδιαστολής με ένα δεκαδικό σημείο, όπως αυτό.
Επιτρέψτε μου να πάει μπροστά και να επαναπροσδιοριστούν, να ανακρίβεια, καλό, dot κάθετος
ανακρίβεια, εισάγετε.
Εντάξει, ψάχνουμε καλό.
>> 1 διαιρούμενο με 10, σύμφωνα με μου Mac εδώ, είναι, πράγματι, 0,100000.
Τώρα, διδάχτηκα στο σχολείο βαθμού εκεί θα πρέπει να είναι ένας άπειρος αριθμός 0 του.
Οπότε ας προσπαθήσουμε τουλάχιστον για να δείτε μερικά από αυτά.
Αποδεικνύεται ότι η printf είναι λίγο φανταχτερό ακόμα ό, τι έχουμε χρησιμοποιήσει.
Αποδεικνύεται ότι δεν χρειάζεται να καθορίσετε μόνο τοις εκατό f, ή απλά τοις εκατό i.
Μπορείτε πραγματικά να καθορίσετε κάποιες επιλογές ελέγχου εδώ.
>> Συγκεκριμένα, Πάω να πω, hey, printf,
πραγματικά μου δείξει 10 δεκαδικών ψηφίων.
Έτσι ώστε να φαίνεται λίγο παράξενο.
Αλλά λέτε τοις εκατό, dot, πόσους αριθμούς
θέλετε να δείτε μετά το υποδιαστολή, και στη συνέχεια στ
για επίπεδες, μόνο και μόνο επειδή αυτό είναι τι λέει η τεκμηρίωση.
Επιτρέψτε μου να πάει μπροστά και να σώσει αυτό.
>> Και παρατηρήσετε πάρα πολύ, παίρνω κουραστεί να πληκτρολογήσετε ξανά τα πράγματα.
Έτσι είμαι απλά τη ρύθμιση του και κάτω βέλος για τα κλειδιά μου εδώ.
Και αν Κρατάω το χτύπημα, μπορείτε μπορεί να δει όλες τις εντολές
ότι έκανα, ή κακώς γίνονται.
>> Και Πάω να προχωρήσει τώρα και δεν χρησιμοποιούν πραγματικά ότι, προφανώς.
Κάντε ανακρίβεια, τελεία slash imprecision-- έτσι
τι διδάχτηκα στο δημοτικό σχολείο ελέγχει έξω.
Ακόμα κι αν μπορώ να εκτυπώσω σε 10 δεκαδικά τοποθετεί, πράγματι, είναι 0,10000.
Αλλά ξέρετε τι;
>> Ας πάρει λίγο άπληστοι.
Ας πούμε, όπως, δείξε μου 55 επισημαίνει μετά την υποδιαστολή.
Ας πάρει πραγματικά αυτό προγραμματίσετε έξω για μια περιστροφή.
Επιτρέψτε μου να το ξανακάνω με make ανακρίβεια, dot κάθετος, ανακρίβεια.
>> Και πάμε.
την παιδική σας ηλικία ήταν ένα ψέμα.
Προφανώς, 1 διαιρούμενο με 10 είναι πράγματι 0.100000000000000005551115123--
>> Τι συμβαίνει?
Λοιπόν, αποδεικνύεται, αν το είδος της κοιτάξει αρκετά μακριά έξω στην υποκείμενη
αναπαράσταση αυτή αριθμός, στην πραγματικότητα
δεν είναι ακριβώς 1/10, ή 0,1 και ένας άπειρος αριθμός των μηδενικών.
Τώρα, γιατί είναι αυτό;
>> Λοιπόν, ακόμα κι αν αυτό είναι ένα απλό αριθμό σε εμάς τους ανθρώπους, 1 διαιρούμενο με 10,
είναι ακόμα ένα από τα απείρως πολλά αριθμούς που θα μπορούσαμε να σκεφτούμε.
Αλλά ένας υπολογιστής μπορεί να αντιπροσωπεύει μόνο πεπερασμένο πλήθος έτσι αριθμούς.
Και έτσι, ουσιαστικά, ποια είναι η υπολογιστής δείχνοντάς μας είναι πιο κοντά της
προσέγγιση στον αριθμό θέλουμε να πιστεύουμε ότι είναι 1/10,
ή πραγματικά 0,10000 άπειρον.
>> Αντίθετα, όμως, αυτό είναι όσο πιο κοντά μπορεί να πάρει.
Και, πράγματι, αν κοιτάξετε κάτω από την κουκούλα,
όπως είμαστε εδώ με την εξέταση 55 ψηφία μετά την υποδιαστολή,
βλέπουμε πραγματικά αυτή την πραγματικότητα.
Τώρα, ως ένα μέρος, αν έχετε δει ποτέ το movie--
οι περισσότεροι από εσάς ίσως haven't-- αλλά Σούπερμαν 3 πριν από μερικά χρόνια,
Richard Pryor μόχλευση ουσιαστικά αυτό πραγματικότητα στην εταιρεία του για να κλέψει πολλά
κλασμάτων και τα κλάσματα του πένες, επειδή η company-- όπως θυμάμαι,
αυτό είναι μια while-- ήταν ουσιαστικά πετάμε κάτι που δεν ταιριάζει
στην έννοια της σεντ.
>> Αλλά αν προσθέσετε όλα αυτά μικρό, μικρό, μικρό αριθμούς και πάλι,
και ξανά, και ξανά, μπορείτε, όπως στο περίπτωσή του, κάνει ένα καλό χρηματικό ποσό.
>> Την ίδια ιδέα εξαπατάται από μια πιο πρόσφατη, αλλά ακόμα και τώρα ηλικιωμένων
ταινία, που ονομάζεται Office Space, όπου τα παιδιά σε αυτή την ταινία,
έκανε το ίδιο πράγμα, σκάτωσε τελείως, κατέληξε με τον τρόπο πάρα πολύ
χρήματα στον τραπεζικό λογαριασμό τους.
Ήταν όλα πολύ ύποπτες.
Αλλά στο τέλος της ημέρας, ανακρίβεια είναι παντού γύρω μας.
>> Και αυτό, επίσης, μπορεί να είναι τρομακτικά την υπόθεση.
Αποδεικνύεται ότι ο Σούπερμαν 3 και το Office Space στην άκρη, εκεί
μπορεί να είναι λίγο πολύ πραγματική κόσμο προεκτάσεις
από τις πραγματικότητες της ασαφούς αναπαράσταση των δεδομένων
ότι ακόμα και εμείς οι άνθρωποι να Αυτή η μέρα δεν πρέπει απαραίτητα
κατανοούν, καθώς όπως θα έπρεπε, ή να θυμηθεί τόσο συχνά όσο θα έπρεπε.
Και, πράγματι, τα ακόλουθα συνδετήρας είναι από μια ματιά σε μερικά πολύ πραγματικό κόσμο
διακλαδώσεις του τι θα συμβεί αν δεν εκτιμούν την ανακρίβεια ότι
μπορεί να συμβεί σε αριθμούς εκπροσώπηση.
>> [ΑΝΑΠΑΡΑΓΩΓΉ ΒΊΝΤΕΟ]
>> -Computers, Όλοι έχουμε έρθει να δεχτούν τα συχνά απογοητευτικό προβλήματα που
πάει με διατηρούμε, σφάλματα, ιούς, και δυσλειτουργίες λογισμικού,
για μικρές τιμές να πληρώσουν για την ευκολία.
Αλλά σε υψηλής τεχνολογίας και υψηλής ταχύτητας στρατιωτικών και το πρόγραμμα διαστημικών εφαρμογών,
το μικρότερο πρόβλημα μπορεί να μεγεθυνθεί σε καταστροφή.
>> Στις 4 Ιουνίου, 1996, επιστήμονες που παρασκευάζονται να ξεκινήσει μια μη επανδρωμένη Ariane 5 πύραυλο.
Είναι μετέφερε την επιστημονική δορυφόροι είναι σχεδιασμένοι
να προσδιοριστεί με ακρίβεια το πώς η αλληλεπιδρά το γήινο μαγνητικό πεδίο
με ηλιακούς ανέμους.
Ο πύραυλος χτίστηκε για η Ευρωπαϊκή Υπηρεσία Διαστήματος,
και ανασηκωμένη από τις εγκαταστάσεις της στην ακτή της Γαλλικής Γουιάνας.
>> -Στο Περίπου 37 δευτερόλεπτα η πτήση, την πρώτη τους
παρατηρήσει κάτι δεν πήγαινε καλά.
Τα ακροφύσια ήταν γυρίζοντας στο ένας τρόπος που πραγματικά δεν θα έπρεπε.
Περίπου 40 δευτερόλεπτα στην πτήση, σαφώς, το όχημα ήταν σε μπελάδες.
>> Και αυτό είναι, όταν έκαναν μια απόφαση για να το καταστρέψουν.
Ο αξιωματικός ασφαλείας σειρά, με τεράστια κότσια, πιέζεται το κουμπί,
ανατίναξαν τον πύραυλο, προτού να μπορέσει να γίνει ένα κίνδυνο για τη δημόσια ασφάλεια.
>> -Αυτό Ήταν το παρθενικό ταξίδι του Ariane 5.
Και την καταστροφή του πήρε τοποθετήστε εξαιτίας ενός ελαττώματος
ενσωματωμένα στο λογισμικό του πυραύλου.
-Το Πρόβλημα στο Ariane ήταν ότι υπήρχε ένας αριθμός που
απαιτούνται 64 bits για να εκφράσουν.
Και ήθελαν να μετατρέψουν σε έναν αριθμό 16-bit.
Υπέθεσαν ότι η αριθμός αυτός δεν πρόκειται ποτέ
να είναι πολύ μεγάλη, ότι οι περισσότεροι από αυτούς ψηφία σε έναν αριθμό 64-bit ήταν μηδενικά.
Θα ήταν λάθος.
>> -Η Αδυναμία του ενός πρόγραμμα λογισμικού να αποδεχθεί
το είδος του αριθμού που παράγεται από άλλη ήταν η αιτία της αποτυχίας.
Ανάπτυξη λογισμικού είχε γίνει πολύ δαπανηρό μέρος της νέας τεχνολογίας.
Ο πύραυλος ήταν πολύ επιτυχής, τόσο μεγάλο μέρος του λογισμικού
που δημιουργήθηκε γι 'αυτό ήταν επίσης που χρησιμοποιούνται για την Ariane 5.
>> -Το Βασικό πρόβλημα ήταν ότι η Ariane 5 ήταν γρηγορότερη, επιταχυνόμενη πιο γρήγορα.
Και το λογισμικό δεν είχε αντιπροσώπευε γι 'αυτό.
>> -Η Καταστροφή του πυραύλου Ήταν μια τεράστια οικονομική καταστροφή,
Όλα αυτά οφείλονται σε σφάλμα λογισμικού λεπτό.
Αλλά αυτό δεν ήταν η πρώτη προβλήματα μετατροπής των δεδομένων χρόνου
είχε μαστίζεται σύγχρονη τεχνολογία πυραύλων.
>> -Σε 1991, με την έναρξη του πρώτου Πολέμου του Κόλπου,
Ο πατριώτης Πυραύλων παρουσίασαν ένα παρόμοιο είδος
του προβλήματος μετατροπή αριθμού.
Και ως αποτέλεσμα, 28 άτομα, 28 Αμερικανοί στρατιώτες,
σκοτώθηκαν, και περίπου 100 άλλοι τραυματίστηκαν,
όταν το Patriot, η οποία υποτίθεται ότι για την προστασία από τις εισερχόμενες scuds,
απέτυχε να βάλει φωτιά σε ένα πύραυλο.
>> -Όταν Το Ιράκ εισέβαλε στο Κουβέιτ, και την Αμερική ξεκίνησε Καταιγίδα της Ερήμου στις αρχές του 1991,
μπαταρίες Patriot Missile αναπτύχθηκαν για την προστασία της Σαουδικής Αραβίας και του Ισραήλ
από το ιρακινό πυραυλικές επιθέσεις Scud.
Ο πατριώτης είναι ένας ΗΠΑ μέσου βεληνεκούς επιφάνεια στο σύστημα του αέρα, που κατασκευάζονται
από την εταιρεία Raytheon.
>> -Το Μέγεθος της αναχαίτισης Patriot η ίδια είναι περίπου περίπου 20 πόδια.
Και ζυγίζει περίπου 2.000 κιλά.
Και αυτό φέρνει μια κεφαλή περίπου, Νομίζω ότι είναι περίπου 150 κιλά.
Και η ίδια η κεφαλή είναι ένα υψηλό εκρηκτικό, το οποίο
έχει θραύσματα γύρω από αυτό.
Το περίβλημα του κεφαλή είναι σχεδιαστεί για να λειτουργούν σαν σκάγι.
>> -Οι πυραύλους πραγματοποιούνται τέσσερις ανά εμπορευματοκιβώτιο,
και μεταφέρονται από ένα ημι ρυμουλκό.
>> -Το Σύστημα Patriot αντιπυραυλικής πηγαίνει πίσω τουλάχιστον 20 χρόνια τώρα.
Αρχικά είχε σχεδιαστεί ως πυραυλικής άμυνας αέρα
να καταρρίψουν τα αεροπλάνα του εχθρού.
Στο πρώτο πόλεμο του Κόλπου, όταν ο πόλεμος ήρθε μαζί,
ο στρατός ήθελε να το χρησιμοποιήσει για να καταρρίψουν scuds, δεν αεροπλάνα.
>> Η ιρακινή Πολεμική Αεροπορία ήταν δεν είναι τόσο μεγάλο πρόβλημα.
Αλλά ο στρατός ήταν ανησυχούν για scuds.
Και έτσι προσπάθησαν να την αναβάθμιση του Patriot.
>> -Intercepting Έναν εχθρό πυραύλων ταξιδεύει σε Mach 5
επρόκειτο να αρκετά δύσκολο.
Αλλά όταν το Patriot έσπευσε σε λειτουργία,
ο στρατός δεν γνώριζε μια Ιρακινές τροποποίηση που έκανε
scuds τους σχεδόν αδύνατο να χτυπήσει.
>> -Τι Συνέβη είναι οι scuds ότι έρχονταν σε ήταν ασταθής.
Είχαν ταλάντευση.
Ο λόγος για αυτό ήταν οι Ιρακινοί, προκειμένου
για να πάρει 600 χιλιόμετρα έξω από ένα χιλιόμετρο 300
φάσμα πυραύλων, πήρε το βάρος έξω από το μπροστινό κεφαλή.
Έκαναν η κεφαλή αναπτήρα.
>> Έτσι τώρα το Patriot είναι προσπαθούν να έρθουν στο Scud.
Και τις περισσότερες φορές, η συντριπτική πλειοψηφία του χρόνου,
θα πετάξει ακριβώς από το Scud.
Μόλις οι διαχειριστές συστημάτων Patriot συνειδητοποίησε το Patriot έχασε το στόχο της,
που πυροδότησε κεφαλή του Patriot του να αποφευχθούν πιθανές απώλειες εάν
αφέθηκε να πέσει στο έδαφος.
>> -ότι Ήταν αυτό που οι περισσότεροι άνθρωποι είδαν, αυτές οι μεγάλες πύρινες σφαίρες στον ουρανό,
και παρεξηγηθεί ως παρακολουθήσεις των Scud κεφαλές.
>> -Αν Το βράδυ ουρανούς, πατριώτες εμφανίστηκε
για να είναι επιτυχή καταστρέφοντας scuds, στο Νταχράν,
θα μπορούσε να υπάρξει κανένα λάθος σχετικά με τις επιδόσεις του.
Εκεί, το σύστημα ραντάρ του Patriot του χάσει τα ίχνη ενός εισερχόμενου Scud,
και ποτέ δεν ξεκίνησε λόγω σε ένα ελάττωμα του λογισμικού.
Ήταν οι Ισραηλινοί που ανακαλύφθηκε για πρώτη φορά ότι όσο μεγαλύτερη είναι η σύστημα ήταν,
μεγαλύτερη είναι η χρονική διαφορά έγινε, λόγω ενός ρολογιού ενσωματωμένο
στον υπολογιστή του συστήματος.
>> -περίπου Δύο εβδομάδες πριν η τραγωδία στο Νταχράν,
οι Ισραηλινοί αναφερθεί το Υπουργείο Άμυνας
ότι το σύστημα είχε χάσει το χρόνο.
Μετά από περίπου οκτώ ώρες ή λειτουργίας, παρατήρησαν ότι το σύστημα
είχε γίνει αισθητά λιγότερο ακριβείς.
Το Υπουργείο Άμυνας ανταποκρίθηκε λέγοντας όλες τις μπαταρίες Patriot
να μην αφήσει τα συστήματα για μεγάλο χρονικό διάστημα.
Ποτέ δεν είπε τι ένα μεγάλο χρονικό διάστημα was-- από οκτώ ώρες, 10 ώρες, 1.000 ώρες.
Κανείς δεν ήξερε.
>> -Το Patriot μπαταρία σταθμεύουν στο στρατώνα
στο Νταχράν και λανθασμένη εσωτερική της ρολόι είχε για πάνω από 100 ώρες
τη νύχτα της 25 Φεβρουαρίου.
>> -Είναι Παρακολουθούνται χρόνο με ακρίβεια περίπου ένα δέκατο του δευτερολέπτου.
Τώρα, ένα δέκατο του δευτερολέπτου είναι μια ενδιαφέρουσα αριθμός,
επειδή δεν μπορεί να εκφραστεί σε δυαδική ακριβώς, η οποία
σημαίνει ότι δεν μπορεί να εκφραστεί με ακρίβεια σε κάθε σύγχρονο ψηφιακό υπολογιστή.
Είναι δύσκολο να πιστέψει κανείς.
>> Αλλά χρησιμοποιούν αυτό ως παράδειγμα.
Ας πάρουμε το νούμερο ένα τρίτο.
Το ένα τρίτο δεν μπορεί να είναι Εκφράζεται σε δεκαδική ακρίβεια.
Το ένα τρίτο είναι 0.333 συνεχίζεται για το άπειρο.
>> Δεν υπάρχει κανένας τρόπος να το κάνουμε αυτό με απόλυτη ακρίβεια σε δεκαδικό.
Αυτό είναι ακριβώς το είδος του προβλήματος ότι συνέβη στο Patriot.
Όσο περισσότερο το σύστημα έτρεξε, η χειρότερα το σφάλμα χρόνου έγινε.
>> -Μετά Από 100 ώρες λειτουργίας, η σφάλμα στο χρόνο ήταν μόνο περίπου το ένα τρίτο
του δευτερολέπτου.
Αλλά όσον αφορά την στόχευση μια πυραύλων ταξιδεύει σε Mach 5,
οδήγησε σε μια καταδίωξη σφάλμα πάνω από 600 μέτρα.
Θα ήταν ένα μοιραίο λάθος για τους στρατιώτες σε ό, τι
που συνέβη είναι μια εκτόξευση Scud ήταν ανιχνεύονται από νωρίς δορυφόρους Προειδοποίηση
και ήξεραν ότι ο Scud ήταν έρχονται σε γενική κατεύθυνσή τους.
Δεν ήξεραν πού ερχόταν.
>> -Είναι Ήταν τώρα μέχρι το ραντάρ συστατικό του συστήματος Patriot
υπεράσπιση Νταχράν να εντοπίσετε και να διατηρήσουν κομμάτι του εισερχόμενου εχθρού πυραύλων.
>> -Το Ραντάρ ήταν πολύ έξυπνος.
Θα ήταν πραγματικά παρακολουθείτε η θέση του Scud,
και στη συνέχεια να προβλέψουμε πού πιθανώς θα είναι η επόμενη φορά που έστειλε το ραντάρ
ένας παλμός έξω.
Αυτό ήταν που ονομάζεται πύλη φάσμα.
>> -Στη Συνέχεια, μία φορά την Patriot αποφασίζει αρκετό χρόνο έχει
πέρασε για να πάει πίσω και να ελέγξετε το επόμενο τοποθεσία για αυτό το αντικείμενο που ανιχνεύτηκε,
πηγαίνει πίσω.
Έτσι, όταν πήγε πίσω στο λάθος θέση, τότε δεν βλέπει κανένα αντικείμενο.
Και αποφασίζει ότι δεν υπήρχε αντικείμενο, ήταν μια ψευδής ανίχνευση,
και πέφτει το κομμάτι.
>> -Το Εισερχόμενες Scud εξαφανίστηκε από την οθόνη του ραντάρ.
Και δευτερόλεπτα αργότερα, χτύπησε στο στρατώνα.
Η Scud σκότωσε 28, και ήταν η τελευταία ένα απολύθηκε κατά τη διάρκεια του πρώτου Πολέμου του Κόλπου.
>> Τραγικά, το ενημερωμένο λογισμικό έφτασε στο Νταχράν την επόμενη ημέρα.
Το ελάττωμα του λογισμικού είχε ήταν σταθερή, το κλείσιμο
ένα κεφάλαιο στην ταραγμένη ιστορία του πυραύλου Patriot.
>> [ΑΝΑΠΑΡΑΓΩΓΉ ΒΊΝΤΕΟ]
DAVID J. Malan: Έτσι, αυτό είναι όλο για να λένε ότι αυτά τα θέματα της υπερχείλισης
και ανακρίβεια είναι πολύ πραγματική.
Λοιπόν, πώς φτάσαμε εδώ;
Αρχίσαμε με απλά μιλάμε για printf.
Και πάλι, αυτή η λειτουργία που εκτυπώνει κάτι στην οθόνη,
και εισαγάγαμε στη συνέχεια μερικές άλλες λειτουργίες
από τη λεγόμενη βιβλιοθήκη CS50 του.
Και θα συνεχίσουμε να δείτε αυτές σε εύθετο χρόνο.
Και εμείς, ιδιαίτερα, χρησιμοποιείται κορδόνι get, και να πάρει int, και τώρα επίσης να πάρετε float,
και όμως άλλοι ακόμα θα συναντούμε και να χρησιμοποιήσουν τους εαυτούς μας πριν από καιρό.
>> Αλλά σε ορισμένες περιπτώσεις, έχουν έχουμε ήδη δει μια ανάγκη
για να αποθηκεύσετε ό, τι αυτές οι λειτουργίες χέρι πίσω;
Μας πίσω ένα string το χέρι, ή int ή float.
Και μερικές φορές χρειάζεται να θέσω string, ή int ή float, κάπου.
>> Και για να αποθηκεύσετε αυτά τα πράγματα, ας θυμηθούμε απλά όπως στην αρχή, έχουμε μεταβλητές.
Αλλά σε αντίθεση με το Ξυστό, σε C έχουμε πραγματική τους τύπους
των variables-- δεδομένων τύποι, πιο generally--
Ανάμεσά τους, ένα κορδόνι, μια int, ένας επιπλέουν, και αυτοί οι άλλοι ακόμα.
>> Και έτσι, όταν δηλώνουμε μεταβλητές στη C, θα πρέπει να δηλώνουν τους τύπους των δεδομένων μας.
Αυτό δεν είναι κάτι που θα έχουν να κάνουν αργότερα στο εξάμηνο
όπως τη μετάβαση σε άλλες γλώσσες.
Αλλά για τώρα, χρειαζόμαστε σε ένα εκ των προτέρων εκ των προτέρων,
εξηγήσει στον υπολογιστή τι είδους της μεταβλητής που θέλουμε να μας δώσει.
>> Τώρα, εν τω μεταξύ, για να εκτυπώσετε αυτά τα είδη των τύπων δεδομένων,
έχουμε να πούμε printf τι να περιμένουμε.
Και είδαμε τοις εκατό s για έγχορδα, και ποσοστό i για ακέραιοι,
και μερικοί άλλοι ήδη.
Και αυτά είναι απλώς τις απαιτήσεις για την οπτική παρουσίαση
των εν λόγω πληροφοριών.
>> Και κάθε ένα από αυτά μπορεί πραγματικά να είναι παραμετροποιημένη ή πειραγμένο με κάποιο τρόπο,
αν θέλετε να προωθήσουν τον έλεγχο το είδος της παραγωγής που μπορείτε να πάρετε.
Και, στην πραγματικότητα, αποδεικνύεται ότι όχι μόνο είναι backslash n για μια νέα γραμμή εκεί.
Υπάρχει κάτι άλλο που ονομάζεται ανάστροφη κάθετο r για μεταφορά μετ 'επιστροφής, η οποία
μοιάζει περισσότερο με ένα παλιά γραφομηχανή σχολείο,
και επίσης των Windows που χρησιμοποιείται για πολλά χρόνια.
>> Υπάρχει backslash t για τους ΟΤΑ.
Αποδεικνύεται, ότι αν θέλετε να διπλά εισαγωγικά μέσα σε ένα string,
ανάκληση που έχουμε χρησιμοποιήσει διπλά εισαγωγικά διπλά
απόσπασμα από την αριστερή και τη δεξιά άκρα της χορδές μας μέχρι στιγμής.
Αυτό φαίνεται να συγχέουμε τα πράγματα.
>> Αν θέλετε να βάλετε ένα διπλό απόσπασμα στο η μέση μιας string-- και, πράγματι,
είναι συγχέοντας για να δούμε.
Και έτσι πρέπει να ξεφύγουν, έτσι ώστε να μιλούν, ένα διπλό απόσπασμα με κάτι
όπως, κυριολεκτικά, backslash διπλά εισαγωγικά.
Και υπάρχουν μερικά άλλα ακόμα.
Και θα δούμε περισσότερα από αυτά στην πραγματική χρήση πριν από καιρό.
>> Ας τώρα μετάβαση από δεδομένων, και την εκπροσώπηση,
και αριθμητικούς τελεστές, όλα από τα οποία μας έδωσε κάποιο κτίριο
μπλοκ με το οποίο για να παίξει.
Αλλά τώρα ας πραγματικά να δώσει μας το υπόλοιπο του λεξιλογίου
ότι είχαμε ήδη την περασμένη εβδομάδα με το Scratch
με τη λήψη μια ματιά σε κάποιο άλλο κατασκευές σε Ντο-- δεν είναι όλοι τους.
Αλλά οι ιδέες είμαστε για να δούμε πραγματικά ακριβώς
να τονίσει τη μετάφραση από μία γλώσσα, Ξυστό, σε ένα άλλο, C.
>> Και την πάροδο του χρόνου, θα πάρει περισσότερα εργαλεία για την εργαλειοθήκη μας,
να το πω έτσι, συντακτικά.
Και, πράγματι, θα δείτε ότι οι ιδέες είναι πλέον αρκετά γνωστά από την προηγούμενη εβδομάδα.
Ας το κάνουμε αυτό.
>> Ας πάμε μπροστά και να μαστίγιο μέχρι ένα πρόγραμμα ότι χρησιμοποιεί πραγματικά κάποιες εκφράσεις,
μια Boolean έκφραση.
Επιτρέψτε μου να προχωρήσει εδώ και να δημιουργήσετε ένα νέο αρχείο.
Θα καλέσω αυτό το condition.c.
>> Επιτρέψτε μου να προχωρήσει και να περιλαμβάνουν τη βιβλιοθήκη CS50.
Και επιτρέψτε μου να πάει μπροστά και να περιλαμβάνουν πρότυπο IO.h για τις λειτουργίες μας,
και printf, και πολλά άλλα αντίστοιχα.
Επιτρέψτε μου να δώσω στον εαυτό μου ότι στερεότυπο της int main κενό, του οποίου η εξήγηση που θα
επανέλθει στο μέλλον.
>> Τώρα, επιτρέψτε μου να προχωρήσει και να δώσει τον εαυτό μου έναν int μέσω get int.
Στη συνέχεια, επιτρέψτε μου να προχωρήσει και να το κάνουμε αυτό.
Θέλω να πω, αν i είναι less-- ας διάκριση μεταξύ θετικό, αρνητικό,
ή μηδενικές τιμές.
>> Έτσι, αν i είναι μικρότερη του μηδενός, επιτρέψτε μου Απλά πρέπει το πρόγραμμα αυτό απλά να πω,
αρνητικό, backslash n, αλλιώς εάν το i είναι μεγαλύτερο από το μηδέν.
Τώρα είμαι, φυσικά, πρόκειται να πω printf θετική, backslash n.
Και μετά άλλο if-- θα μπορούσα να κάνω αυτό.
>> Θα μπορούσα να κάνω αν i ισούται με 0.
Αλλά θα ήθελα να κάνει σε τουλάχιστον ένα λάθος ήδη.
Υπενθυμίζεται ότι το σύμβολο της ισότητας είναι δεν είναι ίσες, όπως εμείς οι άνθρωποι το γνωρίζουν.
>> Αλλά είναι ο φορέας ανάθεσης.
Και δεν θέλουμε να πάρει 0 για το το δικαίωμα και το βάζουμε στο i στα αριστερά.
Έτσι, για να αποφευχθεί αυτή η σύγχυση, ή ίσως κατάχρηση των ίσων υπογράψει,
ανθρώπους αποφάσισε πριν από μερικά χρόνια ότι σε πολλές γλώσσες προγραμματισμού
όταν θέλετε να ελέγξετε για την ισότητα μεταξύ του αριστερού και του δικαιώματος,
μπορείτε πραγματικά να χρησιμοποιήσετε ισούται ίσων.
Έτσι θα χτυπήσει το ίσον δύο φορές.
Όταν θέλετε να εκχωρήσετε από δεξιά προς τα αριστερά, μπορείτε να χρησιμοποιήσετε ένα ενιαίο σύμβολο της ισότητας.
Έτσι θα μπορούσαμε να κάνουμε this-- άλλο αν θ ισούται ισούται με μηδέν.
>> Θα μπορούσα να πάω και στη συνέχεια ανοίξτε άγκιστρα μου,
και να πω, printf 0, ανάστροφη κάθετο n, γίνεται.
Αλλά να θυμάστε πώς αυτά πιρούνια στο δρόμο μπορεί να λειτουργήσει.
Και, πραγματικά, απλά σκεφτείτε τη λογική.
i είναι ένας αριθμός.
Είναι ένας ακέραιος αριθμός, ειδικά.
Και αυτό σημαίνει ότι πρόκειται να είναι λιγότερο από 0, ή μεγαλύτερη από 0, ή 0.
Έτσι, υπάρχει το είδος αυτό σιωπηρή προεπιλογή περίπτωση.
>> Και έτσι θα μπορούσαμε, όπως ακριβώς Scratch, σας απαλλάξει από το άλλο αν,
και απλώς να πω άλλο.
Λογικά, αν η προγραμματιστή γνωρίζετε ότι υπάρχει μόνο
τρεις κάδους μέσα στο οποίο ένας σενάριο μπορεί fall-- το πρώτο,
η δεύτερη, ή η τρίτη σε αυτό το case-- δεν
ενοχλεί την προσθήκη του επιπλέον ακρίβειας και η πρόσθετη λογική εκεί.
Απλά προχωρήστε με το default εν προκειμένω του άλλου.
>> Τώρα, ας πάμε μπροστά Μετά την αποθήκευση αυτής, να
συνθήκες dot κάθετος conditions-- δεν είναι μια μεγάλη διεπαφή χρήστη,
γιατί δεν είμαι με αποτέλεσμα η χρήστη, όπως ανέφερα προηγουμένως.
Αλλά αυτό είναι μια χαρά.
Θα το κρατήσετε απλό.
Ας προσπαθήσουμε τον αριθμό 42.
Και αυτό είναι θετικό.
Ας προσπαθήσουμε τον αριθμό αρνητικό 42, αρνητική.
>> Ας προσπαθήσουμε την τιμή 0.
Και, πράγματι, αυτό λειτουργεί.
Τώρα, θα δείτε με τα προβλήματα πριν καιρό, τα πράγματα δοκιμή τρεις φορές,
πιθανόν να μην επαρκεί.
Πιθανόν να θέλετε να δοκιμάσετε μερικά μεγαλύτερους αριθμούς, κάποια μικρότερα
αριθμούς, σε ορισμένες περιπτώσεις γωνία, όπως θα έρθει για να τους περιγράψει.
>> Αλλά για τώρα, αυτό είναι ένα πολύ απλό πρόγραμμα.
Και είμαι πολύ σίγουρος ότι, λογικά, ότι εμπίπτει σε τρεις περιπτώσεις.
Και, πράγματι, ακόμα κι αν εμείς απλά επικεντρώθηκε σχετικά με τις πιθανές αρνητικές πλευρές
της ανακρίβειας και υπερχείλισης, σε πραγματικότητα όπου πολλά από τα προβλήματα CS50 είναι,
δεν πρόκειται να ανησυχείτε περίπου, όλη την ώρα,
τα ζητήματα της υπερχείλισης και ανακρίβεια, διότι, στην πραγματικότητα, σε C,
στην πραγματικότητα δεν είναι όλα τόσο εύκολο να αποφευχθούν αυτά τα πράγματα.
Αν θέλετε να μετρήσετε μέχρι μεγαλύτερα και μεγαλύτερα και μεγαλύτερα,
αποδεικνύεται ότι υπάρχουν τεχνικές που μπορεί να χρησιμοποιήσει, που συχνά σχετίζονται με πράγματα που ονομάζεται
βιβλιοθήκες, συλλογές κώδικα, ότι άλλους ανθρώπους έγραψε ότι μπορείτε να χρησιμοποιήσετε,
και άλλες γλώσσες, όπως Java και άλλες, στην πραγματικότητα
κάνουν πολύ πιο εύκολο να μετρήσει ακόμη υψηλότερα.
Γι 'αυτό είναι πραγματικά μερικές από αυτούς τους κινδύνους μια λειτουργία της γλώσσας που χρησιμοποιείτε.
Και μέσα στις επόμενες εβδομάδες, θα δείτε πόσο επικίνδυνο C πραγματικά
μπορεί να είναι, αν δεν το χρησιμοποιούν σωστά.
Αλλά από εκεί, και με Python, και JavaScript, θα
εμείς στρώμα σε κάποια επιπλέον προστασία, και να τρέξει λιγότερες των εν λόγω κινδύνων.
>> Έτσι, ας κάνουμε λίγο πιο ενδιαφέρουσα λογική στο πρόγραμμά μας.
Επιτρέψτε μου λοιπόν να πάει μπροστά και να δημιουργήσουν ένα πρόγραμμα που ονομάζεται Λογική
μόνο έτσι μπορώ να παίξω με μερικούς πραγματική λογική, logical.c.
Θα απλά να αντιγράψετε και να επικολλήσετε κάποια κώδικα από τις προηγούμενες ώστε να πάρω πίσω
σε αυτό το ωραίο σημείο εκκίνησης.
>> Επιτρέψτε μου αυτή τη φορά να κάνει char Γ Είμαι πρόκειται να δώσετε ένα όνομα της C
μόνο και μόνο επειδή είναι συμβατικό, να πάρει ένα χαρακτήρα από το χρήστη.
Και ας προσποιούνται όπως Είμαι εφαρμογή μέρος
του εν λόγω προγράμματος Rm, η αφαίρεση πρόγραμμα πριν από αυτό ζητηθεί από το χρήστη
για να αφαιρέσετε ένα αρχείο.
Πώς θα μπορούσαμε να το κάνουμε αυτό;
>> Θέλω να πω, αν C είναι ίση ισούται, απόσπασμα εισαγωγικά,
y, τότε Πάω να υποθέσουμε ότι ο χρήστης έχει επιλέξει ναι.
Είμαι ακριβώς πρόκειται να εκτυπώσετε ναι.
Αν ήταν στην πραγματικότητα γράφοντας το πρόγραμμα απομάκρυνσης,
θα μπορούσαμε να καταργήσετε το αρχείο με περισσότερες γραμμές του κώδικα.
Αλλά εμείς θα το κρατήσετε απλό.
>> Else if c ισούται ισούται n-- και τώρα εδώ, θα πάω να πω,
ο χρήστης πρέπει να έχει ως στόχο όχι.
Και μετά άλλο, ξέρετε τι;
Δεν ξέρω τι άλλο ο χρήστης πρόκειται να πληκτρολογήσετε.
Έτσι, είμαι απλώς πρόκειται να πω ότι ότι είναι λάθος, ανεξαρτήτως
αυτός ή αυτή πραγματικά πληκτρολογήσει.
>> Λοιπόν, τι συμβαίνει εδώ;
Υπάρχει μια θεμελιώδης διαφορά σε σχέση με ό, τι έχω κάνει στο παρελθόν.
Διπλά εισαγωγικά, διπλά εισαγωγικά, διπλά εισαγωγικά, και, ακόμη, μονά εισαγωγικά,
μονά εισαγωγικά.
Αποδεικνύεται σε C, ότι όταν Θέλετε να γράψετε ένα string,
κάνετε χρήση διπλά εισαγωγικά, όπως ακριβώς έχουμε έχουν χρησιμοποιήσει όλο αυτό το διάστημα με printf.
>> Αλλά αν θέλετε να ασχοληθεί μόνο με ένα μεμονωμένο χαρακτήρα, το λεγόμενο char,
τότε μπορείτε να χρησιμοποιήσετε πραγματικά μονά εισαγωγικά.
Όσοι από εσάς έχετε προγραμματιστεί πριν, μπορεί να μην έχετε
Έπρεπε να ανησυχείτε για αυτό διάκριση σε ορισμένες γλώσσες.
Στην C, αυτό έχει σημασία.
Και έτσι όταν παίρνω μια χαρα και θέλω να συγκρίνουν ότι char χρησιμοποιώντας ίσων
ισούται με κάποιο e-mail, όπως y ή n, να κάνω, Πράγματι, πρέπει να έχουν τα μονά εισαγωγικά.
>> Τώρα, ας πάμε μπροστά και να το κάνουμε αυτό.
Ας πάμε μπροστά και να κάνουν λογική dot κάθετος λογική.
Και τώρα είμαι να σας ζητηθεί.
Έτσι, κατά πάσα πιθανότητα, μια καλύτερη εμπειρία του χρήστη θα μου πει πραγματικά τι να κάνουμε εδώ.
Αλλά Πάω να απλά τυφλά λένε y για ναι, εντάξει, ωραία.
>> Ας το εκτελέσετε ξανά, n για όχι, ωραία.
Ας υποθέσουμε ότι, όπως ορισμένοι άνθρωποι που ξέρω, caps lock μου κλειδί είναι σε πάρα πολύ συχνά.
Έτσι κάνω πρωτεύουσα Υ, εισάγετε, σφάλμα.
Εντάξει, δεν είναι ακριβώς αυτό που περιμένω.
Πράγματι, ο υπολογιστής κάνει κυριολεκτικά ό, τι
Μου είπαν να do-- ελέγξει για πεζά y και πεζά n.
Αυτό δεν αισθάνονται σαν καλό εμπειρία του χρήστη, όμως.
Επιτρέψτε μου να ζητήσει και να αποδεχθεί είτε πεζά ή κεφαλαία γράμματα.
Έτσι αποδεικνύεται, ίσως να θέλετε να πω κάτι σαν το Ξυστό,
όπως κυριολεκτικά ή Γ ισούται με ισούται κεφαλαίων ενιαία εισηγμένες y.
Βγάζει, C δεν έχει Αυτή η κυριολεκτική λέξη-κλειδί ή.
>> Αλλά έχει δύο κάθετες μπάρες.
Θα πρέπει να κρατήσει το Shift συνήθως, αν χρησιμοποιείτε ένα πληκτρολόγιο ΗΠΑ,
και να χτυπήσει την κάθετη μπάρα πλήκτρο πάνω πλήκτρο επιστροφής σας.
Αλλά αυτή η κάθετη γραμμή κάθετη γραμμή σημαίνει ή.
>> Αν, αντιθέτως, θέλαμε να πω και, όπως στο Ξυστό,
θα μπορούσαμε να κάνουμε ampersand ampersand.
Αυτό δεν κάνει καμία λογική έννοια εδώ, επειδή ένας άνθρωπος δεν θα μπορούσε, ενδεχομένως,
έχετε πληκτρολογήσει τόσο y και πεζά y και των κεφαλαίων Υ, όπως το ίδιο χαρακτήρα.
Έτσι, ή είναι αυτό που σκοπεύουμε εδώ.
>> Έτσι, αν το κάνω αυτό σε δύο μέρη, ή c ισούται ισούται κεφάλαιο Ν, τώρα επανάληψη,
κάνουν λογική, εκτελέστε ξανά τη λογική.
Τώρα, μπορώ να πληκτρολογήσετε y.
Και μπορώ να το κάνω και πάλι με κεφάλαιο Υ, ή του κεφαλαίου N.
Και θα μπορούσα να προσθέσω σε πρόσθετες συνδυασμούς ακόμα.
>> Έτσι, αυτό είναι ένα λογικό πρόγραμμα, εφόσον τώρα
Φεύγω λογικά για Αυτή η τιμή ή η τιμή αυτή.
Και δεν έχω να, κατ 'ανάγκην, καταλήξει σε δύο IFS ή αλλιώς IFS.
Μπορώ να συνδυάσει πραγματικά κάποια από τα που σχετίζονται με τη λογική μαζί με αυτό τον τρόπο.
Έτσι, αυτό θα ήταν καλύτερα σχεδιαστεί από απλά
λέγοντας ότι, αν C είναι ίση με πεζά y, εκτύπωση ναι, αλλιώς αν το c είναι ίση με πρωτεύουσα Υ,
εκτύπωση ναι, αλλιώς αν το c είναι ίση με lower-- με άλλα λόγια,
δεν χρειάζεται να έχουν όλο και περισσότερους κλάδους.
Μπορείτε να συνδυάσετε κάποια από τα ισοδύναμα κλαδιά λογικά, όπως με τον τρόπο αυτό.
>> Έτσι, ας ρίξουμε μια ματιά σε ένα μόνο τελικό συστατικό, ένα τελικό κατασκεύασμα,
ότι η C επιτρέπει.
Και θα επανέλθουμε στο μέλλον σε άλλους ακόμα.
Και τότε θα συμπεράνουμε κοιτάζοντας σε όχι την ορθότητα της code--
να πάρει κωδικό για να work-- αλλά ο σχεδιασμός του κώδικα, και να φυτέψει αυτούς τους σπόρους από νωρίς.
>> Επιτρέψτε μου λοιπόν να πάει μπροστά και να ανοίξει ένα νέο αρχείο εδώ.
Ξέρεις τι?
Πάω να επανεξετάσει την εφαρμογή το ίδιο πρόγραμμα,
αλλά χρησιμοποιώντας ένα διαφορετικό κατασκεύασμα.
>> Έτσι, επιτρέψτε μου να δώσω στον εαυτό μου γρήγορα πρόσβαση για να συμπεριλάβει CS50.h
για τη βιβλιοθήκη CS50, πρότυπο Io.h για printf.
Δώσε μου int main κενό μου.
Και στη συνέχεια εδώ, ας Θέλω να προχωρήσει και να το κάνουμε αυτό.
>> Χαρ γ παίρνει πάρει char, ακριβώς όπως και πριν.
Και Πάω να χρησιμοποιήσετε ένα νέο κατασκεύασμα now-- διακόπτη, σε ό, τι χαρακτήρα;
Έτσι διακόπτης είναι κάτι σαν Η μετάβαση ενός τρένου.
Ή, πραγματικά, είναι το είδος της ένα αν αλλιώς, αν άλλο αν,
αλλά γραμμένο κάπως διαφορετικά.
>> Ένας διακόπτης μοιάζει με αυτό.
Έχετε διακόπτη, και στη συνέχεια ό, τι χαρακτήρα ή τον αριθμό που θέλετε να δείτε,
Στη συνέχεια κάποιοι άγκιστρα αρέσει σε Το μηδέν, απλώς να πω κάνει αυτά τα πράγματα.
Και τότε θα έχουν διαφορετικές περιπτώσεις.
>> Δεν χρησιμοποιείτε εάν και αλλού.
Μπορείτε κυριολεκτικά να χρησιμοποιήσετε την υπόθεση λέξη.
Και θα σας πω κάτι τέτοιο.
>> Έτσι, στην περίπτωση μιας πεζά y, ή στην περίπτωση ενός κεφαλαίου Υ,
να προχωρήσει και να εκτυπώσετε ναι.
Και στη συνέχεια να ξεφύγει από το διακόπτη.
Αυτό είναι.
Τελειώσαμε.
>> Άλλο αν, να το πω έτσι, πεζά n, ή το κεφάλαιο Ν,
τότε προχωρήστε και εκτύπωσης έξω κανένας, και στη συνέχεια να σπάσει.
Else-- και αυτό το είδος της είναι η περίπτωση αθέτησης indeed-- printf error--
και μόνο για το καλό μέτρο, αν και λογικά αυτό το διάλειμμα δεν είναι απαραίτητο
γιατί είμαστε στο τέλος του διακόπτη έτσι κι αλλιώς,
Είμαι τώρα το σπάσιμο έξω από το διακόπτη.
Έτσι, αυτό φαίνεται λίγο διαφορετική.
>> Όμως, λογικά, είναι στην πράξη ισοδύναμη.
Και γιατί θα χρησιμοποιήσετε το ένα πάνω στο άλλο;
Μερικές φορές, απλά προσωπική προτίμηση, Μερικές φορές η αισθητική,
αν ματιά σε αυτό Τώρα, υπάρχει κάτι
να ειπωθούν για το αναγνωσιμότητα του κώδικα αυτού.
Θέλω να πω, δεν πειράζει το γεγονός ότι αυτή η κώδικας είναι νέο για πολλούς από εμάς στο δωμάτιο.
>> Αλλά αυτό ακριβώς το είδος του είναι αρκετά.
Βλέπετε πεζά y, πρωτεύουσα Υ, πεζά n, πρωτεύουσα Ν προεπιλογή,
αυτό ακριβώς το είδος των αλμάτων έξω σε σας με έναν τρόπο
ότι, αναμφισβήτητα, ίσως Το προηγούμενο παράδειγμα
με τις IFS, και τις κάθετες μπάρες, και οι άλλοι IFS, δεν θα μπορούσε να έχει.
Έτσι, αυτό είναι πραγματικά ένα θέμα προσωπικής επιλογή, πραγματικά, ή αναγνωσιμότητα,
του κώδικα.
>> Αλλά από την άποψη της λειτουργικότητας, επιτρέψτε μου να προχωρήσει και να κάνει ένα διακόπτη, dot κάθετος
διακόπτη, και τώρα πληκτρολογήσετε πεζά y, πρωτεύουσα Υ, πεζά n, κεφάλαιο Ν,
Ο David, προσπαθήστε ξανά γιατί αυτό είναι δεν είναι ένα μεμονωμένο χαρακτήρα.
Ας κάνουμε x, σφάλμα, όπως αναμενόταν.
Και, logically-- και αυτό είναι κάτι Θα ήθελα να ενθαρρύνω το general-- ακόμη
αν είμαστε μόνο ξύσιμο το επιφάνεια μερικών από αυτά τα χαρακτηριστικά.
>> Και μπορεί να μην είναι προφανής όταν τον εαυτό σας να καθίσει στο πληκτρολόγιο,
πως λειτουργεί αυτό?
Τι θα ήταν αυτό να κάνει;
Το όμορφο πράγμα για την κατοχή ένα laptop ή desktop, ή την πρόσβαση
σε έναν υπολογιστή με ένα compiler, και με ένα πρόγραμμα επεξεργασίας κώδικα όπως αυτό,
είναι μπορείτε σχεδόν πάντα να απαντήσει σε αυτά ερωτήσεις για τον εαυτό σας μόνο με την προσπάθεια.
>> Για παράδειγμα, αν η ρητορική ερώτημα στο χέρι ήταν,
τι θα συμβεί αν ξεχάσετε Δηλώσεις διάλειμμα σας;
Η οποία είναι στην πραγματικότητα μια πολύ κοινό πράγμα που πρέπει να κάνουμε,
γιατί δεν φαίνεται όπως και εσείς πραγματικά τα έχουν ανάγκη.
Στην πραγματικότητα δεν ολοκληρώνουν σας σκέφτηκε σαν μια παρένθεση ή σγουρά
τιράντες κάνει.
Ας πάμε μπροστά και να μεταγλωττίσετε τον κώδικα και να δούμε.
Έτσι κάνουν διακόπτη, dot διακόπτη κάθετος.
Ας πληκτρολογήσετε πεζά y, το top case, Enter.
Γι 'αυτό και πληκτρολογήσει y.
>> Το πρόγραμμα είπε ναι, όχι, λάθος, σαν να άλλαζε γνώμη.
Αλλά αυτό το είδος της ήταν, γιατί ό, τι συμβαίνει με διακόπτη είναι η πρώτη περίπτωση που
αγώνα ουσιαστικά σημαίνει, hey υπολογιστή, εκτελέσει όλες του κώδικα κάτω από αυτό.
Και αν δεν πούμε διάλειμμα, ή δεν λένε διάλειμμα, ή δεν λένε διάλειμμα,
ο υπολογιστής πρόκειται να φυσήξει μέσω όλων αυτών των γραμμών
και να εκτελέσει όλα αυτά μέχρι να φτάνει σε αυτή την σγουρά κηδεμόνα.
Έτσι, τα φρένα είναι, πράγματι, απαραίτητη.
Αλλά μια takeaway εδώ είναι, όταν Σε περίπτωση αμφιβολίας, δοκιμάστε κάτι.
Ίσως να αποθηκεύσετε τον κωδικό σας πρώτα, ή να το αποθηκεύσετε σε ένα επιπλέον αρχείο
αν είστε πραγματικά ανησυχούν για χαλούν και να ανακτήσουν
η εργασία που γνωρίζετε ότι λειτουργεί.
>> Αλλά να προσπαθήσουμε τα πράγματα.
Και δεν είναι τόσο φοβισμένος, ίσως, για το τι μπορεί να κάνει ο υπολογιστής,
ή ότι μπορεί να σπάσει κάτι.
Μπορείτε πάντα να επανέλθει σε κάποια παλαιότερη έκδοση.
>> Ας τελειώσει με την εξέταση κατά το σχεδιασμό των κώδικα.
Έχουμε αυτή τη δυνατότητα τώρα να γράψω συνθήκες, και βρόχους εγγραφής,
και τις μεταβλητές, και τις λειτουργίες κλήσεων.
Έτσι, ειλικρινά, είμαστε το είδος του πίσω στο όπου ήμασταν πριν από μία εβδομάδα με το Scratch,
αν και με λιγότερο συναρπαστικό κειμένου περιβάλλον από ό, τι Scratch επιτρέπει.
>> Αλλά παρατηρήσετε πόσο γρήγορα έχουμε αποκτήσει ότι το λεξιλόγιο, ακόμα κι αν είναι
πρόκειται να πάρει λίγο χρόνο να βυθιστεί σε, έτσι ώστε να μπορούμε τώρα να χρησιμοποιήσετε αυτό το λεξιλόγιο
να γράψω περισσότερα ενδιαφέροντα προγράμματα.
Και ας κάνουμε ένα βήμα μωρό προς αυτό, ως ακολούθως.
Επιτρέψτε μου να προχωρήσει και να δημιουργήσετε ένα νέο αρχείο εδώ.
>> Πάω να καλέσετε αυτό prototype.c, και να εισαγάγει
για πρώτη φορά, την ικανότητα να φτιάξετε το δικό σας λειτουργίες.
Μερικοί από εσάς μπορεί να έχετε κάνει αυτό με το Scratch,
σύμφωνα με την οποία μπορείτε να δημιουργήσετε σας δική έθιμο μπλοκ στο Ξυστό,
και στη συνέχεια να τα σύρετε στη θέση του όποτε θέλετε σε C.
Και στις περισσότερες προγραμματισμού γλώσσες, μπορείτε να κάνετε ακριβώς
ερμήνευα-- φτιάξετε το δικό σας λειτουργίες, αν δεν υπάρχουν ήδη.
>> Έτσι, για παράδειγμα, επιτρέψτε μου να πάει μπροστά και περιλαμβάνουν CS50.h, και περιλαμβάνουν
πρότυπο IO.h, int main άκυρη.
Και τώρα έχουμε ένα κράτησης θέσης είναι έτοιμα να ξεκινήσουν.
Κρατάω την εκτύπωση πράγματα όπως και τα ονόματα των ανθρώπων σήμερα.
Και ότι αισθάνεται like-- Δεν θα ήταν ωραίο αν υπάρχει
ήταν μια λειτουργία που ονομάζεται όνομα εκτύπωσης;
Δεν έχω να χρησιμοποιήσει printf.
Δεν έχω να θυμάμαι όλοι οι κωδικοί μορφή.
Γιατί δεν μπορώ να κάνω, ή γιατί δεν το έκανε κάποιος πριν από μένα,
δημιουργήσετε μια συνάρτηση που ονομάζεται εκτύπωση όνομα, που δίνεται κάποιο όνομα,
απλά εκτυπώνει;
>> Με άλλα λόγια, αν μπορώ να πω, hey, υπολογιστή, να μου δώσει ένα string
ζητώντας από το χρήστη για τέτοιου είδους, μέσω της λειτουργίας εγχόρδων πάρει CS50 του.
Γεια σου, υπολογιστή, βάλτε αυτό το κορδόνι στο η μεταβλητή στην αριστερή πλευρά,
και να το ονομάσουμε s.
Και τότε, hey υπολογιστή, προχωρήστε και να εκτυπώσετε ότι το όνομα του ατόμου, γίνεται.
>> Τώρα, θα ήταν ωραίο, διότι Το πρόγραμμα αυτό, που εύστοχα ονομάστηκε,
μου λέει αυτό που θα έπρεπε να κάνει μέσω της κατονομάζει αυτές συνάρτησης.
Επιτρέψτε μου να πάω και να κάνει πρωτότυπο, Enter.
Και, δυστυχώς, αυτό δεν πρόκειται να πετάξει.
>> Prototype.c, γραμμή 7, χαρακτήρας 5, σφάλμα, σιωπηρή δήλωση
της λειτουργίας όνομα εκτύπωσης είναι ανίσχυρο, C99, C99
δηλαδή μια έκδοση της C ότι βγήκε το 1999.
Αυτό είναι όλο.
>> Έτσι, δεν ξέρω τι όλα αυτά σημαίνουν ακόμα.
Αλλά εγώ αναγνωρίζω σφάλμα στο κόκκινο.
Αυτό είναι αρκετά προφανές.
>> Και φαίνεται ότι με το πράσινο χαρακτήρα εδώ,
το θέμα είναι με το όνομα εκτύπωσης, ανοίξτε παρένθεσης s, κοντά παρένθεσης, άνω τελεία.
Αλλά σιωπηρή δήλωση λειτουργία κάναμε δούμε εν συντομία νωρίτερα.
Αυτό σημαίνει, απλά, ότι Clang δεν ξέρει τι εννοώ.
>> Έχω χρησιμοποιήσει μια λέξη λεξιλόγιο ότι είναι δεν είχε γνωρίσει ποτέ ή έχουν διδαχθεί πριν.
Και γι 'αυτό πρέπει να το διδάξουμε τι σημαίνει αυτή η λειτουργία.
Έτσι, Πάω να προχωρήσει και να το κάνουμε αυτό.
>> Πάω να προχωρήσει και να εφαρμόσει τη δική μου λειτουργία που ονομάζεται Εκτύπωση Όνομα.
Και Πάω να πω, ως εξής, ότι το κάνει αυτό, printf, γεια σου, τοις εκατό
s, backslash n, το όνομα, άνω τελεία.
Έτσι τι έκανα ακριβώς κάνει;
>> Έτσι αποδεικνύεται, για να εφαρμόσουν τη δική σας λειτουργία,
Είμαστε είδος δανειστεί μερικά από την ίδια δομή ως κύρια
ότι έχουμε μόλις θεωρείται δεδομένη, και εγώ
ξέρετε ακριβώς αντιγραφή και επικόλληση λίγο πολύ ό, τι
Έχω γράψει στο παρελθόν.
Αλλά παρατηρήστε το σχέδιο εδώ.
Int, Main, Void, θα δώσουμε έμφαση, εκτός πριν από καιρό τι σημαίνει στην πραγματικότητα.
>> Αλλά για σήμερα, μόνο παρατηρήσετε τον παραλληλισμό.
Κενό, το όνομα εκτύπωσης, Το όνομά string, οπότε υπάρχει
ένα μωβ λέξη-κλειδί, η οποία θα πάμε για να ξεκινήσετε
καλώντας έναν τύπο επιστροφής, το όνομα του η λειτουργία, και στη συνέχεια η είσοδος.
Έτσι, στην πραγματικότητα, μπορούμε να αποσταχθούν Αυτό το είδος της, όπως την περασμένη εβδομάδα
όπως, αυτό είναι το όνομα ή ο αλγόριθμος του κώδικα είμαστε
πρόκειται να write-- η αλγόριθμο υποκείμενες
ο κώδικας θα πάμε να γράψω.
>> Αυτό είναι είσοδος της.
Αυτή είναι η έξοδος της.
Αυτή η λειτουργία, το όνομα εκτύπωσης, είναι σχεδιαστεί για να λάβει μια σειρά που ονομάζεται όνομα,
ή οτιδήποτε άλλο, ως πρώτη ύλη, και στη συνέχεια να ακυρωθούν.
Αυτό δεν επιστρέφει τίποτα, όπως να πάρει σπάγκο ή να πάρετε int κάνει.
Έτσι, πρόκειται να μου δώσει κάτι πίσω.
Είναι ακριβώς πρόκειται να έχουν παρενέργεια, να το πω έτσι,
εκτύπωσης το όνομα ενός ατόμου.
Έτσι παρατηρήσετε, γραμμή 7, I μπορεί να καλέσει το όνομά εκτύπωσης.
Γραμμή 10, μπορώ να ορίσει ή να εφαρμόσουν το όνομα εκτύπωσης.
Αλλά, δυστυχώς, αυτό δεν είναι αρκετό.
>> Επιτρέψτε μου να προχωρήσει και να ξαναμεταγλωττίσετε αυτό μετά από την αποθήκευση.
Πω πω, τώρα, το έχω κάνει χειρότερα, φαίνεται.
Έτσι σιωπηρή δήλωση Το όνομά λειτουργία εκτύπωσης δεν είναι έγκυρη.
Και, πάλι, υπάρχουν και άλλα λάθη.
Αλλά όπως προειδοποίησε νωρίτερα, ακόμη και αν έχετε συγκλονισμένοι με,
ή λίγο λυπηρό να βλέπουμε τόσους πολλούς σφάλματα, επικεντρώνονται μόνο στην πρώτη
Αρχικά, επειδή θα μπορούσε απλώς είχε αλυσιδωτές αντιδράσεις.
Έτσι C, ή Clang πιο συγκεκριμένα, εξακολουθεί να μην αναγνωρίζει το όνομά εκτύπωσης.
>> Και αυτό γιατί Clang, από το σχεδιασμό, είναι το είδος των χαζή.
Κάνει μόνο ό, τι το πω για να το κάνουμε.
Και το κάνει μόνο τόσο με τη σειρά στο οποίο μπορείτε να το πω για να το κάνει.
>> Γι 'αυτό και έχουν καθορίσει κύρια on line τέσσερα, όπως έχουμε κάνει αρκετά συχνά.
Έχω καθορισμένο όνομα εκτύπωσης στη γραμμή 10.
Αλλά εγώ προσπαθώ να χρησιμοποιήσει Το όνομά εκτύπωσης στη γραμμή επτά.
>> Είναι πάρα πολύ σύντομα, δεν υπάρχει ακόμα.
Γι 'αυτό θα μπορούσε να είναι έξυπνος και να είναι όπως, ΟΚ, οπότε ας παίξουν μαζί,
και μετακινήστε το όνομα εκτύπωσης έως εδώ, και την εκ νέου μεταγλώττιση.
Ω Θεέ μου.
Δούλεψε.
Ήταν τόσο απλό.
>> Αλλά η λογική είναι ακριβώς αυτό.
Θα πρέπει να διδάξει Clang τι είναι με τον καθορισμό της λειτουργίας πρώτα.
Στη συνέχεια, μπορείτε να το χρησιμοποιήσετε.
Αλλά, ειλικρινά, αυτό αισθάνεται σαν ένα ολισθηρό δρόμο.
>> Έτσι, κάθε φορά που τρέχει σε ένα πρόβλημα, είμαι απλά
πρόκειται να επισημάνετε και να αντιγράψετε τον κώδικα Έγραψα, το κόβουμε και να το επικολλήσετε εδώ.
Και, σίγουρα, θα μπορούσαμε να εφευρίσκω κάποια σενάρια
όπου μία λειτουργία θα μπορούσε πρέπει να καλέσετε ένα άλλο.
Και απλά δεν μπορεί να βάλει κάθε λειτουργία πάνω από κάθε άλλο.
>> Έτσι αποδεικνύεται εκεί έξω που μια καλύτερη λύση.
Μπορούμε να αφήσουμε αυτό να είναι.
Και, ειλικρινά, είναι γενικά ωραίο, και βολικό, και καλό σχεδιασμό
να θέσει κύρια πρώτη, γιατί, και πάλι, κύρια ακριβώς όπως όταν κάνετε κλικ πράσινη σημαία,
αυτή είναι η λειτουργία που παίρνει εκτελείται από προεπιλογή.
Έτσι, ίσως και να θέσει αυτό στην κορυφή του αρχείου
έτσι ώστε όταν εσείς ή οποιοδήποτε άλλες ανθρώπινες κοιτάζει το αρχείο
Ξέρετε τι συμβαίνει μόνο με την ανάγνωση κύριο πρώτα.
Έτσι αποδεικνύεται, μπορούμε να πούμε Clang προληπτικά, hey, Clang, στη γραμμή τέσσερα,
Υπόσχομαι να εφαρμόσουν μια λειτουργία που ονομάζεται Εκτύπωση
Όνομα που παίρνει ένα string που ονομάζεται όνομα ως πρώτη ύλη, και επιστρέφει τίποτα, άκυρο.
Και θα πάρει γύρω στο εφαρμογή αργότερα.
>> Εδώ έρχεται Main.
Κύρια τώρα on line 9 μπορούν να χρησιμοποιήσουν Εκτύπωση Όνομα επειδή Clang
έχει εμπιστοσύνη ότι, τελικά, θα συναντήσετε τον ορισμό
της εφαρμογής των Εκτύπωση Όνομα.
Έτσι, μετά την αποθήκευση του αρχείου μου, ας Θέλω να πάω μπροστά και να κάνει πρωτότυπο,
φαίνεται καλό αυτή τη φορά.
Dot κάθετος, πρωτότυπο, επιτρέψτε μου να προχωρήσει και να πληκτρολογήσετε ένα όνομα.
David, γεια σου David, Zamila, γεια Zamila, και, μάλιστα, τώρα δουλεύει.
>> Έτσι, το συστατικό εδώ είναι ότι έχουμε έκανε μια προσαρμοσμένη λειτουργία, σαν έθιμο
μπλοκ μηδέν είμαστε και το call.
Αλλά σε αντίθεση με Scratch όπου μπορείτε να απλά να δημιουργήσετε και να αρχίσετε να χρησιμοποιείτε αυτό,
Τώρα πρέπει να είμαστε ένα λίγο πιο σχολαστικός,
και στην πραγματικότητα τρένο Clang να χρησιμοποιήσει ή να το περιμένουμε.
Τώρα, ως ένα μέρος, γιατί όλο αυτό το διάστημα έχουν ήμασταν απλά τυφλά στην πίστη, συμπεριλαμβανομένων
CS50.h, και συμπεριλαμβανομένων και των τυποποιημένων IO.h;
>> Λοιπόν, αποδεικνύεται, μεταξύ μερικά άλλα πράγματα,
όλα αυτά είναι σε εκείνα τα dot h αρχεία, τα οποία τυχαίνει να είναι τα αρχεία.
Είναι header αρχεία, να το πω έτσι.
Είναι ακόμα γραμμένο σε C. Αλλά ότι είναι ένα διαφορετικό τύπο αρχείου.
>> Προς το παρόν, μπορείτε λίγο πολύ να υποθέσουμε ότι όλα αυτά είναι μέσα CS50.h
είναι μερικές ατάκες όπως αυτή, δεν για τις λειτουργίες που ονομάζεται Εκτύπωση Όνομα,
αλλά για Λάβετε String, Get Float, και μερικοί άλλοι.
Και υπάρχουν παρόμοια πρωτότυπα, one liners, στο εσωτερικό του προτύπου IO.h
για printf, η οποία βρίσκεται τώρα στο τη δική μου λειτουργία Εκτύπωση Όνομα.
Έτσι με άλλα λόγια, όλη αυτή η φορά που έχουμε μόλις τυφλά αντιγραφή και επικόλληση
περιλαμβάνουν αυτό, περιλαμβάνουν ότι, ό, τι συμβαίνει;
Αυτά είναι ακριβώς το είδος των ενδείξεων να κλαγγή ως προς το τι λειτουργίες
είναι, πράγματι, σε εφαρμογή, απλά αλλού σε διαφορετικά αρχεία
σε άλλο σημείο του συστήματος.
>> Έτσι έχουμε υλοποιηθεί το όνομα εκτύπωσης.
Θα έχει αυτή την παρενέργεια της εκτύπωση κάτι στην οθόνη.
Αλλά δεν το κάνει πραγματικότητα το χέρι μου κάτι πίσω.
Πώς θα πάτε για την την εφαρμογή ενός προγράμματος που
δεν μου το χέρι κάτι πίσω;
>> Λοιπόν, ας προσπαθήσουμε αυτό.
Επιτρέψτε μου να προχωρήσει και να εφαρμόσει ένα αρχείο που ονομάζεται return.c
έτσι ώστε να μπορεί να αποδείξει πως κάτι όπως Πάρτε String, ή Πάρτε Int,
είναι στην πραγματικότητα επιστροφή κάτι πίσω στο χρήστη.
Ας πάμε μπροστά και να καθορίσει int main άκυρη.
>> Και, πάλι, στο μέλλον, θα εξηγήσει τι αυτό το int και το κενό
Είναι πραγματικά να κάνει.
Αλλά για σήμερα, θα θεωρούν δεδομένο.
Πάω να πάει μπροστά και printf, για μια καλή εμπειρία για το χρήστη, το x είναι.
Και τότε Πάω να περιμένουμε για το χρήστη να μου δώσει χ με έρθετε int.
>> Και τότε Πάω να πάει μπροστά και να εκτυπώσετε χ στο τετράγωνο.
Έτσι, όταν έχετε μόνο ένα πληκτρολόγιο, οι άνθρωποι συνήθως
χρησιμοποιήστε το μικρό καρότο σύμβολο στο πληκτρολόγιο
να εκπροσωπεί την εξουσία του, ή ο εκθέτης της.
SO x στο τετράγωνο είναι παρούσα i.
>> Και τώρα πάω να το κάνουμε αυτό.
Θα μπορούσα απλά do-- τι είναι x τετράγωνο; x τετράγωνο είναι x φορές x.
>> Και το κάναμε αυτό κάποια καιρό ήδη σήμερα.
Αυτό δεν αισθάνονται σαν όλα αυτά πολύ πρόοδο.
Ξέρεις τι?
Ας αξιοποιήσουν κάποιες από αυτή την ιδέα από την τελευταία ώρα της αφαίρεσης.
>> Δεν θα ήταν ωραίο αν υπάρχει μια λειτουργία που ονομάζεται
τετράγωνο που κάνει ακριβώς αυτό;
Εξακολουθεί, στο τέλος της την ημέρα, κάνει το ίδιο μαθηματικά.
Αλλά ας αφηρημένη μακριά η ιδέα της λήψης
ένας αριθμός πολλαπλασιάζεται με άλλο, και απλά να δώσει ένα όνομα,
όπως η πλατεία αυτή την τιμή.
>> Και, με άλλα λόγια, σε C, ας δημιουργήσουμε μια συνάρτηση
που ονομάζεται πλατεία που κάνει ακριβώς αυτό.
Είναι πρόκειται να ονομάζεται πλατεία.
Είναι πρόκειται να λάβει μια int.
Και θα απλά θα αποκαλούν n, από προεπιλογή.
>> Αλλά θα μπορούσαμε να το ονομάσουμε οτιδήποτε θέλουμε.
Και όλα αυτά που πρόκειται να κάνει, κυριολεκτικά, είναι η επιστροφή
το αποτέλεσμα της n φορές n.
Αλλά επειδή είναι επιστρέφοντας κάτι, το οποίο
είναι η λέξη κλειδί σε μωβ έχουμε δεν είχε γνωρίσει ποτέ πριν, εγώ, στη γραμμή 11,
Δεν μπορούμε απλά να πούμε άκυρη αυτή τη φορά.
>> Κενό, στο παράδειγμα που μόλις είδαμε αντί του ονόματος εκτύπωσης, απλά σημαίνει,
Κάνε κάτι.
Αλλά μην το χέρι μου κάτι πίσω.
Σε αυτήν την περίπτωση, θέλω να επιστρέψει n n φορές,
ή όποια και αν είναι, ο αριθμός αυτός.
>> Έτσι δεν μπορώ να πω, hey, ηλεκτρονικών υπολογιστών, Έχω επιστρέψει τίποτα, άκυρο.
Είναι πρόκειται να επιστρέψει, από τη φύση τους, μια int.
Και έτσι αυτό είναι που συμβαίνει εδώ.
>> Η είσοδος στην πλατεία πρόκειται να είναι μια int.
Και έτσι ώστε να μπορούμε να το χρησιμοποιήσουμε, πρέπει να έχουν ένα όνομα, Ν Πρόκειται για την έξοδο
μια int που δεν χρειάζεται ένα όνομα.
Μπορούμε να το αφήσουμε στο κύριο, ή όποιος είναι χρησιμοποιώντας μένα να θυμόμαστε αυτή την τιμή, αν
θέλω με τη δική μεταβλητή της.
>> Και, πάλι, το μόνο νέο λέξη-κλειδί εδώ είναι η απόδοση.
Και είμαι απλά κάνει κάποια μαθηματικά.
Αν ήθελα πραγματικά να είναι περιττή, Θα μπορούσα να πω το προϊόν int παίρνει n n φορές.
>> Και τότε θα μπορούσα να πω, να επιστρέψει το προϊόν.
Αλλά, και πάλι, στο σημείο μου νωρίτερα από Αυτό απλά δεν είναι καλό Σχέδιο--
όπως, γιατί εισάγει ένα όνομα, ένα σύμβολο, όπως το προϊόν,
απλά για να την επιστρέψει αμέσως;
Είναι λίγο καθαρότερα, λίγο πιο κοντά, έτσι
να μιλήσει, μόνο και μόνο για να πω την επιστροφή n φορές n, να απαλλαγούμε από αυτή τη γραμμή εντελώς.
>> Και είναι ακριβώς λιγότερο κώδικα για να διαβάσετε, λιγότερο ευκαιρία για λάθη.
Και ας δούμε αν αυτό στην πραγματικότητα λειτουργεί τώρα.
Τώρα, είμαι πρόκειται να πάει μπροστά και να κάνει την επιστροφή.
>> Uh-oh, σιωπηρή δήλωση της συνάρτησης.
Έκανα αυτό το λάθος πριν, δεν είναι μεγάλη υπόθεση.
Επιτρέψτε μου απλά πληκτρολογήστε ή επισημάνετε και αντιγραφή, η ίδια ακριβώς λειτουργία πρωτότυπο,
ή υπογραφή, της λειτουργίας εδώ.
Ή θα μπορούσε να κινηθεί το σύνολο της λειτουργίας.
>> Αλλά αυτό είναι λίγο τεμπέλης.
Γι 'αυτό και δεν θα το κάνουμε αυτό.
Τώρα, επιτρέψτε μου να κάνει την επιστροφή και πάλι, dot επιστροφή κάθετος.
>> x είναι 2 x τετράγωνο είναι 4. x είναι 3. x τετράγωνο είναι 9.
Και η λειτουργία φαίνεται τώρα να λειτουργεί.
Έτσι ποια είναι η διαφορά εδώ;
Έχω μια λειτουργία που ονομάζεται πλατεία, σε αυτή την περίπτωση, το οποίο έβαλα σε μια είσοδο.
Και να πάρω πίσω μια έξοδο.
Και όμως, προηγουμένως, αν Ανοίγω το άλλο παράδειγμα
από την προηγούμενη, η οποία Ήταν ονομάζεται prototype.c,
Είχα το όνομα εκτύπωσης, η οποία επέστρεψε κενό, να το πω έτσι,
Ή θα επιστρέψει τίποτα, και απλά είχε μια παρενέργεια.
>> Λοιπόν, τι συμβαίνει εδώ;
Λοιπόν, να εξετάσει τη λειτουργία πάρετε κορδόνι για μια στιγμή.
Έχουμε χρησιμοποιώντας τη λειτουργία πάρετε κορδόνι με τον ακόλουθο τρόπο.
>> Είχαμε μια λειτουργία πάρετε string, όπως και περιλαμβάνουν CS50.h,
περιλαμβάνει τις τυποποιημένες IO.h, int, κύρια, άκυρη.
Και στη συνέχεια, κάθε φορά που έχω που ονομάζεται χορδή πάρει μέχρι στιγμής,
Έχω πει κάτι σαν, string s παίρνει πάρει string, επειδή get string--
Ας ονομάσουμε αυτό get.c-- εγχόρδων get η ίδια επιστρέφει ένα string που μπορώ στη συνέχεια
χρησιμοποιούν, και να πω, γεια, κόμμα, τοις εκατό s, ανάστροφη κάθετο n, s.
>> Έτσι, αυτό είναι το ίδιο παράδειγμα, πραγματικά, ότι είχαμε νωρίτερα.
Έτσι ώστε να πάρει συμβολοσειράς επιστρέφει μια τιμή.
Αλλά πριν από λίγο, συμβολοσειρά εκτύπωσης δεν επιστρέφει μια τιμή.
Έχει απλά μια παρενέργεια.
Έτσι, αυτό είναι μια θεμελιώδης διαφορά.
Έχουμε δει διάφορες τύπους λειτουργιών τώρα,
μερικά από τα οποία έχουν επιστρέψει αξίες, μερικές από τις οποίες δεν το κάνουν.
Έτσι ίσως είναι string, ή int ή float.
Ή ίσως είναι απλώς άκυρη.
>> Και η διαφορά είναι ότι αυτές οι λειτουργίες που
να πάρει τα δεδομένα και επιστρέφει μια τιμή είναι πραγματικά φέρνοντας κάτι πίσω στο τραπέζι,
να το πω έτσι.
Ας πάμε μπροστά και να ματιά σε ένα τελικό σύνολο
παραδείγματα που δίνει μια αίσθηση, τώρα, πώς θα μπορούσε, πράγματι, αφηρημένη καλύτερα,
και καλύτερα, και καλύτερα, ή περισσότερο, και περισσότερες και, προκειμένου
να γράψει, τελικά, καλύτερα κωδικό.
Ας πάμε μπροστά, και σύμφωνα με το πνεύμα του Scratch, κάντε τα εξής.
>> Επιτρέψτε μου να προχωρήσει και να περιλαμβάνουν CS50.h και πρότυπο IO.h.
Επιτρέψτε μου να προχωρήσει και να δώσει τον εαυτό μου έναν int, κύρια, άκυρη.
Και επιτρέψτε μου να πάει μπροστά, να καλέσετε αυτό το cough.c.
>> Και επιτρέψτε μου να πάει μπροστά και μόλις όπως γρατζουνιές, εκτυπώστε βήχα / n.
Και θέλω να κάνω αυτό τρεις φορές.
Έτσι είμαι, φυσικά, απλά θα να αντιγράψετε και να επικολλήσετε τρεις φορές.
Είμαι τώρα πρόκειται να κάνει βήχας dot βήχα κάθετος.
Ας τον εαυτό μου δώσει λίγο περισσότερο χώρο Εδώ, Enter, βήχας, βήχας, βήχας.
>> Υπάρχει, προφανώς, ήδη ευκαιρία για βελτίωση.
Έχω αντιγραφεί και επικολληθεί μερικές φορές σήμερα.
Αλλά αυτό ήταν μόνο έτσι δεν το έκανα πρέπει να πληκτρολογήσετε όπως πολλοί χαρακτήρες.
Εξακολουθώ να αλλάξει ό, τι αυτές οι γραμμές κώδικα είναι.
>> Αυτές οι τρεις γραμμές είναι ταυτόσημα, που αισθάνεται τεμπέλης και είναι πράγματι,
και δεν είναι πιθανώς η σωστή προσέγγιση.
Έτσι, με ποιο συστατικό θα μπορούσαμε να βελτιώσουμε αυτόν τον κωδικό;
Δεν έχουμε να αντιγράψετε και επικόλληση κώδικα.
>> Και, πράγματι, κάθε φορά που θα νιώσετε τον εαυτό σας την αντιγραφή και επικόλληση,
και όχι ακόμη και την αλλαγή κωδικού, πιθανότητες είναι ότι υπάρχει ένας καλύτερος τρόπος.
Και, πράγματι, υπάρχει.
Επιτρέψτε μου να προχωρήσει και να κάνει ένα για το βρόχο, ακόμη και αν η σύνταξη μπορεί να μην
έρχονται φυσικά ακόμα.
>> Κάνετε αυτό τρεις φορές, απλά κάνοντας τα following--
και τυχαίνει να γνωρίζω αυτό από την πρακτική.
Αλλά έχουμε μια σειρά από παραδείγματα τώρα.
Και θα δείτε σε απευθείας σύνδεση περισσότερες αναφορές ακόμα.
>> Αυτή είναι η σύνταξη στη γραμμή 6, δηλαδή σαν Scratch που επαναλαμβάνεται
μπλοκ, επαναλάβετε τις ακόλουθες τρεις φορές.
Είναι μια μικρή μαγική για τώρα.
Αλλά αυτό θα πάρει περισσότερο, και πιο οικείο.
>> Και πρόκειται να επαναλάβω γραμμή οκτώ τρεις φορές,
έτσι ώστε αν μεταγλωττίσετε ξανά make βήχα, dot κάθετος βήχας, βήχας, βήχας, βήχας.
Εξακολουθεί να λειτουργεί με τον ίδιο τρόπο.
Έτσι ώστε να είναι όλα ωραία και καλά.
Αλλά αυτό δεν είναι πολύ αφηρημένη.
>> Είναι απόλυτα σωστό.
Αλλά αισθάνεται σαν να υπάρχει θα μπορούσε να είναι μια ευκαιρία,
όπως στον κόσμο της Το μηδέν, με το είδος της εκκίνησης
για να προσθέσετε κάποια σημασιολογία εδώ, έτσι ώστε Δεν έχω μερικά μόνο για το βρόχο,
και μια λειτουργία που λέει βήχα, ή μήπως βήχα.
Ξέρεις τι?
Επιτρέψτε μου να προσπαθήσω να είναι ένα λίγο πιο δροσερές από αυτό,
και μάλιστα γράψει μια λειτουργία που έχει κάποιες παρενέργειες, καλέστε το βήχα.
>> Και δεν παίρνει εισόδου, και επιστρέφει καμία αξία ως έξοδο.
Αλλά ξέρετε τι κάνει;
Κάνει this-- printf, απόσπασμα εισαγωγικά, βήχα.
>> Και τώρα εδώ, θα πάω να προχωρήσει και για int,
i παίρνει μηδέν, θ λιγότερο από 3, θ συν συν.
Πάω να μην κάνει printf, η οποία είναι αναμφισβήτητα μια εφαρμογή χαμηλού επιπέδου
λεπτομέρεια.
Δεν με νοιάζει πώς να βήξει.
Θέλω απλά να χρησιμοποιήσετε τη λειτουργία βήχα.
Και είμαι απλώς πρόκειται να καλέσετε το βήχα.
>> Τώρα, παρατηρήστε τη διχοτόμηση.
Όταν καλείτε μια λειτουργία, αν δεν το κάνετε θέλει να δώσει εισόδους, εντελώς πρόστιμο.
Απλά κάνει ανοιχτή παρένθεσης, κοντά παρένθεσης, και τελειώσατε.
>> Όταν ορίζετε μια λειτουργία, ή δηλώνουν πρωτότυπο ενός συνάρτησης,
αν γνωρίζετε εκ των προτέρων ότι δεν είναι πρόκειται να λάβει όλα τα επιχειρήματα,
λένε κενό σε αυτές τις παρενθέσεις εκεί.
Και αυτό καθιστά βέβαιο ότι θα Δεν θα το κάνουν κατάχρηση λάθος.
Επιτρέψτε μου να προχωρήσει και να κάνει το βήχα.
Και, φυσικά, έχω κάνει ένα λάθος.
>> Dammit, υπάρχει και αυτό το σιωπηρή δήλωση.
Αλλά αυτό είναι μια χαρά.
Είναι μια εύκολη αποτύπωση.
Απλά πρέπει το πρωτότυπο ψηλά στο αρχείο μου από ό, τι είμαι πραγματικά το χρησιμοποιείτε.
>> Έτσι τώρα επιτρέψτε μου να κάνω βήχα και πάλι, ωραία.
Τώρα, αυτό λειτουργεί.
Κάντε βήχας, βήχας, βήχας, βήχας.
Έτσι, μπορείτε να σκεφτείτε ότι είμαστε πραγματικά μόλις πάνω από μηχανική αυτό το πρόβλημα.
Και, πράγματι, είμαστε.
Αυτό δεν είναι μια καλή υποψήφιο του προγράμματος
αυτή τη στιγμή για refactoring, και κάνει ό, τι είναι
που ονομάζεται ιεραρχική αποσύνθεση, όπου μπορείτε να πάρετε κάποιο κώδικα, και στη συνέχεια,
Σας το είδος του παράγοντα πράγματα, έτσι ώστε να αποδοθεί περισσότερη σημασιολογία σε αυτούς,
και επαναχρησιμοποίηση τελικά μακροπρόθεσμα.
Αλλά είναι ένα δομικό στοιχείο προς την κατεύθυνση πιο εξελιγμένα προγράμματα
ότι θα ξεκινήσει γραπτώς πριν από πολύ καιρό ότι
μας επιτρέπει να έχουμε το λεξιλόγιο με την οποία να γράψει καλύτερη κώδικα.
Και, πράγματι, ας δούμε αν μπορούμε δεν μπορεί να γενικεύσει αυτό περαιτέρω.
>> Φαίνεται λίγο κουτσός που έχω, κύρια, χρειάζεται να ανησυχείτε για αυτό καταριέται για το βρόχο,
και καλώντας ξανά και ξανά βήχα.
Γιατί δεν μπορώ να πω μόνο βήχα, παρακαλούμε βήχας τρεις φορές;
Με άλλα λόγια, γιατί δεν μπορώ απλά να παρέχουν στοιχεία για να βήχει και να το κάνουμε αυτό;
>> Γιατί δεν μπορώ να πω, σε κύρια βήχα τρεις φορές.
Και τώρα, αυτό είναι το είδος της μαγικό.
Είναι πολύ επαναληπτική εδώ.
Και είναι, πράγματι, ένα βήμα μωρό.
>> Αλλά ακριβώς η ικανότητα να πει για γραμμή οκτώ, βήχα τρεις φορές,
Είναι ακριβώς τόσο πολύ πιο ευανάγνωστο.
Και, συν, δεν έχω να ξέρετε ή νοιάζει πώς υλοποιείται βήχα.
Και, πράγματι, αργότερα στο όρος και για την τελική έργων,
αν αντιμετωπίσει ένα έργο με ένας συμμαθητής ή δύο συμμαθητές,
θα συνειδητοποιήσετε ότι πρόκειται να έχουν, ή θέλουν να διαιρούν το έργο.
>> Και θα πάμε να θέλουν να αποφασίζουν εκ των προτέρων, ο οποίος πρόκειται να κάνει ό, τι,
και στην οποία τα κομμάτια;
Και δεν θα ήταν ωραίο αν, για παράδειγμα,
αναλάβει την ευθύνη της γραφής κύρια, γίνεται.
Και ο συγκάτοικός σας, ή να σας εταίρος γενικότερα,
φροντίζει για την εφαρμογή βήχα.
>> Και αυτή η διαίρεση, αυτά τείχη της αφαίρεσης,
ή τα στρώματα της αφαίρεσης εάν θα είναι εξαιρετικά ισχυρό,
διότι ειδικά για τα μεγαλύτερα, πιο πολύπλοκα προγράμματα και συστήματα,
επιτρέπει πολλαπλές ανθρώπους να χτίσουν πράγματα μαζί, και, τελικά,
βελονιά εργασία τους μαζί με αυτόν τον τρόπο.
Αλλά, φυσικά, Πρέπει να διορθώσετε τώρα βήχα.
Πρέπει να πω βήχα ότι, hey, ξέρετε τι;
Θα πάμε να πρέπει να πάρετε μια input-- έτσι δεν είναι άκυρη, αλλά int και τώρα.
Ας πάμε μπροστά και να τεθεί σε βήχα το int. i παίρνει μηδέν.
>> i είναι μικρότερο από το πόσες φορές.
Είπα τρεις πριν.
Αλλά αυτό δεν είναι ό, τι θέλω.
Θα θέλουν βήχας να γενικευθεί σε υποστηρίξει οποιοδήποτε αριθμό επαναλήψεων.
>> Έτσι, πράγματι, είναι ν που θέλω, ανεξάρτητα από το χρήστη μου λέει.
Τώρα, μπορώ να πάω μπροστά και να πω βήχα εκτύπωσης.
Και δεν έχει σημασία ποιος είναι ο αριθμός ο χρήστης περνά,
Θα επαναλάβει ότι πολλές φορές.
>> Έτσι, στο τέλος της ημέρας, πρόγραμμα είναι πανομοιότυπη.
Αλλά παρατηρήσετε όλα αυτά τα πράγματα θα μπορούσε ακόμη και να είναι σε ένα άλλο αρχείο.
Πράγματι, δεν ξέρω κατά τη τη στιγμή πώς printf υλοποιείται.
>> Δεν ξέρω αυτή τη στιγμή πώς να πάρει string, ή να πάρετε int, ή να πάρετε πλωτήρα
εφαρμογή τους.
Και δεν θέλω να δείτε τους στην οθόνη μου.
Όπως είναι, αρχίζω να επικεντρωθεί στην το πρόγραμμά μου, όχι οι λειτουργίες αυτές.
>> Και έτσι, πράγματι, το συντομότερο ξεκινήστε factoring κώδικα όπως αυτό έξω,
θα μπορούσαμε να προχωρήσουμε ακόμα και βήχα σε ένα ξεχωριστό αρχείο;
Κάποιος άλλος θα μπορούσε να το υλοποιήσει.
Και εσείς και το πρόγραμμα σας να γίνει η πολύ όμορφη, και πολύ ευανάγνωστη,
αναμφισβήτητα, πολύ τέσσερις Πρόγραμμα γραμμή ακριβώς εκεί.
>> Οπότε ας προχωρήσουμε τώρα και να κάνει ένα ακόμη αλλαγή.
Παρατηρήστε ότι το πρωτότυπο μου πρέπει να αλλάξει επάνω στην κορυφή.
Επιτρέψτε μου λοιπόν να διορθώσετε το γεγονός ότι τόσοι Εγώ δεν πάρει φώναξε σε.
>> Κάντε βήχα, επιτρέψτε μου να τρέξει βήχα φορά Επιπλέον, εξακολουθούν να κάνουν το ίδιο πράγμα.
Αλλά τώρα, παρατηρήσετε έχουμε ένα συστατικό για μια τελική έκδοση.
Ξέρεις τι?
Δεν θέλω απλά να βήχει, κατ 'ανάγκην.
Θέλω να έχω κάτι πιο γενικό.
Έτσι, ξέρετε τι;
Θέλω να το κάνουμε αυτό.
Θέλω να έχω, σαν Scratch κάνει, ένα μπλοκ ας πούμε, αλλά όχι μόνο
πω κάτι λίγο αρκετές φορές.
Θέλω να πω ένα πολύ συγκεκριμένο κορδόνι.
Και, ως εκ τούτου, εγώ δεν κάνω θέλω να πω μόνο βήχα.
Θέλω να πω οτιδήποτε άλλο κορδόνι περνά μέσα.
>> Έτσι παρατηρήσετε, έχω γενικευμένη αυτό, έτσι ώστε τώρα
ας πούμε αισθάνεται σαν ένα καλό όνομα γι 'αυτό, όπως Ξυστό,
Χρειάζονται δύο επιχειρήματα, σε αντίθεση με το μηδέν.
Το ένα είναι ένα string.
Το ένα είναι ένα int.
>> Και θα μπορούσα να τους αλλάξουν.
Έχω ακριβώς το είδος του αρέσει η ιδέα της λένε το string πρώτα, και στη συνέχεια,
πόσες φορές αργότερα.
Κενό αυτό σημαίνει ακόμα δεν επιστρέφει τίποτα.
Αυτά είναι μόνο οπτική πλευρά εφέ, όπως με [? Ιορδανία,?]
προφορική παρενέργεια της φωνάζει.
Εξακολουθεί να κάνει κάτι n φορές, 0 έως, αλλά δεν είναι ίσο με n.
Αυτό σημαίνει ότι n συνολική φορές.
Και στη συνέχεια απλά να εκτυπώσετε ό, τι αυτή η συμβολοσειρά είναι.
Έτσι έχω πραγματικά γενικευμένη Αυτή η γραμμή κώδικα.
Μέχρι τώρα, πώς μπορώ να εφαρμόσουν η λειτουργία του βήχα;
>> Μπορώ να κάνω άκυρη βήχα.
Και εγώ μπορεί να πάρει ακόμα το πώς πολλές φορές θέλετε να βήχει.
Αλλά ξέρετε τι;
Μπορώ τώρα να punt να πω.
>> Μπορώ να καλέσω να πω με το λέξη βήχα, περνώντας στη Ν.
Και αν θέλω επίσης να εφαρμόσουν, απλά για διασκέδαση, μια λειτουργία φτάρνισμα,
Μπορώ να φτάρνισμα κάποια αριθμό φορών.
Και μπορώ να κρατήσω την επαναχρησιμοποίηση n, επειδή παρατηρήσετε ότι m σε αυτό το πλαίσιο ή το πεδίο εφαρμογής
υπάρχει μόνο μέσα σε αυτή τη λειτουργία.
>> Και Ν σε αυτό το πλαίσιο μόνο υπάρχει μέσα σε αυτή τη λειτουργία εδώ.
Γι 'αυτό και θα επανέλθουμε Αυτά τα ζητήματα του πεδίου εφαρμογής.
Και εδώ, είμαι απλώς πρόκειται να πω, achoo, και στη συνέχεια n φορές, άνω τελεία.
>> Και τώρα, το μόνο που χρειάζεται να δανειστεί αυτά λειτουργούν υπογραφές μέχρι εδώ.
Έτσι, ο βήχας είναι σωστή.
Κενό φτάρνισμα είναι σωστό τώρα.
>> Και εγώ ακόμα το μόνο που χρειάζεται να πω.
Έτσι, Πάω να πω, ας πούμε συμβολοσειράς s, int n, άνω τελεία.
Έτσι έχω πάνω-μηχανικής η καλό από αυτό το πρόγραμμα.
>> Και αυτό δεν το κάνει σημαίνει απαραίτητα αυτό είναι
τι πρέπει να κάνετε όταν γράφετε ακόμη και η απλούστερη των προγραμμάτων.
Πάρτε κάτι που είναι προφανώς πραγματικά απλή, πολύ σύντομη,
και την εκ νέου την εφαρμόσουν χρησιμοποιώντας τον τρόπο πάρα πολύ κώδικα.
Αλλά θα δούμε πραγματικά, και ώρα να κοιτάξουμε πίσω σε αυτά τα παραδείγματα,
και να συνειδητοποιήσουν, oh, αυτά είναι τα βήματα πήραμε πραγματικά να γενικεύουμε,
στον παράγοντα κάτι, μέχρι στο τέλος της ημέρας
κωδικός μου είναι πραγματικά αρκετά λογικό.
Διότι, αν θέλω να φτύνω τρεις φορές στη συνέχεια, φτάρνισμα τρεις φορές,
Είμαι απλώς πρόκειται να επαναληφθεί αυτό, Πρόγραμμα κάνουν βήχα, και να τρέξει βήχα.
Και έχω τρεις βήχα και τρεις φτερνίζεται.
>> Και έτσι αυτό είναι ένα βασικό παράδειγμα, αν θέλετε,
για το πώς θα μπορούσαμε να πάμε για στην πραγματικότητα την εφαρμογή ενός προγράμματος.
Αλλά ας δούμε τώρα τι είναι έχουμε κάνει όλο αυτό το διάστημα,
και ό, τι μερικά από τα τελευταία κομμάτια είναι πίσω από αυτή την απλή εντολή.
Στο τέλος της ημέρας, έχουμε χρησιμοποιήσει Clang ως compiler μας.
Έχουμε γράψει πηγή κώδικα, μετατρέποντας
μέσω Clang σε κώδικα μηχανής.
>> Και έχουμε χρησιμοποιήσει Κάντε απλά για τη διευκόλυνση της πληκτρολογήσεις μας, ώστε
ότι δεν έχουμε να θυμόμαστε αυτά τα ξόρκια της ίδιας Clang.
Αλλά τι είναι να κάνει πραγματικά κάνει;
Και, με τη σειρά του, αυτό που είναι Κλαγγή πραγματικά κάνει;
>> Αποδεικνύεται, αν έχουμε απλοποιήσει σημερινή συζήτηση λέγοντας,
πάρετε τον πηγαίο κώδικα, να περάσει ως είσοδος σε ένα compiler, το οποίο σας δίνει
έξοδο του μηχανήματος κώδικα, αποδεικνύεται ότι υπάρχει το
μερικά διαφορετικά βήματα εκεί μέσα.
Και τη σύνταξη συμβαίνει να είναι η ομπρέλα όρος για ένα σωρό βήματα.
Αλλά ας δώσουμε έμφαση αυτό έξω πολύ γρήγορα.
>> Αποδεικνύεται ότι έχουμε κάνει περισσότερα πράγματα κάθε φορά που τρέχει ένα πρόγραμμα,
ή κάθε φορά που καταρτίζουν ένα πρόγραμμα σήμερα.
Έτσι προεπεξεργασία αναφέρεται σε this-- τίποτα σε ένα πρόγραμμα C,
όπως θα δούμε ξανά και ξανά, που ξεκινά με αυτό το σύμβολο κατακερματισμού,
ή το σύμβολο hashtag εδώ, σημαίνει είναι μια οδηγία προεπεξεργαστή.
Αυτό σημαίνει ότι, στην περίπτωση αυτή, hey υπολογιστή, να κάνει κάτι με αυτό το αρχείο
πριν να συνθέσετε το δικό μου κώδικα.
>> Σε αυτή την περίπτωση, hash περιλαμβάνουν είναι, κατ 'ουσίαν, τον τρόπο Γ του λέγοντας,
hey υπολογιστή, να πάει να πάρει τα περιεχόμενα της CS50.h και να επικολλήσετε εδώ.
Γεια σου υπολογιστή, πηγαίνετε πάρετε το περιεχόμενο του προτύπου IO.h,
όπου αυτό είναι για το σκληρό δίσκο, να το επικολλήσετε εδώ.
Έτσι, αυτά τα πράγματα να συμβούν πρώτα κατά τη διάρκεια της προεπεξεργασίας.
>> Και Clang κάνει όλα αυτά για μας.
Και το κάνει τόσο καταριέται γρήγορα, δεν χρειάζεται καν
δείτε τέσσερις διακριτές πράγματα που συμβαίνουν.
Αλλά αυτό είναι το πρώτο τέτοιο βήμα.
>> Τι πραγματικά συμβαίνει στη συνέχεια;
Λοιπόν, η επόμενη επίσημη βήμα είναι η σύνταξη.
Και αποδεικνύεται ότι την κατάρτιση ενός προγράμματος
τεχνικά μέσα που πηγαίνει από πηγαίου κώδικα, η ουσία έχουμε
γράφει σήμερα, σε κάτι που ονομάζεται κωδικός συνέλευση, κάτι
ότι φαίνεται λίγο διαφορετική.
>> Και, στην πραγματικότητα, μπορούμε να δούμε αυτό το πραγματικά γρήγορα.
Επιτρέψτε μου να πραγματικά να πάμε σε IDE μου.
Επιτρέψτε μου να πάει μπροστά και ανοιχτή hello.c, η οποία είναι το πρώτο πρόγραμμα με το οποίο μπορούμε
ξεκίνησε σήμερα.
Και επιτρέψτε μου να πάει μπροστά και να τρέξει Clang ένα λίγο διαφορετικά, Clang-s, hello.c,
το οποίο είναι πραγματικά πρόκειται να να μου δώσει ένα άλλο hello.s αρχείο.
>> Και θα το κάνουμε ποτέ πιθανώς και πάλι δείτε αυτό το είδος του κώδικα.
Εάν πάρετε ένα χαμηλότερο επίπεδο συστήματα κατηγορίας, όπως CS61,
θα δείτε πολλά περισσότερα αυτού του είδους του κωδικού.
Αλλά αυτό είναι συμβολική γλώσσα.
Αυτό είναι X86 γλώσσα συναρμολόγησης ότι η CPU που διέπουν
CS50 IDE καταλαβαίνει πραγματικά.
>> Και αινιγματική όπως κάνει κοιτάξτε, είναι κάτι
ο υπολογιστής καταλαβαίνει αρκετά καλά.
Υπο q, αυτό είναι ένα αφαίρεσης.
Υπάρχει κινήσεις.
>> Υπάρχει κλήση των λειτουργιών εδώ, x oring, μια κίνηση, ένα πρόσθετο, ένα αναδυόμενο παράθυρο,
μια επιστροφή.
Έτσι, υπάρχει κάποια πολύ οδηγίες χαμηλό επίπεδο
ότι CPUs καταλαβαίνουν ότι Αναφέρθηκα νωρίτερα.
Αυτό είναι ό, τι η Intel Inside.
>> Υπάρχουν πρότυπα μηδενικά και αυτοί που
χάρτης με αυτά arcanely διατυπωμένο, αλλά κάπως καλά το όνομα, οδηγίες,
να το πω έτσι.
Αυτό είναι τι συμβαίνει όταν θα καταρτίσει τον κωδικό σας.
Μπορείτε να πάρετε τη συναρμολόγηση γλώσσα έξω από αυτό, το οποίο
σημαίνει ότι το τρίτο βήμα είναι να συγκεντρώσει ότι ο κώδικας συνέλευση σε, τελικά,
μηχανή code-- μηδενικά και αυτοί, όχι οι κείμενο που μόλις είδαμε πριν από λίγο.
>> Έτσι, προ-επεξεργασία κάνει ότι βρείτε και να αντικαταστήσει, και μερικά άλλα πράγματα.
Μεταγλώττιση παίρνει την πηγή σας κώδικα από C, πηγαίο κώδικα
ότι γράψαμε, τη συναρμολόγηση κώδικα που μόλις έριξε μια ματιά.
Συναρμολόγηση παίρνει ότι η συναρμολόγηση κώδικα για να μηδενικά και αυτοί
ότι η CPU θα είναι πραγματικά καταλάβουν στο τέλος της ημέρας.
Και σύνδεση είναι το τελευταίο βήμα αυτό συμβαίνει για ΕΜΕΙΣ-- και πάλι,
τόσο γρήγορα που δεν χρειάζεται καν notice-- που λέει,
hey υπολογιστή, να λάβει όλα τα τα μηδενικά και αυτοί που
προέκυψε από τη σύνταξη κώδικα του Δαβίδ, και η κύρια λειτουργία του, σε αυτήν την περίπτωση.
>> Και hey υπολογιστή, πηγαίνετε πάρετε όλα τα μηδενικά και μονάδες
ότι το προσωπικό CS50 έγραψε στο εσωτερικό της βιβλιοθήκης CS50.
Ανακατεύουμε εκείνους με Δαβίδ.
Και hey υπολογιστή, πηγαίνετε πάρετε όλα τα μηδενικά και αυτοί που κάποιος άλλος έγραψε χρόνια
πριν για printf.
Και προσθέτουν εκείνοι σε το ολόκληρο το πράγμα, έτσι ώστε να έχουμε
πήρε μηδενικά και αυτοί μου, η μηδενικά και μονάδες του προσωπικού CS50,
τα μηδενικά printf και αυτοί, και οτιδήποτε άλλο που χρησιμοποιούμε.
>> Μπορούν όλοι να συνδυάζονται όλα μαζί σε ένα πρόγραμμα που ονομάζεται, στην περίπτωση αυτή, γειά σου.
Έτσι, πλέον, θα είμαστε απλά χρησιμοποιούν τη λέξη μεταγλώττιση.
Και θα λάβουμε ως δεδομένο ότι όταν λέμε, συγκεντρώνουν το πρόγραμμά σας, αυτό σημαίνει,
hey κάνει το προ-επεξεργασίας, συναρμολόγηση και σύνδεση.
Αλλά υπάρχει πραγματικά κάποια ζουμερά πράγματα συμβαίνει εκεί κάτω από το καπό.
Και ειδικά αν να πάρει περίεργη κάποιο χρονικό διάστημα,
μπορείτε να αρχίσετε να σπρώχνει γύρω σε αυτό το κατώτερο επίπεδο.
Αλλά για τώρα, συνειδητοποιούν ότι μεταξύ των takeaways για σήμερα
είναι πολύ απλά η έναρξη μιας διαδικασίας,
να πάρει άνετα με κάτι σαν παγκόσμια γεια.
Πράγματι, οι περισσότεροι από ό, τι κάναμε σήμερα σίγουρα δεν θα βυθιστεί σε σούπερ γρήγορο.
Και αυτό θα πάρει κάποιο ώρα, και κάποια πρακτική.
Και οι πιθανότητες είναι, θα λύσουμε του θέλουν να χτυπήσουν το πληκτρολόγιό σας
ή φωνάζω στην οθόνη.
Και όλα αυτά είναι εντάξει.
Αν και, ίσως να μην προσπαθήσουμε να κάνετε στη βιβλιοθήκη τόσο πολύ.
>> Και σε τελική ανάλυση, θα να είναι σε θέση όμως, να ξεκινήσει
βλέποντας τα πρότυπα, τόσο σε καλό κώδικα ότι έχετε γράψει και λάθη
ότι έχετε κάνει.
Και μοιάζει πολύ με τη διαδικασία της να γίνει ένα TF ή CA είναι σαν,
θα αρχίσετε να πάρει την καλύτερη και καλύτερα βλέποντας αυτά τα πρότυπα,
και μόλις την επίλυση σας τα δικά της προβλήματα, τελικά.
Εν τω μεταξύ, θα υπάρχουν πολλές από εμάς να προσφέρουν την υποστήριξή σας, και μπορείτε να πάρετε
μέσα από αυτό.
Και στις write-ups για όλα τα προβλήματα
θα πρέπει να καθοδηγείται μέσω όλες τις εντολές
ότι εγώ σίγουρα ξέρω από πολλή πρακτική από τώρα,
αλλά θα μπορούσε να πετάξει πάνω από το κεφάλι ενός ατόμου για τώρα.
Και αυτό είναι απολύτως εντάξει.
>> Αλλά, τελικά, θα πάμε να αρχίσουμε να βλέπουμε σχέδια προκύπτουν.
Και μόλις πάρετε παρελθόν όλα τα ηλίθιο λεπτομέρειες, όπως παρενθέσεις,
και άγκιστρα, και ημι-παχύ έντερο, και τα πράγματα, ειλικρινά,
ότι δεν είναι καθόλου πνευματικά ενδιαφέροντα.
Και δεν είναι ο στόχος της τη λήψη κάθε εισαγωγικό μάθημα.
Είναι οι ιδέες που πρόκειται να έχει σημασία.
>> Είναι οι βρόχοι, και το συνθήκες, και τις λειτουργίες,
και πιο δυναμικά η αφαίρεση, και το factoring του κώδικα,
και ο καλός σχεδιασμός και η καλή στυλ, και, τελικά, η ορθότητα
του κωδικού σας, αυτό είναι, τελικά, πρόκειται να έχουν μεγαλύτερη σημασία.
Έτσι, την επόμενη εβδομάδα, θα λάβουμε αυτά ιδέες που είδαμε για πρώτη φορά στο Scratch
και τώρα έχουν μεταφραστεί σε C. Και θα αρχίσουμε
να εισαγάγει το πρώτο από τα πραγματικό κόσμο τομείς μαθήματος.
>> Θα επικεντρωθεί στην παγκόσμια ασφάλεια, και πιο συγκεκριμένα την κρυπτογραφία,
η τέχνη της κρυπτογράφησης πληροφοριών.
Και μεταξύ των πρώτων σας προβλήματα μόνοι σας
θα πάρετε για να γράψει πέρα παίζοντας με κάποια από τη σύνταξη
και την επίλυση κάποια λογική προβλήματα, τελικά, πριν από καιρό,
είναι να αγωνίζομαι στην πραγματικότητα, ή την κρυπτογράφηση, και, τελικά, την αποκρυπτογράφηση των πληροφοριών.
Και ό, τι έχουμε κάνει Σήμερα, θα αρκετά χαμηλή
επίπεδο, είναι ακριβώς πρόκειται να επιτρέψει να πάρουμε ένα και ένα,
και ένα βήμα παραπάνω προς την κατεύθυνση γράφοντας την πιο ενδιαφέρουσα κωδικό ακόμα.
>> Έτσι, περισσότερα για αυτό την επόμενη εβδομάδα.
>> [ΑΝΑΠΑΡΑΓΩΓΉ ΒΊΝΤΕΟ]
>> -Τι Μπορεί να μου πείτε για η τελευταία φορά που τον είδε;
-Τι Μπορώ να πω, πραγματικά;
Θέλω να πω, ότι ήταν όπως κάθε άλλη πρόβα προ-παραγωγής,
εκτός υπήρχε κάτι είπε στο τέλος που κόλλησε μαζί μου.
>> -Αυτό Ήταν CS50.
>> -Ότι Είναι μια περικοπή όλους, πολύ καλή δουλειά στην πρόβα.
>> μεσημεριανό -ότι είναι;
>> -Ναι, Εσείς και μπορώ πιάσε ένα σάντουιτς σε ένα κομμάτι.
Επιτρέψτε μου να debrief με David πραγματικά γρήγορα.
Δαβίδ?
>> [ΤΕΛΟΣ ΑΝΑΠΑΡΑΓΩΓΗ]