DAVID J. MALAN: Quindi questo è CS50. E questo era di CS50 proprio Colton Ogden, per più di chi è la musica si può scaricare a soundcloud.com/cs50. 

Così oggi ci concentriamo tanto più sull'arte della programmazione. E prendiamo dove abbiamo lasciato la scorsa settimana, la messa a fuoco su Scratch, che era questa linguaggio di programmazione grafica. E prendere le cose ad un livello più basso, utilizzando una programmazione più tradizionale lingua conosciuta come C. Ma lungo il percorso, realizzando che le stesse idee che parlato di Venerdì scorso si ripresenterà non solo in questo linguaggio C, ma nella maggior parte ogni altra che guardiamo questo semestre. 

Così abbiamo chiamato questa cosa qui quello che l'ultima volta? Questo è rappresentativo di una dichiarazione. Così abbiamo chiamato questa una dichiarazione. E lo fa qualcosa. Si tratta di un'istruzione che un computer o Scratch potrebbe eseguire. E d'ora in poi, cominciamo anche chiamare qualcosa come questo una funzione, per ragioni che vedremo presto. 

Nel frattempo, abbiamo visto cose come questa. E questi sono generalmente noto come cosa costruire? 

PUBBLICO: Loop. 

DAVID J. MALAN: Quindi un ciclo. Quindi abbastanza semplice. Fa letteralmente quello che dice. E in Scratch, se si vuole stipare più pezzi del puzzle in là, il pezzo crescerà per adattarlo. E vedremo in C che siamo in grado di fare la stessa cosa. 

Un altro tipo di ciclo, però, in Scratch potrebbe essere per sempre, o c'è qualche numero di altri approcci. Ma facciamo un più sguardo generalista, con una faccia questo è probabilmente molto familiare, a loop più in generale. Mark Zuckerberg: One cosa che i computer sono veramente bravo a è ripetendo i comandi. Come persona, si otterrebbe davvero annoiato se ha dovuto fare la stessa cosa un sacco di volte di fila. Ma un computer può fare la stessa cosa milioni o addirittura miliardi di volte, e non annoiarsi, ed essere in grado di eseguirla veramente bene. 

Così, per esempio, se ha voluto augurare a tutti su Facebook un felice compleanno inviando loro una e-mail, mi potrebbe prendere più di un secolo di scrivere in realtà fuori tutti quei messaggi di posta elettronica a tutti. Ma con poche righe di codice, posso dispone di un sistema di inviare una e-mail a tutti su Facebook che desiderano loro un felice compleanno. Ecco, questo è quello che i cicli sono e perché sono qualcosa di prezioso e che i computer possono fare molto bene. 

DAVID J. MALAN: Quindi, se sei stato il destinatario di alcuni dei CS50 e di Spazio di Dropbox di ritardo, che in realtà è esattamente quello che abbiamo fare, utilizzando il codice proprio così. Abbiamo in sostanza, abbiamo un grande foglio di calcolo in cui persone sono state inserendo il loro nomi e indirizzi email. E abbiamo scritto un po 'di codice che può iterare su quegli indirizzi e sputare indirizzi univoci in caso qualcuno ha presentato più volte. E da allora in poi, inviamo un automatizzato e-mail da bot di CS50, compreso il codice coupon. 

Ora abbiamo anche guardato questo costrutto ultima volta. E questo è un particolare esempio di che cosa? Quindi, sì, un'espressione booleana. E la forma è destinata per catturare anche quello. Tutte queste domande del formare vero o falso in Scratch avrà un aspetto un po 'di qualcosa come questo. E chiamiamo questo un'espressione booleana. Questo è effettivamente vero o falso, sì o no. E 'un modo di rispondere a una domanda. 

E intanto è possibile utilizzare questi booleano espressioni all'interno di costrutti come questi, che di Naturalmente sono condizioni o rami, proverbiale forchette in mezzo alla strada. E possono guardare non solo in questo modo, ma possono anche hanno altre famiglie ad essi associati. E si può effettivamente avere un tre vie bivio o quattro vie forchetta nella strada, semplicemente nidificazione queste cose, come si vedrà in Scratch se non l'hai già. E come si può fare in C pure. 

Prendiamo un altro generalista guardare un alumnist, pure, che potrebbe presentare un approccio diverso a queste cose chiamate condizioni. 

BILL GATES: La gente fa decisioni di ogni giorno. Ad esempio, prima di andare fuori di te tipo di avere un'istruzione if che dice, se piove allora ho bisogno di ottenere la mia giacca. E i computer sono incredibili, una volta decidere questo tipo di dichiarazioni, che possono eseguire in modo affidabile queste cose a velocità incredibile. E così un programma per computer molto è un po 'di matematica e un po' if dove la decisione viene fatto. 

DAVID J. MALAN: Quindi, come si può sapere, era gente come Bill Gates, Paul Allen, e altri che veramente dato il via alla cosiddetto personal computer rivoluzione qualche anno fa. Ho pensato, prima di tuffarci in qualche Administrivia, avremmo relazioniamo un racconto dal Albuquerque, New Mexico Museum of Natural History e scienza in cui alcuni di Bill Gates ' e le prime storie di Paul Allen sono raccontati come abbiamo ora PC di oggi e Mac e altro ancora. Per questo, però, abbiamo bisogno di due volontari che hanno ottime voci di narrazione per leggere un copione ad alta voce. 

Va bene, che ne dici di tornare lì. Andiamo su. E che dire di fronte qui. Vieni giù. Prendete i vostri posti qui. Come voi ragazzi venire, una coppia di annunci amministrative. sezionamento, il processo di scegliere una sezione, darà inizio a questo Mercoledì al Venerdì. Più su quello prossimo Mercoledì a lezione. 

Sezioni Super, nel frattempo, sono qualcosa che offriamo la prossima settimana in base al quale l'intera classe è invitata di partecipare in scala abbastanza grande sezioni, una più confortevole, uno meno confortevole. E annunceremo i particolari di che, pure, entro questa settimana. 

Nel frattempo, le sezioni stessi, inizierà in tre del corso di settimana, indice zero, il che significa che questi sono un paio di settimane out. Quindi non preoccuparti. Non hai ancora perso nulla in questo senso. Nel frattempo, nel frattempo, se si avere amministrativamente tutte le domande, e-mail me e Devon e Gabe e Rob a questo indirizzo qui. 

Infine, impostare problema 0 è, naturalmente, fuori. Potreste aver notato sul sito web del corso. Esso dovrebbe fornire con tutte le risposte alle domande si potrebbe avere lungo la strada per iniziare con il problema insieme. Ma se vi trovate ha bisogno di una mano, con tutti i mezzi frequentano le ore di ufficio, Lunedi, Martedì, Mercoledì, Giovedi di questa settimana, la sera in quattro sale da pranzo. Vedere che ci URL delle indicazioni di di cui dell'orario di ufficio devono essere. 

Ora Incontriamoci nostro due ospiti qui oggi. Come ti chiami? 

JAY PAUL: Jay Paul. 

DAVID J. MALAN: Jay Paolo, piacere di conoscerti. 

HIKARI: Hikari. 

DAVID J. MALAN: Hikari? 

HIKARI: Hikari. 

DAVID J. MALAN: Hikari. Piacere di conoscerti pure. Jay Paul e Hikari hanno in davanti a loro su questi musicale si erge due script che ho stampato questa mattina dal New Mexico Museo di Storia Naturale e della Scienza. E quello che ho pensato Farei sulla testa è accompagnare il vostro recitazione dello script e questa storia con alcune immagini visive, senza sorprese. 

