[Powered by Google Translate] [♪ Buzzing ♪]
Så för att introducera dig till vad jag har på skärmen,
Det är ett av de verktyg som vi utvecklat under sommaren,
det kallas CS50 utrymmen,
och det är vår gemensamma kodning ansökan
att vi kommer att använda i sektioner.
Det är ganska coolt.
Har någon av er sett CS50 köra ännu?
Låt mig dra upp det i en annan flik.
Run.cs50.net
Så
om du går till run.cs50.net,
du kan se att detta är en i din webbläsare sätt
faktiskt kod - skriv C-kod,
och kör den,
så det både kompilerar det, kör den, då återgår utsignalen till dig,
så detta är typ av ett coolt sätt att experimentera
med några av koden som David går över i föreläsningar
och vi ger på dig på problem uppsättningar
utan att behöva skjuta upp apparaten.
>> Så vad Spaces gör som skiljer sig från det
Om jag byter tillbaka till den här fliken
Spaces är CS50 kör, som du ser här,
men om vi bläddrar över och titta på den andra sidan av fönstret,
du ser rätt jag är den enda personen i detta utrymme,
men vad jag ska göra är att be er att delta i denna Space med mig
och vi kommer alla få kod i samma lilla fönstret,
dela kod med varandra,
och tala om skillnaderna mellan vår kod.
Så det är lite av en cool sak -
så att gå med, om du skulle besöka den här länken här på toppen
som jag har markerat,
kan du bara skriva in apps.cs50.net/spaces/vqcspSnO.
>> Okej, så börja,
Jag ska ge er en liten bit av en rundtur i detta.
Vi ska göra några fåniga lite kodning med det först,
bara så att alla får kinda en känsla för hur det är,
men vad jag har gjort -
eller vad jag ska göra här är -
Jag ska ta den kod som jag har skrivit här,
vilket som ni ser just nu är tom;
det gör ingenting.
Det är bara panna plattan kod, vi kallar det.
Med lite att göra kommentar.
Jag ska spara den genom att trycka här knappen Spara.
Och vad som gör det
betonade upp det här kort - denna översyn spara grön ruta,
och nu, om du söker efter mig i rymden,
du klickar mitt namn,
du kan se att jag har denna revidering här,
och om du klickar på den revidering,
det ska ladda den koden i din Space också.
>> Så har alla laddats att koden i sin Space?
Okej, om du ännu inte, gå vidare och göra det,
och sedan vad jag vill att ni ska göra i denna lilla att göra avsnittet
är att skriva lite med printf om dig själv,
så till exempel, skulle jag skriva
printf ("Mitt namn är Nate");
och då jag skulle skriva
"Jag tog examen 2009
från Stanford "
och jag skulle älska att höra om
Vilket år är du i skolan,
oavsett om du är på college eller handelshögskola
eller annan Harvard School,
vad du studerar om det är känt ännu;
om det inte är känt, det är helt cool.
Jag har inte bestämma förrän jag var sen i min andra år.
och då skulle jag också vilja veta
något galet du vill berätta för mig eller
något om klassen eller bara något annat.
När du är klar skriver det med din lilla printf,
Om du sparar en översyn eller snarare
först se till att du kan köra det
och att det skriver ut exakt vad du vill att det ska skriva ut,
och sedan om du gå vidare och rädda revidering
med översynen knappen Spara denna första lilla killen här,
och vi kommer ganska gå igenom och göra lite introduktion på det sättet.
Så du bör bara slå på knappen Spela,
som är upp här på upp till vänster,
så här Spela-knappen på övre vänstra kommer
skicka din kod iväg till vår server där det blir sammanställas och sedan köra.
Så vad är kinda galen om detta är
denna kod faktiskt inte körs på din dator,
det är faktiskt skickas över Internet.
>> Hur är läget, Charlotte?
>> I - okej. Jag är - Jag tror jag är
har svårt att spara det
på servern så att den kan - Jag kan köra programmet.
Och sen när jag försöker köra den, står det att det finns ett fel.
Deklarerats som ett virus, vilket inte är där längre.
Åh, låt oss se, kan du slå på Spara igen?
Jag ser det på skärmen.
>> Rätt, okej, så vad jag har.
Och jag vet inte varför det inte låta mig köra den.
Åh, okej, ledsen.
Kan du förklara varför - vad som var fel - vad som inte fungerar med den?
>> Ja, eftersom jag inte se att det fanns en sista raden där det finns fortfarande en variabel
att jag inte hade deklarerat, vilket jag inte hade för avsikt att det är det.
Ja, perfekt!
>> Nu om jag sparar det, tror jag att det skulle fungera.
Nu när du har sparat den, fungerar det, häftigt.
>> Så ja, som vi går igenom -
så vad som pågår,
Jag ska bara upprepa detta för kameran.
Vad som hände var att denna variabel är
lämnades in efter - jag antar att du raderat en del andra saker
där du förklarats,
och så detta kastade saker och var inte så att du kör det.
Så detta är precis vad vi vill göra i avsnitt
är har människor försöker skriva olika delar av kod,
sammanställa det, se vad som fungerar, se vad som inte,
och sedan kinda prata om dessa saker, eftersom dessa är utlösning punkter som
Jag möter fortfarande,
Jag fortfarande - jag gör massor av fåniga saker hela tiden,
och jag vet inte varför det inte fungerar,
så låt oss dra upp Charlottes revidering 3,
och vi kommer att köra det.
>> Så när jag kör, nu när jag har hennes kod här,
Jag kan zooma in, slå på knappen Kör,
uppladdningar det bygger det, kör den,
säger att det sprang framgångsrikt, och om jag bläddra ner,
se Charlotte är en junior på Adams House,
psykologi, sekundär i ekonomi, awesome.
Trevligt att träffas!
Toppen.
Okej, vi går vidare, låt oss gå till Daniel,
gå till revidering 3,
kompilera, köra;
varför inte du berätta lite om dig själv, Daniel?
>> Kalla mig Dan.
Jag ska handelshögskola mittemot er,
och jag var i marinkåren innan här,
och detta är nytt för mig, så ja.
Känn dig inte illa, jag är 30 och jag vet inte något av detta grejer.
Toppen, tack, Dan!
Okej, vi har en annan Daniel.
Du går av Daniel - kommer du presentera dig, Daniel?
>> >> Visst, jag Daniel.
Jag är en sophomore på Mather just nu.
Jag koncentrerar sig på regeringen,
men jag ville ta CS50 eftersom jag har hört bra recensioner om klassen
och jag har aldrig provat CS tidigare.
Bläddra ner här och visa denna - cool.
Går vidare, Jared.
Hur går det?
>> Bra, hur mår du?
Som ni ser, jag är en yngre filosofi koncentrator i Eliot,
ursprungligen från södra Kalifornien,
och jag är intresserad av att CS50 eftersom jag gillar logiken av det,
och det verkar riktigt coolt att göra saker på datorn, så.
Toppen, var i södra Kalifornien kommer du ifrån?
>> Om en timme från [ohörbart], en liten stad [ohörbart].
Oh, ja, det är min pappa från Redlands.
Cool stuff.
>> Okej, Jimmy, hur är läget, Jimmy?
>> Bra, hur mår du?
Gör ett bra!
Berätta om dig själv.
>> Jag är en nybörjare, och jag är inte helt säker på vad jag huvudämne
men jag ganska lutar mot ekonomi.
Liksom Daniel framför mig, jag har aldrig gjort någon CS, men det låter ganska coolt.
Jag är ursprungligen från Chicago.
Toppen. Så kolla in hans utskrift här.
Jag ville fråga, gjorde detta tryck ut som förväntat?
>> Nej, jag glömde att skriva ut en ny rad.
Jag glömde faktiskt att när jag skrev min grej
för första gången också.
Det är lite av en smärta att komma ihåg att sätta dem i hand.
Det skulle vara trevligt om det bara vet att det är vad du ville.
>> Okej, Kelly.
Wow, vi har 2 Kellys, 2 Daniels, 2 Kellys.
Så Kelly - går du av Kelly Ren?
Okej, häftigt.
Eller Kelly, menar jag.
>> Så ja, så jag är Kelly.
Jag är en andraårsstuderande i Pfoho.
Jag fick ett e-postmeddelande i dag att jag fortfarande har 7 veckor att förklara min koncentration,
så jag försöker att inte tänka på det,
och jag gillar bakning, löpning och Craisins.
Jag har inte erfarenhet av det mesta av CS;
Jag lärde mig att bygga webbplatser när jag var riktigt ung,
men jag tror jag nog lärt mig fel många gånger.
Förhoppningsvis kommer jag lära lite mer
och - ja.
>> Toppen, bra, tack.
Låt oss gå till den andra Kelly,
Jag har ingenting - sa du något här?
>> [Ohörbart]
Där är det!
Söt!
>> Okej, så jag är Kelly.
Jag är en första året doktorand.
Jag huvudämne i åtanke hjärna och utbildning.
Jag tog examen i Franklin & Marshall College i 2008
med stora aktörerna i psykologi och sociologi
och en mindre på franska.
Jag tar CS50
eftersom jag är intresserad av att få en doktorsexamen i neurovetenskap
och jag känner detta kommer att hjälpa mig att förstå den teknik som används.
Toppen.
Går vidare, Mikaela.
Är det korrekt uttal?
Okej, häftigt.
>> >> Jag Mikhaila.
Jag är en andraårsstuderande i Kirkland House,
och jag koncentrerar inom maskinteknik.
Jag gillar verkligen cykling, byggde en cykel i sommar.
Jag tar CS, faktiskt,
som en koncentration krav,
men du vet, jag tror det är fortfarande kallt sorts teknisk klass.
Awesome - du byggt en cykel i sommar?
>> Ja.
Wow, liksom ramen och allt det där?
>> Uh-hunh (jakande).
Wow, det är riktigt coolt.
>> [Ohörbart utanför kameran chatt]
[Skratt]
Ja, det har varit så länge.
Man vet aldrig, eller hur?
Tja, cool, bra tack, Mikhaila.
>> Okej, Missy.
>> Jag heter Missy, jag är en nybörjare,
så det betyder att jag inte vet något!
Jag vill koncentrera astrofysik.
Under CS50,
Jag känner mig som kommer definitivt att hjälpa till med det.
En udda faktum om mig är att jag är en nationellt certifierad brandman.
Wow!
Hur gick det till?
>> Jag deltog en akademi
och gick igenom helvetet för många veckor
och fick min certifiering.
Wow, grattis!
Det är ingen liten bedrift, säkert.
Okej, så nu ska vi göra mig.
Jag är nästa i raden.
Jag är - köra den.
>> Så mitt namn är Nate.
Jag var klass 2009 vid Stanford.
Jag var en symbolisk Systems stora,
som liknar Mind, Brain, Behavior koncentration här,
men det är lite av en blandning av
datavetenskap, lingvistik, psykologi och filosofi.
Typ av - ja, en massa konstiga saker, men det var bra,
och då jag gjorde min magisterexamen i datavetenskap där, liksom.
Så jag är ny på Harvard i år.
Jag ville verkligen komma in undervisningen.
Jag tillbringade de sista 4 åren vid Stanford TA-ning Datavetenskap klasser
och så David lät mig komma på,
och jag ska vara att hjälpa till med CS50,
så jag gör detta på heltid, jag är inte i grad skolan.
Det har varit roligt.
Förhoppningsvis kommer att fortsätta att vara roligt, jag är säker på att det kommer.
>> Okej, Sam.
>> Mitt namn är Sam, jag är en sophomore på högskolan, i lag specifikt.
Min stora blir vetenskapshistoria, förmodligen, och VES sekundära,
och min favoritfärg är gul.
Inget behov av att döma eller något, men det är en bra färg!
Och Stella.
>> Hej, jag är Stella, jag är en nybörjare i Grays.
Jag har ingen aning om vad jag har koncentrerat ännu,
så CS50 var bara typ av slumpmässiga,
vilket är intressant.
Kul själva verket var Jimmy första Harvard vän till mig,
eftersom vi är båda från Chicago.
Cool, och Grace - som är tänkt att vara den riktigt nice, eller hur?
>> Jag trodde [ohörbart].
Oh, ja.
[Ohörbart / off-kamera chatt]
Okej, jag är fortfarande lärande, fortfarande lärande.
>> Så vi har fått något annat som är ganska intressant här.
Ja, jag bara undrar, har du en idé som händer här?
Du vet hur man ska tolka detta?
>> Jag var tänkt att sätta semikolon efter varje enskild linje.
Det är lite av en smärta.
Ibland dessa semikolon kan vara en verklig smärta att spåra.
Så visar det sig att
specialprogrammet vi använder i år till
kompilera vår C-kod kallas klang,
och anledningen till att vi har börjat använda klang i år -
eftersom vi inte har använt programmet tidigare,
Vi har använt en annan som heter GCC som är riktigt populär -
Klang ger faktiskt dig felmeddelanden som vettigt.
Den här säger "förväntas", "efter uttrycket"
och det säger även du uttrycket varefter du behövde ett semikolon.
Så är du om fastställande av det?
>> Ja, just nu.
Toppen, låt mig veta och vi kommer dra upp, och vi kommer köra det.
Men ja, sätta dessa semikolon i är typ av en smärta.
>> Jag fixade det, så jag tycker att det borde fungera.
Awesome - revision 3.
Det ser ut som det.
Okej, så nu när vi kör det,
där det går.
Cool stuff.
>> Okej.
Så tack för att göra det.
Det är bra att träffa er.
Vad vi ska göra nu är tillbringa nästa lite
Kinda dykning i avsnittet problem
som kommer från problemet som den här veckan
och vi kommer att göra det för de flesta av avsnitten
för resten av perioden,
och sedan kommer vi spara de sista 15, 20 minuter eller så
att prata om problemet satt
och sedan bara alla andra frågor du har i allmänhet om klassen.
Som sagt, vad vi verkligen vill göra
är ha alla deltar
med utrymmen grejer,
kasta in kod, kasta i förslag,
och talar om när saker gillar denna rast
eller fungerar inte, bara för att det är saker som
Jag vet att jag kom över
när jag började kodning,
och var verkligen ganska frustrerande ibland
för om det är som 2 am innan ditt problem set beror,
så - bara för avslöjande,
Jag har inte börja programmera förrän jag var en sophomore på college.
Det var typ av denna konstiga, okända ting
att jag hörde var ganska coolt
och jag hörde också att det kan vara en verklig smärta i butt
om du missar ett semikolon och det är den enda fel att hålla ditt program från att arbeta
och hålla dig från att gå i vila,
så definitivt,
om du har frågor som detta,
Om du har frågor som detta, låt mig veta,
eftersom jag vill göra detta till en bra upplevelse för er.
>> Så har ni hämtat alla problem som ännu?
Kinda vet var den är? Okej.
Så går vi till cs50.net, eftersom jag inte har den på detta konto,
dra upp problemet set,
dra upp problemet set 2, och vi ska titta på standardversionen idag.
Vi ska dra upp specifikationen här.
Bläddra nedåt.
Så vi ska börja titta på denna del av frågorna.
Har ni sett dessa shorts ännu?
Okej.
Så det finns kortfilmer om loopar,
vilket görs av Tommy, en av stipendiaterna huvudet undervisning.
Det finns en på omfattning,
Jag tror görs av en annan lärare man vid namn David
och sedan en om Caesar Cipher också gjort av David.
De är ganska coolt.
Har ni kollat ​​sina shorts hittills?
How've de varit?
Hjälp? Okej, bra att veta.
Om de inte är, kan du säga så.
Men innan du gör det,
har ni tittat på dessa frågor
alls?
>> Låt oss tala om det här lite.
Så vi har infört under de senaste veckorna
i föreläsning
ett antal olika slingor.
Det finns for-slingan,
while-slingan och sedan gör-while-slingan,
och föreläsning, vi har talat mycket om
hur dessa slingor är alla
ganska lika på många sätt,
och du kan göra mycket av samma saker med en while-slinga
som du kan med en for-slinga.
Du måste bara typ av använda rätt kombinationer av variabler och sådant.
och så verkligen
den verkliga skillnaden mellan alla öglorna är att
Ibland är de mer användbara
använda dem på en gång än vid ett annat tillfälle.
>> Så till exempel,
while-slingan skiljer sig från en gör-while-slinga.
Känner alla som de har ett bra grepp om när
en gör-while-slinga är mer
användbart eller vad skillnaden är?
>> Jag tror att skillnaden är en gör-while-slinga
kör - Jag vet inte riktigt vad terminologin är,
men serien av funktioner inom slingan.
De automatiskt - det gör sina körningar åtminstone
innan den kontrollerar tillståndet, eller while-slingan kommer bara köra det när
det körs kontinuerligt - huruvida villkoret är uppfyllda.
Ja, gör det vettigt?
>> Låt oss ta en titt på lite kod.
Så bara för att upprepa frågan,
eller svaret, snarare;
svaret var att
en while-slinga kommer att kontrollera för att se om villkoret
du anger uppfylls
innan den löper kropp slingan för första gången,
Det gör-while-slinga körs automatiskt kroppen av slingan,
är vad vi kallar det - det är konstigt terminologi,
men om jag någonsin säga något som inte är vettigt, låt mig veta -
slingan är det där som du sätter i mellan klammerparenteser.
Och i en gör-while-slinga,
det organet få köra minst en gång,
och sedan tillståndet blir kontrolleras innan det löper varje efterföljande gång.
>> Så egentligen, Sam,
något emot dig skriva en enkel while-slinga
i utrymmen?
>> Hur sorterar man av liknande
göra en ny ...?
Jag raderar bara vad du har där.
Ja, bara ta bort det.
>> Tja, jag tror jag har det här -
vilken vill du ha, en stund, eller vill du ha ...?
Ja, bara en stund sant, skriva något.
Och låt oss se.
Alexander, insåg jag att vi aldrig introducerade dig.
>> Åh, det är bra.
Har du - kan du koda upp en gör-while-slinga för oss?
>> Ja, jag ska försöka.
Okej, vi drar bara upp dessa på skärmen,
så att du typ av har ett handtag på vad skillnaderna är.
>> Så här är vad Sam har gjort.
Han har ett heltal kallas jag
att han initieras till 17.
Sen säger han medan (int i = 17)
printf ("Mitt namn är Sam.");
Så vad händer när vi kör denna kod?
Det finns ett fel, vad felet säga?
Vi drar upp den och prata om det.
Ett fel uppstod, säger det.
Låt oss bläddra nedåt.
Så det gav oss detta fel, och det sa,
"Hej, jag förväntade mig ett uttryck."
Det är ganska kryptiskt.
Ja, så exakt - och igen,
kommer det att finnas en annan liten bugg som vi kommer att fånga på bara en sekund.
Men detta är en annan av dessa typer av konstiga terminologi saker,
så detta int i = 17
är inte ett uttryck.
Vad det ser ut som det gör är att det är
förklara ett heltal kallas jag
och ställer in det till lika med 17
eller, snarare, sätta 17 in i den int kallas i.
Och det inte är vettigt
i samband med detta samtidigt slinga.
Det är vettigt, eftersom vi får se,
i samband med en for-slinga, eftersom det för loop deklarationer inte börja
med den för int i lika något
och går vidare.
>> Det gjorde du -
fixa något, okej.
Här går, häftigt.
Så nu ser det lite annorlunda.
Ett par saker har förändrats.
Kan du berätta vad saker och ting har förändrats?
>> Jag tog fram int, så det finns ingen förklaring [ohörbart] i stället för ett uppdrag.
Den en likhetstecken lade jag 2 likhetstecken, vilket innebär ett likhetstecken.
Toppen.
Ja, så vad Sam gjorde han tog ut int
Det var just här tidigare,
så om jag bara tittar på detta - det är vad det var tidigare, sa det int,
som förklarar det - så vi tog ut typ.
Det finns int, char, sträng, kort,
dessa kallas typer.
Så du tog ut den typ
och sedan tidigare,
Han hade bara den enda likhetstecken
och vad han sa var problematiskt om detta
när du har 1 likhetstecknet
Det är ett uppdrag operatör.
Det är inte att testa huruvida 2 saker är lika.
Det faktiskt lurar något motsvarande något.
Vi sätter numret 17 i variabeln i.
Så för att göra den typen av jämförelser,
Du måste använda dubbla jämlikar,
som är typ av en konstig sak
men är ett ganska vanligt fel.
Så en annan sak jag påpeka, om du inte har något emot,
är att
vår funktion här i int main,
du ser att kroppen av vår funktion
är förskjuten från den vänstra sidan
med 4 platser eller en flik.
Anledningen till att vi gör detta
är bara för läsbarheten.
Som du kan se i Sams medan slinga här,
han inte strecksatsen alls,
och som inte påverkar funktionaliteten av koden.
Det kommer att köras exakt samma.
>> Så till exempel, om vi kommer upp till toppen här
och tryck vår Play-knappen, kommer det att bygga den,
det ska köra det,
och vad som kommer att hända?
Varför fungerar det fortfarande säga igång?
>> Eftersom det kommer fortsätta upprepa hej.
Exakt, och varför hålla det upprepas hej?
>> Eftersom heltal ändras aldrig, så det är alltid 17.
Ja, exakt, så
låt oss se efter - påminner mig om ditt namn igen?
Jimmy. Så Jimmy sa att
Anledningen till detta fortsätter att upprepa hej om och om igen
beror detta villkor är alltid sant.
Vi byter aldrig värdet av jag.
Vi byter aldrig innehållet i vad som lagras i den variabeln.
Så på denna punkt fick vi detta fel som
programmet genererade för mycket effekt,
och om vi bläddra ner och typ av titta på vad som händer här,
du kan se att det är hi, hi, hi, hi, hi, hi, hi hela vägen igenom.
Toppen.
>> Så slags tillbaka till den ursprungliga punkten
att ha fördjupningen här
i kroppen av while-slingan inte påverkar någonting.
Programmet löpte fortfarande fint.
Typiskt för god stil -
och detta är något som vi ser i dina problemområden set -
ber vi dig att stycket genom att 4 platser, som du kan göra
genom att bara trycka på tabbtangenten
eller genom att manuellt sätta i 4 platser själv.
Cool, okej så låt oss gå tillbaka och titta på
Alexanders gör-tag.
>> Bara Kinda har lite problem.
Okej, låt oss arbeta igenom det.
Är det coolt?
>> Ja.
>> Okej, så nu kör vi.
Detta är koden som Alexander skrev.
Vill du gå av Alex - okej.
Så här är koden som Alex har skrivit.
Så, vi har vår förklaring om huvud just här,
och sedan har vi fått denna heltalsvariabel kallade jag
deklareras här.
Vi har en gör uttalande
och sedan kroppen igen med dessa hängslen,
så detta är kroppen av gör-medan -
Låt mig zooma in på detta så det är lättare att läsa -
och i kroppen, vi försöker skriva ut "detta är kroppen",
i + +,
så öka innehållet av i och göra det
tills jag får vara 3,
och sedan vårt program avslutas.
>> Så vad händer när vi kör det här programmet?
>> Jag förväntade en identifierare.
Okej, så bygga, driva, uppstår fel.
Vad händer?
Vi rulla ner här,
vi får denna något kryptiska ser sak,
förväntade semikolon efter toppnivå deklaration.
Det är ganska konstigt.
Har någon en idé om vad som kan händer?
Kinda konstigt, ja.
>> [Ohörbart] deklareras utanför parentesen?
Så betyder det inte gäller, när du använder parenteser?
Så han förklarade den här killen utanför som parenteser?
Åh, dessa killar - de klammerparenteser?
>> Ja.
Ja, exakt.
Så visar det sig att
Du kan faktiskt inte deklarera en variabel här så här.
Vad du kanske har försökt att göra var -
klippa ut den där -
kan du antingen lägga den inom klammerparenteser här
eller annat alternativ
är att sätta det helt utanför.
Och så dessa - beroende på var du faktiskt sätta deklarationen
denna heltalsvariabel,
du kan få 2 mycket olika typer av variabler,
när det är utanför huvud,
Det är vad vi kallar en global variabel.
Det är utanför någon av funktionerna -
det är inte i en funktion -
medan om vi sätter det inne i huvud,
gillar här, så det kallas en lokal variabel,
eftersom det är lokal omfattningen av huvud.
Och vi pratar lite mer om vad skillnaderna är
mellan de 2 typerna och varför du använder olika typer av variabler,
men för nu,
Du kan bara hålla alla variabler lokal,
eftersom vi inte har något behov av globala variabler.
>> Okej, så det är en sak där.
Låt oss försöka köra detta igen, se vad som händer.
Kör, få ett annat fel.
Zooma in lite, vad vi får?
Vi får här förväntade parentes efter gör / tid.
Några idéer vad som händer? Dan?
>> Är tag sedan parentes och sedan -
Jag vet inte om du behöver redeclare int,
men gör samtidigt (i <3).
Exakt, ja.
Så det visar sig att Dan är precis rätt.
Vi behöver inte sätta denna typ här igen.
Vi kan i stället döda typ
och bara göra det.
Okej.
Jag what ut, prova det en gång till.
Titta på det, det går lyckat.
Om vi ​​scrolla ner, "detta är kroppen" skrivs ut 3 gånger.
Det är ganska sött.
Bra gjort, bra gjort, grabbar.
Bra gjort.
Hur är detta gå så långt?
Decent takt?
Okej, coolt.
>> Så när vi typ av tillbaka till den ursprungliga frågan,
vi - och nu om vi ser skillnaden,
du ser att i denna gör-while-slinga,
villkoret kommer sist.
Så som datorn läser programmet
eftersom C-program körs typ av i denna ordningsföljd,
där de bokstavligen börjar med den första raden i huvud,
och sedan köra rad 6, rad 7, rad 8, rad 9,
ledning 10, 11 linje,
allt det här längst upp till höger här
kommer att utföra en gång
innan vi testar någonsin detta villkor för att se
om jag - eller innehållet av i, snarare -
är mindre än antalet 3.
Och endast om när vi kommer till ledningen 12,
innehållet av i mindre än 3
hoppar vi faktiskt tillbaka till linje 7
och sedan upprepa processen,
och sedan testar vi tillståndet igen och igen och igen.
>> Så vi kan jämföra detta
med - zoomar ut igen,
bläddra ner till Sams version,
vi ska titta på det här, något ändras så att det inte längre en oändlig loop -
där om vi zoomar in,
ser vi att programmet exekveras,
det kommer att först förklara int i,
ställa innehållet i jag vara att 0,
och sedan träffar tillstånd medan slingan först,
så i detta fall, den här kroppen, denna printf ("hej") och i + +
kommer inte ens utföra
om jag är faktiskt mindre än eller lika med 2.
Så om i är 3, till exempel,
om vi sätter det här
lika med 4 - eller jag ska göra 3, eftersom jag sa 3 -
och kör den,
det ska bygga, det ska köras helt bra,
men det kommer inte att faktiskt skriva ut något,
eftersom det inte att testa för det första fallet.
Så i klassen, vi typ av talat om varför dessa gör-while-slingor
är användbara ibland
och varför vi skulle använda det i motsats till en while-slinga.
>> Finns det - Har ni några förslag
till varför en gör-while-slinga kan vara mer användbart?
>> Jag tror do-while-slingor är om du vill indata,
eftersom det sätt du kan låta dem
sätta något i gång, om det är korrekt,
Vi kan gå vidare till resten av programmet,
men om det inte är korrekt, då du håller på att användaren
tills du lägger rätt ingång.
Ja, exakt - exakt,
så en gör-while-slinga är användbart
eftersom vid fråga om användarinmatning
eftersom du behöver för att få användarens indata innan du faktiskt kan kontrollera det.
Så i pset 1, i pset 2,
där du uppmanas att användarinmatning mycket,
Det är en praktisk sak att använda
i motsats till bara en enkel while-slinga.
Om du använder en while-slinga, kan du göra samma sak -
Du kan göra samma sak med en while-slinga
som du gör med en gör-while-slinga.
Det är bara att typ av ha denna dubbla process
där du får in först och sedan starta while-slinga.
En gör-while-slinga, du måste bara skriva det en gång
och det är en mycket renare.
>> Okej.
Några frågor?
Vettigt?
>> Avkastningen 0 - det är bara lite av en stall eller är det -?
Ja, så att vi kan -
bra, vi täcker detta lite mer senare
men det visar sig att
denna återgång 0 att vi sätter
I slutet av huvud hela tiden -
Du kan kinda bara ta det som något vi gör
för närvarande.
Vad vi har börjat prata om med funktioner
typ av i slutet av förra veckan och sedan igen den här veckan
är att en funktion
tar ingångar som är dessa saker inom parentes;
dessa är 2 ingångar, våra argument eller parametrar,
vad de kallas till vår huvuduppgift,
och sedan en funktion alstrar en utsignal
som vi kallar ett returvärde.
Och returvärdet i fallet viktigaste är int,
detta heltal,
och hur du berättar en funktion, "Hej, detta är vad din produktion
kommer att bli, "är på ordet" återvända ",
det sökordet, snarare
och så huvudsakliga återvänder 0
eller huvudsakliga mata 0
är standard i C-program
eftersom återvänder 0 från stora medel som
"Hej, allt utförs med mitt program bara bra."
Om vi ​​skulle sätta något annat än 0,
som 1, till exempel,
som används för att tala om vem körde programmet
att något gick fel.
Så när vi blir mer delaktiga med grejer över terminen,
om du någonsin behöver säga,
"Oj, du vet, något gick fel med det här programmet,"
snarare än att mitt program kraschar vill jag meddela
löpare av mitt program att något gick fel,
Du kan använda returvärdet,
som vi kallar det, det är inte 0.
>> Så vi kommer att täcka det lite mer
när vi kommer in funktioner.
Denna typ av vettigt?
Okej.
Funktioner är typ av bisarra -
Jag tror att för människor som har massor av matematik bakgrund,
det kommer lite lättare,
särskilt om du har lite mer abstrakt matematik bakgrund
och du är van att prata om funktioner
och alla såna saker.
Men vi ska försöka täcka dem
och gå lugnt och fint när de kommer upp.
Likaså hela denna int argc,
char * argv [],
för just nu, kan du också ta det som pannan platta.
Vi har börjat att täcka de lite i föreläsning
när vi talar om argument som får skickas in program på kommandoraden,
men i dina problem uppsättningar och dina program,
Det är helt bra att bara skriva ogiltig och hålla det enkelt.
Och vad detta tomrum innebär att
"Hej, är främsta kommer inte att acceptera några ingångar;
detta är bara ett program som vi ska bara köra.
Vi ska inte ge det någon extra information
varje gång vi startar upp igång. "
Så nu kan du göra det här;
Du kan också även utelämna retur 0
I slutet av dina program och de kommer springa bra,
men jag rekommenderar bara hålla det i.
Om ett par veckor kommer vi att börja typ av
dra tillbaka locket lite och förstå mer om
alla dessa olika små rörliga delar.
>> Okej, nu ska vi prata om vår andra fråga här.
Så vad visar "odeklarerat identifierare" vanligtvis
Om matas av klang?
Jag tror att vi kanske har sett att redan idag.
Kan någon ge en resumé av vad det innebär?
Låt oss se, Kelly - en av Kellys.
>> Så -
Ja, vad gör -
>> Jag tror att när du, liksom, inte deklarera variabler och du försöker använda den.
Ja, exakt, exakt.
Så om du ser någonsin denna utgång
när du försöker och kompilera ditt program,
precis som Kelly sade,
Det betyder att du använde en variabel som du inte deklarera,
så om jag går tillbaka till vårt utrymme,
och jag göra något liknande
printf (
"Hej% s")
och försöka fylla i den% s
med en variabel är att jag inte har förklarat någonstans
och jag försöker köra den,
ser du vad jag får ner på denna botten här:
"Användning av odeklarerat identifierare" s "";
det betyder bara att du inte deklarera din variabel.
Samma sak händer om
du har x och du försöker och lagra 7 i den
och jag inte förklara X.
Jag får samma fel:
"Användning av odeklarerat identifierare" x "".
>> Okej,
så Caesar Cipher, som inte är mycket säker,
Jag ska låta er titta på detta kort, typ av förstå varför,
och förhoppningsvis efter att ha gjort denna veckas problem som
där du faktiskt skriva en Caesar Cipher, kommer du att förstå lite mer
om vad det innebär att vara en trygg och osäker -
eller inte säker, jag antar - osäker är något annorlunda.
Den andra saken var att vi har dessa andra frågor här
om funktioner
och vad en funktion är,
och vi typ av talat om det kort när vi talade om returvärden;
för någon som har varit att föreläsa,
kan du sammanfatta som varit att föreläsa idag?
Okej.
Låt oss se, låt oss ha - kan någon berätta vad en funktion är?
Kelly?
>> >> Princip något du utnyttja något som är skrivet i biblioteket som är
mer komplicerat där borta, och då du bara skriva en kort form av det,
så som du hänvisar till det biblioteket, med hjälp av
allt lång kod och [ohörbart].
Ja, exakt, och sedan vill du lägga till något till det?
>> Ja, jag tror på det som liknar begreppet formel i matematik
där du skriver bara en formel och sedan kan du ansluta variabler i
och det är vad en funktion är [ohörbart].
>> Ja, så har vi ett par svar här
som är både riktigt bra och rätt på.
Det är med hänvisning till kod som är skrivits i biblioteket någonstans
som är mer komplicerat
och sedan kan du dra nytta av denna kod
och faktiskt använda den genom att bara skriva korta formen av det -
eller snarare dess namn -
och sedan finns det också denna jämförelse med en formel i matematik
eller fysik, alla såna saker
där du har en formel
och du kan sedan ansluta
de variabler som denna formel
att sedan få resultatet av formeln,
så du tänker på det som som den kvadratiska ekvationen.
Tänk om i stället för att lära sig om
vad den kvadratiska formeln är i matematik klass,
du hade bara en liten miniräknare program som gjorde det för dig.
Har någon använda miniräknare program matematik klasser i gymnasiet?
Ja, fysik klasser?
Där du kan bara säga "Hej, kvadratisk formel.
Dessa är de variabler som jag vill ingång.
Ge mig svaret. "
Det är typ av vad en funktion är.
Det är ett sätt för oss att
typ av skriva som en liten liten sub-programmet
inom vår större program
och använda den om och om igen
så att vi inte behöver kopiera och klistra in koden,
Vi kan ge det olika ingångar och få olika resultat,
det är super praktiskt
När du försöker skriva olika program vid olika tidpunkter.
>> Så till exempel, en funktion som vi har använt om och om och om igen
under kursen är printf.
Printf är i sig en funktion
och det visar sig att det faktiskt är en ganska lång och komplicerad,
otäck ut, fungerar att skriva.
Så så enkelt som det verkar för oss
att skriva saker ut till skärmen,
eftersom vi alla gjorde just det i början av avsnitt idag,
det visar sig att det faktiskt är, du vet,
ett bra par hundra rader kod.
Det är inte något som jag någonsin skulle vilja skriva, säker,
men vi får använda den varje dag, det är ganska coolt,
så vi får dela den med varandra,
med olika program,
så vi kommer dyka mer i funktioner;
för närvarande, vi är inte -
den enda funktionen vi ska skriva är viktigaste.
Huvud själv är också en funktion,
och du kan se det har fått sin produktion,
dess ingångar som vi pratade om,
och sedan dess namn, vilket är främsta.
Main är lite av en - är en speciell funktion där.
I din C-programmet, måste det finnas en huvudfunktion,
och så för nu, vi har typ av utelämnat skriva
prototypen, eller deklarering huvud.
Vi har gett det till dig,
och vi har just haft du fyller i form av ämnena.
>> >> Så för det andra problemet som, behöver vi inte
skriv det i den andra funktionen?
Jag tror inte det.
Jag tror det är alla här.
Ja, så Caesar Cipher,
du inte behöver, ser det inte ut,
och Vigenère, du inte heller,
så - och det visar sig att du inte någonsin faktiskt behöva skriva
en funktion, eller hur?
Du ringer alltid sätta alla dina kod i main,
och många programmerare gör det.
När vi går vidare,
vi börjar införa funktioner som ett sätt
att rensa upp din kod,
för att göra det mer elegant,
om du har uppgifter - Ungefär som när vi pratade om slingor,
hur ibland finns det saker som du vill göra igen och igen och igen,
och du har typ av naiva sätt -
eller vad vi kallar ofta "halm mannen"-lösning,
är att bara kopiera och klistra in om och om igen -
Du kan göra samma sak med funktioner där du bara kopiera och klistra in
samma kod om och om igen,
men det blåser upp din kod -
det hamnar gör din kod riktigt långt -
och det blir också lite förvirrande,
och då betyder det att du inte kan vilja -
om du någonsin vill använda koden igen i ett annat program,
du också fastnat kopiera och klistra det igen,
så en av de saker vi ska prata om är
typ av design och stil av dina program,
och så när det är vettigt att typ av
paket upp något och lägga den som en separat funktion,
Vi uppmuntrar dig att göra det,
och det är något som, återigen,
det finns ingen hård och snabb regel.
Vi säger sällan att du måste skriva en funktion som kallas detta,
men det är mer av en av de saker du bara utvecklas över tiden
som du skriver fler och fler program.
>> Några fler frågor?
Okej, så låt oss nu
Gå tillbaka till den här killen här,
så jag är fortfarande i denna del av frågorna.
Vi har pratat om alla dessa olika sådana,
vad är en funktion, varför man skriver funktioner,
när du kan bara kopiera och klistra in?
Förhoppningsvis har vi övertygat dig om att skriva funktioner är en bra sak.
Så låt oss nu gå vidare till denna MySpace program,
och vi kommer att spendera lite tid att göra detta.
>> Så, låt oss se,
kan jag ha någon läsa detta för mig?
Låt oss ha Mikhaila - kommer du läsa detta för oss?
>> Du menar tillbaka när MySpace -
Tillbaka när MySpace var coolt.
>> "Tillbaka när MySpace var cool,
Det var på modet att skriva så här.
Kanske är det fortfarande? Jag är inte riktigt säker.
I varje fall, med användning av CS50 Appliance,
CS50 Kör eller CS50 Spaces
skriva ett program som uppmanar användaren att ett meddelande
och matar därefter ut meddelandet med sin första bokstaven aktiveras,
med alla andra bokstäver i alternerande fall,
enligt den prov på utdata nedan,
där fetstil text står för cirka användarens inmatning.
För enkelhetens skull kan du anta att användaren
kommer endast mata in gemener och mellanslag.
Tänk på detta problem en möjlighet att öva,
du kommer inte att bli ombedd att lämna programmet. "
>> Awesome, tack.
Så som Mikhaila sagt,
vi kommer att skriva ett program som MySpaces din kod.
Så gjorde någon av er använder MySpace?
Någon av er har MySpace konton?
Oh, ja, ja!
Det var ganska coolt.
[Skratt]
Jag vet.
Dating mig själv.
Så vad vi försöker göra är att skriva ett program
som går igenom
och den första bokstaven
och sedan varje bokstav därefter -
eller varannan bokstav därefter, jag är ledsen.
>> Så - och du kan se i det här exemplet,
detta är hur vi kör programmet,
och så detta är bara att säga: "Vi kör ett program som heter a.out.
Ingången som vi ska ge det
kommer att bli tillfrågad.
Vi kommer inte att lämna in på kommandoraden. "
Om du har följt alla föreläsningar
och höra om kommandoradsargument,
Det är typ av där de - som funky syntax
på stora kommer in med int argc, allt det där,
så här vi inte använder det, vi är inte att göra med något av det.
Vi ska bara få detta inskrivet av användaren,
och sedan den andra raden med funky kapitalisering
är vad vi vill vårt program till utgång.
>> Så istället för att använda apparaten eller Run använder vi Spaces
eftersom vi har utrymmen,
och så om ni skulle
få din kod se ut ungefär så här,
så jag ska spara denna översyn
bara så du har pannan plattan här
som ser ut så här, int main (void), ingenting i den.
Egentligen är det vi ska göra vi ska bara ta bort allt tillsammans.
Vi vill ha ett oskrivet blad,
eftersom vi inte ska börja skriva kod;
snarare, vi ska försöka skriva lite pseudokod
vilket egentligen bara innebär att vi kommer att skriva något som inte är kod
den typen av beskriver vad vi vill göra,
kinda som David gjorde den första dagen i föreläsning,
eller jag antar att det var den andra dagen av föreläsning när han gjorde hela strumpor demo.
Ni minns att - se strumporna?
Josef var uppe slags skriva på engelska?
Så vi ska göra samma sak.
>> Så när jag börjar skriva pseudokod,
Jag vill börja med att titta på vad ingången kommer att bli.
Och jag ger mig själv ett urval fall,
så som "tack för add!"
Och då jag skriver också vad jag vill produktionen ska vara,
som i detta fall är något som detta.
Och den sortens ger mig en bra, liksom, startpunkt att tänka på,
"Okej, jag vill ta linje 1
och jag vill omvandla den till linje 2, "
och den typen av hjälper vägleda mitt tänkande.
Detta är ett bra ställe att börja.
Ett annat sätt att tänka på det också, eftersom vi kinda gå vidare
och när du gör detta i dina egna program, är att
tänka ungefär som vad är kanten fall till detta?
Vad är typ av de konstiga scenarier?
Vilka är de konstiga insatsvaror som vi kan få?
Och vad ska de utgångar se ut?
Till exempel, en konstig ingång
skulle vara här,
skapa absolut ingenting,
som vad ska vi mata i så fall?
Något vi vill tänka på också.
>> Så precis som en fråga,
vad kan vi vill utmatning?
Om vi ​​inte får någon ingång alls, vad ska vi programmet mata?
>> Inget.
Inget? Låter bra.
Så vi vill se till att vi inte skriver någonting
Om vi ​​inte får något i.
Cool. Okej.
Så
Jag ska ringa på ett par människor som vi går igenom
och bara räkna ut ungefär som vad den allmänna algoritmen
och vi typ börja arbeta igenom det här tillsammans.
>> Så, låt oss se. Missy.
Hur tror du att vi skulle börja?
Vad skulle vara ett bra ställe att börja här
om vi vill förändra, säger, linje 1
i linje 2?
Kan du liksom bara förklara för mig, på engelska, vad du tänker?
Inte ens oroa kod.
>> Det första jag skulle göra vore att
typ av direkt användaren att berätta vad du vill.
Okej, så att säga,
"Hej, användare. Jag vill
en sträng "- fantastisk.
Så låt oss skriva ner det.
Uppmana användaren efter en sträng.
Det låter som en bra start.
Okej.
Låt oss be Kelly Ren denna gång.
Vad skulle vi vilja då göra nu?
Vad är typ av vår nästa -?
>> Samla deras insatser och lagra den som en variabel.
Jättebra.
Så samla strängen,
förvara den i en variabel.
Så är det något speciellt vi vill göra här?
Vill vi kontrollera deras bidrag
innan -?
>> Ja.
Vad kan vi vill kontrollera?
>> Du sa att vi inte behöver kontrollera om det är ett nummer, eller hur?
Eftersom det kommer att anta att det är gemener?
Ja.
>> Så det visar sig att - ja.
Så getString garanteras att återvända oss en sträng.
Det kommer inte att returnera ett tal till oss eller nåt sånt.
Det kan finnas siffra tecken inom den strängen, dock.
Och de kan vi bortse som vi gjorde kapitalisering.
Men en tom sträng är helt bra,
så fall här på linje 4 och 5,
höger, där det inte finns någon ingång,
och vi har lagt något som vår produktion.
Vi behöver inte oroa dig för att se till att det finns något i strängen
eller att strängen är minst 4 tecken lång;
allt är bra.
Så detta kontrasteras till exempel med som de pennies program som du skrev
där du var tvungen att se till att du fick icke-negativa tal;
du var tvungen att se till att du fick rätt antal dagar i en månad.
Och hur gör ni det?
Hur skulle du göra det testet?
Vad gjorde det kräver att du använder?
>> Gör-while-slingor.
Gör-while-slingor, andra typer av loopar också, ja.
Så det visar sig att vi inte behöver använda en slinga i detta fall,
när vi ber för en sträng, är vilken typ av trevligt.
>> Okej, vi går vidare.
Så, Stella.
Kan du berätta lite om vad vi ska göra härnäst?
Så nu har vi strängen har vi det lagras i en variabel,
Vad behöver vi göra med strängen?
>> Vi behöver -
identifiera 2 -
Ja, bara säga det på engelska, det är häftigt.
>> Identifiera [ohörbara] huvudstäder - eller versaler.
Ja, så du skulle identifiera vilka som är versaler och gemener.
Vi kan inte versaler eller gemener dem tills vi har identifierat vilka.
Så vi ska sätta det här.
>> Så bara tänka på den här processen,
Hur gör vi denna identifiering?
Vet du, Dan?
Typ av vad vi - vilket verktyg vi skulle behöva använda ur vår verktygslåda?
>> Jag skulle lägga den i något i likhet med en rad eller varje rad
är sin egen lilla låda,
och sedan versaler det därifrån eller inte.
Okej, så ett verktyg som vi kan använda är en matris.
Vad har vi att titta på i strängen,
Men att räkna ut - vi var tvungna att titta på tecknen.
>> Så du har att titta på längden på strängen?
Ja, så en del av det är att få längden på strängen.
Bara av nyfikenhet, vad vi använder för att få längden på en sträng?
>> Strlen?
Ja, strlen, vi kallar detta "strlen"
Alla dessa strängfunktioner, så strlen är en funktion,
och det är super praktiskt, eftersom vi kan använda den för att bara säga,
Hej, strlen: Här är en sträng, berätta hur lång tid det är.
I föreläsningen idag, pratade David mycket om hur strlen genomförs,
vad som faktiskt händer bakom kulisserna.
Men detta är en av de mycket super praktiska sådana.
Det finns andra som också i strängen biblioteket,
såsom strcmp som stavas "strcmp",
som används för att jämföra strängar till varandra.
Andra som du kommer att använda som strstr,
vilket är bra för att hitta underleverantörer strängar och så vidare.
För det mesta, de alla börjar med str och sedan gå vidare för att vara något annat.
Anledningen till att de egentligen inte stava dem som sträng och så vidare
beror tillbaka som början av C,
när folk var först skrivande och allt det där,
de hade begränsningar i antalet tecken som du kan använda
för funktionsnamn och variabelnamn,
så allt är som Super kondenseras.
Men när du ser något som börjar med str,
det betyder oftast detta har något att göra med en sträng.
>> Okej, så du har att få längden på strängen,
och sedan, vad gör vi med karaktärerna?
Vet du, Sam?
>> Jag har ingen aning, jag försökte lista ut det.
Jag vet inte - jag önskar att det fanns något sätt att -
Jag menar, jag skulle tro att vi kanske kunde göra något med odds och jämnar,
men jag vet inte om någon funktion som.
Ja.
>> Men det - det skulle inte nödvändigtvis fungera,
för då skulle du få utrymmen att vara -
du måste ha utrymme att få tips om hur -
Okej.
>> Jag vet inte - jag sortens förlorade på denna punkt.
Ja - nej, nej, nej, det är bra punkter.
Så vad vi behöver göra är, liksom Sam sa,
måste vi spåra vilka bokstäver är de udda bokstäver,
och vilka som är de jämna bokstäver.
Men vi vill se till att vi inte bara är ute
vid udda och jämna
index i strängen,
utan snarare att titta på de udda och jämna bokstäver i strängen,
så vi behöver kinda ha denna skillnad mellan
bokstäver - som vad är faktiskt A, B, C, D, eller så vidare,
och vilka saker är inte bokstäver men i vår sträng.
Till exempel här, såhär utropstecken är inte en bokstav,
men det är fortfarande en del av vårt sträng, det är fortfarande en röding.
Likaså, alla dessa utrymmen -
Det är inte meningsfullt att kapitalisera ett utrymme, eller hur?
Så vi vill se till att vi på något sätt hoppa dem
samtidigt spåra odds och jämnar.
>> Så typ av i våra program verktygslåda
Hittills, om du vill,
Vi har ett antal olika verktyg som vi har pratat om.
Så en, till exempel, är variabler,
som vi har pratat om här.
Ett annat verktyg som vi har pratat om är funktioner.
Så vi har pratat om variabler i vår pseudokod här uppe
som vad vi kommer att använda för att lagra våra sträng.
Vi har pratat om funktioner för att få längden på en sträng, som strlen.
Vi har pratat om något annat, och vi har pratat om det
för mycket tidigare i avsnitt idag: slingor.
>> Vad tycker ni om att använda en slinga i det här programmet?
Jared, vad tror du?
Skulle vi använda en slinga i det här programmet?
>> Förmodligen inte, nej, eftersom du inte behöver gå igenom det mer än en gång.
Okej, du behöver inte gå igenom vad mer än en gång?
>> Hela strängen.
Rätt, så du behöver inte gå igenom strängen hela gång.
Ledsen som gjorde absolut ingen mening!
Du behöver inte gå igenom hela strängen mer än en gång.
Okej.
Vad tycker du?
>> Jag tror att det är bättre att använda dem
så att vi kan göra som kapitalisera medan
platsen för det är [ohörbart] nummer.
Stor, och så utnyttja vad?
Okej, så vi säger att
Vi bör använda en slinga för att vi vill
en versal medan det inte är en siffra.
Så - ledsen, ville du lägga till?
>> Jag tänkte säga att det sätt du behandlar strängen
och det [ohörbart] separera [ohörbart] på karaktärerna?
Ja.
>> Och då kan vi tilldela nummer till -
eller baserat på placeringen av bokstäverna i strängen?
Ja.
>> Och identifiera om det är udda eller jämnt och att kapitalisera själva brevet
medan placeringen av brevet är [ohörbart] - sorry.
Jättebra.
>> Så bara en resumé.
Kan du påminna mig om ditt namn igen - Jag är ledsen.
>> Charlotte.
Charlotte, okej.
Så vad Charlotte säger,
som är helt rätt - Jisses, denna gillar att automatiskt strecksatsen om mig -
är att om vi tittar på en sträng
som denna överst -
"Tack för lägg till" -
som en sekvens av tecken
där den är i position 0,
den h är vid position 1.
A är 2, då vi fick 3, 4, 5;
utrymmet är vid position 6.
Medan - vad är läget för f?
7!
O? 8.
R? 9.
Och sedan har vi 10, och då kan jag inte riktigt skriva det utan att det
kinda få rörigt på skärmen.
Men detta är faktiskt hur vi kan tala om strängar i minnet.
Är det en sträng
är en sekvens av tecken,
och när vi hänvisar till en särprägel i en sträng,
Vi gör det ofta genom att hänvisa till det tecknet position
i strängen,
förmodligen på samma sätt som vi talar om September
är den nionde månaden på året
eller måndag är den första dagen i veckan.
Så detta ger oss ett sätt att
räkna ut vilka som är udda jämfört med
eftersom du kan se här,
om vi matcha det med denna T,
kan du se att alla aktiverade dem
är på jämna positioner,
åtminstone för det första ordet,
och sedan saker får kastas bort när vi drabbades av utrymme,
eftersom vi inte räkna detta utrymme som ett brev,
så det är som om vi började
och gick 0, 1, 2, 3, 4, 5,
utrymme, 6, 7, 8, rymd,
9, och därefter 10, 11, 12, och så vidare.
>> Cool, så vi definitivt kommer att vilja använda någon form av slinga
att gå över varje tecken i tur och ordning.
Så vid denna punkt,
vi kommer tillbaka till vår gamla pseudokod här.
Som en del av denna identifiering av vilka som
är versaler och vilka som är gemener,
vi vill göra detta i någon form av slingan.
Loop, kolon.
Vilken typ av slinga ut de typer av slingor som vi har,
verkar vara bra att använda i detta fall?
>> Jag tänkte för slingan.
Och varför tänker du för slinga?
>> Eftersom det börjar på noll och sedan
När vi når strängens längd,
och sedan varje iteration kan du [ohörbart], också?
Ja, exakt.
Så, av de olika val av slingor,
Vi har för slingor, medan loopar, och gör-while-slingor.
När en for-slinga är speciellt användbar
är när man vill veta
typ av var du är på i slingan,
hur många gånger slingan har utförts hittills.
Vilket är precis vad vi vill veta i denna situation,
Liksom Kelly sade,
baserade av Charlottes tidigare kommentar om att vi vill veta positionen
av tecknet i strängen,
och for-slingan kommer att ge oss just det,
för om vi börjar slags titta tillbaka på vår sträng,
Om vi ​​börjar vår for-slingan vid 0,
och vi går upp genom längden av hela strängen,
då kan vi associera bokstaven T
med 0 i vår for-slingan,
bokstaven H med 1 i vår för slingan, och så vidare,
gå hela vägen till slutet av strängen.
>> Så låt oss börja koda detta bara lite
bara så ni får en känsla för vad det ser ut.
Jag ska spara,
så vi har fått vår pseudokod här,
och jag ska ta bort allt.
Så jag har ett oskrivet blad.
Jag ska börja med att skriva int main (void)
{
Jag ska sätta tillbaka 0 i
och sedan}.
Så oftast när jag börjar programmet, det är vad jag börja med.
Jag ska spara det så att ni har det.
Så en av de första saker som vi talat om var
få inmatning från användaren
och lagra den i en sträng.
Hur får vi input från en användare?
>> GetString.
GetString, okej.
Så om jag skriver GetString ()
och ett semikolon.
Låt oss försöka köra detta, kommer denna körning, först och främst?
Och varför inte det körs?
>> Du måste deklarera variabeln.
Jag måste deklarera en variabel. Okej.
>> Så hur gör jag det?
Har du något emot att skriva något, dela den?
Och då kan vi dra upp den.
Låt oss se, Dan, höger, okej.
Eller Daniel. Uppfattat i, sträng input = GetString ().
Toppen.
Kommer detta kör?
Låt oss försöka det.
Hit kör, ladda upp källkoden, byggnad, inträffade ett fel.
Okej.
Så vad händer här?
Användning av odeklarerat identifierare "sträng".
>> Vi måste inkludera biblioteken?
Ja, så Dan säger att vi måste ha med biblioteken.
Är det vad du skulle säga, Stella? Toppen.
Det är häftigt, så Stella kan du
kopiera koden från Daniels Space?
Om du klickar på Daniel Roland Ki, kopiera den,
och då kommer du sätta inkluderar linjeingång, och sedan spara det?
Låt mig veta när du är redo.
Så denna inkluderar syntax är också typ av funky;
Det är som det hash-taggen,
och det har bland annat, och sedan finns det de vinkelparenteser.
Kommer du ihåg hur det fungerar, eller ska jag sätta upp den på denna kod här?
>> Jag är bra.
Okej.
>> Jag tryckt det - jag var inte säker på vilken biblioteket, dock.
Åh, okej - ja, så är det CS50 biblioteket.
>> Åh, jag satte stdio bibliotek.
>> Åh, fick det - ja, nej, that -
så visar det sig att strängen är faktiskt något som är speciellt för CS50.
Det är faktiskt inte en sann sträng typ
eftersom här är sträng i typ läge, -
vi deklarera en variabel som heter ingång av typen String -
och vi sätter insidan av indata
det värde som får returneras till oss: utgången av denna GetString funktionsanrop.
Du kan tala om detta är ett funktionsanrop eftersom den har parenteserna, precis som printf gör,
precis som strlen gör.
Men sträng är faktiskt inte en riktig typ
i C-språket.
Vi har gjort det till en typ, och vi tar över mer vad det egentligen är
i C, eftersom det finns ett sätt att arbeta med strängar;
Vi har precis gjort något så att det ser lite trevligare.
>> Så här går vi.
Här är Stellas kod.
Det har fått den # include .
Andra människor kommer att kalla detta som en hash inkluderar ibland eller en skarp inkluderar.
Nu kan vi börja det, kör den,
och vi får fortfarande ett fel.
Låt oss se vad som händer.
"Oanvänt variabel" input "."
Okej, det är så att coolt, det är coolt.
Jag menar, det är inte riktigt coolt,
eftersom vi får ett fel och det är inte igång,
men vad detta säger är att
Vi har inte använt vår variabel, vilket är vettigt.
Vi har inte försökt att göra något med det.
Detta är ett sätt att
Klang försöker hjälpa oss att se till att vi inte bara är med hjälp av variabler
och sedan oavsiktligt kalla dem något annat senare i vår kod,
hjälper oss att undvika fel på det sättet.
>> Okej, så vi har fått input från användaren,
Vi lagras det i en variabel.
Nästa steg var att då
börja titta på alla tecken i strängen
och identifiera vilka som ska vara versaler
och vilka som ska vara gemener.
Och liksom Kelly och Charlotte tog upp,
Vi gör detta med hjälp av en for-slinga.
Så minns någon syntaxen för en for-slinga
och vill ta en stab på bara skriva
den första raden i for-slingan, bara för lite?
Kelly, vill du ge det ett försök?
>> Ja, så du måste initiera först,
så jag satte i = 0,
och då gjorde jag i <strlen ().
Är det i ditt utrymme - kan jag dra upp?
>> Ja, skruvas jag upp lite, men ja.
>> Okej, låt oss dra upp den.
Toppen.
>> Men jag visste inte om du hade det -
Ja, okej.
Så här är vad Kelly har fått: låt oss titta på det snabbt.
Så hon ingår i CS50-biblioteket på toppen.
Hon ingår standard IO-biblioteket på toppen,
och standardavvikelsen IO har funktioner som printf,
så om du någonsin vill använda printf behöver du den linjen.
Och hon ingick strängen biblioteket,
som vi kommer att behöva,
eftersom strängen biblioteket har strlen funktion,
som vi får i bara lite.
Så om vi tittar på vad Kelly har gjort här,
kan du gå oss igenom vad du gjorde?
>> Ja, så - jag menar, jag fel, så -
Ja, nej, it's -
>> Jag ville ringa strängen som jag fick bara "sträng".
Jag ville skriva ut strängen
och sedan jag -
Jag ville gärna ställa sträng som som en rad varje tecken
vara annorlunda [ohörbart], eller hur?
Och då jag ville börja i position 0
och därefter var 2 platser,
Jag tänkte att kapitalisera,
så jag beskrivs bara det som 23, eftersom jag tittar på ASCII tabellen.
Så det är vad jag tänkte - jag vet att det är inte rätt.
>> Fick det, så detta är en bra start.
Jag tror att en hel del av ramverket är på plats här.
Låt oss gå igenom typ av rad för rad och se vad som händer.
Så som jag vill göra detta är att börja bara genom att sammanställa koden
och låta kompilatorn berätta precis vad som är fel med min kod,
eftersom kompilatorn är riktigt bra på att berätta vad som är fel med din kod.
Så om vi spelar det, bygga, och det bygger inte.
Det säger att det var ett misstag,
så om vi bläddra ner och titta på det första felet,
Det sade -
Vi bläddra tillbaka upp till toppen,
Vi kan se att det finns 5 fel som genereras här nere på botten.
Oj, det är verkligen avskurna.
Jag antar att bara inte kommer att bli bättre.
>> Nu kör vi.
Så det finns 5 totalt genererade fel.
Här kan jag bara se de första 2,
så jag kan flytta det upp lite och sedan typ av scroll upp.
Detta är kommandot som kördes för att kompilera koden,
och sedan det första felet var file.c här:
"Förväntades identifiera eller '('", och det var på den här raden
där vi sa String = GetString ().
Du kan se här att det var på rad 8 i file.c,
och då tror jag att detta är tecken 12 - det är felet.
Så vad går fel på rad 8 - Kelly?
>> Du behöver bara kalla det, som, ett brev eller något,
Liksom sträng s eller något?
Ja, så visar det sig att dessa speciella typ namn,
så sträng, int, char, kort,
de är alla speciella sökord,
och du inte kan faktiskt använda dem som namnen på dina variabler,
eftersom kompilatorn ser på det och säger,
"Åh, jag vet att det är en typ,"
så att du inte kan faktiskt ha en sträng variabel som heter sträng,
som jag försöker göra här, det kommer inte att fungera.
Men i stället kan vi kalla det något i stil med s eller ST eller str.
Vi kunde inte heller kalla det int.
Vi kan inte ha en sträng som heter inv.
Vi kan inte ha en sträng som heter röding, ingen av dem kommer att fungera.
>> Så vi ska bara kalla det är för tillfället.
Toppen.
Så vad nästa som händer i denna linje?
String - denna linje ser ganska bra?
Låt oss ge den en annan försök, låt oss köra den.
Okej, så vi får fortfarande fel.
Den här gången är vi ner till 4 fel.
Så vi fick en av dem.
Låt oss gå upp.
"Oväntat typnamn" string ": förväntad uttryck," ja?
>> Ja, det är för att jag försökte namnge strängen.
Ja, så det ser ut som vi nu också gå fix
alla dessa hänvisningar till sträng.
Du kan se att det finns en hänvisning till sträng här, en här, en här,
så att vi kan flytta alla dessa till s.
Jättebra. Okej, kör det igen.
Byggnad - annat fel har uppstått.
>> Okej, nu är vi ner till en fel,
så int i = s och sedan hakparenteser.
Så kan du berätta lite om vad du gjorde här, Kelly?
>> Ja.
Det var på rad 10.
>> Jag vet inte om vi behövde allt,
men jag tror jag försökte -
Jag ska spara den så att du kan följa med.
>> Jag tror jag var
försöker berätta det att börja i position 0
I början av min for-slingan,
så jag tror kanske att säga var onödig.
Så bara för att sammanfatta,
du sa att detta - du försökte starta detta vid position 0
och få detta - ja,
så jag tror tidigare också, när du går igenom koden,
du pratade om hur man ville behandla strängen som en array
så att vi kan komma varje tecken individuellt.
Jag tror Dan nämnda matriser också försöka omvandla strängar till matriser.
>> Det visar sig att sådan under huven,
en sträng är faktiskt lagras som en matris redan
och du kan komma åt den som en rad;
det finns ingen omvandling som du måste göra.
En sträng isnt - så -
en sträng är egentligen inte en matris,
men du kan komma åt det så, eftersom alla tecken lagras
en höger bredvid varandra i minnet,
så om du vill få det första tecknet i strängen,
det är samma som att få den första heltal i ett heltal array.
Så vi ofta - we'll
se 2 som
Åh, som en sträng, som en array,
även om det egentligen - de är helt olika saker,
men du kan behandla dem mycket samma.
Så det visar sig att denna linje faktiskt -
Vi behöver inte göra någon konvertering,
och i själva verket,
detta är faktiskt inte en giltig uttryck,
vilket är vad vi kompilator säger oss.
Det säger, "Hej, förväntas det ett uttryck,
och vad jag har här är något som inte är ett uttryck. "
Att förklara en array,
allt du behöver göra är att något liknande med ett semikolon,
och sedan berätta arrayen hur länge du vill att det ska vara,
såsom 5, så denna linje 10
kommer att förklara en array med namnet i med 5 heltal i den.
>> Detta är ett åt sidan, det är inte nödvändigt för koden,
men detta är - det är typ av vad deklarationen ser ut.
>> Hur skulle du inte använda röding i [strlen (s)]?
Röding i [strlen (s)]?
>> Röding i, och sedan inne i parentes, strlen (s).
Ja, så vi kunde -
vi kunde göra detta,
och detta skulle förklara - vad skulle det göra?
>> Jag tror att det skulle förklara en rad
av, liksom - i -
Åh, behöver du inte i - Åh,
Ja, du definitivt behöver inte jag.
Du deklarerar en array av tecken
med längden s..
Och så vad Sams säger är att
denna linje 10 - Låt mig sätta lite utrymme mellan den och resten så att vi kan isolera det -
denna linje 10 skulle förklara en rad
av tecken, strlen (s) till ett värde av dem,
men vi egentligen inte behöver jag,
och anledningen till att vi behöver i är att vi måste ge arrayen ett namn;
Annars skulle vi inte ha ett sätt att hänvisa till arrayen senare i koden.
>> Så denna rätt här är arrayen namn
och inuti är längden.
Detta kommer att ge oss en array,
men detta är - återigen, detta är en förklaring.
Det är inte en uppgift, det är inte en initiering.
Om vi ​​förklarar denna array som denna,
det finns faktiskt ingenting i innehållet i uppsättningen.
Det är bara skräp - vad är där.
Och som vi sa,
vi faktiskt inte ens behöver göra denna konvertering,
eftersom vi kan redan behandla strängen s som en matris.
Jag vet att vi kör lite lång i tid,
men jag vill bara verkligen snabbt komma till detta för slinga
och visa dig hur man kommer åt enskilda tecken i arrayen,
eftersom det är nyckeln till vårt uppdrag.
Och sedan kommer vi låta dig gå därifrån.
>> Så här har vi en for-slinga
som ser nästan bra.
Vad är inte riktigt nästan där?
What's - vad är inte riktigt rätt om detta för slinga?
>> Inga klammerparenteser?
Inga klammerparenteser, för en.
Vill du vara säker på att vi har kropp av slingan med klammerparenteser.
Oj, inte den fyrkantiga stag!
Och vad är nästa sak som vi måste göra med denna slinga?
Om jag försöker köra den,
whats detta fel att jag får?
Jag får alla dessa fel - jag initiera i..
Jättebra.
Så det här kommer att bli en loop - det är inte riktigt där,
men det börjar bli riktigt nära.
Denna kod kan vi nu köra,
bygga, uppstår ett fel fortfarande.
Varför är det klagar fortfarande,
säger uttrycket är oanvänd,
och det beror på denna linje inte göra någonting.
Vi har inte förvara den någonstans, vi inte spara resultatet.
Var ska vi vara rädda detta resultat?
>> S eller jag?
Exakt, och denna funky syntax,
Detta är med hakparenteser
innebär tillgång till i: te karaktär talet.
Det kommer att vara något som är väldigt viktigt för uppdraget.
Tyvärr, vi kommer att behöva sluta här,
så att Sebastian avsnitt kan komma in,
men jag är glad att bo efter utsidan och kommer att ta några frågor.
Så tack killar för att ni kom.
Detta bör nu ladda upp, bygga, driva.
Vi kan ange en sträng som "hej"
och det skrivs "QOX".
[Skratt]
>> Så inte riktigt där, men flytta, få mot dessa slingor!
Tack för att ni kom, och jag ska vara utanför.