[RIPRODUZIONE DI BRANI MUSICALI] ALLISON Buchholtz-AU: Ciao a tutti. Benvenuto nel tuo primo sezione ufficiale CS50. Come si può, vedere si tratta di sezione CS50-come, solo a tirare su la nostra agenda per oggi. Allora, chi sono io, come sono sicuro siete tutti chiedendo. Io sono il tuo TF. Io non sono solo uno studente casuale che sta impersonando il vostro TF. E ho intenzione di passare attraverso tipo di hanno sezioni affluiranno, aspettative che abbiamo, risorse, così via e così via. Stiamo per parlare di array, ASCII funzioni, gli argomenti della riga di comando, e non è qui, ma Sarò anche aiutando è sorta di pensare attraverso il vostro prossimo pset per questa settimana. Quali Sono sicuro che tutti apprezzeranno. Quindi, prima interrogo chi sono io, oltre al tuo TF esuberante qui. Sono Alison Buchholtz-Au. Questo è il mio secondo anno TFing CS50. Ho anche TF CS51 in primavera. Si potrebbe vedere di nuovo lì se si decide di prenderlo. Sono anche un PAF, in modo che qualsiasi Freshmen-- e se non sei una matricola, questo è il mio terzo anno come un compagno di consulenza. Sono molto ben versato in consigliandovi sulla vita e corsi all'interno di CS e non all'interno di CS. Io sono un Computer Science concentratore. Io sono un anziano in Adams House, casa migliore. E prima sono passato a CS mio Sophomore Primavera, Mi è stato effettivamente un ingegnere biomedico. Stavo per andare a scuola Med. Stavo per essere un chirurgo trauma. E che ha completamente cambiato da quando ho preso CS50. Ho preso il mio corso Sophomore caduta. Era la mia prima introduzione alla CS mai. Io ero uno dei 78% di voi che aveva zero esperienza in arrivo, ed è completamente cambiato la mia vita. E ora sto lavorando a Microsoft e la vostra bella TF. E CS50 è probabilmente uno delle migliori esperienze che ho avuto qui a Harvard-- sia prendendo la classe e di essere in grado di aiutare insegnare agli studenti come te. Quindi sono molto eccitato che siete tutti qui. Nel caso in cui si è venuto a in ritardo, non vi è piacere, che si dovrebbe sentire libero di venire afferrare, o inviare qualcun altro per afferrare per voi. va bene. Non voglio mangiare questo. La mia stanza ha abbastanza cioccolato, così y'all dovrebbe cercare di finire quel. So che ci sono 100 pezzi, ma come, 4:00 su un Lunedi, Penso che ognuno potrebbe usare un po 'di zucchero. Quindi, tutti voi che siete ufficialmente nella mia sezione avrebbe ottenuto una e-mail da me con il mio numero di telefono, e-mail address-- sentitevi liberi di aggiungere me su Gchat, sentitevi liberi di aggiungere me su Facebook, e anche per il resto di voi, potete scrivermi qui. Ci sono due H di. Ognuno fa sempre come due L's o due C. Due è nel cognome H. In caso contrario, sta andando a rimbalzo, e Non ho intenzione di ottenere il vostro e-mail. Quindi sentitevi liberi di scrivermi, a contattarmi in qualsiasi momento. Io non posso tornare a entro 24 minuti ma prometto di tornare entro 24 ore. Se mi chiami mezz'ora prima il tuo pset è dovuto, è essere come, Non ho idea di quello che sto facendo Allison. Aiutami. Ho intenzione di calmarti, ma alla fine della giornata, se mi stai chiamando mezz'ora prima il tuo pset è dovuto con nulla di scritto, Ho intenzione di essere come, beh, forse è il momento di usare quel giorno di ritardo. Quindi io risponderò a tutte le vostre richieste in modo molto tempestivo. Il mio telefono è di solito attaccato alle mie mani. Io di solito rispondo molto veloce di 24 ore, ma posso solo garanzia una risposta 24 ore. Bene. Allora perché siamo qui? Inoltre, se avete domande a qualsiasi momento, per favore fatemelo sapere. Parlo molto. Parlo veloce, ma per favore sentitevi liberi di interrompermi. Dà Mi stanza respirare pure. Quindi le sezioni sono un momento per noi in realtà solo di immersione in, ottenere alcuni hands-on esperienza, per passare attraverso gli argomenti che abbiamo menzionato in classe o in materiali di studio che si raccomanda a voi ragazzi on-line. E ci troveremo a passare attraverso alcune di queste risorse in un po '. Così alcune note su supporto sezione. CS50-- una delle cose che rende è una delle mie classi preferite è la sensazione che non sei mai solo. Abbiamo uno staff di oltre 100 le persone che sono qui per aiutarti. Abbiamo orari d'ufficio Lunedi al Giovedi. Quindi ci sono così tante persone che amare la classe tanto quanto me e che sono davvero qui perché vogliono essere qui. La maggior parte di noi sono studenti, e questo è come una quinta classe in aggiunta per il resto del nostro lavoro. Ed è un sacco di lavoro, ma lo facciamo perché ci piace, e ci piace tantissimo per insegnarvi e contribuire a condividere il nostro entusiasmo per questo soggetto e questa categoria. Quindi, si prega di prendere vantaggio. Vieni a parlare con noi. Mi sento solo quando i miei studenti non parlare con me, quindi se volete, venire in giro con me. Sarà fantastico. Così sezione è ovviamente uno dei vostri più grandi cose. Andremo attraverso le cose che hai imparato a lezione, fare alcuni brevi esempi quando abbiamo tempo, e in generale di tipo avere un'idea delle cose si dovrebbe pensare su per il vostro problema impostato. Shorts-- quante persone effettivamente visto il video dal vostro zero breve? Qualcuno mi riconosce? Quindi questi sono molto grandi. Si dovrebbe guardare quelle. Molto lavoro è stato messo in loro. E sono solo destinate ad essere bite-size pezzi per voi a guardare solo per tre o quattro minuti e ottenere un migliore comprensione di un concetto. A piedi throughs-- come molte persone hanno guardato i walk-through per i precedenti? Zamyla è incredibile, vero? Come, Vorrei essere a volte Zamyla. Quindi sicuramente utilizzare i walk-through. Lei scomposizione in pezzi piccoli, bite-size. E quando si hanno questi enormi specifiche dei tuoi insiemi di problemi, che sta per essere davvero importante per essere in grado di trovare solo un posto per avviare e lavorare lentamente attraverso di essa. Va bene, abbiamo anche Study50, che è study50.harvard.edu, credo. Si può solo Google studio, e sarà venire. Questo è uno dei migliori risorse che abbiamo. Si tratta di PowerPoint con note e mettere in pratica i problemi per voi con soluzioni che si può effettivamente camminare attraverso. Quindi, se si vuole mai più pratica, più di noi in sezioni o più che i set di problemi, questo è davvero un posto vi incoraggio a andare. E 'stato costruito l'estate scorsa da alcuni dei miei buoni amici. Ed è incredibile. Infatti, molte delle diapositive che userò per la sezione verranno da Study50. Così un sacco di TF usarlo. Infine, mentre menzionata, orari d'ufficio. Se hai problemi con i compiti, si è problemi con un concetto, venire in orario d'ufficio. Vai all'inizio della settimana, se potete. Uscire al quad, perché è un po 'lontano. A nessuno piace andare là fuori. Ma è a vostro vantaggio, perché allora sei andando ad avere tutte queste TF, [Incomprensibile] ti circondano. E soprattutto ora, solo una punta, giovedì sono molto freddo in questo momento in Mather perché i vostri p-set sono dovuti il ​​giovedì. E sapendo vuole utilizzare ancora i vostri giorni di ritardo. Quindi, se hai problemi con i concetti, ci sono un sacco di TF che sono lì per aiutarti. Allora venite fuori a Mather il Giovedi. Se volete vedere me, Ho intenzione di essere lì. Sto facendo il mio solito compiti a casa propria, perché nessuno vuole il mio aiuto. Allora venite a trovarci. Incontriamoci a metà strada. Così come molte persone hanno partecipato conferenza o guardato on-line? Come molte persone sono andate a super-sezione la scorsa settimana? Freddo. Questo è in realtà un buon numero. Quanti di voi hanno letto il tuo spec per questa settimana, per la vostra pset? Ooh, sono orgoglioso di voi ragazzi! Più caramelle per tutti voi. Bene, così che cosa si intende "Incontrarci a metà strada," è che la sezione è in realtà solo sta per essere super utile per voi se venite in dopo aver letto il tuo specifiche per il vostro pset. Perché quando vado attraverso una visione d'insieme di cose che dovreste cercare fuori per, non sta andando a fare come molto senso se si non so cosa impostare il problema sta per essere chiesto di fare. Se non si arriva al punto, ovviamente, Non posso essere che utile a voi. Io non ho intenzione di farne una questione personale se tu non vieni alla mia sezione in questo momento, ma sicuramente si dovrebbe. Se non è possibile, vederli online. Sono lì per un motivo. Il mio sarà proprio lì. Come si nota, siamo in fase di registrazione, quindi sarà lì per voi ragazzi. Così, andando a lectures-- questo è, ovviamente, dove che stai ricevendo il iniziare del vostro materiale qui. Quindi io provare e aiutare per quanto posso, ma posso incontrare solo finora. Dovete tipo di incontrarci a metà strada. Grading-- così, tutti voi che ha ottenuto una e-mail da me, tu sei la mia sezione ufficiale. Sarò di classificazione vostri p-set. E io voglio solo dire, una cosa che si dovrebbe davvero prestare attenzione a sono i commenti. I commenti sono spesso più utili rispetto al punteggio effettivo ti diamo. E i commenti sono in realtà dove trascorro molto del mio tempo quando sono classificazione. Quindi mi sento di apprezzare se li legge. E sono in realtà come si sta andando per saperne di più sul design e lo stile e le cose che sono un piccolo taglio meno e asciutto. Quindi, in realtà prestare attenzione a tali osservazioni. Se avete domande su di loro, o domande circa il vostro punteggio, si prega di venire a parlare con me sia prima sezione, Io probabilmente essere appeso fuori nella hall, o successivamente. Se si desidera pianificare one-to-one su come si può contribuire a migliorare in seguito serie di problemi, fammelo sapere. E poi solo un paio di consigli per voi ragazzi. Così uno dei più grandi cose Ho sempre sottolineare a mia sezione quando si sta imparando come codificare è di scrivere le cose su carta. Se si dispone di un piano di gioco per dove il codice ha bisogno di andare e ciò che deve do ed è ripartito in piccoli pezzi di pseudocodice codice che hai scritto fuori, si sta andando ad essere meno rischia di fare errori di sintassi o creare un ciclo che se non ha un altro. Se sai dove sei andare nel complesso, si è meno propensi a fare questi piccoli errori che a volte si prendere ore per risolvere, perché siete come, dove mi sto perdendo questa fascia? In tal senso, si prega di utilizzare Style50. Soprattutto quando si è andare in orario d'ufficio, se il codice è tutto commutato su un lato, è politica corso che si può dire, risolvere il problema in modo che appaia come dice Style50 si deve, e poi ti aiuteremo. Così farò la vita più facile. Si farà la vita più facile. Sono tutti più felici. Ognuno ottiene voti migliori. Non è quello che vogliamo tutti? Quindi scrivere le cose su carta prima Avete mai toccare il computer. Parla con le cose ad un livello elevato, e assicuratevi di sapere dove stai andando. E se non siete sicuri, sedersi con qualcuno e camminare attraverso passo dopo passo che cosa il vostro codice dovrebbe fare. E nove volte su 10, sarete come, oh, ho dimenticato una condizione if o ho dimenticato un punto e virgola qui o Sto aggiornando questo torto variabile. Quindi questi sono i miei consigli per il successo. Quindi, dal momento che circa la metà dei cerchi come avete partecipato sezione super, Sto solo andando a molto brevemente passare attraverso cicli, che non erano nella nostra agenda originale. Ma sono veramente importanti. E così ho intenzione di genere di velocità attraverso quelle prima di entrare nella nostra sezione reale. Prima di fare questo, ci sono qualsiasi questions-- logisticamente, personalmente, è lì qualcos'altro che vuoi sapere su di me o su sezione o classe in generale? Tutto bene? OK, fresco. Incantevole. Così loops-- voi ragazzi dovrebbero tutti riconoscere questi pezzi da zero. Quindi, i cicli sono fondamentalmente solo un modo per noi di fare qualcosa certo numero di volte, alcuni ripetuto azione basata su qualche condizionale. Quindi abbiamo tre tipi diversi. Abbiamo ciclo for, while e do-while. Quindi per loops-- non ci resta che una layout generale qui di un ciclo for. E questo è grande per quando si sa come molte volte qualcosa deve eseguire. Quando si parla di altri loop, ti capire perché questa è una distinzione importante. Ma per i cicli sono qualcosa insieme. Sai che possibile calcolare il numero o si conosce il numero di volte che vuole questo ripetuto all'inizio. Quindi, se vedete qui, avere solo un carattere generale quadro di scheletro per un ciclo for qui. Così per inizializzazione, è qui le variabili vengono inizializzate. Con Mario, sono sicuro che ragazzi hanno fatto qualcosa come int i è uguale a 0. È lì che sarebbe accaduto in blu. Tu hai la tua condizione, che è ciò che è controllato ogni volta. Se questa condizione è vera, allora il resto del codice viene eseguito. Poi sarà eseguito again-- e chiedere. E poi abbiamo l'aggiornamento, dove si sta aggiornando la variabile. Quindi, ancora una volta, con come Mario, sono sicuro Avete fatto una cosa del genere i plus plus. Così ogni volta che il ciclo Ran, ho ottenuto aggiornato in modo che quando abbiamo fatto il check contro alcune condizioni, si stava cambiando. Perché se solo avere una variabile statica, se si esegue la prima volta, è solo andando per eseguire all'infinito. Quindi bisogna essere sicuri di aggiornare correttamente la variabile. E abbiamo anche solo un rappresentazione visiva lì. Tutto bene? Per i cicli. Dovuto vedere questi nel vostro pset. Freddo. Così qui è solo un esempio facile. Stampa questa è CS50! 10 volte. E così abbiamo la nostra inizializzazione, come si vede lì, con int i uguale a 0, per i è minore di 10, e i plus plus. E sarà la stampa che per 10 volte. Così, mentre loops-- cicli while sono grande quando non lo fai necessariamente devono sapere quante volte è andando ad aggiornare all'inizio. Basta un po ' condizione che la controllata. E questo potrebbe essere qualcosa di simile a while-- prendiamo un esempio dal vostro pset. Se Mario, si tenta di immettere un numero negativo. Giusto? Dovevi ri-chiederà il vostro utente. Così si può dire, beh, se gli ingressi degli utenti qualcosa minore di zero, ri-pronta loro. E sono sicuro che potrebbe avere stato qualcosa che alcuni di voi utilizzati nel codice. Quindi è una cosa semplice. Hai mentre, un po ' condizionale che è controllato ogni volta che il codice va da eseguire. Se restituisce true, corriamo esso. In caso contrario, non lo facciamo. E che cosa è veramente qualcosa importante-- I pensare che David ha parlato in lecture-- sono le parentesi graffe. Qualunque sia, entro lo stesso parentesi graffe è ciò che è eseguito. Se si dimentica quelli bretelle, è solo andare essere direttamente la linea dopo il tempo è stato eseguito. Quindi, se avete tre le cose che dovrebbero accadere quando questo condizione restituisce true, e non si dispone di tali parentesi graffe, solo la prima cosa sta per accadere. Quindi, essere molto consapevoli di dove si mettono le parentesi graffe. Se attaccate con Style50, questo sarà sicuramente aiutare. Freddo. Quindi questo è un conto alla rovescia da 10 a zero. E come vedete qui, inizializziamo qualche banco al di fuori di esso. Una cosa che è diverso è non stiamo inizializzazione nostra variabile all'interno del nostro ciclo while. E 'inizializzato al di fuori di esso. Noi stiamo semplicemente mettendo il condizionare in per il nostro tempo. Quindi in questo caso, è pur conteggio è maggiore di zero. E il risultato della stampa ciò che il nostro conteggio è, e poi decrementa la nostra variabile. E questa è anche un'altra cosa da notare. Il nostro aggiornamento non avviene entro questa prima parte del ciclo while. Sarà effettivamente accadere entro le parentesi graffe, il corpo del testo. Così, do-while loops-- do-while sono grandi per la convalida dell'utente. Così alcuni di voi potrebbero avere anche usato questo nella vostra pset. Si può dire, fare, come, chiedere all'utente per l'input. E poi, mentre, come, il ingresso è minore di un certo numero. Così, per un caso esplicito con Mario, è sarebbe fare printf, immettere un numero intero, e poi qualche intero è uguale getint. E poi troveremo a eseguire per primo il codice. Avrete in realtà hanno qualche intero. E allora si potrebbe dire, mentre intero che è minore di zero. Così che cosa sta andando a fare è che è andando ad eseguire almeno una volta. Sta andando a verificare le condizioni. Se la condizione è vero, sarà eseguito di nuovo. Così do-while sono grande per la convalida degli utenti, perché si conosce il codice sta per eseguire almeno una volta, mentre con cicli while, non sei garantito che è andare per eseguire una sola volta. Sta andando a controllare le condizioni prima e poi decidere di eseguirlo, mentre un do-while eseguire il codice prima e poi verificare se è necessario ripeterla. Fa che la distinzione dare un senso a tutti? Ok. Freddo. Quindi, in questo caso, questo è una specie di quello che stavo parlando, Questa nuova istruzioni, fino a ottenere un numero positivo. Così sappiamo che printf "Inserire un numero positivo" e in realtà chiedendo che ingresso avverrà almeno una volta. Se l'utente è male e continua l'immissione di un numero negativo, che sa quante volte sarà eseguito. Ma questo codice è garantito eseguire almeno una volta. Ed è per questo che è grande per l'ingresso di convalida. E si utilizzerà che un bel po '. D'accordo, tutte le domande fino ad ora? Siamo tutti buoni? Sto parlando troppo in fretta? Siamo bravi? Ok. Imponente Quindi stiamo per andare avanti e parlare di array. Freddo. Quindi, gli array sono fondamentalmente solo strutture di dati che ci permettono di memorizzare cose dello stesso tipo. Quindi, se avete mai avuto una matrice, è o solo andando ad avere int o è solo andando ad avere carri o è solo andando ad avere caratteri. Tu non stai andando ad avere un int con un char con un galleggiante con un doppio. Una cosa. Gli array sono solo un formato, o sono solo un tipo. Quindi qui abbiamo un array di dimensione tre con tre numeri interi in esso. Potrebbero galleggianti, ma siamo andare a dire che sono int. Quindi, una cosa da capire è che gli array sono di dimensioni serie quando si inizializza loro, e non sono easily-- dal momento che tutto è meno confortevole, si dovrebbe solo pensare a loro come non essendo in grado di estendersi in dimensioni. Tuttavia grande di partire l'array in principio, questa è la dimensione che sta andando di rimanere, perché gli array sono continui blocchi di memoria. E quando voi ragazzi ottenere in un po 'di più di come la memoria in realtà è disposto su dischi e nel mucchio e lo stack, si farà un po 'più senso. Ma si può solo pensare a come, è solo una fila di spazi su disco. E non si può garantire che non c'è sta per essere spazio libero dopo. È possibile inizializzare un array di tre e allora forse si inizializzare un altro array di cinque più tardi, ed è subito dopo. Quindi, se si dovesse andare a pronti passato tre in quella prima matrice, si sarebbe scrivendo su qualcosa d'altro. Così array are-- per voi ragazzi, solo pensare a loro come una dimensione fissa. Quindi la creazione di un array-- si sta andando ad avere bisogno di fare questo un po '. Quindi, nello stesso modo che abbiamo un struttura generale per il nostro cicli for, abbiamo una bella generale Struttura per la nostra gamma. Perché sono di un tipo, tutte le elementi di un array sono di un tipo, è necessario inizializzare cosa che tipo è. Quindi, come vedete qui, abbiamo un bel tipo di dati staffa. Quindi, se stiamo creando un int matrice, che sarà int. Se stiamo creando un char array, sarà char. Se stiamo creando una stringa array, sarà stringa. E poi il nome della matrice, tutto ciò che vuoi che sia. Quindi forse è punteggi dei test o forse si tratta di studenti o forse è la caramella. Qualsiasi cosa decidiate di assegnare un nome al matrice, che è quello che sarà. E poi tra parentesi, ti avere la dimensione che si desidera. Quindi, stiamo memoria di 10 studenti o stiamo memorizzeremo 15 tipi di caramelle? Che cosa non. Quindi, nel nostro esempio qui, stiamo creando una matrice di dimensione tre, che voi ragazzi vedi qui a destra. E quando abbiamo inizializzato si, tutto è impostato a zero. Quindi è solo pensato di come una tabula rasa. Abbiamo tutti questi spazi, abbiamo tutti queste caselle potremmo mettere i nostri dati in, ma sono solo in bianco per il momento. Quindi, se vogliamo davvero assegnare loro questi valori, lo facciamo da qui a destra sotto mostra. In modo da avere qualunque sia il nome del array è quindi quello di indice che si desidera. Così l'indice si riferisce solo per, come, che cosa fessura stiamo guardando. E una cosa importante da notare è che gli array sono zero indicizzati. Quindi, se vogliamo che il primo spazio in memoria di una matrice, che sta per essere zero. Se vogliamo che il secondo, sarà uno. Se vogliamo che il terzo, sarà a due. Così via e così via. Che è anche il motivo per cui, convenzionalmente, quando facciamo per loops-- sono sicuro ragazzi sono state chiedendo, perché cominciamo a 0 contro 1? E questo è perché quando noi transizione ad utilizzare gli array, è mappato correttamente. Quindi, se si vuole iterare in un array, rende molto più senso faccio i uguale a 0, perché noi sanno che corrisponderà al primo posto in memoria. Tutto bene con quello? Freddo. E poi sul fondo è solo un altro modo per inizializzare un array. Hai ancora la tua tipo di dati e il nome, ma invece di realtà mettendo una dimensione in là, si può solo fare parentesi vuote. E poi con questi ricci bretelle in basso, è possibile basta inserire i dati che si desidera separati da virgole. E questo verrà automaticamente dico, OK, vedo di avere tre cose in questi tutori. Quindi so che ho bisogno di assegnare tre blocchi di memoria e quindi memorizzare quelle. Quindi la prima versione si potrebbe utilizzare se stai chiedendo il vostro all'utente di inserire valori in modo da poter scorrere la matrice e ask-- ottenere qualche int a loro input. Se si conoscono i valori di anticipo, rende molto più senso utilizzare il secondo modo. Ma nella maggior parte dei casi, è possibile non sapere ciò che quei valori stanno per essere. Freddo. Tutte le altre domande? Va bene. Così l'accesso elements-- così uno delle grandi cose su array è che sono casuali accesso, il che significa che si non c'è bisogno di guardare attraverso ogni blocco. Se si sa che si volere ciò che è in blocco due, si può solo dire, dammi bloccare due. Ed è per questo che questi indici sono così importanti, ed è così che abbiamo effettivamente accedervi. Quindi, in questo caso, come abbiamo visto prima, quando siamo stati l'assegnazione di valori, in quello prima, abbiamo avuto il nome e la Indice abbiamo voluto accesso, giusto? Così, allo stesso modo, che è tutto quello che fare per tirare in realtà che i dati fuori. Abbiamo il nome e l'abbiamo avere l'indice che vogliamo. Quindi, in questo caso, il ciclo for qui in basso, chiunque sa quello che sta facendo, che cosa sarebbe stampare? Mmhmm? Esattamente. Quindi sì, è solo scorrendo. i è uguale a zero-- possiamo camminare attraverso il codice appena rapidamente. i è uguale a zero, i è minore di tre, a questo punto, giusto? In modo che i check out. E noi diciamo, OK, stampa f Tutto ciò che è in temperatura i. i è pari a zero proprio qui quando abbiamo iterare, così andiamo a questo primo punto, e si dice, OK, 65 è il numero che si vuole stampare. Così sarà stampare 65 e poi fare una nuova linea. io l'aggiornamento, in modo che stampa 87. Si aggiorna di nuovo, e si metterà a stampare 30. Tutti fresco? Impressionante. Bene. Quindi, ecco un tipo di cosa stavo dicendo come è possibile tenere traccia di punteggio di qualcuno e perché si usa il primo modo di inizializzazione invece di quella secondo modo. E questo solo passa attraverso. E noti che ci sono una classe di dimensione 30. E siamo inizializzazione questo array di int che è di dimensione 30. E allora siamo iterazione attraverso e siamo che chiede all'utente di inserire punteggi per ciascuna di esse e assegnando a un luogo specifico in memoria da qualche parte in tale matrice. Cool? Questo fa senso per tutti? Mmhmm? Così hashtag definire la dimensione delle classi 30 è una direttiva del preprocessore, che significa semplicemente che gets-- ha fare come il processo di compilazione. Si può pensare ad esso come variabile globale. Il modo in cui lo facciamo è typically-- consente il codice per essere più facilmente cambiato. Quindi diciamo che la nostra dimensione della classe diventa improvvisamente da 30 a 15, se non avessi definito in questo modo, lo farei devono passare attraverso tutto il mio programma e cambiare ogni istanza del 30 a 15. Ma con questo, mi capita di cambiare una posto, e tutto il resto cambia. Se vi capitasse di voler fare un hash definire in un caso dove si sta tenendo traccia di alcuni impostare il numero di colonne per una classe o si sta utilizzando un numero che saranno utilizzati, come, durante un lungo programma, è meglio definire che all'inizio in modo che se mai cambia, si ottiene per cambiare un punto invece di 100. Sì? STUDENTE: Tra farlo e basta dichiarando [incomprensibile] sopra in alto. ALLISON Buchholtz-AU: Così ha a che fare con efficient-- è una specie di fuori del campo di applicazione ciò che siamo in grado di coprire in questa sezione. Ha a che fare più con efficienza Le cose in realtà lavorare nel processo di compilazione. Se volete sapere davvero a questo proposito, sono felice di inviarvi una e-mail con le risorse su di esso. Hash definire tende ad essere preferito per le cose. E come si codifica più, si tipo di imparare le sfumature di quando è necessario utilizzare un globale contro l'hash definiscono. Ma per il momento, in realtà non si dispone di cui preoccuparsi è che la risposta breve. Tutto bene con quello? E anche, se si vuole utilizzare un hash definire, è davvero importante notare che il nome dovrebbe essere in tutte le protezioni. Non stiamo solo facendo Classe dimensionale di essere drammatico. Si dovrebbe in realtà essere tutto maiuscolo. Freddo. Tutto il resto non ci? Siamo bravi? Incantevole. Benvenuti. OK, quindi voglio che voi ragazzi a dare un'occhiata a questo e vedere se riesci a trovare il bug. Ti do un suggerimento. È da qualche parte dal fatto che per-loop. Mmhmm? STUDENTE: Deve essere inferiore o uguale a 2. ALLISON: Quindi potrebbe essere inferiore o uguale a 2, o potrebbe essere inferiore a 3. E qual è la motivazione a quella? STUDENTE: Il [incomprensibile], 0, 1, 2. ALLISON: Esattamente. Quindi, in un array di dimensione n, avere solo indici di n meno 1. Freddo. E allora possiamo diventare matto e ottenere gli array multidimensionali. Uno dei problemi quando ho preso nel mio anno il termine array multi-dimensionali, e penso che uno di loro potrebbe richiedere quest'anno, in modo da essere confortevole. Avvolgere la testa intorno ad esso ora. Si tornerà a perseguitarci si, ma in un modo fresco. Così si può davvero solo pensare di array multidimensionali come array di array. Così si può sorta di pensare a questo top remare come il primo pezzo di memoria. E questo è il secondo pezzo di memoria, e l'ultima riga è il terzo blocco di memoria. E all'interno di questo, c'è un array. Ma, naturalmente, è più facile per descrivere come questo. Così si inizializza allo stesso modo. Questo è un carattere bordo di tre a tre. In modo da avere tre file e tre colonne. Stiamo rappresentando in questo modo. E si dovrebbe accedere alla Allo stesso modo, colonna per riga. E così 1,1 Come si vede qui. Assegniamo uno zero, zero fino lì. 2,0 e 0,2. Così si sarebbe solo accedere them-- se Qualcuno ha mai fatto algebra lineare, allo stesso modo in cui si accede a un elemento in una matrice, è la stessa idea. Così è possibile riferirsi di nuovo a matematica. Non ci si deve preoccupare troppo molto di questo in questo momento. E 'bello avere un'esposizione, di sapere che si può fare. È possibile creare un po ' pazzo number-- è possibile creare array folle è tutto quello che sto per dire. [Incomprensibile] Diventa un po 'pazzo, ma è davvero cool. Impressionante. E poi, così abbiamo un esempio qui. Si calcola una lunghezza di stringa. Così come molte persone sapevano che le stringhe che si sta utilizzando sono solo array di caratteri? OK, sì. Quindi voi ragazzi potrebbe pensare che non si dispone di array usato prima, ma in qualsiasi momento si utilizza getString nel Biblioteca CSView, sei in realtà solo chiedere un array di caratteri. E ci stiamo prendendo cura di tutto che nel back-end per voi. Ma si sta utilizzando array da quando hai iniziato. Devi solo non lo sapevo ancora. E ogni volta che si dispone di un array di caratteri o una matrice che è la memorizzazione di una stringa, l'ultima cosa che è sempre ciò che è chiamato terminatore null, che è questo qui. Ed è a fine ogni parola che si sta memorizzazione. Quindi, se vogliamo capire il lunghezza di una stringa, possiamo dire, beh, sai, il contenuto di quel blocco non è uguale al nostro terminatore nullo. Ciò significa che vi è una certa carattere lì che in realtà cura di questa è parte della parola. Si aumenta la lunghezza. E poi quando abbiamo effettivamente arriva a alla fine della parola, che sarà terminare e tornerà la nostra lunghezza per noi. Mmhmm? STUDENTE: Fa lo spazio conta come il terminatore nullo? ALLISON: Quindi uno spazio: non un terminatore null. Quindi, se si dispone di uno spazio multiple-- è in realtà un valore ASCII specifica. STUDENTE: Qual è il esclamazione pari di nuovo? ALLISON: Quindi, questo è quello che si fa riferimento. Se mai mi senti in orario di ufficio, Ho sempre lo chiamo, come, bang uguale. Quindi botto non lo è. Quindi questo non è uguale. Quindi, se si sta cercando di vedere se c'è qualcosa di falso, si sa sempre fare, bang qualunque la variabile è, e se è falso, che restituisce true e può fare cose interessanti con questo. Ne riparleremo più avanti. Freddo. Tutto bene lì? Impressionante. Così ora è il momento i vostri ragazzi a lavorare, dal momento che ho parlato. Quindi voglio di creare solo un array con i numeri interi uno, due e tre, e poi li hanno stampati. Non devi fare, come, principale, bla, bla, bla, qualunque sia. Voglio solo di inizializzare la matrice e quindi creare un ciclo for per stamparli fuori-- o un ciclo while, a voi. Mi limiterò a darvi un paio minuti per lavorare su questo. Io vado a riposare la mia voce. Se avete domande, io sono felice a venire intorno e parlare con voi ragazzi. Sentitevi liberi di parlare tra di loro. Più caramelle. In realtà, mi limiterò a andare in giro con la caramella. Come è che? Vuoi qualsiasi? Chiunque altro in questa stanza Want Candy? Si può anche prendere più di uno, ragazzi. Prendete una manciata, se si desidera. Maggio come bene. Tutti gli altri bene? Ok. Inoltre, ho intenzione di creare un anonimo Google Form, e voi potete semplicemente inviare un feedback dopo ogni sezione se c'è qualcosa che si desidera migliorare o qualcosa che si desidera fare. Se io sono un po 'troppo peppy per te, posso abbassare i toni. Io creo che e mando che fuori a tutti voi in seguito. Bene. Quindi cominciamo piccola. Come possiamo inizializzare la nostra gamma? Qual è il tipo del nostro array? Un int, giusto? OK, così che cosa vuoi per chiamare l'array? Int array, fresco. Va bene, quindi abbiamo int int matrice è uguale, e che cosa abbiamo dopo? STUDENTE: [incomprensibile] parentesi quadre. ALLISON: Bretelle. E poi all'interno delle parentesi graffe? Uno virgola due virgola tre. Freddo. Ecco, questo è tutto a posto. Così ora abbiamo il nostro ciclo for. Quindi, nella prima parte del nostro per il ciclo, che cosa abbiamo? Studente: è uguale a 0? ALLISON: Così int i uguale a 0, e allora qual è la nostra condizione? Che cosa sono io intenzione di essere inferiore? Meno di tre, e come lo facciamo aggiorniamo i? i plus plus, aggiornandolo per uno. E poi stiamo andando ad avere alcuni printf del numero intero, e ciò che è l'ultima parte che in realtà è per dire quello che dovremmo di stampa? Sarebbe il nome matrice, che è di tipo int array, giusto? E cosa c'è nelle fasce di int array? i. [? Così ho?] Chiamato il mio esempio, ma ci si va. Non è poi così male. Tutto bene? Freddo. Così abbiamo finito con gli array. Complimenti. Sei riuscito a iterare attraverso tutti the-- sì? STUDENTE: [incomprensibile] ALLISON: Sì. STUDENTE: Ho una domanda. Dovresti rientrare le parentesi graffe? ALLISON: Così le parentesi devono essere allineati con il ciclo for, e poi tutto all'interno delle parentesi graffe devono essere rientrate. STUDENTE: OK, qualora il per il ciclo rientrato? ALLISON: Il ciclo for non lo fa devono essere rientrato a questo punto. Se tu fossi in principale, se in realtà aveva una funzione principale qui, sarebbe rientrato dalla principale. Ma in questo caso, va bene. Sì, domanda. STUDENTE: Non è necessario disporre di le parentesi dopo esempio? ALLISON: Sì, se siete inizializzazione in questo modo. Quindi ricordate, questo è il secondo modo di inizializzazione di un array in cui abbiamo le parentesi e poi il nostro attuale dati separati da virgole all'interno. STUDENTE: Ho pensato che ci fossero staffe per questo esempio. ALLISON: No, sono parentesi graffe. Sono parentesi graffe. Se stai inizializzandolo che secondo modo, si tratta di parentesi graffe. Se dovessimo dire, int example-- se volevamo solo una matrice vuota per interi, sarebbe esempio int Staffe di tre. Le parentesi rappresentano le dimensioni. Quando si dispone di parentesi graffe, è i dati effettivi si sta mettendo in esso in questo modo. Siamo in grado di scorrere all'indietro veramente veloce. Quindi, in questo, questo è solo il nostro matrice iniziale, l'inizializzazione. E qui, noi siamo individualmente assegnando punti a loro, quindi questo rappresenta l'indice della nostra array, ed è per questo che abbiamo parentesi. Ma qui, se si nota, abbiamo lasciato i nostri parentesi senza dimensione, e si inizializza con il dati effettivi all-in-one con le parentesi graffe. STUDENTE: Allora perché non abbiamo staffe in questo esempio? ALLISON: Quindi, in quale parte? STUDENTE: non dovremmo diciamo, int esempio staffe equi- vale a parentesi graffe [incomprensibile] staffe per esempio. ALLISON: Oh, mi dispiace. Hai ragione. Noi abbiamo parentesi lì. Scusate ragazzi, il mio male. Sì, si dovrebbe avere parentesi dopo esempio. Hai assolutamente ragione. STUDENTE: [incomprensibile] non farlo. ALLISON: No, è necessario disporre di staffe, perché altrimenti è non andare a dichiarare un array. STUDENTE: [incomprensibile]. Mi dispiace. ALLISON: Mi dispiace, è necessario parentesi dopo esempio. Typo. Buona pesca, stella d'oro per voi. Inoltre, se ti stai chiedendo una domanda, se voi ragazzi sarebbe solo dirmi i vostri nomi, Mi piacerebbe che. Mi piacerebbe essere in grado di conoscere tutti i vostri nomi. Io non ho intenzione di freddo vi invito, in realtà ho voglio solo sapere i vostri nomi. Quindi, per favore in realtà mi dicono i vostri nomi. LEAH: Leah. ALLISON: Leah. OK, quindi functions-- so che in breve Hanno parlato di questo durante la lezione. Quindi, le funzioni sono un po 'solo come queste piccole cose di bite-size dove si passa in input, qualcosa magico accade, e si ottiene uscite. Freddo. Così effettivamente utilizzato un Molti di questi già. Prendi int, ottenere stringa, stampa f. Queste sono tutte le funzioni dove appena li chiami, c'è un sacco di cose magiche in corso in background che non necessariamente vede, e si ottiene ciò che si desidera. O almeno si ottiene quello che speri che vuoi. E fondamentalmente il punto di funzioni, e uno dei principali temi di CS, è quello di rompere il vostro codice in pezzi gestibili. Quando si inizia a scrivere questi davvero lunghi programmi, o in Scratch quando si aveva questa grande idea per un gioco, è necessario essere in grado di rompere fino a, come, OK, come si comincia? Quali sono i piccoli pezzi che ho bisogno? Oh, ho bisogno di chiedere il utente per qualcosa. Ora ho bisogno di stampare qualcosa. Oh, ho bisogno di calcolare questo valore. E imparare a rompere il vostro codice e grandi problemi che hanno in questi piccoli pezzi e la creazione di funzioni è in realtà uno dei grandi capisaldi del CS. Così si può pensare ad una funzione come come una scatola nera, una scatola nera magico, che si mette le cose in e si ottiene un output. E il resto del programma non ha bisogno di conoscere necessariamente quello che sta succedendo all'interno di quella scatola nera. Tutto ciò che preoccupa è quello che entra e quello che esce. Freddo. Allora perché funzioni? Organization-- come ho detto, quando sei si tratta di grandi basi di codice, come organizzare il vostro codice sarà molto più facile se si utilizzano le funzioni. Perché sarete in grado di essere, come, OK questo, è ciò che questa funzione fa e ecco ciò che un altro lo fa. E si può facilmente vedere come tutti si incastrano. Quindi la rottura in su in tutto queste sottoparti gestibili. Così simplification-- Sono sicuro che voi ragazzi tutto visto questo, come ho detto, con Scratch. Hai questa grande idea, e siete come, come fa tutto questo lavoro? Ma se ci si avvicina frammentario, si dice, OK, come faccio a fare uno sprite galleggiare sullo schermo? Questo è un po 'più facile. Quindi un buon uso di marche di funzione il codice molto più facile da leggere. Rende più facile eseguire il debug di che, come si entra in vostro set problema più tardi, si sta andando per davvero vogliono essere in grado di fare. E sono anche più facile per progettare e realizzare. È possibile codificare una piccola funzionare in tempi relativamente brevi e assicurarsi che funziona contro cercando per creare tutto questo programma lungo e poi tipo di passare attraverso e vedere che cosa funziona e cosa non lo è. E poi riusabilità. In modo che solo le funzioni bisogno essere scritto una volta, e poi si possono usare come numero di volte possibile. Quindi è, come, eco-friendly in un certo senso. Se tu avessi le cose come stampa f, dove ha dovuto scrivere la magia che va dietro stampare f ogni volta si voleva stampare qualcosa, si sarebbe piuttosto malato e stanco di esso alla fine. Una delle cose che ti imparare in classi successive CS, o uno dei migliori pezzi di consigli che ricevo è, se si copia e incolla codice, probabilmente dovrebbe essere una funzione. Se avete la stessa esatta tutte le linee in tutto il codice, se li fattorizzato, il codice sarebbe probabilmente essere, come, cinque volte più brevi e molto più facile da leggere. E invece di cercare di risolvere i problemi tutti questi diversi luoghi in cui le cose potrebbe andare storto, si dispone di una funzione che si arriva a risolvere i problemi. E prometto, un sacco di questo potrebbe sembrare sorta di astratta ora, ma come si ottiene in seguito e problema più tardi imposta, lo farò molto più senso e davvero essere guidato a casa. Ci sono domande sulle funzioni fino ad ora? Perché stiamo usando li? So che non abbiamo ottenuto nella Nitty Gritty ancora. Quindi la definizione di un function-- come array, abbiamo bisogno di una sorta di-- questo è solo l'uscita generale. Quindi questa è una funzione che è solo andare a cubo alcuni input. E nella pagina successiva, in realtà, abbiamo tutte queste piccole cose impressionanti qui. Così, in grado di leggere tutti che, per curiosità? So che il viola e il nero potrebbe essere un po 'difficile. Ma grandi cose per know-- quindi la prima uno proprio qui è il nostro tipo di ritorno. Quindi questo sta parlando l'uscita di questa funzione, in questo caso, abbiamo messo in un certo numero, che cosa siamo ottenere è che il numero a cubetti. Quindi dovrebbe essere un int in questo caso. Forse sarebbe un doppio o qualcos'altro successivamente, ma in questo caso, si tratta di un int. Con c, è sempre necessario un tipo di ritorno. Sarà un int. Sarà un galleggiante. Sarà una doppia. Ma bisogna specificare cosa questa funzione sta per tornare. Altrimenti sarà urlare a voi, e non si compila. Sarai triste, e io sarò triste. E non è solo buono. Ok. E poi abbiamo il nostro nome della funzione. E come potete vedere qui, con c c'è questo paradigma molto coerente. Qual è il tuo tipo, qual è il nome, e poi qualche altra cosa alla fine. Così abbiamo il nostro tipo di ritorno, il nostro nome della funzione, e quindi noi abbiamo la nostra intestazione con la nostra lista dei parametri. Quindi l'elenco dei parametri è, ciò che è questa funzione andando a prendere in? Una lista di parametri è semplicemente un sinonimo di, quali sono le nostre entrate? E nello stesso modo in cui necessario definire la nostra funzione e dargli un ritorno tipo, ciascuno dei nostri ingressi deve avere un tipo associato. Così sappiamo che cosa la nostra funzione può effettivamente lavorare. Quindi, in questo caso, abbiamo alcuni input int. Quindi, di nuovo, sarà il tipo e ciò che si sta chiamando esso. E poi, come si vede qui, abbiamo il nostro corpo. Così abbiamo un output int, che è solo il nostro tempo di ingresso si tempi di sé, che cubi e basta. E allora torniamo che in uscita. Quindi, come vedete qui, abbiamo un volte int int volte un int, quindi restituisce un int, che è stato dichiarato lì. Quindi tutto è coesa. Tutto è felice. La funzione verrà eseguito. E questa è solo la cosa generale. Così hanno sempre tipo restituito, nome, e la tua lista dei parametri. Ogni cosa nella vostra lista dei parametri, o di input, deve avere un tipo associato. E poi hai il tuo corpo qui con qualsiasi si vuole fare con il vostro input. E poi, ovviamente, si voglia di restituire qualcosa. A volte le funzioni saranno solo ritorno. Essi in realtà non tornano qualcosa per l'uso. Ma bisogna tornare in qualche modo. E quando si sta facendo le proprie funzioni, siamo in grado di entrare in quella un po 'più in profondità. Personalmente, se si vuole, ci sono un sacco di cose diverse che si possa fare lì. Tutto bene? Qualsiasi cosa in questa lista che mi vuoi di andare oltre, che non hai capito? Ognuno è buono c'è? Freddo. Impressionante. OK, così abbiamo deciso di mettere tutto questo insieme ora. Così abbiamo alcuni input int cubo, in modo da si tratta di un programma completo qui. Fino ad ora, ho tipo stato di dare voi frammenti di ragazzi che potrebbero essere in corso all'interno di un programma. Siamo appena stati a guardare le funzioni. Ma qui c'è un intero programma. Così come molti di voi ricordano il parola prototipo da lezione? Freddo. Abbiamo uno. Come ti chiami? STEPH: Steph. ALLISON: Steph? OK, impressionante. Quindi, ti ricordi quello che un prototipo è? STUDENTE: Lei dice che [incomprensibile] prima che realmente a che fare con esso. ALLISON: Ti ricordi perché? Studente: No. ALLISON: OK. Stella d'oro. Quindi sì, un prototipo che abbiamo prima, perché altrimenti, il nostro compilatore sta per urlare a noi. E 'intenzione di dire, OK, qual è la funzione del cubo? Come, avete letteralmente mi ha detto nulla di questo. E 'come quando si entrare in una classe, e qualcuno è come, c'è un quiz di oggi. E tu sei come, non mi ha mai parlato di questo. Io non sono felice con noi. Il prototipo è fondamentalmente come il vostro programma dicendo, guarda. Heads up. Ci sara 'un quiz in questo giorno. Non fuori di testa quando si arriva ad esso. Si sta andando ad essere bene. Quindi tutto il prototipo non è dire principale, ho intenzione di utilizzare questa funzione. Prometto che sto definendo in un secondo momento. Non freak fuori di me. Basta compilare e fare quello che ti dico. Così abbiamo il prototipo ci solo per rendere il nostro compilatore felice. Ed è fondamentalmente una promessa che aver definito questa funzione dopo e che non sono solo chiamando questa cosa casuale che non si sa cosa si sta intenzione di fare. Quindi, in questo caso, abbiamo principale qui. Inizializziamo qualche intero x. Questo è due. Stiamo andando a stampare ciò che è x. Stiamo andando a cubo x. Come potete vedere, abbiamo il nostro dichiarazione di funzione qui che abbiamo parlato in precedenza. Sarà cube x, e poi, se si ricordate, la funzione del cubo effettivamente restituisce un numero intero di noi, che è memorizzato in x di nuovo in modo che ci permette di stampare le otto, o cubo di x in questo momento. Questo fa senso per tutti? Siamo bravi? Bene. Impressionante. Bene. Quanti di voi ragazzi Ricordate questo modo questo è fondamentalmente solo la tua stack e heap tua, solo una visualizzazione come la memoria viene memorizzato qui. Quindi, vogliamo solo fare Assicurarsi di aver compreso come questi sono rappresentati in memoria. Se si prende classi come CS61 e roba più tardi, si arriva a imparare questo molto più in profondità, ed è davvero cool. Lo consiglio vivamente. Ma per ora, ti darò la vasta panoramica in modo da non dover conoscere la parte fondamentale. Quindi la cima solo un segmento di testo che contiene gli zeri e quelli effettivi, il binario per questo. E questo è utilizzata per memorizzare le variabili globali se ne avete. Mentre ci si sposta verso il basso, abbiamo avere, come vedete qui, dati inizializzati, non inizializzati dati, e quindi heap. Quindi in realtà non parliamo sul mucchio in questo momento. Ci arriveremo in un secondo momento. Per ora, sto solo andando a onda le mie mani e di essere come, non hai bisogno di sapere su questo ora. Ma parliamo un po ' po 'lo stack. Quindi lo stack è where-- abbiamo zoom. Questo è in realtà come il programma abbiamo appena esaminato si verifica in memoria. Che cosa succede a dire, ogni tempo che noi chiamiamo una funzione, si ottiene quello che si chiama una pila cornice, che è uno di questi. Parametri in modo di principali. Così quelli sono le cose che passiamo in principale. Quindi sono proprio qui in basso, perché questa è la prima cosa che chiamiamo. E poi si arriva a principali del gente del posto, e quando diciamo che, intendiamo le variabili locali che vengono memorizzati all'interno principale. Così la gente del posto qui sarebbe, come, x è uguale a due in questo caso. Perché questo è localizzato a principale. Non tutti ricordano campo di applicazione, andando oltre che in conferenza? Ok. Quindi, solo le variabili che vengono inizializzati all'interno principale. Quindi è per questo che abbiamo principale [? vocals. ?] E poi nel principale, che noi chiamiamo cubo. Giusto? Così otteniamo un altro frame con i parametri di cubo. Quindi in questo caso, il cubo di parametri sono ora la x che siamo passati in, i due che siamo passati in. E poi i locali del cubo, che è dove la cubatura effettiva accade. E poi ritorna. Quindi, ciò che accade è come il cubo fa in realtà quello che dovrebbe fare, ritorna. Quando ritorna, questa cornice lascia, e la sua tornato giù a principale. E poi nel principale, abbiamo può effettivamente stamparlo. Così, quando stai tornando qualcosa, quando la funzione restituisce, è come trasmettere quei valori di il telaio sotto e poi lasciare. E le cose sono da eseguire in ordine. E quando si arriva a programmi più grandi, siamo in grado di rendere più fresco e più complicato diagrammi. Ma per ora, questo è solo una panoramica generale in modo da avere una specie di comprensione di ciò che succede quando si sta chiamando una funzione e come che oggi si presenta in memoria. Cool? Tutto bene? Impressionante. Quindi questo è quello che è solo cercando di scambiare le cose. Come si vede qui, abbiamo il nostro prototipo di funzione in modo che il nostro compilatore non urlare contro di noi. Abbiamo un po 'principale, e noi desidera passare x e y. Non hanno fatto questo demo in ancora lezione, hanno essi? Essi non hanno? Ok. Quindi stiamo andando andare su questo molto brevemente. Otterrete in questo esempio più in profondità, credo che, questa settimana. E poi la prossima settimana possiamo davvero tuffarsi in cui questo non funziona. Quindi abbiamo questo vuoto di swap funzione qui--. Quindi nulla significa solo che viene restituito nulla. E abbiamo di swap int a e b int. E abbiamo qualche temporanea variabile che è una. una viene assegnato a B e quindi b viene assegnato per la temperatura in modo che A e B di I valori sono ora attivati. Ma, colpo di scena, questo non funziona. E parte di esso ha in realtà a che fare con il fatto che un e b qui, quelli che vengono passati in Qui, sono in realtà copie di x ed y. Così, quando la funzione restituisce in realtà, commuta le copie ma non l'attuale xey del. Quindi un modo di pensare è che-- finta che si tratta di swap. Ok? Quindi, in principale, abbiamo x e y inizializzate. Ma quando abbiamo effettivamente saliamo di questi telai con scambio, stiamo passando i valori sopra ad esso, e sono inizializzate. E sempre e solo vivono proprio qui. Così a e b vivono qui. E ottengono scambiati. Ma quando torneremo, non lo facciamo fare qualsiasi cosa con a e b. un e b congedo con la nostra funzione. E così xey rimanere lo stesso. Otterrete di più su come risolvere questo e come abbiamo effettivamente a che fare con quella successiva. Ma è solo una cosa per tipo di tenere a mente. Usalo per il futuro. Non preoccupatevi se che non ha fatto tutto il senso del mondo. Sono copie è la cosa più grande. Se avete intenzione di prendere qualcosa lontano da quella, avete passato nelle copie. Così gli originali rimangono le stesse. Tutto bene? Freddo. Quindi gli argomenti della riga di comando. Sono sicuro che in principio tutti voi ragazzi aveva quei grandi, come, int vuoti principali. E tu sei come, fresco OK. Io non mi interessa. Questo è proprio quello che devo scrivere. Ma nei vostri nuovi programmi, soprattutto in questo pset, e perché c'è il gesso per terra? Con il vostro prossimo pset, sei andando a vedere questo. Int main, int arg c, stringa di arco v, staffe. Quindi, da quello che abbiamo appena oggi imparato, ciò che pensiamo che il secondo parametro o che secondo elemento è qui? Si tratta di un array. Che tipo di array? Array di stringhe, sì. Freddo. Ecco, questo è come si sta andando da dichiarare questi ora. Qualcuno ricorda ciò che questi rappresentano? No? Hmm? STUDENTE: arg c. ALLISON: Così arg c mantiene un contatore. Si tratta di un int. E 'un numero, giusto? Allora, cosa pensi che numero è di? Sì. Quindi arg c è il numero di stringhe che compongono la riga di comando. Quindi, se dovessimo fare-- in realtà, ci sono esempi dopo questo, quindi non voglio andare avanti di me stesso. E 'un numero di stringhe che basta portare la vostra linea di comando. Così, quando si fa, come, puntino tagliare Mario, questa è una stringa che lo rende fino. In questo pezzo, ci troveremo a essere alimentando le cose in linea di comando, Come sono sicuro che voi ragazzi che hanno letto la sega spec. Quindi, in questi casi, forse ti avere due o tre argomenti. Sta andando essere una cosa utile da usare. E poi arg v, come abbiamo detto, è solo una matrice di stringhe. Così che in realtà memorizza ciò che si inserisce nella linea di comando. Quindi abbiamo questi. Hai qualche puntino barra copiare outfile infile. Quindi, se arg c è il numero di stringhe che stiamo passando nel comando linea, qual è il nostro arg c in questo caso? Tre. Esattamente. Allora, qual è arg v pari a zero? Allora, qual è la prima cosa che abbiamo memorizzato? Dot ridurre drasticamente copia, esattamente. E poi il secondo sarebbe infile. Il terzo sarebbe outfile. E per quanto riguarda arg v tre? Sarebbe nullo, perché è Alla fine del nostro array, giusto? Freddo. E poi che dire del sesto? È un po 'una domanda trabocchetto. Ish. Sappiamo di cosa si tratta? E 'indefinito. Non abbiamo idea di cosa potrebbe essere. E 'tutto ciò che è giusto dopo la matrice nella memoria, e non abbiamo idea di cosa si tratta. Ed è pericoloso toccare quelle cose, perché per tutto quello che sai, si tratta di una parte di memoria che si non dovrebbe essere l'accesso o nullo. E può fare cose folli. Si chiama over-indicizzazione il tuo legato a l'array. Non andare oltre i limiti della vostra array o cose brutte possono accadere. Si torna e, come, le leggi della fisica sono state distrutte o qualcosa del genere. Freddo. Questo fa senso per tutti? Non troppo male. Così ora, tutti sono parte preferita, recensione pset. Sìì! Ok. Quindi, per quelli di voi che non hanno letto la specifica pset, si sta facendo un po 'di realtà cose interessanti con la crittografia. Hai intenzione di creare un Cesare Cipher e un Cifrario di Vigenère. Si dovrebbe leggere il spec per vedere come quelle di lavoro. E se hai problemi riguardo quello che dovrebbe essere effettivamente facendo, si prega di venire a parlare con me, email me o me testo. Sto giro. Quindi ci sono tre principali cose qui che noi voglio parlare about-- solo tipo di una proroga di lezione. Le cose che potreste non sapere su, utili suggerimenti e strumenti. Quindi stiamo andando a fare una rapida rassegna di ASCII, perché che sta per essere super importante per Cipher di Vigenère. Stiamo andando alla conversione del ingressi di linea di comando, che sarà molto utile per Cesare Cipher. E poi con modulo. Freddo. Così, le mappe ASCII i caratteri in numeri. Questo è un grande grafico. Si dovrebbe avere questo segnalibro da qualche parte. Si vuole per la prima a medio termine. Sono abbastanza sicuro che ognuno di noi ha questo grafico sul loro foglio di medio termine. Quindi imparare. Lo adoro. Tenere a portata di mano. Sarà utile. E tutto è distante una codifica che associa alfabetici, numerici, e altri personaggi a numeri per il nostro computer. Perché naturalmente, nel fine, tutto ciò che immagazziniamo sta per arrivare convertito fino a zero e uno, quindi abbiamo bisogno di un modo per rappresentare il testo e caratteri che siamo tutti abituati a vedere come una sorta di numero. Quindi, come si vede qui, abbiamo A maiuscola, che è proprio lì. Si tratta di 65. E minuscolo A è 97. Così si può capire fuori-- come ho detto prima, se tu avessi gamma di più stringhe, ciò che ciascuno di loro avere un carattere di terminazione null. Sarebbe uno spazio. Spaziale trae la propria special-- Non ricordo dove si trova qui. Ah. 32 è lo spazio. Quindi tutto mappe ad esso. Così abbiamo la matematica ASCII. Pro tip-- in Vigenere di, si potrebbe essere tentati per convertire i numeri interi, ma in realtà è meglio la pratica essere in grado di utilizzare la personaggi come questo quando si sta effettivamente manipolarli. Quindi, se si desidera utilizzare i numeri, è possibile. Ma un modo migliore, o un modo che tendiamo a come voi ragazzi per farlo, è in questo modo dove sei in realtà sottraendo caratteri. Quindi voglio ragazzi a tipo di capire questi fuori. Perché non provare ogni altro? Lo stesso vale per il primo, il terzo e il quinto. Perché voglio fare in modo che si parla di tutto abbiamo bisogno di parlare. Sto solo andando a dire, uno dei cose importanti a-- Oh aspetta, voi ragazzi non hanno visto questo. OK in modo da fare i primi tre. Facciamolo. Perché dobbiamo parlare di modulo. Lo so. La matematica è difficile. È possibile utilizzare una calcolatrice. Va bene. O tirare su una tabella ASCII, perché probabilmente stai andando a voler questo. Freddo. Così ho subito camminare ragazzi attraverso questi. Così la gente ha tabelle ASCII tirato su? Qual è il nostro numerica numero di minuscolo A? STUDENTE: Sette. ALLISON: Così minuscolo A è 97 e A maiuscola è 65. Quindi 97 meno 65? PUBBLICO: 32? ALLISON: 62, sì. Quindi, in questo caso, ciò sarebbe stampare? Questo primo? Se abbiamo cento d, quale sarebbe indicare? STUDENTE: un numero. ALLISON: Stiamo stampa fuori di un numero reale. Quindi stiamo effettivamente andando per stampare 32 qui. E se questo fosse cento c, 32 ci darebbe uno spazio. Quindi, fermo restando che caratteri possono essere stampati sia come numero e come i caratteri effettivi è veramente importante, e il pagamento attenzione ai tipi effettivi che stiamo facendo qui. Freddo. Quindi per ogni altro di questi, quello che abbiamo intenzione di essere la stampa? STUDENTE: Un personaggio. ALLISON: Un personaggio. Freddo. Quindi, se voi volete sapere, voi può lavorare questi da soli. Se hai problemi, mandami una mail. Ma il secondo lo farà stampare una minuscola b. Il terzo stamperà un maiuscolo B. Il quarto stamperà la maiuscola C, e la ultimo sarà un minuscolo A. E l'ultima tra-- stiamo effettivamente andando per entrare in quello che per cento pazzo segno significa che anche in un paio di diapositive. Quindi, cercare quelli per conto proprio. In caso di problemi, si prega di venire a parlare con me. Se siete in genere in Adams padiglione D, probabilmente mi troverete in giro. Quindi, atoi. Quanti di voi hanno visto questo funzione o sentito parlare a tutti? Chiunque? Freddo. Quindi quello che sta effettivamente per è ASCII a intero. Che cosa si può fare è, con Cesare, per chi legge le specifiche, si sta andando a fare punti barra Cesare dopo di scrivere il programma, e poi si sta andando a ingresso un numero che si vuole codificare il messaggio segreto con. Ma, se ricordiamo, tutti i nostri gli ingressi sono memorizzati come stringhe. Giusto? Abbiamo un arg v serie questo è tutto di tipo stringa. Quindi, se si tenta di tirare che uno, sarebbe pensare che che uno o qualunque sia il numero hai usato è in realtà un personaggio. Così si sta andando ad ottenere alcuni risultati folli. Quindi, se si vuole realmente trasformare questo in un numero intero che è possibile utilizzare per manipolare la tua parola o il vostro messaggio, ti consigliamo di utilizzare atoi. atoi converte solo la stringa in un int. Quindi, se abbiamo una serie di 12, se chiamiamo atoi il 12, o qualsiasi altra cosa che l'ingresso è, sarà effettivamente ritorno a voi il numero intero. Non il carattere o la stringa 12. Il che, quando si avvia aggiungere che ai numeri, sarà molto diverso, perché la stringa 12 è un numero pazzesco in ASCII, ma l'intero 12 è in realtà 12, che è quello che vuoi. Così si vuole fare in modo di utilizzare atoi. Stai andando a voler questo in Cesare, perché si bisogno int fornito dal utente nella riga di comando. Ma quando l'hanno messo nel comando linea, è memorizzato come una stringa per cominciare. Questo fa senso? Non è necessariamente bisogno di questo per Vigenere. Con Vigenère, come ho detto prima, si dovrebbe cercare di usare Matematica ASCII che sembra più questo, dove si sta effettivamente utilizzando i caratteri che ci è dato a voi. Freddo. Tutto bene lì? Impressionante. Così modulo. Che importa se sei dato questo enorme numero per Cesare? Hai questa idea che se siete alla Z e sei dato un numero di due, questo significa che need-- Z diventa il secondo lettera dopo se stessa, giusto? Quindi è necessario avvolgere in qualche modo intorno, e modulo è il modo per farlo. Quindi tutto ciò che fa è che ti dà il resto della divisione del primo numero per il secondo. E noi abbiamo alcuni esempi per fanno si che un po 'più concreta. Ma in fondo, si utilizza modulo quando si vuole fare qualcosa di avvolgere intorno. Quindi, se volete solo il numeri da uno a otto, si può utilizzare su qualsiasi altro modulo numero, e lo farà sempre restituire un numero da zero a otto. Così alcuni examples-- se abbiamo 55 modulo 10, ti dà solo il resto del 55 diviso 10, che sarebbe 5. E poi tre modulo cinque, indovinate un po 'chi sarebbe? Tre. Quindi, se si dispone di un numero minore prima il modulo, non può andare in modo uniforme. E 'pari a zero. Quindi restituisce solo il numero stesso. Così otto modulo otto sarebbe? STUDENTE: Zero. ALLISON: Zero. Perché va in modo uniforme. 16 Modulo 15? PUBBLICO: One. ALLISON: Freddo. E poi questo ultimo è solo quello di mostrare you-- forse vi starete chiedendo, OK, qual è l'ordine delle operazioni qui? Facciamo dividiamo primo? Do We Módulo primo? Così modulo detiene la stessa precedenza la divisione o la moltiplicazione, e la sua associativa sinistra. Quindi è allo stesso modo. Si potrebbe sempre fare parentesi, poi moltiplicazione, divisione, e modulo in ordine da sinistra a destra. Regole in modo standard. Basta mettere nella stessa categoria come divisione e moltiplicazione. Quindi, in questo caso, avremmo hanno 1 più 2 ci dà 3. Moltiplichiamo che entro il 2, in modo da ottenere 6. Abbiamo MODULO che da 2, che ci dà? STUDENTE: 0. ALLISON: 0. E poi aggiungiamo 2, in modo da ottenere 2 in quest'ultimo caso. Così modulo-- si sta sicuramente andando a pensare a modi per incorporare che quando si sta avvolgendo intorno dell'alfabeto. Se siete a Z e avete bisogno di spostare inoltrare tre spazi per arrivare a C, c'è quel concetto di avvolgere intorno. Così Lascio a voi ragazzi a capire esattamente come si sta andando ad essere usarlo. Ma sicuramente uno strumento utile per il vostro pset questa settimana. Mi piace molto questo. Questo è uno dei miei p-set preferiti. Poi, dopo lo si fa, se avete amici, è possibile, come, inviare ogni altro segreto messaggi e assicurarsi che funzioni. Dato che sarà decifrare o qualsiasi altra cosa. Un sacco di divertimento. E questa è la fine della sezione. Ho finito presto. Ho ancora 15 minuti con voi ragazzi, quindi se c'è qualcosa che si desidera andare oltre inoltre, sarei felice di farlo. Tutte le altre domande su il tuo pset per quelli di voi che hanno iniziato o leggere le specifiche. Tutto ciò che abbiamo parlato circa nelle ultime ore ea 15 minuti che ti sentiresti mi piace al tipo di rimaneggiamento, sarei felice di. O siamo in grado di farla finita, e si può tutto lasciare e prendere più caramelle con te come si va. Ma se ci sono persistente domande, per favore fatemelo sapere. È inoltre possibile trovare e parlare con me dopo. Prometto che non mordo. Qualunque altra cosa? Il bene di tutti? Sensazione di tutti come in grado di gestire questo pset? Si sta andando ad essere ragazzi bene. Orario di ricevimento sono lì per un motivo. Freddo. Va bene. Ebbene, in questo caso, grazie tutti voi così tanto per essere venuti. Spero di vederti la prossima settimana. Ci saranno più caramelle. Ci potrebbero essere altre cose interessanti. E non vedo l'ora di ottenere di conoscere tutti voi quest'anno.