[Muzika] DAVID Malan: Përshëndetje, të gjithë. Kjo është supersection CS50 së. Seksionet e caktuara nuk do të të fillojë për një javë. Dhe kështu sot, unë jam këtu with-- MARIA: Maria. DAVID Malan: --to fakt hidhini një sy në problemin vendosur një, sigurisht-së javët e para të materialit, merrni ju të orientuar me CS50 IDE, pak i Linux, sistemit operativ që është në drejtimin IDE, si edhe shikojmë disa nga tranzicionit nga e para për C kryesorë deri në problemin vendosur një të tillë. Pra, pa zhurmë më tej, në problemin vendosur një, ju jeni do të jetë futur në CS50 IDE, e cila është kjo programimit web-based mjedis që ne përdorim në mënyrë për të shkruar programe. Ajo është projektuar për të duken shumë kujton një kompjuter tipik sistem drejtimin e një operative sistem i quajtur Linux. Por kjo është në të ashtuquajturin re, që do të thotë të gjithë në klasë fakt mund të ketë tij ose të saj Llogaria vet dhe e përdorin atë, si edhe. Pra, shumica prej jush ndoshta kurrë nuk kanë përdorur një mjedis Linux para ose ndoshta edhe një mjedis command line. Dhe një command line Mjedisi është i ndryshëm. Kjo është e gjitha tekstuale. Kjo është e gjitha komandat e tastierës. Dhe nuk është mousing, nuk ka ikona, pa dritare dialog, nuk ka menu. Kjo është thjesht tekst. Pra në fillim, ajo lloj të ndjehet si një hap prapa në drejtim të sofistikimit. Por ai përfundon duke qenë shumë më të fuqishme, me siguri, për një shkencëtar kompjuterik, në fund të fundit. Pra, le të marrin një vështrim. Këtu unë jam në CS50.io, nëpërmjet të cilës ju mund të hyni në CS50 IDE. Dhe ashtu si në Scratch, ka tri fusha kryesore në këtë ekran. Pra, në anën e majtë, ne kemi çfarë do të jetë shfletuesi i file. Dhe nuk është kjo dosje në të lartë, e cila është e drejtë tani bosh pasi i hoqa qafe të gjithë tim Fotografi të para supersection. Dhe kjo është ajo ku ne do të ruani C dosjet që kemi shkruar. Në krye të drejtë, ne kemi një vend ku të gjithë e kodit tonë do të marrë me shkrim. Dhe me të vërtetë, në qoftë se unë klikoni këtë Plus, kjo do të më lejoni të zgjidhni New File. Dhe këtu unë mund të filloni të shkruani kodin C ose, me të vërtetë, çdo numër të gjuhëve të tjera. Dhe pastaj në fund ku atë thotë jharvard @ ide50-- dhe tuajat do të thonë diçka të vogël different-- çfarë u quajt kjo? Dritare terminali. Po. Pra dritare terminali është e ashtuquajtura command line Ndërfaqja nëpërmjet të cilës ju mund të bashkëveprojnë me sistemin themelor operativ. Dhe tani për tani, ne jemi duke shkuar për bëjnë shumë pak përdorimin e this-- vetëm për të hartuar, për të parë në mesazhet e gabimit që ne shohim, dhe për të drejtuar programet tona. Por në fund të fundit, ne jemi duke shkuar të bëjë shumë më shumë, si edhe. Dhe ju mund të instaloni software dhe administruar hapësira e punës tuaj brenda CS50 IDE, si edhe. Por më shumë se një kohë tjetër. Pra, le të shkojnë përpara dhe të shkruajnë një program shumë i thjeshtë vetëm të kalojnë nëpër një të ngrohtë-up të hello.c, e cila është ndoshta programi thjeshtë që mund të shkruaj. Unë e kam hapur tashmë një skedë të re. Unë jam duke shkuar për të shkuar përpara dhe thonë përfshijnë io.h. standarde Pastaj int kryesor (i pavlefshëm). Dhe pastaj printf ("Hello, World" backslash n, të japin kuotën e ngushtë, kllapa të ngushtë, dhe pikëpresje. Në rregull. Deri tani vini re dritarja ime është untitled. Kështu që unë jam duke shkuar shumë shpejt për të shkuar deri tek File, Save. Dhe është e rëndësishme që Unë e quaj jo këtë "hello". Pra, një gabim shumë i zakonshëm, veçanërisht në problemin vendosur një, është që rastësisht vetëm thirrje tuaj Programi "Uji" ose "lakmitar" ose "Mario" ose "kredi" ose si. Por, ju në të vërtetë doni të bëni Sigurohuni që keni file extension sepse kjo është e vetmja mënyrë që përpiluesit dhe gjithashtu redaktor kodin e di që ju jeni në fakt shkruar kodin C. Pra më lejoni të shkoj përpara dhe klikoni Ruaj. Dhe tani, gjithashtu, çfarë CS50 IDE ka bërë për ne është se është edhe sintaksë theksuar çdo gjë. Pra, kjo është bërë çdo gjë shumë të gjallë. Dhe i tërë qëllimi i që nuk është funksional. Është vetëm për të nxjerrë sytë e mi të copa konceptualisht të ndryshme e këtij programi. Pra, le të shkojnë përpara dhe të përpilojnë këtë. Dhe unë mund të përpilojnë këtë në disa mënyra. Dhe në javë një, Mënyra e vjetër-shkollën ne e bëmë ajo ishte fjalë për fjalë në komandës line-- "hello.c tingëllimë." Dhe pastaj unë hit Enter. Dhe asgjë nuk duket të ndodhë në dritaren e terminalit. Por ajo që e bëri ndryshimin në IDE? Ku, përsëri, IDE thjesht do të thotë Integruar Zhvillimi Mjedisit. Kjo është një mënyrë e sofistikuar për të thënë ky zhvillim të integruar mjedis për zhvillimin e softuerit. Pra, çfarë ka ndryshuar në UI? Çfarë keni njoftim kjo është e ndryshme, Maria? MARIA: kam vënë re diçka nën IDE50 dosje këtu. DAVID Malan: Po. Kështu që këtu, jo vetëm a kemi "hello.c." Ne gjithashtu kemi "a.out," e cila është lloj i një emër memec për një program. Por në të vërtetë, është emri i parazgjedhur për një Programi kur ju vetëm përpilojnë kodin tuaj dhe mos tregoni përpiluesit çfarë skedar të prodhimit. Pra, nëse unë dua të drejtuar këtë, unë nevojë për të të treguar compiler-- ose më mirë, kam nevojë për të them Workspace që unë duan për të drejtuar programin e quajtur "a.out." Enter. Dhe nuk ka "hello, bota. "tani" ./ ". në fakt është i rëndësishëm. Edhe pse normalisht ne vetëm shkruani emrat e komandave, kur kjo është një program që ju keni shkrim, ju doni të thonë "./" sepse që në mënyrë eksplicite tregon Linux që ju doni të drejtuar një program të quajtur "a.out" kjo është në këtë, ku dot do të thotë këtë directory që unë jam duke në, e cila ndodh të jetë quajtur Workspace, "a.out. Sepse në qoftë se unë vetëm tha se "a.out:" Hyrë, Unë jam duke shkuar për të marrë "a.out komandë nuk gjetur "sepse computer-- sepse unë shpikur "a.out;" ajo nuk ka ardhur me computer-- nuk e di se ku mund të shikoni për të, edhe pse kjo është e drejtë nën hundë tim, kështu që të flasin. NE RREGULL. Pra, ne mund të ndryshojë kjo në të jetë "tingëllimë -o përshëndetje hello.c." Dhe në qoftë se unë hit Enter, çfarë programi është kjo do të dalje për mua? Cili është emri i file? Po, në shpinë. Kjo është e drejtë. "Përshëndetje." Pra, "hello" do të jetë Emri i programit sepse ne kemi përdorur një të ashtuquajtur command line argument, i cili është vetëm një mënyrë për të ndryshuar sjelljen e përpiluesit në fakt prodhimit një emër të veçantë skedar. Dhe me të vërtetë, në qoftë se unë zoom jashtë dhe të kërkoni këtu, tani unë kam jo vetëm "a.out" dhe "hello.c", por edhe "hello", si dhe. Kështu që tani unë mund të bëj "./hello," Enter. Dhe nuk ka "hello, bota." Por lastly-- dhe kjo tani do të jetë konventa ne i përdorim në të gjithë semestër, typically-- është që ju gjithashtu mund të vetëm të thonë "bëjë hello". Dhe me të vërtetë, kjo është thënë se është deri deri më sot, sepse ajo tashmë ekziston. Më lejoni të shkojnë përpara dhe për të hequr, me komandën rm, si "a.out" - dhe thonë "të hequr a.out rregullt skedarëve?" Kjo thjesht do të thotë, a jeni te sigurte qe doni ta fshini? Unë jam duke shkuar për të thënë po. Dhe atëherë unë jam duke shkuar për të hequr "hello", por jo "hello.c." Unë jam duke shkuar për të thënë "po" në mënyrë eksplicite, por "y" është e mjaftueshme, si edhe. Dhe tani vini re, nëse unë shkruani ls-- E cila, risjell, do të thotë list-- ajo liston të gjitha nga dosjet në dosjen time. Dhe me të vërtetë, në qoftë se unë zoom jashtë dhe të kërkoni në krye të majtë, vërteton se çfarë është në këtë dosje, edhe edhe pse ajo është etiketuar si IDE50 këtu dhe jo hapësira e punës, kjo është vetëm "hello.c." Deri tani këtu poshtë, në qoftë se unë do të "bëjë hello," Enter, tani unë shoh një komandë më të gjatë, por një komandë më të sofistikuar që po ndodh të jetë i dobishëm në javët që do të vijnë. Dhe tani unë mund të them "./hello." Pra, le të marrin një turne të shpejtë disa Linux tjetër komandat. Atëherë pse nuk kemi marrë një hap prapa dhe të shikojmë në fakt C më shumë në përgjithësi, tranzicion nga Scratch në C, dhe pastaj të përfundojë me një sy në problemin e parë vendosur në C. Të gjithë të drejtë. Kështu që unë jam duke shkuar për të shkuar përpara dhe vetëm të pastër deri Workspace time me kontroll-L vetëm për të mbajtur ekran i zoti. Por kjo nuk ka funksionale ndikojnë ndryshe. Kujtojnë se ne kemi parë disa komandave tani. Pra, ne kemi parë tingëllimë, të cilat në përgjithësi ju nuk do të duhet për të ekzekutuar dorë më. Ne vend të kësaj do të përdorim make. Por ne gjithashtu pamë ls, e cila tregon një listë e fotografi në directory time. Dhe tani pse është there-- ka dy fotografi tani, "hello" dhe "hello.c." Pse ka një yll apo një asterisk pas "hello"? Çfarë bëri që ditur, bazuar në atë që pamë në javë një? Çfarë mendoni ju? Çfarë bën të ditur ylli? MARIA: For-- programin "Hello"? DAVID Malan: "Përshëndetje *". Po. Oh, po? Oh, i ekzekutueshëm. Kjo është e drejtë. Kështu që do të thotë se "hello" është i ekzekutueshëm. Pra me të vërtetë, kjo është arsyeja pse Unë mund të bëj "./hello." Në rregull. Pra, çfarë tjetër mund të bëj këtu? E pra, ajo rezulton mundem të krijojë directories. Pra më lejoni të shkoj përpara dhe të krijojë, për shembull, një "pset1" drejtori. Dhe problemi vendosur specifikimi do të ketë të bëjë pikërisht këtë, kështu që ju nuk duhet të mbani mend sot. Por "pset1 mkdir" duket të ketë asnjë ndikim. Por përsëri, nuk ka mesazh gabimi në përgjithësi është një gjë e mirë. Pra, nëse unë lloji "ls" now-- ah, tani Unë kam një skedë të ekzekutueshme quajtur "hello", një skedar C quajtur "hello.c." Dhe pastaj Slash zvarritës, në mënyrë që të flas, do të thotë se kjo është një directory. Pra me të vërtetë, tani unë dua të hapur atë. Dhe unë nuk e klikoni dy herë mbi të si në një GUI, një mjedis grafik. Unë në vend të thonë "cd pset1." Enter. Asgjë interesante duket të ketë ndodhi me përjashtim të shpejtë time të vogël here-- kjo është mënyra Linux të kujtuar mua aty ku jam unë, kështu që ajo dosje është e hapur. Është vetëm thënë mua në mënyrë eksplicite në krahasim me grafikisht. Dhe në qoftë se unë lloji "ls", pse nuk kam parë një tjetër të shpejtë menjëherë, mendoni ju, kur unë lista përmbajtjen e pset1? MARIA: Ju ndoshta nuk kanë asgjë në atje. DAVID Malan: Po. Pra, atëherë ne nuk kemi të qartë krijuar asgjë në atje sepse unë vetëm krijuar directory. Tani, në qoftë se unë të kërkuar për të krijuar një file-- për shembull, unë mund të krijojë një skedë të re. Dhe pastaj unë mund të shkojnë në Ruaj dhe për të shpëtuar atë si, si, "mario.c", në qoftë se ju jeni duke bërë edicioni standardi i pset një. Dhe pastaj, si çdo Mac apo PC, vetëm Zgjidhni dosjen "pset1, Save. Dhe tani skedë është bosh. Por le të zoom në një herë për një të dytë. Le të bëjmë ls këtu. Tani ne e shohim "mario.c". Pra, ka një komandat disa të tjera që janë me vlerë duke mbajtur parasysh gjatë time-- qartë, apo Kontrolli-L është ajo që unë kam qenë goditur; mkdir ne kemi parë; rm ne kemi parë, po ashtu, i cili është për heqjen ose fshirjes një fotografi. Kujdes ju mund të also-- dhe në qoftë se ju shikoni në tutorial online, ju do të rm -rf është një mënyrë shumë e zakonshme për të thënë fshini një dosje që ka gjëra në të. Vetëm të jetë super, super të kujdesshëm. -rf thotë Recursively fshini çfarëdo qoftë ajo është ju jeni duke u përpjekur për të fshirë dhe me forcë fshini atë. Pra, do të thotë rekursive, nëse kjo është një dosje me një dosje me një dosje me një dosje, fshini të gjithë ata. Dhe me forcë do të thotë as nuk pyesni mua po ose jo, jam i sigurt? Pra, kjo është një mënyrë super e rrezikshme e fshirjes shumë gjëra shpejt. Por beware-- shumë shpesh bën një Intrepid Studenti aksidentalisht fshini, të themi, pset një, për shembull. MARIA: Dhe në qoftë se ata vetëm bëjnë -r, ata do për të pyesni ata për çdo skedar të vetëm. DAVID Malan: Cila është moderuar bezdisshëm. MARIA: Po. DAVID Malan: Pra, kjo është arsyeja pse kaq shumë prej nesh, vetë të përfshira, jam në zakonin e përdorimit -rf. Por kjo është e rrezikshme. Pra, ruaju blerës. Dhe pastaj mv është lloj i me emrin interesant. Pra, kjo është komanda veprim, i cili ndihet i çuditshëm pak për shkak se ju mund të vërtetë të përdorni atë për të lëvizin fotografi nga një vend në tjetrin. Për shembull, supozojmë se unë messed up. Supozoni që kam krijuar një skedë të re për pset. E kam ruajtur atë si "greedy.c." Por, mendoj unë aksidentalisht ruani atë në IDE50-- kështu që hapësira e punës në tim vetë dhe jo në pset1. Ju mund të shihni sa më shumë në krye të majtë. Ka "greedy.c." Dhe ka disa zgjidhje. Pra, një, unë mund të përdorni të super mënyrë user-friendly i vetëm zvarritur dhe duke rënë atë. Dhe kjo në fakt do të rregulluar këtë problem. Por sot, ne jemi duke u përpjekur për të parë në mënyrat më misterioze, por të fuqishme për të bërë këtë. Pra më lejoni të marrë "ls" në pset1. Dhe unë vetëm shoh "mario.c." Më lejoni të shkoj përpara dhe të bëjë "cd ..". Pra CD përsëri është drejtori ndryshim. ".." Do të thotë çfarë, pse? Herën e fundit që kam thënë "CD pset1 "për të shkuar në pset1. Pra, kur unë them "cd ..", çfarë jam unë duke bërë? Prapa. Po. Kështu ajo do të ashtuquajturës prind. Go një nivelit të lart, si daljes nga një dosje. Pra Enter. Dhe me të vërtetë, shohim se çfarë ajo e bëri. Ajo u zhvendos mua vetëm në hapësirë ​​pune në vend e në pset1, e cila është në Workspace. Dhe tani, nëse unë lloji "ls", ka një bandë e tërë e gjëra. Në ekziston "greedy.c". Kështu që tani më lejoni të përdor MV fjalë për fjalë lëvizin "greedy.c" në pset1. Dhe kështu që një shumë e Linux komandat punojnë tamam si kjo. Ata marrin asnjë argumente ose ata të marrin një të tillë Argumenti ose ata marrin dy command line argumentet dhe kështu me radhë. Dhe në këtë rast, është fjalë për fjalë duke bërë atë ajo thotë se, megjithëse succinctly-- lëvizin greedy.c në pset1. Enter. Asgjë nuk duket të ndodhë. Por në qoftë se unë bëj një ls përsëri, lakmitar është zhdukur. Dhe në qoftë se unë bëj "pset1 CD", Enter, dhe pastaj ls përsëri, tani është në vendin e duhur. Si një mënjanë, nëse për disa reason-- sidomos në qoftë se ju keni përhershme lidhjes të rrjetit ose ju jeni duke ecur rreth Kampusi me kapak tuaj laptop mbyllur dhe pastaj të hapur atë përsëri dhe workspace tuaj Duket disi nga sync, ndonjë gjë e madhe. Vetëm ringarkoni shfletuesin tuaj dritare, dhe ajo duhet të resync në mënyrë që të dorës së majtë shfletuesi i file duket tamam si dritaren e terminalit. Nuk është për t'u shqetësuar. Kur në dyshim, ringarkoni faqe, kështu që kohë sa ju keni ruajtur fotografi tashmë. NE RREGULL. Kështu mv gjithashtu mund të përdoret për të riemërtoni fotografi. Dhe le të marrin një vështrim në kjo komandë e fundit këtu. Pra suppose-- dhe kjo është super të zakonshme, gjithashtu, në fillim. Disa studentë të herë pas here të krijojë një skedar quajtur, le të say-- çfarë është tjetër? Ashtu si "WATER.C." Kështu që unë vetëm do të bërtas, për asnjë arsye, në të gjitha shkronja kapitale. Por kjo nuk është Emri i saktë për file në qoftë se vetëm për shkak se problemi ynë vendosur specifikim nuk ju them për të ruajtur kartelën si të gjitha shkronja kapitale "WATER.C." Në vend të kësaj, ne presim "water.c" në Fjala. Dhe, në fakt, kjo është sepse check50 problematike, një program që ju jeni duke shkuar të takohen në problemin vendosur atë që automatikisht teston korrektësinë e kodit tuaj do të çirrem në ju, nëse ajo nuk mund të gjeni "water.c" në të gjitha Fjala. Kështu që kam nevojë për të rregulluar këtë. Shumë mënyra të ndryshme për bëni këtë, i pari i cili do të jetë për të kontrolluar-click apo right-click emrin e file dhe vetëm të ndryshojë Rename. Krejtësisht gjobë për të bërë këtë. Por përsëri, sot, le të bëjë atë një pak njohës. Le të përdorim MV për të ndryshuar "WATER.C" për të "water.c." Kështu që ju mund të përdorë gjithashtu edhe argumentin e parë të riemërtoni atë në argumentin e dytë nëse argumenti i dytë nuk është në fakt, një dosje apo një emër directory. Në rregull. Dhe së fundi, një trick-- pak kështu që unë jam në Lista ime workspace në këtë moment. Nëse unë dua të të marrë në pset një, Unë me siguri mund të tipit "CD pset1." Por është aq i lodhshëm për të tipit "pset1" ose më emrat e file ose emrat Directory ende. Pra, shumë shpesh në Linux, çfarë ju mund të bëni është të filloni të shtypni "pandaj" dhe vetëm mërzitem, hit Tab, dhe le të kompjuter kuptoj atë për ju. Super dobishme për të marrë në atë zakon. Kapur vetëm është nëse ju keni fotografi të shumta apo dosjet duke filluar me shkronjën "p" ose "PS", ju mund të keni të shkruani një më pak para kompjuter e di se çfarë të bëni. MARIA: Ne si shkurtore. DAVID Malan: Ky vullnet ju kursejnë aq shumë kohë. Dhe gjithashtu, siç thamë në leksion, ju mund të lëvizni lart në histori, lart dhe poshtë, për të gjetur ekzekutuar kohët e fundit komandat, si edhe. Në rregull. Deri tani, le të kthejmë vëmendjen tonë prapa në një program të thjeshtë, Hello World. Pra, ne kemi hartuar këtë saktësisht. Dhe tani pse nuk kemi marrë një vështrim në llojet e të dhënave dhe pastaj kalojnë nga disa korrespondon blloqe Scratch në C. MARIA: mbresëlënës. Pra, tani që ju keni filluar shkrimin e programeve në C, ne jemi duke shkuar për të fillojnë të flasin për llojet e të dhënave dhe variablave. Kështu që disa lloje të të dhënave që ju do të duan të dinë duke filluar nga tani janë ato që janë theksuar në ngjyrë blu. Pra, ne kemi int së pari, i cili qëndron për numër të plotë. Dhe që mban integers, si ti mund të ketë guessed-- kështu që ka 1, 2, 3, dhe çdo integers tjera që ju mund të mendoni. DAVID Malan: Dhe gjithashtu negative. MARIA: Dhe gjithashtu ato negative, yep. Dhe 0. Pastaj ne kemi gjithandej, të cilat janë lundrues numra pikë. Pra, kjo është të gjitha numrat e vërtetë që kanë pikë dhjetore. Pra 5.0, 5.2, dhe edhe më shumë shifra pas presjes dhjetore, si edhe, dhe gjithashtu ato negative. Pastaj ne kemi char cila është një karakter. Kështu që unë mendoj se kemi biseduar për kjo në leksion sot. Por ne kemi letra, për example-- A, B, C-- që mund të ruhet si char. Por atëherë ne kemi shumë më shumë simbole që mund të ruhet si char. Dhe ata janë ruajtur si ASCII. Dhe pastaj ne kemi bool, të cilat janë Booleans. Dhe ata vlerësojnë të vërtetë ose False ose 1 dhe 0, respektivisht. DAVID Malan: Dhe kujtojnë se bool vjen nga biblioteka CS50. Pra, kjo nuk është ndërtuar në C, por është e super të dobishme të ketë nocionin e vërtetë dhe të rreme. Dhe, edhe pse ju mund think-- fakt fun. Një bool teknikisht ka nevojë për sa më shumë copa, me të vërtetë, për të përfaqësuar vërtetë kundrejt rreme? Sa bit mendoni ju do të duhet, maksimalisht? Yeah, vetëm një. Pra, ajo rezulton se C nuk mund të ju jap vetëm një grimë. Njësia më e vogël e masës ju mund të merrni është tetë. Pra, kjo është një kota pak se ju jeni duke përdorur një bajt të tërë, ose tetë bit, për të përfaqësuar Vërtetë ose False. Por kjo është vetëm mënyrën se si ajo është zbatuar në C nga biblioteka CS50. MARIA: Dhe pastaj ato që ne jemi nuk do të flasim për sa gjerësisht e drejtë now-- dyfishtë, kjo është për gjithandej mëdha. Gjatë gjatë dhe të shkurtër janë gjithashtu për integers. DAVID Malan: Në të vërtetë. Në edicionin e hacker e pset një, ne fakt përdorin gjatë e gjatë. Por, për edicionin e standardit, ajo nuk duhet të jetë e nevojshme. MARIA: Best. NE RREGULL. Pra operators-- ju duhet të jetë ndoshta i njohur me shumicën e tyre. Shtim, +; zbritja, -. Për shumëzimin, ne kemi *. Pra, nuk X që ne zakonisht e përdorim. Divizioni, ne kemi backslash. Dhe modulo është operatori ynë i fundit që ne do të flasim për tani. Është një operator që na lejon të marrë pjesën e mbetur të një ndarje. Pra, nëse kemi 4% 2, 4 të ndarë nga 2 është 2 me një tjetër të 0. Pra, 4% 2 është 0. 4% 3 është 1. 4% 5 është 4, si ju mund të keni mendoi. Dhe mbani mend kur duke përdorur të gjitha këto operatorët të përdorin rregullat PEMDAS. DAVID Malan: Pra, të jetë i qartë, në qoftë se ju bërë 4% 2, pse është se 0, saktësisht? MARIA: Sepse 4 ndarë nga 2 është 2 me një tjetër të 0. Pra modulo na jep se mbetur si krahasim me rezultatin e ndarjes. DAVID Malan: Dhe me të vërtetë, ajo që ne do të gjeni këtë të dobishme për të është se në disa probleme kjo nuk është domosdoshmërisht një, në qoftë se ju dëshironi që të ketë Efekti i kufizuar veten në një varg të numrave të si 0 nëpër diçka, ju mund të përdorni modulo për të përfunduar rreth më herët se si 2 miliard ose vlerën 4 miliardë që ne kemi biseduar për në leksion. MARIA: Po. Dhe madje edhe në "lakmitar" Ne mund të. DAVID Malan: Po, në Problemi vendosur një të tillë, si edhe. MARIA: Po, e bukur. DAVID Malan: aluzion mirë. MARIA: Më vjen keq. Boolean expressions-- kështu për operatorët Boolean, ne do të flasim për të gjithë nga këto që ju shihni këtu. Deri tani, ne kemi dy Shenjat e barabarta të shënuara për të barabartëve. Pra, ato janë për krahasim. Deri tani, ne kemi parë vetëm një është e barabartë me shenjë. Kjo është kur ne të caktojë një vlerë për një variabël. Pra, në qoftë se ne kemi parë int n = 5, atëherë ne kemi caktuar 5 deri n ndryshueshme. Por në qoftë se ne duam të përdorim == për krahasim, ne mund të kontrolloni nëse n == 5. Dhe në qoftë se n == 5, atëherë kjo është e vërtetë. Operatorët Pra Boolean të na lejojë, në thelb, për të vlerësuar Boolean Shprehjet në true ose false. Pra, nuk equals-- ne kemi pikëçuditëse dhe të barabartë. Pra, ne mund të kontrolloni nëse n nuk ka të barabartë 5-- aq n! = 5. Më pak se, me pak se ose e barabartë me, madhe se, më e madhe se ose e barabartë me: dhe pastaj ne kemi logjike DHE dhe logjike OSE. Dhe ata të na lejojë të vlerësuar Shprehjet shumta Boolean bashku që do të vijnë së bashku në thelb si një shprehje e tërë Boolean. Pra, nëse ne duam të gjeni një numër, të themi, që është më i madh se 5 por me pak se 15 në të njëjtën kohë, ne do të përdorim logjike dhe operatori për të parë nëse n është madh se 5 && n pak se 15. DAVID Malan: Dhe këtu, gjithashtu, është e vërtetë e lehtë herët për të aksidentalisht përdorni vetëm një simbol të vetme ose një bar vetme vertikale. Dhe shpresojmë se do të përpiluesit çirrem në ju, sepse ata në fakt kanë një kuptim shumë të ndryshme. Për ata kurioz, ata janë përdoren për operacionet bitwise, veprojnë në copa individuale. Por ju nuk doni palë prej tyre këtu. Dhe super të rëndësishme është që e para, shenja të barabartë, që është operatori barazia si krahasim me operatorin detyrës. MARIA: Dhe bar vertikale është Gjendet në mes të Fshij dhe Kthim. DAVID Malan: Po. Në një tastierë tipike amerikane. MARIA: Po. Pra, le të kërcej të drejtë në Deklaratat e kushtëzuara. Në Scratch, ju keni tashmë shihet, ndoshta, nëse deklaratat që ju lejojnë të kontrolloni nëse diçka është e vërtetë, atëherë të bëjë diçka tjetër. Kështu që ju mund të keni kërkuar për të parë nëse sprite tuaj është duke prekur disa sprite tjera ose kufirin e ekranit tuaj. Dhe pastaj ju mund të keni kërkuar për të fund të lojës apo të bëjë diçka tjetër. Pra, sintaksë për atë është "nëse (gjendja)." Pra, nëse sprite juaj është prekur diçka, atëherë nuk është brenda formatimin e teksteve kaçurrel. Pastaj ne ketë nëse-tjetër deklarata. Tjetër na lejon të bëjmë diçka nëse kusht që kontrolloni për në fillim nuk është e vërtetë. Pra, nëse Sprite është prekur Kufiri bërë këtë, tjetër të bëjë diçka tjetër. Pra, ndryshe bëni diçka tjetër. Pastaj ne kemi një shembull të shkurtër për këtë. Pra, nëse (military_time <12), ne duan të printf "Mirëmëngjes!" Tjetër ne jemi duke shkuar për printf "Mirëmbrëma!" Shembull themelor. DAVID Malan: Mirë. MARIA: Best. Deri tani ne kemi kaloni deklarata. Kaloni deklaratat në përgjithësi mund të të na lejojë të bëni një shumë të njëjtën gjë që ne vetëm biseduar në lidhje me nëse deklarata. Për shembull, tani ne kemi Forma e përgjithshme e deklaratës kaloni që na lejon të marrë një ndryshore të quajtur n dhe krahasojnë atë me një shumë të vlera të ndryshme, që këtu ne kanë quajtur constant1, constant2. Ne mund të ketë shumë më tepër. Dhe ata janë quajtur rastet. Pra, nëse ne kemi një switch statement-- dhe punon ky vetëm për integers-- ne kemi një ndryshueshme në këtë rast që është n. Nëse n është e ndryshueshme e barabartë me constant1, ne do të ekzekutojë një copë e kodit ose diçka që ne duam të bëjmë. Dhe pastaj ne do të prishej. Pra, pushim do të thotë se deklarata kaloni do të ndalojë ekzekutimin nëse n është e barabartë me constant1, dhe pastaj programi juaj do të vazhdojë. Ajo do të dalë jashtë e kaloni deklaratë dhe ajo do të të vazhdojë të bëjë diçka tjetër. Nëse, megjithatë, n nuk barabartë constant1, atëherë rasti për constant2 do të kontrollohen. Pra, nëse n është e barabartë constant2, se të tjera copë e kodit do të ekzekutohet. Dhe atëherë ajo do të thyejnë në qoftë se është e barabartë me të. Dhe pastaj ne mund të kemi also-- nuk domosdoshmërisht, though-- një rast të paracaktuar, e cila do të ndodhë në qoftë se n nuk barabartë ndonjë nga rastet që keni të listuara. Dhe në rastin e parazgjedhur, ne gjithashtu nuk kanë nevojë për një pushim detyrimisht sepse deklarata kaloni do të dinë se ajo ka nevojë për t'i dhënë fund pas default rast në qoftë se është e rastit. DAVID Malan: Por stilistikisht, ne gjithmonë e vënë atë në atje. MARIA: Po. DAVID Malan: Po. Pra, sidomos kur duke filluar nga jashtë, veçanërisht në qoftë se në mesin e atyre më pak të rehatshme, unë do të personalisht vetëm rekomandojnë rrinë me IFS dhe ifs-elses dhe nëse-tjetër-nëse-elses dhe kështu me radhë nëse vetëm sepse ata janë pak të më të drejtpërdrejtë. Kjo është një e bukur optimization, ose ndonjëherë edhe estetikisht atë bën kodi më i lexueshëm. Dhe në fakt, ndoshta mesi i semestrit ne do të shohim një problem vendosur ku vetëm ajo duket më mirë dhe më të lehtë për të lexuar për njerëzit duke përdorur një deklaratë të kaloni. Por mos u bëni merak për kapur në këtë shumë herët. MARIA: Po. Nëse ju keni një shumë e nëse deklarata, ai thjesht nuk mund të jetë shumë i lexueshëm. Ajo nuk mund të jetë shumë e shpejtë për ju për të shkuar nëpërmjet saj. Pra kaloni deklaratat mund të të jetë shumë i dobishëm, si edhe. Dhe gjithashtu, mos remember-- nuk harroni të vënë prishet në atje. DAVID Malan: Mos mbani mend këtë. MARIA: Sepse atëherë ju mund të bien përmes nga një rast në tjetrin. Pra, le të themi se rasti constant1 nuk keni nje gjendje pushim në të. Atëherë ne mund të bien nëpër constant2 brenda rast. Dhe ne nuk duam të bëjmë atë nëse ne kemi arritur tashmë rast constant1 dhe kjo është e barabartë me n. Kështu, për shembull, në qoftë se ne kemi një ndryshore n që përmban një numër të klasës, dhe ne duam të shohim se çka do të klasë is-- nëse n është e barabartë me 50, ne jemi duke shkuar për të shkruar "CS50 është Hyrje në Shkenca Kompjuterike I. " Pastaj ne jemi duke shkuar për të thyer. Dhe kjo është ajo. Nëse, megjithatë, n është e barabartë në 51, ne jemi duke shkuar për të shtypur "CS51 është Hyrje për Shkenca Kompjuterike II. " Pastaj, përsëri, ne jemi duke shkuar për të thyer. Megjithatë, nëse atëherë ne kemi vënë 124, 61, çdo numër tjetër që ju mund të mendoni për të, apo program nuk do të njohin atë. Kështu ajo do të thonë: "Më vjen keq, unë jam nuk e njohin me atë klasë. " Dhe ajo do të thyejnë. DAVID Malan: Pra, ju me të vërtetë mund të shihni if, nëse tjetër, tjetër ide këtu. Është Sintaksa vetëm të ndryshme për shprehur të njëjtën ide e saktë. MARIA: Pikërisht. Tani ne kemi operatorët tanë tresh. Operatorët Pra treshe kanë tre parts-- një kusht, diçka për të bërë në qoftë se se gjendja është e vërtetë, dhe pastaj diçka për të bërë nëse se gjendja është e rreme. Kështu që ju shihni, në thelb, Sintaksa e që këtu. Ne kemi pikëpyetje, dhe pastaj the-- çfarë ne e quajmë këtë? DAVID Malan: The zorrës së trashë. MARIA: Colon. Faleminderit. Më vjen keq. Pra, le të shohim në shembullin tonë në të shohim nëse ne mund të bëjë ndjenjën e this-- class_num == 50. Pra, këtu ne shohim operatorin tonë Boolean == që krahason class_num ndryshueshme në 50. Dyqane Pra class_num një numër të plotë. Dhe nëse këtë numër i plotë është e barabartë me 50, atëherë ne jemi duke shkuar për të ruajtur "DAVID Malan" brenda profesor string. Nëse numri i klasës nuk ka barabartë 50, "nuk DAVID Malan" do të jetë profesori. DAVID Malan: Ju faleminderit. Dhe kështu kjo duket ekuivalente me Çfarë, do të thoni ju, në shikim të parë? MARIA: Për mua kjo duket si në qoftë se-tjetër deklarata. DAVID Malan: Po. Dhe në fakt, kjo është lloj i bukur një avion i linjës, mënyrë që të flasin, për zbatimin e pikërisht logjika e nëse-tjetër por duke bërë çdo gjë në një hap. MARIA: Pikërisht. Po. Deklaratat Pra, nëse-tjetër mund të marrë një shumë hapësirë. Ata mund të jetë shumë e gjatë për diçka e thjeshtë si kjo. Pra, kjo mund të jetë shumë ngjeshur dhe shumë të bukur. Pra, tani ne jemi duke shkuar në kërkim në ekzekutimin diçka përsëri dhe përsëri, kështu kontrolluar për një kusht herë të shumta dhe pastaj duke vazhduar për të bërë diçka ndërkohë që gjendja është e vërtetë. Pra, kjo na sjell bukur në sythe kohë. Në të majtë, ne kemi lak ynë i parë, ndërsa. Kështu, ndërsa diçka është e vërtetë, të bëjë diçka përsëri dhe përsëri. Prandaj sigurohuni që të vëreni se tonë gjendja këtu është e vlefshme në krye. Ndërsa me loop-- tonë të dytë ne e quajmë që e bëjnë, ndërsa loop-- bëjmë diçka, atëherë ne kontrolloni për një gjendje. Dhe nëse atë gjendje vazhdon të jetë e vërtetë, ne të kthehemi dhe të bëjë gjë përsëri. Pra, dallimi kryesor është ku gjendja është kontrolluar për. Dhe kodi nuk mund të jetë ekzekutohet në qoftë se gjendja nuk është e vërtetë me lak, ndërsa. Ndërsa me do-kohë loop, ne kemi kodin që është ekzekutuar gjithmonë të paktën një herë. Dhe pastaj, ndërsa kushti vazhdon të jetë e vërtetë, ne mund të ktheheni mbrapsh dhe të iterate përsëri brenda. Pra, pse mendoni se ne do të përdorim a-ndërsa bëni lak mbi një lak, ndërsa? E drejtë. Pra, nëse ne duam të menjëhershëm përdorues për disa lloj input, në qoftë se ne duam të pyesni ata të shkruani emrin e tyre, ne duam që të paktën të pyesni ata një herë. Dhe nëse ata hyjnë që emri, ne nuk jemi duke shkuar për të pyesni ata përsëri sepse ne tashmë e dimë atë. Por në qoftë se ata nuk hyjnë emri i tyre, ose në qoftë se ata të hyjë diçka që është natyrisht jo një emër, ne ende duan të vazhdojnë duke u kërkuar atyre për emrin e tyre. DAVID Malan: Dhe në leksion kemi pasur një të tillë si kjo me merrni int pozitiv shembull, kur nuk ka asgjë për kontrolloni në fillim, sepse ju nuk duhet edhe marrë një int. Pra, ne duam të bëjmë this-- të marrë një int nga user-- atëherë kontrolloni atë, ndoshta, përsëri dhe përsëri dhe përsëri. MARIA: Pikërisht. Për OK loops--. Për sythe mund të na lejojë të bëjmë gati saktë të njëjtën gjë, po ashtu. Është e vërtetë e saktë të njëjtën gjë. Pra, nuk ka asgjë që ju mund të bëni me të për sythe që ju nuk do të jetë në gjendje të bëjë me sythe, ndërsa. Por për sythe mund të duket pak pak më e komplikuar sintaksore sepse ata kanë tri pjesë brenda çfarë ishte para vetëm kusht me sythe kohë. Pra, pjesa e parë që ju deti, majtas-më, ne kemi "int dwarves = 0." Pra, kjo është ajo ku ne nisja ndryshore tonë. Pastaj ne kemi një pikëpresje dhe "dwarves <7." Pra, kjo është ajo ku jashtë kusht të vërtetë është. Pra, kjo është ajo që ne do të kemi vënë vetëm në kohë loop-- "Ndërsa dwarves <7." Këtu, që shkon në mesme e jonë për lak. Pra, "dwaves <7." Dhe pastaj pjesa jonë e fundit është "dwarves ++" i cili është ku ne update ndryshore tonë. Pra, gjëja e rëndësishme të kuptojë është se ky do të kalojnë nëpër këtë për lak shtatë herë dhe ekzekutuar shtatë herë. Pra, ne kemi shtatë dwarves, dhe ata janë të gjithë do të thonë, "Unë jam këtu për t'ju ndihmuar, Snow White " sepse ata janë të gatshëm për të ndihmuar Snow White. Me ndërsa unazore, ne do të kishte bërë initialization dhe përditësimin jo brenda kusht, përsëri, por ose para ose brenda lak, ndërsa për të siguruar që we-- sepse ne gjithmonë nevojë për ato pjesë. Pra, për t'u siguruar që ne kemi ata, ne do të kemi ende shtuar ato në, jo vetëm brenda kllapave. DAVID Malan: Dhe kështu që duket like-- në leksion, për shembull, Unë pothuajse gjithmonë përdorin, si, unë dhe n dhe variablave goxha mërzitshëm. Ajo duket si ju mund të përdorni më shumë quajtur cleverly variablave, too. MARIA: Po, kjo është në fakt shumë e bukur për të përdorur variabla pak më shumë përshkruese sepse veçanërisht në qoftë se dikush tjetër është lexuar code-- tuaj ndoshta ju jeni grader ose në qoftë se ju jeni duke bashkëpunuar me somebody-- ju doni të bëni të sigurtë që ata kuptoni se çfarë jeni duke bërë. NE RREGULL. Pra, kjo është diçka shumë funky-- për lak brenda një për lak. Unë nuk e di nëse ne kemi parë këtë më parë. Me siguri jo. Por ne fakt mund të ketë this-- kështu sythe në vend të sythe. Pra, ka njeri të duan të ndoshta të ecur mua përmes Çfarë po ndodh këtu? DAVID Malan: Unë do të marrë një goditje me thikë. MARIA: Best. DAVID Malan: OK. Pra, spoiler-- ne duam të shtypura stuff kjo është në këndin e poshtëm të djathtë atje. MARIA: E drejta. Po, po. DAVID Malan: Pra, ne kemi vetëm vënë atë dalje mostër atje. Kështu që unë mund të konkludoj nga loop larti që ju jeni iterating mbi rreshtave të loop outermost, kështu që të flasin. Dhe ju jeni iterating mbi kolona me lak të brendshme. Dhe intuitive, kjo duhet të shpresojmë se ka kuptim sepse nga natyra e çdo program ne kemi parë para, printf, i cili është Funksioni ne jemi duke përdorur, në fund të fundit, ka aftësinë për të shkruar gjëra jashtë në thelb rresht pas rreshti. Si, një herë ju keni outputted një linjë e re, nuk ka nuk ka dyfishuar prapa dhe shtypjen diçka larte ne ekran, të paktën jo duke përdorur printf si kjo. Dhe kështu në këtë drejtim, kjo e bën ndjenjë se lak outermost duhet të jetë duke iu referuar rreshtat sepse për çdo dhënë rresht, ju jeni do të duan të shtypura nga xxxxx, dhe pastaj të lëvizin për në rreshtin tjetër, xxxxx. Pra rreshta të vijë më parë. Dhe pastaj brenda çdo rresht, keni shkruar kolona. Nëse ju u përpoq për të bërë atë të e kundërta, ai ndoshta nuk do të dalë si keni ndërmend. MARIA: Po. Ne thjesht nuk mund të kthehem në rreshtit të mëparshëm me printf. DAVID Malan: Dhe çfarë është interesante për chat sotme rreth fushës, në fakt, është se rresht është një int që është deklaruar në lak larti. Por vini re se ajo është ende brenda, kështu që të flasin, formatimin e teksteve kaçurrel që menjëherë të ndjekë, edhe pse kjo nuk është teknikisht brenda këtyre formatimin e teksteve kaçurrel. Pra rresht është në fushëveprimin për tërësia e copë të kodit, si brenda e jashtme për lak dhe brenda e brendshme për lak. Por nga ana tjetër, ku është kolona në fushëveprimin? Kolona e ndryshueshme? Po, vetëm në lak brenda. Dhe kjo është në rregull, sepse ne nuk hyni ajo jashtë formatimin e teksteve kaçurrel saj. Të gjithë ne bëjmë është të shtypura nga një i ri Linja në fund atje. Kështu që në fakt është në rregull. Pra, kjo ka efekt, kjo duket si, i bërë tre rreshta dhe katër shtylla. MARIA: E drejta. Pra, së pari ne do të shkojmë nëpër rresht tonë të parë. Dhe vetëm në rreshtin tonë të parë, ne bëjmë të katër kolona brenda rreshtin e parë. Pra, ne të shtypura nga katër X-it. Dhe pastaj ne mund të dalë për lak, pasi ne kemi shtypur tashmë nga katër X-it. Dhe ne të shkruar një linjë të re. Dhe pastaj ne do të shkojmë përmes njëjti proçes për dy rreshta më shumë për të bërë një total prej tre. DAVID Malan: Dhe kjo vlen të përmendet është vetëm një Objekti i shkronjave, fakti se prodhimit mostrës duket aq shumë shtatlartë, sikur ka më shumë rreshta se kolona. Por kjo është vetëm për shkak se X është shtatlartë se ajo është e gjerë. Kjo është e gjitha që po ndodh atje, plus hapësira e bardhë në mes të linjave. MARIA: E drejta. Ftohtë. DAVID Malan: Të gjithë të drejtë. Pra, një vështrim i shpejtë në problemin vendosur një, të marrë ndonjë pyetje, dhe pastaj të shtyjë? Në rregull. Pra, në një problem i ngritur, ka tre Sfidat kryesore, në fund të fundit. Por së pari, ju do të gjeni se problemi vendosur specifikim, ashtu si me shumë The psets këtë vjeshtë, do të ecin ju me anë të një të ngrohtë-up ushtrime pak, ju pikë nga një burimet pak që ju mund ose mund nuk e kanë parë tashmë. Për shembull, CS50 ka një suitë e pantallona të shkurtra, të cilat janë të shkurtër video, jo ndryshe nga kjo, por kjo janë specific-- shumë temë ndoshta pesë minuta, 10 minuta në gjatësi në sythe ose në kushte apo në algoritme ose më vonë më shumë Temat Advanced, po ashtu. Dhe ne përgjithësi embed ato në problemin përcakton në mënyrë që nxënësit kanë një burim me të cilin të shqyrtojë materialin që mund të ketë tashmë të dalë në leksion ose seksion. Por kjo mënyrë është më e përqendruar dhe më shumë në majë të gishtave të tyre. Ne gjithashtu priren të embed në problemin vendos gjërat quajtur walkthroughs. Pra, pothuajse të gjithë shembujt që bëj në leksion, në skenë ketu, ne gjithashtu kanë qëlluar në kamera në të çuar përpara një më të ngadalshme, një walkthrough më intime me mua në laptop tim e këtij kodi, rresht pas rreshti kështu që në klasë, ne do të shpesh skremuar me diçka ose dikush do të ndërkall me një përgjigjen në një pyetje. Por kjo nuk do të fundoset në për të gjithë në audiencë. Pra, ju do të gjeni kodin walkthroughs për shumicën e shembujve që ne bëjmë këtu në leksionin në mënyrë që ju të mund të ecin nëpër atë në ritmin tuaj dhe rewind shpejtë përpara ose ose kaloni krejt, në qoftë se ju dëshironi. Ka shpesh një pakice Pyetjet e ngrohtë-up që t'ju kërkojë për të zgjidhur të përforcojnë këtë material dhe sigurohuni që ju jeni të rehatshëm para ju të vazhdojë me pjesën tjetër të pset. Dhe pastaj, sigurisht, ka pset vetë. Dhe një nga gjërat ne shumë me qëllim bëni në CS50 është pothuajse çdo jointeresant ose intelektualisht jointeresant hap mekanik që ju mund të keni për të bërë është dokumentuar pothuajse gjithmonë shumë mirë. Gjatë rrjedhës së afatit, ne do të fillojnë të bëjnë pyetje më shumë retorike si mos harroni se si ta bëni këtë apo atë? Por në përgjithësi, ju do të gjeni që përcakton problemi merrni ju përmes mekanikë i diçkaje në mënyrë që të, sfidat intelektuale interesante kanë mbetur në fund të fundit ju nxënësin. Me tha se, Zamyla, për të cilin ne mbajtur referuar sot në leksion, është një prej stafit tonë kohë të gjatë Anëtari i cili gjithashtu mban walkthroughs në probleme të veçanta pset si mario dhe lakmitar, edhe pse jo të ujitur këtë vit. Dhe kjo është në ato walkthroughs se ajo shpesh ofron disa këshilla dhe truket për se si të vazhdohet, nuk ju them saktësisht se çfarë duhet të bëni, por rather-- si një kusht, në qoftë se ju will-- duke ju dhënë të paktën një çift ​​i ideve në mënyrë që ajo është e deri tek ju, në fund të fundit, për të vendosur se si t'i qasen atyre. MARIA: lloj si një nivel të lartë të kuptuarit e logjikës së asaj që ne jemi duke kërkuar që ju të bëni. DAVID Malan: Pikërisht. Dhe, në fakt, Zamyla-së walkthroughs janë të destinuara për t'iu përgjigjur shpesh Çështja e pyeti se ku nuk kam filluar, sidomos kur këto specifikime të gjata janë pak e frikshme duke pasur parasysh të gjithë tekstin dhe imazhet që kanë në to. Pra water.c, ju do të gjeni pasi ju keni përfunduar atë, në fakt është relativisht i drejtpërdrejtë. Absolutisht janë një bandë e ju do të zhurmë kokat tuaja kundër murit duke u përpjekur të kuptoj se pse ajo nuk është përpiluar apo pse ajo nuk është drejtimin në mënyrë korrekte. Por një herë ju jeni bërë me të dhe një herë ju keni kaloi disa kohë mundje me ndonjë e mete që ju mund të keni, ju do të gjeni se kjo është një program shumë të shkurtër. Ajo mund të bëhet në vetëm disa rreshta të kodit, shumica e të cilave ne kemi parë këtu në leksionin tashmë, në qoftë se ju mblidhen blloqe drejtë ndërtimit. Dhe si ne sugjerojmë këtu, ajo do të kërkoj ju të specifikojë sa minuta dikush është duke marrë një dush në kampus. Ne të specifikojë në problemin vendosur shkallën e rrjedhës së ujit në, si, një dush të ulët-rrjedhës kreu, ashtu si klipit Seinfeld pamë dje ose e kundërta të tyre. Dhe atëherë ju vetëm duhet për të bërë një grimë e matematikës, really-- aritmetike duke përdorur C për të treguar ne sa shumë, rreth, shishe të ujit është se e barabartë me nëse ne jemi marrjen e një n-minuta dush. Tani, në mario.c, kjo do të jetë një program pak më të gjatë. Ajo ende nuk do të jetë kjo e gjatë. Vetëm disa rreshta më të gjata se water.c. Por kjo do të jetë mundësi për të rikrijuar shkollën e vjetër Mario piramidale nga Super Mario Vëllezërit apo disa follow-në. Kjo nuk do të duken si prettier ose si i gjallë si atë një atje. Ne jemi vetëm duke shkuar për të përdorur hashtags pak si ne kemi këtu në ekran duke përdorur tekst ASCII. Por kjo do të përafrojë të njëjtën ide. Dhe kjo do të jetë një ushtruar që në shikim të parë Duket goxha simple-- vetëm printoni një piramidë të thjeshtë. Por ka një Karakteristikat çift këtu se janë interesante. Vini re se buzë rightmost e piramida në fakt ka gjerësi dy. Kështu që nuk ka dy të barabartë kolona lartësi, të cilat e bën atë të kërkojë pak bit e mendimit për të bërë i sigurt që ju të merrni atë saktësisht e drejtë, si në krahasim me vetëm një mënyrë të përkryer kënddrejtë linjë. Pra, kjo është pak e një rast qoshe por ndeshjet lojë aktuale. Dhe kjo është gjithashtu jo-dukshme në fillim shikim si për të shtypur hapësirë ​​të bardhë. Kështu që kur unë shoh në nivel mostër prodhimit here-- dhe kjo është gjithashtu në spec-- ajo lloj i duket si një drejtkëndësh, por një diagonal i drejtkëndësh ka qenë e copëtuar off, dhe kjo është vetëm hapësira të bardha, kështu që të flasin. Dhe kështu një pyeti shpesh Pyetja këtu është gjithmonë, mirë, si mund ta lëvizin hashtags mbi të drejtën? Ose si mund të shtypura hapësirat bosh? Dhe kjo është në fakt më e lehtë se shumica e studentëve mendojnë. E drejtë? Ju mund ta përafruar atë me sy nga vetëm goditur space bar herë apo dy herë ose tri herë. Dhe kështu, edhe pse me printf ne pothuajse gjithmonë të shtypura nga një varg ose një int ose një fjalë si "hello, bota "apo seri e fjalëve, ju gjithashtu mund të shtypura të japin kuotën, hapësira, mbyll thonjëzat. Dhe që në fakt do të japë ju një hapësirë ​​të bardhë atje. Pra, mbani në mend dhe mos overthink këtë. Ju me të vërtetë duhet të vendos rresht me rresht me rresht, jo ndryshe shembull një moment më parë, se shumë nga ata kolona duhet të jenë hapësira të bardha dhe sa prej tyre duhet të jetë hashtags. Ajo do të marrë pak kohë, por kjo është në fund të fundit një mister logjikë në terezi. MARIA: Po. Por logjika e shkon rresht me rresht do të jetë shumë i dobishëm këtu. DAVID Malan: Po. Unë mendoj kodin mostër ju gave-- edhe ndonëse kjo nuk ishte një program i plotë. Ju ende duhet int dhe kryesor dhe stdio.h pavlefshëm dhe #include, shumë gjëra nga leksion. Por blloqe ndërtimi duket të jetë atje. Dhe pastaj në fund është diçka pak më shumë algorithmic. Pra, rezulton se çdo kohë që ju shkojnë në CVS ose ndonjë dyqan dhe dikush ju duart në nivel Faturat turp apo monedha si ndryshim, kjo rezulton se ata, njerëzit, nëse janë apo jo ata e dinë atë apo jo, ndoshta janë duke përdorur atë që është quhet një algoritmi lakmitar, ku në qoftë se ju jeni borxh, të themi, $ 21 në ndryshim për shkak se për disa arsye ju keni blerë diçka shumë të lira me një faturë shumë të madhe në CVS, ajo do të jetë me të vërtetë i bezdisshëm, nëse turp ju dha 21 teke, ose, më keq akoma, një tërësi shumë e monedhave. Përkundrazi, ajo që një person i arsyeshëm është ndoshta do të bëni është që ata do për të rrëmbyer një $ 20 dhe pastaj një $ 1-faturën, dhe ju dorëzojë vetëm dy fatura në atë rast. MARIA: Pra, ata janë duke kërkuar për të minimizuar ndryshimi që ata japin përsëri tek ju. DAVID Malan: Pikërisht. Dhe të njëjtën marrëveshje me monedha, si edhe. Nëse ju jeni borxh, të themi, $ 0.50, shpresojmë se ju nuk doni 50 pennies. Ju në vend të kësaj dua dy katërtat, për shembull. Tani, kjo e bën të supozojmë se arkëtari ka mjaft e çdo emërtim që ai ose ajo mund të dëshironi të ju jap. Por ne do të ju lejojnë të marrë përsipër sa më shumë në problemin. Dhe qëllimi, në fund të fundit, është që të zbatojë në kodin e C e një algoritëm babëzitur. Pra, përdoruesi është i lejuar të shkruani në sa ndryshojë ai apo ajo është borxh me dollarë dhe cent, një lloj pikë lundrues Vlera ndoshta. Dhe pastaj ju duhet të bëni matematikë dhe kuptoj se algoritmikisht, mirë, sa monedha mund të jap ju minimalisht të ju jap saktësisht se shuma e ndryshimit. Por nuk do të jetë një disa pjesë të ndërlikuar këtu, apo jo? Ashtu si nuk ka e tërë çështje pasaktësi. MARIA: Pikërisht. Pika Pra Floating Vlerat e kanë pasaktësi. A flasim për këtë në leksionin sot? DAVID Malan: ne e bëmë Hera e fundit në leksion. Kemi biseduar për pasaktësi. Dhe ju nuk doni të mashtrojnë përdoruesit se sa të ndryshojë ai ose ajo është borxh. Dhe kështu walkthrough, në Problemi vendosur specifikimet, japin disa menduar, në fund të fundit, si për të si ju mund të zbutur ato pasaktësi gabime, potencialisht. Ajo është e shmangshme, sigurisht, për inputet ne jemi duke folur rreth. Dhe, në fakt, pennies-- ndoshta ne do të shtyjë për Zamyla, Unë mendoj se, për truket atje. Pra në fund të fundit, ju do të gjeni një progresion e problemeve të kësaj jave, e para e cila është shumë i vogël, pastaj të mesme, pastaj pak më e madhe. Por të gjithë ata e përdorin ndërtesën blloqe nga ky javës së kaluar, nga kjo supersection, Problemi vendosur specifikim ju vë në burime të panumërta. Por ende, në qoftë se në të gjitha duke luftuar, veçanërisht në mesin e atyre më pak të rehatshme pa sfond paraprak, vijnë për të orarit të punës hënën dhe të martën dhe Mërkurën dhe të enjten. Shko tek CS50 Diskutoni nëpërmjet Faqja e internetit Kursi-së, nëpërmjet të cilës ju mund të bisedojnë me stafin dhe shokët e klasës. Por në fund të fundit, unë mendoj se Këshilla më e mirë është thjesht të fillojë herët. Kjo nuk është lloji i klasës që ju Duhet filluar psets të mërkurën natë, ose më keq natën e enjte. MARIA: Këshilla ime më e mirë është që kanë filluar nga e hëna. DAVID Malan: e hënë. Pra, nëse ju nuk e keni filluar already-- nr. Por edhe në qoftë se nuk e hënë, më pas të martën. Sa më herët aq më mirë. Dhe kjo është arsyeja Sigurisht ka kaq shumë ditë me vonesë është për të ju jap një grimë e një Presioni psikologjik për të filluar më herët, por ende le të gjëra gabim kur gjërat të zgjasin më shumë se ju presim. MARIA: Dhe ju doni të bëni përdorimin e orarit të punës sa më shumë që ju mund, gjithashtu. DAVID Malan: Ndonjë pyetje? Në rregull. E pra, pse nuk kemi shtyjë këtu?