[Powered by Google Translate] ZAMYLA CHAN: Greit, alle sammen.
Velkommen til Walkthrough en.
Dette Walkthrough vil være på en pset, som er C. Jeg håper du
alle hadde det gøy med Scratch-prosjekter.
Så nå i denne gjennomgang, er vi faktisk kommer til å være
stand til å komme inn i C, komme inn å skrive noen maskinkode.
Så hvis du ikke var på Walkthrough 0, da disse
walkthroughs virkelig - vi kommer til å gå gjennom
oppgavesettet, snakke gjennom noen vanlige tips og teknikker
som du kan bruke.
Vi vil bryte oppdraget opp i håndterbare biter, slik at
dere kan komme i gang og forhåpentligvis
forstå hvordan du gjør det.
>> Okay.
Så en pset.
Den psets i år vil ha en struktur der det første -
Det kommer til å bli en del av spørsmålene, en serie
spørsmål som virkelig vil også hjelpe deg å komme i gang med
den pset, hjelpe deg å praktisere noen teknikker som du trenger.
Og så disse spørsmålene, jeg kommer ikke til å dekke i
walkthrough fordi i seksjon, din pålegges undervisning
stipendiaten er faktisk kommer til å gå gjennom de
spørsmål med deg.
På slutten av avsnittet ditt, vil du stikke av med
svar på disse spørsmålene, men også med tillit til at
du kan implementere noen av funksjonene som du vil trenge
for de sistnevnte deler av pset.
>> Pset en utgjør Mario.
Og det er en morsom liten program der egentlig vi
skrive og skrive ut en halv pyramide i typisk Mario scenen.
Og deretter den andre delen av pset kalles Greedy.
Og så i Greedy egentlig vi opptre som en grådig
kasserer, der hvis noen gir oss en mengde penger
som vi ønsker, regner vi det minimum av mynter som
vi kan gå tilbake til dem for å fortsatt gi dem dette beløpet.
>> OK.
Så hver walkthrough vil ha en verktøykasse.
Og igjen, kan du ikke bruke alle verktøyene i denne
verktøykasse eller du kan bruke dem alle.
I alle fall, det er virkelig godt å vite hva
du er utstyrt med.
Så vi har CS50 Appliance, som jeg skal vise dere og
introdusere deg til det.
Da også generelt, er god stil definitivt en av våre
viktigste verktøy.
Stil gjelder i hovedsak til hvordan lesbar er koden?
Når noen andre går og leser koden, har de
en lett tid?
Kan de forstå det?
Er det elegant?
Så får vi snakke om hvordan du får gyldig brukerens input i
programmet fordi både Mario og i Grådig, må du
be brukeren å legge inn og gi deg noen form for tall.
Så vi vil være sikker på at antallet er gyldig.
Deretter husker i Scratch, hadde vi blokker som Repeat,
Gjenta til, eller vente, eller Alltid.
Så vi kommer til slags oversette det til C nå og
se på løkker som for, mens, og gjør-stund.
Da også vi må også vise verdier tilbake på
skjermen, enten det er i Mario eller Greedy.
Og så skal vi snakke om hvordan vi skrive ut ting fra strenger til
heltall og flyter.
Og så til slutt, vil vi snakke om pseudokode, en virkelig
viktig begrep å huske hele dette kurset.
Det jeg finner hjelper meg mest med oppgavesett er å tenke og
beskrive hva jeg ønsker å gjøre før du tenker om noen C.
Men bare beskrive handlingen.
Så pseudokode er slags i mellom engelsk og C, type
beskriver prosesser uten riktig syntaks, men
gir en god nok struktur.
Og så vil jeg ha noen eksempler på pseudokode for deg også
i denne gjennomgangen.
>> Okay.
Så hva vi skal jobbe med er CS50 Appliance.
Det er egentlig en virtuell maskin som slags kjører en
datamaskinen inne din egen datamaskin.
Og dette har en rekke fordeler.
Det ene er at det er forhåndsinnstilt med en rekke verktøy som du vil
behov for CS50.
I tillegg betyr det at alle er på samme bakken,
enten Mac eller PC, eller et annet operativsystem.
Vi kan alle kjøre den virtuelle maskinen.
Og så er det instruksjoner på manual.cs50.net/appliance.
Og så hvis du går til denne linken og følg instruksjonene,
så forhåpentligvis vil du være i stand til å installere apparatet.
>> Så først, må du installere et program, en
selve programmet for å kunne kjøre den virtuelle maskinen.
Og så kan du laste ned apparatet.
Men igjen, det er instruksjoner på
manual.cs50.net/appliance.
Så jeg har allerede lastet ned min apparatet, og jeg har installert
det i VMware Fusion.
Og så når jeg lastet ned apparatet, gikk jeg til fil.
Jeg gikk for å åpne og deretter fant der jeg
lagret CS50 Appliance.
Og derfra, løp jeg det her.
Men jeg har den opp allerede her, så la oss ta en nærmere titt.
>> OK.
Så nå er vi inne CS50 Appliance.
Jeg gjorde det i full skjerm.
Du kan velge å gjøre det hvis du ønsker eller bare ha det som en
mindre vindu på skrivebordet ditt.
Her har vi bare en enkel desktop med
et hjem og en papirkurv.
Men hvis du går til Meny og deretter til programmering, så ser du
at vi har noe som heter Terminal.
Og så her kan vi navigere rundt datamaskinen vår.
Vi kan skrive kode.
Men faktisk, vil vi bruke et program som heter gedit, eller "g
redigere, "avhengig av hva som er.
Så vi skal bruke som en til å skrive kode.
Så du har disse to verktøy som du skal bruke primært
å skrive kode.
Så i tillegg er det akkurat som en vanlig datamaskin.
Vi har en nettleser.
Vi valgte Google Chrome.
Hva jeg har gjort er at jeg har satt opp en Dropbox å inneholde alle
dokumentene.
Og så det er noe som er svært oppmuntret.
Dropbox bruker sky synkronisering og så hvis -
så for eksempel noe ved en tilfeldighet - la oss håpe ikke -
skjer med apparatet, så det vil alle være
synkronisert på skyen.
>> OK.
Så de er programmer som du skal bruke i
CS50 Appliance.
Nå for å navigere rundt kommandolinjen.
Terminalen kan faktisk fungere som en slags måte å faktisk
skriver kommandoer inn i -
liker, hvis du er en Mac, en Finder.
Eller hvis du er i Windows, tror jeg det er utforske "min
datamaskin "eller noe sånt.
Så hvis vi går tilbake til apparatet, la oss åpne opp en
terminal-vinduet.
Så det har denne meldingen, jharvard @ apparatet.
La oss bare gjøre dette større.
Okay.
Så hvis vi skriver inn kommandoen ls, så det viser alle de
filer på datamaskinen, i vår nåværende katalog.
Kataloger er akkurat som mapper.
Vi bruker disse begrepene om hverandre.
Greit, så vi har listet opp de filene
som er i denne katalogen.
Hvis vi nå ønsker å få tilgang til, sier vår Dropbox, så kan vi
endre kataloger.
Så cd og deretter Dropbox.
Vi ls igjen, og så får vi se en liste over filer som er i
denne mappen.
Dette er analogt til meg kommer til mitt hjem, og deretter klikke
Dropbox, og deretter se listen her.
>> OK.
Så la oss si -
når dere kommer til å gjøre din pset en, la oss lage en
katalog som heter pset1.
Så vi er i Dropbox akkurat nå, som du kan se fra dette
spør her.
Så la oss gjøre en katalog.
Så mkdir, la oss kalle det pset1.
Og så nå hvis vi ls igjen, så vi
se at pset1 vises.
Og så hvis vi ønsker å gå inn pset1, så kan vi gå inn
mappen med kommandoen cd.
OK.
Så igjen, la oss se om vi -
si, la oss gjøre det på en annen måte.
Dette er analogt til bare sier "Opprett
en ny mappe, pset1.
Men som du finner, vil du være i samspill med
terminalen mye.
Så noen ganger er det mye enklere, mistet en raskere å bare
arbeide i terminalen for å gjøre denslags.
Okay.
Og så disse andre kommandoer.
Det er en rm for fjerne en fil.
Slik at du bare skriver rm og deretter navnet på
fil for å slette det.
Vi vil gå inn i noen eksempler på det senere.
Og så har vi noe som heter mannen kommandoen, som
bringer opp en manual for en type funksjon.
Igjen vil jeg ta opp et faktisk eksempel på det senere.
>> Så en annen veldig viktig verktøy, som jeg nevnte kort
før, er stilen.
Så egentlig, har stil å gjøre med lesbarhet.
Vil noen andre kunne lese, følge og
forstå koden?
Dette er spesielt viktig for deg, deg selv, faktisk.
Hvis du oppholder deg sent koding, og senere på deg
gå tilbake og du liker, hva betyr denne variabelen betyr?
Si, du arbeider på en gruppe prosjekt med noen, og du
begge må se på hverandres kode.
Det er veldig viktig at du navngi variabler riktig
og at det ser fint fordi det gjør hele forskjellen.
Men da fremfor alt, er vi i et kurs akkurat nå.
Så for interessen til CS50 og spesielt for din
undervisning stipendiater og veiskrapere som skal se på din
psets, please, please bruke riktig stil.
Og undervisningen Stipendiatene vil være ganske fornøyd.
Så igjen, omfatter stil innrykk ting riktig,
spesielt ved hjelp av tannregulering og innrykk dem.
Navngi variabler noe som gir mening.
Akkurat nå følger vi konvensjonen når du har
flere ord i variabelnavnet, så du
koble dem med en understrekning, som du ser i det
nevne eksempel der.
>> Så til slutt, heter noe magiske tall.
I hovedsak, når du leser gjennom koden og si
du har en variabel -
si, trenger du ikke en variabel, men bare si greit, inntil
og slik er mindre enn 10 år.
Så din grader kommer til å gå bra, vent,
hvor kom det 10 kommer fra?
Så egentlig forklare deg selv teller mye.
For å hjelpe deg forklare deg er kommentarer.
Kommentarer er trolig den viktigste å ta med i
programmene dine.
Og det hjelper deg ikke bare faktisk forklare -
det hjelper deg slags forklare ditt resonnement som
du kommer sammen.
Og så hvis du gjør det, igjen, det kommer til å være mye enklere
å gå tilbake i din kode og type forstå hva du er
gjør det.
Igjen, sorteringsmaskiner virkelig liker kommentarer.
Så du kommentere godt og -
typen som gratis poeng.
Og hvem liker ikke gratis poeng?
Du kan også ha flere linjer kommentarer.
Og så jeg inkluderte en slags mal her oppe.
Hovedsak, vanligvis disse brukes på toppen av
program til slags forklare generelt hva
problemet set.
Inkludere ditt navn, dato, et cetera.
Og så, som jeg sa i denne multi-line kommentar,
manual.cs50.net/style_guide har flere tips og regler om
stil for looper, et cetera.
>> Okay.
Så nå som jeg har fortalt deg litt om stilen, la oss se
dette i praksis.
OK.
Så her har Tommy skrevet oss en herlig fryktelig
eksempel på stil i et program.
Så du ser her, all right.
Dette er faktisk bra.
Du ser flere linjer kommentar her.
Du starter det med en skråstrek og deretter to stjerner.
Du fortsetter langs, samkjøre stjernene langs linjen
og deretter avslutte den med en asterisk og en skråstrek.
OK.
Så det er fint.
Dette her er fine.
Han inkludert hans biblioteker.
Men så her har han kommentarer over flere linjer.
Det er mange ting som er galt med dette.
Kommentarer over flere linjer, her han bruker
syntaksen for bare én linje kommentarer.
Han har også sammensmelting alt i samme kommentar.
Så vi ønsker å unngå det.
Så her ser vi at disse bukseseler, for eksempel, er alle
over alt.
Innrykk er feil.
Det gjør egentlig ikke vise deg definitivt der noe
starter og en annen ting ender.
Da også, ser vi at han har en definert variabel i = 5 her.
Men så dette fire kommer ut av ingenting, og det er ingen
kommentar til virkelig forklare hvor det kommer fra.
>> Okay.
Så la oss nå se på noe som er faktisk akkurat det samme
kode unntatt med bedre stil.
Så igjen, er dette den god stil eksempel
multi-linje eksempel.
Og så her er det ganske ren.
Vi ser at han begynner en hvis setningen her, går inn i en ny
linje, har en åpen spenne.
Så han har et innrykk.
Han holder denne innrykk -
han holder denne indikasjonen uniform over hele
program og virkelig viser når en blokk med kode starter når
en blokk med kode slutter.
Dette kan virke litt pirkete på vår side for å begynne
med, men du vil se som du skriver koden.
Dette er svært nyttig for å kunne skille ut dette.
Og igjen, dine klassinger virkelig liker det.
Og så ser du, i stedet for bare å sette et tall i
der, han faktisk oppkalt de variable iterasjoner.
Og slik at vi ikke faktisk ser på denne koden akkurat nå
men bare slags se et eksempel på
gode mot dårlig stil.
Og så hvis du ser på dem side ved side her, ville du
definitivt foretrekker å lese en til høyre.
>> OK.
Så en siste ting før vi dykke inn i den virkelige kjøtt av
pset er hvordan å kompilere og kjøre koden din.
Og så egentlig når du skriver C, det er faktisk ikke
oversatt til den virkelige maskinkode, nullpunktene og
de som maskinen kan faktisk lese og tolke.
Så vi har noe -
Clang er en kompilator som vi bruker for C.
Det er mange kompilatorer.
Men i CS50, vil vi bruke Clang.
Og så Clang oversetter utgangspunktet fra C til maskin
koden for deg.
Så la oss se på et eksempel - dykk inn i Appliance her.
OK.
Så akkurat nå er vi i vårt hjem katalog.
Vi har faktisk ikke hvor noen kode er.
Så la oss endre vår katalog til Dropbox/walkthrough1, hvor
Jeg har lagret noen kode.
Så hvis vi trykker på ls, så ser vi at jeg har en
par av filer i her.
>> OK.
Så jeg har allerede skrevet hallo.c, så la oss lage det
og deretter se hva den gjør.
Så en grunnleggende Kompileringskommandoen ville være clang da hallo.c,
hovedsak si greit, kompilere hallo.c for meg.
Jeg klikker Enter, synes å ha gått rett.
La oss klikke ls igjen.
Dette a.out filen har nå vist.
Og så a.out er en kjørbar fil.
Så for å kjøre den, gjør du en. / A.out.
Og så ser vi at dette hallo.c programmet tilsynelatende
skriver ut hallo fem ganger.
OK.
Men sier at vi ikke ønsker å bruke navnet a.out.
For eksempel ønsker vi å kjøre hallo program fordi det
gjør det lettere å forstå.
Så la oss si clang hallo.c, og deretter egentlig du trenger
å passere i noen ting som kalles flagg.
Så å si okay, vel jeg vil nevne dette noe annet.
Du kan også sende inn en rekke ulike flagg,
som du vil se.
Så flagget for å navngi et program noe som du
ønsker er-o.
Etter-o, skriver du navnet på programmet.
La oss bare kalle det hallo.
>> Så nå ser vi at vi faktisk har en Hei kjørbar fil.
Så vi kan kjøre den, og det gjør det samme som før.
Så nå som vi har hello, kan vi også fjerne, for
eksempel vår a.out.
Så rm for fjern, a.out, vil terminalen be deg, spør
for deg å bekrefte om du virkelig ønsker å
slette den eller ikke.
Vi sier y for ja.
Og der vi går.
A.out er borte.
OK.
Men noen ganger det blir forvirrende å huske alle
flagg som vi trenger for å inkludere og skrive ut clang.
Og som vi ser når vi bruker mer komplekse programmer, vil vi
være inkludert forskjellige biblioteker.
Og så våre kommandoer til Clang bli lengre og lengre.
Så inkludert i CS50 Appliance er merke kommandoen.
Slik at du bare skriver at hallo.
Oops.
Vi har allerede gjort dette kjørbar fil.
Så la meg bare fjerne det raskt.
Nå la oss skrive at hallo.
Og du ser i denne linjen her som i hovedsak si at
hallo involverer alle disse kommandoene som
gå inn i den for deg.
>> Så inkludert i CS50 Appliance er merke filen.
Så enkelt når du har en fil name.c, så alt du gjør
er å si at filnavnet.
Og så har du en kjørbar
fil med dette navnet.
Ja?
>> SPEAKER 1: For min datamaskin, i stedet for Clang det står GCC.
Er det like -
ZAMYLA CHAN: Yeah.
Slik at datamaskinen kan si GCC i motsetning til Clang fordi
GCC er en annen type av kompilatoren.
Hvis du er i CS50 Appliance skjønt, så det
bør bruke Clang.
Hvis det ikke er det, så kanskje komme til å snakke til meg etterpå eller poste
på CS50 Diskuter og vi kan sortere det ut.
>> OK.
Så nå som vi har vår form for grunnleggende verktøy ned, så vi
kan dykke inn i Mario.
Okay.
Så Mario er et program der egentlig vi kommer til å være
gjøre vår egen form for primitiv versjon av Mario
Spillet bakgrunn.
Du vet, har Mario vanligvis et rør og en
tre og noen blokker.
Og så er det en slags halvparten pyramide.
Så vi bare kommer til å bli fokus på at halvparten pyramide,
gjør koden slik at den skriver ut hashes for den type
av blokker i dette formatet.
Så hva vil skje er at brukeren vil legge inn en viss
høyde av pyramiden, og da vil du skrive det ut
slik at bunnen igjen hash -
så helt nederst til høyre her - at man vil justere
med bunnen venstre terminalen.
Okay.
>> Så det første du trenger -
den første lille mini problem som vi må takle er hvordan
å få brukerens input.
Så vi må håndtere hva brukeren innganger og deretter
slags utgang tingene der.
Så la oss se på se en fil som heter apples.c at jeg skrev
som omhandler innganger og utganger.
Okay.
Så her på toppen, har jeg tatt noen av bibliotekene
som jeg trenger.
Den virkelig viktig en her er stdio (standard I / O). Som avtaler
med standard inn-og utganger fordi vi kommer til å
skal håndtere bruker innganger.
OK.
Så begynner jeg mitt viktigste funksjon.
Og så spør jeg brukeren greit, hvor mange epler du ha?
Så akkurat her, hva denne linjen gjør -
Jeg tildele variabelen i til verdien av GetInt.
>> Så GetInt er en funksjon som er inkludert i stdio.
Og så egentlig vil at håndtere det for deg.
Det vil be brukeren om en int.
Uansett hva de kommer tilbake, vil det bli tildelt
variabelen i.
Og så da er det bare et lite program som reduserer
Verdien av i etter en og deretter skriver ut den nye verdien.
En fin ting om gedit er faktisk at det er en mini
terminal rett her.
Så i stedet for å måtte bytte frem og tilbake mellom
gedit og terminalen, kan du faktisk
bare kjøre den herfra.
Så la oss først komme inn i riktig katalog.
Så la oss endre våre kataloger til
Dropbox/walkthrough1.
OK.
Så nå la oss gjøre epler, sammenstiller det for oss.
Og så la oss nå kjøre epler.
Hvor mange epler har vi?
Jeg sier at jeg har tre.
Og det står "mwahaha jeg kommer til å spise en av dem" og sier
"Du har nå to epler".
>> OK.
Så la oss kjøre det igjen.
Og la oss si jeg har en eple.
Nå har jeg 0 epler.
Okay.
Så dette programmet ser ut til å fungere som forventet.
Vi taste inn et nummer, senker det med 1, og deretter
skriver den ut igjen.
Men hva hvis du for eksempel har jeg -1 epler?
Som ikke helt fornuftig.
Men det er fortsatt et heltall, slik at programmet godtar det.
Og så det returnerer du en enda mer negativt tall.
Så det er en lærdom for oss at selv om GetInt
funksjon og de andre tilknyttede seg som
GetFloat eller GetString -
selv om de vil få oss retten datatype, for
eksempel, hvis jeg bare hadde sagt [TYPING],
så det ville fortelle meg å prøve på nytt.
Så dette vil omhandle hva dataene skriver dine innspill
er, men vil faktisk ikke se, vel, det er faktisk en type
verdi som jeg vil?
Så en del av Mario er at brukeren må taste inn en
nummer som representerer høyden av en halv pyramide
at du gjør.
Og så så hvis vi ber denne brukeren for høyden, deretter
det bør være to grenser på dette.
Rett?
I spec, står det at det bør ikke være mer enn 23
tegn fordi det er slags standard
høyde av terminalen.
Men så, hva annet innbundet, kanskje en nedre grense, kanskje
Vi ønsker å inkludere?
>> Hvis vi faktisk tegne en pyramide, type tenkning tilbake
for hvor høyt en pyramide kan være, kan det aldri være lavere enn et
visst antall?
SPEAKER 2: Større enn tre.
ZAMYLA CHAN: Hmm?
SPEAKER 2: Større enn tre.
ZAMYLA CHAN: Det er et godt poeng.
Det kan være -
vi kanskje vil begrense det til bare en tre nivå pyramide.
Men la oss tenke -
la oss si som en en hash table teller som en pyramide også.
Så hva skal våre faktiske nedre grense være?
Tenker tilbake til epler, ønsker vi ikke en
negative høyde pyramide.
Rett?
Okay.
Så når du ber om brukerens input, så du må
inkludere noen måte å sørge for at heltall som
de gir deg er ikke negativ fordi du ikke kan
tegne et negativt pyramide.
>> Okay.
Så det er et par måter å gjøre dette på.
I hovedsak, når du ber om brukerens input, vil du kreve
at de gir deg riktig inngang.
Så du ønsker å kreve at de gir deg en rekke
som ikke er negativ, men også mindre enn 24.
Så vi har å gjøre med null til 23, inkluderende.
OK.
Så vi ønsker å kontinuerlig kreve -
hvis de ikke har gitt oss et gyldig heltall, de ønsker å
kontinuerlig kreve nei.
Gi meg en gyldig inngang.
Gi meg en gyldig høyde.
Så husker tilbake i Scratch, hadde vi gjenta til blokk eller
Forever Hvis blokken.
De er løkker som er svært lik den mens loop og
den gjøre mens loop, som vi vil komme inn bare i et sekund.
Så mens loop har egentlig en tilstand som du sjekker
det er en boolsk verdi som du putter inni der, som
blokker i Scratch med vinkler.
Det er hva som foregår inne i parentes i mens loop.
Så må du ha en slags tilstand der.
Og som vi nettopp diskutert tidligere, at tilstanden vil
har å gjøre med grensene for heltall som ble lagt inn.
Så tilstanden ville ha noe å gjøre med om
heltallet er innenfor de aktuelle grensene.
>> Så det er en stund loop.
For eksempel kan du be om heltall og deretter
kontinuerlig sjekke mens denne inngangen er ikke gyldig.
For eksempel holder på re-spørre, holder på å spørre
brukeren for et heltall.
Så det kan være en måte.
En annen måte kan være en gjør mens loop, noe som er veldig
ligner på en stund loop bortsett fra hva en gjør når gjør er -
du kan slags se etter syntaksen -
er at den har den do og deretter selve sløyfetekst først.
Da det har mens forholdene.
Så hva gjør mens looper -
hva de er nyttige for er at de faktisk utføre
kode minst én gang, og deretter sjekke om tilstanden er
oppfylt eller ikke.
Så hvis du skulle gjøre en gjør mens loop, deretter inni
uttalelse som du kan be om et heltall fordi du på
minst må spørre brukeren gang.
Og så etter at du be dem, så kan du si greit,
godt når jeg har gjort dette, er det gyldig?
Hvis det er, så kan du bare fortsette å gå.
Men hvis det ikke er det, så det vil bare fungere som en vanlig mens
loop og deretter holde på å spørre.
>> Okay.
Så vi er tilbake til Mario.
Så vi vet hvordan å be om riktig brukerens input som er
innenfor de rette rammene.
Så nå har vi faktisk trenger å trekke denne halv pyramide.
Det ser ut som enkle tekst.
Så la oss egentlig åpen -
la oss bare åpne et vindu og si greit, vel hva hvis jeg var
faktisk kommer til å gjøre det manuelt, skriver en selv?
Okay.
Så la oss se.
La oss si, for eksempel, ønsker vi å lage en pyramide som er
justert langs venstre side, så ville bare gjøre -
i Mario, har den øverste nivå to blokker i stedet for én.
Så vi starter med to.
Vi klikker på Enter.
Vi gjør tre, og deretter fire, Enter, fem.
Okay.
Så det er ganske enkelt.
Bortsett fra i dette oppgavesettet, vi vil ha det faktisk å justere med
høyre side av skjermen vår.
OK.
Så, kan hvordan en av dere faktisk skriver dette slik at
det er justert langs høyre?
I stedet for å sette hasj først, hvordan kan du slags
flytte den sammen?
SPEAKER 3: Skriv en linje?
ZAMYLA CHAN: Hmm?
SPEAKER 3: Skriv en linje?
ZAMYLA CHAN: Yeah.
Ja.
Du kan skrive ut en understrekning eller noe sånt
det, men vi kan bare si bruke en plass.
La oss sette i som tre plasser her.
Så neste linje, vel, vi ville ha til å sette to mellomrom.
Den neste linjen, vi bare sette en plass.
Og så for vår siste linje, ville vi ikke sette inn mellomrom.
Og det har vi vår pyramide.
>> Så det er slags -
husk at slik logikk.
Og prøve og finne ut noen form for mønster som vi kan
så oversette til C og involvere i en slags loop.
OK.
Så si vi har en høyde åtte, så vår første rad vil ha
to hashes.
Men for å få disse hashes, ville du må skrive noen
mellomrom på forhånd.
Rett?
Det jeg gjorde er jeg bare gikk gjennom.
Jeg trakk den ut selv, en pyramide i min tekst editor, en
pyramide med en høyde på åtte og deretter beregnet hvor mange
mellomrom jeg trengte å gjøre.
Så jeg sa OK, vel den første raden er
kommer til å ha to hashes.
Men før det, må jeg legge inn syv plasser.
Den neste har seks plasser og deretter
tre hashes, et cetera.
>> Så da la oss prøve og bringe dette til et annet lag av
abstraksjon.
Hva om vi hadde for n'te rad, hvor mange hasher og hvordan
mange områder vil vi trenger?
Ser noen mønsteret?
Så den første raden har to hashes.
Den andre en har tre.
Den tredje har fire.
Så n'te rad ville ha -
SPEAKER 4: N pluss 1?
ZAMYLA CHAN: Yeah.
N pluss en.
Akkurat.
Så da ser vi at antall hashes kommer til å være -
hvis vi teller den første raden å være ett, deretter nummeret
av hashes er bare kommer til å være en mer enn det.
Okay.
Så hva om antall plasser?
Så la oss prøve og uttrykke dette i form av høyden.
Hvis høyden er åtte, og første
rad har sju plasser.
Så den slags tilsvarer 8 minus 1..
Rett?
Så da den andre raden skal ha seks plasser,
som er 8 minus 2.
Så da kommer jeg til å forlate det til deg å slags figur ut
mønsteret for det.
>> Okay.
Men i programmering, noen ganger vi faktisk indeksen på null.
Så vi starter på null i stedet for én.
Så i stedet for den første raden blir kalt den første raden,
vi kommer til å kalle det 0-te rad.
Så avhengig av måten du ønsker å implementere det, være
svært forsiktig om du starter på null, enten du starter på
en, er mønsteret ditt kommer til å bli motvirket av en.
Okay.
Så nå som vi slags funnet ut programmet, vi
har å si i orden.
Så for alle slags nivå av trappen, jeg kommer til å skrive ut
slik og slik antall mellomrom og deretter slik og
det antall hashes.
Det avhenger av mønsteret som vi har etablert før.
Okay.
Så en måte å iterere gjennom og slag for å gå
gjennom et visst antall ting er en for loop, type som
gjenta 10 blokker eller lignende gjenta og du gikk inn i en
nummer i for Scratch.
Så egentlig, for hvert nivå av trapper, vil vi ønske å
skrive ut mellomrom først.
Deretter skrive ut antall hashes.
Og så får vi ønsker å legge inn en ny linje og deretter gjenta den
igjen for den neste blokken.
Okay.
>> Så la oss se på etter looper for et sekund å slags se en måte
at vi kan gå gjennom et sett nummer, gå gjennom antall
trinn i denne halv pyramide.
Så for løkker er sammensatt av tre deler.
Først har du en initialisering.
Så det setter egentlig en variabel.
Det kommer til å bli satt til denne verdien hver gang
som for løkke starter.
Så du kommer til å ha en stand.
Din for loop vil bare utføre så lenge
betingelse evalueres til sann.
Og så har du en oppdatering tilstand.
Så det har å gjøre med den variabelen som du initialisert.
Så noen måte i utgangspunktet sikre at vi kan bryte ut
av loopen, at vi ikke holde på å gjennomføre
det for evig og alltid.
Fordi i motsetning til Scratch, vi faktisk ikke har bare en
vanlig Alltid loop.
I C, må programmet fullføre slutt.
Så vi må sørge for at en eller annen måte vi stoppe det har.
>> Okay.
Så et eksempel på en for løkke som du kanskje ønsker å bruke for
Mario er dette.
Så du har et heltall jeg at du starter på 0.
Så lenge som det er mindre enn høyden, utføre du kroppen
av løkke inne her.
Etter at kroppen av loopen har utført, så ville du
øker jeg med 1.
Da programmet ville sjekke igjen - OK, vel, er jeg mindre enn
høyden?
Hvis det er, så ville du fortsette.
Så her er et eksempel på null indeksering, der vi starter på
null og deretter vi -
merke til at vår tilstand er mindre enn høyden.
Så si vår høyde er fire, for eksempel, i
vil starte på 0.
Det blir en.
Det vil være 2.
Det vil være 3.
Og deretter en gang den oppdaterer når for løkke oppdateringer, vil jeg
da være satt til 4.
Men 4 er ikke mindre enn 4, og så da vi skulle
videre til resten av loop.
>> Okay.
Slik at det er som starter på null.
Men vi kan også starte på en, for eksempel.
Men siden vi starter på en, vi slags nødt til å gå en mer
tid på slutten.
Så da det er derfor vi legger mindre enn eller lik.
Så en av de store tingene som jeg liker om datamaskinen
programmering er at det er bare så
mange måter å gjøre ting.
Så du kan velge om du starter på null, enten du
starte på en.
Også, hvis du ville, kunne du bare bruke en
mens loop, for eksempel.
Så du kan -
la oss egentlig åpen hallo.c.
Så vi har en for loop her.
Den starter på i = 0, jeg <5.
Jeg har en kommentar her fortelle oss hva det gjør.
Det skriver hei fem ganger ved hjelp av en for-løkke.
Men vi kan også gjøre det ved hjelp av en stund loop også.
>> Så la oss se på hvordan vi kan gjøre det.
Så hvis vi skal etterligne en for løkke, så vi ønsker også å
etterligne initialisering, tilstanden, og oppdateringen.
Slik at tilstanden bør være ganske enkelt fordi i
mens syntaks, når du ser på det, sier det mens (tilstand).
Så la oss bare inn tilstanden der.
I <5.
Okay.
Så vi vet at vi ønsker å skrive ut farvel.
Vi vet at det er kroppen av loop.
Men vi mangler initialisering
og oppdateringen, ikke sant?
Fordi vi ikke kan ha en evig loop.
Det har å si.
Så la oss legge til noen form for initialisering her ved hjelp av
samme som vi brukte i vår for løkke, int i = 0.
Okay.
Så vi starter med en int i.
Vi gjentar dette mens loop så lenge jeg er mindre enn 5.
Så da vi mangler en ting, som er oppdateringen.
Så hva oppdateringen ville vi trenger å bruke hvis vi var i hovedsak
gjenskape for loop over?
Vi har initialisering i er lik 0.
Vi har tilstanden i er mindre enn 5.
Og så er her en oppdatering, ikke sant?
Så vi ønsker å kopiere det.
Vi ønsker å si greit, i + +.
Det er det samme som å si i = i + 1.
Men siden det er brukt så ofte, forkortelse for det er bare
sier jeg + +.
>> Flott.
Okay.
Her jeg faktisk ikke gå ut av min epler program.
Så jeg bare kommer til å klikke Ctrl-C og som umiddelbart
støvler meg ut av mitt program og bringer
meg tilbake til terminalen.
Slik at for eksempel hvis du får en feil der du
glemte å oppdatere mens loop slik at det ville
avslutte, og du skriver en uendelig løkke, så kan du
Bruk Ctrl-C for å bryte ut av det.
OK.
Så vi er i den rette katalogen.
Så la oss gjøre hallo.
Og så hvis vi kjører Hallo, ser vi at farvel sløyfe gjør
akkurat det samme som vår for loop gjør.
Så det er bare et hint.
Enten du er mer komfortabel med for looper eller
med mens loops, kan de være utskiftbare.
Så hvilken du vil bruke til å veksle gjennom -
i dette tilfellet -
høyden av Mario pyramiden.
Og så igjen, dette er bare en påminnelse, hvis du starter på null
for variabelen, så vil du ønsker å ha en annen
tilstand enn hvis du startet på en.
Så denne tabellen bare slags viser deg en påminnelse.
Hvis du ønsker å gjenta 10 ganger, for eksempel, så du
kan enten starte variabelen på null.
Og tilstanden kan være mindre enn 10 år.
Og så den slags viser deg matrisen av det.
>> Okay.
Så vi har gått gjennom Mario.
Vi har sagt, Ok, vel vi må sjekke for riktig inngang,
null og 23 inkluderende.
Vi kommer til å finne noen form for mønster, en slags måte
uttrykke den nte raden eller den ith raden.
Og vi kommer til å bestemme seg, Okay, at vi kommer til å skrive ut denne
mange områder, så mange hasher, ny linje.
OK.
Så vi har det.
Så nå kan vi gå videre til Greedy.
Greedy er et program der en bruker gir deg en mengde
kontanter som egentlig du som kasserer trenger å returnere.
Men du vil bruke så lite mynter som mulig.
Og så det er der en Greedy algoritmen kommer inn, der
vi ønsker å bruke minst mulig av mynter mulig å
gjør at mengden av endring.
>> Okay.
Så et eksempel på dette i løsningen kan se
noe sånt som dette.
Du kjører. / Grådig.
Du blir bedt om å si greit, godt hvor mye endring skylder?
At verdien kommer til å være en verdi i dollar.
Så det kommer til å bli en flåte.
Programmet ditt vil da beregne minimum
mynter som kreves for å gjøre, i dette tilfellet, $ 0,32.
Og så minimum antall er fire.
Så før vi finne ut hva de skal gjøre, la oss slags tur
gjennom prosessen som du kan gå om.
Så hvis inngangen er 32, så egentlig jeg kommer til å bruke
minst mynter hvis jeg bruker så mange
store mynter som mulig.
Rett?
Så det er mye enklere å bruke en fjerdedel så
motsetning til fem nickels.
Så la oss si, må du returnere $ 0,32.
Vel, kan jeg bruke en fjerdedel i dette?
Ja, det kan du.
Og så ville du bli redusert til $ 0,07.
La oss se om jeg kan bruke et kvartal til å betale deg tilbake.
Vel, nei.
Jeg kan ikke få en krone i det.
Så jeg kommer til å flytte til den neste største mynten.
Kan jeg bruke en krone?
$ 0.07, nei du kan ikke bruke en krone å betale $ 0,07.
Så du sier nei.
Flytt til den neste, som er en nikkel.
Kan du bruke en nikkel?
Ja.
Syv er større enn $ 0,05, slik at vi kan bruke en nikkel.
Og så har vi to cent til overs.
Kan vi bruke en krone?
Ja vi kan.
Kan vi bruke en annen krone?
Ja.
Kan vi bruke en annen krone?
Nei fordi nå har vi lykkes
betalt brukeren tilbake.
Og slik at totalt fire mynter som brukes.
>> Så tenker at prosessen vi hver
tid bestemmer greit,
hva er den største mynten som vi kan bruke?
Når vi bruker det, vi slags holde et mentalt notat av hvor mye
mer penger vi trenger å returnere brukeren samt hvor mange
myntene vi har brukt.
Okay.
Så men igjen, det første skrittet - er å be - akkurat som Mario
brukeren om et monetært beløp.
Og så dette beløpet kommer til å være -
det kommer til å ha en desimal verdi fordi vi kommer til å
spør dem for dollar.
Slik at datatypen ikke kommer til å være et heltall.
Men det kommer til å bli en -
yeah, en flåte.
Men akkurat som epler, kan flyter være positiv eller negativ.
Så når du sjekker for verdier, du kommer til å ønske
å sikre at float -
brukerens input - er ikke-negativ.
Okay.
Vi kunne håndtere flyter i vårt hele programmet, representerer
kvartalene med 0,25, dimes med 0,1, et cetera.
Men jeg synes det er mye lettere å håndtere i løpet av bare rene cent.
Også -
og vi vil snakke om dette litt senere -
i C, flytende punkter har noe som kalles unøyaktighet.
Så når du skriver inn i 0,12, for eksempel, datamaskinen
faktisk butikker som like 0.1111119 eller
noe sånt.
>> Så det er mye enklere å konvertere til cents.
Så hvordan konverterer vi gjør en dollar verdien til cents?
SPEAKER 5: Times det med 100?
ZAMYLA CHAN: Yeah.
Ja.
Så vi ville ganger det med 100.
Men en lur ting om flytende punkter er at det
er noen unøyaktigheter.
Så la oss bare se på et eksempel på det.
Så jeg kommer til å åpne imprecision.c.
Okay.
Dette er et svært enkelt program.
Den ber om en dupp, og den skriver den tilbake.
En hyggelig tips i terminal er at du kan bare skrive tydelig, og
da har du en klar skjerm.
Og så du ikke trenger å se på noen tidligere utgang eller
feil eller feilrapporter, noe sånt.
Okay.
Så la oss gjøre unøyaktighet.
La oss kjøre den.
Så jeg ikke har det -
i min kode, det gjorde jeg ikke skrive noe spørsmål eller noe sånt.
Så det har bare en blinkende markør.
Så det er bare å venter på meg å legge inn en flåte.
Så let's -
en tilfeldig flåte.
Og du ser at det er skrevet ut den tilbake, men har litt ekstra
tall som vi definitivt ikke inkluderer.
Så vi vil være sikker på at det ikke
skje i vårt program.
>> Så hva vi ønsker å gjøre er å sørge for at vi faktisk
slags avrundet til riktig verdi.
Rett?
Og så heldigvis har vi en funksjon kalt runde inkludert
i Appliance.
Det er i matematikk biblioteket.
Hvis du ønsker å vite hvordan du skal bruke rundt, så du faktisk bruker
håndboken.
Du kan klikke mann runde.
Så her er det bringer opp -
kan være litt vanskelig å tyde, men til slutt
du får taket på det.
Den slags viser deg hva funksjonen gjør og deretter noen
mulige bruksområder for at.
Så når du til slutt få en skikkelig, gyldig innspill fra
bruker, så du ønsker å konvertere den til cents.
Pass på at du runder verdien slik at du unngår dette
flyttall unøyaktighet.
>> Okay.
Så vi har bedt brukeren om et monetært beløp.
Nå hva vi ønsker å gjøre er å sjekke hovedsak, ikke sant?
Ok, så kan jeg bruke den største mynten mulig?
Hvis du kan, så du bruker den.
Du holde oversikt over hvor mange mynter du har brukt så langt, og
også den fallende beløp.
Rett?
Og så kommer du til å sjekke.
Når du har slags utmattet kvartalene, vil du gå
til neste mulige ting.
>> Så hva slags struktur eller hva slags løkke kan vi
vil bruke for å kontinuerlig sjekke om vi kan fortsatt bruke
kvart, for eksempel?
SPEAKER 6: Mens verdien er større enn?
ZAMYLA CHAN: Ja, perfeksjonere.
Akkurat.
Så mens verdien er større enn.
Så mens verdien at vi må gi tilbake er fortsatt
større enn en fjerdedel, mens vi fortsatt kan bruke et kvartal,
Bruk kvartalene.
Holde styr på det.
Og så holder på å gå.
Perfekt.
Okay.
Oh, her har jeg bare tatt med bare noen tips om hvordan du skriver ut
ut verdier.
Så i ditt printf funksjonen, har vi vanligvis bare vært
håndtere strenger.
Men når du ønsker å skrive ut en int eller bare noen form for
siffer, må du slags skrive en slags sted holderen.
Slik at det er representert ved prosent,% d for heltall.
Du skriver det, så etterpå vil du faktisk -
etter komma -
satt i hvilken verdi faktisk går der.
Høyre.
>> Okay.
Så vi har bestemt at vi ønsker å sjekke om -
En måte å gjøre dette på ville være å kontinuerlig sjekke om
Vi kan fortsatt bruke kvartalene, og deretter bruke kvartalene, holde
spore, og deretter gå videre til den neste største verdien.
Nå en annen slags ryddig måte at du kunne gjøre dette er
bruker operatøren modulo.
Så vi allerede har pluss, minus, gange og dele
tilgjengelig for oss.
Men modulo operatør er slags ryddig.
Hva den gjør er det returnerer faktisk du resten av
dele to tall.
Så hvis du husker i lang divisjon når du ville, sier
gjør 74 delt på 3, vil du skrive det, bære over,
subtrahere, og deretter ved utgangen nummeret på bunnen er
resten.
Vel, hva modulo gjør det faktisk bare gir deg det.
Så 74 modulo 3 ville gi deg to.
Tilsvarende gir 10 modulo 2 du 0 fordi det ikke er noen
resten når du deler 10 med 2.
6 modulo 5, vel 5 går inn i 6 en ganger og deretter
det har en til overs.
Så hvis du har 7 modulo 9, er vel 9 større enn 7.
Så det kan ikke gå noen andre ganger.
Så det er fornuftig at avkastningen er 7.
Så hvis du tenker på modulo, hvordan det gir deg resten
etter at du dele noe, kan du slags se hvordan du
kan være i stand til å bruke den i Greedy, ikke sant?
Så hvis du slags kombinere modulo kanskje med divisjonen
operatør, noe sånt, så du kan ha en kul
slags mathy måte å nærme seg problemet sett.
>> Så nå som vi vet at det er et par forskjellige
måter som vi kan gjøre dette - det er definitivt mye av
forskjellige måter å selv skrive mens sløyfer.
Så jeg har skrevet noen pseudokode her.
Det kan ikke være identisk med den type skjelettet av din
kode som du skriver.
Men i hovedsak er prosessen og måten å tenke
akkurat som vi diskuterte.
Så først, er den første linjen sier for å få en viss
i dollar.
Og så implisitt det er konvertere den til cents.
Så mens kvartalene kan brukes, ønsker vi å
øke tellingen.
Og så ønsker vi å redusere mengden, den verdien som
Vi er tilbake igjen.
Som du ser her, er det ikke helt C. Men jeg har også
innrykket ting, la jeg mine betingelser innsiden av
parentes.
>> Så da den slags får meg i gang.
Og senere på, kan jeg bare se opp syntaksen.
Ofte den vanskeligste delen egentlig om et problem er å
forstå hva du trenger å gjøre.
Så når du skriver det ned, så er det mye lettere å deretter
oversette til pseudokode.
Og deretter fra pseudokode, kommer syntaks ganske lett.
Så vi ser mens kvartalene, kan brukes, øke teller,
redusere mengden.
Mens Dimes kan brukes, så du gjennomføre det så videre og så
videre, inntil du har brukt opp alle dine pennies.
Du skriver ut antall mynter som brukes, som vil være den
minimumsbeløpet å gjøre brukeren inputted verdi.
Og så har du en Greedy algoritme.
Og deretter en gang du er ferdig som, har du også ferdig pset 0.
>> Har noen spørsmål om noe?
OK.
Vel, jeg vil holde rundt for litt etter hvis du har
noen spørsmål.
Dette var walkthrough en.
Takk for at du kom.