E quello che ho fatto in anticipo è pre-evidenziare il vostro script quello che si dovrebbe leggere, e ciò che si dovrebbe leggere. E faremo essenzialmente paragrafi appena si alternano. Quindi è molto simile si potrebbe hanno fatto in classe di inglese. Questo è davvero costringere il pubblico a credere nella tua storia qui. Lo facciamo? Così la storia qui è, abbiamo un BASIC, e comincia a Cambridge. 

JAY PAUL: Era inverno, 1974 a Cambridge, Massachusetts dove gli inverni possono essere freddi. Un barbuto, dai capelli lunghi College Dropout nome Paul Allen è stato drudging attraverso Harvard Piazza, assorto nei suoi pensieri. La sua principale preoccupazione in quei giorni era come ottenere il suo amico, Bill Gates, lasciare la scuola e andare in affari con lui. HIKARI: I due si erano già andati attraverso una serie di iniziative imprenditoriali insieme, con inizio alle Lakeside scuola di Seattle dove sono stati pagati in tempo computer libero di testare un computer PDP-10 in un momento locale condivisione azienda. Il piano più recente era stato quello di smettere scuola e formare una società di software. Allen aveva lasciato Washington State University. Ma all'ultimo minuto, Gates ha deciso di attaccare con Harvard. 

JAY PAUL: Quel giorno, attraversando Harvard Piazza, Allen individuato il mese di gennaio, 1975 numero di Popular Electronics con il titolo arresto terra, Kit di primo minicomputer del mondo per rivaleggiare con modelli commerciali. Sotto il titolo era una foto di una piccola scatola ornata con luci e interruttori. E 'stato chiamato il MITS Altair 8800. E Allen sapeva che questo era quello che stava cercando. 

HIKARI: Giorni di discussione seguita. Allen e Gates capito la significato della Altair. Avevano parlato spesso su microprocessori e sono stati in attesa di vedere cosa verrebbe fatto con loro. Ora c'era un kit minicomputer su la copertina di Popular Electronics. E a quanto pare non aveva ancora alcun software. Hanno immaginato una nazione di programmatori decrescente su MITS. E così hanno chiamato Ed Roberts, il capo della società, sostenendo di avere una versione del Linguaggio di programmazione BASIC quasi pronto per l'Altair. Non lo fecero. Ed Roberts deve aver saputo non l'hanno fatto. Stava diventando 10 chiamate al giorno da persone che avevano un BASIC quasi pronto. E la sua risposta magazzino era, "La prima persona che si presenta con un lavoro BASIC ottiene il contratto. " 

JAY PAUL: Gates e Allen non aveva mai visto un Altair. Non avevano mai nemmeno visto la Intel 8080 microprocessore nel cuore della Altair. Ma un paio di anni prima Allen aveva scritto un programma su un computer mainframe che emulato il funzionamento di un precedente Intel microprocessore. E questa volta hanno avrebbe fatto la stessa cosa. 

HIKARI: Con un processore Intel 8080 manuale al suo fianco, Allen si sedette a un Computer di Harvard PDP-10 e scrisse l'emulatore e software strumenti necessari per fare la programmazione. Nel frattempo Gates smesso di andare alle classi e si dedicò alla progettazione del BASIC, usando ogni trucco sapeva che per ottenere la dimensione al di sotto di 4 kilobyte. 

JAY PAUL: in Albuquerque, Ed Roberts ricevuto una telefonata da Gates chiedere per i dettagli su come il Altair gestito routine specifiche. Nessuno aveva mai chiesto prima. Ed Roberts ha cominciato ad interessarsi. 

HIKARI: Con lo sviluppo strumenti e il progetto pronto, Gates e Allen hanno scritto il codice sul PDP-10, arruolando un altro studente di Harvard, Monte Davidoff, a scrivere le routine matematiche. Dopo una notte finale programmazione, Allen riceve un aereo a consegnare il loro BASIC MITS. Ha trascorso l'aereo cavalcare preoccuparsi. E torna a Cambridge Gates era preoccupante. Avevano provato il loro BASIC e che aveva lavorato sull'emulatore. Ma cosa succede se l'emulatore è stato sbagliato? JAY PAUL: Mentre l'aereo avvicinato Albuquerque, Allen si rese conto che il loro BASIC, ora ordinatamente contenuta su un piccolo rullo di perforato nastro di carta, avrebbe inutile senza un separato programma, chiamato un caricatore, che direbbe il Altair come Per vedere l'essere nastro di carta immesso nella macchina telescrivente. Tirò fuori il taccuino e rapidamente scarabocchiato giù un programma di caricamento in linguaggio Assembly, poi manualmente che tradotto nelle 1 e 0 l'Altair avrebbe capito. 

HIKARI: Allen si aspettava un pulito, piccolo, azienda high tech gestito da uomini in giacca e cravatta. Quindi era sorpreso quando Roberts incontrò lui in aeroporto che sembra un ranch mano. Roberts è stato anche sorpreso. Quando lasciò cadere la Harvard programmatore in un hotel costoso, Allen ha dovuto confessare che non poteva permettersi la stanza. 

JAY PAUL: MITS, in sé, era situato in un centro commerciale polveroso. All'interno di una ingombra banco di lavoro era un Altair caricato con 5 kilobyte di memoria e collegati da un cavo ad una macchina telescrivente. Roberts e Chief Engineer, Bill Yates, aspettava ansiosamente come Allen attivata suo loader programma nel Altair. La telescrivente iniziato sbuffando come è tirato il nastro di carta attraverso il lettore di nastro. Ci sono voluti forse 15 minuti per caricare il programma. Poi la telescrivente bruscamente stampato un prompt di memoria, quindi un prompt pronto, e Allen cominciò a digitare Comandi di alcuni test. Per lo stupore di tutti, il software ha funzionato. C'erano degli insetti, naturalmente. Ma la cosa principale era ha funzionato. 

HIKARI: Più tardi, nel loro cammino verso una 3,00 dollari pranzo a Pancho di una vespa volò nella finestra del pickup camion e punse Allen sul braccio. Ma a quel punto nulla potrebbe rovinare l'umore. L'Altair ora aveva il suo BASIC, il primo software commerciale per una casa del computer, fatta da Paul Allen e Bill Gates, fare affari come Microsoft. 

DAVID J. MALAN: Molti grazie ai nostri due lettori. 

[Applausi] 

DAVID J. MALAN: Ora avete la vostra scelta, prima di partire, di una scintillante o un bagliore nel dark-- oh, attendere un sec, wait-- scintillante e un bagliore nel buio elefante da di CS50 proprio Cheng Gong. HIKARI: Aw, grazie. DAVID J. MALAN: Tutti a destra, grazie mille. [Applausi] DAVID J. MALAN: Così vera storia. Questo per dire che tutti questi macchine e la facilità con cui si usarli subito e prendere per scontato, davvero iniziato qui, a pochi passi da questo teatro reale. E ora oggi, se non siete stati, questo è Maxwell Dworkin, il computer scienze edificio, anche dietro l'angolo. E al secondo piano di questo edificio fa appendere tre pagine dal codice sorgente originale che Bill Gates e Paul Allen ha scritto. In effetti, se l'uso si zoom in è possibile vedere non solo i loro nomi nella tipo di originale, ma anche le loro firme che adornavano un alcuni anni fa, quando l'ultima visitato. 

