>> [RIPRODUZIONE VIDEO]
>> -A Trionfo di matematica e l'abilità meccanica
è questo nuovo grande automatica calcolatrice alla Harvard University.
Intricati problemi in matematica mettere attraverso la macchina in forma codificata
su nastro sono risolti in un modo accurato minuti frazione del tempo richiesto
per calcolo umano.
Progettato per accelerare tutte le forme di ricerca matematica e scientifica,
il cervello meccanico gigante funziona per la Marina degli Stati Uniti fino alla fine della guerra.
>> [FINE RIPRODUZIONE]
>> DAVID J. MALAN: Questo è CS50.
Il passato era un magico posto, ma se hai mai
si chiese che cosa dispositivo a Harvard Science Center,
è infatti parte della Harvard Mark I, ed è
in mostra lì adesso negli ultimi anni.
E quello che vedrete incorporato nel set problema
uno è uno sguardo dietro le quinte a ciò che quel dispositivo ha fatto, e fa,
dal professor Harry Lewis, che si trova in il dipartimento di informatica qui.
Quindi più che in appena un po '.
>> Ma oggi cominciamo a transizione dalla settimana scorsa a questo,
e porteremo menzione di una fotografia qui
che in realtà è abbastanza famoso.
Qualcuno sa cosa questo qui è sullo schermo?
Almeno secondo il mito.
Già.
PUBBLICO: Il primo virus.
DAVID J. MALAN: Così è stato presumibilmente il primo problema reale in un computer.
Ora, in realtà, la parola bug, per un errore in un programma,
è stato con noi per un po ' tempo nel mondo fisico,
e questo è stato uno dei primi volte documentati in cui qualcuno realmente
colto una grande falena fuori del Marchio Calcolatore II, lo mise nel legante,
e poi registrato che come il primo bug noto
di essere stato effettivamente trovato fisicamente.
Così così è entrato che nella tradizione di oggi.
Tutto da ultimo settimana è disponibile on-line.
In particolare le risorse che si potrebbe non necessariamente notare, in particolare
se venire qui di persona.
Così uno dei compagni di insegnamento ogni anno fa una serie canonica di note,
quindi non è necessario tenere la testa in giù, cercando
trascrivere più nulla che potrebbe accadere qui in classe.
Quindi rendersi conto che quelli cosiddetto [? Scribd?] Note
sono in linea, certamente le diapositive e il codice sorgente che usiamo in classe.
Facciamo trascrizioni di testo completo disponibili pure.
Quindi, se si ricorda vagamente qualche termine, e si vuole guardare in su un po '
più facilmente, conto che tutto di che è consultabile on-line.
Nonché procedure dettagliate pure.
In effetti, oggi cominciamo a guardare un linguaggio di programmazione di livello più basso,
presto di essere conosciuto da noi come C, ed è molto facile
al tipo di perdersi dopo solo alcuni momenti di tempo, e quindi una sorta di meraviglia
come abbiamo avuto per un po 'di più complesso esempio dalla più semplice.
E così realizzare faremo ciliegia raccogliere durante le lezioni alcune
degli esempi rappresentativi, ma rendersi conto che molto di più è anche
disponibile on-line in modo da poter lavorare attraverso di essa al proprio ritmo,
tuttavia si è più comodo.
>> Ma abbiamo lasciato con i programmi che sono stati proprio questo.
Quindi clicco la bandiera verde, e che cosa fa questo programma?
Dice, ciao, mondo.
Rende il gatto dire ciao nel suo piccolo mondo
sul lato alto a sinistra di interfaccia utente di Scratch.
Ma abbiamo iniziato a introdurre alcuni termini la settimana scorsa.
E così, le cose come questo abbiamo chiamato cosa?
Quale potrebbe essere il termine generico per questo?
Già.
Un metodo o una dichiarazione.
Certo, è un'azione.
Fai questo.
Eppure ci sono stati altre forme a zero,
Oltre a questi cosiddetti dichiarazione, erano anche
cose come questa, che abbiamo chiamato cosa?
Già.
Quindi un ciclo.
E in questo caso, questa cosa ripetizioni, ovviamente, 10 volte.
C'è un blocco per sempre.
Ci sono un paio di altri.
E oggi stiamo andando a vedere come tradurre questo per un mondo più moderno,
se si vuole, anche se è andando a sembrare a prima vista
di essere molto più arcana.
Ma erano davvero loop.
E poi abbiamo cose come questo, che ha avuto questa forma,
ed essenzialmente domande.
E abbiamo fatto riferimento a questi come cosa?
>> PUBBLICO: espressione booleana.
>> DAVID J. MALAN: Sì.
Espressione booleana.
Qualcosa che è vera o falso, sì o no, uno o zero,
comunque lo si voglia vedere il mondo.
Ma abbiamo chiamato quelli booleano espressioni, e noi li spina
in condizioni, o rami.
E nel mondo di Scratch, tutto bene
interblocchi in termini di forma, se ha senso logico farlo,
ma non c'è bisogno di fermarsi al solo facendo una cosa condizionale,
si può avere una proverbiale bivio
e fare questo o quello, se la condizione è vera o no.
E allora, come si vedrà, se non l'hai già fatto,
È anche possibile nidificare questi blocchi.
Così Scratch cresce fino a riempire le forme che si potrebbe voler inserire in esso,
così si può effettivamente esprimere più una logica che si potrebbe desiderare di fare.
>> Ora un paio di parole di annuncio sia qui e New Haven.
Così sezionamento inizia oggi.
L'URL per questo è in corso di sito web, per chi non conosce.
Le sezioni saranno un occasione per stare insieme
in un ambiente molto più intimo di [? Sanders?] Permette,
da 10 a 20 compagni di classe con un insegnamento fellow presso diverse tracce,
e ritmi diversi, se lo desiderano.
Infatti il ​​corso offre diverse sezioni
per quelli meno comodo, più confortevole, e da qualche parte in mezzo,
e il ruolo di pollice qui, è non c'è una definizione formale,
ma se si è meno comodo, è sorta di conoscerla.
Sei un po 'intrepido sulla idea di mettere piede, forse, di nuovo
in classe, o mostrando fino ad un punto in mezzo.
Se siete stati la programmazione dal momento che erano sei anni, più a suo agio,
forse per te.
E se si tratta di una specie di lancio-up, che è esattamente ciò che la in mezzo
è destinato a essere.
>> Ora, nel frattempo, per una classe di queste dimensioni,
ci vuole un po 'di tempo per sezione tutti, così abbiamo i cosiddetti,
sezioni eccellenti, fino a venire questo fine settimana e all'inizio della prossima settimana,
così dare un'occhiata al sito web del corso per coloro che sono naturalmente ampia,
e anche girato per quelli che non li può fare.
E sezioni stesse inizieranno in settimana tre CS50 indice zero.
Problema set 0 è già sul sito web del corso.
E rendersi conto che si ha nove giorni in ritardo questo semestre.
Quindi questo è un aggiornamento da ultimo anno, quando abbiamo avuto cinque giorni di ritardo.
>> Quindi, se vi state chiedendo, abbiamo nove insiemi di problemi.
Hai nove giorni di ritardo, ognuno dei quali si può spendere solo un a settimana su.
Ciò rende efficacemente tutti il problema imposta dovuta Venerdì,
ma l'obiettivo è quello di mettere un po ' po 'di pressione psicologica
su di voi per cercare di ottenere le cose in su Giovedi
perché, come scoprirete presto, nel bene e nel male, la maggior parte
tutto nel mondo del software finisce prendendo molto più tempo di anticipare.
Quindi prendere in considerazione una sorta di opportunità di aiutare
voi stessi a bersaglio Giovedi, ma consolare che, sì,
tutto è dovuto Venerdì.
E se si presenta loro su Giovedi, che è meraviglioso.
Non ci sono punti bonus o in più credito per soddisfare tale termine.
E 'pensato per essere solo una stampella.
>> E le ore di ufficio, sia qui e in New Haven,
di persona, se si desidera incontro con uno dei nostri corsi
insegnamento borsisti e CA per l'assistenza.
>> Tutto ok.
Così ora, facciamo questo più reale.
E per un momento che sta per iniziare per ottenere un po 'di più arcano, ma molto
rapidamente il Venerdì e la prossima settimana ci sarà
in grado di fare molto di più abbiamo potuto finora nella Scratch.
Così abbiamo introdotto ultimo codice settimana, anche se pittorica.
Era pezzi del puzzle.
E abbiamo formalizzato che è qualcosa chiamato il codice sorgente,
ma sarebbe aveva assomigliare?
Beh, sembrava un po ' qualcosa come questo.
E, infatti, solo tipo di prendere in giro dove possiamo andare con questo.
Ho intenzione di andare avanti e aprire una finestra qui,
e sto solo andando a scegliere Nuovo file.
E ho intenzione di salvare questo file come qualcosa di simile ciao punto c.
Altro su quella scelta parole solo un momento.
E questo è come qualcuno potrebbe andare a scrivere un programma.
Includere I / O standard puntino h, int main vuoto, e quindi aprire parentesi graffa, vicino
parentesi graffa, printf ciao mondo virgola, backslash n, punto e virgola, Salva, fatto.
OK.
Ho scritto il mio primo programma, ma sta andando
ad essere incredibilmente deludente perché quando ho effettivamente
eseguire il programma, naturalmente, per prima scrittura fare ciao,
e poi tagliare dot ciao, e faremo passare attraverso questo in modo molto più dettagliato
in un momento, questo è tutto ciò che fa.
Non pop aperto tutte le finestre.
Non fa niente particolarmente fantasia.
Tutto ciò che fa è quello che ho detto a facciamo, ma come si arriva a questo?
E come possiamo costruire su questo?
Bene, vediamo di introdurre un qualche diversi concetti qui.
>> Quindi uno, stiamo per iniziare utilizzando un programma detto compilatore.
Esiste un compilatore per Mac OS, Windows, Linux, qualsiasi numero di sistemi operativi,
e che presto vi presentiamo il ambiente che useremo,
ma un compilatore è solo un generale termine per un pezzo di software
che prende il codice sorgente e produce codice oggetto da esso.
In altre parole, se si avere come input sorgente
codice, qualcosa di simile a quello che ho appena scritto, produce in ultima analisi, codice oggetto.
E codice oggetto è in realtà solo un modo elegante per dire che uscite
pari a zero e la propria.
In altre parole, fonte codice, anche se è
andando a guardare un po 'arcano, e un po 'meno amichevole
di Scratch a prima vista, è almeno qualcosa
che noi umani possiamo capire.
Che tipo di aspetto e suona come Inglese anche se è molto succinto.
Considerando che la programmazione a Zero e uno di, come i nostri predecessori hanno dovuto fare,
alcuni anni fa, non era particolarmente divertente sfida.
Tuttavia, questo è ciò che il calcolatore capisce ancora.
Così compilatore ci fa da il codice sorgente al codice oggetto.
E 'come aprire un file con il compilatore, e quando lo si salva,
si ottiene questi zero e uno.
Quindi vedremo come fare che in un momento.
>> Ma veniamo ora cercare di fornire un ponte tra la scorsa settimana e questo,
in modo che anche come noi ottenere appeso su cose come parentesi graffe,
e punti e virgola, e parentesi, e tutti questi intellettualmente interessante
aspetti della programmazione, che molto comprensibilmente inciampare la gente nella fase iniziale,
conto che tutte le idee oggi, sono gli stessi dello scorso.
Così lo scorso, abbiamo visto questo esempio qui, il programma Ciao Mondo.
Ebbene, a partire da oggi, se vogliamo di attuare tale programma stesso,
è andare a guardare un po 'di qualcosa di simile.
E spieghiamo in breve tempo quello che int, e principale, e vuoto, e tutto questo
è, ma almeno io vedo qui già il familiare Ciao Mondo.
>> Nel frattempo, le cose come la funzione, diciamo ciao,
sta molto semplicemente andando a essere un dichiarazione molto semplice come questo.
Printf ciao mondo, con un po ' cita, con una barra rovesciata,
con un punto e virgola, ma più su quello a venire.
Loops, nel frattempo, questo è un anello che, naturalmente, dice ciao mondo per sempre,
e questo sta andando a guardare un poco più strano che negli ultimi,
ma se dico qualcosa come, mentre è vero, io
possono poi stampare Ciao mondo ancora e ancora e ancora e ancora.
E allora come si può tipo di iniziare a dedurre qui,
questa convenzione di utilizzo parentesi graffe è gentile
'come abbracciare il riga rientrata di codice lì.
La linea printf di codice molto simile il pezzo di puzzle gialla sopra.
Quindi non stiamo andando a dire per sempre, stiamo andando a dire durante vero,
ma staremo a vedere perché questo è in appena un po '.
>> Nel frattempo, se abbiamo un ciclo come questo, dove si ripete qualcosa di finito
volte numero, anche questo è andando a prendere un po 'di tempo per abituarsi
a, ma sta andando a dire per int mi viene a zero, ho meno di 10, i ++,
e poi di nuovo printf.
Ma ci sara 'modelli.
E per quelli di voi familiare con AP Informatica, o Java,
o un qualsiasi numero di altre lingue, quasi tutti questi costrutti
finora dovrebbe apparire per lo più familiare.
>> Così variabile.
Quindi, ecco un semplice estratto Scratch che imposta una variabile chiamata contatore a zero,
e poi dice sempre il banco, e quindi cambia il contatore di uno.
Quindi si inizia con lo zero, e poi uno, due, tre.
Beh, come potremmo introdurre che in questo nuovo linguaggio un po 'allo stesso modo?
Contatore Int uguale zero, mentre vero che
è la stessa idea da prima di fare qualcosa per sempre,
e sto solo andando a printf.
E ora sta diventando un po 'strano, cento i, ma più su quello a venire,
ma queste idee sono esattamente uguali.
Non ci resta che ora di aderire a la sintassi che il computer è
andare a chiedere a noi.
>> Espressione booleana, qualcosa di simile sx inferiore y, x o meno di y,
e y meno di z.
Sta andando a guardare un po 'di qualcosa in questo modo, con parentesi solo
come in matematica per buona misura a solo garantire che l'ordine delle operazioni
è come intendiamo.
E ora, le condizioni.
Quindi, se x meno di y, x dire è meno di y, altrimenti se x è maggiore di y,
dire x è maggiore di y, altrimenti logicamente, x deve essere uguale a y.
Così si potrebbe implementare qualcosa di simile in Scratch,
o si potrebbe implementare in questa sintassi.
E ancora, le parentesi graffe sono un po ' dandoci la stessa forma del puzzle
pezzi, ma la sintassi, ora, è forse iniziando a seguire alcuni modelli.
>> Allora, che cosa significa questo ci dà qui?
Così siamo tornati quindi al nostro programma principale.
Vediamo in realtà, ora, fare qualcosa con esso.
Quindi, in questo primo Linea vediamo tagliente includiamo,
I / O standard, puntino h, e poi qualche angolo strano
Staffe di sotto di tale. int main vuoto, e poi printf ciao mondo.
Quindi basta fare un passo.
Qualcuno che non ha mai programmato prima, almeno spiegare una di queste linee.
Usando forse alcuni di il gergo della scorsa settimana.
Qual è printf, per esempio?
Già.
>> PUBBLICO: [incomprensibile]
>> DAVID J. MALAN: Sì.
Si tratta di una funzione o di una dichiarazione, dalla terminologia della scorsa settimana.
Ed è una azione che sta facendo qualcosa.
Ora questa funzione, o questa dichiarazione, fa
apparire prendere qualche tipo di input?
E in che senso lo fa sembrano prendere di ingresso, se così?
Ingresso, Cosa voglio dire con questo?
Già.
>> PUBBLICO: [incomprensibile]
DAVID J. MALAN: Sì.
Così Gratta fuori un paio di pezzi di puzzle dove è possibile parametrizzare esso.
Si potrebbe dire la ripetizione bloccare quante volte ripetere,
così che era un ingresso di sorta, e proprio come Scratch
aveva un piccolo segnaposto bianco per il numero che si digita,
così usiamo in questo parentesi mondo testo
a darci quella forma circolare in cui possiamo inserire il nostro ingresso.
Dopo tutto, decine di anni fa quando questo linguaggio, chiamato C,
è stato inventato nessuno ha anticipato che è uno di noi,
questi alcuni anni più tardi, saremmo vogliono una funzione che dice ciao.
Destra?
Sarebbe bello se ci fosse un pezzo di puzzle, o una parola chiave,
che si chiama ciao, che letteralmente dice ciao.
Ma non abbiamo bisogno di questo.
Possiamo avere qualcosa di molto più basso livello, come una stampa generica
il comando, che prende in ingresso, e le stampe quello che vogliamo.
Così ora notare il modello che inizierà ad emergere.
Paren Open, vicino paren è apparentemente abbraccia l'ingresso,
e poi vedo doppio cita su entrambe le estremità.
C'è ancora strano backslash n, ma spero che ora si
può iniziare a visualizzare almeno questo printf sta prendendo in qualche forma di input.
Non facile da usare come Scratch, ma è solo
come aver tappato in qualche valore lì.
>> Va bene, ora andiamo in realtà fare qualcosa con questo.
Così alcuni di voi potrebbe sapere da avendo acquisti la classe prima,
chiacchierato con gli amici, che per molti anni
abbiamo usato qualcosa chiamato l'apparecchio CS50.
Questo era un termine che descrive una tecnologia chiamato la macchina virtuale, che
è un pezzo di software che il vostro predecessori avrebbero scaricare off
il sito web del corso gratuitamente.
Avrebbero anche scaricare un brano gratis di software chiamato un hypervisor,
qualcosa chiamato come VMware, o VirtualBox, o un qualsiasi numero
di altri strumenti, e sul proprio Mac o PC o quello del computer che avevano l'anno scorso
e negli anni passati, hanno raddoppierebbe fare clic su un'icona
per eseguire questo software chiamato l'hypervisor.
E poi all'interno di tale programma avrebbero aperto l'apparecchio CS50.
E l'effetto è che se un predecessore del tuo
era in esecuzione Mac OS o Finestre, lui o lei poi
successivamente aveva una nuova finestra sul loro schermo esecuzione ambiente CS50.
Quindi una macchina virtuale consente di eseguire uno sistema operativo all'interno di un altro,
e questo è esattamente quello che abbiamo fatto.
Durante la maggior parte del corso ci utilizzare un sistema operativo chiamato
Linux, in particolare Ubuntu Linux, e questo
è un modo molto piacevole negli anni passati di assicurandosi che tutti in corso
appena avuto lo stesso ambiente.
Ed è possibile utilizzare qualsiasi tipo di computer che si desidera veramente.
Tra gli aspetti negativi, però, erano era come due gigabyte
per scaricare questa cosa.
Non ha funzionato necessariamente super ben su persone i cui computer che forse solo
aveva un concerto o così di RAM, o no troppi gigahertz di velocità della CPU,
e così quest'anno, per questo ed altri motivi,
siamo stati in transizione a questo ambiente.
Il cosiddetto CS50 IDE, che è basato su software open source,
e una piattaforma supportata che una società denominata Cloud9
sostiene in Europa, che ci permette di avere essenzialmente
che stesso ambiente esattamente come in anni passati, ma nel cosiddetto cloud.
>> Allora, qual è la nuvola?
Probabilmente avete cliccato la sua icona sul vostro Mac o PC.
Che cos'è il cloud?
Sì?
Un po 'più forte.
Già.
E 'solo un mucchio di computer altrove che memorizzare i dati ed eseguire
software e simili.
Quindi è davvero solo per la parola de jure di descrivere [? affittabili?]
i computer che vivono altrove.
Che voi, voi stessi, non necessariamente possedere.
Così, quando i dati, o il vostro programmi, sono in the cloud,
significa solo che è su qualcuno di altro computer altrove,
e non, molto probabilmente, il vostro laptop o desktop fisico.
Ed è quello che CS50 IDE ora è.
>> D'ora in poi si passa a un certo URL che vi introdurrà
a, nel problem set 1, entro la fine settimana, che poi, dopo il login,
dare questo ambiente.
E molto Scratch come ha avuto un alcuni pannelli differenti coinvolti,
così fa IDE CS50 hanno esattamente questo.
In alto a sinistra qui, sei andando a vedere un file browser familiare.
Così uno dei file che si messo in questo ambiente
sono solo andando per essere elencati qui.
File e cartelle.
In alto a destra qui, si sta andando a vedere un luogo
dove si può effettivamente scrivere il codice.
Inizialmente in C, nel corso della termine in PHP e JavaScript,
e, forse per finale progetti, Ruby o Java o Python
o un qualsiasi numero di lingue sono supportato in questo ambiente.
Non è affatto legato a CS50 in particolare.
>> E poi in basso qui, specialmente per quelli più a suo agio,
hai qualcosa chiamato una finestra di terminale.
E questa finestra di terminale permette di eseguire qualsiasi comando che si
desiderare in questo ambiente cloud.
Esso consente di installare alcun software aggiuntivo
che si desidera perché hai cosiddetto radice, o di amministratore privilegi.
In altre parole, anche se questo è in definitiva ospitata in the cloud,
e anche se abbiamo semplificato in qualche misura
Per impostazione predefinita, letteralmente l'introduzione, grazie a Dan Armendariz, e Dino,
e Dan Bradley nella squadra di CS50 sulla passato molti mesi, una meno confortevole
modalità che nasconde un sacco di distrazioni inizialmente confusione.
Tutto esiste per rappresentare un computer generico
che si potrebbe utilizzare nel mondo reale.
>> Che cosa significa tutto questo, e cosa possiamo realmente fare con esso?
Facciamo in realtà dare uno sguardo a un programma.
Quindi ho intenzione di aprire il ambiente reale qui,
che è solo la nostra Chrome del browser, che potrebbe essere di Firefox,
potrebbe essere Internet Explorer, o qualche altro browser pure.
E 'pieno proiettato qui, per il momento.
E voglio davvero prendere in giro a parte ciò che questo programma è stato.
Quindi, diamo uno sguardo, zoomando fino alto, a quello che ho fatto, e come sono arrivato qui.
Quindi, ecco quelli esatto stesse linee di codice.
Quindi questa è la dichiarazione, come lei ha ricordato in precedenza.
La funzione che dice ciao.
Le parentesi graffe, su linea quattro e la linea a sei,
presumibilmente tipo di busta quella linea di associarlo
con l'essenza del mio programma.
Così infatti, questa parola chiave principale, che è lassù sulla linea tre,
si può pensare che come l'equivalente di che, quando la bandiera verde cliccato,
bloccare in Scratch.
Ecco, questo è tutto quello che abbiamo qui, è quando bandiera verde cliccato, stampa, o dire,
Ciao mondo.
>> Ma facciamo una supposizione, ora, a quello che questa prima, linea più arcano, è.
Sharp comprendono, aperto ad angolo staffa I / O standard puntino h,
chiudere staffa angolare.
Che cosa è che forse facendo, soprattutto se hai programmato
prima in un'altra lingua.
Sì?
>> PUBBLICO: [incomprensibile]
DAVID J. MALAN: Sì.
Esattamente.
Quindi questo ti dà accesso a una biblioteca, per così dire, di funzioni.
E una libreria di funzioni è funzioni che qualcun altro
ha scritto, sia di recente o molto tempo fa, in modo da
non c'è bisogno di reinventare la ruota.
Ad esempio, non lo facciamo devono sapere, nel 2015,
come scrivere il codice che mette un personaggio sul mio schermo.
Qualcun altro ha pensato che con la funzione printf
modo che io possa ordinare di astratto lontano da quello, o strato
in cima al suo codice, e ora basta prendere
per scontato che qualsiasi programma scrivo può stampare qualcosa sullo schermo.
Quindi questa prima linea lì a passo uno comprende il cosiddetto file di intestazione
per la libreria standard.
Quindi vedi, la lingua in che ora stiamo lavorando
aveva una libreria standard con un sacco di funzioni.
Printf è uno di loro, e che prima riga di codice
me significa dare accesso a quelle funzioni, in modo che io
non c'è bisogno di reinventare la ruota.
>> Ora andiamo alla finestra in basso e fare esattamente quello che ho fatto prima.
Poco fa, quando ero sfrecciano attraverso il codice,
scrivendo tutto, per la prima volta, Ho molto velocemente digitato, faccio ciao.
Che cosa era che tutto su sarebbe indovinare?
Che cosa stavo facendo?
Sì?
Non importa.
Va bene.
Già.
PUBBLICO: compilarlo.
DAVID J. MALAN: Sì.
E 'stato solo compilarlo.
Destra?
Anche se questo è completamente sconosciuto per te, abbastanza inglese come.
Non è certamente zeri e quelli, quindi ho ancora
necessario eseguire attraverso quella cosiddetta il programma, un compilatore, che sta andando
prendere come input e produrre output.
E almeno, per ora, in questo ambiente Linux,
ma questo non è un prerequisito, questo è solo dove potremo iniziare,
in genere si interagisce con sistemi informatici come questo
da una cosiddetta linea di comando.
Così con un lampeggiante pronta e la tastiera,
e non tanto il mouse, e non tanto finestre e le icone e menu,
piuttosto tutto è testuale.
E anche se questo si sente, in un primo momento sguardo, forse, come un passo indietro,
in realtà è molto più modo potente ed espressiva
di controllare un computer tanto più che si,
te stesso, diventare più comodo da meno.
E 'intenzione di consentire di fare un sacco più cose che solo ciò che Microsoft
o Apple permette di fare con il loro sistema operativo grafico.
>> Così, quando ho colpito Enter, ora, non succede nulla questa volta
perché a quanto pare la ciao programma è aggiornato.
E quello che era il comando Ho eseguito dopo?
Dot taglio su ciao, e ciao mondo.
Ora facciamo un passo indietro solo per un momento.
Si scopre che fanno ciao è solo un modo semplificato di compilazione di un programma.
Diciamo solo introduciamo un pezzo di gergo,
ma poi allontanarsi da esso, dal momento che non è
tutto ciò che interessa per scopi di oggi.
Il compilatore che andremo a iniziare a utilizzare si chiama Clang, per il linguaggio C.
E questo è un programma che è eseguito solo come abbiamo fatto nella riga di comando lì.
E così, se voglio compilare un programma che
hanno scritto in un file chiamato ciao puntino c, ho letteralmente basta digitare clang ciao c
entrare.
>> La cosa divertente è, per ragioni storiche,
se non si specifica il il nome del programma
che voglio uscita, se non lo faccio specificare un nome file per quegli zeri
e quelli, molto strano anni fa Convenzione è stata adottata
dove si sentiva una specie di buona risposta, al momento,
bene facciamo solo arbitrariamente chiamare il primo programma si compila un punto fuori.
Una viene prima dell'alfabeto.
Fuori, è l'uscita.
Quindi chiameremo il programma Per impostazione predefinita, un punto fuori.
E va bene, perché se voglio eseguire il programma in questo testo base
ambiente, mi basta digitare dot taglio su un punto fuori entrare.
E sarebbe eseguito esattamente come prima.
Vediamo quindi che veloce reale.
>> Quindi, se torno al mio codice sorgente in CS50 IDE,
e io invece faccio questo, clang ciao culla c entrare, avviso nulla sembra accadere,
ma quasi sempre questo ambiente Linux,
quando nulla di male sembra accadere, che vuol dire qualcosa di buono realmente accaduto.
Se non vedi un errore messaggio, tutto è probabilmente bene.
E in effetti, se io ora faccio punto tagliano un punto Entro fuori, ho eseguito il mio stesso programma.
Ho ancora il programma ciao da prima perché in effetti, è
sta per essere molto più bello solo digitare fare invece di ricordare
questi incantesimi di comandi, ma vediamo come noi
potrebbe migliorare su questo, comunque.
>> Così, questo è il comando per compilare il codice.
Questo è il comando da eseguire il codice compilato successivamente.
Come è possibile specificare un nome di file?
Beh diciamo solo introduciamo un altro pezzo di gergo.
Quando sei in questo ambiente basato su testo,
si sta andando a voler specificare cose chiamate argomenti della riga di comando.
Che è solo un modo elegante per dire, altre parole al prompt
modificare il comportamento di qualsiasi programma che si sta eseguendo.
Così in particolare il programma sono esecuzione, digitando il nome clang,
è il programma chiamato Clang.
Quindi questo è o la vecchia scuola equivalente di un doppio clic
in Microsoft Word o icona di qualche programma.
Sono invece solo digitando il suo nome, ma in questa versione del comando,
Allora ho trattino o spazio ciao ciao spazio puntino c.
Quindi, anche se non hai mai giocato in questo mondo prima,
basta prendere una congettura che cosa fa precipitare o ciao fare?
O che cosa dice clangore di fare?
Già.
>> PUBBLICO: [incomprensibile]
DAVID J. MALAN: Sì.
Imposta solo l'uscita del file per essere ciao invece del più sciocco un punto fuori.
E, in effetti, proviamo questo.
Quindi, se io ora faccio, prima facciamo questo, r m ciao.
Questo è rimuovere.
E sta andando a dire rimuovere file regolare ciao, che
è inutilmente arcano, ma solo mezzi fanno si desidera eliminare il file,
e ho tipo S per Sì.
E notare, se si getta uno sguardo in alto a sinistra, lo ha fatto sparire da lassù.
Vorrei ora fare clang trattino o, e Ho intenzione di andare avanti e fare ciao,
in tutte le protezioni, ciao puntino c.
Ora, se faccio barra puntino ciao, che cosa ci si può aspettare?
>> Forse è case sensitive.
Forse non è.
Vediamo.
Nessun file o directory con questo nome.
E possiamo tipo di imbrogliare solo guardando in alto a sinistra.
Quello che facevo io, ovviamente, salvare il programma come?
All Caps ciao.
Così infatti, che è in corso per fare la differenza.
Così ora ciao mondo è tornato.
Ora, questo è tutto bello e buono, e tutti molto noiose,
a sorta di ottenere impantanarsi in questi dettagli, ma la loro comprensione
è buono.
>> Digitando a queste sempre più lunghi incantesimi
non sta per essere particolarmente divertimento, così la gente in tutto il mondo
inventato un altro programma, alcuni anni fa, chiamato
fare, che molto semplicemente permette di digitare make,
il nome del programma si vuole fare, e fare
è intelligente nel senso che sarà in la cartella corrente, alias di directory,
e se si dispone di un file chiamato ciao dot c,
che è il file che verrà compilato per voi in un programma chiamato ciao.
Quindi è un modo molto più semplice di facendo i comandi più criptici
che abbiamo fatto in precedenza.
E abbiamo pre-configurato CS50 IDE per conoscere
che dovrebbe fare precipitare o ed un certo numero di altre bandiere, o argomenti della riga di comando,
che vedremo fra poco.
>> Ma veniamo ora effettivamente fare qualcosa di più interessante.
Basta digitando mondo ciao a tutti il tempo non è poi così interessante.
Così mi permetta di andare avanti e il cambiamento questo programma e dire, ciao Davide.
Ora ho intenzione di andare qui.
Ho intenzione di andare avanti e fare fare ciao.
E ancora adesso si sta vedendo farti sta mostrando il più a lungo
sequenza di comandi che è facendo perché abbiamo pre-configurato
in questo modo, ma noi non devono preoccuparsi per ora
quello che sta facendo altro quello che è dot compilazione ridurre drasticamente ciao, ciao mondo.
Cosa c'è che non va?
Già.
>> PUBBLICO: [incomprensibile]
>> DAVID J. MALAN: Sì.
Così, errore noobie.
Ho notato questo è super sottile, ma l'asterisco qui, nella scheda,
semplicemente significa che non avete salvato, e browser e altri programmi
fare questo a volte.
Quindi il controllo s o comando s dovrebbe salvarlo.
Ora lasciatemi andare avanti e ri-eseguire il programma.
Ricompilato.
A destra, quindi è un processo multi-step.
Nessuno dei quali è particolarmente complesso, ma ogni volta che cambia il file,
abbiamo bisogno di cambiare la risultante zero e uno, e barra puntino ciao.
Wow.
Quindi questo è molto deludente che abbiamo appena stampato fuori questo.
Facciamo le cose un poco più dinamico, ora.
>> Beh, si scopre, che come Scratch, C supporta variabili.
E si scopre se si vuole avere una variabile che memorizza,
non un numero come noi tipicamente fatto con Scratch,
ma come una parola, o un frase o un nome, si
può specificare una variabile essere di tipo stringa.
Quindi vedremo più questi in un momento,
ma si scopre che C, e un sacco di lingue come esso,
hanno molto specifici tipi di variabili.
Non è proprio come l'algebra, dove si ottiene una x, un yez
e questi sono solo sempre numeri, in un linguaggio di programmazione
è possibile memorizzare i numeri, è possibile memorizzare singoli caratteri,
è possibile memorizzare intere parole, si potrebbe memorizzare immagini intere, file audio interi,
e simili.
Quindi abbiamo bisogno di specificare che cosa il tipo di variabile è nostro.
E per convenzione ho intenzione di chiamare il mio variabile s solo perché è succinta,
e s sta per stringa.
>> E poi ho intenzione di archiviare all'interno di questa variabile,
proprio come con Scratch quando uso il blocco insieme,
Ho intenzione di utilizzare il operatore di assegnamento in C,
che abbastanza bene è la parità segno, ma il segno di uguale fa questo.
Si muove qualcosa da destra in sinistra dell'espressione.
Quindi quello che ho fatto, per essere chiari nella linea a cinque, è che ho dichiarato una variabile.
Ho detto il computer, dammi memoria per una variabile, lo chiamano s,
e sapere in anticipo che sto andando da mettere una stringa in esso.
E una stringa è solo un sequenza di caratteri.
Si tratta di una parola o una frase o un paragrafo, ma è una sequenza di caratteri.
Non e 'numeri.
Che cosa sono io stringa intenzione di essere mettendo in quella variabile?
Beh, a quanto pare citare unquote, "Hannah".
Ora notate il modello che sta emergendo.
C'è un'espressione mano sinistra.
C'è una espressione mano destra, separate dal segno uguale.
E basta prendere una supposizione, se sconosciuto comunque,
con ciò che il punto e virgola sta facendo.
Che cosa sta facendo presumibilmente per noi?
Sì?
>> PUBBLICO: [incomprensibile]
>> DAVID J. MALAN: Sì.
E 'solo che chiude la linea.
Destra?
I computer vogliono essere senza mezzi termini ha detto, letteralmente, cosa fare.
Come il burro di arachidi e Esempio gelatina di sandwich,
se non si specifica cosa si intende esattamente,
potrebbe essere lasciato al giudizio o errori.
Il punto e virgola significa, questo è tutto per questo comando.
E 'essere super preciso, ed è una cosa molto facile lasciare fuori.
Così ora il programma non sembra comportarsi in modo diverso fino a quando ho
renderlo più dinamico.
Quindi, piuttosto che duro potrebbe mia nome, mi permetta di mettere un valore segnaposto.
E si scopre che, e so che questo dall'aver letto la documentazione,
e la funzione utilizzata per anni, che printf è stato progettato per essere dinamico.
Non è necessario conoscere in anticipo quali parole si desidera mettere in esso.
È invece possibile avere un segnaposto, come cento s, che
sta per dire la del computer, ha messo una stringa qui.
>> Quale stringa vogliamo mettere lì?
Will scopre che tra queste parentesi, che ricordano, delimitano
l'input per una funzione, se avete virgole lista delle cose separate qui,
in realtà passiamo in più ingressi a una funzione.
Quindi, solo un po 'd'Scratch blocchi, non si potrebbe
hanno giocato con loro per i vostri progetti ancora o non del tutto,
alcuni blocchi Scratch hanno due ingressi.
Due scatole bianche che puoi digitare numeri o parole in.
Quindi, per non avere funzioni come C printf che può assumere due ingressi.
E di nuovo, questo virgola li sta separando.
Quindi, in inglese, di nuovo anche se non hai mai programmato prima,
da tale logica printf è una funzione, prende due ingressi, uno dei quali
è un segnaposto, che cosa sperate printf sta andando a che fare con questo ingresso?
Sta andando a dire ciao Hannah, si spera.
Quindi, per fare questo abbiamo bisogno di salvarlo.
Ho intenzione di ridurre.
Ho intenzione di tornare qui e dire, fanno ciao entrare.
Oh.
Qualcosa non va, e in realtà questo è abbastanza schiacciante.
Ho sei righe di codice e come 12 linee di errori.
Quindi, guardare avanti a questo.
Allora, cosa sta succedendo qui?
Quindi la migliore regola empirica qui, soprattutto quando si è agli inizi,
non farci distrarre da la roba in basso.
In realtà, ho deliberatamente basta scorrere up
perché molto spesso, un computer è Non tutto ciò luminosa di un dispositivo.
Sta andando a confondersi.
Se vede una cosa che non capisce,
potrebbe confondere altri righe di codice come non corrette,
anche se sono perfettamente bene.
Così si vuole sempre lavorare dall'alto verso il basso attraverso gli errori.
E devo ammettere che questo è Super arcano al momento.
>> Errore, l'uso di non dichiarato stringa di identificazione.
Ti voglio dire standard?
No, volevo dire stringa.
Ed è che punta a, forse è un errore di battitura.
Un po 'come, controllo ortografico in un modo molto geek, ma la ragione qui,
e saprete questo solo con la pratica, è
che si scopre che corda non esiste in C. Infatti, C
è un linguaggio particolarmente vecchio, ed è molto basso livello,
e non fa un sacco di funzioni che si potrebbe avere cresciuti
con se avete, infatti, programmata in Java, come alcuni di voi hanno,
ma si può insegnare cose nuove.
E in effetti, abbiamo fatto questo CS50, anche se alla fine del semestre,
tutte queste ruote di formazione sarà stato tolto,
ciò che facciamo in questi prime due settimane
inizialmente è che abbiamo anche di includere CS50 punto h.
Il che è un file di intestazione.
Più su che in futuro.
>> Si tratta di un file che contiene le funzioni che abbiamo scritto per voi.
E tra queste funzioni è funzioni per l'input
da parte dell'utente, come le stringhe, e numeri e numeri reali, e altro ancora.
Ma ha anche un paio di scorciatoie.
Si definisce un booleano come un tipo di dati.
C non ha vero o falso.
Ma siamo in grado di dare l'idea di vero o falso per mezzo di questa libreria.
E inoltre, non hanno una stringa costruita nel finché non includiamo questa linea.
Quindi, questa riga di codice dice il compilatore, ehi, Clang, guarda
in questo file per un intero mucchio di codice che CS50
ha scritto in modo che chiunque utilizzi questo file
può dare per scontato il caratteristiche che hanno aggiunto.
>> Così ora lasciami andare avanti e cancellare lo schermo,
e se curioso sto solo dicendo di controllo l ogni volta per cancellare lo schermo,
oppure digitare chiaro.
Sto solo andando ad andare avanti ora e tipo fanno ciao, e tutto va bene.
Ancora un'uscita arcana, ma non è un messaggio errato.
Ora, se faccio puntino tagliare ciao, e come a parte, barra punto è sconosciuto ai più.
Significa solo, mezzi punti la directory corrente.
Quindi, se hai mai usato DOS o Linux, o Unix
si potrebbe avere fatto qualcosa come cd dot dot, dove
dot dot significa andare indietro nel tempo, o tornare indietro, o più in alto
nella vostra directory.
Dot significa basta guardare a la directory corrente.
Voglio ciao, che è proprio qui.
E infatti, ora si dice ciao Hannah.
E se cambio di nuovo a Maria, ricompilare
renderebbe ciao, barra puntino ciao, il programma continua a cambiare.
>> Ma questo è ancora un programma piuttosto stupido.
Se voglio spedire questo programma, o dare a un amico,
o dare a Maria o Hannah se è per questo, va bene.
Posso personalizzarlo per entrambi, ma non è mai sta per essere dinamico.
Non possono cambiare una volta che è compilato giù in quelle zero e uno.
Quindi quello che abbiamo fatto qualcosa di più intelligente?
Che cosa succede se, invece di hard-codifica nel programma il nome di questa persona,
cosa succede se abbiamo appena otteniamo la stringa su richiesta?
>> Quindi, in altre parole, mi permetta di fare questo.
Io vado a ricompilare questo programma.
E lasciatemi lo zoom in in fondo ora.
Fai ciao ciao dot barra.
Ora non succede niente.
Possiamo ottenere una rapida volontario per far succedere qualcosa?
Vieni su.
Come ti chiami?
>> PANCHO: Pancho.
>> DAVID J. MALAN: Pacho?
Vieni su.
Una volta arrivati ​​qui, questo è sarà molto deludente,
ma è più interessante di me digitarlo.
Se si vuole andare avanti e digitare il nome, ho fatto questo programma per te.
Basta digitare il proprio nome.
Invio.
Meraviglioso.
Va bene, vi ringrazio molto.
>> PANCHO: Grazie mille.
>> DAVID J. MALAN: OK.
>> [Applausi]
>> E 'stato molto gentile.
Ecco qui.
Che cosa abbiamo fatto?
Così finalmente, almeno, fatto questo programma dinamico.
Ora è ancora certo dal disegno deludente,
ma finalmente abbiamo la capacità ora di scrivere codice in anticipo, molto
come di printf autori, e poi dinamicamente
ADAPT basato sull'ingresso siamo consegnato, sia dal programmatore,
o l'uomo che in realtà interagendo con il programma.
Quindi cerchiamo di realtà ora provare per fare un paio di altri costrutti
e vedere se non possiamo fare i programmi in modo più sofisticato.
Quindi cerchiamo di andare avanti e invece di scrivendo questo uno da zero,
Ho intenzione di andare in oggi codice sorgente, e tutto questo
è disponibile sul corso del sito web, ed è possibile trascinare e rilasciare
nel vostro ambiente Venerdì venire una volta problema
1 set ti dà la istruzioni, o si potrebbe
farlo da riga di comando come bene, ma più a venire a p set 1.
>> Vediamo cosa c'è in questo programma qui chiamato, vipera puntino c.
Ora ho già commentato essa, ma cosa c'è di nuovo?
A prima vista, quale linea di codice è assolutamente nuovo?
Probabilmente non fondamentalmente sconosciuto ora.
>> PUBBLICO: [incomprensibile]
DAVID J. MALAN: Sì, così int x è uguale a ottenere n.
Non abbiamo mai visto nulla di tutto questo prima, ma è probabilmente int
il simbolo per il tipo di variabile, [? da?] un numero intero.
Così int per intero.
E 'solo di essere più succinto. x è solo arbitrario.
x ed y, z sono ancora abbastanza ragionevole per i numeri,
ma generalmente useremo parole una volta i nostri programmi diventano più complessi.
Ottenere int, naturalmente, molto simile stringa di ottenere,
è destinata probabilmente ad ottenere un int da parte dell'utente,
e poi andremo a fare la stessa cosa con a.
E a quanto pare, anche se questo ultima riga, 24, appare più complessa,
sta andando a dire la somma di questo e questo è quest'altra cosa.
>> E notate per cento i probabilmente denota che cosa?
Che ruolo per cento io evidentemente servono?
E 'solo segnaposti.
Destra?
Percentuale s era per le stringhe, cento i è per intero.
Ci sara 'cento f per valore in virgola mobile, che
è solo un numero con una virgola decimale.
In altre parole, un numero reale.
Quindi cerchiamo di realtà compilare questo programmare veloce reale e facciamo in vipera.
Ops.
Buona occasione.
Così notare qui, per tutto questo tempo il mio utente il nome di questo account è jharvard.
Sono in CS50 IDE, alias IDE50.
E adesso in blu qui, è una menzione, ma dall'ambiente, di dove sono.
E infatti, se lo zoom fino alla cima qui, si noti che ho un IDE50
e vedo questa parola, se è sorta di girare la testa di lato, spazio di lavoro.
In poche parole, il fatto che Sto vedendo tilde lavoro barra
significa che in questo testo ambiente dei comandi base,
Io sono nel testo equivalente questa grafica cartella qui.
Così, quando faccio barra puntino vipera, è dire di no regola
di fare bersaglio fermata vipera.
Non so che cosa significa, ma è un male per qualche motivo.
Nessun file o directory con questo nome è ancora più chiaro.
Dove è allora?
In base a dove ho cliccato per aprire il file in precedenza.
Dove potrebbe essere?
>> E 'probabilmente in origine uno w, per Mercoledì,
e posso vedere, anzi, se apro che fino.
C'è sommatore dot C, ma in questo ambiente basato su testo,
ancora una volta, devo essere super esplicito.
Se voglio cambiare directory in fonte di un Mercoledì, ho bisogno di scrivere,
cd fonte spazio uno Mercoledì entrare e ora
le mie rapide modifiche dammi un segnale visivo che
Sono, infatti, altrove nel mio ambiente,
ma ora posso fare fare vipera, sembra funzionare,
dot taglio su vipera, dammi un numero intero.
Uno.
Due.
La somma di uno e due è tre.
Ma se non collaboro, vediamo cosa prendere int fa.
Dammi un intero.
No.
Riprova.
OK.
Belle.
50.
Tutto ok.
Così finalmente collabora.
E questo è parte del funzionalità che queste funzioni
può aver costruito per voi.
>> Così all'interno all'attuazione di ottenere int, cosa programmazione
costruire dalla settimana scorsa è probabilmente in ci costringono a questo comportamento di tentativi,
riprovare, riprovare?
Sì, c'è probabilmente una sorta di loop.
Sta andando a guardare sintatticamente diverso da blocchi di Scratch,
ma questo è davvero cosa c'è all'interno del file.
E in poche settimane ce la faremo effettivamente guardare in biblioteca CS50
da cosa c'è dentro, ma c'è un ciclo che impone esattamente questo.
>> Giochiamo un po 'sciocco gioco qui con questo file.
Condizione zero virgola c.
Stiamo solo andando a generale iniziare a contare da zero.
E continuo scorrere oltre alcune delle cose in alto.
In blu qui, delimitata con tutto di queste stelle e le barre,
quelli di voi che programmare prima, che cos'è?
Perché continuiamo a saltare su di esso?
Che cosa?
>> PUBBLICO: E 'un commento.
>> DAVID J. MALAN: Sì.
E 'solo un commento.
Questo è un commento per l'uomo leggere, che nel nostro caso,
ci dice che cosa il nome del file è, chi lo ha scritto, e che cosa fa,
in modo che non avete per leggere il codice
di sapere che cosa questo file è tutto.
E 'solo una descrizione, ma funzionalmente è irrilevante.
E posso anche eliminarlo dal il mio file e non ha alcun impatto.
Le linee sono questi succosi primi due qui, ora.
int void main è l'equivalente della nostra bandiera verde quando cliccato,
così stiamo andando a lasciare che si tratti per oggi, e ci torneremo,
infine, per quanto int e nulle sono, ma ora,
Noto quello che ho fatto anche in questo caso, è anche possibile,
se si dispone di un in linea commento, se avete
un pensiero che si desidera condividere su una particolare linea di codice,
convenzione in C è quello di fare barra slash, e poi un paio di parole succinte,
Non una frase completa, in genere non un paragrafo,
che spiega solo a voi, o il vostro TF, o altri lettori o colleghi,
ciò che il codice sta facendo.
Quindi, piuttosto che dover guardare a questo e dedurre da linee
nove e 10, ciò è questo modo, in linea di otto
Devo semplicemente dare un commento a chiedere all'utente per un intero,
allora non devo pensare troppo su quali linee nove e 10 sono.
So solo che questo è ciò che collettivamente che stanno facendo.
>> Come?
Bene, ecco la richiesta.
Ecco il ricevere lo int.
E sulla base della precedente comportamento, sembra che get int
è abbastanza intelligente per fare in modo che coopera l'umano e dà
un numero intero.
Ma ora vediamo questo.
E questo ricorda Scratch.
Sto sostenendo che sono analizzando input dell'utente,
ma un po 'impreciso.
E questo apparentemente in C è come esprimiamo un altro caso, un ramo,
un bivio, ma io dire un po 'impreciso.
Qual è l'errore in questo programma?
Chi più indietro?
Già.
>> PUBBLICO: [incomprensibile] zero.
>> DAVID J. MALAN: Sì.
Quindi, se digito pari a zero, prendiamo in considerazione esattamente questo caso caso, o ad angolo,
se vuoi.
Quindi, se digito zero, il che del blocchi sta per prendere a quanto pare?
Il caso o altro?
L'altro, e sta andando a dire, hai scelto un numero negativo.
E infatti, lo zero non si suppone essere positivo o negativo,
e in modo che sarebbe erroneamente.
Sarebbe un errore.
Quindi, come possiamo risolvere questo problema?
Chi non ha mai programmato prima?
Vuoi--
>> PUBBLICO: [incomprensibile]
>> DAVID J. MALAN: Ritiro?
>> PUBBLICO: [incomprensibile]
>> DAVID J. MALAN: Oh, hai?
Chi non ha mai programmato prima.
Vuoi provare a questo, con la maglietta rossa?
Vieni su.
Oh sì, andiamo su, se non ti dispiace.
In modo da non aver programmato prima, come ti chiami?
LAUREN: Lauren.
DAVID J. MALAN: Lauren, va bene.
Quindi risolvere questo bug per noi.
Tu non hai visto C, presumibilmente, e probabilmente nessun altro linguaggio.
Quindi risolvere questo programma per noi.
Piacere di conoscerti ya.
Nessuna pressione.
LAUREN: Sì.
>> DAVID J. MALAN: Ma ancora una volta, se questo gioco d'azzardo va secondo i piani,
l'asporto qui sarà essere, solo ancora una volta, per iniziare
a notare i modelli e dedurre dalla sintassi esistente
in quale altro modo si potrebbe esprimere voi stessi, senza giochi di parole, al fine
per catturare qualche scenario aggiuntivo.
Quindi stiamo dicendo else if.
printf, buono.
E notare con CS50 IDE e IDE frankly--
sta per Integrated Sviluppo dell'ambiente.
E 'solo un modo elegante per dire un programma che aiuta a programma.
Fa cose user friendly come quando si digita una parentesi,
ti dà automaticamente l'altro.
La presunzione è che sei infine intenzione di voler digitare tale,
e lo fa anche con le virgolette.
>> Così mi piace la linea 23.
99% della strada.
Qualcuno vuole carillon con una punta?
Ho sentito e virgola da parte del pubblico.
Bene.
Così che completa quella.
E ora, ho solo un po ' costernazione con la linea 21.
Come vogliamo esprimere questo?
Quale domanda vogliamo di chiedere, cosa ne pensi?
Così abbiamo chiesto in precedenza la domanda, se n è maggiore di zero, farlo.
Altrimenti, farlo.
Quindi abbiamo bisogno di scegliere un domanda da fare qui.
PUBBLICO: [incomprensibile]
DAVID J. MALAN: Good.
Quindi, se n è uguale a zero.
Eccellente.
Quindi cerchiamo di pausa qui.
Grazie mille per sfidare questo.
Lasciate che vi dia un po 'di meritato palla antistress, forse lì.
Così ci siamo quasi.
Infatti, Lauren, se non mente, permettetemi di fare un modificate qui,
solo per essere coerente anche con quello che abbiamo visto in Scratch, cosa
voglio fare con le linee 21 e 24, sulla base solo di nuovo
su come abbiamo fatto in Scratch, forse?
>> PUBBLICO: spostare in su.
>> DAVID J. MALAN: Sì, spostarlo verso l'alto.
Quindi la condizione altro, il terzo, o quarta, o quinta, o ramo finale,
dovrebbe infatti venire dopo, e questo è solo per convenzione,
solo perché, se vuoi.
Così ho bisogno di fare questo tweak.
E ho bisogno di mettere la mia parentesi graffa di nuovo qui.
E ora, questo programma verrà compilato.
Siamo così vicini, ma c'è un bug molto, molto sottile.
Vediamo cosa succede.
>> In primo luogo, mi permetta di andare avanti e zoom out.
Ho intenzione di andare avanti e digitare rendere condizione di zero.
Oh, ho mentito.
Ora il compilatore è in realtà piuttosto intelligente.
E io non capisco è messaggio di errore.
Usando il risultato di una cessione come condizione senza parentesi,
è apparentemente male.
Ma che cosa vuol dire?
>> Bene ancora una volta, alla ricerca di modelli nel codice che abbiamo visto prima,
ciò che è la linea 17 in realtà facendo, anche se Lauren destinato leggermente
altrimenti?
Già.
>> PUBBLICO: [incomprensibile]
DAVID J. MALAN: Sì.
Quindi ricorda il segno di uguale, a quanto pare come abbiamo usato prima, non è uguale.
Il suo incarico, da destra a sinistra.
Quindi la linea 17 al momento è una condizione, ed è
l'esecuzione di codice all'interno delle parentesi, ma quando questo codice viene eseguito,
quello che sta accadendo al valore di zero?
Che cosa sta accadendo al valore di n?
Diventare zero.
Quindi, se n è sempre pari a zero, e ancora una volta, come per la scorsa settimana,
generalmente diciamo che lo zero è falso e uno è vero,
o sì è uno e non è zero.
Così vero e falso, uno e 0.
Se n come di linea 17 è stata dato il valore 0, è pari a zero vero?
No.
Per definizione, zero è falsa.
Questa è la convenzione che siamo andando ad aggrapparsi a andare avanti.
Così sarà linee 18, 19, e 20 mai applicare ora, logicamente?
Non possono.
Così abbiamo chiesto la domanda ma non abbastanza precisamente,
e non si sa questo meno avete visto, la soluzione in C
è quando si vuole esprimere uguaglianza, si dice pari pari.
Così segno di uguale era già esaurita mediante cessione, da destra a sinistra.
Uguale uguale mezzi uguale.
E se si vuole veramente la tua mente da piegare, in JavaScript e PHP,
c'è uguale uguale uguale, che significare qualcos'altro,
ma ci arriveremo in breve tempo.
>> Quindi questa è una semplice correzione, ma si rende conto super facile da fare questo errore,
e poi ci domandiamo e lotta per minuti, se non un'ora,
perché è il mio codice non esecuzione come intendo?
È perché non hai detto è esattamente quello che voleva dire.
Così che era quasi perfetto, ed è stato fantastico
che ci siamo imbattuti in questi due piccoli le cose perché ora se li fissiamo,
e lo faccio fare condizione zero dot taglio su Condition Zero,
Mi piacerebbe un numero intero per favore.
Vediamo.
No.
E 'intenzione di costringermi a farlo.
Così 42.
Ho scelto un numero positivo.
Così ora come faccio a dimostrare questo programma corretto?
Se sei un matematico, non è possibile davvero dimostrare questo per tentativi ed errori,
destra?
Non si può solo una prova per esempio, ma almeno
come programmatore non siamo andando a cercare di dimostrare, per ora
che questo è in realtà corretto, ma dovrei probabilmente
testare alcuni casi rappresentativi.
>> Ho provato 42.
Ho potuto testare 43.
Ho potuto testare 44.
Prova 45.
Destra?
Ma potrei fare questo un sacco di tempo.
Che cosa sarebbe un po 'di più casi interessanti da provare?
PUBBLICO: [incomprensibile] zero.
DAVID J. MALAN: Così zero.
Certo.
E buona, abbiamo in questo momento, grazie al nuovo codice di Lauren.
Che cosa è un altro buon caso provare?
PUBBLICO: uno negativo.
>> DAVID J. MALAN: uno negativo, e forse qualcosa di un po 'più grande,
così forse negativo 42, ma in generale, quando
testare i programmi andare avanti, sei
andando a voler pensare a te stesso, come quello
sono i casi fondamentali differenti.
E oserei dire un caso negativo, un caso positivo, e un caso a zero
praticamente arrotonda questi fuori.
Diamo un'occhiata a una variante di questo però.
Condizioni uno.
Questa è una soluzione corretta qui, in modo che vedrete due e on-line,
se si cammina attraverso la procedure dettagliate, sarà generalmente
incrementare questi graduale fino a che ottenere esattamente il giusto approccio.
E se volessimo chiedere due domande in una volta?
>> Permettetemi di aprire questo invece.
Non-switch, per ragioni vedremo un'altra volta.
Cosa c'è di nuovo sintatticamente qui?
Attualmente sto giocando una partita in cui il computer sta dicendo
me, mi danno un numero intero tra uno e 10,
e poi io sto giudicando l'input dell'utente.
In inglese, sulla base il codice che vedi qui
in blu, che cosa sta facendo questo programma?
PUBBLICO: [incomprensibile] raccolto un grande o piccolo numero.
DAVID J. MALAN: Sì.
E 'solo giudicare se Ho scelto un grande, o medio,
o piccolo numero basa su un definizione arbitraria di piccole, medie,
e grande qui, ma preavviso la sintassi che c'è di nuovo è questo.
Non ci è inferiore o uguale a int firmare, o maggiore o uguale a firmare,
dove uno è sopra l'altra, che si può esprimere in come Microsoft Word.
Quindi, in un linguaggio di programmazione in genere basta fare due personaggi,
uno dopo l'altro.
E che cosa fa questo probabilmente rappresentare, commerciale e commerciale.
PUBBLICO: [incomprensibile]
DAVID J. MALAN: Sì.
Significa solo e perché risulta che gli autori di C
usato un singolo commerciale, che si potrebbe pensare
sarebbe perfetto per l'idea di e, è già esaurito,
commerciale così commerciale in realtà cattura il caso vogliamo davvero.
>> Quindi cerchiamo di ora incappare in due cose.
Lasciami andare avanti e di aprire uno.
Qualcosa che è un po 'preoccupante.
Imprecisione dot c.
Permettetemi di presentarvi due cose qui.
Uno, avviso che possiamo fare la matematica, come proprio come prima, quando
abbiamo fatto più di due numeri, xe y.
Che cosa è questo programma apparentemente facendo?
Non ho ancora commentato che, e io ho introdotto per cento f,
ma ho subito detto prima f per cento significa in virgola mobile
valore, che è il numero reale.
Qualcosa con un decimale punto, che non è un numero intero.
Cosa pensi di questo programma è cercando di mostrarmi sullo schermo?
Sì?
PUBBLICO: Il risultato di uno su 10.
DAVID J. MALAN: Sì.
Qual è il risultato di uno diviso per 10.
Già, perché tutti voi avete probabilmente cresciuto sapendo che un over 10
è ciò?
Sì, è solo 1/10 o 0.1.
Destra?
Quindi vediamo cosa questo realmente è.
Così mi permetta di andare avanti e salvare questo.
Lasciami andare qui.
Fai imprecisione dot barra imprecisioni, e nota, anche,
in un ambiente Linux, non è necessario deve digitare fuori imprecisione e prendere
per tutto il giorno.
In genere, se si ha colpito Tab, è si concluderà il vostro pensiero per voi,
basata sulle parole che sono disponibile nella directory corrente.
OK.
Quindi avevi ragione.
Uno diviso 10 è, infatti, 0.1.
Ma io sono un po 'curioso.
E si scopre printf supporta alcune caratteristiche
per cui è possibile specificare più di il numero predefinito di punti decimali.
Quindi, se voglio vedere 10 decimale punti posso fare per cento,
per il simbolo segnaposto, dot 10 per, dammi 10 punti decimali,
e poi ancora in virgola mobile valore e, per inciso,
che cosa è questo backslash n a quanto pare continua a usare?
Si scopre che si tratta di un simbolo per una nuova linea.
E 'il modo molto esplicito di dire al computer,
spostare il cursore al prossimo riga dopo il gioco è fatto.
E vedremo cosa succede quando noi non lo facciamo.
>> Permettetemi di ricompilare fare imprecisioni.
Ora dot tagliare imprecisioni.
OK.
Ancora a destra.
Uno diviso per 10.
Ora sto ottenendo un po 'curioso, però.
Che cosa se guardo 20 decimale sottolinea, ricompilare, eseguire di nuovo,
e come parte per velocità, è anche possibile utilizzare
il tuo frecce su e giù per scorrere la vostra storia,
in modo da non dover continuare ridigitare questi comandi, immettere.
Huh.
Non ho imparato che nella scuola elementare.
Va bene, così mi permetta vedere come 29 posti fuori.
Forse è solo un colpo di fortuna.
Forse il mio computer si comporta strano.
Questa non è una cosa, giusto?
Sta facendo qualcosa deterministico.
Quindi, fare imprecisioni.
OK, che è incasinato.
Allora, cosa sta succedendo?
>> Quindi, a quanto pare il tuo insegnante ha mentito
a tutti voi di questo tempo per ragioni che vedremo fra poco.
Ma finiamo con un altro programma.
Questo è un po 'i programmi qualcuno ha scritto qualche anno fa,
ed è in realtà parte di un concorso.
Nessuno in realtà scrive codice in questo modo, e se lo fai,
questo è stilisticamente un problema.
Ma le persone fanno per vantarsi.
Per scrivere il più confuso guardando programma che
fa comunque qualcosa di interessante.
E la nota ho pensato di lasciare il Oggi, prima di Colton noi gioca fuori qui,
è quello di eseguire questo programma, che, anche in usando solo
C in questo basato sul testo ambiente, noi questo dà.
Dannazione.
>> [Risata]
>> Stand-by.
[Incomprensibile] c precipitare l m.
Stai andando a vedere la magica incantesimo che vedremo fra poco.
[Incomprensibile] Va bene.
E ora si può anche fare cose come questa.
Questo è tutto.
Per CS50 noi, si vedrà il Venerdì.
>> [RIPRODUZIONE DI BRANI MUSICALI]
>> [Applausi]