[RIPRODUZIONE DI BRANI MUSICALI] ANDI PENG: Questo è CS50, e benvenuto a seconda settimana di sezione. Questo è in realtà durante la settimana due dei nostri class-- realtà, la prima settimana abbiamo avuto sezione. Alzata di mano, quanti di voi tutto è venuto a sezione eccellente la scorsa settimana? Ok, va bene. Va bene. Quanti di voi visto eccellente sezione la scorsa settimana? OK. E voi ragazzi hanno fatto bene il problema impostare uno? Quindi ho intenzione di prenderlo che abbiamo un gruppo di ragazzi veramente intelligenti in questa classe e le cose andranno bene. OK. Così first-- In primo luogo, stiamo solo andando a breve andare oltre l'agenda per oggi. Parleremo di logistica del corso. Molti di voi probabilmente domande riguardanti come le cose funzionare in questo corso. Ti rispondo. Stiamo andando a breve andare oltre loop in caso qualcuno di voi perdere sezione eccellente. Parleremo di mappatura ASCII. Parleremo di array, funzioni, argomenti della riga di comando. E infine, che cosa voi ragazzi probabilmente tutti molta voglia di essere qui per conoscere, è il vostro PSet2. Avremo alcuni trucchi belle e suggerimenti su come farlo. OK. Inoltre, in secondo luogo, abbiamo un sacco di caramelle qui. Chi ama la caramella, solo venire qui. Prendete un po '. Ho un sacco. Abbiamo un sacco in ufficio. Non mi voglio a mangiare caramelle per tutto il giorno. Voi ragazzi dovreste mangiare tutte le caramelle, perché ho portato qui per voi ragazzi. Basta mangiare caramelle. Ci saranno caramelle ogni sezione. Quindi, prima, chi sono io? Il mio nome è Andi Peng. Io sono il capo di TA CS50 qui a Yale. E oltre a che, farò anche essere-- se qualcuno like-- vostra corsa amico, la vostra spalla su cui piangere. Se la sera prima a causa del vostro pset, non avete idea di cosa sta succedendo, hit me up. Ti commiserate insieme, eccetera. Sappi solo che io sono qui come risorsa per voi come la linea del fronte per aiutare i ragazzi a capire come per risolvere i problemi in CS50 e oltre. La mia email è andi.peng@yale.edu. Ti mando fuori un individuo e-mail con il mio numero di telefono in esso in modo che non tutti sulla Internet può vedere il mio numero di telefono. Non esitate a chiamarmi in qualsiasi momento. Scherzi a parte, il mio telefono è solitamente attaccato alla mia mano. Non posso rispondere entro un paio di minuti. Non posso rispondere entro un paio d'ore. Ma vi posso assicurare che, se mi e-mail, se mi chiami, testo me, risponderò entro 24 ore. Spesso, io rispondo prima che, perché capisco che tutti si ha qualche problema, e volete che i vostri risposte essere risolta molto rapidamente. Tuttavia, se si chiama me 30 minuti prima quel pezzo che è dovuto Giovedi notte-- essere come, Andi, aiutami, Non ho started-- posso dare che spalla su cui piangere. Ma potrebbe essere il momento di pensare a come non fare che la prossima volta. OK. Oops. Come faccio a tornare indietro? Ci siamo. Quindi, in questo corso, abbiamo un tonnellata di sostegno per tutti. Oltre a solo sezioni qui, che si ogni settimana arriva a spendere 90 meravigliose minuti con me, abbiamo anche l'orario di ufficio. Quanti di voi ragazzi hanno già stato per l'orario di ufficio per un aiuto? Grande. Questo è davvero bello vedere, perché noi avere uno staff di oltre 45 agenzie di viaggi e CA addestrati per questo corso che sono qui per aiutare voi con i vostri ragazzi pset. Lunedì stanno tenute nel TEAL aula in 17 Hill House qui a Yale. Martedì e giovedì, stanno tenuto in comuni. 8:00-11:00 praticamente ogni giorno della settimana. Venite, venite fuori. Tutto il problema, non problem-- appena arrivato in, e poi vi aiuteremo fuori con questo. In secondo luogo, oltre a orario d'ufficio e le sezioni, abbiamo anche pantaloncini. Qualcuno ha mai visto un paio di pantaloncini o procedure dettagliate nei video sul sito web? OK. Quindi sono molto, molto utile. La nostra bella produzione di Harvard squadra laggiù in quella scuola a nord, che hanno girato e prodotto questi video walkthrough incredibili. Ti porteranno passo dopo passo attraverso come fare per risolvere un problema. Spesso, se siete confusi su un concetto semplice, un concetto singolare, dare un'occhiata, perché probabilmente abbiamo una breve su di esso da qualche parte sul nostro sito web. Ed è di solito una grande risorsa cercare quando si è prima perso su come gestire un problema. In terzo luogo, abbiamo anche study50 e reference50. Quindi studiare 50 sulla sito web è solo un link. E ', credo, study.cs50.net o qualcosa di simile. Basta google. Abbiamo un sacco di vetrini preparati. Abbiamo un sacco di pantaloncini e cose walkthroughs-- tutto compilato molto bello e pulito per voi ragazzi tutti per sfogliare, vedere qualsiasi concetto che siete confusi su. Sarebbe probabilmente coperto laggiù in study50. Reference50-- simile. Abbiamo un sacco di varie note prontamente disponibili per vostra disposizione. E, infine, abbiamo ciò che è chiamato CS50 Discutere, un forum in cui, se la sera prima si sta facendo i vostri problemi, diciamo, avete una domanda. Accedi al CS50 discutere. Poni la tua domanda. E poi uno dei hundreds-- forse, thousands-- di coetanei prendere questa classe on-line sarà il login. E forse qualcuno può ottenere la tua risposta prima di una lattina TA. E 'essenzialmente solo un forum on-line che tutti noi possiamo utilizzare per discutere i nostri problemi. Figo. OK. Così problema imposta. Stiamo proprio nel denso di problema impostare due. Molti di noi hanno già lottato attraverso problema dell'insieme uno. Sappiamo già che forse in attesa per l'ultima notte per fare il vostro pset non è la cosa più intelligente da fare in CS50. Consigli e suggerimenti essenzialmente per successo vengono letti tutta la spec. Quanti di voi hanno già Leggere le specifiche per pset 2? OK. Questa è una quantità solido. So che voi ragazzi avete probabilmente riconosciuto ormai le specifiche sono davvero lunga. Sono molto, molto lungo. E 'davvero difficile da leggere ogni riga di quella parola con cura per parola. Si desidera scremare solo a dove si dice di fare qualcosa. Vi posso garantire, non farlo. Se lo fai, probabilmente siete andando a perdere in qualche luogo dove ti dice come avviare un problema o ci dice che cosa a nome il vostro problema o ti dice, questo è probabilmente il modo migliore per iniziare a fare il vostro problema. E allora ti perderai. Quando si tenta di leggere il tuo spec a metà, molto dell'importante informazioni inclusi in quanto non si è sarà in grado di realmente accesso. Quindi, leggere l'intera specifica. Provate a leggere l'intera specifica prima di arrivare al punto, perché poi, quando si parlare del pset, tutto ciò che possiamo avere un'idea di quello che sta succedendo. In secondo luogo, questo è un concetto che mi piace fare riferimento un sacco per tutto il semestre corso. Ma in sostanza, noi incontrare a metà strada, giusto? Me, come vostro AT e Jason come corso manager e SCAZ come tuo professore e David come il vostro professore e tutti le altre agenzie di belle in questo corso, assistenti in questo naturalmente-- faremo del nostro meglio per garantire che si sono fissati fino a riuscire in questo corso. Noi terremo sezione. Noi terremo le ore di ufficio. Risponderemo il vostro telefono chiamate, rispondere alle vostre e-mail, fare tutto il possibile per rendere che le domande trovano risposta. Tuttavia, ci aiuti troppo. Vieni a trovarci a metà strada. Se vieni a orario d'ufficio Non essendo andato alla sezione, non dopo aver visto le lezioni, non avendo idea di cosa sta succedendo, come, aiutami. Ho intenzione di essere come, beh, mi dispiace. Potrebbe essere il momento di prestare che spalla su cui piangere, perché io non sono sicuro cosa posso fare per aiutarti se non si tenta almeno di aiuto Fatevi un po 'all'inizio. Vieni a trovarci a metà strada. Sai, ti aspettiamo preparato a rispondere e ottenere pronto ad impegnarsi nel materiale. Rende le cose molto più più facile per tutti gli interessati. Sì, è praticamente. Grading. Così il programma, è piuttosto in profondità per quanto riguarda il modo in cui grado. Ma in sostanza, la ripartizione in questo è il 50% del vostro grado saranno i pset, che è bello, perché è dove si sta spendendo il vasto maggior parte del vostro tempo in corso. Quiz 40%, e la vostra progetto finale sarà del 10%. Ci saranno due quiz tutto il corso del semestre. Penso che i tempi e le date sono anche quotata al programma. Il modo in cui ci sarà essere classificazione tuoi pset è che abbiamo essenzialmente quattro valori che assegniamo ad ogni grado. Abbiamo un valore di portata, correttezza, il design e lo stile. Quindi, come vedete, questo è il nostro tipo di formula per il calcolo pset. Tre diamo il più peso alla correttezza, perché ovviamente il vostro allenatore dovrebbe essere il test per i casi che vogliamo che prova per. Voi tutti avete check50 a vostra disposizione. Si tratta di una funzione molto utile che voi ragazzi possono tutti caricare il tuo codice ai nostri server, dove noi lo controllerà per voi. E hai visto quelli volti frowny, smile. Sono molto, molto utile. Si prega di non essere il studente che come tentativi a hardcode in tutte le risposte. Ho sicuramente visto un pset dove qualcuno ha visto tutti i valori di check50 e hanno appena duro codificate dentro-- se questo numero, stampare questo numero. Se quel numero, stampare quel numero. Non farlo. Anche se tecnicamente check50 è corretta, il vostro modo di risolvere il problema non è corretto. Quindi basta usare check50 parsimonia. Ma anche fare in modo che si capire come è funzionante, il programma funziona in aggiunta a check50, perché non possiamo verificare ogni possibile caso di check50. Saremo testando alcuni di loro. Il design è essenzialmente, come ben progettato è il codice? Se siete copia-incolla multipla linee di codice molte, molte volte. Forse non avete abbastanza il miglior design nel codice. Forse è il momento di aggiungere quel ciclo. In sostanza, qui è solo tutto di cercare di fare il vostro codice, cercando di scrivere il codice nel modo più efficiente possibile in modo che il programma viene eseguito il più rapidamente possibile. Infine, abbiamo stile. Quindi stile è una specie di arbitrario, termine soggettivo. So che abbiamo ufficialmente una guida di stile 50 per CS50, dove ti dice, oh, dovrebbe avere uno spazio qui. Si dovrebbe tipo di formato il codice in questo modo. Si dovrebbe chiamare le cose in questo modo. Io non mi interessa, di per sé, come si sceglie per lo stile del codice, basta che si rimanere coerenti. Ad esempio, se vi piace lasciare uno spazio dopo il tuo quattro prima della quattro loop, solo farlo ogni volta. Non tipo di farlo. Non farlo altre volte. Se ti piace tenere ricci bretelle spazio in un certo modo, basta sempre farlo in quel modo. Non genere di farlo da qualche parte qui da qualche parte e non c'è. Quando siamo classificazione, è veramente difficile se non ho idea di come si sta formattando il codice, le cose sono stravaganti e fuori luogo. Se hai appena tenerlo coerente, è molto più facile per me come il maggiore per essere in grado di leggere il codice. E 'molto più facile per voi come uno studente essere in grado di guardare attraverso il codice e vedere che cosa c'è di sbagliato con essa taglio su perché c'è problemi. Lo stile è una delle cose più facili voi potete fare per ottenere punteggio pieno. In sostanza, se si interessa, se si paga cinque minuti di attenzione al codice ogni settimana, si dovrebbe essere sempre punti di stile completi. Infine, abbiamo quello che si chiama il moltiplicatore di portata. Scope-- So che è un grande parola, particolarmente in questa classe. Ma la portata, tutto ciò che i mezzi è che si sta tentando i pset al meglio delle tue capacità. Se si attiva in tre dei vostri quattro problemi e non hanno nemmeno tentare l' ultimo, probabilmente siete andando a perdere alcuni punti sulla portata. Anche se si può lanciare il problema, fate del vostro meglio per camminare attraverso di essa. Anche se non funziona, trasformarlo in, perché mostra e dimostra a noi che si sta cercando, che si è tentato il problema set al meglio delle vostre capacità. E allora possiamo darvi punteggio pieno per portata. Scope è anche molto importante per quando parlare il più basso punteggio pset goccia. Così, nel corso della semestre, voi ragazzi hanno nove pset. E noi in realtà essere caduta il punteggio più basso tra quelli nove, ma solo se si dispone di punti di ambito completi. Quindi, se si gira in un pset incompleta, purtroppo, non possiamo abbandonare quella, perché il vostro campo di applicazione punti non sono stati completati. Quindi, anche se avete la settimana terribile dove si sta morendo e tu sei malato o il vostro cane muore, il vostro gatto muore, e il gioco è sovraccaricato con i compiti, solo tentare l'pset. Farlo al meglio delle vostre capacità. Se non funziona, non importa. Basta girare in. Almeno possiamo dare si punti per lo sforzo. A per sforzo in questa classe. Almeno basso punteggio goccia per lo sforzo. Oh si. Che è praticamente esso. Qualcuno ha domande così lontano da come noi di grado nella classe? O uno di questi? Ognuna di queste così far-- sezioni, orari d'ufficio? Cool. OK. Quindi questo è un argomento che non uno ama davvero parlare. Non mi piace molto parlarne. Voi ragazzi non si vuole veramente sentirmi parlarne. Ma, purtroppo, siamo tutti deve parlarne. David trascorso 20 minuti a conferenza parlarne. E questo è il soggetto di onestà accademica. Così siamo tutti qui abbiamo scritto probabilmente un saggio a volte nella nostra carriera di Yale. Probabilmente abbiamo ottenuto un discorso in cui siamo stato detto di non plagiare il nostro saggio, perché quel lavoro non è la nostra. In informatica, abbiamo lo stesso tipo di concetto. Tutto il lavoro che si presenta, tutto il codice che si scrive dovrebbe essere il codice che avete scritto. Non dovrebbe essere il codice che avete copiato da qualche altra parte. Non dovrebbe essere il codice che si Googled e lasciò in e non so davvero se funziona. È sorta di avere un senso di quello che sta facendo, ma non proprio. In caso di dubbio, in sostanza, è solo essere ragionevole. Sul nostro programma, abbiamo un intero elenco di cose vediamo come ragionevole contro non è ragionevole. Ad esempio, ragionevole sei tu e il tuo amico discutere di ciò che il modo migliore per andare su logicamente risolvere un problema. Questo è abbastanza ragionevole. Ciò che non sarebbe ragionevole è se si ragazzi si sono riuniti, digitate lo stesso codice, e trasformato nello stesso codice. Questo non è ragionevole. Stessa cosa, una specie di saggio. Se si vuole discutere con il tuo amico, hey, questo è quello che voglio scrivere. Questi sono i passi che voglio prendere per scrivere su di esso, grande. È magnifico. Si prega di collaborare tra loro. Se voi ragazzi inizio scrivere la stessa cosa, girate nello stesso saggio, che è meno OK. Così, in caso di dubbio, basta non farlo. Qui, in CS50, abbiamo script che corrono per automatizzare per testare non solo la correttezza del codice, ma anche l'unicità del codice. Quindi, per favore non ci messo nella posizione di dover sottoporre il vostro caso a ExComm. Per favore basta per tutti, facciamo solo rendere questa esperienza meravigliosa. Tutti imparano meglio, siamo tutti più felici, e noi siamo tutti insieme fino a avere successo in questo corso. Qualcosa che è molto unico su questa classe che Penso che tutti dovrebbero davvero prestare attenzione è che abbiamo ciò che è chiamato il rammarico Clausola nel nostro programma. Quindi, in sostanza, entro 72 ore, se si ritiene di aver fatto qualcosa non sei davvero sicuro era del caso, si prega di venire da noi. Vi promettiamo che entro 72 ore tratteremo il caso noi stessi senza fare riferimento ad una più alta l'autorità nell'amministrazione. Quindi, se siete venuti da me e dire, Andi, ehi, mi dispiace davvero, ma penso che ci sia un paio di linee nel mio codice ieri sera che ho tipo di google, scesi di Pila Overflow, copia e incollato, e sono davvero, davvero dispiaciuto a tale proposito, fatemi sapere. Per favore, non solo lasciarlo marcire e auguro solo che prendo esso. Noi prenderlo. Basta venire a me. Fatemi sapere entro 72 ore. Troveremo una soluzione. E vi promettiamo che non ci riferiremo a autorità universitarie essenzialmente. Quindi è nel vostro interesse di essere solo onesto con tutti coinvolti nel corso. OK. OK. Così ora, in fretta prima Mi muovo su, qualcuno domande riguardanti logistica su come i corsi che stiamo andando a correre, come le sezioni sono in corso a correre, nulla di tutto ciò? OK. Già. PUBBLICO: [incomprensibile]? ANDI PENG: Sì. Così quizzes-- quanti di voi sono nella sezione Lunedi / Mercoledì? Quanti di voi sono in il Martedì / Giovedi? OK, quindi è un solido spaccatura qui. Quindi il modo che si corre che a Yale è che noi stanno per avere due distinti quizzes-- uno per ogni section-- che saranno presi durante le lezioni. Penso che sia ottobre, fine di ottobre, qualcosa di simile, come prima settimana del quiz. Sì, così solo venire in classe. In quella Lunedi o Mercoledì, prenderete il quiz. In quel Martedì o Giovedi, ti prende un quiz diverso. Ma lo stesso materiale sarà coperto. Già. Bella domanda. Già. PUBBLICO: Dove siamo andare a controllare i nostri voti? ANDI PENG: Sì. Così mi spedirà una e-mail tutto ciò che ogni settimana quando i quiz sono graded-- o, mi dispiace, quando p-set sono classificati. Pset di solito sono rivolti a mezzogiorno o Venerdì. Quindi io prometto che lo farò cercare di ottenere di nuovo a voi dal mezzogiorno del Venerdì successivo. Ogni volta che un grado pset, io manderò una notifica sul libro grado che ti dice il tuo punteggio può essere consultato on-line. Così proprio questa settimana, dopo aver finire la classificazione pset della scorsa settimana, voi ragazzi ottenere una e-mail notifica che ti dice, hey questo è dove si andare a visualizzare i tuoi voti. E si può vedere ogni ripartizione dei tuoi voti. Potete vedere i commenti. Oh, cosa veloce anche. La sezione di commento alla grande libro è dove io probabilmente trascorrere la maggior parte del mio tempo di classificazione. Quindi, una cosa che è molto importante quando voi ragazzi sta visualizzando i tuoi voti sui vostri pset non è solo alla ricerca alla partitura fisica ma anche prendendo tempo per davvero leggere i miei commenti. Spesso che ti dà un feedback su come si sta risolvendo un problema. Se avete bisogno di fare qualcosa di un po 'meglio, critica costruttiva è di solito miglior dato in quelli sezione commenti. Quindi, per favore, per favore, io vado di trascorrere del tempo a scrivere commenti. Per favore, vorrei davvero apprezzare se voi ragazzi avrebbe letto quei commenti. OK. Cool. Tutto ok. Così ci accingiamo a iniziare a parlare e basta rivedere rapidamente parte del materiale da Settimana a zero solo così siamo sulla giusta pagina per inizio dei problemi di questa settimana. Così, il ciclo while è una dei tre tipi di cicli abbiamo discusso in precedenza in questa classe. Un ciclo while essenzialmente è scritto nella sintassi dove, mentre una certa condizione, fare questo più volte, giusto? Pensate in questo grafico qui. Hai intenzione di iniziare in un certo punto nel codice. Hai intenzione di entrare nella condizione del ciclo se: Non know-- x è minore di uno. Se questo è vero, si sta andando per eseguire il corpo del ciclo. E si sta andando a continuare a fare di nuovo, ancora, ancora, sopra e over-- ed è per questo che è un loop-- fino a quando la condizione diventa falso. Quindi, in questo modo, un ciclo while è uno dei modi più semplici di scrivere qualsiasi tipo di condizione che deve ripetere più e più volte. Basta stare attenti ogni volta che stai scrivendo qualsiasi tipo di ciclo che si dispone di una condizione di uscita come nonché un aggiornamento per qualunque è così che il ciclo non lo fa solo eseguire più e più volte all'infinito. In ogni caso, si sta andando a voler fare in modo che stai cambiando alcuni aspetti del il codice o alla fine del ciclo solo per assicurarsi che si dispone di un modo di progredire verso la condizione che si desidera incontrare a fine. Questo fa senso a tutti? Noi non vogliamo essere coinvolti in questa spirale dove andiamo in giro e intorno e non c'è modo per rompere il ciclo. E ogni ciclo essenzialmente ha un modo di fare questo. OK. In secondo luogo, molti di voi nelle vostre pset Mario probabilmente dovuto impiegare questo tipo di ciclo. Si chiama un do while. Prima di tutto, qualcuno può dirmi ciò la differenza tra un fare while e un ciclo while è? Già. PUBBLICO: Il do while funziona a prima [incomprensibile]. ANDI PENG: Sì, esattamente. Così, un do while fa sempre ciò che è dentro la do, all'interno delle parentesi lì e fa quella condizione prima di controllare per the-- dispiace, fa quel codice prima controllando la condizione. E questo è particolarmente rilevante per noi qui in questa classe, perché il più delle volte stiamo andando a voler richiedere l'utente un certo tipo di input. E poi, a seconda l'ingresso ci danno, allora possiamo valutare, oh, fare abbiamo bisogno di spingerli di nuovo? Quindi in Mario, se l'utente vi ha dato un'altezza negativo, per esempio, si sta andando a prima richiesta e fare tutto ciò che è dentro. Poi si sta andando a controllare mentre. Sai, è negativo 1, è che un numero positivo? Se non lo è, ho intenzione di andare indietro e ripetere il fare e ripetere e ripetere e ripetere fino a quando non infine gli diamo un numero che ti piace, che tutti noi possiamo utilizzare nel nostro codice. E 'molto importante per essenzialmente qualsiasi input dell'utente. Vi posso garantire qualsiasi tempo in un pset dove vi chiediamo di ingresso qualsiasi tipo di codice, siamo probabilmente andando a darvi un banco di prova in cui siamo andando a darvi qualcosa di brutto che è andando a cercare di rompere il vostro codice. Se proviamo a chiedere di inserire un intero, si può solo dare una stringa e vedere come si dovrebbe gestire questo. Se vi chiediamo di assumere una età, possiamo dare un numero negativo per vedere come si dovrebbe gestire questo. Basta fare in modo che voi ragazzi stanno testando per i casi in cui non si ottiene la migliore ingresso, diciamo solo che. E un do while è spesso il migliore modo di progettare il codice in modo che soddisfa tale ambito. OK. OK. Quindi questo è probabilmente il più ciclo complesso dei tre che abbiamo esaminato finora. E sembra molto spaventoso in un primo momento. Ma vi garantisco, una volta voi ragazzi ottenere il blocco di come utilizzare un ciclo for, è una delle cose più utili, la maggior parte degli strumenti utili nel vostro arsenale per andare avanti in questa classe. Così, per esempio, in Scratch, abbiamo avuto questo molto semplice blocco che appena detto ripetere questa determinata frasi certo numero di volte. Tra l'altro, SAJ-- questo è SCAZ Andi Jason. Abbiamo spesso firmare il nostro email SAJ. Se diciamo SAJ, non essere confuso. Questo è solo noi. Quindi, in Scratch, siamo stati in grado di avere un blocco che ha detto, mi piace ripetere SAJ! 10 volte. Molto semplice. La logica dietro questo è un molto, molto semplice, giusto? Voglio andare in primo luogo attraverso la prima tempo e vedere che, per la seconda volta e vedere che, terza, ecc e così via, fino a colpire a 10. E il modo in cui rappresenterebbe che in il codice è solo attraverso un semplice ciclo for. Quindi per, si sta andando a dichiarare la variabile qui, in questo caso, con un int. Stiamo andando a chiamarlo i. Stiamo per inizializzare a 0. E l'edizione di arresto è andando essere i è inferiore a 10. E l'aggiornamento sarà i ++. E all'interno del ciclo, sta andando per eseguire fino a quando alla fine si colpisce la fine della condition-- in cui caso, sta andando a rompere il ciclo. Ci dovrebbe essere roba che si ragazzi hanno tutti i tipi di visto prima e ha dovuto fare per il vostro problema impostato uno. Qualcuno ha delle domande per quanto riguarda cicli for in questo momento? OK. Grande. OK. Quindi, per quelli di voi che hanno leggere le specifiche pset per questa settimana Sappiamo che stiamo andando ad avere per assumere qualcosa chiamato ASCII e tabella ASCII. Davide in conferenza passò brevemente come i computer essentially-- tutto è codificato in un computer binario, a zero e uno. E il modo in cui computer sono in grado memorizzare valori diversi in aggiunta a zero e uno sono attraverso la mappatura quei numeri per rappresentare altre cifre o essenzialmente altri caratteri. Quindi, in questo caso, un ASCII table-- tutto ciò che fa è mappa personaggi, o caratteri, ai numeri. Quindi il file di codice sorgente in il tuo computer-- vede, ehi, un gruppo di zero e uno, zero e uno, zero e uno. Questo è ciò che memorizzato nella la memoria reale del vostro computer. Ma quando noi esseri umani vogliono comunicare con il computer, noi want-- diciamo, per esempio, se voglio la A maiuscola, Ho intenzione di bisogno di un certo modo di dire al computer, oh, quando digito maiuscola, voglio dire questa rappresentazione in binario. E così il nostro modo di fare che è ha generato cosa arbitraria chiamata tabella ASCII, dove noi, come esseri umani, come programmatori, qualche tempo fa, abbiamo arbitrariamente deciso che stavano per assegnarli numero I valori di questi personaggi. Così voi potete google questa linea. Penso che ci sia un collegamento ad esso nella vostra pset-- solo un tavolo mappa ASCII, ASCII tavola. Traduce solo binario numeri in caratteri. E sta andando essere molto utile per il set problema ogni volta che si desidera calcolare qualcosa o se si desidera visualizzare determinate caratteri o numeri interi o manipolare certi personaggi. Sta andando molto importante che tutti voi sapere come navigare una tabella ASCII. Così, per esempio, la maiuscola è rappresentato dal numero 65. E la minuscola è rappresentato da 97. Quindi è importante sapere che il differenza tra i due valori è 32. Spesso, se avete bisogno di convertire da uno all'altro, la differenza è 32. E non preoccupatevi se siete tipo confuso su questo all'inizio. Andremo su come faremmo impiegare questo codice vero e proprio. OK. Quindi, per quelli di voi con i computer portatili fuori, sentitevi liberi di tirare su una tabella ASCII, perché questi probabilmente richiedono di ragazzi di riferimento ciò che i personaggi sono. OK. Quindi, sapendo che alcuni caratteri mappa a determinati numeri, se dovessi eseguire solo il primo linea che code-- printf una, minuscola, meno maiuscolo A. Qualcuno avere un'ipotesi su quello che sarebbe stampare dello schermo in questo momento? Quindi, prima di tutto, ciò fa minuscola rappresentano? Che numero è che codificata nella tabella ASCII. Scusate? PUBBLICO: 97? ANDI PENG: 97, grande. E che cosa è maiuscola? PUBBLICO: 65. ANDI PENG: Allora, qual è 97 meno 65? PUBBLICO: 32. ANDI PENG: OK. Allora, cosa ne pensate voi ragazzi sta per succede quando input che riga di codice nel mio computer? PUBBLICO: [incomprensibile]. ANDI PENG: Siamo spiacenti, parlare. Nessun problema. Questo è molto sicuro ambiente, meno la fotocamera. Siamo tutti andando a-- nessuna preoccupazione. Appena siamo tutti andando a fingere come Siamo solo noi agghiacciante in questa stanza. Nessun problema. Nessuna domanda è troppo stupido. Nessuna risposta è una risposta stupida. Sono probabilmente andando a fare errori nel corso del mio insegnamento. Scherzi a parte, i ragazzi, appena spifferare fuori. Siate fiduciosi in voi stessi, lo sai? Allora, cosa è stato? Chi ha detto che l'ultima risposta? OK. Shout che bella e chiara. PUBBLICO: 32? ANDI PENG: 32. OK, corriamo questo codice e vedere se questo è ciò che accade. OK. Così come voi ragazzi può tipo di vedere, la tipica notazione ho impostare qui per come avremmo impiegare qualsiasi tipo di programma nel nostro computer. Noi abbiamo la nostra funzione principale all'interno della nostra funzione principale. Sto solo andando a copiare e incollare questa riga di codice. Anche fare attenzione quando si ragazzi sono copiare e incollare il codice. A volte alcuni operatori Non incollare sopra correttamente. In tal caso, il minus segno era in realtà un trattino. E così il computer non raccoglierlo. Così ho dovuto tornare indietro e digitare nuovamente fisicamente che. Basta essere attenti quando voi ragazzi stanno facendo. OK. Stiamo per eseguire questo qui. Quindi stiamo andando a cd nella nostra sezione2. Ho chiamato questo programma asciimath. Quindi ricordate, quando si corre ogni programma, vogliamo compilare un primo momento eseguendolo attraverso il nostro fare. E poi vogliamo eseguire realmente il programma facendo dot-slash. Quindi stiamo andando a ./asciimath. A destra, ci andiamo. E vediamo 32. Ben fatto. Ti meriti una caramella. Candy per voi. Scusate. Tutto ok. OK. Così possiamo tornare al nostro esempio qui. Aah, no. Aah. OK. Sto solo andando a tenerlo così. OK. OK. Così come voi potete vedere, si può fare un sacco di cose molto interessanti, un sacco di cose molto cool, un sacco di cose molto complicate che coinvolgono Caratteri ASCII e numeri. Una volta che si arriva alla linea cinque, che è un sacco di seguire. Non abbiamo intenzione di andare attraverso la sezione. Sentitevi liberi di, se è possibile, ragionare su carta prima su ciò che dovrebbe accadere quando si introduce come una stringa di valori. Ad esempio, in tale ultima riga, abbiamo z-- che rappresenta un certo number-- a-- che rappresenta anche un alcuni number-- più 1 modulos 26 più minuscola. Se voi ragazzi continuate a leggere attraverso questi, può vedere un modello venire in come stiamo manipolando il codice. Vivamente, consiglio vivamente dopo la sezione tutti voi ragazzi vanno avanti e l'ingresso quelli tutto nel vostro computer e vedere che tipo di numeri stanno venendo fuori e ragionando attraverso perché quelli sono succedendo, perché per i vostri pset sarà molto importante per voi capire perché certe cose stanno accadendo. Tutte queste slide sarà in linea. Quindi nessuna preoccupazione per il tentativo di fisicamente copiare appunti. On-line di tutto. Questa sezione si sarà online. Tutto il mio codice sorgente Sto correndo sarà online. Già. Hai avuto ancora una domanda? PUBBLICO: Che cosa è modulos? ANDI PENG: OK. Così modulo è un operatore che sta per essere molto importante per pset dei vostri ragazzi Qui. Quindi il modo che gli operatori in C e nel lavoro di programmazione è che hai quello che ha chiamato il simbolo di divisione e il simbolo modulo, che è proprio come il segno di percentuale. Quindi, in C, quando si esegue un intero diviso da un intero con una barra, C ha una tendenza a voler tagliare disattivare tutti i punti decimali, perché un intero vuole per convertire in un numero intero. Non sta andando a voler essere un doppio con un gruppo di decimali tutto dopo. Quindi, se faccio 3 diviso 2, sta andando per tagliare il 0,5 e solo dare 1. Ecco, questo è qualcosa di cui essere molto attenti quando si è fare qualsiasi tipo di matematica in programmazione, è che i numeri si ottiene Non possono essere i numeri che stavi pensando, ed è per questo arrotondamento nella tua ultima pset è così importante. Modulo ti dà il resto. Così, per esempio, se l'ho fatto 3 modulo 2-- così il 3 per cento segno 2-- darebbe il resto di quella. Quindi 3 diviso 2 è 1,5. E '1 resto di 1. Darebbe la 1, che è il resto di quella. Così, quando voi ragazzi sono in movimento attraverso la tabella ASCII, modulo finirà per essere qualcosa che è molto importante, e ne parleremo più avanti. OK. Quindi, qualcosa che è abbastanza, abbastanza nuovo e abbastanza unico che abbiamo discusso questa settimana è il concetto di ciò è un array. Così matrice è il primo tipo di struttura dati che stiamo andando a incontrare in questa classe. Tutte le strutture dati sono è una sorta di arbitraria, letteralmente le cose come struttura che noi, come i programmatori abbiamo creato, che abbiamo messo nel nostro codice che può contenere altri pezzi di codice. Quindi, in questo senso, un array-- pensare ad esso come un archivio, dove se si apre diverso scaffali del vostro file CAB, è possibile accedere a diverse cose. In memoria, un array è solo facendo la stessa cosa sul computer. Si possono avere diverse ci blocks-- li chiamano indices-- di un array. E 'proprio come un blocco, uno scaffale della memoria che abbiamo creato all'interno della vostra computer che è possibile inserire certe cose in spazi diversi. Quindi, con una matrice, è avere sempre a specify-- è necessario specificare dichiarare un matrice nel seguente formato. Stai andando a prima specificare il tipo di dati che si desidera creare dell'array. Se voglio un array di interi, Ho intenzione di mettere int proprio lì. Se voglio un array di stringhe, Ho intenzione di mettere le stringhe lì, il nome della matrice, e quindi si sta andando ad avere le parentesi quadre. E dentro le parentesi quadre, sei andando ad avere la dimensione della matrice. Qualcosa che è veramente importante per tenere a mente durante la creazione di array è che, una volta che si crea un array, che la dimensione non può cambiare. Quindi, se si sa che in questo momento si dispone di un array di dimensione 10, lo sai che ho intenzione di avere 10 celle all'interno o 10 indici all'interno di questa matrice, e non è mai andata per espandere o ridurre non importa cosa, e che non c'è attualmente solo 10 blocchi di spazio allocata nella memoria capace di immagazzinare fino a 10 cose di quello che hai messo. Quindi, in questo modo, un tipo di dati array, la struttura di dati che è un array è molto diverso da alcuni altri ti essere che copre più avanti in questo corso. Già. Ad esempio, se si voleva creare un array di dimensione 3 che contenuti variabili di integer-- oh, scusate, di temperature-- e la temperatura, di Naturalmente, è un numero intero. Così avremmo creiamo int, che è il il tipo di dati di quello che vogliamo salvare. Stiamo andando a chiamare questo temperature per il bene della nomenclatura dei nomi qualcosa che tutti noi comprendiamo. E stiamo andando ad avere le parentesi quadre. E vogliamo tre numeri. Quindi stiamo andando a mettere tre all'interno di esso. Qualcosa che è davvero importante tenere a mente è che gli array sono pari a zero indicizzati. Tutto questo significa è che si iniziare con l'indice di 0, e si esegue attraverso il dimensione dell'array meno 1. Così, per esempio qui, avere un array di dimensione 3. Sta andando essere in grado per contenere tre valori. Ma i numeri che themselves-- numero, l'array, tale indice, la matrice, sono da 0 a 2. Quindi ragazzi, essere molto, molto attenti quando si sta andando attraverso i vostri problemi di set e creare qualsiasi tipo di matrice, perché un sacco di volte è davvero, davvero facile da dimenticare che. Io in realtà non ho l'indice di 3, che attualmente solo hanno l'indice 2. E se si cerca di accedere terzo indice, che sta per essere ciò che è chiamato il terminatore null. Non sta andando a realtà esistere nella matrice. E il computer è Non piacerà questo. Quindi fate attenzione quando stai accedendo cose solo per garantire che vi ricordate che gli array sono zero indicizzati. OK. Quindi il primo esempio è solo un modo di creare un array. Il secondo esempio che ho sotto è solo un modo separata di creare ciò è la stessa dei dati struttura che abbiamo appena immessi. Così, invece di correre fisicamente attraverso e messa in temperatura di 0 è uguale a qualsiasi altra cosa, temperatura 1 è uguale a qualsiasi temperatura, 2 uguali qualunque cosa, potrei in realtà solo direttamente creare tutto in una sola riga in temperatura parentesi quadre pari. E avviso in questo caso, non è necessario per specificare quanto è grande l'array è, perché il computer sta per passare attraverso e vedere che non c'è tre elementi in quelle parentesi graffe. E sta andando a conoscere, OK, Ho bisogno di un array di dimensione 3. Tu non stai andando ad avere bisogno di immetterla modo seguente. E anche, sì, in questo modo. Qualcuno ha domande per quanto riguarda il modo in cui facciamo le matrici o come la struttura di un array funziona? Già. PUBBLICO: [incomprensibile]? ANDI PENG: Sì, esattamente. Quindi, se si dovesse dichiarare e inizializzare un array il seguente metodo, che è il secondo modo, si può semplicemente lasciare quelli. E il computer sa automaticamente che ha bisogno di contare quanti elementi sono in quelle parentesi graffe, separate da virgole. Così qui vedono 65, 87, 30. Quindi il computer sa, oh, ci sono tre numeri interi. So che per creare un nome di matrice temperatura con tre elementi in esso. Bella domanda. Già. PUBBLICO: Non è possibile la creazione di un array con diversi tipi di dati che potrebbero essere inseriti in esso? Ad esempio, con numeri interi [incomprensibile]? ANDI PENG: Ai fini di questa classe, non è, in questo momento. Quando si crea un data strutturare come un array, stai dicendo la calcolatore, ehi, ho bisogno di te di destinare questo molto memoria nel mio hard disk, con ciascuna cella un certo numero di bit. Ricordate che abbiamo imparato a settimana zero, che dati diversi tipi hanno dimensioni diverse? Così, per esempio, una stringa è una quantità differente di spazio di un char, che è una diversa quantità di spazio da un numero intero. E così, se non si specifica e mescolare e abbinare che tipo di variabili avete, il computer di andando a essere molto confusa. E non sta andando a conoscere la quantità di memoria da darti. Così per scopi di destra ora, i computer possono solo riconoscere un tipo di un array. Bella domanda. OK. Così, naturalmente, la seconda domanda che abbiamo è, bene, ora che abbiamo creato un array e abbiamo messo tutte queste cose nella matrice, come siamo sarà in grado di accedervi? Quindi la struttura tipica che abbiamo sempre accedere a un array è la nostra bella ciclo for. Prometto voi ragazzi che saremo vedendo un sacco di questo tizio qui. In sostanza, ogni volta che vuoi per inserire i valori in un array o se si vuole accedere ad essi, il modo migliore per farlo è un ciclo for, perché in un ciclo for, è Sai quante volte sei andando a voler correre attraverso l'array, perché avete una versione di stop, giusto? E ogni volta che si esegue attraverso, è possibile accedere un elemento diverso dell'array. E anche questo è un motivo per cui in genere iniziamo la nostra per i loop al valore 0, perché quando si accede array, è possibile accedere all'indice zero. E così parallela molto bene. Voi ragazzi possono avere voluto scrivere per int i è uguale a 1. i è minore o uguale a 3. Ma non avrebbe funzionato abbastanza come bene qui, perché hai solo disporre di elementi di 0, 1, e 2. E così, se si dovesse iniziare a il tuo i all'elemento 1, 2, e 3, si sta andando a finire in esecuzione fuori i limiti della propria matrice, e cose cattive stanno per accadere. Quindi spero che voi ragazzi vedere la segue del perché nelle classi precedenti Vi insegniamo ragazzi come gestire e formattare un ciclo for il modo in cui siamo stati. È perché, ora abbiamo la transizione in array, Si può capire perché i 0 presta sé molto bene per l'accesso. Così il nostro modo di fare che è che-- sono appena la stampa fuori qui per amore di stamparlo. Ma ho il mio segnaposto, virgola. E il che accede reale parte sta accadendo. Il nome della matrice è stato chiamato temperatura. Quindi è la temperatura e la i-esimo elemento dell'array. Così come il ciclo for attraversa, che sta per iniziare a 0. Sta andando a stampare il Indice 0 di questa matrice. Allora è andato in stampa il primo elemento. Allora è andato in stampa la seconda. E poi andremo a rompere. È tutto chiaro su come che sta succedendo? Grande. Tutto ok. Quindi qui abbiamo un modo di dicendo, se non volevamo a hard-code mi dentro-- come programmatore. Non volevo realmente fisicamente mettere in ogni singolo elemento di questa matrice. Se volevo invece avere i valori di input dell'utente, qual è il modo migliore per farlo? Beh, qui ho creato questa bella funzione in cui posso dichiarare un array. Quindi cerchiamo di int scores-- basta dire che vogliamo fare una matrice che ha tenuto i voti di tutti i 18 degli studenti qui in questa sezione. Penso che abbiamo un po ' più di 18 ragazzi di oggi. Ma per l'amor di esempio, basti pensare che abbiamo avuto 18. Vorrei creare un nome di matrice con i punteggi tipo int, perché i punteggi, naturalmente, sono numeri. E ho intenzione di avere 18 tra parentesi quadre, perché questo è il numero di studenti che ho vogliono essere in grado di memorizzare decine di. E il modo in cui mi piacerebbe popolare la matrice è che mi piacerebbe eseguire attraverso un ciclo for, di Naturalmente, con 0 essere il mio indice 0. E poi con 18 è il mio l'arresto edizione, perché non c'è 18 elementi dell'array. E poi ho intenzione di fare printf, Immettere mette in student-- bla bla bla. Qualcuno può dirmi perché qui sono stampa i più 1 e non io? E 'una specie di un trucco domanda, non proprio. In realtà non fisicamente influenzare il funzionamento del codice. Già. PUBBLICO: [incomprensibile] 0? ANDI PENG: Sì, esattamente. E 'un po' imbarazzante per dire, ehi, tu sei lo studente 0 in questa classe. E 'un po' strano. Quindi noi, come esseri umani, non mi piace a pensare a come i computer pensano. Quindi, anche se nel computer, è memorizzare valori nel 0-esimo indice, quando siamo esseri umani, non lo facciamo davvero desidera fare riferimento a noi stessi come zero. Così, quando ho appena stampo che, Ho intenzione di stampare e aggiungere 1 solo per motivi di chiarezza. Così, quando stampo, ho intenzione di essere in grado di stampare gli studenti da 1 a 18. In realtà non incide l'esecuzione del codice in qualche modo, il mio modo di stampa. Ma attenzione quando si è in realtà l'accesso alla matrice. Quando vedi i punteggi i, noterà qui Sono davvero Accedendo l'indice 0 e non il 1 più 0-- o 1 più 1, in questo caso, l'indice così che in realtà è chiaro. Sono tutti i tipi di OK come questo è in esecuzione attraverso e con ogni indice sono mettere un valore nella matrice e la creazione di una matrice con 18 numeri che l'utente sta per input? OK. Cool. OK. Passiamo ora in qualcosa che è abbastanza rilevante per questo pezzo impostare pure. So che in conferenza, David-- mi dispiace, hai avuto una domanda? PUBBLICO: Potete ingrandirla? ANDI PENG: Sì, così ho provato. Ma io non lo so. Per qualche ragione, questo versione di PowerPoint è davvero non funziona bene con il display. Quindi stiamo solo andando per mantenere in questo modo. Tutti questi saranno caricati on-line. Scusate ragazzi. Già. OK. Così possiamo anche avere stringhe. Quindi, se voi ragazzi in realtà notice-- I so Rob è andato oltre questo in quella conferenza che egli did-- una stringa è in realtà solo un array di caratteri, se ci pensi, giusto? Una stringa è un nome o un frase o una parola, giusto? Se dovessi creare una stringa di nome Andi-- solo il mio nome, A-N-D-I. Pensi a che, come una sola variabile. Ma in realtà, è ripartito in appena un array di caratteri. Così che ha un carattere di un memorizzato in un valore di array. Ha un carattere di n memorizzato nel secondo indice e così via e così via. Quindi, in tale modo, in realtà avere questo tipo di struttura di cui in posto per le nostre corde. Così qui, se dovessi inserire il parola "mangiare" - così string parola uguale ottenere stringa. Se dovessi inserire la parola "mangiare", che è fisicamente il modo che il mio computer è immagazzinare tale stringa nella mia memoria. E se volessi correre attraverso quella e di stampa che fuori-- così per in i è uguale a zero, ricorda, in conferenza, abbiamo qualcosa coperto che si chiama strlen, o la lunghezza della stringa. Perché io non realmente sa quanto è grande l'array è di qualsiasi inputting-- dell'utente Per esempio, ho immesso la parola "mangiare," e so che è lungo tre personaggi, giusto? Così ho potuto mettere in una di tre là e tutto andrà bene. Ma se il vostro qualcosa input dell'utente che è un numero diverso di valori, si sta andando ad non essere in grado di veramente sai che quando si programma il codice. Quindi il modo che gestiamo casi di test così è che abbiamo qualcosa chiamata strlen, che è solo una funzione che ti dice da quanto tempo una stringa è. Così strlen di parola. La mia parola è mangiare. n è uguale a strlen di parola. Qualcuno può dirmi cosa che valore effettivamente è proprio lì? Che cosa significa n rappresenta destra ora, in questo esempio, se avessi mangiare? PUBBLICO: 3. ANDI PENG: 3, esattamente. Così abbiamo per int i è uguale a nullo, n è uguale a 3, essenzialmente. E mi è andare a correre fino a quando è meno di 3i ++. E si sta per andare in sostanza, attraverso e fare la stessa cosa. Sta andando a stampare ogni valore e darvi E-A-T. E 'solo che denota una diverso modo di scriverlo. Che sta per essere molto utile. Già. PUBBLICO: Che cosa è i benefici di mettere la n è uguale a termine strlen all'interno che per il ciclo [incomprensibile]? ANDI PENG: Sì. Quindi, se io fossi a-- dire, per esempio, se dovessi farlo e poi fare-- oop-- che, nel mio codice, sarebbe effettivamente facendo come la stessa cosa. Tuttavia, il modo in cui David ha spiegato esso durante la lezione, se qualcuno di voi ragazzi ricordare, è che, come gli esseri umani, come i programmatori, abbiamo davvero cercare di programmare il nostro codice in modo che il nostro computer ha a lavorare come minimo possibile, così che il nostro codice è molto efficiente. Quindi, se ho avuto quella lì, che cosa accadrebbe attraverso il mio ciclo for è che mi piacerebbe prima dichiaro un variabile denominata i sta per essere 0. Vado a controllare, oh, qual è il strlen di parola? Oh, il strlen è 3. Così è che meno di tre? Si, lo è. Io vado a correre. E poi la seconda volta indietro intorno il loop, ho intenzione di incrementare i. i è intenzione di essere uno. E mi sta andando a controllare, oh, ma qual è la strlen di parola? Oh, è tre. E fa che sembrano tipo di spreco, ogni volta che si esegue attraverso il ciclo, da controllare il funzionamento, anche se le strlen di parola mai realmente cambia? Quindi è il potere in più per un computer. Quando si comincia a parlare di cose che sono miliardi e miliardi e miliardi di posti lungo, immaginate il computer essere fisicamente e attraverso controllare tutti che ogni singola volta. Ecco perché, per fare solo per motivi di efficienza, tendiamo a fare solo questo, perché in questo modo siamo solo chiamando la funzione una volta all'inizio, e che ogni volta che passa attraverso sta andando per memorizzare il valore 3 là, che tu non deve controllare continuamente ogni volta. Già. PUBBLICO: Siamo spiacenti. Basta [incomprensibile]. Puoi fare int n uguale strlen e mettere che sopra la parte esterna del ciclo for anche? ANDI PENG: Sì. Si potrebbe fare questo, assolutamente. Il motivo per cui l'abbiamo qui è perché il modo per un ciclo opere è che si chiama variabile locale nel senso che tutto ciò che sei creando all'interno del ciclo for esiste solo all'interno del ciclo for. Quindi la variabile i unico esiste in tali staffe. Ed ecco le variabili di n anche esiste solo in quelle parentesi. Quindi, se si sceglie di usare strlen di parola più volte verso il basso al di sotto, assolutamente il modo migliore per farlo sarebbe quello di dichiarare la cima quindi non c'è bisogno di farlo una volta. Già. PUBBLICO: Perché hai un nuova riga dopo la percentuale vedere se si vuole mettere tutto le lettere accanto ad essa separate? ANDI PENG: Oh, volevo tutti stampare su ogni riga. Non ha importanza. Sì, si tratta di una formattazione. Questa è una buona domanda, però. Sì, se volevo stampare tutto su una sola riga, Non avrei il trattino. OK. Tutti bene? OK. Cool. Quindi penso che ho parlato abbastanza. Il turno di voi ragazzi può attraversare il codice e dimmi cosa c'è di sbagliato qui. Dov'è l'errore? Quindi, come potete vedere, ho dichiarato un nuova matrice di tipo stringa denominato classe. E ho immesso Sam, Jess, e Kim in esso. E sto cercando di stampare tutti gli elementi dell'array. Qualcuno può dirmi perché questo sta per darmi problemi? Ti darò ragazzi 10 secondi per pensare a questo. OK. Sì? AUDIENCE: È il centro sinistra pari a 3 o [incomprensibile]? ANDI PENG: Giusto. Quindi, quante volte è questo in realtà andando a correre attraverso questo ciclo? PUBBLICO: Quattro. ANDI PENG: Esattamente. Sta andando a attraverso quattro volte. Sta andando a correre attraverso a 0, 1, 2, e 3, perché il loro elemento è i è minore o uguale a 3. Non è intenzione di smettere quando è 2. Sta andando a mantenere andare fino a quando non colpisce 3. E come sappiamo, c'è solo tre elementi nella nostra gamma attuale. Se cerchiamo di accedere alla quarta elemento o l'indice di 3, si sta andando a colpire da qualche parte in memoria che non esiste. Si chiama terminatore null. Nulla sarà lì. Il computer non sta andando di essere molto felice con te. Già. Qualcuno ha domande sul perché che stava accadendo? Questo è uno spazio comune per evitare. Già. PUBBLICO: Non il primo scorrere anche avere una stringa di 2? ANDI PENG: No. Quindi, in sostanza, quando si sta facendo un array, tale diritto staffa lì, che number-- tutto esso sta dicendo voi è come molti elementi che ho. Non è in realtà dicendo me gli indici di nulla. Quindi, in questo caso, so che voglio a scrivere con tre posti, con tre luoghi fisici a tengo quello che voglio tenere. Ecco, questo è il motivo per cui il numero tre è lì. Tuttavia, se volevo accedere realtà, se volevo dire, printf numero staffa di classe, quindi si sta andando a mettere effettivamente l'indice fisico lì. Sì, buona domanda. PUBBLICO: Così è la fisica indice dovrebbe essere [incomprensibile]? ANDI PENG: Mi dispiace. Si può parlare un po '? PUBBLICO: Così è l'indice fisico [Incomprensibile] ogni casella? [Incomprensibile]? ANDI PENG: Sì. Quindi ho intenzione di tornare a destra qui. Pensate proprio qui. Abbiamo una vasta gamma di dimensioni 3. Ci sono tre posti, come, segnaposto fisiche in qui. Ma sono chiamati 0, 1, e 2. Quindi, se volessi accedervi, il modo in cui li accedo è printf di ciò che volevo qui. Si dovrebbe stampare il nome di essa, perché poi il computer sa, oh, ho bisogno di guardare in questo array per l'indice 0. Già. Ma le dimensioni di esso non cambia. La dimensione è di 3, a prescindere di come li etichetta. OK. Tutti bene? PUBBLICO: Così ogni volta che [incomprensibile]? ANDI PENG: OK. Quindi, in questo caso, non lo facciamo davvero entrare in questo momento in corso. Ma sapere che un string-- come ho detto prima, una stringa è essenzialmente un array di caratteri. Quindi, se creo un array di corde, mi tipo di hanno una serie di matrice di personaggi, giusto? Quindi, in questo caso, perché avere una matrice di stringhe, se si dovesse inserire un veramente lungo termine, che prende ancora in piedi un solo spazio, perché questa è la stringa uno. Ma se si dovesse pensare i personaggi di tale matrice, poi che sta prendendo un sacco di più caratteri di qualsiasi delle altre parole siamo. Non è veramente importante per ora. Ma questo è solo generale come sta funzionando. OK. Quindi, questo è qualcosa che farò fare un sacco nel corso del semestre. Ho bisogno di riposare la mia voce. Voi ragazzi dovete per stimolare voi stessi. Molti di voi probabilmente dovuto dormire in questo momento. Sto inserendo problemi casuali dove noi, come una classe o si con un partner accanto a voi stanno andando per trascorrere un paio di minuti a discutere su come dovremmo fare per risolvere o la creazione di un programma come questo. Quindi in questo momento, vogliamo per creare un program-- stiamo andando a chiamare upper.c-- che i convertiti una parola minuscola ad una classe superiore maiuscolo string--, mi dispiace. Parola nelle stringhe, mi dispiace, è sinonimo. Ho intenzione di cambiarle per indicare la stessa cosa. Già. Prendete un paio di minuti. Essa non deve essere scritto in qualsiasi lingua. Proprio nel codice o pseudocodice logicamente come avremmo anche andare a fare un tale problema. Già. [CONVERSAZIONE SIDE] Ho anche notato che voi ragazzi can-- I tipi di vedo già il programma. Credo che la mia mancanza di Modalità presentatore è un problema. Ma va bene. [CONVERSAZIONE SIDE] Sì, per favore, ragazzi. Vieni a caramelle. Vieni a caramelle. PUBBLICO: Sì! [CONVERSAZIONE SIDE] ANDI PENG: Inoltre, sì, Comincerò gettando caramelle a persone che non rispondono a domande. Così si dovrebbe tutte le domande di risposta. O Suppongo che le persone che non rispondere alle domande. Sì, viceversa. [CONVERSAZIONE SIDE] PUBBLICO: [incomprensibile] ANDI PENG: Sì. Già. [CONVERSAZIONE SIDE] D'accordo, ragazzi. Prendiamo, come, più di 10 secondi. [CONVERSAZIONE SIDE] Ok, ragazzi. Quindi, prima di iniziare a cercare di effettivamente scrivere fisicamente il codice, una buona abitudine per sviluppare è che vogliamo primo tipo di ragione logicamente fuori come vorremmo farlo. Si vuole fare in modo, prima fisicamente iniziare a provare a codificare a Mario, che si fanno sicuri di avere il vostro pseudocodice. Che si sta prendendo attraverso che cosa è necessario creare così che, quando fisicamente scrivere il programma più tardi, si è maggiormente in grado di rilevare gli errori nel codice e cose del genere. Quindi stiamo andando cominciare solo per-- in inglese, in pseudocodice, qualcuno vuole dare me una spiegazione generica di come saremmo andati a fare questo? Già. PUBBLICO: [incomprensibile]. ANDI PENG: Certo, non preoccuparti. PUBBLICO: Si può chiedere di o chiedere qualcuno per ottenere stringa 1-- sì, corda, e poi-- ANDI PENG: Sì, quindi questo è un buon inizio. Inizierò scrivendo, mi dispiace, come si parla. Così-- PUBBLICO: --il minuscolo i numeri sono più alti, giusto? O le lettere minuscole avere numeri elevati? ANDI PENG: Esattamente. PUBBLICO: Allora sottraiamo 32 da qualunque [incomprensibile]. ANDI PENG: Grande. Così abbiamo sorta di avere un senso generale di come lavorare su questo problema. Sapendo che abbiamo imparato tipo di il modo fisico che le stringhe sono memorizzati nella memoria, ciò che si fa già sa che si sta andando a probabilmente necessario scrivere nel codice al fine di spostare attraverso la stringa? Destinatari: per ciclo. ANDI PENG: Un ciclo for, esattamente. Grande. Così abbiamo sorta di avere un generico pseudocodice scritto quel tipo di sta dando note sul come si sposterebbe di risolvere il problema. Ora che avete questo, può fare riferimento per dopo quando si sta cercando di in realtà scrivere il codice. Così possiamo effettivamente andare qui. E ho una funzione chiamata upper.c-- lì è-- di solo un modello vuoto proprio ora che voi ragazzi stanno andando a aiutami a capire su come scrivere questa linea di non code-- riga di codice. Sarà più righe di codice. Quando si avvia qualsiasi tipo di vuoto pset, qual è la prima cosa che mi serve ricordarsi di fare? PUBBLICO: [incomprensibile]. ANDI PENG: Grande Yep. Includi. stdio.h. Spesso questo è uno dei Gli errori più facile persone farà quando sono la scrittura, è che faranno dimenticare di includere un importante biblioteca di cui hanno bisogno. Quindi, se è l'orario d'ufficio e tu sei come, Non so perché il mio codice non funziona. Potete dirmi perché non funziona? Stiamo per dire hai #include? Dovresti #include esso. OK. Così abbiamo la I / O standard qui. È che l'unica libreria stiamo andando ad avere bisogno qui? Che altro abbiamo intenzione di fare? Scusate. Qualcuno ha appena urlare fuori? PUBBLICO: [incomprensibile]. ANDI PENG: ci si va. OK. E come posso fare per iniziare qualsiasi tipo di funzione, qualsiasi tipo di funzione principale nell'ambito del nostro programma? Int main. OK. Cosa mi metto qui dentro? Qual è la prima cosa che vuoi fare? Se vogliamo ottenere un stringa dall'utente, quello che stiamo andando ad avere da fare su questo prima linea? Siamo spiacenti, voi ragazzi solo sentire liberi di parlare e ad alta voce. Basta gridare qualunque. AUDIENCE: Chiedere all'utente? ANDI PENG: come possiamo farlo? Ask-- sto andando a digitare "chiedere all'utente"? PUBBLICO: Printf. ANDI PENG: OK. Printf. Cosa voglio di printf? PUBBLICO: digitare qualcosa. ANDI PENG: Così? Ragazzi, finta come se fossi un computer. Fisicamente mi dicono ogni passo che ho bisogno di digitare qui? Sto facendo qualcosa di sbagliato? Avrei dovuto digitato qualcosa? PUBBLICO: Avete bisogno di virgolette. ANDI PENG: ho bisogno di citazioni? OK. OK. PUBBLICO: E poi la nuova linea. Punto e virgola. ANDI PENG: Punto e virgola? OK. Bene. PUBBLICO: E forse specificare che si desidera in minuscolo? ANDI PENG: Grande. Voi ragazzi ridere di me dimenticando di mettere un punto e virgola. Vi garantisco da qualche parte nel corso di questa classe, si dimentica di mettere un punto e virgola, e vi porterà tre ore per capire il motivo per cui il codice non funziona. E 'successo a tutti noi. Sarà probabilmente accadrà a voi. Entra in una buona abitudine di utilizzare il punto e virgola. OK. PUBBLICO: Volete per fare il backslash? ANDI PENG: Certo. Vuoi fare il backslash? PUBBLICO: Sì. ANDI PENG: Grande. OK. Che cosa devo fare? PUBBLICO: Get stringa. ANDI PENG: Get stringa. Quindi cosa devo scrivere? Qualcuno? PUBBLICO: String s. ANDI PENG: String s. PUBBLICO: GetString. ANDI PENG: Qualcuno, mi puoi dire dove questa funzione GetString è venuta da? PUBBLICO: string.h. ANDI PENG: string.h? Pensi che sia da string.h? PUBBLICO: [incomprensibile]. ANDI PENG: ci si va. E 'da CS50.h. Se stai sempre confusi su dove una file di libreria è o un file di intestazione è, google letteralmente string.h, e ti dirò quali sono tutte le funzioni che sono in string.h. OK. Così ora che ho creato una stringa e ho richiedere all'utente di esso, Ho memorizzato in una variabile di nome s, che cosa devo fare ora? PUBBLICO: Verificare se è in minuscolo. ANDI PENG: Siamo spiacenti? PUBBLICO: Verificare se è in minuscolo. ANDI PENG: Va bene, facciamo questo. Come lo faccio? In effetti, ai fini della classe in questo momento, stiamo solo andando a supporre che tutto che l'ingresso ci si trova già in minuscolo. Se si voleva controllare, si farebbe basta aggiungere un'istruzione condizionale che controllò, che attraversava ogni elemento unico array e controllato se è tra certi valori. Ho dimenticato come il numero dei valori di minuscolo sono. Si può guardare in su sulla tabella ASCII. Ma sì, è davvero un buon punto. Ma in questo momento, stiamo solo andando a supporre che tutte le stringhe che di ingresso sono in minuscolo. OK. Quindi, come potrei fare per questo problema dopo? Destinatari: per ciclo. ANDI PENG: ciclo For? OK. Dimmi cosa digitare. Destinatari: per int i è uguale a 0. ANDI PENG: OK. PUBBLICO: Oh, in realtà, allora si fare una virgola e fare n è uguale strlen. ANDI PENG: cosa così importante che penso che lei è notato qui è che non abbiamo avuto a dire int n la seconda volta abbiamo fatto questo. Basta sapere che in una per ciclo quando si sta dichiarando: in realtà non è necessario il int di la seconda volta che si esegue una variabile. Si può dire n strlen. PUBBLICO: Di s. ANDI PENG: s. OK. PUBBLICO: Poi un punto e virgola. ANDI PENG: Certo. PUBBLICO: E poi [incomprensibile] n. Poi i ++. ANDI PENG: Grande. Tutto ok. Cosa vogliamo dentro di questo ciclo for ora? Ricordate, se stiamo andando a correre attraverso una stringa e gestito attraverso una serie, vogliamo verificare le cose in esso. Che cosa abbiamo intenzione di bisogno? Questo è un po 'la parte difficile ora. Qualcuno ha una congettura? OK. Quindi, prima, come possiamo anche accedere? Come abbiamo anche primo controllo o accedere a un elemento dell'array? Come lo facciamo? Qual è la notazione che usiamo per fare questo? Qual è il nome di questo array chiamato? Si chiama s, giusto? Ricorda, qualsiasi stringa è sempre una matrice. Staffa in modo s i, giusto? Perché questo è il valore corrente o valore di indice stiamo controllando. E abbiamo intenzione di impostare la parità a-- vogliamo un valore minuscolo, giusto? Vogliamo trasformare questa lower-- scusate, vogliamo un maiuscolo. Vogliamo trasformare il minuscolo valore in un maiuscolo. E così like-- mi dispiace, come ti chiami? PUBBLICO: Heidi. ANDI PENG: Siamo spiacenti? PUBBLICO: Heidi. ANDI PENG: Heidi. Come ha detto Heidi inizialmente, probabilmente siamo andando ad avere bisogno the-- siamo probabilmente andando a sottrarre 32 da qualunque charc che fa, giusto? Perché su un ASCII tabella, la differenza tra una lettera minuscola e una lettera maiuscola è 32. Così, quando stiamo facendo questo, probabilmente siamo andando a voler sottrarre 32, giusto? Quindi stiamo andando a fare s i. Ha tutti a capire perché l'ho fatto? Perché in questo momento, nel nostro array, stiamo controllando l'indice 0, giusto? E nell'indice 0a del stringa, che è il primo carattere. E che personaggio stiamo andando ad assumere è minuscolo. Se vogliamo rendere maiuscolo, noi deve sottrarre 32 dal suo valore, perché nel nostro ASCII tavolo, è così che abbiamo capito al successivo corrispondente valore che lo rende maiuscolo. Fa capire a tutti che? Già. PUBBLICO: Potresti anche non minuscola minus-- ANDI PENG: Sì, così che è effettivamente molto buono. Ho intenzione di tornare a quel domanda dopo lo facciamo. Già. E poi se voglio vedere che cosa sta succedendo, Probabilmente ho intenzione di desidera stampare, giusto? Qualcuno mi dica cosa Voglio stampare qui. PUBBLICO: printf per cento c backslash [incomprensibile]. Questo è il valore di [incomprensibile] s i. ANDI PENG: s i, scusa? PUBBLICO: [incomprensibile]. ANDI PENG: Non lo so. Cosa ne pensi? PUBBLICO: Beh, io wouldn't-- Credo che non avrei bring-- Vorrei prendere il dentro, perché [incomprensibile]. ANDI PENG: Oh, l'avrebbe fatto? PUBBLICO: Sì. ANDI PENG: lasciamo perdere la strada è, e ti spiego perché più tardi. Ricordate, anche quando si avere un posto da titolare, si vuole mettere parentesi intorno ad esso. Tutto ok. Quindi questo dovrebbe essere una funzione solida qui. Corriamo e vedere se si compila. Fai superiore. Uh Oh. Che non guarda troppo buono. Perché succede questo? Come per qualsiasi errore, si vuole andare indietro e iniziare con il primo, perché in genere le cause un errore un sacco di altri errori dopo. Qui vediamo upper.c: 18: 25, che racconta me in questo programma chiamato upper.c, sulla linea 18, l'errore dichiarando implicitamente libreria di funzioni strlen con tipo blah unassigned--, non lo so cosa sta succedendo dopo. Tutto ciò che mi sta dicendo in questo momento è che qualcosa sta succedendo la strlen. E il computer è confusa, perché E 'come, non so che cosa strlen è? Che cosa significa che, probabilmente, dirti che ti manca? PUBBLICO: Ti stai perdendo [incomprensibile]. ANDI PENG: Hai ragione. Di preciso. Quindi questo è dove è importante assicurarsi che ogni funzione si utilizza nella vostra codice sta avendo l'intestazione corretta file per la libreria, oppure si sta andando ad ottenere un sacco di errori e il codice non sta andando per sapere cosa sta succedendo. Quindi stiamo andando a includere string.h qui. Ora, quando si cerca di compilare superiore. Compilare correttamente. Corriamo questo programma. Quindi digitare qualcosa in minuscolo. Che cosa voi ragazzi volete scrivere? Shout fuori qualcosa. Va bene, Charly appena entrato. Ti scriviamo il nome di Charly. Charly in minuscolo. E si spera, si spera, questo è andando a gridare e sputare fuori Charly in maiuscolo. Sìì! fa capire a tutti come Sono andato circa la risoluzione di questo? Il modo in cui posso manipolare utilizzando numeri interi per risolvere qualcosa che Voglio fare in stringhe, perché i caratteri e interi possono essere fatto riferimento allo stesso modo, perché della mappatura ASCII. Quindi, per tornare al punto, se io voluto mettere qui invece di 32 A maiuscola meno minuscolo come un che, che funzionerebbe altrettanto bene, perché questo è semplicemente il differenza tra questi due valori. Se voglio fare questa charly again--. Oh no. Penso che siamo andati nella direzione sbagliata, sì? PUBBLICO: [incomprensibile] minuscola. ANDI PENG: ci si va. Yep. E fuori sputa charly. Quindi fate attenzione quando si sta sottraendo i valori da ricordare che uno è maggiore dell'altra. Ad esempio, qui ho dimenticato che è in realtà un minuscolo superiore maiuscolo A. Così, quando ho cercato di sottrarre nell'altro senso intorno, ho ottenuto negativo 32. E il mio computer era come, Non so di cosa si tratta. E 'probabilità solo qualche casuale valore che non è molto buono. E in modo da assicurarsi che si sta sottraendo la lunghezza corretta per trovare il carattere desiderato. OK. C'è qualcuno confuso su come noi è andato di scrivere questa funzione? OK. Quindi in realtà, una funzione già esiste nella libreria chiamata ctype.h. Chiamato ctype.h della biblioteca. Questa funzione è in realtà già scritto per te. Si chiama a superiore. E così per fini questo pset, si sta andando per scoprire che si vuole veramente usare molte delle funzioni contenute all'interno della libreria ctype. Per superiore, per abbassare, è superiore, è lower-- quelle sono tutte le funzioni che si sarà in grado di utilizzare molto, molto rapidamente nel proprio codice che fa esattamente quello che fa. Abbiamo scritto come convertire una stringa in lettere maiuscole. Ma questo è in realtà il codice che qualcun altro ha scritto e che è possibile accedere tramite una funzione diversa. Sì? PUBBLICO: Quindi, basta copiare un di là e farlo per ogni singola lettera? ANDI PENG: Sì, perché io non lo faccio preoccupano i valori di a. Ho appena interessa che la differenza tra loro è 32, giusto? La differenza tra minuscolo b e B maiuscola è anche 32. E la differenza tra c e maiuscolo C è sempre 32. Devo solo preoccuparsi del differenza tra i due, perché tutte le lettere seguire lo stesso modello, giusto? Se ho la differenza tra di essi, So cosa la differenza tra tutti loro è. Bella domanda. Già. Tutti bene? OK. Oop. OK. Così un altro concetto che è sta per essere molto utile, come si continuare a sviluppare il codice è questa idea di creare funzioni o astrazione. Quindi in questo momento, tutti abbiamo preso algebra. In algebra, vi hanno insegnato che non c'è questa cosa meravigliosa chiamata una funzione la macchina, dove se si ingresso un tipo di numero, corre attraverso questa meravigliosa funzione e salta fuori un output diverso, giusto? Nel codice, la stessa cosa succede in qualsiasi tipo di funzione. Così ho potuto fisicamente scrivere nel mio corpo del mio codice una comunicazione generale che realmente fa qualunque sia il corpo del codice sta facendo. Ma al di fuori di questo, posso anche scrivere molte funzioni differenti che fanno molte cose diverse. Ad esempio, abbiamo già iniziato a utilizzare alcuni di loro. Printf-- che è un funzione che qualcun altro ha già scritto che possiamo chiamare nel nostro codice. Per upper-- in questo caso, upper-- è un'altra funzione abbiamo scritto che può chiamare nel nostro codice. E quindi credo che il motivo per cui fare abbiamo anche funzioni? Perché non solo plop tutti nella stessa riga di codice? Lo rende facile per tutti. Beh, il ragionamento dietro che è, innanzitutto, organizzazione. E 'davvero fastidioso andare tramite il codice di qualcuno e una funzione come printf. Se voi ragazzi in realtà sapeva cosa funzione printf comportato scrivere, è, come, 1000 righe di codice. Se ogni volta che volevo a printf qualcosa, Ho dovuto scrivere 1.000 linee di codice, che sarebbe davvero fastidioso per leggere, destra? È per questo che abbiamo appena creato questa funzione astratta che abbiamo già qualcuno altro ha scritto da qualche altra parte. E ogni volta che abbiamo bisogno di usarlo in il nostro codice, non ci resta che dire printf. E questo è in grado di utilizzare la funzione qualcun altro ha scritto nel nostro codice. Rende più facile organizzativamente a leggere il codice. In secondo luogo, è una semplificazione. Semplifica le operazioni che abbiamo a prendere per risolvere il nostro problema. Printf, funzioni come printf, funzioni come al superiore sono tutte cose che ci permettono di semplificare il nostro codice in giù in modo che sia più facile. E ultima cosa è la riusabilità. Quindi il fatto che abbiamo una funzione chiamata printf che possiamo chiamare molti diversi tempi e permette di essere riutilizzabile. Se dovessi scrivere printf, Scrivo solo una volta. Esiste solo in quella posizione. Se avessi voluto farlo di nuovo, vorrei dovere copiare ed incollare tutto questo nella mia seconda riga di codice. Ecco perché se creiamo una funzione che esiste al di fuori del nostro principale, noi possiamo solo invocare e riutilizzarlo quando abbiamo bisogno in modo che sia molto più facile per noi come i programmi per scrivere. Quindi il modo che avremmo effettivamente scrivere una funzione è molto simile, giusto? Questo è il primo tipo di caso in cui ce la faremo vedere una funzione di assumere uno stile diversa dalla nostra int void main. In questo caso, se volevo scrivere una funzione chiamata q, giusto? E il valore int qui è tutto me dicendo, cosa voglio questo funzione per tornare da me? Se voglio un intero cubo, Ho intenzione di voler ingresso. Questi sono i parametri. Io vado agli ingressi un valore di tipo int. E ho intenzione di tornare un altro valore di tipo int. E qui, come si può vedere, tutto quello che sto facendo è cubatura qualunque il mio ingresso è come la mia uscita e il ritorno. Quindi tutto questa funzione fa è prende una sorta di numero intero. Si moltiplica per sé due volte in modo che in effetti cubi. E poi ritorna qualunque essa uscita è. Quindi, in questo caso, si tratta di due linee di codice che abbiamo dovuto scrivere più. Ma se abbiamo voluto chiamare su questo più volte, è molto più facile da digitare che uno Linea proprio qui che è in cubo di devono passare attraverso più volte. Quindi il modo che essenzialmente qualsiasi formattazione per qualsiasi tipo di funzione sta per esistere è come qui. Così abbiamo il nome della funzione. In questo caso, si chiama cubo. E noi chiamiamo lo cubo perché è facile da ricordare. È possibile assegnare un nome e quadrato può effettivamente essere cubo. Non importa. Solo un nome che sei Assegnando la funzione. Questo qui, int, è il tipo del parametro si ha bisogno. Così che cosa questa funzione hanno bisogno per funzionare? Ebbene, ha bisogno di un input. Ho chiamato ingresso. È possibile assegnare un nome come volete. Ma ho bisogno di qualcosa di tipo int. Sta andando a eseguiranno effettivamente tutto ciò che è dentro di qui, il corpo della funzione. E poi il tipo di ritorno proprio qui, questo int-- tutto quello che mi sta dicendo è che questa funzione è intenzione di tornare da me in int. Così sta andando a prendere in un int, e sta andando a dare indietro un int. Fa capire a tutti come il formattazione di questo tipo funziona? Cool. OK. Quindi non essere preoccupato se questo sembra un po 'di diritto astratto ora. Questo è qualcosa che parleremo. Ci immergeremo nel più profondo più avanti nel corso. Il modo che qualsiasi tipo di livello superiore l'astrazione di queste cose funzionano è che, in memoria, in il computer, tutto è memorizzato in questo tipo di stack, devo dire. Così lassù in cima. Non so se si ragazzi possono vedere che bene. Cercherò per ingrandire. Qui in alto, abbiamo avere il testo fisico di ciò che il computer è interpreting-- tutti gli zeri e quelli che esistono all'interno del nostro computer. E poi abbiamo il inizializzato dati e dati non inizializzati, ciò che noi chiamiamo le variabili globali. Quindi variabili che esistono tutti i programmi e tutta la vostra, essenzialmente, codice. Nessun problema se voi ragazzi siete tipo di chiaro su questo. Non ha molta importanza in questo momento. E poi abbiamo ciò che è chiamato un mucchio in una pila. Pensate a una pila letteralmente come proprio come una pila di cose, una pila di diverso cose che sono spinti in cima di ogni altro che memorizzano i vari variabili e sintassi all'interno del codice. E poi qui in fondo, abbiamo le variabili d'ambiente di ciò che si sta eseguendo all'interno solo la tua piccola linea di codice. E stiamo solo andando per ingrandire in parte reale stack. Così proprio qui, se dovessimo per ingrandire in solo su questa zona della pila, questo è quello che sembra. E questo è in realtà piuttosto importante quando si parla di ragazzi le funzioni, perché nota che la memoria del computer è memorizzare le variabili e le funzioni ei parametri sia vostro la funzione e le variabili principali in luoghi diversi. Così adesso, è principale la funzione reale che si sta eseguendo in un codice. Hai suoi parametri memorizzati qui e le sue variabili locali memorizzati qui. Variabile locale significa semplicemente qualsiasi variabile che esistono solo all'interno di tale funzione. E su di esso, si dispone di questo funzione separata denominata cubo. Avete che è parametri così come quei locali. E la ragione è possibile vedi qui è che ciò che succede quando cubo prende in un valore da una funzione principale è che in realtà si sta copiando che oltre. Quindi, se volessi cubo 2 e 8 di ritorno, che 2 è in realtà immesso come parametro ed è copiati in modo che lo avete già esistente in due posti diversi in memoria. E bisogna essere molto attenti on ricordare quale uno di quelli si sta effettivamente manipolando. E un esempio di ciò che è accaduto che sarebbe molto, molto male esiste proprio qui. Così proprio qui, ho avuto, in teoria, un programma proprio qui, una funzione principale che sto dichiarando un int x è uguale a 1. Sto dichiarando un altro int y è uguale a 2. E poi Sono in esecuzione tramite questa funzione chiamata di swap, dove presumo che è scambiando i due valori. E poi ho intenzione di stamparli, giusto? Questo è quello che voglio questo programma di fare. Quindi cerchiamo di venire giù e dare un'occhiata. Quindi, se ho effettivamente scritto un diverso la funzione, come potete vedere, abbiamo la nostra funzione principale qui. E poi abbiamo il nostro seconda funzione qui. Void swap. Vuoto significa solo che è non andare a restituire nulla. Il nome della funzione è chiamato scambio, ed è andando ad aspirazione due variabili, int a e int b, dalla funzione [incomprensibile]. Quindi, in sostanza, qui, siamo passando xey in questa funzione. E se dovessimo Creiamo questo-- quindi vogliamo per creare un valore temporaneo, giusto? Stiamo andando a assegnare tale ad una. E poi una sta per ora uguali b. E b sta per essere di nuovo dove il valore temperatura era, che è una, perché quando si desidera scambiare le cose, non si può semplicemente come loro scambiare. Devi tenere uno fuori qui in modo che ricorda cosa che è, perché una volta si scambiano uno, si dimentica cosa che il valore originale era, giusto? Quindi, in teoria, questo programma dovrebbe funzionare, giusto? Se volevo scambiare il due, dovrebbero scambiare. Quindi cerchiamo di eseguirlo e vedere se funziona. Così come voi potete vedere, x era una volta uno e una volta era y 2. E se stampo fuori, x è ancora 1 ey è 2. Hmm, questo programma non sembra essere lavorare il modo in cui voglio farlo funzionare. Qualcuno ha voglia di prendere un colpo a indovinare perché questo stava accadendo? Ha a che fare con il modo che le cose sono diverse conservati in luoghi diversi in memoria. OK. Così voi ragazzi non devono preoccuparsi troppo di questo adesso. Ma sapere che il cubo di locali variabili erano a e b, perché qui in nostra funzione, abbiamo dichiarato a e b come le variabili che esistono all'interno del cubo, tale funzione. Ma come si può vedere, i parametri sta prendendo in venivano immagazzinati qui. Ma non eravamo in realtà tornando nulla. Non siamo stati in realtà cambiando xe y. Stavamo solo cambiando a e b. Avevamo copiato xey in cosa chiamata e b. Ma non abbiamo mai realmente manipolato xey stessi. Sei ragazzi vedendo come che sta succedendo? È che abbiamo semplicemente copiato esso sopra, ma non abbiamo in realtà mantenuto traccia di dove si trovavano nella memoria. E così ora il computer sta cercando, oh, ho eseguire questa cosa attraverso questa bella funzionalità. Ma xey sono ancora xe y. Non è successo niente a loro a causa del fatto che tali parametri e le variabili locali sono memorizzati in un diverso inserire in memoria. E questo è un livello superiore concetto che faremo iniziare a vedere più avanti nel corso. Ma è sufficiente sapere che questo è un problema che può accadere e che faremo capire modi su come affrontare questo più avanti nel corso. OK. Tutto ok. Così l'ultimo concetto siamo davvero andando a coprire che sta per essere utile per il pset questa settimana sono quelli che vengono chiamati argomenti della riga di comando. Così Rob nella sua conferenza ha attraversato tipo di brevemente come funzionano. In sostanza sapere che quando si scrive come una funzione principale, quando funzioni scritto prima in passato, abbiamo avuto int void main. E il motivo per cui abbiamo avuto nulla lì era perché i nostri programmi non hanno fatto bisogno di valori di input per l'esecuzione, giusto? Quando ho eseguito Mario, non ho bisogno in realtà basta digitare in qualcosa quando mi sono imbattuto Mario. Potrei richiedere all'utente in seguito. Ma non sarà sempre così. Ad esempio, in questo problema settimana imposta, si sta andando ad essere chiesto che, in Oltre a eseguire il programma, si sta andando a voler ingresso certe cose in rettilineo, come si eseguire il programma. Così il nostro modo di fare che si chiama un argomento della riga di comando, che è come un argomento è possibile inserire direttamente come si sta cercando di eseguire il programma. Così la notazione per questo, è piuttosto complesso bello, ma in realtà non è che difficile. Così int main-- questa è solo la funzione principale. In argc virgola parentesi stringa argv. Quindi tutto quello che sta dicendo è che questo int argc-- tutto quello che è che ti dice è che questi sono il numero di argomenti il ​​computer deve aspettarsi. Quindi, una cosa che è davvero importante tenere traccia di è il nome fisico del programma conta come uno di questi argomenti. Quindi, se volevo avere il mio programma eseguire più una riga di comando aggiuntiva argomento, realtà sono andando ad avere due. Argc in realtà sta per essere due. E poi stringa argv bracket-- tutto ciò che sta facendo, mi sta dando un array di stringhe che è andando a mostrare solo quello che e memorizzare tutti questi argomenti della riga di comando sono. Così, per esempio, se volevo avere questo programma, ./copy infile outfile, giusto? Questo è solo un tipico comando di Linux. Che in realtà è argc? Quanti argomenti della riga di comando ci sono in realtà in tutto questo? Tutto questo non fa altro che creare una copia di un infile del nome di un file e lo copia in un altro file, giusto? Questo è tutto ciò sta facendo. Come potete vedere, lo sto facendo su una linea senza realmente bisogno il programma. Qual è il nostro argc in questo caso? Quanti argomenti abbiamo? PUBBLICO: Three? ANDI PENG: abbiamo tre, esattamente. Quindi è molto intuitivo da basti pensare che è solo il infile e la outfile. Ma sapere che il nome fisico del programma che si sta eseguendo conta come uno. Quindi, in questo caso, argc è in realtà tre. Che ne dite, che cosa è argv 0? Ricordate, tutti i argomenti della riga di comando sono stati immagazzinati in un array di stringhe. Quindi, se cerco di accedervi, cosa sarebbe argv staffa 0 darmi? PUBBLICO: [incomprensibile]. ANDI PENG: Esattamente. Mi avrebbe dato il punto tagliare la copia, perché è l'elemento 0, il primo elemento della mia matrice. Che dire argv 1? PUBBLICO: Infile. ANDI PENG: Infile, esattamente. Che dire di argv 2? PUBBLICO: outfile. ANDI PENG: outfile. Questo è un po 'difficile ora. Cosa ne pensate voi ragazzi argv 3 sta per essere dandomi se ho cercato di stampare quello fuori? PUBBLICO: [incomprensibile]? ANDI PENG: Hai avuto una mano? Già. PUBBLICO: Un'alternativa. ANDI PENG: Esattamente. Quindi ricorda in conferenza che abbiamo avere alla fine di una gara qualcosa chiamata terminatore null? Arriveremo a questo anche più avanti nella classe. Ma sapere che nella notazione, il modo in cui il computer sa che è la fine dell'array è che mette qualcosa chiamato un nullo terminatore o un trattino zero. Quindi, se si tenta di accedere argv 3, si sta andando a colpire questo cruscotto 0. Ciò è ancor più di una domanda trabocchetto. Che dire argv 4? Quindi questo è passato terminatore nullo, oltre i limiti della nostra matrice. Cosa pensi sta per succede quando cerchiamo di farlo? PUBBLICO: [incomprensibile]? ANDI PENG: Siamo spiacenti? Dire che un po 'più forte? PUBBLICO: [incomprensibile]. ANDI PENG: Sì. Questo è il nome del zona che molto probabilmente ottenere. Ma sapere che argv 4-- che si permette di accesso posti nel vostro computer di memoria che si ha realmente non dovrebbe essere toccante, perché Per ora si sa che cosa è argv. Voi sapete che si tratta di un array di dimensione 3 che ha la copia puntino, infile e outfile. Se si tenta di andare così lontano oltre quello che sei oltre il terminatore null, il computer ha probabilmente qualcosa memorizzato in argv 4. E davvero non dovrebbe essere consentito l'accesso in argv 4, perché si ha un file cabinet e tu sei solo consentito l'accesso a queste tre ripiani. Ma se si tenta di raggiungere ben oltre il ripiano di dove è permesso, si sta andando ad iniziare a fare scherzi con altre cose nella memoria del computer. Che sta per essere molto, molto male. Quindi è sufficiente sapere che. Fate molta attenzione che si non solo iniziare a caso accedere agli elementi in un array non erano in quello che si voleva creare. Yep. OK. Quindi stiamo andando a fare un altro esempio terminale qui. OK. Così Rob rapidamente in conferenza l'altro giorno è andato attraverso questo esempio, dove aveva int main int argc stringa argv staffe, che mi sta dicendo che io sono andando ad avere argomenti della riga di comando. Egli ha, se argc uguale uguale 2-- ricordo, uguale uguali significa confronto. Se è uguale a 2, allora sono andare in stampa ciao, qualunque sia la prima elemento dell'array è. Stampa Altrimenti, ciao mondo. Che cosa è questa intenzione di accadere essenzialmente? Qualcuno può solo spiegare in Inglese quello che questo programma sta facendo? Già. PUBBLICO: Se qualcuno digitato un comando e ha detto che il loro nome e cognome, non sarà solo stampare il prima e dire ciao, qualunque sia il tuo nome è. ANDI PENG: OK, andiamo eseguirlo. Così, per esempio, se dovessi fare questo file fare ciao ciao a-- a-- cosa mi desidera introdurre? PUBBLICO: Nome e cognome. ANDI PENG: Nome e cognome? Spazi? PUBBLICO: Sì. ANDI PENG: Qualcuno può dire me in questo momento, che cosa è argc? Proprio lì? Oops, scusa. Lasciami andare indietro. Quanti argomenti della riga di comando si are-- ragazzi non possono veramente vedere. Ma cercherò per ingrandire. Sto cercando. Sì, ci sono tre, giusto? E 'barra puntino ciao, è Andi, ed è Peng. Allora, cosa ne pensate questo programma sta per essere stampare? Oh. Oh scusa. Nome sbagliato. E 'la stampa fuori, ciao mondo. Qualcuno vuole spiegare perché quello che sta succedendo? Sì? PUBBLICO: [incomprensibile]. ANDI PENG: Esattamente. Così qui, sono condizionale è, se argc è uguale uguale a 2. Così solo nel caso che ci sia due argomenti della riga di comando. Poi ho intenzione di stampare, ciao, qualunque essa sia. Ma il resto, ho intenzione di stampare solo, ciao mondo. Così fa qualcuno vuole a farmi un esempio di come sarebbe in grado di realtà farlo stampare il valore di argv 1? Che cosa dovrei inserire qui? Solo una cosa, giusto? Perché il punto per ciao già conta come il primo argomento. Ho solo un altro. Quindi dot ciao se mi limito a fare Andi. Ciao, Andi. Non tutti a capire perché quello che sta succedendo? Già. Pubblico: Così lo spazio tra la comando line-- è [incomprensibile]? ANDI PENG: No. Così lo spazio in una linea di comando argomento, x, a dire il computer che questo è l'inizio di una nuova stringa. Così stringa argv qui-- essa negozi tutti i comandi argomenti della riga nelle stringhe. E così lo spazio nella riga di comando argument-- tutto ciò che non fa altro che dirvi, questo è alla fine di una stringa ed è il momento di passare ad un altro. Già. Questo è abbastanza importante per il tuo pset, perché sei andando a testare questi. Così qualcuno ha tutte le domande su questo? Ok bello. Sì? AUDIENCE: Quindi la ragione si farebbe mettere intero argomento calc invece di [incomprensibile] sarebbe quando vuoi digitare informazioni aggiuntive [Incomprensibile]? ANDI PENG: Sì, esattamente. Alcuni programmi richiedono di per immettere un argomento da riga di comando che passa e che utilizza tale. Già. PUBBLICO: Che importa se [incomprensibile]? ANDI PENG: Beh, che cosa devo cambiare poi nel mio programma? PUBBLICO: Solo 3. ANDI PENG: Perché è succede, cosa ne pensi? AUDIENCE: Poiché il [incomprensibile]. PUBBLICO: Dovreste cambiare a 2 [incomprensibile]. PUBBLICO: 1 e 2. ANDI PENG: 1 e 2, esattamente. Quindi, in questo caso, si sarebbe probabilmente vogliono avere due printf statements-- uno che ha stampato argv 1 e quello che ha stampato argv 2. Qui. Posso effettivamente fare molto velocemente. Ci si va. Oh. Non è proprio quello che volevi. Ma se voi ragazzi scherza con la formattazione, verrà fuori. Già. Cool. So che siamo un po 'a corto di tempo. Ma sto solo andando a spendere rapidamente un paio di minuti che passano attraverso helpful-- PUBBLICO: Avete due minuti. ANDI PENG: ho due minuti? Grazie. Alcuni consigli pset rapidi. Quindi, per questo pset, mi raccomando, come ho detto, tutti a leggere le specifiche. Sarete scrivendo tre uno programs-- chiamato initials.c, uno chiamato caesar.c, uno chiamato vigenere.c. Alcuni suggerimenti importanti che voi ragazzi vuole veramente da tenere in mind-- così c'è questa funzione chiamato atoi-- come mi piace dire, a trois. Chiaro se questo è in realtà come lo si dice. Ma tutto quello che sta facendo, sta inserendo. Converte una stringa in un int. Così un rappresenta ASCII per i numeri interi. E 'solo la conversione di ASCII I valori di valori interi. Quindi ricorda argv, la matrice che memorizza tutti i comandi della riga arguments-- li memorizza tutto come stringhe. E così, se si vuole essere in grado di hanno uno dei loro diventano un numero intero, si sta andando ad avere per utilizzare questo valore qui. Modulo, come abbiamo coperto prima in classe oggi, permette di avere il resto di ciò che avete. Quindi, se abbiamo davvero, davvero grandi numeri a Cesare, quello che se abbiamo alla fine di una serie di Vigenère? Come avete intenzione di essere in grado per ottenere che per avvolgere intorno? Se mi ha colpito z e voglio per tornare a una, come faccio a ottenere che per avvolgere? Probabilmente si desidera utilizzare modulo da qualche parte. In secondo luogo, navigare intorno la vostra biblioteca. ctype.h. Questa è una nuova libreria che abbiamo. Troverete un sacco di veramente, veramente utile isupper functions--, islower, toupper, tolower, isalpha, eccetera. Tutte le funzioni che saranno molto utili quando si sta cercando di capire, è questo personaggio una lettera minuscola? Come posso convertire questo stringa in un maiuscolo? Tutte queste cose saranno molto, molto utile per il vostro pset. OK. Orario di ricevimento stasera sono 8:00 alle 11:00 in aula TEAL domani nonché Mercoledì e Giovedi notte. Orario di ricevimento sono comuni. Altamente suggerire ragazzi tutto iniziare subito, perché non vuole essere quella ragazzo che Giovedi notte ha problemi presentando il pset ed è come, non so che cosa fare. Ho iniziato, ho finito, ho presentato. Cercate di dare voi stessi po 'di spazio, perché in verificano sempre problemi di codice. Si vuole fare in modo che vi date molto tempo per poter per completare le pset. Cool. Io appendere intorno qui. PUBBLICO: è già presente on-line? ANDI PENG: Non so se si tratta di linea già, ma sarà. Io appendere intorno qui, se qualcuno ha già tutte le domande. Grazie per essere venuti.