Ma ciò che è stato particolarmente convincente questo è ciò che si prefiggono di fare era quello di scrivere un programma che farebbe consentire ad altre persone di scrittura i propri programmi. Al momento tutto quello che c'era con questa macchina Altair fatta da MITS. E tutto quello che serviva era un modo di rendendo facile per hobbisti e persone ci piace in questa stanza in realtà programma che senza necessariamente capire Codice Assembly, o macchina codice, o Dio non voglia, 0 e 1. Noi programmatori, come quelli in questa stanza, ci vogliono essere in grado di esprimere noi stessi molto più simile pseudo codice anche se è un po 'più nit esigente di quanto abbiamo parlato la settimana scorsa. Non vogliamo scrivere codice come questo, che Paul Allen e Bill Gates ha fatto. Noi, invece, vogliamo scrivere codice che sembra un po 'più user friendly. 

Ora, questo è un linguaggio noto come BASIC. E i numeri di riga sono ciò che si utilizzare per numerare semplicemente le righe di codice che si sta scrivendo. Non hanno nemmeno bisogno di farlo in questi giorni. Ma si può vedere qui come PRINT "ciao, mondo" sarebbe davvero presumibilmente stampare proprio questo. E così quello che Bill e Paul fatto è stato permettere alle persone di scrivere codice come questo invece di-- se si dà un'occhiata al informatica wall-- codice come questo. 

In realtà, CS50 recente avuto l'opportunità di sedersi con il professor Harry Lewis nel Computer Science Department, che effettivamente insegnato Bill Gates alcuni anni fa, ed è qui in piedi davanti quelle tre pagine di estratti. Diamo uno sguardo. 

HARRY LEWIS: Quello che abbiamo qui è un quotazione di un pezzo precoce di software scritto da Bill Gates e Paul Allen, i fondatori di Microsoft. Quindi il codice è interessante per due ragioni. Prima di tutto, è diventato Primo prodotto di Microsoft, che era un interprete per il linguaggio di programmazione BASIC. E in secondo luogo, questo è stato uno dei primi tentativi per creare un interprete così ordinario persone potrebbero utilizzare i personal computer. 

Così Bill Gates è stato un laurea ad Harvard. Ho iniziato a insegnare ad Harvard nel 1974. Ciò è stato fatto nel 1975. Così è stato all'inizio della sua carriera e all'inizio della mia carriera. Io in realtà insegnato Bill in un corso in questo periodo. Paul Allen non era un Harvard studente, ma ha era stato un liceo compagno di classe di Bill Gates. Se venite e guardate al profilo, avrete effettivamente trovare una terza nome, Monte Davidoff, che era compagno di classe di Gates qui a Harvard. 

OK, quindi ecco un interessante commento qui. Si dice "In 4K può cancellare radice quadrata ma per cicli dovrebbe ancora funzionare. " OK, allora ciò significa che non ci sono due modi per compilare questo programma. Uno era per funzionare su una versione di questo computer Altair che aveva solo 4K parole di memoria, 4.096 parole di memoria. Ma la versione grande aveva 8K. E quindi cosa dice questo è che nella versione 4K si doveva eliminare alcuni codice per renderlo in forma. E una delle cose che saranno eliminati sarebbe la routine di radice quadrata. Ma a quanto pare il cicli for dovrebbe ancora funzionare anche quando si sta compilando giù solo per la versione 4K del computer. DAVID J. MALAN: Così uno dei temi, come vedremo in informatica, è questa nozione di stratificazione e astrazione, e davvero in piedi sulle spalle di persone che sono venuti prima di noi, non a differenza di alcuni dei Bill Gates e Paul Allen narrativa qui. E ciò significa che oggi possiamo dare per concesso che le cose sono in realtà più facile per noi di scrivere codice. Infatti il ​​codice, come abbiamo detto il Venerdì, è più tecnicamente noto come codice sorgente. Ed è questo l'inglese come sintassi che è più corretta e più ben definito di qualcosa come pseudo codice, per che non esiste una definizione formale. 

E oggi che cosa stiamo andando di concentrarsi su è il codice sorgente che assomiglia a questo, che certamente a prima vista sembra completamente criptico. E, francamente, è il modo più esteticamente complesso di quanto il programma sottostante è. Tutto questo programma fa, richiamo, è che cosa abbiamo detto? Essa si limita a stampare "ciao mondo". Eppure guardate tutte le cose abbiamo bisogno avvolgere intorno a quel molto semplice frase. Ma prima di tutto di queste righe e più renderà molto più senso per voi. 

E il flusso è il seguente. Quello che dobbiamo a nostra disposizione è quello di prendere il codice, come sorgente codice che abbiamo appena visto. E abbiamo bisogno di un nuovo programma a correre attraverso. Abbiamo bisogno di algoritmi che possono convertire il codice sorgente, come questo, in codice oggetto, 0 e 1. In altre parole, ciò stiamo andando a imparare oggi è come fare questo, scrivere codice sorgente sulla parte superiore, passarla come ingresso ad una speciale programma noto come un compilatore, e stiamo andando a produrre codice oggetto. Che è solo un modo elegante di dicendo che prenderemo qualcosa che assomiglia a questo, passare in un programma chiamato compilatore, la produzione di codice oggetto che assomiglia a questo. 

Quindi questi sono letteralmente i modelli di 0 e 1 che sono comprese da un Computer di Intel in questi giorni, che se interpretato dalla CPU, i cervelli all'interno di un computer, letteralmente stampare, molto semplicemente, "ciao mondo". Ora c'è modo più 0 e 1 che si sarebbe la speranza potrebbe essere necessario per questo. Ma questo è perché stiamo costruendo su una buona dose di complessità che possiamo ormai dare per scontato. In altre parole, un sacco di persone intelligenti ci hanno dato un sacco di strumenti interessanti e potente software con cui abbiamo può ora fare progetti della nostra. 

Quindi cerchiamo di iniziare. Considerando che lo scorso Venerdì, e per un problema Set 0 questa settimana, potrai giocare in un mondo che assomiglia a questo. Oggi Avvio e Problem Set 1 la prossima settimana, il codice sta andando a guardare un po 'più criptico, ma è funzionalmente sarà lo stesso. Quindi avviso, è superiore Scratch, di fondo è C. Francamente Scratch è molto più user amichevole e accessibile. Ma se ora si confronta visivamente superiore a fondo, c'è una specie di uno a uno corrispondenza tra la pezzi del puzzle e la lingua stiamo per giocare. In particolare, dire, il blu pezzo di puzzle sulla parte superiore, è apparentemente equivalente a quello parola chiave o una frase speciale in questa lingua chiamato C? PUBBLICO: Printf. DAVID J. MALAN: printf. Ciò significa che la stampa formattata. E questo è solo una fantasia modo di dire printf in C sta per essere una dichiarazione o una funzione che consente di stampare qualcosa sullo schermo. Che cosa stampa sullo schermo? Qualunque cosa gli si dice di dentro di citazioni, all'interno di parentesi. Quindi, di nuovo, è vero, c'è un sacco di roba che devi tenere a mente, parentesi, virgolette, punti e virgola, e tutto questo. Ma tutto questo è una sorta di questo il punto. L'asporto interessante per ora è che il blocco di voce in Scratch è più o meno equivalente a printf in C. 

Nel frattempo, il pezzo di puzzle giallo fino in alto, quando la bandiera verde cliccato, è probabilmente equivalente a quanto parola chiave qui? PUBBLICO: principale. DAVID J. MALAN: So principale. Forse int, forse nulla. Ma tipo principale di suoni come è importante, e infatti lo è. Così, quando la bandiera verde cliccato è, ancora una volta, il pezzo del puzzle che prende il via un intero programma Scratch. Ma stiamo per ora iniziare a chiamare quella principale, questa funzione denominata principale. 

