[RIPRODUZIONE DI BRANI MUSICALI] JASON HIRSCHHORN: OK, tutti. Benvenuti alla Sezione. Questo è il CS50, la nostra stessa prima sezione eccellente. Come tutti sapete, la settimana prossima sezioni regolari inizieranno, ma questa settimana siamo tutti insieme. Ci sono io. Il mio nome è Jason. Sono un docente di Computer Science. Abbiamo Andi, che è il capo di TA CS50. E SCAZ, professor Brian Scassellati, lui è un professore di Computer Science. Noi siamo le teste CS50 a Yale. Si può sempre e-mail noi heads@cs50.yale.edu. Saremo a lezione. Saremo in orario d'ufficio. Se c'è mai niente che possiamo fare per voi, tutto il necessario, sentitevi liberi di entrare in contatto con noi. Allora cosa dobbiamo fare oggi? O prima di allora, che cosa è in arrivo questa settimana? Quindi orari di ufficio sono Lunedi, Martedì, Mercoledì e Giovedi, 8:00-11:00. C'è un calendario sul sito web. Sezioni, come ho già detto, stanno partire dalla prossima settimana. E scoprirete questa settimana cosa tempo la vostra sezione è, che giorno è, e chi è il vostro TA è. Set Problema 1 è dovuto al Giovedi a mezzogiorno, Venerdì a mezzogiorno con un giorno di ritardo. Sì, avete nove giorni di ritardo. E ci sono nove set di problemi. E può utilizzare un solo giorno di ritardo per set problema. Sì, in effetti, tutto il problema set sono dovuti Venerdì a mezzogiorno. Questo è tutto. Tutto ciò che i dettagli sono sul programma. Ogni Venerdì, abbiamo pranzi. Ci piace fare questo grande Naturalmente si sentono un po 'più piccolo. Quindi siete invitati a RSVP. Pranzo libero con il collega compagni di classe e personale. cs50.yale.edu/rsvp. Tutte queste cose che Ho sullo schermo, e di più, si può trovare o cs50.yale.edu cs50.harvard.edu, se si va a Harvard e stanno guardando questo in linea. Anche su questi siti, ci sono un sacco di risorse per voi. Ogni lezione non solo ha il video della conferenza, ma rileva anche. Qualcuno osserverà il lezioni e prendere appunti per voi. Così si può semplicemente pagare attenzione durante le lezioni, oppure è possibile utilizzare le loro note / nostro note per integrare le proprie note. Ci sono scivoli in linea. La fonte code-- tutto David va oltre a lezione, o SCAZ va ​​oltre lezione, che codice sorgente è disponibile on-line e, come come ho menzionato i video. Le sezioni, allo stesso modo, saranno tutti girati. Tutte queste diapositive saranno disponibili. Tutto questo codice sarà essere disponibili per voi. Ci sono corti sul sito web in cui I membri del personale CS50 spendono cinque a 10 minuti che passano attraverso gli argomenti per voi. Alcuni di quelli che hai già incontrato in insiemi di problemi. Orario di ricevimento, come ho detto, il lunedì al giovedì, 8:00 alle 11:00. CS50 Studio è una risorsa fantastica. Ci sono problemi di pratica, diapositive campione, bug noti che gli studenti piace correre in, essenzialmente per ogni argomento che coprirà in questo corso. E, infine, in questa diapositiva almeno, Reference50 che ti dà informazioni su tutte le funzioni C si potrebbe mai sperare da usare e molti, molti altri. Anche in questo caso, che puntini puntini a la parte inferiore dello schermo è per indicare che c'è anche più risorse su questi due siti web: cs50.yale.edu, cs50.harvard.edu. Allora, cosa stiamo facendo oggi? Beh, prima ho intenzione di dare si guardano le risorse. Già ha fatto quello. Guardaci. Ora, stiamo andando a andare oltre tipi di dati e operatori C. Poi Andi verrà qui e andare oltre le librerie in C, printf (), una funzione con la quale si è già familiare o sarà rapidamente diventare molto familiare. E potrai anche andare oltre condizionali e cicli. E poi finalmente, SCAZ andrà sopra il ID CS50. Se non si è in colomba già nel set Problema 1, e come utilizzare il i comandi del terminale e utili e poi danno alcuni demo e codifica pratica l'ID CS50. Prima di saltare in questo contenuto di questo lato, Qualcuno ha delle domande fino ad ora? Grande. OK. Si cambia marcia. [INGRANAGGI CAMBIO] E 'stato me spostamento ingranaggi di una macchina manuale. Così tipi di dati in C, non si può semplicemente avere una variabile x e farlo essere sulla linea 10, un numero intero, forse il numero 1, sulla linea 20, un numero decimale 10.5, e poi un paio di linee poi una stringa, amo CS50. In C, le variabili possono essere solo una cosa e solo una cosa. E quindi bisogna dare loro tipi. E su questo bordo, avere una lista di tipi. Ci sono caratteri, che stare in piedi per i caratteri. Ecco, questo è una lettera A, B, C, D. Questo può anche essere uno spazio, o che può anche essere un carattere di nuova riga. Ci sono interi, che sono solo numeri, interi o interi numbers-- rather-- ma senza decimali. Per decimali, abbiamo numeri in virgola mobile. Numeri floating point sono numeri con decimali. Poi ci sono lunghi, che sono essenzialmente più numeri interi. Noterete che un lungo è 8 mentre un int è 4. Io riesco anche a che in un secondo. Questo perché anela possono memorizzare anche più interi di un int in grado di memorizzare. Double è un lungo float. E, infine, abbiamo stringa, che è un tipo che probabilmente avete usato prima. Se si includono hashtag # includeCS50.h nel file di origine, quindi è possibile utilizzare un tipo stringa. Non è in realtà costruito in C. Ci sono un paio di altri tipi pure. Ma questi sono quelli principali con che si intende utilizzare e di incontro. C come, ancora una volta ho già detto, ogni variable-- esso può essere un solo tipo e un solo tipo. Questo perché C è una staticamente lingua digitato, al contrario alle lingue dinamicamente tipizzati dove se si crea una variabile si può cambiare ciò che è memorizzato in come si va su nel vostro programma. Qui sulla mano destra lato, ho le diverse dimensioni di questi tipi di dati in byte. Quindi, un personaggio è 1 byte. Ecco 8 bit. E questo significa, perché 8 bit ci sono otto 0 e 1. Abbiamo visto i demo nel primo settimana con che le lampadine binari. Con 8 bit o 1 byte, possiamo rappresentare i numeri da 0 a 255. Destra. Se tutti gli 8 bit sono 0 che è 0. Se il primo bit è 1, che è il numero uno, e così via, fino fino a 255. Ed è per questo che per i caratteri che potete hanno essenzialmente fino a 255 di loro, ma che c'è molto da coprire tutti i personaggi che hanno bisogno di usare. Per gli interi, si può avere 0 e allora avete 2 al 32 meno 1. Quelli sono come molte opzioni avete per gli interi. Per un lungo, si ha 0 a 2 alla 64 meno 1. In modo da avere molti, molti, più opzioni per anela. Stringhe, che è un punto interrogativo perché questo è un cliffhanger per dopo. Già. Potrei dire a tutti è sul bordo della loro sede, come quello che è quel punto di domanda? Si tratta di un cliffhanger. Siamo alla fine coprire le dimensioni della archi e chiacchierare stringhe. Perché stringa è in realtà una delle rotelle abbiamo messo in questo Naturalmente all'inizio e poi decollare più tardi su, perché le stringhe in C sono in realtà puntatori di array di caratteri. Ma ancora una volta, questo è un Cliffhanger per dopo. Prima di passare tutte le domande, commenti, le preoccupazioni circa questa diapositiva? OK. Devo essere un fantastico explainer. Anche quando si programma, avete intenzione di utilizzare questi operatori. Segnali molto semplici che possono fare semplice le operazioni, con il quale si sono probabilmente già molto familiare. Ad esempio, sulla destra lato, vediamo aggiungere. Per aggiungere, basta fare un segno più. E così si potrebbe avere due variabili xey. Si può fare x + y nel codice. Forse si vuole dire che a-- avere il numero 7 e 3, si desidera memorizzare che in una variabile denominata somma. Si può fare int per il tipo, lo spazio somma, il nome della variabile, = 7 + 3; Cosa sarebbe quel negozio, insomma? Chiunque? Se avessi insomma = 7 + 3. Che cosa sarebbe essere conservati in somma? Si può solo gridare fuori. PUBBLICO: 10. JASON HIRSCHHORN: 10! Questo è esattamente vero. Che dire insomma = 7-3, Mi basta usare quel segno trattino. Cosa sta per essere conservato? PUBBLICO: 4. JASON HIRSCHHORN: 4. Somma è probabilmente il nome sbagliato per tale variabile, ma 4 viene memorizzato. Per moltiplicare in C, utilizzare il piccolo Carattere della stella, non si utilizza una x. Per dividere, utilizzare un Attaccante Non Slash il simbolo di divisione. E per Modulo, utilizzare il simbolo percentuale. Quindi diciamo che voglio vedere int z = 7% 3, ciò che sarebbe memorizzata in z? Quindi, questo è essenzialmente chiedendo che cosa fa modulo fare? Qualcuno sa che cosa fa modulo? Già. y 4. SPEAKER 1: E 'il resto. JASON HIRSCHHORN: E 'la resto quando si divide. Così 7 diviso 3 è 2 restante 1. Quindi 1 viene memorizzato. Hai fatto sottrazione, ma è così che funziona. Questo è ciò che l'operatore modulo fa. Ci vuole un certo numero divide per un altro numero e torna a voi il promemoria. Quindi, di nuovo, il 7% 3 ti dà 1, perché 7 diviso 3 è 2 restante 1, e restituisce il resto. Che dire andiamo indietro un passo a quel segno di divisione. Se ho fatto 7 / diviso 3 fa Qualcuno sa cosa che sarebbe tornato? SPEAKER 2: 2. JASON HIRSCHHORN: Perché 2 e non 2.333? SPEAKER 2: Penso taglia dopo il numero intero. JASON HIRSCHHORN: So che è esattamente vero. In C, se si fa la divisione di due interi 7 diviso 3, ottiene la risposta che in questo caso 2,3333 per sempre e trova quel punto decimale e Chops tutto fuori dopo la virgola e ti restituisce solo 2. Quindi, se ho fatto 8 diviso 3. Che in realtà, lo sappiamo che per tornare 2.666, ma costolette tutto fuori a decimale, tronca tutto, e appena ritorna a voi due. Quindi 6 diviso 3, 7 diviso da 3, 8 diviso 3, sono tutti andando a tornare a te 2. Qualcuno sa, o avere una supposizione, quanto a come avrei potuto realmente ottenere la risposta completa, se voglio che decimale? Già. Vai avanti. SPEAKER 3: Utilizzare un galleggiante? JASON HIRSCHHORN: Che vuoi dire? SPEAKER 3: Perché lei ha detto il galleggiante è per i numeri [incomprensibile] JASON HIRSCHHORN: Giusto. Quindi, questo è esattamente giusto. 7 è un numero intero. Ma se volessi trasformare questa in un numero decimale, Avrei dovuto memorizzare che come 7,0 poiché il computer è davvero stupid-- abbiamo visto che con il example-- PB e J sarà solo fare esattamente quello che gli si dice. Quindi, se si scrive 7, è penso che sia un numero intero. Se si scrive 7.0, anche se siamo sanno queste cose sono equivalenti, si tratta che come un numero in virgola mobile. Quindi, se avete fatto 7.0 diviso da 3 o diviso per 3,0, direbbe, OK, ora abbiamo a che fare con i galleggianti. Io tornerò a voi 2,333333 per sempre. Ma non proprio sempre, perché come abbiamo visto anche in conferenza, questi numeri in virgola mobile non sono esattamente preciso. Quindi, se si vuole che decimale, o una parte di tale decimale, poi si deve use-- uno di loro deve essere un numero decimale e il computer deve capire che si tratta di una virgola mobile sei si occupano di, non è un numero intero. Tutte le domande su quel tavolo su il lato destro, fino ad ora? O il vostro lato della mano sinistra, la vostra a sinistra, lato sinistro. Già. SPEAKER 4: Giusto. Per proprio come un normale interi, si farebbe write-- avreste scrivere galleggiare? JASON HIRSCHHORN: Già così. Beh, se si desidera creare una variabile che è un galleggiante, è necessario dire galleggiante z è uguale a qualcosa. SPEAKER 4: OK. JASON HIRSCHHORN: Ma se volevo fare 7 diviso 3 e ottenere che decimale, Vorrei fare float z = 7.0 / del 3,0; e che mi avrebbe dato la virgola mobile numero. SPEAKER 4: OK. JASON HIRSCHHORN: Se l'ho fatto qualcosa come int z = 7 / del 3, che mi avrebbe dato un numero intero, perché questi sono tutti i numeri interi. Questo fa senso? SPEAKER 4: Sì. JASON HIRSCHHORN: OK. Grande. Tutte le altre domande su quel tavolo? Davvero? Sono così emozionato. OK. Così alcune altre cose che si intende utilizzare, spesso in condizioni o loop, sono questi tipi di operators-- questi tipi di espressioni booleane. E come abbiamo appreso, == è quello che utilizzare per controllare se due cose sono uguali. Così qui sto controllando se x == y, andiamo ancora una volta si supponga che x è 7 e y è 3. Quindi, se ho scritto 7 == 3, cosa vorrei che tornare da me? È vero o falso? PUBBLICO: Falso. JASON HIRSCHHORN: OK. Mi sento come se tutti possono ottenere questo. Così tutti, quale sarebbe tornare? PUBBLICO: Falso. JASON HIRSCHHORN: Falso. Grande. 7 non è uguale a 3. Così 7 == 3 sarebbe tornato falso. Si ha un segno diverso, quindi se io checked 7! = 3, quale sarebbe tornare? PUBBLICO: Vero. JASON HIRSCHHORN: Vero. Eccellente. Qualcuno era molto enfatico in la schiena e apprezzo. Allora avete meno di operatore, inferiore o uguale a, maggiore operatore, maggiore o uguale all'operatore. Così un altro controllo di integrità. Se avessi 7 è maggiore o uguale a 3. Quale sarebbe tornare? PUBBLICO: Vero. JASON HIRSCHHORN: Vero. Sì. Quella stanza sul retro, lato posteriore della stanza, fantastico. È possibile combinare questi espressioni, se volete, come pure, con un AND logico che è && O un OR logico che è || ||. E così ora è possibile testare due cose together-- È divertente? Perché è così divertente? Quindi, se avessi voluto, posso dire è 7 maggiore di 3 e 2 è minore di 4? Beh, se 7 è maggiore a 3, questo è vero. 2 è inferiore a 4, questo è vero. Quindi, tutta questa cosa sarebbe tornato vero. Se ho provato 7 è maggiore di 3 e- Sto solo raccogliendo numeri casuali qui-- 4 è inferiore a 2, beh, questo è falso. Così vero e falso il falso. E si può andare avanti e si combinano come molte condizioni insieme come vorresti. Qualcuno ha tutte le domande, commenti, preoccupazioni finora? E vedo che alcuni di voi scattare foto di me in schermo, che apprezzo. Si spera, non è snapchat. Si spera, è per le note. Ma tutti questi stanno andando ad essere disponibili online. Quindi non c'è bisogno di scattare foto di questo. Come ho già detto, tutto sarà disponibile on-line per voi. OK. Sto per arrivare dietro le quinte, così fa chiunque voglio dire nulla prima che ciò accada? Domande? [VOICES interponendo] JASON HIRSCHHORN: Oh, smettila. Voi ragazzi siete troppo bello. OK. Ho intenzione di tag fuori. Andiamo. ANDI PENG: Stiamo andando a fare un cambiamento microfono imbarazzante ora. JASON HIRSCHHORN: Sono andando a prendere questa via. ANDI PENG: Apprezzare il supporto, ragazzi. Riesci a sentirmi? Quello è buono? Perfetto. Bellissimo. Vorrei solo che a infilare. OK. Quindi, io sto per fare come un gigante informazioni sulla discarica voi in questo momento. E nessuna preoccupazione di sorta se siete non seguire ogni piccola linea di ciò che Sto per mostrarvi. Come ha detto Jason, tutto è completamente online. Basta stiamo andando a cercare di introdurre tutti i concetti coperto in alcune di queste diapositive. Quindi basta seguire lungo. Nessun problema se non capisci tutto; Tuttavia, se in qualsiasi punto ti senti perso, alzi la mano, ci fermeremo, non preoccuparti. Cool. Quindi penso qualcosa che David ha già menzionato nel tipo di lezione e Jason ha tipo di alluso ad oggi è ciò che una libreria è. Quindi, in programmazione, abbiamo queste cose chiamati librerie. Qualora, in sostanza, tutte essi sono è solo un set di funzioni, cioè essenzialmente solo codice che è già stato scritto da qualcun altro che tutti noi possiamo utilizzare nei nostri programmi. Così come fa un normale lavoro biblioteca, giusto? Si entra nella porta della biblioteca. Avete tutti questi libri che possono tirare fuori ed è possibile accedere alle informazioni all'interno di tali libri. Stessa cosa in programmazione. Si dispone di una libreria che ha già stato scritto da altre persone. E il modo in cui è possibile, come programmatore o uno studente, possono accedere a quella libreria è attraverso hashtag # include. Ad esempio, in C ci hanno tre C-- più comunemente usato tre di serie C libraries-- biblioteca di ingresso / uscita, la biblioteca corda, e la libreria matematica. Quindi, all'interno della vostra prima problema di coppia fissa, quelli saranno tre che si sta utilizzando principalmente. Così come già David spiegato in conferenza, lo standard I / O biblioteca, o il libreria standard di input / output fa esattamente questo. Esso consente, nel codice, a ingresso nulla dall'utente e output allo schermo, essenzialmente stampa allo schermo. E quindi ogni volta che si utilizza qualsiasi funzione, ad esempio la funzione printf () che stiamo per andare oltre alla diapositiva successiva, assicurarsi di includere lo standard di I / O biblioteca oppure non avete intenzione di essere in grado di utilizzare la funzione printf (). Perché tu, come il programmatore in realtà mai scritto quella funzione, stai usando solo qualcuno Codice altro all'interno del proprio codice. Questo fa senso tutti? Cool. E poi abbiamo essenzialmente immettersi la biblioteca e la math.h string.h biblioteca, .h significa solo biblioteca, altre librerie che più volte si prevede di utilizzare all'interno del codice. Tuttavia, ai fini di questa libreria, abbiamo anche have-- di questo class-- abbiamo anche quello che viene chiamato la biblioteca CS50, cs50.h, dove, per il vostro esame hanno creato molte funzioni importanti ed utili. In modo che il programmatore può piggyback off quello che abbiamo già scritto in modo che di disponibile questa funzione per voi per il vostro uso. Mi occuperò di un paio di le funzioni di uso comune, ma sanno che questi sono tutto Googleable on-line. Sentitevi liberi, tirare su la biblioteca e CS50 allora avete tutte le funzioni lì. Già. SPEAKER 5: Quindi, se non eri utilizzando il software è fornito a noi da la classe, lo fa significa che avremmo dovuto scaricare e trovare questo file di intestazione noi stessi e dire il computer dove si trova? ANDI PENG: Grande domanda. Esattamente. Quindi è come se non siete fisicamente presenti in una biblioteca, non c'è modo per effettivamente andare e accedervi. Quindi la stessa cosa con programmazione in C, è fare in modo che si sta usando il nostro apparecchio perché la libreria è già stato incorporato in esso. E poi, quando si hashtag #include, della biblioteca lì. Già. Bella domanda. Tutti bene? Cool. Tutto ok. Quindi stiamo andando a colpire, in sostanza, ciò che è la prima funzione che Noi, come i programmatori sono intenzione di utilizzare all'interno del nostro codice. Questo si chiama la funzione printf (). Quindi, la funzione printf (), come ho già detto in ultima diapositiva, è incluso nello standard I / O, standard input / output, biblioteca. Quindi assicuratevi qualunque cosa stai using-- oh, mi permetta di afferrare il laser pointer-- ogni volta che si sta utilizzando la funzione printf (), è necessario includere standard di I / O biblioteca oppure, quando si compila, si sta andando ad ottenere un errore perché il computer sarà come, oh Non so dove printf () è, tu non mi stai dicendo dove printf () è. Well printf () è incluso nel I / O standard, in modo che quando si utilizza printf (), assicurarsi di avere quel riga sopra il vostro codice. Così, per esempio, printf () qui è una funzione. Tutto ciò che fa è stampare qualcosa all'interno delle parentesi per l'utente. Qualcuno dovrebbe piacerebbe prendere una pugnalata a ciò che questa riga di codice a destra qui sta per stampare? Quindi, la risposta è sullo schermo. Chiunque? VERDI: La parte inferiore. ANDI PENG: Verdi, perché non te ne vai avanti e dire tutta la dichiarazione? VERDI: Ciao, il mio nome è Andi, e ho 20 anni. ANDI PENG: Ah, bella. Quindi, in questa linea che andremo a stampare, Ciao, il mio nome è Andi, e ho 20 anni, che è in realtà una vera dichiarazione. Sintassi. Così paio di questioni sintattiche che voi ragazzi vuole fare in modo di sapere. Quotes. I doppi apici raccontano la computer che tutto dentro sta per essere stampato. Tutto all'interno lattina solo essere esattamente come lo si digita, ad eccezione di comunemente alla fine, stiamo andando a voler includere un hash-- oh sorry-- un trattino n. Quindi un trattino n. Qualcuno ha voglia di prendere una congettura a ciò che fa il nostro codice? Già. SPEAKER 6: mette su una nuova linea. ANDI PENG: Esattamente. Quindi tutto ciò che fa è permettere qualunque cosa accada dopo questo, dopo questa dichiarazione, da stampare su una nuova riga. In modo che quando si scrive il tuo codice non avete a caso le cose appiccicato alla fine che non si desidera. Che tutto si ordinatamente stampata una riga e poi si parte nella riga successiva. Qualcuno ricorda cosa che punto e virgola fa quando siamo codifica? Già. SPEAKER 7: Dichiarazione. ANDI PENG: Siamo spiacenti? SPEAKER 7: finisce la dichiarazione? ANDI PENG: Sì. Quindi, in C, o qualsiasi programmazione lingua, il punto e virgola indica la fine di una linea di programmazione. Così, per esempio, in inglese usiamo periodo per dire, oh, questa è la fine di una frase. Nella programmazione, la stessa cosa, abbiamo un virgola per indicare la fine di una riga. Spesso, quando si è di iniziare la programmazione, ti rendi conto che dimenticare di aggiungere un punto e virgola e quindi si tenta di eseguire il codice e non funziona. E tu sei come, Ah, non lo faccio so perché, dovrebbe funzionare. Le probabilità sono voi probabilmente dimenticato un virgola o una parentesi o qualcosa da qualche parte. Quindi, questo è importante da ricordare. Cool. Va bene, per alzata di mano, come molte persone qui hanno mai preso AP Informatica o programmato in Java prima, mai? OK. Bello. Che non sarà applicabile poi, ma in Java, è avere qualcosa che si chiama System.out.println che non esiste in C. Quindi, in C, ogni volta che si voglio aggiungere nelle variabili in tutto quello che vuoi di stampare, c'è una sintassi specifica che andremo ad utilizzare. Che si chiama il placeholding-- essenzialmente aggiungiamo segnaposto in atto del numero intero o variabile che vogliamo stampare. Così come voi potete vedere abbiamo incluso un nuovo header libreria di file qui. La libreria CS50. E contenuta in quella libreria CS50 è una funzione comune useremo nel nostro corso chiamato GetInt (). Qualcuno vuole prendere una pugnalata a cosa GetInt () può essere eventualmente facendo. PUBBLICO: [incomprensibile] ANDI PENG: Siamo spiacenti. Non si sentiva voi. Maddie, chiunque. MADDIE: Oh, viene richiesto voi per un numero intero. ANDI PENG: Esattamente. Quindi questa funzione, un'altra funzione che è già stato scritto da qualcun altro che possiamo invocare ora. Tutto ciò che è è chiesto il tu, l'utente, per inserire quello che vuoi come il codice è in esecuzione e memorizza whatever-- in questo caso siamo GetInt () - voce, in modo che significa che siamo ottenere un numero intero. E stiamo andando a memorizzare che in un altro intero che abbiamo appena fatto chiamato età. Che senso per tutti? Cool. Quindi, ora che abbiamo memorizzato questo intero, che abbiamo spinti da parte dell'utente, in questa variabile, abbiamo creato di tipo int chiamato età, siamo in grado di andare avanti e luogo tale funzione nel nostro printf (). Così la sintassi di solito per printf () è che ovunque nel vostro fisico linea che si desidera includere tale intero, fate quel simbolo proprio lì, il simbolo di percentuale, con il tipo di variabile che si desidera. Quindi, in questo caso l'età è un numero intero. Quindi si sta andando a includere % i perché è un numero intero. E poi dopo la vostra dichiarazione, si sta andando per fare virgola e il il nome della variabile. Così qui, stiamo andando a stampare fuori, Ciao, il mio nome è Andi, e io sono anni di età vuote. Hashta-- o, sorry--, età con qualunque ingresso I. Quindi, se dovessi ingresso 20 per la mia GetInt () qui, sarebbe stampare la stessa identica cosa. Ma, se volevo qualcosa di ingresso altro, come forse 40 o 45, allora si vedrebbe che rifletteva di conseguenza nel codice. Quindi questo è un esempio di qualcosa in cui esso stampa e guarda voi come se fosse la stessa cosa, ma sotto il cofano il computer c'è in realtà cose molto diverse accadendo. Cool. Tutto ok. Così che cosa se vogliamo più variabili? Molto facile. Stessa cosa. Abbiamo anche una nuova funzione qui chiamato GetString (), incluso anche all'interno della libreria CS50, che tutto ciò che fa è richiedere all'utente per una stringa, che è solo un insieme di caratteri, così come una frase o un nome simile. Quindi, in questo caso, avremmo due segnaposto% s per stringhe e% i per intero. E stiamo andando a seguire che le due variabili che vogliamo incluso, in ordine che appaiono nella frase. Così, per esempio, il mio nome è bianco, Voglio un nome lì, così ho intenzione di avere il nome prima. E poi dopo, voglio età, vuole avere l'età secondo. E così se volevo ingresso, Ciao, il mio nome Andi, e sono 20 anni. Se io immessi Andi e 20, il esatto stessa cosa stampare; tuttavia, ora abbiamo due memorizzato variabili del nome così come int. Già. SPEAKER 8: Sarebbe in grado di eseguire, se si è cambiato nome e l'età alla fine di questo? ANDI PENG: Sì. Questa è davvero una buona domanda. Quindi per farla breve, no. Perché il nome e age-- cosa tipo di variabile è il nome? SPEAKER 8: String. ANDI PENG: E cosa tipo di variabile è l'età? SPEAKER 8: Integer. ANDI PENG: Quindi qui abbiamo un segnaposto per la stringa e intero, giusto? Quindi, se si dovesse passare da queste, il computer non ha intenzione di conoscere. Sta andando a verificare la presenza di una stringa, e se si tenta di dare un int, che sta per essere come aspettare Sono confuso, è mi ha detto che dovrei essere l'assegnazione di memoria per un int. E proprio qui, quando si aspetta un numero intero e si dà un nome e una stringa invece, è anche andando essere molto confusa, si non verrà eseguito esattamente il modo in cui avete bisogno. Quindi, ecco, di denominazione e sintassi è molto importante per l'esecuzione del codice. Tutti bene? Già. Maddie. MADDIE: Qui, so che abbiamo esaminato gli esempi in classe, dove chiedono Qual è la tua età, qual è il tuo nome. Ecco, vorrei che sia doesn't-- se dovessimo eseguire questo codice, non sarebbe chiedere questo? Ma si farebbe solo di input due numeri e allora sarebbe correre in quel modo? ANDI PENG: Sì, esattamente. Quindi, se si voleva per la sua visualizzazione, inserisci la tua età, si può semplicemente aggiungere una funzione printf () Che dice, inserisci la tua età, Oltre a questo. Questa è una buona domanda. Già. SPEAKER 9: Così, sarebbe già incluso nel GetInt () [incomprensibile]. ANDI PENG: No, in realtà non lo è. Quindi tutto ciò che fa è solo richiede uno schermo vuoto per l'utente di inserire qualcosa. Se si vuole, se si desidera stampare qualcosa che indica all'utente come, per favore mi dia la vostra età, allora avrebbe dovuto printf (), che da soli. Perché tutti usano questo Funzione per cose diverse, si potrebbe essere memorizzando l'età, si potrebbe memorizzare l'indirizzo, si potrebbe essere la memorizzazione dei numeri di telefono. E quindi è davvero fino a usi individuali tuoi ragazzi ' per quello che vuoi dire. Già. SPEAKER 10: Così, tanto per chiarire, dove si fa inserire il nome e l'età così che si presenta al posto di% s? ANDI PENG: Come l'utente? SPEAKER 10: Sì, come come faccio fare it-- dove metto Andi, e dove metto 20? ANDI PENG: Sì. Quindi, se si dovesse in realtà eseguire questo codice, Io non sono effettivamente in esecuzione il codice, questo è solo qui adesso. Se dovessi eseguire il codice, lo farei compilare il codice, rendere il file, eseguire il codice, e poi ci sarebbe essere solo due spazi per me per inserire esso. Già. Voi ragazzi vedrà quando si gioca in giro con il codice. D'accordo che andremo a spostare nella sezione successiva di quello tratteremo oggi. Stiamo per andare oltre ciò che istruzioni condizionali sono. Quindi, se voi ragazzi ricordate e richiamare da conferenza, istruzioni condizionali, tutto quello che sono sono un insieme di istruzioni per il computer che se una certa condizione è vera, si esegue il codice all'interno di tale condizione. Quindi, in sostanza, Scratch-- il grande tema da oggi è che voi ragazzi avete già tutto visto la logica dietro tutto che stiamo coprendo. E tutto quello che stiamo facendo è traducendo qualcosa che era molto intuitivo Scratch, e duro codificarlo nella sintassi useremo per la classe che è C. Quindi logicamente, tutto questo blocco era è quel pezzo di codice proprio lì. Già. OK. Otteniamo anche in un if ... else affermazione che è solo un ulteriore livello di complessità if in cui il computer dà uno sguardo a questo e vede, se questa condizione è vera, fare qualunque di all'interno di questi due staffe, else-- così un po 'come se il default non soddisfa il condition-- fare questo. E 'come un bivio. Se fuori piove, ho messo su una giacca antipioggia, altrimenti nulla altrimenti non metto su una giacca antipioggia. Ritiene che la logica ha senso per tutti? Cool. Tutto ok. Così come un esempio di duro questo che avremmo visto in C è se volevo creare un chiamati ora compiti a casa variabili. E se ora è meno compiti a casa a cinque, dico vita è grande. È meravigliosa. Tuttavia, dicono La lotta è real-- che è quello che tutti noi su questo Lunedi pomeriggio su Science Hill sono probabilmente facendo giusto now-- PUBBLICO: [Ride] ANDI PENG: Loro modo di avrebbe, grazie per questo. Il modo avremmo hardcode questo in C è se: supponiamo abbiamo già una variabile di tipo int chiamato ore di compiti a casa proprio qui. Se le ore di compiti a casa è inferiore a cinque printf (), La vita è grande. Ricordate mantenere / n perché si vuole una nuova riga dopo. Stampa Else, La lotta è reale. Fa capire a tutti come Sono passato dal ruolo che questo blocco in questo blocco di codice? Cool. Tutto ok. Così ora stiamo andando a dare un'occhiata a più istruzioni If tutto. Quindi cerchiamo di assumere la scopo di questo programma era ci richiedere all'utente un grado. Abbiamo Prompt utilizzando GetInt () per un grade, e un valore di ingresso, e si desidera visualizzare che tipo di qualità hanno ottenuto. Quindi, se dovessi progettare un programma, io significa in genere in tutti i nostri occhi, 90-100 è un A, 80-90 è un B, e così via e così via. Cosa c'è di sbagliato con questo pezzo di codice che non è fare quello che voglio fare. Già. SPEAKER 11: Hanno limiti inferiori, ma non hanno limiti superiori. ANDI PENG: Esattamente. Ognuno ha sentito quello che ha detto? Ci sara 'superiore limiti, ma senza limiti inferiori. Siamo spiacenti, viceversa, limiti più bassi, senza limiti superiori. Quindi ti piacerebbe prendere una pugnalata a dire ciò sarebbe stampato su questo schermo se dovessi eseguire questo codice. SPEAKER 11: Un errore? ANDI PENG: Un errore? Grande supposizione, non del tutto giusto. Qualcuno ha un'altra pugnalata? Sì, Aaron. AARON: Se si mette in qualcosa maggiore di 90, mostrerebbe tutti i voti che avete ottenuto. Sarebbe mostrare ottenuto una A, hai una B, hai una C. ANDI PENG: Sì. Questo è esattamente vero. Quindi, sarebbe meraviglioso. Tuttavia, essi sono reciprocamente esclusivo, credo. Se dovessi eseguire questo pezzo di codice. E poi diciamo, io immesso il grado di 95. Così 95 è ora memorizzata nella INT chiamato grado. E così C è un linguaggio che corre fino al basso, così sta andando sempre eseguire fino a fondo. Così sta andando a venire qui, se leggere grade è maggiore o uguale a 90, printf () avete ottenuto una A. Grande, io hanno un 95, che è maggiore di 90. Sta andando in stampa, Ho ottenuto una A. Sta andando a dare un'occhiata a questo se, sta andando dicono, ben 95 è anche superiore a 80, sta andando a stampare anche ottenuto un Got un punto esclamativo B, e così via e così via. Quindi, come tutti possiamo vedere, questo è un bug comune che possono verificarsi quando siamo la scrittura di codice per guardare fuori per. Chiunque, qualsiasi domanda su perché ciò che stava accadendo? Grande. OK. Quindi, come possiamo risolvere questo problema, è ovviamente la domanda successiva logico. Bene, abbiamo queste belle cose chiamato if else if else se else. Così si può vedere, se si voleva per cambiare questo problema, si voleva fare ciascuna delle condizioni escludono a vicenda, si dovrebbe aggiungere un altro ... if. E questi naturalmente-- pensano di loro come scale, o come pioli sulla ladder-- è possibile aggiungere come molti di questi, come si desiderare per come molte condizioni come si desidera. Così qui, se immesso grado di essere 95. Se il voto è maggiore di 95, printf (), ho avuto un A. Grande. Sta andando a vedere una cosa ... se e sta andando a conoscere, Oh no, Ho già eseguito l'altro prima. Io know-- o la prima se: so che Io non devo guardare uno di questi perché uno di loro è già stato vero. Così sta andando a correre dall'alto verso il basso. Non appena il primo è vero, allora sta andando a saltare tutto il resto dei else ... if. Questo fa senso? Quindi, in questo modo si ha livelli diversi di verifica e non appena uno di loro è falsa, la resto sono anche, non sarà nemmeno controllare. Cool. Tutto ok. Quindi questo è un esempio di un diverso sorta di dichiarazione condizionale vediamo meno spesso, ma staremo a vedere loro e li usiamo. E sono spesso più efficiente per alcuni casi. Così abbiamo quello che si chiama un'istruzione switch. Quindi, prima abbiamo coperto che cosa è un altro istruzione, un'istruzione else if .... Qui, abbiamo quello che sono chiamato istruzioni switch. Così, quando fare usiamo interruttore affermazioni è la chiave? Quindi, in un'istruzione switch, si Di solito, in genere, in realtà voi può solo numeri interi di ingresso per il vostro variabile che si sta controllando. Quindi, se ho voluto verificare se una certa number-- per esempio un grado, se ho ottenuto un 90. Lo voglio vedere se questo è un A, B o C. potrei avere un caso qui. Tuttavia, il caso ha di essere un'altra costante. Quindi, in questo senso, la istruzione switch può solo verificare la presenza di uguaglianza di due numeri. Esso non verifica per altri scopi. Ecco, questo è qualcosa di cui essere molto attenzione quando si utilizza questo. Così qui, se volevo verificare se il grado di 90 è pari a 90 o 80 o 70 o 60, e poi stampare del pari grado, Sarei in grado di scrivere che in un'istruzione switch. Così sta andando a venire qui, di controllo è questo intero uguale a questa costante? In caso contrario, sta andando a saltare. È uguale a costante due, e così via e così via, fino a colpire il valore di default, se nessuno di loro sono uguali. Non appena uno di essi è impostato per essere uguali, sta andando a fare questo riga di codice e pausa. Il che significa che sta andando a colpire quel correre, spezzare, e solo completamente saltare al fondo del codice. In questo senso il tipo di funzioni come un altro se if else if. Quindi, ecco un concreto esempio per voi ragazzi. Quindi supponiamo che volevo creare una variabile chiamata anno fondato. E voglio per richiedere all'utente di immettere l'anno in cui la loro scuola è stata fondata. Così posso creare uno switch qui. E diciamo solo che, ingresso I 1636. Questo codice qui è andare a vedere interruttore Anno di fondazione che è uguale a 1636. Sta andando a vedere caso 1636, oh quelli sono uguali, printf () Non dovresti essere in quella scuola a nord? Perché diamo per scontato non lo fanno andare qui se vanno a Harvard, rompere e passare alla fine. Se dovessi ingresso 1701, che Io assumere tutti noi farebbe ingresso, sarebbe saltare questo caso, vengono giù a caso due che è 1701, e stampa Benvenuti a Yale! Rompere, saltare alla fine. Altrimenti probabilmente sta assumendo questo corso online in cui case-- benvenuto impressionante per Yale-- sta andando per andare al stampa predefinita, Ciao Internet! E rompere. Già. SPEAKER 12: È possibile utilizzare altro invece di inadempienza lì? ANDI PENG: No, perché la modo che tutta questa funzione interruttore è costruito, la sintassi si necessario utilizzare maiuscole caso di default. E 'come il caso else if, questo uno che è caso caso di default. Già. SPEAKER 13: Forse già detto questo, ma si può avere più di due casi? ANDI PENG: Sì, si potrebbe avere come molti casi, come si desidera. Pensate a come proprio come infinitamente aggiungendo. SPEAKER 14: Se si commutato 1701 con 1636, in realtà non fa un diritto differenza? E 'solo andando a essere il controllo per questo. ANDI PENG: Questo è un davvero bella domanda. E ci tocchiamo in seguito, ma solo sanno che è l'interruttore dichiarazione è infinitely-- è più efficiente di esso e se altrimenti se perché opera utilizzando un diverso tipo di funzione che si consente, di sostanza, a giuste passare direttamente al caso è necessario essere a. Già. SPEAKER 14: Freddo. Grazie. ANDI PENG: Sì SPEAKER 14: e non si poteva fare casi come e superiore. ANDI PENG: No. Quindi, questo è quello che sta limitando sulla istruzione switch è che avete di avere costanti solo, solo numeri interi. Già. OK. Quindi questo è qualcosa che si ragazzi incontreranno meno spesso di, ma volevo solo introdurlo nel caso. Abbiamo qui ciò che è chiamato un operatore ternario. Dove in sostanza, è solo come un if compilato in una riga. Qui, vado sulla riga successiva, il pagina successiva, perché è più facile da vedere. Così abbiamo visto tutti questo diritto? Questo è abbastanza facile da seguire. Se avessi voluto fare una variabile chiamata stringa di nome s, se un certo numero Ho dato è inferiore a 100, mi vuole assegnare basso alla stringa, altro Voglio assegnare alto. Questo qui sta facendo la stessa cosa quegli otto righe di codice stanno facendo. Così qui voglio creare una variabile stringa. E questa è la condizione Sono controllo, se un numero è inferiore a 100, allora si assegna il valore di basso, altrimenti assegnare il valore di alto. Queste diapositive saranno online, nessuna preoccupazione se voi ragazzi non si ottiene questo giù. Questo è solo un modo più semplice, più modo efficace di scrivere codice. OK. Così ora stiamo andando a entrare in quello che, per la maggior parte delle persone sono come un molto, molto confusa cosa a cui pensare in un primo momento. La sezione loop. Così oggi, stiamo andando a parlare circa tre tipi di cicli. Stiamo per iniziare con un po ' cappio, quindi parlare di un do while, e poi parlare per i cicli. Quindi, in sostanza, per i più studenti visivo là fuori, abbiamo, essenzialmente, una grafica raffigurazione di ciò che un ciclo while fa. Quindi, in una programmazione, si dovrebbe iniziare e inserire l'anello a un certo punto. Si controlla una condizione. E se la condizione è vera, si esegue il codice all'interno. E si torna in giro e controllare. Se è ancora vero che continua a correre questo codice intorno e intorno ad anello. Tuttavia, il secondo che la condizione diventa falsa, si sta andando a rompere e terminare il ciclo. E questo è essenzialmente la sulla sintassi intenzione di utilizzare. Mentre una certa condizione è vero fare questo, se non è vero, si sta andando a saltare alla fine e andare avanti con il vostro programma. OK. Qualcuno ha un esempio su ciò che può potenzialmente accadere se provo a fare funzionare questo pezzo di codice? Tra l'altro, questo è SCAZ SAJ--, Andi, Jason-- firmeremo via nostre e-mail, Amore, SAJ. Siamo noi. OK. Chiunque avere un esempio, o hanno un'idea su ciò che questo sarebbe stampare? Tipo di una domanda trabocchetto. Così qui, ricorda la condizione stiamo controllando per è while true. Così, mentre questo è vero, è andare in stampa, io amo SAJ! C'è un punto in cui saremmo cambiare questo per niente altrimenti? Nessun diritto? Così qui, abbiamo incontrato quello che è probabilmente sta per essere un sacco di intercettazioni i programmi, il ciclo infinito. Troverete che se si eseguire questo pezzo di codice, è solo andare a tenere stampa, amo SAJ! Mentre apprezziamo il supporto, noi non vogliamo i vostri computer in crash perché voi tenere la stampa Amo SAJ! Quindi, per favore, per favore, evitare il ciclo infinito perché non è mai andata valutare false e si è mai andare lasciare il loop. E si sta andando a essere risucchiato per sempre. Cool. OK. Il secondo tipo di ciclo parleremo di oggi è il do while, do while. E si chiama un do while perché avete un fare e un po '. Quindi questo è abbastanza simile a un po ' loop, ma un po 'diverso. Qui, si sta andando a fare qualunque sia di interno di questo mentre una certa condizione è vera. Quindi, se io fossi C e il computer sono correndo giù questo pezzo di codice, Prendo uno sguardo in alto. Vado a C, io dico fare questa cosa. E poi posso controllare, mentre questo è vero, devo ripeterlo. Ma mentre questo è falso, poi mi muovo in avanti e non ho mai tornare a quel ciclo di nuovo. Chiunque può prendere una pugnalata a ciò che la differenza tra questo ciclo e quello che appena guardato era praticamente. Già. SPEAKER 15: La condizione viene dopo al posto di prima? ANDI PENG: Esattamente. Così ha detto la condizione viene dopo, non prima. In definitiva, la differenza tra questo e il ciclo while è che si sta solo andando a fare qualunque cosa di all'interno di questo a prescindere se la sua condizione è o no vero, e quindi verificare lo stato. Quindi, in questo caso, siete always-- in questo modo, si sta sempre facendo attenzione qualunque cosa è eseguito all'interno di almeno una volta prima di controllare per vedere se si desidera eseguire di nuovo. E qui è un esempio di quando avremmo usarlo. Così, per esempio, se volevo avere una variabile di tipo int di nome età, e voglio richiedere l'utente per la loro età, Ho intenzione di fare printf () Qual è la tua età? age = GetInt (), che è chiedere conferma all'utente. E alcune persone saranno davvero fastidioso. E tu non vuoi che gli insetti nel vostro Programma di qualcuno inserendo come, oh ho negativo di 4 anni o qualsiasi altra cosa. In tal caso, se farlo, questa valuta true, il che significa che ho intenzione di deve andare avanti indietro e fare questo. Quindi questo sta per mantenere ri-chiedere conferma all'utente per darvi come un vero numero di anni ed è intenzione di andare avanti indietro e rifare fino a quando non ti danno una vera età maggiore di uno, o lo zero. Così suggerimento, suggerimento. Questo sarà molto, molto utile per uno dei vostri problemi PSet. Già. SPEAKER 16: Ops, scusate. ANDI PENG: Sì. SPEAKER 16: ci sono, non di essere uno stronzo, ma-- ANDI PENG: Non preoccuparti. SPEAKER 16: --Siamo lì regole diverse qui, o hai semplicemente dimenticato per mettere la citazione? ANDI PENG: Oh Yeah. Siamo spiacenti, questo è totalmente mio male. Questo è stato sicuramente dovrebbe essere una citazione. Buona pesca. Ciò non è stato eseguito. OK. Così l'ultimo tipo di ciclo ne parleremo circa e, in ultima analisi, un po 'più complesso è il ciclo for. Non preoccupatevi se non lo fai sanno che cosa significa. E 'piuttosto confuso in un primo momento. Andremo su un esempio. Tutto ciò che accade in un ciclo for è che avete tre dichiarazioni che si sta andando a includere. Così, per una certa cosa, sei andando a inizializzare una variabile. Hai intenzione di aggiungere la condizione che questo ciclo continuerà a funzionare. E poi, alla fine del cappio, si sta andando per aggiornarlo. È possibile aggiornare la variabile che si desidera tenere traccia di. Così abbiamo utilizzano in genere per loop per quando abbiamo desidera eseguire un ciclo per una certo numero di volte e sappiamo già, oh voglio questo ciclo per eseguire come 10 volte, allora si fare-- vado su un esempio nella pagina successiva. Ecco per esempio, in Scratch, se voleva qualcosa da ripetere 10 volte, tutto quello che doveva dire era, ripetere 10 volte amo SAJ! che è un più accettabile dimostrazione di sostegno per noi piuttosto che il ciclo infinito. Qui, come si farebbe transizione alla C e scrivere cioè per int-- ho intenzione di creare o dichiarare una variabile di tipo int chiamato i. Ho intenzione di inizializzare a 0, quindi i = 0; e questo sarà la mia condizione. Così i è inferiore a 10. E poi al end-- l'ultima affermazione sei andando ad avere è l'aggiornamento di cosa succede al variabile i alla fine del vostro ciclo for. Quindi è una specie di confusione, perché diverse parti di questa linea stanno accadendo in diversi tipi di ciclo. Ma vado su un esempio pseudocodice di che e forse spiegare questo appena un po 'meglio. Ecco. Questo è il ciclo che abbiamo appena visto. In sostanza in pseudocodice, cosa sta accadendo in questo programma, è prima Sto creando i, inizializzazione a 0. Sto controllando per vedere se i è meno di 10, nel qual caso la prima volta è perché 0 è inferiore a 10. Così il ciclo è andare a correre. E poi ho intenzione di stampare questa linea. E poi alla fine di questa riga, destra qui, ho intenzione di fare incremento i, i ++, tutto ciò che significa incrementarlo per uno. Così i è ora 1. Perché era una volta 0, se io incrementa lo è, è ora 1. E poi ho intenzione di tornare indietro all'inizio del ciclo e posso controllare la condizione. È la condizione ancora vero? Sì, 1 è ancora inferiore a 10. Così sta andando a stampare di nuovo, andare e quindi incrementare i, e verificare la condizione continuamente, continuamente, fino ad arrivare alla fine al punto in cui i è 10. Stai andando a stampare questo 10 volte e poi mi sta per eguagliare 10. Stai andando a verificare le condizioni. È 10 meno di 10? No, questo è falso. Così, questo ciclo non sta a correre, sta andando a rompere, e si sta andando a continuare con il vostro codice. Così come voi potete vedere, questo è davvero un grande esempio di un ciclo è possibile programmare in quel corre per un determinato periodo di tempo. Ognuno chiaro? Già. SPEAKER 17: Che ne dite di incremento in modo esponenziale, è diverso codifica? ANDI PENG: È can-- andremo su questo nella diapositiva successiva. Bella domanda. È anyone-- prima di passare on-- chiunque a tutti confusi, perché questo è un concetto davvero difficile. Nessun problema, se you're-- OK. Cool. Tutto ok. Basta una diapositiva generale. Questo ciclo mentre sta facendo la esattamente la stessa cosa che il ciclo for è stato. E 'solo scritto in modo diverso. Voi potete sfogliare le diapositive a vostro piacimento in seguito. Ma è sufficiente sapere che non c'è più modi di scrivere la stessa cosa accadere con diversi cicli. OK. Così, ora entriamo in questione di che cosa se abbiamo un ciclo all'interno di un ciclo. Stiamo ottenendo in reale Inception tipo roba qui. Quando vuoi fare le cose più volte all'interno di altre cose che fanno le cose più volte, è volere ciò che è chiamato un nidificato ciclo for. Per quelli di voi che prima vedere questo e ottenere molto confuso, tutto quello che stiamo facendo qui sta avendo un ciclo for in cui abbiamo una variabile di riga. Ma dentro di esso, abbiamo anche un altro per ciclo di una colonna variabile chiamata. E consiglio vivamente a tutti voi che sono confusi per mantenere prima track-- disegnare questo fuori, disegnare questo fuori. Non cercare di solo motivo attraverso di essa, estrarla. Nella tua testa, su questo pezzo di carta, o qualsiasi altra cosa, riga di scrittura, tenere traccia di ciò che fila è uguale a. Scrivi colonna, tenere traccia di quale colonna è pari a. E tenere traccia di ciò che è stampare con ogni iterazione. Ogni iterazione questo ciclo ogni iterazione del ciclo più grande che, solo continuare a seguire la logica. E vi garantisco, vi innamorerete di ciò che si vede, perché è anche molto applicabile per i vostri insiemi di problemi. Cool. Tutto ok. Quindi la cosa più importante che voi siete probabilmente tutti pensare in questo momento, sono i vostri problema posto 1s, che sono dovuti Giovedi / Venerdì. Nel programma water.c, accenni si sta andando ad avere per richiedere all'utente per un ingresso. All'interno del programma mario.c si sta andando ad avere utilizzare un annidato ciclo for, che è un ciclo for all'interno di un ciclo for, stampare un blocco di piramide, essenzialmente come quello che Mario deve passare attraverso. E poi all'interno del vostro greedy-- o forse Produrre il cambiamento, se qualcuno di voi ragazzi hanno mai sentito parlare di che-- si sta andando ad avere per essere molto attenti primi valori in virgola mobile. Ricordate decimali galleggianti e interi non sono la stessa cosa. Tenere traccia di quali uno è che. E si sta andando da usare istruzioni condizionali, pure. Va bene, un'ultima cosa. Ho un paio di minuti dalla fine. Stile. Quindi, questo è qualcosa che non lo fa effettivamente effettuare l'efficienza, o l'effettiva gestione del codice. Tuttavia, ci effettua come livellatrici, come i tuoi lettori. Effettua te stesso, se sei cercando di trovare un problema. Effettua la leggibilità del codice. Quindi stile, come quando si sta cercando di lo stile un saggio per l'inglese, se si non ha avuto punti, avete tutto tipo di jumbled insieme su una sola riga, è rende davvero difficile per chiunque a leggere il tuo saggio, anche se i punti sono logicamente suono. Stessa cosa in programmazione. Si può avere orribilmente oscura codice che SCAZ coprirà, e può ancora funzionare e funzione. Ma per noi, come vostre TA incantevoli, che sarà essere la lettura e valutazione dei vostri pset, che non è molto bello. Quindi, per favore, per il bene di noi e te stesso, quando si sta cercando di risolvere un problema nel codice, e si sta cercando di leggere il proprio codice, fare Assicurati di seguire alcune convenzioni che stiamo per andare oltre. Così prima. Lascia la tua variabili nomi significativi. Se si desidera memorizzare un numero intero chiamato l'età, si prega di denominarlo età. Non nominarlo altezza. Quando si sta cercando di memorizzare un'epoca in altezza, rende tutto molto confusa per noi. Non ci piace essere confuso. Non ti piace essere confuso. A nessuno piace essere confuso. Se avete intenzione di creare qualcosa, denominarlo qualcosa di significativo. Tuttavia, nel ciclo for, singola variabili carattere sono di solito bene. E nel ciclo for, se si desidera solo i, e j, k, sentitevi liberi di fare proprio questo. Inizializzazione coerente. Che cosa significa? Ciò significa che tecnicamente, in teoria, è possibile avviare e creare più variabili sulla stessa riga. Così, per esempio, posso creare un intero chiamato scaz_age, e integer chiamato andi_age = 20, e un intero chiamato jason_age sulla stessa linea. E posso anche assegnare una sola di loro e non gli altri ai valori. Vi chiediamo per favore non lo fai. Perché qui si è essenzialmente creato tre variabili, ma solo uno di essi in realtà ha un valore. E poi quando siamo cercando di leggere il tuo codice, o se si sta cercando di risolvere un problema nel codice, è molto confuso da seguire. Quindi, solo per il vostro leggibilità, per il nostro leggibilità, non farlo. Parentesi graffe coerenti. Ad alcune persone piace mettere il loro parentesi graffe in luoghi diversi. Non ha molta importanza. Basta fare in modo che sei coerente nella tua proprio codice su cui vuoi metterli. Spaziatura coerente. Se si mette uno spazio dopo un per il ciclo, sempre farlo. Non proprio come tipo di farlo a alcuni luoghi, non lo fanno in altri. Basta essere coerente. In secondo luogo, se qualcuno vorrebbe di esaminare la Guida CS50 Stile, abbiamo ufficialmente abbiamo una guida di stile che a tutti voi di queste convenzioni racconta, e molto di più. E 'on-line. E 'come cs50.net/style o qualcosa di simile. Potete google. La coerenza è la chiave. Quindi non preoccupatevi cosa fanno gli altri, basta assicurarsi che si sono coerente all'interno il proprio codice. Qualcuno ha domande su questo? Già. SPEAKER 18: Quindi la cosa giusta a che fare con l'inizializzazione è solo li hanno tutti in un separato la linea, è che quello che stai dicendo? ANDI PENG: Così ho raramente ho questo accada. Ma se si voleva, se si voleva per essere come risparmio di spazio nel codice, o qualsiasi altra cosa, si può fare questo. Chiediamo che proprio non si inizializza una cosa e non gli altri. Quindi, se volete fare int scaz_age, int andi_age, int jason_age, va bene. Basta non inizializzare uno e non gli altri è tutto. Domande? Tutto ok. Ho intenzione di passare il microfono, e il puntatore laser, e il testimone a SCAZ a questo punto. Questo è strano. Ecco qui. BRIAN Scassellati: Grazie. Come è che per il suono? Il suono è buono? . Eccellente. OK. Quindi, ciao a tutti. Io vado a cercare di lavorare attraverso un esempio pratico con voi. E stiamo andando a utilizzare CS50 di ambiente di sviluppo, quello che chiama l'ambiente di sviluppo integrato. E Dopo aver visto questa dimostrato in conferenza. E nel set Problema 1, sei andando ad avere l'opportunità per usarlo, e giocare con esso, e abituarsi ad esso, perché abbiamo intenzione di usarlo per il resto del semestre. Quindi, in questo IDE, si ha quello che sembra come un browser di file molto tradizionale su un lato. Hai una porzione up superiore dove si sta andando per vedere il codice sorgente, il vostro CFile, il codice che si scrive. E giù in basso, ti avere una finestra di terminale che userete per sia compilare il programma e di eseguire o eseguire il programma. OK. Quindi, solo per darci un po 'di fondazione, in quella finestra di terminale, si sta andando ad essere utilizzando un insieme di comandi che sono comandi standard in tutta la maggior parte dei sistemi Unix o Linux. E così, se avete mai usato qualsiasi forma di Unix, Ubuntu, o qualsiasi degli altri aromi, questi stanno andando a guardare familiare. Se non lo hai, non ti preoccupare. Non c'è niente di complicato su di loro. Stanno solo utilizzando un diverso sintassi, una denominazione differente convenzione di quello che abbiamo visto prima. Quindi, per elencare i file all'interno di una directory particolare, che stanno andando a utilizzare un comando chiamato ls o lista. Se volete vedere tutto con tutti i dettagli, userete un comando argomento della linea con ls -l. E che lo mostrerò tutto più in dettaglio, compresa i permessi di un file. Per cambiare la directory, userete il comando cd. E voi sarete in grado di cambiare la directory sia per andare alla vostra home directory. Questo è solo cd tutto da sé, cd con due puntini torneranno in su uno livello di directory precedente. E si può anche cd per un sottodirectory digitando cd e il nome di quella sottodirectory. È inoltre possibile creare nuove directory. E stiamo andando a piedi attraverso questo in appena un minuto. Ma solo per mettere tutto sullo schermo. Così che si può vedere. Avrete anche la possibilità per manipolare direttamente i file dalla riga di comando. Sarete in grado di copiarli, a spostarli o rimuoverli, vale a dire, in modo efficace, per eliminarli. L'IDE CS50 ti dà il pieno potere di argomenti della riga di comando. E che significa che è possibile anche fare le cose molto pericolose. OK. Ad esempio, è possibile rimuovere, o che è di eliminazione, un file senza chiedere per conferma. E si può anche rimuovere recursively-- che è il trattino r flag-- un intero sottodirectory e tutto il suo contenuto. OK. Sono elencati in rosso perché si dovrebbe pensare "Danger" ogni volta vedi quelle cose. OK. Tutto ok. Ora finalmente, le cose che sono sta per essere veramente utile a voi, sono ci sono alcuni trucchi per sapere come si sta navigando attraverso questa finestra di terminale. In primo luogo, è possibile cancellare lo schermo in qualsiasi momento semplicemente digitando in chiaro. E si sta andando a vedere mi faccio abbastanza spesso. È anche possibile visualizzare il testo di un file digitando più e poi il nome del file. Sarai quindi in grado di scorrere avanti e avanti con quel giusto con la barra spaziatrice e tasti freccia. Se si dispone, come abbiamo fatto oggi in conferenza, un programma che è in esecuzione continuamente in loop infinito, è può fermare il programma dall'esecuzione digitando in controllo, che sta tenendo premuto il tasto Ctrl-C. E si può avere a che fare questo più volte. Il computer diventa molto più avanti di voi. E talvolta è necessario dargli un paio di tentativi prima che possa effettivamente venire attraverso. Potrai anche essere in grado di ordinare attraverso i comandi che appena digitato con il tasto su, tasto freccia, e quindi il tasto freccia giù. E ciò che è più utile è invece di digitare nomi di file lunghi, sarete in grado di utilizzare la scheda di completare automaticamente alcune istruzioni. Ora stiamo andando a dimostrare tutti quelli in un secondo. Quindi, se non ti ricordi loro, non ti preoccupare. Queste sono le cose che ti raccogliere e utilizzare come andiamo avanti. OK. Quindi, in C-- differenza Scratch-- C è un linguaggio compilato. Questo significa che stiamo andando a prendere una fonte file-- questo è il testo che si scrive, i comandi che si scrive, il printf () dichiarazioni, loop, tutto else-- e stiamo andando a prendere il file e passarlo ad un programma chiamato compilatore. Il compilatore sarà poi prendere che il testo che hai scritto e tradurlo in le istruzioni binarie che il computer sia effettivamente andando uso. Che si chiama l'oggetto o il file eseguibile. Se si guarda a questo file, si sta andando per vedere il codice che avete scritto. Se si guarda a questo file, si sta andando per vedere una sequenza casuale di caratteri che non hanno senso di sorta. Ecco perché questo è il binario. Non è pensato per voi di essere la lettura. Tuttavia, ogni volta che si desidera eseguire qualcosa, quello che si sta andando di essere in esecuzione questo file oggetto. Così, quando lavoriamo con questi file, scriveremo un file in C. Provvederemo quindi compilarlo, utilizzando un comando come marca che richiamerà il clangore compilatore per il linguaggio C. E che produrrà un oggetto depositare, come un fuori, o in questo caso, il nome, il mio file, che ho messo in. Tutto ok. Quindi cerchiamo di provare questo in realtà. Così mi si avvicinò con un esempio di quello che ho voluto provare. E una delle cose che mi affascina è l'animazione. Quindi stiamo andando a cercare di fare un po 'di animazione utilizzando solo caratteri ASCII. Personaggi che possono stampare con facilità ora. Così qui è il mio miglior tentativo di creare per voi l'animazione di un coniglietto che attraversa l'erba alta. Eccolo. OK. Così egli non è ancora in esecuzione, ma è in piedi tra l'erba alta. Ora, se io fossi un animatore, nella vecchia scuola versione di animazione, quello che ho vorrei fare è mi produco una foto di questo coniglietto nell'erba. E poi vorrei produrre un'altra un'Immagine-- un'altra cosa che hanno chiamato cella: aveva il coniglio solo leggermente mosso. E poi una terza che aveva il Coniglietto spostato un po 'più. E vorrei produrre un intero sequenza di queste cellule. Alcuni dove il coniglio è finita sul lato sinistro. E poi si sposta lentamente, una da uno verso il centro. E poi dalla metà verso destra. E se fossi allora, davvero fortunato, ho potuto mettere insieme e ho potuto animare. E c'è il mio coniglietto che attraversa l'erba. Questo è il mio grande PowerPoint trucco per il giorno. OK. Quindi questo è quanto di meglio si possa. OK. Quindi, qui ancora una volta, qui è il nostro bunny che attraversa l'erba. SPEAKER 19: Ancora una volta. BRIAN Scassellati: One più tempo, va bene. Ecco il tuo coniglio. OK. Così oggi quello che stiamo andando fare è che stiamo andando per cercare di automatizzare il processo di produrre queste cellule. Non abbastanza arrivare al punto di essere in grado di mettere tutti insieme. Ma, stiamo andando a cercare di automatizzare il processo di generazione di questa sequenza. E questo è molto di quello animazione oggi è come. Cioè, non fai le cose necessariamente disegnando tutto a mano. Noi usiamo un computer per automatizzare parti di tale processo. OK. Così mi permetta di passare sopra ora al nostro CS50 IDE. E ho creato per noi-- e lasciare me lo zoom in qua un po 'bit-- ho creato per noi un punto di partenza. Ogni volta che vi chiediamo di sedersi e scrivere un pezzo di codice, quello che stiamo realmente ti chiede di fare è che stiamo chiedendo di risolvere un problema. E il modo in cui si dovrebbe pensare a fare che è partendo con alcuni semplice parte di questa soluzione. E poi costruire fuori da quella parte. Ed è quello che stiamo andando a fare oggi. Quindi, piuttosto che cercare tutto in una volta per scrivere l'intero gruppo di codice che è andando a produrre quelli 10 celle di animazione, stiamo per iniziare invece con un pezzo che funziona. E poi costruiremo un po 'intorno a quel e un po 'di più e un po' di più. Ora la cosa buona di risolvere i problemi in questo modo è che vi permetterà di iniziare sempre con qualcosa che si sa opere e di introdurre un cambiamento graduale. E questo è un ottimo modo per imparare a codificare, perché ogni volta che si effettua un cambiamento, si vede qual è l'impatto che ha. OK. Quindi, ecco il nostro punto di partenza. OK. Così all'inizio del mio file, Ho hash #include stdio.h. È così che io possa ottenere il printf () per funzionare. Io poi ho la mia funzione principale. E questo sembra ancora un po ' arcana od oscuro per alcuni di voi. Va bene. Tutto ciò che dice è che la funzione principale prende mezzi non arguments-- vuoto nulla in C. E restituisce per convenzione un numero intero. Principale restituisce sempre un numero intero, di solito un codice dicendo cose è andato bene o non è andato bene. OK. Ma principale deve avere che formare per noi in questo momento. Ho poi messo in tre righe di codice. E con ogni riga di codice, ho messo un commento. Ora, una delle cose che insisteremo che si fa, ed è tale importante pratica di programmazione, è di commentare sempre il codice. Sempre scrivere in giù in un English commento qualcosa che si ritiene che il codice dovrebbe fare. In questo modo, in seguito, quando si torna a esso, è possibile guardare e si può dire, oh, mi ricordo di quello che ero cercando di fare con questo. O quando un TA si siede con voi per cercare di aiutarvi in ​​orario d'ufficio, si può guardare a questo e andare, io Vedete quello che stavi cercando di fare, ma questo è ciò che sta realmente accadendo. OK. Così ho tre parti al mio codice, Io vado a prima di tutto di stampa alcuni punti all'inizio. Io poi stampare il mio coniglietto estremamente fantasia. E poi qualche po 'di punti alla fine. E queste tre affermazioni di stampa dovrebbe guardare familiare a voi a questo punto. Tutto quello che sto facendo in ciascuno di essi è Sono stampare una sequenza di caratteri. Non ci sono variabili in gioco. Tutto è solo piatto. OK. Quindi, se vado giù ora al mio terminal-- Vediamo se riesco a ottenere questo ritorno fuori-- e ho intenzione di scrivere di nuovo chiaro. SPEAKER 20: usiamo il doppia barra di commentare? BRIAN Scassellati: Can utilizzare il sì double--. Ci sono vari modi di lasciare commenti in C. Uno modo è quello di utilizzare la doppia barra. L'altro è quello di utilizzare una barra e una stella e poi chiudere con una stella e una barra. Tutto ok. Prima di tutto, ho intenzione di iniziare la navigazione in giro qui. Quindi, se vado alla mia home directory, Ho cambiato directory lì, Vado a guardare e vedere cosa c'è in quella directory, ls, lista fuori. Io vado a vedere che ho ha ottenuto due sottodirectory. Facciamo questo un po 'più grande qui in modo che tutti possiamo vedere. Vedo che ho ha ottenuto due sottodirectory. Cambierò elenco per andare nello spazio di lavoro. E ho intenzione di scrivere solo parte di esso, e poi basta premere Tab. E sarà completare il resto per me. Fancy. Cercherò e vedere in area di lavoro. E in questo momento, sto lavorando sulla SuperSection che stiamo insegnando al momento. Così andrò in quella directory. E, infine, guardare e vedere. E ho quel file bunny.c. Va bene così vorrei chiarire ancora una volta. E ho intenzione di now-- nuovo Sono ancora stare in quella directory e mi sta dicendo che sono in quella directory SuperSection. Ho intenzione di andare avanti e fare il mio programma di coniglio. E quel comando, rendono coniglietto, mentre suona un po po 'strano, invoca anche il compilatore clang. Ed è prodotta per mi un'uscita che è un funny-- un eseguibile file eseguibile chiamato coniglio. OK. Posso allora, e questo suona peggio ancora, eseguire coniglietto. OK. E vediamo cosa fa. OK. Questo è un po 'di quello che mi aspettavo. Ho la mia immagine coniglietto in là, ma io tipo di voluto da sola. Cosa mi sono perso? SPEAKER 21: Slash l o barra n. BRIAN Scassellati: Slash n. OK. Così torniamo qui fuori. E vado a prendere da quella. E io andrò di nuovo in questo. E diamo un'occhiata ora dalla mia funzione principale qui. Quindi cosa dovrei fare? Voglio terminare la linea. Così mi metterò in un commento. Metterò in un printf (). E che devo mettere dentro? / n. OK. Che cosa devo farla finita con? Punto e virgola. Tutto ok. Ora, uno dei veramente cose importanti è fare in modo ogni volta che si effettua un cambiamento nel codice, che si salva. Se non è stato salvato il codice, sei andando a notare una piccola stella lassù. E che si dice stella Non hanno salvato questo codice. Se compilo in questo momento, non è andando a riflettere qualsiasi di tali modifiche, perché il compilatore esamina il file che è sul disco, non il file che è aprire nel vostro editor. Tutto ok. Quindi cerchiamo di salvarla e poi andremo proprio giù qui, tornare fuori. Vieni giù a mio terminale. E cerchiamo di chiarire ancora una volta lo spazio. E possiamo andare avanti e un altro volta a rendere il nostro programma di coniglio. Ed eseguire il coniglio. Che non ha funzionato neanche. Barra sbagliato. Quindi, se si guarda a ciò che ho, ho messo un / n in là, ma ho avuto la barra sbagliato. Tutto ciò che il computer fa è molto esplicito. ok? Un piccolo errore di punteggiatura, e improvvisamente non si ottiene ciò che si vuole. Tutto ok. Quindi cerchiamo di zoom indietro di nuovo. Ci torneremo. Bene fare che la riparazione molto veloce. Metteremo la barra destra. Ci salveremo esso. Ti ingrandiamo nuovo in. Per qualche ragione, che non è essere felice, ma andiamo avanti e torneremo al terminale qui. Chiarirlo. Ti ingrandiamo. E ancora una volta, faremo coniglio. E ora abbastanza sicuro, funziona. Evviva. OK. Quindi cerchiamo di fare questo un po 'più generale. Vediamo se invece di stampa di una particolare struttura, vediamo se possiamo fare questo in modo da poter ottenere tutti i 10 di quei fotogrammi animati che volevamo avere. Così ancora una volta, prendiamo questo un passo alla volta. Facciamo prima generalizziamo, non così che faccio tutti i fotogrammi, ma così faccio un qualsiasi cornice che potrei desiderare. Allora, qual è la differenza tra le cornici? È il coniglio lo stesso? PUBBLICO: Sì. BRIAN Scassellati: Sì. Qual è la differenza? PUBBLICO: Posizione. BRIAN Scassellati: La sua posizione, giusto? E come faccio a controllare la sua posizione? Quanti punti sono mettendo all'inizio e quanti punti sono mettendo alla fine. Così ho avuto cinque al inizio e cinque alla fine. Facciamo sostituire che cinque con un ciclo for. OK. E ho intenzione di creare una per ciclo, ora che sta per dire, Io vado a stampare qualche numero di punti all'inizio. Ho intenzione di utilizzare una variabile. Diciamo che, come su i come il contatore nel mio ciclo. E ho intenzione di dichiararlo fino in alto. E poi nel ciclo for Ho bisogno di fare tre cose. La prima cosa che ho bisogno di fare è che ho bisogno di inizializzare i. Cosa devo inizializzare per iniziare ad essere? 0. OK. Poi ho bisogno di dire, che cosa è la condizione di terminazione? Quando devo smettere? Beh quanti punti si fa desidera stampare su questo? PUBBLICO: Five. BRIAN Scassellati: Cinque di nuovo? Che ne dite di fare qualcosa facciamo diverso, abbiamo fatto cinque. Mostriamo che è diverso. SPEAKER 22: Due. BRIAN Scassellati: Due. OK. Quindi, se voglio due punti, cosa devo mettere qui? PUBBLICO: Tre. BRIAN Scassellati: Three. OK. Quante volte è che intenzione di andare fino in fondo? Che sta per passare attraverso tre volte, 0, 1, e 2, giusto? Va bene, torniamo verso il basso per due. Ora avremo due punti. E quello che voglio fare ogni volta che vado attraverso il ciclo? Che cosa deve cambiare ogni volta che vado fino in fondo? SPEAKER 23: Aggiungere un punto. BRIAN Scassellati: Devo andare avanti. Ho intenzione di aggiungere un punto. Io vado a stampare un punto, ogni iterazione del ciclo. Ma come posso tenere traccia di come molte volte che sono stato attraverso il ciclo? Sto utilizzando i, che variabile, il contatore. Così ogni volta attraverso, vado Per incrementare il contatore di uno. Ora, che è lo stesso per me come dire i = i + 1. Va bene. Potrei farlo che-- mi piace il stenografia, così ho intenzione di dire i ++. OK. Facciamo la stessa cosa qui in basso. Solo io tipo di fatto che uno. Ho intenzione di lasciare che voi ragazzi fare completamente questo. Tutto ok. Quindi cosa devo scrivere qui? Ecco il mio ciclo for. Ho intenzione di fare un printf () e sto andando per fare in modo che posso stampare un solo punto su tale fondo. cosa devo scrivere all'interno di questo ciclo for ora? Ebbene, prima di tutto quanto variabili dovrebbero utilizzare? SPEAKER 24: j. BRIAN Scassellati: Potrei usare j. Posso usare lo stesso? Posso usare i di nuovo? Già. Va bene, perché Is che sto usando qui, Non ho bisogno di nuovo quando Scendo a questo punto. Ma cosa dovrei inizializzare i to? SPEAKER 25: 10. BRIAN Scassellati: 0. Cosa devo controllare? Quanti punti ho bisogno ormai alla fine se ho due punti all'inizio? Ho bisogno di otto alla fine, così che cosa dovrei controllare, i meno than-- PUBBLICO: sette, otto, nove. BRIAN Scassellati: Ho sentito sette. Ho sentito otto. E ho sentito nove. OK. Quindi siamo tutti nel giusto ball-- Jason dice 10. OK. Se avevo bisogno di due punti per il primo, quante fare I-- e ho bisogno di otto punti per la ultima tra-- ho messo un due in alto, cosa devo mettere giù in basso? PUBBLICO: Otto. BRIAN Scassellati: Otto. Perché questo sta per contare da zero a sette. E questo è otto volte attraverso il ciclo. OK. E che cosa devo fare alla fine? PUBBLICO: i ++. BRIAN Scassellati: i ++. Tutto ok. In modo che sia cercando piuttosto bene lì. Proviamo e vediamo cosa fa. OK. Quindi stiamo andando a salvarlo. Nizza e salvato. Ti zoom indietro. Cercheremo qui nel terminale. Ti ingrandiamo. Oops. Faremo, ancora una volta, rendere il nostro programma di coniglio. E andare avanti ed eseguire coniglietto. Ed è così. Quindi c'è il nostro coniglio. Dove ha due punti all'inizio e otto punti alla fine. Tutti ancora con me? OK. Così abbiamo costruito su. Abbiamo costruito un coniglietto, un particolare fotogramma. Ora siamo stati in grado di generalizzare che per costruire più, diversi tipi di cornici. Ora andiamo avanti, e hanno esso genera non solo un fotogramma, ma cerchiamo di generare 10 cornici, dove lentamente rendono il coniglio andare all la strada attraverso il campo. Tutto ok. Torniamo indietro. E cercheremo ora. Allora, cosa ne ho veramente bisogno di cambiare qui? Di cosa ho bisogno di cambiare? SPEAKER 26: Innanzitutto è necessario modificare il numero massimo di punti all'inizio. Perché se stiamo facendo 10 punti, sta andando ad avere bisogno di fino a scalare. BRIAN Scassellati: Sì. Così adesso l'ho sorta di cablato fare sempre due punti all'inizio e sempre fare otto punti alla fine. Voglio costruire un altro ciclo, giusto? Perché non voglio costruire solo una foto coniglietto, Voglio costruire 10 immagini coniglio. Così ho bisogno di costruire un altro ciclo, e come vado attraverso quel ciclo, Voglio cambiare il numero di puntini stampo all'inizio e quanti punti stampo, alla fine, sulla base di quale ciclo attraverso il ciclo Sono dentro. Tutto ok. Quindi cerchiamo di ottenere un altro contatore. Qualcuno ha detto prima di j, così faremo un'altra j. E ora, stiamo andando a costruire un altro ciclo for. Che cosa va dentro quel ciclo? Questa roba deve andare all'interno del ciclo, giusto? Ha il coniglio ha per andare all'interno del ciclo? Ho bisogno di un coniglio in ciascuno di questi 10 fotogrammi? PUBBLICO: Uh-huh. BRIAN Scassellati: Sì. Voglio un coniglietto in ogni dei 10 fotogrammi, giusto? Come circa i punti a Alla fine, ho bisogno che? OK. Quindi ho intenzione di rientrare tutti. Ho intenzione di evidenziare tutti questo, e ho intenzione di colpire Tab. E che sta andando a spingerli tutto un po ', in modo che sia facile per me per vedere cosa c'è nel ciclo. E poi finirò esso. Diciamo. ok? Ora, in questo ciclo che Sono building-- whoops, fare che così si può see-- Ho ottenuto il mio contatore j. Mi avviai a 0. Quante volte voglio per passare attraverso questo ciclo? PUBBLICO: 10 volte. BRIAN Scassellati: 10 volte. Quindi, che numero devo mettere qui? PUBBLICO: 9, 10. BRIAN Scassellati: 9, 10, qualcuno deve dire 11, giusto? Volevo due punti prima e mettere i meno di 2. Volevo otto punti, Ho messo i meno di 8. Ora voglio passare attraverso 10 volte, così ho messo j meno than-- PUBBLICO: 10. BRIAN Scassellati: 10. Ci siamo. E cosa faccio alla fine per j? ++, Incrementarlo. OK. Ora, ecco la parte difficile, qual è succederà adesso se faccio questo? Sto per stampare i 10 fotogrammi? SPEAKER 27: penso saranno tutti uguali. BRIAN Scassellati: Faranno tutto più lo stesso, giusto? Perché tutti loro sono ancora in corso mettere due punti all'inizio. Ma io non li voglio avere due punti l'inizio. Quanti punti devo vogliono all'inizio? PUBBLICO: Cambiare. BRIAN Scassellati: I vogliono cambiare, giusto? Quindi cosa devo qui che sta cambiando ogni volta che il ciclo passa attraverso? PUBBLICO: Numero di punti, j. BRIAN Scassellati: j, il numero di punti. Così posso cambiare questa ad essere j. La prima volta attraverso la cappio, cosa che sarà? Che cosa faccio a impostare j in un primo momento? PUBBLICO: 0. BRIAN Scassellati: Così come molte volte sto andando a fare questo? 0. La seconda iterazione del ciclo, di j sta per essere 1 perché ho incrementarlo. Quanti punti farò stampare? 1. La terza iterazione del ciclo, quanti punti farò stampare? PUBBLICO: Tre. BRIAN Scassellati: j sta per essere 3. Quanti punti farò stampare? Oh, scusa, j sarà 2. Quanti punti farò stampare? PUBBLICO: 2. BRIAN Scassellati: 2. OK, così ho intenzione di continuare a incremento che come andiamo avanti. Che ne dici di laggiù? Che cosa va giù qui? Non voglio sempre 8 alla fine più? SPEAKER 28: 10. BRIAN Scassellati: Voglio 10 punti? Lo voglio cambiare, anche. Così come lo voglio cambiare? PUBBLICO: [incomprensibile]. BRIAN Scassellati: Beh, se io hanno cinque punti, all'inizio, quanti punti di ricevo alla fine? PUBBLICO: Five. BRIAN Scassellati: Se ho sei punti all'inizio, quanti ricevo alla fine? PUBBLICO: Quattro. BRIAN Scassellati: Se ho avuto sette punti all'inizio, quanti ricevo alla fine? PUBBLICO: Tre. BRIAN Scassellati: Se ho ottenuto punti j all'inizio, quanti ricevo alla fine? 10-j. OK. Quindi cerchiamo di provare che fuori. Quindi ho intenzione di salvare il nostro programma di coniglio. Ancora una volta ci zoom out. Andremo giù per il nostro terminale. Ti cancellarlo. E ingrandire. Faremo il nostro programma di coniglio, di nuovo. E noi eseguirlo. Uh Oh. Tenere, andiamo a rimpicciolire. Ho ricevuto 10 fotogrammi? Beh, come molti conigli faccio vedo lassù? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Ho 10 fotogrammi. Sono tutti uguali? PUBBLICO: Sì. No. BRIAN Scassellati: No. Quel primo, il coniglio è lontano a sinistra. E qui, il coniglio è di gran lunga il SPEAKER 29: Giusto. BRIAN Scassellati: Allora, quello che ho dimenticato di fare? SPEAKER 30: Inizia una nuova linea. BRIAN Scassellati: Ho dimenticato per iniziare una nuova linea, di nuovo. Lo stesso errore che ho fatto prima. Va bene, andiamo rimediare. Ora, io ho ancora il codice in là per fare una nuova linea. Perché non ha funzionato? SPEAKER 31: Non è all'interno del ciclo. BRIAN Scassellati: Oh, non è all'interno del ciclo. Giusto. E 'seduto fuori qui. E il ciclo for è tutto che è all'interno di quel testo. Quindi ho intenzione di muoversi questo all'interno del ciclo for. E ti Tab di fronte ad essa per mostrano che è nel posto giusto. E ora, salveremo di nuovo. Ti zoom out. Faremo passare al nostro terminale. Ingrandire. Ti rifacciamo il nostro programma di coniglio. E ora, ora abbiamo i nostri 10 fotogrammi. [APPLAUSO] BRIAN Scassellati: OK. Così. Qui è la nostra cicli for nidificati. Siamo stati in grado di generare nel ciclo interno quanti punti ho voluto stampare all'inizio, alla fine. E l'anello esterno controllato il numero di fotogrammi stavo costruendo. Abbiamo iniziato con un po ' kernel del problema, e abbiamo costruito fuori da quel punto. Tutto ok. Facciamo un passo in più. Sei pronto? C'è una cosa a qui dove abbiamo in realtà tipo di arrivati maggiore complessità di quanto abbiamo bisogno. Diamo un'occhiata. Nel nostro programma di coniglio, se zoom out qui, Io in realtà fare un po 'lo stesso cosa più e più volte. Che cosa devo fare che è una sorta di la stessa cosa ripetuto due volte? SPEAKER 32: Stampa i puntini. BRIAN Scassellati: Sì Stampo quei puntini due volte. Davvero, dovrei avere questo commento qui. Stampo alcuni punti nella parte inizio, proprio qui. E poi ho stampare alcuni punti alla fine. E faccio tipo di esattamente la stessa cosa. Quello che stiamo per iniziare lavorando su nelle prossime settimane è essere in grado di prendere quei blocchi di codice che usiamo più e più volte, e attraverso un processo chiamato astrazione, stiamo andando a tirare fuori e scriverle una volta così che possiamo poi riutilizzarli più e più volte. Così proviamo questo. Pronto? Stiamo andando a prendere questo blocco di codice. E ho intenzione di portarlo fuori di lì. E ho intenzione di define-- giù in fondo, Ho intenzione di scrivere una nuova funzione. Non è intenzione di restituire qualcosa. E ho intenzione di chiamarlo printDots. Sta andando a prendere uno argomento, un numero intero che dice howManyDots dovrei stampare. E ora invece di stampare punti j, io sarò stampare dire howManyDots dovrei stampare. E c'è un piccolo problema qui. Qualcuno sa di cosa si tratta? Cosa devo che la elencati qui dentro che non è definito? PUBBLICO: [incomprensibile] BRIAN Scassellati: Bene, come tanti punti è definita fino qui, ma sto usando la variabile i. Quindi ho intenzione di prendere quella variabile i e ho intenzione di definirlo nel qui anziché. Quindi ora sta andando stay-- oops, Ha ottenuto il blocco maiuscole somehow-- Sono intenzione di mantenere i giù qui. Così ora ecco la mia piccola funzione o sub-routine, e si dice, quanti punti farò stampare? E sarà passare attraverso questo ciclo e stamparli più e più volte. Posso quindi modificare il mio programma qui. E che cosa ha fatto io chiamo tale funzione? printDots. Così ti chiamo printDots. Quanti punti voglio stampare la prima volta dinanzi al coniglio? PUBBLICO: j. BRIAN Scassellati: j. Quanti punti voglio stampare alla fine, dopo il coniglio? 10-j. E c'è una cosa che mi manca. Come si è visto nella lezione di oggi, stiamo andando a dichiarare printDots sopra per dare il prototipo. OK. Quindi quello che ho fatto è che ho cercato di isolare quella parte del codice riutilizzati che ho fatto più e più volte. E ho cercato di tirare fuori in modo che tutto ciò che è contenuto in un unico luogo. In questo modo, se ho un errore da qualche parte, Ho solo per risolvere il problema in un punto. Tutto ok. Quindi cerchiamo di salvarlo. E facciamo in modo che funziona. Quindi cerchiamo di andare fuori. Andremo di nuovo al nostro terminale. Ti ingrandiamo. Faremo questo processo coniglio. Oh. E mi ha dato un avvertimento. Che cosa è mi dice? Ebbene in uno di questi volte, si vogliono sempre per scorrere fino al primo error-- ora su questo, ho solo uno. Mi dice in bunny.c, on line 8, colonna 9, c'è un problema. Si dice, hai dichiarato questo i variabili e non è stato utilizzato. Ora normalmente, che è non il peggiore errore. Questo è facile da risolvere. E infatti, possiamo tornare a. Possiamo tornare a Bunny. E in questo caso, tutto ciò che hanno a che fare è sbarazzarsi di i, perché non stiamo utilizzando i all'interno principale più. Stiamo usando solo all'interno della nostra sub-routine. Quindi cerchiamo di salvare quello. Ci torneremo. E ingrandire. Avremo ancora una volta facciamo coniglio. E ci sono ancora i nostri 10 fotogrammi. OK. Ogni volta che si è dato un procedure-- Già. SPEAKER 33: Ho un-- Sono confuso. Puoi tornare al codice? BRIAN Scassellati: Sì. SPEAKER 33: Allora, quando hai scritto prototipo, l'argomento si se fosse nominato è stato chiamato howmany? Ma, below-- BRIAN Scassellati: Oh sì. SPEAKER 33: --called loro qualcosa differente, io non capisco. BRIAN Scassellati: Perché sono diversi. Ecco, questo è una grande domanda. Quindi la domanda era, fino qui, ho scritto howmany, e giù in basso, ho scritto howManyDots. La ragione è che nel prototipo, In realtà non è prestando attenzione ai nomi che si sta mettendo in. Tutto ciò che realmente si preoccupano è che è un numero intero. Vuole conoscere la forma di ciò che si sta mettendo in. Ora stylistically-- oops-- cosa dovrei fare, è mi piace fare questi partita. OK. Perché che sarà tenerlo più facile per me ricordare. Ma quello era il mio errore Sì. SPEAKER 34: E così per il prototipo al lavoro, solo scrivendo che la linea, scrivere il prototipo, permette che la funzione che viene proprio sotto per andare fino in fondo e recuperare che cosa significa? BRIAN Scassellati: Che cosa significa è quando il compilatore passa attraverso, va dalla cima il codice per il fondo. E ciò che questo prototipo è, è che è fondamentalmente una promessa. Si dice, ci sara ' una funzione definita da qualche parte. Sta andando essere chiamati printDots. E sta andando a prendere un argomento che sta per essere un numero intero e sta andando a tornare niente, tipo void. OK. Vi prometto che sta per essere definito da qualche parte lungo la strada. Ma ogni volta che si vede che, come si va giù per il resto della mia funzione principale, voglio di trattare che in funzione che prende un ingresso intero. E così quando il compilatore va giù attraverso questo, si vede che la promessa. E quando si arriva verso il basso, continua a andare, continua a andare, trova la prima volta printDots è menzionato. E dice, Oh, stai dando me questo j. j è un numero intero. Beh, mi ha promesso che avresti essere un numero intero e che è di destra. Va bene. E poi finalmente, verso il basso nella parte inferiore, prima di arrivare alla fine del mio lima, faccio bene sulla mia promessa e io definisco. ok? SPEAKER 35: Così, il saves-- programma salverà spazi vuoti che va indietro e si riempie alla fine? BRIAN Scassellati: Non è circa l'allocazione di memoria. In realtà è solo di ciò che tipo ti aspetti di vedere. Se questa cosa avere uno argomento o cinque argomenti? Dovrebbe avere interi essere dato ad essa, o stringhe? Questo è tutto quello che sta cercando a fare è controllare, stai dando a me la giusto tipo di argomentazione. ok? Tutto ok. Lasciate che vi lascio con un altro po 'a guardare. ASCII art non è il grande modello dell'animazione come lo è oggi. Ma alcune persone naturalmente prendere le cose e spingono ai loro estremi. Questo è, come dimostrato David in conferenza, un pezzo di codice che si dovrebbe in nessun caso provare a riprodurre voi stessi. Perché è terribile stilisticamente. In realtà, è progettato per essere il più difficile possibile leggere. OK. Quindi, per fare ancora una volta, cerchiamo di zoom qui. Ho intenzione di andare, cambiare directory. Ho intenzione di salire di un livello, di nuovo al mio lavoro. Io poi cambiare directory in questo altra directory che ho creato. E questo è il internazionale Offuscato C Programming Contest. Mezzi offuscato come duro possibile comprendere. Quindi, per favore, non spaventatevi se si guarda a questo e andare, non posso leggere questo. Questo è il punto di esso. ok? Ma, abbiamo questa meraviglioso programma che io sono andando a guardare semplicemente digitando più. E vediamo se riesco a diminuire solo un po ', in modo da poter vedere E questo è il programma. Si chiama endo.c. E sembra che questo secchio con tipo di lettere F-L-U-I-D in esso. Questo è in realtà un programma. E 'scritto nella più oscura modo che gli autori potrebbe eventualmente Scrivilo. Ma è un meraviglioso piccolo pezzo che genera un modello di fluidodinamica. E così stiamo andando a dare tale modello un input che sembra che questo, di un staired set di contenitori con un fluido, alcuni liquido, in cima. E noi l'abbiamo simulare quello che sta succedendo ad esso. Così Chiamerò quella funzione, endo. E ho deciso di dargli che file di input che ho avuto. E c'è il nostro epitome di ASCII art. Un completo simulatore fluidodinamico esecuzione in poche linee di codice. Ora che cosa è in realtà davvero sorprendente di questo piccolo programma è che io voglio smettere ora, così ho intenzione di utilizzare ciò che il comando? PUBBLICO: Control-C. BRIAN Scassellati: Control-C. OK. Così Userò Control-C. C Che ti fermarlo. Io a cancellare di nuovo. E ora ho intenzione di invocare la il programma, eseguire il programma, utilizzando stesso come input. E vedremo la fluidodinamica simulazione di sciogliersi. OK. Si prega di non lasciare che il programma essere la cosa che ti confonde. E 'solo così che possiamo porre fine a qualcosa di fresco e interessante. OK. Buona fortuna con il vostro set di problemi. Saremo lieti di rispondere domande dopo le lezioni. Grazie tanto, ragazzi.