[Powered by Google Translate] DAVID MALAN: Questo è CS50, e questo è l'inizio della settimana 1.
Che cosa abbiamo pensato di fare oggi è prendere uno sguardo indietro a
qualcosa che molti di voi hanno probabilmente camminato passato per qualche
tempo e potrebbe sembrare un po 'familiare.
Questa cosa qui, questo, naturalmente, è in -
PUBBLICO: Scienza.
DAVID MALAN: Centro scientifico.
Quindi, questo è in realtà uno dei primi computer
eseguire dal 1940.
E 'stato uno dei primi calcolatori elettromeccanici
che era capace di particolarmente lungo,
autogestite calcoli, e quello che effettivamente vedere in
al centro la scienza è solo un piccolo pezzo di questa cosa.
Che cosa abbiamo pensato di fare è dare uno sguardo indietro a un video
che è stata fatta qualche tempo fa, l'introduzione di questa
cosa al mondo.
E vedrai dalla musica e voce che effettivamente quelle
sono stati momenti molto felici.
>> [RIPRODUZIONE VIDEO]
-Un trionfo di abilità matematica e meccanica è questa
grande nuovo calcolatore automatico presso la Harvard University.
Intricati problemi di matematica, messo attraverso la
macchina in forma codificata su nastro, vengono accuratamente risolti in un
minima frazione del tempo richiesto per umana
calcolo.
Progettato per accelerare tutte le forme di matematica e scientifica
la ricerca, il cervello meccanico gigante lavorerà per il Regno
Marina degli Stati fino alla fine della guerra.
>> DAVID MALAN: Quindi quello che forse non sapete è che era in
questo dispositivo stesso un termine che tutti ora prendere più o meno
per scontato è stato coniato, che di un bug.
Così uno dei tecnici che lavorano in questo computer
letteralmente trovato una piccola falena nella macchina che ha portato
in alcuni calcoli errati.
E come la storia racconta che falena è stato registrato in questo log
rivista qui, di ritorno dal 9 settembre, nel 1940, qualcosa,
e così è nato per il mondo il termine "bug".
Quindi, d'ora in poi consideriamo i bug di essere qualsiasi tipo di errori in
programmi, siano essi artificiali o, in questo caso, gli insetti.
>> Così qualche annuncio, come si procede.
Così CS50 ha una tradizione di offrire pranzi di sorta sulla
la maggior parte venerdì, durante il semestre, dove prendiamo 30 a
40 studenti al fuoco e ghiaccio in piazza per casual
chiacchiere, parlare di informatica,
parlare del futuro.
Invitiamo ex-alunni e amici da settore a chiacchierare
studenti.
Davvero verso un fine di fare ciò che è una classe abbastanza grande
tanto più intima, almeno una volta, mentre per
sottoinsiemi di studenti.
Quindi, se volete unirvi a noi questo Venerdì, ore 1:15, andare a
CS50.net/lunch a RSVP.
E lo faremo recurringly, non così preoccuparti se non sei
tra i primi 30 o giù di lì questa settimana.
>> Quindi note scriba.
Una parola sulle risorse che ora cominciare ad essere disponibile
agli studenti della classe.
In modo che la testa non deve essere verso il basso durante le lezioni
scarabocchiare giù tutto quello che dico e così via, cosa facciamo
invece è di fornire da parte del personale docente un
insieme canonico di note.
Così abbiamo uno dei nostri compagni di insegnamento, Andrew Sellergren,
che si siede ogni settimana, passa in rassegna i video, e poi
scrive quello che noi pensiamo è abbastanza
insieme autorevole di note.
E appassionato di Andrew, anche, di mettere in note snarky
il fondo.
Così si spera godere di questi come un libro di riferimento per il
divertimento, e anche, vieni quiz tempo, come la possibilità di rivedere
quello che è successo in lezioni individuali.
Così quelli sono collegati nella pagina lezioni.
>> Problema set 0, nel frattempo, è fuori.
E in termini di risorse disponibili a voi -
la procedura dettagliata.
Milo ha condotto la prima il Venerdì.
E 'stato girato, messo online da Sabato.
E così realizzare, se non sei veramente sai da dove iniziare,
per questo o futuri p-set, sempre rivolgersi prima alla
procedura dettagliata o il loro video.
Sezionamento è in corso, a cs50.net/section è dove si
dovrebbe presentare le vostre preferenze, se non l'hai
già, da oggi.
Poiché le sezioni inizierà il prossimo Domenica, Lunedi,
e Martedì.
Facciamo sezioni quei tre giorni, tutte le settimane del
semestre per la maggior parte.
E abbiamo anche introdurre, ancora una volta, tracce diverse.
Quindi vi verrà chiesto in questo modulo di sezionamento, se si
non lo hanno già visto, se siete tra quelli meno
comodo, più confortevole, o una via di mezzo.
E se sei una sorta di sulla recinzione, in genere da qualche parte in
tra è ciò che la maggior parte degli studenti finiscono il controllo.
Orario di ricevimento inizia stasera.
>> Così Scratch è la chiave piuttosto bassa, anche se è del tutto naturale
imbattersi in vari bug, o essere incerti su come
implementare qualcosa.
Così si rendono conto che inizieremo l'orario di ufficio questa settimana.
Saranno a Annenberg Lunedi, Martedì, Mercoledì,
Giovedi, 20:00-11:00 durante la pausa del cervello.
Classmen superiore può entrare, e se avete mai avuto problemi a trovare
in porta, perché essi saranno strisciando, solo parlare la tua strada
e spiegare tu sei con CS50.
Tipicamente 20 a 30 di noi su staff sarà lì per aiutare
è uno contro uno.
>> All'arrivo l'idea è questa: ti portare il vostro computer portatile,
avrete il vostro caricabatterie, avremo cavi di alimentazione aggiuntivi,
in particolare lungo la parete sud del Monte Sant'Anna dove
c'è un sacco di prese elettriche.
E il punto di ingresso principale per orari di Q & A è quello di andare a
cs50.net/discuss e di inviare
vostra domanda.
E di etichettare con pset 0 o pset 1, qualunque sia la settimana
potrebbe accadere di essere.
E poi che faremo è di avere una tabella di compagni di insegnamento
e assistenti del corso, in genere 8 o 10 o giù di lì di noi,
sta attraversando, mantenendo un occhio vigile sulla scheda, e
spiumatura fuori domande davvero il più rapidamente possibile,
facendo riferimento a post correlati, se non avete trovato quelle
voi stessi, riferimenti on-line, a seconda dei casi.
E poi se ci sono problemi, in quanto non vi inevitabilmente
sarà, o rende solo più senso a sedersi uno contro uno,
lavorare con i problemi con qualcuno.
>> O semplicemente entrare in orario d'ufficio davvero
bisogno di quella mentalità.
Se non si desidera passare attraverso il modulo elettronico, si
molta voglia di incontrare qualcuno.
Comunicare che a noi, e che cosa accadrà quando la tua
questione è stato visto da un membro del personale, e noi
determinare, yup, questo dovrebbe essere inviato a una delle 20 o
30 membri del team qui a livello locale, potrete vedere in alto a sinistra di questa
poco Inserisci il pulsante Coda inizia a lampeggiare sul cs50.net /
discutere.
E questo ti dice che ora sono stati invitati, in modo da
di parlare, di entrare nella coda.
E facendo clic su tale pulsante, il tuo nome apparirà sul
un iPad che il greeter CS50, uno dei capi del corso, sarà
essere tenuta vicino all'ingresso della Annenberg, che poi
vedere come illustrato qui, gli studenti che hanno domande su
sinistra, i membri del personale che sono presenti sulla destra.
E con un click di destra e sinistra, il browser web sarà
iniziano a lampeggiare non appena, per esempio, il professor McGonnagal
è pronto a vederti a un tavolo particolare Annenberg.
>> Così abbiamo fatto un po 'di questo ultimo anno.
Abbiamo riavviato l'orario di ufficio e
reimplementato molto del software.
Così si rendono conto che questo sarà riscaldare questa settimana.
Ma anche realizzare anche, negli anni passati, come forse avrete già sentito
da amici, orari d'ufficio aveva infatti da 50 a
150 studenti in una sola volta.
Ed è non solo possibile per noi per gestire tale
efficacemente, uno su uno, per tutta la sera.
E così quello che abbiamo davvero intenzione di provare a fare quest'anno è
capitalizzare il fatto che un sacco di domande sono
frequenti e che spesso può essere meglio risponde
in modo asincrono.
Così si può ordinare di pensare attraverso la risposta del personale,
e siamo in grado di pensare attraverso il codice, senza l'riscaldata
pressione necessariamente lottare
attraverso di esso affiancati.
Così si stima che circa un terzo o la metà delle domande
saranno spediti in persona, e cercheremo di cogliere fuori come
molti come un mezzo o più elettronicamente,
in orario d'ufficio.
E continueremo ad utilizzare Discuti
per tutta la settimana pure.
>> E, infine, si rendono conto che questo corso può essere presa pass / fail.
Quindi, se siete sulla recinzione o semplicemente pensare che sei veramente
non so se questo è il mondo per voi, o questo è davvero
del tutto estranei a voi, si rende conto che questo è un modo meraviglioso
di guadagnare un po 'di confidenza con il quale entrare nel
classe, come ho fatto io, francamente, anni fa.
E poi hanno cinque settimane per ordinare di figura per
voi stessi se si vuole rimanere pass / fail, passare a una lettera
grade, o simili.
E di solito ciò che pass / fail è, credo, per gli studenti è
che, se si mette in quei 10 ore, 20 ore, qualunque essa
può essere in alcuni problemi, e si sta sbattendo la testa
contro la parete,
e davvero non posso inseguire giù qualcosa, e voi
sono tante altre cose che dovete fare, onestamente, quello che ho
che pass / fail è, prende il bordo al largo di
situazioni del genere.
Dove hai preso la cosa il 90% del percorso.
Sai, non è proprio perfetto.
Ma hai un sacco fuori di esso, comunque.
Quindi considero pass / fail come dare che
modello mentale, forse.
>> Va bene, la settimana scorsa quindi ci siamo tuffati in Scratch, e noi
parlato di programmazione ad un livello abbastanza alto grafica.
E oggi facciamo il passaggio a una lingua
chiamata C, un linguaggio di programmazione più basso livello in cima
che molte lingue moderne sono ora costruiti, tra cui alcuni
di quelli che useremo verso la fine del periodo.
E sintatticamente, il loro aspetto
è tutto molto simile.
Quindi cerchiamo di iniziare a fare questo passaggio qui.
Quindi questo era un programma la settimana scorsa che è stata la più semplice delle
ciao programmi mondiali.
E 'semplicemente stampato al mondo schermo ciao, con un
fumetto piccola che esce dal gatto.
Beh, se cominciamo ora a tradurre questo in un altro
linguaggio, si rende conto che le idee oggi e il Mercoledì
sono identici, ma la sintassi inizia a cambiare.
Quindi, considerando che la settimana scorsa abbiamo avuto, quando si fa clic su bandiera verde, per esempio
ciao mondo.
Oggi stiamo andando ad avere int, principale, vuoto, printf,
ritorno, con qualche altra sintassi in là pure.
Le parentesi graffe e parentesi, e citazioni, e quant'altro.
Ma rendersi conto che il nucleo della idea qui è la stampa,
e, infine, il fatto che la principale ora sarà
sinonimo di partenza di un programma.
Principale sta per essere dove la bandiera verde prende le cose fuori.
>> Ora cerchiamo di prendere in giro a parte alcuni dei componenti qui
prima di tuffarsi in alcuni esempi concreti.
Quindi abbiamo chiamato questa settimana una affermazione, per cui è solo
un'istruzione.
Fate questo - in questo caso, dire ciao mondo.
Bene in C, se guardiamo solo che la linea, questo è il modo in cui siamo
sta per iniziare esprimere quel particolare pezzo di puzzle:
printf ("ciao mondo");.
E adesso faremo prendere in giro questi pezzi sempre più nel corso del tempo,
ma si rendono conto che c'è un modello qui.
Quindi uno, abbiamo questa cosa chiamata printf, che è
sostanzialmente in linea con la parola Say.
Questo è quello che sta per fare.
Printf, e f qui significa "formattato".
Quindi significa solo è possibile inserire
vari dettagli estetici.
Così unquote citazione è l'inizio di ciò che stiamo andando
per chiamare una stringa.
Una parola, una frase, una frase.
Una stringa in un linguaggio di programmazione è una sequenza di zero
o più caratteri.
Così h-e-l-l-o, virgola, e così via è,
citazione unquote, una stringa.
E ora backslash n, un po 'sintatticamente strano, ma abbiamo
già definito che la scorsa settimana nel senso che?
E 'solo una nuova linea.
E 'solo un modo di trasmettere al computer che si desidera che il
equivalente di colpire Invio lì, ma non si
vuole colpire realmente Inserisci e quindi rovinare tutto il
formattazione del programma vero e proprio.
Ora le parentesi racchiudono questa stringa, aperta parentesi e
chiudere parentesi, e all'interno di questo è la nostra stringa.
Perché questo è perché in C, e altri programmi
lingue, cose come printf accettare argomenti, o prendere
parametri.
>> Quindi, pensare fin da ora di questo blocco Say viola come
funzione, come metodo, come procedura.
Si può davvero chiamare come si vuole, per ora, ma
è una specie di un programma in miniatura che fa un solo
cosa, in una singola linea, non meno.
Così è printf anche ciò che stiamo per iniziare a chiamare un
funzione, e le funzioni di fare qualcosa - in questo caso
stampa una stringa formattata sullo schermo -
ma funziona anche accettare argomenti o parametri.
E con argomenti o parametri, grazie, si intende
che il loro comportamento può essere influenzato da ciò che si passa in
all'interno delle parentesi.
Quindi, in questo caso, ha bisogno di essere detto printf cosa stampare, e noi
basta passare, tra virgolette qui, la stringa che abbiamo
in realtà desidera stampare.
E il punto e virgola alla fine di questa linea è solo un
fastidio storica cha alla fine della maggior parte delle linee di codice,
si mette un punto e virgola per rendere super chiaro al computer
che questa riga di codice termina qui.
Ora, questo è un bene perché, come vedremo, come i programmi di ottenere di più
complesso, il punto e virgola farà super-uomini chiari per noi,
e anche il computer, in cui linee di codice di inizio e di fine.
Rendetevi conto che alcune lingue non hanno alcun
di questi stessi dettagli.
E infatti, in JavaScript, non sempre bisogno di qualcosa
come il punto e virgola.
Ma più su quello a venire.
>> Così loop.
Abbiamo avuto una cosa del genere, molto intuitivo, ovvio, non
qualcosa di nuovo e ancora e ancora.
Come mettere i calzini, o dire ciao, in questo caso.
Ebbene, a partire da oggi in C, potremmo esprimere questa Scratch
bloccare come while (true) printf ("ciao mondo").
Quindi notare stiamo cominciando a costruire letteralmente il puzzle
pezzo da prima.
Abbiamo stesso blocco viola, ma è all'interno di questo
tra parentesi sempre blocco, e il modo migliore per tradurre tale
a C è il seguente.
Non c'è parola chiave per sempre.
Non si può semplicemente digitare f-o-r-e-v-e-r in C.
Così l'analogo più vicino è mentre.
>> Ora, mentre il (vero) sembra un po 'stupido, perché non il valore
di un vero cambiamento mai?
Presumibilmente non.
E 'come dire, mentre uno, mentre, mentre vera.
E 'la stessa cosa, vero è sempre il caso.
Quindi, questo ciclo è in realtà indurre che tipo di ciclo?
Solo un ciclo infinito, a destra.
Un ciclo per sempre o come lo chiama la settimana scorsa,
un loop infinito.
Così a volte non va bene.
A volte questo è un bug, a volte è per questo che si ottiene
il pallone da spiaggia rotante o clessidra o simili.
Ma in questo caso, abbiamo volutamente, per qualunque
ragione, ha voluto stampare la stessa cosa
e ancora e ancora.
Oppure, nel caso di come un orologio, si vuole fare
qualcosa di nuovo e ancora e ancora.
Così cicli infiniti potrebbe avere un senso.
Ed è così che in C si potrebbe tradurre sempre al codice.
>> Così ora questo è un po 'più specifico.
Avevamo ripetere 10 volte la seguente dichiarazione.
Così, mentre (true) non funziona esattamente lì, perché è vero
sempre vero.
Quindi, se invece guardiamo la versione C, ora la sintassi ottiene un
po 'più criptico.
Ma per essere onesti una volta che si inizia a vedere questo, tutto diventa
piuttosto familiare in fretta.
Quindi questo è quello che è chiamato un ciclo for.
Un ciclo for sta per dire al computer di fare qualcosa
ancora e ancora e ancora finché
queste cose sono vere.
Ora, che cosa si intende con questo?
Beh, ci sono tre parti di un ciclo for, e stiamo andando a
tornare su questo in un contesto di effettiva
esempi in un momento.
Quindi non preoccupatevi se non del tutto affondare in tutto in una volta.
Ma int i = 0 è, per farla breve, dicendo: dammi un
variabile è di tipo intero, in modo da darmi un numero
chiamato i, e inizializzarla a 0.
Questo è il danno me come un x algebrico variabile e
inizializzarlo a 0.
Ma in questo caso abbiamo chiamato i.
Poi nel mezzo, si dice i è inferiore a 10.
Questo è dire al computer non le seguenti cose così a lungo
i è inferiore a 10.
E ovviamente inizia a meno di 10, perché
si parte da 0.
Poi, infine, si può forse immaginare quello che ho + + mezzi.
E 'un po' di sintassi che significa solo incrementare i.
Quindi aggiungere 1 a i, ancora e ancora e ancora.
>> E così come vedremo questo ciclo, questa sintassi, invece, implementa
esattamente la stessa cosa che, francamente, in Scratch era così
molto più facile da esprimere.
Ripetere 10, e il gioco è fatto.
In C, e nella maggior parte dei linguaggi di programmazione, dobbiamo essere un
po 'di più istruttivo per il computer e in realtà
specificare qualcosa di simile.
Ma torneremo a questa e altra sintassi.
>> Che dire di variabili?
In Scratch abbiamo avuto qualcosa di simile a questi blocchi arancioni,
dove ho potuto dichiarare una variabile.
Diamo arbitrariamente chiamare contatore.
Diciamo la inizializzare a 0, e poi
facciamo sempre fare qualcosa.
In questo caso in Scratch sto dicendo il contatore, in modo che il
gatto sta per avere una piccola bolla discorso che sta parlando
il numero che è in questa variabile.
E poi abbiamo il cambiamento contatore di 1.
Quindi tutto questo è avvolto all'interno di un blocco Forever.
Così abbiamo già ora i mattoni in C con
che a tradurre questo.
>> Un modo per poterlo fare è questo.
Dammi un numero intero, la chiamano contatore.
Inizializza a 0
in prima linea lì.
While (true), quindi sto rubando l'idea da un momento
fa andare avanti e procedere nel modo seguente.
Stampa il contatore e quindi incrementare il contatore,
ancora, e ancora, e ancora.
O ancora, + + significa semplicemente aggiungere 1 a qualcosa.
Ma c'è un nuovo pezzo di sintassi qui.
Cosa salta fuori da non tra i nostri esempi precedenti?
Sì, questo d%.
Così si può forse dedurre che cosa sta facendo, francamente, in base
su ciò che il blocco Scratch sta facendo.
Ma ancora una volta in C, dobbiamo solo essere un po 'più particolare
quando si tratta di esprimere noi stessi.
>> So printf ("% d \ n").
Beh, la maggior parte di che si può buttare via come familiare.
Le citazioni significa solo che è una stringa, backslash n
è solo una nuova linea.
Quindi l'unica cosa nuova è qui d%.
E tutto ciò che è è un segnaposto.
% D sta per indicare un numero decimale.
E computer% mezzi d, inserire un numero decimale qui.
Beh, che numero vuoi mettere lì?
Beh, come si può forse dedurre, dopo la virgola si dice
contatore, questo è il nome di una variabile che abbiamo dichiarato o
ha creato un paio di linee in precedenza.
Quindi questo è solo modo C di collegare in una variabile in un
stringa in modo dinamico.
Perché al contrario, se avessi invece fatto qualcosa di simile
questo, printf ("contatore"), che cosa sarebbe questo
programma invece fare, presumibilmente?
Sarà letteralmente stampare "contatore".
Il che non è l'effetto che voglio.
Ho bisogno di sostituire in qualche valore numerico.
Così vedremo che le funzioni di allora, come printf, non possono assumere
solo pochi singoli argomenti, come
"Ciao mondo".
Possono prendere unquote virgola citazione, e poi alcune variabili
che avranno collegato in, come vedremo la stringa precedente
tramite questi segnaposto segno%.
>> Beh, che dire di espressioni booleane?
Le espressioni booleane sono questi valori, vere o false.
Sì o no.
1 o 0.
Acceso o spento.
Quindi, in Scratch appaiono come questo, e notare che la
bozzello qui è in realtà la congiunzione
di due blocchi più piccoli.
Così ho tipo di trascinare e rilasciare tre pezzi di puzzle
insieme per fare quel pezzo di puzzle più lì in modo che io
potrebbe trasmettere l'idea che voglio x essere meno di y e
y sia inferiore a z.
E così sono in grado di tradurre queste due linee separate come segue.
Il piano può essere molto banalmente tradotto in C,
solo con x <y.
Forse con qualche parentesi per buona misura.
E poi in C, non si scrive e per indicare la
congiunzione di qualcosa.
È invece scrivere &&.
E come vedremo finalmente vedere, una singola e commerciale accade
dire qualcosa di diverso.
Così && indica solo l'idea di AND.
>> Quindi, di nuovo, anche se questo inizia a guardare piuttosto complesso,
uno degli scopi di introdurre Scratch, oltre
solo che hanno una sorta di divertimento on-rampa dove si può fare
qualcosa che è molto grafico e animato, e
condivisibile e simili, è anche quello di trasmettere l'idea che
tutte le idee iniziamo tuffarsi oggi e poi
sono stati enunciati nell'art anche così semplice
interfaccia fin dal primo giorno.
Che dire di questo qui?
>> Così condizioni.
Quindi il blocco Scratch sulla sinistra ci sembra
un po 'più complessa.
Ma è solo un po 'di trascinamento e
la caduta dei pezzi familiari.
Se x è minore di y, diciamo così.
Altrimenti se x è maggiore di y, diciamo così.
Altrimenti, si può logicamente presumere che è dedotto che
devono essere uguali.
Quindi dire che sono uguali.
Ora in C sulla destra, stessa cosa esatta.
E notare che le parentesi graffe stanno per essere un
caratteristica di C e di altre lingue che fanno questo genere
di incapsulamento.
Proprio come se il blocco è questa cosa gialla che una sorta di
afferrando il blocco viola all'interno di esso.
Allo stesso modo sono queste bretelle -
queste parentesi graffe -
lo scopo di evocare quella stessa idea di abbracciare uno o più
righe di codice che sono rientrati al loro interno.
Quindi sulla destra qui, se x minore di y, printf
("X è minore di y").
Altrimenti se x è maggiore di y, stampare lo stesso.
Altrimenti stampa che sono uguali.
>> Così, in breve, c'è una mappatura abbastanza diretto o traduzione
della lingua che abbiamo visto finora, anche per un po 'di
delle funzioni più sofisticate.
Quindi non potrebbero utilizzare questo per il vostro progetto, o potrebbe non
si utilizza questo per il vostro progetto di questa settimana.
Ma abbiamo queste cose chiamati array in C. In Scratch,
si chiamano liste.
E abbiamo visto questi con la RPG Fruitcraft scorsa settimana.
Il piccolo ragazzo blu che era in giro, raccogliendo
ciliegie e arance e simili.
Bene in Scratch, che è stato implementato con questo arancione
blocco che contiene le parole, in questo caso, siamo letteralmente
l'aggiunta di "arancione" ad un
variabile chiamata inventario.
Quindi, in C, questa sintassi sta per arrivare un po 'più criptico.
E torneremo a questo la prossima settimana e fare di più
cose interessanti nel mondo della crittografia con esso.
Ma in fondo qui, queste due linee sostanzialmente
si traducono in quello che stiamo facendo in un Scratch bloccare fino lì.
Ma più su quello a venire.
>> Così mettendo insieme, ecco un programma in C. Quindi cerchiamo di
rapidamente prendere in giro a parte alcuni dei pezzi di sintassi qui, ma
allora andiamo effettivamente iniziare a scrivere del codice, familiarizzare
voi con alcuni degli strumenti che verranno utilizzati, e vedere se ci
può partire da ora alcuni di questi elementi di base da
la scorsa settimana, ora sintatticamente in C. Quindi in alto qui, questa
è forse uno dei programmi più noioso si possa
scrivere nella maggior parte qualsiasi linguaggio di programmazione.
Ma è una specie di ha un significato speciale perché è la
programma canonico che ogni informatico scrive quando
insegnare a qualcuno un linguaggio di programmazione -
un programma ciao mondo.
>> Così in cima, vediamo questa nozione di # include
e poi, tra parentesi angolari, stdio.h.
Stiamo per tornare a questo, ma in realtà ciò che
significa che c'è un file in questo mondo chiamato norma
I / O, stdio punto h, e questo è solo un file di testo
qualcuno ha scritto anni fa.
E all'interno di questo file di testo sono un sacco di
funzioni, o metodi o procedure, che qualcun altro
ha scritto che noi siamo i beneficiari del perché
È ora possibile utilizzare il codice di quella persona.
Le funzioni di lui o lei ha scritto.
In questo caso, printf non è qualcosa che ho scritto, è
non qualcosa che ha scritto CS50.
E 'qualcosa che qualcuno ha scritto anni fa e messo in una
file chiamato stdio.h e poi, per inciso, mettere
un'altra parte della funzione in un altro file.
Ma ci arriveremo.
>> Così # include è solo il nostro modo di dire, in
C, dammi l'accesso alle funzioni che qualcun altro ha scritto.
E in questo caso mi interessa perché voglio printf.
Ora abbiamo int main (void).
Quindi questa è una di queste cose, francamente, che il giorno 0,
più o meno ho da un po 'fuori zona, perché è solo
non interessante
intellettualmente, alcune delle sintassi.
Ma per ora sappiamo che le funzioni, altrimenti noto come
procedure, o metodi, producono generalmente un certo valore.
Fanno qualcosa.
Sono venuti fuori con una risposta.
Producono in uscita.
Così int nei pressi della principale è solo il nostro modo di dire scorciatoia
che questa funzione, questa procedura, è finalmente sta
di restituirvi un numero.
E perché questo è, torneremo a.
Principale è proprio lo standard mondiale di default per l'impostazione predefinita
funzione che si fara 'eseguita in un programma in C, quando
lo si esegue.
Void significa semplicemente che questa cosa, più importante, non si assume alcuna
argomenti, in questo caso.
Così sto essere super esplicito.
Non ci sono le stringhe in là, non ci sono virgole.
Void significa senza argomenti per principale.
>> Ora, infine, per fortuna, le ultime due righe sono familiari.
All'interno delle parentesi graffe abbiamo un printf
e abbiamo un ritorno.
E il ritorno è una specie di peccato che dobbiamo
metterla lì, perché in questo caso non sta facendo tutto questo
molto di interesse.
Ma in un programma per computer, quando una funzione restituisce 0,
questo significa che tutto va bene.
Nulla è andato storto.
Al contrario, se una funzione restituisce 1, 1 o negativo, o
1337 negativo, o alcuni numeri casuali del genere, che
generalmente significa che un errore di fatto si è verificato.
Quindi, se siete sul vostro Mac o PC, se avete mai visto
qualche messaggio fastidioso perché il computer è andato in crash o
congelati, e c'è un messaggio di errore criptico,
e poi un po 'di codice, come sistema di codice
1,2,3,4, un numero,
che è generalmente un dettaglio superfluo dire
la maggior parte di noi esseri umani, ma questo è ciò che una qualche funzione o qualche
programma ha effettivamente restituito, un valore diverso da zero.
E il vantaggio di questo è che 0 significa tutto pure, e
allora hai di fatto un numero infinito di cose che
può andare storto.
È per questo che hanno scelto 0 per bene e un valore diverso da zero per
male, come vedremo fra poco.
>> Quindi cerchiamo di andare avanti e scrivere questo.
Quindi ricordare che l'altro giorno ho usato il mio Mac per aprire un
finestra terminale, e poi ho aperto programma di testo, come
TextEdit, e ho iniziato a scrivere del codice.
Beh, va bene.
Ma la tua esperienza sta per essere diverso su un Mac, o
in un computer Solaris, un computer Linux, operativo che
sistema che si stia utilizzando.
E così, nel corso, quello che invece di utilizzare è qualcosa
chiamato il CS50 Appliance.
Così il CS50 Appliance è un pezzo di software scaricabile
che consente di eseguire un sistema operativo chiamato Linux,
in particolare Fedora Linux, sul proprio Mac o PC.
E farlo scaricando qualcosa chiamato un hypervisor.
Quindi, tutto questo sarà documentato nel set problema 1.
E si viene guidati verso ciò che è necessario scaricare.
Ma il risultato finale, se si dispone di un computer Mac o PC, è
scaricare alcuni software libero.
È quindi scaricare Appliance CS50, e vi dico che
il software libero - l'hypervisor -
per eseguire il Appliance CS50 in una finestra sul computer.
E quello che succede è questo.
>> Ora ho, notare qui, quello che sembra essere un desktop
ambiente.
E lasciatemi in realtà ridurre questa finestra singola.
Quindi, questo è ora il mio Mac, con una piccola finestra, e all'interno
di questa finestra sembra essere completamente
sistema operativo diverso.
In effetti c'è questo menu di avvio qui, che ricorda
Windows, che ha un sacco di sottomenu, tra cui
un link al manuale CS50, Dropbox, e simili.
E ciò che questo ambiente è ora un ambiente standard
che tutti noi ora possibile utilizzare, in modo che non importa che cosa il vostro
computer è, ciò che è stato installato su di esso, quale versione
di Mac OS o Windows è in esecuzione, tutti noi ora la
stesso ambiente.
E ora in questo ambiente si può iniziare a scrivere del codice.
>> Quindi ho intenzione di andare avanti e aprire un programma chiamato gedit.
Questo è paragonabile a Notepad.exe, o
TextEdit su Mac.
E questo è solo un super semplice programma di editing di testo
che assomiglia a questo a prima vista.
Ora, in cima, ho una tavolozza bianca, in fondo ho
hanno questa finestra nera che dice jharvard apparecchio @.
E questo perché l'account utente che abbiamo creato in precedenza
per tutti si chiama John Harvard.
Ha una cartella in cui tutti i suoi file stanno per andare, e
qui è dove si può iniziare a scrivere del codice.
Permettetemi quindi di andare avanti qui e ingrandire solo un po ', e io sono
intenzione di fare # include, int main (), e
poi ho intenzione di fare printf ("ciao mondo")
, Restituisce 0.
Ora, questo è tutto molto bianco e nero.
>> Lasciatemi andare avanti e fare una cosa da insegnare gedit quello che sto
effettivamente facendo.
Lasciami andare a Salva con nome.
Sto andando a scegliere sul lato sinistro qui jharvard.
Quindi, di nuovo, anche se non hai mai usato Linux prima, francamente
in questi giorni, tutti sono devolvendo in sostanza il
stesso tipo di interfaccia -
Mac OS, Windows e Linux.
Così ho scelto cartella Inizio jharvard qui.
E ho intenzione di salvare il file come hello.c.
Così in cima, ho digitato hello.c, nominare un C
programma con l'estensione. c è
ciò che è pratica comune.
E mi ha colpito Salva.
E ora ciò che è bello è che ho effettivamente insegnato gedit,
che questo è un programma C.
Si noti che il mio testo in bianco e nero è ora codificati a colori, o
sintassi evidenziata, che attira la mia attenzione solo al
diverse parti semantiche del programma.
In alto a sinistra c'è, come i miei programmi diventano più complessi, sono
sta per avere un riassunto di tutte le cose che ho scritto.
Così che è lassù.
Quindi lasciate che ora lo zoom indietro e scendere a questa finestra di terminale.
>> Quindi questo è forse nuovo per molte persone.
Se non hai mai usato un ambiente a riga di comando, che non hai mai
utilizzato DOS, o non hai mai usato Linux, o non hai mai aperto
Mac OS finestra del terminale, ci sono un sacco di cose che si
potrebbe fare con l'interfaccia grafica, come il puntamento, e facendo clic, e
trascinando e lasciando cadere, e simili, ma in generale -
certamente nel mondo dell'informatica -
tramite riga di comando, in cui non si ha il mouse
in generale, hai solo la tastiera, è in realtà molto
più potente di interfaccia, una volta che abituarsi alla
vari comandi.
E si ordina di te stesso senza bisogno di puntare e fare clic su
in tutto.
Quindi, in gedit avremo sorta di avere il meglio di entrambi i mondi.
Siamo in grado di trascinare e rilasciare il testo, possiamo vedere
bello e codice colore.
Ma quando arriva il momento di eseguire il nostro programma, faremo volte
basta usare questa piccola finestra qui.
>> Quindi ho intenzione di andare avanti e farlo.
Nella finestra in basso in bianco e nero, ho intenzione di andare avanti
e scrivere clang.
E clang è il nome di un compilatore.
Si tratta di un programma che converte il codice sorgente
in, quindi, di codice oggetto.
0 e 1, che abbiamo visto brevemente la settimana scorsa.
Ricordiamo dalla settimana scorsa, abbiamo promesso che avremmo
passare da una cosa del genere - abbiamo bisogno di essere
qualcosa di simile -
e questa non è certo una cosa che un essere umano sta andando
fare manualmente.
Così, invece abbiamo intenzione di utilizzare un programma, e che programma in
questo caso si chiama Clang.
E il nome del mio programma è hello.c.
Quindi, al fine di compilare hello.c da codice sorgente in
codice oggetto, o 0 e 1, dovrebbe essere sufficiente per fare proprio
questo e premere Invio.
>> Ok, sembra che nulla sia accaduto.
Ma so adesso, o dalla settimana scorsa, che il nome di default
un programma, scritto in C, è scioccamente chiamato a.out.
La maggior parte dei nome poco interessante si potrebbe trovare.
A è la prima lettera dell'alfabeto, non è ciò che è stato
emesso, ma così sia.
Questo è il mio programma, e ora punto slash, come vedremo, è
in realtà solo una sorta di funzione di sicurezza, in quanto
a.out è un programma che ho scritto.
E non è venuto con il mio computer, è
non in Programmi.
Non è nella cartella Applicazioni di Mac OS.
Ho bisogno di essere esplicito super con il computer, e dire
questo programma, a.out, si trova nella cartella corrente, il
directory corrente.
E il modo in cui rappresentare questo in un ambiente come questo
è punto rappresenta qualsiasi cartella nel quale ci si
E così. / A.out significa solo correre
nella cartella corrente.
E ho eseguito questo con Enter, e voilà, il mio primo programma.
>> Ora vorrei fare un passo indietro.
Questa finestra è un po 'piccola, e rendersi conto che il fondo
a sinistra dell'apparecchio qui è un'altra icona.
Uno è Chrome, che dovrebbe essere abbastanza familiare, solo un web
browser all'interno dell'apparecchio.
E questa icona in bianco e nero è solo un
finestra terminale più grande.
Quindi, se diventa un po 'fastidioso per ordinare di avere solo
questa fetta minuscola di una finestra con cui interagire
con i programmi, possiamo invece farlo.
E ora vorrei iniziare a digitare alcuni presto
di essere i comandi noti.
ls.
Così ls è il comando per la quotazione.
Quindi, in un Mac OS o Windows, è in genere doppio clic su un
cartella e poi, voilà, si vedono tutti i vari file
e cartelle.
In un ambiente a riga di comando, in cui è possibile digitare solo
comandi o testo, ls è l'equivalente.
Allora fammi vedere cosa c'è in questa directory.
>> Ora c'è un mucchio di roba qui che è sia un po '
familiare e un po 'sconosciuto.
Ma si noti che, proprio come Windows e Mac OS, jharvard
ha una cartella sul desktop.
Così le icone che sono sul mio desktop accadere
di essere in quella cartella.
C'è una cartella di download, roba che
Chrome potrebbe mettere lì.
Dropbox.
Quindi, l'apparecchio è dotato di supporto integrato per Dropbox
in modo che nel corso del semestre, è possibile sincronizzare con il vostro Dropbox
account in modo che tutti i programmi sono sottoposti a backup.
Sono accessibili sul tuo computer.
Se qualcosa va storto con l'apparecchio, è possibile
molto facilmente recuperare da Dropbox.
Quindi quella cartella è lì per questo.
Ci sono due file che ho fatto - hello.c
e a.out.
E poi a destra ci sono delle altre cartelle che faremo
arrivare verso la fine del semestre, con il web
programmazione.
Così, quando faccio. /, A.out, Enter, che sta dicendo andare
nella directory in cui sono, nella directory corrente, ed eseguire il
programma chiamato a.out proprio lì.
>> Va bene, in modo che è bello e buono, ma non è tutto ciò che
impellente di scrivere un programma chiamato aiuto a.out.
Così possiamo effettivamente fare questo un po 'diverso.
Quindi, invece di clang corsa, hello.c, aggiungiamo
quello che si chiama un argomento della riga di comando.
Quindi un argomento della riga di comando o un interruttore, in questo caso, è solo
un'altra parola o frase che si digita al prompt dopo
il programma che si desidera eseguire.
Quindi, in questo caso, clang è il programma che voglio correre,-o
di output un file significa che non è più chiamato a.out.
Output un file chiamato ciao, e farlo compilando il
ultima parola sulla linea, hello.c.
Così, in breve, si tratta di un miglioramento molto marginale, per cui
invece di avere questo file a.out stupidamente chiamato,
Ora posso fare clang-o ciao, allora hello.c, e
quindi premere Invio.
Nulla sembra accadere, ma ancora una volta un po 'come con 0 - quando
nulla sembra accadere che significa niente di male è accaduto -
quindi cerchiamo di fare ls ora, Enter, e in effetti ora
hanno un programma ciao.
Quindi, se scrivo ciao ora, non comando trovato.
OK,. /.
Quindi, esattamente a destra.
Quindi, perché questo programma che ho scritto, e non è venuto con
il computer,. / ciao, Enter, significa
Sono ora in esecuzione ciao.
>> In modo che è lì.
Ora quello che più volte si arriva a linea di comando più
argomenti che ci permettono di fare di più, ma solo per quelli per
che questo potrebbe essere vecchio cappello, mi permetta effettivamente andare in un
Elenco qui e solo dare un teaser di quale altro modo si
potrebbe andare sull'implementazione ciao mondo.
Vorrei in questa sede, e ho intenzione di aprirlo.
Quindi, in realtà, ho intenzione di spiegare quello che sto facendo, in modo da
questo è utile.
Fammi il backup.
>> Così ho fatto questo da molto tempo.
Così preavviso superiore a destra ci sono un paio di
directory che vengono stranamente denominati source1m e source1w.
Questo è solo sciocca convenzione usiamo.
Fonte significa solo codice sorgente, 1 significa che si tratta di una settimana, e
m significa che è Lunedi, e w significa che è Mercoledì.
Quindi niente criptico lì.
E 'solo notazione abbreviata.
Queste cose blu sono cartelle, altrimenti noti come
directory.
Voglio andare in quella cartella ora, e su un normale computer
Ho potuto solo fare doppio clic sull'icona di una cartella e
ci sono tutti i miei file.
Ma in un ambiente a riga di comando, non riesco a fare
che, così, invece, devo cambiare directory manualmente.
Quindi, se digito cd e poi source1m, Enter, si noti che
mia richiesta, la cosa in bianco a sinistra, appena cambiato.
E così in effetti, quando appena detto parentesi e poi i
squiggle poco, il simbolo tilde, che proprio significava che ero
nella home directory di John Harvard, i suoi Documenti,
i suoi file personali.
Ma ora in parentesi si dice ~ / source1m.
Questo significa solo che sono in una cartella denominata source1m
che è nella home directory di John Harvard.
Quindi, se io ora voglio elencare i file in questa cartella, facile
domanda, digitare solo ls.
E ora vedo tutti i file che ho creato in precedenza per oggi
conferenza, tutte, o la maggior parte dei quali, capita
per terminare in. c.
>> Permettetemi quindi di andare avanti ora ed eseguire gedit di un programma chiamato
holloway.c, che è stato scritto da un hacker casuale
su Internet, che sembra un po 'come questo.
E non abbiamo intenzione di passare attraverso questo in qualsiasi
dettaglio, ma per quelli più confortevole, in particolare, se
si vuole prendere una supposizione su ciò che fa questo programma qui.
State tranquilli, se sei più o meno confortevole,
non siamo nemmeno arrivare a questo genere di cose entro la fine del
questo semestre.
Questo è ciò che è un esempio di un concorso offuscato C, che
significa scrivere il programma più criptica, cercando possibilmente
il possibile per superare altre persone in gamba, che sono allo stesso modo
cercando di scrivere le cose e mostrare che si può scrivere
le cose più criptici di te.
Quindi questo non è un esempio di un programma ben scritto dal
prospettiva di stile, questo è un esempio di un programma che
vince un concorso, per le persone che cercano di
essere vago e astratto.
>> Quindi, se si corre questa cosa, lasciami andare nella mia finestra di terminale,
per così dire.
Quindi questo ambiente bianco e nero è chiamato
finestra terminale genere.
Lasciatemi andare avanti e compilarlo.
Non ho intenzione di usare clang, perché questo programma è un
po 'criptico e ha bisogno di un diverso
compilatore, uno chiamato GCC.
Ma fa la stessa cosa.
Ci vuole il codice sorgente in codice oggetto.
E ora se corro a.out, il programma si
appena visto lo fa.
In modo che collega che quest'anno ha vinto quel concorso.
In ogni caso, non stiamo andando in quella direzione, di per sé.
>> Quindi cerchiamo di realtà tenta di prendere in giro ora a parte quello che possiamo fare
con questi elementi di base per rendere più
programmi interessanti.
Proprio per questo abbiamo scritto un programma, abbiamo eseguito un programma.
Ora siamo in grado di semplificare la realtà e non hanno più da scrivere
il clangore parola al prompt.
Si scopre come i nostri programmi ottenere più criptico, possiamo, o
più complesso piuttosto, in grado di eseguire questo comando.
Quindi vorrei tornare alla mia home directory, per così dire, lasciatemi
rimuovere - rm è il comando di rimozione - Sto andando a rimuovere
il file chiamato a.out e ciao.
E ora notare in un ambiente a riga di comando, molto simile a
una GUI, si ottiene richiesto. Non è possibile fare clic su un pulsante anche se, ho
devono digitare y per sì, y per sì.
E ora se digito ls di nuovo, si noti che i verde
programmi - a.out e ciao -
se ne sono andati.
Attenzione rm.
Si può fare cose cattive, proprio come è possibile trascinando
le cose per la tua spazzatura.
>> Così ora andiamo avanti - e ho potuto fare questo - clang-o
ciao, ciao -
Sto già annoiato digitando quel comando.
Anche se ho scritto un po 'in fretta.
Così possiamo invece fare fare ciao.
Quindi, fare non è un compilatore.
E 'solo un amichevole programma che viene fornito con Linux, in questo
caso - il sistema operativo -
che consente di automatizzare il processo di compilazione di programmi.
Così, invece di ricordare clang-o nome del file e
poi così via, soprattutto una volta che le linee diventano più lunghi e
più a lungo, posso solo scrivere fare.
E questo sta per sputare fuori un sacco di roba che
avremo finalmente vedere questo semestre.
Ma notate ora se io digita ls, ciao è tornato nella mia directory.
E in effetti posso eseguire con. / Ciao.
Quindi, fare solo automatizza il processo di esecuzione ciò che è stato,
in questo caso, una molto più lunga, comando più complesso.
Quindi abbiamo intenzione di iniziare a utilizzare marca, solo perché è molto
più facile da usare.
>> Ma ora facciamo un programma più interessante
che anche solo dire ciao.
Così nei programmi che abbiamo scritto finora c'è principale.
Questo è solo la cosa di default che prende tutto spento.
Ma ci sono altre funzioni fuori anche lì, e
stdio.h è la cosa che abbiamo visto nella parte superiore della nostra
file prima, e questo è ciò che è noto come la libreria standard.
All'interno della libreria standard è un insieme di funzioni
che qualcun altro ha scritto, e possiamo iniziare a utilizzare questi
funzioni per scrivere di più
programmi interessanti noi stessi.
>> Quindi lasciatemi tornare alla macchina.
Ho intenzione di chiudere questa finestra di terminale.
Ho intenzione di chiudere le cose che abbiamo scritto in precedenza, e basta andare
in hello.c, e notare ora posso effettuare le seguenti operazioni.
Ciao mondo non è poi così interessante, mi piacerebbe
personalizzare il programma per me.
Così, invece di dire mondo, ho intenzione di
andare avanti e dire -
Potrei scrivere David - ma questo è davvero una sorta di
fondamentalmente la stessa.
Ma cerchiamo di provare questa idea segnaposto.
Ricordiamo che in C, piuttosto in printf, abbiamo avuto questi
segnaposto, e ci sono più di un semplice d%.
Così era% d, controllo di integrità veloce.
Ok, numero decimale, questo è tutto.
Cifre decimali, questo è tutto.
Quindi c%, come avremo modo di incontrare, sta per essere un personaggio.
Metti un personaggio qui, una lettera dalla A alla Z,
punteggiatura o simbolo.
Un singolo carattere,% f, qualcuno sa da altre lingue?
Quindi un valore in virgola mobile.
Un numero reale.
Quindi non un numero decimale - questo è in realtà un numero reale con
un punto decimale, e un certo numero di cifre a sinistra
e destra.
% S, stringa.
Quello che andremo a vedere abbastanza spesso.
Una stringa, ancora una volta, è solo una parola, una frase, una sequenza di
singoli caratteri.
E, infine, LLD?
Quindi questo è più di un caso d'angolo.
Lunga, lunga decimale.
Quindi, se non vuole solo un numero che è questo grande, è
desidera un numero più grande, si sta andando ad avere per specificare a
il computer che è di una certa dimensione.
>> Quindi cerchiamo di modificare questo un po '.
Piuttosto che codificare in David, fammi un po '
dinamicamente dire% s.
Così si può mettere% s qui, che è un segnaposto per una stringa.
Allora fammi fare virgola e quindi il "David" qui.
Ora, questo non è tutto ciò che intellettualmente interessante,
perché tutto quello che ho fatto ora è davvero creare più lavoro per
il computer.
Invece di dire al computer di fare tutto in una volta, ora sono
dire fare questo e inserire una stringa qui alla fine, virgola,
è qui che stringa.
Quindi questo non è un miglioramento migliore, ma è almeno
un passo verso un programma più interessante.
Perché ora, lasciami andare avanti e fare un po 'di questa finestra
più grande, lasciami andare avanti e lanciate make ciao.
E ora,. / A.out non funziona, perché?
Va bene, ora si chiama ciao.
Quindi, di nuovo fare, e anche con un clang-o, ribattezzato
programma per essere qualcosa di più interessante.
E voilà: ora dice ciao Davide.
>> Va bene, ancora un programma stupido.
Così ora andiamo in realtà tornare qui e introdurre il concetto
di una variabile.
Non sarebbe bello se potessi dichiarare una variabile
il cui tipo è una stringa?
E il valore della variabile viene di fatto da parte dell'utente
se stesso.
Così arbitrariamente, ho intenzione di chiamare il mio variabile s, che è
solo una convenzione comune, quando si dispone di una variabile chiamata
la stringa.
Io vado a fare segno di uguale, e poi ho intenzione di chiamare un
funzione chiamata GetString.
Quindi GetString non è qualcosa che viene costruito in C. E '
una funzione che il personale CS50 ha scritto, in realtà solo per
queste prime due settimane, per semplificare il processo di
ottenere l'input dell'utente e guadagnando l'input dell'utente in forma
di stringhe, o numeri, e così via.
Così GetString è come printf, ma ovviamente invece di
stampa sta andando a fare quello che dice il suo nome, ottenere una stringa.
Ma per utilizzare GetString, stiamo andando ad avere per fare un cambiamento
qui, al di là di questo.
Quindi intuitivamente, questo programma, si spera, sta andando in qualche modo
ottenere una stringa da parte dell'utente, e allora che cosa sta andando a fare
con quella stringa, denominata s?
E 'solo andando a stamparlo, giusto?
Ancora non è un programma stimolante perché tutto sta andando
da fare è collegare quel valore in cui% s
dice che dovrebbe andare.
>> Quindi cerchiamo di almeno vedere in azione.
Vorrei salvare e eseguire lo zoom indietro.
Ora, nella mia finestra di terminale qui, la piccola fetta di uno,
vorrei ancora una volta fanno fare ciao.
Ok, e ah, accidenti, ho avuto un sacco di errori.
Vorrei scorrere verso l'alto, e vediamo il nostro primo -
quindi cerchiamo di effettivamente fare questo in una finestra ancora più grande in modo da
può vedere quanto male ho fatto un casino -
in modo da rendere ciao.
Ok, e 'un disastro, vero?
Ho scritto tre righe di codice, e
mi ha dato 12 errori.
Allora, perché è questo?
Quindi, per fortuna, spesso, quando si vedono molti, molti errori
sputando in una sola volta, in realtà è solo perché hai
confuso il computer qui.
E rimane confuso nel momento in cui si mette qui.
E così inizia proprio intervento, e incespicando, e
sputando più roba spaventosa che effettivamente vale.
Quindi, in generale, iniziano sempre con quella superiore.
>> Quindi l'esempio più cima rossa, la
messaggio di errore è questo.
L'uso di stringa identificatore non dichiarato, ho
dire standard?
Non l'ho fatto.
Volevo dire stringa, ma questo è perché, anche, la stringa parola
che continuare ad usare verbalmente in realtà
non esiste in C o.
E 'qualcosa che verrà utilizzato solo per la prima settimana o due
qui, ma esiste in un file chiamato cs50.h.
Quindi per ora, sappiamo che c'è questa altra libreria che il
staff ha scritto, così è stato scritto più di recente di
stdio.h.
Ma dentro di cs50.h è una definizione, sinonimo di
genere, che crea questa stringa parola.
>> Così ora lasciatemi tornare alla mia finestra di terminale.
Ho intenzione di cancellare tutto questo casino da Ctrl-L. Non ci resta
pulire tutto pulito, e ho intenzione di andare avanti e fare
Ciao di nuovo, Invio.
Cosa è successo oggi?
Ora, tutti questi errori se ne andò.
Allora cosa ho fatto veramente?
Ho appena insegnato il computer che stringa esiste, ed è
in quel file chiamato cs50.h.
Quindi, smettere di lamentarsi, perché ora sapete dove trovare
dichiarazione di funzione per così dire.
Dove esiste nel mondo.
>> Così ora ho intenzione di andare avanti ed eseguire ciao.
Mi sembra di avere un ciclo infinito, non succede niente di.
Quindi ho bisogno di scrivere qualcosa, giusto.
La prima riga di codice nel mio programma è stato GetString.
Quindi è letteralmente in attesa di me per ottenere una stringa.
In questo senso sì, è un ciclo infinito.
Apparentemente in GetString è il comportamento di default che
ha scritto - il personale -
che dice solo aspettare e aspettare e aspettare e aspettare e aspettare,
finché l'utente non si dà una stringa digitando qualcosa trovi
Permettetemi quindi di andare avanti e digitare D-a-v - i-d, Invio.
E non è, ciao Davide.
>> Ora, questa non sembra come se fosse solo un atto?
Lasciatemi andare avanti e digitare Tommy.
Invio, va bene, sembra funzionare.
Opere per Rob, opere per Zamyla, lavora per - va bene.
Quindi è di andare a lavorare, molto probabilmente.
Così dovrebbe stampare tutto quello che realmente dare,
e possiamo essere un po 'difficile qui.
Vediamo se facciamo qualcosa di simile ciao.
Può andare qui, vediamo, copia, incolla.
Io non ho intenzione di essere in grado di incollare che molte volte qui.
Incolla, va bene, Maiusc + Ctrl + V. Così che cosa potrebbe
accadere che male qui?
>> Okay, allora, segmentation fault.
Così alcuni di voi con sfondi precedenti sapranno che
in generale, dando un sacco di input computer quando sono
probabilmente non è destinata a ricevere i nomi lunghi come questo - cattivi
le cose accadono.
In effetti, nel mondo del web, anche questo accade un po ',
per cui quando si progetta un sito web, quando si è
progettazione Facebook, è necessario prendere delle decisioni arbitrarie up
davanti, come per quanto tempo di qualcuno sarà
Facebook nome utente essere?
O quanto tempo nome di qualcuno essere?
Per quanto tempo il numero di telefono di qualcuno essere e simili.
E se i programmatori fare ipotesi cattivi, i programmi di rompere
perché provare a dare loro più potenza, più ingresso
piuttosto, di quello che hanno memoria.
Oppure RAM allocata per esso, e quindi se ora premete Invio,
che il programma di lavoro effettivamente prestate, perché eravamo in biblioteca
e in realtà abbiamo anticipato questo caso particolare.
Ma senza dubbio questo semestre, si scriverà almeno una
programma che dire queste parole.
Ricordate queste settimane da ora, forse due giorni da oggi.
Segmentation fault è una brutta cosa.
Si farà riferimento al fare qualcosa che il computer
non anticipare.
E in questo caso, è il programmatore, non si aspettava.
Molto simile a quello che questo mucchio di calze, ci sono stati vari
casi angolo avremmo potuto incontrato.
Allo stesso modo nei programmi se non si prevede di quanto tempo è
il nome di qualcuno sarà.
O se ho un utente malintenzionato, e il suo nome è
in realtà piuttosto breve, ma stanno solo cercando
a pasticciare con me?
Che cosa sarà il comportamento del mio programma?
Beh, in questo caso, qualcosa potrebbe effettivamente bloccarsi.
>> Allora, facciamo questo.
In 90 minuti, questo è un momento terribile lungo
di fare informatica.
Perché non prendere l'abitudine di prendere un cinque minuti
rompere qui, e quando torneremo, ci immergeremo in un po 'di
programmi più complessi e interessanti?
Cinque minuti.
>> Bene.
Così un breve commento.
Mi hanno detto che se questo era sullo schermo prima, che cosa
è uscito dalla mia bocca era cs50.net/rsvp.
Questo è corretto. cs50.net/lunch.
Così ora si può provare RSVPing per questo a / pranzo.
Ma facciamolo adesso.
Quindi questo è stato super veloce, super nuovo per un sacco di gente.
Vecchio cappello per alcune persone.
Quindi cerchiamo di tornare indietro per un momento, e vedere come siamo arrivati ​​a
questa uscita mondo ciao solo un momento fa.
>> Quindi, prima, c'è questo Appliance CS50.
Anche in questo caso, di un software, problema set 1 sta per dire
come scaricare esso, dove scaricarlo, cosa fare clic su
e così via.
E poi una volta che seguire queste istruzioni, sarete in grado
per massimizzare la finestra, e il vostro Mac o PC sarà un
po 'di qualcosa come questo.
Uno sfondo nero, una home directory in alto dove tutti
i file andare, un bidone della spazzatura in alto a sinistra,
un menu in basso.
Quindi, di nuovo, molto simile nello spirito a Mac OS o Windows,
anche se sembra essere Linux.
Che cosa abbiamo fatto dopo fatto?
Beh, abbiamo iniziato a scrivere i programmi.
E ricorderete dalla scorsa settimana, che tutto quello che serve per scrivere un
programma è un semplice editor di testo,
come il Blocco note o TextEdit.
Francamente, è anche possibile utilizzare Microsoft Word.
Ma le cose brutte alla fine accadrà, perché è molto
mano pesante soluzione per la scrittura di un programma, più esso sarà
salvarlo nel formato di file errato.
Ma è solo un editor di testo, un elaboratore di testi, è tutto ciò che è
bisogno di scrivere un programma.
>> Così nel Appliance CS50, possiamo farlo in un modo semplice.
Siamo in grado di sufficiente fare clic su questa icona in basso a sinistra.
E ancora, il problema di impostare 1 vi informerà di questo, e voilà -
si ottiene questa interfaccia in bianco e nero dove si può iniziare
la scrittura di codice.
Quindi cerchiamo di iniziare a scrivere un programma super semplice di nuovo.
Ho intenzione di salire su File, Salva, e ho intenzione di chiamare
questo, diciamo, hello2.c.
E io sto solo dicendo cliccando su jharvard, messo
nella sua home directory, non mi interessa
dove questo si va.
E quindi su Salva.
E ora posso iniziare a scrivere il mio programma.
E mi ricordo da prima che devo scrivere int
main (void).
Zoom in alto a sinistra.
E poi voglio dire printf, prendi due.
E ora una nuova riga, citazione chiudere, chiudere
parentesi, punto e virgola.
E poi vado qui alla mia finestra di terminale che è
incorporato in gedit, solo per comodità.
E ho intenzione di andare avanti e scrivere fanno ciao, ma non
ciao solo, hello2.
>> Quindi il mio file si chiama hello2.c. Il mio file quindi
dovrebbe essere chiamato hello2, in questo caso.
Dannazione, che cosa ho fatto di sbagliato?
Va bene, ho chiaramente omesso una linea, se vi ricordate che cosa
programmi precedenti simile.
Ma vediamo se non possiamo prendere in giro questa parte.
Purtroppo, la maggior parte delle persone che scrivono i programmi con cui
scriviamo programmi non semplificare le cose tanto bene.
Quindi dobbiamo tipo di sorvolare su ciò che non fanno abbastanza
sentire qui e vedere se siamo in grado di capire cosa c'è che non va.
La prima riga ci dice implicitamente dichiara C
libreria di funzioni printf con il tipo int.
OK, ho capito una parte di questo.
Ma sembra essere alludendo al fatto che ho usato printf
sbagliato, in qualche modo.
E che senso è sbagliato?
Solo che non ha insegnato il computer che si trova in un file
chiamato stdio.h.
Ora devo solo imparare a memoria solo ora che è printf
in stdio.h, e in effetti ci saranno altri
funzioni lo stesso file che dovremo abituarci.
>> Così ora lasciami andare avanti e premere Ctrl-L per cancellare proprio questo
di distanza, eseguire nuovamente fare hello2, e voilà.
E di nuovo questo comando, più complessa di quanto ti spiegheremo per
oggi fini.
Ma ha funzionato clang, clang e prende il codice sorgente e
sputa 0 e 1.
E quelli 0 e 1, in questo caso si chiamano cosa?
Ok, codice oggetto.
E il file che sono in è chiamato, quindi,
hello2, in questo caso.
Perché il mio file di testo era hello2.c, Invio.
E ora ho prendo due punto esclamativo, esclamativo
punto, punto esclamativo.
Va bene, quindi abbiamo ora la possibilità di ottenere le stringhe,
a quanto pare.
Beh, che altro possiamo ottenere da utenti?
>> Beh, in biblioteca CS50, c'è altre funzioni che
stanno per semplificarci la vita in questi primi giorni.
GetChar, GetDouble, getFloat, GetInt,
GetLongLong, GetString.
Bene, strappate il modo più semplice di questi primi.
GetString fa letteralmente che.
Si trova proprio lì, in attesa che l'utente digiti qualcosa in,
e appena scrivo qualcosa e premi Invio, si
fa qualcosa con quel valore.
Quindi cerchiamo di tornare a quella ad esempio di vedere esattamente ciò che
GetString stava facendo.
Lasciatemi andare avanti e si aprono in gedit, hello.c, e richiamare
tale diritto prima della pausa, questo è dove abbiamo lasciato.
>> Quindi cerchiamo di prendere in giro questo ora a parte in un po 'più dettagliato.
Così sulla linea 6, ci sono due cose
accadendo in questo momento.
Il segno di uguale è la separazione prima metà e la seconda metà.
Quindi, sul lato sinistro del segno di uguale, siamo
dicendo stringa s.
E poi, i termini appena povere, ciò che è stringa s
facendo, cosa ne pensi?
E 'la creazione di una cosa?
Quindi è la creazione di una stringa chiamata s.
Ora che cosa significa in realtà?
Beh, e 'riservare lo spazio per una stringa chiamata s.
Questo non è giusto.
Cosa sta facendo questo?
Computer Beh, come sapete, hanno hard disk, che è lì
i file sono memorizzati.
I computer hanno RAM, ed è lì che i programmi vengono caricati
mentre sono in esecuzione.
Così, quando si fa doppio clic su un'icona e Microsoft Word si apre
up, Microsoft Word è in esecuzione, per così dire, in RAM, che è
la parte elettronica del computer.
Non la fisica, parte meccanica che è la filatura, dove
dati sono generalmente memorizzati lungo termine.
Così stringa s è più o meno dire al computer mi danno
RAM sufficiente per adattarsi a una stringa.
Ora che un po 'di una semplificazione eccessiva, perché
quanto grande è la stringa sarà?
Beh, in realtà non lo sappiamo ancora, così nelle settimane a venire
ci troveremo a tirare indietro il livello che è una stringa e
vi diremo quello che realmente è.
String, per ora, è solo una semplificazione bella del nostro mondo.
Ma stringa s dichiara una stringa chiamata s, per ora.
Dichiara una stringa.
Si riserva un po 'di spazio nella RAM per la stringa che l'utente è
per digitare.
>> Ora diamo un'occhiata a destra del segno di uguale.
Così dice GetString ().
E un po 'di sanità mentale controllo.
Il fatto che non c'è niente all'interno delle parentesi
implica che dire GetString?
E 'non accetta argomenti.
Cioè, non si può influenzare il comportamento in alcun modo.
Ogni volta che lo si utilizza, si otterrà una stringa e basta.
Al contrario, printf, si spera il suo comportamento fa
cambiano ogni volta.
In caso contrario, si tratta di una funzione di stampa abbastanza inutile se
fa la stessa cosa.
Se la stampa viene sempre David o qualcosa del genere
arbitraria tutto il tempo.
Così fa printf senso di avere un argomento.
GetString non ha veramente bisogno di un argomento, perché volevo
per ottenere una stringa dall'utente ed è l'utente che sta succedendo
di fornire il dinamismo digitando in lettere diverse
ogni volta alla tastiera.
>> Così che cosa GetString finiscano?
Pensate a come questa piccola scatola nera.
E questa scatola nera non prende input, ma quando si bang
esso, sputa fuori una stringa che l'utente ha digitato trovi
E il fatto che ci sia un segno di uguale non significa prendere
ciò è sputare sulla destra e riporlo all'interno
ciò che è a sinistra.
Segno Così uguali, in realtà non vuol dire
uguaglianza, piuttosto tecnicamente significa assegnazione.
Prendere il valore a destra, e lo mise nel
variabile sulla sinistra.
Ecco, questo è tutto quello che sta succedendo lì.
>> Ora, in linea 7, che stiamo chiamando printf.
Così si spera printf sta diventando un po 'noioso, ormai.
Quindi, stampare una stringa formattata.
Che stringa?
Stampare, "h-e-l-l-o,% s
\ N ".
Va bene, che cosa voglio di plug-in per% s?
Letteralmente, ciò che è memorizzato in s.
Quindi, in questo caso, di controllo sanità mentale poco, il numero di argomenti non
printf prendere?
Ok, ho sentito uno.
Ho sentito uno nuovo.
Due, ho sentito due.
E per quanto riguarda tre?
Va bene, tre?
Eccellente.
Tre possibili risposte, solo uno di loro è corretta.
Quindi argomenti nuovo influenzare il comportamento di una funzione.
In passato, ha solo printf richiede un argomento.
"Ciao mondo" è stato un singolo argomento.
Tuttavia, ora, notare dove è presente comma.
Questo comma è al di fuori del preventivo / unquote, il che significa
hey printf, ecco che arriva un secondo argomento.
>> Così virgole maggior parte dei linguaggi di programmazione
separare più argomenti.
Quindi la risposta è qui non è sicuramente, perché
c'è questa virgola.
Così minimamente, printf è apparentemente prendendo due
argomenti questa volta.
Ma l'occasione per una domanda trabocchetto: ecco cosa
di questo comma?
Ciò implica che non c'è in realtà tre argomenti?
Questo, questo e questo.
Quindi no, perché la virgola si trova all'interno delle citazioni, che
significa che è in realtà solo una estetica della lingua inglese.
Non ha nulla a che fare con il numero di
argomenti in questo programma.
Quindi questo comma è al di fuori delle virgolette.
E poi restituire 0.
Per ora limitiamoci a prendere questo tipo di uno su fede
oggi, e solo sapere che quando le funzioni sono fatte in esecuzione
righe di codice, dovrebbero generalmente restituire un valore.
In questo caso, solo perché principale deve restituire un int,
questo è solo il modo in cui il linguaggio C funziona.
>> Quindi, perché niente è andato storto, si sente come il programma di questo
bene, ho solo difficile codificato in cambio 0.
Ma, al contrario, e ho intenzione di scrivere questo in pseudo codice
Ora, proprio come fece Giuseppe quando abbiamo fatto il calzino
esempio la settimana scorsa.
Se qualcosa è andato storto - non si tratta di codice vero e proprio - è andato
sbagliato, per poi tornare, diciamo, 1.
Else return 0.
Quindi questo è dove stiamo andando con questo.
Questo non è vero codice C, solo pseudocodice.
Ma questo è come si potrebbe tornare
diversi valori possibili.
Ma per ora sto solo intenzione di andare avanti e restituire 0.
Va bene, tutte le domande finora sulla sintassi, funzionalità,
o simili?
Sì, sul retro.
>> PUBBLICO: [incomprensibile]
DAVID MALAN: Si può parlare un po 'più forte?
Perché questo 0 ritorno del programma, e?
PUBBLICO: [incomprensibile]
DAVID MALAN: Oh, questo è perché ho avuto pigro, mi dispiace.
Nessuna buona risposta accademica, restituisce 0.
Sono in grado di salvare questo tipo, dicendo tecnicamente C, se principale
non ritornano esplicitamente un valore, 0 verrà restituito
automaticamente per voi.
Il che è vero, non sto solo coprire.
Ma, ho dovuto farlo in questo modo.
No asporto interessante di quello altro che il mio errore.
Si '?
>> PUBBLICO: Di solito quando si digita nel vuoto, che significa
non restituire qualcosa.
DAVID MALAN: Corretto.
Se invece, si specifica prima del nome di una funzione, per
esempio qui, nulla, allora la funzione
non restituisce nulla.
E quindi vorrei solo dire, di ritorno o niente del tutto,
e che sarebbe coerente.
E torneremo a questo.
E proprio per tua informazione, una delle catture con l'apprendimento
programmazione in un mondo che ha centinaia di libri e
centinaia di siti web là fuori è che sarà sempre
vedi la sintassi diversa in diversi libri
da persone diverse.
Realizzare faremo del nostro meglio nelle sezioni e conferenze per essere
coerente.
Ma a volte si vedrà la sintassi in conflitto.
Quindi, in caso di dubbio, basta chiedere.
E in generale, noi ci occuperemo in lezioni e sezioni a
quasi sempre presenti nel modo giusto.
E io dico quasi sempre, perché caso in questione.
Altre domande?
>> PUBBLICO: E '% s esistono al di fuori l'apparecchio?
DAVID MALAN: Does% s esistono al di fuori della macchina?
Sì.
Così% s ha a che fare con C. Il fatto che stiamo usando in
l'apparecchio ha sostanzialmente nulla a che fare con l'
caratteristiche del linguaggio che stiamo usando.
Infatti, la settimana scorsa quando abbiamo usato il mio Mac, ho scritto
Codice C sul mio Mac.
Avrei potuto utilizzare% s sul mio Mac, e si potrebbe utilizzare su
computer Windows se si installa un compilatore, come
Visual Studio di Microsoft.
Così% s.
Tutto quello che stiamo facendo all'interno di questa finestra oggi deve
che fare con niente C. E fondamentalmente a che fare con la
sistema operativo in questione.
Per contro, la finestra di terminale bianco e nero - quando
Sto scrivendo cose come ls e rm, e cd -
che ha a che fare con il sistema operativo e
navigazione intorno.
Gia '.
PUBBLICO: Volevo dire la biblioteca, il CS50 biblioteca.
DAVID MALAN: Okay, quindi se si intende la stringa di parole chiave, che
esiste solo nella libreria CS50, corretto.
Che non esiste in C stesso, e anzi in un paio
di settimane ci buttare via la libreria CS50 e iniziare
fare le cose da zero noi stessi, per così dire.
Altre domande?
Gia '.
>> PUBBLICO: [incomprensibile]
DAVID MALAN: Bella domanda.
È il caso dei comandi sensibile?
E lasciatemi fare una distinzione.
Così i comandi sono in genere le cose che andranno a scrivere al
inferiore della finestra, nella finestra del terminale.
Tutto qui sarebbe dichiarazioni o codice C.
Ma in entrambi i casi, la risposta è la stessa, sì.
Entrambi questi ambienti, il codice C in alto e la
operativo a riga di comando del sistema al
fondo, sono case sensitive.
Quindi è necessario capitalizzare GetString con la maiuscola,
capitale S. È necessario scrivere printf in tutto minuscolo.
È necessario digitare ls in tutto minuscolo.
Quindi, in quasi ogni situazione questo, caso semestre volontà, in
Infatti, la materia.
Sì.
>> PUBBLICO: [incomprensibile]
DAVID MALAN: Ah, così va bene, se avessimo un file
chiamato hello.d.
Così si scopre D è un linguaggio di programmazione.
E così, in alcuni casi, si potrebbe effettivamente scrivere un programma in
il file e lo hanno compilato in quel modo.
Possiamo, e in realtà, la risposta breve è, non lo so.
Quindi stiamo andando a fare questo.
Lasciatemi andare avanti e creare un nuovo file.
E la rotazione qui, onestamente, in generale, ogni volta che è alcun dubbio
questo semestre, e avete il vostro apparecchio o il computer
aprire, andare avanti e provare qualcosa.
Quindi ho intenzione di salvare un file chiamato hello.d.
Salva questo.
E ho intenzione di eseguire make ciao Invio.
Sembrava dedurre che c era più probabile
di d, in questo caso.
Altre domande.
Gia '.
>> PUBBLICO: [incomprensibile]
DAVID MALAN: Ok, diciamo che una volta di più.
PUBBLICO: [incomprensibile]
DAVID MALAN: Come si va sulla diagnosi o che
risoluzione dei problemi che?
Quindi molto probabilmente, perché sono diverse lingue,
molto probabilmente si otterrebbe un ambiente completamente
programma diverso emesso.
Si potrebbe ottenere messaggi di errore completamente differenti.
E anche solo in termini di design, sarebbe probabilmente un
progettazione decisione sbagliata di scrivere due diversi
lingue con i file con lo stesso nome, quasi a
la directory esattamente lo stesso, utilizzando un
strumento automatico come fare.
Quindi posso anche spingere indietro e dire: in 15 anni di fare questo,
mai fatto questo errore.
Potrebbe accadere.
Ma c'è solo diversi, credo,
difese logistiche in atto.
Inoltre i messaggi di errore che ne deriverebbero, che avrebbe
alla fine rivelano qual è il problema.
Ma un caso d'angolo possibile.
>> Va bene, quindi cerchiamo di introdurre solo un paio di altri
caratteristiche qui ora, in modo da poter iniziare a costruire in più
e più complesso programma.
Quindi prima di tutto, la matematica.
Quindi, esempi di matematica sono solo tipo di facile nella prima settimana.
Questo non significa che tutta la programmazione è circa
matematica.
Certo, la comprensione varie caratteristiche di
matematica, algebra, in particolare, è
piuttosto rilevante qui.
Nelle classi di livello superiore CS, algebra lineare,
calcolo, e simili.
Ma rendersi conto la maggior parte di quello che faremo in questo semestre non riduce
per la matematica, e non certo per l'aritmetica, di per sé, ma in realtà
a poco logica e al pensiero attento.
E così questo legame che l'informatica ha avuto per lungo tempo,
soprattutto a livello di scuola superiore, con la matematica, è un
po 'fuorviante.
Poiché la maggior parte dei programmi che si andranno a scrivere, in realtà, sono
sorta di livello superiore e di attenzione per risolvere i problemi che,
sicuro, potrebbe utilizzare alcuni addizione, sottrazione, e varie
formule matematiche o simili,
ma alla fine della giornata, si tratta di considerare e non
solo attuare quello che avrebbe potuto fare su come un TI
calcolatrice al liceo.
>> Quindi, con questo detto, andiamo ora fare qualcosa con questi
operatori matematici che esistono in modo che possiamo viaggio
su alcuni degli aspetti fondamentali di programmazione, o in
questo caso C. Così ci sono, come il CS50 biblioteca suggerito,
e oggi stiamo utilizzando solo GetString - e in un momento
forse una altra funzione -
ma ci sono diversi tipi di dati in un computer.
Alla fine della giornata, computer sa solo 0 e 1.
Ma ricordo che la settimana scorsa abbiamo parlato del sistema binario
nel rappresentare i numeri, come il numero 0 e 1, e 2,
tutta la strada su un massimo di 8, come nel video di Nate.
E poi possiamo contare molto più alto come noi
ha fatto sul palco qui.
Ma se si vuole rappresentare non solo numeri, ma le lettere,
noi, gli umani, devono venire con un po 'arbitraria
convenzioni, per cui se alla fine della giornata tutto il computer
ha la capacità di esprimere 0 e 1, e faremmo meglio
avviare standardizzazione modelli di 0 e 1 che rappresentano
cose diverse.
Un modello di 0 e 1 che rappresenta la lettera a.
Modelli di 0 e 1 che rappresentano la lettera z.
Modelli di 0 e 1 che rappresentano il colore blu, o
rosso, o simili.
Abbiamo bisogno di usare tutti questi 0 e 1 di esprimersi in
contesti diversi, in modi diversi che non sono
necessariamente numerico.
>> Quindi, in termini di rappresentanza, C ha diversi tipi di dati,
e abbiamo visto uno di questi finora.
Abbiamo visto int, e notare ciò che non è sullo schermo
in questo momento è una stringa.
Stringa non, infatti, esistono in C. Anche in questo caso, è un
semplificazione che stiamo presentando per la prima
paio di settimane.
Un carattere è un carattere individuale.
Un galleggiante è un numero reale, con un punto decimale e numeri a
la sinistra e la destra.
Un doppio è quello che, per quelli con sfondo indietro prima?
Quindi una doppia è il doppio qualcosa.
Aggiunge il doppio di molta precisione.
Che cosa significa questo?
Quindi, in ciascuno di questi casi, il mondo ha sorta di standardizzato
quanti bit sono utilizzati per rappresentare
ognuna di queste cose.
Quindi, se hai guardato il video ASCII Nate già per la parte
di pset 0, o fine di questa settimana si, probabilmente conoscerete
che ASCII -
rappresentazioni di carattere -
utilizzare quantità di bit?
E si potrebbe anche ricordare dalla nostra demo la settimana scorsa di come
molte persone erano sul palco.
Così 7 o 8, in genere.
Quindi in generale 8, e c'è qualcosa che si chiama, già prorogato
ASCII che usa tutti gli 8 bit, invece di 7.
Ma, in generale, si parla in potenze di 2, in questo caso, 8.
Quindi, un char in un linguaggio di programmazione di solito è 8 bit.
Quindi un int è in genere 32 bit.
Un galleggiante è generalmente 32 bit.
Un doppio è generalmente di 64 bit.
E che cosa vuol dire?
Significa che è possibile rappresentare numeri più grandi, o, nel caso
dei numeri reali, si può avere numeri molto di più dopo la
decimale.
Una precisione molto di più, in questo caso.
Ora un lungo lungo purtroppo nome.
Quindi c'è un int, che è di 32 bit.
C'è una lunga che è, nope, 32 bit.
E un lungo lungo, che è a 64 bit.
Tuttavia alcuni di questi sono sensibili al contesto, ma dipende
che tipo di computer che avete.
Quindi, in generale, ci specificare in un lavoro o in un quiz in cui
è importante in realtà.
Ma il punto è che c'è tutto di queste diverse
rappresentazioni qui.
>> Quindi cerchiamo di immergersi in realtà un programma.
Invece di scrivere questo uno da zero, lasciami andare avanti
e di aprire da codice sorgente di oggi - che è
in linea - se si vuole armeggiare intorno in linea, o ritorno
Mercoledì con l'apparecchio sul proprio computer, le istruzioni
per che collegherà sul sito del corso.
Ecco un programma super semplice.
Ma che ha un po 'di qualcosa nuovo in alto che
non abbiamo avuto prima.
Un sacco di linee blu di testo.
Così queste linee blu rappresentano commenti.
Quindi è molto utile in un programma per poter scrivere
alcuni commenti a te stesso, o ai colleghi, o amici, o
compagni di insegnamento, quella sorta di descrivere quello che sta succedendo in
questo file, ma non hanno nulla a che fare con il codice C stesso.
Niente a che vedere con il programma funzionale, è solo
estetica.
Quindi, il modo di fare questo in C è in genere si avvia il
commenti con / *, e si finisce con i tuoi commenti
* /.
E se sei davvero anale e, come per disegnare una sorta di immagini,
allora si sarebbe messo un bel po 'di stelle, che saresti un
piccola scatola in questo modo.
Ma niente di tutto ciò che conta.
L'unica cosa che conta è la prima
e l'ultimo.
Questo è ciò che si chiama un multi-riga di commento.
Ed è proprio convenzione umana di fare spesso le stelle e la scatola
le cose in questo modo se si hanno un sacco di tempo libero.
>> Così, dopo che hai scritto in alcuni commenti, in genere, vengono
il coraggio effettivi del programma.
Ecco la nostra familiarità # include.
E proprio veloce, è necessario o non è necessario?
PUBBLICO: Necessario.
DAVID MALAN: Quindi in realtà non è necessario.
Perché, però, non è necessario?
Quindi non c'è printf.
Infatti.
Tutto quello che stiamo facendo in questo programma è la matematica.
Quindi può effettivamente eliminare tale.
Quindi non è sempre necessario includere qualsiasi cosa, a
la parte superiore di un programma.
>> Quindi cerchiamo di semplificare un po '.
E ora notare ciò che fa questo programma.
Non molto di interesse.
int x = 1.
Beh, che cosa è questo facendo?
Beh, ripensare al modello mentale di prima.
Il lato sinistro di questa espressione fa cosa?
Creare spazio per un numero intero.
Così come lo spazio?
Beh, ci capita di sapere ora che è a 32 bit.
Precedentemente, una stringa era tecnicamente 32 bit, ma più
il che in futuro.
Ma un int è di 32 bit.
Quindi questa espressione a sinistra qui, int x dice solo hey
sistema operativo, dammi 32 bit di RAM -
altrimenti noto come 4 byte di RAM -
in modo che posso mettere un numero intero in quello spazio.
Cosa intero volevi mettere?
Beh, solo il numero 1.
int y ottiene 2, fa la stessa cosa, anche se il
numero è più grande, in termini di grandezza.
Lo stesso numero è ancora solo 32 bit.
E 'solo il modello di bit è diverso da
rappresentano 1 contro 2.
int z ora dice di darmi un altro 32 bit, lo chiamano z, e mettere il
somma di 1 e 2 in là.
Così che ora z è presumibilmente memorizzare il valore 3,
e quindi restituire 0.
>> Ora questo programma, lo fa qualcosa di interessante?
Quindi in realtà non fa niente di interessante, in ogni
senso, perché perché? Si sta facendo un po 'di matematica.
Ma non è di ritorno la risposta, giusta.
È restituendo 0.
Non è la stampa della risposta.
Quindi questo programma è fondamentalmente inutile, in quanto
attuale.
Si sta facendo un po 'di lavoro.
Sta andando a prendere un certo numero di secondi, o microsecondi, per
correre, ma non è in realtà facendo nulla
utile per l'uomo.
>> Quindi cerchiamo di realtà ora aprire math2, dove ora sono realtà
stampare il risultato.
Quindi, anche questo può essere dedotto dai nostri esempi precedenti.
Se voglio fare un po 'di matematica semplici, int x = 1, y
= 2. z è 1 più 2 ora.
Che cosa è questo andare a stampare, ovviamente?
Solo 3.
Così la sanità mentale rapido check.
Vorrei entrare in questa directory.
Così cd source1m.
Lasciatemi andare avanti e digitare make math2.
Nessun messaggio di errore è venuto fuori, per cui vorrei correre -
non a.out-lasciatemi correre math2. Invio.
E in effetti, stampato 3.
Bene, diamo un'occhiata a una variante di questo.
In math3.c, ora abbiamo questo esempio qui.
>> Quindi questo e 'piuttosto interessante.
Quindi, in questa qui, la risposta sta per arrivare 1 diviso per 10,
e notare che ho dichiarato come float.
Perché voglio che sia un galleggiante?
Beh, è ​​una frazione.
E 'intenzione di essere un numero reale.
Quindi sarà 0.1, si spera - 10%, in questo caso.
E che cosa ho poi desidera stampare?
Ebbene, questa risposta.
Bene, vediamo di prendere in giro questi a parte per primo.
Quindi, sulla sinistra, dichiarare una
galleggiante, lo chiamano rispondere.
Sul lato destro, si 1 diviso 10 e che mettere
rispondere all'interno della variabile.
Ora, questa linea sembra un po 'più criptico.
Ma notate alcune caratteristiche familiari. % Significa ecco che arriva un
segnaposto.
f qui significa un valore a virgola mobile, solo un vero e proprio
numero, qualcosa con un punto decimale.
0,2 cosa significa?
Qualcuno sa per esperienza precedente?
Due cifre decimali.
Quindi non abbiamo visto prima, ma è solo un modo di
esercitare un maggiore controllo sulla printf e
detto non mi dai 30 punti dopo la virgola,
invece mi danno solo 2.
>> E allora andiamo avanti ed eseguire questo.
Quindi, fare matematica 3, e ora lasciami correre matematica 3, Invio.
E questo non è giusto.
Sembra che abbiamo incontrato il nostro primo bug vero e proprio.
Beh, forse sto solo cercando non abbastanza vicino.
Quindi lasciami andare qui, e mi permetta di mettere 20 decimale
luoghi punto lì.
E fammi compilare questo, fare math3, correre.
Abbastanza sicuro 1 diviso per 10 non è 0.
Allora, cosa sta succedendo?
Bene bene, quindi in realtà non ha a che fare con questo.
Questo è un buon pensiero.
Questo è in realtà solo una coincidenza
che stiamo facendo questo.
Ma solo per dimostrare che questo non è vero, io
restituire qualcosa di casuale.
Non fare questo a casa, perché è semplicemente sbagliato.
Ma non fare math3, fammi correre.
Così ha nulla a che fare con quello che sto tornando, ha solo a che fare
con quello che sto stampando.
Ma l'ho sentito qui.
Cosa?
PUBBLICO: Quindi abbiamo bisogno di scrivere i numeri in
la divisione come -
>> DAVID MALAN: Ok buona.
Quindi abbiamo bisogno di scrivere i numeri che partecipano al
qui come divisione in virgola mobile stessi valori.
Quindi il problema è qui come prima: C, come con molte
lingue, ha diversi tipi di dati.
E quei tipi di dati, per esempio, sono questi qui.
E i tipi di dati in questione qui, quando si digita 1 e poi ho
tipo 10, sono probabilmente ciò che i tipi di dati?
Quindi è probabilmente un int, giusto?
Non è sicuramente un galleggiante perché non c'è decimale
punto o qualcosa di simile.
Quindi, veramente, ho un int diviso per un int.
>> Quindi la cosa interessante di matematica e un computer è che
se si sta facendo la divisione con numeri interi -
1 diviso 10, è sì 0,1.
Tuttavia, quando si sta dividendo un numero intero da un numero intero, il
risposta deve essere anche un numero intero solo perché, per ora.
E qual è l'implicazione, allora?
Ebbene, se la risposta è 1 diviso 10 uguale 0,1, ciò
il computer è intenzione di fare è non ho idea di come
rappresentano 0.1, perché questo è un valore a virgola mobile, non un
intero, sta andando a tagliare via tutto dopo la
punto decimale e per te mostrare il 0 all'inizio.
E il fatto che è la stampa a virgola mobile
valore, è solo una cosa estetica.
Questo perché sto forzando il computer per stampare questo come un
valore in virgola mobile.
E in effetti l'ho dichiarato come float, ma la matematica è
succedendo qui.
>> Quindi lasciatemi effettivamente risolvere questo problema in un modo abbastanza facile.
Perché non basta fare 10.0 e 1.0, anche se
tecnicamente avrei potuto farla franca solo facendo uno di quelli.
Ora lasciatemi andare avanti e fare math3.
Lasciatemi andare avanti e ora gestita math3, Invio.
E ora, oh ragazzo.
Ora abbiamo un nuovo problema del tutto.
Quindi meglio, a destra, siamo più vicini a 0,1, ma ciò che è chiaramente
sbagliato qui?
A meno che non ci è stato mentito per anni, giusto?
1 diviso per 10 è in realtà non è proprio 0.1, così che cosa è
davvero sta succedendo qui?
Ebbene si può tipo di ragione in questa logica.
Se un computer ha soltanto una quantità limitata di RAM per iniziare
con, e in effetti un solo computer utilizza 32 bit per un
valore in virgola mobile, è ovvio che con un
numero finito di bit, 32 in questo caso, sì, è possibile
rappresentano un sacco di roba.
In realtà è 4000000000 diversi valori possono essere
rappresentato con 32 bit, da 2 a 32, ma è ancora finita.
Quindi il problema è che c'è un numero infinito di reale
numeri, a destra.
Se mi dai un numero reale, posso sempre trovare uno
leggermente più grande, un po 'meno, semplicemente modificando il
numeri che sono dopo il punto decimale.
Quindi, se non si dispone di un numero infinito di bit, è
non può assolutamente rappresentare un infinito
numero di numeri reali.
>> Quindi c'è questa imprecisione inerente al computer, e
questo viene inciampò per tutto il tempo, anche nel più semplice dei
programmi come questo.
Ma anche in alcuni problemi del mondo reale e anche molto.
Infatti, prendiamo un momento per prendere solo uno sguardo
qualcosa che è realmente accaduto nella realtà.
Guarderemo solo il primo paio di minuti, e poi
postiamo online link.
Ma questa è la prova solo ciò che può andare storto, piuttosto
onestamente, in modo molto tragico quando queste cose non sono
apprezzato o solo noi esseri umani commettono errori quando si tratta di
questi tipi di dettagli di implementazione dei computer moderni.
>> [GIOCO VIDEO]
-Torniamo ora ai disastri di ingegneria su Modern Marvels.
Computer.
Abbiamo tutti giunti ad accettare i problemi, spesso frustranti
che vanno con loro.
Bugs, virus e problemi software sono piccoli prezzi per
pagare per la comodità.
Ma ad alta velocità militare tech e high e lo spazio
programmazione di applicazioni, il più piccolo problema può essere
ingrandita nel disastro.
Il 4 giugno 1996, gli scienziati pronti a lanciare un aereo telecomandato
Razzo Ariane 5.
Si portava satelliti scientifici di
stabilire con precisione come il campo magnetico terrestre
interagisce con il vento solare.
Il razzo è stato costruito per l'Agenzia spaziale europea e
si è staccato dal suo impianto, sulla costa della Guiana francese.
>> -A circa circa 37 secondi dall'inizio del volo, in primo luogo
notato qualcosa che non andava, che gli ugelli sono
orientabile in un modo che davvero non dovrebbero.
Circa 40 secondi dall'inizio del volo, chiaramente il veicolo
era in difficoltà, e che quando hanno preso la decisione di
distruggerla.
Un ufficiale di sicurezza gamma con coraggio enorme pressione del
pulsante, fatto saltare in aria il razzo prima che potesse diventare un
pericolo per la sicurezza pubblica.
>> -Questo è stato il viaggio inaugurale di Ariane 5, e la sua
distruzione ha avuto luogo a causa di un difetto incorporato nel
software razzo.
>> -Il problema del Ariane era che c'era un numero che
richiede 64 bit per esprimere e volevano convertirlo
un numero a 16 bit.
Si presume che il numero non è mai stato
Sarà molto grande,
che la maggior parte di queste cifre del numero a 64 bit erano 0s.
Ma si sbagliavano.
>> -L'incapacità di un programma software per accettare la
tipo di numero generato da un altro era alla radice di
il guasto.
Lo sviluppo del software era diventato una parte molto costosa
nuova tecnologia.
Il razzo Ariane 4 aveva avuto molto successo.
Così la maggior parte del software creato per esso è stato utilizzato anche
nel Ariane 5.
>> -Il problema di fondo era che l'Ariane 5 è stato più veloce,
accelerato velocemente.
E il software non ha rappresentato per questo.
>> -La distruzione del razzo è stato un enorme finanziaria
disastro, tutto a causa di un errore software minuto.
Ma non era la prima volta che i problemi di conversione dei dati ha
afflitto moderna tecnologia missilistica.
>> DAVID MALAN: Lasceremo a questo.
Ma questo è prova di quanto applicabile anche alcuni dei
questi dettagli di livello più basso che abbiamo cominciato a
esplorare oggi sono.
Quindi, anche come si ottiene un po 'distratto, forse da alcuni dei
la sintassi e arcaneness qui, si rende conto che nel corso del
termine saremo concentrati solo da come applicabile è quello di
mondi che vanno ben oltre CS.
Ci vediamo il Mercoledì.