Ora, nel frattempo faremo generalizzare questo modo seguente. Potremmo dire chiamare una funzione. E potrebbe guardare in particolare come questo. Beh, che dire loop? Se vogliamo iniziare la conversione o traducendo più in Scratch a C, questa cosa qui apparentemente appena dice "ciao mondo" per sempre. Quindi, se si associa questi script con un gatto in Scratch, sta solo andando a continuare a dire in una sorta di bolla, "Ciao mondo, ciao mondo, ciao mondo ", fino alla nausea, per sempre. Se vogliamo fare qualcosa di simile in C, è andare a guardare un po 'criptico. Ma siamo in grado di ottenere lo stesso risultati, come vedremo alla fine scoprire, con una sintassi come questo. Ho intenzione di utilizzare di nuovo printf, perché alla fine della giornata Voglio stampare "ciao mondo". E sto a quanto pare con un parola chiave che non è per sempre. E 'invece la parola tempo. Ma solo semanticamente in Inglese, mentre il tipo di suggerisce una sorta di loop o ciclo. 

Quindi, che sembra essere la parola chiave che C utilizza. E se è vero, perché lo fa mentre vere efficacemente significa per sempre? Ebbene, mentre, come vedremo presto apprezzare ancor più, ha questo tra parentesi accanto ad esso dove si può mettere una espressione booleana. E fintanto che espressione è vera, questo codice, come indicato tra queste due parentesi graffe, come li chiameremo, sarà solo continuare a correre ancora e ancora. 

Tant'è vero è vero. Così, mentre i veri mezzi basta fare questo per sempre. E 'quasi una stupida costruire per esprimere se stessi. Ma non ci fu per sempre parola chiave in C. Non c'era tempo. E c'era una molto semplice Espressione booleana come true. E così questo, vedremo, ottiene lo stesso risultato. 

In quale altro modo si potrebbe implementare un ciclo? Beh, in Scratch si potrebbe codificare un numero specifico di iterazioni nel ciclo qui. E così questo è esattamente quello che abbiamo potrebbe fare in questa versione di C, per cui abbiamo un cosiddetto ciclo for. E il ciclo for qui sta per scorrere, un po 'criptico, dal valore 0 sul piano ma inferiore a 10. 

Ora variabili in Scratch. Non potrebbe avere avuto occasione del loro utilizzo. Ma qual è il punto, in generale, di una variabile abbiamo detto la settimana scorsa? Che cos'è? 

PUBBLICO: Punti. 

DAVID J. MALAN: Per il punto? Oh, punti. OK, tenere traccia dei punti, per esempio, in un gioco. O più in generale fare quello che con il variabile? Qual è l'utilità di loro? 

PUBBLICO: Memoria. 

DAVID J. MALAN: Sì, così la memoria. E 'per memorizzare qualcosa. E il tipo di sciocco I visivo usato l'ultima volta era come questa ciotola di vetro. E se volessimo memorizzare qualcosa all'interno di una variabile, per esempio in questo momento il valore è sei, perché ci sono sei palline da ping pong in qui. E 'solo una specie di stoccaggio contenitore che sotto la cappa è realizzato con bit, 0 e 1, tuttavia un computer capita di farlo. 

Quindi, in Scratch, se vogliono avere una variabile, possiamo utilizzare un blocco arancione come questo. Chiameremo quel contatore in questo caso particolare. Ho inizializzato a 0. E ciò che io allora faccio? Per sempre, dire contatore, che se si gioca con quella in Scratch, ti basta vedere Scratch. Il gatto o qualunque costume si indossa lui parlerà il numero in questione. 

Modifica contatore da 1 è come incrementare di 1. E così questo sta per contare da che cosa allora? Da 0 fino all'infinito, o fino a quando si rompe Scratch, o fino a che tipo di perdere interesse nel guardare quanto in alto si può effettivamente contare. 

Così come potremmo convertire questo a C? Sta andando a guardare un po 'criptico. Ma ancora una volta, se si guarda a ogni di queste linee singolarmente che tipo di formazione in generale. Quindi, apparentemente int sta per avere qualche significato speciale in C. Vedremo ancora una volta che. Per inciso significa intero. Quindi significa solo numero. Ecco, questo è il tipo di ciotola di vetro che voglio, uno che può memorizzare i numeri, non il ping pong palline. E ho intenzione di utilizzare il segno di uguale lì per assegnare un valore di 0. Ecco, questo è abbastanza come set contatore a 0, ma in C. 

Nel frattempo, mentre il vero, che è stato equivalente, naturalmente, per sempre, anche se è un po 'criptico, e poi all'interno delle parentesi graffe. E si può pensare di queste parentesi graffe, che è possibile digitare sulla tastiera, come davvero essere come la curvatura in questi blocchi ciclo gialli in Scratch. Esso comprende più righe di codice. 

Printf sta ottenendo un po 'paura ora perché vedi cita non solo tra parentesi. Ma cosa c'è di nuovo sintatticamente in questo esempio? C'è una percentuale d. E poi backslash n è lì. Abbiamo visto che prima, anche anche se non ho menzionato esso. Poi c'è una virgola. E poi c'è un contatore. 

Ma vedremo in un momento che questo è solo un modo standard di dire una stampa "Numero decimale", citazione, unquote, un numero decimale. Ma ho intenzione di dirvi più tardi cosa che il numero decimale è. Quindi il fatto che ci sia una virgola in questa linea dicendo printf, significa andare avanti e di stampa un numero decimale. Oh, e dal modo, il numero è qualunque sia il valore di questa variabile è. E così per renderlo più chiaro, vedremo un esempio prima lungo che coinvolge esattamente printf nel contesto dei programmi reali C. 

Ora basta avvolgere un po ' di questi costrutti. Espressioni booleane, non si potrebbe avere occasione di utilizzare questi nel vostro programma ma si potrebbe molto bene, soprattutto se si utilizza condizioni. E così questi due esempi di Gratta dire se x è minore di y, o se x è minore di y ed y è minore di z, come potremmo tradurre questo? 

Beh, in C è solo andando a guardare come questo. Un po 'criptiche, più parentesi, alcuni strani e commerciali, ma fondamentalmente le idee sono così semplici come sono nel mondo pezzo di puzzle. Stiamo semplicemente controllando se qualcosa è inferiore a qualcos'altro. 

Come sulle condizioni? In poche parole in inglese, cosa fa questo pezzo di codice Scratch ne diresti? 

PUBBLICO: Confronta due numeri. 

DAVID J. MALAN: Confronta due numeri, e se x è minore di y si dice tanto. Se x è maggiore di y si dice tanto, altro se x è uguale a y dice tanto. Ora, da dove x e y vengono? Chi lo sa. Questo pezzo di Scratch codice è fuori contesto. Ma quello che vogliamo fare ora è tradurre questo solo per un momento a vedere. 

Così come si ottiene agio questa settimana in Problem Set 0 giocando in questo mondo sulla sinistra, realizzare che le idee non cambiano questa settimana o la prossima o al di là. Stiamo semplicemente andando a iniziare a scrivere cose in modo diverso con il nostro tastiera invece del nostro mouse. 

Quindi, se x è minore di y, e c'è qualche parentesi lì, poi ci sono alcune parentesi graffe di nuovo al tipo di incapsulare esso proprio come i pezzi del puzzle giallo fanno. E ho intenzione di printf x è minore di y e così via. 

