DAVID J Malan: Të gjitha e drejtë, kështu që kjo është CS50. Dhe kjo është e qartë se një e premte. Dhe kjo është fundi i javës një. Kështu që ju mund të kujtojnë se ne e kemi lënë jashtë, Herën e fundit, me një cliffhanger në terezi. Ku ne vë në dukje këtë gënjeshtër, që asnjë marrë parasysh atë që ju keni qenë mësuar në rritje up, 1 ndarë nga 10 nuk është, në fakt, 0.1 ose 0.100 ose 0,10000. Në fakt, në qoftë se ne përpilojnë këtë program, siç bëmë dje, me, bëjnë pasaktësi, dhe pastaj bëj dot, çaj, pasaktësi, ne kemi mësuar se kjo është ajo që është 1 ndarë nga 10 në fakt është. Pra, kjo nuk është me të vërtetë mjaft rasti. Por kjo e bën aluzion në disa Kufizimi themelore e kompjuterëve. Dhe me të vërtetë, në mesin e gjëra ne jemi duke shkuar për të bërë sot është të marrë një vështrim në pse kjo ka ndodhi, çfarë implikimesh ka, sa njerëzimi ka dështuar për të kuptuar këtë në disa shumë situations-- serioze rezultat i së cilës ka qenë mjaft tragjike dhe expensive-- dhe gjithashtu hidhini një sy se si ne në fakt mund të mbrojë kundër këtyre llojeve të kufizimeve. Pra intuitive, ndoshta, pse është e ndarë 1 me 10, sipas kompjuterin tim këtu, jo vetëm 1/10, 0,10? Po. Çfarë mendoni ju? AUDIENCA ANËTAR: Burim është e ndryshme? DAVID J Malan: The çfarë është? Oh, Burim është e ndryshme? Pra, nuk është mjaft. Kjo është në fakt më shumë themelore për hardware. Mendimet e tjera? Po. AUDIENCA ANËTAR: Ata përfaqësojnë numrat ndryshe? DAVID J Malan: Pra, they-- drejta. Ata përfaqësojnë numra ndryshe. Të pasaktë, me sa duket. Kështu që is-- pra, ndryshe nga çfarë? Ose nga kush? Nga ne? AUDIENCA ANËTAR: Po. Ata nuk përdorin decimal sistem të [e padëgjueshme]. DAVID J Malan: OK. Pra, në një kuptim, ata nuk e bëjnë përdorin sistemin decimal. Nën kapuç, çdo gjë është, me të vërtetë, binar, dhe kjo është e lidhur, në fakt. Por kjo është edhe një të thjeshtë shpjegim se kaq. Po. AUDIENCA ANËTAR: Ata vetëm kanë kaq shumë bit. Ata vetëm mund të ruajë deri në një farë mase, ashtu si me decimale. DAVID J Malan: Po. Kjo është ajo që është me të vërtetë duke marrë atë. Ajo rezulton se kompjuterët në mënyrë tipike, gjithmonë do të vetëm përdorin një sasi e fundme të informacionit për të përfaqësuar diçka. E drejtë? Pas të gjitha, ne vetëm kemi një fikse Shuma e hard disk space. Ne kemi vetëm një sasi të caktuar RAM, ose kujtesën e kompjuterit. Dhe në qoftë se ju keni vetëm një Shuma fikse për diçka, me siguri ju nuk mund të vërtetë të llogarisin deri në pafundësi ose ndonjë numër që ju dëshironi. Ju, lloj, duhet të vini dhe të zgjedhin se çfarë varg i vlerave të jeni duke shkuar për të mbështetur. Dhe kështu për shembull, një javë ose dy më parë, kur kemi biseduar për ASCII, dhe kemi biseduar rreth 8 bit, ose një bajt, kështu që të flasin, numri më i madh që ne mund të paraqesin me 8 bit ishte ajo? 255. Dhe ne mund të përfaqësojë vlerat totale 256 por jo nëse kalojmë një prej tyre në 0-- pra, por nëse ne shpenzojnë një prej tyre në 0, atëherë numri më i madh është, natyrisht, 255. Pra, ajo rezulton, se kjo është rasti tepër, në këtë kontekst. Ne kemi filluar duke folur, për herë të fundit, për numra floating-point, që janë të ndryshëm nga numrat e plotë, në se ata kanë një pikë dhjetore dhe, me shpresë, disa numra pas kësaj, por ata janë shumë. Një kompjuter është vetëm në mënyrë tipike do për të përdorur 32 bit, ndoshta 64 bit për të përfaqësuar një vlerë lundrues pikë. Pra, edhe pse ne kemi rritur matematikë të mësuarit dhe duke e ditur që ju mund absolutisht duhet një numër të pafund të numrave të pas presjes dhjetore, jo në qoftë se ju keni kujtesë të fundme. Ju, lloj, duhet të rrumbullakët, ose të vini dhe zgjidhni Numrat ju jeni duke shkuar për të përfaqësuar. Dhe kështu që ju mund të mendoni, në një kuptim, kjo duke qenë kompjuter të afërt përafrimi me vlerën 1/10 që ajo mund të merrni, me vetëm 32 apo më shumë copa. Dhe kjo nuk është vetëm 1/10. Për shembull, në qoftë se unë të ndryshojë kjo në 1/3, që ne mendojmë se është edhe më e thjeshtë. Pra, 1 ndarë nga 3. Më lejoni të ruajtur kartelën. Më lejoni të shkoj përpara dhe të përpiluar atë. Dhe më lejoni të ri-drejtuar atë. Edhe këtu, me sa duket, 1/3 nuk është 0.3 dhe pastaj një numër të pafund të 3-ta pas kësaj. Ju e keni këtë pasaktësi në fund. Pra, ne njerëzit janë të sakta, dhe çfarë keni mësuar është, në fakt, i saktë, por ne jemi bumping deri kundër disa kufizime. Dhe çfarë kam menduar ne do të bëjmë sot, është të fillojë duke shikuar në, sinqerisht, Pasojat tragjike të kësaj ndonjëherë, kur njerëzimi nuk mjaft të zbatojë për këtë realitet dhe këto kufizime. Dhe ne do të shohim një seri të vignettes nga Channel Historia që merr një sy se si gjërat kanë shkuar keq. Është rreth 8 minuta të gjatë, dhe ne do të kthehem pas kësaj dhe për të marrë një vështrim në pikërisht çfarë tjetër mund të shkojnë keq. Në qoftë se ne mund të zbehtë lights-- [VIDEO rishikim] -Computers, Ne kemi ardhur të gjithë për të pranuar problemet shpesh frustruese që shko me ta. Bugs, viruset, dhe software glitches janë çmimet të vogla për të paguar për lehtësi. Por në të teknologjisë së lartë dhe me shpejtësi të lartë Aplikimet program hapësirë ​​ushtarake dhe, problemi më i vogël mund të të madhërohet në fatkeqësi. Më 4 qershor, 1996, shkencëtarët i përgatitur për të nisur një pilot Ariane 5 raketa. Ajo mbante shkencor satelitët projektuar për të përcaktuar saktësisht se si Ndërvepron magnetike të Tokës në terren me erërat diellore. Raketa ishte ndërtuar për Agjencia Evropiane e Hapësirës dhe ngriti jashtë nga objekti i saj në bregdetin e French Guiana. -Dhe Rreth 30 sekonda në fluturimi, ata së pari diçka vënë re ishte duke shkuar gabim. Se nozzles u swiveling në një mënyrë që ata me të vërtetë nuk duhet. Rreth 40 sekonda në fluturim, në mënyrë të qartë se automjeti ishte në telashe, dhe kjo është kur ata bënë vendimi për ta shkatërruar atë. Zyrtari Siguria Gama me guxim jashtëzakonshme shtypur butonin, shpërtheu raketa para se ajo mund të të bëhet një rrezik për sigurinë publike. -Kjo Ishte vajzë fluturim e 5 Ariane, dhe shkatërrimi i saj mori vendin për shkak të një krisje ngulitur në software raketa së. -The Problemi mbi Ariane ishte se aty ishte një numër që kërkohet 64 bit për të shprehur, dhe ai donte për të kthyer kjo për një numër të 16 bit. Ata supozohet se numri i kurrë nuk do të ishte shumë i madh, se shumica e këtyre shifrave në numri 64 bit ishin të 0-së. Ata e kishin gabim. -The Paaftësia e një program software për të pranuar lloji i numrit të gjeneruara nga një tjetër ishte në rrënjë të dështimit. Software zhvillimit ishte bërë një pjesë shumë e kushtueshme të teknologjisë së re. Ariane 4 raketa kishte qenë shumë i suksesshëm, aq shumë të softuerit krijuar sepse ishte edhe të përdorura në Ariane 5. -The Problemi themelor ishte se Ariane 5 ishte më i shpejtë, më të shpejtë përshpejtuar. Dhe software nuk kishte llogariten për këtë. -The Shkatërrimin e raketa ishte një fatkeqësi e madhe financiare, të gjitha për shkak të një gabimi minutë software. Por kjo nuk ishte parë kohë probleme të dhënat e konvertimit kishte pllakosur teknologji moderne raketa. -Në 1991, me fillimin e Luftës së parë të Gjirit, raketa Patriot përjetuar një lloj i ngjashëm e problemit numër konvertimit. Si rezultat, 28 njerëz, 28 ushtarë amerikanë u vranë dhe rreth 100 të tjerë janë plagosur, kur Patriot, e cila është dashur për të mbrojtur kundër scuds hyrje, nuk arriti të zjarrit një raketë. -Kur Iraku pushtoi Kuvajtin dhe Amerikën nisur Desert Storm në fillim të vitit 1991, Bateritë e raketave Patriot u vendosën për të mbrojtur Arabinë Saudite dhe Izraelin nga sulmet me raketa Skud Irakut. Patriot është një amerikan, të mesme-varg sipërfaqja-ajër të sistemit të prodhuara nga kompania Raytheon. -The Madhësia e interceptorëve Patriot, në vetvete, është rreth, rreth 20 këmbë të gjatë. Dhe peshon rreth 2000 paund. Dhe ajo mbart një kokë rakete të? Për Unë mendoj se është afërsisht 150 £. Dhe mbushje, vetë, është një eksploziv i lartë, e cila ka fragmente rreth tij. Zorrë e mbushje është projektuar për të vepruar si buckshot. -The Raketa janë kryer, 4 për enë, dhe janë transportuar nga një gjysmë-rimorkio. -The Patriot sistem anti raketave shkon prapa të paktën 20 vjet tani. Ajo ishte projektuar në fillim si një raketë e mbrojtjes ajrore për të shuar avionët e armikut. Në Luftën e parë të Gjirit, kur erdhi se lufta së bashku, Ushtria donte të përdorin atë për të xhiruar poshtë scuds, jo aeroplanë. Forca e Irakut nuk ishte aq shumë e një problemi, por ushtria u shqetësuar për scuds. Dhe kështu ata u përpoqën të përmirësuar Patriot. -Intercepting Një armik raketave udhëtojnë në mach pesë do të ishte sfiduese të mjaftueshme. Por kur Patriot u nxituan në shërbim, Ushtria nuk ishte në dijeni të një Modifikim Irakut që e bëri scuds e tyre gati e pamundur për të goditur. -Çfarë Ndodhi, është scuds që vinin në, ishin të paqëndrueshme, ata ishin hapa të pasigurt. Arsyeja për këtë, ishte irakianët, në mënyrë për të marrë 600 kilometra nga një varg raketë 300 kilometër, mori peshë nga mbushje para dhe e bëri mbushje lehta. Deri tani, atdhetari e duke u përpjekur për të ardhur në vrapoj me vrull, dhe shumicën e kohës, shumica dërrmuese e kohë, ai do të fluturojnë vetëm nga vrapoj me vrull. -Pasi Operatorët e sistemit Patriot realizuar Patriot humbi objektivin e saj, ata shpërtheu mbushje patriotit së, për të shmangur viktima të mundshme nëse ajo u lejohet të bjerë në tokë. -Kjo Ishte ajo që shumica e njerëzve e pa, këto fireballs mëdha në qiell, dhe keqkuptuar si Përgjimet e raketave Skud. Edhe pse në natën Qielli, Patriots shfaq të jenë të suksesshme shkatërruar scuds, në Dhahran, nuk mund të ketë gabim në lidhje me performancën e saj. Atje, sistemi i patriotit të radar humbur gjurmët e një Skud në hyrje, dhe kurrë nuk filloi, për shkak të një krisje software. Ajo ishte izraelitët që së pari të zbuluara se sa më gjatë sistemi ishte në, aq më i madh koha mospërputhje u bë, për shkak të një orë ngulitur në kompjuterin e sistemit. -Rreth 2 javë më parë tragjedia në Dhahran, izraelitët raportuar Departamenti i Mbrojtjes, se sistemi është humbur kohë, se pas rreth 8 orë në punë, ata vënë re se sistemi ishte duke u bërë dukshëm më pak i saktë. Departamenti i Mbrojtjes u përgjigj duke thënë të gjitha baterive Patriot për të mos i lënë sistemet në për një kohë të gjatë. Ata kurrë nuk tha atë që një kohë të gjatë ishte. 8 orë? 10 orë? 1000 orë? Askush nuk e dinte. -The Bateri Patriot stacionuar në kazermën në Dhahran, dhe e brendshme e saj me të meta ora, kishte qenë në më shumë se 100 orë në natën e 25 shkurtit. -Ajo Gjurmuar kohë për një saktësi rreth 1/10 e një të dytë. Tani 1/10 e sekondës një numër interesante sepse ajo nuk mund të jetë shprehur në binar, pikërisht. Që do të thotë, ajo nuk mund të të shprehet, pikërisht, në çdo kompjuter moderne digjitale. Është e vështirë të besohet, por përdorin këtë si një shembull. Le të marrin numrin, 1/3. 03/01 nuk mund të shprehet në decimal, pikërisht. 1/3 është 0,333 në vazhdim e sipër për pafundësi. Nuk ka asnjë mënyrë për të bërë këtë, me saktësi absolute, në decimal. Kjo është pikërisht e njëjta lloj i Problemi që ka ndodhur në Patriot. Sa më gjatë që sistemi vrapoi, The më keq herë gabim u bë. -Pas 100 orë të punës, gabim në kohë ishte vetëm rreth 1/3 e një të dytë. Por në aspektin e synimeve të dhënësit një raketave udhëtojnë në mach 5, kjo ka rezultuar në një ndjekja Gabimi i mbi 600 metra. Ajo do të jetë një gabim fatal për ushtarët në Dhahran. -Çfarë Ndodhi, është një fillojë Skud ishte zbuluar nga satelitët e paralajmërimit të hershëm, dhe ata i ri që ishte Skud që vijnë në drejtim të tyre të përgjithshëm. Ata nuk e dinë se ku ai po vinte. -Ishte Tani deri në radar komponent i sistemit Patriot, mbrojtur Dhahran, për të gjetur dhe për të mbajtur gjurmët e raketave armikut në hyrje. -The Radar ishte shumë i zgjuar. Ajo do të ndjekur në fakt pozicioni i Skud dhe pastaj parashikojnë ku kjo ndoshta do të jetë, herën tjetër, radar dërguar një impuls jashtë. Që u quajt porta varg. -Pastaj, Dikur Patriot vendos kohë të mjaftueshme ka kaluar për të shkuar mbrapa dhe të kontrolloni të ardhshëm Lokacioni për këtë objekt zbuluar, ajo shkon prapa. Pra, kur ai u kthye të gabuar vend, ajo pastaj sheh ndonjë objekt dhe ajo vendos se nuk kishte asnjë objekt, ajo ishte një zbulimin e rreme, dhe bie udhë. Skud hyrje zhdukur nga ekrani i radarit, dhe sekonda më vonë, atë përplas në fortesë. Skud vrarë 28 dhe ishte e fundit një gjuajtur gjatë Luftës së parë të Gjirit. Tragjikisht, software updated arriti në Dhahran një ditë më pas. Software metë kishte qenë fikse, mbyllja një kapitull në trazuar Historia e raketave Patriot. [END rishikim] DAVID J Malan: Pra, ne do të hedhim një vështrim në disa kufizime të ngjashme në vetëm pak. Por së pari, le të kalimi në disa FYI është. Pra one-- këtë fundjavë, aty do të jetë seksione super, të cilat janë të destinuara për të zënë vendin seksione të planifikuara rregullisht, të cilat do të fillojnë deri një javë që këtej. Hidhni një sy në faqen e internetit të CS50 e për më shumë informacion mbi ato. Ata gjithashtu do të jenë të filmuar dhe Transmetuar të jetojë për ato gjendje të marrin pjesë. Problemi vendosur 1 është mbi Faqja e internetit kurs të tashmë, dhe ne do të hedhim një vështrim në që në vetëm pak. Dhe orarit të punës gjithashtu, do të marrë vendosni këtë hëna deri të enjten. Pra, kjo ishte më kanonik Programi i kemi shikuar në kohën e fundit. Është si të thjeshtë program ju mund të shkruani në C, dhe madje edhe kjo është pak e një kërkesë të guximshme. E drejtë? Sepse ka një shumë të gjoja kompleksitetin për këtë. Pra, le të marrin një vështrim të shpejtë në atë që disa nga këto elemente ishin dhe pastaj të përpiqet për të siguruar një model mendor për sa këto thjeshtë e programeve punë, dhe pastaj ne do të fillojmë duke kërkuar në gjëra gjithnjë e më komplekse. Pra, kjo vijë këtu, theksoi tani, në të verdhë, çfarë të themi për herë të fundit, se kjo e bën për ne? Cili është qëllimi i shërben? Çdokush nga larg prapa? Po. AUDIENCA ANËTAR: [padëgjueshme] DAVID J Malan: Mirë. Pra, kjo ju jep juve akses ndaj urdhrave, apo le të thirrje atyre funksioneve, që dikush tjetër shkroi, që janë deklaruar, mënyrë që të flasin, në disa fotografi të tjera. Pra, ne do të shohim saktësisht se çfarë një file .H është kundrejt një skedar .c, përfundimisht. Por tani për tani, vetëm e di që printf, për shembull, është ndër funksionet që kanë qenë deklaruar në disa dosje të tjera, diku tjetër në hard drive e cloud që na lejon për të hyrë printf dhe e përdorin atë pa pasur nevojë për të reinvent se timon veten. Ndërkohë, kryesore. Cili ishte analog i kryesor, javën e kaluar? Po. AUDIENCA ANËTAR: flamuri gjelbër është klikuar. DAVID J Malan: Po. Scratch-së, kur flamuri gjelbër klikuar. Është si copë mister që nis gjërat off. Dhe kështu në mënyrë të ngjashme, e bëri botën vendosur disa vjet më parë se në C, dhe një bandë e gjuhëve të tjera, në qoftë se ju dëshironi të shkruani një program, Funksioni juaj e parë ka të quhet, kryesor. Dhe ajo ka për të parë si kjo. Por ne do të kthehen, Një herë tjetër, për çfarë, int, dhe, i pavlefshëm, do të thotë në këtë kontekst. Tani për tani, formatimin e teksteve kaçurrel janë lloj e si formë copë mister e para së që encapsulates disa numrin e linjave. Dhe në mesin mbi linjat këtu, është kjo këtu. printf është një funksion qëllimi i të cilit në jeta është për të shtypur një varg formatuar. Dhe nga formatuar, unë do të thotë të mund të vihet në prizë vlerat placeholder, dhe ju mund të specifikoni se sa decimal pikë, sa numra për të shtypur pas një presjes dhjetore dhe si. Dhe printf, natyrisht, merr një ose argumente ose parametra më shumë, njihet ndryshe, më thjesht, si inpute. Pra printf, si një shumë të funksionet, merr inputeve. Dhe këto inputet janë përqafuar nga dy kllapa këtu. Dhe brenda nga ato është një input. Kjo është një varg, siç e kemi quajtur atë, e cila është vetëm një sekuencë e karaktereve, si një fjalë apo një frazë të, ose në tërësi ese edhe, në mes thonjëza dyshe. Dhe kjo është ajo që do të ndikojnë në Sjellja e printf, sepse, natyrisht, kjo është vetëm një funksion të shtypura gjenerike. Kjo nuk do të dini se çfarë për të shtypur, përveç nëse ju tregoni atë. Dhe pastaj, disa imtësira. Çfarë të themi kjo çuditshëm Sekuenca e simboleve është? Po. AUDIENCA ANËTAR: Linja e re. DAVID J Malan: Linja e re. Pra, ajo rezulton, ju nuk mund të goditur vetëm, të hyjë, kur ju jeni duke shkruar programin. Në përgjithësi, përpiluesit do të marrë pak të hutuar se çfarë ju thotë. Përkundrazi, ju duhet të vërtetë them, më jep mua një linjë të re këtu. Dhe kështu / n është ajo që ne në përgjithësi thërrisni një karakter të shpëtojnë. Pra n, për linjë të re. Dhe përpiluesit e di se kur ajo e sheh / N, ajo duhet të vërtetë të shkaktoj në kompjuter, në fund të fundit, ose printf, në këtë rast, të shtypura nga një re aktuale line, si goditur, të hyjë, kyç në tastierën tuaj. Dhe së fundi, çfarë bëri themi kjo pjesë e sintaksës është për? Çfarë përfaqëson? Po. AUDIENCA ANËTAR: [padëgjueshme] DAVID J Malan: Është vetëm fundi i linjës. Është fundi i deklaratës. Dhe të kuptojë se ne nuk bëjmë vënë ato kudo. Ne sigurisht nuk e vënë ato në skajet e çdo linjë. Për shembull, nuk ka asnjë mbi Linja e parë, nuk ka asnjë në linjë me, kryesor, nuk ka asnjë pas formatimin e teksteve kaçurrel, por ju do të fillojnë për të parë dhe për të marrë të njohur me të, ku është quajtur për të. Dhe kjo është pothuajse gjithmonë pas një funksion telefononi ose një deklaratë, disa veprime se ju jeni në të vërtetë duke marrë. Dhe e di tani, veçanërisht nëse në mesin e atyre më pak të rehatshme, këto janë llojet e gjërave idiote që ju do të përfundojë aksidentalisht banging kokën tuaj kundër murit mbi. Sepse ju do të jetë logjikisht besim në disa probleme ju keni zgjidhur një problem për vendosur, dhe gjëja e mallkuar vetëm nuk do të përpilojnë apo edhe të drejtuar. Dhe aq shpesh, në fillim, ajo do të të jetë për shkak se keni humbur një parantezë, apo keni humbur një pikëpresje. Dhe kështu që vetëm të jenë të ndërgjegjshëm këto llojet e gjërave, dhe nuk përpiqen për të marrë të frustruar nga ata, sepse shumë shpejt e bën këtë bëhen të vjetruar. Por është shumë e lehtë për të marrë frustruar herët, si rezultat i kësaj. Deri tani, le të marrin një sy se si Kjo linjë është në të vërtetë punon dhe pastaj të shohim në një pak një më shumë e komplikuar. Pra, ne kemi mbi Këtu, Aftësia për të nxjerrë në këtë ekran. Dhe le të supozojmë se kjo është ekranin e kompjuterit tim, por unë jam i shkruar, Hello programin, dhe unë nuk e kanë zbatuar, printf. Dikush tjetër ka zbatuar, printf. Kush do të donte të pretendojnë të kanë zbatuar, printf? Në qoftë se ne mund? Të gjithë të drejtë, çfarë është emri juaj? STUDENT 1: [? Copal. ?] DAVID J Malan: Copal, eja lart. Eja up. Dakord. Pra, ne kemi, këtu, disa tags emrin, pasi ne do të bëjë një lojë të vogël të kësaj. Dhe ne do t'ju thërrasë, printf. Dhe në qoftë se ju doni të vijnë gjatë këtu, ajo që unë kam vizatuar vetëm në ekran, kjo është mjaft e thjesht, nuk ka më, kjo. Të gjithë të drejtë, kështu që, Hello emri im është, printf, në qoftë se ju dëshironi për të vënë atë në. Dakord. Dhe në qoftë se ju mund të shkoni të qëndrojë nga ekranin e kompjuterit sikur ju jeni funksion që erdhi me këtë sistem kompjuterik. Dhe qëllimi juaj në jetë është që në fakt të shkruar diçka. Por, ashtu si e programit ne vetëm kishte në ekran, këtu, ne do të duhet të në të vërtetë ju jap disa të dhëna. Dhe kështu, në qoftë se input tim, këtu, është me sa duket, ajo që është miratuar në printf, le të lloj tallen atë si kjo. Unë jam duke shkuar për të shkruar fjalë për fjalë në një copë letër, "Hello, World" backslash N. Dhe të jetë i qartë, çfarë Unë e kam tërhequr vetëm në këtë copë letre, duket si kjo. Kështu që, kur unë të drejtuar këtë program, dhe kjo vija e verdhë e kodit merr ekzekutohet, kjo është sikur unë, programi Përshëndetje, jam dorëzimin disa të dhëna jashtë për një funksion që dikush tjetër ka shkruar. Dhe në qoftë se ju, me gishtin tuaj, mund në fakt, me gishtin tuaj, barazim në ekran çfarëdo ajo është e ju keni qenë dorëzuar, efekti, në fund të fundit, është që të shikoni saktësisht se, në ekran. Dhe një rast pak qoshe këtu. Dhe të mirë, ne nuk duhet të shohim , linjë e re, në këtë pikë. Ajo do të jetë i pasaktë për ju për të nxjerrë në mënyrë eksplicite newline. Por në qoftë se ne kemi mbajtur duke shkruar fjalët në ekran, ata do të përfundojnë më poshtë se. Pra, ju faleminderit shumë, por të rrinë këtu rreth e rrotull për vetëm një moment. Ne tani duhet një tjetër vullnetar, në qoftë se ne mund të, që do të duhet të luajnë rolin of-- Është vetëm njerëzit në orkestër tani. Si? Për OK. Të drejtë këtu. Eja up. Si e keni emrin? STUDENT 2: [? Ivay. ?] DAVID J Malan: Na vjen keq? STUDENT 2: [? Ivay. ?] DAVID J Malan: Ethan, eja lart. Nuk ka? A e kam marrë atë gabim, madje edhe pasi ju tha atë dy herë? Eja up. Është e vështirë për të dëgjuar deri këtu. OK. Dhe unë jam i keq, çfarë është emri juaj? STUDENT 2: [? Ivay. ?] [? DAVID J Malan: Ivay. ?] OK. Tani për tani, në qoftë se ju nuk e bëni Mendja, ju jeni getString. STUDENT 2: OK. Ftohtë. DAVID J Malan: Pra, nëse ju do të donte të qëndrojë këtu për vetëm një moment, le të marrin një vështrim në një pak Programi më komplekse, që tani ka tre rreshta të kodit. Pra, ne kemi, një, emrin tuaj duke përdorur printf; dy, një thirrje për getString, e ndjekur nga një detyrë në një ndryshueshme quajtur, string s, ose i quajtur s; dhe pastaj një tjetër thirrje për të, printf, por këtë herë me dy inpute. Shtet kështu që ne kemi bërë tashmë emri juaj, ose më mirë, ne kemi bërë tashmë një telefonatë printf. Kështu që unë jam duke shkuar për të shkruar, Shteti emrin tuaj. Dhe kështu, çfarë unë jam duke shkuar për kalojë, printf, në vetëm një moment, është mjaft e thjesht, kjo. Pra, nëse ju doni të shkoni përpara dhe të tërheqë këtë në ekran, që është input tuaj tani. Dakord. Dhe të harrojmë varg, ne tani kemi linjën tonë të kodit këtu. Pra në, getString, ne kemi nevojë që në fakt të thirrur, getString. Pra, qëllimi juaj në jetë është që të ecin vetëm jashtë në orkestër, në qoftë se ju mund të, dhe për të marrë emrin e dikujt. Por le të ju jap diçka për të vënë atë në. Nëse ju doni të, të shkojnë përpara dhe për të marrë një varg, të marrë emrin e dikujt në atë copë letër, në qoftë se ju mund të. Dakord. Dhe ne do të shohim, në vetëm një moment, emri i të cilit ne jemi duke marrë. Ndërkohë, ajo që unë jam duke shkuar për kanë gati, është një pjesë bosh e letrës, në të cilën, unë jam duke shkuar për të ruajtur çfarëdo vlerë atë është që getString po kthehet në mua, Unë, duke qenë një variabël string quajtur, s. Dakord. Pra, çfarë ke ti këtu? Nik. Dakord. Pra, ne kemi emrin Nik këtu. Pra, kjo është ajo fjalë për fjalë ka qenë i kthyer për mua, kështu që të flasin, nga getString. Unë, tani, jam duke shkuar për ekzekutuar anën e majte e kësaj shprehje, ku unë thjesht kopje poshtë, për qëllime të sotme, Nik. Deri tani, unë kam një ndryshore quajtur, s, ruajtjen emrin Nik-së. Unë e kam dorëzuar tashmë në printf, një argument i mëparshëm. Por në linjë tonë të tretë dhe të fundit të Kodi, unë në fakt duhet të printf dorë diçka different-- pak "hello,% s", backslash n. Dhe kështu vija e fundit unë jam duke shkuar për send-- gjëja e fundit unë jam duke shkuar për të shkruar tani, është kjo. Pra, dy rreshta të kodit, ose më tepër rreshtin e fundit të kodit, bën thirrje për dy inputs-- një, kjo, dhe dy, kjo. Pra, nëse funksioni ynë printf tani mund të marrin këto si input, më lejoni të qartë në ekran për ju. Në fakt jo, ju mund të shkoni përpara. Ne do të lënë atë, pasi kjo është në të njëjtin program. Ne duhet të shohim, përshëndetje, Nik. Dakord. Pra, kjo ishte mjaft hoops të kërcejnë përmes, vetëm për të shkruar, shteti juaj emrin, dhe, përshëndetje, Nik. Por kjo ide e thjeshtë e mesazhit kalimit, e input kalimit dhe marrjen e prodhimit, është pikërisht modeli që ne do të kemi edhe për funksionet më komplekse. Pra, thank you so much për ju të dy. Ne kemi një stres bukur top këtu për ju. Dhe ju falënderoj për getString tonë dhe vullnetarët printf njësoj. Falemnderit. Dakord. Faleminderit për ju të dy. Pra, ne kemi qenë duke folur për deri më tani, kryesisht për vargjet. Dhe kjo rezulton se C në fakt mund të kuptoj disa lloje të ndryshme të të dhënave. Në fakt, le të marrin një sy në këto këtu. Pra C, dhe shumë gjuhë, kuptojnë gjërat quajtur chars. Një char është përgjithësisht një bajt vetme, ose tetë bit. Dhe kjo paraqet një karakter të vetëm, si germa a, ose kapitalit Një letër, ose me shkronja të vogla A, ose një pikë thirrje, ose çdo karakter që ju mund të shtypni në tastierë tuaj, dhe ndonjëherë edhe më shumë. Ne gjithashtu ndodh të shohim gjithandej. Një noton është, në përgjithësi, një 32-bit vlera, ose katër bytes sepse përsëri, një bajt është tetë bit. Pra, një noton është një vlerë lundrues pikë, diçka me një pikë dhjetore. Dhe me të vërtetë, kjo është ajo filmi ishte duke folur kur ata folën rreth lundrues Vlerat pikë, disa numër të caktuar të bit duke u përdorur për të përfaqësojnë një numër të vërtetë. Por ka edhe gjëra të quajtur dyshe. Këto ekzistojnë në Java, në qoftë se ju keni marrë APCs, dhe një të dyfishtë, si emri fatmirësisht sugjeron, është dy herë më e madhe sa një noton. Është ende një numër i vërtetë, ajo vetëm ka më shumë bit me të cilin do të jetë gjithnjë e më të saktë, apo për të ruajtur një numër edhe më të mëdha. int është e lehtë. Ne biseduam në lidhje me atë herë të fundit. Kjo është vetëm një numër të plotë. Dhe kjo është në përgjithësi 32 bit, ose katër bytes. Dhe kështu, në qoftë se ju keni, le të shohim tani, 32 bits-- dhe ne e bëmë këtë në javë 0, ndonjëherë kështu briefly-- nëse keni 32 bit, çfarë është më e madhe Numri ju mund të përfaqësojë si një numër i plotë? Japë ose të marrë? Është si 4 miliardë, dhe kjo është vetëm në qoftë se ne jemi përfaqëson numra pozitiv vetëm. Nëse keni 32 bit, dhe ju doni të paraqesin numrat negative, si dhe, varg juaj është, në thelb, negative 2 miliard deri pozitiv 2 miliard. Por në përgjithësi, ne do të fillojmë në 0 shkojnë deri në 4 miliardë. Ju nuk duhet të dini saktësisht, por ne mund të shohim këtë, në fakt, në qoftë se unë vetëm hapur një makinë llogaritëse të vogël, këtu. Unë mund të bëj 2 e 32, dhe kjo është pikërisht se si i madh, sa vlera shumë ju mund të përfaqësojnë, me 32 bit. Dhe kjo është afërsisht 4 miliardë. Pra, ne do të vazhdojmë të shohim se numri në disa vende të ndryshme. Por në qoftë se keni nevojë për më shumë Numrat se kaq, rezulton se ka diçka që quhet një kohë të gjatë të gjatë. Dhe një kohë të gjatë të gjatë është në përgjithësi 64 bit, e cila do të thotë se është një urdhër të magnitudë edhe më të mëdha se sa një int. Kështu që unë nuk mund të shpallë më i madh numër që ju mund të përfaqësojë, por kjo është dukshëm më e madhe. Tani si një mënjanë, historikisht, nëse një int është 32 bit, dhe një kohë të gjatë të gjatë është 64 bit, si madh është një i gjatë, jo një kohë të gjatë kohë të gjatë? Ju do të mendoni se është më shumë se një int por ndoshta më pak i gjatë se një kohë të gjatë të gjatë, por në fakt ajo varet. Dhe kështu kjo rezulton një e frustrimet shumë, me shkrim kodin në sisteme të caktuara, është se jo të gjitha këto lloje të të dhënave kanë vlera të paracaktuara. Ndonjëherë është e këtë shumë bit. Ndonjëherë kjo është se copa shumë. Kështu që ju në të vërtetë duhet të dini, ndonjëherë, çfarë hardware ju jeni drejtimin e software tuaj në. Fatmirësisht, gjuhë të tjera dhe lloje të tjera të të dhënave që tani ekzistojnë, lejojë që të jenë më të saktë. E pra, ne pamë varg, dhe pamë bool, gjithashtu, por ajo rezulton ata vijnë vetëm me bibliotekën CS50. Pra, ata që nuk janë ndërtuar në C. Ata që në vend të kësaj, vijnë në këtë dosje të quajtur CS50.h, se ne do të përfundimisht zhvishem mbrapa shtresat e. Por tani për tani, ata janë vetëm lloje të tjera të të dhënave. Një bool është një e vërtetë apo e rreme, dhe një string është një sekuencë e karaktereve, si një fjalë. Tani printf, ne kemi parë, ka placeholders,% s është një. Dhe ju mund të jetë në gjendje, tani, konkludoj nga këta shembuj të tjerë, si ju mund të ketë një placeholder për lloje të ndryshme të të dhënave. Për shembull, të marrë me mend, në qoftë se ju donte për të shtypur nga një char të vetme duke përdorur printf, The placeholder është ndoshta% c. Dhe në qoftë se ju doni të shtypura nga një numër i plotë me placeholder,% i. % LLD është një vlerë e gjatë gjatë dhjetore, por gjatë të gjatë, në mënyrë që harta për atë. Dhe pastaj% f për lundrues Vlera pikë ose për një të dyfishtë, kështu që nganjëherë ata janë të ri-përdoren në kontekste të ndryshme. Pra, ne do të shohim dhe të përdorni disa prej tyre me kalimin e kohës. Dhe printf dhe funksione të tjera edhe sekuenca shpëtuar mbështesin edhe të tjerë, dhe nganjëherë, këto janë të nevojshme. Pra, n backslash është një linjë e re. Backslash t, bën askujt duan të marrin një goditje me thikë? AUDIENCA ANËTAR: Tab. DAVID J Malan: Tab. Pra, nëse ju doni të vërtetë për të shtypur nga një skedë, nuk një numër të caktuar të hapësirave, por një aktuale tab karakter, ju nuk e goditi tuaj, tab, kyç në tastierë, në përgjithësi, në të vërtetë ju bëni backslash t. Quote backslash dyfishtë, pse unë do të ndonjëherë të dëshironi këtë? E drejtë? Pse nuk mundem të vetëm një lloj të japin kuotën e dyfishtë në tastierën e mia? AUDIENCA ANËTAR: Sepse, përndryshe, është e do të mendoj se është fundi i pëlqen të shtypura tuaj [? teksti. ?] DAVID J Malan: Pikërisht. Mbani mend, me tona Shembuj printf, kur ne po kalonin të printf në të dhëna, në të majtë të atij string input dhe në të djathtë të atij të dhëna pranverë, sigurisht, ishte një kuotë të dyfishtë. Në qoftë se input juaj ka një të dyfishtë të japin kuotën e në mes të kësaj, kompjuteri fuqi potencialisht merrni hutuar, si për të, e bën këtë citim të dyfishtë takojnë në mes? A do të përkasin me atë të majtë? A do të takojnë me një të drejtë? Dhe kështu, në qoftë se ju doni të bëni atë super i qartë, ju bëni backslash kuotë të dyfishtë, kështu që është e shpëtoi, kështu që të flasin, dhe kjo nuk është e lidhi për diçka tjetër. Dhe ka disa të tjerë këtu, r backslash, kuotat e vetme, 0, që ne ta shohim me kalimin e kohës, si edhe. Dhe tani, çfarë lidhje funksionet? Pra, veprimet që ne mund të marrë deri tani në këtë gjuhë, C, mirë, ne kemi parë, printf, natyrisht, dhe të gjithë të tjerët në ekran, këtu, që ne do të përdorim për Sigurisht e disa vetëm javët e para, të vijë kur bibliotekën CS50. Dhe ata e bëjnë atë shumë më të lehtë, në C, në fakt të marrë të dhëna përdoruesi. Ajo rezulton se në C, dhe sinqerisht në disa gjuhëve, kjo është një dhimbje e vërtetë në qafë për të bërë diçka e thjeshtë, si të menjëhershëm të përdoruesit për tastierë, për kontributin e tij ose të saj. Dhe kështu këto funksione bëjë më të lehtë. Dhe ajo gjithashtu ka gabim kontrolluar të gjithë, kështu që, kur t'ju kujtojnë të mërkurën, ne panë, rigjykuar, paralajmërim, kur unë nuk bashkëpunojnë, dhe unë shtypur një fjalë, në vend të një numri? Ne e kemi bërë punën e rëndë në fillim në për të siguruar përdorues bashkëpunon. Por këto janë vetëm të trajnimit rrota që ne do të përfundimisht, dhe shpejt, të marrë off. Pra, për radhitje, pastaj, le të marrin një vështrim të shpejtë, ashtu si ne e bëmë me Scratch, në disa ndërton kanonike në C. Kjo ka për qëllim të, lloj e, të jetë një turne shakullinë, vetëm kështu që ju keni një referencë dhe që e keni parë gjëra në fillim. Por atëherë ne do të shikojmë coding aktuale përdorin disa prej këtyre blloqeve të ndërtimit. Aq shumë si në Scratch, kur ne kishim deklarata pëlqen, thonë ose të presë, në C, ne kemi funksionon si edhe, si printf. Në qoftë se ne duam të shprehim një kusht në C, është e ngjashme, në shpirt, për atë pjesë mister që dukej si kjo në Scratch. Por në vend të kësaj, ne fjalë për fjalë vetëm shkruaj, nëse. Dhe pastaj, në kllapa, ne kemi vënë një kusht, ku se gjendja është ajo që ne do të telefononi, përsëri, një shprehje Boolean. Dhe përsëri, kjo është lloj i pseudokod. Dhe, në fakt, // është një koment. Kjo është vetëm fjalë angleze për veten time. Por kjo është e përgjithshme Struktura e një, nëse, kusht. Por ne do të shohim konkrete Shembujt në një moment të vetëm. Në qoftë se ju dëshironi të keni një dy rrugë pirun në rrugë, ashtu si ne e bëmë me vullnetarë tonë mbi E mërkurë, ju mund të ketë një, tjetër rast. Dhe në qoftë se ju dëshironi që të ketë një të tretë dhe gjendja e fundit, ose situata parazgjedhur, ju mund të keni vetëm një bllok tjetër, aty. Dhe në mënyrë të ngjashme, me shprehje boolean, ju mund të, dhe, ato së bashku. Dhe ne pamë të mërkurën, se kjo nuk është një simbol i vetëm, është dy, për arsye të nivelit më të ulët se ne përfundimisht do të shohim dhe të luajnë me të. Ose-ing gjëra së bashku është 2 bare vertikale. Në një tastierë amerikane, kjo në përgjithësi është një kyç me kyç Shift mësipërm tuaj Enter ose Return kyç. Pastaj ka këto gjëra që ne do të përdorim ndoshta një herë apo dy herë. Ata janë funksionalisht ekuivalente me çfarë mund të bëni me një, në qoftë se, në qoftë se tjetër, tjetër në qoftë se tjetër, ndërtimin, por ata janë quajtur një kaloni. Ata duken shumë të ndryshme, por ne do të shohim në disa prej kodin tonë të shpërndarjes, për një grup të ardhmen e problemeve, ka shumë të ngjarë, se kjo është nganjëherë vetëm një prettier mënyrë për të shprehur një tërësi bandë e kushteve, pa pasur një shumë të formatimin e teksteve kaçurrel dhe një shumë e kllapa dhe vulë. Por ata na japin më pushtet se ne kemi tashmë. Dhe tani sythe. Dhe kjo, ne do të shikojmë në një pak më ngadalë. Por atëherë, ne do të fillojnë të përdorin këto, veçanërisht për ata që tashmë të njohur. Kjo është rruga kanonik, nëse tepër mënyrë misterioze, për të shkruar një lak në C. Tani një lak në Scratch ishte shumë i thjeshtë. Ju keni një, përgjithmonë, bllok. Ju keni një, të përsëritur, bllok me vetëm një numër që ju duhet të shkruani në. Dhe me, për lak, ju mund të zbatojë të dyja këto ide, por kjo është pak më shumë teknik. Por sinqerisht, është edhe relativisht e thjeshtë. Pasi ju e dini rendin e operacionet, ju fjalë për fjalë janë vetëm do të vihet në prizë vlerat dhe thoni kompjuter çfarë duhet të bëjë. Kështu që këtu është një shembull. Kjo është një lak që, mjaft thjesht, numëron nga një numër deri përmes një tjetër. Dhe vetëm nga glancing në atë, edhe në qoftë se ju keni asnjë përvojë të mëparshme me kjo gjuhë, çfarë numri e bën ndoshta të fillojë numërimi në? OK, 0. Dhe unë jam guessing se kjo është për shkak se ju të shihni se ka një int dhe një unë, i cili është një ndryshueshme. Është initialized në 0. Dhe pastaj më vonë, ajo duket si ne jemi duke kaluar printf, një vlerë. Dhe, në fakt, unë bëra një typo vogël këtu. Por që është fikse lehtë. Më lejoni të shtoj në, unë këtu. Ne tani e kemi printf qenien kaluar atë vlerë placeholder. Dhe çfarë do të të numëruar deri me? Audienca: 50. 50. 49. DAVID J Malan: 49. Pra 50, në shikim të parë, duket e drejtë. Por se, ajo rezulton, do të jetë gjendja jonë që ne të mbajtur kontrollin. Dhe ne jemi duke shkuar për të ndaluar një herë Unë nuk është më pak se 50. Pra kjo loop, anasjelltas, duhet ekzekutuar, për aq kohë sa unë është më pak se 50. Por, sa më shpejt që ajo të bëhet 50, apo 51, apo më keq, ajo duhet të ndalet automatikisht. Dakord. Pra, çfarë në të vërtetë ndodh këtu? Pra, kjo është e rendit të Operacionet për një lak. Një, ju keni ashtuquajtura initialization. Kjo copë e verdhë theksuar e kodit të ekzekutohet për herë të parë, dhe ka efektin që, per E mërkurë, ju ndoshta imagjinoni. Ajo krijon një variabël i kërkova dhe atë dyqane në atë variabël vlera 0. Pra, i është 0 në këtë pikë në histori. Gjë tjetër që ndodh në këtë ndërtimin, është se gjendja merr kontrolluar. Kështu që unë kontrolloni menjëherë, është i më pak se 50? Dhe sigurisht, përgjigje tani për tani është, me siguri, po. Po, sepse unë është 0, dhe kjo është me siguri më pak se 50. Atëherë çfarë ndodh, është se kjo linjë e kodit merr ekzekutohet. Dhe në fakt, në qoftë se ka të shumta rreshta të kodit në ato formatimin e teksteve kaçurrel, ata të gjithë të ekzekutuar njëri pas tjetrit. Dhe në fakt këtu, është me sa duket, të shtypura nga numri i, e cila do të jetë 0, dhe pastaj 1, dhe pastaj 2. Por, pse? Pse e bën atë të incremented? E pra, gjëja e katërt që ndodh është se këtë sintaksë merr ekzekutuar, pas pikëpresje. Unë ++ është një mënyrë stenografi për të thënë; të marrë vlerën e I, dhe shtoni 1 me të; dhe pastaj herën tjetër përreth, shtoni 1 të; dhe herën tjetër përreth, shtuar 1 për të. Pra, nëse ne do të mbajë, çfarë do të ndodhë tjetër është që unë nuk jam duke shkuar për nisja kam përsëri. Nëse unë mbajtur Initializing Unë në 0, ky shembull kurrë nuk do të përfundojë për shkak Unë do të mbërthyer në 0. Por ajo që do të ndodhë është se gjendja do të kontrollohen, linja e kodit do të ekzekutohet, Mbaj do të incremented, kusht do të kontrollohen, Kodi do të merrni ekzekutohet. Dhe kjo mbajtur çiklizmit përsëri, dhe përsëri, dhe përsëri, Deri sa unë ++ shkakton një vlerë prej 50. Kushti pastaj thotë: është 50 me pak se 50? Përgjigja, natyrisht, nuk është, dhe kështu tërë kodi ndalon ekzekutimin. Dhe në qoftë se ju keni më shumë kod në ekran poshtë, kjo është ajo që ndodh më pas. Ajo pops jashtë këtyre formatimin e teksteve kaçurrel dhe vazhdon për të shtypur më pas kësaj. Pra, një shaka tani, nga foks, që ju do të ndoshta tani e kuptojnë. Është gjithmonë qesharake. Është si të nënqesh lloj i hapet, dhe pastaj ti e kupton se ju nuk duhet të të jetë duke qeshur me humor si kjo. Por ka disa takeaway këtu, pedagogjike, too. Pra, del se unë jam mungon një pjesë të sintaksës, ose Foks është zhdukur një copë sintaksë këtu. Çfarë është zhdukur, që ne kemi pasur në çdo shembull tjetër, deri më tani? Kthimi, është atje, kështu që kjo është diçka tjetër, se ne do të kthehen në para se të gjatë. Çfarë është zhdukur, edhe pse? Po. AUDIENCA ANËTAR: The initialization e [e padëgjueshme]. DAVID J Malan: OK. Pra, vërtet. Pra, në fakt, kjo is-- pra, dhe numërimin inicializohet lart, ose më mirë, ka deklaruar deri më lart. Pra, kjo është një tjetër mënyrë për të bërë atë. Por jo në një linjë është i vlefshëm edhe pse. Si për këtu? AUDIENCA ANËTAR: A është formatimin e teksteve kaçurrel? DAVID J Malan: Po. Pra, formatimin e teksteve kaçurrel mungojnë. Por ky kod, dua të them, në kredi e tyre, është në fakt, sintaksore të vlefshme. Ajo rezulton, ju nuk e bëni nevojë për formatimin e teksteve kaçurrel në qoftë se ju keni vetëm një linjë të kodit që ju doni për të ekzekutuar brenda lak. Tani ne gjithmonë, në klasë dhe në të gjithë e kodit tonë të shpërndarjes, përfshijnë formatimin e teksteve kaçurrel gjithsesi, vetëm për hir të qartësisë së. Por e kuptojnë se në tekstet shkollore dhe shembuj në internet, ju shumë mirë mund të shihni kaçurrel formatimin e teksteve të humbur diku. Dhe kjo është në rregull, në qoftë se atë që ju kanë prerë dhe të destinuara është vetëm një linjë të vetme të kodit, dhe jo linjat e shumta të kodit, potencialisht. Dakord. Pra, lidhur me çështjen e pasaktësi, është një çështje e del nga shtrati, në kuptimin që, në mënyrë të ngjashme, nuk integers kanë kufij ndaj tyre ashtu si lundrues vlerat pikë? Në botë një pikë lundrues vlerat, ne mund të jetë vetëm aq i saktë, pas së cilës, nganjëherë gjëra të këqija mund të ndodhë, dhe programet tona mund të jetë buggy dhe gabim. Tani edhe me integers, ju mund të kandidojë në probleme. Tani një numër i plotë nuk ka një pikë dhjetore ose numra pas saj. Është vetëm një numër natyror, në mënyrë tipike. Pra, çfarë mund të shkojnë keq me një int? Në qoftë se unë jam duke përdorur një int për numërimin, çfarë mund të shkojnë keq? Duket një shumë të thjeshtë. Po. AUDIENCA ANËTAR: Nëse Numri i merr [e padëgjueshme] DAVID J Malan: Po. Çfarë nëse ju numërimin aq e lartë, që ju nuk mund të shprehin atë numër me të vërtetë i madh. E drejtë? Në një moment, ju do të jeni të tejkalojnë kufijtë me një vlerë 32-bit ose një vlerë 64-bit. Tani përsëri, unë nuk jam i sigurt se si të shpallë një vlerë 64-bit, por unë e di se me një numër të plotë 32-bit, vlera më e madhe ajo mund të jetë, nëse kjo është vetëm pozitive Vlerat, është afërsisht 4 miliardë. Pra, nëse unë të përpiqet për të numëruar në 5 miliardë, diçka do të ndodhë. Por le të shohim se çfarë, në fakt, mund të ndodhë. Në botën e integer del nga shtrati, ku, në një kuptim, përmbytin kapacitetin e një numër i plotë, çfarë mund të ndodhë? Kështu që këtu është një numër binar, kjo është një rikthim në 0. Kjo është e gjitha 1-së, dhe placeholders atje, janë kompetencat e 2, kështu që kjo është binar. Pra, këto janë 8, 1 bit në ekran. Dhe në qoftë se ju kujtohet apo ju shpejt të bëjë matematikë, çfarë vlere është duke u përfaqësuar këtu me këto tetë 1 bit? 255. Dhe edhe në qoftë se ju nuk ishin mjaft të sigurt i math, ju mund të bëni atë. Ose ju mund vetëm lloj i arsyes nëpërmjet saj, prit një minutë, në qoftë se unë jam i që përfaqëson një vlerë 8 bit, dhe unë kam marrë 256 vlerat e mundshme, por e parë e cila është 0, Unë vetëm e di se më i madh do të jetë 255, dhe kjo është ajo që mund të jetë kjo një. Kështu që mendoj unë të përpiqet për të shtuar 1 për këtë vlerë. Çfarë do të bëni në klasën Shkolla kur duke shtuar një 1, dhe kjo nuk ka të vërtetë i aftë për shkak ju keni për të kryer 1? Çfarë është ky numër shkon të bëhet kur ju të shtoni 1? Ajo do të bëhet 0. E drejtë? Sepse në qoftë se keni pasur më bits-- dhe unë do të përpiqen për të, lloj, shkruani atë here-- nëse do të kishim më shumë bit, ajo që ne mund të bëjë këtu është shtuar 1, dhe pastaj ne do të merrni këtë. Uh. Ne do të kemi një 1 bit gjithë rrugës mbi këtu. Por në qoftë se kjo është një i caktuar vlera, kjo është vetëm 8 bit, dhe kjo është e para-përcaktuar nga kompjuteri, se 1 është efektivisht nuk është atje. Ajo thjesht lloj i bie nga një shkëmb. Dhe kështu që në qoftë se ju shtoni 1 në 255, çfarë vlerën e ju me sa duket të merrni? 0. Dhe kështu numrat aksidentalisht dhe ndoshta, pa dashje, përfundojnë mbështjellës rreth si kjo. Pra, çfarë mund të jetë implikimi i kësaj? E pra, ka disa gjëra të ndryshme. Pra, një, kjo do të përfundojë në kërkim si 0, pa dashje, por ju mund të lloj të shihni, edhe në botën e vërtetë, për mirë apo për keq, manifestime të kësaj ideje të një afati. Për shembull, ndonjë prej jush që kanë luajtur ndonjëherë Lego Star Wars, does anyone ndodhë që të dini numri maksimal i monedhave ju mund të mbledhë në Lego Star Wars? Merrni një mend të bazuar në Pyetjet kryesore e sotme. Kjo është më e madhe se 256 ose 255. Është e 4 miliardë. Pra, ajo rezulton, dhe ka disa people-- disa googling konfirmuar night-- fundit kanë marrë 4 miliardë monedha ari, apo gjësend, në Lego Star Wars. Edhe pse me sa duket, nuk ka një mënyrë për mashtrim të lojës, ka një bug apo tipar që ju lejon të vetëm rritet shumë dhe shumë e pikave. Por më e madhe të jetë e mundur Vlera, sipas në këtë ekran e shtënë e dikujt I gjendet online, është me të vërtetë, 4 miliardë. Tani pse është kjo? Është pikërisht 4 miliardë, ndoshta për shkak se dikush ka vendosur, i cili ishte shkruar këtë lojë, se ata mund të bëjnë 4 miliardë, diçka, diçka, diçka, si vlerën e kam vënë me kalkulator më herët, por kjo është vetëm një pastruese pak për njerëzit për të thënë numrin maksimal i coins-- apo studs, siç e quajnë ata, porsi që ju mund të mbledhë është 4 miliardë. Dhe kështu, pse është kjo? Sa është lojë Lego zbatimin counter që është mbajtja e të Numri i monedhave që ju keni? Ata janë duke përdorur atë? AUDIENCA ANËTAR: Ajo ndalon numërimi pas 4 miliardë. DAVID J Malan: Ajo ndalon numërimi pas 4 miliardë, që do të thotë ju mund të tregoj, si një programues, se ata janë ndoshta duke përdorur një numër i plotë 32 bit. Ashtu si programues fjalë për fjalë vetëm typed, int, në kodin e tij ose të saj, dhe kjo është lloji i variablit që ata janë duke përdorur për të ruajtur kodin dikujt. Kështu që nuk ka manifestime të tjera i këtyre llojeve të kufijve. Kështu që unë nuk kam luajtur këtë game-- dhe unë u lexuar deri në historinë për të konfirmuar si much-- por në Versioni origjinal i Qytetërimit, ku ju duket ndërveprojnë me njëri të tjera dhe mund të bësh luftën, ose të kem paqe, Gandi ishte menduar të jetë një nga personazhet më paqësore, si unë kuptojnë atë, në radhë të parë version i qytetërimit. Dhe në të vërtetë, në një shkallë nga 1 deri në 10, agresivitetin e tij ishte vetëm një 1. Pra, ndonjëherë në mënyrë të butë agresive, me sa duket. Por në një moment, ju mund të me sa duket instaluar demokracinë në gjeografi tuaj. Dhe në qoftë se ju të instaluar demokracinë në versionin tuaj të lojës, atëherë niveli juaj agresioni shkon poshtë. Kjo është një gjë e mirë. Njerëzit janë më të qetë me sa duket, në atë situatë. Por me sa duket, dikush e bëri nuk kanë një, nëse, kusht në versionin origjinal të kodit. Pra, niveli i Gandit agresion shkoi nga pozitiv 1, minus 2, në negativ 1, por loja nuk ka kuptojnë numrat negative. Pra, ajo që ndodhi ishte agresioni Gandit Niveli u nga 1, me 0, 1 deri negative, e cila kishte efektin e mbështjellës rreth për të qenë personazhi më agresive në lojë, me një vlerë prej 255, në një shkallë nga 1 deri në 10. Dhe që atëherë, ka pasur më shumë incarnations e kësaj loje, dhe ata kanë mbajtur atë si një lloj vezë Pashkëve, se Gandi është me sa duket aq tmerrësisht agresive. Por kjo ishte rezultat i një gabim programimi shumë e thjeshtë në këtë version shumë të hershme të lojës. Tani më shqetësuese, më shumë kohët e fundit, Boeing 787 është dokumentuar si të paturit e një bug, jo lloji i pajisjes ju veçanërisht dëshironi të keni një bug. Dhe simptomat, që unë do të lexoj këtu, nga një artikull në internet, ishte ky, një model 787 aeroplan që është mundësuar vazhdimisht për 248 ditë mund të humbasin të gjithë alternating aktuale, AC, energjisë elektrike, për shkak të Njësitë e kontrollit gjenerator, GCUs, njëkohësisht duke shkuar në mënyrë të dështojnë-të sigurt. Pra, kjo ishte një paralajmërim të lëshuar kur u zbulua ky problem. Kjo gjendje është shkaktuar nga një software kundër, brendshme të GCUs, kështu një numër të plotë ose një variabël, që do të përmbytin pas 248 ditët e pushtetit të vazhdueshme. Boeing është në proces të zhvillimin e një upgrade software GCU se do të korrigjuar gjendjen pasigurt. Aq shumë si të raketave skenar, ku ata kishin një lloj të variable që ishte numëruar, dhe duke numëruar, dhe duke numëruar, por gradualisht tejmbushur kufijtë e aftësive të saj, në mënyrë të ngjashme bëri aeroplan mallkuar kanë një overflow ndryshueshme pas kohë të mjaftueshme të rrjedhshëm. Dhe kështu mënyra e gjuhë-in-faqe për të punuar rreth kësaj çështje është me të vërtetë, reboot, avioni juaj çdo 247 ditë, kështu që kujtesa merr fshihen dhe variabli shkon prapa në 0. Por e kuptojnë, kjo është një shumë mishërim i madh i programeve, por sidomos si ne dëgjojmë për Apple sistemet operative shkon në makina, dhe makina të vetë-ngarje nga Google, dhe çdo numër i incarnations të softuerit në jetën e përditshme tona, TV dhe watches, dhe më shumë, realizojnë ishin të rrethuar nga software, të gjithë nga të cilat është shkruar nga ne njerëzit. Dhe si ne do të zbuloni të gjithë së shpejti, kjo është shumë e lehtë dhe shumë tipike për të bërë gabime kur shkrim software. Dhe në qoftë se ju nuk e kapur ata, disa gjëra të këqija mund të ndodhë. Tani nganjëherë, disa gjëra qesharake mund të ndodhë, ose të paktën ndonjëherë ne dinë të presin disa keqen. Pra, 0 ndarë nga 0, nga klasa e shkollë, në përgjithësi është një gjë e keqe. Është e padefinuar. Dhe kjo rezulton out-- dhe le të shohim nëse mic ime mund të marr këtë up-- se Apple pasur disa fun me këtë kohët e fundit. Kështu që unë kam një iPhone këtu. Unë jam duke shkuar për të folur në Siri dhe ta pyesim atë për të më jepni përgjigje për 0 ndarë nga 0. Çfarë 0 ndarë me 0? SIRI: Paramendoni se ju keni 0 biskota, dhe ti ndarë ato në mënyrë të barabartë midis 0 miqve. Sa Cookies ka çdo person për të marrë? Shih? Kjo nuk ka kuptim. Dhe Cookie përbindësh është e trishtuar se nuk ka biskota. Dhe ju jeni të trishtuar se ju nuk keni miq. DAVID J Malan: Kjo është lloj i padurueshëm. Pra, kjo është ajo që ishte vetëm tha se ka. Është e pacaktuar, ajo nuk është e përcaktuar, Dhe vërtet, shumë gjuhë programimi ose, me të vërtetë, hartuesit do të zbuluar kur, në një program, përpiqen për të ndarë 0 me 0. Më shumë argëtim sesa kjo megjithatë, është që me sa duket, Cookie përbindësh është në Twitter këto ditë. Dhe ai u përgjigj kësaj, me këtë, e cila është absolutisht adorable. Por le të marrin një vështrim të shpejtë një çift i ndërton të tjera, dhe pastaj të vënë disa prej kësaj Kodi për t'u përdorur, në mënyra të mira. Pra, ajo rezulton, përveç për sythe, nuk ka diçka që quhet një lak, ndërsa, që duket ndryshe dhe është zbatuar një differently-- pak dhe ne përfundimisht do të shohim examples-- por në një kuptim, kjo është thjeshtë sepse ajo nuk lejon që të nisja dhe rinovuar brenda kufirit të lak. Ju ende mund të zbatojë atë. Kështu që ju mund të bëni të njëjtat gjëra saktë me një lak, ndërsa, si me një për lak, por sintaksë juaj, ultimately-- si ne do të përfundimisht see-- do të jenë të ndryshme. Ka edhe një të bërë, ndërsa loop, e cila është në fakt një pak më ndryshe, në atë, ndërsa një për lak dhe një lak, ndërsa gjithmonë kontrolloni gjendjen e tyre të parë, në qoftë se ju lexoni këtë gjë nga lart poshtë, ai lloj i duket si ajo do të kontrolloni atë për gjendjen e kaluar, sepse kjo është vërtet vija e fundit e kodit. Dhe me të vërtetë, kjo do të jetë e dobishme në disa programe që kemi shkruar, në qoftë se ju doni të vetëm verbërisht të bërë diçka dhe përfundimisht të kontrolluar gjendjen. Kjo nuk është domosdoshmërisht një gjë e keqe. Në qoftë se ne duam variabla, ne mund të bëjmë në disa mënyra të ndryshme. Dhe ne pamë në foks cartoon, një mënyrë për të bërë atë, ku ju të deklarojë ndryshore tuaj, si int kundër pikëpresje, dhe pastaj later-- ndoshta e ardhshme line, ndoshta 10 linjat later-- ju në fakt nisja atë. Pra këto 2 rreshta të kodit të deklarojë një ndryshore të tipit int dhe e quajti atë kundër, kështu që i jep Me mjaft bit për të mbajtur një int. Dhe pastaj në fund, ajo e vë vlera 0 në atë variabël. Ajo rregullon SË 0 dhe 1 në një model, se ne e dimë nga java e kaluar, paraqet numrin ne e dimë si 0. Ose sinqerisht, ju mund ta bëni këtë shumë më shumë shkurtimisht, ashtu si kjo. Tani ne gjithashtu kemi Aftësia për të thirrur funksione. Dhe në fakt, këtu është një linjë e 2 program, ose nje fragment te tij, që na lejon të vërtetë të shkruani disa kodin që merr një varg nga user-- shumë si vullnetar tonë një moment ago-- ruajtjen rezultatin në një variabël e quajti, dhe then-- ashtu si me vullnetarë tonë me printf-- printime jashtë këtyre vlerave duke kaluar në dy argumente, string, e ndjekur nga variabël quajtur, emrin, vetë. Pra, le të marrin një vështrim, para se të kemi ardhur përsëri në Mario atje, në një çift të tani, shembuj të kësaj. Unë jam duke shkuar për të shkuar përpara dhe të hapur lart, le të themi, funksion-0.c. Dhe si gjithmonë, ky kod është në dispozicion në faqen e internetit të kursit, kështu që ju mund të luajnë së bashku në shtëpi dhe të shikojnë atë më vonë. Por këtu është programi në është thelbi, nga linjë 17 deri 22. Programi kryesor është ku Programi është gjithmonë do të fillojë. Ky program, me sa duket, po shkon për të shtypur emrin tuaj, zorrës së trashë. Ajo pastaj do të thërrasë getString, ashtu si ne e bëmë me vullnetarët tanë. Dhe pastaj, kjo është interesante, ajo do të thërrasë PrintName. Ajo rezulton, të gjithë këtë kohë, nuk ka duket të jetë një funksion i quajtur PrintName. Që printon emrin e dikujt. Ne nuk duhet të përdorin printf nga vitin e kaluar, ka PrintName. Por kjo është mashtruese sepse PrintName nuk ka vijnë me C. Njerëzit nuk e bëri trilloni atë rreth 40 apo 50 vjet më parë, Unë e bëri, në vend. Dhe në fakt, nëse unë lëvizni poshtë të mëtejshëm, njoftimin se si unë mund të shkruaj mi funksionon në C. Ne do të përfundimisht të shpjegojë pse ne vazhdojmë duke thënë: pavlefshëm, në disa vende, por për sot, le të vetëm shikoni në emër. On line 24, në qoftë se ju doni të krijuar funksionin tuaj, ju fjalë për fjalë shkruani emri i funksionit. Unë zgjodha PrintName. Në kllapa, ju atëherë specifikoni çfarë lloj i inputeve, dhe sa ju duan këtë funksion për të marrë. Në këtë rast, unë dua të të marrë 1 ndryshueshme quajtur, emrin, dhe ajo do të jetë e llojin, string, kështu që ajo do të jetë një rend prej karaktereve. Dhe pastaj, kjo program-- ashtu si në Scratch, ju mund të keni mister porosi pieces-- do të ketë këtë sjellje porosi. Ajo do të thërrasë printf duke kaluar në, përshëndetje, placeholder, dhe pastaj ajo do të plug në çfarëdo përdoruesi të quajtur. Pra, ky është një shembull i asaj që një shkencëtar kompjuteri do të Nxjerrja telefonatë apo funksional dekompozimi, të cilat janë vetëm mënyra dashuroj e saying-- është në qoftë se ju pëlqen kjo ide të nivelit të lartë, si unë dua funksionalitetin që printon emrin e dikujt, absolutisht ju fjalë për fjalë mund të shkruani printf dhe pastaj të kalojë në argumentet që ju doni, dhe programi do të punojë, pasi ka që nga e mërkura. Por ju mund të filloni për të abstrakte larg nocioni i shtypjes një emër. Ju mund t'i jepte një emër, si PrintName, dhe kjo është kjo ide e layering nga javës 0. Tani e tutje, unë dhe ju nuk duhet të dini ose intereson sa PrintName është zbatuar. Po ajo përdor printf, ndoshta ajo nuk ka, kush e di çfarë përdor? Kush kujdeset? Tani unë jam duke folur deri këtu, në vend të poshtë këtu. Dhe me të vërtetë, si programet tona të merrni më të avancuar dhe sofistikuar, ne jemi duke shkuar për të mbajtur të marrë për të dhënë se copa më të ulëta puzzle nivel ekzistojnë. Sepse kemi shkruar ato apo dikush tjetër e ka, kështu që ne atëherë mund të ndërtojmë në krye të tyre. Le të bëjmë një vështrim në këtë variant, një funksion. Pra, kjo është pak më shumë avancuar, por rezulton që në bibliotekën CS50 e, ka vetëm një funksion GetInt. Ne nuk mendojmë, vite më parë, në zbatojë një funksion GetPositiveInt. Dhe kjo është pak i bezdisshëm, sepse nëse ju djema duke shkruar një program ne te cilen ju doni të merrni një pozitiv numër i plotë nga ana e përdoruesit, ju mund të përdorni absolutisht GetInt. Dhe ju mund të kontrolloni absolutisht me gjendja dhe ndoshta një lak nëse kjo int është më i madh se 0 dhe bërtas në përdoruesit nëse ai ose ajo nuk i jep ju një numër pozitiv. Por le të ndërtojmë këtë Ndërtimi Blloku veten, një, me porosi pjesë Scratch, nëse ju do. Unë do të ketë një program të këtu se në fund të fundit, unë duan të jenë në gjendje për të thirrur GetPositiveInt, dhe unë dua të jem gjendje për të shtypur jashtë çfarëdo që është e int. Por ky është i përhumbur larg tani. Ka qenë vetëm dhënë një nivel të lartë emër që thotë atë që bën, e cila është e mrekullueshme, sepse kjo është shumë intuitiv tani për të lexuar. Dhe në qoftë se unë bëj kujdes atë që është nën individualitet, më lejoni të lëvizni poshtë. Dhe kjo është pak frikësuese në fillim, veçanërisht në qoftë se ky është programi juaj e parë, por le të marrin një sy. Unë nuk jam duke thënë, i pavlefshëm, sepse ajo rezulton e funksioneve, shumë si getString, mund kthehen një vlerë për mua. Ata nuk kanë vetëm për të shtypur në ekran, ata në fakt mund të dorëzojë mua diçka mbrapa. Dhe ndërsa para PrintName, Unë nuk kanë nevojë për asgjë prapa. Kam nevojë për efekt anësor i diçka duke treguar deri në ekran, por unë nuk kam nevojë për një njeri të më dorëzojë diçka mbrapa. Këtu, me GetPositiveInt, si me GetInt, Unë dua të jenë të dorëzohet diçka mbrapa. Kështu që unë jam duke thënë jo, e pavlefshme, on line 23, por int, i cili thotë: ky funksion se unë jam i shkruar, quajtur GetPositiveInt do të dorëzojnë mua mbrapa një numër të plotë, jo asgjë, nuk i pavlefshëm. Ndërkohë, ajo do të marrë asnjë inputet, kështu që unë kam, lloj, përmbyset atë. Unë nuk jam duke i dhënë GetPositiveInt ndonjë input, unë dua që ajo të më jepni prodhimin e saj. Dhe pastaj çfarë ndodh tani? Kështu që këtu është se si unë mund të deklarojë një ndryshore. Unë e kam bërë atë jashtë lak, për arsye ne përfundimisht do të shohim, por kjo vetëm i jep Më 32 bit të quajtur, n, dhe unë kam para-përcaktuar ata për të ruajtur integer. Dhe këtu është se, ndërsa bëjnë ndërtimin, dhe kjo është arsyeja pse ajo është e dobishme. Fjalë për fjalë ta bërë këtë, ndërkohë që n është më pak se 1. Pra, le të shohim se çfarë ndodh. Unë të shtypura jashtë, ju lutem më jepni një int pozitive. Unë pastaj të marrë një int, duke përdorur CS50-së funksionojnë dhe ruhen në n. Dhe pastaj, çfarë linjë e kodit ndoshta merr ekzekutohet tjetër, logjikisht? Të cilat linja numër? Yeah, kështu që 31. Ju nuk do të dinë këtë deri sa ju keni është thënë ose lloj të konkludoj atë, por kjo është e vërtetë. Ajo shkon lart poshtë dhe pastaj e mban përsëritur. Pra, nëse unë kam shtypur në të themi, numrin e negative 1, n është më pak se 1 negative? Po. Për shkak negative 1 është më pak se 1. Pra, çfarë duhet të ndodhë? Unë jam duke shkuar për të bërë këtë ndërkohë që n është më pak se 1, kështu që unë jam duke shkuar për të shkuar mbrapa në linjë 28. Dhe secili time-- dhe le të kandidojë this-- bëjnë Funksioni 1 për të hartuar atë, dhe tani dot çaj funksionit 1. Nëse unë lloji negativ 1, është shkuar për të mbajtur yelling në mua deri sa unë të bashkëpunojnë, sepse çdo e inputeve të mi është më pak se 1 dhe në qoftë se kjo është ndërsa më pak se 1, Unë do të vazhdojmë të bëjmë këtë. Në qoftë se unë më në fund t'i jepte një numër si 50, fatmirësisht, ai thotë, faleminderit për 50. Përse? Sepse sa më shpejt që n është jo më pak se 1, I ndaluar duke u mbërthyer në këtë lak, dhe kjo fjalen ri sot, kthimi, fjalë për fjalë e bën këtë. Kështu që unë kam realizuar vetëm, në një kuptim, ekuivalenti i getString, ku unë jam dorëzuar përsëri në kush është duke përdorur mua, disa vlera. Ajo nuk duhet të jetë një varg, kjo është një int. Pra, një të thjeshtë, të shpejtë shembull, por ne do të së shpejti të shihni disa më të sofistikuar Versione ende. Në fakt, le të marrin një vështrim në një një numerike, e cila është quajtur return.c. Dhe kjo është në fakt pak të thjeshtë. Pra, qëllimi i këtij programi në life-- le të përpilojnë dhe drejtuar atë, kështu që të bëjë kthimin, dot Slash, njoftim return-- programi thjesht cubes vlerën 2. Është shumë e trashë, është e vështirë kod, ajo nuk ka marrë asnjë inputeve, por ajo ka demonstruar një tjetër funksion që unë kam shkruar vetë. Kështu që këtu, unë kam deklaruar një variabël, i quajtur X, e tipit int, barabartë me numrin 2, krejtësisht arbitrare. Kjo është vetëm disa shtypje me gëzof. Ajo thotë se x është tani, i tillë dhe të tilla, cubing dot dot dot. Dhe magjia është me sa duket në linjë 21. Unë jam duke e quajtur një funksion të quajtur, kubike, Unë jam dorëzimin atë një fletë letre me numër të 2 shkruar në të, dhe çfarë vlere, matematikisht, dua të marrë nga ajo? Ashtu si një kontroll mendje e shëndoshë? 8. E drejtë? Unë dua 2 Cubed prapa, 2 në fuqia e 3, kështu 8 prapa. Pra, ku është zbatuar kubike? E pra, kjo është zbatuar njoftim poshtë këtu. Dhe ashtu si më parë, logjikisht, edhe pse sintaksa është ndoshta shumë i ri për shumë prej jush, Unë dua këtë funksion për të dorëzuar përsëri një fletë e letër me një int mbi të. Kështu që unë kam një int, e emri është në mënyrë arbitrare, por të përshtatshme quajtur kubike. Inputi të saj, është i n lloji numër i plotë, kështu që kjo është se si unë mund të kalojë në numrin 2 në një fletë letre. Dhe pastaj del C mbështet matematikë, kështu që ju nuk keni për x-së për herë, ju vetëm përdorni yll për shumëzim. Dhe kjo kthehet herë NN herë n, e cila është një vlerë thjesht cubed. Pra, ku jemi duke shkuar me të gjithë këtë? Kjo është padyshim një turne shakullinë, pjesa tjetër e siguroi, që në seksionet super dhe në problemin vendosur 1, ju do të ecte përmes gjithë kjo edhe më tepër. Dhe në problemin vendosur 1, ne do të tranzicionit nga bota grafike e Scratch për diçka më shumë command line në C. Por ne do të marrin frymëzim nga kjo lojë këtu nga kaluar, ku duke përdorur C dhe edicionin standard të p grup ju do të zbatojë piramidë Mario. Dhe në edicionin e hacker e p grup, nëse kështu zgjedhin për të zgjedhur, ju do të zbatojë një pak më shumë sfiduese piramidë me dy maja. Ju gjithashtu do të zbatojë një algorithm, një algoritmi babëzitur. Ajo rezulton se ka disa logjikë interesante pas proces drejtimin stacionin një turp dhe në fakt dorëzimin dikush ndryshim përsëri. Nuk është një algoritëm që është mjaft drejtpërdrejtë, që ju mund edhe kuptojnë intuitivisht kur ju lexoni për herë të parë it-- e kuptuar kjo është ajo që unë kam gjithmonë bërë çdo herë që unë kam dhënë disa dikë back-- paratë që ju lejon të gjithmonë minimizuar numrin e shënime letër ose monedhat metalike se ju jeni të dorëzuar përsëri për përdoruesit. Dhe kjo, sigurisht, është bindëse sepse në qoftë se ju shkoni në CVS apo gjësend, ju nuk doni të jetë duar një bandë e tërë e atyre ose një bandë e tërë e pennies. Ju dëshironi fewest monedha, ndoshta, të jetë e mundur. Së fundi, ju gjithashtu do të sfidohet të ujit në botën e ujit dhe në fakt të marrë një vlerësim për një hartë midis normave të rrjedhës, i pëlqen, ujë në një dush, vetëm se sa ujë është përdorur. Dhe aluzion aty, do të jetë ky klip këtu, të cilat ne do të përfundojë në për vetëm 60 sekonda, që një foto me ngjyra ulët-rrjedhës dush kokat. [VIDEO rishikim] -Të Gjitha të drejtë. Kam gjithçka këtu. I kam Cyclone F Seria, Hydra, Jetflow, Stokholm Supersteam, ju atë emër. -Dhe Çfarë ju rekomandojmë? -Çfarë Po kërkoni? Njeri -Fuqia. Pushtet. -Si Silkwood. -Kjo Është për rrezatimit. -Kjo Është e drejtë. -Tani Çfarë është kjo? -Kjo Është Komando 450. Unë nuk e shesin se një. -Por Kjo është ajo që ne duam. Kjo është një komando 450. -Jo Më besoni. Është përdorur vetëm në cirk. Është për elefantët. -I'll Paguani asgjë. -Si Për Jerry? -Ai Nuk mund të trajtojë atë. Ai është delikate. Oh yeah. [END rishikim] DAVID J Malan: Në rregull. Kjo është nëse për CS50. Ne do të shihemi javën e ardhshme. SPEAKER 1: [? Scully?], [? Ian,?] sa i përket këtij projekti Outro, çfarë keni djema të dalë me? SPEAKER 2: E pra, ne kemi dhënë atë një shumëllojshmëri të mendimit, dhe ne mendojmë se mënyra më e mirë to-- SPEAKER 3: Maj unë? SPEAKER 2: Po. Me të gjitha mjetet, në të vërtetë. SPEAKER 3: Kështu që unë mendoj ne mund të përmbledhur idenë tonë për outros me një asgjë word--. DAVID J Malan: Asgjë? SPEAKER 3: Asgjë. DAVID J Malan: Çfarë do të thotë kjo? SPEAKER 3: outros jeni gati asgjë. SPEAKER 2: E pra, unë të them, në filozofi, Unë do të thotë, asgjë nuk është gjithmonë diçka. SPEAKER 1: Pra what's-- çfarë është premisë? SPEAKER 3: Pra, kjo është si jeta. OK. Çfarë keni bërë sot? DAVID J Malan: u ngrita, kishte mëngjes, dhe erdhi për të punuar. SPEAKER 3: Kjo është një Outro. SPEAKER 2: Por, dua të them, nuk duhet diçka të ndodhë me atë në the-- SPEAKER 3: Jo, jo, jo, jo. Asgjë nuk ndodh. SPEAKER 1: Pra, pse jemi të shikuar? SPEAKER 3: Sepse është një Outro për CS50. DAVID J Malan: Ende.