[Powered by Google Translate] [Sadaļa 4] [mazāk apmierināti] [Nate Hardison] [Hārvarda] [Tas ir CS50.] [CS50.TV] Labi, welcome atpakaļ uz sadaļu. Šajā nedēļas nodaļā mēs esam gatavojas darīt pāris lietas. Mēs ejam uz pirmo Atgādinājums Problem Set 2, kas ir Cēzara un Vigenère problēmu kopumu. Un tad mēs esam gatavojas nodoties Viktorīnas 0 Review un pavadīt mazliet laika mazliet recapping ko mēs esam runājuši par Katrā no lekcijām tik tālu, un mēs arī darīt dažas problēmas no iepriekšējā gada viktorīnas. Tādā veidā jums puiši ir labs veids, lai sagatavotos to. Lai sāktu, es esmu booted up pāris labu risinājumu par iepriekšējo problēmu kopumu, Problem Set 2, šajā telpā. Ja jūs puiši visi hit šo saiti, un ja jūs noklikšķiniet manu vārdu un noklikšķiniet uz manu pirmo pārskatīšanu jūs redzēsiet caesar.c, kas ir tieši tas, ko es esmu meklē. Parunāsim par to tiešām ātri. Tas ir tikai parauga šķīdumu. Tas ne vienmēr ir ideāls risinājums. Ir daudz dažādi veidi, kā rakstīt šo, bet ir dažas lietas, ka es gribēju uzsvērt ka es redzēju, kā es bija šķirošanai, kopējās kļūdas, kas, manuprāt šis risinājums dara ļoti labu darbu apstrādi. Pirmais ir ar kaut kādu header komentāra augšpusē. Gada 1 līnijās līdz 7 jūs redzētu detaļas, Ko tieši šī programma dara. Labs standarta prakse, rakstot C kodu neatkarīgi, ja jūsu programma ir ietverta vienā failā vai vai tas sadalīts pa vairākiem failiem ir jābūt sava veida orientējot komentāru augšpusē. Tas ir arī cilvēkiem, kas iet un rakstīt kodu, kas reālajā pasaulē. Tas ir, ja viņi būs nodot autortiesību informāciju. Zemāk ir # ietver. Gada 16 līnijas tur tas # define, ko mēs būsim atpakaļ uz tikai mazliet. Un tad, kad funkcija sākas, kad galvenie starti, jo šī programma ir visu salej vienā funkciju pati pirmā lieta, kas notiek, un šis ir ļoti vārdkopas un tipisks C programmu kas notiek ar komandrindas argumentus-ir, ka tā uzreiz pārbauda Attiecībā uz argumentu skaits, argc. Tieši šeit mēs redzam, ka šī programma ir gaidījis 2 argumentus precīzi. Atcerieties tur ir, ka pirmais arguments, kas ir īpašs tas vienmēr programmas nosaukums, kas ir tiek palaists, nosaukums izpildāmo failu. Un tā, ko tas dara, ir tas novērš lietotāju no braukšanas programmas ar vairāk vai mazāk argumentiem. Iemesls, kāpēc mēs gribam, lai pārbaudītu šo tiesību prom ir tāpēc mēs faktiski nevar piekļūt šai argv masīvs tieši šeit ticami kamēr mēs esam pārbaudīti, lai redzētu, cik liels tas ir. Viens no kopējās kļūdas es redzēju, bija cilvēki uzreiz iet un paķert argv [1]. Viņi greifers atslēgu argumentu no masīva un darīt, lai es varētu pārbaudīt par to, un tad viņi gribētu darīt testu, argc kā arī nākamo testu, vai pirmais arguments bija patiešām vesels tajā pašā laikā, un kas nedarbojas, jo gadījumā, ka nav sniegti argumenti jums tiks satveršanas argumentu, ka nav tur vai mēģina paķert vienu, kas nav tur. Otra lielā lieta, kas jums vajadzētu pamanīt, ka Jūs vienmēr vēlaties izdrukāt kaut kādu noderīgu kļūdas ziņojuma lietotājam orientēties viņiem. Es esmu pārliecināts, ka jūs visi esam palaist programmas, kur visi pēkšņi tas atteici, un jūs saņemsiet šo absurda maz dialogu, kas NOP up un saka kaut briesmīgi noslēpumains un varbūt dod jums kļūdas kodu vai kaut kas tamlīdzīgs ka nav jēgas. Tas ir, ja jūs patiešām vēlaties, lai nodrošinātu kaut noderīgu un mērķtiecīgi, lai lietotājam, lai tad, kad viņi palaist to viņi iet "Ak," sejas palmu. "Es zinu, tieši to, ko darīt es zinu, kā noteikt šo.". Ja jums nav izdrukātu ziņu, tad jūs galu galā tiešām atstājot lietotājam iet pārbaudīt savu pirmkodu izdomāt, kas nogāja greizi. Ir arī dažas reizes, ka jūs izmanto dažādus kļūdu kodus. Šeit mēs vienkārši izmanto vienu teikt, ka bija kļūda, tur bija kļūda, tur bija kļūda. Lielāks programmas, kas bieži raidījumi, kas tiek saukti par citām programmām, atgriezīsies kaut kādas īpašas kļūdu kodus dažādiem scenārijiem programmiski zināmu ko jūs citādi tikai izmantot jauku angļu ziņu. Atdzist. Kā mēs strādājam uz leju, jūs varat redzēt, mēs pull taustiņu out. Mēs testu, lai redzētu, vai atslēga der. Mēs saņemt ziņu no lietotāja. Iemesls, kāpēc mēs to darīt šajā darīt, kamēr cilpa, un tas ir kaut kas mums segs kas mazliet-bet izrādās, ka, ja jūs tipa kontroles D kad jūs saņemsiet, ka GetString tūlītēja uz termināla kas tas patiesībā tas ir tas nosūta īpašu raksturu ar programmu. To sauc par ELF vai faila rakstura beigas. Un šajā gadījumā, mūsu vēstījums stīgu būs spēkā, tāpēc tas nav kaut mēs pārbaudīta ar problēmu sev. Bet kā mēs ejam tālāk, tagad, ka mēs esam sākuši runāt par norādes un dinamisku atmiņas sadalījumu uz kaudzes, pārbaudot null, ja jums ir funkcija, kas varētu atgriezties null kā vērtība ir kaut kas jūs vēlaties saņemt paraduši. Tas ir šeit galvenokārt ilustrācija. Bet, kad jūs redzēt GetString nākotnē, tāpēc no Problem Set 4, jūs vēlaties, lai saglabātu to prātā. Atkal, tas nav jautājums par problēmu Set 3 nu kopš mēs nebūtu uz to vēl. Visbeidzot, mēs uz šo daļu, kur mēs uz galveno šifrēšanas cilpa, un tur ir lietas notiek šeit pāris. Pirmkārt, mēs atkārtot visā ziņu virkni pati. Šeit mēs esam tur strlen zvanu nosacījumu, kas no jums skaits ir norādījusi, nav lielisks veids, kā iet. Izrādās, šajā gadījumā tas arī nav liels, daļēji tāpēc mēs mainīt saturu paša ziņojuma iekšpusē cilpa, tāpēc, ja mums ir ziņojums, kas ir 10 rakstzīmes garš, Pirmo reizi mēs sāktu ka strlen cilpa atgriezīsies ko? 10. Bet, ja mēs pēc tam mainīt ziņu, ka mēs mainīt savu 5 raksturu, un mēs iemest \ 0 rakstura jau 5 stāvoklī, uz vēlāku atkārtojumā strlen (ziņu) neatgriezīs ko tā izdarīja ļoti pirmo reizi mēs uzsvēra, bet tas būs tā vietā atgriezīsies 5, jo mēs iemeta šajā null terminatoru, un string ir garums ir definēts ko vada no šīs \ 0. Šajā gadījumā, tas ir lielisks veids, kā iet, jo mēs esam pārveidojot to vietā. Bet jūs ievērosiet, ka tas ir faktiski pārsteidzoši vienkārši šifrēt ja jūs varat saņemt math pareiza. Viss, kas ir nepieciešams, ir jāpārbauda, ​​ka jūs meklējat pie, vai šai vēstuli ir lielie vai mazie. Iemesls mums ir tikai, lai pārbaudītu to un mums nav, lai pārbaudītu ir alfa lieta ir, jo ja raksturs ir lielie vai ja tas ir mazie tad tas noteikti alfabēta burtu, jo mums nav lielie un mazie cipari. Otra lieta, ko mēs darām, un tas ir nedaudz grūts, ir mēs esam modificēts standarta Caesar šifra formulu ka mēs padevās problemātisko noteiktajā specifikācijā. Kas ir atšķirīgs ir tas, ka mēs atņemti ar lielo lietu galvaspilsētā, un tad mēs pievienot kapitāla A Atpakaļ beigās. Es zinu no jums maz ir izdarīts jūsu kodu. Vai kāds no jums izdarīt jūsu iesniegumiem? Jūs šo. Vai jūs varat paskaidrot, ko tas dara, Sahb? Atņemot to ārā, jo jūs mod uzreiz pēc tam, Jums ir ņemt to ārā, tāpēc Tādā veidā jums [klepu] nostāju. Un pēc tam pievienojot to atpakaļ vēlāk jūs pārvietoti vairāk nekā to, kas jums vēlējās. Jā, tieši tā. Kas Sahb teica, bija, ka, ja mēs vēlamies, lai pievienotu Mūsu vēstījums un mūsu galvenais kopā un tad mod, kas, mod, kas ar NUM_LETTERS, ja mēs neveido mūsu ziņu atbilstošajā 0-25 robežās, pirmkārt, tad mēs varētu galu galā kļūst patiešām dīvaini numuru jo vērtības, kas mēs esam meklē, kad mēs skatāmies uz ziņu [i], kad mēs skatāmies kārtējam raksturu mūsu vienkārša īsziņu, ir vērtība, kaut kur šajā 65-122 diapazonā pamatojoties uz ASCII vērtībām lielos A caur mazajiem burtiem z. Un tad, kad mēs mod to ar 26 vai pa NUM_LETTERS, jo tas bija mūsu # define augšējā labajā šeit, kas notiek, lai dotu mums vērtību, kas ir no 0-25 robežās, un mums ir nepieciešams veids, tad mērogu, ka atpakaļ uz augšu un saņemt to atbilstošā ASCII diapazonā. Vieglākais veids, kā to darīt, ir tikai skalu viss uz leju uz 0-25 robežās, lai sāktu ar, un pēc tam pāriet viss atpakaļ uz augšu beigās. Vēl viena kopīga kļūda, ka es redzēju cilvēkus uzskriet ka ja jums nav faktiski darīt zvīņošanās uzreiz un jūs pievienot ziņu un atslēgu kopā un jūs pievienojat tos, teiksim, uz char mainīgs, problēma ar šo ir kopš ziņojuma [i] ir salīdzinoši liels skaits, lai sāktu ar, atceraties, tas ir vismaz 65, ja tas lielais raksturs- ja jums ir liels atslēgu, teiksim, kaut kas līdzīgs 100, un jūs pievienojat šiem 2 kopā vērā parakstīts CHAR jūs gatavojas saņemt pārslodzi. Jūs gatavojas iegūt vērtību, kas ir lielāka nekā 127, kas ir lielākā vērtība, CHAR mainīgais var turēt. Atkal, tas ir, kāpēc jūs vēlaties darīt, ka veida lieta, lai sāktu ar. Daži cilvēki ieguva ap gadījumā darot ja cits un testēšanas lai redzētu, vai tas būtu pārpildīts pirms to dara, bet šādā veidā izpaužas ap to. Un tad šajā šķīdumā mēs izdrukāt visu virkni pašās beigās. Citi cilvēki izdrukāt raksturs laikā. Abi ir lieliski. Šajā brīdī, jūs guys ir kādi jautājumi, kādi komentāri par šo? Things jums patīk, lietas jums nepatīk? Man bija jautājums. Varbūt es nokavēju to laikā jūsu paskaidrojumu, bet kā šī programma izlaist atstarpes, lai savienotu taustiņu uz teksta garuma? Tas ir tikai Cēzara šifra. >> Ak, piedodiet, jā. Jā, mēs redzam, ka. Jo Cēzara šifra mēs saņēmām aptuveni ka tāpēc Mēs tikai Pagriezts rakstzīmes. Mēs tikai griež tos, ja tie ir lielie vai mazie. Jūs puiši sajūta diezgan labs par šo? Jūtieties brīvi kopēt šo māju, ņemt to, salīdzināt to, ko jūs guys rakstīja. Noteikti justies brīvi sūtīt jautājumus par to pārāk. Un atkal, saprotam, ka mērķis šeit ar savu problēmu komplekti nav, lai saņemtu jums puiši rakstīt perfektu kodu jūsu problēma komplekti. Tas ir mācīšanās pieredzi. Yeah. Atpakaļ uz darīt, kamēr cilpa, ja tas būs vienāds null, tāpēc Null nozīmē tikai neko, viņi vienkārši hit ieiet? Null ir īpašs rādītājs vērtību, un mēs izmantojam Null, kad mēs vēlamies pateikt mums ir rādītājs mainīgo, kas ir vērsta uz neko. Un tā parasti tas nozīmē, ka šis mainīgais, šī ziņa mainīgs ir tukša, un šeit, jo mēs esam izmantojot CS50 speciālu stīgu veidu, kāda ir CS50 virkne veidu? Vai esat redzējuši, kas tas ir, kad Dāvids velk atpakaļ pārsegu lekciju? Tas bailīgs-tas ir rādītājs, vai ne? Labi, jā >> Tas. Ir char *. Un tā tiešām mēs varētu aizvietot šo tepat ar char * ziņu, un tā GetString funkcija, ja tas nav veiksmīgi iegūt virkni no lietotāja, tā nevar parsēt virkni, un viens gadījums, kurā tas nevar parsēt virkni ir, ja lietotājs beigām failu raksturu, kontroles D, kas nav kaut ko jūs parasti darīt, bet, ja tas notiek tad funkcija atgriezīs šo null vērtību, kā veids, kā pateikt "Hei, man nav iegūt virkni." Kas notiktu, ja mums nav likts ziņu = null, kas ir kaut kas, mēs neesam darījuši vēl? Kāpēc tas var būt problēma? Jo es zinu, ka mēs runājām mazliet lekciju par atmiņas noplūdes. Jā, pieņemsim darīt, un redzēsim, kas notiek. Svētlaimīgā jautājums bija, kas notiek, ja mēs faktiski nav Šī ziņa = null tests? Pieņemsim ritiniet uz augšu uz augšu. Jūs guys var komentēt šo out. Patiesībā, es ņemšu to saglabāt pārskatot. Tas būs pārskatīšana 3. Kas jums ir jādara, lai palaistu šo programmu, ir jums ir jāaiziet uz šo rīku ikonas šeit, un jums ir pievienot argumentu uz to. Jums ir arī tā galveno argumentu, jo mēs vēlamies, lai iet ar komandrindas argumentu. Šeit es esmu gatavojas sniegt tai numuru 3. Man patīk 3. Tagad attālināt atkal ārā, darbības programmu. Tas darbojas, apkopojot, celtniecības. Šeit mēs iet. Tā gaida, lai tiktu paziņots. Ja es rakstīt kaut ko līdzīgu sveiki-kur bija, ka iet? Ak, mana programma bija pārāk ilgi, lai palaistu. Man bija jawing pārāk ilgi. Šeit tas pats. Tagad es rakstīt sveiki. Mēs redzam, ka tas šifrē pienācīgi. Tagad to, kas notiek, ja mēs nekavējoties GetString atgriezties null? Atcerieties, es teicu, ka mums bija, ka, nospiežot kontroles D tajā pašā laikā. Es ritiniet šeit. Mēs to vēlreiz. Ēka. Tur tas notiek. Tagad, kad es hit kontroles D Man šo līniju, kas saka opt/sandbox50/bin/run.sh, segmentācija vaina. Vai jums puiši redzams, ka pirms? [Studentu] Kāpēc nav->> Atvainojiet? [Studentu] Kāpēc nav kodols izgāztuve šajā gadījumā? Kodols dump ir-jautājums ir, kāpēc tur nav kodols izgāztuve šeit? Jautājums ir, ka var būt, bet kodols dump ir fails kas izpaužas saglabāti uz cietā diska. Šajā gadījumā mēs esam invalīdi core izgāztuves par palaist serveri, lai mums nav cilvēku SEG faulting un veidojot tonnas kodols izgāztuves. Bet jūs varat saņemt vienu. Kodols izgāztuves ir veida lieta, ka jūs bieži vien var atslēgt, un reizēm jums. Segmentācija vaina, lai atbildētu uz jūsu jautājumu, baziliks, saka, ka mēs centāmies piekļūt rādītāju ka nav noteikts norādīt uz jebko. Atceros Binky ar video, ja Binky mēģina go piekļūt rādītāju, ka nav, kas norāda uz kaut ko? Šajā gadījumā es domāju tehniski rādītājs ir vērsta uz kaut ko. Tas norāda uz nulli, kas ir tehniski 0, bet ir noteikts kā segmentā, kas nav pieejama ar savu programmu, lai jūs iegūtu segmentēšanas vaina jo jūs neesat piekļūstot atmiņas, kas ir ar derīgu segmentā piemēram kaudze segmentā vai kaudze segmentu vai datu segmentā. Atdzist. Vai ir vēl kādi jautājumi par ķeizaru? Pāriesim. Apskatīsim 2 Revision tiešām ātri. Tas ir Vigenère. Šeit Vigenère mēs staigāt pa šo vienu diezgan ātri, jo, atkal, Vigenère un Cēzara ir diezgan līdzīgas. Galvene komentārs ir pirms, # Define ir pirms izvairīties, izmantojot šos burvju numurus. Jauka lieta ir pateikt, ka mēs vēlējāmies, lai pārietu atšķirīgs alfabēts vai kaut kas tamlīdzīgs. Nevis iet manuāli mainīt visu 26 grādu kodu mēs varētu mainīt līdz 27 vai no tā uz leju ja mēs, izmantojot dažādus alfabētus, dažādās valodās. Atgādināsim, ka mēs esam ieguvuši šo pārbaudi argumentu skaits, un tiešām jūs varat gandrīz lietot to kā veidni. Diezgan daudz ik programma jums rakstīt jābūt- ja tas notiek komandrindas argumentus, daži secība līniju kas skan kā šis pašā sākumā. Tas ir viens no pirmajiem veselība testos, ko vēlaties darīt. Lūk, ko mēs bija mēs nodrošinājām, ka atslēgvārds bija spēkā, un tas bija otrais pārbaude, ko mēs darījām. Ievērojiet, atkal, ka mēs atdalīta tas no argc un 2. Ņemiet vērā, ka šajā gadījumā viena lieta, kas mums bija darīt bija vietā izmantot, lai I Mēs vēlējāmies, lai apstiprinātu virtenei, un lai to izdarītu, jums tiešām ir iet raksturs pēc rakstura pār virkni. Nav labs veids, lai izsauktu kaut par to jo pat, piemēram, lai es atpakaļ 0 ja to nevar parsēt skaitlim, lai nav pat darbu. Atkal, jauku ziņu stāsta lietotājs tieši tas noticis. Tad šeit, atkal, mēs arī rīkoties gadījumā, ja lietotājs veidi kontroles D izlases raksturs. Un tad Šarlote bija jautājums agrāk par to, kā mēs spējam izlaist atstarpes mūsu virknes šeit. Tas bija sava veida līdzīgs tam, ko mēs darījām ar Myspace programmu ka mēs sadaļā, un, kā tas darbojās ir tas, ka mēs kāpurķēžu burtu skaits, ko mēs gribētu redzēt. Kā mēs gājām pa ziņu virkne, kā mēs gājām pa raksturu pēc rakstura, Mēs kāpurķēžu indeksu kā daļu no mūsu uz cilpas, un tad mēs arī kāpurķēžu skaitu vēstuļu, tā nav speciālās rakstzīmes, kas nav cipari, ne-balto laukumu ka mēs gribētu redzēt atsevišķs mainīgais. Un tad šis risinājums maina taustiņu lai iegūtu faktisko atslēgu skaitlis, un tas, ka par lidot, tieši pirms tā, tad iet, lai šifrētu faktisko ziņu raksturu. Ir daži risinājumi, kas bija perfekti pārāk liels kas mainītu taustiņu uz augšu, pārbaudot no galvenajiem spēkā esamības. Papildus pārliecinoties, ka raksturs un atslēgvārds Tika alfabēta burtu tas arī izrādījās, ka par skaitlim no 0-25 robežās, lai pēc tam izlaist kam darīt, kas vēlāk šajā cilpa. Atkal, jūs redzat šeit tas ir patiešām precīzs pašu kodu ka mēs izmantoti Cēzars šajā brīdī. Jūs darāt tieši to pašu, tāpēc reāls triks ir norādītas Kā pārvērst atslēgvārdu veselam skaitlim. Viena lieta, ka mēs darījām šeit, ka ir maz blīvs ir mums atkārtoja šo frāzi, es domāju, jūs varētu to sauc, 3 atsevišķas reizes uz 58 līnijām, 59, 61 un. Var kāds paskaidrot, ko tieši šī frāze dara? Tas piekļuvei raksturs, tāpat kā jūs teicāt. Jā, tas ir [dzirdams] varonis atslēgvārdu, un tāpēc tas ir skaits redzējis burtiem, jo ​​jūs esat tikai pārvietojas pa atslēgvārds kad jūs esat redzējis vēstuli, lai notiek, lai efektīvi izlaist atstarpes un, piemēram, ka stuff. Jā, tieši tā. Un tad, kad jūs esat redzējuši atslēgvārdu tukšu tikko Mod, lai jūs pārvietoties atpakaļ apkārt. Tieši tā. Tas ir ideāls izskaidrojums. Kas Kevins teica, ka mēs vēlamies, lai indeksu uz atslēgvārdu. Mēs vēlamies, lai iegūtu num_letters_seen raksturs, ja jūs, bet, ja num_letters_seen pārsniedz garumu atslēgvārdu, kā mēs saņemam atpakaļ uz atbilstošu klāsts ir mēs izmantojam mod operatoru efektīvi wrap apkārt. Piemēram, tāpat kā īstermiņa, mūsu atslēgvārds ir bekons, un tas ir 5 burtiem. Bet mēs esam redzējuši 6 burti mūsu teksta šajā brīdī un šifrētu 6. Mēs galu galā piekļūstot num_letters_seen, kas ir 6, mod garumu atslēgvārda, 5, un tāpēc mēs iegūtu 1, un lai ko mēs darīt, ir mēs piekļūt pirmo rakstzīmi iekšpusē mūsu atslēgvārdu šajā punktā. Viss labais, kādi jautājumi par Vigenère Pirms mēs doties tālāk? Jūs puiši sajūta diezgan labs par šo? Atdzesē, lieliski. Es gribu, lai pārliecinātos, ka jūs puiši kļūst iespēja redzēt kodu ka mēs domājam izskatās labi un ir iespēja mācīties no tā. Tas būs pēdējais, mēs būsim, izmantojot telpas pagaidām, un mēs esam gatavojas pārejai tagad, un es esmu gatavojas doties uz cs50.net/lectures lai mēs varētu darīt mazliet viktorīna pārskatīšanu. Labākais veids, kā es domāju, ka, lai sāktu darīt viktorīna pārskats ir nākt uz šo lekcijas lapā, cs50.net/lectures, un zem katras nedēļas pozīcijās, tāpēc, ja es paskatos šeit pie 0 nedēļā, Es redzu, ka mums ir saraksts ar tēmām, ka mēs uz pieejama 0 nedēļa. Ja kāds no šiem jautājumiem šķiet svešs jums jūs noteikti vēlaties doties atpakaļ un berzt lekciju piezīmes un, iespējams, pat iziet caur lekciju, noskatīties vēlreiz, ja jūs vēlaties lai iegūtu justies par to, kas notiek ar katru no šiem tematiem. Es saku papildus šogad viens no atdzist resursus, mēs esam ieguvuši Tieši šīs šorti, ka mēs esam radīti, un ja paskatās pie 0 nedēļā, mums nav visi tēmām, bet mēs esam ieguvuši diezgan maz no tiem, dažas no trickier tiem, tāpēc skatoties šos šorti atkal ir labs veids, kā iegūt jums līdz ātrumu. Jo īpaši es esmu gatavojas ielikt kontaktdakšu 3 apakšā, jo es darīju tiem. Bet, ja jūs cīnās ar bināro, biti, hex, šāda veida stuff, binārs ir lieliska vieta, kur sākt. ASCII ir vēl viens, kas ir labi, lai apskatītu pārāk. Jūs pat varat skatīties mani 1.5x ātrumu, ja es esmu pārāk lēns, lai jums. Kopš tā pārskatīšanas, justies brīvi, lai to izdarītu. Tikai, lai sāktu patiešām ātri, mēs gatavojamies iet cauri pāris šīs viktorīnu problēmu tikai, lai ātri kannu caur tiem. Piemēram, pieņemsim apskatīt pie 16 problēmu, ka es esam ieguvuši tiesības uz augšu šeit uz kuģa. Mēs esam ieguvuši šo šādu aprēķinu binārā, un mēs vēlamies parādīt jebkuru darbu. Labi, es esmu gatavojas sniegt šo shot. Jūs puiši būtu sekot kopā ar papīru, un mēs darīsim tas tiešām ātri. Mēs vēlamies, lai veiktu šādu aprēķinu bināro. Man 00.110.010. Un es esmu gatavojas pievienot 00110010 to. Par math ģēniji pēc kopā mājās, Tas ir faktiski reizinot ar 2. Sāksim. Mēs ejam, lai to pašu papildinājumu algoritmu, kas mums jādara kad mēs pievienot decimal numurus kopā. Tiešām vienīgā atšķirība ir tā, ka mēs cilpa atpakaļ apkārt kad mums ir 1 + 1 vietā kad mēs līdz 10. Ja mēs sāktu no tiesībām, tiešām ātri, kas ir pirmais cipars? [Studentu] 0 >> [Neits H.]. 0. Lieliski, otrais cipars? [Studentu] 1. [Nate H.] Vai tā 1? 1 + 1 ir? [Studentu] 10. [Nate H.] Tieši tā, lai to, kas ir cipars, ka es rakstīt pareizi zem 2 jāpapildina, kopā? [Studentu] 1, 0, 0 vai tad veikt 1. [Nate H.] 0 un veikt 1, tieši tā. Nākamais augšu, baziliks, tu esi uz augšu. Kas trešais? >> [Baziliks] 1. [Nate H.] 1, perfekta. Kevin? [Kevins] 0 >> [Neits H.]. 0, Šarlote? [Šarlote] 0 >> [Neits H.]. Jā, un ko man darīt? [Studentu] 1. [Nate H.] Un ko man darīt? Un tad es veikt 1. Ideāls, Sahb >>? [Sahb] Tagad jums ir 1. [Nate H.] Un man darīt kaut ko šeit? [Sahb] Tad nākamo jums ir 1, jo jūs veikta vairāk nekā 1. [Nate H.] Great, tāpēc šeit mēs varam pabeigt to uz augšu. Atdzist. [Studentu] Vai 0 + 0 = 0? 0 + 0 = 0. 1 + 1, kā jūs teicāt, ir 10, 1 vai 0, nevis. 10 ir nepareiza lietošana, jo man 10 ir numurs 10, un tas ir untums kā mēs esam pārstāv to, kad mēs to rakstīt. Mēs pārstāvam numuru 2 līdz 1, 0, un skaitlis 10 ir nedaudz atšķirīgs. Kas veida jauki par bināro ir, ka tur tiešām nav nemaz tik daudz lietas, jums ir nepieciešams mācīties. Tur 0 + 0 = 0, 0 + 1 = 1, 1 + 1 ir 0, un tad veikt 1, un tad jūs varat redzēt šeit trešajā kolonnā no tiesībām mums bija šis 1, 1, 1 un. Un 1 + 1 + 1 ir 1, un jūs veikt vēl 1. Kad jūs darāt bināro saskaitīšanu, diezgan vienkārši. Es gribētu darīt pāris vairāk šos veselība pārbaudītu sevi Pirms jūs iet, jo tas ir iespējams, kaut kas, mēs redzēsim uz viktorīnas. Tagad pieņemsim darīt nākamo, kā arī. Darīsim problēmu 17. Mēs ejam, lai pārvērstu šo bināro numuru decimālu. Man 10100111001. Atceros binārā video ka es darīju Gāju cauri pāris piemērus, un es parādīja, kā viss darbojas, ja jūs darāt to decimālā. Kad jūs strādājat aiz pārstāvība Es domāju, ka mēs esam šajā brīdī mūsu dzīvē tik brīvi to, ka tas ir diezgan viegli spīdums pār mehānika kā tā faktiski darbojas. Bet darīt ātri Atgādinājums, ja man ir numurs 137 tas tiešām nozīmē, un atkal, tas ir aiz pārstāvība- numuru 137 decimālais nozīmē, ka man ir 1 x 100 + 3 x 10 + 7 x 1. Tas ir viss uzturas uz ekrāna. Un tad, ja paskatās uz šiem skaitļiem tieši šeit, 100, 10 un 1, jūs redzēsiet, ka viņi faktiski visas pilnvaras 10. Man ir 10 m², 10 ¹, 10 un uz nulli. Mums ir līdzīga veida lieta binārā, izņemot mūsu bāze, kā mēs to saucam, ir 2 nevis 10. Šie 10s, ka es pierakstīju šeit apakšā, šo 10 ², 10 ¹, 10 līdz nulles, 10 ir mūsu bāze, un eksponents, 0, 1, 2 vai, ir netieši nostāju ciparu skaits, ko mēs rakstīt. 1, ja mēs skatāmies uz to, šis 1 ir gada 2 stāvoklī. 3 ir gada 1 stāvoklī, un 7 ir no 0. stāvoklī. Tas ir, kā mēs dažādas exponents zemāk par mūsu bāzēm. Pēc visu šo we'll-tiešām, jūs zināt, ko? Mēs darīsim-kur bija mana atsaukt poga iet? Tur tas notiek. Es mīlu šo atsaukt lieta. Pēc tam es domāju par mani vismaz Vieglākais veids, lai sāktu pārveidot bināro numuru vai heksadecimālais skaits, kur bāze ir 16 un nevis 10 vai 2 ir iet uz priekšu un rakstīt bāzes un eksponentiem par visu, kas manā bināro numuru augšā numuriem. Ja mēs sākam no kreisās puses uz labo atkal, kas ir veida counterintuitive, Es mainīt atpakaļ uz melna šeit, mums ir 2 līdz 0. stāvoklī, un tad mums ir 2 ¹, 2 ², un pēc tam 2 līdz 3, 2 līdz 4, 2 līdz 5 x, 6, 7, 8, 9, 10 un. Šie skaitļi es esmu izrakstīti ir visi eksponentiem. Es tikai uzrakstīju bāzēm šeit pirmo 3 tikai par telpu. Šajā brīdī es esmu gatavojas iet uz priekšu, un es esmu patiešām gatavojas dzēst sīkumi, ko mēs darījām aiz, ja tas ir labi. Jūs visi esat ieguvuši, ka. Tiem no jums skatīties internetā es esmu pārliecināts, ka būs iespēja attīt man, ja vēlaties. Pārejot atpakaļ uz pildspalvu. Tagad, ko mēs varam darīt,-ja jūs puiši nav pilnīgi līdz ātruma par savu pilnvaru 2, kas ir pilnīgi atdzist. Tas notiek. Es saprotu. Man reiz bija darba intervija, kur man pateica man būtu jāzina visas pilnvaras 2 augšu pa 2 no 30.. Tas nebija darbs es saņēmu. Anyway, jūs guys var iet uz priekšu un darīt to math šeit, bet ar binārā tas nav īsti jēgas, un arī tā jēga ar decimālā vai heksadecimālo nu, rēķināt, kur jums ir nullēm. Jūs varat redzēt, man ir 0 šeit, 0 šeit, 0 šeit, 0 šeit, 0 šeit, 0 šeit. Kāpēc tā varētu nav jēgas darīt faktisko math lai aprēķinātu atbilstošu jaudu 2 par šo pozīciju? Tieši tāpat kā Šarlote teica, ka būs 0. Varētu arī ietaupīt sev laiku, ja aprēķināšanas pilnvaras 2 nav jūsu stiprā puse. Šajā gadījumā mēs tikai nepieciešams aprēķināt to par 2 līdz 0, kas ir-? [Studentu] 1. [Nate H.] 1, 2 līdz 3, kas ir-? [Studentu] 8 >> [Neits H.]. 8. 2 4? [Studentu] 2. Man žēl, 1. [Nate H.] 2 līdz 4 ir 16, tieši tā. 2-5 ar, Kevins >> 32.? [Nate H.] 32, 2 līdz 8? [Studentu] 32 x 8, 256. [Nate H.] Perfect. Un 2 10 valstis? [Studentu] 1024. [Nate H.] Jā, 1024. Kad mēs esam ieguvuši šos skaitļus mēs varam Rezumējot tos visus uz augšu. Un tas ir, ja tas ir patiešām svarīgi darīt pāris lietas. Viens ir iet lēni un pārbaudīt savu darbu. Jūs varat pateikt, ka tur ir 1 pie beigām šo numuru, tāpēc es noteikti vajadzētu saņemt nepāra numuru, kā mans rezultāts, jo visi citi tiem ir būs vēl skaitļi ņemot vērā, ka tas ir bināro numuru. Otra lieta, kas jādara, ir, ja jums šo jautājumu uz testa un jūs esat rakstiski to ārā tik tālu un jūs pietrūkt laika apskatīt punktu skaitu, ka šī problēma ir vērts. Šī problēma, kā jūs varat redzēt, ja es uzsist atpakaļ uz manu klēpjdators tiešām ātri- šī problēma ir vērts 2 punkti, tāpēc tas nav sava veida papildus Jums vajadzētu iet cauri, ja jūs tiešām spiež laiks. Bet mēs pāriet atpakaļ uz iPad, un mēs iet caur to tiešām ātri. Man patīk darīt to nelielo skaitu 1. jo es uzskatu, ka vieglāk. Man patīk 32 un 8, jo tie iet kopā diezgan viegli, un mēs 50. 16 un 1 izpaužas 17. Tur mēs 57, un tad mēs varam darīt pārējo šo, lai mēs varam darīt 57, 156. Come on. Vīrietis, labi, paskatīsimies. Mums bija 57, 256, 1024 un. Šajā brīdī, es labprātāk tikai iet cauri. Man nav ne jausmas. Man ir jādomā, lai izlasītu up par šo. 7, 6, 4, un jūs saņemsiet 17. 1, 5, 5, 2, 13. Tad mēs iegūt 3, un tad mēs iegūt 1. 1337. Lieldienu ola, kāds? Ikviens atzīst šis numurs? Kriss atzīst numuru. Ko tas nozīmē, Chris? [Kriss] Leet. Leet, tādēļ, ja paskatās to, tas izskatās Leet. Hacker sīkumi. Uzmanies, ka veida sīkumi par vidusposma vai viktorīna, drīzāk. Ja redzat, ka veida stuff, un jūs domājām "Huh," kas tiešām kaut ko nozīmē. Es nezinu. Deivids patīk liekot to iekšā Tas ir labs veids, lai veselība pārbaudītu to. Tāpat labi, es varētu redzēt, kas notiek. Tas ir Nedēļa 0/Week 1 sīkumi. Ja mēs pāriet atpakaļ uz mūsu klēpjdatoru tagad, zoom out, un citas lietas pāris. Tur ASCII, ko mēs esam darījuši daudz problēmu kopas. Šis kapitāla A. jēdziens Kas ir tas, ka tiešām? Zinot tā decimālais skaitlis. 65 ir, ko tas plānots ar ASCII tabulu, un tas ir tāpēc, kā dators raksta to, un tas, kā mēs esam kļūst prom ar faktiski rakstot raksturu kapitāla un raksturs mazajiem Dažiem no šiem risinājumiem un problēmu komplekti, ka jūs esat dara. Pāris citām lietām. Mēs esam ieguvuši paziņojumus, boolean izteiksmes, nosacījumus, cilpas, mainīgos un diegus. Tie, visi, šķiet, jēgas par lielāko daļu? Daži no šī terminoloģija ir nedaudz bailīgs pie reizes. Man patīk domāt par paziņojumu kā par lielāko daļu kaut kas beidzas ar semikolu. Tādi izteikumi kā x = 7, kas nosaka mainīgo, domājams sauc x = 7. Jādomā x ir arī veids, kas var uzglabāt numuru 7, tāpēc tas int vai, iespējams peldēt vai īss vai palija, kaut kā tā. Būla izteiksme ir, izmantojot šos dubultā vienāds un sprādziena vienāds vai nav vienāds, mazāks nekā, lielāks, mazāks vai vienāds ar visiem, ka veida stuff. Nosacījumiem, tad ir, ja cits paziņojumi. Es atceros, ka jums nevar būt cits bez atbilstošo ja. Tāpat jūs nevarat būt cits, ja bez atbilstošo ja. Cilpas, atceramies 3 veidu cilpu mēs esam kalšanai uz jums par pēdējo pāris nodaļās un problēmu kopas. Lietojot šo izstrādājumu, bet kad jūs saņemat lietotāja ievadi, Izmantojot bet cilpas līdz konkrētam nosacījumam ir taisnība, un tad, izmantojot tos uz cilpas, ja jums ir nepieciešams, lai zināt, kura atkārtojuma no cilpas jūs šobrīd ir, kā es domāju par to. Vai, ja jūs darāt katru rakstzīmi virknē es gribu kaut ko darīt, katram elementam masīvs es gribu kaut ko darīt, lai šo elementu. Pavedieni un notikumi. Tie mums nav ietvertas tik skaidri C, bet jāatceras tas no nulles. Tas ir jēdziens, kam ir dažādas skriptus. Tas ir arī šis jēdziens apraides notikumu. Daži cilvēki neizmantoja raidīt savos projektos sākotnēji, kas ir pilnīgi atdzist, bet tie ir 2 dažādas apstrādes metodes šo lielāku jautājumu veidi sauc laiksakritība, kas ir, kā jūs saņemsiet programmas izpildīt vai šķietami izpildīt tajā pašā laikā? Dažādi uzdevumi darbojas, kamēr citi uzdevumi ir arī darbojas. Tas ir kā jūsu operētājsistēma, šķiet, darbojas. Tas ir iemesls, kāpēc kaut gan, piemēram, Man mans pārlūks darbojas, es varētu arī ieslēgt Spotify un atskaņotu dziesmu. Tas ir vairāk par konceptuāla lieta, lai saprastu. Es to apskatīt diegiem īsiem ja jūs vēlaties uzzināt vairāk par to. Let 's redzēt, es uzskatu, ka varētu būt problēma par šo vienā no tiem. Atkal, es domāju diegi un notikumi nav kaut kas mums segs C tikai tāpēc, ka tas ir daudz grūtāk nekā jauna. Jums nav jāuztraucas par to tur, bet noteikti saprast jēdzienus, saprast, kas notiek. Pirms mēs virzāmies tālāk, kādi jautājumi par nedēļā 0 materiāls? Ikviens sajūta diezgan labs? Izpratne mainīgie un ko mainīgais ir? Pārvietojas on. Nedēļu 1. Pāris lietas šeit nav īpaši ietvertas ar viktorīnu pārskatā obligāti un arī ir vairāk konceptuālas lietas, kas domā par. Pirmais ir šis jēdziens, ko pirmkoda, sastādītāji un objekta kodu ir. Kāds? Baziliks. Vai objekta kodu, es domāju pirmkods ir tas, ko jūs laist šķindēt, un objekta kodu ir tas šķindoņa liek veic, lai jūsu dators var nolasīt programmu. Tieši tā. Pirmkods ir C kods, ka jūs faktiski rakstīt uz augšu. Objekta kodu ir tas, ko jūs saņemsiet no šķindēt. Tas 0s un 1s šajā binārā formātā. Tad kas notiek, ir, ja jums ir ķekars objekta failu, say jūs apkopojot projektu vai programmu, kas izmanto vairākus pirmkods failus, ko pēc vienošanās dota. c faila paplašinājums. Tieši tāpēc mums ir caesar.c, vigenère.c. Ja jūs esat rakstiski Java programmas jums dot viņiem pagarinājumu. Java. Python programmās ir paplašinājums py bieži.. Kad jums ir vairākas. C failus, jūs apkopošanai. Šķindēt atklepo visu šo bināro junk. Tad jo jūs tikai vēlaties 1 programma Jums ir linker saikne visu šo objektu failus kopā stāšanās 1 izpildāmo failu. Tas ir arī tas, kas notiek, ja jūs izmantojat CS50 bibliotēku, piemēram. CS50 bibliotēka ir gan tā. H header failu izlasīt, ka # includecs50.h. Un tad tas ir arī īpašs bināro bibliotēkas fails kas ir apkopota kas ir 0s un 1s, un ka-l ​​karogs, tāpēc, ja mēs ejam atpakaļ uz mūsu telpām un mēs izskatās tiešām ātri Uz ko šeit notiek, kad mēs skatāmies uz mūsu šķindēt komandu, ko mēs esam ieguvuši, ir tas mūsu avots kods failu tieši šeit. Tie ir ķekars kompilators karogiem. Un tad pašās beigās, šie-L karogi saite faktiskie bināro failus šiem 2 bibliotēkām, CS50 bibliotēku un pēc tam matemātikas bibliotēka. Izpratne katra veida failiem "mērķi apkopošanā procesā ir kaut kas jūs vēlaties, lai varētu sniegt vismaz augsta līmeņa pārskatu par. Kods ir iekšā Mērķa kods nāk ārā. Objekta kodu failus saistīt kopā, un jūs saņemsiet skaistu, izpildāmo failu. Atdzist. Tas ir arī tad, ja jūs varat saņemt kļūdas pie vairākiem punktiem jo datu apkopošanas procesa. Tas ir, ja, piemēram, ja jūs lietojat šo saistot karogu, CS50 karogu, un jūs izlaist to telpās vai, ja jūs strādājat savu kodu, Tas ir, ja jūs saņemsiet kļūdu saistot posmā, un Linker teiks: "Hei, tu sauc funkciju GetString kas ir kas CS50 bibliotēkā. " "Tu man teica, tas bija CS50 bibliotēkā, un es nevaru atrast kodu par to." Tas ir, ja jums ir saistīt to, un tas ir atsevišķs no kompilatora kļūdu, jo kompilators meklē sintaksi un ka stuff veida. Tas ir labi zināt, kas notiek, kad. Citas lietas, kas jāzina par. Es teiktu, ka jums noteikti vēlaties veikt apskatīt uz typecasting īsā izdarīt Jordānija lai saprastu, ko Ints ir saskaņā ar kapuci, kādi simboli ir saskaņā ar kapuci. Kad mēs runājam par ASCII un mēs patiešām apskatīt ASCII tabulu, ko tas dara dod mums ar kapuci izskatu pie kā dators patiešām pārstāv kapitālu un ciparu 7 un komats, un jautājuma zīme. Dators ir arī īpašas veidus pārstāv skaits 7 kā veselums. Tā ir īpašā veidā pārstāvēt numuru 7 kā peldošo punktu skaitu, un tie ir ļoti atšķirīgi. Typecasting ir, kā jūs pateikt dators "Hei, es gribu, lai jūs pārvērst no vienas pārstāvniecības uz citu pārstāvību. " Kāpēc nav mēs to apskatīt to. Es arī to apskatīt īsā bibliotēkām un par kompilatoru īss. Tiem runāt par procesu, apkopošanai, kāda bibliotēka ir, un iet pār daži no šiem jautājumiem, ka jūs varētu saņemt lūdza. Jautājumi par Nedēļu 1 materiāls? Vai ir kādi šeit tēmas, kas šķietami biedējošu vēlaties, lai segtu? Es cenšos, lai trieciens pa lielāko daļu no šīs iepriekšējās tēmas, lai mēs varētu nokļūt norādes un darīt mazliet recursion. Domas? Jebkas, lai segtu? Laiks dažiem šokolādes varbūt? Jūs puiši strādā caur to. Es esmu gatavojas glabāt dzer uz manu kafiju. Nedēļa 2. Labs zvanu, labi zvanu. Jo nedēļa 2 Mēs runājām mazliet vairāk par funkcijām. Dažos pirmajos problēma komplektiem mēs neesam īsti rakstīt kādas funkcijas vispār izņemot kura funkcija? [Studentu] Galvenā >> Mainas., Tieši tā. Un tāpēc mēs esam redzējuši dažādus tērpus, ka galvenais nodilst. Tur, kurā tas aizņem nav argumentu, un mēs tikai teikt tukšumu starp iekavās, un tad tur ir otrs, kur mēs gribam, lai komandrindas argumentus, un kā mēs redzējām, ka tur jums ir int argc un stīgu argv masīvs vai tagad, ka mēs esam faktiski pakļauti stīgu būt char *, ka tā ir mēs ejam, lai sāktu rakstīt to kā char * argv un tad iekavās. Problemātiskajās Set 3, jūs puiši redzēja ķekars funkcijas, un tu īsteno ķekars funkcijas, zīmēt, meklēt, motokross. Prototipi visi bija rakstīts tur jums. Ko es gribēju runāt par šeit ar funkcijām tiešām ātri ir, ka ir 3 daļas, lai viņiem, ja jums uzrakstīt funkciju. Jums ir jānorāda atgriešanās veidu funkcijas. Jums ir jānorāda nosaukumu funkcijas, un tad jums ir jānorāda arguments sarakstu vai parametru saraksts. Piemēram, ja man bija uzrakstīt funkciju Apkopojot ķekars integers un pēc tam atgriezties pie manis summu, kāds būtu mans atgriešanās tips ja es gribēju, lai apkopotu integers un pēc tam atgriezties summu? Tad vārds funkcijas. Ja es iet uz priekšu un rakstīt zaļā krāsā, šī daļa ir atgriešanās tips. Šī daļa ir nosaukums. Un tad iekavās ir, ja es dotu argumentus, bieži saīsināti args, dažreiz sauc params parametriem. Un, ja jums ir viens, jums vienkārši norādīt vienu. Ja jums ir vairākas jūs atsevišķi katrs ar komatu. Un par katru argumentu jūs arī tā 2 lietas, kas ir-Kevins? [Kevins] Jums ir sniegt veidu un tad nosaukumu. Un tad vārdu, un vārds ir vārds, ka jūs gatavojas izmantot atsaukties uz šo argumentu ietvaros summa funkciju, ietvaros funkciju, kas jūs pašlaik rakstāt. Jums nav, piemēram, ja es esmu gatavojas Rezumējot, saka, integers-we'll masīvs darīt int masīvu, un es došu sev dažus cirtaini bikšturi tur- tad, kad es iet masīvu funkciju SUM Man iet to pirmajā pozīcijā argumentu sarakstā. Bet masīvs, ka es iet uz nav jābūt vārdu arr. Arr būs kā es atsaucos uz šo argumentu, kas organismā funkciju. Otra lieta, ka mums ir jāņem vērā, un tas ir nedaudz atšķiras no funkcijām, bet es domāju, ka tas ir svarīgs punkts, ir tas, ka C, kad es esmu rakstot funkciju, kā šis Kā es varu zināt, cik daudz elementi šajā masīvā? Tas ir nedaudz par āķīgs jautājums. Mēs runājām par to mazliet pagājušās nedēļas sadaļā. Kā es varu zināt, cik elementu iekšpusē masīva C? Vai ir veids, kā? Izrādās, ka tur nav iespējams zināt. Jums ir nodot to atsevišķi. Ir triks, ka jūs varat darīt ja tu esi tajā pašā funkciju, kurai masīvs pasludināts, un jūs strādājat ar kaudze masīvs. Bet tas darbojas tikai tad, ja tu esi to pašu funkciju. Tiklīdz jūs iet masīvs uz citu funkciju vai ja esat deklarēta masīvs un jūs nodot šo masīvs uz kaudzes, kad esat izmantojis malloc  un ka stuff veida, tad visas derības tiek off. Tad jums tiešām ir iet apkārt īpašs arguments vai citu parametru stāsta jums, cik liels masīvs ir. Šajā gadījumā, es gribu izmantot komatu I'm sorry, tas būs pie ekrāna šeit- un es gribētu iet citā arguments  un to sauc par int len ​​par garumu. Viena lieta, kas varētu nākt klajā uz viktorīnas tev jautā rakstīt vai izpildīt noteiktu funkciju sauc kaut. Ja mums nav jums prototips, tāpēc šis viss šeit, tas viss haoss sauc funkciju deklarāciju vai funkciju prototips, šis ir viens no pirmajām lietām, kas jūs vēlaties, lai aiznaglot ja tas nav dots Jums uzreiz uz viktorīnas. Otra triks es esam iemācījušies, ka saka mēs jums prototips funkciju, un mēs sakām, "Hei, tev rakstīt to." Iekšpusē cirtaini bikšturi, kas jums ir uz viktorīnas ja pamanāt, ka ir atgriešanās tips un jūs ievērosiet, ka atgriešanās tips ir kaut kas nav tukšums, kas nozīmē, ka funkcija neatgriežas neko, tad viena lieta, jūs noteikti vēlaties darīt, ir rakstīt kaut kādas atgriešanās paziņojumu pašās beigās funkcija. Atgriešanās, un šajā gadījumā mēs ielieciet tukšu, jo mēs vēlamies, lai aizpildītu tukšās. Bet tas izpaužas jums domāt pareizajā veidā par to, kā man iet, lai pieeja šo problēmu? Un tas jums atgādina jums nāksies atgriezties vērtību zvanītājam funkciju. Yeah >> [Studentu]. Vai stils piemēro tad, kad mēs rakstiski kodu uz viktorīnas? Piemēram, atkāpes un ka stuff veida >> [Studentu]? Jā. Nē, nav tik daudz. Es domāju par-daudz tas ir kaut mēs izskaidrot par viktorīnas dienā, bet parasti neuztraucoties par # ietver un šāda veida stuff, tas ir sava veida ārpuses. [Studentu] Vai jums ir nepieciešams, lai komentētu jūsu rokraksta kodu? Vai jums ir nepieciešams, lai komentētu jūsu rokraksta kodu? Komentējot vienmēr ir labi, ja jūs uztrauc daļēju kredīta vai jūs vēlaties, lai sazinātos savu nodomu uz greiders. Bet es atkal būs noskaidrot uz viktorīnas sevi un uz viktorīnu dienu, bet es neticu, ka jums būs nepieciešams, lai rakstītu komentārus, nē. Parasti nav, bet tas noteikti veida lieta, kur Jūs varat sazināties savu nodomu, piemēram, "Hei, tas ir, ja es esmu, kas ar to." Un dažreiz, ka var palīdzēt ar daļēju kredīta. Atdzist. Baziliks. [Baziliks] Kāda ir atšķirība starp paziņojot, teiksim, Int lang atšķirība no argumentiem vai parametriem, salīdzinot deklarējot maināma funkciju? Wow, kafija nogāja balsene. [Baziliks] Tāpat kuras lietas mēs vēlamies īstenot argumentiem. Jā, tas ir liels jautājums. Kā jūs izvēlaties, ko lietas jūs vēlaties, lai no argumentiem pret ko lietas, jums vajadzētu darīt iekšpusē funkciju? Šajā gadījumā mēs iekļauta gan no šiem, kā argumentu tāpēc, ka viņi kaut ka tas, kurš gatavojas izmantot summēšanas funkciju nepieciešams precizēt šīs lietas. Summa funkcija, tāpat kā mēs runājām, ir nekādi nevar zināt cik liels masīvs ir tas izpaužas no tā zvanītājam vai kurš izmanto summēšanas funkciju. Tā ir nekādi nevar zināt, cik liels masīvs. Iemesls mums iet šajā garumā šeit kā argumentu ir tāpēc, ka tas ir kaut kas mēs būtībā stāsta zvanītāju par funkciju, kurš gatavojas izmantot summēšanas funkciju, "Hei, ne tikai jums ir, lai dotu mums masīvs gada Ints, jums ir arī, lai pastāstītu mums, cik liels masīvs, ka jūs esat dota mums ir. " [Baziliks] Tie būs gan komandrindas argumentus? Nē, tie ir faktiskie argumenti, ka jūs varētu iet uz funkciju. Ļaujiet man darīt jaunu lapu šeit. [Baziliks] Tāpat nosaukumu, kas iet- [Nate H.] Ja man ir int galvenais (spēkā neesošs), un es esmu gatavojas nodot manā atpakaļ 0 leju šeit apakšā, un teikt, es gribu, lai izsauktu summēšanas funkciju. Es gribu teikt, int x = summa (); Lai izmantotu summēšanas funkciju man iet gan masīvā, ka es gribu, lai apkopotu un masīva garumu, tāpēc šī ir vieta, kur pieņemot Man bija masīvs Ints, say Man bija int numbaz [] = 1, 2, 3, veida izmantošanu, kas ielauzies līdz sintaksi labi tur, tad ko es varētu darīt, ir summas es gribētu iet uz gan numbaz un numuru 3 pateikt summēšanas funkciju "Labi, šeit ir masīvs es gribu, lai jūs summa." "Lūk tā lielumu." Vai ir jēga? Vai tas atbildētu uz jūsu jautājumu? Daudzos veidos tas paralēli ko mēs darām ar galveno kad mums ir komandrindas argumentus. Piemēram Cēzara šifra programma, piemēram, tās, kas vajadzīgas komandrindas argumenti nevarētu darīt neko. Tas nevar zināt, kā šifrētu ja Jums nav pateikt to, ko taustiņu, lai izmantotu vai, ja jums nav pateikt to, ko stīgu vēlaties šifrēt. Pamudinot ievadi, tas ir, ja mēs esam ieguvuši 2 dažādus mehānismus lai veiktu ieguldījumu no lietotāja, lai veiktu informāciju no lietotāja. Par Problēma Set 1 mēs redzējām šo GetInt, GetString, GetFloat ceļu gada pamudinot ievadi, un ka sauc izmantojot standarta ievades plūsma. Tas ir nedaudz atšķirīgs. Tas ir kaut kas jūs varat darīt vienā reizē, nevis kad jūs izmantot programmu, kad jūs sākat programma darbojas. Komandrindas argumenti visi tiek norādīts, kad jūs sākat programma darbojas. Mēs esam sajaucot divus no tiem. Kad mēs izmantojam argumentus, lai funkciju, tas ir daudz, piemēram, komandrindas argumentu galvenais. Tas ir, kad jūs atsaucaties uz funkciju, jums pateikt to ko tas īsti nepieciešams, lai veiktu savus uzdevumus. Vēl viena laba lieta, lai apskatīt un es jums apskatīt to savā brīvajā laikā, un tas bija klāts ar viktorīnā-bija šis jēdziens jomas un vietējās mainīgie salīdzinot globālo mainīgo. Vai pievērst uzmanību to. Tagad, ka mēs esam nonākuši pie šīs citas lietas, 3 nedēļu mēs sākām runāt par meklēšanu un kārtošanu. Meklēšanu un kārtošanu, vismaz CS50, ir ļoti daudz ievads daži no vairāk teorētisko daļu datorzinātnes. Problēma ir meklējumu, problēma šķirošanas ir lieli, kanoniskā problēmas. Kā jūs atrast konkrētu skaitli masīva miljardu integers? Kā jūs atrast konkrētu vārdu iekšā tālruņu grāmatas kas ir saglabāti uz jūsu klēpjdators? Un tā mēs ieviest šo jēdzienu asimptotiskās jaunākas reizes lai tiešām kvantitatīvi cik ilgi, cik grūti tie problēma ir, cik ilgi tās veic, lai atrisinātu. Jo, es uzskatu, 2011 s viktorīnā tur problēma, ka es domāju nopelni aptver ļoti ātri, kas tas ir viens, problēma 12. O nē, tas ir Omega. Šeit mēs runājam par ātrāko iespējamo darbības laiku par īpašu algoritmu, un tad vislēnākais iespējams palaist laiks. Tas Omega un O ir tiešām tikai īsceļus. Viņi notational īsceļus, lai sakot cik ātri iespējami labākajā gadījumā būs mūsu algoritms palaist, un cik lēni sliktākā iespējamā lietas būs mūsu algoritms palaist? Darīsim pāris no tiem, un tie ietvēra arī kas īsā asimptotiskās notācijas, kuru es ļoti ieteiktu. Džeksons bija patiešām labu darbu. Ar bināro meklēšanu, mēs runājam par bināro meklēšanu kā ir algoritms, un mēs parasti runājam par to saistībā ar tās lielo O. Kas ir liels O? Kas ir vislēnākais iespējams palaist laiks binārā meklēt? [Studentu] N ²? Tuvu, es domāju līdzīgi kā. Tas daudz ātrāk nekā. [Studentu] binārā >> Jā?, Binārā meklēšana. [Studentu] Tas log n. Log n, lai ko tas log n nozīmē? Tā pusītes to katru atkārtojuma. Tieši tā, tāpēc, vislēnāko iespējamo lietas, teikt, ja jums ir sakārtoti masīvs gada miljons integers un skaitli jūs meklējat ir vai nu ļoti pirmais elements masīva vai ļoti pēdējais elements masīvā. Atcerieties, ka bināro meklēšanas algoritms darbojas, skatoties vidējā elementa, redzēt, ja tas ir spēles, ka jūs meklējat. Ja tā ir, tad liels, jums atrast to. Iespējami labākajā gadījumā, cik ātri tas bināro meklēšanas palaist? [Studentiem] 1. 1, tas ir nemainīgs laiks, Big O gada 1. Yeah. [Studentu] Man ir jautājums. Kad jūs sakāt log n, tu domā attiecībā uz 2 bāzes, labi? Jā, tā ka ir cita lieta. Mēs sakām log n, un es domāju, kad es biju vidusskolā Es vienmēr pieņemts, ka žurnāls bija bāze 10. Jā, tāpēc, jā, piesakieties bāze 2 parasti ir tas, ko mēs izmantojam. Atkal dodas atpakaļ uz bināro meklēšanu, ja jūs meklējat vai nu pie pašām beigām elements vai pašā sākumā elements, jo jūs sākat vidū, un tad jums atbrīvoties kurš puse nav jāatbilst kritērijiem, kas jūs meklējat, un doties uz nākamo pusē un nākamā pusgada un nākamā pusgada. Ja es esmu meklē lielāko elementu miljonu skaitlim masīvs Es esmu gatavojas uz pusi to visvairāk žurnālu 1 miljons reižu pirms es beidzot izmēģināt un redzēt, ka elements es meklēju ir lielākais vai augstākajā indeksu masīva, un ka būs žurnālu no n, piesakieties 1 miljons reižu. Burbulis šķirot. Vai jūs guys atcerēties burbulis kārtošanas algoritmu? Kevin, jūs varat sniegt man ātri Atgādinājums par to, kas notika burbuļa kārtošanas algoritmu? [Kevins] Būtībā tas iet cauri visam sarakstā. Tas izskatās pēc pirmajiem diviem. Ja pirmais ir lielāks par otru tas mijmaiņas darījumi viņiem. Tad tā salīdzina otro un trešo, pašu, mijmaiņas darījumiem, trešais un ceturtais, visu ceļu uz leju. Lielāks skaits būs sekot līdz gada beigām. Un pēc tomēr daudziem cilpas esat pabeidzis. Tieši tā, lai to, ko Kevins teica, ka mēs skatīties lielākas numurus burbulis līdz beigām masīva. Piemēram, jūs prātā ejot mums, izmantojot šo piemēru, ja tas ir mūsu masīvs? [Kevins] Jūs ņemšu 2 un 3. 3 ir lielāks par 2, lai jūs mijmaiņas tiem. [Nate H.] tiesības, tāpēc mēs swap šiem, un lai mēs iegūtu 2, 3, 6, 4, 9 un. [Kevin] Tad jūs salīdzināt 3 un 6. 3 ir mazāks par 6, lai jūs atstāt tos, un 6 un 4, jūs mijmaiņas tiem, jo ​​4 ir mazāks par 6. [Nate H.] labo, tāpēc man 2, 3, 4, 6, 9. [Kevins] un 9 ir lielāks par 6, lai jūs atstāt to. Un jūs gribētu iet atpakaļ caur to vēlreiz. [Nate H.] Man darīts šajā brīdī? >> [Kevins] Nē Un kāpēc man nav darīts šajā brīdī? Jo tas izskatās mans masīvs ir sakārtots. Es skatos uz to. [Kevins] iet caur to vēlreiz un pārliecinieties, ka ir ne vairāk mijmaiņas darījumi Pirms jūs varat pilnībā apstāties. Tieši tā, tāpēc jums ir nepieciešams, lai saglabātu dodas cauri un pārliecinieties, ka nav mijmaiņas darījumi ka jūs varat veikt šajā brīdī. Tas bija tiešām tikai laimīgs, tāpat kā jūs teicāt, ka mēs nonācām tikai ņemot, lai 1 cauri un mēs esam sakārtoti. Bet, lai to izdarītu vispārējā gadījumā mēs tiešām tas ir jādara atkal un atkal. Un patiesībā, tas bija piemērs par labāko iespējamo lietas, tāpat mēs redzējām problēmu. Mēs redzējām, ka vislabākā lieta tika n. Mēs devāmies cauri masīva 1 reizi. Kas ir vissliktākais iespējamais gadījums šo algoritmu? [Kevins] N ². Un ko tas izskatās? Kas būtu masīvs izskatās, ka būtu nepieciešams n ² laiku? [Kevins] [nedzirdamas] sakārtoti. Tieši tā, tāpēc, ja man bija masīva 9, 7, 6, 5, 2, 1. 9 būtu burbulis visu ceļu uz augšu. Pēc 1 atkārtojuma mēs ir 7, 6, 5, 2, 9. Tad 7 tiktu burbulis augšu, 6, 5, 2, 7, 9, un tā tālāk un tā tālāk. Mēs gribētu iet cauri visai masīvs n reizes, un jūs faktiski var iegūt mazliet precīzāki nekā šī jo, ja mēs esam pārvietots 9 visu ceļu līdz savā pēdējā iespējamā pozīcijā mēs zinām, ka mums nekad nebūs salīdzināt pret šo elementu vēlreiz. Kad mēs sākam burbuļošana no 7 līdz mēs zinām, ka mēs varam apturēt reiz 7 ir tiesības pirms 9 mēnešu jo mēs esam jau salīdzināja 9 uz to. Ja jūs darīt to smart veidā tas nav patiesi, es domāju, ka daudz laika. Jūs neesat gatavojas salīdzināt visus iespējamos [gandrīz nedzirdama] kombinācijas katru reizi, kad iet caur katru atkārtojuma. Bet tomēr, ja mēs runājam par šo augšējo robežu, mēs sakām, ka Jūs meklējat pie n ² salīdzinājumi visu ceļu caur. Iesim atpakaļ, un, jo mēs sākam saņemt mazliet īsā laikā Es teiktu, ka jums noteikti vajadzētu iet cauri pārējo šīs tabulas, aizpildīt to visu ārā. Padomājiet par piemēru. Domājiet par konkrētiem piemēriem. Tas ir patiešām ērts un noderīgs darīt. Izdarīt to ārā. Tas ir sava veida tabulas, kas, kā jūs iet cauri datorzinātnēs Jums vajadzētu tiešām sākt zināt šos no galvas. Šie ir veida jautājumiem jūs saņemsiet intervijās. Tie ir veidu lietas, kas ir labi zināt, un domāt par tiem malas gadījumos, tiešām norādītas, kā domāt par zinot, ka burbuļa kārtot sliktāko iespējamo masīvs kārtot ar to ir viens, kas ir apgrieztā secībā. Norādes. Parunāsim mazliet par norādes. Pēdējos pāris minūtēm mēs esam šeit Es zinu, tas ir kaut kas kopā ar failu I / O, kas ir samērā jauns. Kad mēs runājam par šautru iemeslu mēs vēlamies runāt par norādes ir tāpēc, viens, kad mēs strādājam C Mēs esam patiesi pie diezgan zemā līmenī, salīdzinot ar lielāko daļu mūsdienu programmēšanas valodām. Mēs esam patiešām spēj manipulēt mainīgos atmiņā, izdomāt, kur viņi faktiski atrodas mūsu RAM. Kad esat devies uz veikt operētājsistēmas nodarbības jūs redzēsiet ka tas ir, atkal, sava veida abstrakcija. Tas nav reāli gadījums. Mēs esam ieguvuši virtuālo atmiņu, kas slēpjas šīs detaļas no mums. Bet tagad jūs varat pieņemt, ka tad, kad jums ir programma, Piemēram, ja jūs sāktu rādīt savu Caesar šifra programma- Es pāriet atpakaļ uz manu iPad tiešām ātri- ka pašā sākumā savu programmu, ja jums ir, teiksim, 4 gigabaitu RAM uz jūsu klēpjdators, jums atcelt šo gabalu, un mēs to saucam par RAM. Un tas sākas vietā mēs ejam, lai izsauktu 0, un tas beidzas vieta, kas mēs saucam 4 gigabaitus. Es tiešām nevaru uzrakstīt. Vīrietis, kas ir hacked. Kad jūsu programma izpilda operētājsistēma carves RAM, un precizē dažādos segmentos dažādām daļām savu programmu dzīvošanai Noteikti šeit šajā jomā ir sava veida ne cilvēka zemes. Kad jūs iet uz augšu nedaudz tālāk šeit tev tiešām vieta, kur kods, lai jūsu programmā dzīvi. Ka faktiskais binārā koda, ka izpildāmais fails patiesībā izpaužas iekrauj atmiņā palaižot programmu, un tā dzīvo kodu segmentā. Un kā jūsu programma izpilda procesors aplūko šo kodu segmentā lai saprastu, kas ir nākamais instrukcija? Kas ir nākamais rindā kodu man ir nepieciešams, lai izpildītu? Pastāv arī datu segments, un tas ir, ja šie stīgu konstantes saņemt saglabāti, ka jūs esat, izmantojot. Un tad tālāk tur ir šī vieta sauc kaudze. Mēs piekļūtu atmiņas tur izmantojot malloc, un tad uz ļoti top jūsu programmā tur kaudze, un ka tur mēs esam spēlē par lielāko daļu no sākuma. Tas nav mērogā vai neko. Šīs partijas ir ļoti mašīna atkarīgs, operētājsistēmas atkarīgs, bet tas ir relatīvi, kā lietas iegūt chunked augšu. Palaižot programmu un jums paziņot mainīgo sauc x- Es esmu gatavojas izdarīt citu lodziņā zemāk, un tas būs RAM, kā arī. Un es esmu gatavojas skatīties. Mēs izdarīt robainas līnijas, lai norādītu tas ir tikai maza daļa no RAM un ne visi no tā, kā mēs izdarīt augšā. Ja es paziņot skaitlim mainīgo sauc x, tad ko es tiešām iegūt ir kartēšanas kas tiek glabāta simbolu tabulā manā programmā kas savieno nosaukums X šajā reģionā atmiņu ka es esmu sastādīts tepat starp vertikāliem stieņiem. Ja man ir līnijas kodu manā programmā, kas saka x = 7 procesors zina "Ak, labi, es zinu, ka x dzīvo šajā vietā atmiņā." "Es esmu gatavojas iet uz priekšu un rakstīt 7 tur." Kā tas zina, kādu atrašanās vietu šī ir atmiņā? Labi, ka viss ir darīts kompilēšanas laikā. Sastādītājs rūpējas par piešķirot kur katrs no mainīgajiem ir gatavojas iet un izveidot speciālu kartēšanu vai drīzāk savieno punktus starp simbolu un kur tas notiek, mainīgā vārds un ja tas notiek, lai dzīvotu atmiņā. Bet izrādās, ka mēs faktiski var piekļūt mūsu programmās, kā arī. Tas izpaužas svarīgi, ja mēs sākam runāt par kādu datu struktūras, kas ir jēdziens, ka mēs spēsim ieviest vēlāk. Bet tagad, ko jūs varat zināt, ka es varētu izveidot rādītāju uz šo vietu, x. Piemēram, es varētu izveidot rādītāju mainīgo. Kad mēs izveidot rādītāju mainīgo mēs izmantojam zvaigzne notācija. Šajā gadījumā, tas saka, ka es esmu gatavojas izveidot rādītāju uz int. Tas ir veids, tāpat kā jebkurš cits. Mēs arī tā mainīgo kā y, un tad mēs noteikti to vienāds ar adresi, uz kādu adresi. Šajā gadījumā, mēs varam noteikt y norādīt uz x ņemot adresi X, kas mēs ar šī zīme, un tad mēs noteikti y norādīt uz to. Ko tas būtībā dara, ir, ja mēs skatāmies uz mūsu RAM tas rada atsevišķu mainīgo. Tas notiek, lai izsauktu to y, un ja šī koda līnijas izpilda tas patiesībā notiek, lai radītu nelielu rādītāju, ko mēs parasti izdarīt kā bulta, un tas nosaka y norādīt uz x. Jā. [Studentu] Ja x ir jau rādītājs, jūs vienkārši darīt int * y = x, tā vietā & zīmi? Jā. Ja x ir jau rādītājs, tad jūs varat iestatīt 2 norādes vienāds ar otru, tādā gadījumā y neliecina x, bet tas norādīs uz kāda x ir vērsta uz. Diemžēl, mēs esam no laika. Ko es teiktu šajā brīdī, mēs varam runāt par šo bezsaistē, bet es teiktu sākt strādāt ar šo problēmu, # 14. Jūs varat redzēt tur jau nedaudz jāaizpilda par jums šeit. Jūs varat redzēt, ka tad, kad mēs paziņojam 2 norādes, int * x un y *, un atzīmē, ka norādot * blakus mainīgo bija kaut kas tika darīts pagājušajā gadā. Izrādās, ka tas ir līdzīgs tam, ko mēs darām šajā gadā. Tas nav svarīgi, kur tu rakstīt * Kad jūs deklarējot rādītāju. Bet mēs esam uzrakstījuši * blakus tipam jo tas padara to ļoti skaidri, ka jūs esat deklarējot rādītājs mainīgo. Jūs varat redzēt, ka deklarējot 2 norādes dod mums 2 kastes. Šeit, ja mēs noteikti x vienāds ar malloc ko tas saka, ir atcelt atmiņas kaudzes. Šī maz kaste tieši šeit, tas aplis, atrodas uz kaudzes. X ir vērsta uz to. Ievērojiet, ka y joprojām nav vērsta uz neko. Lai iegūtu atmiņu-saglabāt numuru 42 uz X mēs varētu izmantot to, ko notācija? [Studentu] * x = 42. Tieši tā, * x = 42. Tas nozīmē sekot bultiņas un iemest tur 42. Šeit, kur mēs noteikti y un x mēs esam y norādot uz x. Atkal, tas ir tāpat kā to, Kevins teica, kur mēs noteikti y vienāds ar x. Y nav vērsta uz x. Drīzāk, tas norāda uz to, x ir vērsta uz kā labi. Un tad beidzot šajā pēdējā ailē ir 2 iespējamie lietas, ko mēs varētu darīt. Viens no tiem ir, mēs varētu teikt * x = 13. Otra lieta ir, mēs varētu teikt-Aleksi, vai jūs zināt, ko mēs varētu darīt šeit? Jūs varētu teikt * x = 13 vai- [Studentu] Jūs varētu teikt int neatkarīgi. [Nate H.] Ja tas tika minēts kā int mainīgo mēs varētu darīt. Mēs varētu arī teikt * y = 13, jo viņi abi norādot uz to pašu vietu, lai mēs varētu izmantot vai nu mainīga tur nokļūt. Yeah >> [Studentu]. Ko tas izskatīsies, ja mēs vienkārši teikt int x ir 13? Tas būtu deklarējot jaunu mainīgo sauc x, kas nedarbojas. Mēs ir sadursmes, jo mēs paziņoja x būt rādītājs šeit. [Studentu] Ja mēs tikko bija šo paziņojumu ar sevi, ko tas izskatīsies ziņā apļa? Ja mums būtu x = 13, tad mēs ir kastē, un nevis ar bultiņu nāk no kastē mēs gribētu izdarīt tā kā tikai 13. [Studentu] lodziņā. Labi. Paldies, lai skatītos, un labu veiksmi 0 viktorīnā. [CS50.TV]