Ciò che è bello su C, come potete vedere qui, è che non si ottiene questo nidificazione, nidificazione, nidificazione che è necessariamente andando a spingere il codice a destra. È invece può avere tutto scaletta ordinatamente piace questo. Ma questo è solo un valore estetico dettaglio vedremo di nuovo in poco tempo. 

Bene. Quindi, che ci riporta al questo criptico programma cercando. Facciamo in realtà scrivere del codice. Ora come si fa a scrivere codice? In tutti questi anni che ho posseduto un Mac o un PC, desktop o portatile, hai effettivamente avuto la possibilità per iniziare a scrivere codice di programmazione. Ma probabilmente stai manca un tipo speciale di programma. Si può certamente scrivere codice. Ma non si può necessariamente, fuori dalla scatola, convertire il codice sorgente in codice oggetto, 0 e 1 senza che sul vostro computer? PUBBLICO: Compiler. DAVID J. MALAN: Così un compilatore, a destra. Ora la maggior parte di voi probabilmente non possiedono un compilatore, non hanno mai scaricato un compilatore. Ma vedrete potete scaricarlo come la maggior parte qualsiasi altro pezzo di software. Nel mondo di Mac OS, si potrebbe scaricare o hanno scaricato già qualcosa chiamato Xcode o GCC o Clang. Se si proviene da Finestre mondo si potrebbe hanno scaricato Visual Studio, Visual Basic ambienti del genere. Ci sono decine di compilatori in questi giorni che si potrebbe utilizzare. Ma il corto di esso qui è che sarebbe un dolore e, francamente, un tecnologico incubo per centinaia di persone di varia configurazioni dei computer a tutti configurare le loro macchine esattamente nello stesso modo in modo che possiamo essere tutti sulla stessa pagina. 

Quindi quello che, invece, facciamo in CS50 è vi diamo un ambiente standard, un Ambiente Linux che è andando a guardare un po ' qualcosa di simile. Vedrete più di questo nel Problema Set 1 specifica che andrà on-line questo Venerdì sera. 

E che cosa significa è che d'ora in poi stanno per essere in grado di scaricare e installare un programma chiamato CS50 Appliance. E si sta andando a scaricare e installare un altro programma chiamato un hypervisor, che è solo un modo elegante per raggiungere tale obiettivo. Se possedete un Mac o PC o una Computer Linux o un computer Solaris, o qualsiasi altra cosa operativo pazzo sistema che si sta eseguendo, hai intenzione di scaricare un programma chiamato hypervisor che è andare a correre il CS50 Appliance sul tuo computer non importa quale sia il sistema operativo è. Un hypervisor in altre parole converte la nostra roba per qualsiasi lingua, qualunque istruzioni tuoi proprio calcolatore capisce. 

Quindi questa è una stratificazione. E di nuovo, questo è una specie di tematiche di computer la scienza, la costruzione in cima delle cose. Si potrebbe avere di Windows. Si potrebbe avere Mac OS. Ma a partire dalla prossima settimana sei andando a hanno scaricato un software gratuito chiamato hypervisor. Stai andando a hanno scaricato un pezzo di software chiamato CS50 Appliance. 

Che sta andando a correre in hypervisor, che sta per eseguire sul computer. E il risultato finale è che tutti noi avere una semplice finestra come questo sul vostro Mac o PC che ci dà l'illusione di tutti eseguire lo stesso sistema operativo, senza altro impatto sul vostro computer. E si può schermo intero e sostanzialmente comportarsi come se si esegue un sistema operativo chiamato Linux, che è ciò che il CS50 Apparecchio si riferiscono. 

Quindi cerchiamo di effettivamente utilizzare questo ora di scrivere un programma. È possibile scrivere un programma utilizzando Microsoft Word. È possibile scrivere un programma utilizzando TextEdit o Notepad, o WordPad, o praticamente qualsiasi parola programma di elaborazione hai mai usato. Ma la realtà è che non si dovrebbe usare veramente uno di questi programmi. Certamente non dovrebbe usare qualcosa di simile a Microsoft Word, che ha rivestimento e corsivo grassetto e font più grandi e caratteri più piccoli, perché il computer non lo fa preoccuparsi di tutto questo. Tutto il computer è andando a preoccuparsi è Inglese come istruzioni scritte in C. 

Così che cosa faremo dentro del Appliance CS50 è utilizzare un programma liberamente disponibili, ed è preinstallato in questo apparecchio, chiamato Gedit. E Gedit è solo un super semplice editor di testo come TextEdit di Mac OS, come Blocco note di Windows che sta per guardare un po 'di qualcosa come questo. 

Quindi cerchiamo di realtà non guardare diapositive di questo. Ma cerchiamo di andare effettivamente in l'ambiente stesso. Ho intenzione di andare avanti e log in, in questo altra finestra, al mio CS50 Appliance, che ho pre-installato sul mio portatile qui. 

Si noti che, come Windows e Mac OS, è ottenuto alcuni menu. Come di Windows mette laggiù invece di Mac OS, che mette giù lì. Ma la realtà è che è tutti i tipi dello stesso. E qui è un intero mazzo di software. C'è Dropbox. C'è un sacco di accessori, programmi grafici che ti utilizzare in seguito nel termine per i set di problemi. C'è un browser web integrato in modo che questo è un computer pieno titolo all'interno di un computer. 

Ma ho intenzione di fare clic su questo più a sinistra icona bianco qui, che è l'icona per Gedit. E sta andando ad aprire una finestra che ha tre pannelli ad esso, uno a sinistra, uno superiore e uno inferiore. 

Ora è in questa top quella giusta che Ho intenzione di scrivere in realtà un po 'di codice. Quindi cerchiamo di fare questo ,. Ho intenzione di andare su File, Salva. E non potrebbe mai aver visto questa particolare finestra prima. Ma questo è come Mac OS o Windows. E 'solo una finestra con tutte le cartelle che ho dentro di questo computer. 

E ho intenzione di risparmiare il file come hello.c. E ho intenzione di andare avanti e fare clic su Salva. E ora notare ho una scheda in alto a sinistra chiamato hello.c. Quindi probabilmente abbastanza familiare, anche se non hai usato questo particolare programma prima. 

E ora vado a digitare quelle sequenza abbastanza criptico di comandi che abbiamo visto poco fa. Includere, standard I / O.h. Più su quello presto. Int void main, riccio aperto brace, chiusa parentesi graffa. E poi dentro ci penso è dove abbiamo avuto "ciao mondo", punto e virgola. E ora salva. 

Quindi questo è un programma scritto in C, scritta, dunque, nel codice sorgente. Ma non posso semplicemente eseguire questo programma. I tipi di voglia di raddoppiare fai clic su un'icona da qualche parte, ma nessuna icona esiste altro che il file di codice sorgente. Che, ancora una volta, è il processo, ora che Ho bisogno di eseguire questo file tramite? PUBBLICO: Compiler. DAVID J. MALAN: Così un compilatore. Quindi, in diversi computer si farlo in modi diversi. Ma quello che abbiamo fatto qui in Appliance CS50 che è rappresentativo di come si potrebbe fare questo su molti sistemi diversi, è che io sono semplicemente andando a eseguire un comando chiamato make. E fare è letteralmente sta per farlo. Fammi un programma. 

Quindi, fare sta per eseguire un compilatore per me. E il nome del programma Voglio fare è ciao. Ora fate è un programma. E fare è abbastanza intelligente per rendersi conto che se io dico fare ciao, è andare a guardare automaticamente per un file chiamato ciao.c solo perché questo è il modo in cui è configurato. 

