[Powered by Google Translate] ZAMYLA CHAN: Okay, alle sammen.
Velkommen til Walkthrough 1.
Denne Walkthrough vil være på Pset 1, som er C. Jeg håber, du
alle havde det sjovt med dine Scratch-projekter.
Så nu i denne walkthrough, er vi faktisk kommer til at være
stand til at komme ind i C, komme til at skrive noget maskine kode.
Så hvis du ikke var på Walkthrough 0, så disse
walkthroughs virkelig - vi er klar vil gå igennem
problem sæt, tale gennem nogle fælles tips og teknikker
som du kan bruge.
Vi vil bryde opgaven op i overskuelige bidder, således at
du fyre kan komme i gang og forhåbentlig
forstå, hvordan det skal gøres.
>> Okay.
Så Pset 1.
Den psets dette år vil have en struktur, hvor den første -
der kommer til at være en del af spørgsmål, en række
spørgsmål, der virkelig vil også hjælpe dig med at komme i gang med
den Pset, hjælpe dig øve nogle teknikker, som du har brug for.
Og så disse spørgsmål, jeg ikke kommer til at dække i
walkthrough fordi i din afdeling, din tildelte undervisning
fyr rent faktisk vil gå gennem dem,
spørgsmål med dig.
Ved slutningen af ​​din sektion, vil du gå væk med den
svarene på disse spørgsmål, men også med den tillid,
du kan gennemføre nogle af de funktioner, du har brug for
for de sidste dele af Pset.
>> Pset 1 udgør Mario.
Og det er en sjov lille program, hvor det væsentlige vi
skrive og udskrive en halv pyramide i den typiske Mario scene.
Og så den anden del af Pset kaldes Grådige.
Og så i Greedy vi hovedsageligt fungere som en grådig
kasserer, hvor hvis nogen giver os en sum penge
at vi ønsker, at vi beregner den minimale mængde af mønter,
vi kan vende tilbage til dem at stadig give dem dette beløb.
>> Ok.
Så hver walkthrough vil have en værktøjskasse.
Og igen, kan du ikke bruge alle de værktøjer i denne
værktøjskasse, eller du kan bruge dem alle.
Under alle omstændigheder er det rigtig godt at vide, hvad
du er udstyret med.
Så vi har det CS50 Appliance, som jeg vil vise jer og
introducere dig til det.
Så også i almindelighed, god stil er absolut en af ​​vores
vigtigste værktøjer.
Style hovedsageligt omhandler, hvordan læsbar er din kode?
Når en anden går og læser din kode, har de
en nem tid?
Kan de forstå det?
Er det elegant?
Så vil vi tale om, hvordan man får gyldig bruger input i din
program, fordi både Mario og i Greedy, skal du
bede brugeren om at input og give dig nogle slags tal.
Så vi ønsker at sikre, at antallet er gyldigt.
Så husker i Scratch, vi havde blokke såsom Repeat,
Gentag indtil, eller vent, eller Forever.
Så vi kommer til at slags omsætte det til C nu, og
se på loops, såsom for, mens og gør-mens.
Så også vi også nødt til at vise værdier tilbage på
skærm, uanset om det er i Mario eller i Grådige.
Og så vil vi tale om, hvordan vi udskriver ting fra strygere til
heltal og flåder.
Og så til sidst, vi taler om pseudokode, en virkelig
vigtigt begreb at huske hele dette kursus.
Hvad jeg finder hjælper mig mest med problematiske sæt er at tænke og
beskrive, hvad jeg ønsker at gøre før tænker nogen C.
Men blot beskrive handlingen.
Så pseudokode er slags i mellem engelsk og C, slags
beskriver processer uden den korrekte syntaks, men
tilvejebringelse af en god nok struktur.
Og så vil jeg have nogle eksempler på pseudokode for dig så godt
i denne gennemgang.
>> Okay.
Så hvad vi skal arbejde med, er det CS50 Appliance.
Det er hovedsageligt en virtuel maskine den slags kører en
computer inde i din egen computer.
Og det har en masse fordele.
Den ene er, at det er forudindstillet med en masse af de værktøjer, som du vil
behov for CS50.
Samt betyder det, at alle er på samme grundlag,
hvorvidt Mac eller pc eller et andet operativsystem.
Vi kan alle køre den virtuelle maskine.
Og så er der vejledning på manual.cs50.net/appliance.
Og så hvis du går til dette link og følg vejledningen,
så forhåbentlig vil du være i stand til at installere apparatet.
>> Så det første, skal du installere et program, en
konkrete anvendelse til at kunne køre den virtuelle maskine.
Og så skal du hente apparatet.
Men igen, der er instruktioner på
manual.cs50.net/appliance.
Så jeg har allerede downloadet mit apparat, og jeg har installeret
det i VMware Fusion.
Og så når jeg hentede apparatet, jeg gik til fil.
Jeg gik til Åbn og derefter fundet, hvor jeg
gemt CS50 Appliance.
Og derfra, kørte jeg den her.
Men jeg har det op allerede her, så lad os tage et nærmere kig.
>> Ok.
Så nu er vi inde i CS50 Appliance.
Jeg gjorde det på fuld skærm.
Du kan vælge at gøre det, hvis du ønsker eller bare have det som en
mindre vindue på skrivebordet.
Her har vi bare en simpel desktop med
et hjem og en skraldespand.
Men hvis du går til Menu og derefter til programmering, så du se
at vi har noget, der hedder Terminal.
Og så i her, kan vi navigere rundt på vores computer.
Vi kan skrive kode.
Men faktisk vil vi bruge et program kaldet gedit, eller "g
redigere, "alt efter hvad en, der er.
Så vi vil bruge det til at skrive kode.
Så du har disse to værktøjer, som du skal bruge primært
at skrive kode.
Så i Derudover er det ligesom en almindelig computer.
Vi har en browser.
Vi valgte Google Chrome.
Hvad jeg har gjort er jeg har oprettet en Dropbox til at indeholde alle
dokumenterne.
Og så det er noget, der er meget opmuntret.
Dropbox bruger cloud synkronisering og så hvis -
så for eksempel noget tilfældigt - lad os håbe ikke -
sker til din enhed, så det vil alle være
synkroniseret på skyen.
>> Ok.
Så det er de programmer, som du vil bruge i
CS50 Appliance.
Nu til at navigere rundt på kommandolinjen.
Terminalen kan faktisk fungere som slags en måde til rent faktisk at
skrive kommandoer i -
gerne, hvis du er en Mac, en Finder.
Eller hvis du er i Windows, tror jeg, der er "udforske min
computer "eller noget lignende.
Så hvis vi går tilbage til apparatet, lad os åbne op for en
terminalvindue.
Så det har denne prompt, jharvard @ apparat.
Lad os bare gøre det større.
Okay.
Så hvis vi skriv kommandoen ls, så der viser alle de
filer i vores computer, i vores nuværende bibliotek.
Directories er ligesom mapper.
Vi bruger disse udtryk i flæng.
Okay, så vi har listet de filer
der er i denne mappe.
Nu, hvis vi ønsker at få adgang til, siger, vores Dropbox, så vi kan
ændre mapper.
Så cd og derefter Dropbox.
Vi ls igen, og så må vi se en liste over filer, der er i
denne mappe.
Dette svarer til at jeg går til mit hjem, og derefter klikke
Dropbox, og derefter se listen her.
>> Ok.
Så lad os sige -
når du fyre vil gøre din Pset 1, lad os lave en
mappe kaldet pset1.
Så vi er i Dropbox lige nu, som du kan se fra dette
bede her.
Så lad os lave en mappe.
Så mkdir, lad os kalde det pset1.
Og så nu, hvis vi ls igen, så vi
se, at pset1 vises.
Og så hvis vi ønsker at gå inde pset1, så kan vi gå inde
denne mappe med kommandoen cd.
Ok.
Så igen, lad os se om vi -
sige, lad os gøre det på en anden måde.
Dette svarer til bare at sige "Opret
en ny mappe, pset1.
Men som du finder, vil du blive interagere med
terminalen meget.
Så nogle gange er det en hel del lettere, en tabt hurtigere at bare
arbejde i terminalen til at gøre den slags ting.
Okay.
Og så disse andre kommandoer.
Der er en rm for at fjerne en fil.
Så du blot skrive rm og derefter navnet på den
fil for at slette det.
Vi vil gå ind i nogle eksempler på det senere.
Og så har vi noget, der hedder manden kommando, som
bringer en manual for en type af funktion.
Igen, jeg vil bringe op et konkret eksempel på det senere.
>> Så en anden virkelig vigtigt redskab, som jeg nævnte kort
før, er stil.
Så det væsentlige, stil har at gøre med læsbarheden.
Vil en anden kunne læse, følge, og
forstå din kode?
Dette er især vigtigt for dig, dig selv, faktisk.
Hvis du opholder sig op sent kodning, og så senere på dig
gå tilbage og du er ligesom, hvad betyder denne variable betyder?
Sig, du arbejder på et gruppeprojekt med nogen, og du
begge nødt til at se på hinandens kode.
Det er virkelig vigtigt, at du navngiver dine variabler korrekt
og gøre det ser nice, fordi det gør hele forskellen.
Men så frem for alt, er vi i et kursus lige nu.
Så for den interesse af CS50 og specielt til din
undervisning stipendiater og planeringsmaskiner der vil se på din
psets, please, bedes du bruge rigtige stil.
Og din undervisning stipendiaterne vil være helt tilfreds.
Så igen, omfatter stil indrykning tingene korrekt,
især ved hjælp af dine seler og indrykning dem.
Navngivning variabler noget, der giver mening.
Lige nu følger vi konvention, når du har
flere ord i dit variabelnavn, så du
forbinde dem med en understregning, som du kan se i det
nævne eksempel dér.
>> Så endelig noget, der hedder magiske tal.
Væsentlige, når du læser gennem kode og sige
du har en variabel -
siger, behøver du ikke have en variabel, men blot sige okay, indtil
og sådanne er mindre end 10.
Så din grader kommer til at gå godt, vent,
hvor kom, at 10 kommer fra?
Så virkelig forklare dig selv spørgsmål en masse.
For at hjælpe dig med at forklare dig selv er kommentarer.
Kommentarer er nok den mest vigtige ting at medtage i
Deres programmer.
Og det hjælper dig ikke kun faktisk forklare -
det hjælper dig slags forklare din argumentation som
du går langs.
Og så hvis du gør det igen, går det at være en hel del lettere
at gå tilbage i din kode og slags forstår, hvad du er
gør der.
Igen, gradere virkelig gerne kommentarer.
Så du kommentere godt og -
lidt ligesom gratis point.
Og hvem kan ikke lide gratis point?
Du kan også have flere linjer bemærkninger.
Og så jeg medtaget en slags skabelon heroppe.
Væsentlige, sædvanligvis disse anvendes på toppen af
program til at slags forklare generelt hvad
dit problem set gør.
Indeholde dit navn, dato, et cetera.
Og så, som jeg sagde i denne multi-line kommentar,
manual.cs50.net/style_guide har flere tips og regler om
stil til loops, et cetera.
>> Okay.
Så nu hvor jeg har fortalt dig lidt om stil, lad os se
dette i aktion.
Ok.
Så her har Tommy skrevet os en sødmefyldt forfærdelig
eksempel på stil i et program.
Så du kan se her, all right.
Dette er faktisk okay.
Du kan se den multi-line kommentar her.
Du starter det med en skråstreg og derefter to stjerner.
Du fortsætter ad, indretning af stjernerne langs linjen
og derefter afslutte det med en stjerne og en skråstreg.
Ok.
Så det er fint.
Det her er fint.
Han herunder hans biblioteker.
Men så her han har kommentarer spænder flere linjer.
Der er masser af ting galt med dette.
Kommentarer spænder flere linjer, lige her han bruger
syntaksen for bare en enkelt linje kommentarer.
Han er også sammensmeltning alt ind i samme kommentar.
Så vi ønsker at undgå dette.
Så her ser vi, at disse seler, for eksempel, er alle
over det hele.
Indrykningen er forkert.
Det gør ikke rigtig vise dig endeligt hvor noget
starter og en anden ting slutter.
Så så godt, vi se, at han har en defineret variabel i = 5 her.
Men så denne fire kommer ud af ingenting, og der er ingen
kommentar til rigtig forklare hvor det kommer fra.
>> Okay.
Så lad os nu se på noget, der er faktisk lige det samme
kode undtagen med bedre stil.
Så igen, det er god stil eksempel,
multi-line eksempel.
Og så her er det helt rene.
Vi ser, at han starter en if-sætning her, træder ind i en ny
line, har en åben tandbøjle.
Så han har en fordybning.
Han holder denne indrykning -
han holder denne indikation ensartet over hele
program og virkelig viser, hvornår en blok af kode begynder, når
en blok af kode slutter.
Dette kan synes en smule nitpicky fra vores side til at begynde
med, men du vil se som du skriver din kode.
Det er virkelig nyttigt at være i stand til at adskille det ud.
Og igen, dine gradere virkelig gerne.
Og så ser du, i stedet for bare at sætte et nummer i
der, han faktisk opkaldt de variable iterationer.
Og så er vi faktisk ikke se på denne kode lige nu
men bare lidt at se et eksempel på
gode versus dårlige stil.
Og så hvis man ser på dem side om side her, ville du
absolut foretrækker at læse den til højre.
>> Ok.
Så en sidste ting, før vi dykke ned i den virkelige kød af
Pset er, hvordan man kompilere og køre din kode.
Og så væsentlige, når du skriver C, det er faktisk ikke
omregnes til den virkelige maskinkode, nullerne og
dem, at maskinen rent faktisk kan læse og fortolke.
Så vi har noget -
Klang er en compiler, som vi bruger til C.
Der er mange compilere.
Men i CS50, vil vi bruge Dunk.
Og så Dunk dybest set oversætter fra C til maskine
kode til dig.
Så lad os se på et eksempel - dyk ned i Appliance her.
Ok.
Så lige nu er vi i vores hjem bibliotek.
Vi har faktisk ikke hvor nogen kode er.
Så lad os ændre vores bibliotek til Dropbox/walkthrough1, hvor
Jeg har gemt noget kode.
Så hvis vi trykker ls, så ser vi, at jeg har en
par filer i her.
>> Ok.
Så jeg har allerede skrevet hello.c, så lad os samle det
og så se, hvad det gør.
Så en grundlæggende kompilere kommando ville være klang så hello.c,
egentlig siger okay, kompilere hello.c for mig.
Jeg klikker på Enter, synes at være gået rigtigt.
Lad os klikke ls igen.
Denne a.out fil har nu vist.
Og så a.out er en eksekverbar fil.
Så for at køre det, du gør en. / A.out.
Og så ser vi, at denne hello.c program tilsyneladende
udskrives hello fem gange.
Ok.
Men siger, at vi ikke ønsker at bruge navnet a.out.
For eksempel ønsker vi at køre hello program, fordi det
gør det lettere at forstå.
Så lad os sige klang hello.c, og derefter hovedsagelig du har brug for
at passere i nogle ting kaldet flag.
Så at sige okay, godt jeg vil navngive denne noget andet.
Du kan også videregive i en masse forskellige flag,
som du vil se.
Så flaget for navngivning af et program noget, som du
vil er-O.
Efter-o, skriver du navnet på programmet.
Lad os bare kalde det hej.
>> Så nu ser vi, at vi faktisk har en hello eksekverbar fil.
Så vi kan køre det, og det gør de samme ting som før.
Så nu hvor vi har goddag, kan vi også fjerne, for
fx vores a.out.
Så rm for remove, a.out, vil din terminal bede dig, så spørg
for dig at bekræfte, om du virkelig ønsker at
slette det eller ej.
Vi siger y for ja.
Og der går vi.
A.out er væk.
Ok.
Men nogle gange det bliver forvirrende at huske alle de
flag, som vi har brug for at inkludere og skrive ud klang.
Og som vi ser, når vi bruger mere komplekse programmer, vi får
være herunder forskellige biblioteker.
Og så vores kommandoer til Dunk får længere og længere.
Så medtaget i CS50 Appliance er make kommandoen.
Så skal du blot indtaste lave hej.
Ups.
Vi har allerede lavet denne eksekverbar fil.
Så lad mig bare fjerne det hurtigt.
Lad os nu skrive make hej.
Og du kan se i denne linje her, at det væsentlige sige gøre
hej involverer alle disse kommandoer,
gå ind i det for dig.
>> Så medtaget i CS50 Appliance er make-fil.
Så bare når du har en fil name.c, så alt du skal gøre
er at sige gøre filnavnet.
Og så har du en eksekverbar
fil med dette navn.
Ja?
>> SPEAKER 1: For min computer, i stedet for Dunk det siger GCC.
Er det ligesom -
ZAMYLA CHAN: Yeah.
Så din computer kan sige GCC i modsætning til Dunk fordi
GCC er en anden type compiler.
Hvis du er i CS50 Appliance selv, så er det
skal bruge Dunk.
Hvis det ikke er, så måske komme og tale med mig bagefter eller sende
på CS50 Diskutere og vi kan sortere det ud.
>> Ok.
Så nu, at vi har vores slags basale værktøjer ned, så vi
kan dykke ned i Mario.
Okay.
Så Mario er et program, hvor det væsentlige vi vil være
gøre vores egen form for primitiv version af Mario
game baggrund.
Du ved, Mario har normalt et rør og et
træ og nogle blokke.
Og så er der en slags halv pyramide.
Så vi vil bare fokusere på, at halvdelen pyramide,
gør kode, således at den udskriver hashes til den slags
af blokke i dette format.
Så hvad der vil ske, er, at brugeren vil input en vis
højden af ​​pyramiden, og så vil du printe det ud
således at bunden til venstre hash -
så i det nederste højre her - at man vil bringe
med den nederste venstre af din terminal.
Okay.
>> Så den første ting, du har brug for -
den første lille mini problem, som vi er nødt til at tackle, er, hvordan
at få brugerinput.
Så vi er nødt til at have at gøre med, hvad brugeren input og derefter
slags output ting der.
Så lad os se på se en fil kaldet apples.c at jeg skrev
der beskæftiger sig med input og output.
Okay.
Så her øverst, har jeg inkluderet nogle af bibliotekerne
at jeg har brug for.
Den virkelig vigtigt her er stdio (standard I / O). Det tilbud
med standard input og output, fordi vi kommer til at
beskæftige sig med brugernes input.
Ok.
Så da jeg starter min vigtigste funktion.
Og så vil jeg spørge brugeren okay, hvor mange æbler har du?
Så lige her, hvad denne linje gør -
I tildele variablen i til værdien af ​​GetInt.
>> Så GetInt er en funktion, der er inkluderet i stdio.
Og så væsentlige, vil der beskæftige sig med det for dig.
Den vil bede brugeren om en int.
Uanset hvad de vender tilbage, vil der blive tilknyttet
variablen i.
Og så så er det bare et lille program, der reducerer
værdi af i med 1 og derefter udskriver den nye værdi.
En dejlig ting ved gedit er faktisk, at der er en mini
terminal lige her.
Så i stedet for at skulle skifte frem og tilbage mellem
gedit og terminalen, kan du faktisk
bare køre det herfra.
Så lad os først komme ind det rigtige bibliotek.
Så lad os ændre vores mapper til
Dropbox/walkthrough1.
Ok.
Så lad os nu lave æbler, samler det for os.
Og så lad os nu køre æbler.
Hvor mange æbler har vi?
Jeg siger, jeg har 3.
Og det siger "mwahaha jeg har tænkt mig at spise en af ​​dem" og siger
"Du har nu 2 æbler".
>> Ok.
Så lad os køre det igen.
Og lad os sige jeg har 1 æble.
Nu har jeg 0 æbler.
Okay.
Så dette program ser ud til at virke som forventet.
Vi input et tal, det nedsætter det med 1, og derefter
udskriver det ud igen.
Men hvad nu hvis, for eksempel, har jeg -1 æbler?
, Der ikke helt giver mening.
Men det er stadig et heltal, så programmet accepterer det.
Og så den returnerer dig en endnu mere negativt tal.
Så det er en lektie for os, at selv om GetInt
funktion og de andre tilknyttede oner, såsom
GetFloat eller GetString -
selv om de vil få os den rigtige datatype, for
eksempel, hvis jeg bare havde sagt [TYPING],
så det ville fortælle mig at prøve igen.
Så dette vil beskæftige sig med, hvad data skrive dit input
er, men vil faktisk ikke kontrollere, ja, det er faktisk en form for
værdi, som jeg ønsker?
Så en del af Mario er, at brugeren skal indtaste en
tal, der repræsenterer højden af ​​den halve pyramide
at du gør.
Og så derefter, hvis vi spørge denne bruger for højden, så
Der bør være to grænser for dette.
Right?
I spec siger det bør det ikke være mere end 23
tegn, fordi det er lidt af standarden
Højden af ​​terminalen.
Men så, hvad andet indbundet, måske en nedre grænse, sjæl
vi ønsker at inkludere?
>> Hvis vi rent faktisk er at tegne en pyramide, slags tænker tilbage
i hvor høj pyramide kan være, kan det nogensinde være lavere end en
bestemt antal?
SPEAKER 2: Større end tre.
ZAMYLA CHAN: Hmm?
SPEAKER 2: Større end tre.
ZAMYLA CHAN: Det er en god pointe.
Det kunne være -
vi måske ønsker at begrænse det til kun en tre-niveau pyramide.
Men lad os tænke -
lad os sige ligesom en én hashtabel tæller som en pyramide også.
Så hvad skal vores faktiske nedre grænse være?
Tænker tilbage til æbler, ønsker vi ikke en
negativ højde pyramide.
Right?
Okay.
Så når du beder om det bruger input, så du bliver nødt til at
omfatte en vis måde at sikre, at heltal,
de giver dig er ikke negativt, fordi du ikke kan
tegne et negativt pyramide.
>> Okay.
Så der er et par måder at gøre dette.
Væsentlige, når du beder for bruger input, du ønsker at forlange
at de giver dig den korrekte indgang.
Så du ønsker at kræve, at de giver dig en række
det er ikke negativt, men også mindre end 24.
Så vi har at gøre med nul til 23, inklusive.
Ok.
Så vi ønsker løbende at kræve -
hvis de ikke har givet os et gyldigt heltal, de ønsker at
kontinuerligt kræve no.
Giv mig et gyldigt input.
Giv mig en gyldig højde.
Så husker tilbage i Scratch, vi havde Repeat Indtil blok eller
det for evigt, hvis blokken.
Det er løkker, der er meget lig den while-løkken og
den do while-løkken, som vi vil komme ind bare i et sekund.
Så mens løkken hovedsagelig har en betingelse, at du tjekker
det er en boolesk værdi, at du lægger derinde, ligesom
blokke i bunden med vinkler.
Det er, hvad går i parentesen i while-løkken.
Så du bliver nødt til at have en form for tilstand der.
Og da vi netop har talt om tidligere, at betingelsen vil
har at gøre med grænserne for det hele tal, der blev indlæst.
Så betingelse ville have noget at gøre med, om
heltallet er inden for passende grænser.
>> Så det er en while-løkke.
For eksempel kan du bede om heltal og derefter
løbende kontrollerer mens denne indgang ikke er gyldig.
For eksempel på re-spørge holde, holde på at spørge
brugeren til et heltal.
Så det kunne være en måde.
En anden måde kunne være en do while-løkke, som er meget
svarende til en while-løkke, undtagen hvad en gøre, mens gør, er -
du kan slags se med syntaksen -
er, at det har den do og den faktiske løkkekroppen først.
Så det har de, mens betingelser.
Så hvad gør mens sløjfer -
hvad de er nyttige for er, at de rent faktisk udfører
kode mindst én gang, og derefter kontrollere, om tilstanden er
opfyldt eller ej.
Så hvis du skulle lave en do while løkke, så inde i din
erklæring, du kan bede om et heltal, fordi du på
mindst nødt til at spørge brugeren én gang.
Og så når du spørge dem, så kan du sige okay,
godt, når jeg har gjort dette, er det gyldigt?
Hvis det er, så kan du bare holde den i gang.
Men hvis det ikke er, så det vil bare virke som en almindelig mens
løkke og derefter holde på beder.
>> Okay.
Så vi er tilbage til Mario.
Så vi ved, hvordan man bede om den korrekte bruger input, der er
i de højre grænse.
Så nu er vi faktisk nødt til at trække denne halv pyramide.
Det ligner simple tekst tegn.
Så lad os faktisk åben -
lad os bare åbne et vindue og sige okay, godt hvad hvis jeg var
faktisk kommer til at gøre det manuelt, skal du skrive en selv?
Okay.
Så lad os se.
Lad os sige, for eksempel, vi ønsker at gøre en pyramide, der er
justeret langs venstre side, så ville bare gøre -
i Mario, har det øverste niveau to blokke i stedet for én.
Så vi starter med to.
Vi klikker på Enter.
Vi gør tre, og derefter fire, Enter, fem.
Okay.
Så det er ret simpelt.
Undtagen i dette problem sæt, ønsker vi det faktisk for at tilpasse sig
højre side af vores skærmen.
Ok.
Så hvordan kunne en af ​​jer faktisk skrive dette sådan, at
det er rettet ind langs højre?
I stedet for at sætte hash først, måske hvordan du slags
flytte det sammen?
SPEAKER 3: Skriv en linie?
ZAMYLA CHAN: Hmm?
SPEAKER 3: Skriv en linie?
ZAMYLA CHAN: Yeah.
Yeah.
Du kan skrive som en understregning eller noget lignende
det, men vi kan bare sige bruge et mellemrum.
Lad os sætte ind som tre rum her.
Så den næste linje, godt, ville vi nødt til at sætte to rum.
Den næste linje, vi bare sætte ét rum.
Og så til vores sidste linje, ville vi ikke sætte mellemrum.
Og der har vi vores pyramide.
>> Så det er sådan -
huske den slags logik.
Og prøv og finde ud af en form for mønster, som vi kan
derefter oversætte til C og inddrage i en slags løkke.
Ok.
Så siger vi har en højde otte, så vores første række vil have
to hashes.
Men for at få disse hashes, ville du nødt til at skrive nogle
mellemrum på forhånd.
Right?
Hvad jeg gjorde, er jeg bare gik igennem.
Jeg trak det ud selv, en pyramide i min tekst editor, en
pyramide med en højde på otte og derefter beregnet hvor mange
rum jeg havde brug for at gøre.
Så jeg sagde okay, godt den første række er
kommer til at have to hashes.
Men inden da, er jeg nødt til at indtaste syv pladser.
Den næste har seks pladser og derefter
tre hashes, et cetera.
>> Så lad os prøve og bringe dette til et andet lag af
abstraktion.
Hvad hvis vi havde for den n'te række, hvor mange hashes og hvordan
mange rum ville vi brug for?
Er der nogen se mønstret?
Så den første række har to hashes.
Den anden har tre.
Den tredje har fire.
Så det n'te række ville have -
SPEAKER 4: N plus 1?
ZAMYLA CHAN: Yeah.
N plus 1.
Præcis.
Så ser vi, at antallet af hashes vil være -
hvis vi tæller den første række til at være en, så antallet
af hashes er bare at være en mere end det.
Okay.
Så hvad så om antallet af pladser?
Så lad os prøve og udtrykke dette i forhold til højden.
Hvis højden er otte, så den første
p har syv rum.
Så den slags svarer til 8 minus 1.
Right?
Så den anden række kommer til at have seks pladser,
som er 8 minus 2.
Så jeg har tænkt mig at overlade det til dig at slags tal ud
det mønster for.
>> Okay.
Men i programmeringen, nogle gange vi faktisk indeks på nul.
Så vi starter ved nul i stedet for én.
Så i stedet for den første række blive kaldt den første række,
vi kommer til at kalde det 0-th rækken.
Så afhængig af den måde, du ønsker at gennemføre det, være
meget forsigtig, om du starter på nul, uanset om du starter på
én, der dit mønster vil blive opvejet af en.
Okay.
Så nu, at vi slags fundet ud af programmet, vi
sige okay.
Så for alle slags niveau af trappen, jeg vil udskrive
sådan og sådan antal mellemrum, og derefter sådan, og
sådan antal hashes.
Det afhænger af det mønster, vi etableret før.
Okay.
Så en måde løbes igennem og form for igangværende
gennem et bestemt antal ting er en for-løkke, lidt ligesom
gentagelsen 10 blok eller lignende repeat og du har indtastet et
nummer i for Scratch.
Så det væsentlige, for hvert niveau af trapper, vil vi gerne
udskrive rum først.
Derefter udskrive det antal hashes.
Og så vil vi gerne indtaste en ny linje og derefter gentage det
igen til den næste blok.
Okay.
>> Så lad os se på efter sløjfer et øjeblik at slags se én måde
at vi kunne gå gennem et sæt tal, gå gennem det antal
af trinnene i denne halv pyramide.
Så for løkker er sammensat af tre dele.
Først har du en initialisering.
Så det væsentlige sætter en variabel.
Det kommer til at blive sat til denne værdi hver gang
at for loop begynder.
Så du vil have en betingelse.
Din for-løkke vil kun udføre, så længe der
betingelse evalueres til sand.
Og så har du en opdatering tilstand.
Så det har at gøre med den variabel, du initialiseret.
Så en måde at dybest set sikre, at vi kan bryde ud
af løkken, vi som ikke holder på eksekvering
det evigt og altid.
Fordi i modsætning til Scratch, vi faktisk ikke har bare en
plain Forever loop.
I C, har programmet til slut med tiden.
Så vi er nødt til at sørge for, at en eller anden måde har vi det til at stoppe.
>> Okay.
Så et eksempel på en for-løkke, som du måske vil bruge til
Mario er dette.
Så har du et heltal jeg, at du starter på 0.
Så længe den er mindre end højden, man udfører organ
af løkken inde her.
Efter at kroppen af ​​løkken har udført, så ville du
forhøje i med 1.
Så dit program ville tjekke igen - okay, godt, er jeg mindre end
højden?
Hvis det er, så ville du fortsætte.
Så her er et eksempel på nul indeksering, hvor vi starter på
nul og derefter vi -
bemærker, at vores tilstand er mindre end højden.
Så siger vores højde er fire, for eksempel i
vil starte ved 0.
Det bliver 1.
Det bliver 2.
Det bliver 3.
Og derefter når den opdaterer, når for-løkken opdateringer, jeg vil
derefter sat til 4.
Men 4 er ikke mindre end 4, og så så ville vi
videre til resten af ​​vores loop.
>> Okay.
Så det er begyndt ved nul.
Men vi kunne også starte i det ene, for eksempel.
Men da vi starte i det ene, vi slags nødt til at gå én mere
tid i slutningen.
Så det er derfor, vi tilføjer den er mindre end eller lig med.
Så en af ​​de store ting, jeg kan lide ved computer
programmering er, at der er lige så
mange måder at gøre tingene på.
Så du kan vælge, om du starter på nul, uanset om du
starte i det ene.
Også, hvis du ville, kunne du bare bruge en
while-løkke, for eksempel.
Så du kunne -
lad os faktisk åben hello.c.
Så vi har en for-løkke her.
Det starter ved i = 0, i <5.
Jeg har en kommentar her fortæller os, hvad det gør.
Den udskriver hello fem gange ved hjælp af en for-løkke.
Men vi kunne også gøre, at bruge en while-løkke så godt.
>> Så lad os se på, hvordan vi kan gøre det.
Så hvis vi skal efterligne en for-løkke, så ønsker vi også at
efterligne initialiseringen, tilstanden, og opdateringen.
Så betingelse bør være temmelig simpelt, fordi i
mens syntaks, når man ser på det, der står while (betingelse).
Så lad os bare input tilstanden dér.
i <5.
Okay.
Så vi ved, at vi ønsker at udskrive farvel.
Vi ved, at det er liget af vores løkke.
Men vi mangler initialiseringen
og opdateringen, ikke?
Fordi vi ikke kan have en evig løkke.
Det skal afslutte.
Så lad os tilføje nogle slags initialisering her ved hjælp af
samme, som vi brugte i vores for-løkken, int i = 0.
Okay.
Så vi starter med en int i.
Vi gentager dette, mens løkke, så længe jeg er mindre end 5.
Så vi mangler én ting, der er opdateringen.
Så hvad opdatering ville vi nødt til at bruge, hvis vi var hovedsagelig
genskabe for-løkken ovenfor?
Vi har initialiseringen i er lig med 0.
Vi har betingelsen i er mindre end 5.
Og så her er en opdatering, ikke?
Så vi ønsker at kopiere det.
Vi ønsker at sige okay, jeg + +.
Det er det samme som at sige, i = i + 1.
Men da det er brugt så ofte, forkortelse for det er bare
sige i + +.
>> Great.
Okay.
Her vil jeg faktisk ikke forlade ud af mine æbler program.
Så jeg vil bare klik på Control-C og umiddelbart
støvler mig ud af mit program og bringer
mig tilbage til terminalen.
Så det, for eksempel, hvis du kører ind i en bug, hvor du
glemte at opdatere din while-løkke sådan, at det ville
opsige, og du indtaster en uendelig løkke, så du kan
bruge Control-C at bryde ud af det.
Ok.
Så vi er i den rigtige mappe.
Så lad os gøre hej.
Og så hvis vi løber goddag, ser vi, at farvel løkke gør
præcis de samme ting som vores for-løkke gør.
Så det er bare en antydning.
Uanset om du er mere komfortabel med for løkker eller
med while-løkker, kan de være indbyrdes udskiftelige.
Så uanset hvilken en du vil bruge til at gentage gennem -
i dette tilfælde -
højden af ​​Mario pyramide.
Og så igen, dette er blot en påmindelse, hvis du starter ved nul
for din variabel, så du vil få lyst til at have en anden
betingelse, end hvis du startede på én.
Så denne tabel bare lidt viser dig en påmindelse.
Hvis du ønsker at gentage 10 gange, for eksempel, så du
kan enten starte din variabel på nul.
Og Deres tilstand kan være mindre end 10.
Og så den slags viser dig matricen af ​​det.
>> Okay.
Så vi har gået igennem Mario.
Vi har sagt, Okay, godt vi nødt til at tjekke for korrekt input,
nul og 23 inklusive.
Vi skal finde en form for mønster, en slags måde
udtrykke den n'te række eller den i'te række.
Og vi vil beslutte, Okay, det vi vil udskrive dette
mange rum, så mange hashes, ny linje.
Ok.
Så vi har det.
Så nu kan vi gå videre til Grådige.
Greedy er et program, hvor en bruger får du et beløb på
kontanter, som hovedsagelig du som kassereren har brug for at vende tilbage.
Men du vil bruge som små mønter som muligt.
Og så er det her en grådige algoritme kommer ind, hvor
vi ønsker at bruge den mindste mængde mønter muligt at
gøre, at mængden af ​​forandring.
>> Okay.
Så et eksempel på dette i din løsning kunne se ud
noget som dette.
Du løber. / Grådige.
Du bliver bedt om at sige okay, godt, hvor meget forandring er skyldige?
Denne værdi vil være en værdi i dollars.
Så det kommer til at være en flyder.
Dit program vil derefter beregne det minimumsbeløb
af mønter nødsaget til at foretage, i dette tilfælde 0,32 $.
Og så det mindste antal er fire.
Så før vi finde ud af hvad de skal gøre, så lad os slags gåtur
gennem processen, som du måske gå om.
Så hvis indgangen er 32, så det væsentlige jeg har tænkt mig at bruge
den mindste mængde af mønter, hvis jeg bruger så mange
store mønter som muligt.
Right?
Så det er meget nemmere at bruge en fjerdedel så
modsætning til fem nickels.
Så lad os sige, du har brug for at returnere $ 0,32.
Tja, jeg kan bruge en fjerdedel i dette?
Ja, du kan.
Og så ville du være nedsat til $ 0,07.
Lad os se om jeg kan bruge en anden fjerdedel til at betale dig tilbage.
Nå, nej.
Jeg kan ikke passe en fjerdedel i det.
Så jeg har tænkt mig at flytte til den næste største mønt.
Kan jeg bruge en skilling?
$ 0,07, nej du kan ikke bruge en skilling til at betale $ 0,07.
Så du siger nej.
Flytte til den næste, hvilket er en nikkel.
Kan du bruge en nikkel?
Ja.
Syv er større end $ 0,05, så vi kan bruge en nikkel.
Og så har vi to cent til overs.
Kan vi bruge en krone?
Ja, vi kan.
Kan vi bruge en anden øre?
Ja.
Kan vi bruge en anden øre?
Nej, fordi nu har vi med succes
betalt tilbage til brugeren.
Og så at alt fire used mønter.
>> Så tænker denne proces, vi hver
tid beslutte okay,
hvad er den største mønt, som vi kan bruge?
Når vi bruger det, vi slags holde en mental note om, hvor meget
flere penge vi nødt til at returnere brugeren samt hvor mange
mønter vi har brugt.
Okay.
Så men igen, det første skridt - ligesom Mario - er at tilskynde
brugeren til et beløb.
Og så dette beløb vil være -
det kommer til at have en decimal værdi, fordi vi skal til
bede dem for dollars.
Så det datatype vil ikke være et heltal.
Men det vil være en -
yeah, en float.
Men ligesom æbler, kan flåd være positiv eller negativ.
Så når du tjekker for værdier, du vil ønsker
at sikre, at din float -
bruger input - er ikke-negativ.
Okay.
Vi kunne beskæftige sig med flåd i hele vores program, repræsentere
kvartaler med 0,25, dimes med 0,1, et cetera.
Men jeg finder det meget lettere at håndtere på bare rene cents.
Også -
og vi vil tale om dette lidt senere -
i C, har flydende punkter noget, der hedder unøjagtighed.
Så når du indtaster i 0,12, for eksempel, at computeren
faktisk butikker som ligesom 0.1111119 eller
noget lignende.
>> Så det er meget nemmere at konvertere til cents.
Så hvordan kan vi konvertere en dollar værdi til cents?
SPEAKER 5: Times det med 100?
ZAMYLA CHAN: Yeah.
Yeah.
Så vi ville gange det med 100.
Men en tricky ting om flydende punkter er, at der
er noget upræcise.
Så lad os bare se på et eksempel på dette.
Så jeg har tænkt mig at åbne imprecision.c.
Okay.
Dette er et meget simpelt program.
Det anmoder om en svømmer, og den udskriver det tilbage.
En nice tip i terminalen er du kan bare skrive klare, og
så du har en klar skærm.
Og så du ikke behøver at se på tidligere output eller
fejl eller fejlrapporter, sådan noget.
Okay.
Så lad os gøre unøjagtighed.
Lad os køre den.
Så jeg haven't -
i min kode, jeg ikke udskrive nogen prompt eller sådan noget.
Så det bare har en blinkende markør.
Så det er bare venter på mig for at indtaste en float.
Så let's -
en tilfældig float.
Og du kan se, at den udskriver det tilbage, men har nogle ekstra
numre, som vi absolut ikke skulle omfatte.
Så vi ønsker at sikre, at dette ikke
ske i vores program.
>> Så hvad vi ønsker at gøre, er at sørge for, at vi faktisk
slags afrundes til den relevante værdi.
Right?
Og så heldigvis har vi en funktion kaldet runde omfattede
i Appliance.
Det er i math biblioteket.
Hvis du ønsker at vide, hvordan man bruger runde, så du rent faktisk bruger
manualen.
Du kan klikke mand rundt.
Så her det bringer op -
kan være lidt svært at dechifrere, men til sidst
du får hænge af det.
Den slags viser dig, hvad funktionen gør, og derefter nogle
mulige anvendelser af det.
Så når du i sidste ende få en ordentlig, gyldigt input fra
bruger, så du ønsker at konvertere den til cents.
Sørg for, at du runde værdi, så du undgår denne
flydende komma unøjagtighed.
>> Okay.
Så vi har bedt brugeren om et pengebeløb.
Nu, hvad vi ønsker at gøre, er det væsentlige kontrollere, right?
Okay, så kan jeg bruge den største mønt muligt?
Hvis du kan, så du bruger det.
Du holder styr på, hvor mange mønter du har brugt hidtil, og
også den faldende værdi.
Right?
Og så er du kommer til at kontrollere.
Når du har slags udtømt de kvartaler, du ønsker at gå
til den næste mulige ting.
>> Så hvad slags struktur eller hvilken slags løkke kunne vi
ønsker at bruge til løbende at undersøge, om vi stadig kan bruge
en fjerdedel, for eksempel?
SPEAKER 6: Mens værdi større end?
ZAMYLA CHAN: Ja, perfekt.
Præcis.
Så mens værdien er større end.
Så mens den værdi, vi er nødt til at give noget tilbage, er stadig
større end en fjerdedel, mens vi stadig kan bruge en fjerdedel,
bruge kvartaler.
Hold styr på det.
Og så holde den i gang.
Perfekt.
Okay.
Åh, her jeg har lige medtaget blot nogle tips om, hvordan du udskriver
ud værdier.
Så i dit printf funktion, har vi normalt kun været
behandling af strenge.
Men når du ønsker at udskrive en int eller bare nogen form for
ciffer, du er nødt til at slags skrive en slags pladsholder.
Så det er repræsenteret ved procent,% d for heltal.
Du skal skrive det, så bagefter du faktisk -
efter et komma -
sat i hvilken værdi faktisk går derind.
Right.
>> Okay.
Så vi har besluttet, at vi ønsker at undersøge, om -
én måde at gøre dette ville være at løbende kontrollere, om
Vi kan stadig bruge kvartaler, og derefter bruge de kvartaler, holde
spore, og derefter gå videre til den næste største værdi.
Nu er en anden slags sirlige måde, at du kunne gøre dette er
Brug af modulo.
Så vi har allerede plus, minus, gange, og divider
til rådighed for os.
Men modulo operatør er slags pæne.
Hvad det gør, er det faktisk vender du resten af
dividere to tal.
Så hvis du husker på lang division, når du ville, sige,
do 74 divideret med 3, ville du skrive det, overføre,
trække fra, og derefter i slutningen nummeret i bunden er
resten.
Nå, hvad modulo gør det faktisk bare giver dig det.
Så 74 modulo 3 ville give dig 2.
Tilsvarende, 10 modulo 2 giver dig 0, fordi der ikke er nogen
Resten når du dividere 10 med 2.
6 modulo 5, godt 5 går i 6 en gange og derefter
den har en tilovers.
Så hvis du har 7 modulo 9, godt 9 er større end 7.
Så det kan ikke gå andre tidspunkter.
Så det giver mening, at returværdien er 7.
Så hvis du tænker over modulo, hvordan det giver dig den resterende
efter at du deler noget, du kan slags se, hvordan du
måske kunne bruge den i Greedy, right?
Så hvis du slags kombinere modulo måske med opdelingen
operatør, sådan noget, så er du måske have en cool
slags Mathy måde at nærme sig problemet sæt.
>> Så nu, hvor vi ved, at der er et par forskellige
måder, vi kunne gøre dette - der er helt sikkert en masse
forskellige måder at selv skrive imens sløjfer.
Så jeg har skrevet nogle pseudokode her.
Det er måske ikke være identisk med den form for skelet af din
kode, som du skriver.
Men det væsentlige, processen og tankegang er
ligesom vi diskuterede.
Så det første, er den første linje siger at få en vis mængde
i dollar.
Og så implicit er der konvertere det til cents.
Så mens kvartaler kan bruges, vi ønsker at
øge tæller.
Og så ønsker vi at mindske mængden, den værdi,
vi vender tilbage.
Som du kan se her, er det ikke helt C. Men jeg har også
indrykket ting, jeg sætter mine betingelser inde i
parenteser.
>> Så den slags får mig i gang.
Og så senere, kan jeg bare kigge op syntaksen.
Ofte den sværeste del virkelig om et problem er, at
forstå, hvad du skal gøre.
Så når du skriver det ned, så er det meget nemmere at så
oversætte til pseudokode.
Og så fra pseudokode, syntaks kommer temmelig let.
Så vi se, mens kvartaler, kan anvendes, øge tæller,
nedsætte mængden.
Mens dimes kan bruges, så du foretage det så videre og så
frem, indtil du har opbrugt alle dine småpenge.
Du udskriver antallet af mønter anvendes, hvilket vil være
minimumsbeløb for at gøre brugeren indtastet værdi.
Og der har du din Grådige algoritme.
Og så snart du er færdig med det, har du også færdig Pset 0.
>> Er der nogen der har nogen spørgsmål om noget?
Ok.
Tja, jeg vil holde sig til en lille smule efter, hvis du har
eventuelle spørgsmål.
Dette var walkthrough 1.
Tak for at komme.