[Ddoqq il-mużika] DAVID J. Malan: Kull dritt. Dan huwa CS50, u dan huwa l-bidu ta 'Ġimgħa 2. U tkun taf tfakkar li aktar minn l-aħħar ftit ġimgħat, konna qegħdin jintroduċu kompjuter xjenza u, min-naħa, l-ipprogrammar. U bdejna l-istorja permezz ta ' Scratch, dik il-lingwa grafika minn Media Lab MIT'S. U allura l-iktar reċentement, ġimgħa li għaddiet, aħna ma jintroduċu higher-- ta ' lingwa ta 'livell aktar baxx magħruf kif Ċ, xi ħaġa li purament testwali. U, tabilħaqq, l-aħħar darba aħna esplorat fi ħdan il-kuntest għadd ta 'kunċetti. Dan, irtirar, kien il-ħafna ewwel programm ħarisna lejn. U dan il-programm, pjuttost sempliċi, prints out, "bonjour, dinja." Iżda hemm daqstant seeming magic jiġri. Hemm dan #include ma 'dawn parentesi angolu. Hemm int. Hemm (vojt). Hemm parentesi, ċingi kaboċċi, semi-colons, u għalhekk ħafna aktar. U għalhekk, ifakkar li aħna introdotti Scratch b'tali mod li nistgħu, idealment, tara l-passat li sintassi, l-għalf li verament mhux dak kollu li intellettwalment interessanti iżda kmieni huwa, assolutament, daqsxejn delikata biex nagħlaq moħħ tiegħek madwar. U, tabilħaqq, wieħed mill-aktar komuni affarijiet kmieni fi klassi ta 'programmazzjoni, speċjalment għal dawk li huma inqas komdu, huwa li tinkiseb frustrati bl u tripped minn ċerti sintattika żbalji, biex ma nsemmux żbalji ta 'interpretazzjoni. U hekk fost l-għanijiet tagħna illum, fil-fatt, se jkun li tgħammar int ma 'xi tekniki soluzzjoni ta 'problemi dwar kif biex isolvu aħjar il-problemi huma stess fil-forma ta 'debugging. U tkun taf tfakkar ukoll li l- ambjent li aħna introdotti aħħar darba kien jissejjaħ CS50 IDE. Dan huwa softwer fuq l-internet li tippermetti li inti programm fil-sħaba, biex ngħidu hekk, filwaqt li jżommu kollha ta 'tiegħek fajls flimkien, kif aħna se jerġa illum. U tfakkar li aħna revisited dawn is-suġġetti hawn, fosthom il-funzjonijiet, u loops, u varjabbli, u l-espressjonijiet Boolean, u kondizzjonijiet. U fil-fatt ftit aktar li aħna tradotti mid-dinja ta 'scratch għad-dinja ta 'C. Iżda l-bini fundamentali blokki, biex ngħidu hekk, kienu verament għadhom l-istess ġimgħa li għaddiet. Fil-fatt, aħna verament biss kellhom biċċa puzzle differenti, jekk inti se. Minflok dan vjola jiffranka blokk, aħna minflok kienet printf, li hija din il-funzjoni fl Ċ li jippermettilek li jistampaw xi ħaġa u format fuq l-iskrin. Aħna introduċiet il CS50 Librerija, fejn inti issa għad-dispożizzjoni tiegħek get_char, u get_int, u get_string, u funzjonijiet oħra ftit kif ukoll, li permezz tagħhom tista 'tikseb l-input mill-tastiera tal-utent stess. U aħna wkoll ħa ħarsa lejn l-affarijiet bħall these- BOOL, u char, u doppju, float, int, spag long_long. U hemm anke tipi ta 'data oħra fid C. Fi kliem ieħor, meta inti tiddikjara varjabbli taħżen xi valur, jew meta inti jimplimentaw funzjoni li jirritorna xi valur, inti tista 'tispeċifika liema tip ta 'valur li hu. Huwa ta 'spag, bħal sekwenza ta 'karattri? Huwa ta 'numru, bħal integer? Huwa ta 'b'punt li jvarja valur, jew bħalhom? Għalhekk fl Ċ, b'differenza Scratch, aħna fil-fatt beda biex tispeċifika liema tip ta 'data konna jirritornaw jew jużaw. Imma, naturalment, aħna wkoll dam fis xi limiti fundamentali tal-kompjuters. U b'mod partikolari, din il-lingwa C, irtirar li ħadna ħarsa lejn overflow numru sħiħ, ir-realtà li jekk inti biss għandek ammont finit ta 'memorja jew, speċifikament, numru finit ta 'bits, inti tista' biss joqgħod tant għoli. U hekk aħna ħares lejn dan l-eżempju hawn li biha kontro f'ajruplan,, fil-fatt, jekk running twil biżżejjed se overflow u jirriżultaw fi software żball potenzjal fiżiku attwali. Aħna wkoll ħares lejn f'wiċċ l-ilma punt impreċiżjoni, ir-realtà li ma biss numru finit ta ' ta 'bits, kemm jekk huwa 32 jew 64, inti tista 'tispeċifika biss numri tant wara punt deċimali, wara li inti tibda tikseb impreċiż. Allura per eżempju, terz fil- dinja hawn, fid-dinja tal-bniedem tagħna, nafu huwa biss numru infinit tal 3s wara l-punt deċimali. Iżda kompjuter ma jistax neċessarjament jirrappreżentaw numru infinit ta 'numri jekk inti biss jippermettu dan ftit ammont finit ta 'informazzjoni. Allura mhux biss ma aħna tgħammar int bil-qawwa akbar f'termini ta 'kif inti tista' tesprimi lilek innifsek fid- tastiera f'termini ta 'pprogrammar, aħna wkoll limitati dak inti tista 'attwalment tagħmel. U fil-fatt, bugs u żbalji jistgħu joriġinaw minn dawk it-tipi ta 'kwistjonijiet. U fil-fatt, fost is-suġġetti llum ser ikunu suġġetti bħat debugging u fil-fatt tfittex taħt il-barnuża fl-aħħar ġimgħa kif ġew introdotti affarijiet huma effettivament implementati sabiex inti aħjar jifhmu kemm il-kapaċitajiet ta u -limitazzjonijiet ta 'lingwa bħal C. U fil-fatt, aħna ser qoxra lura l-saffi mill-aktar sempliċi ta istruttura tad-data, xi ħaġa imsejħa firxa, li Scratch jiġri li jsejjaħ "lista." Huwa ftit differenti fil-kuntest. U allura aħna ser jintroduċi wkoll waħda mill- ewwel ta 'problemi speċifiċi għas-domain tagħna fil CS50,-dinja ta ' kriptografija, l-arti tal scrambling jew ċċifrar informazzjoni hekk li inti tista 'tibgħat messaġġi sigrieti u jiddekowdja messaġġi sigrieti bejn żewġ persuni, A u B. Allura qabel we tranżizzjoni għal dak dinja ġdida, ejja jippruvaw tgħammar int ma 'xi tekniki li magħhom inti tista 'telimina jew inaqqsu għall-inqas f'xi tal-frustrazzjonijiet li inti probabilment ltaqgħu magħhom matul il-ġimgħa li għaddiet waħdu. Fil-fatt, qabel int qed such-- xi wħud problemi ewwel tiegħek fil C. U odds huma, jekk int simili me, l-ewwel darba inti tipprova tip ta 'programm, anke jekk taħseb loġikament il-programm huwa pjuttost sempliċi, inti tista 'tajjeb ħafna hit ħajt, u il kompilatur mhux se jikkoopera. Jagħmel jew Clang mhux se li fil-fatt jagħmlu offerti tiegħek. U għaliex jista 'jkun? Ukoll, ejja tagħti ħarsa lejn, forsi, programm sempliċi. Jien ser jimxi 'l quddiem u jiffrankaw dan fajl deliberatament imsejjaħ buggy0.c, għaliex naf li jkun żbaljat bil-quddiem. Imma jien ma jista jirrealizzaw li jekk dan hija l-ewwel jew it-tieni jew it-tielet programm li jien attwalment jagħmlu myself. Hekk jien ser jimxi 'l quddiem u tip out, int prinċipali (vojt). U allura ġewwa tal ċingi kaboċċi tiegħi, a familjari ħafna ( "hello, world-- backslash, n ") - u semi-colon. Stajt salvati l-fajl. Issa jien se jinżlu tieqa terminal tiegħi u t-tip għamla buggy0, minħabba li, għal darb'oħra, l-isem tal-fajl llum hija buggy0.c. So I tip jagħmel buggy0, Ikteb. U, oh, gosh, jiġbor lura mingħand aħħar darba li l-ebda messaġġi ta 'żball hija ħaġa tajba. Allura l-ebda output hija ħaġa tajba. Iżda hawnhekk għandi b'mod ċar xi numru ta 'żbalji. Allura l-ewwel linja tal-produzzjoni wara ittajpjar jagħmel buggy0, irtirar, huwa l-output pjuttost verbose Clang s. Taht il-barnuża, IDE CS50 huwa kkonfigurat li tuża mazz sħiħ ta ' għażliet ma din il kompilatur sabiex inti ma għandekx biex jaħsbu dwar minnhom. U li dak kollu li l-ewwel linja mezzi li jibda bil Clang. Iżda wara li, l-problemi jibdew jagħmlu apparenza tagħhom. Buggy0.c fuq il-linja 3, karattri 5, hemm kbir, żball aħmar. X'inhu li? Impliċitament tiddikjara funzjoni librerija printf ma 'tip int (char * CONST, ...) [-Werror]. I mean, huwa malajr ħafna gets arcane ħafna. U ċertament, fl-ewwel t'għajn, aħna se le jistennew li inti tifhem l- totalità ta 'dak il-messaġġ. U għalhekk wieħed mill-lezzjonijiet għal-lum huwa għaddej li jkun biex jipprova li l-avviż mudelli, jew affarijiet simili, għall-iżbalji inti jista 'jkollhom jiltaqgħu magħhom fil-passat. Mela ejja tease apparti biss dawk il-kliem li tfittex familjari. Il-big, iżball aħmar huwa kjarament simboliku ta 'xi ħaġa li tkun ħażina. b'mod impliċitu li tiddikjara printf funzjoni librerija. Għalhekk anki jekk jien ma pjuttost jifhmu dak li impliċitament li tiddikjara funzjoni librerija tfisser, il-problema żgur tirrigwarda printf b'xi. U s-sors ta 'din il-kwistjoni għandha x'taqsam ma 'tiddikjara dan. Li tiddikkjara funzjoni huwa isemmi dan għall-ewwel darba. U aħna użati l terminoloġija aħħar ġimgħa li jiddikjaraw prototip funzjoni tal- jew b'linja waħda fil-quċċata tal tiegħek fajl stess jew f'fajl header hekk imsejħa. U f'liema fajl ma nistgħu ngħidu aħħar ġimgħa li printf huwa kwotazzjoni, unquote, iddikjara? F'liema fajl prototip tiegħu? Mela jekk inti recall, l-ewwel ħaġa I ttajpjata, kważi kull programm aħħar time-- u aċċidentalment mument ilu beda ittajpjar myself-- kien dan here-- waħda hash-- #include