Così, quando ho adesso premi invio qui, questo pazzo linea criptico appena stato eseguito. E credimi, prima lungo, entro pochi giorni, capirete che cosa tutto di quei mezzi senza senso. Ma per ora, è sufficiente sapere che fare esecuzione trigger di un compilatore. In altre parole, si pensa un compilatore sul mio computer che è pre-installato sul Appliance CS50 che ci consegniamo a voi in Set Problema 1. E poi ha preso ciao.c come ingresso, e prodotto apparentemente 0 e 1 come output. 

E per impostazione predefinita ciò che fa è salva quei 0 e 1 in un file chiamato ciao. E anche se questa sintassi troppo potrebbe essere una novità per voi, semplicemente dicendo dot tagliare ciao sta per essere il mezzo con il quale ho eseguito questo programma. 

Per ora e per almeno un paio di settimane, quasi tutti i programmi scriviamo stiamo per essere in finestre di testo in bianco e nero. No topi, no click, senza finestre, senza icone. Abbiamo intenzione di mantenere le cose semplici e concentrarsi sulle idee alla base inizialmente prima di arrivare a qualcosa di livello superiore, ad esempio, come il gioco di rottura che abbiamo parlato circa nella prima lezione la settimana scorsa. 

Così, quando ho colpito Inserisci qui, è equivalente in un testo unico ambiente al doppio clic su un'icona chiamata ciao. Che cosa si aspetta volontà accadere quando ho colpito Invio allora? 

PUBBLICO: Sarà print "ciao mondo". 

DAVID J. MALAN: Speriamo stamperà "ciao mondo". E in effetti lo ha fatto. Ora c'è stato un po ' sintassi criptica qui. Diciamo solo per riavvolgere un attimo e vedere se ci non può iniziare dedurre semplicemente armeggiare, cercando e non riuscendo, quanto a che cosa sta succedendo qui. Che cosa succede se mi libero del backslash n? Ora alcuni di voi che hanno programmato prima, probabilmente sanno subito cosa significa. Ma per quelli di voi che hanno mai programmato prima, almeno pensare a te stesso cosa sta succedendo a cambiare quando ho eseguire nuovamente questo programma? Quindi ho intenzione di tornare giù al mio finestrella bianco e nero, che è la finestra in cui Posso compilare questo. Ho intenzione di ricompilare ciao. Stiamo andando a vedere lo stesso sequenza di comandi criptico. E ho intenzione di fare barra puntino ciao. E ora qualcuno, se si farebbe, che non ha mai programmato prima, quello che potrebbe essere diverso questa volta? Già. 

PUBBLICO: Non si fermerà stampa "ciao mondo". 

DAVID J. MALAN: Sta andando a-- dispiace? 

PUBBLICO: Non si fermerà stamparlo? 

DAVID J. MALAN: Non sarà arrestare la stampa "ciao mondo". Quindi non è una cattiva idea. Altre idee? Già. 

PUBBLICO: Messaggio di errore? 

DAVID J. MALAN: Errore messaggio, OK, potrebbe essere. Cos'altro? PUBBLICO: Si potrebbe stampare il staffa con il punto e virgola come bene? DAVID J. MALAN: Potrebbe stampare il staffa con il punto e virgola come bene. Così forse che backslash allora è un po ' tipo di terminous che è importante. Eventuali altri pensieri? 

Quindi tutto buone idee. E in effetti, sta andando essere un messaggio di errore. Questo è probabilmente più probabile essere la risposta in generale per le prossime settimane come impariamo a codificare qui. 

Ma per ora ricordare che i computer fare solo ciò che gli si dice di fare. Molto simile al ridicolo di arachidi burro e gelatina di esempio. I nostri computer umani dovevano solo a fare quello che hai detto loro di fare. Quindi, in questo caso, se si non dire al computer per spostare il cursore lampeggiante che al riga successiva, non sta andando a farlo. Così, quando ho eseguito questo programma ora, notare la differenza. 

Sembra un insetto. Si tratta di un bug di estetica, forse. Ma ciò che è diverso in questa uscita verso l'ultimo ovviamente? Già. 

PUBBLICO: Non ha fatto una nuova linea. 

DAVID J. MALAN: Non ha fatto una nuova linea. Ora, quelli di voi che avere pagine web forse fatti prima, si potrebbe sapere della Tag BR o il tag di paragrafo, molto simile nello spirito. Un browser web ignorerà voi fino si dice esattamente cosa fare. Allo stesso modo, è un linguaggio come C solo intenzione di fare quello che gli si dice di fare. 

Quindi la ragione che tutti questi esempi, finora, hanno tipo di casualmente avuto questa barra rovesciata in là, ecco i mezzi con il quale ti esprimi come un carattere di nuova riga, per così dire. E si può tipo di apprezzare, forse, che questo apparirebbe tipo di stupido se non altro. Se volevo una nuova linea, appena premendo Invio e poi tipo di macellare il codice come quella non dovrebbe davvero strofinare il modo giusto. E anche se non lo fai veramente a cuore a questo punto, vi renderete conto che questo non è un particolare buon pezzo cercando di codice. 

E così ciò che il mondo anni fa, è deciso che quando si vuole mettere il cursore su una nuova linea in modo esplicito, devi dire in modo esplicito nuova linea, backslash n. E c'è qualche altro simboli come tale. Ma per ora ci limiteremo a concentrarsi sulla backslash n. 

Ora facciamo il programma un po 'più interessante. Ho intenzione di andare avanti e questa volta aprire un nuovo file. Io vado a salvare questo come ciao-1.c. E proprio per i calci, ho intenzione di andare messo nella mia cartella Dropbox. 

Come vedrete nel CS50 documentazione per l'apparecchio, entro questa settimana per il problema Set 1, ci incoraggiamo di utilizzare Dropbox o qualche servizio equivalente, perché allora tutto il codice di sta per essere eseguito il backup automaticamente. Ed ecco perché ho andato in questa cartella qui. 

E ora ho intenzione di scrivere un programma leggermente diverso. Includere, standard I / O.h, int void main. E poi qui printf, ciao mondo, che è esattamente lo stesso come prima. 

Ma ora voglio stampare qualcosa che è un po 'diverso. Voglio stampare, dire: "Ciao, David." Va bene, quindi ovviamente, dovrebbe auspicabilmente essere il caso che se io ricompilare questo programma, eseguire nuovamente esso, sta andando a dire "ciao, David." 

Ma cosa succede se voglio introdurre questo tipo di variabile, l'idea di un contenitore che sta succedendo per memorizzare D-un-v-i-d e non è difficile che il codice nel mio programma. Beh, quello che se comincio fare qualcosa di simile? 

String s, quindi questa è una variabile. Se si desidera una stringa, a.k.a. una parola o una frase. Una sequenza di caratteri è quello abbiamo in programmazione chiamiamo una stringa. Stiamo solo andando a genericamente chiamata it s, perché è un bel nome semplice. Ma potrei chiamarlo nulla. 

Io vado a dire eguali stringa s tra virgolette, "David," punto e virgola. E ora voglio inserire I-d D-un-v-in quello che sto stampa. E prima abbiamo visto un teaser su lo schermo di una sintassi speciale che ci ha permesso di sostituto in un valore. Qual è stata la speciale simbolo di alcune diapositive fa? 

Così per cento. A quel tempo era per cento d per numero decimale. Non mi sembra davvero rilevante qui. Si scopre che c'è un altro simbolo di percentuale, che è cento s, che significa per un segnaposto per una stringa. 

