[Powered by Google Translate] [♪ ♪ Buzzing]
Quindi, per farvi conoscere quello che ho sullo schermo;
è uno degli strumenti che abbiamo sviluppato durante l'estate;
si chiama CS50 Spaces,
ed è il nostro applicazioni collaborative di codifica
che abbiamo intenzione di utilizzare nelle sezioni.
E 'piuttosto fresco.
Qualcuno di voi ha visto CS50 corsa ancora?
Permettetemi di tirare che in un'altra scheda.
Run.cs50.net
Così
se si va a run.cs50.net,
si può vedere questo è un modo nel tuo browser per
in realtà il codice - scrivere codice C,
e quindi eseguirlo,
in modo che sia lo compila, lo esegue, quindi restituisce l'output a voi,
quindi questo è una specie di un modo intelligente per sperimentare
con parte del codice che David va oltre a lezioni frontali
e diamo a su di voi su insiemi di problemi
senza avere di accendere l'apparecchio.
>> Cosa fa Spazi che è diverso da quello
se tornare a questa scheda,
Spaces è CS50 di esecuzione, come si vede qui,
ma se scorrere sopra e guardare l'altro lato della finestra,
si vede a destra io sono l'unica persona in questo spazio,
ma quello che ho intenzione di fare è chiedere voi ragazzi a partecipare a questo spazio con me
e saremo tutti arrivare al codice nella stessa finestra piccola,
parti di codice con l'altro,
e parlare di differenze tra il nostro codice.
Quindi è una specie di cosa cool -
ad aderire, se volete visitare questo link qui in alto
che ho messo in evidenza,
si può semplicemente digitare apps.cs50.net/spaces/vqcspSnO.
>> Va bene, allora per cominciare,
Sto per darvi un po 'di un tour di questa.
Faremo qualche codifica stupide piccole con essa in un primo momento,
solo in modo che tutti si po 'un'idea di cosa vuol dire,
ma quello che ho fatto -
o quello che sto per fare è proprio qui -
Vado a prendere il codice che ho scritto qui,
che, come si vede in questo momento è vuota;
non fa nulla.
E 'solo piastra codice della caldaia, che chiameremo.
Con un po 'di cose da fare commenti.
Io vado a salvarlo premendo il pulsante Salva.
E ciò che fa è
evidenziato che qui brevemente - che la casella revisione verde salvataggio,
e ora, se si cerca per me nello spazio,
si fa clic su il mio nome,
si può vedere che ho questa revisione proprio qui,
e se si fa clic su tale revisione,
sara caricare il codice nel vostro spazio, anche.
>> Così ha caricato tutti che il codice nel loro spazio?
Va bene, se non l'hai ancora, andare avanti e farlo,
e poi quello che voglio voi ragazzi fare in questo poco a che fare-sezione
è scrivere un po 'con printf su di te,
così per esempio, vorrei scrivere
printf ("Il mio nome è Nate");
e poi mi piacerebbe scrivere
"Mi sono laureato nel 2009
da Stanford "
e mi piacerebbe sentir parlare
che anno si è a scuola,
se sei al college o alla scuola di business
o un'altra scuola di Harvard,
quello che si sta studiando se è ancora noto;
se non si sa, questo è assolutamente cool.
Non ho deciso fino a quando ero in ritardo nel mio secondo anno.
e poi mi piacerebbe anche sapere
pazzie vuoi dirmi o
qualcosa sulla classe o semplicemente qualsiasi altra cosa.
Quando hai finito di scrivere che con il vostro printf piccolo,
se si risparmia la revisione o meglio
prima di tutto che è possibile eseguire
e che mostra esattamente quel che si desidera stampare,
e poi se si va avanti e salvare tale revisione
utilizzando il pulsante Salva modifiche, questo primo ragazzo poco più di qui,
e faremo un pò passare attraverso e fare una piccola introduzione in quel modo.
Così si dovrebbe basta premere il pulsante Play,
che è qui in alto a sinistra,
quindi questo tasto Play in alto a sinistra sarà
invia il tuo codice di sconto al nostro server in cui viene compilato e quindi eseguire.
Così che cosa è un pò pazzi per questo è
questo codice in realtà non è in esecuzione sul computer;
in realtà è stato inviato attraverso Internet.
>> Come va, Charlotte?
>> I - bene. Sto - Penso di essere
avendo difficoltà che il risparmio
sul server in modo tale che si può - io posso eseguire il programma.
E poi quando provo a farlo funzionare, si dice che c'è un errore.
Dichiarata come un virus, che non è più lì.
Oh, vediamo, in grado di colpire Salva di nuovo?
Lo vedo sullo schermo.
Diritto >>, va bene, ed è quello che ho.
E io non so perché non mi permette di farlo funzionare.
Oh, va bene, mi dispiace.
Può spiegare perché - cosa c'era di sbagliato - quello che non funzionava con esso?
>> Già, perché non ho visto che c'era una riga in cui c'è ancora una variabile
che non aveva dichiarato, che non ho intenzione per questo essere lì.
Sì, perfetto!
>> Ora, se lo salvo, penso che dovrebbe funzionare.
Ora che l'hai salvato, funziona; impressionante.
>> Quindi sì, come andiamo attraverso -
così quello che stava succedendo,
Sto solo andando a ripetere per la fotocamera.
Quello che stava accadendo era che questa variabile s
è stato lasciato dopo - Suppongo che tu cancellato alcune altre cose
dove è dichiarato come,
e così questo è stato gettare le cose fuori e non ti permette di farlo funzionare.
Quindi questo è esattamente ciò che vogliamo fare nella sezione
si sono persone che provare a scrivere diversi pezzi di codice,
compilazione, vedere che cosa funziona, vedere ciò che non funziona,
e poi un pò parlare di queste cose, perché questi sono i punti di intervento che
Ho ancora incontrare,
Ho ancora - che faccio un sacco di cose stupide per tutto il tempo,
e io non so perché non funziona,
quindi cerchiamo di tirare su la revisione di Charlotte 3,
e noi lo esegue.
>> Così, quando corro, ora che ho avuto il suo codice qui dentro,
Posso ingrandire, premere il pulsante Run,
caricamenti, costruisce esso, corre,
dice che è stato eseguito correttamente, e se io scorrere verso il basso,
vedere Charlotte è una junior Adams House,
psicologia, secondaria in economia; impressionante.
Grande di conoscerti!
Awesome.
Va bene, andare avanti, andiamo a Daniel,
vai alla revisione 3,
compilare, eseguire;
perchè non ci racconti un po 'di te, Daniel?
Chiamami Dan >>.
Io vado a scuola di business di fronte a voi,
e sono stato nei Marines prima di qui,
e questo è tutto nuovo per me, in modo sì.
Non sento male, ho 30 anni e non conosco nessuna di queste cose.
Fantastico, grazie, Dan!
Va bene, abbiamo ottenuto un altro Daniel.
Si va da Daniel - vi presentarsi, Daniel?
>> >> Certo, sono Daniele.
Sono al secondo anno di Mather in questo momento.
Mi sto concentrando sul governo,
ma ho voluto prendere CS50 perché ho sentito ottime recensioni sulla classe
e non ho mai provato prima di CS.
Scorrere verso il basso qui e mostrare questo - cool.
Passando, Jared.
Come sta andando?
Good >>, come stai?
Come potete vedere, sono un concentratore filosofia junior Eliot,
originario della California meridionale,
e io sono interessato a prendere CS50 perché mi piace la logica di esso,
e sembra davvero bello fare le cose sul computer, quindi.
Impressionante, dove nel sud della California sei?
>> A circa un'ora da [incomprensibile], una piccola città [incomprensibile].
Oh, si ', mio ​​padre e' da Redlands.
Cool stuff.
>> Va bene, Jimmy, come va, Jimmy?
Good >>, come stai?
Facendo molto bene!
Parlaci di te.
>> Sono una matricola, e io non sono del tutto sicuro di quello che sto laureando in
ma io sono un pò appoggiato verso l'economia.
Come Daniele prima di me, non ho mai fatto alcun CS, ma suona un pò fresco.
Sono originario di Chicago.
Awesome. Allora date un'occhiata qui la sua stampa.
Volevo chiederti, questo ha fatto stampare come ti aspettavi?
>> No, ho dimenticato di stampare una nuova linea.
In realtà ho dimenticato che quando stavo scrivendo la mia cosa
per la prima volta, anche.
E 'una specie di dolore per ricordare di mettere quelle in mano.
Sarebbe bello se è sufficiente sapere che quello che volevi.
>> Va bene, Kelly.
Wow, abbiamo 2 Kellys, 2 Daniels, 2 Kellys.
Così Kelly - si va da Kelly Ren?
Ok, fantastico.
O Kelly, voglio dire.
>> Quindi sì, quindi sono Kelly.
Sono al secondo anno di Pfoho.
Ho ricevuto una e-mail che ho ancora oggi hanno 7 settimane per dichiarare la mia concentrazione,
quindi sto cercando di non pensarci,
e mi piace da forno, in esecuzione e Craisins.
Non ho esperienza con la maggior parte di CS;
Mi ha insegnato a costruire siti web quando ero molto giovane,
ma penso che probabilmente imparato da solo sbagliato un sacco di volte.
Spero di imparare un po 'di più
e - sì.
>> Awesome; bene, grazie.
Andiamo all'altro Kelly;
Non ho nulla - hai detto qualcosa qui?
>> [Incomprensibile]
Eccolo!
Sweet!
>> Va bene, quindi sono Kelly.
Sono un studente del primo anno di laurea.
Sono laureando in Mente, cervello, e l'istruzione.
Mi sono laureato in Franklin & Marshall College nel 2008
con specializzazione in psicologia e sociologia
e un minore in francese.
Sto prendendo CS50
perché sono interessati ad avere un dottorato di ricerca in Neuroscienze
e sento che questo mi aiuterà a capire le tecnologie utilizzate.
Awesome.
Passando, Mikaela.
E 'la corretta pronuncia?
Ok, fantastico.
>> >> Sono Mikhaila.
Sono al secondo anno di Kirkland House,
e mi sto concentrando in Ingegneria Meccanica.
Mi piace molto andare in bicicletta, una moto costruita questa estate.
Sto prendendo CS, in realtà,
come requisito di concentrazione,
ma sai, penso che sia ancora sorta fresco della classe di ingegneria.
Awesome - hai costruito una moto di questa estate?
Sì >>.
Wow, come il telaio e tutto il resto?
>> Uh-hunh (affermativa).
Wow, è davvero cool.
>> [Incomprensibile off-camera chat]
[Risate]
Si ', e' passato tanto tempo.
Non si sa mai, vero?
Beh, fresco, grazie anche, Mikhaila.
>> Va bene, Missy.
>> Mi chiamo Missy, io sono una matricola,
in modo che significa che non so niente!
Voglio concentrarmi in astrofisica.
In CS50,
Mi sento come sarà sicuramente di aiuto in questo.
Un fatto strano per me è che io sono un vigile del fuoco a livello nazionale certificata.
Wow!
Come è successo?
>> Ho frequentato un'accademia
e ha attraversato l'inferno per un sacco di settimane
e ottenuto la mia certificazione.
Wow, complimenti!
Che non è cosa da poco, di sicuro.
Bene, ora che mi fare.
Sono io quella successiva nella riga.
Sto - eseguirlo.
>> Quindi, il mio nome è Nate.
Ero classe del 2009 a Stanford.
Ero un sistemi simbolici più importanti,
che è simile al, Mente Cervello, concentrazione Behavior qui,
ma è una specie di mix di
informatica, la linguistica, la psicologia e la filosofia.
Tipo di - sì, un sacco di cose strane, ma è stato fantastico,
e poi ho fatto il mio master in Computer Science anche lì.
Quindi, io sono nuovo a Harvard quest'anno.
Volevo davvero entrare in insegnamento.
Ho passato gli ultimi 4 anni a Stanford TA-zione classi di Computer Science
e così David fammi venire su,
e saro 'dare una mano con CS50,
in modo da fare questo a tempo pieno, io non sono a scuola grad.
E 'stato divertente.
Spero che continueremo a essere divertente, io sono sicuro che lo farà.
>> Va bene, Sam.
>> Il mio nome è Sam, io sono al secondo anno al college, nel diritto particolare.
Il mio principale sarà la storia della scienza, probabilmente, e VES secondaria,
e il mio colore preferito è il giallo.
Non c'è bisogno di giudicare o altro, ma si tratta di un bel colore!
E Stella.
>> Ciao, sono Stella, io sono una matricola a Grays.
Non ho idea di quello che ho concentrato in ancora,
CS50 quindi era solo tipo di casuale,
che è interessante.
Una curiosità, Jimmy è stato il primo amico di Harvard mio,
perché siamo entrambi di Chicago.
Cool, e Grace - che dovrebbe essere quello veramente bello, vero?
>> Ho pensato che [incomprensibile].
Oh, si '.
[Incomprensibile / off-camera chat]
Va bene, io sto ancora imparando, ancora imparando.
>> Quindi abbiamo qualcosa d'altro che una specie di interessante.
Si ', mi chiedo solo, hai un'idea che sta succedendo qui?
Tu sai come interpretare questo?
>> Avrei dovuto mettere il punto e virgola dopo ogni singola riga.
E 'una specie di dolore.
A volte questi punti e virgola può essere un vero e proprio dolore da rintracciare.
Così si scopre che
il programma speciale che stiamo usando quest'anno
compilare il codice C è chiamato Clang,
e il motivo per cui hanno iniziato ad utilizzare Clang quest'anno -
perché non abbiamo usato il programma in passato;
abbiamo usato un altro chiamato GCC che è molto popolare -
Clang dà effettivamente si messaggi di errore che senso.
Questo dice "previsto ';' dopo l'espressione",
e si dice anche che l'espressione dopo il quale si aveva bisogno di un punto e virgola.
Quindi lo stai fissando?
>> Si, in questo momento.
Impressionante, me lo faccia sapere e noi provvederemo a tirarlo verso l'alto, e noi lo esegue.
Ma sì, mettere questi punti e virgola in è una specie di dolore.
>> Ho riparato, quindi penso che dovrebbe funzionare.
Awesome - revisione 3.
Che sembra.
Bene, così ora se lo si esegue,
ci va.
Cool stuff.
>> Bene.
Quindi grazie per farlo.
E 'fantastico per incontrare voi ragazzi.
Quello che faremo adesso è passare il bit successivo piccolo
genere di immergersi nei problemi di sezione
che provengono dal problema posto da questa settimana
e lo faremo per la maggior parte delle sezioni
per il resto del termine,
e poi faremo risparmiare gli ultimi 15, 20 minuti o giù di lì
per parlare del problema si è posto
e poi solo altre domande si ha, in generale, sulla classe.
Detto questo, ciò che veramente voglio fare
si hanno tutti partecipato
con la roba Spaces,
gettando nel codice, gettando di suggestioni,
e parlare di quando le cose piace questa rottura
o non funzionano, solo perché queste sono cose che
So che mi sono imbattuto in
quando ho iniziato a codificare,
e sono stati davvero un pò frustrante, a volte
perché se è come 2:00 prima serie problema è dovuto,
così - solo per la divulgazione,
Non ho iniziato la programmazione fino a quando ero al secondo anno al college.
Era un po 'questo strano, cosa sconosciuta
che ho sentito è stato un pò fresco
e ho anche sentito che potrebbe essere un vero e proprio dolore nel culo
se si perde un punto e virgola e questo è l'unico errore mantenere il vostro programma di funzionare
e ti impedisce di andare a dormire,
quindi sicuramente,
se avete domande del genere,
se avete problemi del genere, me lo faccia sapere,
perché voglio rendere questa una buona esperienza per voi ragazzi.
>> Quindi voi ragazzi hanno tutto scaricato il problema posto ancora?
Un po 'sapere dove si trova? Va bene.
Quindi andremo a cs50.net, perché io non ce l'ho per questo motivo,
tirare le serie di problemi,
tirare insieme il problema 2, e vedremo l'edizione standard di oggi.
Ci tirare su le specifiche qui.
Scorrere verso il basso.
Quindi stiamo per iniziare a guardare a questa sezione di domande.
Avete visto questi ragazzi pantaloncini ancora?
Va bene.
Quindi ci sono corti sul loop,
che è fatto da Tommy, uno dei compagni di insegnamento la testa.
C'è uno scopo,
Credo che fatto da un altro collega insegnamento di nome David
e poi uno su Caesar Cipher fatto anche da David.
Sono piuttosto fresco.
Sono stato a guardare voi i pantaloncini fino ad ora?
Come va fossero stati?
Utile? Ok, buono a sapersi.
Se non lo sono, si può dire così.
Ma prima di farlo,
voi ragazzi hanno visto anche questi interrogativi
a tutti?
>> Parliamo di questo un po '.
Proprio per questo abbiamo introdotto nel corso degli ultime settimane
nella lezione
un numero di cicli differenti.
C'è il ciclo for,
il ciclo while, e poi il ciclo do-while,
e in conferenza, abbiamo parlato molto di
come quei cicli sono tutti
abbastanza simile in molti modi,
e si può fare molto di le stesse cose con un ciclo while
che è possibile con un ciclo per.
Devi solo tipo di utilizzare le giuste combinazioni di variabili e così via.
e così davvero
la distinzione reale tra tutti i loop è che
a volte sono più utili
usarli contemporaneamente di un altro momento.
>> Così, per esempio,
il ciclo while diversa da una do-while.
Ha tutti sentono come se avessero una buona maniglia quando
un ciclo do-while è più
utile o qual è la differenza?
>> Penso che la differenza è un ciclo do-while
corre - Non so bene cosa sia la terminologia,
ma la serie di funzioni all'interno del ciclo.
Essi automaticamente - fa le sue piste di almeno
prima di controllare la condizione, o il ciclo while solo si esegue quando
funziona continuamente - se la condizione è soddisfatta.
Sì, ha senso?
>> Diamo un'occhiata a un po 'di codice.
Quindi, solo per ripetere la domanda,
o la risposta, un po ';
la risposta è stata che
un ciclo while controlla per vedere se la condizione
che si specifica è soddisfatta
prima di eseguire il corpo del ciclo per la prima volta,
considerando che il ciclo do-while eseguirà automaticamente il corpo del ciclo,
è ciò che si chiama - è strano terminologia,
ma se mai dire qualcosa che non ha senso, me lo faccia sapere -
il corpo del ciclo è quella roba che si mette tra le parentesi graffe.
E in un ciclo do-while,
che il corpo si esegue almeno una volta,
e quindi la condizione viene verificata prima di eseguire ogni volta successiva.
>> Quindi, in realtà, Sam,
ti dispiace scrittura di un semplice ciclo while
negli spazi?
>> Come si fa un po 'come
fare un nuovo ...?
Ho solo cancellare tutto ciò che avete dentro.
Sì, basta cancellare.
>> Beh, credo che sto avendo questo -
quale vuoi, un po ', o vuoi ...?
Sì, basta fare un po 'vero, stampare qualcosa.
E vediamo.
Alessandro, mi resi conto che non hai mai presentato.
>> Oh, va bene.
Ti - si può codificare un ciclo do-while per noi?
>> Si ', ci proverò.
Va bene, dobbiamo solo tirare questi sullo schermo,
in modo che tipo di avere una maniglia su quali siano le differenze.
>> Quindi, ecco quello che Sam ha fatto.
Ha un numero intero chiamato i
che lui è inizializzato a 17.
Poi dice while (int i = 17)
printf ("Il mio nome è Sam.");
Che cosa succede quando si esegue questo codice?
C'è un errore, l'errore che cosa dice?
Parliamoci chiaro tirare su e parlarne.
È verificato un errore, si dice.
Facciamo scorrere verso il basso.
Così ci ha dato questo errore, e ha detto,
"Ehi, mi aspettavo una espressione."
E 'un po' criptico.
Sì, così esattamente - e di nuovo,
ci sarà un altro piccolo bug che ci cattura in un solo secondo.
Ma questa è un'altra di quelle cose strane tipo di terminologia,
quindi questo int i = 17
non è un'espressione.
Che sembra che sta facendo è che è
dichiarando un intero ho chiamato
e se impostato a pari a 17
o, piuttosto, mettendo 17 in int che ho chiamato.
E questo non ha senso
nel contesto di questo ciclo while.
E ha senso, come vedremo,
nel contesto di un ciclo for, in quanto per le dichiarazioni ciclo do cominciare
con quello per int i è uguale a qualcosa
e continua.
>> Quindi hai fatto -
risolvere un problema, va bene.
Qui si va, impressionante.
Così ora le cose sembrano un po 'diverso.
Un paio di cose sono cambiate.
Ci può dire che cosa le cose sono cambiate?
>> Ho preso la int, quindi non c'è alcuna dichiarazione [incomprensibile] invece di un incarico.
L'unico segno di uguale, ho messo due segni di uguale, il che significa un pari.
Awesome.
Sì, così quello che ha fatto è stato Sam tirò fuori la int
che era proprio qui in precedenza,
quindi se mi limito a guardare a questo - questo è quello che era prima, ha detto int,
che le era stato dichiarato - quindi abbiamo preso il tipo.
Ci sono int, char, string, a breve,
questi sono chiamati tipi.
Così si ha il tipo
e poi in precedenza,
aveva solo il singolo segno di uguale
e quello che ha detto è stato problematico per questo è stato
quando hai 1 segno di uguale,
questo è un operatore di assegnazione.
Questo non prova o meno 2 cose sono uguali.
Questo è in realtà qualcosa di impostazione pari a qualcosa.
Stiamo mettendo il numero 17 nella variabile i.
Quindi, per fare questo tipo di confronto,
è necessario utilizzare il doppio uguale,
che è una specie di una cosa strana
ma è un errore abbastanza comune.
Quindi un'altra cosa farò notare, se non ti dispiace,
è che in
la nostra funzione qui a int main,
si vede che il corpo della nostra funzione
è compensato dalla sinistra
da 4 spazi o una scheda.
La ragione per cui lo facciamo
è solo per migliorare la leggibilità.
Come si può vedere in loop mentre Sam è qui,
egli non trattino a tutti,
e che non influenza la funzionalità del codice.
Verrà eseguito esattamente la stessa.
>> Così, per esempio, se si arriva fino in cima qui
e premete il nostro pulsante Play, intende costruire,
sara eseguirlo,
e che cosa succederà?
Perché ancora dire in esecuzione?
>> Perché ci continuano a ripetere hi.
Esattamente, e perché continuano a ripetere hi?
Poiché l'intero >> non cambia mai, quindi è sempre 17.
Sì, esattamente, in modo da
vediamo, dopo - mi ricordano il tuo nome?
Jimmy. Così Jimmy ha detto che
la ragione per cui questo continua a ripetere ad alta più e più volte
è perché questa condizione è sempre vera.
Non abbiamo mai cambiare il valore di i.
Non abbiamo mai modificare il contenuto di ciò che è memorizzato in quella variabile.
Quindi a questo punto abbiamo ottenuto questo errore
il programma di uscita generato troppo,
e se scorrere verso il basso e il tipo di sguardo a cosa sta succedendo qui,
si può vedere che si tratta di hi, hi, hi, hi, hi, hi, hi fino in fondo.
Awesome.
>> Così sorta di nuovo al punto di partenza
che avendo il rientro qui
nel corpo del ciclo while non pregiudica nulla.
Il programma ancora correva bene.
In genere per lo stile buona -
e questo è qualcosa che cerchiamo nei vostri set di problemi -
vi chiediamo di rientro questo 4 spazi, che si può fare
semplicemente premendo il tasto Tab
oppure manualmente mettendo in 4 spazi stessi.
Cool, va bene quindi cerchiamo di tornare indietro e guardare
Alessandro do-while.
Solo un pò >> avendo un po 'di problemi.
Ok, cerchiamo di lavorare attraverso di essa.
Va bene?
Sì >>.
>> Ok, ci siamo.
Questo è il codice che Alexander ha scritto.
Non si va da Alex - va bene.
Quindi, ecco il codice che Alex ha scritto.
Quindi, abbiamo avuto la nostra dichiarazione di principale proprio qui,
e poi abbiamo ottenuto questa variabile intera ho chiamato
essere stato dichiarato proprio qui.
Abbiamo una dichiarazione do
e poi il corpo di nuovo con questi apparecchi,
quindi questo è il corpo del do-while -
vorrei ingrandire questa quindi è più leggibile -
e nel corpo, che stiamo cercando di stampare "questo è il corpo",
i + +,
in modo da incrementare il contenuto di ie fare questo
fino a quando ho arriva a essere di 3,
e poi il nostro programma termina.
>> Che cosa succede quando si esegue questo programma?
>> Mi aspettavo un identificatore.
Ok, quindi creare, eseguire, errore si è verificato.
Che cosa succede?
Abbiamo scorrere verso il basso qui,
otteniamo questa cosa un po 'criptico, cercando,
previsto punto e virgola dopo la dichiarazione di livello superiore.
E 'un po' strano.
Qualcuno ha un'idea di cosa potrebbe essere successo?
Un po 'strano, sì.
>> [Incomprensibile] essere dichiarato al di fuori delle parentesi?
Quindi, non che si applica quindi quando si utilizza parentesi?
Così ha dichiarato questo tipo al di fuori del quale parentesi?
Oh, questi ragazzi - le parentesi graffe?
Sì >>.
Sì, esattamente.
Così si scopre che
non si può effettivamente dichiarare una variabile proprio qui in questo modo.
Che cosa si potrebbe avere cercato di fare è stato -
tagliare fuori di lì -
è possibile mettere all'interno delle parentesi graffe proprio qui
o un'altra alternativa
è quello di mettere completamente fuori.
E così questi - a seconda di dove effettivamente messo la dichiarazione
di tale variabile intera,
è possibile ottenere due tipi molto diversi di variabili;
quando è al di fuori del principale,
è ciò che noi chiamiamo una variabile globale.
È fuori dell'ambito di una qualsiasi delle funzioni -
non è all'interno di una funzione -
mentre se la mettiamo all'interno della principale,
come proprio qui, allora si chiama una variabile locale,
perché è locale per il campo di applicazione principale.
E parleremo un po 'di più su quali siano le differenze
tra i 2 tipi e perché si utilizzano diversi tipi di variabili,
ma per ora,
si può solo continuare a tutte le variabili locali,
perché non abbiamo alcun bisogno di variabili globali.
>> Ok, allora questa è una cosa che proprio lì.
Proviamo l'esecuzione di questo nuovo, vedere cosa succede.
Eseguire, ottenere un altro errore.
Zoom in un po ', cosa otteniamo?
Otteniamo questa parentesi previsto dopo do / while.
Tutte le idee che cosa sta succedendo? Dan?
>> E 'l'allora parentesi po' e poi -
Non so se avete bisogno di redeclare int,
ma il do while (i <3).
Esattamente, si '.
Così si scopre che Dan è esattamente vero.
Non abbiamo bisogno di mettere questo tipo di nuovo qui.
Possiamo invece uccidere il tipo
e fare solo quello.
Bene.
Io lo zoom indietro, provare ancora una volta.
Guardate che, gestisce con successo.
Se scorrere verso il basso, "questo è il corpo" stampato 3 volte.
Questo è abbastanza dolce.
Ben fatto, ben fatto, ragazzi.
Ben fatto.
Come sta andando questo fino ad ora?
Ritmo decente?
Ok, fresco.
>> Così, mentre i tipi di tornare alla domanda iniziale,
noi - e ora se vediamo la differenza,
si vede che in questo ciclo do-while,
la condizione è l'ultimo.
Così come il computer legge il programma
in quanto i programmi C sono eseguiti in questo tipo di ordine sequenziale,
dove letteralmente iniziare con la prima riga del principale,
e quindi eseguire la linea 6, linea 7, linea 8, linea 9,
linea 10, linea 11,
tutta questa roba in alto a destra qui
sta per eseguire una volta
prima abbiamo mai verificare questa condizione per vedere
con o senza i - o il contenuto di i, piuttosto -
sono meno del numero 3.
E solo se una volta si arriva a linea 12,
il contenuto di i minore di 3
possiamo veramente tornare indietro fino alla linea 7
e poi ripetere il processo,
e poi verificare la condizione ancora e ancora e ancora.
>> Così siamo in grado di contrastare questo
con - zoom indietro,
scorrere fino alla versione di Sam,
dovremo guardare a questo, un po 'modificata in modo che non è più un ciclo infinito -
dove se lo zoom,
vediamo che mentre il programma viene eseguito,
sta andando a dichiarare prima int i,
impostare il contenuto di i sia a 0,
e poi colpisce la condizione del primo ciclo, mentre,
quindi in questo caso, questo corpo, questa printf ("ciao") e i + +
non addirittura eseguire
salvo i è effettivamente inferiore o uguale a 2.
Quindi, se i è 3, per esempio,
se si imposta questa qui
pari a 4 - o farò 3, perché ho detto 3 -
e quindi eseguirlo,
sara costruzione, sarà eseguito tutto bene,
ma non sarà effettivamente stampare qualsiasi cosa,
perché non è riuscito che prova per il primo caso.
Quindi, in classe, tipo di parlato perché questi do-while
sono utili talvolta
e perché userebbero invece di un ciclo while.
>> Ci sono - voi ragazzi avete qualche suggerimento
del motivo per cui un ciclo do-while potrebbe essere più utile?
>> Beh, credo che do-while è se si vuole l'input dell'utente,
perché in questo modo si può far loro
mettere qualcosa in una volta, se è corretto,
possiamo passare al resto del programma,
ma se non è corretta, allora si continua a chiedere conferma all'utente
finché non si inserisce il giusto input.
Sì, esattamente - esattamente,
quindi un ciclo do-while è utile
perché quando la richiesta di input dell'utente
perché è necessario per ottenere l'input dell'utente prima di poter effettivamente verificarlo.
Così in pset 1, in pset 2,
dove si sta la richiesta di input all'utente un sacco,
questa è una cosa a portata di mano da usare
piuttosto che semplicemente un ciclo while semplice.
Se si utilizza un ciclo while, è possibile fare la stessa cosa -
si può fare la stessa cosa con un ciclo while
come si fa con un ciclo do-while.
Devi solo avere questo tipo di processo duplicato
dove si ottiene il primo ingresso e poi avviare il ciclo while.
Considerando che un ciclo do-while, basta scrivere una sola volta
ed è molto più pulita.
>> Bene.
Hai ancora domande?
Ha senso?
Il ritorno >> 0 - che è solo una specie di stallo o è -?
Si ', in modo che possiamo -
bene, vedremo questo un po 'più tardi
ma si scopre che
questo 0 ritorno che abbiamo messo
a fine principale tutto il tempo -
è possibile un pò basta prendere come qualcosa che facciamo
per il momento.
Quello che abbiamo iniziato a parlare con le funzioni
tipo che alla fine della scorsa settimana e poi di nuovo questa settimana
è una funzione che
prende gli ingressi che sono queste cose all'interno delle parentesi;
questi sono 2 ingressi, i nostri argomenti o parametri,
quello che stanno anche chiamata alla nostra funzione principale,
quindi una funzione produce un'uscita
che noi chiamiamo un valore di ritorno.
E il valore di ritorno nel caso di questo principale è int,
questo intero,
e il modo di raccontare una funzione, "Ehi, questo è ciò che l'output
sta per essere, "è con questa parola" ritorno ",
quella parola chiave, piuttosto,
e così principale restituendo 0
o principale l'output 0
è standard nei programmi C
perché restituendo 0 da mezzi principali che
"Ehi, tutto eseguito con il mio programma proprio bene."
Se dovessimo mettere qualcosa di diverso da 0,
come 1, per esempio,
che viene usato per dire chi l'esecuzione di questo programma
che qualcosa è andato storto.
Così come si ottiene più coinvolto con la roba sul semestre,
se siete mai bisogno di dire,
"Oh, sai, qualcosa è andato storto con questo programma,"
piuttosto che avere il mio crash del programma, voglio informare
il corridore del mio programma che qualcosa è andato storto,
è possibile utilizzare il valore di ritorno,
come lo chiamiamo noi, non e '0.
>> Così vedremo che un po 'di più
una volta arrivati ​​in funzioni.
Questo genere di senso?
Va bene.
Le funzioni sono un po 'bizzarro -
Penso che per le persone che hanno un sacco di sfondo matematica,
si tratta di un po 'più facilmente,
soprattutto se si dispone di sfondo matematica un po 'più astratto
e siete abituati a parlare di funzioni
e tutto quel genere di cose.
Ma cercheremo di coprire
e vai bello e lento come sono venuti fuori.
Allo stesso modo, questo int argc tutto,
char * argv [],
per ora, si può anche prendere che come piastra della caldaia.
Abbiamo iniziato a coprire quelle un po 'in conferenza
quando si parla di argomenti che vengono passati in programmi sulla riga di comando,
ma nei tuoi set di problemi e dei vostri programmi,
è del tutto bene solo per scrivere nulla e mantenere le cose semplici.
E che cosa questo significa è che vuoto
"Ehi, principale non sta per accettare gli ingressi;
questo è solo un programma che stiamo andando solo correre.
Non stiamo andando dare nessuna informazione aggiuntiva
ogni volta che lo avvio in esecuzione. "
Quindi per ora, si può fare questo;
si può anche omettere anche lo 0 di ritorno
alla fine dei vostri programmi e faranno girare bene,
ma mi raccomando solo di tenere trovi
In un paio di settimane, inizieremo a tipo di
tirare indietro il coperchio un po 'e capire di più su
tutte quelle diverse piccole parti in movimento.
>> Va bene, ora parliamo della nostra seconda domanda qui.
Che cosa significa "identificatore non dichiarato" di solito indicano
se emesso da Clang?
Penso che potrebbe avere visto che già oggi.
Qualcuno può dare un riassunto di quello che significa?
Vediamo un po ', Kelly - uno dei Kellys.
So >> -
Già, che cosa -
>> Penso che quando, come, non dichiarare le variabili e si tenta di usarlo.
Si, esattamente, esattamente.
Quindi, se avete mai visto questa uscita
quando si cerca di compilare il programma,
proprio come ha detto Kelly,
vuol dire che hai usato una variabile che non ha dichiarato,
quindi se vado di nuovo al nostro spazio,
e io fare qualcosa di simile
printf (
"Ciao% s")
e cercare di riempire in s% che
con s variabile a che non ho dichiarato nessuna parte
e cerco di farlo funzionare,
vedrai che mi deprimo a questo qui in basso a destra:
"L'uso di identificatore non dichiarato 's'";
questo significa che per te non ha dichiarato la variabile.
Stessa cosa succede se
avete x e si prova a memorizzare 7 in esso
e non ha dichiarato X.
Capisco che lo stesso errore:
"L'uso di 'x' identificatore non dichiarato".
>> Va bene,
in modo che il cifrario di Cesare, non essendo molto sicuro,
Lascio voi guarda questo breve, tipo di capire perché,
e, auspicabilmente, dopo aver fatto un problema di questa settimana impostare
in cui è effettivamente scrivere un cifrario di Cesare, capirete un po 'di più
su ciò che significa essere un sicuro e insicuro -
o non sicuro, credo - insicuro è leggermente diverso.
L'altra cosa è che abbiamo queste altre domande qui
sulle funzioni
e ciò che una funzione è,
e tipo di parlato brevemente quando abbiamo parlato di valori di ritorno;
per qualcuno che è stato a lezione,
si può riassumere che è stato a lezione oggi?
Bene.
Vediamo, vediamo quali sono - qualcuno può dirci che cosa è una funzione?
Kelly?
>> >> In pratica qualcosa che attingere a qualcosa che è scritto nella libreria che è
più complicato là, e poi basta scrivere un breve modulo di esso,
così come si sta facendo riferimento indietro a quella libreria, utilizzando
tutto questo codice lungo e [incomprensibile].
Sì, esattamente, e poi vuoi aggiungere qualcosa a questo?
>> Si ', ci penso più simile al concetto di una formula in matematica
dove basta scrivere una formula e quindi è possibile collegare le variabili in
ed è quello che una funzione è [incomprensibile].
>> Si ', quindi abbiamo un paio di risposte qui
che sono entrambi molto buona e giusta via.
Ci riferisce al codice che è stato scritto nella libreria da qualche parte
che è più complicato
e poi si può attingere il codice
e lo usa semplicemente scrivendo la forma breve di esso -
o, piuttosto, il suo nome -
e poi c'è anche questo confronto a una formula di matematica
o della fisica, tutto questo genere di cose
dove si ha una formula
e permette di collegare in
Le variabili da quella formula
per ottenere il risultato della formula,
così ci si pensa come come l'equazione di secondo grado.
Immaginate se invece di dover conoscere
ciò che la formula quadratica è in classe di matematica,
hai appena avuto un piccolo programma calcolatrice che ha fatto per voi.
Qualcuno utilizzare programmi di calcolo nelle classi di matematica al liceo?
Si ', lezioni di fisica?
Dove si può solo dire: "Ehi, formula quadratica.
Queste sono le variabili che voglio ingresso.
Ora dammi la risposta. "
Questo è il tipo di ciò che una funzione è.
E 'un modo per noi di
tipo di scrittura come un piccolo programmino sub
all'interno del nostro programma più ampio
e lo uso più e più volte
in modo che non c'è bisogno di copiare e incollare il codice,
siamo in grado di dare input e trova diverse uscite,
è super comodo
quando si sta cercando di scrivere programmi diversi in momenti diversi.
>> Così, per esempio, una funzione che abbiamo usato più e più e più volte
durante tutto il corso è printf.
È esso stesso una funzione printf
e si scopre che in realtà è un piuttosto lungo e complicato,
brutto cercando, funzione per scrivere.
Così semplice come sembra a noi
stampare roba sullo schermo,
perché tutti noi appena fatto che all'inizio di oggi la sezione,
si scopre che in realtà è, si sa,
un buon paio di centinaia di righe di codice.
Non è qualcosa che avrei mai voluto scrivere, di sicuro,
ma si arriva a usare ogni giorno, che è genere di freddo,
così si arriva a condividere con l'altro,
con diversi programmi,
così saremo immersioni più in funzioni;
per il momento, non siamo -
l'unica funzione che andremo a essere la scrittura è principale.
Principale stesso è anche una funzione,
e si può vedere il suo ha la sua uscita,
gli ingressi, come abbiamo parlato,
e poi il suo nome, che è principale.
Principale è una specie di - è una funzione speciale lì.
Nel programma C, ci deve essere una funzione principale,
e quindi per ora, abbiamo tipo di scrittura omesso
il prototipo, o la dichiarazione di, principale.
Abbiamo visto che a te,
e abbiamo appena avuto a compilare tipo di spazi vuoti.
>> >> Quindi per il set secondo problema, non abbiamo bisogno di
scrivere nella seconda funzione?
Io non lo credo.
Credo che sia tutto qui.
Sì, così Cesare Cipher,
che non è necessario, esso non sembra,
e Vigenère, non si sia,
così - e si scopre che non hanno mai realmente da scrivere
una funzione, giusto?
Si chiama sempre messo tutto il codice all'interno principale,
e molti programmatori farlo.
Come si passa,
iniziamo introducendo funzioni come un modo
per ripulire il codice,
per rendere più elegante,
nel caso in cui si dispone di compiti - un po 'come quando abbiamo parlato di cicli,
come a volte ci sono cose che si vogliono fare ancora e ancora e ancora,
e hanno una specie di modo ingenuo -
o ciò che spesso chiamiamo "uomo di paglia" soluzione,
è quello di copiare e incollare solo più e più volte -
si può fare la stessa cosa con le funzioni in cui è sufficiente copiare e incollare
lo stesso codice più e più volte,
ma che contribuisce ad appesantire il codice -
finisce per rendere il vostro codice molto lungo -
e diventa anche un po 'di confusione,
e allora vuol dire che non sei in grado di scrivere -
se si vuole usare quel codice di nuovo in un altro programma,
sei anche bloccato copiare e incollare di nuovo,
così una delle cose di cui parleremo è
tipo di design e lo stile dei vostri programmi,
e così quando ha senso tipo di
pacchetto di qualcosa e metterlo come una funzione separata,
vi invitiamo a farlo,
e questo è qualcosa che, ancora una volta,
non c'è una regola dura e veloce.
Raramente dire che è necessario scrivere una funzione chiamata tale,
ma è più di una di quelle cose che hai appena si sviluppano nel tempo
come scrivere programmi sempre di più.
>> Altre domande?
Okay, andiamo ora
Torna indietro fino a questo tizio qui,
quindi sono ancora in questa sezione di domande.
Abbiamo parlato di tutti questi differenti,
che cosa è una funzione, perché per scrivere le funzioni,
quando si può semplicemente copiare e incollare?
Speriamo di avervi convinto che la scrittura di funzioni è una buona cosa.
Ora passiamo a questo programma MySpace,
e passeremo un po 'di tempo a fare questo.
>> Allora, vediamo,
posso avere qualcuno letto questo per me?
Diamo Mikhaila - vi leggere questo per noi?
Vuoi dire >> indietro quando MySpace -
Ai tempi in cui MySpace era fresca.
>> "Ai tempi in cui MySpace era fresca,
era di gran moda a digitarla in questo modo.
Forse è ancora? Io non sono molto sicuro.
In ogni caso, con il CS50 Appliance,
Run CS50, CS50 o spazi,
scrivere un programma che richiede all'utente un messaggio
ed emette il messaggio con la sua prima lettera maiuscola,
con tutte le altre lettere nel caso alternata,
come per l'output di esempio di seguito,
testo in grassetto in cui rappresenta un po 'di input dell'utente.
Per semplicità, si può presumere che l'utente
sarà solo lettere minuscole e spazi di ingresso.
Si consideri questo problema l'opportunità di praticare;
non verrà chiesto di presentare questo programma. "
>> Awesome, grazie.
Così come Mikhaila detto,
ci accingiamo a scrivere un programma che myspaces codice.
Così ha fatto qualcuno di voi usa MySpace?
Qualcuno di voi dispone di account MySpace?
Oh, si, si!
E 'stato piuttosto fresco.
[Risate]
Lo so.
Incontri me stesso.
Quindi quello che stiamo cercando di fare è scrivere un programma
che passa attraverso
e con la prima lettera
e poi ogni lettera in seguito -
o ogni altra lettera poi, mi dispiace.
>> Quindi - e si può vedere in questo esempio,
questo è il modo in cui eseguire il programma,
e così questo è solo dicendo: "Stiamo eseguendo un programma chiamato a.out.
L'input che stiamo andando a darle
sarà richiesto.
Non stiamo andando fornire l'input sulla riga di comando. "
Se avete seguito tutte le lezioni
e sentir parlare di argomenti della riga di comando,
che una specie di quelli in cui - che la sintassi funky
al principale arriva con un int argc, tutta quella roba,
ecco che non stiamo usando che, noi non si tratta di nulla di tutto ciò.
Dobbiamo solo avere questo digitato dall'utente,
e poi questa seconda linea con la capitalizzazione di funky
è ciò che vogliamo che il nostro programma di uscita.
>> Quindi, piuttosto che utilizzare l 'apparecchio o Esegui, useremo Spaces,
perché abbiamo spazi,
e così se voi ragazzi sarebbe
ottenere il codice a guardare qualcosa di simile,
così ho intenzione di salvare questa revisione
solo così hai la piastra della caldaia proprio qui
che assomiglia a questo, int main (void), nulla in esso.
In realtà, quello che faremo è dobbiamo solo cancellare tutto insieme.
Vogliamo una tabula rasa,
perché non riuscirai a iniziare a scrivere codice;
piuttosto, stiamo per provare a scrivere un po 'di pseudocodice
che in realtà significa solo che andremo a scrivere qualcosa che non è il codice
questo tipo di descrive ciò che vogliamo fare,
un po 'come Davide fece il primo giorno di lezione,
o credo che era il secondo giorno di lezione quando ha fatto la demo tutta calzini.
Voi ricordate che - vedendo i calzini?
Giuseppe era lì tipo di digitare in lingua inglese?
Quindi faremo la stessa cosa.
>> Così, quando mi metto a scrivere pseudocodice,
Mi piace iniziare a guardare a ciò che l'ingresso sarà.
E mi concedo un caso campione,
così come "thanks for the add!"
E poi ho anche scrivere quello che voglio che l'uscita sia,
che in questo caso è qualcosa di simile.
E questo tipo di mi dà un buon posto, come, iniziando a pensare,
"Va bene, voglio prendere la linea 1
e voglio trasformarlo in linea 2, "
e quel tipo di aiuta a guidare il mio pensiero.
Questo è un buon punto di partenza.
Un altro modo di pensare, anche, come abbiamo razza di andare avanti
e come si esegue questa operazione nei vostri programmi, è quello di
pensate un po 'come quali sono i casi limite di questo?
Quali sono i tipi di scenari strani?
Quali sono gli ingressi strani che si potrebbe ottenere?
E quali dovrebbero essere tali uscite simile?
Ad esempio, un ingresso strano
Sarebbe questa,
creazione assolutamente nulla,
come quello che dobbiamo produrre in questo caso?
Una cosa che voglio pensare, anche.
>> Così come una domanda,
quello che potremmo voler uscita?
Se non si ottiene alcun input a tutti, quello che dovrebbe essere il nostro programma di emissione?
Niente >>.
Niente? Suoni grande.
Quindi vogliamo fare in modo che non stiamo scrivendo nulla
se non si ottiene nulla trovi
Cool. Va bene.
Così
Io vado a chiamare un paio di persone, come andiamo attraverso
e solo capire un po 'come quello che l'algoritmo generale
e noi tipo iniziare a lavorare tutto questo insieme.
>> Allora, vediamo. Missy.
Come pensi che ci piacerebbe iniziare?
Quale potrebbe essere un buon punto di partenza qui
se vogliamo trasformare, ad esempio, la linea 1
in linea 2?
Puoi solo tipo di spiegare a me, in inglese, a cosa stai pensando?
Non fanno così anche preoccupare di codice.
Cosa >> Per prima cosa vorrei fare sarebbe quella di
tipo di indirizzare l'utente a dire loro quello che vuoi.
Ok, quindi, ad esempio,
"Ehi, utente. Voglio
una stringa "- fantastico.
Quindi cerchiamo di scrivere questo in giù.
Richiedere all'utente per una stringa.
Che suona come un buon inizio.
Bene.
Chiediamo Kelly Ren questa volta.
Che cosa abbiamo poi vuoi fare dopo?
Che tipo di nostro prossimo -?
>> Raccogliere il loro contributo e conservarla come una variabile.
Grande.
Quindi raccogliere la stringa,
memorizzare in una variabile.
Quindi non vi è niente di speciale che vogliamo fare qui?
Vogliamo controllare il loro ingresso
prima -?
Sì >>.
Che cosa potrebbe vogliamo controllare?
>> Beh, hai detto che non c'è bisogno di controllare se si tratta di un numero, giusto?
Perché suppone che è minuscolo?
Gia '.
>> Così si scopre che - si '.
Così getString è garantito per restituirci una stringa.
E non ha intenzione di restituire un numero a noi o qualcosa di simile.
Ci potrebbero essere caratteri numerici all'interno di tale stringa, però.
E quelli, possiamo ignorare come abbiamo fatto la capitalizzazione.
Ma una stringa vuota è del tutto soddisfacente,
quindi il caso qui sulla linea 4 e 5,
destra, dove non c'è alcun ingresso,
e abbiamo messo nulla come la nostra produzione.
Non ci si deve preoccupare di fare in modo che ci sia qualcosa nella stringa
o che la stringa è di almeno 4 caratteri;
qualsiasi cosa va bene.
Quindi questo è in contrasto, ad esempio, con programmi come i centesimi che hai scritto
dove si doveva fare in modo che stavano ottenendo numeri non negativi;
si doveva fare in modo che si stavano ottenendo il corretto numero di giorni in un mese.
E come state facendo questo?
Come hai fatto test?
Cosa che richiedono l'utilizzo di?
>> Do-while.
Do-while; altri tipi di cicli, anche, sì.
Così si scopre che non è necessario utilizzare un ciclo in questo caso,
quando stiamo spingendo per una stringa, che è una specie di piacevole.
>> Va bene, andiamo avanti.
Così, Stella.
Puoi dirci un po 'di quello che dovremmo fare?
Così ora abbiamo la stringa, abbiamo memorizzato in una variabile;
che cosa dobbiamo fare con la stringa?
Abbiamo bisogno di >> -
identificare il 2 -
Sì, basta dirlo in inglese, che è impressionante.
Identificare i >> [incomprensibile] capitali - o, in maiuscolo.
Gia ', in modo che ci identificare quali sono lettere maiuscole e minuscole.
Non possiamo in maiuscolo o minuscolo finché abbiamo individuato quali.
Quindi mettiamo che qui dentro.
>> Così, proprio pensando a questo processo,
come si fa a fare questa identificazione?
Sai, Dan?
Tipo di ciò che - lo strumento che avremmo dovuto utilizzare fuori dalla nostra cassetta degli attrezzi?
>> Avevo messo in qualche modo in come un array o ogni riga
è la sua scatola proprio piccolo,
e poi da lì in maiuscolo o meno.
Ok, quindi uno strumento che possiamo usare è un array.
Che cosa dobbiamo guardare nella stringa,
però, per capire - abbiamo dovuto guardare i personaggi.
>> Quindi hai avuto modo di guardare la lunghezza della stringa?
Gia ', cosi parte di questo è sempre la lunghezza della stringa.
Solo per curiosità, che cosa si usa per ottenere la lunghezza di una stringa?
Strlen >>?
Si ', strlen, chiamiamo questo "strlen"
Tutte queste funzioni di stringa, in modo da strlen è una funzione,
ed è super comodo, perché si può usare per dire basta,
Ehi, strlen: Ecco una stringa, mi dica quanto è lungo.
Nella lezione di oggi, David parlato molto di come strlen è implementato,
quello che sta realmente accadendo dietro le quinte.
Ma questo è uno di quelli molto maneggevole.
Ci sono altri che sono anche nella libreria stringa,
come strcmp, che è scritto "strcmp",
che viene utilizzato per confrontare le stringhe tra loro.
Gli altri si utilizzerà come strstr,
che è buono per la ricerca di sotto-stringhe e così via.
Per la maggior parte, tutti iniziano con str e poi passare ad essere qualcosa d'altro.
Il motivo per cui in realtà non li scrive come la corda e così via
è perché nel come i primi giorni di C,
quando le persone erano prima scrittura e tutto il resto,
avevano limitazioni sul numero di caratteri che è possibile utilizzare
per i nomi delle funzioni e nomi di variabili,
quindi tutto è come Super condensato.
Ma ogni volta che vedi qualcosa che inizia con str,
che significa in genere questo ha qualcosa a che fare con una stringa.
>> Ok, quindi hai avuto modo di ottenere la lunghezza della stringa,
e poi, cosa facciamo con i personaggi?
Sai, Sam?
>> Non ho idea, ho cercato di capirlo.
Io davvero non lo so - Vorrei che ci fosse un modo per -
Voglio dire, io credo che forse potremmo fare qualcosa con pari e dispari,
ma io non sono a conoscenza di qualsiasi funzione del genere.
Gia '.
>> Ma che - non necessariamente funzionare,
perché allora si dovrebbe ottenere gli spazi di essere -
si dovrebbe avere lo spazio per ricevere consigli su come -
Va bene.
>> Non lo so - Sto tipo di perdita, a questo punto.
Si '- no, no, no, questi sono punti buoni.
Quindi quello che dobbiamo fare è, come Sam ha detto,
abbiamo bisogno di tenere traccia di quali lettere sono le lettere dispari,
e quali sono le lettere pari.
Ma noi vogliamo fare in modo che non stiamo solo guardando
a pari e dispari
indici della stringa,
ma guardando le lettere dispari e pari nella stringa,
quindi abbiamo bisogno di avere un pò questa distinzione tra
lettere - come quello che in realtà è A, B, C, D, e così via,
e ciò che le cose non sono lettere, ma ancora nella nostra stringa.
Per esempio qui, in questo punto esclamativo non è una lettera,
ma è ancora parte della nostra stringa, è ancora un char.
Analogamente, tutti questi spazi -
non ha senso di capitalizzare uno spazio, giusto?
Quindi vogliamo fare in modo che in qualche modo saltare quelle
pur continuando a monitorare i pari e dispari.
>> Quindi, nel nostro tipo di strumenti di programmazione
finora, se si vuole,
abbiamo una serie di diversi strumenti che abbiamo parlato.
Quindi uno, per esempio, sono variabili,
come abbiamo già parlato qui.
Un altro strumento di cui abbiamo parlato sono funzioni.
Proprio per questo abbiamo parlato di variabili nel nostro pseudocodice qui
come quello che abbiamo intenzione di utilizzare per memorizzare la nostra stringa.
Abbiamo parlato di funzioni per ottenere la lunghezza di una stringa, come strlen.
Abbiamo parlato di qualcosa d'altro, e abbiamo parlato
per una partita in precedenza nella sezione oggi: loop.
>> Cosa ne pensate voi ragazzi di usare un ciclo in questo programma?
Jared, cosa ne pensi?
Sarebbe usiamo un ciclo in questo programma?
>> Probabilmente no, no, perché non devono passare più di una volta.
Ok, non c'è bisogno di passare attraverso quello che più di una volta?
>> L'intera stringa.
Giusto, quindi non c'è bisogno di passare attraverso l'intera stringa una volta.
Mi dispiace che ha assolutamente senso!
Non c'è bisogno di passare attraverso l'intera stringa più di una volta.
Va bene.
Cosa ne pensi?
>> Penso che è meglio usarli
in modo che possiamo fare come capitalizzare mentre
la posizione di esso è il numero [incomprensibile].
Grande, e così capitalizzare cosa?
Ok, quindi stiamo dicendo che
dovremmo usare un ciclo perché vogliamo
una lettera in maiuscolo, mentre non è un numero.
Così - mi dispiace, volevi aggiungere?
>> Stavo per dire che il modo di trattare la stringa
e [incomprensibile] a parte il [incomprensibile] sui personaggi?
Gia '.
>> E poi siamo in grado di assegnare i numeri a -
o in base alla posizione delle lettere nella stringa?
Gia '.
E >> identificare se è pari o dispari e di capitalizzare la stessa lettera
mentre la posizione della lettera è [incomprensibile] - dispiace.
Grande.
>> Quindi, solo un riassunto.
Può mi ricordi il tuo nome - mi dispiace.
Charlotte >>.
Charlotte, va bene.
Così che cosa sta dicendo Charlotte,
che è totalmente di destra - Accidenti, questo piace ad auto trattino su di me -
è che se guardiamo a una stringa
come quello in alto -
"Thanks for the add" -
come una sequenza di caratteri
dove la posizione è a 0,
l'h corrisponde alla posizione 1.
A è a 2, poi abbiamo ottenuto 3, 4, 5;
lo spazio è in posizione 6.
Considerato che: - qual è la posizione di f?
7!
O? 8.
R? 9.
E poi abbiamo 10, quindi non posso davvero scrivi senza di essa
un pò disordinato ottenere sullo schermo.
Ma questo è in realtà il modo in cui si può parlare di stringhe in memoria.
Si tratta di una stringa
è una sequenza di caratteri,
e quando ci si riferisce a un singolo carattere in una stringa,
che spesso lo fanno facendo riferimento alla posizione di quel personaggio
all'interno della stringa,
probabilmente il modo stesso in cui si parla di settembre
è il nono mese dell'anno
o Lunedi è il primo giorno della settimana.
Quindi questo ci fornisce un modo per
capire quali sono dispari rispetto anche
perché si può vedere qui,
se la corrispondenza con questa T,
si può vedere che tutti quelli capitalizzati
sono anche posizioni,
almeno per la prima parola,
e poi le cose si buttato fuori una volta abbiamo raggiunto quello spazio,
perché noi non contano questo spazio come una lettera,
quindi è come se abbiamo iniziato
e andò 0, 1, 2, 3, 4, 5,
spazio, 6, 7, 8, spazio,
9, e poi 10, 11, 12, e così via.
>> Cool, quindi sicuramente ci vuole utilizzare una sorta di ciclo
di andare oltre tutti i personaggi a turno.
Quindi, a questo punto,
torneremo al nostro pseudocodice vecchio qui.
Come parte di questa identificazione di quali
sono in maiuscolo e quali sono minuscole,
dobbiamo provare a fare questo in una sorta di loop.
Loop, colon.
Che tipo di ciclo, fuori dei tipi di cicli che abbiamo,
sembra essere una buona da usare in questo caso?
>> Stavo pensando il ciclo for.
E perché stai pensando per il ciclo?
>> Perché parte da zero, e poi
quando si raggiunge la lunghezza della stringa,
e poi ogni iterazione si può [incomprensibile], anche tu?
Sì, esattamente.
Così, dalle diverse scelte di loop,
abbiamo cicli for, while e do-while.
Quando un ciclo for è particolarmente utile
è quando si vuole sapere
tipo di dove siete nel ciclo,
quante volte il ciclo è stato eseguito finora.
Che è esattamente quello che vogliamo sapere in questa situazione,
come ha detto Kelly,
in base al largo del commento precedente di Charlotte che vogliamo conoscere la posizione
del carattere all'interno della stringa,
e il ciclo for ci darà proprio questo,
perché se cominciamo tipo di guardare indietro alla nostra stringa,
se iniziamo il nostro ciclo per 0,
e saliamo attraverso la lunghezza della stringa completa,
allora siamo in grado di associare la lettera T
con lo 0 nel nostro ciclo for,
con la lettera H 1 nel nostro ciclo for, e così via,
percorrere la via fino alla fine della stringa.
>> Quindi cerchiamo di iniziare a scrivere codice presente solo un po '
così voi avere un'idea di come si presenta.
Io vado a salvare questo,
quindi abbiamo ottenuto il nostro pseudo codice qui dentro,
e ho intenzione di cancellare tutto.
Così ho una tabula rasa.
Iniziero 'scrivendo int main (void)
{
Vado a mettere lo 0 ritorno in
e quindi il}.
Quindi di solito quando inizio a programmare, questo è quello che inizia con.
Io salvarlo in modo che voi ragazzi ce l'hanno.
Così una delle prime cose di cui abbiamo parlato è stato
avere un input da parte dell'utente
e riporlo in una stringa.
Come si fa a ricevere l'input da un utente?
GetString >>.
GetString, va bene.
Quindi, se di tipo I GetString ()
e una virgola.
Proviamo l'esecuzione di questo, sarà questo percorso, prima di tutto?
E perché non sarà questo correre?
>> È necessario dichiarare la variabile.
Devo dichiarare una variabile. Va bene.
>> Allora, come faccio a farlo?
Ti dispiace scrivere qualcosa, condividerlo?
E poi siamo in grado di tirare su.
Vediamo, Dan, a destra, va bene.
Or Daniel. Ricevuto in, ingresso stringa = GetString ().
Awesome.
Sarà questo correre?
Proviamo.
Hit di esecuzione, il codice sorgente di caricamento, la costruzione, un errore.
Va bene.
Così che cosa sta succedendo qui?
L'uso di 'stringa' identificatore non dichiarato.
>> Dobbiamo includere le librerie?
Sì, così Dan dicendo che dobbiamo includere le librerie.
E 'questo che stavi per dire, Stella? Awesome.
E 'fantastico, così Stella, è possibile
copia questo codice su Spazio di Daniel?
Se si fa clic su Daniel Roland Ki, copiarlo,
e allora si mette la linea includono, e poi salvarlo fuori?
Fammi sapere quando sei pronto.
Quindi questa sintassi di inclusione è anche sorta di funky;
c'è come quel tag hash,
e c'è di inclusione, e poi ci sono queste parentesi angolari.
Ti ricordi come questo funziona, o devo mettere su questo codice proprio qui?
>> Sto bene.
Va bene.
>> Ho stampato - non ero sicuro di quale libreria, però.
Oh, va bene - sì, quindi è la libreria CS50.
>> Oh, ho messo libreria stdio.
>> Oh, ha ottenuto - si ', no, that's -
così si scopre che la stringa è in realtà qualcosa che è speciale per CS50.
C'è in realtà non è un tipo stringa vera
perché proprio qui, stringa è in posizione di tipo, -
stiamo dichiarando un ingresso variabile chiamata di tipo string -
e stiamo mettendo dentro di ingresso
il valore che viene restituito a noi: l'uscita di questa chiamata di funzione GetString.
Si può dire questo è una chiamata di funzione, perché ha le parentesi, proprio come fa printf,
proprio come strlen fa.
Ma stringa non è in realtà un tipo reale
nel linguaggio C.
Ce l'abbiamo fatta in un tipo, e ci vorranno circa altri quello che è in realtà
in C, perché c'è un modo di lavorare con le stringhe;
abbiamo appena fatto qualcosa per farlo sembrare un po 'più bello.
>> Quindi qui si va.
Ecco il codice di Stella.
E 'ottenuto il # include .
Altre persone si chiamano come un hash sono talvolta o un forte comprendono.
Ora possiamo avviarlo, eseguirlo,
e abbiamo ancora un errore.
Vediamo cosa sta succedendo.
"Variabile non utilizzato 'input'."
Ok, va bene, va bene.
Voglio dire, non è davvero cool,
perché stai ricevendo un errore e non è in esecuzione,
ma cosa sta dicendo è che
non abbiamo usato la nostra variabile, che ha un senso.
Non abbiamo cercato di fare qualsiasi cosa con esso.
Questo è un modo che
Clang sta cercando di aiutarci a fare in modo che non stiamo solo usando le variabili
e poi inavvertitamente chiamandoli qualcos'altro più avanti nel nostro codice,
aiuta ad evitare gli errori in questo modo.
>> Va bene, allora abbiamo di input da utente,
abbiamo memorizzato in una variabile.
Il passo successivo è stato quello di allora
iniziare a guardare tutti i caratteri della stringa
e individuare quali devono essere maiuscoli
e quali devono essere in minuscolo.
E come Kelly e Charlotte cresciuto,
lo facciamo con un ciclo for.
Così qualcuno ricorda la sintassi di un ciclo for
e vorrei prendere una pugnalata a solo scrivere
la prima riga del ciclo for, proprio per il bit?
Kelly, vuoi fare un tentativo?
>> Si ', in modo da avere per inizializzare in primo luogo,
così ho messo i = 0,
e poi ho fatto i <strlen ().
E 'nel vostro spazio - posso tirare su?
>> Si ', ho fatto un casino un po', ma si '.
>> Okay, tirarlo verso l'alto.
Awesome.
>> Ma poi io non so se hai fatto che -
Si ', va bene.
Quindi, ecco quello che Kelly ha: guardiamo rapidamente.
Quindi lei è incluso il CS50 biblioteca in alto.
E 'incluso nella libreria standard IO nella parte superiore,
e il IO standard ha funzioni come printf,
quindi se si vuole usare printf, è necessario che la linea.
E poi ha incluso la libreria stringa,
che abbiamo bisogno,
perché la libreria stringa ha strlen funzione,
che ci arriveremo tra poco.
Quindi, se guardiamo a quello che Kelly ha fatto qui,
ci puoi camminare attraverso quello che hai fatto?
>> Si ', quindi - voglio dire, ho avuto errori, così -
Si ', no, E'-
>> Così ho voluto chiamare la stringa che ho ottenuto solo "stringa".
Volevo stampare la stringa
e poi -
Volevo come impostare la stringa come come un array di ogni carattere
essere diversi [incomprensibile], giusto?
E poi volevo iniziare alla posizione 0
e poi ogni 2 posti,
Stavo per capitalizzare,
quindi ho solo descritto come 23, perché stavo guardando la tabella ASCII.
Ecco, questo è quello che stavo pensando - Lo so che non è giusto.
>> Capito, quindi questo è un ottimo inizio.
Penso che un sacco del quadro è a posto qui.
Andiamo attraverso tipo di riga per riga e vedere cosa sta succedendo.
Quindi il modo in cui mi piace fare questo è solo iniziare la compilazione del codice
e lasciare che il compilatore mi dice come cosa c'è di sbagliato con il mio codice,
perché il compilatore è davvero bravo a raccontare che cosa è sbagliato con il codice.
Quindi, se si gioca, costruendo, e non costruire.
Dice che c'è stato un errore,
quindi se scorrere la pagina fino al primo errore,
ha detto -
abbiamo scorrere indietro fino alla cima,
possiamo vedere ci sono 5 gli errori generati qui in basso.
Oops, questo è davvero tagliato fuori.
Direi che è non solo andando a ottenere di meglio.
>> Ci siamo.
Quindi ci sono 5 errori totali generati.
Qui posso solo vedere il primo 2,
così posso spostare questo un po 'e poi specie di freccia verso l'alto.
Questo è il comando che è stato eseguito per compilare il codice,
e poi il primo errore era in file.c proprio qui:
"Atteso identificare o '('", ed è su questa linea
dove detta stringa = GetString ().
Potete vedere proprio qui che era sulla linea 8 di file.c,
e poi credo che questo è il carattere 12 - questo è l'errore.
Allora, cosa c'è che non va sulla linea 8 - Kelly?
>> Hai solo bisogno di chiamarlo, come, una lettera o qualcosa del genere,
come stringa s o qualcosa del genere?
Sì, così si scopre che questi nomi di tipo speciale,
così string, int, char, short,
sono tutte le parole chiave speciali,
e non si può effettivamente utilizzare come nomi delle variabili,
perché il compilatore vede che e dice:
"Oh, lo so che è un tipo,"
quindi non si può effettivamente avere una variabile stringa chiamata stringa,
come sto cercando di fare qui, questo non funzionerà.
Ma invece, si può chiamare qualcosa come s o v o str.
Abbiamo anche potuto chiamare int.
Non possiamo avere una stringa chiamata int.
Non possiamo avere una stringa denominata char; nessuno di quelli funziona.
>> Quindi ci limiteremo a chiamarla s per il momento.
Awesome.
Quindi cosa succederà sta succedendo in questa linea?
String - questa linea sembra piuttosto buono?
Facciamo dargli un'altra possibilità, cerchiamo di farlo funzionare.
Ok, quindi abbiamo ancora degli errori.
Questa volta, siamo scesi a 4 errori.
Così abbiamo ottenuto uno di loro.
Andiamo in alto.
"Nome del tipo di imprevisto 'string': espressione atteso," sì?
>> Si ', perché ho cercato di assegnare un nome alla stringa.
Sì, così sembra che ora anche andare fix
tutti questi riferimenti a stringa.
Si può vedere che c'è un riferimento alla stringa qui, uno qui, uno qui,
in modo da poter spostare tutti questi a s.
Grande. Ok, eseguire di nuovo.
Edilizia - un altro errore.
>> Ok, ora siamo scesi a un errore,
così int i = s e quindi le parentesi quadre.
Così ci può dire un po 'di quello che fai qui, Kelly?
Sì >>.
Era sulla linea 10.
>> Non so se avevamo bisogno di tutto,
ma penso che stavo cercando di -
Io salvarlo in modo da poter seguire.
>> Credo di essere stato
cercando di dirgli di iniziare a posizione 0
all'inizio del mio ciclo for,
quindi penso che forse dicendo che non era necessario.
Quindi, solo per ricapitolare,
stavi dicendo che questo - si stava tentando di avviare questo in posizione 0
e ottenere questo - sì,
quindi penso che prima, anche quando vi erano a piedi attraverso il codice,
stavi parlando di come si voleva trattare la stringa come un array
in modo da poter accedere a ogni personaggio singolarmente.
Penso che gli array di cui Dan, anche cercando di convertire le stringhe in array.
>> Si scopre che tipo di sotto il cofano,
una stringa è in realtà memorizzato come un array già,
e si può accedere come un array;
non c'è conversione che dovete fare.
A isnt stringa - così -
una stringa non è in realtà un array,
ma è possibile accedere in quanto tale, perché tutti i personaggi sono memorizzati
accanto all'altra in memoria uno,
quindi se si vuole ottenere il primo carattere della stringa,
è lo stesso come ottenere il primo numero intero in un array di interi.
Così abbiamo spesso - we'll
riferimento al 2 come
oh, come una stringa, come un array,
anche se davvero - Stanno cose molto diverse,
ma è possibile trattare molto simile.
Così si scopre che questa linea di fatto -
non abbiamo bisogno di fare alcuna conversione,
e in effetti,
questo in realtà non è un'espressione valida,
che è ciò che il nostro compilatore ci sta dicendo.
Sta dicendo: "Ehi, si attendeva una espressione,
e quello che abbiamo qui è un qualcosa che non è un'espressione. "
Per dichiarare un array,
tutto quello che dovete fare è qualcosa di simile a questo con un punto e virgola,
e poi vi dico la matrice per quanto tempo si desidera che sia,
come 5, quindi questa linea 10
si dichiara un array chiamato i con 5 numeri interi in esso.
>> Questa è una parte, questo non è necessario per il codice,
ma questo è - questo è una specie di ciò che la dichiarazione è simile.
>> Come non utilizzare i char [strlen (s)]?
Char i [strlen (s)]?
>> I char, e quindi all'interno della parentesi, strlen (s).
Sì, così abbiamo potuto -
abbiamo potuto fare questo,
e questo avrebbe dichiarato - che cosa sarebbe questo?
>> Penso che sarebbe dichiarare un array
di, come - di -
oh, non è necessario l'i - oh,
sì, è sicuramente non è necessario il i.
Per dichiarare un array di caratteri
di lunghezza s.
E allora cosa dire di Sam è che
questa linea 10 - mi permetta di mettere un po 'di spazio tra essa e il resto in modo che possiamo isolare -
questa linea 10 sarebbe dichiarare un array
di caratteri, strlen (s) del valore di essi,
ma in realtà abbiamo bisogno della i,
e il motivo per cui abbiamo bisogno di i è perché abbiamo bisogno di dare un nome la matrice;
altrimenti, non avremmo di fare riferimento alla matrice avanti nel codice.
>> Quindi questo qui è il nome della matrice
e all'interno è la lunghezza.
Questo ci darà un array,
ma questo è - ancora una volta, questa è una dichiarazione.
Non è un incarico, non è una inizializzazione.
Se si dichiara questo array come questo,
c'è in realtà nessun elemento del contenuto della matrice.
E 'solo spazzatura - tutto ciò che è dentro.
E come abbiamo detto,
in realtà non c'è nemmeno bisogno di fare questa conversione,
perché possiamo già trattare stringa s come una matrice.
So che stiamo correndo un po 'lungo il tempo,
ma voglio ottenere solo molto velocemente a questo ciclo for
e vi mostrerà come accedere ai singoli caratteri nella matrice,
perché questo è fondamentale per il nostro incarico.
E poi ti lasceremo passare da lì.
>> Così qui, abbiamo un ciclo for
che sembra quasi buono.
Che non è proprio quasi arrivati?
Coso - cosa non lo è va bene in questo ciclo for?
No >> parentesi graffe?
Nessun parentesi graffe, per una.
Vuoi fare in modo che abbiamo il corpo del ciclo con le parentesi graffe.
Oops, non il tutore quadrato!
E qual è la prossima cosa che dobbiamo fare con questo ciclo?
Se provo ed eseguirlo,
che cosa è questo errore che ricevo?
Ricevo tutti questi errori - devo inizializzare i.
Grande.
Quindi questo sarà un ciclo - questo non è tutto lì,
ma è sempre molto vicino.
Questo codice si può ora eseguire,
costruire, un errore si verifica ancora.
Perché è ancora lamentando,
dicendo che l'espressione è inutilizzato,
e questo perché questa linea non fa nulla.
Non l'abbiamo memorizzare ovunque, noi non ha salvato il risultato.
Dove dovremmo salvare questo risultato?
>> S o i?
Esatto, e questa sintassi funky,
questo s con le parentesi quadre
significa accedere alla i-esimo carattere di s.
Che sta per essere qualcosa che è realmente importante per l'assegnazione.
Purtroppo, stiamo andando ad avere per fermarsi qui,
in modo che la sezione Sebastian può entrare,
ma sono felice di rimanere al di fuori dopo e avrà tutte le domande.
Quindi grazie ragazzi per essere venuti.
Questo dovrebbe caricare, creare, eseguire.
Siamo in grado di inserire una stringa come "ciao"
e stampa "QOX".
[Risate]
>> Quindi non proprio lì, ma in movimento, sempre verso quei loop!
Grazie per essere venuto, e sarò fuori.