>> PROFESSORE: Così l'ordine del giorno questa settimana, non più di tanto roba.
Ma si spera molto, molto utile e rilevanti per voi ragazzi questa settimana.
Ma stiamo andando a spendere magari 15, 20 minuti solo in fretta a parlare
su elenco di link.
Elenchi di link stanno per essere coperta al quiz.
Quindi, forse, sarebbe molto utile per imparare un po 'di cosa si tratta.
>> Stiamo andando a trascorrere la maggior maggior parte delle sezione di oggi
andando oltre i problemi di pratica quiz a zero.
E poi ci salveremo forse 20, 30 minuti alla fine per tutte le domande persistente
qualcuno ha.
>> E poi, l'ultimo cinque minuti, io vado
per dare una pompa su discorso per il quiz.
Tutti voi ragazzi volete essere qui per questo.
Perché sta andando essere un buon momento.
>> Va bene, per cui alcuni materiale sulla lista di link.
Come stanno tipicamente strutturati è Hai quello che è chiamato un nodo, giusto?
Avete queste cose chiamate nodi, che sono le strutture.
Vado su come creare un nodo nella diapositiva successiva.
Ma essenzialmente tutti collegati liste è sono dati che
è stato inanellato tramite puntatori.
>> E così il vantaggio che abbiamo di utilizzare una lista collegata sopra,
forse, come un array, è il fatto che in un array
avete bisogno di uno blocco contiguo di memoria tutti nello stesso posto, uno
dopo l'altro, per poter avere quella.
Mentre una lista collegata, si potrebbe avere casuali piccoli pezzi di memoria
tutto il computer inanellato da puntatori.
>> E in questo modo si può accedere alle informazioni
che viene uno dopo l' altra, dopo l'altra
senza bisogno di solo un pezzo enorme di memoria del computer da qualche parte.
E quindi questo è uno dei principali motivi per cui usiamo elenco di link.
>> In secondo luogo, è molto facile da dinamicamente ridimensionare la lista di link, perché in array,
quando si dichiara un array, si ha un certo valore impostato.
Diciamo che ho voluto creare un array di 10 interi.
Creo un array di 10 interi, e questo è tutto.
E '10.
Io non so che cosa fare dopo.
Se avessi voluto farlo 11, non può farlo.
Se voglio farlo 9, non può farlo.
>> Mentre in un elenco di link, è possibile aggiungere e cancellare e inserire dove vuoi.
È possibile ridimensionare in modo dinamico la vostra strutturare qui, la struttura dei dati.
E questo ci dà un sacco maggiore flessibilità
che non lo facciamo in genere avere con gli array.
>> Chiunque confuso sulla base struttura come un elenco di link è
o perché dobbiamo usare uno sopra un array?
Sì, andremo su in dettaglio come creare in realtà uno.
Ma questo è solo un po ' il senso generale in questo momento.
Raffreddare.
E così gli array sono legati insieme di queste belle piccole cose
chiamati nodi.
Tutto un nodo è un tipo di struct.
Ricordate, una struttura è se si voleva per creare un certo tipo di variabile
in C che non lo fa già esisti, tu, come programmatore,
può effettivamente creare tu stesso.
>> E così questo tipo di dati struttura è detto nodo,
è stato effettivamente creato da noi, che non esiste all'interno C da sola.
E il modo in cui si crea uno è che devi
l'intestazione di typedef struct, che racconta il compilatore sono
in procinto di creare una struct.
>> Stiamo andando denominarlo "nodo".
E dentro stiamo andando dichiarare una variabile a,
che sta per memorizzare un valore.
E poi stiamo anche andando a hanno un puntatore chiamato "prossimo"
che punta al prossimo nodo della lista di link.
E poi hai finito che fuori semplicemente ripetendo di nuovo nodo in modo
il compilatore sa, OK questa è la fine del mio struct.
>> E in questo modo, siamo genere di creare un po 'di matrice carino
genere di cose con un valore e con un puntatore.
E si possono collegare tutti insieme a questi puntatori.
In modo che tutti possano essere gentili legate insieme in una catena.
>> Raffreddare.
Riesci a sentire che un po 'meglio?
>> PUBBLICO: Sì.
>> IL PROFESSORE: Va bene.
Quindi il modo che, come voi potete vedere, un elenco di link tipica è strutturata
è che hai una testa.
Lei ha il valore di testa che non è essendo rilevato da qualsiasi altro puntatore.
Ma sta andando a puntare a, o riferimento, un altro nodo.
Il nodo dopo sta per fare riferimento alla nodo dopo, e così via e così via
fino a che alla fine ha colpito Alla fine della vostra lista Link.
E basta non avere un puntatore lì.
>> E così, pensare come, in una catena, o anche se qualcuno di voi ragazzi fatti, non so,
come con Fruit Loops quando eri piccolo.
Si farebbe li stringa insieme e li portano al collo.
Penso che sia la stessa cosa.
Avete queste piccole cose che si può stringa insieme quel punto per uno
dopo che, a quello dopo , e così via e così via
fino ad avere una catena di una struttura dati
che è possibile utilizzare come più vi piace.
>> Quindi il modo che questo avremmo tipicamente inserire o eliminare
qualsiasi nodo da un collegamento elenco è molto diversa
a seconda di dove è quel nodo.
Così, per esempio, perché puntatori sono sempre
che punta a un valore specifico, quando si elimina o si inserisce un nodo,
si vuole fare in modo che il puntatore è tutto indicando le cose giuste.
>> Quindi, se si voleva inserire potenzialmente un nuovo nodo con il valore di una
all'interno di un collegamento ordinato lista, sappiamo tutti qui
dalla foto che sta per andare tra testa e due, giusto?
Perché uno si adatta proprio lì.
Ma il modo in cui lo farebbe è in primo luogo dereferenziazione il puntatore
dalla testa e trasmettere tali a uno.
>> Ma veniamo in di un problema qui.
Chiunque può vedere che cosa il problema è se dovessimo primo dereference
il puntatore da testa a uno?
Che problema potremmo incontrare se cerchiamo aggiungere questo alla parte anteriore del nostro array?
>> PUBBLICO: [incomprensibile]
IL PROFESSORE: Esattamente.
Quindi qui abbiamo un puntatore che era una volta che punta dalla testa a due.
Ma se si sbarazzarsi di quel puntatore, si punta a uno,
ora abbiamo alcuna idea dove andare a trovare due.
Perché, come ho detto prima, hai un pezzo gigante di memoria del computer.
Tutti questi nodi potrebbero essere intervallati in modo casuale
in qualsiasi posto nel vostro computer.
E non si sa come fare per trovare questo.
>> E quindi è necessario avere puntatori indicando tutti i nodi alla fine.
Oppure, se si accidentalmente dereference uno
senza prima assegnazione un valore prima, sei
solo andando a perdere tutto in seguito.
>> Così che cosa stiamo andando a fare è, si farebbe prima
vuole creare un puntatore su il nodo che si desidera inserire.
Puntare a cui si vuole inserirla,
e poi dopo si potrebbe puntare di nuovo testa a uno.
>> Questo fa senso a tutti qui?
Grande.
Pensate a come proprio come una catena.
Se si aggiunge una catena, è una specie di intuitivo
come devi andare sull'inserimento di questo.
>> OK, in modo che in realtà è molto più breve di Ho pensato che sarebbe stato,
un spiel cinque minuti su liste di link.
Solo così voi ragazzi avete la idea di base di cosa si tratta.
>> Qui abbiamo l'ordine del giorno quiz zero.
Non lasciate che questo intimidire.
So che è un sacco di informazioni.
Sembra molto spaventoso.
E 'anche un sacco di, I pensare, CSC tipo di condizioni.
Cose come stringhe esadecimali, puntatori, le allocazioni di memoria dinamica
sono termini che suonano molto spaventoso.
>> Ma stiamo andando a rompere loro giù, fare un po 'di problemi pratici
in modo che voi ragazzi tutto sono pronti per questo test.
Quanti di voi ragazzi hanno già iniziato a studiare?
>> OK, ragazzi probabilmente si vuole per iniziare iniziare
su questo, perché il quiz è domani.
O Giovedi per alcuni di voi.
Sì, così abbiamo intenzione di andare su alcuni problemi pratici.
Se tutti voi volete prendere un foglio di carta, una matita.
Stiamo andando a spendere solo il stragrande maggioranza delle sezione di oggi
andare oltre alcuni di che così voi ragazzi avete un'idea di cosa aspettarsi sul quiz.
>> OK.
Un paio di logistica dettagli come pure, per chiunque
che non è stato a quel link lì, se si va a cs50.yale.edu, sul fronte
questa pagina c'è un link che dice: "Chi Quiz Zero".
Link vi porterà là.
Se non avete letto, si prega di leggere.
Perché ti dice veramente importante informazioni per quanto riguarda il quiz.
>> Io vado a tirare fuori da questo che solo perché, fisicamente,
se voi ragazzi non si sa dove di andare, avremo problemi.
E quindi se il vostro ultimo in termini di A a N, andare all'auditorium scuola di legge.
E se le vostre ultime inizia con P dalla A alla Z, andare a Davies Auditorium.
E questo vale solo per persone nella sezione Mercoledì.
>> Se stai prendendo il quiz su Giovedi, si va a SSS 114
dove la vostra lezione è in genere.
PUBBLICO: [incomprensibile]
PROFESSORE: O alla Z, si sta andando per andare all'auditorium Davies.
Ho intenzione di cambiare la situazione, giusto?
>> Oh, sì, appena riesce automaticamente.
>> Oh sì, sei tu Christa.
Sì, il mio male.
Sì, O alla Z, si sta andando per andare a Davies all'Auditorium.
Ho intenzione di risolvere questo problema una volta che caricare.
Già.
>> E poi anche qualcosa importante per la mente
Mercoledì è che, se si è ufficialmente iscritto nella sezione di Mercoledì,
si deve prendere il quiz il Mercoledì.
E se siete iscritti a Giovedi, si deve prendere il quiz Giovedi.
Ed è durante le ore di lezione.
Dove, penso che sia come 01:00 per 02:15 il mercoledì e 2:30-03:45
di giovedì.
>> Se si dispone di un conflitto inconciliabili, Scuse di Dean sono l'unica cosa,
purtroppo, siamo in grado di prendere.
Perché abbiamo avuto una stragrande maggioranza delle richieste
per passare da Mercoledì a Giovedi.
Che non siamo in grado di onorare i meno abbiamo la richiesta di un Dean.
>> OK.
Quindi, prima di iniziare su una paio di problemi di pratica,
Sto solo andando ad andare oltre Di Andy suggerimenti utili per il successo.
Voi ragazzi, quando si studia, è davvero vogliono praticare la scrittura di codice a mano.
La prima volta che ho mai ha preso un quiz CS, non avevo
la scrittura di codice pratica a mano prima ed era estremamente
scioccante di quanto sia stato difficile.
>> Quando voi ragazzi non si ottiene nella abitudine di digitare tutto,
si tratta molto essere naturalmente in grado di avere autocompleted
staffe e virgola là.
Quando si scrive fuori a mano, a volte è
molto, molto facile dimenticare un punto e virgola, o si dimentica di chiudere una staffa,
o dimenticare di chiudere i due punti, o qualcosa di simile.
>> Così, quando si scrive codice a mano, si tratta di una sensazione molto diversa.
Quindi ragazzi, quando stai lavorando attraverso alcuni dei problemi di pratica,
sarebbe bene praticare veramente oggi.
O domani, suppongo, se siete prendendo il quiz il Giovedi.
>> In secondo luogo, abbiamo l'ultima, come, otto anni vale la pena di pratica
quiz online.
Quiz di quest'anno sarà probabilmente molto, molto simile a tutti loro.
Sono tutti molto simili.
Si tipo di entrare nel stile del tipo di domande
che chiediamo, il tipo di funzioni che ci scriviamo in,
eccetera, eccetera.
>> Quindi prendere i quiz di pratica, soprattutto sotto vincoli di tempo.
75 minuti per fare il quiz è non molto tempo.
E 'molto, molto lungo.
E così voi ragazzi volete davvero fare in modo che voi siete
l'abitudine di scrittura codice a mano rapidamente.
Perché non si desidera che il primo tempo per vedere un quiz di tale lunghezza
essere sul vostro quiz.
Voi ragazzi vuole veramente fare in modo che si pratica in anticipo.
>> In quarto luogo, si desidera rivedere il lezioni e delle sezioni diapositive.
Non è necessario memorizzare le cose.
In realtà, a tutti è consentito un un foglio di carta bianca note,
davanti e dietro.
Voi potete digitare o scrivere.
Se vi trovate a dover imparare a memoria niente, lo posò su quel foglio.
>> Vi garantisco, non si vuole essere bloccato nel bel mezzo di quel quiz
essere come, oh sì, qual è la tempo di esecuzione di questo tipo rispetto a quel genere.
Appena messo giù e copiarlo direttamente dal tuo foglio di nota.
Poi si può effettivamente basta usare il cervello a pensare ai problemi
piuttosto che dover ricordare fatti.
E così davvero approfittare di tutti i dettagli di nicchia
che pensi di aver bisogno di memorizzare, plop giù sul foglio revisione.
>> OK, tutte le domande logisticamente per quanto riguarda il quiz
prima di iniziare un po ' problemi quiz professi?
Sì?
>> PUBBLICO: Io non ho avuto la possibilità a guardare il quiz [incomprensibile]
ma sta andando essere applicazione per lo più,
O c'è anche sta per essere, come, domande di cultura?
>> IL PROFESSORE: E 'molto.
Quindi, il modo che avrebbe descritto il quiz
è-- ho messo insieme alcuni problemi pratici
che ho tirato da tutti i quiz.
Ma vedrai che ci sono due principali tipi di domande che ti chiedono.
>> Uno è un dettaglio molto basso livello di roba.
Ti daremo un piccolo pezzo di codice e dire, c'è un errore qui?
Quale sarebbe la stampa di qui?
Che sarà mai questo codice produce, eccetera.
Così sezione Informazioni molto basso livello.
>> E il rovescio della medaglia, avremo molto alto livello domande basate sulla conoscenza.
Puoi spiegare cosa il differenza tra una ricerca binaria
e una ricerca lineare è?
Perché vorremmo utilizzare uno sopra l'altro?
Forse, ciò che è GDB?
Perché vogliamo utilizzare GDB?
Più alto livello, più fondamentale le domande di comprensione.
Quindi vedrete una miscela di due di loro sul tuo quiz.
>> Tutto il resto prima di proseguire dritto in esso?
OK.
PUBBLICO: Un altro.
PROFESSORE: Oh, più uno.
Scusate.
>> PUBBLICO: Sì, è tutto a posto.
Quindi stai dicendo che 75 minuti è troppo breve, come è improbabile
che finiremo?
O, come, 75 minuti è esattamente lo stesso tempo
come avremmo bisogno se fossimo adeguatamente preparati?
PROFESSORE: OK, in modo che il quiz è impegnativo.
E 'sicuramente una sfida.
Vi troverete a corto di tempo.
Probabilmente stai andando a colpire, come 10, 15 minuti per andare, e di essere come, merda.
Ho così tanto da fare.
E questo è tutto bene.
Ognuno sta andando a sentire allo stesso modo.
>> Basta essere molto consapevoli di quanto tempo hai.
Ed è per questo che vi dico ragazzi fare i quiz di pratica.
Perché dà davvero un gran senso di ciò che il quiz sarà come.
Quindi, se vi trovate a essere in grado di finito la pratica
quiz in una buona quantità di tempo, è possibile percorrersi bene,
allora non sarà un problema il Mercoledì o Giovedi.
>> Raffreddare.
Quindi, se tutti wants-- penso molte persone hanno fogli di carta
fuori già.
Ho intenzione di essenzialmente solo dare esempi di domande,
dare a ragazzi, come, un pochi minuti per fare loro.
E noi andremo su come classe ciò che le risposte a loro sono.
>> Quindi questo è un tipico domanda presto faremo
chiedervi, una semplice conversione numeri tra basi diverse.
Binari, come voi ragazzi può richiamo, è base due.
Decimale è base 10, o quello che come esseri umani in genere interpretano.
Esadecimale è base 16, che è pari a zero a nove e da A a F.
>> Quindi c'è quattro numeri Sono chiedendo ragazzi convertire qui.
Ti darò piace, tre a quattro minuti per pensare a come
ci piacerebbe andare circa risolvere questo.
>> PUBBLICO: Ci è permesso calcolatori?
>> IL PROFESSORE: non si bisogno di calcolatrici, sì.
Penso inoltre di base, credo, è tutti voi ragazzi saranno chiamati a fare.
>> E proprio così io il genere di un senso di quando ognuno è fatto, guardare in alto,
onda, non so, sorriso, guardare felice se il gioco è fatto.
Già.
Forse un paio di minuti.
>> OK, portiamo dentro.
Ho volutamente intenzione di darvi ragazzi meno tempo
che probabilmente è necessario fare un po 'di questi problemi,
semplicemente perché voglio fare in modo che si ottiene attraverso un sacco di problemi.
Quindi nessuna preoccupazione se non hai fatto avere la possibilità di finire.
Totalmente OK fino a quando si dispone di un'idea di come fare per questo.
Quindi cerchiamo di andare avanti e fare il primo.
>> Quindi, prima, qualcuno vuole dirmi in binario, che cosa ognuno di questi numeri
rappresentano in termini di valori?
Sì?
>> PUBBLICO: Due al energetico zero, due a uno.
IL PROFESSORE: Esattamente.
Così.
>> A destra, così tipicamente quando siamo in base 10
tutti questi rappresentano sono, come, 10 alla base zero, giusto?
Questo è il tuo unico posto.
Tutto il vostro posto 10 di è è 10 alla potenza di uno.
È 100 del posto è 10 alla potenza di due.
>> Qualunque sia la base si è in sta andando a che fare con la stessa identica cosa,
solo con una base diversa.
Quindi binario, tutto ciò che è è base due.
Stai andando a convertire tutti i cifre in due a qualsiasi potere
di tale cifra.
E così in questo senso, abbiamo possono avere un modo più semplice
di poter aggiungere o sommare tutti i numeri in ordine
per convertire in base 10.
>> Così qualcuno vuole dirmi che cosa il risposta alla prima è in base dieci?
>> PUBBLICO: Due, [incomprensibile]
IL PROFESSORE: Sì.
PUBBLICO: 42.
PROFESSORE: 42, ci si va.
Quindi il modo che abbiamo ottenuto questa risposta è stato di facendo due la prima, che è due.
Più due terzo, che è otto.
Più due al quinto, che è tutto ciò che è rimasto.
Li riassumere ed è 42.
>> C'è qualcuno confuso su come siamo arrivati ​​che?
Inoltre così fondamentale, come Ho detto, si dovrebbe essere OK.
In caso contrario, beh, possiamo praticare anche questo.
Ma questo è tutto a posto.
Raffreddare.
>> Qualcuno ha voglia di darmi il rispondere alla seconda pure?
>> 50?
Bene.
Chiunque confuso su come abbiamo ottenuto che o?
Fresco, avrò il risposte sulla diapositiva successiva.
Quindi nessuna preoccupazione se si necessario copiare il basso.
>> OK, così esadecimale è un po 'più complicato.
ma io vado a mostrarvi ragazzi una scorciatoia per come farlo.
Così esadecimale, come si ricordo, tutto è essere 16.
E perché noi, come esseri umani in realtà non avere 16 numeri per rappresentare che,
si passa da zero a nove, che la nostra prima 10 valori, e poi facciamo da A a F,
che sono i prossimi sei valori.
>> E così il modo più semplice per passare dalla qualsiasi numero binario in esadecimale
è quello di rompere in su a metà.
E così ogni numero binario daremo si avrà probabilmente otto cifre.
Si può solo rompere li nel mezzo.
>> Così il primo tra-- uno uno, uno uno, uno, uno, uno uno.
Genere di pensarci su, si sa, disegna una barra o una virgola tra di loro.
E si può solo convertire direttamente qualunque
questo è il primo numero di esadecimale,
e tutto ciò che qui è di il secondo di esadecimale.
>> Quindi ricorda da notazione comune, che cosa valori esadecimali cominciano con?
>> PUBBLICO: Zero.
>> IL PROFESSORE: 0X.
Così sappiamo che ogni volta vi chiediamo per convertire qualsiasi numero in esadecimale,
o ogni volta che si vede alcuna numero che inizia con 0X,
si sa che si tratta di un valore esadecimale.
>> E allora si sta andando ad essere invitato a determinare ciò che questi due cifre sono.
E il modo di fare che, contando che la metà e contando che la metà.
Quindi, in questo esempio, cosa sarebbe uno, uno, uno, uno essere?
Che valore sarebbe?
Sarebbe F, giusto?
Sarebbe 15.
>> Quindi questo sarebbe F. One, uno, uno, uno qui è anche
F. Così uno, uno, uno, uno, uno, uno, uno, uno in esadecimale, tutto ciò che è è 0XFF.
Perché questo mezzo rappresentava F, il valore di 15,
e questo mezzo rappresentava F, il valore 15.
Perché ricordate, siamo contare da zero a nove.
A è come il 10, B è come 11, F è 15.
>> Ha senso a tutti come abbiamo ottenuto da binario in esadecimale?
>> PUBBLICO: E così come siamo arrivati 15 da uno, uno, uno, uno?
PROFESSORE: Sì, questo è binario, giusto?
Immaginate questo è solo un numero binario.
In modo da avere due a zeroth, che è uno.
PUBBLICO: Oh, OK.
Quindi basta una totale fuori.
>> PROFESSORE: Sì, e poi basta totali che fuori.
Questo è tutto ciò che è.
>> PUBBLICO: OK.
>> IL PROFESSORE: OK.
>> PUBBLICO: Così si va da binario a decimale a esadecimale?
>> IL PROFESSORE: Questo è il modo più semplice per farlo, sì.
Tu non stai andando a decimale perché decimale ha solo zero a nove.
Siamo solo tipo di suddividere questo in su in due.
>> PUBBLICO: [incomprensibile] utilizzando decimale a trovare
ciò corrisponde fino a in esadecimale.
IL PROFESSORE: Voglio dire, tu sei contando con la matematica di base.
PUBBLICO: Sì.
PROFESSORE: Sì, più o meno.
E 'un po' di confusione.
Ma è sufficiente sapere che si può suddividere qualunque
questo valore è in solo metà.
Guarda, che cosa è questo in binario?
Che numero è questo?
Esso sarà qualcosa da zero a F.
>> Qui è inoltre sarà qualcosa da zero a F.
E allora si può solo mettere quei due lì.
>> PUBBLICO: OK.
IL PROFESSORE: Sì.
OK.
Quindi voi ragazzi volete provare il prossimo, allora?
Zero, uno, zero uno, uno, zero, uno zero.
Ti darò ragazzi come 30 secondi, dato che probabilmente non sapeva
il trucco di come fare questo in precedenza.
>> OK, qualcuno vuole ottenere questo un colpo?
>> 0x5A.
IL PROFESSORE: 0x5A.
5 bis.
Bene.
Quindi questo qui sarebbe essere-- vuoi di dirci come hai capito?
In primo luogo, come hai fatto a ottenere il cinque?
>> PUBBLICO: Perché lo zero, uno, zero, uno è cinque.
>> IL PROFESSORE: Fa capire a tutti perché a zero, uno, zero, uno è cinque?
Hai uno qui.
Non hai nulla in due al primo.
In due al secondo, avere uno, che è quattro.
Quindi si aggiunge il quattro più l'uno, avete cinque.
Tutti bene?
OK.
E allora che cosa questo essere e perché?
Che cosa fa un numero corrisponde a?
>> PUBBLICO: 10.
>> IL PROFESSORE: E che cosa questo in base due?
PUBBLICO: [incomprensibile]
IL PROFESSORE: Esattamente.
Quindi questo secondo valore qui sarebbe 0x5A.
>> Tutti bene su come convertire?
E 'molto più semplice di quanto si pensi.
Voglio solo essere sicuro sapete suggerimenti utili
e trucchi per come fare.
>> PUBBLICO: Perché si può semplicemente dividere nel mezzo del genere?
Basta essere come, OK, io vado solo cura di questi primi [incomprensibile]?
>> IL PROFESSORE: Perché questo è in realtà il valori esadecimali modo sono rappresentati.
0X, che significa in realtà altro che ti dice
che si tratta di un numero esadecimale.
E questo rappresenta sempre le prime quattro cifre.
E questo rappresenta sempre le ultime quattro cifre.
E così queste due cifre solo corrispondono a differenti bit.
>> PUBBLICO: Quindi dovremo always--
>> IL PROFESSORE: Sei sempre andando ad ottenere otto bit di valore.
>> PUBBLICO: È che proprio come una cosa qui o che una cosa in tutto?
IL PROFESSORE: Questo è solo un cosa nei computer, sì.
PUBBLICO: OK.
Eccezionale.
>> PROFESSORE: Inoltre, così, in questo esempio abbiamo convertito da binario a decimale,
e da binario a esadecimale.
Voi ragazzi vuole fare in modo anche in pratica andare viceversa.
Quindi, se ho dato 0XFF, si potrebbe disegnare che in binario, giusto?
>> È possibile convertire F in binario, che è uno, uno, uno, una,
convertire F a binario, che è uno, uno, una, una.
>> Così possiamo chiedere di fare viceversa.
Così decimale a binario, o esadecimale a binario.
Così si vuole fare Assicuratevi di sapere in entrambe le direzioni.
Noi probabilmente vi chiediamo un combinazione dei due.
>> Sì, avete una domanda?
Posso see-- stai bene?
PUBBLICO: Sì.
IL PROFESSORE: OK.
Sono bravo a cancellare questo?
Grande.
>> Va bene, allora le risposte sono qui, se qualcuno è curioso più tardi e si confondono.
OK.
>> PUBBLICO: Che importa se mettiamo le nostre lettere di capitale o minuscolo?
>> IL PROFESSORE: Lo fa, perché in esadecimale, per convenzione,
tutti i personaggi sono maiuscoli.
Quindi da A a F sono sta per essere maiuscolo.
Se si mette una minuscola, non lo so se vogliamo necessariamente segnare sbagliato.
Ma teoricamente, questo non è tecnicamente
come si suppone per averlo.
Così dovrebbero essere tutti in maiuscolo.
Sì, buona domanda.
>> OK.
Seconda domanda.
Considerate questo bel programma qui.
Chiederò la domanda, Tornerò questo.
>> Quindi, in primo luogo, quello che c'è dentro di norma io.h questo è di interesse per il programma
In secondo luogo, che cosa fa nulla indicare in linea di tre?
E in terzo luogo, che cosa di ritorno zero dal principale, come linea di sei, generalmente significare?
Se voi volete scrivere quelle giù, dal momento che ho per tornare indietro
alla diapositiva solo così è possibile visualizzare il codice.
Questo è un esempio di come, forse un maggiore domanda livello in cui ti chiediamo
ciò che le cose significa in un programma.
>> Tutti bene per me tornare alla diapositiva?
Ok bello.
Così ti darò ragazzi come forse tre minuti a guardare questo rapido reale.
>> OK, quindi questo è come abbastanza facile, concettualmente.
Qualcuno ha voglia di dirmi che cosa è primo in profondità di hash tra cui
il nostro file di libreria io.h standard?
Perché abbiamo bisogno di quella libreria incluso per questo programma?
Quello che qui ne abbiamo bisogno per?
>> Sì?
>> PUBBLICO: È che quando metti che printf?
>> IL PROFESSORE: Esattamente.
Così printf, ogni volta che si prendere un input da parte dell'utente
e stampare qualcosa allo schermo, che è
lo standard input, biblioteca uscita.
Pensate a che way-- input, output.
>> Devo un'uscita?
Sì.
Quindi so che sto andando sempre bisogno della biblioteca standardize i.o.
>> Così printf è la funzione da cui bisogna accedere
e hashtag comprendono la biblioteca i.o standard.
OK.
>> In secondo luogo, che cosa significa nulla?
Abbiamo l'int main (void), cosa fa annullare qui significare qui sulla linea tre?
Sì, nella parte posteriore.
>> PUBBLICO: [incomprensibile]
>> IL PROFESSORE: Esattamente.
Quindi ricordate, abbiamo imparato a cominciare dalla nostra pset
che si può effettivamente indicare la linea di comando
argomenti che il vostro programma, che si funzione principale, prende come voi, l'utente,
chiamalo.
Se abbiamo nulla, che significa che potrebbe semplicemente eseguire direttamente il programma
senza argomenti della riga di comando.
Ognuno chiaro?
OK.
>> E infine perché abbiamo preoccuparsi di fare questa cosa qui ritorno a zero?
Perché abbiamo anche un int main?
Perché non possiamo solo avere void void principale?
Sì?
PUBBLICO: Proprio così che possiamo essere sicuri che il programma sia
uscendo con successo, come al contrario di se è stato numerato.
E vorremmo sapere che questo è un diverso tipo di errore.
>> PROFESSORE: Sì, esattamente.
Questo è solo un cosa convenzionale che facciamo,
è che solo a fine il programma, solo per assicurarsi che
che la funzione principale è in esecuzione in modo corretto,
abbiamo sempre voglia di fare ritorno a zero.
Anche se noi possiamo necessariamente Non vedere che stampate ovunque.
>> Perché, come i programmatori, si sa, se avete molte diverse linee di codice
e non si sa dove questi stanno andando male,
e se si verifica un errore che si desidera fare in modo che si ottiene questo errore.
E così tipicamente se qualcosa va sbagliato avremo un ritorno di uno solo
fare in modo che sappiamo che è.
Quindi, se si vede un ritorno zero, cioè tipicamente
significa che il vostro programma è eseguito con successo.
Buona?
Raffreddare.
>> OK, secondo programma qui.
Si consideri che.
E se voi ragazzi vedo un float, voi ragazzi può probabilmente
avere una buona idea di cosa Sto per chiederle.
>> Così, quando questo programma esegue, come si può vedere,
Io dichiaro un galleggiante dentro la mia funzione principale.
Sto chiamandolo "rispose," e sto impostando che uguale ad un diviso 10.
Sto stampare, ad uno decimale, che galleggiano.
E poi sto tornando a zero.
>> Così, quando l'esecuzione del programma, ripensare a avidi ora,
questo programma stampa 0.0.
Come tutti sappiamo, speriamo di tutto conosce, diviso 10 non è a 0.00,
è 0,1.
Ma spiegare perché questo programma pensa 1 che diviso per 10 stampe a 0,1 altro
a 0,1?
Ti darò ragazzi forse come 30 secondi per pensare solo rapidamente a tale proposito
e tornerò al programma.
>> OK.
Chiunque vuole dare un colpo?
In tre frasi o meno, perché di solito siamo
andando a limitare tutte le risposte a tre frasi o meno
quindi non solo rigurgitare cose a caso sul vostro quiz.
>> Sì, prendere un colpo.
>> PUBBLICO: Quindi penso che ci sia questo cosa che si chiama, come, [incomprensibile]
Quindi ci potrebbe essere, per esempio, ci potrebbe essere, come, 0,09,
che dove si stampa il primo cifre, sarebbe di 0,0?
>> PROFESSORE: Chiudi, non proprio.
Christabell?
>> PUBBLICO: Stai dividere uno e 10, e sono entrambi interi.
E così il modo in cui sta andando memorizzare è come un intero.
E così il primo intero sarebbe 0.0.
E così che è 0.1.
PROFESSORE: Sì, è veramente buono.
Questa è la risposta giusta.
Quindi questo è un molto confusa concetto per un sacco di bambini.
E ci tengo a fare in modo che questo è rafforzata nella testa di tutti.
>> Quindi ciò che noi chiamiamo galleggiante punto imprecisioni,
dove la ragione perché un sacco dei vostri programmi a avido
non ha funzionato inizialmente era perché ti sei dimenticato di lanciare la vostra variabile.
Allora, cosa ha detto Christabell era del tutto corretto.
>> Un galleggiante è intrinsecamente impreciso.
Perché in un computer, a destra, abbiamo una quantità limitata di bit di memoria
possiamo usare per rappresentare i numeri.
Così, per esempio, questo ID CS50 è-- Penso che sia un computer a 64 bit.
>> Un galleggiante può essere rappresentata solo da una quantità limitata di questi bit.
E così 0.1 con zeri infiniti, che era di 0.1 è, giusto?
Ma non possiamo realmente salvare quel numero nel nostro computer.
Noi semplicemente non hanno memoria sufficiente per farlo.
>> E così il ravvicinamento più vicino ciò che è in memoria è in realtà
qualcosa come 0.000 qualcosa, qualcosa, qualcosa, qualcosa.
Che, una volta di troncare esso, arrotonda a 0,0.
>> E così questo è solo un esempio che dimostra un sacco di problemi
abbiamo ogni volta che andremo cercando di fare in modo non corretto la matematica
senza proiettare come un numero intero diverso.
Quindi, solo diffidare di questo avvenimento.
>> Su quiz, se noi diamo un blocco di codice ed è come,
ciò che viene stampato alla fine?
E se è un po 'di valore casuale voi ragazzi dovrebbero sapere perché quello che sta succedendo.
Sì?
>> AUDIENCE: Tronca è sbarazzarsi di tutto dopo un certo punto?
[Incomprensibile]
PROFESSORE: Sì, quindi in realtà questo è davvero un cattivo esempio,
perché tutto ciò che in realtà 0.100 sarebbe tronca fino a 0,1.
Ma se si dovesse eseguire it-- non lo faccio ricordare, perché l'anno scorso hanno
correva su un programma diverso.
Correvano in qualcosa chiamato il CS50 Appliance, che
è diversa dalla ID.
E 'stato un sistema a 32 bit, credo.
E così ci sono stati numeri diversi.
>> Ma in sostanza, è sufficiente sapere che l'intero concetto di troncamento
e come si taglia solo le cose fuori.
E così se rounds--
>> PUBBLICO: Senza arrotondamento.
>> IL PROFESSORE: Esattamente.
Già.
Raffreddare.
>> Ciao, nella parte posteriore.
Stiamo solo andando su alcuni revisione quiz domande.
>> Tutto ok.
Quindi prendere in considerazione un programma diverso qui.
Ho intenzione di dare a voi ragazzi un paio di minuti per leggere su questo.
Questo è qualcosa che è stato per molto recentemente che penso che soffiava molti di voi
la mente delle ragazzi.
Ma stiamo andando a parlare attraverso questo nuovo solo
per essere sicuri di capirlo completamente.
OK.
Chiunque ha bisogno di più tempo per lettura di questo codice?
OK.
>> Così sembra a me che in questo programma sono
la creazione di due stringhe utilizzando GetString.
Un chiamati s ed uno chiamato t.
E se sono uguali uguali tra loro,
si deve stampare "Tu digitare la stessa cosa. "
>> Ma elsewise, sarebbe stampare, "Tu digitato cose diverse ", giusto?
Sembra molto, molto semplice.
Ma, tuttavia, se io in realtà provare a scrivere questo programma,
sembra che anche quando ingresso esattamente le stesse corde,
esso stampa ancora fuori, "Tu digitato cose diverse! "
Qualcuno ha voglia di prendere una colpo a perché questo programma sempre
risponde che gli ingressi sono diversi, anche
quando le parole stesse sono le stesse?
>> Quindi, se dovessi input-- David amore per usare un esempio come mamma, giusto?
Minuscolo M-O-M per S, T uguale minuscolo M-O-M.
Se ho eseguito questo attraverso che il codice, perché è vero
stampare "digitato cose diverse?"
>> Qualcuno ha bisogno di più il tempo di pensare a questo?
Ok, penso che siamo a posto.
Sì?
>> PUBBLICO: OK, quindi è qualcosa su dove è memorizzato nella memoria, giusto?
>> IL PROFESSORE: Sì.
>> PUBBLICO: Dove è come, se questo stringa s è conservato a memoria spot--
Sto inventando questo-- è zero.
IL PROFESSORE: Certo.
PUBBLICO: E stringa t è conservato a punto la memoria,
come, 167, e poi zero non è uguale 167.
>> IL PROFESSORE: Esattamente.
OK, in modo da ricordare questa incredibile rivelazione abbiamo spiegato a voi ragazzi
la scorsa settimana, che stringhe non esistono realmente?
Quando creiamo qualcosa chiamato stringa siamo, in realtà,
la creazione di qualcosa chiamato char stella.
Il che tutto si tratta di è un puntatore una stringa o di un array di caratteri.
>> Così in questo esempio, se erano all'ingresso M-O-M il modo
che il mio computer si memorizza è nella memoria backslash pari a zero, giusto?
Questi quattro personaggi, caratteri, sarebbero memorizzati da qualche parte.
>> E poi queste quattro personaggi, backslash pari a zero,
sono memorizzati da qualche altra parte, giusto?
Non ho idea di dove gli indirizzi sono, sono da qualche parte nel mio computer.
Ma io non so esattamente dove sono.
>> Quando creo una stringa s, tutto ciò che è veramente
è un puntatore inizio di questa stringa.
E quando ho creato questo valore t, tutto ciò che è un puntatore a qui.
E così quando si sta cercando mettere sullo stesso piano e verificare
per vedere se s è pari uguale a t, il computer
è in realtà solo di tornare a si l'indirizzo di questo m
e l'indirizzo di tale m.
E perché sono due pezzi separati di dati
che sono memorizzati in due diversi indirizzi nel vostro computer,
il computer è mai andare a riconoscerli come la stessa.
Qualcuno ha voglia di dare un colpo a quello che abbiamo
avrebbe dovuto fare se volevamo correggere questo e hanno un corretto programma in esecuzione
anziché?
Pensare che per un paio di secondi.
Che cosa dobbiamo cambiare per ottenere questo programma di funzionamento
il modo in cui vogliamo che funzioni?
>> Sì, vuole prendere una pugnalata a esso?
>> PUBBLICO: Possiamo cercare di dereference il puntatore e verificare attraverso la matrice?
IL PROFESSORE: Questo è un modo per farlo.
Allora, qual è il nome nuovo?
Mi dispiace, mi ricordano.
>> Zee: Zee.
PROFESSORE: Sì, così quello che Zee suggerito sarebbe assolutamente lavorare.
Destra?
Potremmo dereference il puntatore e effettivamente andare e accesso
i dati fisici all'interno di qui.
E possiamo solo confrontare l'intero schermo.
>> Possiamo dire, OK, puntatore, dammi cosa c'è dentro qui.
Sarebbe restituire un m.
E direi, puntatore, dammi cosa c'è dentro qui.
Restituisce un m.
Fare quelli partita?
Sì.
Poi ci spostiamo.
>> Continuiamo a controllare l'intera due stringhe tutta la strada fino alla fine
e vedere se questi sono uguali, se tutti i valori sono uguali.
E se tutti i valori sono uguali, allora sappiamo che le stringhe sono vere.
Assolutamente, è così che ci sarebbe farlo?
>> Qualcuno confuso su tutto questo?
L'intero concetto di come stringhe sono in realtà solo i puntatori,
e il modo in cui in realtà non esiste?
E perché otteniamo errori come il modo in cui facciamo le cose?
Perché ti garantisco ragazzi, puntatori e l'allocazione corda e la memoria
stanno andando a venire.
>> Sì?
>> PUBBLICO: [incomprensibile] dereference esso, basta mettere una stella [incomprensibile]
IL PROFESSORE: Giusto.
Quindi, per derererence un mezzo puntatore per andare a questo indirizzo del puntatore
e ottenere i dati, il valore lì.
E il modo per farlo è quello dell'indicatore della stella.
Non confondere questo.
>> PUBBLICO: [incomprensibile].
>> IL PROFESSORE: Sì.
PUBBLICO: Così si può solo scrivere se stella s pari pari stella t.
>> PROFESSORE: Beh, no.
No.
>> PUBBLICO: Questo non è abbastanza buono, giusto?
>> IL PROFESSORE: Non è, perché sei solo controllare la prima lettera.
Probabilmente stai andando a bisogno di una sorta di un ciclo che
scorre ogni singola personaggio in entrambe le stringhe.
Già.
Quindi, se si voleva controllare solo per vedere se hanno iniziato con la stessa cosa,
si può fare se, stella s è uguale a stella t.
Poi si sa che almeno loro iniziato con lo stesso carattere.
>> Sì?
>> AUDIENCE: Quindi il modo tu che sarebbe
come un embedded per ciclo o il puntatore?
IL PROFESSORE: Sì.
Praticamente solo un ciclo for.
Ricordate, David in classe dedicata il senza zucchero sintattico?
E aveva questo molto cosa confusa di stella t
più uno, dove sarebbe integrare attraverso e spostare il puntatore?
Il modo più semplice di fare questo è solo t di i.
>> Quindi è solo un array.
Il modo in cui si avrebbe un per ciclo che correva da zero a i, dove
i è la lunghezza del stringa, si può solo
scrivere che invece di fare il tutto puntatore, cosa di riferimento.
Così queste cose sono esattamente equivalente nel vostro computer.
>> Voi ragazzi probabilmente non lo farà bisogno di sapere che,
ma è bene solo tipo di avere nella parte posteriore vostra mente.
Basta sapere che il computer riconosce diversi blocchi di codice
come la stessa cosa.
Perché questo è solo molto più user friendly per noi di presentare come se fosse
un array.
E 'solo più facile.
>> PUBBLICO: Quindi utilizzare strlen a piacere, get--
IL PROFESSORE: Sì.
PUBBLICO: OK.
IL PROFESSORE: Si potrebbe utilizzare strlen o, se
non ha avuto strlen si può solo fare su fino a colpire backslash zero per entrambi.
O avrebbe funzionato.
Già.
PUBBLICO: Così è per ogni dereferenziare singolo carattere se eravamo in realtà
scrivere questo codice, abbiamo potrebbe solo fare i t staffe
come con la stella di fronte ad essa?
>> PROFESSORE: Sì, è uguale equivale a s staffa i, e quindi mantenere in movimento i
down up fino a colpire alla fine.
Sì, questo è quello che si potrebbe fare.
E io in realtà hanno una prossima esempio di quando abbiamo effettivamente
scrivere strlen così voi ragazzi sarà tipo di arrivare a giocare con un po '.
>> Così è tutto chiaro solo la memoria, stringhe, puntatori, indirizzi di qualità?
Alcuni concetti di più alto livello che si di sicuro bisogno di sapere sul quiz
domani.
>> Tutto ok.
Bene.
Sì.
OK, una cosa che ci chiediamo anche voi, come facciamo ogni anno su un quiz, è,
supponiamo che hai dimenticato (che ci sembra di dimenticare di fare ogni anno)
in cui viene dichiarata file di intestazione strlen.
E quindi dobbiamo riscrivere noi stessi.
>> Ecco un elenco di linee guida che siamo in grado di presentarvi
ragazzi dove si arriva a pensare che s la stringa non sarà nullo.
Si può supporre che s sarà terminato con un backslash zero.
Così si sa che è quello che sta andando a finire con.
>> E, per esempio, che il lunghezza ciao sarebbe cinque.
Così si può supporre che ciao sarà cinque, H-E-L-L-O.
Non è necessario assumere che la backside conti a zero per la lunghezza.
>> Quest'ultima cosa qui, non fare preoccuparsi di integer overflow.
Qualcuno ricorda overflow di cosa intero è?
>> PUBBLICO: va oltre il lunghezza del [incomprensibile].
>> PROFESSORE: Sì, si può spiegare un po ', cosa vuol dire?
>> PUBBLICO: Quindi, credo che va indietro all'esempio precedente troncamento.
Ma se avete solo tanti numeri che vanno al di là del numero di bit
che si può effettivamente assegnare che sarà solo tipo di tagliare.
PROFESSORE: Sì, così su un tipico calcolatore, quanti bit abbiamo?
PUBBLICO: 32?
PROFESSORE: Sì, 32, a destra.
E così è, ciò che, a quattro miliardi, due miliardi?
Quattro miliardi di euro, fino a quattro miliardi interi positivi, giusto?
Due miliardi di negativo, due miliardi positivo,
dipende da come si desidera farlo.
>> E così in fondo che possiamo avere abbastanza numeri interi che possono andare fino
a due al 31 meno 1, giusto?
Perché una volta ci ha colpito due al 32 °, non lo facciamo
avere quella quantità di memoria nel nostro computer.
>> E così, teoricamente, I potrebbe venire con un numero
cioè, come, due per il 46 °.
Si tratta di un numero enorme-ass, ma teoricamente si potrebbe.
E così overflow di numero intero è se si tenta di creare un numero intero che va oltre ciò che
il computer è in grado di memorizzare.
>> E così per ragazzi questo esempio non hanno
preoccuparsi di noi dando un gigante stringa che è due ai caratteri 32nd
lungo.
Questo sarebbe davvero dire.
>> Va bene, quindi sono solo andando a dare voi ragazzi la struttura base di questo.
Stai andando a creare un funzione chiamata int strlen dove
un passare, una stella char, o una stringa, puntatore alla stringa denominata s.
>> Va bene, tutti di copia che verso il basso.
Raffreddare.
Oops-- altro modo.
>> Quindi questo è un po 'come un più duro pezzo di problema,
così ti darò ragazzi forse cinque a sei minuti per tipo di brainstorming
e scrivere questa funzione fuori.
>> PUBBLICO: Noi non rappresentano il [incomprensibile],
non dobbiamo usare intero?
>> IL PROFESSORE: No, non lo fai.
Ti do un suggerimento ragazzi.
Un ciclo while può essere molto utile qui.
Già.
Ecco
caramella.
Candy sarà disponibile anche per il quiz, credo.
Così voi ragazzi sarà tutto zuccherato domani.
Può I-- avete ottenuto.
>> PUBBLICO: OK.
IL PROFESSORE: Sì.
>> Forse 30 secondi o giù di lì.
>> Va bene, se siete non fatto, non preoccuparti.
Ci sposteremo tutto questo insieme.
OK.
Quindi ho intenzione di solo il layout della struttura di base per questa funzione qui.
Int strlen.
In primo luogo, qualcuno vuole dire me quello che int significa?
Abbiamo bisogno di avere in questa funzione.
>> PUBBLICO: strlen [incomprensibile].
IL PROFESSORE: Esattamente.
Quindi, qualunque cosa accada qui, abbiamo bisogno di tornare un numero intero.
E come specificato nel spec, vogliamo return--
Andare per esso i ragazzi, solo andare avanti.
Va tutto bene.
Mangia tutto così non ho di prendere di nuovo, in realtà.
Il int significa solo che sei andando a ritorneremo un numero intero.
>> Che cosa è questa char stella s?
Che cosa significa?
>> PUBBLICO: Come, che cosa è in ingresso in.
IL PROFESSORE: Esattamente.
E ciò che è quasi il stessa cosa come char stelle?
PUBBLICO: String?
IL PROFESSORE: Esattamente.
Quindi tutto quello che stiamo facendo è dare questo un puntatore ad una stringa.
OK.
Raffreddare.
>> Inoltre, non dimenticare, se dimentichiamo per darvi queste parentesi,
non dimenticate di scrivere voi stessi.
Perché in teoria, il codice è corretto se si dimentica di scrivere loro.
Basta prestare sempre attenzione.
Come, piccole cose che non si nota
quando si programma sul vostro computer portatile, perché il vostro computer portatile fa per te?
Non dimenticare quando si sta scrivendo a mano.
Sì?
>> PUBBLICO: Ma come non è corretto?
Come, otteniamo l'intero problema sbagliato?
>> IL PROFESSORE: No, no.
Non si preoccupi.
In realtà è teoricamente possibile per voi per ottenere punteggio pieno su una domanda
anche se il codice sarà mai eseguito nella vita reale.
Vi suggerisco di non provare per realizzare questo obiettivo.
Ad esempio, come se tutto che è qui è giusto,
ma si dimentica un colon o una parentesi, il codice non verrà effettivamente eseguito.
Ma possiamo essere misericordiosi.
>> Sì?
>> PUBBLICO: Dovete commentare la nostra scrittura?
>> IL PROFESSORE: No, no, no preoccupazioni per quello.
Nessun commento.
Stile dovrebbe essere buona.
Come, non Smush tutto su una riga.
Non saremo felici con te se lo fai.
>> Qualcuno ha voglia di dammi la prima linea?
Suggerimento, è molto facile.
>> Sì?
>> PUBBLICO: Int, n è uguale a zero.
Appena istituito contatore.
PROFESSORE: Quindi vogliamo un po ' una sorta di contatore, giusto?
Sto solo andando a chiamarlo "contare" per il bene di leggibilità.
Cosa vogliamo impostarlo pari a?
>> PUBBLICO: Zero.
IL PROFESSORE: Sì.
Punto e virgola.
E 'anche il punto e virgola disegno molto strani.
Basta praticare farlo.
>> Quindi vogliamo avere prima un contatore di tipo int.
Perché vogliamo contare come molti caratteri o lettere sono
in questa stringa, giusto?
Molto facile primo passo.
>> OK, forse un po 'più complesso ora, come faremo a farlo?
Qualcuno ha voglia di dammi la riga di codice
che può essere in grado di aiutare ad anello attraverso qualunque cosa sia?
>> Sì, un'anima coraggiosa nella parte posteriore?
>> PUBBLICO: OK, così mentre il punto asterischi, il sì, stella di s,
non è uguale a zero, poi fare qualcosa?
IL PROFESSORE: E 'molto, molto vicino.
Molto vicino.
Quindi ho intenzione di affrontare due cose con quella.
Innanzitutto, non è esattamente zero.
Cos'è?
E 'il terminatore null, che è backslash zero.
Quindi sono diversi in termini di come vengono archiviati.
Quindi sei davvero vicino.
>> E in secondo luogo, non vogliamo per spostare solo il puntatore.
Vogliamo davvero accedere ai valori, giusto?
E allora come facciamo questo?
Molto facile.
Non pensare a puntatori, non pensare a ricordi.
Torna seconda settimana di questo corso.
>> PUBBLICO: [incomprensibile].
PROFESSORE: Come di, ricordi?
Quali sono le stringhe?
Come sono memorizzati nella memoria?
>> PUBBLICO: Sono sollevato.
>> IL PROFESSORE: Essi sono allevati.
Quindi, come possiamo accedere ogni personaggio dentro?
>> PUBBLICO: [incomprensibile].
IL PROFESSORE: Esattamente.
Quindi quello che succede dentro while-- qui?
S di -
>> PUBBLICO: I.
>> PROFESSORE: Oh, io non esiste, è vero?
>> PUBBLICO: Oh, contare?
>> IL PROFESSORE: Possiamo solo utilizzare conta, no?
>> PUBBLICO: Mi dispiace, ha chiamato i.
>> PROFESSORE: Sì, va tutto bene.
Abbiamo una variabile fino qui che è già stato dichiarato come il nostro contatore.
Allora perché non usiamo che per passare attraverso il ciclo while?
Questo fa senso?
>> Così, mentre s di count-- Qualcuno vuole di darmi ciò che accade dopo qui?
PUBBLICO: Non è così uguali.
IL PROFESSORE: Non è uguale, giusto?
E 'il botto è uguale, punto esclamativo è uguale,
qualunque cosa voi ragazzi volete chiamarlo non equal--
>> PUBBLICO: [incomprensibile].
>> IL PROFESSORE: Sì.
Ricordate sola offerta è per un char, le doppie virgolette sono per una stringa.
Fare attenzione quando le si usa.
Così, quando stiamo guardando attraverso la matrice, l'ultimo carattere,
sappiamo che non vogliamo che sia backslash zero.
>> Così, mentre.
Non siamo alla fine della stringa.
Che cosa vogliamo fare dentro?
>> PUBBLICO: Vogliamo aggiungere alla contatore così conta plus plus?
IL PROFESSORE: Esattamente.
Quindi qui stiamo andando a fare contare, contare plus plus.
Manca ancora una riga.
Ci siamo quasi.
Quello che stiamo dimenticando di fare?
>> PUBBLICO: ritorno a zero?
>> IL PROFESSORE: Si vuole restituire zero?
>> PUBBLICO: No, tornare a strlen.
Attesa.
IL PROFESSORE: Che è memorizzato in?
PUBBLICO: Conte.
Contare.
IL PROFESSORE: Esattamente.
Quindi qui abbiamo intenzione di tornare conteggio.
>> Perché ciò che siamo facendo qui ultimately--
abbiamo una variabile contatore che è andando ad incrementare la nostra stringa.
Stiamo andando a andare avanti, tenere andando, intorno e in giro in questo ciclo.
E mentre noi non siamo alla fine di questa stringa, che è il terminatore null.
>> E ogni volta che andiamo attraverso esso, stiamo aggiungendo al nostro contatore.
E stiamo andando oltre lungo in questo array.
E alla fine, una volta che abbiamo colpire il terminatore null,
sappiamo, oh, possiamo rompere, restituire il conteggio.
Abbiamo il nostro strlen.
>> Ricevono tutti come questo è stato realizzato?
Mentre loops-- so che non abbiamo fatto troppo con loro,
ma sono solitamente molto, molto utile se si
Non sa cosa si sta fermando condizione deve essere necessariamente.
>> Domanda?
>> PUBBLICO: Possiamo scrivere nulla a condizione, mentre?
>> IL PROFESSORE: Mentre?
Sì, così in questo problema che ho avuto te ragazzi assumono che s non sarà nullo.
Perché ricordate, teoricamente, se ho dato
un puntatore che era troppo grande della memoria, darebbe il nulla, giusto?
Questo è ciò che il funzionamento Sistema farebbe.
>> Quindi, se io non ti ho detto di assumere s sarebbe nullo, è necessario controllare.
Così qui, fareste, se s è uguale uguale a zero, tornare un.
Qualcosa del genere.
PUBBLICO: [incomprensibile] zero.
PROFESSORE: OK, io dirò il motivo per cui non possiamo farlo.
Perché ricordare a memoria, a destra, qui.
Andremo qui.
>> Hai blocchi giganti di memoria tutti con griglie
che memorizzano valori diversi, giusto?
E così tutto una stringa è-- per ad esempio, se vogliamo ingresso ciao,
sarebbe H-E-L-L-O backslash pari a zero, giusto?
E poi chi lo sa, come casuale cose che sono in qui dopo.
>> Noi in realtà non sappiamo cosa c'è.
E così, se si dovesse fare invece di backslash a zero,
nullo, non può essere nullo.
Perché appena può significare alcune casuali altre cose
che non appartengono nella stringa.
E così il modo in cui sappiamo sempre che una stringa termina con un backslash è pari a zero.
E così che è sempre il modo in cui controllare per vedere la fine di una stringa.
>> Null, tutto ciò che significa è se avete un puntatore inesistente, prima di tutto,
o se la memoria è così grande che Non si può tornare, allora sarebbe nullo.
Quindi, essere molto attenti quando differenziando la differenza tra nullo
e la barra rovesciata zero.
Già.
>> Ognuno OK con questo?
OK.
>> Così ho avuto voi ragazzi scrivere strlen.
Tenerne potremmo anche chiedere che si scrive fuori da A a I, ricordare che "Atwoa"
o qualunque cosa voi ragazzi volete chiamarlo?
Tale funzione in Vigenere e Cesare, che
converte un valore ASCII di un intero?
Che è venuto anche sul quiz del passato di funzioni vi abbiamo chiesto di scrivere.
>> Praticamente qualsiasi funzione che hai utilizzato ed è
molto facile per scrivere, sensori come è più basso,
è superiore, per abbassare, alla tomaia.
Le funzioni che converte un stringa da minuscolo a maiuscolo.
Tutti sappiamo come fare, giusto?
E 'abbastanza facile.
Voglio solo fare in modo che si can-- è lo stesso processo di pensiero.
Devi solo eseguire iterazioni e si gira le cose.
O si contano o quando girate cose in modo diverso.
>> Vorrei suggeriscono-- I Non so se stiamo andando
chiederti di memorizzare cosa maiuscola o Z maiuscola, o minuscola Un o minuscolo
z sono in Ascii, ma vorrei suggerire forse scrivere che verso il basso nel caso in cui
facciamo.
Solo così voi ragazzi hanno un riferimento.
Come maiuscolo A è, che cosa, 197?
E poi minuscolo è come 50 qualcosa.
65, sì, ci si va.
Quindi, solo praticamente conoscere il differenza tra loro è 32.
Questo è abbastanza importante.
Già.
Sono bene su questo?
OK.
>> PUBBLICO: Potremmo teoricamente scrivere qualche
di questi giù come bene il nostro little--
>> IL PROFESSORE: È teoricamente potrebbe basta copiare la funzione di abbassamento.
Questo è vero.
>> PUBBLICO: Non [incomprensibile].
>> PROFESSORE: Voi ragazzi hanno un lenzuolo.
Voi ragazzi avete un foglio di nota.
È possibile digitare esso.
Potete scriverlo.
Puoi fare quello che vuoi con esso.
Già.
Quindi teoricamente, se si vuole, andare per.
>> PUBBLICO: [incomprensibile] ma non lo facciamo davvero
necessariamente bisogno di ricordare il valore, possiamo solo
utilizzare il per superiore o di funzioni inferiori, giusto?
IL PROFESSORE: Sì.
Ma se vi abbiamo dato una domanda che dice di scrivere a superiore,
allora si avrebbe bisogno di scriverlo.
Così voi potete pensare che si ragazzi hanno accesso a tutte le funzioni,
ma se si desidera utilizzare per superiore o più basso, che cosa devi anche fare?
>> PUBBLICO: [incomprensibile] utilizzare CS50 [incomprensibile]
>> IL PROFESSORE: È CS50.h?
State attenti là.
>> Quindi, per superiore, abbassare, è superiore, è più basso,
funzioni che coinvolgono manipolazione delle stringhe sono
tutto all'interno sia della Ascii o all'interno della libreria matematica
o all'interno della libreria stringa.
Quindi, se voi ragazzi utilizzare quelli funzioni, stare attenti a ricordare
di includere tale intestazione.
Quindi, forse anche qualcosa di te desidera includere nel foglio,
quali sono l'intestazione?
Quali sono le librerie hai utilizzato?
Quali funzioni sono all'interno di quelle librerie?
È importante.
>> Sì?
>> PUBBLICO: potremmo semplicemente poliziotto fuori e fare hashtag
attraverso il assolutamente ogni lettera che abbiamo mai
visto come su tutte le domande?
>> IL PROFESSORE: Si potrebbe.
Io non so come felice stiamo andando a essere al grado
che quiz quando ogni pezzo di codice è il doppio del tempo come deve essere.
Non lo so, potremmo togliere un punto per lo stile.
Ma teoricamente la tua codice sarebbe giusto.
Voi ragazzi potevano poliziotto fuori e basta includere tutto.
Va bene anche, sì.
PUBBLICO: [incomprensibile].
IL PROFESSORE: Sì.
Vorrei suggerire Non farlo però.
Già.
PUBBLICO: Freddo.
IL PROFESSORE: Bella domanda.
PUBBLICO: Così, lo scenario peggiore.
IL PROFESSORE: Il caso peggiore.
Se si dimentica totalmente, si potrebbe fare.
Già.
>> Sì, il codice è proprio lì.
Ho usato n invece di conteggio, ma è sapere, qualunque sia la vostra barca galleggia.
PUBBLICO: Aspetta, quindi siamo Non avrebbe dovuto hashtag
comprendere perché siamo partendo dalla int?
>> PROFESSORE: Sì, ho solo pensato che ci hanno chiesto di scrivere la funzione.
Se si voleva essere sicuro, potrebbe probabilmente messo lì.
Ma io non mi sono preoccupato, sì.
>> Io non so nemmeno se si bisogno di qualsiasi libreria per questo.
Perché tu non sei davvero la stampa fuori qualcosa o niente, giusto?
Sì, io non so se avete bisogno di una biblioteca.
>> OK.
Questo è anche un po 'più lungo le linee di manipolazione memoria.
Questo tipo di po 'complicato.
Pensa a questo.
Avete una funzione chiamata func.
Avrei potuto chiamò qualunque, ma ho scelto di chiamarlo func.
Ce l'ho sopra il mio principale.
Ricordate, si desidera avere una funzione dopo la vostra principale,
si vuole fare in modo che si includere il prototipo della parte superiore.
>> Ma in questo caso è stato così breve che mi sentivo che avrei potuto solo
includerla in cima al principale.
Non avevo bisogno di avere il prototipo, perché è già scritto sopra.
Quindi tutto quello che sto facendo nella mia funzione principale sta creando intero x è uguale a 10.
Chiamo mia funzione func, e poi la stampa qualcosa.
>> E poi che in realtà cosa func sta facendo.
Voi ragazzi vuole pensare attraverso questo.
Perché è un po 'complicato.
E 'molto, molto difficile, in realtà.
Pensare attraverso ciò che questo programma sarebbe outputting.
Ti do ragazzi due minuti.
>> Buone discussioni?
>> PUBBLICO: Sì.
>> IL PROFESSORE: Sì.
Va bene, quindi questo è difficile per un motivo.
Ed è per questo ho voluto portare questo per l'attenzione di tutti.
Qualcuno ha voglia di darmi un suggerimento, un tentativo?
Cosa sarebbe questo stampare?
Totalmente bene se ti sbagli.
Sì?
>> PUBBLICO: Penso che sia 100 e poi 10 su due linee separate.
>> IL PROFESSORE: E un 10?
Qualcuno ha altre ipotesi?
Sì?
>> PUBBLICO: Forse solo perché 10 func non restituisce nulla?
>> PROFESSORE: OK, così abbiamo avere il numero indovinare uno
è che il numero due ipotesi è solo andando a stampare 10.
Qualcuno ha altre ipotesi?
OK.
Quindi cerchiamo di camminare attraverso questo, giusto?
Ogni volta che si ottiene un pezzo di codice, non basta guardare a lui e di essere come,
ah, che è tanta roba!
Sono così confuso!
Come, calmati giù.
Basta sapere che si poteva solo guardare attraverso codice riga per riga.
Questo è tutto ciò che è.
E 'come leggere un libro.
>> Quindi, con qualsiasi funzione, partiamo sempre al principale.
Quindi stiamo andando a iniziare a int void main,
anche il programma del già malandato, giusto?
Inizia a in void main.
Int x è uguale a 10.
>> Quindi ho intenzione di cancellare questo.
Io vado a disegnare la memoria solo così si ragazzi possono sorta di vedere cosa sta succedendo.
>> Ricordate qui abbiamo la nostra pila?
Fino qui abbiamo il nostro heap da qualche parte qui.
Stack cresce, giusto?
E all'interno dello stack, si ha funzione così come l'alimentazione
tutti principali variabili locali.
>> Così qui, int x uguale 10.
All'interno della nostra funzione principale siamo la creazione di una variabile chiamata x.
Stiamo impostazione che pari a 10.
Qui hai qualche x, e sei l'impostazione che la parità a 10, a destra,
all'interno principale.
Tutti bene?
>> Funzione.
Così ora, all'interno della nostra principale funzione che stiamo chiamando
la funzione che abbiamo scritto sopra.
Quindi stiamo ora entriamo nella seconda funzione.
Stiamo andando a creare un altro variabile int x è uguale a 100.
Che cosa sta succedendo qui al camino?
Cosa succede quando si chiama un funzione che crea nuove variabili?
Che cosa succede qui al camino?
>> PUBBLICO: [incomprensibile] mucchi sopra?
IL PROFESSORE: Sì.
Quindi in realtà crea una copia.
E che tipo di pile sulla parte superiore.
Pensate al stack-- una pila di libri, una pila di nulla.
Pali in alto, prima in ultima fuori, ultimo entrato, primo uscito.
>> Così sta andando a creare una x qui.
>> Che sta per avere tutte le variabili funcs.
Grande.
Così ora abbiamo due diverse x di che rappresentano due cose molto diverse.
Poi andremo a stampare l'intero di x.
Quindi cerchiamo di stampare 100, giusto?
Perché qui è 100.
Ecco, questo è la prima cosa che sta andando a stampare.
Dato che questa funzione ritorna nulla, ora che la funzione, quella linea in principale
e 'fatto.
Tutti bene con me fino ad ora?
>> Quindi siamo ora attraverso due delle tre linee di nostra funzione principale.
Ora stiamo andando alla terza linea.
Stiamo andando a printf.
Che cosa è questo x nel principale?
Che cosa rappresenta?
>> Quale valore è x ora?
>> PUBBLICO: 100.
>> IL PROFESSORE: E '100?
PUBBLICO: Ancora 10.
IL PROFESSORE: Ancora 10.
Già.
Perché ricordate, entro il nostro func, x è uguale a 100.
Ma se si ritorna alla nostra funzione principale,
tale variabile è memorizzato in un luogo diverso sul nostro stack.
>> Così ora abbiamo bisogno di tornare alla pila principale, di rete variabili locali.
E qui x è uguale a 10.
E così stiamo andando a stampare 10.
>> Quindi lei ha assolutamente ragione.
Stiamo per avere la potenza di 100 e 10.
Sì?
PUBBLICO: Quando malloc, è il cumulo o stack che è [incomprensibile]?
IL PROFESSORE: Quando si malloc, si sta prendendo la memoria dal mucchio
e loro assegnazione.
In modo che non avete a pasticciare con tutto questo.
Quindi credo che la più grande da asporto qui è qualcosa che si chiama ambito.
>> Per quelli di voi che erano a la sessione di revisione la scorsa notte,
abbiamo parlato brevemente di questo.
Ambito di applicazione e definisce come quando esistono le variabili.
O all'interno di quello che incornicia fanno esistono le variabili.
>> Praticamente la regola generale, è, il vostro variables-- se li si crea
all'interno braces-- riccio esistono solo all'interno di queste parentesi graffe.
>> Così, per esempio in funzione della nostra func, vedete quei due bretelle.
Se si sta creando nulla all'interno di esso,
è probabile che tutto quello che stai facendo è creando uno stack e memorizzazione che.
Stessa cosa in principale.
Questo è solo memorizzati all'interno del principale.
>> Inoltre si vuole essere molto, molto attenti qui.
Perché ambito presta anche stesso per diversi esempi.
Così, per esempio per un cappio, per int i è uguale a 0.
I è meno, non lo so, 10.
I plus plus.
E tu hai il codice all'interno di esso, giusto?
>> Da dove viene questa variabile, Io, in realtà esisto solo?
Solo all'interno del vostro ciclo for.
Così Scommetto che molti di voi ragazzi hanno probabilmente incontrato questo errore quando
si sta facendo nei vostri programmi pset.
Quanti di voi ragazzi hanno cercato di utilizzare i al di fuori di un ciclo for e ha avuto un errore?
Come un interi senza riferimenti o qualcosa di simile?
>> Il motivo per cui ciò accade è perché qui sei
la creazione di qualcosa che solo esiste all'interno del vostro ciclo for.
E se si tenta di utilizzarlo, io non lo fa in realtà esistere al di fuori di esso.
Quindi, in pratica un computer dicendo, io Non sai di cosa stai parlando.
Tutto quello che so è che mi è stato un qui, ma ora non più.
>> Quindi, se dovessi creare un per il ciclo dentro, giusto?
E ho intenzione di creare un altro, come int j, e farlo fare tutto ciò.
E hai un codice all'interno di quel ciclo, j esiste solo qui.
Ma che esiste anche all'interno i.
E così j esiste solo all'interno di questo ciclo for,
mentre i non esiste in tutta la faccenda.
>> Tutti chiaro?
Stessa cosa con istruzioni condizionali se si desidera creare nulla.
Stessa cosa con passanti mentre se si desidera creare nulla.
Questo è qualcosa di cui essere molto, molto attenti.
Quindi questo è stato davvero un buon problema nel senso che ha dimostrato due cose.
E 'dimostrato prima, portata.
E ha dimostrato anche l'allocazione di memoria.
Perché voi ragazzi dovrebbero sapere che funzioni crescono verso l'alto nella pila.
E che quando si chiama funzioni, si sta creando
essenzialmente una nuova pila di memoria.
Questo è molto diverso da ciò che la memoria di rete sia.
Già.
Wow!
Tutti OK su questo?
E 'stato di confusione.
Molto argomenti buoni per andare oltre, perché probabilmente siete
andando a prendere un po 'ingannevole cose del genere sul quiz.
Già.
Raffreddare.
Metterò si ottiene il 100 su un line e poi 10 dall'altro.
Sì, molto buono.
>> OK, ora voi ragazzi ottenere la possibilità di essere le agenzie di viaggi.
Si arriva a rispondere a tutte la bella e-mail che ho a volte ricevo.
>> Quindi, caro Andi, vedo qualcosa che penso che non va con il mio compilatore.
Sono certo che il mio codice è corretto, ma io continuo a ricevere un errore di segmentazione
ogni volta che corro.
Cosa sta succedendo?
Si prega di aiuto, tanto amore.
>> Se voi ragazzi avete qualcosa di simile che come risponderesti?
Questi sono in realtà molto comuni domande che chiederanno.
È se, ti daremo un scenario, daremo noi
la tua ipotesi migliore a quello che sta succedendo.
Qualcuno ha una pugnalata a quello che sta succedendo?
Sì?
>> PUBBLICO: Forse il dereferenziati null, qualcosa come il puntatore
si punta a qualcosa nullo.
PROFESSORE: Sì, sarebbe un esempio di quando che sarebbe successo.
Ma qual è il quadro più ampio di quello che sta succedendo qui?
PUBBLICO: E 'si sta cercando di accedere alla memoria che non sei
dovrebbe avere accesso a?
IL PROFESSORE: Esattamente.
Quindi, pensare di guasto seg, un off limiti, area riservata in memoria
che non si deve essere commovente.
>> Così, più o meno quando si sta cercando per index-- come, per esempio,
avete dichiarato un matrice da zero a nove.
Ma provate a toccare quella 10 ° valore, non hanno accesso a questo.
Perché non avete dichiarato.
E così il computer sta andando a guardare quella essere come,
uh oh, si sta cercando di andare al di fuori dei confini di un indice.
Sto per darvi un segmentation fault.
>> Pensate a come segmento, giusto?
Un segmento supplementare, il guasto quando si tenta di violare qualcosa
e non dovrebbe essere lì.
Segmentation fault è in qualsiasi momento si cerca di toccare le cose
che non si deve essere commovente.
>> Così esempi comuni sono un indice.
Naturalmente, se si sta cercando al tatto che è stato nullo,
che sarebbe anche funzionare pure.
Se il puntatore stava cercando di toccare le cose che non dovrebbero toccare,
che potrebbe anche funzionare pure.
Più tipicamente Potrai vedere questo in un array.
Tutti bene?
>> PUBBLICO: Quindi, se volete per accedere al punto 10
e c'è solo un limite di nove o qualcosa.
>> PROFESSORE: Sì, esattamente.
Abbastanza.
Raffreddare.
>> Caro Andi.
Così abbiamo questi meravigliosi cose chiamati sorta.
Se Merge sort-- come noi sega a esempio quando si
David ha fatto tutta la cosa in class-- perché,
se è così molto più veloce di qualsiasi altro genere,
perché abbiamo neanche fastidio sapere qualsiasi delle altre specie?
>> Che cosa è questa domanda davvero che ti chiede?
Qual è il tre word--
PUBBLICO: Qual è il trade-off?
IL PROFESSORE: Esattamente.
Questo è ciò che la domanda sta chiedendo.
Qual è il trade-off tra Merge sort versi altri tipi?
>> PUBBLICO: prende la memoria, giusto?
>> IL PROFESSORE: Do you spiegare che un po 'di più?
Prima di tutto spiegare negozio Merge.
Come funziona merge sort funziona?
>> PUBBLICO: Così funziona dividendo tutto in mezzo
e poi mettere insieme e riallocazione in ordine,
come ogni volta si uniscono i set.
IL PROFESSORE: Più o meno.
Così posso disegnare questo fuori, ma sarebbe portarmi cinque minuti per attingere.
Guardare indietro alle diapositive sezione dove abbiamo coperto merge sort.
Di preciso.
>> Quindi il modo Merge opere ordinamento è divide le cose a metà,
e allora sembra proprio al primi valori di tutti
e ordina solo quello.
Continuamente crea nuovi array e mette le cose sempre più in ordine.
E così, mentre questo è davvero, davvero veloce perché it's-- si sa,
una ricerca binaria è n log n.
Si sta creando tanti diverse matrici che sei
utilizzando una grande quantità di memoria.
E così, mentre è più veloce, il trade off qui è che si sta utilizzando più memoria.
>> E così, suggerimento, ordinamenti e ricerche sono state coperte molto di più quest'anno
quanto non lo siano stati negli anni precedenti.
Voi ragazzi dovrebbe vedere che riflette di conseguenza sul quiz.
Mi sarebbe sicuramente trascorrere del tempo andando su ciò che tutti i diversi tipi
sono, come la ricerca binaria, come funziona la ricerca lineare.
Come forse pseudocodice codice quelli fuori.
Quali sono i tempi di esecuzione?
Qualcosa come tempi di funzionamento è molto facile da copiare in giù su un foglio nota,
destra?
>> E 'davvero difficile quando sei nel mezzo del test
e si deve capirlo.
Copiare il basso.
Vi garantisco che sei andando a bisogno di sapere che.
Quali sono i compromessi?
Nel peggiore dei casi, i migliori scenari per tutti loro, molto conoscere.
Sì?
>> PUBBLICO: Abbiamo bisogno di sai scrivere codice merge sort?
Come, abbiamo bisogno di ricordare il ricorsiva?
>> IL PROFESSORE: dubito fortemente che, solo perché è come abbastanza complicato.
Ma potrebbe non essere fattibile se ci vi chiedo di usare pseudocodice fuori.
Già.
>> Sì, va bene, uno di più.
Questo può essere venuto in si ultimo pezzo in un po '.
Sì?
Ognuno ha sentito?
>> OK, quindi praticamente prima di tutto, che tipo di programma
sarebbe dando un output come questo?
Ricordate vi abbiamo chiesto di conoscere questo nuovo tipo di strumento di debug?
Qual era il nome di essa?
Valgrind, a destra
>> E 'stato un programma in cui si potrebbe chiamare che potrebbero
tenere traccia di tutta la memoria che sei utilizzando nel vostro programma e stava succedendo.
Quindi, se hai qualcosa, come, definitivamente perso, 40 byte in un blocco.
Probabilmente non siete ricordando di liberarla.
Perché se si sta utilizzando byte di memoria, questo significa che ti sei collegato a quel ricordo,
ma non siete stati in grado di liberare.
Così si vuole fare Assicurarsi che sei anche
utilizzando free-- che è un function-- di liberare tutto
della memoria riallocata da malloc.
>> Raffreddare.
Quindi questa diapositiva, avrò in su.
E 'ovunque in molte conferenze, in un sacco di sezione diapositive.
Sei sicuro di voler fare in modo basta sapere tutto questo.
Sia nel foglio di nota o se si vuole memorizzarlo, sentitevi liberi di.
E 'davvero, davvero, davvero importante.
>> Anche un ottimo domanda che si può chiedere.
Perché guardare Selezione sort-- a Selezione sort-- tutti i tempi di esecuzione
sono n al quadrato.
Indipendentemente da come l'elenco viene a voi come, quindi perché è la selezione sort--
Ti darò ragazzi 30 secondo pensare a questo.
Perché è sorta di confusione.
Si tratta di un po 'di pensiero concettuale.
Perché dovrebbero i tempi di esecuzione essere lo stesso in entrambi gli scenari peggiori e migliori casi?
>> Sì?
>> PUBBLICO: perché la selezione ogni sorta posizione o spazio in questa piccola matrice
cosa o qualsiasi altra cosa.
Quindi, anche nel migliore dei casi, anche se è perfettamente ordinato,
avrebbe dovuto comunque essere come, OK, uno.
Nel mio primo luogo ho uno.
E passare attraverso tutti loro.
OK, uno è il più piccolo.
E poi si va di nuovo ed è come, OK, due
è la più piccola di tutte le cose.
Ma deve ancora controllare tutti e di ciascuno.
IL PROFESSORE: Sì.
Così, per esempio, diciamo solo che abbiamo una lista, già ordinato,
un array uno a cinque.
Il modo in cui i tipi di selezione è che passa attraverso, controlla questi due.
Poi controlla quei due.
E poi controlla e verifica.
Si continua a controllare tutti loro, indipendentemente dal fatto che
in realtà è ordinato.
Perché questo è semplicemente il modo in cui il genere funziona.
>> E così questa domanda è un po 'come una domanda concettuale chiederemo.
Dove prima, di sapere che tipo di selezione
è, a destra, per poter per rispondere alla domanda.
Devi essere in grado di capire concettualmente quello che sta succedendo.
E allora si può applicare e pensare, OK diciamo solo immaginare peggiore delle ipotesi.
Sono tutti in ordine decrescente.
Come vorrei che incidono su di esso?
>> Che cosa se è ordine crescente?
Se è già ordinato?
Come vorrei che influenzare i tempi di esecuzione?
E poi ordinamento per selezione, noterete che in realtà non importa.
Perché si sta controllando tutte le I valori indipendentemente da ciò che sta accadendo.
>> E quindi le cose buone da ricordare.
Perché alcuni tipi si differenziano dagli altri e il modo migliore e gli scenari peggiori
interesserebbe tutti loro.
>> Sto andando a colpire davvero in genere perché sarà sul quiz.
Già.
OK.
C'è sei minuti dalla fine.
Posso prendere tre minuti di domande.
Posso anche rimanere in giro per come 20 minuti dopo sezione
se volete fare domande pure.
Qualcuno appena hanno davvero breve domande o problemi concettuali
sono poco chiare in questo momento?
Sì?
>> PUBBLICO: Puoi parlarci un po ' po 'di operatori bit per bit?
>> IL PROFESSORE: Sì.
Così gli operatori bit a bit sono qualcosa che probabilmente
potrebbe semplicemente voler mettere sul foglio.
Così quickly-- Non voglio andare troppo in profondità
perché Harvard, nella loro revisione seduta, coperto abbastanza bene.
Operatore binario, non c'è cinque di loro, giusto?
>> C'è questo, che è x o funzione, c'è commerciale, che è la e.
Tubo, che è l'OR.
E poi ci sono i due diversi tipi di turni.
>> Se ti do due valori, se Io ti do, come, uno e uno.
Quale sarebbe valutata come?
Se ti do vero e vero, vero?
Che dire di vero o falso?
Ancora vero, giusto?
Perché c'è una o.
Ti molto probabilmente vi darà i numeri.
Quindi ricordate, uno uguale vero, lo zero è uguale a false.
E potremmo darvi queste cose e vi chiedo di dirci cosa succede.
Harvard ricopre all'interno della prima 10 minuti del loro sessione di studio
davvero, davvero bene.
Quindi voi ragazzi vuole fare che si guarda indietro su questo.
>> PUBBLICO: è pisa5 sta per essere sul quiz?
IL PROFESSORE: No.
Non è nemmeno guardare pisa5 momento.
È difficile.
Basta non si preoccupano neppure guardando pisa5.
>> Tuttavia, come alcuni suggerimenti e suggerimenti,
suggerisco di iniziare pisa5 non appena il quiz è finito.
Questo sarà il più difficile settimana, ma poi voi ragazzi
sarà passò sulle colline di verde e cuccioli di rotolamento,
e va bene.
>> Questa classe diventa significativo più facile dopo il quinto pset.
Orario di ricevimento: UDIENZA sono Domenica, Lunedi?
PROFESSORE: Sì, così le ore di ufficio sarà la Domenica a Lunedi per la pset.
Orario di ricevimento stasera essenzialmente sarà solo commento per il quiz.
Se qualcuno vuole entrare e chiedere TAS una domanda, saremo lì.
>> Prenderò forse più una domanda se qualcuno ha una domanda?
Sì?
PUBBLICO: Quando sei nodi che definiscono, [incomprensibile]
se dite stella nodo e poi il prossimo, fa il computer automaticamente
capire che sei riferendosi a un altro puntatore?
>> IL PROFESSORE: No.
>> PUBBLICO: Devi ricollegheremo [incomprensibile]?
>> IL PROFESSORE: Quindi, in pratica il struct di un nodo è, lo ricordiamo,
è come si crea il nodo e allora avete un puntatore chiamato prossimo.
Tutto quello che stai facendo è avere la struttura lì.
È necessario assegnare tale puntatore da qualche parte.
Così i computer non lo fa sa cosa sta facendo ancora.
È necessario assegnare realmente quando si sta creando la vostra lista collegata.
Ed è quello che principalmente pset 5 sarà.
Quindi nessuna preoccupazione circa niente di tutto questo al momento.
>> PUBBLICO: Quindi non abbiamo bisogno di concentrarsi troppo sulla lista di link, basta
la concezione generale?
>> IL PROFESSORE: A soli praticamente pile, code, elenchi di link, alberi, tabelle hash.
Basta essere in grado di sapere che cosa sono.
Non abbiamo intenzione di chiedere ti piace qualcosa di specifico
perché non abbiamo fatto veramente un pset che la copre nulla di tutto ciò ancora.
>> Così negli ultimi due minuti prima Ho impostato liberi di uccidere questo quiz.
Più o meno, come, pensare a come lontano voi ragazzi venuti in questa classe.
>> Mi ricordo quando due settimane di questa classe, alcuni di voi
passare tre ore a scrivere acqua.
Quanto tempo ci vorrà ragazzi di scrivere l'acqua ora?
30 secondi, forse?
Pensa a quanto voi ragazzi hanno imparato.
CS è un argomento molto, molto difficile.
Non c'è dubbio.
E 'difficile, è per questo che non si studia.
E 'solo difficile.
Ed è totalmente soddisfacente.
>> E sono davvero orgoglioso che tutti hanno fatto fino a questo punto.
Pset non sono facili.
Prendono un sacco di tempo.
Ragazzi, io non ti chiederà mai di scrivere il gioco del 15 o Vigenere sulla pset.
Non è necessario a freak appena fuori di questo.
Tutto quello che stiamo testando qui è quello di valutare la vostra conoscenza concettuale, nonché
come alcune delle vostre abilità di base di codifica.
Il test è stato progettato per essere davvero impegnativo.
Come, è stato progettato per voi di non ottenere il 100.
È stato inoltre progettato per voi a probabilmente non essere in grado di finire in 75 minuti.
E questo è tutto bene.
Sono uno studente me stesso.
Lo so, lo odio quando cammino fuori di un quiz essere come, merda.
E 'stato davvero difficile.
Probabilmente ciò che sta per happen-- e che è totalmente soddisfacente,
Ti sto dicendo ragazzi al momento.
Il mezzo su queste cose non sono elevati affatto.
>> E per quelli di voi che sono stati sempre, come,
tre, sui vostri insiemi di problemi, questo non significa che sei
intenzione di ottenere un 60 per cento in questa classe.
Se si ottiene il 60% sul quiz, che non lo fa
dire che stai andando a ottenere un D in questa classe.
Vediamo, soprattutto io, per quelli di voi nella mia sezione,
Vedo quanto sia difficile voi ragazzi stanno lavorando.
E io tenere traccia di questo.
>> Voi ragazzi andrà bene.
Non c'è memoria istituzionale felicità, alla fine del semestre.
Perché tutti i ragazzi di Harvard dicono i loro amici, oh, andrà tutto bene.
Nessuno ti sta dicendo ragazzi che qui.
Quindi devo dirvi ragazzi che qui.
>> Voi ragazzi andrà bene.
Sono così orgoglioso di tutti voi ragazzi.
Il test sarà difficile.
Studio per esso, e poi solo buttarlo via.
Preparatevi a imparare cose nuove.
E mangiare caramelle.
Abbiamo un sacco di caramelle.
>> Ottenere un sonno della buona notte.
Non Non dormire, perché che sarebbe davvero male.
CS è un sacco di logica.
Se non si dorme, non può funzionare, e il tuo cervello non può funzionare.
E sarò qui per il prossimo 20 minuti, se qualcuno vuole rimanere in giro.
Voi ragazzi stanno andando per ucciderlo.
Buona fortuna.