Così ora, molto semplicemente, io sono intenzione di andare fare ciao-1, perché questo file chiamato ciao-1.c, e premere Invio. E ho fatto un casino. Cosa sta succedendo? Bene, qui è dove dobbiamo cominciare a Apprezziamo il fatto che siamo in questo comando ambiente linea, questo testo unico ambiente. Non c'è click sulle icone come le cartelle in questo momento. E ripensare un attimo fa. In quale cartella ho detto Mi stavo salvando il mio codice? Quindi la cartella Dropbox. Avrebbe potuto essere chiamato nulla. Ma capita di essere chiamato Dropbox. Quindi in qualche modo bisogno di fare doppio clic su tale cartella Dropbox al fine di ottenere in esso e ottenere il mio codice chiamato ciao-1.c. In realtà, lasciami andare avanti e ridurre al minimo questa finestra solo per un momento. Proprio come Windows e Mac OS, ci sono cartelle in Linux. Ci sono cartelle nella CS50 Appliance. E 'solo in questo momento ci stiamo limitando noi stessi a questo ambiente testo. 

Ma se faccio doppio click su Dropbox, notare ci è il file che voglio compilare. Ma ho bisogno di questo in bianco e nero finestra di terminale, per così dire. Ma ho bisogno, quindi, di muoversi in quella cartella o directory. Così un po 'arcano, ma ti abitui anche a questo. 

Nel mondo di Linux, che è ancora operativo Sistema stiamo in esecuzione all'interno del CS50 Appliance, c'è un comando chiamato CD. Il che significa che posso fare CD, spazio, Dropbox. CD, cambiare directory. Destra. Indietro nel giorno in cui le persone erano inventare computer e di funzionamento sistemi come questo, hanno voluto digitare i tasti minor numero possibile. Quindi il modo più semplice per dire directory cambiamento era del CD. 

Quindi, se ho colpito CD, spazio Dropbox, notare ciò che è cambiato qui. All'interno delle parentesi l'apparecchio è di tipo di me assecondando e ricordarmi dove mi trovo. Quindi la cartella aperta è Dropbox. Se ora digito ls per lista, ancora una volta succinta, perché la gente non voleva digitare nel giorno l-i-s-t. Così hanno invece reso ls. 

Invio. Notate vedo due cose, ciao-1.c, e poi questa cosa criptica, fonte 1m. Questo è solo il mio modo di dire codice sorgente per 1 settimana Lunedi. Questa è una cartella che ho scaricato da Sito web di CS50 che prima di oggi ho fatto e appena messo in apparecchio in anticipo. 

Ma per ora l'unica cosa che abbiamo interessa è rendere questo programma. Così, quando digito fare ciao-1, Enter. Accidenti. Qualcosa è andato storto. Quindi cerchiamo di prendere in giro questa parte. E purtroppo questo è dove le cose ottenere un po 'stressante in un primo momento, almeno se hai mai programmato prima. 

Mio Dio. Ho scritto un programma di due linee e Ho quattro linee di errori. Così che cosa sta succedendo qui. In primo luogo scorrere sempre indietro e trovare il primo messaggio di errore, perché compilatori spesso solo ottenere confuso da ciò che voi e io sì. I compilatori sono abbastanza stupida. Faranno solo fare ciò che dite loro di fare. E se li si confondono, sono solo andando a tipo di vomitare le loro mani e magari lanciare più messaggi di errore che sono in realtà rilevanti. 

Quindi diamo un'occhiata alla prima. Super criptico in un primo momento. Ma preavviso, ecco il nome del file in cui ho avvitato a quanto pare. Colon 5, 5 colon significa semplicemente su linea 5 al quinto carattere. Così quinta colonna di caratteri, se si vuole, errore. L'utilizzo di stringa identificatore non dichiarato. Intendevi serie n? 

No, volevo dire stringa. E poi è una specie di copia e incolla quello che ho scritto a disegnare davvero il mio attenzione a dove ho fatto un casino. Così, per qualche motivo C, o almeno il compilatore non capisce la stringa di parola. E questo perché abbiamo fatto in su. Quindi stringa non esiste in C. Cosa CS50 fa, per le prime settimane solo della classe, è forniamo qualche formazione ruote, per così dire. E mettiamo queste ruote di formazione all'interno di un file speciale chiamato CS50.h. 

Quindi questo è il secondo di due file di nomi che apparentemente terminano in punti h. Facciamo riavvolgere. Printf è una dichiarazione o una funzione che stampa a quanto pare qualcosa allo schermo. Ma non hai visto me implementare printf, a destra. Qualcuno anni fa, attuate printf. In quale file vuoi scommettere che o ha messo l'attuazione per printf, il codice per printf? 

In un file chiamato standard di I / O.h. In realtà, è probabilmente in due file, standard I / O.h, che sta per intestazione file e standard I / O.c, che sta per C del codice sorgente. Così lui o lei qualche anno fa piazzati il codice che hanno scritto in quel file modo che le persone come noi anni dopo possono includere, per così dire, nei nostri programmi. 

E in effetti, questo è ciò che il segno di cancelletto seguito dalla parola comprendono fa. Sembra sul disco rigido locale, trova il file chiamato standard di I / O.h, e poi copia efficacemente e Paste all'interno del mio file. Così ora il mio programma sa come stampare sullo schermo. 

Così da questa logica, dove stringa è definita? 

PUBBLICO: CS50.h. 

DAVID J. MALAN: CS50.h. E in effetti, questo è quello che, il nucleo di personale, hanno fatto. Abbiamo inventato un paio di tipi di dati, per così dire, come una stringa, in aggiunta a quelle che ottenere gratuitamente, come un int. E vedremo altri come un char per un carattere e un paio di più. All'interno di CS50.h apparentemente è almeno qualche cenno di stringa. 

Così ora lasciami andare avanti e rieseguire make ciao-1. Io lo zoom di nuovo e incrocio le dita. Ora, avendo fatto uno cambio ho risolto la maggior parte delle cose. Ma porca miseria. Più percentuali di argomenti dati. Che cosa ho fatto di sbagliato questa volta? 

Quindi è ancora piuttosto criptico. Ma questo errore è accesa linea 7 e carattere 21. Quindi cerchiamo di andare a cercare qui. E 'un po' sottile. Ma se si pensa a cosa le idee fondamentali qui sono, forse possiamo prendere in giro questa parte. 

Quindi printf è il nome della funzione. Parentesi, finora, è proprio come quello che abbiamo messo in giro la roba stiamo passando come input per una funzione. Va bene, solo un arbitraria convenzione umana. Utilizzare le parentesi. All'interno di queste parentesi stiamo mettendo virgolette, e quindi una stringa come "ciao mondo". 

Ma in che nell'esempio precedente molto brevemente fatto guardiamo con Scratch. E abbiamo avuto la percentuale d, che altro era dentro di quelle parentesi che ho chiamato fuori verbalmente? Già. 

PUBBLICO: Quindi è quello che si sta prendendo [Incomprensibile] dall'interno [incomprensibile] ciò che questi [incomprensibile]? DAVID J. MALAN: Esattamente. Così abbiamo avuto la percentuale d. Ma poi abbiamo avuto vicino citazione, virgola, contatore. Destra. Abbiamo specificato quello che vogliamo di fare come segnaposto. Così che cosa ho intenzione di fare qui è virgola, cosa vuoi che metta? PUBBLICO: S. DAVID J. MALAN: S, perché s in questo caso è il nome del contenitore di stoccaggio. E 'il nome di quel ciotola di vetro. Mentre prima era contatore in quel semplice esempio Scratch abbiamo guardato. Così ora dopo aver fatto due modifiche, lasciatemi lo zoom in e prova ancora una volta a compilare questo programma. 

