[Powered by Google Translate] DAVID Malan: Dette er CS50, og dette er begyndelsen af ​​uge 1. Hvad vi troede, vi ville gøre i dag, er at tage et kig tilbage på noget mange af jer har sikkert gik forbi for nogle tid nu og kan se en lille smule bekendt. Denne ting her, dette er naturligvis i - PUBLIKUM: Science. DAVID Malan: Science center. Så dette er faktisk en af ​​de tidligste computere tilbage fra 1940'erne. Det var en af ​​de første elektromekaniske computere der var i stand til særlig langt, selvforbrændende beregninger, og hvad vi rent faktisk ser i science centret er kun et lille stykke af denne ting. Hvad vi troede, vi ville gøre så er at tage et kig tilbage på en video der blev lavet nogen tid siden, at indføre denne ting til verden. Og du vil se fra musikken og stemme, som faktisk er de samme var meget lykkelige tider. [VIDEO PLAYBACK] -A triumf matematisk og mekaniske færdigheder er dette store nye automatiske regnemaskine på Harvard University. Indviklede problemer i matematik, satte igennem maskine i kodet form på bånd, er nøjagtigt løses i et brøkdel af den tid, der kræves til human beregning. Designet til at fremskynde alle former for matematiske og videnskabelige forskning, vil den gigantiske mekaniske hjerne arbejde for FN States Navy indtil krigens slutning. DAVID Malan: Så hvad du måske ikke ved er, at det var i samme enhed, et begreb vi alle nu tage temmelig meget for givet blev opfundet, nemlig en fejl. Så en af ​​de ingeniører, der arbejder i denne computer bogstaveligt fundet en lille møl i maskinen, som resulterede i nogle forkerte beregninger. Og som historien går på, at møl var tapede til denne log journal her, tilbage fra september 9 i 1940-noget, og dermed blev født for verden udtrykket "bug". Så fremover vi overveje bugs at være nogen form for fejl i programmer, uanset om de menneskeskabte eller i dette tilfælde,. insekter Så et par meddelelser, som vi går videre. Så CS50 har en tradition for at tilbyde Madpakker af slags på de fleste fredage i løbet af semesteret, hvor vi tager 30 til 40 studerende i Fire and Ice in the Square for casual småsnak, taler om datalogi, tale om fremtiden. Vi inviterer alumner og venner fra industrien at chatte op studerende. Virkelig mod en ende af at gøre, hvad der er en temmelig stor klasse desto mere intime, mindst én gang i mens den for delmængder af studerende. Så hvis du gerne vil slutte sig til os på fredag, 01:15, gå til CS50.net/lunch til RSVP. Og vi vil gøre det recurringly, så ikke at bekymre dig, hvis du ikke er blandt de første 30 eller deromkring i denne uge. Så skriftklog noter. Et ord på de ressourcer, der nu vil begynde at stå til rådighed til elever i klassen. Så at jeres hoveder ikke behøver at være nede under forelæsninger skrible ned alt, hvad jeg siger og så videre, hvad vi gør i stedet er at tilvejebringe fra lærerstaben en kanoniske sæt noter. Så vi har en af ​​vores undervisning stipendiater, Andrew Sellergren, der sidder ned hver uge, gennemgår de videoer, og derefter skriver ned, hvad vi synes er en rimelig autoritative sæt noter. Og Andrew glad, også for at sætte snarky fodnoter i bunden. Så du vil forhåbentlig nyde disse som en opslagsbog for sjov, og også komme quiz tid, som en mulighed for at gennemgå hvad der skete i de enkelte foredrag. Så de er forbundet på foredrag siden. Problem set 0, i mellemtiden, er ude. Og med hensyn til de ressourcer til rådighed for dig - den walkthrough. Milo førte den første fredag. Det blev filmet, lagt online ved lørdag. Og så indse, hvis du ikke er helt sikker på hvor man skal begynde, til dette eller kommende p-sæt, drej altid først til den walkthrough eller video deraf. Sektionering er i gang, ved cs50.net/section er, hvor du skal indsende dine præferencer, hvis du ikke har allerede ved i dag. Fordi sektioner vil starte i den kommende søndag, mandag, og tirsdag. Vi gør sektioner disse tre dage, hver uge af semester for det meste. Og vi også indføre, igen, forskellige spor. Så vil du blive spurgt om dette sektionering formular, hvis du har ikke set det allerede, hvis du er blandt dem mindre komfortabel, mere komfortabel, eller et sted midt imellem. Og hvis du er slags på hegnet, generelt et eller andet sted i mellem er hvad de fleste studerende ender kontrol. Kontortid begynder i aften. Så Scratch er temmelig lav nøgle, selvom det er helt naturligt at løbe ind i diverse bugs, eller være usikker på, hvordan man gennemføre noget. Så indser, at vi vil begynde kontortid i denne uge. De vil være på Annenberg mandag, tirsdag, onsdag, Torsdag, fra 20:00 til 11:00 i løbet af hjernen pause. Øvre classmen kan komme ind, og hvis du nogensinde har problemer med at få i døren, fordi de vil være at føre bare snakke din vej i og forklare du er sammen med CS50. Typisk 20 til 30 af os på personalet vil være der til at hjælpe du en på én. Ved ankomsten ideen er denne: du vil bringe din bærbare computer, har du din oplader, vil vi have ekstra netledninger, især langs den sydlige væg af Annenberg hvor der er masser af stikkontakter. Og det vigtigste indgang til kontor timer Q & A er at gå til cs50.net/discuss og at skrive dit spørgsmål der. Og at mærke det med Pset 0 eller Pset 1, uanset ugen kunne ske at være. Og så, hvad vi vil gøre, er at have en tabel over undervisning stipendiater og kursus assistenter, generelt 8 eller 10 eller deromkring af os, går igennem, holder et vågent øje på tavlen, og plukning off spørgsmål virkelig så hurtigt som vi kan, henvise dig til relaterede indlæg, hvis du ikke har fundet dem jer selv, online referencer efter behov. Og så hvis der er problemer, da der uundgåeligt vil være, eller det bare giver det mere mening at sidde ned en på én, arbejde gennem problemer med nogen. Eller du bare komme i kontortiden virkelig brug denne tankegang. Du ønsker ikke at gå gennem den elektroniske formular, du virkelig ønsker at mødes med nogen. Kommunikere det til os, og hvad der vil ske er, når din Spørgsmålet er blevet set af et medlem af personalet, og vi bestemme, yup bør dette sendes til en af ​​de 20 eller 30 teammedlemmer her lokalt, vil du se øverst til venstre denne lidt Indtast Queue knappen blinker på cs50.net / diskutere. Og det er at fortælle dig, at du nu er blevet inviteret, så til at tale, for at indtaste køen. Og ved at klikke på denne knap, vil dit navn og derefter vises på en iPad, at CS50 greeter, en af ​​kursets hoveder, vil afholde nær ved indgangen til Annenberg, som så vil ser som afbildet her, de studerende, der har spørgsmål om venstre, de medarbejdere, der er til stede i højre side. Og med et klik på venstre og højre, vil din web browser begynder at blinke, så snart f.eks Professor McGonnagal er klar til at se dig på en bestemt tabel i Annenberg. Så vi gjorde nogle af det sidste år. Vi har genstartet kontortid og igen gennemført en stor del af softwaren. Så indse, at dette vil blive varme op i denne uge. Men også indse også, i de forløbne år, som du måske har hørt fra venner, havde kontortid faktisk 50 til 150 studerende på én gang. Og det er simpelthen ikke muligt for os at håndtere, at effektivt, en på én, hele aftenen. Og så, hvad vi egentlig vil forsøge at gøre dette år er udnytte det faktum, at en masse spørgsmål er ofte stillet og kan ofte bedre besvaret asynkront. Så du kan sortere i tænke igennem de ansattes reaktion, og vi kan tænke igennem din kode, uden den opvarmede tryk nødvendigvis kæmper igennem den side om side. Så vi anslår, at omkring en tredjedel eller halvdelen af ​​spørgsmålene vil blive afsendt i person, og vi vil forsøge at plukke ud som mange som en halv eller mere elektronisk, i kontortiden. Og vi vil fortsætte med at bruge Diskuter hele ugen så godt. Og endelig indser, at dette kursus kan tages bestået / ikke bestået. Så hvis du er på hegnet eller bare tror, ​​at du virkelig ikke sikker på, om dette er verden for dig, eller det er virkelig helt fremmed for dig, indse, at dette er en vidunderlig måde for at få nogle tillid, som at træde ind i klasse, som jeg gjorde ærligt år siden. Og så har fem uger til at sortere i tal ud for dig selv, hvis du ønsker at bo bestået / ikke bestået, skifte til et brev klasse, eller lignende. Og typisk hvad bestået / ikke bestået gør, tror jeg, for de studerende er at hvis du lægger i, at 10 timer, 20 timer, hvad det kan være på nogle problemer, og du banke hovedet mod væggen, og du virkelig kan bare ikke jage noget ned, og du har så mange andre ting, du skal gøre, ærligt, hvad jeg tænke bestået / ikke bestået, er det tager brodden af ​​af situationer som denne. Hvor du har taget ting 90% af vejen. Du ved, det er ikke helt perfekt. Men du fik en masse ud af det, alligevel. Så overveje bestået / ikke bestået med at du får at mental model, måske. Okay, så i sidste uge vi dove i Scratch, og vi talte om programmering på et ret højt grafisk niveau. Og i dag har vi gøre overgangen til et sprog kaldet C, et lavere niveau programmeringssprog oven på som mange moderne sprog er nu bygget, herunder nogle af dem, vi vil bruge til udtryk udgang. Og syntaktisk, hvordan de ser ud er alle temmelig ens. Så lad os begynde at gøre denne overgang her. Så det var et program i sidste uge, var den enkleste Hello World-programmer. Det er simpelthen udskrives til skærmen hej verden, med en lille taleboble kommer ud af katten. Tja, hvis vi begynder nu at omsætte dette til en anden sprog, indse, at de ideer, i dag og på onsdag er identiske, men syntaksen begynder at ændre sig. Så mens vi i sidste uge havde, da grønt flag klikket, siger hej verden. I dag vil vi have int, main, ugyldig, printf, tilbagevenden med nogle andre syntaks der samt. Krøllede parenteser og parenteser, og citater, og whatnot. Men indse, at kernen i idéen her er udskrivningen, og i sidste ende det faktum, at main nu vil være synonymt med start af et program. Main vil være der, hvor det grønne flag sparker ting ud. Så lad os nu drille hinanden nogle af de byggesten her før vi dykke ned i nogle konkrete eksempler. Så vi kaldte det en erklæring i sidste uge, hvorved det er bare en instruktion. Gør dette - i dette tilfælde, hej verden sige. Godt i C, hvis vi ser på netop denne linje, det er sådan vi er vil begynde at udtrykke denne særlige puslespilsbrik: printf ("Hello World");. Og nu vil vi drille dem fra hinanden mere og mere over tid, men indse, at der er et mønster her. Så man har vi denne ting kaldet printf, som er det væsentlige analog med ordet Sig. Det er, hvad det kommer til at gøre. Printf, og f her betyder "formateret". Så det bare betyder, at du kan indsætte forskellige æstetiske detaljer. Så citerer citat slut er begyndelsen på, hvad vi skal at begynde at kalde en streng. Et ord, en sætning, en sætning. En snor i et programmeringssprog er en sekvens af nul eller flere tegn. Så h-e-l-l-o, komma, og så videre er, citat citat slut, en streng. Og nu backslash n, lidt syntaktisk underligt, men vi allerede defineret i sidste uge således hvad? Det er bare en ny linje. Det er bare en måde at formidle til den computer, du ønsker ækvivalent for at ramme Enter der, men du behøver ikke vil faktisk Enter og derfor rodet op alle de formatering af din faktiske program. Nu parenteserne vedlægge denne streng, åbne paren og close paren, og indersiden af ​​det er vores streng. Fordi det er fordi i C, og anden programmering sprog, kan lide at tingene printf tage argumenter, eller tage parametre. Så begynde at tænke nu af denne lilla Say blok som en funktion, som en fremgangsmåde, som en procedure. Du kan virkelig kalde det hvad du vil for nu, men Det er en slags miniature program, der kun gør man ting, i en enkelt linje, intet mindre. Så printf er også det, vi vil begynde at kalde en funktion og funktioner gøre noget - i dette tilfælde udskriver en formateret streng til skærmen - men fungerer også tage argumenter eller parametre. Og med argumenter eller parametre, tak, mener vi at deres adfærd kan være påvirket af, hvad du passerer i i parentes. Så i dette tilfælde, kan printf behov at vide, hvad der skal udskrives, og vi bare gå i, i gåseøjne her, den streng, som vi faktisk ønsker at udskrive. Og semikolon på selve slutningen af ​​denne linje er blot en historisk gene hvorved i slutningen af ​​de fleste linjer kode, du sætte et semikolon for at gøre super klar til computeren at denne linje kode ender her. Nu er dette er godt, fordi som vi vil se som programmer får mere kompleks, vil semikolon gøre super klart for os mennesker, og også den computer, hvor linjer kode start og afslutning. Erkend, at nogle sprog ikke har nogen af de samme oplysninger. Og i virkeligheden, i JavaScript, behøver du ikke altid brug for noget ligesom semikolon. Men mere om det at komme. Så sløjfer. Vi havde noget som dette, meget intuitivt indlysende, gøre noget igen og igen og igen. Ligesom at sætte på sokker, eller sige hej, i dette tilfælde. Nå, begynder i dag i C, kunne vi udtrykke dette Scratch blokere så while (true) printf ("Hello World"). Så opdager vi er begyndt at bygge videre på bogstaveligt talt puslespillet stykke fra før. Vi har den samme lilla blok, men det er inde i dette parentes Forever blok, og den bedste måde at oversætte det til C er som følger. Der er ingen Forever søgeord. Du kan ikke bare skrive f-o-r-e-v-e-r i C. Så den nærmeste analog er samtidig. Nu, mens (sand) virker lidt dum, fordi gør værdien af ægte nogensinde forandring? Formentlig ikke. Det er ligesom at sige, mens en, mens du er på, mens sandt. Det er alt sammen det samme, gælder det altid er tilfældet. Så denne løkke er faktisk inducere hvilken slags loop? Bare en uendelig løkke, højre. En Forever sløjfe eller som vi kaldte det i sidste uge, bare en uendelig løkke. Så nogle gange er det slemt. Nogle gange er det en fejl, nogle gange det er derfor du får den roterende badebold eller timeglas eller lignende. Men i dette tilfælde, vi bevidst, uanset Derfor ønskede at udskrive det samme igen og igen og igen. Eller i tilfælde af lignende et ur, du ønsker at gøre noget igen og igen og igen. Så uendelige løkker kan give mening. Og det er sådan i C vi kan oversætte Forever til kode. Så nu er denne ene er lidt mere specifik. Vi havde gentag 10 gange følgende erklæring. Så mens (sand) ikke helt arbejde der, fordi sand er altid sandt. Så hvis vi i stedet se på C-version, nu syntaksen får en lidt mere kryptisk. Men for at være ærlig, når du begynder at se dette, det hele bliver temmelig bekendt hurtigt. Så dette er hvad der kaldes en for-løkke. En for-løkke vil fortælle computeren til at gøre noget igen og igen og igen så længe disse ting er sande. Nu hvad mener vi med det? Tja, der er tre dele til en for-løkke, og vi vil vende tilbage til dette i forbindelse med den faktiske eksempler i et øjeblik. Så du skal ikke bekymre dig, hvis det ikke helt synke i på én gang. Men int i = 0 er, lang historie kort, siger give mig en variabel, der er af typen heltal, så giv mig et nummer kaldte jeg, og det initialiseres til 0. Det er at give mig som en algebraisk variabel x og initialisere den til 0. Men i dette tilfælde har vi kaldte det i. Så i midten, siger, at det i er mindre end 10. Det er at fortælle computeren gøre følgende ting, så længe som jeg er mindre end 10. Og selvfølgelig er det starter mindre end 10, fordi starter ved 0. Så endelig kan du måske gætte, hvad jeg + + midler. Det er en lille smule af syntaks, der betyder bare tilvækst i. Så tilsættes 1 til i, igen og igen og igen. Og så vi vil se denne løkke, denne syntaks snarere, implementerer præcis det samme, som helt ærligt, i Scratch var lige så meget lettere at udtrykke. Gentag 10, og du er færdig. I C, og i de fleste programmeringssprog, skal vi være en lidt mere lærerigt for computeren og faktisk specificere noget som dette. Men vi vil vende tilbage til dette og andre syntaks. Hvad med variabler? I Scratch havde vi noget som de orange blokke, hvor jeg kunne erklære en variabel. Lad os vilkårligt kalde det tæller. Lad os initialisere den til 0 og derefter lad os for evigt gøre noget. I dette tilfælde i Scratch jeg siger tælleren, så den kat kommer til at have en lille taleboble, der er tale det antal, der er i denne variabel. Og så har vi ændre tæller med 1. Så alt dette er viklet inde i en Forever lås. Så vi allerede nu har de byggesten i C med der til at oversætte denne. En måde, vi kunne gøre det er det. Giv mig et heltal, kalder det tæller. Initialiser den til 0 i første linje der. Mens (sand), så jeg stjæler den ide fra blot et øjeblik siden, gå videre og gøre følgende. Print ud tælleren, og derefter inkrementere tælleren, igen og igen, og igen. Eller igen, + + betyder blot tilføje 1 til noget. Men der er et nyt stykke syntaks her. Hvad springer ud som ikke blandt vores tidligere eksempler? Ja, dette% d. Så du kan måske udlede, hvad det gør, helt ærligt, der er baseret på, hvad Scratch blokken gør. Men igen i C, vi bare nødt til at være lidt mere specielt når det kommer til at udtrykke os selv. Så printf ("% d \ n"). Nå det meste af det, vi kan smide væk som bekendt. Citaterne bare betyder, at det er en streng, backslash n er bare en ny linje. Så det eneste nye ting her er% d. Og alt det er er en pladsholder. % D kommer til at betegne et decimaltal. Og% d betyder computer, sætte et decimaltal her. Nå, hvad nummer du ønsker at sætte der? Nå, som du måske kan udlede, efter kommaet vi siger tæller, det er navnet på en variabel, som vi erklæret eller skabt et par linjer tidligere. Så dette er bare C måde at tilslutte en variabel ind i en streng dynamisk. Fordi derimod, hvis jeg i stedet havde gjort noget lignende dette, printf ("counter"), hvad ville dette program i stedet gøre, formentlig? Det vil bogstaveligt talt udskrive "tæller". Hvilket ikke den virkning, at jeg vil have. Jeg har brug for at erstatte i nogle numeriske værdi. Så vi vil se, at funktionerne derefter, ligesom printf kan tage ikke kun lige enkelte argumenter, ligesom "Hej verden". De kan tage citat citat slut komma, og derefter nogle variabler der vil få sat ind, som vi vil se den forrige streng via disse%-tegnet pladsholdere. Nå hvad med booleske udtryk? Boolske udtryk var disse værdier, sande eller falske. Ja eller nej. 1 eller 0. Tændt eller slukket. Så i Scratch de ser sådan ud, og bemærke, at bundblokken her er faktisk sammenholdt af to mindre blokke. Så jeg slags trækkes og slippes tre puslespilsbrikker sammen for at gøre det længere puslespilsbrik der så at jeg kunne vække det indtryk, at jeg ønsker x at være mindre end y og y er mindre end z. Og så jeg kan oversætte disse to separate linjer som følger. Den øverste man kan blive meget trivielt oversættes til C, med blot x er bare vores måde at sige, i C, giv mig adgang til funktioner, som en anden skrev. Og i dette tilfælde jeg ligeglad, fordi jeg ønsker printf. Nu får vi int main (void). Så dette er en af ​​disse ting, helt ærligt, at på dag 0, temmelig meget jeg har at slags zone ud, fordi det er bare ikke interessant intellektuelt, nogle af syntaksen. Men for nu, at funktioner, også kendt som procedurer, eller metoder, frembringer i almindelighed en vis værdi. De gør noget. De kommer med et svar. De producerer output. Så int næste to main er bare vores forkortet måde at sige at denne funktion, denne procedure i sidste ende vil at give dig tilbage et nummer. Og hvorfor det er, vi vil komme tilbage til. Main er bare standard verden standard for standard funktion, der kommer til at blive henrettet i et C-program, når du kører det. Void betyder bare denne ting, main, tager ikke argumenter, i dette tilfælde. Så jeg er super eksplicit. Der er ingen strenge derinde, der er ingen kommaer. Void betyder ingen argumenter til main. Nu endelig, heldigvis, de to sidste linjer er velkendte. Inde i de krøllede parenteser vi har en printf og vi har en tilbagevenden. Og afkastet er lidt uheldigt, at vi er nødt til at sætte det der, fordi det i dette tilfælde er ikke at gøre alt, meget af interesse. Men i et edb-program, når en funktion returnerer 0, det betyder alt er godt. Intet gik galt. Derimod hvis en funktion returnerer 1, eller negativ 1, eller negativ 1.337, eller nogle tilfældige numre som det, der generelt betyder, at en fejl, der faktisk er opstået. Så hvis du er på din Mac eller din pc, hvis du nogensinde har set nogle irriterende besked, fordi din computer er gået ned eller frosset, og der er en kryptisk fejlmeddelelse, og derefter nogle kode, som systemet kode 1,2,3,4 nogle nummer, der generelt er en unødvendig detalje at fortælle de fleste af os mennesker, men det er, hvad en funktion eller nogle Programmet har faktisk returneres, en ikke-nul værdi. Og fordelen ved dette er, at 0 betyder alt så godt, og så du hovedsagelig have et uendeligt antal af ting, som kan gå galt. Hvilket er hvorfor de valgte 0 for god og en ikke-nul værdi for dårlige, som vi skal snart se. Så lad os gå videre og skriver dette. Så minde om, at den anden dag brugte jeg min Mac til at åbne op for en terminalvindue, og så åbnede jeg op tekst program, ligesom TextEdit, og jeg begyndte at skrive noget kode. Nå det er fint. Men din oplevelse vil være anderledes på en Mac, eller på en Solaris computer, en Linux computer, uanset operativsystem system du tilfældigvis bruger. Og så i kurset, er, hvad vi i stedet for at bruge noget kaldet CS50 Appliance. Så CS50 Appliance er et downloades stykke software der giver dig mulighed for at køre et operativsystem kaldet Linux, specifikt Fedora Linux, på din egen Mac eller pc. Og du gør dette ved at hente noget, der hedder en hypervisor. Så alt dette vil blive dokumenteret i problem sæt 1. Og du vil blive guidet mod, hvad du behøver at downloade. Men det endelige resultat, om du har en Mac eller pc, er du hente nogle gratis software. Du kan derefter hente den CS50 Appliance, og du fortælle, at fri software - hypervisoren - at køre CS50 Appliance i et vindue på din computer. Og hvad der sker, er dette. Jeg har nu, mærke her, hvad der synes at være en stationær miljø. Og lad mig faktisk skrumpe denne enkelt vindue. Så dette nu er min Mac, med et lille vindue her, og inde af dette vindue sker for at være en helt andet operativsystem. Faktisk er der denne startmenuen hernede, der minder om Windows, der har en hel bunke af undermenuer, herunder et link til CS50 manual, Dropbox og lignende. Og hvad dette miljø nu er en standard miljø at vi alle nu kan bruge, så uanset hvad din computer er, hvad du har installeret på den, hvilken version af Mac OS eller Windows du kører, alle nu har vi samme miljø. Og nu i dette miljø kan vi begynde at skrive noget kode. Så jeg har tænkt mig at gå videre og åbne et program kaldet gedit. Dette kan sammenlignes med notepad.exe, eller TextEdit på en Mac. Og det er bare et super simpelt tekst redigering program der ligner dette ved første øjekast. Nu øverst, har jeg en hvid palet, nederst I har denne sorte vindue, der siger jharvard @ apparatet. Og det er fordi den brugerkonto, vi på forhånd skabt for alle hedder John Harvard. Han har en mappe, hvor alle hans filer kommer til at gå, og her er, hvor vi kan begynde at skrive noget kode. Så lad mig gå videre her og zoome ind bare en smule, og jeg er vil gøre # include , int main (void), og så jeg har tænkt mig at gøre printf ("Hello World") ; Returnerer 0. Nu er alle helt sort og hvidt. Lad mig gå videre og gøre én ting at undervise gedit hvad jeg faktisk gør. Lad mig gå til Gem som. Jeg har tænkt mig at vælge i venstre side her jharvard. Så igen, selvom du aldrig har brugt Linux før, helt ærligt disse dage er de alle dekoncentration i det væsentlige samme type interface - Mac OS, Windows og Linux. Så jeg valgte jharvard hjemmemappe her. Og jeg har tænkt mig at gemme denne fil som hello.c. Så øverst, skrev jeg hello.c, at navngive en C program med det. c. forlængelse hvad der er almindelig praksis. Og jeg ramte Gem. Og nu, hvad er rart er, at jeg faktisk har lært gedit, at dette er et C-program. Bemærk, at min sorte og hvide tekst nu er farvekodet, eller syntaks fremhævet, hvilket bare gør mig opmærksom på det forskellige semantiske dele af programmet. Øverst til venstre der, som mine programmer bliver mere kompleks, jeg er vil have en oversigt over alle de ting jeg har skrevet. Så det er det deroppe. Så lad mig nu zoome ud og gå ned til denne terminal vindue. Så det er måske nyt for mange mennesker. Hvis du aldrig har brugt en kommandolinje miljø, du har aldrig brugt DOS, eller du aldrig har brugt Linux, eller du aldrig har åbnet Mac OS terminalvindue, der er en masse ting, du kunne gøre med den GUI, som peger, og klikke, og trække, og slippe, og lignende, men generelt - sikkert i verden af ​​datalogi - hjælp af en kommandolinje, hvor du ikke har din mus generelt, du kun har dit tastatur, er faktisk en masse mere kraftfuld end interface, når du får akklimatiseret til forskellige kommandoer. Og du slags fri dig selv for at skulle pege og klikke på alt. Så i gedit vi sortere i har det bedste fra begge verdener. Vi kan trække og slippe tekst, kan vi se det rart og farvekodet. Men når det drejer sig tid til at køre vores program, vil vi undertiden bare bruge denne lille vindue her. Så jeg har tænkt mig at gå videre og gøre det. I den nederste sorte og hvide vindue, vil jeg gå videre og skrive klang. Og klang er navnet på en compiler. Det er et program, der konverterer min kildekode ind, således, objektkode. 0'er og 1-taller, at vi så kort i sidste uge. Recall fra sidste uge, vi lovede, at vi skulle gå fra noget som dette - vi skulle være noget som dette - og det er bestemt ikke noget, at et menneske kommer at gøre manuelt. Så i stedet vil vi bruge et program, og dette program i dette tilfælde kaldes Dunk. Og navnet på mit program er hello.c. Så for at kompilere hello.c fra kildekode til objekt kode, eller 0'er og 1-taller, bør det være tilstrækkeligt at bare gøre dette og tryk på Enter. Okay, intet synes at være sket. Men jeg ved nu, eller fra sidste uge, at standard navn et program, når skrevet i C, er tåbelig kaldes a.out. Mest uinteressante navn, du kunne komme op med. A er det første bogstav i alfabetet, ud er, hvad der var udsendes, men så må det være. Dette er mit program, og nu dot slash, som vi vil se, er faktisk bare en slags sikkerhed funktion, fordi a.out er et program jeg skrev. Det kom ikke med min computer, det er ikke i Program Files. Det er ikke i Mac OS er mappen Programmer. Jeg er nødt til at være super eksplicit med computeren, og sige dette program, a.out, er i den aktuelle mappe, aktuelle bibliotek. Og den måde, du repræsenterer dette i et miljø som dette er prik repræsenterer uanset mappe du befinder dig i. Og så. / Betyder blot kører a.out i den aktuelle mappe. Og jeg køre dette med Enter, og voila, min allerførste program. Lad mig tage et skridt tilbage. Dette vindue er lidt lille, og indse, at bunden venstre af apparatet her er en anden ikon. Den ene er Chrome, som bør være ganske velkendt, bare en web browser inde i skabet. Og denne sorte og hvide ikon er blot en større terminalvindue. Så hvis det bliver lidt irriterende at sortere i har bare denne lille lille udsnit af et vindue med til at interagere med programmer, kan vi i stedet gøre dette. Og lad mig starte med at skrive et par snart at være velkendte kommandoer. ls. Så ls er kommandoen til notering. Så i en Mac OS eller Windows, vil du normalt dobbeltklikke på en mappe og derefter, voila, du se alle de forskellige filer og mapper. I en kommandolinje miljø, hvor du kun kan skrive kommandoer eller tekst, ls er tilsvarende. Så vis mig hvad der er i denne mappe. Nu er der en masse ting her, der er både lidt velkendt og lidt uvant. Men bemærk, at ligesom Windows og Mac OS, jharvard har en mappe på skrivebordet. Så enhver ikoner, der er på mit skrivebord ske at være i denne mappe. Der er en downloads mappe, ting, Chrome kan sætte der. Dropbox. Så Apparatet leveres med indbygget understøttelse af Dropbox således at der i løbet af semestret, kan du synkronisere med din Dropbox konto, så alle dine programmer bakkes op. De er tilgængelige på din anden computer. Hvis noget nogensinde går galt med apparatet, kan du meget nemt genoprette fra Dropbox. Så det folder er der for. Der er to filer, som jeg gjorde - hello.c og a.out. Og så til højre er der nogle andre mapper, vi får komme til i slutningen af ​​semestret, med web programmering. Så når jeg gør. /, A.out, Enter, det siger gå i den mappe jeg er i, den aktuelle mappe, og kør program kaldet a.out lige der. Okay, så det er rart og godt, men det er ikke alt, overbevisende at skrive et program, der hedder hjælpe a.out. Så vi kan faktisk gøre dette lidt anderledes. Så i stedet for bare at køre klang, hello.c, lad os tilføje hvad der kaldes en kommandolinje argument. Så en kommandolinje argument, eller en switch i denne sag, er blot et andet ord eller en sætning, du skriver på en prompt efter det program, du vil køre. Så i dette tilfælde, klang er det program, jeg ønsker at køre,-o betyder output en fil, der er ikke længere hedder a.out. Output en fil kaldet goddag, og gør det ved at opgøre sidste ord på linjen, hello.c. Så kort sagt, er dette en meget marginal forbedring, hvorved i stedet for at have dette dumt fil med navnet a.out, Jeg kan nu gøre klang-o hej, så hello.c, og derefter trykke på Enter. Intet synes at ske, men igen meget gerne med 0 - når intet synes at ske det betyder noget galt sket - så lad os gøre ls nu, Enter, og ja, jeg nu have en hello program. Så hvis jeg skriver hej nu, command not found. OK,. /. Så helt rigtigt. Så fordi dette program jeg skrev, og det kom ikke med computeren,. / hej, Enter, betyder Jeg kører nu hej. Så det er det der. Nu, hvad vi vil i sidste ende komme til mere og mere kommandolinjen argumenter, der tillader os at gøre mere, men bare for dem, for hvem det kan være gamle hat, lad mig faktisk gå ind i en bibliotek her og bare give dig en smagsprøve på, hvordan vi ellers kunne gå om gennemførelsen hej verden. Lad mig komme ind på her, og jeg har tænkt mig at åbne den. Så faktisk, jeg vil forklare, hvad jeg gør, så Dette er nyttigt. Lad mig op igen. Så jeg har gjort det i lang tid. Så opdager over på den højre er der et par af mapper, der er mærkeligt navngivne source1m og source1w. Det er bare fjollet konvention vi bruger. Kilde betyder bare kildekode, 1 betyder dette er uge et, og m betyder, at det er mandag, og w betyder det er onsdag. Så intet kryptisk der. Det er bare stenografi notation. Disse blå ting er mapper, ellers kendt som mapper. Jeg ønsker at gå ind i denne mappe nu, og på en normal computer Jeg kunne bare dobbeltklikke på et mappeikon og der er alle mine filer. Men i en kommandolinje miljø, kan jeg ikke helt gøre at, så i stedet, jeg er nødt til at skifte mapper manuelt. Så hvis jeg skriver cd og derefter source1m, Enter, bemærke, at min prompt, den ting i hvidt til venstre, lige skiftet. Og så ja, når det lige har sagt parenteser og derefter de lille krusedulle, tildesymbolet symbol, der bare betød, at jeg var i John Harvard hjemmemappe,, hans Mine dokumenter hans personlige filer. Men nu i parentes står ~ / source1m. Det betyder bare, jeg er i en mappe kaldet source1m det er i John Harvard hjemmemappe. Så hvis jeg nu ønsker at vise en filerne i denne mappe, let spørgsmål, jeg skriver bare ls. Og nu vil jeg se alle de filer, som jeg på forhånd skabt til nutidens foredrag, der alle eller de fleste af dem, sker at ende i. c. Så lad mig gå videre nu og køre gedit af et program kaldet holloway.c, som er skrevet af nogle tilfældige hacker på internettet, ser det lidt som denne. Og vi vil ikke gå igennem denne ene i ethvert detalje, men for dem mere komfortable, navnlig hvis du ønsker at tage et gæt om, hvad dette program gør her. Være forvisset om, uanset om du er mindre eller mere komfortabel, vi ikke engang komme til denne slags ting ved udgangen af dette semester. Dette er, hvad er et eksempel på en uklar C konkurrence, som midler skrive den mest kryptiske leder program du muligvis kan at overgå andre kloge mennesker, der ligeledes er forsøger at skrive ting og vise, at de kan skrive mere kryptiske ting end dig. Så dette er ikke et eksempel på en velskrevet program fra perspektiv stil, er dette et eksempel på et program, vinder en konkurrence, for folk forsøger at være vag og abstrakt. Så hvis vi kører det her, så lad mig gå ind i min terminal vindue, så at sige. Så denne sorte og hvide omgivelser kaldes terminalvindue generelt. Lad mig gå videre og kompilere den. Jeg har ikke tænkt mig at bruge klang, fordi dette program er en lidt kryptisk og det kræver en anderledes compiler, en kaldet GCC. Men det gør de samme ting. Det tager kildekode til objektkode. Og nu, hvis jeg løber a.out, at program, du lige set gør dette. Så det fyr samme år vandt konkurrencen. Under alle omstændigheder, vi ikke går i den retning, i sig selv. Så lad os faktisk prøve at nu drille hinanden, hvad vi kan gøre med disse grundlæggende byggesten til at gøre mere og mere interessante programmer. Så vi har skrevet et program, har vi kørt et program. Nu kan vi faktisk forenkle og ikke længere behøver at skrive Ordet klang ved prompten. Det viser sig som vores programmer får mere kryptisk, vi kan, eller mere kompleks snarere, kan vi faktisk køre denne kommando. Så lad mig vende tilbage til mit hjem bibliotek, så at sige, så lad mig fjerne - rm er den fjernelseskommando - jeg kommer til at fjerne filen hedder a.out og goddag. Og nu mærke i en kommandolinje miljø, meget gerne i en GUI, får du bedt om det. Jeg kan ikke klikke på en knap selvom, jeg nødt til at skrive y for ja, y for ja. Og nu, hvis jeg skriver ls igen, meddelelse om, at de grønne programmer - a.out og goddag - er væk. Pas rm. Det kan gøre dårlige ting, ligesom du kan ved at trække ting til din papirkurv. Så lad os nu gå videre - og jeg kunne gøre dette - klang-o hej, hej - Jeg er allerede keder skrive denne kommando. Selvom jeg har skrevet det lidt hurtigt. Så vi kan i stedet gøre gøre hej. Så gør ikke en compiler. Det er bare et venligt program, der kommer med Linux, i dette sag - operativsystemet - der automatiserer processen med udarbejdelse af programmer. Så i stedet for at huske klang-o filnavn og så så videre, især når disse linjer bliver længere og længere tid, kan jeg bare skrive lave. Og det kommer til at spytte ud en hel masse ting, som vil vi til sidst se dette semester. Men bemærk nu, hvis I type LS, hej er tilbage i mit bibliotek. Og ja, jeg kan køre det med. / Hej. Så gør bare automatiserer processen med at køre, hvad der var, i dette tilfælde en meget længere, mere komplekse kommando. Så vi kommer til at begynde at bruge mærke, bare fordi det er en meget mere brugervenlige. Men lad os nu lave en mere interessant program end bare sige hej. Så i de programmer, vi har skrevet hidtil er der main. Det er bare den standard ting, der sparker alt off. Men der er andre funktioner derude så godt, og stdio.h er den ting, som vi så på toppen af ​​vores fil før, og det er hvad der er kendt som standard biblioteket. Inde i standard biblioteket er en hel masse funktioner at en anden skrev, og vi kan begynde at bruge disse funktioner til at skrive mere interessante programmer os selv. Så lad mig gå tilbage til apparatet. Jeg har tænkt mig at lukke denne terminal vindue. Jeg har tænkt mig at lukke de ting, vi skrev tidligere, og bare gå i hello.c, mærke og nu kan jeg gøre følgende. Hej Verden er ikke så interessant, jeg gerne vil personliggøre dette program for mig selv. Så i stedet for at sige verden, vil jeg gå videre og sige - Jeg kunne skrive David - men dette er virkelig slags grundlæggende de samme. Men lad os prøve denne pladsholder idé. Minde om, at i C, snarere i printf, havde vi disse pladsholdere, og der er mere end bare% d. Så% d var hurtig tilregnelighed check. Okay, decimaltal, det er det. Decimaler, det er alt. Så% c, som vi vil møde, vil være et tegn. Put en karakter her, et brev A til Z, eller tegnsætning symbol. Et enkelt tegn,% f, nogen kender fra andre sprog? Så en kommatalsværdi. Et reelt tal. Så ikke et decimaltal - det er faktisk et reelt tal med et komma, og nogle flere cifre til venstre og højre for den. % S, streng. At man vi kommer til at se ganske ofte. En streng, igen, er bare et ord, en sætning, en sekvens af individuelle karakterer. Og endelig, LLD? Så dette er mere af et hjørne sag. Lang, lang decimal. Så hvis du ønsker ikke bare et nummer, der er så store, du ønsker en større tal, er du nødt til at specificere til den computer, den er af en bestemt størrelse. Så lad os nappe dette en lille smule. I stedet for bare hårdt kode i David, lad mig lidt dynamisk sige% s. Så læg% s her, hvilket er en pladsholder for en streng. Så lad mig gøre komma, og derefter "David" herovre. Nu er det er ikke alt, intellektuelt interessant, fordi alt hvad jeg har gjort nu virkelig skabe mere arbejde for computeren. Snarere end at fortælle computeren gøre det hele på én gang, er jeg nu siger, at gøre dette og indsætte en streng her til sidst, komma, her er, at streng. Så dette er ikke en bedre forbedring, men det er mindst et skridt i retning af et mere interessant program. Fordi nu, lad mig gå videre og gøre dette vindue lidt større, lad mig gå videre og køre make goddag. Og nu. / A.out virker ikke, hvorfor? Okay, nu er det hedder hello. Så igen gøre, og også Klang med a-o, omdøbt til program til at være noget mere interessant. Og voila: nu er det siger Hej David. Okay, stadig en dum program. Så lad os nu rent faktisk gå tilbage her og indføre begrebet af en variabel. Ville det ikke være rart, hvis jeg kunne erklære en variabel hvis type er streng? Og variablens værdi faktisk kommer fra brugeren ham eller hende selv. Så vilkårligt, jeg vil ringe til min variable s, hvilket er blot et fælles konvention, når du har en variabel kaldet strengen. Jeg har tænkt mig at gøre lighedstegnet, og så jeg har tænkt mig at kalde en funktion kaldet GetString. Så GetString er ikke noget, der kommer indbygget i C. Det er en funktion, som den CS50 personale skrev, virkelig bare for disse første par uger, for at forenkle processen med få brugerinput og få brugerinput i form af strygere, eller tal, og sådan. Så GetString er ligesom printf, men naturligvis i stedet udskrive det kommer til at gøre, hvad navnet siger, få en streng. Men for at bruge GetString, vi nødt til at foretage en ændring her, ud over dette. Så intuitivt, dette program, forhåbentlig, vil en eller anden måde få en snor fra brugeren, og derefter hvad det kommer til at gøre med denne streng, kaldet s? Det er bare at udskrive det, ikke? Stadig ikke et stimulerende program, fordi alt det går at gøre, er plug i denne værdi i, hvor% s siger, at det skal gå. Så lad os i det mindste se det i aktion. Lad mig spare og zoome ud. Nu i min terminal vinduet ned her, den lille skive af en, Lad mig igen gøre gøre hej. Okay, og ah, damn, jeg fik en hel masse fejl. Lad mig rulle op, og vi ser vores første - så lad os rent faktisk gør dette i et endnu større vindue, så du kan se, hvor dårligt jeg skruet op - så gør hej. Okay, det er en katastrofe, ikke? Jeg har skrevet tre linjer kode, og det har givet mig 12 fejl. Så hvorfor er dette? Så heldigvis ofte når du ser mange, mange fejl spytte ud på én gang, det er virkelig bare fordi du har forvirret computeren op her. Og det er fortsat forvirret over den tid, det kommer ned her. Og så er det bare begynder at snuble, og snublende, og spytte ud mere skræmmende ting end rent faktisk gælder. Så generelt starte altid med den øverste. Så selve toppen mest forekomst af rød, fejlmeddelelse er dette. Anvendelse af sort identifikator streng, jeg betyde standard i? Jeg gjorde ikke. Jeg mente snor, men det er fordi, også ordet streng at jeg fortsætte med at bruge verbalt faktisk findes ikke i C enten. Det er noget, vi vil bruge bare for den første uge eller to her, men det findes i en fil kaldet cs50.h. Så for nu, ved, at der er denne anden bibliotek at Personalet skrev, så det er blevet skrevet senere end stdio.h. Men inde i cs50.h er en definition, et synonym for sorterer, der skaber dette ord streng. Så nu lad mig vende tilbage til mit terminalvindue. Jeg har tænkt mig at rydde hele denne rod ved Ctrl-L. Vi vil bare Tør alt ren, og jeg har tænkt mig at gå videre og gøre hej igen, Enter. Så hvad der er sket nu? Nu er alle disse fejl gik bort. Så hvad har jeg virkelig gjort? Jeg har lige lært den computer, strengen eksisterer, og det er i denne fil kaldet cs50.h. Så stoppe klager, fordi nu ved du hvor du kan finde denne funktion erklæring så at sige. Hvor der findes i verden. Så nu vil jeg gå videre og køre goddag. Jeg synes at have en uendelig løkke, intet sker. Så jeg er nødt til at skrive noget her, lige. Den første linje kode i mit program var GetString. Så det er bogstaveligt venter for mig at få en streng. Så i den forstand ja, det er en uendelig løkke. Tilsyneladende i GetString er standard opførsel, som vi skrev - personale - der bare siger vente og vente og vente og vente og vente, indtil brugeren giver dig en streng ved at skrive noget i. Så lad mig gå videre og skriv D-a-v - i-d, Enter. Og der er det, hej David. Nu betyder det synes som om det er bare en handling? Lad mig gå videre og skrive Tommy. Indtast, okay, synes at virke. Værker for Rob, arbejder for Zamyla, arbejder for - okay. Så det kommer til at arbejde, mest sandsynligt. Så det burde udskrive hvad vi faktisk give det, og vi kan være lidt svært her. Lad os se, om vi gør noget som hej. Kan gå over her, lad os se, kopier, indsæt. Jeg har ikke tænkt mig at være i stand til at indsætte, at mange gange her. Sæt ind, okay, Shift + Ctrl + V. Så hvad kunne ske, det er slemt her? Okay, så, segfault'er. Så nogle af jer med tidligere baggrunde vil vide, at generelt, hvilket giver computere masser af input, når de er sandsynligvis ikke ment til at modtage lange navne som dette - dårlige ting sker. Faktisk i verden af ​​internettet, også dette sker ganske lidt, hvorved, når du designer en hjemmeside, når du er designe Facebook, er du nødt til at foretage vilkårlige beslutninger op front, ligesom hvor længe vil en persons Facebook brugernavn være? Eller hvor længe vil en persons fornavn være? Hvor længe vil nogen telefonnummer være og lignende. Og hvis programmører lave dårlige forudsætninger, programmer bryder fordi du prøver at give dem mere output, mere input snarere end de har hukommelse. Eller RAM afsat til det, og så hvis nu jeg trykker på Enter, dette program faktisk arbejdede, fordi vi var på biblioteket og vi faktisk forventet dette særlige tilfælde. Men uden tvivl dette semester, vil du skrive mindst en program, der vil sige disse ord. Husk dette uger fra nu, måske to dage fra nu. Segmenteringsfejl er en dårlig ting. Det vil henvise til din gør noget, som computeren ikke foregribe. Og i så fald, du som programmør, ikke foregribe. Meget gerne, hvad denne bunke af sokker, der var forskellige hjørne sager vi kunne have mødt. Tilsvarende i programmer, hvis du ikke foregribe hvor lang er en persons navn kommer til at være. Eller hvad hvis jeg har en ondsindet bruger, og hans eller hendes navn er faktisk temmelig kort, men de prøver bare at rode med mig? Hvad kommer til at være adfærd mit program? Tja, i dette tilfælde, kan noget faktisk ned. Så lad os gøre det. I 90 minutter, er det en forfærdelig lang tid at gøre datalogi. Hvorfor vi ikke komme ind i vane med at tage en fem minutters pause her, og når vi kommer tilbage, vil vi dykke ned i nogle mere komplekse og overbevisende programmer? Fem minutter. Ok. Så en hurtig kommentar. Jeg får at vide, at selv om det var på skærmen før, hvad kom ud af min mund var cs50.net/rsvp. Det er korrekt. cs50.net/lunch. Så nu kan du prøve RSVPing for dette på / frokost. Men lad os gøre det nu. Så det har været super hurtig, super nyt for en masse folk. Gammel hat for nogle folk. Så lad os spole tilbage for bare et øjeblik, og se, hvordan vi kom til denne hello verden output bare for et øjeblik siden. Så det første, der er denne CS50 Appliance. Igen stykke software, problem sæt 1 kommer til at fortælle dig, hvordan du henter den, hvor man kan hente det, hvad man skal klikke på og så videre. Og så når du følger disse instruktioner, vil du være i stand at maksimere dit vindue, og din Mac eller PC vil se en lidt noget som dette. En sort baggrund, en hjemmemappe øverst, hvor alle dine filer gå, en skraldespand øverst til venstre, en menu i bunden. Så igen, temmelig ens i ånden til Mac OS eller Windows, selv om det sker for at være Linux. Så hvad gjorde vi næste gøre? Nå, vi startede med at skrive programmer. Og husker fra sidste uge, at alt det tager at skrive en program er en simpel teksteditor, som Notesblok eller TextEdit. Helt ærligt, kan du endda bruge Microsoft Word. Men dårlige ting i sidste ende vil ske, fordi det er en meget hårdhændet løsning til at skrive et program, plus det vil gemme det i den forkerte filformat. Men det er bare en tekst editor, et tekstbehandlingsprogram, er alt, hvad der er nødvendig for at skrive et program. Så i CS50 Appliance, kan vi gøre dette i en enkel måde. Vi kan blot klikke på dette ikon nederst til venstre. Og igen, problem sæt 1 vil rådgive dig om dette, og voila - du får denne sorte og hvide brugergrænseflade, hvor vi kan begynde skrive kode. Så lad os begynde at skrive et super simpelt program igen. Jeg har tænkt mig at gå op til Fil, Gem, og jeg har tænkt mig at kalde dette, lad os sige, hello2.c. Og jeg bare at fortælle det ved at klikke på jharvard, det sat i sit hjem bibliotek, kan jeg ikke rigtig pleje hvor denne ene går. Og derefter Gem. Og nu kan jeg begynde at skrive mit program. Og jeg husker fra tidligere, at jeg er nødt til at skrive int main (void). Zoom ind på øverst til venstre. Og så vil jeg sige printf, tage to. Og nu en ny linje, tæt tilbud, lukke parenteser, semikolon. Og så går jeg ned her til min terminal vindue, der er indlejret i gedit, bare for nemheds skyld. Og jeg har tænkt mig at gå videre og skrive gøre goddag, men ikke hej alene, hello2. Så min fil hedder hello2.c. Min fil derfor bør kaldes hello2 i dette tilfælde. For helvede, hvad gjorde jeg forkert? Okay, så jeg helt klart udeladt en linje, hvis du huske, hvad tidligere programmer se ud. Men lad os se om vi ikke kan drille dette fra hinanden. Desværre er de fleste mennesker, der skriver de programmer, som vi skriver programmer ikke forenkle tingene så godt. Så vi er nødt til at slags skimme over hvad der ikke helt gøre fornemmer her, og se om vi kan finde ud af hvad der er galt. Den allerførste linje der siger implicit erklære C biblioteksfunktionen printf med type int. OK, jeg forstod en del af det. Men det synes at være hentyder til det faktum, at jeg brugte printf forkert, eller anden måde. Og hvilken forstand er det forkert? Jeg vidste bare ikke lære den computer, det er i en fil kaldet stdio.h. Nu har jeg kun skal bare huske nu, at printf er i stdio.h, og faktisk der vil være andre funktioner i samme fil, som vi vænne os til. Så nu lad mig gå videre og bruge Ctrl + L for bare klart, at væk, køre lave hello2, og voila. Og denne kommando igen, mere kompleks, end vi vil forklare om dag formål. Men det kørte klang, og klang tager kildekode og spytter 0'er og 1'ere. Og de 0'er og 1-taller i dette tilfælde kaldes hvad? Okay, objektkoden. Og den fil, de er i kaldes, så, hello2 i dette tilfælde. Fordi min tekstfil var hello2.c, Enter. Og nu har jeg tage to udråbstegn, udråbstegn punkt, udråbstegn. Okay, så vi har nu evnen til at få strenge, tilsyneladende. Nå, hvad kan vi ellers får fra brugere? Godt i CS50 biblioteket, er der andre funktioner, kommer til at forenkle vores liv i disse første par dage. Getchar, GetDouble, GetFloat, GetInt, GetLongLong, GetString. Nå, lad os plukke ud den nemmeste af disse først. GetString bogstaveligt gør det. Det sidder bare og venter på, at brugeren indtaster noget i, og så snart jeg skriver noget i og trykker på Enter, det gør noget med den værdi. Så lad os gå tilbage til dette eksempel for at se, præcis hvad GetString gjorde. Lad mig gå videre og åbne op i gedit, hello.c, og genkalde denne ret inden pausen, er dette, hvor vi slap. Så lad os nu drille dette fra hinanden i en lidt mere detaljeret. Så på linie 6, er der to ting sker i øjeblikket. Lighedstegnet adskille første halvdel og anden halvdel. Så på den venstre side af lighedstegnet er vi sige streng s. Og så bare lægmandssprog, hvad er streng s gøre, tror du? Det skaber en hvad? Så det er at skabe en streng ved navn s. Nu, hvad betyder det egentlig? Nå, det reservere plads til en streng kaldet s. Det er ikke helt rigtigt. Hvad er dette gør? Well computere, som du kender, har harddiske, det er, hvor dine filer er gemt. Computere har RAM, og det er her programmer er indlæst mens de kører. Så når du dobbeltklikker på et ikon, og Microsoft Word åbner op, er Microsoft Word kører, så at sige, i RAM, hvilket er den elektroniske del af din computer. Ikke de fysiske, mekaniske del, der er spinding, hvor data opbevares generelt lang sigt. Så string s er temmelig meget at fortælle computeren giver mig nok RAM til at passe en snor. Nu, er lidt af en oversimplificering, fordi Hvor stort er strengen vil blive? Jamen vi faktisk ikke kender endnu, så i de kommende uger vi vil faktisk trække sig tilbage det lag, der er streng og vi vil fortælle dig hvad det egentlig er. String, for nu, er blot en nice forenkling af vores verden. Men string s erklærer en streng kaldet s, for nu. Erklærer en streng. Det forbeholder nogle plads i RAM efter strengen brugeren er om at skrive. Lad os nu se på højre side af lighedstegnet. Så det siger GetString (). Og lidt tilregnelighed check. Den omstændighed, at der ikke er noget i parentes indebærer hvad GetString? Det tager ingen argumenter. Det vil sige, kan du ikke påvirke dens adfærd på nogen måde. Hver gang du bruger det, vil det få en streng og det er det. I modsætning hertil printf forhåbentlig sin opførsel gør ændre hver gang. Ellers er det en temmelig ubrugelig udskrivning funktion, hvis det gør det samme. Hvis det altid udskriver David eller noget vilkårlige hele tiden. Så printf giver mening at have et argument. GetString ikke virkelig har brug for et argument, fordi jeg gerne ville at få en snor fra brugeren, og det er den bruger, der kommer at levere den dynamik ved at skrive i forskellige breve hver gang på tastaturet. Så hvad gør GetString gør i sidste ende? Tænk på det som denne lille sorte boks. Og denne sorte boks tager ingen input, men når du bang på det, det spytter en streng, som brugeren har indtastet i. Og det faktum, at der er et lighedstegn der betyder tage hvad der er spytte ud til højre og opbevares inde hvad der er til venstre. Så lighedstegn her, er det faktisk ikke betyder ligestilling, det snarere er teknisk betyder opgave. Tag værdien til højre, og sætte det i variabel til venstre. Så det er alt, hvad der sker der. Nu i linje 7, vi kalder printf. Så printf forhåbentlig bliver lidt kedeligt nu. Så udskrive en formateret streng. Hvilken snor? Udskrive, "h-e-l-l-o,% s ! \ N ". Okay, så hvad ønsker jeg at plug-in for% s? Bogstaveligt, uanset hvilken gemt i s. Så i dette tilfælde, lille tilregnelighed check, hvor mange argumenter gør printf tage? Okay, jeg har hørt en. Jeg hørte en gang. To, jeg hørte to. Og hvad med tre? Okay, tre? Excellent. Tre mulige svar, kun en af ​​dem er korrekt. Så argumenter igen påvirke adfærden hos en funktion. Før i tiden har printf kun tage ét argument. "Hej verden" var et enkelt argument. Men nu, mærke hvor dette komma er. Denne komma er uden for citat / citat slut, hvilket betyder hey printf, her kommer et andet argument. Så kommaer i de fleste programmeringssprog adskil flere argumenter. Så svaret her er bestemt ikke en, fordi der er denne komma. Så minimalt, er printf tilsyneladende tage to argumenter denne gang. Men muligheden for et trick spørgsmål her er, hvad om denne komma? Betyder det, at der er faktisk tre argumenter? Det er denne, og dette. Så nej, fordi det komma er inde i de citater, som betyder, at det er egentlig bare en æstetisk på engelsk. Det har intet at gøre med antallet af argumenter i dette program. Så dette komma er uden for de dobbelte anførselstegn. Og derefter vende tilbage 0. For lad os nu bare slags tage denne ene på tro for i dag, og bare vide, at når funktioner er færdig fuldbyrdende linjer kode, bør de generelt returnere en vis værdi. I dette tilfælde, fordi bare main skal returnere en int, det er bare den måde sproget C fungerer. Så fordi intet gik galt, føles dette programs fint, jeg bare hårdt kodet til gengæld 0. Men i modsætning, og jeg har tænkt mig at skrive dette i pseudokode nu, ligesom Joseph gjorde, da vi gjorde sokken eksempel i sidste uge. Hvis noget gik galt - det er ikke faktiske kode - gik forkert, derefter vende tilbage, lad os sige, 1. Else returnere 0. Så dette er hvor vi skal hen med dette. Dette er ikke egentlige C-kode, bare pseudokode. Men dette er, hvordan du kan vende tilbage forskellige værdier. Men for nu er jeg bare tænkt mig at gå videre og returnere 0. Okay, nogen spørgsmål hidtil på syntaks, funktionalitet, eller lignende? Ja, i ryggen. PUBLIKUM: [uhørligt] DAVID Malan: Kan du tale lidt højere? Hvorfor gjorde dette program return 0, og? PUBLIKUM: [uhørligt] DAVID Malan: Åh, det er fordi jeg fik doven, sorry. Ingen god akademisk svar, returnerer 0. Jeg kan slags bjærgning dette, ved at sige teknisk C, hvis vigtigste ikke udtrykkeligt returnere en værdi, vil 0 blive returneret automatisk for dig. Hvilket er sandt, jeg ikke bare dækker op. Men skulle jeg have gjort det på denne måde. Ingen interessant takeaway end at andre end min fejl. Ja? PUBLIKUM: Normalt når du skriver i tomrum, som betyder, at du returnerer ikke noget. DAVID Malan: Korrekt. Hvis man i stedet kan du angive før navnet på en funktion, eksempel her, ugyldig, så funktionen ikke vender tilbage noget. Og derfor vil jeg bare sige, afkast eller slet ingenting, og det ville være konsekvent. Og vi vil komme tilbage til. Og bare FYI, en af ​​de fangster med indlæringsvanskeligheder programmering i en verden, der har hundredvis af bøger og hundredvis af hjemmesider derude er, du vil uvægerligt se anden syntaks i forskellige bøger af forskellige mennesker. Indse at vi vil gøre vores bedste i sektioner og foredrag for at være sammenhængende. Men nogle gange vil du se modstridende syntaks. Så hver gang i tvivl, så spørg. Og generelt, vil vi passe på foredrag og sektioner til næsten altid præsentere det på den rigtige måde. Og jeg siger næsten altid, fordi sag. Andre spørgsmål? PUBLIKUM: Er% s eksisterer udenfor apparatet? DAVID Malan: Er% s eksisterer udenfor apparatet? Ja. Så% s har at gøre med C. Det faktum, at vi bruger det i apparatet fundamentalt har intet at gøre med den funktioner i det sprog, vi bruger. Faktisk sidste uge, da vi brugte min Mac, jeg skrev C-kode på min Mac. Jeg kunne have brugt% s på min Mac, og du kan bruge det på din Windows-computer, hvis du installerer en compiler, ligesom Visual Studio fra Microsoft. Så% s. Alt, hvad vi laver inde i dette vindue i dag har til gøre med C. Og grundlæggende intet at gøre med den operativsystem i spørgsmålet. Derimod den sorte og hvide terminalvindue - når Jeg skriver ting som ls, og rm, og cd - der har at gøre med operativsystemet og navigere rundt. Yeah. PUBLIKUM: Jeg mente biblioteket, CS50 biblioteket. DAVID Malan: Okay, så hvis du mener søgeordet streng, at kun findes i CS50 biblioteket, korrekt. Det eksisterer ikke i C selv, og faktisk i et par uger vil vi smide CS50 bibliotek og starte gøre tingene fra bunden selv, så at sige. Andre spørgsmål? Yeah. PUBLIKUM: [uhørligt] DAVID Malan: Godt spørgsmål. Er det kommandoer små bogstaver? Og lad mig gøre en forskel her. Så kommandoer er generelt de ting, vi skal skrive på nederst i vinduet, i terminalvinduet. Alt op her ville være erklæringer eller C-kode. Men i begge tilfælde er svaret det samme, ja. Begge disse miljøer, C-kode øverst og operativsystem kommandolinje på bund, store og små bogstaver. Så du skal udnytte GetString med stort G, kapital S. Du skal skrive printf i alle små bogstaver. Du skal skrive ls i alle små bogstaver. Så i næsten enhver situation dette semester, sag vil i Faktisk stof. Ja. PUBLIKUM: [uhørligt] DAVID Malan: Ah, så okay, hvad nu hvis vi havde en fil kaldet hello.d. Så viser det sig, D er et programmeringssprog. Og så i nogle tilfælde kan vi faktisk skrive et program i denne fil og har det kompileret på denne måde. Vi kan, og faktisk, korte svar er, ved jeg ikke. Så vi vil gøre dette. Lad mig gå videre og oprette en ny fil. Og spin her, ærligt i almindelighed, er når nogen tvivl dette semester, og du har din apparat eller computer åbne, gå videre og prøve noget. Så jeg har tænkt mig at gemme en fil kaldet hello.d. Gem dette. Og jeg har tænkt mig at køre make hej Enter. Det syntes at antyde, at AC var mere sandsynligt end d,. i dette tilfælde Andre spørgsmål. Yeah. PUBLIKUM: [uhørligt] DAVID Malan: Okay, siger, at en gang mere. PUBLIKUM: [uhørligt] DAVID Malan: Hvordan ville du gå om diagnosticering dette eller fejlfinding det? Så mest sandsynligt, fordi de er forskellige sprog, mest sandsynligt du ville få en helt anderledes program udsendes. Du ville få helt forskellige fejlmeddelelser. Og også bare med hensyn til design, ville det nok være en dårligt design afgørelse, der skal skrive to forskellige sprog med næsten identisk navngivne filer, i nøjagtig samme bibliotek ved hjælp af en automatisk værktøj som gør. Så jeg kan også skubbe tilbage og sige i 15 år at gøre dette, aldrig lavet den fejl. Kunne ske. Men der er bare forskellige, tror jeg, logistiske forsvar på plads. Plus de fejlmeddelelser, der vil følge, ville til sidst afsløre, hvad problemet er. Men en mulig hjørne tilfælde. Okay, så lad os indføre bare et par andre funktioner her nu, så vi kan begynde at bygge op i mere og mere komplekst program. Så først og fremmest, matematik. Så matematiske eksempler er bare lidt let i den første uge. Dette er ikke til at sige, at al programmering handler om matematik. Bestemt, forstå forskellige funktioner i matematik, algebra i særdeleshed er helt relevant her. I højere niveau CS klasser, lineær algebra, calculus og lignende. Men indse det meste af, hvad vi vil gøre dette semester reducerer ikke til matematik, og slet ikke til aritmetik, per se, men virkelig til bare logik og omhyggelig tænkning. Og så denne kobling, at datalogi længe har haft, især på high school niveau, med matematik, er en lidt vildledende. Fordi de fleste af de programmer, vi vil skrive, virkelig er slags højere niveau og fokusere på at løse problemer, som, sikker, kan bruge nogle addition, subtraktion, og forskellige matematiske formler eller lignende, men i slutningen af ​​dagen, er det om at tænke og ikke bare at gennemføre, hvad man kunne have gjort på som en TI lommeregner i gymnasiet. Så med det sagt, lad os nu gøre noget med disse matematiske operatorer, der findes, så vi kan rejse over nogle af de underliggende aspekter af programmeringen, eller i dette tilfælde C. Så der er, som det CS50 biblioteket foreslået, og i dag er vi kun bruger GetString - og i et øjeblik måske en anden funktion - men der er forskellige datatyper i en computer. I slutningen af ​​dagen, kun computere kender 0'er og 1'ere. Men huske på, at i sidste uge talte vi om det binære system i at repræsentere tal, ligesom tallet 0 og 1 og 2, hele vejen på op til 8, som i Nates video. Og så kan vi tælle langt højere, da vi gjorde på scenen her. Men hvis du ønsker at repræsentere ikke bare tal, men bogstaver, vi, mennesker, er nødt til at komme med nogle vilkårlige konventioner, idet såfremt slutningen af ​​dagen al min computer har, er evnen til at udtrykke 0'er og 1-taller, godt vi hellere begynde at standardisere mønstre af 0'er og 1'ere, der repræsenterer forskellige ting. Et mønster af 0'er og 1-taller, der repræsenterer bogstavet a. Mønstre af 0'er og 1-taller, der repræsenterer bogstavet z. Mønstre af 0'er og 1-taller, der repræsenterer farven blå, eller rød, eller lignende. Vi er nødt til at bruge alle disse 0'er og 1-taller at udtrykke os i forskellige sammenhænge, ​​på forskellige måder, der ikke er nødvendigvis numerisk. Så med hensyn til repræsentation, har C forskellige datatyper, og vi har set en af ​​disse hidtil. Vi så int, og læg mærke til hvad der ikke er på skærmen lige nu er streng. String ikke i virkeligheden, findes i C. Igen, det er en forenkling vi præsenterer for første par uger. En char er en individuel karakter. En flyder er et reelt tal, med et komma og numre til venstre og højre for den. En dobbelt er hvad, for dem med tilbage til før baggrund? Så en dobbelt er to gange noget. Tilføjer dobbelt så meget præcision. Så hvad betyder dette? Så i hvert af disse tilfælde har verdens slags standardiseret hvor mange bit til at repræsentere hver af disse ting. Så hvis du har set Nates ASCII video, der allerede for en del af Pset 0 eller senere i denne uge, vil du, vil du sandsynligvis vide at ASCII - karakter repræsentationer - bruge hvor mange bits? Og du kan endda huske fra vores demo i sidste uge om, hvordan mange mennesker var på scenen. Så 7 eller 8, typisk. Så generelt 8, og der er noget, der hedder som forlænget ASCII, der bruger alle 8 bit, i stedet for 7. Men generelt taler vi i potenser af 2, så i dette tilfælde, 8. Så en char i et programmeringssprog er normalt 8 bit. Så en int er generelt 32 bits. En flyder er generelt 32 bits. En dobbelt er generelt 64 bits. Og hvad betyder det? Det betyder, at du kan repræsentere større tal, eller i tilfælde af reelle tal, kan du få en masse flere numre efter decimal. En masse mere præcision, i dette tilfælde. Nu er en lang lang er desværre navngivet. Så der er en int, som er 32 bit. Der er en lang som, nej, 32 bits. Og en lang lang som er 64 bits. Men nogle af dem er kontekstafhængige, det afhænger hvilken type computer du har. Så generelt, vil vi angiver i en hjemmearbejde eller i en quiz, hvor det faktisk betyder noget. Men pointen er at der er alle disse forskellige repræsentationer her. Så lad os faktisk dykke ned i et program. Snarere end at skrive denne ene fra bunden, lad mig gå videre og åbne op fra dagens kildekode - som alle er online - hvis du ønsker at pille rundt på nettet, eller afkast af Onsdag med apparatet på din computer, instruktion for der skal forbinde på kursets hjemmeside. Her er et super simpelt program. Men det har fået lidt noget nyt i toppen, at vi ikke havde før. En hel masse blå linjer tekst. Så disse blå linier repræsenterer kommentarer. Så det er ganske nyttigt i et program for at kunne skrive nogle kommentarer til dig selv, eller til kolleger eller venner, eller undervisning stipendiater, den slags beskrive, hvad der sker i denne fil, men har intet at gøre med C-kode selv. Intet at gøre med det program, funktionelt, det er bare æstetik. Så den måde du gør dette i C er du generelt starte din kommentarer med / *, og du ender dine kommentarer med * /. Og hvis du virkelig anal og gerne henlede slags billeder, så du ville lægge en hel masse stjerner, ville du lave en lille boks som denne. Men intet af dette spørgsmål. Det eneste, der betyder noget, er den allerførste og den allersidste. Dette er, hvad der kaldes en multi-line kommentar. Og det er bare menneskelig konvention til ofte gøre stjernerne og kasse ting i som dette, hvis du har en masse fritid. Så efter du har skrevet i nogle kommentarer, generelt kommer de faktiske tarme af programmet. Her er vores velkendte # include . Og netop hurtig, dette er nødvendigt eller ikke er nødvendig? PUBLIKUM: Nødvendig. DAVID Malan: Så det er faktisk ikke nødvendigt. Så hvorfor dog er det ikke nødvendigt? Så der er ingen printf. Indeed. Alt, hvad vi laver i dette program er matematik. Så jeg kan faktisk slette det. Så du behøver ikke altid at inkludere noget toppen af ​​et program. Så lad os forenkle det en smule. Og nu mærke til, hvad dette program gør. Ikke meget af interesse. int x = 1. Nå, hvad er dette gør? Nå, tænker tilbage til den mentale model fra før. Den venstre side af dette udtryk gør hvad? Give plads til et heltal. Så hvor meget plads? Tja, vi tilfældigvis ved nu, at det er 32 bit. Tidligere en streng var teknisk 32 bit, men mere om det i fremtiden. Men en int er 32 bit. Så dette udtryk til venstre her, x bare int siger hey operativsystem, giv mig 32 bit RAM - ellers kendt som 4 byte RAM - så jeg kan sætte et heltal i dette rum. Hvad heltal har du ønsker at sætte? Nå, bare nummer 1. int y får 2, gør præcis det samme, selv om antallet er større med hensyn til dets størrelse. Antallet selv er stadig blot 32 bits. Det er bare det mønster af bits er anderledes udgøre 1 versus 2. int z nu siger give mig en anden 32 bits, kalde det z, og sætte summation af 1 og 2 derinde. Så der nu z er formentlig lagre værdien 3, og derefter vende tilbage 0. Nu er dette program, gør den noget af interesse? Så det faktisk ikke gør noget interessant under alle mening, fordi hvorfor? Det laver nogle matematik. Men det er ikke returnere svaret, højre. Det tilbage 0. Det er ikke udskrives svaret. Så dette program er fundamentalt værdiløs, da det står nu. Det gør nogle arbejde. Det kommer til at tage nogle flere sekunder, eller mikrosekunder, at køre, men det er faktisk ikke gør noget anvendelige til mennesker. Så lad os faktisk nu åbne math2, hvor nu er jeg faktisk udskrivning af resultatet. Så også dette kan udledes vores tidligere eksempler. Hvis jeg ønsker at gøre nogle enkle matematik, int x = 1, y = 2. z er 1 plus 2 nu. Hvad er dette vil udskrive tydeligvis? Blot 3. Så hurtig tilregnelighed check. Lad mig flytte ind i denne mappe. Så cd source1m. Lad mig gå videre og skrive make math2. Ingen fejlmeddelelser kom ud, så lad mig løbe - ikke a.out--lad mig løbe math2. Enter. Og ja, det udskrives 3. Jamen så lad os tage et kig på en variant af denne. I math3.c har vi nu dette eksempel her. Så denne ene er lidt interessant. Så i denne ene her er svaret kommer til at få 1 divideret med 10, og bemærk jeg har erklæret det som en float. Hvorfor vil jeg have det til at være en float? Tja, det er en brøkdel. Det kommer til at være et reelt tal. Så det kommer til at være 0,1, forhåbentlig - 10%, i dette tilfælde. Og hvad gør jeg så gerne udskrive? Nå, dette svar. Nå, lad os drille dem fra hinanden først. Så på den venstre side, erklære en flyde, kalder det svar. På højre side, har 1 divideret med 10 og sætte det answer indersiden af ​​den variable. Nu, denne linje ser lidt mere kryptisk. Men læg mærke til nogle velkendte funktioner. % Betyder her kommer en pladsholder. f betyder her er en kommatalsværdi, bare en reel nummer, noget med et komma. 0,2 betyder hvad? Alle kender fra tidligere erfaring? To decimaler. Så vi har ikke set det før, men det er bare en måde at udøve lidt mere kontrol over printf og talemåde ikke give mig 30 point efter kommaet, i stedet give mig bare 2. Og så lad os gå videre og køre dette. Så gør matematik 3, og lad mig nu køre matematik 3, Enter. Og det er ikke rigtigt. Vi synes at have stødt på vores første ægte bug. Tja, måske er jeg bare ikke ser tæt nok. Så lad mig gå op her, og lad mig sige 20 decimal point steder der. Og lad mig samle dette, skal math3, køre. Temmelig sikker på 1 divideret med 10 ikke er 0. Så hvad sker der? Nå okay, så faktisk det behøver ikke at gøre med dette. Det er en god tanke. Dette er egentlig bare en tilfældighed at vi gør dette. Men bare for at bevise, at det ikke er det, jeg vil returnere noget tilfældigt. Gør ikke dette derhjemme, fordi det er bare forkert. Men lave math3, lad mig køre den. Så har intet at gøre med hvad jeg vender tilbage, kun har at gøre med hvad jeg udskriver. Men jeg hørte det hernede. Hvad? PUBLIKUM: Så vi er nødt til at skrive numrene i delingen som - DAVID Malan: Okay godt. Så vi er nødt til at skrive numrene, der deltager i division her som kommeværdier selv. Så problemet her er som tidligere: C, med en masse sprog, har forskellige datatyper. Og disse datatyper, for eksempel, er disse her. Og datatyper i spørgsmål her, når jeg skriver 1 og derefter jeg type 10, er sandsynligvis, hvad datatyper? Så det er nok en int, right? Det er bestemt ikke en svømmer fordi der er ingen decimal punkt eller noget lignende. Så virkelig, jeg har en int divideret med en int. Så det interessante ting om matematik og en computer er, at hvis du laver division med heltal - 1 divideret med 10, ja er 0,1. Men når du dividere et helt tal med et heltal, den Svaret må også være et heltal bare fordi, for nu. Og hvad er konsekvenserne så? Tja, hvis svaret 1 er divideret med 10 er lig med 0,1, hvad computeren kommer til at gøre, er jeg har ingen idé, hvordan man repræsentere 0,1, fordi det er en kommatalsværdi, ikke en integer, det kommer til at hugge alt efter decimaltegn og bare vise dig 0 i begyndelsen. Og det faktum, at det er udskrivning som en floating point værdi, det er bare en æstetisk ting. Det er fordi jeg tvinge computeren til at udskrive dette som en decimaltalsværdi. Og faktisk har jeg erklæret det som en float, men matematik er sker herovre. Så lad mig faktisk løse dette på en temmelig nem måde. Hvorfor kan jeg ikke bare gøre 10,0 og 1,0, selv om teknisk jeg kunne slippe afsted med blot at gøre en af ​​dem. Lad mig nu gå videre og gøre math3. Lad mig gå videre og nu køre math3, Enter. Og nu, oh boy. Nu har vi et nyt problem helt. Så bedre, højre, vi er tættere på 0,1, men hvad tydeligvis er galt her? Medmindre vi har liggende til dig i mange år, ikke? 1 divideret med 10 er faktisk ikke helt 0,1, så hvad er virkelig foregår der her? Nå du kan slags grund gennem denne logisk. Hvis en computer kun har en begrænset mængde RAM til at begynde med, og faktisk en computer kun bruger 32 bits til en decimaltalsværdi, det er indlysende, at med en endeligt antal bits, 32 i dette tilfælde, ja, du kan repræsentere en masse ting. Det faktisk er fire milliarder forskellige værdier kan være repræsenteret med 32 bits, 2 til 32, men det er stadig begrænset. Så problemet er der et uendeligt antal reelle numre, højre. Hvis du giver mig et reelt tal, kan jeg altid finde dig en lidt større, lidt mindre, ved blot tweaking numre, der er efter kommaet. Så hvis du ikke har et uendeligt antal bit, du kan umuligt udgøre en uendelig Antallet af reelle tal. Så der er denne iboende unøjagtighed i computere, og dette bliver snublede over hele tiden, selv i den simpleste af programmer som dette. Men også i nogle meget reelle verdens problemer så godt. Faktisk, lad os tage et øjeblik til bare tage et kig på noget, der rent faktisk er sket i virkeligheden. Vi ser bare de første par minutter, og derefter vi vil sende linket online. Men dette er et udtryk for netop hvad der kan gå galt, helt ærligt, på en meget tragisk måde, når disse ting er ikke værdsat eller bare vi mennesker laver fejl, når det kommer til disse former for gennemførelsesdetaljer af moderne computere. [Video spiller] -Vi vender nu tilbage til tekniske katastrofer på Modern Marvels. Computere. Vi har alle kommet til at acceptere de ofte frustrerende problemer der går med dem. Bugs, virus og software glitches er små priser til betale for bekvemmelighed. Men i high tech og høj hastighed militær og rum programansøgninger, kan den mindste problemet være forstørret ind i katastrofen. Den 4. juni 1996, udarbejdet forskerne at lancere en ubemandet Ariane 5 raket. Man gennemførte videnskabelige satellitter, der skal fastslå præcist, hvordan jordens magnetfelt interagerer med solvinden. Raketten blev bygget til Den Europæiske Rumorganisation og løftes fra sit anlæg på kysten af ​​Fransk Guyana. -På omkring cirka 37 sekunder inde i flyvningen, de først bemærket noget gik galt, at dyserne var drejning på en måde, de bør virkelig ikke. Omkring 40 sekunder inde i flyvningen, klart køretøjet var i vanskeligheder, og det er når de traf beslutningen om at ødelægge det. En række sikkerheds officer med enorme indvolde pressede knappen, sprængte raket, før det kan blive en fare for den offentlige sikkerhed. -Det var den jomfrurejse af Ariane 5, og dens ødelæggelse fandt sted på grund af en fejl indlejret i rakettens software. -Problemet om Ariane var, at der var et nummer, kræver 64 bits til at udtrykke og de ønskede at konvertere det til et 16 bit tal. De antog, at antallet aldrig var vil være meget store, at de fleste af disse cifre i 64 bit nummer var 0'erne. De var forkert. -Den manglende evne af et software-program til at acceptere slags tal genereres af et andet var roden til fejlen. Softwareudvikling var blevet en meget bekostelig del af ny teknologi. Ariane 4 raket havde været meget vellykket. Så meget af den software, skabt til det blev også brugt i Ariane 5. -Det grundlæggende problem var, at Ariane 5 var hurtigere, fremskyndes hurtigere. Og softwaren havde ikke tegnede sig for det. -Den ødelæggelse af raketten var en enorm økonomisk katastrofe, alt sammen på grund et minut software fejl. Men det var ikke første gang, datakonvertering problemer havde plaget moderne raketteknologi. DAVID Malan: Vi vil lade det blive ved det. Men dette er et udtryk for, hvor relevant selv nogle af Disse laveste niveau detaljer, som vi er begyndt at udforske dag. Så selv om du får lidt distraheret måske af nogle af syntaks og arcaneness her, indser, at over sigt vil vi være fokuseret bare på, hvordan relevant det er at verdener langt ud over CS. Vi vil se dig på onsdag.