Kryetari 1: Në rregull. Mirë se vini mbrapa. Kjo është Week Dy prej CS50, dhe ne kemi deri më tani janë përdorur funksionet, por merret kryesisht ato për të dhënë. Ne kemi përdorur printf e cila ka Efekti anësor i shtypjes gjëra në ekran. Ne kemi përdorur për të marrë-int, të merrni noton. Por, çfarë nëse ju në të vërtetë doni për të krijuar Funksionet tuaj, si disa prej ju mund të tashmë kanë filluar të të bëjë për Set një problem, pse nuk kërkohet rreptësisht? E pra, le të shkojë përpara dhe sërish se Problemi i vetëm duke i kërkuar përdoruesit për emri i tyre dhe shtypjen diçka mbi ekran, por të përpiqet të faktor në dukje disa e përbashkëta e që ne kemi shihet në kodin tonë deri tani. Pra, me këtë dua të them në vijim. Unë jam duke shkuar për të shkuar përpara dhe për të krijuar një program i ri, vetëm thirrje ajo hello.c si zakonisht. Unë jam duke shkuar për të shkuar përpara dhe të jap veten përfshijnë io.h standarde në krye. Unë jam duke shkuar për të dhënë veten preemptively bibliotekë CS50 në mënyrë që Unë nuk e merrni yelled at nga përpiluesit. Dhe tani unë jam duke shkuar për të shkuar përpara dhe të deklarojë kryesore int, i pavlefshëm,. Dhe pastaj në këtu, ky është vendi ku unë dua për të filluar për të transferojmë funksionalitet për të disa funksion tjetër që unë vetë jam duke shkuar për të shkruar, por që nuk ekzistojnë aktualisht. Për shembull, supozojmë se unë të kërkuar për të shkruajnë një funksion që lejon mua që përshëndetje të shtypura nga presje, dhe atëherë emri Disa e anëtarit. Në vend se të vazhdoni të bëni printf hello,% s, nuk do të jetë mirë në qoftë se kishte vetëm një funksion të quajtur nuk printf por emri print? Pra, me fjalë të tjera, unë dua të jenë në gjendje të shkruaj një program që bën pak diçka si kjo. Së pari, unë jam duke shkuar për të thënë printf tuaj emrin, duke bërë që përdoruesit të jepni emrin e tij apo të saj, dhe atëherë unë jam i do të përdorni S njohura string për të deklarojë një varg. Më jepni një variabël të tipit string, quajnë atë S, dhe të ruajtur në atë rezultojë i quajtur merrni string. Por tani, në javët e fundit, unë do të ketë disi tediously bërë hello,% s / n. Dhe në fjalë të tjera, ne kemi parë këtë Shembulli i një bandë e herë, dhe kjo është një Shembulli i parëndësishëm, sepse nuk është vetëm një linjë e kodit kështu që nuk është me të vërtetë një punë e madhe për të mbajtur të shtypni përsëri. Por mendoj se kjo linjë e kodit në të vërtetë janë duke u bërë një barrë, dhe kjo nuk është një linjë e kodit, por kjo është 10 rreshta të kodit nja dy javë nga tani, dhe ju jeni vetëm duke u lodhur nga kopjimi dhe pasting ose retyping atë kodin e njëjtë. Nuk do të jetë e bukur në vend të bërë printf hello,% s dhe kështu me radhë, nuk do të jetë mirë në qoftë se ka pasur vetëm një funksion të quajtur emrin print që merr një argument - me fjalë të tjera, ajo merr input - dhe pastaj pikëpresje. Kështu që funksionojnë, nuk do të jetë mirë në qoftë se ka ekzistuar? Atëherë unë nuk do të duhet të shqetësohen për printf çfarë është, çfarë% s dhe të gjithë Këto kompleksitetin që janë jo të gjithë se interesante. Ato janë të dobishme. Pra emri shtypura, për fat të keq, nuk ishte shpikur disa 40 vjet më parë plus. Askush nuk ka menduar për të shkruar atë. Por kjo është bukuria e të paturit e një gjuhë programimi, ashtu si në Scratch ju mund të përcaktojë blloqe me porosi, në mënyrë në C dhe më çdo gjuhë, ju mund të përcaktojë funksionalitetin tuaj, mund të ju define funksionet tuaja. Pra, edhe pse ne të merrni kryesore nga automatikisht për të lira, ne mund të deklarojë funksionet tona. Kështu që unë jam duke shkuar për të bërë disa dhomë deri këtu deri të lartë, dhe unë jam duke shkuar për të deklaruar mia Funksioni vet që do të shikojmë një pak e çuditshme në fillim, por ne do të vijnë Mbrapsht në këtë para se të gjatë. Unë jam duke shkuar për të thënë zbrazëti, duke treguar këtë funksion e bën diçka, ka një efekt anësor, por ajo nuk kthehet diçka për mua në të njëjtën mënyrë që të merrni int apo merrni vargun vetë bën. Dhe unë jam duke shkuar për të dhënë këtë një funksion Emri i emrit të shtypura, dhe unë jam duke shkuar për të specifikojë se ky djalë është duke shkuar për të marrë një varg, dhe unë jam duke shkuar për të thirrur që Emri string. Unë mund të telefononi atë gjë që unë dua, por unë doni kodi im të jetë i vetë-dokumentuar. Me fjalë të tjera, në qoftë se ndonjëri prej jush ishin të të hapur këtë skedar dhe lexoni atë, ju mund të lloj të konkludoj nga emri që input çfarë roli është menduar për të luajtur. Dhe tani më poshtë që, unë jam duke shkuar për të hapur kaçurrel shtrëngoj shtrëngoj kaçurrel dhe të mbyllura, dhe kështu njoftim unë kam ndjekur të njëjtën model për linjat katër deri në shtatë si Unë kam qenë i ndjekur për një javë të mirë plus tani midis, të themi, linjat e nëntë dhe 14 e cila compose kryesore. Me fjalë të tjera, të shtypura emrin është një tjetër funksion. Tani, përpiluesit nuk do të dinë për të thirrur këtë gjë automatikisht sepse unë fjalë për fjalë vetëm shpikur atë, por ajo do të dinë ende për të thirrur kryesore automatikisht, dhe pastaj sigurisht në Linja 13, unë jam duke e quajtur funksionin tim. Dhe për shkak se unë kam deklaruar se funksioni deri on line katër para kryesore, kjo do të mësojë përpilues çfarë, quote mbyll thonjëzat, "print emri" do të thotë dhe çfarë duhet të bëjë. Kështu që unë jam lloj i dhënë asaj një zakon të ri bllokuar në kontekstin e, të themi, para. Pra, në këtu, unë mund të vënë shumë e zakonshme që ose model i përsëritur i kodit Unë mbaj shkrim në klasë, printf Përshëndetje% s,% s / n ", - Çfarë dua të vënë këtu? S? Kështu që unë dua të vënë emrin në këtë kontekst. Pra njoftim një grimë e një dikotomie këtu. Sepse unë jam deklaruar funksionin tim dhe unë kam thirrur disi arbitrare ajo shtypura emrin, dhe për shkak se unë kam specifikuar në kllapa se kjo funksion merr një argument, llojin e cila eshte nje varg - kështu është një fjalë apo fraza ose diçka të tillë - dhe Unë jam duke e quajtur atë emër argumenti, që do të thotë vetëm një ndryshore që është në Shtrirja, kështu që të flasin, është emri. S ekziston vetëm në mes të dy çfarë formatimin e teksteve kaçurrel, sigurisht? Pra me të vërtetë, ashtu si me anë të linjës 10 14, kështu që vetëm donte të hënën nuk mund të përdorë S, por ajo që unë mund të bëni është të kalojë S në emër të shtypura. Print Emri ndodh pikërisht kështu për të dhënë atë një pseudonim, një sinonim, një pseudonim, duke e quajtur atë emër, dhe tani duke e përdorur atë në këtë linjë. Pra, tani më lejoni të shpëtuar këtë, zoom out. Më lejoni të shkojnë përpara dhe të bëjë përshëndetje. Duket e mirë. A nuk të nxjerr nga goja ndonjë gabim. . / Përshëndetje Enter. Çfarë është emri im? David. Dhe përshëndetje David. Pra, jo të gjithë se emocionuese, por thjesht mendoj se tani. Ju tani keni atë përbërës të njëjtë siç bëmë në Scratch për të bëjë funksionet tona. Por ka pak e një Gotcha. Le të supozojmë se unë nuk e kishte menduar me të vërtetë këtë përmes dhe unë në fakt pa me të vërtetë duke menduar për këtë shkroi se funksioni këtu poshtë. Ndihet krejtësisht e arsyeshme. Në Scratch nuk ka asnjë nocion i lokacion në Scripts tuaj. Ju mund të vënë atë deri këtu, një deri këtu, një deri këtu, dhe kjo mund të fillojnë të shikojmë një çrregullt pak, nëse ju nuk e bëni vë atë mjeshtërisht, por kjo nuk e bën rëndësi se ku fizikisht Scripts ishin në ekran. Për fat të keq në C - dhe kjo është ndryshe nga gjuhë si Java dhe Python dhe të tjerët që ju mund të jenë të njohur me të - për fat të keq në C, e bën me qëllim rëndësi, sepse shikojnë se çfarë është do të ndodhë tani. Funksioni i parazgjedhur që po ndodh për të ekzekutuar është, natyrisht, kryesore. Main do të thërrasë emrin e shtypura në Linja tetë, por për fat të keq, përpilues nuk do e di edhe atë emër print ekziston derisa ajo merr në linjë 11, e cila për fat të keq është do të jetë tepër vonë. Pra, le të bëjë të bëjë përshëndetje. Dhe tani Damn, dy gabime të gjenerohet. Pra, tani më lejoni të lëviz deri në shumë të së pari, si ne gjithmonë duhet të bëni, dhe vëreni se ajo është yelling në mua, "Deklarata implicit i funksionit print emrin ". Pra, ne kemi parë para se ky mesazh, Deklarata e funksionit të nënkuptuar. Kur kemi parë atë lloj të gabimit? Kur unë nuk përfshijnë një bibliotekë. Nëse kam harruar cs50.h dhe unë do të merrni yelled at për të marrë string ose të merrni int. Por në këtë rast, ky funksion të shtypura emri nuk është në një bibliotekë, e drejtë? Kjo është fjalë për fjalë në këtë dosje, kështu që çfarë është me të vërtetë problemi? Well për fat të keq në C, ajo ju merr fjalë për fjalë aq tepër se në qoftë se ju doni një funksion të quajtur emrin shtypura për ekzistojnë, ju ose duhet të zbatojë se funksioni në krye të tuaj Kodi në mënyrë që ajo është e arritshme për të ulur funksionet, por sinqerisht, që bëhet lerosur shumë shpejt. Personalisht, kam vënë si kryesor parë sepse atëherë është shumë e qartë se çfarë kjo Programi bën në shikim të parë. Dhe plus, ju mund të merrni në këndin e pazakontë raste ku në qoftë se x dëshiron të thërrasë y, por y mund të telefononi x, ju vetëm fizikisht nuk mund të vërtetë vënë një mbi tjetrin. Por kjo rezulton në C, ne mund të zgjidhë këtë shumë thjesht. Unë jam duke shkuar për të vënë një grimë të vogël të hapësirës deri këtu, dhe unë jam vetëm duke shkuar për të preemptively, megjithëse disi redundantly, do të mësojmë përpilues se ekziston një funksion e quajti të shtypura, ajo merr një varg, dhe unë jam duke shkuar për të thirrur ajo emër pikëpresje. Pra, kjo tani në përputhje katër, të cilat ne nuk kanë parë më parë, është një deklaratë e emrit të shtypura funksion, por kjo është vetëm një premtim që ky funksion do të përfundimisht të definohen, përfundimisht të zbatohet. Këtë tani unë mund të largohet vetëm për shkak tani kjo është përkufizimi, , zbatimi lloj milje e fundit e zbatimit të këtij funksion të veçantë. Pra, sinqerisht kjo është budalla, është i bezdisshëm, por kjo është rruga C është, dhe kjo është sepse ajo ju merr shumë fjalë për fjalë dhe, si një kompjuter sinqerisht duhet, vetëm që e bën pikërisht atë që ju them që ajo të bëni, dhe kështu që renditja është e rëndësishme. Pra, mbani në mend se dhe përsëri, të fillojë të njoftim përsëritjen e modeleve. Shanset janë që ju do të, në qoftë se ju nuk e keni tashmë, të fillojnë të ndeshen me mesazhet si kjo që në shikim të parë duket krejtësisht të fshehtë, por nëse ju filloni të shikoni për këto fjalë kyçe si "Deklarata implicit", përmend një funksion në këtë rast - dhe sinqerisht, ju ndonjëherë të merrni edhe një gjelbër pak simbol karrota që ju tregon se ku Çështja ndoshta është - ju mund të fillojnë të punojnë në rrugën tuaj nëpërmjet mesazhe ende fshehtën gabim. Ndonjë pyetje në shkrimin tuaj Funksioni vet në këtë mënyrë? Le të bëjmë diçka që është një pak më shumë bindëse. Në vend se vetëm të bëjë diçka që ka një efekt anësor i shtypjes, më lejoni të shkoj përpara dhe për të shpëtuar një skedë të re, dhe ne do e quajnë këtë positive.c, edhe pse kjo është do të jetë një pak më ndryshe kundrejt herë të fundit. Dhe kjo kohë, unë dua të ri-zbatuar Shembulli positive.C herë të fundit, e cila është i detyruar përdoruesit për të dhënë mua një numër i plotë pozitiv. Por unë kam për të përdorur të merrni kohë int fundit. A nuk do të kishte qenë mirë nëse ka pasur një funksion të quajtur merrni int pozitiv se unë vetëm mund të transferojmë këtë copë e funksionimit të? Pra, diferenca këtu është që ne do të zbatojë merrni int pozitiv, por ndryshe nga Emri print cila kishte një efekt anësor - ajo nuk kthehen diçka për mua si një numër ose një varg - merrni int pozitiv, sigurisht, do të kthehen, me shpresë, një int pozitiv. Pra, le ta bëjmë këtë. Përfshi cs50.h, Përfshi standarde io.h. INT zbrazëti kryesore. Dhe tani këtu, unë jam duke shkuar për të shkuar përpara dhe le të thonë se int, e quajti atë n, është e barabartë me merrni int pozitiv. Dhe ashtu si të merrni int tashmë ekziston sepse stafi shkroi atë, unë jam duke shkuar të supozojmë për momentin që merrni int pozitiv ekziston, dhe tani unë jam duke shkuar të shkojnë përpara dhe të thonë printf, thanks for% I / n ", n. Deri tani, nëse unë përpilojnë këtë program, çfarë do të ndodhë në terminalin e mia dritare në pjesën e poshtme të ekranit? Unë jam duke shkuar për të marrë që ndoshta gabim njëjtë si më parë. Pra, le të provoni këtë. Bëni pozitive. Dhe përsëri, deklarata implicit e funksionit, të merrni int pozitiv. Pra, ne mund të zgjidhim këtë në disa mënyra. Unë jam duke shkuar për të mbajtur atë të thjeshtë dhe vetëm vënë deklaratën time deri këtu dhe për të marrë int pozitive. Unë kam nevojë për nënshkrimin ashtuquajturën. Nënshkrimi i referohet vetëm për estetikën e Linja e parë e programit. Pra, çfarë duhet të merrni pozitiv int kthimi? Pra, një int. Unë do të thotë në mënyrë ideale, ajo do të kthehet diçka si int pozitive, por që nuk ekziston. Ne nuk kemi parë se në mesin e të dhënave tona llojet, kështu që ne duhet të merren me Fakti që ne kemi shumë pak Llojet e të dhënave për të punuar me të. Por ne mund të kthehet një int dhe vetëm besim se ajo do të jetë pozitiv. Ajo do të quhet merrni int pozitiv. Dhe tani si në lidhje me argumentet e veta? A do të marrë ndonjë kontribut? A ka nevojë për ndonjë kontribut? Pra, ajo nuk ka nevojë të dini në çdo gjë paraprakisht. Get string nuk, të merrni int nuk ka. Printf bën - ajo duhet të ketë disa input kaluar në atë - dhe emri print nevojiten disa të dhëna, por të marrë int pozitiv nuk bën. Kështu që unë jam duke shkuar për të në mënyrë eksplicite tregoni boshllëkun përpilues. Void është mungesa e çdo gjë tjetër. Pra, do të thotë pavlefshme asgjë nuk është duke shkuar brenda prej këtyre kllapa, pikëpresje. Dhe tani në fund të dosjes sime - dhe lloj përsëri, unë jam vetëm duke i anal këtu vënien kryesore në krye, e cila është praktikë e mirë, sepse këtë mënyrë, Çdoherë ju apo dikush tjetër hap dosjen tuaj, funksionalitetit është e drejtë atje. Ju mund të zhyten në diskutim nga një katror. Deri tani unë jam duke shkuar për të kopjuar këtë, merrni zbrazëti pozitiv int, por unë nuk jam duke shkuar për të goditur një pikëpresje tani. Unë jam duke shkuar për të hapur formatimin e teksteve kaçurrel, dhe tani kam nevojë për të marrë hua disa ide nga e hëna. Pra, siç ju kujtohet, ne bëmë diçka të të doja të bëjë të mëposhtme, ndërsa diçka ishte e vërtetë. Dhe çfarë kam bërë? Kam bërë diçka si jap mua një numër i plotë pozitiv, pak e një të shpejtë. Unë mund të përdorni ndonjë fjalë të dua. Dhe pastaj kam përdorur për çfarë? Int n barabartë merrni int, nuk ka argumente për të. Dhe vini re ndryshimin. Kur ju telefononi një funksion, kur ju përdorni një funksion, ju nuk e vënë në zbrazëti. Ju vetëm të bëjë që kur shpallja e një funksion, duke mësuar se çfarë përpilues ajo duhet të presin. Pra, ju nuk keni nevojë për të vënë pavlefshëm atje veten. Dhe tani çfarë ishte gjendja ime? E pra, n nuk është e barabartë me pozitiv, por kjo është vetëm pseudo-kod. Pra, si mund ta shprehin këtë më të pastër? Pra, me pak se ose e barabartë me zero. Pra, përsëri, vëreni që ju mund të bëni më pak se ose e barabartë me. Edhe pse kjo është dy ndara simbolet, ju mund ta bëni atë në keyboard tuaj si të tilla. Por ka ende një bug që I dehur për herë të fundit shumë. Unë kam për të deklaruar - saktësisht. Unë kam për të deklaruar n jashtë i lak. Kështu që kam nevojë për të vënë n deri këtu, dhe unë nuk bëj dëshironi të ri-deklarojë atë në këtu mos kam marrë një ndryshore të ri. Unë vetëm dua që të caktojë një vlerë këtu. Dhe tani unë nuk jam duke bërë mjaft këtu. Më lejoni të marrë përpara veten time dhe të pretendojë unë jam bërë. Bëni pozitive, dhe tani ka një gabim të ri. Kontrolli arrin fundin e jo-funksion i pavlefshëm. Pra mesazhi të ri gabimi, por në qoftë se ju lloj i Tease përveç secilën prej fjalëve, ajo ndoshta aludon në atë që është e gabuar. Kontroll. Kontrolli do të thotë vetëm të rendit e operacioneve në një program. Kompjuteri është në kontroll dhe diçka shkoi keq. Pra, ajo arrin në fund të një jo-funksion i pavlefshëm. Çfarë funksioni është ajo me sa duket duke iu referuar? Çfarë funksioni është jo-pavlefshme? Pra merrni int pozitiv, dhe pak konfuze në atë pus, kjo është lloj i pavlefshëm. Ajo ka një specifikim të pavlefshme për vet argumente, por prodhimi i saj do të jetë i tipit n. Pra, fjala është në të majtë ashtuquajturat lloj kthimi. Fjala në brendësi këtu është zero ose më shumë argumente se një funksion merr. Pra, çfarë duhet të bëj? Në këtë moment në kodin tim, të linjës 21 ku prompt keq është tani, unë kanë një int pozitiv brenda i variablit quajtur n. Si mund ta jap Kthehu tek Qendrori? Fjalë për fjalë. Kthehu pikëpresje n. Pra, ashtu si Colton kthye një copë letër me një përgjigje për mua nga rënie se copë letër në zi pak kuti në tryezë, për të bërë që në Kodi, ju shkruani vetëm fjalë për fjalë, të kthehen n, dhe kjo është sikur ishin Colton dorëzimin mua diçka mbrapa fizike. Në këtë rast, ajo që po ndodh është marrë int pozitive do të ktheni çfarë është me sa duket një pozitiv integer të kujt? Ku bën që vlera deri në fund? Që përfundon deri në këtë variabël, n, dhe pastaj ne të vazhdojë me linjë të nëntë. Pra, me fjalë të tjera, në mënyrë që të Operacionet, ky program fillon ekzekutimin, dhe përpilues realizon, oh, ju doni biblioteka? Më lejoni të shkoj kapje çfarëdo që është brenda. Oh, ju doni bibliotekën standarde io? Më lejoni të shkoj kapje çfarëdo që është brenda. Çfarë do të përpiluesit thonë për veten kur ajo godet katër linjë? Oh, ju ka premtuar të zbatojë funksion të quajtur merrni pozitive, por ne do të kthehemi tek që më vonë, diçka përgjatë këtyre linjave. Int kryesore void thjesht do të thotë këtu është guxim e programit tim. Linja e shtatë është vetëm një mbajtëse kaçurrel. Line tetë është thënë në të majtë, të japë mua 32 bit për një numër të plotë, e quajti atë n. Në anën e djathtë, kjo është duke thënë se të merrni int pozitiv. Pauzojmë se historia, sepse tani Unë nuk e mbani lëviz kursorin e mia poshtë. Kursori im tani shkon poshtë këtu, sepse tani të marrë int pozitive ekzekuton. Int n është deklaruar. Të bëjë të mëposhtme. Printf jep mua një numër i plotë pozitiv. Merrni një int nga përdoruesit, duke ruajtur atë në n, dhe ndoshta e bëjnë këtë përsëri dhe përsëri. Loop Kjo do të thotë se ky kod mund ekzekutojë lart dhe poshtë si kjo përsëri dhe përsëri, por kur përdoruesi në fund bashkëpunon dhe më jep një pozitiv int, kam goditur vijën e 21, në të cilën pikë numër është dorëzuar përsëri, dhe të cilat një Unë duhet të theksoj tani? Nëntë. Kontrolli, kështu që të flasin, kthehet të vijë nëntë. Kjo është linjë që është tani në krye. Pra, kjo është ajo që është duke ndodhur gjithë këtë herë nën kapuç, por kur ne kemi përdorur funksione si printf ose edhe të merrni varg që dikush tjetër shkroi për ju, kontrolli ishte duke u dorëzuar Linja off për të dikujt tjetër kod nga rresht pas rreshti. Është thjesht ne nuk mund të shohim atë dhe ne nuk mund të vërtetë të përshkruaj atë në këtë Programi për shkak se ajo është në disa të tjera fotografi në hard drive unbeknownst për ne. Pra, le të vërtetë të përpilojnë dhe drejtuar këtë tani. Bëni pozitive. Hartimi, kjo është progres. . / Pozitive. Më jepni një numër i plotë pozitiv. Le të jetë e vështirë. Negativ 1. Zero. Le t'i jepte 50. Faleminderit për 50, dhe kështu kontrollin tani është kthyer. Ndonjë pyetje, atëherë, në atë? Po? [Padëgjueshme]. Thuaj përsëri. Oh, pyetje e mirë. Kështu që ju mund të vëreni një paralelizëm këtu se Unë jam natyrë e prerjes në një qoshe. Në linjë 12, unë jam duke thënë se, të merrni int pozitiv kthen një int, por që të njëjtën logjikë, ajo tani qëndron për arsye se në Linja gjashtë, unë jam duke thënë se kthimi kryesore një int, por ajo që ne kurrë nuk e kanë kishte në ndonjë nga programet tona? Ne kurrë nuk kemi pasur përmendje e ky kthim fjala kyç. Pra, rezulton se në C, të paktën versionin e saj se ne jemi duke përdorur bërë në vitin 1999, teknikisht, kjo është ndodh për ju automatikisht. Çdoherë ju të zbatojë një program dhe ju të zbatojë një funksion të quajtur kryesor, se funksioni do të kthehen nga zero parazgjedhur në qoftë se ju nuk themi ndryshe, dhe zero është vetëm një konventë. Bota kthehet zero në këtë mënyrë tregon se të gjitha është e mirë, efektivisht na lënë me katër miliard më gjëra të mundshme që mund të shkojnë gabuar kështu që nëse ne të kthehemi një, që mund të ditur një kod që do të thotë kjo gjë shkoi keq. Ne mund të kthehen dy, që do të thotë kjo gjë tjetër shkoi keq. Ne mund të kthehen katër miliardë, e cila kjo do të thotë gjë tjetër shkoi keq. Dhe në qoftë se ju tani mendoni rreth tuaj PC apo Mac, ju mund të kujtojnë se ndonjëherë ju merrni mesazhet e gabimit fshehta nga software që ju jeni duke përdorur, dhe ndonjëherë ajo ka një të njeriut përshkrimi miqësore, por ka shpesh një kod ose një numër në ekran? Nëse kjo nuk vjen në mendje, vetëm të mbajë një sy jashtë për të. Kjo është ajo që zakonisht këto Kodet janë duke iu referuar për të. Ata janë të përfshira në Microsoft Word dhe programe të tjera kështu që nëse ju të paraqesë një raport bug me kompani, ju mund të tregoni atyre, oh, unë kam numrin gabim 45. Dhe disa programues kthyer në kompani mund të shohim se deri në e tij ose të saj Kodi dhe të thonë, oh, kjo është për shkak se unë e bëra ky bug dhe kjo është arsyeja pse përdoruesit mori këtë mesazh. Por sinqerisht, kjo është vetëm pak vëmendjen dhe një pak i lodhshëm për të konkludohet që, të paktën në tonë Programet e para, kështu që ne kemi qenë mosdhënien atë. Por e gjithë kjo kohë çdo njëri prej tuaj Funksionet kryesore ka fshehurazi kishte këtë Linja shtuar automatikisht për ju nga , përpiluesit vetëm duke konventë për të ju kursejnë disa kohë. [Padëgjueshme]. Ju nuk keni nevojë për të përfshirë atë në kryesore. Kjo është në rregull. Ju keni nevojë për të përfshirë atë në qoftë se ju keni qenë implementimit të një funksioni të tillë. Përndryshe banesë funksioni jashtë nuk do të punojë. Por në kryesore, nuk është e nevojshme. Në një ose dy javë, ne do të fillojnë marrjen e në atë zakon dikur ne duam të fillojë duke nënkuptuar gabime. Pyetja me të vërtetë mirë. Pushim në mënyrë të shpejtë verbale të përmendim se kjo e premte, ne nuk do të ketë drekë në vetvete, por ne do të ketë një darkë me disa prej studentëve dhe stafit. Nëse ju dëshironi të bashkohet me ne, të ndjehen të lirë për të shkuar në cs50.net/rsvp. 06:00 kjo e premte. Hapësirë ​​është, si gjithmonë, të kufizuar, por ne do të vazhdojnë të bëjnë këto në një gati baza javore në qoftë se hapësira shkon jashtë këtë javë. Pra cliffhanger që ne e kemi lënë jashtë në E hëna ishte që vargjet mund të vërtetë të indeksohen në, i cili thjesht do të thotë që ju mund të marrë në karakter pare, Karakteri i dytë, karakteri i tretë dhe kështu me radhë, sepse ju mund të në mënyrë efektive të mendojnë për një varg, si hello, si në këtë rast pesë Letrat e brenda kutive. Dhe ju mund të merrni në secilën prej atyre Kutitë me atë që bëri sintaksë ne prezantuar të hënën? Këto kllapa katrore në tastierën tuaj. Kjo do të thotë thjesht shkoni për vendndodhjen zero. Ne të fillojë numërimi në zero, kështu kllapa zero h, nënkupton një parantezë nënkupton E, dhe kështu me radhë. Dhe kështu të gjithë kohën kur ne kemi qenë përdorur vargje dhe shtypni në "hello" dhe "Bota" dhe gjëra të tjera në ekran, ajo është ruajtur në kuti si kjo. Dhe të marrë një guess. Çfarë do të përfaqësojë çdo kuti fizikisht brenda e kompjuterit tuaj? [Padëgjueshme]. Na vjen keq? Personazhet. Pra, një karakter, sigurisht në rast vargjesh, dhe nje karakter eshte ashtu tetë bit ose një bajt. Pra, ju ndoshta jeni të paktën paksa njohur me faktin se juaj Kompjuteri ka memorie. Ajo ka dy lloje të memories të paktën. Njëra është hard disk ku ju ruani sende të përhershme, dhe kjo është zakonisht e madhe kështu që ju mund të ketë filma dhe muzikë dhe kështu me radhë. Atëherë ju keni një lloj tjetër të kujtesës quhet RAM, R-A-M, Random Access Memory, dhe kjo është lloj i kujtesës që është përdorur kur kompjuteri juaj është i running por nëse ju humbni fuqinë ose partneri juaj bateri vdes, çdo gjë që është ruajtur në RAM zhduket nëse ju humbni fuqinë krejt për shkak se ajo nuk është këmbëngulës. Ju zakonisht kanë, këto ditë, një fuzhnjë e tij, dy koncerte, ndoshta më shumë. Dhe kokë e RAM është se ajo është shumë më e shumë, shumë më shpejt se hard disqe apo edhe shteti të ngurta drives këto ditë, por kjo është zakonisht më të shtrenjtë në mënyrë ju keni më pak nga ajo. Pra, biseda e sotme me të vërtetë i referohet për RAM, se tipi i kujtesës që ekziston vetëm derisa nuk ka pushtet duke u ushqyer në kompjuterin tuaj. Pra, kur ju shkruani në H-E-L-L-O, Shkruani në keyboard, H është duke shkuar në një bajt RAM, E po shkon në tjetër bajt RAM, siç është Pjesa tjetër e fjalës. Pra, kujtojnë se çfarë ne ishim në gjendje për të bërë për herë të fundit ishte kjo. Më lejoni të shkojnë përpara dhe të hapur dosjen se kemi quajtur string.c, dhe kujtojnë se ajo dukej pak diçka si kjo. Më lejoni të vërtetë rrokulliset prapa dhe të ndryshojë ajo që saktësisht se çfarë ajo dukej si, Gjatësia e string s. Pra, shikoni në programin këtu. Ne përfshijnë bibliotekën CS50 kështu që ne mund të përdorni të merrni string. Ne përfshijnë io.h standarde kështu që ne mund të përdorni printf. Pse ne të përfshijë string? Kjo ishte e re të hënën. Pra, ne kemi kërkuar gjatësinë string. Rr leng. Njerëzit vendosi vjet më parë, le të vetëm të jetë i ngjeshur. Në vend të duke e quajtur atë "Gjatësia string," le të thërrasë atë "str leng" dhe le shifër që bota jashtë, dhe kështu që është ajo që ne të merrni qasje në me string. Kjo është e njohur. Kjo është e njohur. Kjo është e njohur. Kjo është pak e re. Në linjë 22 - dhe ne do të kthehem për këtë, por tani për tani e di - dhe ju do të vetëm e di këtë nga të paturit e lexoni dokumentacionin ose nëse ju tashmë e dinte C - marrë string nganjëherë mund të vidhos deri. Në qoftë se përdoruesi është me të vërtetë kundërshtues ose bashkëpunon dhe ai ose ajo thjesht nuk shkruani asgjë në tastierë ose Llojet aq shumë në tastierë që ajo pushton kujtesën e kompjuterit, në teori, marrë string mund të kthehen diçka tjetër përveç një varg i karaktereve. Kjo mund të kthehen një vlerë të veçantë të quajtur NULL në të gjitha shkronja kapitale, N-U-L-L, dhe kjo është vetëm një e ashtuquajtura vlera Sentinel. Kjo është një vlerë të veçantë që nënkupton diçka e keqe ka ndodhur në këtë rast. Kjo është mungesa e një varg. Pra null unë jam duke kontrolluar për thjesht në mënyrë që, histori të gjatë të shkurtër, str leng dhe funksionet tjera që vijnë me C, nëse ata presin një varg, por ju të kalojë ato mungesa e një varg, në qoftë se ju të kalojë ata NULL, kompjuter ose programin thjesht do të rrëzimit të plotë. Ajo do të ul receptorin e telefonit. Ai do të vjellë disa mesazh gabimi. Gjëra të këqija do të ndodhë. Pra, edhe pse kjo është ende jo të mirë-përcaktuar - kjo do të bëjë më shumë kuptim në një javë apo dy - në linjë 22, kjo është vetëm një Shembulli i kontrolluar vetë mbrojtëse gabimit vetëm në rast se një herë nga një milion diçka shkon keq, në paktën programi im nuk do të rrëzimit. Pra, nëse s nuk është e barabartë me diçka të keqe, Unë kam këtë për lak, dhe kjo ishte ku kemi pasur që të tjera copë e re e sintaksës. Unë kam një për lak iterating nga zero në deri në gjatësinë e S. Dhe atëherë këtu, unë kam qenë një shtypje nga s parantezë unë, por pse nuk kam përdorni% C të gjitha një e papritur në vend të% s edhe pse s është një varg? Kjo është një karakter, e drejtë? S është një varg, por diçka s parantezë, s grupim I ku I eshte zero ose nje ose dy, qe eshte nje individ karakter në vargun, dhe kështu për se, printf nevojë të jenë të informuar se kjo është me të vërtetë një karakter të presin. Dhe pastaj kujtohet, çfarë bëri kjo Programi bëjë në fakt? Shtypur atë në kolona. Po, pikërisht. Ajo vetëm shtypur fjalën që unë lloji në kolona, ​​një karakter per line. Pra, le të shohim këtë përsëri. Pra, të bëjë string. Përpiluar OK. . / String. Më lejoni të shkruani në H-E-L-L-O, Enter, dhe Unë me të vërtetë të merrni atë, një për çdo rresht. Pra më lejoni të bëjë një optimization këtu. Nëse ju mendoni rreth saj, sidomos nëse ju keni programuar më parë, ka ndoshta një joefikasiteti në linjë 24. Me fjalë të tjera, ajo nuk është domosdoshmërisht dizajnit më të mirë. Drejtpërdrejtë, të paktën një herë ju mbani mend se çfarë str leng është, por kjo është bërë diçka memece potencialisht. Çfarë mund që të jetë? [Padëgjueshme]. Saktësisht. Është kontrolluar për gjatësinë e S çdo herë të vetme edhe pse H-E-L-L-O është gjithmonë shkon të jetë pesë karaktere. Çdo herë përmes këtij loop, pesë nuk po ndryshon. Unë mund të jetë i rrisim, por çfarë është gjatësia e S në çdo përsëritje të këtij lak? Kjo është pesë, kjo është pesë, kjo është pesë, dhe por unë jam duke kërkuar megjithatë kjo pyetje përsëri dhe përsëri dhe përsëri. Tani sinqerisht, kompjuteri është aq damn të shpejtë, askush nuk do të vini re një Dallimi në këtë rast, por këto lloj i vendimeve të projektimit mund të varfra fillojë të shtoni deri në qoftë se vetë përpiluesit nuk përpiqet për të rregulluar këtë për ju e cila ajo zakonisht nuk do, në pakten ne te aparatit. Kështu që unë jam duke shkuar për të bërë këtë. Unë jam duke shkuar për të shtuar një presje pas ndryshueshme ime e parë, unë. Unë jam duke shkuar për të dhënë vetes një tjetër të ndryshueshme, duke e quajtur atë n, vetëm duke Konventa për numrat, dhe atëherë unë jam i do të caktojë n vlerën e vargut Gjatësia e s. Dhe atëherë unë jam duke shkuar për të ndryshuar gjendja ime të jetë ajo? Unë jam duke shkuar për të ndryshuar gjendjen time për të, ndërsa unë është më pak se n. Deri tani, sa herë jam unë kontrolluar gjatësinë e S? Pasi, por kjo është në rregull për të kontrolluar i kundër n përsëri dhe përsëri, sepse tani ata Vlerat nuk janë në të vërtetë ndryshuar. Tani për tani, vetëm e di se kurdo që ju thërrasë një funksion, ka një grimë e lart, jo të mjaftueshme për të ju dekurajojnë me të vërtetë nga ndonjëherë duke përdorur funksionet, por sigurisht kur ka një linjë e kodit si se - dhe linjat do të merrni më interesant para se të gjatë - ku ka një mundësi për të menduar, në qoftë se unë shkruani këtë kod, sa herë do të ekzekutojë? Ju do të fillojnë të shohin kalimin e kohës Performanca e programeve tuaja mund me të vërtetë të ndryshojë. Në fakt, një e problemit përcakton ne kemi bërë në vitet e kaluara përfshin implementimin, si ju mund të kujtojnë nga Javën zero, një spell checker, por një spell checker që është projektuar për të mbështetur një fjalor prej 150,000 plus Fjalët që ne të ju jap djema. Ju do të duhet të shkruani kodin që ngarkesa ato fjalë në RAM, kështu që në Kutitë ashtu siç e pamë në ekran një moment më parë, dhe pastaj aq shpejt sa ju mund, ju duhet të jetë në gjendje për t'iu përgjigjur një Pyetja e formularit, kjo është fjala misspelled? A është kjo fjalë e shkruar gabimisht? A është kjo fjalë e shkruar gabimisht? Dhe në diçka si se ajo që ne kemi bërë në vitet e kaluara është kthyer atë në, megjithëse në një zgjedhë-në bazë fakultative, një konkurrenca në terezi, ku studentët të cilët përdorin RAM pak dhe më pak koha, ciklet më pak CPU, deri në fund bubbling deri në krye të pak Bordi udhëheqës apo të rangut që ne kemi vënë në homepage Kursin si ne kemi bërë në vitet e kaluara. Pra, përsëri, krejtësisht fakultative, por kjo flet për mundësitë e projektimit që janë përpara sapo kemi filluar ndërtuar në majë disa nga këto blloqet themelore të ndërtimit. Pra më lejoni të shkoj përsëri në këtë diagram për vetëm një moment dhe të zbulojë pak diçka më shumë. Kjo me të vërtetë është një varg, dhe ne kemi marrë Avantazhi i një disa bibliotekave, io.h standard i cili ka - Printf. Printf, ndër të tjera. cs50.h, e cila ka marrë int dhe për të marrë string dhe kështu me radhë, string, e cila Leng kishte rr. Por kjo rezulton se ka ende një tjetër. Sinqerisht, nuk ka shumë dhe shumë e kokë fotografi që deklarojnë funksione për bibliotekat, por kjo është ctype.h në fakt do të jetë disi dobishme për shkak se unë jam duke shkuar të shkojnë përpara dhe të zbatojë një program tjetër këtu. Më lejoni të shkojnë përpara dhe të hapë diçka Kam shkruar paraprakisht quajtur capitalize.c, dhe le të marrin një sy se si kjo funksionon. Vini re se unë jam duke përdorur, në këtë version e saj, tre fotografi të njohur. Vini re se në pajtim 18, unë jam duke marrë një vijë të tekstit. Njoftim në linjë 21, unë jam duke pretenduar se kodi në vazhdim do të germa s, çfarëdo përdoruesi typed në, dhe se si unë jam duke bërë se? E pra, unë jam duke marrë - mësim i mësuar nga koha e fundit - Unë jam I dhe shpallja e N dhe iterating mbi karaktereve në string. Dhe pastaj çfarë është ky bllok i Kodi në linjë 24 nëpërmjet 27 bërë në kushtet e laik? Vogle letër mbrapa. Saktësisht. Nëse unë s parantezë - kështu që nëse i-th karakter i S, e cila eshte nje specifik char në varg, është më i madh se ose të barabartë tek me të vogla a dhe - kujtojnë se ampersand dyfishtë ditur dhe - dhe karakterit të njëjtë, s parantezë unë, është më pak se ose e barabartë me të vogla Z, që do të thotë se është një b një ose nje ose nje c ose dot, dot, dot, ose nje Z, që do të thotë kjo është vogle. Çfarë unë dua të bëj në këtë rast? E pra, unë mund ta bëjë këtë disi cryptically, por le të bezdis kjo veç e veç. Unë jam duke shkuar për të thirrur printf, printime% c sepse unë dua të ribotim këtë karakter në ekran. Unë jam duke shkuar për të marrë pastaj s parantezë Unë, i-th personazh s, dhe atëherë pse Unë jam duke bërë këtë mashtrim të vogël këtu, me të vogla një një minus kapitalit? Çfarë është se do të japë mua, duke folur në përgjithësi? [Padëgjueshme]. Saktësisht. Unë vërtetë nuk e mbani mend - ajo ishte 65 për kapital A. Unë vërtetë nuk mbani mend se çfarë është me të vogla një, por nuk ka rëndësi. Kompjuter e di. Pra, duke thënë, me të vogla një minus Kapitali A, kjo është e pazakontë që të jetë zbritur një char nga një tjetër, por çfarë janë chars nën kapuç? Ata janë vetëm numra. Pra, çfarëdo që ato numra janë, le të kujtojmë atë kompjuter sesa mua njerëzore. Pra, me të vogla një kapital minus Një është do të më jepni një ndryshim. Ajo ndodh të jetë 32, dhe që do të jetë rasti për b vogle dhe kapitalit B dhe kështu me radhë. Ajo qëndron konsistente, fatmirësisht. Kështu që unë jam në thelb duke thënë, të marrë letër me të vogla, zbres off se Dallimi standarde, dhe se Unë EFEKTIV Ndryshimet s parantezë nga me të vogla për të, natyrisht, uppercase, tim të vërtetë pa pasur nevojë të mendoj rreth ose harroni, çfarë ishin ato Numrat kemi biseduar rreth, kur tetë Vullnetarët doli në skenë? Tani ndërkohë, në tjetër, në qoftë se ajo nuk është një me shkronja të vogla, siç përcaktohet nga linjë 24, vetëm print it out. Unë vetëm dua të prek karaktere që ishin në fakt fillimisht Fjala. Pra, le të shohim këtë. Bëni germa. Përpiluar, OK. . / Germa. Dhe më lejoni të shkruani në H-E-L-L-O në Fjala, Enter. Dhe vëreni se ajo është konvertuar në uppercase. Më lejoni të bëjë këtë përsëri me a fjalë ndryshëm. Si rreth D-A-V-I-D me D pare kapitalizohen si një emër në mënyrë tipike është? Enter. Vini re se kjo është ende e saktë. Ajo vetëm outputted se pandryshuar pari D anë tjetër që ndërtojnë. Pra, mbani në mend, atëherë, një disa gjëra këtu. Një, në qoftë se ju ndonjëherë të dëshironi të kontrolloni dy kushtet në të njëjtën kohë, ju mund të dhe ata të së bashku si ne parashikoi. Ju mund të krahasoni karaktere në këtë mënyrë dhe trajtuar në mënyrë efektive si karaktere Numrat, por sinqerisht, kjo është aq damn mistershëm Unë kurrë nuk jam duke shkuar për të kujtuar si për të dalë me këtë nga zeroja pa arsyetim nëpërmjet saj për mjaft pak kohe. A nuk do të kishte qenë mirë nëse dikush atje shkroi një funksion të quajtur është ulët që mund të përgjigjem për mua vërtetë apo false, ky karakter është vogle? Well fatmirësisht, kushdo që shkroi ctype.h bëri pikërisht këtë. Më lejoni të shkojnë deri këtu dhe të shtoni ctype për c Llojet, dhe tani më lejoni të shkoj poshtë këtu dhe rishkruaj këtë linjë si më poshtë. Pra, në qoftë se ajo është quajtur është më e ulët, unë pretendojnë, s parantezë unë, atëherë unë jam duke shkuar për të fshirë këto dy linja krejt. Deri tani dikush tjetër, unë jam duke shpresuar, shkroi një funksion të quajtur është më e ulët, dhe kjo rezulton se ata bënë dhe ata deklaruan ajo brenda ctype.h. Dhe tani unë jam duke shkuar për të lënë linjë 27 vetëm, unë jam duke shkuar për të lënë linjë 31 vetëm, por njoftim sa kam forcuar kodin tim. Ajo është tani më të pastër. Është pak e vështirë për të parë përmes sepse tani funksioni, për më tepër, është kështu quajtur mrekullisht vetëm ajo bën atë që thotë. Deri tani unë jam duke shkuar për të shpëtuar këtë. Unë jam duke shkuar për të zoom out. Dhe ashtu si në Scratch ju mund të ketë Booleans, vlerat Boolean vërtetë apo rreme, kjo është pikërisht ajo që është ulur në mënyrë efektive të kthimit. Më lejoni të përpiluar. Më lejoni të ri-drejtuar. Dhe tani le të provojmë atë përsëri, H-E-L-L-O, Futni. Kjo është goxha e mirë. Dhe të provoni përsëri, sigurohuni që unë nuk vidhos diçka. Kjo është kapitalizuar si. Por kjo nuk është mjaft e mirë, sepse Gjë tjetër që unë kurrë nuk jam duke shkuar për të kujtohet nëse kam punuar nëpërmjet saj të vërtetë kujdes në, të themi, letër është kjo linjë mallkuar. Nuk do të jetë mirë në qoftë se ka pasur një funksion të quajtur të sipërme? E pra ajo rezulton atje eshte ne ctype.h si edhe. Unë jam duke shkuar për të shkuar përpara dhe shkruani - më lejoni të sjell përsëri atë linjë. Në vend të kësaj këtu, më lejoni të shkoj përpara dhe thonë, zëvendësim për% c të Rezultati i quajtur këtë funksion për të sipërme mbi karakterin i-es. Dhe tani vini re kjo është duke u pak më i balancuar. Unë duhet të mbajnë gjurmët e sa kllapat e kam hap dhe u mbyll. Deri tani ajo është edhe më të pastër. Tani ky program po bëhet më mirë dhe projektuar mirë ndoshta për shkak se ajo është shumë, shumë më i lexueshëm, por ajo nuk le të korrigjuar. Bëni germa. . / Germa. H-E-L-L-O. Le të drejtuar atë përsëri, D-A-V-I-D. OK, kështu që ne jemi ende në formë mjaft të mirë. Por tani për të sipërme. Unë propozoj që ka një më shumë sqimë ne mund të bëjë që do të jetë të vërtetë e bukur, që mund të vërtetë të shtrënguar up këtë kod dhe të vërtetë të na japë pesë nga pesë për dizajn, për shembull. Çfarë do të jetë mirë për të hequr qafe? E pra, shikoni se si mallkim të gjatë në këtë bllok të Kodi është thjesht për të bërë diçka të thjeshtë. Tani si një mënjanë, si ju mund të keni shihet në seksionin super kjo e kaluar fundjavë, ju nuk keni nevojë në mënyrë rigoroze formatimin e teksteve kaçurrel kur ju vetëm duhet një linjë e kodit, edhe pse kemi propozuar mbajtja e tyre në mënyrë që kjo e bën shumë më të më i qartë, si në Scratch U-formë blloqe, çfarë ka brenda e degës. Por nuk do të jetë mirë në qoftë se të sipërme, kur duke pasur parasysh kontributin e tij, ai u kthye në uppercase nëse ajo nuk është, dhe çfarë do të jetë e mrekullueshme në rastin e kundërt, nëse kjo është tashmë uppercase? Vetëm të kalojë atë nëpërmjet dhe të lënë atë vetëm. Pra, ndoshta kjo e bën këtë. Unë mund të provoni dhe vetëm shpresoj që ajo ka, por le mua futur një gjë tjetër. Në vend që të përdorni këtë terminal ndërtuar-në dritare këtu poshtë, kujtoj se Ky shesh i zi ikonë ju jep një dritare terminali madhe që unë mund të të plotë ekran, nëse unë dua? Pra, ajo rezulton se ata janë lloj i çuditshëm emrin, por ka quajtur këto gjëra faqet man, faqet manual, njeriu për të shkurtër, dhe unë mund të hyni në këto duke njeri i shtypur - Çfarë dua të tipit? Njeriu të sipërme. Dhe tani vini re, nëse ekziston një funksionojnë në brendësi të kompjuterit, ne ky rast pajisja, e cila është vetëm sistemi operativ Linux, kjo po ndodh për të më jepni një grup disi lakonike e prodhimit, por ju do të gjeni se me kalimin e kohës ajo gjithmonë është formatuar pretty much njëjtën mënyrë ju filloni për të mësohen me të. Vini në krye të sipërme, dhe me sa duket është dokumentacioni i njëjtë për të ulur. Kushdo që e shkroi ajo ishte prerja e disa Qoshet dhe të vënë atë të gjithë në një faqe. Qëllimi i këtyre gjërave 'në jeta është për të kthyer një letër të sipërme apo të vogla. Vini re se nën Sinopsisi, faqja njeri është mësim mua atë që unë kam fotografinë që të përfshijë të përdorin këtë gjë. Kjo është dhënë mua nënshkrimet për këto funksionet, dy prej tyre, edhe pse ne tani vetëm kujdesen për një. Këtu është tani një përshkrim. Për të sipërme konverton letër c të uppercase nëse është e mundur. Ende nuk është se instruktive, por më lejoni të tani shikoni nën vlerën e kthimit, gjë që është dorëzuar përsëri. Pra, vlera e kthyer është ajo e letër konvertuar ose c nëse konvertimit nuk ishte e mundur. Çfarë është c? Karakteri origjinal. Karakteri origjinal dhe ne e dimë se duke, sërish, shkon deri tek Sinopsisi, dhe kushdo që e shkroi këtë Funksioni i vetëm vendosi se input për të sipërme dhe të ulët është vetëm arbitrarisht do të quhet c. Ata mund të e kanë quajtur atë më asgjë ata duan, por ata heshtën thjeshtë si c. Kështu që unë kam konsultuar faqen e njeri. Kjo fjali bind mua se nëse kjo nuk është një me shkronja të vogla, kjo është vetëm do të më jepni mbrapa C, e cila është përsosur, që do të thotë unë mund të shpëtoj prej gjendja ime tjetër. Pra më lejoni të shkoj përsëri në Gedit, dhe tani më lejoni të vetëm të bëjë këtë. Unë jam duke shkuar për të kopjuar deklaratën time printf. Unë jam duke shkuar për të shkuar përpara dhe të drejtë brenda për shtyp lak që jashtë, dhe të marrin Shpëtoj prej tani e gjithë kësaj, nëse konstrukt. Nuk ishte një ide e keqe, dhe ajo ishte shumë e shumë korrekte dhe në përputhje me çdo gjë që ne kemi predikuar, por jo vetëm e nevojshme. Sapo keni realizuar disa biblioteka funksioni egziston se dikush tjetër shkroi, ose ndoshta ju ka shkruajtur diku tjetër në fotografi, ju mund ta përdorni atë dhe të vërtetë të fillojë për të shtrënguar deri kodin. Dhe kur them gjëra të tilla si stil të mirë, Fakti që ky person të quajtur funksionojë për pjesën e sipërme, ose më parë është ulët është mrekullisht e dobishme për shkak se ata janë shumë përshkrues. Ju nuk do të duan për të thirrur funksionet tuaja X dhe Y dhe Z, të cilat kanë shumë, kuptimi shumë më pak. Ndonjë pyetje në atë seri e përmirësimeve? Pra, mjafton të thonë se njëri prej takeaways është edhe si problemin tuaj set - ndoshta problemi një set, por sigurisht P ngritur dy dhe më tutje, madje edhe kur ata janë korrekt nuk domosdoshmërisht të thotë se ata janë të përsosur vetëm ende ose veçanërisht të mirë-projektuar. Kjo është boshti tjetër për filloni të menduarit rreth. Pra, kjo ishte një brenda varg tuaj memorie kompjuteri, por nëse ju keni një bandë e tërë e karaktereve si H-E-L-L-O brenda RAM, dhe mendoj që keni në programin tuaj të telefononi marrë string herë të shumta të tilla që ju telefononi marrë string herë, atëherë ju telefononi marrë string përsëri. E pra, çfarë po ndodh në ndodhë me kalimin e kohës? Me fjalë të tjera, në qoftë se ju keni një linjë të , kodi megjithëse jashtë kontekstit, si string s merr - le të bëjmë këtë. Emri String barabartë marrë string. Pra, mendoj se linjë e kodit është menduar të kërkojë nga shfrytëzuesi për emrin e tij ose të saj. Kjo linjë tjetër e kodit është menduar të kërkojë për përdoruesit e tij ose shkollën e saj, dhe kjo linjë tjetër, dhe kështu me radhë. Supozoni se ne mbajmë kërkuar përdoruesit për një tjetër dhe string tjetër dhe një tjetër. Ata do të qëndrojnë në kujtesën në të njëjtën kohë. Një nuk do të dëmtojnë tjetrin. Shkolla nuk është prishësh tjetrin. Por, ku bëjnë ata të gjithë të përfundojë deri në kujtesë? E pra, në qoftë se ne fillojmë për të nxjerrë në ekran, të cilat ne mund të përdorim këtë gjë këtu si një dërrasë e zezë, nëse kjo e zezë drejtkëndësh përfaqëson të kompjuterin tim kujtesës, unë jam duke shkuar për të filluar në mënyrë arbitrare ndarë atë deri në sheshet e vegjël, secila prej të cilave përfaqëson një bajt memorie. Sinqerisht, nëse ju keni një Gigabyte RAM këto ditë, ju keni një miliard byte e kujtesës në kompjuterin tuaj, kështu që një miliard e këtyre shesheve. Pra, mjafton të thuhet, kjo nuk është e vërtetë në shkallë. Por ne mund të mbajë tërhequr të gjitha këto qartë që të mos shkallë shesheve, dhe kjo kolektivisht përfaqëson memorie të kompjuterit tim. Tani ne vetëm do të bëjmë dot, dot, dot. Pra, me fjalë të tjera, kur unë tani të shkaktonte përdoruesit me vargun merrni për të më jepni një string, çfarë ndodh? Nëse përdoruesi lloje në "hello", që përfundon deri ne H-E-L-L-O. Por mendoj Përdorues atëherë lloje në - në të vërtetë, unë nuk duhet të ketë bërë përshëndetje, sepse ne jemi duke kërkuar atyre për emrat e tyre. Pra, le të kthehemi në qoftë se unë mund ta bëjë këtë. Pra, nëse unë lloji në D-A-V-I-D për emrin tim, por të kujtojnë se linja e dytë e Kodi u marrë string përsëri për të marrë shkollën e tyre. Ku është kjo fjalë që përdoruesi lloje në do të shkojnë më tej? E pra, ndoshta kjo do të shkojë në H-A-R-V-A-R-D. Pra, edhe pse unë kam tërhequr atë si dy rreshtave, kjo është vetëm një bandë e tërë e bytes në tuaj RAM kompjuterit. Ka një problem tani, sepse tani në qoftë se unë jam duke përdorur RAM në këtë shumë të arsyeshme por një lloj mënyrë naive, çfarë mund të me sa duket nuk dallojnë? Ku fillon dhe ku një e mbaron, e drejtë? Ata janë lloj i mjegulluar së bashku. Pra, ajo rezulton nga kompjuteri nuk e bëjnë këtë. Më lejoni të vërtetë lëviz prapa në kohë një disa karaktere, dhe në vend të Harvardit shkuar menjëherë pas emrit të përdoruesit, përdorues në fakt merr, prapa skenave, një karakter të veçantë futur nga kompjuter për atë apo të saj. / 0, i njohur ndryshe si karakter nul annoyingly quhet N-U-L, nuk N-U-L-L, por ju shkruani atë si / 0. Është vetëm të gjitha bit zero është një shënues në në mes fjalën e parë që përdoruesit e shtypen dhe të dytë. Pra, Harvard në fakt përfundon deri tani si këtë sekuencë e karaktere dhe një shumë / 0. Pra, me fjalë të tjera, duke pasur këto Vlerat sentinel, tetë zero puqur bit, ju tani mund të fillojë për të dalluar një karakter nga një tjetër. Pra, e gjithë kjo kohë ajo ishte "hello" është vërtetë "përshëndetje" me nje / 0, dhe Ndërkohë, nuk mund shumë mirë RAM të jetë mjaft pak më shumë brendësi të kompjuterit. Më lejoni të bëj një gjë tjetër tani. Ajo rezulton se të gjitha këto sheshe ne kemi qenë të tërhequr, ato janë, po, vargjet, por më në përgjithësi, këto gjëra janë të vargjeve. Një array është vetëm një copë e kujtesës kjo është kthyer prapa për të kthyer prapa, dhe ju zakonisht përdorin një koleksion nga rruga i këtij simbol kllapa katrore. Pra, ne jemi duke shkuar për të parë këto mjaft kalimin e kohës, por më lejoni të shkoj përpara dhe të hapur, le të thërrasë atë moshat. Dhe njoftim se çfarë mund të bëjmë me këto njëjtat rrengje, pak Sintaksa pak më shumë këtu. Pra, në linjë 17 të këtij programi - në fakt, më lejoni të drejtuar programin e parë kështu që ne mund të shohim se çfarë kjo gjë e bën. Më lejoni të bëjë thirrje moshave të hartojnë këtë program. Moshat. /. Sa njerëz janë në këtë dhomë? Tërhiqni vëmendjen se tre. Mosha e personit të parë? 18, 19, dhe 20. Dhe tani disi qesharake, unë vetëm kanë bërë një program që ato moshave tre persona. Pra, nuk ka në mënyrë të qartë një mundësi për disa aritmetike fun këtu. Fatmirësisht, matematika është e saktë. 18 u te 19, 19 u në 20 dhe kështu me radhë. Por ajo që është menduar të jetë me të vërtetë ilustrative këtu është se si ne jemi ruajtjen moshave ato tre njerëzve. Më lejoni të zoom në në atë që është ndodh këtu. Pra, së pari, këto rreshta e para duhet të bëhet goxha e njohur. Unë jam vetëm duke e bërë për përdorues Numri i njerëzve në dhomë. Pastaj unë jam duke përdorur merrni int dhe të bëjë, ndërsa për bëni këtë përsëri dhe përsëri dhe përsëri. Ne kemi parë se model para, por 27 Linja është e re dhe në fakt mjaft të dobishme, dhe do të bëhet gjithnjë e më të dobishme. Vini re se çfarë është e ndryshme në përputhje 27 është që I duket te jetë deklaruar nje int moshave të thirrur, por prisni. Kjo nuk është vetëm moshave int. Ka këto kllapa katrore, brenda i cili është n. Pra, n kllapa në këtë kontekst, nuk në brendësi të një deklarate printf këtu, por në këtë linjë vetëm 27, kjo linjë është duke thënë, më jep mua n ints, secila prej të cilave është e tipit int. Pra, kjo është një kovë, kështu që të flasin, e, në këtë rast, tre integers përsëri në për të kthyer prapa në mënyrë që unë në mënyrë efektive kanë tre variablave. Alternative, të jenë qartë, do të jetë kjo. Nëse kam kërkuar studentja e parë e mosha, unë mund ta bëjë këtë. Nëse kam kërkuar dyti nxënës-së mosha unë mund ta bëjë këtë. Nëse kam kërkuar studenti së tretë mosha, unë mund ta bëjë këtë. Dhe Zoti na ruajt ne kemi nevojë për të gjithë të mosha në këtë dhomë - Unë do të thotë, kjo është një dreq e një shumë të kopje, ngjitur përsëri dhe përsëri dhe përsëri. Dhe plus një herë unë përpilojnë këtë program, në qoftë se një student tjetër ecën në mbi jashtë i asaj dere, tani numri im e variablave është i pasaktë. Pra, çfarë është e bukur në lidhje me një array është si sapo ju filloni të ndiheni veten kopjimi dhe pasting, shanset janë se është nuk qasja më e mirë. Një array dinamike është potencialisht. Unë nuk e di paraprakisht se sa njerëz do të jenë në dhomë, por unë e di se kam nevojë për n prej tyre, dhe unë do të kuptoj se n kur vjen koha. Kjo linjë e kodit tani do të thotë, më jepni një copë e kujtesës që duket si ky ku numri i kutive në ekran është tërësisht i varur nga n se përdoruesi typed in Deri tani pjesa tjetër e këtij programi është fakt goxha i ngjashëm me atë që ne vetëm e bëri me karaktere. Vini re unë kam një për lak duke filluar në linjë 30. Pra, menjëherë pas kam marrë array, unë iterate nga y barabartë me zero në deri në n. Unë vetëm duhet kjo printf instruktive Mesazhi i vetëm duke thënë, jepni moshën i personit #% unë, kështu që numri një, Numri dy, numri tre. Dhe pse unë bëj këtë? Sinqerisht, njerëzit preferojnë për të numëruar nga një më lart, ndërsa shkencëtarët kompjuterike, zero në dorë. shkencëtarët kompjuter nuk do të përdorin këtë lloj të programit, kështu që ne jemi vetëm do të fillojë numërimi në njërën si njerëz normalë. Dhe tani në linjë 33, njoftim pak pjesë të ndryshme të sintaksës. I-th mosha në atë ndryshore të tipit array është duke shkuar për të marrë një int. Dhe tani së fundi, kjo është vetëm aritmetike këtu poshtë. I vendosur në një lak për të kërkuar të veçantë disa kohë kalon, dhe tani në këtë loop veçantë, këto rreshta ekzekutuar. Një vit nga tani, unë do të jetë personi i vjeç, por vini re kjo nuk është ndryshueshme në i. Kjo tani është% i për int. Dhe njoftim si placeholder pare, I plug në i plus 1, kështu që ne kemi numëruar si një person normal. Dhe pastaj për vlerën e moshës së tyre, për vjet i vjetër, unë të marrë moshave kllapa I - dhe pse jam unë duke bërë një plus këtu? Ata moshës vetëm. Kjo është zgjedhja ime budalla e programeve. Ata moshës vetëm një vit. Unë mund të shkruani në ndonjë numër atë Unë në fakt nuk duan. Pra, çfarë është në të vërtetë të gjithë relevanca këtu? E pra, më lejoni të vërtetë lëviz mbrapa mbi këtu dhe një tabllo e çfarë shtrihet përpara. Ajo që ne do të jetë bërë me tonë të ardhshëm Dy Set Problem është dabbling në Bota e kriptografisë. Pra, kjo është një varg i karaktereve, kështu që një Sekuenca e chars të shumta, dhe çfarë do të thotë kjo? Kjo nuk është në version online i slides. Kështu që unë pretendojnë se kjo është e barabartë kjo, një shpallje budalla nga shumë vite më parë se mund të vërtetë kujtojnë një nga origjina e saj. Pra, ky është një shembull i encryption ose cryptography. Ajo rezulton se në qoftë se ju doni të në fakt dërgojë informacion ose të ndajnë informacion me dikë të sigurt, si një mesazhi si ky, ju mund të ngjitem letra. Por zakonisht, fjalët janë të nuk fërguara rastësisht. Ata janë permuted në një farë mënyre apo ndryshuar në një farë mënyre në mënyrë që - oops. Kjo është një Spoiler zbavitëse për herën tjetër. Kështu që ju mund të hartë atë që është me sa duket O të Njoftimit B. që linjat deri kapitalizimi-i mençur. Me sa duket r bëhet e. Duket F-H-E-R bëhet S-U-R-E. Kështu ajo rezulton se ka një hartë, dhe në ky rast ka një goxha budalla hartes se nëse dikush ka realizuar artistikisht it out? Kjo është diçka që quhet Rot 13, Rotate 13. Kjo është budalla i encryption Mekanizmat për shkak se ajo fjalë për fjalë vetëm shton 13 te çdo një nga letra, budalla në kuptimin se në qoftë se ju vetëm kanë pak kohë të lirë në duart tuaja dhe një laps, ose ju thjesht mendoj se përmes në kokën tuaj, ju mund të provoni të gjitha Futjet më të mundshme - një, dy, tre, dot, dot, dot, vetëm 25 për rrotullohen alfabetin e tërë, dhe përfundimisht, ju do të kuptoj se çfarë është ky mesazh. Pra, nëse keni bërë diçka si kjo në Shkolla notë kaluese mesazhe tuaj shoku më i mirë, në qoftë se shkolla juaj klasa Mësuesi thjesht lexuar nëpër Mesazhi dhe shtazë detyruar zgjidhje, ju mund të keni gotten një përgjigje nga kjo. Tani natyrisht, në botën reale, Kriptografia është më i sofistikuar. Kjo është një copë e tekstit nga një sistem kompjuterik që ka përdoruesve dhe Fjalëkalimet, si pothuajse të gjitha e jona bëjmë, dhe kjo është ajo që fjalëkalimi juaj mund të duken si në qoftë se ruhet në hard tuaj përzënë por në formë të koduar. Kjo nuk është vetëm një rotacioni i shkronjave, A është B dhe B eshte C. Kjo eshte shumë më të sofistikuara, por ai përdor çfarë është e njohur përgjithësisht si çelës sekret cryptography. Kjo foto tregon vijim me një histori disa ikona. Në të majtë, ne kemi atë ne do të thërrasë plain text. Në botën e kriptografisë, plain Teksti është vetëm mesazhi origjinal shkruar në anglisht ose frëngjisht apo ndonjë gjuhë whatsoever. Nëse ju doni të encrypt atë, ne do të kalojë ajo në pikturë përmes një dry, kështu që një lloj i algorithm, disa funksioni ose programi që dikush shkroi se përpjekje të shpresojmë se letra complicatedly më shumë se vetëm duke shtuar 13 te secilit prej tyre. Çfarë ju merrni jashtë këtij procesi në mesme atje quhet cyphertext. Pra, një lloj i fjalës sexy. Ajo thjesht do të thotë se është Encrypted version i plain text. Dhe vetëm në qoftë se ju keni atë sekret të njëjtë, 13 apo minus 13, ju jeni në gjendje për të decrypt një mesazh si kjo. Pra, në Problem vendosur dy, në mesin e gjërave ju do të bëni në qoftë se në Hacker Edition, ju do të duhet të shkruani kodin në plas këto passwords, duke parafytyruar çfarë ata ishin dhe se si ata ishin Encrypted, edhe pse ne bëjmë të ju jap një grimë i udhëzime përgjatë rrugës. Në edicionin standard, ne kemi prezantuar një çift i shifrave, encryption Mekanizmat, njëri i quajtur Cezari, një quajtur Vigenere, që janë ende shifra rrotulluese ku A bëhet diçka, B bëhet diçka, por ju duhet të bëni atë programmatically sepse nuk do të vërtetë të jetë një sekret kyç të përfshirë e cila është zakonisht një numër ose nje Fjalëkyç qe vetem dërguesi dhe marrësi i këtyre Mesazhet duhet të kuptojnë. Tani, ky fakt ka incarnations në botën reale. Kjo, për shembull, është jetim pak Unaza e fshehtë e Annie decoder, dhe ju në fakt mund të zbatojë këto shifra rrotulluese - A bëhet diçka, B bëhet diçka - me një çift të rrotave, një në pjesën e jashtme, një në brendësi tillë që nëse ju rrotullohen timon ose ring, ju në fakt mund të vijë deri Letrat me shkronja të ndryshme, duke marrë një kod sekret. Dhe kështu si cliffhanger për sot, ajo që kam menduar unë do të bëj është pak i regres se në qoftë se ju të kthehet në TV më 24 dhjetor, ju mund të shikojnë Filmi ad nauseum për 24 orë në një rresht. Por, për sot, unë do të hapur atë deri këtu dhe na japin vetëm dy minuta të një pedagogjikisht relevante Christmas Story me një patrioti të vogël të quajtur Ralphie. [Video playback] -I bëjmë të njohur për të gjithë dhe i ndryshëm se Ralph Parker emërohet një anëtar i Vogël sekret Orphan Annie rrethi dhe ka të drejtë për të gjithë nderon dhe përfitimet ndodhin me to. -Nënshkruar, Annie pak jetimë. Kundërfirmohen, Pierre Andre në bojë. Nderon dhe përfitimet tashmë në moshën nëntë. [Bërtasin PËR RADION] Come on, le të marrin më me të. Unë nuk kanë nevojë të gjithë xhaz se rreth Kontrabandistët dhe piratët. -Dëgjoni nesër natën për aventurë përfundimin e zezë anije pirate. Tani, është koha për Secret Annie Mesazh për ju anëtarë i rrethit fshehtë. Mos harroni, fëmijët. Vetëm anëtarët e Annie s Secret Circle mund të deshifroj mesazhin e fshehtë e Annie. Mos harroni, Annie është në varësi të ju. Set këmbët tuaja në B2. Këtu është mesazhi. 12, 11, 2 - -Unë jam në takimin e parë time të fshehtë. -25, 14, 11, 18, 16 - -Pierre ishte në zë të madh sonte. Unë mund të them se sonte mesazhin e ishte me të vërtetë e rëndësishme. -3, 25. Kjo është një mesazh nga Annie vetë. Mos harroni, mos tregoni askujt. -90 Sekonda më vonë, unë jam në dhomën e vetme në shtëpinë ku një djalë i nëntë mund të ulem në jetën private dhe deshifroj. Aha, B. unë shkova për të ardhshëm. E. fjala e parë është "të jetë." S. Ajo u vinte lehtë tani. U. 25. Kjo është R. -Come on, Ralphie. I Gotta Go. -Do të jetë e drejtë poshtë, Ma. Kampion Gee. -T. O. Jetë i sigurt për të. Jetë i sigurt për çfarë? Cili ishte Orphan Pak Annie duke u përpjekur për të thënë? Jetë i sigurt për çfarë? -Ralphie, Randy ka marrë për të shkuar. Do ju lutem të dalë? -Të gjithë të drejtë, Ma. Unë do të jetë e drejtë jashtë. -I was getting afër tani. Tensioni ishte e tmerrshme. Çfarë ishte ajo? Fati i planetit mundet rri në ekuilibër. -Ralphie, gotta go Randy. -Do të jetë e drejtë për qarë me zë të lartë. -Pothuajse atje. Gishtërinjtë e mi fluturonin. Mendja ime ishte një kurth çeliku. Çdo pore vibrated. Ajo ishte pothuajse e qartë. Po, po, po, po, po. -Të jetë i sigurt për të pirë Ovaltine tuaj. Ovaltine? Një tregtar i pavlerë? Kopuk. [VIDEO END rishikim] FOLËSI 1: Ky eshte CS50, dhe që Problem do të jetë Set Dy. Shihemi javën e ardhshme. 2 Gjuha: Në ardhshme CS50, kjo ndodh. Kryetari 1: Pra, një temë që ne nuk kemi shikoi deri tani është që i pointers funksion. Tani, një akrep funksion është vetëm adresa e një publik funksion, por më shumë si - bir i një -