[Duke luajtur muzikë] DAVID J Malan: Të gjithë të drejtë, mirëpritur mbrapa për CS50. Ky është fillimi i javës së dytë. Një fjalë nga njëri prej tonë miq në kampus - nëse jeni të interesuar, ndoshta, qoftë tani apo në ndonjë afat të ardhmen madje, herë më të rehatshme, mësimdhënia Nxënësit e shkollave të mesme një pak diçka në lidhje me shkenca kompjuterike, të bëjë kokën për këtë URL. Ata janë në nevojë të veçantë të drejtë tani i mësuesit, veçanërisht nëse ju keni kishte disa ekspozimit ndaj shkencës kompjuterike. Pra, kujtojnë se herën e fundit, ne kemi prezantuar disa lloje të të dhënave në C, dhe ju mund të keni filluar të marrë tuaj duart e pista me këto deri më tani në një problem të caktuar. Dhe ne kishim një char. Pra, në terma disi teknike, çfarë është një char si ju e dini atë sot? Pra, kjo është një karakter, por le të jetë më e saktë tani. Çka nënkuptojmë me karakter apo individ char? Një jo-numerike karakter - kështu që jo domosdoshmërisht. Ajo rezulton se numrat e madje, edhe shenjat e pikësimit dhe letra janë përfaqësuar me këto të dhëna lloji i njohur si një char. Pra, kjo nuk është domosdoshmërisht alfabetik. Po? Pra, kjo është një simbol ASCII. Pra, nëse ju mendoni përsëri në javë zero, kur ne kishim bajt tonë të vullnetarëve të dalë dhe as të mbajë duart e tyre deri apo jo të gjithë, ata përfaqësuara bit. Por, kolektivisht si një grup prej tetë, ata përfaqësonin një bajt. Dhe kemi futur nocionin e ASCII në atë leksion, e cila thjesht eshte nje hartë ndërmjet numrave dhe shkronjave. Dhe përdor ASCII, si ato që njerëzit nënkuptuara, tetë BITS për të përfaqësuar një karakter. Pra, në përputhje me rrethanat, në qoftë se tetë BITS mundeni secili merr mbi njërën nga dy vlera - zero ose një - do të thotë se ka pasur dy mundësi për këtë person - zero ose një - dy për këtë person, dy për këtë Personi, dy për këtë një të tillë. Pra, një total prej dy herë dy herë dy herë dy herë dy - kështu që dy teti në total. Pra, ka një numër total të karaktereve të 256 e mundur që ju mund të përfaqësuar me tetë BITS. Tani, ata prej jush të cilët flasin aziatike gjuhë mund të dini se ka më shumë karaktere në botë se vetëm Si dhe BS dhe Cs dhe DS. Dhe me të vërtetë, ASCII nuk do të mjaftojë për një shumë prej gjuhëve të botës. Por më shumë në atë kohë tjetër. Tani për tani, e di se në qoftë se ju doni C për të përfaqësuar një letër, një pjesë e shenjat e pikësimit, apo vetëm karakter diçka në natyrë, ne përdorim një char. Dhe kjo është një bajt apo tetë BITS. Si në lidhje me një int? Mirë, një int eshte nje numer i plote. Sa bit, nëse ju kujtohet, ishte një numër i plotë në mënyrë tipike? Çdokush risjell? Pra, kjo është zakonisht 32. Ajo në fakt varet në kompjuter se ju jeni duke përdorur. Por ne aplikim, dhe në një shumë prej kompjutera, është 32 bit apo katër - bytes tetë herë katër. Dhe ints janë përdorur vetëm për magazinimin e Numrat, qoftë negative, pozitive, ose zero. Dhe në qoftë se ju keni marrë 32bits dhe ju vetëm kujdes në lidhje me numrat pozitive, mund të ballpark dikush sa të jetë e mundur integers një kompjuter mund të përfaqësojnë nga zero në dorë? Kështu që kjo do të jetë dy te te 32, e cila është afërsisht katër miliard më. Pra, këto kompetenca të dy do të jenë të Temat e përsëritura në shkenca kompjuterike. Siç do të shohim, ata janë mjaft të përshtatshëm për të punuar me të edhe në qoftë se ajo nuk është mjaft lehtë për të bërë matematikë në kokën e dikujt. Pra, ne do të themi pothuajse katër miliardë dollarë. Tani, një kohë të gjatë - ju mund të lloj i guess. Kjo është më shumë se një int. Sa bit? Pra, 64 bit ose tetë bytes. Kjo thjesht do të thotë që ju mund të përfaqësojë edhe Numrat më të mëdha, më të mëdha pozitive apo Numrat e mëdha negative. Dhe si për të nxjerr në shitje? Kjo është një pikë lundrues Vlera e 32 bit. Kjo është vetëm një numër real, diçka me një pikë dhjetore. Por në qoftë se keni nevojë për më shumë vende në vend pas presjes dhjetore, ose ju dëshironi të përfaqësojnë një numër më të madh me disa fraksion pas saj, ju mund të përdorni një të dyfishtë, e cila është 64 bit. Por ka një interesante takeaway këtu. Pra, nëse ints janë të kufizuara nga 32 bit dhe edhe longs të gjata janë të kufizuara nga 64 bit, se lloj i ngre pyetje, çfarë nëse ju në të vërtetë doni për të numëruar më i lartë se 4 miliardë për një int? E pra, ju vetëm përdorni një kohë të gjatë. Por, çfarë nëse ju doni për të numëruar të larta se dy në 64, të japë ose të marrë? Tani, që është një numër shumë i madh. Por përfundimisht, ju mund të vërtetë kujdesen për këto lloje të vlerave, veçanërisht nëse ju jeni duke përdorur një bazë të dhënash dhe duke filluar për të mbledhur shumë dhe shumë dhe shumë të dhëna dhe caktimin unike Numrat në çdo copë të dhëna. Pra, ne kemi një lloj i problemit. Dhe në mënyrë të ngjashme, me pikë lundrues Vlerat - gjithandej apo dyshe - në qoftë se ju keni marrë vetëm një numër i caktuar i bit, se sa numra total mund të ju ndoshta përfaqësojnë? E pra, kjo është më pak e qartë kur ju të përfshijë një pikë dhjetore. Por kjo është me siguri fundme. Nëse ju keni një numër i caktuar i bit, një numër i caktuar i njerëzve, një fundme Numri i poqat, me siguri ju mund të përfaqësojnë vetëm një numër i caktuar i lundrues vlerat pikë. Por si shumë numra reale tyre janë në botë? Ka një infinit. Pra, kjo është lloj i një problemi, sepse ne nuk kanë një sasi të pafund të memorie RAM ose brenda kompjuterat tanë. Pra, disa gjëra mund të ndodhë sfiduese. Pra, le të shkojnë përpara dhe përpiqen për të shprehur këtë këtu. Më lejoni të shkojnë përpara dhe të hapur deri Gedit. Unë jam duke shkuar për të shkuar përpara dhe për të shpëtuar një skedar quajtur "floats0.c" vetëm të jetë në përputhje me një shembull që është në dispozicion online, në qoftë se ju do të donte. Dhe unë jam duke shkuar për të shkuar përpara dhe define atë si vijon - Unë jam duke shkuar për të shkuar përpara dhe të thonë, int void kryesore, si ne shpesh bëjmë. Dhe pastaj në këtë program, unë jam duke shkuar për të deklarojë veten një noton, kështu që një 32-bit i quajtur variabël f, në mënyrë arbitrare. Dhe atëherë unë jam duke shkuar për të ruajtur në atë Unë nuk e di, një të dhjetën, kështu 0.1. Kështu që unë jam duke shkuar për të shprehur se si një ndare me 10, e cila eshte perfekte legjitim në C. Dhe pastaj në rreshtin e dytë, unë thjesht doni të shtypura jashtë atë vlerë. Pra, kujtojnë se ne mund të përdorim printf njohur. Ne nuk duam që të përdorni% Unë për një int. Ne duam që të përdorni% f për një noton. Dhe atëherë unë jam duke shkuar për të bërë backslash N, quote ngushtë, presje, f, pikëpresje. Kështu që këtu është programi im. Ka tashmë një bug. A ka dikush për të cilët ky klikuar tashmë duan të tregojnë së paku një bug kam bërë? Po? Po. I harruar "# include" në top, ata simptomë e cila në qoftë se unë të përpiqet të përpilojnë kjo do të jetë që compiler do të bërtas në mua, duke thënë simbol i padefinuar apo diçka për këtë qëllim. Ajo nuk e kupton diçka printf pëlqen. Kështu që unë jam duke shkuar për të bërë "# përfshijnë ", Ruani skedarin. Dhe tani kjo është në formë të mirë. Por unë jam gjithashtu do të theksojnë nga një detaj të ri sot. Përveç specifikuar vendin mbajtësit si f%% i% s, ju mund të nganjëherë ndikojnë në sjelljen e asaj placeholder. Për shembull, në rastin e një lundrues Pika vlerë, në qoftë se unë vetëm dua për të shfaqur një vend decimal pas periudhë, unë mund të bëjë në fakt 0.1f. Pra, me fjalë të tjera, unë të ndarë dhe të f shenjë me 0.1 për qind, vetëm printf thënë, ju mund të keni një të tërë bandë e numrave pas presjes dhjetore, pikë për mua. Por unë vetëm dua të shoh një prej tyre. Kështu që unë jam duke shkuar për të shkuar përpara tani dhe për të shpëtuar ky program, shkoni në terminal time dritare, dhe unë jam duke shkuar për të shkuar përpara dhe tipi bëjnë 0 noton, të hyjë. Unë shoh atë linjë disi të paqartë që do të fillojë të bëjë më shumë kuptim si ne vë në lojë atë përveç kësaj jave dhe të ardhshëm. Tani unë jam duke shkuar për të shkuar përpara dhe të drejtuar zero noton. Dhe, mallkuar. Pra, ka një tjetër bug këtu për disa arsye. Unë jam goxha i sigurt se një e dhjeta, ose njëri ndarë nga 10, nuk është 0.0. Ndoshta unë nuk jam vetëm në kërkim në shifra mjaft. Pra, pse të mos them dy .2 për të parë dy numra pas presjes dhjetore vend të vetëm një. Më lejoni të kthehem në dritaren time terminal këtu dhe goditur disa herë për të shihni historinë time. Mos bëni noton zero përsëri, dhe pastaj përsëri. Dhe tani të hyjë. Dhe tani unë jam goxha i sigurt se kjo është e gabuar. Dhe unë mund të bëj tre dhe katër, dhe unë jam ndoshta do të mbaj shohim zero. Pra, ku është bug? Një ndarë nga 10 duhet të jetë 0.1. Dikush duan të marrin një goditje me thikë në çfarë Çështja themelore është? Po? Ata janë të dy integers. Pra, çfarë? Pra, me një pjesëtuar me 10, që është çfarë të bëj në aritmetikë. Dhe unë të marrë 0,1. Po. Dhe kështu që ajo është me të vërtetë që çështja. Kur ju merrni një numër të plotë në një kompjuter dhe ju ndani atë me një numër të plotë, kompjuteri by default do të supozojmë se ju doni një numër të plotë. Problem edhe pse, natyrisht, është se 0.1 nuk eshte nje numer i plote. Kjo është një numër real. Dhe kështu që çfarë e bën nga kompjuteri default është ai thjesht hedh larg gjithçka pas presjes dhjetore. Ajo nuk raundin e poshtë apo lart në vetvete. Ajo thjesht hedh larg çdo gjë pas presjes dhjetore. Dhe tani që e bën kuptim. Sepse tani ne jemi në mënyrë të qartë u largua me zero. Por, prit një minutë. Unë nuk jam duke parë një zero int. Unë jam në të vërtetë duke parë 0,00. Pra, si mund ta pajtojë këtë tani? Nëse dikush e ndarë nga 10 është zero, por unë jam i duke parë 0,00, ku ajo bëhet konvertuar përsëri në një numër real? Po. Saktësisht. Pra, deri këtu në linjë pesë, kur unë në fakt ruajtur se 0.1, i cili është atëherë prerë në zero, në brendësi të një float, kjo është në mënyrë efektive ekuivalente me magazinimin e jo atë si një int, por, me të vërtetë, si një noton. Për më tepër, unë jam pastaj duke përdorur printf për në mënyrë eksplicite të shtypura atë numër për dy numra pas presjes dhjetore, edhe pse ka mund të mos jetë në fakt asnjë. Pra, ky lloj i sucks, e drejtë? Me sa duket ju nuk mund të bëjë matematikë, të paktën në këtë nivel të saktësi, në një kompjuter. Por me siguri ka një zgjidhje. Çfarë është fix thjeshtë që ne ndoshta mund të bëni, madje edhe vetëm intuitive këtu për zgjidhur këtë? Po? Kthejeni integers në - vërtet. Edhe në qoftë se unë nuk jam mjaft i sigurt se çfarë është ndodh në të vërtetë këtu, në qoftë se ajo thelb ka të bëjë me këto të dyja duke qenë ints, edhe, pse nuk kam bërë që 10.0, duke e bërë këtë 1.0, resave file. Më lejoni të kthehemi poshtë për të fund dhe përpilim. Më lejoni tani përsëritje. Dhe atje - tani, unë kam marrë një të dhjetën e mia të përfaqësuara si 0,10. Dakord. Kështu që nuk është e keqe. Dhe më lejoni të theksoj një rrugë tjetër ne mund të kemi zgjidhur këtë. Më lejoni të vërtetë rrokulliset prapa në kohë kur kemi pasur këtë si një dhjeta një moment më parë. Dhe më lejoni të shkoj përpara dhe të resave këtë skedë si një emër të ndryshëm file, vetëm për të kanë një postbllok pak. Kështu që ishte një version. Dhe tani më lejoni të shkoj përpara dhe të të bëjë një version më. Ne do të quajmë këtë version dy zero indeksuar. Dhe unë jam duke shkuar për të bërë në vend kjo - ju e dini se çfarë? Shtimi dot zero punon në këtë rast. Por supozoj se dikush ishin një ndryshore. 10 supozuar ishin një ndryshore. Me fjalë të tjera, unë mendoj se nuk mund të vetëm hard-Kodi 0,0 në fund i kësaj shprehje aritmetike. E pra, unë në fakt mund të bëjë diçka në kllapa quajtur hedh. Unë mund të hedhin atë në një numër të plotë 10 noton, dhe unë mund të hedhin se një numër i plotë për një shket, si edhe. Pastaj math që po ndodh për të bërë është 1.0 efektivisht ndarë nga 10.0, rezultati i të cilës shkon në f si më parë. Pra, nëse unë recompile këtë si të bëjë gjithandej 2, dhe tani gjithandej 2, unë të marrë të njëjtën përgjigjen, si edhe. Pra, kjo është një shembull mjaft i sajuar, për të zgjidhur këtë problem duke futur hedh. Por në përgjithësi, hedh do të jetë një gjë e fuqishme, veçanërisht për Problemi vendosur dy në një javë kohë, kur ju doni të konvertohet në një lloj të dhënave për një tjetër që në fund të ditës janë të përfaqësuara në të njëjtën mënyrë. Në fund të ditës, çdo të vetme gjë që ne kemi biseduar rreth deri tani është vetëm ints nën kapuç. Ose në qoftë se është tepër i nivelit të ulët për ju, ata janë vetëm numra nën kapuç. Edhe karaktere, përsëri, kujtojnë nga zero javë, janë numrat nën kapuç. Cila është të thuhet, ne mund të konvertohet në mes të lloje të ndryshme të numrave nëse ata janë vetëm bit. Ne mund të konvertohet në mes të numrave dhe letra në qoftë se ata janë vetëm bit, dhe anasjelltas. Dhe hedh në këtë mënyrë është një mekanizëm në programimin që ju lejon forcë ndryshojë një lloj të dhënave në një tjetër. Për fat të keq, kjo nuk është aq e drejtpërdrejtë si unë mund të ketë pëlqyer. Unë jam duke shkuar për të shkuar mbrapa në gjithandej 1, e cila është më e thjeshtë, më njëri i drejtpërdrejtë me .0 Shtuar më secilit. Dhe vetëm si një përmendore të shpejtë, më lejoni të shkoj përpara dhe të recompile këtë, e bëjnë gjithandej 2 - keq, kjo është bërë gjithandej 1. Dhe tani le të kandidojë gjithandej 1. Dhe në fund, vini re që unë me të vërtetë të marrë 0,1. Pra, problemi zgjidhet. Por jo ende. Unë tani jam duke shkuar për të marrë një pak kurioz, dhe unë jam duke shkuar për të shkuar mbrapa në tim Deklarata printf dhe Thuaj, ju e dini se çfarë? Dua të konfirmoj se ky është me të vërtetë një e dhjeta. Dhe unë jam duke shkuar për të duan të shohin këtë me, të themi, pesë numra pas presjes dhjetore. Kjo nuk është një problem. Unë të ndryshojë dy për një pesë, I përpiluar me të bërë. Unë ribërjen atë si gjithandej 1. Kërkoj goxha e mirë. Kontrollet e mia mendje e shëndoshë mund të përfundojë atje, por Unë jam duke marrë një pak më shumë aventureske. Unë jam duke shkuar për të ndryshuar 0,5-,10. Unë dua të shoh 10 shifra pas vendi decimal. Dhe unë jam duke shkuar për të shkuar përpara dhe recompile këtë dhe ribërjen gjithandej 1. I lloj keqardhje ka testuar këtë më tej, sepse matematika ime nuk është aq e korrigjuar më, ajo duket. Por prisni një minutë, ndoshta kjo është vetëm një pikë për shans. Ndoshta kompjuteri është duke vepruar pak e çuditshme. Më lejoni të shkojnë përpara dhe të bëjë 20 pikë decimale dhe të siguroj veten se unë e di se si të bëjë matematikë. Unë e di se si të programit. Bëni gjithandej 1, përpilim dhe mallkonte atë. Kjo është me të vërtetë, me të vërtetë duke marrë larg nga të shënojë. Pra, çfarë po ndodh këtu? Intuitivisht, bazuar në supozimet tona më herët në lidhje me madhësinë e llojeve të të dhënave, çfarë duhet të ndodh këtu nën kapuç? Po? Saktësisht. Nëse dëshironi që kjo saktësi shumë, dhe kjo është një dreq e një shumë të saktësi - 20 numra pas presjes dhjetore. Ju nuk mund të përfaqësojnë një numër arbitrar nëse keni një Numri i bit arbitrare. Por ne nuk bëjmë. Për një float, ne vetëm kemi 32 bit. Pra, në qoftë se 32 bit mund të jetë vetëm në një permuted mënyrë - ashtu si njerëzit tanë në, fazë duart lart ose poshtë - në një numër i caktuar i mënyra, ka vetëm një numër i caktuar e numrave reale që ju mund të përfaqësojë me ato copëza. Dhe kështu që kompjuteri përfundimisht do të ketë të të fillojë prerja qoshet. Kompjuteri mund të fshehin ato detaje nga ne për një grimë të vogël të kohës. Por në qoftë se ne fillojmë poking në numrat dhe duke kërkuar më larg dhe më larg në zvarritës numrat në numrin e tërë, atëherë ne fillojmë të shohim se ajo është në fakt përafrimit Ideja e një të dhjetën. Dhe kështu kjo rezulton, tragjikisht, nuk ka një numër të pafund të numrave të ne nuk mund të përfaqësojnë pikërisht në një kompjuter, te pakten me nje fundme Numri i bit, një fundme sasia e RAM. Tani për fat të keq, kjo nganjëherë ka të vërtetë të botës pasojat. Nëse njerëzit nuk e mjaft të vlerësojmë këtë ose lloj i marrë për të dhënë faktin se kompjuteri i tyre do vetëm të bëjë atë ata tregojnë atë për të bërë dhe nuk kuptojnë këto themelor Detajet e reprezentacionit - i cili, sinqerisht, në disa gjuhë janë fshehur nga përdoruesit, ndryshe në C - disa gjëra të këqija mund të ndodhë. Dhe çfarë kam menduar ne do të bëjmë është të marrë një hap prapa. Dhe kjo është në lidhje me një tetë-minutësh Video. Ajo transmetuar disa vjet më parë, dhe kjo i jep njohuri në të vërtetë ajo që mund të shkojnë gabuar kur ju vlerësojmë këto nën- llojet e detaje në shumë e shumë të gjithë- bota reale. Nëse ne mund të zbehtë dritat për disa minuta. Kryetari 1: Ne tani kthehet për inxhinieri Fatkeqësitë në mrekulli moderne. Kompjuter - ne kemi ardhur të gjithë të pranojnë probleme shpesh frustruese që të shkojë me ta. Bugs, viruset, dhe glitches software janë çmimet vogël për të paguar për komoditet. Por në të teknologjisë së lartë dhe me shpejtësi të lartë ushtarak dhe programi hapësirë aplikacione, problemi më i vogël mund të zmadhohen në fatkeqësi. Më 4 qershor 1996, shkencëtarët të përgatitur për të të nisë një raketë pa pilot Ariane 5. Ajo mbante satelitë shkencore projektuar për të krijuar pikërisht si Fusha magnetike e Tokës bashkëvepron me erërat diellore. Raketa u ndërtua për Evropian Agjencia hapësirë ​​dhe ngriti off saj nga objektit në bregdet i French Guiana. JACK GANSSLE: Në rreth 37 sekonda në fluturimit, ata së pari vënë re diçka ishte duke shkuar gabuar. Nozzles janë swiveling në një mënyrë për ata me të vërtetë nuk duhet. Rreth 40 sekonda në fluturimin, qartë automjeti ishte në telashe. Dhe se kur ata bënë një Vendimi për ta shkatërruar atë. Siguria varg oficer, me guxim të jashtëzakonshme, presion butonin, shpërtheu raketa para se ajo mund të të bëhet një rrezik për sigurinë publike. Kryetari 1: Kjo ishte lundrim i parë i Ariane 5, dhe shkatërrimin e saj ka ndodhur për shkak të një krisje të ngulitura në softuer me raketa-së. JACK GANSSLE: Problemi në Ariane ishte se kishte një numër që kërkonte 64 bit për të shprehur. Dhe ata donin të kthyer për një numër të 16-bit. Ata supozohet se numri nuk ishte do të jetë shumë i madh, se shumica e këto shifra në 64-bit Numri ishin zero. Ata ishin gabuar. Kryetari 1: Pamundësia e një software Programi për të pranuar llojin e numri i gjeneruar nga një tjetër ishte në të rrënjës së të dështimit. Software zhvillimit kishte bërë një shumë të Pjesa e kushtueshme e teknologjisë së re. 4 Raketa Ariane kishte qenë shumë i suksesshme, aq shumë e softuerit krijuar sepse ajo ishte gjithashtu përdoret në Ariane 5. Philip Coyle: Problemi themelor ishte se Ariane 5 ishte shpejt, përshpejtuar të shpejtë. Dhe software nuk ka pasur llogariten për këtë. Kryetari 1: shkatërrimi i raketave ishte një fatkeqësi e madhe financiare, të gjitha për shkak të një gabimi minutë software. Por kjo nuk ishte hera e parë e të dhënave Problemet konvertimit kishte pllakosur moderne Teknologji raketa. JACK GANSSLE: Në vitin 1991, me fillimin i Luftës së parë të Gjirit, Patriot raketave përjetuar një lloj i ngjashëm e një problemi konvertimit numrave. Si rezultat, 28 ushtarë amerikanë ishin vrarë dhe rreth 100 të tjerë u plagosën kur Patriot, e cila ishte menduar për të mbrojtur kundër Scuds hyrëse, dështuar të zjarrit një raketë. Kryetari 1: Kur Iraku pushtoi Kuvajtin dhe Amerika nisur Desert Storm në në fillim të 1991, bateri të tjera raketash Patriot ishin të vendosur për të mbrojtur Arabinë Saudite dhe Izraeli, nga Skud Irakut Sulmet e raketave. Patriot SHBA është një medium-varg tokë-ajër sistemi i prodhuar nga Kompania Raytheon. THEODORE POSTOL: Madhësia e Patriot interceptuese në vetvete është afërsisht 20-metra të gjatë. Dhe ajo peshon rreth 2000 £. Dhe ajo mbart një kokë rakete prej rreth - Unë mendoj se është rreth 150 £. Dhe kokë rakete në vetvete është një shpërthyese të lartë e cila ka fragmente rreth tij. Zorrë e mbushje është projektuar për të vepruar si buckshot. Kryetari 1: Raketat janë kryer katër për enë dhe janë transportuar nga një gjysmë rimorkio. Philip Coyle: Patriot anti-raketë Sistemi i shkon prapa në paktën 20 vjet. Ajo ishte projektuar fillimisht si një ajër të mbrojtjes nga raketat xhiruar poshtë aeroplanë të armikut. Në Luftën e Gjirit të parë, kur se lufta erdhi së bashku, Ushtria donte të përdorin atë për të xhiruar poshtë Scuds jo, aeroplanët. Forca ajrore e Irakut nuk ishte aq shumë e një problemi. Por ushtria ishte i shqetësuar në lidhje me Scuds. Dhe kështu ata u përpoqën për të përmirësuar Patriot. Kryetari 1: ndërprejnë një raketë armik udhëtojnë në mach ishte pesë do të jetë mjaft sfiduese. Por kur Patriot u nxituan në shërbimit, ushtria nuk ishte në dijeni të një Modifikim Irakut që e bëri të tyre Scuds gati e pamundur për të goditur. THEODORE POSTOL: Çfarë ndodhi është Scuds që ishin vijnë në ishin të paqëndrueshme. Ata ishin hapa të pasigurt. Arsyeja për këtë ishte irakenët, në mënyrë që të merrni 600 kilometra nga një 300-kilometër-varg raketat, mori pesha nga mbushje përparme. Ata bënë mbushjen lehta. Pra, tani është duke u përpjekur Patriot që vijnë në Skud. Dhe shumica e kohës, dërrmuese Shumica e kohës, ajo vetëm do fluturojnë nga Skud. Kryetari 1: Pasi sistemi i Patriot Operatorët e kuptoi Patriot humbura objektivi i saj, ata shpërthyer patriotë Mbushja e mundur për të shmangur viktima në qoftë se ajo u lejohen të bjerë në tokë. THEODORE POSTOL: Kjo ishte ajo që më njerëzit e panë si fireballs mëdha në qiell dhe keqkuptuar si përgjimet i mbushjet e raketave Skud. Kryetari 1: Edhe pse në qiell natën Patriots duk të jetë sukses shkatërrimin Scuds, atje në Dhahran mund të ketë asnjë gabim saj në lidhje me performancës. Atje, sistemi Patriot-së radari humbi gjurmët e një Skud hyrëse dhe kurrë nuk nisur për shkak të një krisje software. Ajo ishte izraelitët që zbuloi i pari se më me sistemin ishte në, më i madh mospërputhja koha u bë shkak për një orë ngulitur në kompjuterin e sistemit. JACK GANSSLE: Rreth dy javë para Tragjedia në Dhahran, izraelitët raportuar të Departamentit të Mbrojtjes se sistemi ishte duke humbur kohë. Pas rreth tetë orë të rrjedhshëm, ata re se sistemi eshte bëhet dukshëm më pak të saktë. Departamenti i Mbrojtjes u përgjigj duke thënë të gjitha baterive Patriot për të mos i lënë sistemet e për një kohë të gjatë. Ata kurrë nuk tha se çfarë ishte një kohë të gjatë. Tetë orë? 10 orë? 1,000 orë? Askush nuk e dinte. Kryetari 1: bateri Patriot stacionuar në kazermat në Dhahran dhe ora meta e saj të brendshme kishin qenë në më shumë se 100 orë në natën e 25 shkurt. JACK GANSSLE: Është një kohë për të gjurmuar Saktësia e rreth një të dhjetën e një të dytë. Tani, një të dhjetën e një të dytë është një Numri interesante, sepse ajo nuk mund të jetë shprehur ne binar saktësisht, që do të thotë ajo nuk mund të shprehet saktësisht në çdo kompjuter moderne dixhitale. Është e vështirë të besohet, por përdorin këtë si një shembull. Le të marrë numrin një të tretën. Një e treta nuk mund të shprehet pikërisht në decimal. Një e treta e 0,333 është duke shkuar on for pafundësi. Nuk ka asnjë mënyrë për të bërë këtë me saktësinë absolute në decimal. Kjo është saktësisht të njëjtin lloj të problemit se ndodhur ne patriotin. Më sistemi vrapoi, keq gabim kohë u bë. Kryetari 1: Pas 100 orësh operacion, gabim në atë kohë ishte vetëm rreth një e treta e një të dytë. Por në drejtim të synimeve të dhënësit të një raketë udhëtojnë në mach pesë, kjo ka rezultuar në një gabim ndjekja e mbi 600 metra. Ajo do të jetë një gabim fatal për ushtarët në Dhahran. THEODORE POSTOL: Çfarë ka ndodhur është një Fillimin Skud u zbulua nga herët Satelitët paralajmëruese. Dhe ata e dinin se Skud u vjen në drejtim të tyre të përgjithshëm. Ata nuk e dinë se ku ai po vinte. Kryetari 1: Ajo tani ishte deri në radar komponent i sistemit Patriot mbrojtur Dhahran për të gjetur dhe për të mbajtur ndjekur nga raketat e armikut në hyrje. JACK GANSSLE: radar ishte shumë i zgjuar. Kjo në fakt do të ndjekur pozicionin e Skud dhe pastaj të parashikohet se ku ajo ndoshta do të jetë koha e ardhshme radar dërguar një impuls jashtë. Kjo u quajt porta varg. THEODORE POSTOL: Pastaj një herë Patriot vendos ka kaluar kohë të mjaftueshme për të shkuar mbështesë dhe të kontrollojë vendndodhjen e ardhshëm për ky objekt zbuluar, ajo shkon prapa. Pra, kur ai u kthye për të gabuar vend, atëherë ajo nuk sheh ndonjë objekt. Dhe ajo vendos se nuk kishte asnjë objekt, ajo ishte një zbulim të rreme, dhe bie pista. Kryetari 1: Skud hyrje zhdukur nga ekrani i radarit, dhe sekonda më vonë ai u përplas në fortesë. Skud vrarë dhe 28 ishte e fundit gjuajtur gjatë Luftës së parë të Gjirit. Tragjikisht, software updated mbërritën në Dhahran nesërmen. Metë software kishin qenë të fiksuara, mbyllur një kapitull në trazuar Historia e raketave Patriot. Patriot është në fakt një akronim për ndjekjen faza Array Ndërpres e objektivit. DAVID J Malan: Të gjithë të drejtë, kështu që një kthjellta shembull, të jetë i sigurt. Dhe për fat të mirë, këto Niveli më i ulët mete nuk janë diçka që ne do të zakonisht duhet të vlerësojmë, sigurisht jo me disa prej tonë hershme e programeve. Përkundrazi, shumica e mete ju do të Takimi do të jetë logjik në natyrë, sintaksore në natyrë ku Kodi thjesht nuk punojnë drejtë. Dhe ju e dini se goxha shpejt. Por, veçanërisht kur kemi të fundi i semestrit, ajo do të bëhen gjithnjë e më shumë një mundësi për të të vërtetë të mendojnë shumë rreth dizajnit nga programet tuaja dhe themelore përfaqësim atje, gjithashtu, e të dhënave. Për shembull, ne do të prezantoj MySQL, e cila është një bazë të dhënash motor popullarizuar që ju mund të përdorni me faqet e internetit për të të ruajtur të dhënat në fund mbrapa. Dhe ju do të duhet të fillojnë të vendosin në fundi i semestrit jo vetëm atë lloje të të dhënave përgjatë këtyre linjave për të përdorur por saktësisht se sa bit për t'u përdorur, ose nëse nuk ju duan të ruajtur datat si datat dhe herë si herë dhe gjithashtu gjëra të tilla si sa i madh nuk ju duan ID unike që të jetë për, të themi, përdoruesit në bazën e të dhënave tuaja. Në fakt, në qoftë se disa prej jush kanë pasur Facebook përgjegjëse për mjaft kohë, dhe ju e dini se si të merrni qasje të ID tuaj të përdoruesit - të cilat nganjëherë tregon deri në tuaj URL s Profile nëse ju keni zgjedhur një Mbyll për URL, ose në qoftë se ju keni API Grafiku përdoren Facebook-ut, API publikisht në dispozicion nga të cilat ju Facebook mund të kërkoni për të dhënat e papërpunuara - ju mund të shihni se çfarë ID juaj është numerike. Dhe disa vjet më parë, në thelb Facebook kishte për të ndryshuar nga përdorimi ekuivalent i ints për të përdorur gjatë gjatë, sepse me kalimin e kohës si përdorues të vijnë dhe shkojnë dhe për të krijuar shumë të llogarive dhe llogaritë e rreme, edhe ata shumë lehtë ishin në gjendje të shter diçka si një 4 miliard dollarë vlera e mundur si një int. Pra, më shumë në ato llojet e çështjeve poshtë rrugës, si edhe. Të gjithë të drejtë, kështu që u hedh. Kjo ishte pasaktësi. Një çift i njoftimeve të shpejtë. Pra, seksionet zyrtarisht fillojnë këtë që vjen E diel, e hënë, e martë. Ju do të dëgjoni me email më vonë këtë javë si për të caktimit tuaj seksion. Dhe ju do të edhe këtu në atë pikë sa për të ndryshuar seksionin tuaj nëse Orari tani ka ndryshuar ose partneri juaj Niveli rehati tani ka ndryshuar. Ndërkohë P-set një dhe një haker janë për shkak këtë të enjte me opsionin për të zgjasë afatin kohor për Specifikimet deri të premten në një mënyrë tipike. Kuptojë se përfshihet me problemin specifikimet e përcaktuara janë udhëzime se si të përdorin pajisjen CS50, të bëjë, si dhe disa mjete specifike CS50 si stil 50, të cilat mund t'ju japin me reagime dinamike në cilësia e stilit tuaj të kodit dhe gjithashtu kontrolloni 50, e cila mund të sigurojë që ju me të reagime dinamike si për të tuaj Korrektësia KODI së. Fal se ne jemi ende hekurosje një Kinks pak me kontroll 50. Disa prej shokëve tuaj që ka filluar rreth 04:00 në natën e premte, kur spekulim ngjitej kanë vënë re që atëherë një mete pak se ne jemi duke punuar përmes, dhe keqardhjet për këdo që ka përjetuar frustrimet e panevojshme. Faji është i imi. Por, ne do të ndjekë deri në CS50 diskutuar se kur është zgjidhur. Pra, një fjalë në rezultatet vetë. Pra, kjo do të jetë një javë ose dy para jush të fillojë të marrë reagime në grupe problematike sepse ju ende nuk e kanë një shoku mësimdhënies. Dhe, edhe atëherë, ne do të fillojnë të vlerësojnë Problemi C vendos para se ne të shkuar mbrapa dhe vlerësuar kështu zeroja që ju të merrni më të rëndësishme reagime më shpejt. Por në përgjithësi per planin mësimor, CS50 grupe problematike janë vlerësuar së bashku pas katër akseve - , fushëveprimi korrektësisë, dizajn, dhe stil. Fusha do të jetë një numër në mënyrë tipike mes zero dhe se pesë kap sa i copë që ju kafshonin off. Në mënyrë tipike, ju dëshironi që kjo të jetë pesë. Ju të paktën u përpoq çdo gjë. Dhe vini re kjo është një faktor multiplikativ kështu që duke bërë vetëm një pjesë të set problemi nuk është strategjia më e mirë. Ndërkohë, më e dukshme është Rëndësia e korrektësisë - vetëm programi juaj është e saktë me respektojnë të specifikimit? Kjo është peshuar qëllimisht më shumë shumë se dy akset e tjera nga një faktor i tre sepse ne njohim se zakonisht ju do të jeni për të shpenzuar një kohë shumë më tepër përpjekje për të kapur poshtë disa bugs, marrë kodin tuaj për të punuar, atëherë ju jemi indenting atë dhe duke zgjedhur Emrat e duhura ndryshueshme dhe pëlqen, e cila është në fund të tjera i spektrit te stilit. Kjo nuk do të thotë stil nuk është i rëndësishme, dhe ne do të predikojnë atë mbi Ora si në ligjërata dhe në seksione. Style referohet estetikë e kodit tuaj. A keni zgjedhur mirë me emrin variabla që janë të shkurtër, por disi përshkrues? Është kodi juaj prerë si ju kam parë në Ligjërata dhe në mënyrë konsistente me stilin e 50? Së fundi është e projektimit të drejtë atje në mes. Design është një e vështirë për të vënë një gisht në për shkak se ajo është shumë më e subjektive. Por kjo është ndoshta më e rëndësishme e tre akset në drejtim të pedagogjike vlera me kalimin e kohës dhe se kjo do të jetë mundësi shokët e mësimdhënies për ju japin me reagime cilësore. Në të vërtetë, në CS50 edhe pse ne nuk kemi këto formula dhe pikët, në fund të ditës këto janë shumë qëllimisht kova shumë të vogla - vlerat pikë në mes të zeros dhe tre dhe zero dhe pesë. Ne nuk do të përpiqet për të nxjerrë linja shumë të ashpra mes grupe probleme ose midis Nxënësit por më tepër përqendrohet aq sa ne mundemi më cilësore, shkrim i zakonshëm reagimet, qoftë shtypen ose verbale nga shokët tuaj të veçantë mësimore, ju do të merrni të dini mjaft mirë. Por në përgjithësi, ato janë peshat se akset e ndryshme do të ketë. Ndërkohë, gjithashtu, ia vlen të mbajtur në mend se ju nuk duhet të supozojmë se një tre nga pesë është një 60% dhe pra afërsisht dështuar. Tre është menduar të jetë qëllimisht lloj mes të rrugës të mirë. Nëse ju jeni duke marrë në threes fillim të semestrit, që është për qëllim të vërtetë të jetë një e mirë vendosni për të filluar. Nëse jeni duke marrë twos, panaire, nuk ka patjetër disa punë për të paguar pak më shumë vëmendje, për të përfituar e seksioneve dhe të orarit të punës. Nëse jeni duke marrë katër këmbë tre dhe pesë sosh, e madhe. Por me të vërtetë, ne shpresojmë për të parë trajektoret ndërmjet nxënësve - shumë individualizuar për student, por duke filluar semestri këtu në lloj të dy të gamë të tre, por duke i dhënë fund deri këtu në varg 4-5. Kjo është ajo që ne jemi me të vërtetë duke kërkuar për të. Dhe ne do të mbajë në mend se deltën ju shfaqin në mes të zeros jave dhe javës 12 kur unë jam duke bërë nota. Kjo nuk ka rëndësi për ne absolutisht si ju të drejtë në fillim, nëse tuaj Trajektorja është me të vërtetë lart dhe të fortë. Ndershmëria akademik - aq më lejoni të vënë në tim zëri më serioz për vetëm një moment. Pra, ky kurs ka dallimin e dërgimin studentë më shumë se çdo tjetër në histori të bordit ad, unë besoj. Ne kemi lloj numërimin e humbur në këtë Pika e sa shpesh ndodh kjo. Dhe kjo nuk është Nxënësit sepse në 50 janë më të pandershëm se tyre Shokët e klasës gjetkë. Por e kuptojnë, gjithashtu, se ne jemi shumë të mirë në zbulimin këtë gjë e tillë. Dhe qe eshte avantazh që një klasë shkenca kompjuterike ka në atë që ne dhe ne nuk mund të krahasohen të gjithë nxënësit Problemi përcakton palë-e mençur kundër çdo të tjera, jo vetëm këtë vit por të gjitha viteve të kaluara. Ne kemi aftësinë, si studentë në klasë, për të Google dhe për të gjetur kodin në faqet si Github dhe Forume diskutim. Nuk ka absolutisht zgjidhje për të CS50 p-vendos lundrues rreth atje. Por në qoftë se ju mund të gjeni ato, ne mund të gjeni ato. Dhe e gjithë kjo është shumë e automatizuar dhe të lehtë dhe të trishtuar për ne për të gjetur. Por unë dua të theksoj, gjithashtu, se Politika akademik sigurisht e ndershmëria është shumë për qëllim të jetë shumë e kundërta e atij shpirti. Në të vërtetë, këtë vit ne kemi gjëra të riformulohet në planin mësimor të jetë ky, dot dot dot, me më shumë detaje në syllabus. Por tema dominuese në kurs është me të vërtetë të jenë të arsyeshme. Ne e pranojmë se ka një të rëndësishëm Shuma e pedagogjike vlera në bashkëpunim, në një farë mase, me shokët e klasës, ku ju dy ose tre ose ju jeni më shumë duke qëndruar në një bord të bardhë whiteboarding, në mënyrë që të flasin, idetë tuaja - shkrim nga pseudokod në foto, diagramimin se çfarë duhet të jetë në qoftë se Mario ju ishit për të shkruar atë më parë në pseudokod. Çfarë duhet algorithm pangopur - si duhet të sillen në Problemi përcakton një? Dhe kështu të kuptojë se sjellja që ne inkurajojmë është shumë e më shumë përgjatë këtyre linjave. Dhe në planin mësimor, ju do të shihni një bandë e tërë e plumbave nën një Kategoria e arsyeshme dhe një jo të arsyeshme kategori që na ndihmon të ndihmojë ju përfundojë mendjen tuaj rreth ku ne do të tërheqë atë linjë. Dhe në përgjithësi, një rregull i mirë i gishtit është se në qoftë se ju jeni duke luftuar për të zgjidhur disa bug dhe shoku juaj apo shok klase është ulur tjetër për ju, ajo është arsyeshme për ju për të treguar atë apo të saj kodin tuaj dhe të thonë, hej, mund të ju ndihmojë mua të kuptoj se çfarë po ndodh gabuar këtu? Ne zakonisht nuk përqafojnë anën e kundërt. Kjo nuk është një përgjigje e saktë për tuaja mik apo shok klase këtu për të thënë, oh, vetëm shikoni në minierë dhe figura nga ajo se. Kjo është lloj i paarsyeshëm. Por, duke pasur dikë tjetër, një tjetër të trurit, një palë sy të shikojmë në ekranin tuaj apo të shikoni në kodin tuaj Dhe thuaj, a jeni te sigurte qe doni që të ketë një lak këtu? Apo jeni te sigurte qe doni se pikëpresje këtu? Ose oh, se mesazhi gabimi do të thotë kjo. Ata janë shumë të arsyeshme dhe Sjelljet e inkurajuar. Rastet për të cilat unë kam qenë duke aluduar në herët valoj poshtë për të, kur nxënësit janë natën vonë duke e bërë gjykimin e dobët Vendimet dhe emailing kodin e tyre për të dikush tjetër, ose vetëm duke thënë, këtu, kjo është në Dropbox ose Googling natën vonë. Dhe kështu që unë do të inkurajojë dhe të lypin prej jush, në qoftë se ju keni ato të pashmangshme momentet e stresit, ju jeni bumping deri kundër afatit, ju nuk keni vonë ditë pasi ajo është tashmë e premte në se pikë, email kokat e kursit ose veten direkt. Thuaj, dëgjoni, unë jam në tim thyer pikë këtu. Le të ketë një bisedë të dhe të kuptoj atë. Përdorur për web ose disa të tjera jo Sjellja e arsyeshme nuk është kurrë zgjidhje, dhe shumë prej tuaj shokët e klasës nuk janë më këtu në Kampusi shkak të asaj gjykim të dobët. Por kjo është shumë e lehtë për fund që linjë. Dhe këtu është një foto pak për të pirë e të ngrënë ju deri nga Reddit kështu që tani gjithçka do të jetë OK. Pra, një radhitje të shpejtë, atëherë, e ku ne e kemi lënë jashtë. Pra, javën e kaluar, kujtoj se ne kemi prezantuar kushtet jo në Scratch C por në këtë kohë. Dhe aty ishte një sintaksë e re, por të vërtetë nuk ka ide të reja në vetvete. Ne kishim shprehje boolean që ne të mund ose së bashku me dy vertikale bare apo dhe së bashku me dy ampersands, duke thënë se të dyja majtë dhe e drejtë duhet të jetë e vërtetë për këtë të ekzekutuar. Pastaj kemi pasur çelsin, i cili kemi shikuar në një kohë të shkurtër, por unë propozoj janë me të vërtetë vetëm sintaksë të ndryshme për arritjen e njëjtin lloj e qëllimit në qoftë se ju e dini se në avancojë çfarë raste tuaja do të jenë. Ne shikuar në sythe. Një për lak është ndoshta më e zakonshme, ose të paktën njëri që njerëzit zakonisht arrijnë për instinktivisht. Edhe pse kjo duket pak e fshehtë, ju do të shihni shumë, shumë shembuj të kësaj para se të gjatë, si ju kanë tashmë javën e kaluar. Ndërsa sythe mundeni të ngjashme të arritur të njëjtën gjë. Por në qoftë se ju doni të bëni ndonjë incrementation ose përditësimin e vlerat e ndryshueshme, ju keni për të bëjë atë më shumë se sa me dorë për lak para se të lejon. Dhe pastaj nuk ka për ta bërë, ndërsa loop, e cila na lejon që të bëjmë diçka në paktën një herë, ndërsa diçka tjetër është e vërtetë. Dhe kjo është veçanërisht i mirë për programe apo për lojëra ku ju doni të menjëhershëm të përdoruesit për diçka të paktën një herë. Dhe pastaj, nëse ai ose ajo nuk bashkëpunon, ju mund të dëshironi të bëni atë përsëri dhe përsëri. Me variablave, ndërkohë, ne kishim linja e kodit si kjo, e cila mund të të ketë dy linja. Ju mund të deklarojë një int quajtur counter, pikëpresje. Ose ju mund vetëm të deklarojnë dhe define atë, kështu që të flasin. Give it një vlerë në të njëjtën kohë. Dhe pastaj së fundi, kemi biseduar rreth funksioneve. Dhe ky ishte një shembull i mirë në Ndjenja që ajo ilustron dy lloje të funksioneve. Një është getString (), e cila, përsëri, merr një varg nga përdoruesi. Por getString () është lloj i interesante, , aq sa ne kemi përdorur atë sepse ne kemi përdorur gjithmonë atë me diçka në anën e majtë të një shenjë të barabartë. Kjo do të thotë se getString () kthen një vlerë. Ajo kthen, natyrisht, një varg. Dhe pastaj në anën e majtë, ne jemi thjesht duke kursyer atë varg në brendësi të një ndryshore të quajtur emrin. Kjo është e ndryshme, ne nje sens, nga printf shkak printf, të paktën në tonë përdorimi këtu, nuk ka kthim asgjë. Si një mënjanë, ajo bën diçka të kthimit. Ne thjesht nuk e kujdesit çfarë është ajo. Por kjo do të ketë çfarë është quhet një efekt anësor. Dhe çfarë është që në çdo efekt anësor Rasti ne kemi parë deri më tani? Çfarë do të bëni printf? Kjo kopje diçka në ekran, tregon tekst ose numra ose diçka në ekran. Dhe kjo është konsideruar thjesht një efekt anësor për shkak se ajo nuk është me të vërtetë dorëzimin atë përsëri për mua. Kjo nuk është një përgjigje brenda një kuti e zezë që unë pastaj mund të arrijnë në dhe kapje. Ajo është vetëm duke bërë atë vetë, shumë si Colton u mbyllën në këtë Kutia e zezë javën e kaluar, dhe ai disi magjike u tërhequr në bord pa mua përfshirë në të vërtetë. Kjo do të jetë një efekt anësor. Por në qoftë se unë në fakt duhej të arrijë përsëri në këtu dhe thonë, oh, këtu është string nga përdoruesit, që do të të jetë një vlerë e kthimit. Dhe deri tani ne kemi përdorur vetëm funksione që njerëzit e tjerë kanë shkruar. Por ne fakt mund të bëjë këto llojet e gjërave veten. Kështu që unë jam duke shkuar për të shkuar në CS50 aplikim përsëri. Më lejoni të ngushtë tab që ne kishte hapur një moment më parë. Dhe më lejoni të shkoj përpara dhe të të krijojë një skedar të ri. Dhe unë jam duke shkuar për të shkuar përpara dhe positive.c quajnë këtë një. Kështu që unë dua të bëj diçka me të Numrat pozitivë këtu. Kështu që unë jam duke shkuar për të shkuar përpara dhe të bëjë int - Na vjen keq - # Include. Le të mos bëjë që të njëjtën gabim si më parë. Kryesore int (i pavlefshëm), të hapur kaçurrel shtrëngoj, mbyll Brace kaçurrel. Dhe tani unë dua të bëjë të mëposhtme. Unë dua të shkruaj një program që insiston se përdoruesi i jep mua një numër i plotë pozitiv. Pra, nuk ka asnjë funksion GetPositiveInt në të bibliotekës CS50. Ka vetëm GetInt (). Por kjo është në rregull, sepse unë kam ndërton me të cilin unë mund të imponojë një kufizim pak më shumë në atë vlerë. Unë mund të bëjë diçka si kjo. Pra, n int - dhe në qoftë se ju jeni të shtypni së bashku, vetëm të kuptojë Unë jam duke shkuar për të shkuar mbrapa dhe të ndryshojë disa gjëra në një moment - kështu që është e barabartë me GetInt n int (). Dhe kjo po ndodh për të vënë nje brendësi int prej n. Dhe më lejoni të jetë një më përshkrues. Më lejoni të them diçka si unë kërkojë që ju jepni një numër i plotë pozitiv. Dakord. Pra, vetëm pak e udhëzimeve. Dhe tani çfarë mund të bëj? E pra, unë tashmë e di nga e thjeshtë ime kushtet ose degët, ashtu si unë kishte në Scratch, unë mund të them diçka doja nëse n është më pak se ose e barabartë me zero, atëherë unë dua të bëj diçka pëlqen, se nuk është pozitiv. Dhe pastaj unë mund të bëj - OK, por unë me të vërtetë doni të merrni atë int. Kështu që unë mund të shkojnë deri këtu dhe unë mund të lloj i kopjes këtë dhe porosit këtë. Dhe pastaj, OK. Pra, nëse n është më pak se ose e barabartë me zero bëni këtë. Tani, çfarë nëse përdoruesi nuk bashkëpunojnë? E pra, atëherë unë jam duke shkuar për huazoni këtë këtu. Dhe pastaj do të shkoj në këtu dhe këtu dhe këtu. Pra, kjo nuk është e qartë zgjidhje, e drejtë? Sepse nuk ka asnjë zgjidhje në horizont. Nëse unë dua të kërkojë që i jep përdoruesit mua një numër i plotë pozitiv, unë mund të në fakt të merrni int. Unë pastaj mund të shikoni për atë int. Por pastaj unë dua të kontrolloni atë përsëri dhe kontrolloni atë përsëri dhe kontrolloni atë përsëri. Pra, natyrisht, çfarë është më e mirë ndërtuar për t'u përdorur këtu? Të gjithë të drejtë, kështu që disa lloj lak. Kështu që unë jam duke shkuar për të hequr qafe i pothuajse të gjithë këtë. Dhe unë dua të të marrë këtë int së paku një herë. Kështu që unë jam duke shkuar për të thonë se të bëni - dhe unë do të kthehem për të ndërsa në një moment të vetëm - tani, çfarë bëjnë? Unë jam duke shkuar për të bërë GetInt int n merr (). OK. Pra, kjo është goxha e mirë. Dhe tani sa shpesh bëjnë Unë dua të bëj këtë? Më lejoni të vënë brenda printf e lak kështu që unë mund të kërkojë përsëri dhe përsëri, në qoftë se duhet të jetë. Dhe çfarë unë dua që kjo ndërsa kusht për të bërë? Unë dua të vazhdojmë të bëjmë këtë ndërsa ajo që është rasti? Po. N është më pak se ose e barabartë me zero. Pra, tashmë, ne kemi në mënyrë të konsiderueshme pastruar këtë kod up. Ne kemi huazuar një shumë e thjeshtë ndërtojnë - ta bërë, ndërsa loop. Unë e kam vjedhur vetëm linjat e rëndësishme të kodit që kam filluar kopjimi dhe pasting, e cila nuk ishte e mençur. Dhe kështu që tani unë jam duke shkuar për të ngjitur në të vërtetë ajo në këtu dhe vetëm të bëjë atë një herë. Dhe tani çfarë unë dua të bëj në Fundi shumë i këtij programi? Unë do të them vetëm diçka e thjeshtë pëlqen, thanks for - dhe Unë do të bëj unë për int% - backslash n, presje, dhe pastaj vihet në prizë n, pikëpresje. Dakord. Pra, le të shohim se çfarë ndodh tani kur kam drejtuar këtë program. Unë jam duke shkuar për të shkuar përpara dhe bëjnë pozitive. Damn. Një disa gabime. Pra më lejoni të lëviz mbrapa deri në të parë. Mos punoni nëpërmjet tyre prapa. Puna me anë të tyre nga lart poshtë mos ujëvarë dhe vetëm një gjë të jetë i gabuar. Deklarata implicit i GetInt function (). Po. Pra, ajo nuk ishte e mjaftueshme. Unë lloj i bëri të njëjtin gabim, por pak më ndryshe këtë herë. Unë duhet të përfshijë jo vetëm stdio.h por gjithashtu cs50.h, i cili përfshin Deklaratat e ashtuquajtur të merrni int, e cila mësojnë pajisjen, ose mëson C çfarë GetInt () është. Pra më lejoni të resave. Unë jam duke shkuar për të injorojë gabimet tjera sepse unë jam duke shkuar për të shpresojmë se ata janë deridiku i lidhur me gabimin I fiksuar tashmë. Pra më lejoni të shkoj përpara dhe të recompile me make pozitive, Enter. Damn. Tre gabime, ende. Më lejoni të lëviz deri në të parë. N papërdorura ndryshueshme. Ne nuk e kam parë këtë më parë. Dhe kjo, gjithashtu, është pak fshehtë. Ky është prodhimi i përpiluesit. Dhe ajo që linjë theksuar atje - positive.c :9:13 - është thënë, është thënë on line nëntë të positive.c, në karakterin e 13-të, 13 kolona, ​​keni bërë këtë gabim. Dhe në veçanti, është thënë me n papërdorura ndryshueshme. Pra, le të shohim - Linja nëntë. Unë jam duke përdorur n në kuptimin që Unë jam duke i dhënë asaj një vlerë. Por ajo që përpiluesi nuk më pëlqen është se unë nuk jam në dukje duke e përdorur atë. Por prisni një minutë, unë jam duke e përdorur atë. Në linjë 11, unë jam duke e përdorur atë këtu. Por në qoftë se unë lëviz poshtë më tej në positive.c :11 - kështu në linjë 11, karakteri 12, Përpiluesi është thënë mua, përdorimin e pashpallur identifikues n. Pra, do të thotë unë kam padeklaruar ajo nuk është e specifikuar si variabël me një lloj të të dhënave. Por, prit një minutë. Unë e bëri pikërisht që në përputhje nëntë. Pra, dikush është i hutuar me të vërtetë këtu. Kjo është ose mua ose përpiluesit për shkak në përputhje nëntë, përsëri, unë jam deklaruar një int n, dhe unë jam caktimin ajo kthejë vlerën e GetInt (). Pastaj unë jam duke e përdorur atë n ndryshueshme në linjë 11 dhe duke kontrolluar, nëse vlera e saj është më pak se ose e barabartë me zero. Por kjo me sa duket është e keqe dhe të thyera pse? Thuaj atë përsëri? Ah, unë duhet të deklaroj n para hyjnë në lak. Por, pse? Unë do të thotë, ne vetëm propozuar një pak më parë se kjo është në rregull për të deklaruar variablave të gjitha në një rresht dhe pastaj caktojë atyre disa vlera. Një variabël globale - le të kthehem për këtë ide në një moment të vetëm. Pse nuk ju duan mua për të vënë ajo jashtë lak? Ajo është. Saktësisht. Pra, megjithëse, disi counterintuitive, Më lejoni të përmbledh. Kur ju të deklarojë n brenda i bllokut bërë atje - posaçërisht brenda ato formatimin e teksteve kaçurrel - se n ndryshueshme ka se çfarë është Shtrirja e quajtur - palidhur me sistemin tonë të pikëve në Kursi - por ka një fushë që është kufizohet në ato formatimin e teksteve kaçurrel. Me fjalë të tjera, në mënyrë tipike në qoftë se ju të deklarojë një variabël brenda një sërë formatimin e teksteve kaçurrel, që ekziston vetëm ndryshueshme brenda këtyre formatimin e teksteve kaçurrel. Pra, nga se logjika vetëm, edhe pse Unë e kam deklaruar n në përputhje nëntë, ajo thelb zhduket nga objekti, zhduket nga kujtesa, në mënyrë që të flasin, nga koha që kam goditur vijën e 11. Sepse linjë 11, për fat të keq, është jashtë këtyre formatimin e teksteve kaçurrel. Kështu që unë për fat të keq nuk mund të rregullojmë këtë duke duke shkuar prapa në atë që unë e bëri atë më parë. Ju mund ta bëni këtë në fillim. Por ajo që ju nuk jeni tani ciklikisht duke bërë? Ju nuk jeni padyshim duke marrë int ciklikisht. Pra, ne mund të largohet nga GetInt (), dhe ne duhet të largohen nga GetInt () brenda lak, sepse kjo është ajo që ne duam të mërzit përdoruesit për përsëri dhe përsëri. Por kjo nuk mjafton për të shkuar deri në vijë, të themi, gjashtë. Int n, pikëpresje. Mos jepte një vlerë akoma sepse ju nuk keni nevojë për të vetëm ende. Por tani këtu poshtë, njoftim - kjo do të jetë një gabim shumë të lehtë. Unë nuk dua të hije e mëparshme e mia Shpallja e n. Unë dua që të përdorin n se në fakt ekziston. Dhe kështu që tani në rreshtin 10, Unë n caktojë një vlerë. Por në linjë gjashtë, unë deklaroj n. Dhe kështu që unë mund ose nuk mund të unë përdorin atë në përputhje 12 tani? Unë mund, sepse në mes të cilave kaçurrel Formatimin e teksteve është n deklaruar tani? Një deri këtu në linjë pesë. Dikujt këtu on line 14. Pra, nëse unë tani zoom out, ruani këtë file, shkoni prapa në dhe të bëjë të kandidojë pozitive, atë hartuar këtë kohë. Pra, kjo është tashmë përparim. Slash. . / Pozitive, Enter. Unë të kërkojë që ju të jepni një numër i plotë pozitiv. Negativ 1. Negativ 2. Negativ 3. Zero. Një. Dhe në sajë për një është çfarë po shtypura tani. Më lejoni të provoni diçka tjetër, nga kurioziteti. Unë jam duke u tha që input një numër të plotë. Por, çfarë nëse unë në vend të shkruani në qengjit? Kështu që ju tani shihni një të shpejtë të ndryshme - rigjykuar. Por askund në kodin tim kam shkruar rigjykuar. Pra, ku, me sa duket, kjo është rigjykuar menjëhershëm që vjen nga, do të thoni? Yeah, nga GetInt () vetë. Pra, një nga gjërat që e bën stafi CS50 per ti, të paktën në këto pak pare javë, është që ne kemi shkruar disa shuma i gabimit të kontrolluar për të siguruar se në qoftë se ju telefononi GetInt (), ju do të paktën kthehet një int nga përdoruesit. Ju nuk do të merrni një string. Ju nuk do të merrni një char. Ju nuk do të merrni diçka krejt tjetër. Ju do të merrni një int. Tani, ajo nuk mund të jetë pozitiv. Ajo nuk mund të jetë negativ. Ne bëjmë asnjë garanci rreth se. Por ne do të mërzit përdoruesit për të rigjykuar, rigjykuar, rigjykuar derisa ai ose ajo në të vërtetë bashkëpunon. Në mënyrë të ngjashme, në qoftë se unë bëj 1.23, se nuk eshte nje int. Por në qoftë se unë nuk shkruani në, të themi, 50, që më jep një vlerë që kam kërkuar. Dakord. Pra, jo i keq. Çdo pyetje mbi atë që ne kemi bërë vetëm? Takeaway kyç të qenit, të mos jetë i qartë, aq shumë loop, të cilat ne kemi parë para se edhe pse ne nuk kemi me të vërtetë përdorur atë, por çështja e fushës, ku variablat mund të jetë vetëm mund të përdoren vetëm brenda disa fushëveprimit të caktuar. Të gjithë të drejtë, më lejoni të trajtojë sugjerimin keni bërë më herët, atë të një ndryshore globale. Si një mënjanë, rezulton se një tjetër zgjidhje për këtë problem, por zakonisht një zgjidhje të gabuar ose një zgjidhje të dizajnuar dobët, është të deklarojnë ndryshore tuaj si ajo që është quajtur një ndryshore globale. Tani unë jam lloji i shkeljes definicionin tim e fushës, sepse atje janë nuk ka formatimin e teksteve kaçurrel në krye dhe në fund shumë e një skedar. Por implikimi i që është se tani në përputhje katër, n eshte nje variabli globale. Dhe, si emri nënkupton, ajo është vetëm arritshme kudo. Scratch fakt ka këto. Nëse keni përdorur një ndryshore, ju mund të kujtojnë keni pasur për të zgjedhur nëse kjo është për këtë sprite ose për të gjitha sprites. E pra, të gjitha sprites është vetëm e qartë mënyrë për të thënë globale. Po? Ah, pyetje me të vërtetë mirë. Pra, kujtojmë se në versionin e parë e kodit tim, kur unë gabimisht n deklaruara dhe të përcaktuara në përputhje nëntë - I shpallur atë si një variabël dhe unë i dha asaj një vlerë me Operatori caktimi - kjo më dha dy gabime. Një, fakti se n nuk është përdorur, dhe dy, se në linjë 11 ai thjesht nuk ishte shpallur. Pra, i pari unë nuk e bëri Adresa në atë kohë. Kjo nuk është rreptësisht një gabim të deklarojë një ndryshore, por nuk e përdorin atë. Por një nga gjërat që ne kemi bërë në CS50 aplikim, qëllimisht, pedagogjike, po ne kemi cranked up Pritjet e përpiluesit për të bërë Sigurohuni që ju jeni duke bërë gjëra jo vetëm saktë, por me të vërtetë të saktë. Sepse në qoftë se ju jeni duke deklaruar një ndryshore si n dhe kurrë nuk e përdorur atë, ose duke e përdorur atë saktë, atëherë çfarë ajo është bërë atje? Është me të vërtetë i shërben asnjë qëllimi. Dhe kjo është shumë e lehtë me kalimin e kohës, në qoftë se ju nuk konfigurosh kompjuterin tuaj në në këtë mënyrë, që të ketë vetëm kodin që ka mbetjet pak këtu, mbetjet atje. Dhe pastaj muaj më vonë ju shikoni mbrapa dhe ju jeni si, pse është kjo linjë e Kodi atje? Dhe në qoftë se nuk ka asnjë arsye të mirë, ajo nuk përfitojnë ju apo kolegët tuaj poshtë rrugës që të ketë për pengohem mbi atë, atëherë. Si një mënjanë, ku është që vijnë nga? E pra, kujtojnë se çdo herë që ne hartojmë Programi, të gjitha të këtij stuff është duke u shtypur. Pra, ne do të vijnë përsëri në këtë. Por përsëri, të bëjë është një instrument që automatizojnë procesin e përpilimit nga drejtimin përpilues aktuale quajtur tingëllimë. Kjo gjë, ne do të shohim përfundimisht, ka të bëjë me debugging me një të veçantë Programi quhet Rregullues. Kjo ka të bëjë me optimizmin Kodi - më shumë se në të ardhmen. Std = c99 - kjo thjesht do të thotë të përdornit versionin e 1999 të C. C ka qenë rreth e rrotull edhe më shumë se se, por ata bënë disa bukur Ndryshimet plus 10 vjet më parë. Dhe këtu është ato përkatëse. Ne jemi duke thënë të bëjë çdo gjë që më parë do të kishte qenë një paralajmërim një gabim parandalimin nxënësin nga hartimin. Dhe mjetet mur të bëjë që për një bandë e tërë e gjërave, jo të lidhura vetëm për të variablave. Dhe atëherë më lejoni që të lëvizni fundi i kësaj linje. Dhe kjo, gjithashtu, ne përfundimisht do të kthehen. Ky është padyshim emri i Unë jam hartimin fotografinë. Kjo kujton emrin e dosjes Unë jam kompjuteri si emër e programit tim runnable. Kjo thjesht do të thotë-lcs50 përdorni CS50 bibliotekë, dhe çdo zero dhe ato që Stafi i shkroi dhe përpiluar më herët këtë vit, të integrohen ato në programin tim. Dhe dikush e di se çfarë-lm është? Kjo është biblioteka e matematikës, e cila është vetëm atje edhe në qoftë se ju jeni nuk ka bërë ndonjë matematikë. Ajo është vetëm me kusht automatikisht për të na bërë. E pra, më lejoni të bëj një shembull tjetër këtu duke hapur një skedë të re. Dhe më lejoni të shpëtuar këtë njeri si string.c. Ajo rezulton se si ne flasim rreth të dhënave Llojet Sot, ka edhe më shumë ndodh nën kapuç se sa kemi parë deri tani. Pra më lejoni të shpejt të bëjë një program të shpejtë. Përfshi stdio.h. Dhe unë do të të shpëtuar atë. Dhe ju e dini, më lejoni të mos bëjë njëjtin gabim përsëri dhe përsëri. Përfshini cs50.h. Dhe më lejoni të shkoj përpara tani dhe të bëjë int kryesor (i pavlefshëm). Dhe tani unë thjesht dua të bëj një program që e bën këtë - të deklarojë një varg quajtur s dhe për të marrë një varg nga e perdoruesit. Dhe më lejoni të bëjë pak udhëzime këtu - ju lutem jepni një varg - kështu që përdoruesit e di se çfarë të bëni. Dhe pastaj poshtë këtu poshtë këtë, Unë dua të bëj në vijim - për int i merr zero. Përsëri, shkencëtarët kompjuter tipike të fillojë numërimi në zero, por ne mund të të bëjë që një në qoftë se ne me të vërtetë të kërkuar. Tani unë jam duke shkuar për të bërë unë është më pak se gjatësia e fijes s. Pra strlen - S-T-R-L-E-N - përsëri, kjo është konciz, sepse kjo është më e lehtë të tipit, edhe pse kjo është një pak fshehtë. Kjo është një funksion që nuk e kam përdorur para, por bën fjalë për fjalë se - kthehen tek unë një numër që përfaqëson gjatësia e vargut se përdoruesi typed. Në qoftë se ata shtypen në hello, ajo do të kthehet pesë sepse ka pesë letra në Hello. Pastaj, në çdo përsëritje e kjo loop, unë plus plus. Pra, përsëri, një standard të ndërtuar edhe në qoftë se ju nuk jeni mjaft shumë të rehatshme ose familjarizuar me atë ende. Por tani në çdo përsëritje të këtij lak, njoftim se çfarë unë jam duke shkuar për të bërë. Unë dua të shkoj përpara dhe të shtypura nga një karakter të vetëm - kështu% c backslash n në një linjë të re. Dhe pastaj, ju e dini se çfarë dua të bëj? Çfarëdo që fjala është se përdoruesi lloje në, si hello, unë dua të shtypura H-E-L-L-O, nje karakter per line. Me fjalë të tjera, unë dua të të marrë në karaktere individuale në një varg, ku deri tani ka vetëm një varg qenë një sekuencë e karaktere. Dhe kjo rezulton që unë mund të bëj s, parantezë, Unë, simboli i ngushtë, të ngushtë parantezë, pikëpresje. Dhe unë kam për të bërë një gjë më shumë. Është në një skedar të quajtur string strlen që është deklaruar. Pra, nëse unë dua të përdorni këtë funksion, Unë kam nevojë për të të treguar përpiluesit, presin që të përdorin atë. Tani më lejoni të shkoj përpara dhe të bëjë program të quajtur string. Dot, plagë, string. Ju lutem jepni një varg. Unë do të shkoj përpara dhe të shkruani atë. Hello, në të gjitha shkronja kapitale, Enter. Dhe tani vini re unë kam shtypur këtë një karakter pas tjetrit. Pra detaj i ri këtu është se një string, ne fund te ditës, mund të jenë arrihen me anë të tij individi karaktere duke e futur në shesh simbol kllapa. Dhe kjo është për shkak se një varg nën individualitet është me të vërtetë një sekuencë e karaktere. Por ajo që është i zoti për ta është në RAM kompjuterit tuaj - Mac, PC, çfarëdo qoftë ajo është - ata janë fjalë për fjalë të kthehet prapa për të mbështetur - H-E-L-L-O - në, ngjitur individuale byte në kujtesë. Pra, nëse ju doni të merrni në të tilla teta bajt, e cila në këtë lak do të jetë parantezë zero, simboli i një, dy kllapa, parantezë tre, katër kllapa - që është indeksuar zero deri në pesë - që do të shtypur nga H-E-L-L-O në linjën e vet. Tani, si një ngacmues, më lejoni të ju tregojnë llojet e gjërave që ju do të jetë përfundimisht gjendje te kuptuar, të paktën me disa të afërta kërkim. Për një, të përfshira në atë që ne sot shembuj, në qoftë se ju dëshironi, është në të vërtetë njëri prej Jailbreaks shumë para per iPhone. Jailbreaking thotë plasaritje telefonin kështu që ju mund të vërtetë e përdorin atë në një bartës të ndryshme ose instalojnë software tuaj. Dhe ju do të vëreni kjo duket plotësisht fshehtë, ka shumë të ngjarë. Por shikoni në këtë. IPhone ishte plasaritur me sa duket me një për lak, në qoftë se një kusht, një tjetër kusht, një bandë e funksioneve ne nuk kemi parë. Dhe përsëri, ju nuk do të shikim të parë ndoshta kuptuar se si kjo është duke punuar. Por çdo gjë që ne lloj i marrë për të dhënë në jetën tonë moderne në fakt ka tendencë për të reduktuar edhe për disa Prej këtyre themeleve ne kemi qenë duke kërkuar në. Më lejoni të shkojnë përpara dhe të hapur një program tjetër, holloway.c. Pra, kjo, gjithashtu, është diçka që ju nuk duhet të vërtetë e di. Edhe askush nga stafi ose unë mund të ndoshta kuptoj këtë, duke shikuar në kjo për shkak se ky ishte kodi dikujt që ishte dorëzuar për çfarë është njohur historikisht si një C turbulluara Konkursi, ku ju shkruani një program që harton dhe shkon, por është aq damn fshehtë asnjë njeri nuk mund të kuptojë se çfarë ajo do të bëjë deri në ata në të vërtetë të drejtuar atë. Pra, me të vërtetë, në qoftë se ju shikoni në këtë Kodi, unë shoh një switch. Unë shoh kryesore. Unë po të shoh këto kllapa katrore duke nënkuptuar disa lloj i një rrjet. A ka dikush doni të me mend se çfarë ky program të vërtetë bën në qoftë se unë të drejtuar Holloway? Po. OK. Well done. Pra, vetëm stafi dhe unë nuk mund ta kuptoj se çfarë bëjnë këto gjëra. Dhe tani së fundi, më lejoni të shkoj përpara dhe do të hapë një program tjetër. Kjo - përsëri, ne do të bëjnë kodin burimor në dispozicion online - kjo është vetëm lloj i bukur për të parë. Të gjithë ata bënë është goditur bar hapësirë ​​mjaft pak. Por ky është kodi i vërtetë. Pra, nëse ju mendoni se është mjaft, në qoftë se ne të vërtetë të drejtuar këtë në të shpejtë, përfundimisht të ju do të shihni se si ne mund të bëjë gjëra të tilla si kjo. Pra, ne do të largohet nga ju në këtë shënim dhe shihemi të mërkurën. [Duke luajtur muzikë] 2 Gjuha: Në CS50 ardhshëm, TFS të organizonte një kryengritje. Kryetari 3: Nuk është ai. Merrni atë! [Duke luajtur muzikë]