[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.