[Mūzikas atskaņošanai] [Video atskaņošana] -Viņš Guļ. -Par ko? -Es Nezinu. -Tātad Ko mēs zinām? -That At 9:15, Ray Santoya bija pie ATM. -Yeah. Tātad jautājums ir, ko viņš dara at 9:16? -Shooting Par 9 milimetru kaut ko. Varbūt viņš redzēja snaiperis. -OR Strādāja kopā ar viņu. -Wait. Iet atpakaļ viens. -Ko tu redzi? -Bring Viņa seju uz augšu visu ekrānu. -His Brilles. -Ir Ir atspulgs. -Tas Ir Nuevitas beisbola komanda. Tas ir viņu logo. -Un Viņš runā ar kurš ir valkājot, ka jaka. [Beigtu atskaņošanu] DAVID Malan: Labi. Tas ir CS50, un tas ir nedaudz vairāk no [dzirdams], ar kuru jūs esat dabbling ar problēmu noteikti četri. Šodien mēs sākam izskatīties mazliet vairāk dziļi pie šīm lietām, ko sauc norādes, kas, lai gan tas ir diezgan arcane tēmu, izrādās, ka tas notiek būt līdzeklis, ar kuru mēs var sākt veidot un montāža daudz sarežģītākus programmas. Bet mēs to izdarījām pagājušajā trešdienā veicot kādu Claymation pirmās. Tātad tas, atsaukšana, ir Mīkstās un mēs izmantojām viņu lai apskatīt programmu, kas nav īsti darīt kaut ko interesantu, bet tas bija atklāt dažas problēmas. Tātad, lai sāktu šodien, kāpēc nav mēs staigāt ātri cauri daži no šiem pasākumiem, mēģināt destilēt uz cilvēka izteiksmē tieši to, kas notiek šeit un kāpēc tas ir slikti, un tad pāriet uz un faktiski sākt veidot kaut ko ar šo metodi? Tātad tie bija pirmie divas līnijas šajā programmā un lajs izteiksmē, ko Vai šīs divas līnijas dara? Kāds, kurš ir pietiekami ērts ar to, kas norādīts uz ekrāna? Kādas ir šīs divas līnijas dara? Tas vēl nav viss, kas atšķiras no nedēļas viena, bet ir dažas jaunas īpašs simbols. Yeah? Atpakaļ tur. Mērķauditorija: deklarēšana norādes? DAVID Malan: Say atkal? Mērķauditorija: deklarēšana norādes? DAVID Malan: deklarēšana norādes un pieņemsim noslīpēt mazliet vairāk. Mērķauditorija: [dzirdams] adrese x un pēc tam y. DAVID Malan: Un tad risināt. Tātad, tieši to, ko mēs darām ir mēs deklarēt divus mainīgos. Šie mainīgie, lai gan, gatavojas būt int tipa zvaigzne, kas konkrētāk nozīmē viņi gatavojas glabāt adresi int, attiecīgi, x un y. Tagad ir vēl kādas vērtības? Vai ir kādas faktiskās adreses šajās divi mainīgie šajā brīdī? Nē. Tas ir tikai tā sauktais atkritumu vērtības. Ja jums nav faktiski piešķirt mainīgs, kāds bija RAM iepriekš gatavojas aizpildīt ar nullēm un tie abi no šiem mainīgajiem. Bet mēs vēl nezinām kādi tie ir, un tas ir būs galvenais, kāpēc mīkstās zaudējis galvu pagājušajā nedēļā. Tātad tas bija claymation iemiesojums šis saskaņā ar kuru jums ir tikai divas mainīgie, maz apļveida gabali māla, ka var saglabāt mainīgos, bet kā tad apkopoja bultas liecina, viņi nav faktiski norādot jebkur zināms per se. Tātad mums bija šo līniju, un tas bija jauns pagājušajā nedēļā, malloc atmiņu piešķiršana, kas ir tikai iedomātā veids stāsta operētājsistēmu, Linux vai Mac OS vai Windows, hey, dod man kādu atmiņu, un viss, kas jums ir, lai pastāstītu operētājsistēma ir tas, kas, kad jautā to atmiņu. Tas nav gatavojas aprūpi, ko jūs gatavojas darīt ar to, bet jums ir nepieciešams, lai pastāstītu par apkalpojošā Sistēma, ko veidā malloc. Yeah? Mērķauditorija: Cik daudz? DAVID Malan: Cik daudz? Cik daudz baitos, un tāpēc, tas, atkal, izdomāts piemērs, ir tikai saku, iedodiet man lielumu int. Tagad, izmērs int ir četri baiti vai 32 biti. Tātad tas ir tikai veids, kā sakot, hey, operētājsistēmas, iedodiet man četri baiti atmiņas ka es varu izmantot manā rīcībā, un konkrēti, ko dara malloc atgriešanās attiecībā šai rieciens četru baitu? Mērķauditorija: Adrese? DAVID Malan: norādīto adresi. Šīs rieciens četru baitu adrese. Tieši tā. Un tā tas ir to, kas glabājas galu galā X un tas ir iemesls, kāpēc mums nav īsti vienalga kāds skaits, kas adrese ir, vai tas ir OX1 vai ox2 vai kāds mistisks heksadecimālo adrese. Mēs vienkārši rūp gleznieciski ka mainīgais x ir tagad norādot uz šo rieciens atmiņas. Tātad bulta apzīmē rādītāju, vai konkrētāk, atmiņas adrese. Bet atkal, mums nav parasti aprūpi kādi ir šie faktiskie adreses. Tagad šī līnija saka ko lajs izteiksmē? Star x saņem 42 semikolu. Ko tas nozīmē? Jūs vēlaties doties? Vai nav ieskrāpēt savu kaklu. Mērķauditorija: No x adrese ir pie 42. DAVID Malan: No x adrese ir 42. Ne gluži. Tik tuvu, bet ne gluži, jo tur ir zvaigzne, kas ir prefixing šo x. Tāpēc mums ir nepieciešams, lai kniebiens mazliet. Yeah? Mērķauditorija: Vērtība, ka rādītājs x ir vērsta uz ir 42. DAVID Malan: OK. Vērtība, ka rādītājs ir x norādot uz, teiksim, ir 42, vai citiem vārdiem sakot, zvaigzne x saka, dodieties uz jebkādu adresi ir X, vai tas ir 1 Oxford Street vai 33 Oxford Street vai OX1 vai ox33, kāds ka ciparu adrese ir, zvaigžņu x ir dereferencing x. Tā iet uz šo adresi un tad ielieciet numuru 42 tur. Tā, ka būtu ekvivalents veids, kā pateikt, ka. Tā ka viss ir labi, un pēc tam mēs pārstāvam attēlu šādi kur mēs esam pievienojuši 42 uz šo rieciens četriem baiti uz labajā pusē, bet Šī līnija bija, kad viss gāja greizi un mīkstās galva popped off šajā brīdī, jo sliktas lietas notiek, kad Jūs dereference atkritumu vērtībām vai jūs dereference nederīgs norādes, un es saku nederīgs jo šajā brīdī Stāsts, kas ir iekšā y? Kas ir y vērtība balstās par pēdējo pāris soļus? Yeah? Kas tas ir? Mērķauditorija: adrese. DAVID Malan: An adrese. Būtu jābūt adrese bet es inicializēts to? Tāpēc man vēl nav. Tātad, kas ir zināms, ka tur? Tas ir tikai daži atkritumu vērtība. Tas varētu būt arī jebkura cita adrese, no nulles līdz 2 miljardi, ja jums ir divi gigs RAM, vai nulles līdz 4 miljardiem, ja esat ieguva četras gigabaiti RAM. Tas ir daži atkritumu vērtība, bet problēma ir ka operētājsistēmas, ja tas nav devis jums ka rieciens atmiņas, kas īpaši ka jūs mēģināt doties uz, tas parasti notiek, lai radītu ko mēs esam redzējuši, kā segmentācijas vaina. Tātad faktiski, kāds no jums, kuri ir cīnījās par problēmām darba laika vai problēmas, kas ir vairāk parasti ar mēģina izdomāt segmentācija vaina, tas parasti nozīmē, jūs pieskaroties segmentu atmiņu, kas jums nevajadzētu būt. Jūs esat pieskaroties atmiņa, kas operētājsistēma ir ne ļāva jums pieskarties, vai tas ir dodoties pārāk tālu savā masīvs vai jau šodien, vai tas ir tāpēc, ka jūs esat pieskaroties atmiņa, kas vienkārši ir daži atkritumu vērtība. To darot zvaigzne x šeit veida nenoteiktu uzvedību. Jums nekad nevajadzētu darīt, jo izredzes ir, programma ir tikai gatavojas crash, jo tu saki, dodieties uz šo adresi un jums nav ne jausmas, kur šī adrese faktiski ir. Tātad operētājsistēma ir iespējams gatavojas crash savu programmu kā rezultātā un, protams, tas ir kas noticis tur mīkstās. Tātad galu galā, mīkstās fiksēts šī problēma ar šo. Tātad šajā programmā pati bija kļūdains. Bet, ja jūs veida veidot uz priekšu un izpildīt šo līniju vietā, y vienāds x tikai nozīmē, neatkarīgi adrese ir x, arī nodot to y. Un tā gleznieciski, mēs esam pārstāvēta ar divām bultām no x un y no norādot tajā pašā vietā. Tātad semantiski, x ir vienāds uz y jo gan no tiem Uzglabājam pats adrese, ergo norādot 42, un tagad, kad jūs sakāt zvaigzne y, dodieties uz adresi y, Tas ir interesants blakus efekts. Tā adrese y ir pats kā adresi x. Tātad, ja jūs sakāt doties uz adresi Y un mainīt vērtību līdz 13, kurš gan cits ietekmē? X ir, D punktu, tā sakot, būtu jāietekmē arī. Un tiešām, kā Nick vērsa šo attēlu in Claymation bija tieši tā. Pat ja mēs sekojam rādītāju y, mēs beidzās vienā un tajā pašā vietā, un tāpēc, ja mēs drukāt out X vai Y ir pointee, tad mēs varētu redzēt vērtību 13. Tagad, es saku pointee būt saskan ar video. Programmētāji, lai mana zināšanas, nekad faktiski teikt vārdu pointee, to, kas ir norādīts at, bet konsekvences ar video, saprotam tas ir viss, kas bija nozīmēja šajā situācijā. Tātad kādi jautājumi par Claymation vai norādes vai malloc tikai vēl? Nē? Viss kārtībā. Tātad bez turpmāka ADO, pieņemsim to apskatīt at ja tas ir reāli ticis izmantots kādu laiku. Tāpēc mēs esam bija šo CS50 bibliotēku kas ir ieguvuši visas šīs funkcijas. Mēs esam izmantojuši GetInt daudz, GetString, Iespējams GetLongLong agrāk manā PSET vienu vai tā, bet Kas patiesībā ir notiek? Nu, pieņemsim ātri apskatīt zem motora pārsega pie programmas, kas iedvesmo kāpēc mēs jums CS50 bibliotēka, un pat kā pagājušajā nedēļā, mēs sākām veikt tiem mācību riteņi off. Tātad tas ir tagad sakārtots no sekciju, ko turpinās jau iekšpusē CS50 bibliotēkā, pat ja mēs tagad sāksim pārvietojas prom no tā, lai lielākā daļa programmu. Tātad šī ir programma, ko sauc scanf 0. Tas ir super īss. Tas vienkārši ir šīs rindas, bet tas ievieš funkciju sauc scanf ka mēs patiešām gatavojas redzēt brīdis iekšpusē CS50 bibliotēkā, kaut arī nedaudz citā formā. Tātad šī programma par 16 līniju tiek atzīta par mainīgo x. Tātad man četri baiti uz int. Tas ir bijis stāsta lietotājs, numuru, lūdzu, un pēc tam Tas ir interesants līnija, kas faktiski saites kopā pagājušajā nedēļā un šis. Scanf, un tad pamanāt, ka tas aizņem formāta virkne, tāpat kā printf, % i ir int, un tad tas aizņem Otrs arguments, kas izskatās mazliet bailīgs. Tas ir Ampersand x, un atgādināt, mēs redzējām tikai šo vienu reizi pagājušajā nedēļā. Kāda Ampersand x pārstāv? Kāda Ampersand darīt C? Yeah? Mērķauditorija: Par adrese. DAVID Malan: Par adrese. Tātad, tas ir pretējs no zvaigzne operatora, tā kā zvaigzne operators saka, dodieties uz šī adrese, tad Ampersand operators saka, izrēķināt adrese šo mainīgo, un tāpēc tas ir galvenais, jo scanf nolūks dzīvē ir, lai skenētu lietotāja ieeja no klaviatūras, atkarībā no tā, kāds viņš vai viņa veidiem, un pēc tam izlasīju, ka lietotāja ievadi uz mainīgo, taču mēs redzēja pēdējo divu nedēļu laikā ka mijmaiņas funkcija, kas mums mēģināja pūlēm īstenot bija tikai sadalīti. Atgādināt, ka ar mijmaiņas funkciju, ja mēs tikko paziņoja, A un B, kā ints, mums nebija veiksmīgi mijmaiņas divi mainīgie iekšpusē mijmaiņas tāpat kā ar pienu un OV, bet tiklīdz swap atgriezās, kāds bija rezultāts attiecībā uz x un y, sākotnējās vērtības? Nekas. Jā. Nekas nav noticis, ka laiks, jo mijmaiņas mainīt tikai savus vietējos kopijas, kas ir, visi šoreiz, kad mēs esam ir iet uz argumentiem uz funkcijām, mēs esam tikai iet kopijas šiem argumentiem. Jūs varat darīt ar to neatkarīgi vēlaties ar viņiem, bet viņi nāksies nē Ietekme uz sākotnējās vērtības. Tātad tas ir problemātiski, ja jums vēlas, lai ir funkcija, piemēram scanf dzīvē, kuras mērķis ir, lai skenētu lietotāja ievadi no klaviatūras un tad aizpildiet sagataves, tāpēc, lai runā, tas ir, dot mainīgo līdzīgi X vērtība, jo, ja es būtu lai tikai iet X scanf, ja jūs uzskatāt loģiku pēdējais nedēļa, scanf var darīt, ko vien tā vēlas kopiju, X, bet tas nevarēja pastāvīgi mainās x, ja mēs dodam scanf dārgumu karti, tā sakot, kur x iezīmē vietas, kur mēs caurlaide adresi x tā, ka scanf var iet tur un faktiski maiņa vērtība x. Un tā patiešām, visi ka šī programma nav ja es drīkstu scanf 0, manā avotā 5m katalogs, veikt scanf 0, dot slash scanf, skaits lūdzu 50, paldies par 50. Tātad, tas nav viss, kas interesanti, Bet kas ir patiešām notiek ir tā, ka, tiklīdz es aicinu scanf šeit, vērtību x tiek neatgriezeniski mainījusies. Tagad tas šķiet jauki un labs, un patiesībā, tas Šķiet, tāpat kā mums nav tiešām ir nepieciešams CS50 bibliotēka vispār vairs. Piemēram, pieņemsim palaist Tas vēlreiz šeit. Ļaujiet man atvērt to uz otru. Pamēģināsim numuru, lūdzu, un tā vietā, lai sakot, 50 kā agrāk, pieņemsim tikai teikt nē. Labi, ka ir mazliet dīvaini. LABI. Un tikai daži muļķības šeit. Tātad tas, šķiet, nav rīkoties kļūdainus situācijās. Tāpēc mums ir nepieciešams, lai minimāli sākumu pievienojot dažas kļūdām pārbaudi lai pārliecinātos, ka lietotājs ir drukāti faktisko skaitu, piemēram, 50, jo acīmredzot rakstīt vārdu netiek atpazīta kā problemātiska, bet tas, iespējams, vajadzētu būt. Apskatīsim šo versiju, tagad tas ir mans mēģinājums reimplement GetString. Ja scanf ir tas viss funkcionalitāte celta, kāpēc mēs tika dabbling ar šiem mācību riteņi piemēram GetString? Nu, šeit ir iespējams mana vienkāršs versija GetString saskaņā ar kuru pirms nedēļas, es varētu teikt, man stīgu un sauc to bufera. Šodien, es esmu gatavojas sākt tikai sakot char zvaigzne, kas, atsaukšanu, tas ir tikai sinonīms. Tas izskatās scarier bet tas ir tieši tas pats. Tātad man mainīgo sauc buferis kas notiek, lai saglabātu virkni, pateikt lietotāja virkni lūdzu, un tad, tāpat kā līdz šim, pamēģināsim aizņemties šo nodarbību scanf % s šoreiz un tad iet buferī. Tagad, ātri veselība pārbaudītu. Kādēļ es nesaku Ampersand bufera šoreiz? Secināt no iepriekšējā piemērā. Mērķauditorija: Char zvaigzne ir rādītājs. DAVID Malan: Tieši tā, jo šoreiz, palijas zvaigzne jau ir rādītājs, adrese, pēc definīcijas minētā zvaigzne ir tur. Un, ja scanf sagaida adresi, pietiek tikai nodot buferī. Man nevajag teikt aizvieto & zīmes buferi. Par ziņkārīgs, jūs varētu darīt kaut kas līdzīgs šim. Tas ir cita nozīme. Tas dotu jums rādītāju uz rādītāju, kas ir faktiski derīga lieta C, bet Tagad, pieņemsim glabā to vienkārši un uzturēt stāstu konsekventa. Es esmu tikai gatavojas pāriet bufera un tas ir pareizi. Problēma gan ir šis. Ļaujiet man iet uz priekšu un palaist šo Programma pēc apkopojot to. Padarīt scanf 1. Damn tas, mana kompilators s noķert manu kļūdu. Dodiet man vienu sekundi. Šķindēt. Teiksim scanf-1.c. LABI. Tur mēs ejam. Man to vajag. CS50 ID ir dažādi konfigurācijas uzstādījumi kas aizsargā jūs pret sevi. Man vajadzēja atslēgt tiem, ko darbojas šķindēt manuāli šoreiz. Tātad stīgu lūdzu. Es iešu uz priekšu un tips mana mīļākā Hello World. OK, null. Tas nav tas, ko es drukāti. Tātad, tas ir orientējošs kaut kas ir nepareizi. Ļaujiet man iet uz priekšu un tips kas patiešām ilgu virkni. Paldies par spēkā es nezinu ja es esmu gatavojas, lai varētu crash to. Pamēģināsim nedaudz kopiju pastas un redzēt, ja tas palīdz. Vienkārši ielīmējiet daudz šo. Tas noteikti ir lielāks stīgu nekā parasti. Pieņemsim tikai tiešām rakstīt to. Nē. Sasodīts. Komanda nav atrasts. Tātad tas ir nesaistīti. Tas ir tāpēc, ka es ielīmēts daži slikti rakstzīmes, bet tas izrādās nav dodas uz darbu. Mēģināsim to vēl vienu reizi, jo tas ir vairāk jautri, ja mēs faktiski crash to. Pieņemsim rakstīt šo un tagad, es esmu gatavojas kopēt patiešām ilgi virkni un tagad pieņemsim redzēt, ja mēs var crash šī lieta. Paziņojums Es izlaist telpas un Jaunās līnijas un semikoliem un visas funky rakstzīmes. Enter. Un tagad tīkls ir vienkārši ir lēns. Es tur nospiestu Ctrl-V ir pārāk garš, skaidri. Sasodīts! Komanda nav atrasts. LABI. Nu, jautājums ir tomēr šādi. Tātad, kas patiesībā notiek ar šo deklarāciju no char zvaigžņu bufera uz 16 līnijas? Tātad, ko es saņemu kad es apliecinu rādītāju? Viss, ko es saņemu ir četru baitu vērtība sauc buferis, bet to, kas ir iekšpusē no tā pašlaik? Tas ir tikai daži atkritumu vērtība. Tāpēc, ka jebkurā laikā jūs deklarēt mainīgo C, tas ir tikai daži atkritumu vērtība, un mēs sākam paklupt šo realitāti. Tagad, kad es saku scanf, dodieties uz šo adresi un nodot neatkarīgi lietotājs veidiem. Ja lietotājs veidiem sveiki pasaule, labi, kur es varu likt to? Buffer ir atkritumu vērtība. Tātad tas ir veids kā bulta kas ir norādot, kurš zina, kur. Varbūt tas ir norādot tepat manā atmiņā. Un tad, kad lietotājs veidi Hello pasaulē, Programma mēģina ielieciet stīgu hello world slīpsvītra 0 šajā rieciens atmiņas. Bet ar lielu varbūtību, bet protams, nav 100% varbūtība, dators gatavojas tad crash programma jo tas nav atmiņas man būtu atļauts pieskarties. Tātad īsumā, šī programma ir kļūdains un tieši šī iemesla dēļ. Es esmu pilnīgi nedara to, ko? Kādi pasākumi ir man izlaist, tāpat kā mēs izlaist ar mīkstās pirmo piemēru? Yeah? Mērķauditorija: Memory sadalījums? DAVID Malan: Atmiņas piešķiršana. Es neesmu faktiski piešķirti jebkurš atmiņas par šo virkni. Tātad, mēs varam noteikt šo pāris veidos. Viens, mēs varam saglabāt to vienkārši un patiesībā, tagad jūs esat gatavojas sākt, lai redzētu neskaidrākas no līnijas starp to, ko masīvs ir, ko virkne ir, ko char zvaigzne ir, ko masīvs chars ir. Lūk Otrs piemērs iesaistot stīgām un paziņojumu viss, ko es esmu darījusi tiešsaistē 16 ir, nevis sakot ka buferis būs char zvaigzne, rādītājs uz rieciens atmiņas, Es esmu gatavojas ļoti aktīvi dot pats buferis 16 rakstzīmes, un patiesībā, ja jūs esat iepazinušies ar terminu buferizācijas, droši vien no pasaules video, ja video ir buferizācijas, buferizācijas, buferizācijas. Nu, kāda ir saistība šeit? Nu, iekšpuse YouTube un iekšpusē video atskaņotāji parasti ir masīvs kas ir lielāks par 16. Tas varētu būt masīvs izmēra vienas megabaitu, varbūt 10 megabaiti, un uz šī masīvā dara savu pārlūkprogrammu lejupielādēt visu ķekars baitu, visu ķekars megabaitu video, un video atskaņotājs, YouTube ir vai kurš ir, sākas izlasot baiti no šī masīva, un jebkurā laikā jūs redzat Vārds buferizācijas, buferizācijas, tas nozīmē, ka spēlētājs ir gotten līdz gada beigām šī masīva. Tīkls ir tik lēni, ka tas ir ne uzpildīt masīvs ar vairāk baitu un tā jūs no bitiem lai parādītu lietotājam. Tātad buferis ir piemērots termins, šeit, ka tas ir tikai masīvs, rieciens atmiņas. Un tas būs salabot jo izrādās ka jūs varat ārstēt bloki, it kā tie ir adreses, lai gan buferis ir tikai simbols, tas ir rakstzīmju sekvence, buferis, tas ir noderīgs man, programmētājs, Jūs varat iet savu nosaukumu apkārt it kā tas būtu rādītājs, it kā tā bija adrese rieciens atmiņas par 16 chars. Tātad tas ir teikt, es varu iet scanf tieši šis vārds un tāpēc tagad, ja es drīkstu šo programmu, padarīt scanf 2, dot slīpsvītra scanf 2, un ierakstiet hello world, Ievadiet, ka LAIKU_ Hmm, kas notika? String lūdzu. Ko es daru nepareizi? Hello pasaulē, buferis. Sveika pasaule. Ah, es zinu, ko tas dara. LABI. Tātad, tas ir lasījums up līdz pirmajā telpā. Tātad pieņemsim apkrāptu tikai brīdi un teikt, es tikai gribēju kaut ko rakstīt tiešām ilgi, piemēram, tas ir garš teikums tas ir viens, divi, trīs, četri, pieci, seši, septiņi, astoņi, deviņi, 10, 11, 12, 13, 14, 15, 16. LABI. Tas ir patiešām garš teikums. Tātad šis teikums ir ilgāk nekā 16 rakstzīmes un tad, kad es hit Enter, kas notiek varētu notikt? Nu, šajā gadījumā stāsts, man bija deklarēta buferis faktiski ir masīvs ar 16 chars gatavi iet. Tātad, viens, divi, trīs, četri, pieciem, sešiem, septiņi, astoņi, deviņi, 10, 11, 12, 13, 14, 15, 16. Tātad 16 rakstzīmes, un tagad, kad es lasīt kaut kā šis ir garš teikums, kas notiek varētu notikt, ir ka es esmu gatavojas jālasa tas ir garš S-E-N-T-E-N-C-E, teikums. Tātad šis ir apzināti slikta lieta, ka es glabāt rakstveidā aiz robežas mana masīvs, ārpus robežām manu buferi. Es varētu saņemt laimīgs un programma turpināsim darbojas un ir vienalga, bet vispārīgi runājot, šis patiešām crash savu programmu, un tā ir kļūda manā kodēt mirkli es solis aiz robežām Minētās masīvs, jo I nezinu, vai tas ir vienmēr gatavojas crash vai ja es esmu tikai gatavojas saņemt laimīgs. Tātad tas ir problemātiski, jo šajā gadījumā, tas, šķiet, strādāt un pieņemsim kārdināt liktenis šeit, lai gan IDE, šķiet paciest diezgan daudz of-- Tur mēs ejam. Beidzot. Tāpēc es esmu vienīgais, kas var redzēt. Tāpēc es tikko bija daudz jautrības rakstīt out patiešām ilgu faktisko frāzi ka tas noteikti pārsniedza 16 baiti, jo I drukāti šajā trakajā ilgi multi-line frāze, un tad pamanīt to, kas noticis. Programma izmēģināju drukāšana un tad saņēmu segmentāciju vaina un segmentācijas kļūdas ir tad, kad kaut kā tas notiek un operētājsistēma saka nē, nevar pieskarties šo atmiņu. Mēs ejam, lai nogalinātu Programma kopumā. Tātad tas šķiet problemātiska. Es esmu uzlabojis programmā, kurā vismaz ir dažas atmiņas, bet tas, šķiet, vienīgi funkcija GetString, lai iegūtu virknes kādu ierobežotu garumu 16. Tātad, ja jūs vēlaties, lai atbalstītu ilgāk teikumi nekā 16 rakstzīmes, ko tu dari? Nu, jūs varat palielināt izmērs šo buferi līdz 32. vai kas šķiet veida īss. Kāpēc ne mēs tikai veikt tas 1000, bet virzīt atpakaļ. Kāda ir atbilde intuitīvi par tikko izvairoties no šo problēmu, padarot mans buferis lielāks, piemēram, 1000 chars? Īstenojot GetString šādā veidā. Kas ir labi vai slikti šeit? Yeah? Mērķauditorija: Ja jūs saistīt pat daudz vietas un jums nav to izmantot, tad jūs nevarat pārdalīt šo vietu. DAVID Malan: Protams. Tas ir izšķērdīgs, ciktāl, ja jums nav tiešām ir nepieciešams 900 no šiem baitu un tomēr jūs lūdzot 1000 kopā anyway, jūs vienkārši patērē vairāk atmiņas par lietotāja datorā, nekā jums nepieciešams, un galu galā, daži jūs jau esat saskārušās dzīvē, ka tad, kad jūs esat darbojas daudz programmas un viņi ēd up daudz atmiņu, Tas faktiski var ietekmēt veiktspēju un lietotāja pieredze uz datora. Tātad tas ir sava veida slinks risinājums, lai pārliecinātos, un otrādi, tas nav tikai izšķērdīgs, kāda problēma joprojām, pat ja es darīt manu buferi 1000? Yeah? Mērķauditorija: virkne ir garums 1001. DAVID Malan: Tieši tā. Ja jūsu virkne ir garums 1001, Jums ir tieši tāda pati problēma, un mans arguments, es tikai tad dara to 2000, bet jūs nezināt, kas pārietu cik liels tas būtu, un vēl, man ir apkopot savu programmu pirms izīrēšanas cilvēki izmanto un lejuplādēt tā. Tātad tas ir tieši tāda veida sīkumi, ka CS50 bibliotēku mēģina lai palīdzētu mums ar, un mēs tikai skatiens dažas no pamatā esošā īstenošanu šeit, bet tas ir CS50 dot C. Tas ir fails, kas ir bijis par CS50 IDE Visas šīs nedēļas, kas jūs esat, izmantojot. Tas ir iepriekš apkopoti un jūs esat bijis, izmantojot to automātiski pēc būtības kam ir domuzīme L CS50 karogu ar šķindēt, bet, ja es ritiniet uz leju cauri visiem šīs funkcijas, šeit ir GetString, un tikai, lai dotu jums garša Kas notiek, pieņemsim ātri apskatīt relatīvā sarežģītība. Tas nav super garš funkcija, bet mēs neesam ir jādomā visu grūti par kā iet par iegūt stīgas. Tātad, šeit ir mana buferis un es acīmredzot inicializēt to null. Tas, protams, ir pats kā char zvaigzne, bet es nolēma Īstenojot CS50 bibliotēku ka, ja mēs ejam būt pilnīgi dinamiska, Es nezinu, iepriekš cik liels ir stīgu lietotājiem gatavojas vēlaties saņemt. Tāpēc es esmu gatavojas sākt tikai ar tukšu virkni un es esmu gatavojas izveidot tik daudz atmiņa kā man ir nepieciešams, lai ietilptu lietotāja string un ja man nav pietiekami, es esmu gatavojas lūgt operētājsistēma vairāk atmiņas. Es esmu gatavojas pārvietot savu string uz lielāku rieciens atmiņas un es esmu gatavojas atbrīvot vai atbrīvotu nepietiekami liels rieciens atmiņas un mēs esam tikai gatavojas lai to paveiktu iteratīvi. Tik ātrs skatiens, šeit ir tikai mainīga ar kuru es esmu gatavojas, lai sekotu kapacitātes mana bufera. Cik baiti var fit? Lūk mainīgs n ar kas es esmu gatavojas glabāt līdzi, cik baiti ir faktiski bufera vai ka lietotājs ir ievadījis. Ja jūs esat nav redzējis šo pirms, jums var norādīt, ka mainīgais, piemēram, int ir neparakstīts, kas, kā norāda nosaukums, nozīmē, ka tas ir ne-negatīvs, un kāpēc būtu Es kādreiz vēlaties apgrūtināt precizējot ka int ir ne tikai int, bet tas ir neparakstīts int? Tas ir ne-negatīvs int. Ko [dzirdams] nozīmē? Mērķauditorija: Tas apraksta summu atmiņas, kas var būt [nedzirdama]. DAVID Malan: Jā. Tātad, ja es saku neparakstīts, tas ir faktiski sniedzot jums vienu mazliet papildus atmiņas un šķiet, ka sava veida dumjš, bet, ja jums ir viena mazliet papildu atmiņas, ka nozīmē, ka jums ir divreiz vairāk vērtības var pārstāvēt, jo tas var būt 0 vai 1. Tātad pēc noklusējuma, int var būt aptuveni negatīvs 2 miljardi visu ceļu līdz pozitīvu 2 miljardiem. Tie ir lieli diapazoni, bet tas joprojām ir sava veida izšķērdīgs ja jūs tikai rūp izmēri, kas vienkārši intuitīvi vajadzētu būt ne-negatīvs vai pozitīvs vai 0, arī tad, kāpēc jūs izšķērdēt 2 miljardus iespējamās vērtības negatīviem skaitļiem ja jūs nekad gatavojas tās lietot? Tātad, sakot neparakstītu, tagad mans int var jābūt starp 0 un aptuveni 4 miljardus. Tātad, šeit ir tikai int C dēļ mums nebūs iekļuvuši tikai tagad, jo kāpēc tas ir int vietā no char, bet šeit ir kopsavilkums par to, kas notiek gada, un daži no jums varētu būt, izmantojot, piemēram, fgetc funkcija pat PSET četrās vai pēc tam, mēs redzēsim to atkal problēma noteikti pieci, fgetc ir jauki, jo kā nosaukums veida, veida arcanely liecina, tas ir funkcija, kas izpaužas raksturs un tā, kas ir būtiski atšķiras par to, ko mēs darām ar GetString ir, mēs nelietojat scanf tādā pašā veidā. Mēs esam tikai Ložņu gar soli pa solim vairāk nekā kāds lietotājs ir drukāti, jo mēs vienmēr varam piešķirt vienu char, un tāpēc mēs vienmēr varat droši apskatīt vienu char laikā, un burvju sāk notikt šeit. Es esmu gatavojas, lai ritinātu uz leju, lai vidū šīs funkcijas tikai īsumā iepazīstināt šo funkciju. Daudz, piemēram, tur ir malloc funkcija, tur ir realloc funkcija kur realloc ļauj jums pārdalīt rieciens atmiņas un dara to lielāks vai mazāks. Tik garš stāsts īss, un ar vilnis manu roku uz šodienu, zinu, ka tas, ko GetString dara tas ir sava veida no maģiski aug vai sarūk bufera kā lietotājs veidi viņa virkni. Tātad, ja lietotājs ievada Īsumā string, šis kods tikai piešķir pietiekami atmiņa, lai ietilptu virkni. Ja lietotājs tur rakstīt kā es to darīja atkal un atkal un atkal, labi, ja buferis ir sākotnēji šī lielā un programma saprot, lai pagaidiet minūti, es esmu no vietas, tas notiek dubultot lielums bufera un pēc tam divtik bufera un kods, kas dara divkāršošanu, ja mēs skatāmies uz to šeit, tas ir tikai šo gudrs viena līnijpārvadātāju. Jūs, iespējams, ir redzējuši šo sintaksi agrāk, bet, ja jūs sakāt zvaigzne ir vienāds, tas ir tas pats, kas sakot jaudas reizes 2. Tātad tas tikai tur divkāršojies ietilpība bufera un pēc tam stāsta realloc dot Pati, ka daudz vairāk atmiņas. Tagad, kā malā, tur ir citas funkcijas šeit ka mēs neizskatās jebkurā detalizēti izņemot rādīt GetInt, mēs izmantojam GetString in GetInt. Mēs pārbaudām, ka tas nav null, kas, atgādināt, ir īpaša vērtība, kas ir kaut kas nogāja greizi. Mēs esam no atmiņas. Labāk pārbaudīt, ka. Un mēs atgrieztu Sentinel vērtību. Bet es ņemšu atlikt uz komentāriem par to, kāpēc tad mēs izmantojam šo brālēns scanf sauc sscanf un izrādās ka sscanf, vai string scanf, ļauj jums apskatīt līnijas, kas lietotājs ir drukāti, un ļaut jums analizēt to būtībā un to, ko es esmu darot šeit es esmu stāsta sscanf, analizēt kāds lietotājs ir drukāti un pārliecinieties% i, ir vesels skaitlis, kas tajā, un mēs ne nokļūt šodien tieši tāpēc tur ir arī A% c šeit, bet īsumā pieļauj mums atklāt, ja lietotājs ir ievadījis kaut fiktīvu pēc skaita. Tātad iemesls tam, ka GetInt un GetString pateiks, lai mēģinātu vēlreiz, retry, retry ir tāpēc, ka visi ka kods mēs esam rakstīts, Tas ir sava veida apskatot lietotāja ievadi in pārliecinoties, ka tas ir pilnīgi ciparu vai tā ir faktiskā peldošā punkts vērtība vai tamlīdzīgi, Atkarībā no vērtības funkcionēt jūs izmantojat. Whew. LABI. Tas bija kumoss bet jautājums šeit ir ka iemesls mums bija šie apmācību riteņus ir tāpēc pēc iespējas zemākā līmenī, tur ir tikai tik daudz lietas, kas var noiet greizi, ka mēs vēlējāmies uz preemptively rīkoties šīs lietas noteikti ir Agrākais nedēļas šķiras, bet tagad ar PSET četriem un pieciem PSET un tālāk jūs redzēsiet, ka tas ir vairāk pie Jūs taču arī jūs esat vairāk spējīgs risināšanas šos veida problēmas yourself. Visus jautājumus par GetString vai GetInt? Yeah? Mērķauditorija: Kāpēc jūs dubultā ietilpība bufera nevis tikai palielinot tas ar precīzu summu? DAVID Malan: Labs jautājums. Kāpēc mēs dubultot jaudas no bufera pretstatā vienkārši palielinot to ar kādu konstantu vērtību? Tas bija dizaina lēmums. Mēs tikko nolēma, ka tāpēc, ka tai ir tendence būt nedaudz dārgāka laika gudrs jautāt operētājsistēma atmiņu, mēs neesam vēlaties, lai galu galā nokļūst situācija lieliem stīgām ka mēs jautāji OS atkal un atkal un atkal un atkal straujā atmiņu. Tāpēc mēs tikko nolēma, nedaudz patvaļīgi, bet mēs ceram, ka pamatoti, ka jūs zināt, ko, pieņemsim mēģināt iegūt priekšā sevi un tikai glabāt dubultojot tā, ka mēs samazinātu summu reizes mums ir, lai izsauktu malloc vai realloc, bet kopējais spriedums piezvanīt, ja nav zinot ko lietotāji varētu vēlēties rakstīt. Abi veidi varētu būt apstrīdams. Varbūt labi. Tātad, pieņemsim to apskatīt pāris Citu blakusparādības atmiņu, lietas, kas var noiet greizi un rīki, ko varat izmantot noķert šos kļūdām veidus. Izrādās, jums visiem, lai gan check50 nav teicis jums tik daudz, ir rakstot bagijs kods kopš nedēļas vienā, pat ja visi check50 testi pagājis, un pat tad, ja jūs un jūsu TF Ir super pārliecināti, ka Jūsu kods darbojas kā paredzēts. Jūsu kods ir buggy vai kļūdains, ka jums visiem, izmantošanā CS50 bibliotēku, Ir noplūde atmiņu. Jūs esat lūdzot operētājsistēmas atmiņu vairumā programmu jūs esat uzrakstījis, bet jūs esat nekad faktiski, ņemot vērā to atpakaļ. Jūs esat sauc GetString un GetInt un GetFloat, bet ar GetString, jūs esat nekad sauc unGetString vai dot String Atpakaļ vai tamlīdzīgi, bet mēs esam redzējuši ka GetString dara piešķirt atmiņu veidā malloc vai šī funkcija realloc, kas ir tikai ļoti līdzīgs garā, un vēl, mēs esam bijuši lūdzot operētājsistēmu atmiņa un atmiņas atkal un atkal bet nekad dod to atpakaļ. Tagad, kā malā, izrādās, ka kad programma tiek aizvērta, visi no atmiņas tiek automātiski atbrīvots. Tātad tas nav bijis milzīgs galā. Tas nav gatavojas, lai izjauktu IDE vai lēni lietas leju, Bet, kad programmas darīt parasti noplūde atmiņu un viņi darbojas uz ilgu laiku. Ja esat kādreiz redzējuši stulba Little pludmales bumba Mac OS vai smilšu pulksteņa Windows kur tas ir sava veida palēninot vai domāšana vai domāšana vai tikai tiešām sāk lēni uz rāpošana, tas ļoti iespējams, varētu būt rezultāts atmiņas noplūde. Programmētāji, kas rakstīja programmatūra jūs izmantojat lūgt operētājsistēma atmiņu ik pēc dažām minūtēm, katru stundu. Bet, ja jūs darbojas programmatūru, pat tad, ja tas ir minimāla savā datorā uz stundu vai dienu ilgi, Jums varētu būt jautā vairāk un vairāk atmiņu un nekad faktiski izmanto un tāpēc jūsu kods varētu būt, vai programmas var būt noplūde atmiņu, un, ja jūs sākat noplūdes atmiņu, tur ir mazāk atmiņas par citām programmām, un efekts ir lēni viss uz leju. Tagad, tas ir līdz šim viens no visnežēlīgākajiem programmas Jums būs iespējas palaist CS50 tiktāl kā tās produkcija ir pat vairāk nekā nesaprotams šķindēt s vai veikt vai jebkuras komandu line programmas mēs esam palaist agrāk, bet par laimi, iestrādāti tās produkciju ir daži super noderīgi padomi, kas būs noderīga nu PSET četru vai noteikti PSET pieci. Tātad Valgrind ir instruments kas var tikt izmantoti, lai meklētu atmiņas noplūdes jūsu programmā. Tas ir samērā vienkāršs, lai palaistu. Palaižot Valgrind un tad, pat lai gan tas ir nedaudz runīgs, domuzīme domuzīme noplūdes pārbaude vienāds pilna, un pēc tam dot slīpsvītra un nosaukumu jūsu programmā. Tātad Valgrind tad palaist savu programmu un pašās beigās savu programmu darbojas, pirms tas aizveras, un dod jums citu ātru, tas notiek, lai analizētu savu programma, bet tas ir bijis darbojas un pateikt jums jūs noplūde jebkurš atmiņa un vēl labāk, jūs pieskarties atmiņa, kas nepiederēja jums? To nevar panākt visu, bet tas ir diezgan labi iepatikusies visvairāk lietām. Tātad, šeit ir piemērs no manas nebūdami Šī programma, nebūdami Valgrind, par programmu, ko sauc atmiņa, un es esmu gatavojas izcelt līnijas, kas ir galu galā, kas interesē mūs. Tātad tur ir vēl vairāk traucējošos ka es esmu svītrots no slaida. Bet pieņemsim tikai redzēt, ko tas programma spēj stāsta mums. Tas spēj stāsta mums lietas tāpat nederīgu rakstīt izmēru 4. Citiem vārdiem sakot, ja jūs pieskarties atmiņu, konkrētāk 4 baiti atmiņas ka jums nevajadzētu būt, Valgrind var pateikt, ka. Nederīga rakstīt lieluma 4. Jūs pieskārās četri baiti ka jums nevajadzētu būt. Kur jūs to darīt? Tas ir skaistums. Atmiņas dot c līnija 21 ir vieta, kur jūs ieskrūvē up un tas ir iemesls, kāpēc tas ir noderīgi. Daudz, piemēram GDB, tas var palīdzēt norādīt jums faktisko kļūdu. Tagad, šis viens ir nedaudz vairāk runīgs, ja ne mulsinoši. 40 baiti 1 blokiem ir noteikti zaudēts zaudējumu ierakstā 1 no 1. Ko tas nozīmē? Nu, tas tikai nozīmē, ka jūs lūdza 40 baiti, un jūs nekad deva to atpakaļ. Tu sauc malloc vai jūs sauc GetString un operētājsistēmas deva jums 40 baiti, bet jūs nekad atbrīvots vai atbrīvo šo atmiņu, un lai būtu godīgi, mēs nekad parādīt jums, kā atdot atmiņu. Izrādās tur ir super vienkārša funkcija sauc bezmaksas. Stājas Viens arguments, lieta Jūs vēlaties, lai atbrīvotu vai atdot, bet 40 baiti, acīmredzot, šajā programmas ir pazuduši rindā 20 no atmiņas dot c. Tātad, pieņemsim redzēt šo programmu. Tas ir super bezjēdzīgi. Tas tikai pierāda, Tas īpaši kļūda. Tātad, pieņemsim to apskatīt. Šeit ir galvenās un galvenie, uzraksta, zvani funkcija sauc F un tad atgriežas. Tātad nav tik interesanti. Kāda f darīt? Ievērojiet, man nav apnikt ar prototipu. Es gribēju, lai saglabātu kodu pēc iespējas minimālas. Tāpēc man f iepriekš galvenais un tas ir jauki, protams, īsiem programmām, piemēram, šis. Tātad f neatgriežas neko, un tas neņem neko, bet tas to izdarītu. Tas apliecina, līdzīgi ar mīkstās piemēram, rādītājs sauc x, kas notiek uzglabāt adresi int. Tā ka ir kreisā puse. Angļu valodā, kas ir labajā pusē dara? Kāds? Kas ir tas dara mums? Yeah? Mērķauditorija: [dzirdams] reizes lielāka par int kas ir 10 reizes [nedzirdama] DAVID Malan: Labi un ļaujiet man apkopot. Tātad piešķirt pietiekami daudz vietas, 10 veseliem skaitļiem vai 10, kas ir lielums int, tas ir četri baiti, arī tā 10 reizes 4 ir 40, tā ka labajā pusē, kas es esmu iezīmēto ir dot man 40 baiti un uzglabātu adresi, kura pirmā baits uz x. Un tagad visbeidzot, un šeit ir, ja Šī programma ir buggy, kas ir nepareizi ar līniju 21 balstoties uz šo loģiku? Kas ir nepareizi ar līniju 21? Yeah? Mērķauditorija: Jūs nevarat indekss par x [nedzirdama]. DAVID Malan: Jā. Man nevajadzētu indekss par x, piemēram, ka. Tātad sintaktiski, tas ir OK. Kas ir jauki, ir, daudz, piemēram, jūs var ārstēt nosaukumu masīva it kā tas ir rādītājs, līdzīgi Jūs varat ārstēt rādītāju, it kā tas ir masīvs, un tāpēc es varu sintaktiski teikt x bracket kaut ko, x kronšteins i, bet 10 ir problemātiska. Kāpēc? Mērķauditorija: Tā tas nav iekšā. DAVID Malan: Tas nav iekšā, ka rieciens atmiņas. Kas ir lielākā vērtība man vajadzētu liekot tajās kvadrātiekavās? 9, no 0 līdz 9. Sakarā ar nulles indeksācija. Tātad 0 līdz 9 būtu labi. Bracket 10 nav laba un bet, atceros gan, katru reizi Man šķiet, lai mēģinātu padarīt CS50 IDE crash ierakstot viltus vērtībām, tas ne vienmēr sadarbojas, un, protams, jūs bieži saņemt laimīgs tikai tāpēc, ka operētājsistēma nav paziņojums, ka jūs kādreiz tik nedaudz iet kādu gabalu no atmiņas, jo jums palika laikā tehniski Jūsu segments, bet vairāk par to kādā operētājsistēmu klasē, un tā kaut kas līdzīgs šim varētu ļoti viegli iet neatklāti. Jūsu programmas nekad gatavojas crash konsekventi bet varbūt reizi awhile. Un tāpēc pamēģināsim Valgrind par to, un šeit ir kur mēs nokļūt overwhelmed ar izejas momentāni. Tātad, lai atmiņas Valgrind noplūdes pārbaudi vienāds pilnu dot slash atmiņu. Un šeit ir iemesls, kāpēc es apsolu tas varētu pārņemt. Lūk, ko Valgrind, lūk, ko programmētājs, dažus gadus ago- nolēma, ka būtu laba ideja par izejas izskatās. Tātad pieņemsim jēgas par to. Tātad visu ceļu no kreisās puses sānu nesaprotamu iemeslu dēļ ir process ID programmas mēs vienkārši palaist, unikālo identifikatoru programmai mēs vienkārši skrēja. Mēs svītrots, ka no slide, bet tur ir daži noderīgu informāciju šeit. Pieņemsim ritiniet līdz ļoti top. Lūk, kur mēs sākām. Tātad, tas nav viss, kas daudz produkciju. Lūk, kas nederīgs rakstīt 4 izmērā uz līnijas 21. Nu, kas bija līnija 21? Line 21 bija tieši šis un tas ir jēga ka es esmu likumīgi rakstiski 4 baiti, jo es esmu cenšas nodot šo skaitli, kas varētu būt kaut kas, tas vienkārši notiek, ir nulle, bet es cenšos likt to vietā kas nepieder man. Turklāt šeit lejā, 40 baiti vienā bloki ir noteikti zaudēti ierakstā 1. Tas ir tāpēc, ka tad, kad es aicinu malloc šeit, es nekad patiesībā atbrīvotu atmiņu. Tātad, kā mēs varam noteikt šo? Ļaujiet man iet uz priekšu un būt mazliet drošāk un darīt 9 tur un ļaujiet man šeit bezmaksas X. Tas ir jauns funkcija šodien. Ja es tagad atkārto darīt atmiņa dot slīpsvītra, pieņemsim palaist Valgrind uz to vēlreiz, maksimizētu savu logu un hit Enter. Tagad, tas ir labi. Viņi apglabāt labas ziņas visās šo produkciju. Visi kaudze bloki bija brīvas. Mēs būsim atpakaļ uz to, ko kaudze ir, bet nav noplūdes ir iespējamas. Tātad tas ir tikai vēl viens līdzeklis, lai jūsu rīku komplektu ar kuru jūs varat sākt atrast tagad kļūdas, piemēram, ka. Bet pieņemsim redzēt, kas vairāk var noiet greizi šeit. Pieņemsim pāreju tagad faktiski atrisinot problēmu. Kā malā, ja tas būs atbrīvot Mazliet apjukums vai spriedzes, tas tagad ir smieklīgi. Jā. Tas ir diezgan labs. Tā kā norādes ir adreses un adreses parasti pēc vienošanās rakstīts ar heksadecimālo. Ha, ha, tas ir smieklīgi tagad. Jebkurā gadījumā, tāpēc pieņemsim tagad faktiski atrisinātu problēmu. Tas ir super, super zema līmeņa līdz šim, un mēs faktiski var darīt noderīgs lietas ar šīm zema līmeņa informāciju. Tātad mēs ieviesa dažas nedēļas Pirms jēdziens masīva. Masīvs bija jauki, jo tas ir grūti, lai attīrītu mūsu kodu jo, ja mēs vēlējāmies rakstīt programma ar vairākiem studentiem vai vairāki nosaukumi un māju un dorms un koledžas un visu, kas, mēs varētu uzglabāt viss vairāk tīri iekšpusē masīva. Bet ierosināt vienu negatīvie no masīva līdz šim. Pat ja jūs esat nav cietis pats programmā, vienkārši instinktīvi, kas ir slikta lieta par masīvu, varbūt? Es dzirdu dažus murmina. Mērķauditorija: Tas ir grūti lai mainītu izmēru. DAVID Malan: Tas ir grūti lai mainītu izmēru. Jūs nevarat mainīt izmēru no masīva, patiesībā, per se C. Jūs varat piešķirt vēl vienu masīvu, pārvietot visu no vecā jaunajā, un tagad ir dažas papildu telpas, bet tas nav, piemēram, valoda, piemēram, Java vai Python vai kādu citu skaits valodas ar kuru daži no jums varētu būt pazīstami, kur jūs var tikai glabāt pievienojot lietas ad nauseam līdz beigām masīva. Ja jums ir masīvs izmērs 6, kas ir tās izmērs, un tik daudz, piemēram, ideja agrāk kam buferi noteiktu lielumu, Jums ir uzminēt no vārtiem kāda izmēra jūs vēlaties, lai to? Ja jūs uzminēt pārāk liels, jūs izšķērdēt telpā. Ja jūs uzminēt pārāk mazs, jūs nevar saglabāt datus, vismaz bez daudz vairāk darba. Tātad šodien, pateicoties norādes, mēs varam sākt izšūšanas kopā mūsu pašu pasūtījuma datu struktūras, un kas Patiesībā, šeit ir kaut kas kas izskatās mazliet vairāk mistisks pēc pirmā acu uzmetiena, bet tas ir tas, ko mēs saucam saistīts sarakstu, un tā nosaukums veida apkopots tā. Tas ir saraksts ar numuriem, vai šis gadījums, sarakstu numurus, bet tas varētu būt saraksts ar kaut ko, bet tas ir saistīts kopā veidā bultām, un lietojiet tikai minējums ar ko paņēmiens mēs gatavojamies, lai varētu dūriens kopā, veida, piemēram, popkorns ar vītni, saistītais saraksti taisnstūri šeit? Tās numuri? Kas ir pamatā valoda funkcija? Mērķauditorija: Rādītājs. DAVID Malan: Rādītājs. Tātad katrs no šiem bultām šeit apzīmē rādītājs vai tikai adrese. Tātad citiem vārdiem sakot, ja es gribu uzglabāt numuru sarakstu, Es nevaru vienkārši saglabāt to, ja es gribu spēja augt un sarauties mans datu struktūra masīvā. Tāpēc man ir nepieciešams, lai būtu nedaudz vairāk izsmalcinātība, bet paziņo, ka šis bilde veida iesaka ka, ja jūs esat tikko got maz pavedieni savieno visu kopā, iespējams, nav tik grūti, lai atbrīvotu vietu starp diviem no šiem taisnstūriem vai divi no šiem punktiem, jo ​​mēs sāksim aicinot tos, izveidot jaunu mezglu, un tad ar kādu jaunu pavedienu, tikai grāvis trīs mezglus kopā, pirmais, pēdējais, un viens ka jūs vienkārši ievietota vidū. Un tiešām saistīts saraksts, atšķirībā no masīva, ir dinamisks. Tā var augt, un tas var sarauties un jums nav ir jāzina, vai aprūpi iepriekš, kā daudz datu, jūs būs uzglabāšanai, bet izrādās, mums jābūt mazliet uzmanīgiem par to, kā īstenot šo. Tātad vispirms pieņemsim apsvērt, kā mēs ieviest viens no šiem mazajiem taisnstūri. Tas ir viegli īstenot int. Jūs vienkārši teikt int n un tad jūs saņemsiet 4 baiti uz int, bet kā es varu saņemt int, to sauc par n, un tad rādītājs, sauksim to blakus. Mēs varētu aicināt šos lietas, kaut ko mēs gribam bet man ir nepieciešams pasūtījuma datu struktūra. Yeah? Mērķauditorija: Ampersand [nedzirdama]. DAVID Malan: Tātad Ampersand mēs izmantosim, lai iegūt adresi mezglā potenciāli. Bet mums ir vēl viens iezīme C kārtība sniegt man iespēju izveidot Šī tradīcija taisnstūris, šis pasūtījuma mainīgais ja jūs, atmiņā. Mērķauditorija: struct. DAVID Malan: struct. Atsaukt no pagājušajā nedēļā, mēs iepazīstinājām struct, šis samērā vienkāršs atslēgvārds kas ļauj mums padarīt lietas, kā šis. C nenāca ar datiem struktūru sauc students. Tas nāk ar int un peldēt un palijas un piemēram, bet tas nenāk ar studentu, bet mēs varam radīt students datu tipu, students struktūra, ar šo sintaksi šeit. Un jūs redzēsiet šajā atkal un atkal. Tāpēc nav jāuztraucas par iegaumēšanas atslēgvārdus, bet atslēgvārds, kas ir svarīgi, ir tikai fakts, ka mēs teica struct un tad mēs to sauca students un iekšpusē Studenta bija vārds un māja vai kopmītnes vai tamlīdzīgi. Un tā nu šodien, pieņemsim ierosināt šo. Es esmu pievienojis dažus vārdus, bet, ja es gribu lai īstenotu šo taisnstūri, kas ir ieguva gan int un A rādītājs, jūs zināt, ko, es esmu gatavojas pasludināt struct sauc mezglā. Es esmu arī, iekšpusē tā, gatavojas teikt ka mezglā, šis taisnstūris, ir int un mēs to saucam n un tas ir nākamais rādītāju. Un tas ir nedaudz runīgs, bet, ja jūs domājat par to, bultas, kas bija attēlā pirms brīža ir kāda datu tipu? Ja katra no šīm bultām ir vērsta uz ko datu struktūras veidu? Tas nav norādot tikai uz int per se. Tas norāda uz Visa taisnstūra lieta un ka taisnstūra lieta, mēs teicām, sauc par mezglu. Un tā mēs veida ir rekursīvi definēt šo tādas ka mezglā, mēs sakām, būs int sauc n un rādītāju sauc blakus un datu struktūras veidu, kurai ka rādītājs punkti ir acīmredzami būs struct mezglā. Tātad tas ir kaitinoši runīgs un tikai, lai būtu pedantiska, iemesls, kāpēc mēs nevaram vienkārši saku, kas atklāti izskatās daudz vieglāk lasāmu, ir tāpēc, atgādināt, ka C lasīt lietas, no augšas uz leju, no kreisās uz labo. Tas nav, kamēr mēs iegūtu semikolu ka atslēgvārds mezglā patiešām pastāv. Tātad, ja mēs vēlamies, lai būtu šāda veida ciklisks atsauce iekšpusē datu struktūra, mums tas ir jādara, ja mēs sakām struct mezglā augšpusē, kas dod mums garāku ceļu aprakstot šo lieta, tad iekšā mēs sakām struct mezglā, un pēc tam tajā pašā pēdējā rindā mēs sakām, labi, C, starp citu, zvaniet šo visu nopelt lieta mezglā un apstāties izmantojot atslēgvārdu struct vispār. Tātad tas ir tikai sava veida sintaktisko triks, kas galu galā ļauj mums izveidot kaut kas izskatās tieši tāpat kā šis. Tātad, ja mēs pieņemam, tagad mēs varam īstenot šo lietu C, Kā mēs patiesībā sākt šķērso šo? Nu, patiesībā, viss, kas mums ir jādara, ir atkārtot no kreisās uz labo pusi, un tikai veida ievietot mezglus vai dzēst mezglus vai meklēt lietas, kur mēs gribam, bet, lai to paveiktu, iesim uz priekšu un padarīt lietas mazliet vairāk reālu, jo tas ir super zema līmeņa līdz šim. Vai kāds burtiski gribētu būt pirmais? LABI. Nāciet uz augšu. Kā tevi sauc? DAVID: David. DAVID Malan: David. Prieks iepazīties. ES arī. Viss kārtībā. Un mums ir nepieciešama virkne 9. Ne tik labi, kā pirmais, varbūt. OK, skaits 9. Skaitlis 17, lūdzu. Ļaujiet man iet atpakaļ nedaudz tālāk. Number 22, lūdzu, un Kā par tālāk atpakaļ ja es redzu kādi rokās ar visu gaismas vai nē. Kāds ir tiek brīvprātīgi turpat. Vai jūs vēlaties, lai nākt klajā? Jūsu apakšdelma tiek piespiedu kārtā iet uz augšu. OK, 17. 22. 26 nāk uz leju. Vai kāds cits gribētu forcefully-- Nāc uz augšu. Faktiskā brīvprātīgo. Tik ļoti ātri, ja jūs puiši varētu organizēt paši tāpat kā mezgli uz ekrāna. Paldies. Un jums būs 26. Visas tiesības un ātri ievads. Tāpēc es esmu Dāvids un jums ir arī? DAVID: David. DAVID Malan: Un jūs esat? JAKE: Jake. SUE: Sue. ALEX: Alex. RAPHAEL: Raphael. TAYLOR: Taylor. DAVID Malan: Taylor. Excellent. Tātad šie ir mūsu brīvprātīgie par šodienu un iet uz priekšu un novirzīt maz, ka veids, un tikai iet uz priekšu un saglabāt turot savus numurus, kā jūs vai jūsu Pirmā pazīme un, izmantojot savu kreiso roku, iet uz priekšu un vienkārši īstenot šīs bultas, tikko lai jūsu kreisā roka ir burtiski norādot kāds ir jānorāda at, un dot sev kādu, lai istabas mēs varam vizuāli redzēt jūsu rokas faktiski norādot, un jūs vienkārši varat norādīt veida pie zemes ir labi. Tātad šeit mums ir saistīts saraksts vienu, divi, trīs, četri, pieci mezgli sākotnēji, un paziņojums, mums ir šis īpašais rādītāju sākumā, kurš ir Galvenais jo mums ir sekot no visa garuma sarakstā kaut kā. Šie puiši, pat ja viņi atstājuši uz labo, atpakaļ atpakaļ atmiņā, tie faktiski var būt jebkur jo datora atmiņā. Tātad šie puiši varētu būt stāvot jebkurā vietā uz skatuves un tas ir labi, tik ilgi, kamēr viņi faktiski norādot uz viena no otras, bet, lai saglabātu lietas tīrs un vienkāršs, mēs vienkārši izdarīt tos kreisās uz labo, piemēram, tas, bet tur varētu būt masveida trūkumi starp šiem mezgliem. Tagad, ja es gribu, lai faktiski ievietot dažus jaunā vērtība, iesim uz priekšu un darīt to. Mums ir iespēja tagad izvēlēties citu mezglu. Informējiet Sāksim off ar mallocing 55. Vai kāds prātā, ir malloc? OK, nākt uz augšu. Kā tevi sauc? RAINBOW: Rainbow. DAVID Malan: Rainbow? Viss kārtībā. Malloc Rainbow. Nāciet uz augšu. Tāpēc tagad mums ir jāuzdod sev algorithmically kur mēs varam likt 55. Tātad mēs visi zinām, protams, ja viņa, iespējams, pieder, ja mēs cenšamies saglabāt šo sakārtoti Un, ja jūs puiši varētu veikt vienu soli atpakaļ tāpēc mums nav nokrist posms, tas būtu lieliski. Tātad faktiski, Rainbow, sāktu vairāk šeit kopā ar mani, jo mēs kā datoru tagad varat redzēt tikai vienu mainīgo laikā. Tātad, ja tas ir pirmais mezgls. Ievērojiet, viņš nav mezglu, viņš ir tikai rādītājs, un tas ir iemesls, kāpēc viņš ir izstrādāts, lai būtu tikai lielums rādītājs, ne viens no tiem pilna taisnstūri. Tātad mēs ejam, lai pārbaudītu katrā atkārtojuma ir 55 mazāk nekā 9? Nē. Ir 55 mazāk nekā 17? Nē. Mazāk nekā 22? Mazāk nekā 26? Mazāk nekā 34? Un tāpēc tagad, acīmredzot Rainbow pieder beigās. Tātad, lai būtu skaidrs, un to, kas bija jūsu vārds, Taylor? TAYLOR: Taylor. DAVID Malan: Tātad starp Taylor kreiso roku un varavīksnes rokas šeit, kuru puses ir nepieciešams norādīt uz to, kas Lai ievietotu 55. šajā sarakstā? Kas mums jādara? Yeah? Mērķauditorija: Taylor hand nepieciešams norādīt kreisi. DAVID Malan: Tieši tā. Tātad ievietojot mezglu uz saraksta beigās ir diezgan vienkārša, jo Taylor tikko ir punktam, tā vietā, lai pie zemes vai mēs to saucam null, null ir sava veida trūkuma par rādītāju vai īpašu nulle rādītājs, jūs esat gatavojas atzīmēt ar kreiso roku pie varavīksnes un tad Rainbow, Kur kreiso roku iespējams norādīt? Down. Tas nav labi, ja viņas roka ir sava no norādot off šeit vai veida jebkurš kādā veidā. Tas būtu jāuzskata atkritumu vērtība, bet, ja viņa norāda uz daži zināmā vērtība, mēs to sauc nulle vai null, tas ir OK jo mums ir terminu šis un mēs zinām saraksts tagad ir pabeigta. Tātad, kas ir vēl viens samērā vienkārša lieta? Mēs varētu malloc 5? Nāciet uz augšu. Kā tevi sauc? Tiffany: Tiffany. DAVID Malan: Es atvainojos? Tiffany: Tiffany. DAVID Malan: Tiffany. Viss kārtībā. Tiffany ir malloced ar vērtību 5. Nāciet uz augšu. Tas viens ir salīdzinoši viegli pārāk, bet pieņemsim apsvērt kārtību operāciju tagad. Tas bija diezgan viegli ar Taylor beigās. Skaits 5, protams mazāks par 9, un tāpēc mums ir Dāvidu, mums ir Tiffany, un kāda bija jūsu vārds? JAKE: Jake. DAVID Malan: Jake. Tiffany, Jake, un David. Kuru roka būtu jāatjaunina vispirms? Ko jūs vēlaties darīt šeit? Tur ir pāris iespējamie veidi, bet tur ir arī viens vai vairāki nepareizi veidi. Mērķauditorija: Sāciet ar visvairāk pa kreisi. DAVID Malan: Sāciet ar kreisās malas. Kurš ir visvairāk pa kreisi šeit tad? Mērķauditorija: First. DAVID Malan: OK. Tātad, sākt ar pirmo un kur jūs vēlaties atjaunot Dāvida rokās būt? Mērķauditorija: Ceļā uz 5. DAVID Malan: OK. Tātad David, punkts, pieci vai Tiffany šeit, un tagad? Mērķauditorija: Tiffany norāda uz 9? DAVID Malan: Perfect, izņemot mīkstās s vadītājs tikko veida nokrita, vai ne? Jo to, kas ir nepareizi ar šo attēlu burtiski? Mērķauditorija: Nekas ir vērsta. DAVID Malan: Nekas nav norādot uz Jake tagad. Mēs esam burtiski bāreņiem 9 un 17, un mēs esam burtiski noplūda visu šo atmiņu, jo, atjaunināšanu Dāvida roku pirmkārt, tas ir fine ciktāl tas ir pareizi norādot Tiffany tagad, bet, ja neviens nebija Foresight norādīt uz Jake, tad mēs esam zaudējuši kopums šajā sarakstā. Tātad pieņemsim atsaukt. Tā, ka bija laba lieta paklupt bet pieņemsim labot tagad. Ko mums vajadzētu darīt vispirms vietā? Yeah? Mērķauditorija: Tiffany ir jānorāda pie 9? DAVID Malan: Es nevaru iegūt, ka jums tuvu. Kas jānorāda uz 9? Mērķauditorija: Tiffany. DAVID Malan: Labi. Tātad Tiffany būtu pirmais punkts pie 9. Tātad Tiffany jāņem uz identisku vērtību Dāvidam, kas, šķiet, lieks uz brīdi, bet tas ir labi, jo tagad, otrais solis, mēs varam atjaunināt Dāvida roku norādīt pie Tiffany, un pēc tam, ja Mēs tikko veida tīras lietas augšu it kā tas ir sava veida pavasara līdzīgu, tagad tas ir pareizs ievietošanas. Tik lielisks. Tāpēc tagad mēs esam gandrīz tur. Pieņemsim ievietot vienu gala vērtība kā vērtību 20. Ja mēs varētu malloc vienu pēdējo brīvprātīgais? Nāciet uz augšu. Tātad šis ir nedaudz vairāk viltīgs. Bet tiešām, kodu mēs esam rakstiski, gan mutiski, ir tāpat kā ar ķekars no tā, ja apstākļi tagad, vai ne? Mums bija nosacījums pārbaudot, vai tā pieder beigās, varbūt sākumā. Mums vajag kādu cilpa uz atrast savu vietu vidū. Tātad, pieņemsim darīt ar to, kas ir jūsu vārds? ERIC: Eric. DAVID Malan: Eric? Eric. Prieks iepazīties. Tātad mums ir 20. Mazāk nekā pieci? Nē. Mazāk nekā deviņi? Nē. Mazāk nekā 17? Nē. LABI. Viņš pieder šeit un Jūsu vārdi atkal ir? SUE: Sue. DAVID Malan: Sue. ALEX: Alex. DAVID Malan: Sue, Alex, un? ERIC: Eric. DAVID Malan: Eric. Kuru rokās ir nepieciešams, lai saņemtu atjauninātu vispirms? Mērķauditorija: Eric. LABI. Tātad Ērika jānorāda pie kur? Pie 22. Labs. Un tagad ko tālāk? Sue tad var norādīt pie Eric un tagad, ja jūs puiši vienkārši veikt dažas telpa, kas ir labi vizuāli, tagad mēs esam darījuši ievietošanas. Tātad pieņemsim tagad izskatīt kādu jautājumu, bet paldies jums tik daudz par mūsu brīvprātīgajiem. Ļoti labi darīts. Jūs varat saglabāt tos, ja vēlaties. Un mums ir jauki atvadīšanās dāvana, ja jūs katrs vēlētos izmantot stresa bumbiņu. Ļaujiet man tikai nodot šo leju. Tātad, kas ir takeaway par šo? Tas, šķiet, ir pārsteidzošs ciktāl mēs esam tagad ieviesa par alternatīvu masīvs, kas nav tik ierobežota masīvs kādu noteiktu lielumu. Tās var augt dinamiski. Bet, līdzīgi kā mēs esam redzējuši nedēļās pagātnē, mēs nekad neko par brīvu, tāpat protams tur ir kompromiss šeit. Tātad ar otrādi par saistītu saraksts, tas ir dinamisms? Šī spēja augt un atklāti, mēs būtu varējuši izdarīt izdzēst un mēs varētu sarukt, kā nepieciešams. Ko cena mēs maksā? Divreiz tik daudz telpu, pirmkārt. Ja paskatās uz attēlu, vairs es esmu uzglabājot sarakstu veseli skaitļi. Es esmu uzglabājot sarakstu skaitļu plus norādes. Tāpēc es esmu dubultojot daudzumu telpā. Tagad, varbūt, ka tas nav tāds liels galā 4 baiti, 8 baiti, bet tas, protams, var pievienot up lielu datu kopu. Kas ir vēl viens mīnuss? Yeah? Mērķauditorija: Mums traversa viņiem vienu pa vienam. DAVID Malan: Jā. Mums ir traversa viņiem vienu pa vienam. Jūs zināt, kas mēs pametusi šo super ērts iezīme kvadrātiekava apzīmējums, pareizāk pazīstams kā brīvpiekļuves, kur mēs varam vienkārši lēkt atsevišķam elementam bet tagad, ja man vēl bija Mani brīvprātīgie šeit, ja es gribēju atrast skaitlis 22, es nevaru vienkārši pāriet uz kronšteins kaut ko kaut ko. Man ir jāskatās pāri sarakstam, daudz tāpat kā mūsu meklējot piemērus lineāri, lai atrastu numuru 22. Tāpēc mēs, šķiet, ir jāmaksā cena tur. Bet mēs varam tomēr risināt citas problēmas. Patiesībā, ļaujiet man iepazīstināt tikai pāris Visuals. Tātad, ja jūs esat bijis uz leju, lai Mather s Dining Hall nesen, jums atgādināt, ka viņu skursteņi paplātes kā šis, mēs aizgūts no šiem Annenberg pirms klasē. Tātad šī kaudze paplātes, lai gan, tiek uzrādīts faktiski par datorzinātņu datu struktūra. Ir datu struktūra datorzinātnēs pazīstams kā kaudze, kas ļoti labi pakļauj sevi tieši šis vizuālais. Tātad, ja katrs no šiem paplātes nav paplāte bet, piemēram, vairākām un es gribēju uzglabāt skaitļus, es varētu likt vienu uz leju šeit, un es varētu likt citu šeit lejā, un turpināt kraušanas numurus par vienu virs otra, un kas ir potenciāli noderīgi par šo ir tas, kāda ir saistība Šīs datu struktūras? Kuru skaits var izraut Pirmais visvairāk ērti? Visvairāk nesen viens Uzvelciet tur. Tātad, tas ir tas, ko mēs varētu zvanīt datorzinātnes LIFO datu struktūra. Pēdējais iekšā, pirmais ārā. Un mēs redzēsim pirms ilgi, kāpēc kas varētu būt noderīga, bet tagad, vienkārši apsvērt īpašumu. Un tas ir sava veida stulba, ja jūs domājat, ka par to, kā ēdamzāle to dara. Katru reizi, kad viņi tīras paplātes un likt svaigi tiem virsū, Jums varētu būt iepriekš tīrs bet galu galā ļoti netīrs un putekļains paplāte pašā apakšā ja jums nekad nav nokļūt uz apakšā, kas kaudze, jo jūs vienkārši paturēt liekot jauno un tīro tie uz augšu no tā. Tas pats varētu notikt lielveikalā too. Ja jums ir displeja apvalks piena un katru reizi CVS vai kurš saņem vairāk piena, jūs vienkārši bāzt piens Jums jau ir atpakaļ un jūs varat ievietot jaunas up front, Jums nāksies dažas diezgan šķebinošs piens beigās datu struktūru, jo tas vienmēr apakšā vai līdzvērtīgi tas vienmēr ir aizmugurē. Bet tur ir vēl viens veids, kā domāt par uzliku up datus un, piemēram, šis. Ja jūs esat viens no tiem cilvēkiem, kam patīk rindā ārpus Apple veikalu kad jauns produkts nāk out, jūs, iespējams, neizmantojat kaudze datu struktūra, jo jums varētu atsavināt visi, kas ir uzliku up iegādāties kādu jaunu rotaļlietu. Drīzāk, jūs, iespējams, izmantojot kāda veida datu struktūras vai kāda veida sistēmas reālajā pasaulē? Cerams, ka tas ir līnija, vai vairāk pareizi vai vairāk britu, piemēram, rindā. Un izrādās, rinda ir arī datu struktūra datorzinātnēs, bet rinda ir ļoti atšķirīgs īpašums. Tas nav LIFO. Pēdējais iekšā, pirmais ārā. Dievs pasarg. Tā vietā FIFO. Pirmais iekšā, pirmais ārā. Un tas ir labi par taisnīguma "dēļ protams, ja jūs uzliku up super agri no rīta. Ja jums tur, pirmkārt, jūs vēlas izkļūt vispirms kā arī. Un tā visus šos datus konstrukcijas, rindas un skursteņi un ķekarus citiem, izrādās tevi var domāt par to kā tikai masīva. Tas ir masīvs, varbūt fiksēts izmērs 4, bet tas lūdzu būt sava veida jauki, ja mēs varētu tikai pāļu paplātes gandrīz bezgalīgi garš, ja mēs ir, ka daudzi paplātes vai ciparus. Tātad, varbūt mēs gribam izmantojiet saistīts sarakstu šeit, bet kompromiss būs potenciāli ka mums ir nepieciešams vairāk atmiņas, aizņem nedaudz vairāk laika, bet mēs neierobežo krāvuma augstums, līdzīgi Mather s displeja apvalks varētu ierobežot izmērs kaudze, un tāpēc tie ir dizaina lēmumus vai pieejamās iespējas, lai mums galu galā. Tātad ar šiem datiem struktūrām, mēs esam sākuši redzot jaunas augšējās robežas potenciāli par to, kas agrāk bija super ātri un kur mēs ņemšu atvaļinājumu off šodien un kur mēs ceram, ka, lai nokļūtu ir trešdien, mēs sāk apskatīt datus struktūra, kas ļauj mums meklēt caur datiem log beigu laiku atkal. Un mēs redzējām, ka, atgādināt, nedēļā nulles un viens ar bināro meklēšanu vai plaisa un iekarot. Tas nāk atpakaļ, un vēl labāk, Svētais Grāls par šo trešdien būs nākt klajā ar datu struktūra, kas darbojas patiešām vai teorētiski pastāvīgs laiks, kurā tas nav svarīgi, cik daudz miljoniem vai miljardiem lietas mums ir datu struktūru, tas tiks ņemt mums pastāvīgu laiku, varbūt viens solis vai divi soļi vai 10 soļi, bet pastāvīga skaits soļiem meklēt, izmantojot šo datu struktūru. Tas patiešām būs Svētais Grāls bet vairāk par to trešdien. Skatīt ya tad. [Mūzikas atskaņošanai]