Ora vedo che la linea criptico. Ma questo è in realtà il nome del compilatore. Clang è il nome del compilatore. Fare è solo avermi salvato il mal di testa di sempre digitando il comando lunga pazzo fuori. Così ora se faccio dot slash ciao-1, Dovrei vedere "ciao, David." 

Piuttosto deludente, però, giusto? Avremmo potuto fare questo molto più semplicemente senza parlare di variabili e CS50.h e tutto il resto. Quindi facciamo un po 'più interessante. 

Oltre a CS50.h, avere le cose come stringa dichiarato, la biblioteca CS50 ha anche alcune funzioni. Quindi, proprio come anni fa, qualcuno ha scritto printf e metterlo in standard di I / O.h e qualche altro file. 

Noi, il personale CS50, scritto una funzione chiamato GetChar, getDouble, getFloat, GetInt, GetLongLong, GetString, e mettiamo quelli all'interno di un file chiamato CS50.h e CS50.c. E li abbiamo messi dentro del CS50 Appliance. E la gente può anche scaricarle online, se si vogliono mettere loro sul loro propri computer come bene. Vale a dire che abbiamo creato funzioni che ricevono input da parte dell'utente. Non so cosa tutto di questi tipi di dati sono. GetInt è una specie di semplice, come ottenere un numero intero in qualche modo da parte dell'utente. E GetString è probabilmente come get una parola o una frase da parte dell'utente. 

Quindi concentriamoci su quello. E ho intenzione di tornare in apparecchio e ho intenzione di andare avanti e salvare il file come, chiamiamolo si ciao-2.c come la mia seconda versione. E facciamo un paio di modifiche. 

Questa volta, invece di duro David di codifica, che rende incredibilmente coerente ma il programma deludente, se io invece faccio GetString? Ora notate GetString ha una parentesi aperta, parentesi chiusa, perché non ha bisogno di alcun input. E 'solo andando a andare a prendere una stringa dall'utente. 

Ed ora una parola su un altro sintassi. Virgola solo alla fine di una riga di codice. Non hai bisogno ovunque. Ma questo significa solo che sono fatto con questa riga di codice. Permettetemi di spostare su un altro dichiarazione o la funzione. String dichiara una variabile. String è come dire dammi una ciotola, per favore. E mi permetta di mettere una stringa in esso. 

E ora il segno di uguale. Qual è il segno di uguale sostanzialmente equivalente a? 

PUBBLICO: Assegna. 

DAVID J. MALAN: Sì, l'assegnazione di un valore. Quindi, se io, per esempio, chiamata questa funzione GetString, e vedremo in un momento che è andando a richiedere all'utente una stringa. Questo è come lasciare me allora scrivo D-i-d a-v-su un pezzo di carta. E quando dico stringa s uguale GetString, uguale realmente non significa uguali in programmazione C. Significa assegnare da destra lato di sinistra. 

Così ho ottenuto una stringa. E il segno di uguale significa metterlo nello stoccaggio contenitore chiamato s. E poi passare questa via a printf per fare realmente la sua cosa. 

Così il risultato finale poi sta andando a guardare un po 'diverso. Facciamo fare ciao-2. O potrebbe funzionare. Si sta seguendo. Fai ciao-2 ha funzionato. Dot ridurre drasticamente ciao-2, Enter. 

Mi sembra di avere un infinito loop o qualcosa. Niente sta succedendo. Perché? 

PUBBLICO: Sta facendo un ciclo infinito. DAVID J. MALAN: Si tratta di un ciclo infinito. È un po 'che mi aspetta a effettivamente fornire con qualche input. Quindi lasciami andare avanti e digitare in David, e premere Invio. E ora si dice "ciao, David." Se lo eseguo di nuovo. Proviamo quindi a digitare in Rob, "ciao, Rob." 

Ora, questo è il peggiore Interfaccia utente mai. L'utente è apparentemente dovrebbe sapere cosa fare. Ma non importa. L'utilizzo di questi stesso edificio blocchi proprio come in Scratch, siamo in grado di risolvere il problema e dire qualcosa come il tuo nome per favore, colon, spazio, chiuso citazione, vicino parentesi, punto e virgola. Così un sacco di nuovo stupidità con la sintassi. 

Ma ho notato appena aggiunto un pezzo di puzzle sopra questo e sopra questo. Così ora, se mi esegue nuovamente questa, ciao-2, Enter. Apetta un minuto. Cosa c'è di sbagliato? Non è comportarsi in modo diverso. Già. 

PUBBLICO: Lei non ha funzionato fate di nuovo. 

DAVID J. MALAN: io no eseguire rifare, a destra. Così ho cambiato il mio codice sorgente. Ma ancora una volta, c'è quel flusso. Il codice sorgente attraverso il compilatore dà Sei nuovo codice oggetto, o 0 e 1. Così ho bisogno di realtà rieseguire make ciao-2 Enter. OK, qualcosa sembra essere accaduto. Dot ridurre drasticamente ciao-2. Il tuo nome per favore. E per essere chiaro ora, perché è il cursore sulla stessa linea? Esattamente. Non ho messo il backslash n qui nel mio codice. Così ora posso scrivere qualcosa come Daven, Invio. Posso correre di nuovo e digitare qualcosa come Gabe, Enter, e otteniamo un programma diverso ancora e ancora e ancora. 

Ora, in ultima analisi, stiamo andando ad avere bisogno utilizzare alcune funzionalità diverse. Abbiamo bisogno di introdurre in ultima analisi, un po ' condizioni per fare le cose in modo condizionale. Loops Forse è così che possiamo fare ancora e ancora le cose. 

Forse sarebbe bello se potrebbe implementare le nostre funzioni, come abbiamo potuto realizzare il nostro printf o la nostra versione di GetString e GetFlow, perché in ultima analisi anche usando questo ambiente a riga di comando possiamo fare anche i più visivamente interessante di cose. 

Infatti, in conclusione, mi permetta di fare questo. Ho intenzione di andare avanti e chiudere queste finestre e aprire questa icona qui, che è solo un grande versione di quel incorporato finestra di terminale. Quindi Gedit non solo il posto per il mio codice, ma anche una costruito nel finestra di terminale, il finestra in bianco e nero dove posso correre comandi. 

Mi è capitato di aprire una versione più grande di questo. E ora ho intenzione di andare in la cartella che ho già mettere in anticipo sul sito web del corso. E ho intenzione di andare avanti e aprire un file chiamato thadgavin.c, che è stato scritto da qualcun altro. 

E se guardiamo a questo, questo non è il tipo di codice saremo scrivendo dal l'obiettivo di questo codice era di scrivere la più bella guardando il codice che lui o lei poteva, indipendentemente dal fatto che o non un altro essere umano potrebbe mai capire questo codice. 

Infatti, ogni anno ci è ciò che è chiamato un concorso C offuscato, che è per veri geek che scrivono codice che nessun altro può leggere, ma che fa qualcosa o molto semplice o molto sorprendente. E abbiamo pensato di Concludo con questo look a qualcosa che è piuttosto sorprendente si potrebbe avere visto una volta prima. Ma finiremo su questo nota, barra puntino, thadgavin. Questo allora è ciò che vi aspetta. 

Questo è tutto per CS50. Ci vediamo il Mercoledì. 

[GIOCO MUSICA]