[Musik spiller] ANDI Peng: Dette er CS50, og velkommen til uge to af sektionen. Dette er faktisk, mens uge to af vores class-- faktisk, den første uge, vi har haft sektion. Håndsoprækning, hvor mange af jer alle kom til super afsnit i sidste uge? OK, det er OK. Det er ok. Hvor mange af jer set super sektion i sidste uge? OK. Og du fyre gjorde fint på problemet sæt en? Så jeg har tænkt mig at tage det, at vi har en flok virkelig intelligente børn i denne klasse, og tingene vil være fint. OK. Så first-- Først, vi bare at kort gå over dagsordenen for i dag. Vi taler om kursus logistik. En masse af jer sikkert har spørgsmål vedrørende hvordan tingene kører i dette kursus. Vi vil besvare dem. Vi kommer til at kort gå over sløjfer i tilfælde nogen af ​​jer gik glip super sektion. Vi taler om ASCII kortlægning. Vi taler om arrays, funktioner, kommandolinjeargumenter. Og endelig, hvad du fyre sikkert alle virkelig ønsker at være her for at lære om, er din pset2. Vi vil have nogle pæne tricks og tips til hvordan man gør det. OK. Også det andet, vi har masser af slik her. Enhver, der kan lide slik, bare komme herop. Grib nogle. Jeg har en flok. Vi har et ton på kontoret. Jeg har ikke rigtig lyst at spise slik hele dagen. Du fyre bør spise alle de slik, fordi jeg bragte det her for jer. Bare spiser slik. Der vil være slik hver sektion. Så først, hvem er jeg? Mit navn er Andi Peng. Jeg er leder TA af CS50 her på Yale. Og foruden det, vil jeg også være-- hvis nogen vil like-- dit løb kammerat, at din skulder at græde på. Hvis natten før din pset due, du har ingen idé om, hvad der foregår, hit mig op. Vi vil kondolere sammen, et cetera. Bare vide, at jeg er her som en ressource for dig som frontlinjen i at hjælpe jer regne ud, hvordan til at løse problemer i CS50 og udenfor. Min e-mail er andi.peng@yale.edu. Jeg vil også sende en individuel e-mail med mit telefonnummer i det så ikke alle på Internettet kan se mit telefonnummer. Du er velkommen til at ringe til mig når som helst. Seriøst, min telefon er normalt knyttet til min hånd. Jeg kan ikke reagere inden for et par minutter. Jeg kan ikke reagerer inden for et par timer. Men jeg kan garantere dig, hvis du e-mail mig, hvis du kalder mig, tekst mig, vil jeg reagere inden for 24 timer. Ofte vil jeg reagere før at, fordi jeg forstår at alle har fået nogle problemer, og du vil have dine svar skal besvares meget hurtigt. Men hvis du ringer mig 30 minutter før at stykke, der skyldes torsdag night-- være ligesom, Andi, hjælp mig, Jeg har ikke started-- jeg kan give dig, at skulder at græde ud ved. Men det kan være tid til at tænke hvordan man ikke gøre det næste gang. OK. Ups. Hvordan kan jeg gå tilbage? Der vi går. Så i dette kursus, har vi en ton for støtte til alle. Ud over blot sektioner her, som du hver uge kommer til at tilbringe 90 vidunderlige minutter med mig, vi har også kontortid. Hvor mange af jer har allerede været kontortid om hjælp? Great. Det er virkelig godt at se, fordi vi har en stab på over 45 AT'er og CA uddannet til dette kursus, der er her for at hjælpe jer med dine psets. Mandage de er afholdt i TEAL klasseværelse i 17 Hill House her på Yale. Tirsdage og torsdage, de er afholdt i overdrev. 8:00 til 11:00 stort set hver ugedag. Kom ind, kom ud. Ethvert problem, nej problem-- lige kommet ind, og så vil vi hjælpe dig med det. For det andet, foruden kontortid og §§, vi har også shorts. Har nogen nogensinde set et par af shorts eller walkthroughs i videoerne på hjemmesiden? OK. Så de er virkelig, virkelig nyttige. Vores dejlige Harvard produktion hold derovre på den skole nordpå, har de filmet og produceret disse utrolige walkthrough videoer. De vil tage dig trin for trin gennem hvordan man kan gå om at løse et problem. Ofte, hvis du er forvirret om et simpelt koncept, en ental koncept, tage et kig, fordi vi sandsynligvis have en kort om det et sted på vores hjemmeside. Og det er normalt en stor ressource at kigge efter, når du er først tabt på, hvordan man håndterer et problem. For det tredje har vi også study50 og reference50. Så studere 50 på hjemmeside er bare et link. Det er, tror jeg, study.cs50.net eller sådan noget. Bare Google det. Vi har masser af dias forberedt. Vi har masser af shorts og walkthroughs-- ting hele kompileret meget nice og nydelige for jer alle til at gennemse, se nogen begreber at du er forvirret over. Det ville nok være dækket derovre i study50. Reference50-- lignende. Vi har en masse forskellige noter let tilgængelige for din rådighed. Og endelig har vi, hvad der er kaldet CS50 Diskuter, et forum, hvor, hvis aftenen før du laver dine problemer, siger, du har et spørgsmål. Log ind på CS50 Diskuter. Skriv dit spørgsmål. Og så en af ​​hundreds-- måske thousands-- af jævnaldrende tage denne klasse online vil logge ind. Og måske nogen kan få dit svar før en TA kan. Det er hovedsageligt bare en online forum, som vi alle kan bruge til at diskutere vores problemer. Det er sejt. OK. Så problemet sætter. Vi er ved retten i tyk problem indstille to. En masse af os har allerede kæmpede gennem problem sæt en. Vi ved allerede, at måske venter for den sidste nat til at gøre din pset er ikke den smarteste ting at gøre i CS50. Tips og tips hovedsagelig til succes læses hele spec. Hvor mange af jer har allerede læse spec for pset 2? OK. Det er et fast beløb. Jeg ved, du fyre har sikkert anerkendt nu specs er virkelig lang. De er virkelig, virkelig lang. Det er virkelig svært at læse hver linje af denne omhyggeligt ord for ord. Du ønsker at bare skimme til hvor det fortæller dig at gøre noget. Jeg kan garantere dig, skal du ikke gøre det. Hvis du gør det, er du sandsynligvis kommer til at savne et sted hvor det fortæller dig hvordan man starter et problem eller det fortæller dig hvad du skal navn dit problem, eller det fortæller dig, dette er sandsynligvis den bedste måde at begynde at gøre dit problem. Og så vil du blive tabt. Når du forsøger at læse dine spec halvvejs igennem, en masse af de vigtige information-- i, at du ikke er vil være i stand til virkelig at få adgang. Så læse hele spec. Prøv at læse hele spec før du kommer til afsnittet fordi så, når vi taler om pset, vi alle kan have en idé af, hvad der foregår. For det andet, det er et begreb at jeg vil gerne referere en masse hele kurset semester. Men det væsentlige, møde os halvvejs, ikke? Mig, som din TA og Jason som selvfølgelig manager og SCAZ som din professor og David som din professor og alle de andre dejlige AT'er i dette kursus, assistenter i denne course-- Vi vil gøre vores bedste at sikre, at du er indstillet op til at lykkes i dette kursus. Vi vil holde sektion. Vi vil holde kontortid. Vi vil besvare din telefon opkald, besvare dine e-mails, gøre alt, hvad vi kan for at gøre for, at dine spørgsmål er besvaret. Men hjælpe os også. Mød os halvvejs. Hvis du kommer til kontortid ikke at have gået til afsnittet ikke at have set forelæsningerne, der ikke har nogen idé om, hvad der foregår, være ligesom, hjælp mig. Jeg har tænkt mig at være ligesom, godt, jeg er ked af. Det kan være tid til at låne at skulder at græde ud ved, fordi jeg er ikke sikker hvad jeg kan gøre for at hjælpe dig hvis du ikke prøver at mindst hjælp dig selv en lille smule i begyndelsen. Mød os halvvejs. Du ved, du komme parat til at besvare og få klar til at engagere sig i materialet. Det gør tingene så meget lettere for alle involverede. Ja, det er temmelig meget det. Sortering. Så på pensum, er det temmelig dybdegående om, hvordan vi lønklasse. Men det væsentlige, fordelingen i dette er 50% af din klasse vil være de psets, som er dejligt, fordi det er hvor du udgifter langt størstedelen af ​​dit kursus tid på. Quizzer 40%, og din endelige projekt vil være 10%. Der vil være to quizzer hele løbet af semesteret. Jeg tror, ​​de tidspunkter og datoer er også noteret på pensum. Den måde, som vi vil være klassificering dine psets er, at vi stort set har fire værdier, som vi tildeler hver lønklasse. Vi har en værdi på anvendelsesområdet, korrekthed, design og stil. Så som du kan se, der er slags vores formel for beregning psets. Tre vi giver den mest vægt til korrekthed, fordi selvfølgelig din coach skal teste i de tilfælde, at vi ønsker det at teste for. Du fyre har alle check50 til din rådighed. Det er en meget nyttig funktion at du fyre kan alle uploade din kode til vores servere, hvor vi vil tjekke det for dig. Og du har set dem frowny ansigter, smilende ansigter. De er virkelig, virkelig nyttige. Vær venlig ikke at være det studerende, der gerne forsøger at hardcode i alle svarene på dem. Jeg har absolut set en pset hvor nogen så alle værdier af check50 og de bare hårdt kodet in-- hvis dette nummer, udskrive dette nummer. Hvis dette nummer, udskrive dette nummer. Må ikke gøre det. Selvom teknisk check50 er korrekt, din måde at løse Problemet er ikke korrekt. Så bare bruge check50 sparsomt. Men også sørge for, at du forstå, hvordan det fungerer, programmet fungerer Ud over check50, fordi vi ikke kan teste alle muligt tilfælde af check50. Vi vil teste nogle af dem. Design er i det væsentlige, hvor godt designet er din kode? Hvis du er copy-paste flere kodelinjer mange, mange gange. Måske du ikke har helt det bedste design i din kode. Måske er det tid til at tilføje, at løkken. Væsentlige, her er det bare alle om at forsøge at gøre din kode, forsøger at skrive din kode så effektivt som muligt, så dit program kører så hurtigt som muligt. Endelig har vi stil. Så stil er form for en vilkårlige, subjektive sigt. Jeg ved, at vi officielt har en stil 50 vejledning til CS50, hvor det fortæller dig, åh, du skal have et mellemrum her. Du bør slags format din kode på denne måde. Du bør navngive tingene på denne måde. Jeg kan ikke rigtig pleje, per se, hvordan du vælger at style din kode, lige så længe du opholder dig konsekvent. For eksempel, hvis du kan lide at efterlade et mellemrum efter din fire før din fire loop, bare gøre det hver gang. Må ikke slags gøre det. Gør det ikke andre tidspunkter. Hvis du foretrækker at holde krøllet seler plads på en bestemt måde, bare altid gøre det på den måde. Må ikke slags gøre det et sted her og et sted der ikke. Når vi er klassificering, det er virkelig svært hvis jeg har ingen idé om, hvordan du formatere din kode, tingene er skøre og ud af sted. Hvis du bare holde det konsekvent, er det meget nemmere for mig som den større at være i stand til at læse din kode. Det er meget lettere for dig som studerende at være i stand til at se gennem din kode og se, hvad der er galt med det skråstreg, hvorfor der er problemer. Style er en af ​​de letteste ting du fyre kan gøre for at få fuld score. Væsentlige, hvis du bare ligeglad, hvis betaler du fem minutter af opmærksomhed til din kode hver uge, bør du være at få fuld stil point. Endelig har vi, hvad der kaldes multiplikatoren af ​​muligheder. Scope-- jeg ved, det er en stor ord, især i denne klasse. Men rækkevidde, alt det betyder er, at du forsøger de psets til bedste evne. Hvis du slår i tre ud af dine fire problemer og ikke engang forsøge sidste, er du sandsynligvis kommer til at miste nogle point på rækkevidde. Selv hvis du bare begynde problemet, gør dit bedste for at gå igennem den. Selv hvis det ikke virker, skal du dreje det i, fordi det viser og demonstrerer for os, at du forsøger, at du har forsøgt at problemet sæt til den bedste af dine evner. Og så kan vi give dig fuld point for rækkevidde. Scope er også meget vigtigt, når vi tale om den laveste pset score dråbe. Så i løbet af semester, du fyre har ni psets. Og vi vil faktisk slippe den laveste score ud af disse ni, men kun hvis du har fulde omfang point. Så hvis du slår i en ufuldstændig pset, Desværre kan vi ikke tabe, at man, fordi din rækkevidde punkter blev ikke gennemført. Så selvom du har den forfærdelige uge hvor du dø, og du er syg eller din hund dør, dør din kat, og du er overbebyrdet med lektier, bare forsøge pset. Gør det til det bedste af dine evner. Hvis det ikke virker, er det ligegyldigt. Bare slå det i. I det mindste vi kan give du peger for indsats. A for indsats i denne klasse. Mindst laveste score drop for indsats. Så ja. Det er temmelig meget det. Er der nogen der har spørgsmål, så langt på, hvordan vi kvalitet i klassen? Eller nogen af ​​disse? Enhver af disse, så far-- sektioner, kontortid? Cool. OK. Så dette er et emne, som ingen man virkelig kan lide at tale om. Jeg kan ikke rigtig lide at tale om det. Du fyre har ikke rigtig lyst at høre mig tale om det. Men desværre, vi alle nødt til at tale om det. David tilbragte 20 minutter a foredrag at tale om det. Og der er genstand af akademisk ærlighed. Så vi alle her har sikkert skrevet et essay engang i vores Yale karriere. Vi har sikkert fået en snak, hvor vi har fået at vide at ikke plagiere vores essay, fordi dette arbejde er ikke vores. I datalogi, har vi den samme form for koncept. Alt arbejde, som du indsender, alt kode, som du skriver skal være kode, som du har skrevet. Bør ikke være kode, som du har kopieret fra et andet sted. Bør ikke være kode, du har googled og plopped i og du ved ikke rigtig, om det virker. Du slags har en følelse af hvad det gør, men ikke rigtig. Når du er i tvivl, så væsentlige, det er bare være rimelig. På vores pensum, vi har en hel liste over ting vi ser som rimelig versus ikke rimeligt. For eksempel rimelig er dig og din ven diskutere, hvad den bedste måde at gå om logisk at løse et problem. Det er temmelig rimelig. Hvad ville der ikke være rimeligt er, hvis du fyre fik sammen, indtastet den samme kode, og drejes i samme kode. Det er ikke rimeligt. Samme ting, sådan et essay. Hvis du ønsker at diskutere med din ven, hey, dette er hvad jeg vil skrive om. Disse er de skridt, jeg ønsker at tage for at skrive om det, store. Det er vidunderligt. Samarbejder venligst med hinanden. Hvis du fyre starter skrive det samme, vende i samme essay, der er mindre OK. Så når du er i tvivl, skal du bare ikke gøre det. Her har vi i CS50, har vi scripts der kører at automatisere at teste ikke kun rigtigheden af ​​din kode, men også det unikke i din kode. Så skal du ikke sætte os i stand for at skulle henvise din sag til EXCOMM. Venligst bare for alle, lad os bare gøre dette til en vidunderlig oplevelse. Alle lærer bedre, vi alle er gladere, og vi er alle sat op til lykkes i dette kursus. Noget, der er meget unikt ved denne klasse at jeg tror, ​​at alle burde virkelig være opmærksom på, er, at vi har hvad der kaldes den beklagelse klausul i vores pensum. Så det væsentlige, inden for 72 timer, hvis du tror, ​​du har gjort noget du ikke er helt sikker på var hensigtsmæssigt, kan du komme til os. Vi lover dig, at inden for 72 timer vi vil håndtere selv sagen uden at henvise til en højere myndighed i administrationen. Så hvis du kommer til mig og siger, Andi, hey, jeg er virkelig ked af det, men jeg tror, ​​der er et par linier i min kode aftes, at jeg slags googlede, slap af Stack Overløb, kopiere og klistret, og jeg er virkelig, virkelig ked om det, så lad mig det vide. Vær venlig ikke bare lade det gnave og bare håbe, at jeg fange den. Vi vil fange den. Bare kom til mig. Lad mig vide, inden for 72 timer. Vi vil finde ud af en løsning. Og vi lover, at vi ikke vil henvise til universitetets myndigheder væsentlige. Så det er i din bedste interesse til bare at være ærlig med alle involveret i kurset. OK. OK. Så nu, hurtigt før Jeg går videre, er der nogen har spørgsmål vedrørende logistik om, hvordan kurser, vi kommer til at køre, hvordan sektioner går at køre, noget af det? OK. Ja. PUBLIKUM: [uhørligt]? ANDI Peng: Ja. Så quizzes-- hvor mange af jer er i mandag / onsdag sektion? Hvor mange af jer er i tirsdag / torsdag? OK, så det er en solid split her. Så den måde, at vi kører det på Yale er, at vi vil have to separate quizzes-- en for hver section-- som vil blive truffet i løbet af klassen. Jeg synes det er oktober slutningen af ​​oktober, noget, som uge én af quizzen. Ja, så bare komme til klassen. På den mandag eller onsdag du vil tage quizzen. På den tirsdag eller torsdag du vil tage en anden quiz. Men det samme materiale vil blive dækket. Ja. Godt spørgsmål. Ja. PUBLIKUM: Hvor skal vi gå til at tjekke vores karakterer? ANDI Peng: Ja. Så jeg vil sende ud en e-mail uanset hver uge når quizzer er graded-- eller, undskyld, når psets sorteres. Psets er normalt slået i ved middagstid eller fredag. Så jeg lover, at jeg vil forsøge at få dem tilbage til dig ved middagstid af den følgende fredag. Når jeg lønklasse en pset, vil jeg sende en meddelelse på karakterbogen der fortæller dig din score kan ses online. Så lige i denne uge, efter at jeg færdig med sortering sidste uges psets, jer vil få en e-mail meddelelse fortæller dig, hey dette er, hvor du gå til at se dine karakterer. Og du kan se hver opdeling af dine karakterer. Du kan se kommentarer. Åh, hurtig ting også. Kommentaren sektion i den store bog er, hvor jeg skal nok tilbringer størstedelen af ​​min tid sortering. Så én ting, der er virkelig vigtigt, når du fyre kigger dine karakterer på din psets ikke kun at se på det fysiske score men også at tage tid til virkelig læse mine kommentarer. Ofte, at giver dig feedback om, hvordan du løser et problem. Hvis du skal gøre noget lidt bedre, konstruktiv kritik normalt er bedst givet i disse bemærkninger afsnit. Så please, please, jeg har tænkt mig at bruge tid på at skrive kommentarer. Please, jeg ville virkelig sætte pris på det hvis du fyre ville læse disse bemærkninger. OK. Cool. Okay. Så vi kommer til at begynde at tale og bare gennemgå hurtigt noget af materialet fra uge nul bare så vi er på højre side for begynder denne uges problemer. Så while-løkken er en af de tre typer af løkker vi diskuterede tidligere i denne klasse. En while-løkke væsentlige er skrevet i syntaksen hvor der under en bestemt tilstand, gøre dette flere gange, ikke? Tænk på det på denne grafik her. Du kommer til at begynde på en bestemt punkt i din kode. Du kommer til at gå ind i løkken tilstand if-- Jeg kan ikke know-- x er mindre end én. Hvis det er sandt, du vil at udføre løkken kroppen. Og du kommer til at holde gør det igen, igen, igen, igen og over-- hvilket er hvorfor det er en loop-- indtil din tilstand bliver false. Så på denne måde, en while-løkke er en af ​​de enklere at skrive nogen form for betingelse, har brug for at gentage igen og igen og igen. Bare vær forsigtig, når du skriver nogen form for løkke at du har en exit tilstand som samt en opdatering til hvad det er så din løkke ikke bare køre igen og uendeligt. Under alle omstændigheder, er du nødt at ønsker at sikre, at du er ved at ændre nogle aspekter af din kode eller ved afslutningen af ​​sløjfen bare for at sikre, at du har en måde af fremskridt i retning af den tilstand at du ønsker at mødes for at ende. Giver det mening for alle? Vi har bare ikke lyst til at være fanget i denne spiral, hvor vi går rundt og rundt og der er ingen måde at bryde løkken. Og hver løkke væsentlige har en måde at gøre det. OK. For det andet, mange af jer i din Mario psets sandsynligvis havde til at ansætte denne type loop. Det kaldes en gør while-løkke. Først og fremmest, kan nogen fortælle mig hvad forskellen mellem en do mens loop og en while-løkke er? Ja. PUBLIKUM: Det gøre, mens løkken kører på første [uhørligt]. ANDI Peng: Ja, præcis. Så en gør mens løkke altid gør hvad er inde i do, inden konsollerne der, og gør denne betingelse før kontrol for til-- ked, gør denne kode før kontrol for tilstanden. Og det er især relevant for os her i denne klasse, fordi de fleste gange vi vil gerne bede brugeren for en slags input. Og så, afhængigt af input de giver os, så kan vi vurdere, åh, gør vi nødt til at bede dem igen? Så i Mario, hvis brugeren gav dig en negativ højde, for eksempel du kommer til at første prompt og gøre, hvad der er indeni. Så du kommer til at kontrollere, mens. Du ved, er negativ 1, er, at et positivt tal? Hvis det ikke er, jeg kommer til at gå tilbage og gentag gør og gentag og gentag og gentag, indtil de endelig give dig et nummer, som du kan lide, at vi alle kan anvende i vores kode. Det er temmelig vigtigt for væsentlige enhver brugerinput. Jeg kan garantere dig noget tid i en pset hvor vi bede dig om at indtaste nogen form for kode, er vi sandsynligvis vil give dig en prøvesag, hvor vi er kommer til at give dig noget slemt, der er vil forsøge at bryde din kode. Hvis vi forsøger at bede dig om at indtaste en heltal, kan vi bare give dig en streng og se hvordan du ville håndtere det. Hvis vi beder dig om at ansætte en alder, vi kan give dig et negativt tal at se, hvordan du ville klare det. Bare sørg for du fyre tester for tilfælde, hvor du ikke får det bedste input, lad os bare sige. Og en gør while-løkke er ofte den bedste måde at designe din kode så at det opfylder det omfang. OK. OK. Så dette er nok den mest komplekse kablet ud af de tre at vi har kigget på indtil videre. Og det virker meget skræmmende i første omgang. Men jeg garanterer dig, når du fyre få hænge af, hvordan man bruger en for-løkke, det er en af ​​de mest nyttige ting, de fleste nyttige redskaber i dit arsenal til at komme videre i denne klasse. Så for eksempel i Scratch, Vi havde denne meget enkel blok at netop sagt gentage denne vis sætninger bestemt antal gange. Af den måde, SAJ-- det er SCAZ Andi Jason. Vi oftentimes underskrive vores emails SAJ. Hvis vi siger SAJ, vær ikke forvirret. Det er bare os. Så i Scratch, kunne vi have en blok, der er sagt, gentager jeg elsker SAJ! 10 gange. Meget enkel. Logikken bag det er en meget, meget simpelt, ikke? Jeg ønsker først at gå gennem den første tid og se, at anden gang og se, at tredje gang, så videre og så videre, indtil du rammer til 10. Og den måde, vi ville repræsentere det i kode er blot gennem en simpel for-løkke. Så for, er du nødt til at erklære din variabel her, i dette tilfælde, med en int. Vi kommer til at navngive det jeg. Vi kommer til at initialisere den til 0. Og indstilling udgave er vil være i er mindre end 10. Og opdateringen bliver jeg ++. Og inden for løkken, går det at udføre indtil behandlingen rammer enden af ​​Stand- hvor tilfælde, vil det bryde løkken. Der bør være ting, som du fyre har alle slags set før og havde at gøre for dit problem angive én. Er der nogen der har nogen spørgsmål med hensyn til loops lige nu? OK. Great. OK. Så for dem af jer, der har læse pset spec for denne uge ved, at vi bliver nødt til at ansætte noget, der hedder ASCII og ASCII tabellen. Så David i foredraget gik over kort hvordan computere essentially-- alt er indkodet i en computer i binær, i nuller og ettaller. Og den måde, computere er i stand at lagre forskellige værdier ud til nuller og ettaller er gennem kortlægning disse tal kan repræsentere andre cifre eller væsentlige andre karakterer. Så i dette tilfælde, en ASCII table-- alt den gør er kort tegn, eller chars, til numre. Så kildekoden fil i din computer-- det ser, hey, en flok af nuller og ettaller, nuller og ettaller, nuller og ettaller. Det er, hvad der er gemt i faktiske hukommelse på din computer. Men når vi mennesker ønsker at kommunikere med computeren, vi want-- sige, for eksempel, hvis jeg ønsker det store A, Jeg har tænkt mig at brug for nogle måde at fortælle computeren, åh, når jeg skriver store bogstaver A, mener jeg denne repræsentation i binær. Og så den måde, vi gør, der er smed en vilkårlige ting kaldet en ASCII tabel, hvor vi, som mennesker, som programmører, for nogen tid siden, vi vilkårligt besluttet, at vi skulle tildele disse tal værdier til disse tegn. Så du fyre kan google dette online. Jeg tror, ​​der er et link til det i din pset-- blot en ASCII kort bord, ASCII tabel. Det bare oversætter binær numre i tegn. Og det vil være meget nyttigt for dit problem sæt når du ønsker at beregne noget, eller hvis du ønsker at vise visse tegn eller tal eller manipulere bestemte tegn. Det kommer til at blive meget vigtigt, at du hele vide, hvordan man navigerer en ASCII tabel. Så for eksempel det store A er repræsenteret ved antallet 65. Og det lille en er repræsenteret ved 97. Så det er vigtigt at vide, at forskellen mellem de to værdier er 32. Ofte, hvis du har brug for at konvertere fra ene til den anden, er forskellen 32. Og du behøver ikke bekymre dig, hvis du er slags forvirret om dette i første omgang. Vi vil gå over, hvordan vi ville anvende det i faktiske kode. OK. Så for dem af jer med bærbare computere ud, velkommen til at trække op en ASCII tabel, fordi disse vil sandsynligvis kræver jer til at henvise hvad tegnene er. OK. Så vel vidende, at visse tegn kort til bestemte numre, hvis jeg skulle køre bare den første linje, der code-- printf a, små bogstaver et minus store bogstaver A. Er der nogen har et gæt på, hvad der ville være udskrivning ud af skærmen lige nu? Så først og fremmest, hvad betyder små bogstaver et repræsentere? Hvilket nummer er, at kodet i ASCII-tabellen. Undskyld? PUBLIKUM: 97? ANDI Peng: 97, stor. Og hvad er store bogstaver A? PUBLIKUM: 65. ANDI Peng: Så hvad er 97 minus 65? PUBLIKUM: 32. ANDI Peng: OK. Så hvad gør du fyre tror kommer til at ske, når jeg input, linje kode ind i min computer? PUBLIKUM: [uhørligt]. ANDI Peng: Beklager, sige op. Ingen problemer. Dette er en meget sikker miljø, minus kameraet. Vi er alle gå at-- ingen bekymringer. Bare vi alle kommer til at lade som om det er bare os nedkøling i dette rum. Ingen problemer. Ingen spørgsmål er for dumme. Intet svar er en dum svar. Jeg sandsynligvis vil begå fejl i løbet af min undervisning. Seriøst, gutter, bare buse det ud. Være sikker på dig selv, du ved? Så hvad var det? Hvem sagde, at sidste svar? OK. Shout at nice og klar. PUBLIKUM: 32? ANDI Peng: 32. OK, lad os køre denne kode og se, om det er, hvad der sker. OK. Så som du fyre kan slags se, den typiske notation jeg har oprettet her for, hvordan vi ville ansætte nogen form for program på vores computer. Vi har vores vigtigste funktion inden for vores hovedfunktion. Jeg bare at kopiere og indsæt denne linje kode. Også være forsigtig, når du fyre kopierer og indsætte kode. Sommetider visse erhvervsdrivende ikke indsætte over korrekt. I så fald minus tegn var faktisk en streg. Og så computeren ikke samle det op. Så jeg var nødt til at gå tilbage og fysisk genindtaste det. Bare vær forsigtig, når du fyre gør det. OK. Vi kommer til at køre dette her. Så vi kommer til at cd ind i vores section2. Jeg har kaldt dette program asciimath. Så husk, når vi kører en program, vil vi først kompilere det ved at køre det gennem vores make. Og så vil vi faktisk køre programmet ved at gøre dot-skråstreg. Så vi kommer til at ./asciimath. Ret, der vi gå. Og vi ser 32. Godt gået. Du fortjener et stykke slik. Candy for dig. Undskyld. Okay. OK. Så vi kan gå tilbage til vores eksempel her. Aah, nr. Aah. OK. Jeg bare at holde det sådan. OK. OK. Så som du fyre kan se, kan vi gøre masser af meget interessante ting, en masse meget cool ting, en masse meget komplicerede ting, der involverer ASCII-tegn og tal. Når du kommer ned til linje fem, der er en masse at følge med. Vi kommer ikke til at gå gennem sektionen. Du er velkommen til, hvis du kan, ræsonnere det ud på papir først på, hvad der skal ske, når du indtaster en sådan streng af værdier. For eksempel, i den sidste linje, vi har z-- som repræsenterer en vis number-- en-- som også repræsenterer en visse number-- plus 1 modulos 26 plus små bogstaver a. Hvis du fyre holde læsning gennem disse, du kan se et mønster kommer op i hvordan vi manipulere koden. Jeg stærkt, meget tyder efter sektion alle jer fyre gå videre og input dem alle i din computer og se, hvilken slags numre der kommer ud og ræsonnement gennem hvorfor de er sker, fordi for dine psets det vil være virkelig vigtigt for dig at forstå hvorfor visse ting sker. Alle disse slides vil være online. Så ingen bekymringer om at forsøge at fysisk kopi ned noter. Alt er online. Denne sektion selv vil være online. Alle mine kildekode, Jeg kører vil være online. Ja. Har du stadig har et spørgsmål? PUBLIKUM: Hvad er modulos? ANDI Peng: OK. Så modulo er en operatør, der kommer til være temmelig vigtigt for dine fyre s pset her. Så den måde, at operatørerne i C og i programmering arbejde er, at du har, hvad der kaldes den division symbol og modulus symbol som er ligesom procent tegn. Så i C, når du gør et heltal divideres med et tal med en skråstreg, C har en tendens til at vil klippe off alle de decimaler, fordi et heltal ønsker konverteres til et heltal. Det kommer ikke til at ønsker at være en dobbelt med en flok af decimaler alle efter det. Så hvis jeg gør 3 divideret med 2, går det at afskære 0,5 og bare give dig 1. Så det er noget at være meget forsigtig med, når du er laver nogen form for matematik i programmeringen, er, at de tal, du får kan ikke være tallene at du tænker, hvilket er grunden til afrunding i sidste pset er så vigtig. Modulo giver dig resten. Altså for eksempel, hvis jeg gjorde 3 modulo 2-- så 3 procent skilt 2-- det ville give dig resten af ​​det. Så 3 divideret med 2 er 1,5. Det er 1 resten af ​​1. Det ville give dig den 1, der er resten af ​​det. Så når du fyre bevæger gennem ASCII tabellen, modulo vil ende med at blive noget, der er meget vigtigt, og vi vil diskutere det senere. OK. Så noget, der er smuk, temmelig nye og temmelig enestående at vi har diskuteret i denne uge er begrebet hvilket array er. Så array er den første type datastruktur at vi kommer til at støder i denne klasse. Alle datastrukturen er en slags vilkårlig, bogstaveligt ting som struktur at vi som programmører har skabt, at vi har sat i vores kode, kan indeholde andre stykker kode. Så på denne måde, en array-- tænk på det som en arkivskab, hvor, hvis du åbner anderledes hylderne i dit arkivskab, du kan få adgang til forskellige ting. I hukommelsen, er et array bare gør de samme ting på din computer. Du kan have forskellige blocks-- vi kalde dem indices-- af et array. Det er ligesom en blok, en hylde hukommelse at vi har oprettet i din computer, du kan indtaste visse ting i forskellige rum. Så med et array, du altid nødt til at specify-- du nødt til at angive at erklære en array i følgende format. Du kommer til at først angive datatypen at du ønsker at skabe af array. Hvis jeg vil have en bred vifte af heltal, Jeg vil sætte int lige der. Hvis jeg vil have en bred vifte af strenge, Jeg har tænkt mig at sætte strenge der, navnet på din array, og derefter du kommer til at have firkantede parenteser. Og inde i kantede parenteser, er du kommer til at have størrelsen på din array. Noget, der er virkelig vigtigt at huske på, når du opretter arrays er at når du opretter en array, kan denne størrelse ikke ændres. Så hvis du ved, at lige nu du har en bred vifte af størrelse 10, du ved, at jeg har tænkt mig at have 10 celler inden for eller 10 indeks i denne array, og det er aldrig vil at udvide eller formindske uanset hvad, og at der er øjeblikket kun 10 blokke af rummet allokeret i din hukommelse, der kan gemme op til 10 ting af hvad du har lagt. Så på denne måde, et array datatype, datastrukturen, der er en matrix er meget forskellig fra nogle andre, vi vil være der dækker senere i dette kursus. Ja. For eksempel, hvis du ønsker at skabe en række size 3, der indeholdt variabler af integer-- Åh, undskyld, for temperature-- og temperatur, for Selvfølgelig er et helt tal. Så vi ville skabe int, som er datatype af, hvad vi ønsker at gemme. Vi kommer til at kalde dette temperaturer af hensyn til nomenklaturen for navngivning noget, vi alle forstår. Og vi vil have firkantede parenteser. Og vi ønsker tre numre. Så vi kommer til at sætte tre inde i den. Noget, der er virkelig vigtigt at huske på er, at arrays nul indekseret. Alle, der betyder, at du starte med indekset på 0, og du kører op gennem størrelsen af ​​arrayet minus 1. Så for eksempel her, vi har en bred vifte af størrelse 3. Det kommer til at være i stand at holde tre værdier. Men tallene themselves-- at nummer, array, nævnte indeks, array, er 0 til 2. Så gutter, være virkelig, virkelig forsigtig, når du går igennem dine problemer, der er og skabe nogen form for matrix, fordi en masse af de gange det er virkelig, virkelig let at glemme. Jeg faktisk ikke har indekset 3, at jeg i øjeblikket bare har indekset for 2. Og hvis du forsøger at adgang tredje indeks, det vil være, hvad der er kaldet null terminator. Det kommer ikke til at rent faktisk findes i arrayet. Og computeren er ikke kommer til at lide det. Så vær forsigtig, når du adgang til tingene bare at sikre, at du husker at arrays er nul-indekseret. OK. Så det første eksempel er blot en måde at skabe et array. Det andet eksempel, jeg har nedenfor er blot en separat måde for at skabe, hvad der er de samme data struktur, som vi lige har indtastet. Så i stedet for fysisk at køre igennem og sætte i temperatur på 0 lig uanset hvad, temperatur 1 lig uanset, temperatur 2 ligemænd uanset hvad, kunne jeg faktisk bare direkte skaber det hele i én linje i temperatur firkantede parenteser lig. Og varsel i dette tilfælde, behøver du ikke at angive, hvor stor din array er, fordi computeren kommer til at gå igennem og se, at der er tre elementer i disse krøllede parenteser. Og det kommer til at vide, OK, Jeg har brug for en bred vifte af størrelse 3. Du kommer ikke til at brug for at input det på følgende måde. Og også, ja, på den måde. Er der nogen der har spørgsmål om, hvordan vi gør arrays eller hvordan strukturen af ​​et array virker? Ja. PUBLIKUM: [uhørligt]? ANDI Peng: Ja, præcis. Så hvis du var til at erklære og initialisere et array følgende metode, som er den anden måde, du kan bare lade dem. Og computeren ved automatisk at det nødt til at tælle, hvor mange elementer er i disse krøllede parenteser, adskilt af kommaer. Så her ser de 65, 87, 30. Så computeren ved, åh, Der er tre heltal. Jeg ved at skabe en række navn temperatur med tre elementer i det. Godt spørgsmål. Ja. PUBLIKUM: Er det ikke muligt at skabe et array med forskellige typer af data der kunne indgås det? For eksempel med heltal [uhørligt]? ANDI Peng: I forbindelse af denne klasse, nej, lige nu. Når du opretter en data struktur som et array, du fortæller den computer, hey, jeg har brug for dig at afsætte så meget hukommelse i min harddisk, hvor hver enkelt celle en række bits. Husk vi lært i uge nul, at forskellige data typer har forskellige størrelser? Så for eksempel en streng er et andet beløb plads end en char, som er en anden mængde plads fra et heltal. Og så hvis du ikke angiver, og du mikse og matche, hvad slags variabler du har, computerens vil være meget forvirret. Og det kommer ikke til at vide hvor meget hukommelse til at give dig. Så af hensyn til retten nu, computere kan kun genkender en type af et array. Godt spørgsmål. OK. Så naturligvis, den andet spørgsmål, vi har er, ja, nu hvor vi har oprettet en array og vi har lagt alle disse ting i array, hvordan har vi vil være i stand til at få adgang til det? Så den typiske struktur, at vi altid adgang til en array er vores dejlige for løkke. Jeg lover jer, at vi vil være se en masse af denne fyr her. Væsentlige, når du vil indtaste værdier i et array eller du ønsker at få adgang til dem, den bedste måde at gøre det er en for-løkke, fordi der i en for-løkke, du vide, hvor mange gange du er vil ønsker at løbe gennem array, fordi du har et stop udgave, ikke? Og hver gang du kører igennem, kan du få adgang til en anden del af matrixen. Og også dette er en grund til typisk vi starter vores efter sløjfer på 0 værdi, fordi når du får adgang til arrays, du kan få adgang til nul-indekset. Og så det paralleller meget pænt. Du fyre kan have ønsket at skrive for int jeg lig med 1. i er mindre end eller lig med 3. Men det ville ikke fungere helt så godt her, fordi du kun har elementer af 0, 1 og 2. Og så hvis du skulle starte din i på element 1, 2, og 3, du kommer til at ende med at køre ud af grænserne for dit array, og dårlige ting kommer til at ske. Så jeg håber, du fyre se segue på, hvorfor de tidligere klasser vi underviste jer, hvordan du kører og formatere en for-løkke den måde, at vi var. Det er fordi, vi nu har skiftet i arrays, du kan se, hvorfor de 0 låner selv meget pænt at få adgang. Så den måde, vi gør det er at-- jeg er bare udskrive det ud her for skyld for at printe det ud. Men jeg har min pladsholder, komma. Og selve Adgang del, der sker. Navnet på arrayet hed temperatur. Så det er temperaturen og i'te element i arrayet. Så som for-løkken løber gennem, det vil starte ved 0. Det kommer til at udskrive 0. oversigt for dette array. Så det kommer til at udskrive ud det første element. Så det kommer til at udskrive den anden. Og så vil vi bryde. Er alle klar på hvordan det sker? Great. Okay. Så her har vi en måde at sige, hvis vi ikke ønsker til hårdt-kode in-- mig som programmør. Jeg ønskede ikke at rent fysisk sat i hvert enkelt element af dette array. Hvis jeg ønskede at stedet har de bruger input værdier, hvad er den bedste måde at gøre det? Nå, her har jeg lavet denne dejlige funktion, hvor jeg kan erklære et array. Så int scores-- lad os bare sige vi ønsker at gøre et array, der holdt kvaliteter af alle 18 af de studerende her i dette afsnit. Jeg tror, ​​vi har fået en smule mere end 18 børn i dag. Men for eksempel skyld, lad os bare antage, vi havde 18. Jeg vil skabe en række navn scoringer med typen int, fordi scoringer, selvfølgelig, er tal. Og jeg har tænkt mig at have 18 i kantede parenteser, fordi det er, hvor mange elever jeg vil være i stand til at lagre snesevis af. Og den måde, jeg ville befolke array er, at jeg havde køre det igennem en for-løkke, af Selvfølgelig, hvor 0 er min 0. indeks. Og derefter med 18 bliver min standsning udgave, fordi der er 18 elementer i arrayet. Og så er jeg tænkt mig at gøre printf, Enter score for student-- yada yada yada. Kan nogen fortælle mig, hvorfor her er jeg udskrivning i plus 1 og ikke jeg? Det er lidt af et trick spørgsmål, ikke rigtig. Det gør ikke rent fysisk påvirke driften af ​​koden. Ja. PUBLIKUM: [uhørligt] 0? ANDI Peng: Ja, præcis. Det er en smule akavet at sige, hey, du er den 0. elev i denne klasse. Det er lidt underligt. Så os, som mennesker, kan ikke rigtig lide at tænke på, hvordan computere tænker. Så selv om i computer, er det opbevaring værdier i 0-th indeks, når vi er mennesker, vi ikke rigtig gerne henvise til os selv som nul. Så når jeg bare udskrive det, Jeg har tænkt mig at udskrive og tilføje 1 bare for overskuelighedens skyld. Så når jeg udskriver, vil jeg være stand til at udskrive de studerende 1 til 18. Det behøver faktisk ikke påvirker driften af ​​koden på nogen måde, den måde jeg udskrive. Men vær forsigtig, når du er faktisk adgang arrayet. Når du ser de scores I, bemærke her Jeg er faktisk adgang til 0. indekset og ikke 1 plus 0-- eller 1 plus 1, i dette tilfælde, indeks så at det faktisk er klar. Er alle slags OK på hvordan det kører gennem og med hver indekset jeg sætte en værdi i array og skabe et array med 18 numre at brugeren kommer til input? OK. Cool. OK. Vi har nu flytte ind i noget, der er temmelig relevant for dette stykke sæt samt. Jeg kender i foredrag, David-- undskyld, du havde et spørgsmål? PUBLIKUM: Kan du forstørre det? ANDI Peng: Ja, så jeg prøvede. Men jeg ved det ikke. Af en eller anden grund, dette version af PowerPoint er virkelig ikke i orden godt med displayet. Så vi bare at holde det på denne måde. Alle disse vil blive uploadet online. Beklager, gutter. Ja. OK. Så kan vi også have strenge. Så hvis du fyre faktisk notice-- jeg ved Rob gik over dette i denne foredrag at han did-- en streng er faktisk blot et array af tegn, hvis du tænker over det, ikke? En streng er et navn eller et sætning eller et ord, ikke? Hvis jeg skulle lave en streng med navnet Andi-- bare mit navn, A-N-D-I. Du tænker på det som blot en variabel. Men faktisk, det er opdelt i bare en vifte af tegn. Så det har fået en karakter af en lagret i et array værdi. Det har fået en karakter n lagret i andet indeks, og så videre og så videre. Så på en sådan måde, vi faktisk har denne form med strukturen sat i sted for vores strenge. Så her, hvis jeg var at indtaste ordet "spise" - så string ordet er lig med få strengen. Hvis jeg var at indtaste ordet "spise," at er fysisk den måde, at min computer gemmer denne streng i min hukommelse. Og hvis jeg ønskede at køre gennem det og print, der out-- så for ind i er lig med nul, husk, i foredrag, vi dækket noget, der hedder strlen, eller længden af ​​strengen. Fordi jeg faktisk ikke ved hvor stor array er uanset brugerens inputting-- For eksempel, jeg inputted ordet "spise", og jeg ved, det er tre tegn, ikke? Så jeg kunne sætte i en tre der og alt vil være fint. Men hvis din bruger input noget det er et andet antal værdier, du vil ikke være i stand til virkelig ved, at når du programmerer din kode. Så den måde, som vi håndterer testcases ligesom det er, at vi har noget kaldet strlen, som er blot en funktion der fortæller dig, hvor lang tid en streng er. Så strlen af ​​ord. Mit ord er spise. n er lig strlen af ​​ord. Kan nogen fortælle mig, hvad der værdi faktisk er lige der? Hvad betyder n repræsenterer højre nu, i dette eksempel, hvis jeg havde spise? PUBLIKUM: 3. ANDI Peng: 3, nøjagtigt. Så vi har for int i lig nul, n er 3, i det væsentlige. Og jeg vil køre indtil det er mindre end 3i ++. Og det kommer til at væsentlige gå igennem og gøre det samme. Det kommer til at udskrive hver værdi og giver dig E-A-T. Det er bare betegner en anderledes måde at skrive det. Det kommer til at være meget nyttig. Ja. PUBLIKUM: Hvad er fordelene ved at sætte n er lig strlen ord inde, for-løkke [uhørligt]? ANDI Peng: Ja. Så hvis jeg var at-- sige, for eksempel, hvis jeg skulle gøre det, og derefter do-- oop-- at i min kode, ville det faktisk være at gøre ligesom de samme ting. Men den måde, at David forklarede det under foredrag, hvis nogen af ​​jer gutter Husk, var, som mennesker, som programmører, vi virkelig forsøger at programmere vores kode, så vores computer har at arbejde som minimalt som muligt, så at vores kode er meget effektiv. Så hvis jeg havde, at der, hvad ville ske gennem min for-løkke er, at jeg først ville erklære en variabel med navnet jeg kommer til at være 0. Jeg kommer til at kontrollere, åh, hvad er strlen af ​​ord? Åh, strlen er 3. Så er jeg mindre end tre? Ja det er. Jeg har tænkt mig at køre. Og så anden gang tilbage omkring løkken, jeg har tænkt mig at forøge i. Jeg kommer til at være en. Og jeg kommer til at kontrollere, åh, men hvad er strlen af ​​ord? Åh, det er tre. Og gør det synes slags spild, hver gang du kører gennem løkken, at kontrollere funktionen, selv om strlen af ​​ord faktisk aldrig ændrer sig? Så det er ekstra strøm til en computer. Når du begynder at tale om ting der er milliarder og milliarder og milliarder af steder lang, forestille din computer skulle fysisk gå igennem og kontrollere alle, at hver eneste gang. Det er grunden til, at gøre netop af hensyn til effektivitet, Vi har en tendens til bare at gøre dette, fordi denne måde er vi kun kalde funktionen én gang i begyndelsen, og at hver gang det går gennem det vil at lagre værdien 3 der, at du ikke nødt til løbende at kontrollere hver gang. Ja. PUBLIKUM: Beklager. Bare [uhørligt]. Kunne du int n er strlen og sætte at der over kanten af ​​for-løkken samt? ANDI Peng: Ja. Du kan gøre det, absolut. Grunden til at vi har det i her er fordi den måde en for-løkke værker er, at det har krævet en lokal variabel i den forstand at alt, hvad du er skabe inde i for-løkken kun eksisterer inde i for-løkken. Så variablen jeg kun findes i de parenteser. Og her variabler af n også kun eksisterer i disse parentes. Så hvis du skulle bruge strlen af ordet flere gange ned nedenfor, absolut den bedste måde at gøre det ville være at erklære den op i toppen så du ikke behøver at gøre det én gang. Ja. PUBLIKUM: Hvorfor har du en ny linje efter procent se, om du ønsker at sætte alle bogstaverne ved siden af ​​det adskille? ANDI Peng: Åh, jeg ønskede at udskrive dem alle på hver linje. Det betyder ikke noget. Ja, det er en formatering. Det er et godt spørgsmål, selv om. Ja, hvis jeg ønskede at udskrive det hele på blot én linje, Jeg ville ikke have den streg i. OK. Alle godt? OK. Cool. Så jeg tror, ​​jeg har talt nok. Du fyre tur til at løbe gennem kode og fortælle mig, hvad der er galt her. Hvor er fejlen? Så som du kan se, har jeg erklæret en ny vifte af strengen typen navngivne klasse. Og jeg har indtastet Sam, Jess og Kim ind i det. Og jeg forsøger at udskrive alle elementer i array. Kan nogen fortælle mig, hvorfor denne kommer til at give mig problemer? Jeg vil give jer 10 sekunder til at tænke over dette. OK. Ja? PUBLIKUM: Er venstre center lig med 3 eller [uhørligt]? ANDI Peng: Right. Så hvor mange gange er det faktisk kommer til at løbe gennem denne løkke? PUBLIKUM: Fire. ANDI Peng: Præcis. Det kommer til at gennem fire gange. Det kommer til at køre igennem ved 0, 1, 2 og 3, fordi deres element er jeg er mindre end eller lig med 3. Det kommer ikke til at stoppe, når det er 2. Det kommer til at holde går, indtil den rammer 3. Og som vi ved, er der kun tre elementer i vores faktiske matrix. Hvis vi forsøger at få adgang til fjerde element eller indekset for 3, du kommer til at ramme et eller andet sted i hukommelsen, der ikke eksisterer. Det hedder null terminator. Intet kommer til at være der. Din computer vil ikke at være meget tilfreds med dig. Ja. Er der nogen der har spørgsmål om, hvorfor det skete? Det er et fælles område for at undgå. Ja. PUBLIKUM: Er ikke den første glide også have en streng af 2? ANDI Peng: Nej. Så det væsentlige, når du laver et array, at beslaget til højre der, at alle number-- det fortæller dig er, hvordan mange elementer jeg har. Det er faktisk ikke fortæller mig indekserne for noget. Så i dette tilfælde, jeg ved, jeg vil have at skrive med tre, med tre fysiske steder til holde, hvad jeg ønsker at holde. Så det er grunden til, at nummer tre er der. , Hvis jeg ønskede dog faktisk adgang til det, hvis jeg ønskede at sige, printf klasse beslag nummer, så du vil faktisk lægge den fysiske indeks der. Ja, godt spørgsmål. PUBLIKUM: Så er den fysiske indeks formodes at være [uhørligt]? ANDI Peng: Jeg er ked af det. Kan du taler lidt op? PUBLIKUM: Så er den fysiske indeks [Uhørligt] hver af kasserne? [Uhørligt]? ANDI Peng: Ja. Så jeg har tænkt mig at gå tilbage til lige her. Tænk på lige her. Vi har en bred vifte af størrelse 3. Der er tre steder, ligesom, fysiske pladsholdere i her. Men de er navngivet 0, 1, og 2. Så hvis jeg ønskede at få adgang til dem, den måde, at jeg få adgang til dem er printf af hvad jeg ville i her. Du ville have til at udskrive ud af navnet på den, fordi så computeren ved, åh, jeg nødt til at se i dette array for 0. indeks. Ja. Men størrelsen af ​​det ændres ikke. Størrelsen er 3, uanset hvordan du mærke dem. OK. Alle godt? PUBLIKUM: Så hver gang jeg [uhørligt]? ANDI Peng: OK. Så i dette tilfælde, har vi ikke rigtig komme ind i det lige nu i kurset. Men ved, at en string-- ligesom jeg sagde før, en streng er hovedsagelig et array af tegn. Så hvis jeg opretter et array af strenge, jeg slags har en bred vifte af matrix tegn, ikke? Så i dette tilfælde, fordi jeg har en vifte af strenge, hvis du var at indtaste en rigtig lang ord, der stadig fylder kun ét rum, fordi det er den ene streng. Men hvis du skulle tænke på karakterer af den opstilling, så der er at tage op en masse mere tegn end nogen af ​​de andre ord er. Ikke virkelig vigtigt for lige nu. Men det er bare generelt hvordan det fungerer. OK. Så det er noget, jeg vil lade dig gøre en masse i løbet af semestret. Jeg har brug for at hvile min stemme. Du fyre nødt til at stimulere jer selv. En masse af jer sikkert nødt til at sove lige nu. Jeg indtaster tilfældige problemer hvor vi som en klasse, eller du med en partner ved siden af ​​du vil at tilbringe et par minutter diskuterer om, hvordan vi ville gå om at løse eller oprette et program som dette. Så lige nu, vi ønsker at skabe en program-- vi kommer til at kalde det upper.c-- at konvertitter et lille ord til en overklasse string-- store bogstaver, undskyld. Ord i strygere, undskyld, er synonyme. Jeg har tænkt mig at ændre dem til at betyde det samme. Ja. Tag et par minutter. Det behøver ikke at være skrevet på alle sprog. Bare i pseudokode kode eller logisk, hvordan vi ville endda gå om at gøre sådan et problem. Ja. [SIDE SAMTALE] Jeg bemærkede også, at du fyre can-- Jeg slags ser allerede programmet. Jeg gætter min mangel på præsentationstilstand er et problem. Men det er OK. [SIDE SAMTALE] Ja, tak, gutter. Kommer få slik. Kommer få slik. Publikum: Ja! [SIDE SAMTALE] ANDI Peng: Også, yeah, Jeg vil begynde at smide slik på folk, der ikke besvare spørgsmål. Så du bør alle besvare spørgsmål. Eller jeg formoder folk, der besvarer spørgsmål. Ja, anden vej rundt. [SIDE SAMTALE] PUBLIKUM: [uhørligt] ANDI Peng: Ja. Ja. [SIDE SAMTALE] Okay, gutter. Tag lignende, 10 sekunder mere. [SIDE SAMTALE] OK, gutter. Så før vi begynder at forsøge at rent fysisk skrive kode, en god vane at udvikle er, at vi ønsker at første form for grund ud logisk, hvordan vi ville gøre det. Du ønsker at være sikker på, før du fysisk begynde at forsøge at kode i Mario, at du laver sikker på, at du har din pseudokode. Det tager dig gennem hvad du har brug for at skabe så at når du fysisk skriv dit program senere, du er bedre i stand til at fange fejl i din kode, og sådan noget. Så vi kommer til at bare starte by-- på engelsk, i pseudokode, Er der nogen ønsker at give mig en generisk forklaring af, hvordan vi ville gå om at gøre dette? Ja. PUBLIKUM: [uhørligt]. ANDI Peng: Sure, ingen bekymringer. PUBLIKUM: Kan du bede den om at eller bede nogen til at få snor 1-- yeah, snor, og så-- ANDI Peng: Ja, så dette er en god start. Jeg vil begynde at skrive, undskyld, som du taler. So-- PUBLIKUM: --the små bogstaver tal er højere, ikke? Eller de små bogstaver har høje tal? ANDI Peng: Præcis. PUBLIKUM: Så vi trækker 32 uanset [uhørligt]. ANDI Peng: Great. Så vi slags har en generel følelse af, hvordan man arbejder om dette problem. Vel vidende, at vi har sådan lært den fysiske måde, at strenge gemmes i hukommelsen, hvad gør du allerede vide, at du kommer til at sandsynligvis nødt til at skrive i din kode For at bevæge sig gennem strengen? PUBLIKUM: Til løkke. ANDI Peng: en for-løkke, nøjagtigt. Great. Så vi slags har en generisk pseudokode nedskrevet den slags giver du bemærker, hvordan du ville flytte om at løse problemet. Nu hvor du har det, du kan referere til senere når du forsøger at rent faktisk at skrive din kode. Så kan vi faktisk gå her. Og jeg har en funktion kaldet upper.c-- der det is-- for bare en tom skabelon lige nu, at du fyre kommer til at hjælpe mig finde ud af, hvordan man skriver denne linje af code-- ikke linje kode. Det vil være flere linjer kode. Når du starter nogen form af blank pset, hvad er den første ting, jeg har brug for at huske at gøre? PUBLIKUM: [uhørligt]. ANDI Peng: Great Yep. Medtag. stdio.h. Ofte er dette en af den mest nemme fejl folk vil gøre, når de er skrivning, er, at de vil glemmer at omfatte en vigtige bibliotek, de har brug for. Så hvis det er kontortid, og du er ligesom, Jeg ved ikke, hvorfor min kode ikke virker. Kan du fortælle mig, hvorfor det ikke virker? Vi vil sige har du # include? Du bør # include det. OK. Så vi har fået den standard I / O her. Er det den eneste bibliotek vi vil få brug for her? Hvad skal vi gøre? Undskyld. Nogen bare skrige det ud? PUBLIKUM: [uhørligt]. ANDI Peng: Der du går. OK. Og hvordan gør jeg gå om at starte nogen form funktion, enhver slags hovedfunktion inden for vores program? Int main. OK. Hvad skal jeg sætte ind her? Hvad er det første, du ønsker at gøre? Hvis vi ønsker at få en snor fra brugeren, hvad skal vi have at gøre på denne første linje? Beklager, du fyre bare føler fri til at sige op og højt. Bare råbe uanset. PUBLIKUM: Spørg bruger? ANDI Peng: Hvordan gør vi det? Ask-- er jeg kommer til at skrive "spørge brugeren"? PUBLIKUM: printf. ANDI Peng: OK. Printf. Hvad ønsker jeg at printf? PUBLIKUM: Indtast noget. ANDI Peng: Ligesom det? Gutter, foregive som om jeg er en computer. Fysisk fortælle mig hvert skridt at jeg har brug for at skrive i her? Gør jeg noget forkert? Skal jeg har skrevet noget? PUBLIKUM: Du har brug for citater. ANDI Peng: Jeg har brug for citater? OK. OK. PUBLIKUM: Og så ny linje. Semikolon. ANDI Peng: semikolon? OK. Godt. PUBLIKUM: Og måske specificere at du vil have det med små bogstaver? ANDI Peng: Great. Du fyre griner ad mig glemme at sætte et semikolon. Jeg garanterer dig et eller andet sted i løbet af denne klasse, vil du glemmer at sætte et semikolon, og det vil tage dig tre timer at regne ud af, hvorfor din kode ikke virker. Det er sket for os alle. Det vil sandsynligvis ske for dig. Få i en god vane med at bruge semikoloner. OK. PUBLIKUM: Vil du have til at gøre det baglæns skråstreg? ANDI Peng: Selvfølgelig. Har du lyst til at gøre det baglæns skråstreg? Publikum: Ja. ANDI Peng: Great. OK. Hvad gør jeg nu? PUBLIKUM: Få streng. ANDI Peng: Få streng. Så hvad gør jeg skriver? Nogen? PUBLIKUM: String s. ANDI Peng: String s. PUBLIKUM: getString. ANDI Peng: Nogen, kan du fortælle mig, hvor denne funktion getString kommer fra? PUBLIKUM: string.h. ANDI Peng: string.h? Du tror det er fra string.h? PUBLIKUM: [uhørligt]. ANDI Peng: Der du går. Det er fra CS50.h. Hvis du altid er forvirret om, hvor en bibliotek fil eller en header fil, google bogstaveligt string.h, og jeg vil fortælle dig hvad er alle de funktioner der er i string.h. OK. Så nu, at jeg har skabt en streng og jeg har bede brugeren om det, Jeg har gemt det i en variabel navngivne s, hvad skal jeg gøre nu? PUBLIKUM: Kontroller, om det er med små bogstaver. ANDI Peng: Beklager? PUBLIKUM: Kontroller, om det er med små bogstaver. ANDI Peng: Okay, lad os gøre det. Hvordan gør jeg det? Faktisk, med henblik af klassen lige nu, vi bare gå til antage, at alt at vi input er allerede i små bogstaver. Hvis du ønskede at kontrollere, ville du blot tilføje en betinget erklæring der checket, der løb igennem hver enkelt array element og kontrolleres, hvis det er mellem visse værdier. Jeg glemmer, hvad nummeret af værdier af små bogstaver er. Du kan slå det op på ASCII tabellen. Men ja, det er en rigtig god pointe. Men lige nu, er vi bare at antage, at alle strengene vi input er med små bogstaver. OK. Så hvordan ville jeg gå om dette problem næste? PUBLIKUM: Til løkke. ANDI Peng: For loop? OK. Fortæl mig, hvad de skal skrive. PUBLIKUM: Til int i lig 0. ANDI Peng: OK. PUBLIKUM: Åh, faktisk, så er du gøre et komma, og gøre n lig strlen. ANDI Peng: Så vigtig ting at jeg synes hun er bemærket her er, at vi ikke behøvede at sige int n anden gang vi gjorde dette. Bare vide, at i et for løkke, når du erklære, du faktisk ikke har brug for int af anden gang du gør en variabel. Du kan sige n strlen. PUBLIKUM: Af s. ANDI Peng: s. OK. PUBLIKUM: Så et semikolon. ANDI Peng: Selvfølgelig. PUBLIKUM: Og så [uhørligt] n. Så jeg ++. ANDI Peng: Great. Okay. Hvad ønsker vi inde af denne for-løkke nu? Husk, at hvis vi kommer til at køre igennem en streng og køre gennem en række, Vi ønsker at kontrollere tingene i det. Hvad skal vi bruge? Dette er form for den vanskelige del nu. Nogen der har et gæt? OK. Så først, hvordan får vi endda få adgang? Hvordan kan vi selv første check eller adgang til et element i arrayet? Hvordan gør vi det? Hvad er notation, vi bruger til at gøre det? Hvad er navnet på dette array kaldet? Det hedder s, right? Husk, enhver streng er altid et array. Så s beslag jeg, ikke? Fordi det er den aktuelle værdi eller indeksværdi vi tjekker. Og vi vil sætte, at lige at-- vi ønsker et lille værdi, ikke? Vi ønsker at vende det lower-- beklager, vi ønsker et stort. Vi ønsker at vende små bogstaver værdi i et stort. Og så like-- jeg er ked af, hvad er dit navn? PUBLIKUM: Heidi. ANDI Peng: Beklager? PUBLIKUM: Heidi. ANDI Peng: Heidi. Ligesom Heidi sagde i første omgang, er vi sandsynligvis vil få brug for til-- vi er sandsynligvis nødt til at trække 32 uanset charc der er, ikke? Fordi på en ASCII bord, forskellen mellem et lille bogstav og et stort bogstav er 32. Så når vi gør det, er vi sandsynligvis vil ønsker at trække 32, ikke? Så vi kommer til at gøre s i. Har alle forstå, hvorfor jeg gjorde det? Fordi lige nu, i vores array, vi kontrollere 0. indeks, ikke? Og i 0. indeks streng, det er det første tegn. Og denne karakter vil vi til at påtage sig det er små bogstaver. Hvis vi ønsker at gøre det store bogstaver, vi nødt til at trække 32 fra dens værdi, fordi der i vores ASCII tabel, det er, hvordan vi får det til næste tilsvarende værdi, der gør det store bogstaver. Har alle forstår det? Ja. PUBLIKUM: Kunne du også gør små bogstaver et minus-- ANDI Peng: Ja, så det er faktisk rigtig godt. Jeg har tænkt mig at komme tilbage til det spørgsmål efter vi gør dette. Ja. Og derefter, hvis jeg ønsker at se, hvad der foregår, Jeg sandsynligvis vil ønsker at udskrive, ikke? Nogen fortælle mig, hvad Jeg ønsker at udskrive her. PUBLIKUM: printf procent c omvendt skråstreg [uhørligt]. Det er værdien af ​​[uhørligt] s i. ANDI Peng: s jeg, undskyld? PUBLIKUM: [uhørligt]. ANDI Peng: Jeg ved det ikke. Hvad synes du? PUBLIKUM: Nå, jeg wouldn't-- Jeg tror, ​​jeg ville ikke bring-- Jeg ville tage det ud indeni, fordi [uhørligt]. ANDI Peng: Åh, du ville have gjort det? Publikum: Ja. ANDI Peng: Lad os overlade det den måde det er, og jeg vil forklare, hvorfor senere. Husk, selv når du have et sted indehaver, du ønsker at sætte parentes omkring det. Okay. Så dette bør være en fast funktion her. Lad os køre den og se om det kompilerer. Gøre øverste. Uh-oh. Det ser ikke alt for godt. Hvorfor sker det? Som med enhver fejl, du ønsker at gå tilbage og starte med den første, fordi typisk én fejl årsager masser af andre fejl efter den. Her ser vi upper.c: 18: 25, som fortæller mig i dette program ved navn upper.c, på linje 18, fejl implicit erklære bibliotek af funktioner strlen med type unassigned-- bla, jeg ikke kender hvad der foregår efter det. Alt det fortæller mig lige nu er at noget der foregår i strlen. Og computeren er forvirret, fordi Det er ligesom, jeg ved ikke, hvad strlen er? Hvad betyder det sandsynligvis fortælle dig, du mangler? PUBLIKUM: Du mangler [uhørligt]. ANDI Peng: Du har ret. Præcis. Så dette er, hvor det er vigtigt at sørge at hver funktion du bruger i din kode har den korrekte header fil til biblioteket, ellers du kommer til at få masser af fejl og din kode vil ikke at vide, hvad der foregår. Så vi kommer til at omfatte string.h her. Nu når vi forsøger at kompilere øverste. Kompilere korrekt. Lad os køre dette program. Så skriv noget med små bogstaver. Hvad tror du fyre vil skrive? Råbe noget. Okay, Charly bare gik i. Vi vil skrive Charly navn. Charly med små bogstaver. Og forhåbentlig, forhåbentlig, det er kommer til at råbe og spytte ud Charly store bogstaver. Yay! gør alle forstår, hvordan Jeg gik om at løse det? Den måde, at jeg kan manipulere bruge heltal at løse noget, Jeg ønsker at gøre i strygere, fordi tegn og heltal kan refereres på samme måde, fordi af ASCII-kortlægning. Så for at gå tilbage til din pointe, hvis jeg ønskede at sætte her i stedet for 32 store bogstaver Et minus små bogstaver et ligesom det, ville der fungerer lige så godt, fordi det er simpelthen bare den Forskellen mellem disse to værdier. Hvis jeg ønsker at gøre dette igen-- charly. Åh nej. Jeg tror, ​​vi gik den forkerte vej, ikke? PUBLIKUM: [uhørlig] små bogstaver a. ANDI Peng: Der du går. Yep. Og ud spytter charly. Så vær forsigtig, når du fratrække værdier at huske, hvilken en er større end den anden. For eksempel heroppe glemte jeg at små bogstaver a er faktisk større end store bogstaver A. Så når jeg forsøgte at trække dem på en anden måde omkring, jeg fik negativ 32. Og min computer var ligesom, Jeg ved ikke, hvad det er. Det er sandsynlighed bare nogle tilfældige værdi, der ikke er meget god. Og så sørg for, at du er trække i den rigtige længde at finde det tegn, du ønsker. OK. Er der nogen forvirret om, hvordan vi gik om at skrive denne funktion? OK. Så faktisk, en funktion der allerede findes i biblioteket kaldes ctype.h. Bibliotekets hedder ctype.h. Denne funktion er faktisk allerede skrevet til dig. Det kaldes til øverste. Og så med henblik på denne pset, du vil at opdage, at du virkelig ønsker at bruge en masse af de funktioner, der er indeholdt inden for CIndtast biblioteket. Til øverste, for at sænke, er øverste, er lower-- de er alle funktioner at du vil være i stand til at bruge meget, meget hurtigt i din egen kode, gør præcis, hvad det gør. Vi skrev ud af at konvertere en streng til store bogstaver. Men det er faktisk koden at nogen andre har skrevet og at du kan få adgang til via en anden funktion. Ja? PUBLIKUM: Så du bare kopiere en er derinde og gøre det for hver enkelt bogstav? ANDI Peng: Ja, fordi jeg ikke bekymre sig om værdierne af a. Jeg bare ligeglad, at forskellen mellem dem er 32, ikke? Forskellen mellem små bogstaver b og store B er også 32. Og forskellen mellem C og store bogstaver C er altid 32. Jeg bare nødt til at bekymre sig om forskellen mellem de to, fordi alle bogstaverne følger det samme mønster, ikke? Hvis jeg har forskellen mellem en af ​​dem, Jeg ved, hvad forskellen mellem dem alle er. Godt spørgsmål. Ja. Alle godt? OK. Oop. OK. Så en anden koncept, der er vil være meget anvendelige som man fortsætte med at udvikle din kode er denne idé skabe funktioner eller abstraktion. Så lige nu har vi alle taget algebra. I algebra, er du lært, at der er denne vidunderlige ting kaldet en funktion maskine, hvor, hvis du indgang én slags tal, det løber gennem denne vidunderlige funktion og ud popper en anden udgang, right? I kode, sker det samme i nogen form for funktion. Så jeg kunne fysisk skrive i min krop af min kode en vigtigste erklæring om, at faktisk gør uanset kroppen af ​​koden gør. Men uden for det, kan jeg også skriver mange forskellige funktioner at gøre mange forskellige ting. For eksempel har vi allerede begyndte at bruge nogle af dem. Printf--, der er en funktion, en anden har allerede skrevet, at vi kan kalde vores kode. At upper-- i denne sag, upper-- er en anden funktion vi har skrevet, at vi kan ringe i vores kode. Og så jeg gætte hvorfor Vi har endda funktioner? Hvorfor gør vi ikke bare plask det alle i samme linje kode? Det gør det nemt for alle. Nå, det ræsonnement bag det er først og fremmest, organisation. Det er virkelig irriterende at gå gennem nogen kode og en funktion som printf. Hvis du fyre rent faktisk vidste, hvad det funktion printf indebar at skrive, Det er, ligesom, 1.000 linjer kode. Hvis hver gang jeg ønskede at printf noget, Jeg var nødt til at skrive 1.000 linjer kode, det ville være virkelig irriterende at læse, højre? Det er derfor, vi har bare oprettet denne abstrakte funktion at vi allerede har en, ellers har skrevet et andet sted. Og hver gang vi har brug for at bruge det i vores kode, vi bare nødt til at sige printf. Og som er i stand til at bruge funktionen en anden har skrevet i vores kode. Det gør det lettere organisatorisk at læse koden. For det andet er det en forenkling. Det forenkler de skridt, vi har at tage for at løse vores problem. Printf, funktioner som printf, funktioner som til øvre er alle ting, der giver os mulighed for at forenkle vores kode ned, så det er nemmere. Og sidste ting er genanvendelighed. Så det faktum, at vi har en funktion kaldet printf at vi kan kalde mange forskellige gange og gør det muligt at kunne genbruges. Hvis jeg skulle skrive printf, Jeg kun skrive det én gang. Det eksisterer kun i den ét sted. Hvis jeg ønskede at gøre det igen, ville jeg nødt til at kopiere og indsætte alt dette ind i min anden linje kode. Det er derfor, hvis vi skaber en funktion der eksisterer uden for vores vigtigste, Vi kan bare opfordre det og genbruge det, når vi har brug for, så det er meget nemmere for os som programmer til at skrive. Så den måde, at vi rent faktisk ville skrive en funktion er meget ens, ikke? Dette er slags den første tilfælde, hvor vi får se en funktion tage på en stil anderledes end vores int main tomrum. I dette tilfælde, hvis jeg ønskede at skrive en funktion kaldet q, ikke? Og int værdi her er alle fortæller mig, hvad gør jeg ønsker, at dette funktion til at vende tilbage til mig? Hvis jeg ønsker i Cube et heltal, Jeg har tænkt mig at vil indtaste. Det er parametrene. Jeg har tænkt mig at indgange en værdi af typen int. Og jeg har tænkt mig at vende tilbage en anden type værdi int. Og herinde, som du kan se, alt jeg gør er cubing uanset mine input er som min output og returnere det. Så alt denne funktion gør, er tager en slags heltal. Det ganger det af sig selv to gange så det kuber i kraft. Og derefter returnerer den uanset hvad, at produktionen er. Så i dette tilfælde, er det to linjer af kode, som vi havde til at skrive ekstra. Men hvis vi ønskede at kalde over dette flere gange, det er meget nemmere at skrive, at man line lige her, der er i terning end nødt til at gå igennem flere gange. Så den måde, at i det væsentlige enhver formatering for enhver form for funktion kommer til at eksistere er ligesom her. Så vi har den funktion navn. I dette tilfælde kaldes det terning. Og vi kalder det terning, fordi det er nemt at huske. Du kan navngive det firkantede og Det kan faktisk være kubik. Betyder ikke noget. Bare et navn, som du er tildele din funktion. Denne ret her, int, er den type den parameter, du har brug for. Så hvad betyder denne funktion behøver for at kunne fungere? Tja, det har brug for et input. Jeg kaldte den input. Du kan kalde det hvad du vil. Men jeg har brug for noget af typen int. Det kommer til at faktisk udføre hvad der er inde herfra, kroppen af ​​funktionen. Og så afkastet typen lige her, denne int-- alle det er fortæller mig er at denne funktion kommer til at vende tilbage til mig i int. Så det kommer til at tage i en int, og det kommer til at give dig tilbage en int. Har alle forstå, hvordan formatering af denne art virker? Cool. OK. Så du skal ikke være bekymret, hvis dette synes lidt abstrakt lige nu. Det er noget, vi vil tale om. Vi vil dykke dybere senere i kurset. Den måde, at enhver form for højere niveau indvinding af disse ting arbejde er, at i hukommelsen, i din computer, alt lagres i denne type af stakken, skal jeg sige. Så deroppe på toppen. Jeg ved ikke, om du fyre kan se, at godt. Jeg vil prøve at zoome ind. Her på toppen, vi har den fysiske tekst af, hvad computeren er interpreting-- alle de nuller og ettaller, der Der findes inden for vores computer. Og så har vi den initialiseret data og initialiseret data, hvad vi kalder globale variabler. Så variabler, der findes på tværs af alle programmer og på tværs af hele din, væsentlige kode. Ingen bekymringer, hvis du fyre er slags uklar på dette. Det er faktisk ligegyldigt lige nu. Og så har vi, hvad der er kaldes en bunke i en stabel. Tænk på en stak bogstaveligt som ligesom en stak ting, en stak forskellige ting bliver skubbet på toppen af hinanden, at opbevare de forskellige variabler og syntaks i din kode. Og så her i bunden, vi har de miljøvariabler af, hvad du udfører inden bare din lille linje kode. Og vi bare at zoome ind på selve stakken del. Så lige her, hvis vi skulle zoome på netop dette område af stablen, dette er, hvad det ser ud. Og det er faktisk temmelig vigtigt når du fyre taler om funktioner, fordi varsel at hukommelse på din computer er lagring af variabler og de funktioner og parametrene for både din funktion og dine vigtigste variabler på forskellige steder. Så lige nu, vigtigste er den aktuelle funktion at du udfører i en kode. Du har dens parametre gemmes her og dens lokale variable gemmes her. Lokal variabel bare forstås enhver variabel som kun findes i den pågældende funktion. Og oven i det, du har denne separat funktion kaldes terning. Du har, der er parametre samt de lokale. Og grunden til at du kan ser her er, at det sker, når kube tager i en værdi fra din vigtigste funktion er, at faktisk er det at kopiere, at over. Så hvis jeg ønskede at terning 2 og returnere 8, at 2 er faktisk indlæst som parameter, og det er kopieret over, så du har det eksisterende i to forskellige steder i hukommelsen. Og du er nødt til at være meget forsigtige om at huske hvilken en af ​​dem du faktisk manipulere. Og et eksempel på, hvad der skete det ville være meget, meget dårlig eksisterer lige her. Så lige her, jeg har fået, i teorien, et program lige her, en hovedfunktion at jeg erklære en int x er lig med 1. Jeg erklære en anden int y lig med 2. Og så er jeg kører det gennem denne funktion kaldet swap, hvor jeg antager, at det er at bytte de to værdier. Og så vil jeg printe dem ud, ikke? Det er, hvad jeg ønsker, at dette program til at gøre. Så lad os komme ned og tage et kig. Så hvis jeg rent faktisk at skrive en anden funktion, som du kan se, vi har vores vigtigste funktion her. Og så har vi vores anden funktion her. Void swap. Void betyder bare, at det er ikke kommer til at vende tilbage noget. Funktionen navn er kaldet swap, og det er gå til indtagelse to variabler, int a og int b, fra din [uhørligt] funktion. Så det væsentlige i her, er vi passerer x og y i denne funktion. Og hvis vi skulle oprette denne-- så vi ønsker at skabe en midlertidig værdi, ikke? Vi kommer til at tildele det til en. Og så en vil nu lige b. Og b kommer til at være tilbage hvor temp værdien var, som er en, fordi når du ønsker at bytte ting, du kan ikke bare gerne bytte dem. Du er nødt til at holde en ud her, så det husker hvad det er, fordi når du bytte en, du glemmer hvad det oprindelige værdi var, ikke? Så i teorien, dette program bør arbejde, ikke? Hvis jeg ønskede at skifte to, skal de bytte. Så lad os køre det og se om det virker. Så som du fyre kan se, x var engang 1 og y var engang 2. Og hvis jeg printe den ud, x er stadig 1, og y er 2. Hmm, er dette program ikke synes at være arbejder den måde, at jeg vil have det til at virke. Er der nogen ønsker at tage et skud på gætte hvorfor dette skete? Det har at gøre med den måde at forskellige ting er oplagres på forskellige steder i hukommelsen. OK. Så du fyre ikke behøver at bekymre dig for meget om det lige nu. Men ved, at terningen lokale variabler var a og b, fordi her i vores funktion, vi har erklæret a og b som de variabler, der findes inden kube, denne funktion. Men som du kan se, de parametre, det tager i blev opbevaret her. Men vi var faktisk ikke tilbage noget. Vi var faktisk ikke ændrer x og y. Vi var blot skiftende a og b. Vi havde kopieret x og y ind noget, der hedder a og b. Men vi faktisk aldrig manipuleret x og y selv. Er du fyre ser hvordan det sker? Er, at vi simpelthen har kopieret det overstået, men vi har faktisk ikke holdt styr på, hvor de var i hukommelsen. Og så nu computeren ser, åh, jeg har køre denne ting gennem denne dejlige funktion. Men x og y er stadig x og y. Intet er sket med dem på grund af det faktum, at disse parametre og lokale variabler lagres i en anden placere i hukommelsen. Og dette er et højere niveau koncept, som vi får begynde at se senere i løbet. Men bare vide, at det er et problem der kan ske og at vi vil finde ud af måder til, hvordan man beskæftige sig med dette senere i kurset. OK. Okay. Så den sidste koncept, vi er virkelig kommer til at dække der kommer til at være nyttig for pset denne uge er det, der kaldes kommandolinjeargumenter. Så Rob i sit foredrag gik igennem slags kort på, hvordan disse arbejde. Væsentlige ved, at når du skriver som en hovedfunktion, når vi skrev funktioner inden i fortiden, vi havde int main tomrum. Og årsagen til at vi havde ugyldig der var fordi vores programmer ikke gjorde skal indtaste værdier for at køre, ikke? Når jeg løb Mario, har jeg ikke brug for til rent faktisk bare skrive noget da jeg kørte Mario. Jeg kunne bede brugeren senere. Men det vil ikke altid være tilfældet. For eksempel, i dette uges problem sæt, du vil blive spurgt, at i Ud over at køre dit program, du vil vil indtaste visse ting i lige, som du køre dit program. Så den måde, vi gør, der kaldes en kommandolinje argument, som er som et argument du kan indtaste direkte som du forsøger at køre dit program. Så notation for dette, det er ret kompliceret udseende, men det er virkelig ikke så vanskelig. Så int main-- det er bare din vigtigste funktion. Into argc komma string argv parentes. Så alt det siger, er, at dette int argc-- alt, der er at fortælle dig er, at de er antallet af argumenter computeren skal forvente. Så én ting, der er virkelig vigtigt at holde styr på er den fysiske navnet på dit program tæller som en af ​​disse argumenter. Så hvis jeg ville have mit program køre plus en ekstra kommandolinje argument, jeg er faktisk vil have to. Argc er faktisk kommer til at være to. Og derefter snor argv bracket-- alt, hvad der gør, det giver mig en vifte af strenge, der er vil blot vise og lagre, hvad alle disse kommandolinjeargumenter er. Så for eksempel, hvis jeg ville have det program, ./copy INFILE outfile, ikke? Det er bare en typisk Linux kommando. Hvad der rent faktisk er argc? Hvor mange kommandolinjeargumenter er der faktisk i denne? Alt dette gør, er at lave en kopi af en infile af navnet på en fil og den kopierer det ind en anden fil, right? Det er alt dette gør. Som du kan se, jeg gør det på én linje uden egentlig at behøve programmet. Hvad er vores argc i dette tilfælde? Hvor mange argumenter har vi? PUBLIKUM: Tre? ANDI Peng: Vi har tre, nøjagtigt. Så det er meget intuitiv at bare tror, ​​at det er bare den infile og outfile. Men ved, at den fysiske navn program, du kører tæller som én. Så i dette tilfælde, argc er faktisk tre. Hvad med, hvad der er argv 0? Husk, alle de kommandolinjeargumenter blev opbevaret i et array af strenge. Så hvis jeg prøver at få adgang til det, hvad ville argv beslag 0 give mig? PUBLIKUM: [uhørligt]. ANDI Peng: Præcis. Det ville give mig dot slash kopi, fordi det er den 0. element, den første element i min array. Hvad med argv 1? PUBLIKUM: INFILE. ANDI Peng: INFILE, nøjagtigt. Hvad med argv 2? PUBLIKUM: outfile. ANDI Peng: outfile. Dette er en smule tricky nu. Hvad tror du fyre tror argv 3 vil være at give mig hvis jeg forsøgte at udskrive det ud? PUBLIKUM: [uhørligt]? ANDI Peng: Havde du en hånd op? Ja. PUBLIKUM: Et alternativ. ANDI Peng: Præcis. Så husk på foredrag, som vi har ved udgangen af ​​et løb noget kaldes en null terminator? Vi vil komme ind i dette også videre i klassen. Men ved, at i notation, den måde, din computer ved, at det er slutningen af arrayet er, at det sætter noget, der hedder en null terminator eller en bindestreg nul. Så hvis du forsøger at få adgang til argv 3, du kommer til at ramme denne bindestreg 0. Dette er endnu mere af et trick spørgsmål. Hvad med argv 4? Så dette er fortid null terminator, forbi grænserne for vores array. Hvad tror du kommer til at ske, når vi forsøger at gøre det? PUBLIKUM: [uhørligt]? ANDI Peng: Beklager? Sige, at en lidt højere? PUBLIKUM: [uhørligt]. ANDI Peng: Ja. Det er navnet på den område, du vil højst sandsynligt få. Men ved, at argv 4-- der tillader dig at få adgang steder i computerens hukommelse, som du virkelig bør ikke være rørende, fordi lige nu ved du hvad argv er. Du ved, at det er en bred vifte af størrelse 3 der har dot kopiere, infile og outfile. Hvis du forsøger at gå så langt ud over dette at du er forbi den null terminator, din computer har sandsynligvis lagret noget i argv 4. Og du burde virkelig ikke være gives adgang til argv 4, fordi du har en fil skab, og du er kun tillades adgang til disse tre hylder. Men hvis du forsøger at nå langt ud over hylden, hvor du er tilladt, du kommer til at starte rode med andre ting i computerens hukommelse. Det kommer til at være virkelig, virkelig dårlig. Så bare vide, at. Vær meget forsigtig, at du ikke bare tilfældigt starte adgang elementer i et array, der var ikke i, hvad du ønskede at skabe. Yep. OK. Så vi kommer til at gøre en anden terminale eksempel her. OK. Så Rob hurtigt i foredrag den anden dag gik gennem dette eksempel, hvor han havde int main int argc snor argv beslag, som fortæller mig, at jeg er vil have kommandolinjeargumenter. Han har, hvis argc lig lig 2-- huske, lig ligemænd betyder sammenligning. Hvis det er lig 2, så er jeg kommer til at udskrive hej, uanset den første element i arrayet er. Else print, hej verden. Hvad dette vil ske væsentlige? Kan nogen lige forklare i Engelsk, hvad dette program gør? Ja. PUBLIKUM: Hvis nogen har skrevet i en kommando og sagde deres for- og efternavn, Det vil ikke bare udskrive første og sige, hej, uanset hvad dit fornavn er. ANDI Peng: OK, lad os køre den. Altså for eksempel, hvis jeg skulle gøre denne fil gøre hej at-- hej at-- hvad vil du have mig til input? PUBLIKUM: For- og efternavn. ANDI Peng: Første og sidste navn? Rum? Publikum: Ja. ANDI Peng: Kan nogen fortælle mig lige nu, hvad er argc? Bare lige der? Ups, undskyld. Lad mig gå tilbage. Hvor mange kommandolinjeargumenter are-- du fyre kan ikke rigtig se. Men jeg vil prøve at zoome ind. Jeg forsøger. Ja, der er tre, ikke? Det er dot skråstreg hej, det er Andi, og det er Peng. Så hvad gør du fyre tror, ​​at dette Programmet kommer til at udskrive? Oh. Åh undskyld. Forkert navn. Det er udskrivning ud, hej verden. Er der nogen ønsker at forklare hvorfor det sker? Ja? PUBLIKUM: [uhørligt]. ANDI Peng: Præcis. Så her, er betingede er, hvis argc lig er lig med 2. Så kun i tilfælde, at der er to kommandolinjeargumenter. Så jeg har tænkt mig at udskrive, hej, hvad det er. Men ellers, jeg har tænkt mig at udskrive bare, hej verden. Så er der nogen ønsker at give mig et eksempel af, hvordan jeg ville være i stand til rent faktisk få det til at udskrive værdien af ​​argv 1? Hvad ville jeg nødt til at input her? Kun én ting, ikke? Fordi dot goddag til allerede tæller som det første argument. Jeg har kun en mere. Så dot hej, hvis jeg bare gøre Andi. Hej, Andi. Er alle forstår hvorfor det sker? Ja. PUBLIKUM: Så rummet mellem kommando line-- er det [uhørligt]? ANDI Peng: Nej. Så rummet i en kommandolinje argument, x, for at fortælle din computer at dette er starten på en ny streng. Så snor argv her-- det butikker alle dine kommandoer linje argumenter i strenge. Og så pladsen i kommandolinjen argument-- alt det gør, er at fortælle dig, dette er ved enden af ​​en snor og det er tid til at gå videre til en anden. Ja. Dette er temmelig vigtigt for din pset, fordi du er vil teste disse. Så nogen der har spørgsmål om dette? OK, cool. Ja? PUBLIKUM: Så grunden til at du ville sætte heltal argument calc stedet af [uhørligt] ville være, når du vil at skrive yderligere oplysninger til [Uhørligt]? ANDI Peng: Ja, præcis. Nogle programmer kræver, at du at indtaste en kommandolinje argument at den passerer ind og som bruger det. Ja. PUBLIKUM: Så hvad nu hvis [uhørligt]? ANDI Peng: Nå, hvad skal jeg at ændre så i mit program? PUBLIKUM: Bare 3. ANDI Peng: Hvorfor er det sker, tror du? PUBLIKUM: Da [uhørligt]. PUBLIKUM: Du er nødt til at ændre det til 2 [uhørligt]. PUBLIKUM: 1 og 2. ANDI PENG: 1 og 2, nøjagtigt. Så i dette tilfælde, ville du sandsynligvis ønsker at have to printf statements-- en, der trykte argv 1 og den, der udskrives argv 2. Her. Jeg kan faktisk gøre det rigtig hurtigt. Værs'go. Oh. Ikke helt, hvad du ville. Men hvis du fyre rode rundt med formateringen, vil det komme ud. Ja. Cool. Jeg ved, vi er en smule kort på tid. Men jeg bare hurtigt tilbringe en par minutter går gennem helpful-- PUBLIKUM: Du har to minutter. ANDI Peng: Jeg har to minutter? Tak. Nogle hurtige pset tips. Så for denne pset, jeg stærkt anbefale, som jeg sagde, at alle læse spec. Du vil skrive tre programs-- én kaldet initials.c, en kaldet caesar.c, en kaldet vigenere.c. Nogle vigtige tips, der du fyre virkelig ønsker at holde mind-- så der er denne funktion kaldet atoi-- som jeg gerne sige, en trois. Uklart, om det er faktisk, hvordan du siger det. Men alt det gør, er det indtastning. Det konverterer en streng til en int. Så a repræsenterer ASCII til i heltal. Det er bare at konvertere ASCII værdier heltalsværdier. Så husk argv, array, der gemmer alle dine kommandoer linje arguments-- lagrer dem alle som strenge. Og så hvis du ønsker at være i stand til har en af ​​dem til at blive et heltal, du kommer til at have at bruge denne værdi her. Modulo, ligesom vi dækket tidligere i klassen i dag, giver dig mulighed for at have den Resten af ​​hvad du har. Så hvis vi har rigtig, rigtig store tal i Cæsar, hvad hvis vi har enden af en streng af Vigenere? Hvordan vil du være i stand til at få det til at ombrydes omkring? Hvis jeg ramte z og jeg vil det til at gå tilbage til en, hvordan skal jeg få at for at wrap omkring? Sandsynligvis vil bruge modulo derinde et sted. For det andet, browse rundt dit bibliotek. ctype.h. Det er et nyt bibliotek, vi har. Du kan finde en masse virkelig, virkelig nyttige functions-- isupper, islower, toupper, tolower, isalpha, et cetera. Alle funktioner, der vil være meget nyttigt når du forsøger at finde ud af, er denne karakter et lille bogstav? Hvordan kan jeg konvertere dette streng til et stort? Alle disse ting vil være meget, meget nyttigt for din pset. OK. Kontortid i aften er 8:00 til 11:00 i TEAL klasseværelset i morgen samt onsdag og torsdag aften. Kontortid er i overdrev. Meget tyder jer alle komme i gang med det samme, fordi du ikke ønsker at være, at barn, der torsdag aften har problemer indsende dit pset og lignende, jeg ved ikke hvad de skal gøre. Jeg begyndte, jeg færdig, indgav jeg. Prøv at give dig selv lidt plads, fordi der i kode problemer altid opstår. Du ønsker at være sikker at du giver dig selv en masse tid at være i stand at fuldføre psets. Cool. Jeg vil hænge rundt her. PUBLIKUM: Er dette online allerede? ANDI Peng: Jeg ved ikke, om det er online allerede, men det vil være. Jeg vil hænge rundt her, hvis nogen har nogen spørgsmål allerede. Tak for at komme.