ROB BOWDEN: Bună, eu sunt Rob Bowden, și hai să vorbim despre quiz0. Așa că, la prima întrebare. Aceasta este întrebarea în cazul în care ai nevoie pentru a coda numărul 127 din becurile binare. Dacă ți-ai dorit, ai putea face conversia regulat din bi-- sau, din zecimal în binar. Dar asta e, probabil, va pentru a lua o mulțime de timp. Adică, ai putea da seama că, OK, 1 este acolo, 2 este acolo, 4 este acolo, 8 este acolo. Cale mai ușoară, 127 este de 128 minus unul. Că bec stânga este de 128 de biți. Deci, 127 este de fapt doar tot de alte becuri, din moment ce e cel mai din stânga bec minus 1. Asta e pentru această întrebare. Întrebarea unul. Deci, cu 3 biți poți reprezintă 8 valori distincte. De ce, atunci, este de 7 cel mai mare non-negativ număr întreg zecimal puteți reprezenta? Ei bine, dacă putem doar reprezintă 8 valori distincte, atunci ce vom fi reprezentând este de la 0 la 7. 0 preia una din valorile. Întrebarea a doua. Cu n biți, câte distinct Valorile puteți reprezenta? Așa că, cu n biți, aveți 2 Valorile posibile pentru fiecare bit. Deci avem două valori posibile pentru primul bit, 2 valori posibile pentru a doua, 2 posibil pentru a treia. Și așa încât e de 2 ori de 2 ori 2, și în cele din urmă răspunsul este 2 n. Întrebarea trei. Ce este 0x50 în binar? Deci, amintiți-vă că hexazecimal are o foarte conversie simplu la binar. Deci, aici, trebuie doar să se uite la 5 și 0 independent. Deci, ce e de 5 în binar? 0101, care este de 1 bit si 4 biți. Ce este 0 în binar? Nu este complicat. 0000. Deci, doar le-a pus împreună, și care este numărul complet în binar. 01010000. Și dacă ai vrut ai putea decolare, care stânga zero. E irelevant. Așa că atunci alternativ, ceea ce este 0x50 în zecimal? Dacă ți-ai dorit, ai putea-- daca esti mai confortabil cu binar, ai putea lua ca răspuns binar și de a converti că în zecimal. Sau am putea aminti doar că hexazecimal. Astfel că 0 este în loc de 0-lea, și 5 este în 16 de primul loc. Deci, aici, avem 5 ori 16 la în primul rând, plus 0 ori 16 la zero, este de 80. Și dacă uitat la titlu la întrebarea, a fost CS-80, care a fost un fel de indiciu pentru răspunsul la această problemă. Întrebarea cinci. Avem acest scenariu Scratch, care este repetând de 4 ori unt de arahide jeleu. Deci, cum facem noi acum, cod care in C? Ei bine, avem here-- partea cu caractere aldine este doar o parte a trebuit să pună în aplicare. Deci, avem o buclă de 4 care este looping 4 ori,-printf ING unt de arahide jeleu, cu noua linie ca problema cere. Întrebarea șase, o altă problemă Scratch. Vedem că suntem într-o buclă pentru totdeauna. Noi spunem i variabil și apoi incrementarea i cu 1. Acum vrem să facem acest lucru în C. Nu sunt mai multe moduri am fi putut face acest lucru. Aici ne sa întâmplat cu cod pentru totdeauna buclă ca un timp (adevărat). Așa că am declara variabila i, doar ca și cum am avut eu variabil în Scratch. Declara i variabil, și pentru totdeauna în timp ce (adevărat), spunem variabila i. Deci, printf% Eu-- sau ai fi putut folosi in% d. Spunem că variabila, și apoi incrementarea, i ++. Întrebarea șapte. Acum vrem să facem ceva foarte asemănător la Mario punct c din problemă seta o. Vrem să imprimați aceste hashtags, vrem să imprimați o perioada de cinci de trei dreptunghi de aceste hash-uri. Deci, cum vom face asta? Ei bine, am să vă dau un întreg buchet de cod, și tu doar trebuie să completeze în funcția de rețea de imprimare. Deci, ce se PrintGrid arata? Ei bine, tu ești trecut lățime și înălțime. Deci, avem un exterior 4 buclă, care este looping peste toate rândurile prezentei grilă pe care dorim să imprime. Apoi avem inter-cuibărit 4 bucla, asta e imprimarea pe fiecare coloană. Deci, pentru fiecare rând, ne-am imprimat pentru fiecare coloană, un singur hash. Apoi, la sfârșitul rândului ne imprima o line nou single pentru a trece la rândul următor. Și asta e pentru toată rețeaua. Întrebarea opt. O funcție ca PrintGrid este declarat a avea un efect secundar, dar nu o întoarcere valoare. Explică diferența. Deci, acest lucru se bazează pe tine amintindu- ceea ce un efect secundar este. Ei bine, o întoarcere value-- știm PrintGrid nu au o valoare întoarcere, întrucât aici se spune anulate. Deci, ceva care returnează void nu se întoarce într-adevăr nimic. Deci, ce este efectul secundar? Ei bine, un efect secundar este ceva la fel de bine persistă după terminarea funcției că nu a fost tocmai sa întors, și nu a fost doar de la intrările. Așa că, de exemplu, am putea a schimba o variabilă globală. Asta ar fi un efect secundar. În acest caz particular, o efect secundar foarte important se imprimă pe ecran. Astfel că este un efect secundar care PrintGrid are. Noi imprimam aceste lucruri pe ecran. Și vă puteți gândi care ca un efect secundar, din moment ce asta e ceva care persistă după ce această funcție se termină. Asta e ceva în afara domeniului de aplicare din această funcție care în cele din urmă se schimbă, conținutul ecranului. Întrebare nouă. Luați în considerare programul de mai jos, pentru care numerele de linie au fost adăugate pentru dragul discuției. Deci, în acest program, suntem doar de asteptare getString, depozita în acest s variabile, iar apoi imprimarea că variabila s. OK. Deci, explica de ce este prezentă linia unu. #include CS50 punct de ore. De ce avem nevoie pentru a #include CS50 punct de ore? Ei bine, suntem de asteptare Funcția getString, și getString este definită în bibliotecă CS50. Deci, dacă nu am avea #include CS50 punct de ore, ne-ar lua această declarație implicită de eroare funcției getString de compilator. Așa că trebuie să includă library-- trebuie să includă fișierul header, sau altfel compilatorul nu va recunosc că getString există. Explicați de ce este prezentă linia doi. Deci, standard, io punct de ore. Este exact la fel ca problema anterioară, cu excepția în loc de a face cu GetString, vorbim despre printf. Deci, dacă nu am spune că am nevoie pentru a include standard, io punct de ore, atunci nu ar fi capabil pentru a utiliza funcția printf, deoarece compilatorul nu ar ști despre asta. Why-- ceea ce este semnificația de drept, în linie cu patru? Deci, aici avem int main (void). Asta e doar spune că am nu primesc nici o linie de comandă argumente în principal. Amintiți-vă că am putea spune int Principalele int argc paranteze șir argv. Deci, aici suntem doar spunem anulate la spunem ignoră argumente în linia de comandă. Explicați, în ceea ce privește memoria, exact ceea ce getString în linie șase întoarce. GetString se întoarce un bloc de memorie, o serie de caractere. Este într-adevăr întoarce o pointer la primul caracter. Amintiți-vă că un șir este o stea char. Deci s este un pointer la primul personaj în orice șirul este că utilizatorul a introdus de la tastatura. Și asta se întâmplă de memorie să fie malloced, astfel că memoria este în heap. Întrebarea 13. Luați în considerare programul de mai jos. Deci, tot acest program este de a face este printf-ing 1 împărțit la 10. Deci, atunci când sunt compilate și executat, acest program iesiri 0.0, chiar dacă 1 împărțit la 10 este de 0,1. Deci, ce este de 0.0? Ei bine, acest lucru se datorează faptului că de diviziune număr întreg. Deci 1 este un număr întreg, 10 este un număr întreg. Deci, 1 împărțit la 10, tot este tratată ca numere întregi, și în C, atunci când facem diviziune număr întreg, am trunchia orice punct zecimal. Deci, 1 împărțit la 10 este 0, iar apoi încercăm pentru a imprima ca pe un flotor, așa zero, tipărite ca un float este 0.0. Și de aceea avem 0,0. Luați în considerare programul de mai jos. Acum suntem imprimare 0.1. Deci, nici o diviziune număr întreg, suntem doar 0,1 imprimare, dar suntem o imprimare la 28 de zecimale. Și am obține acest 0.1000, o grămadă de zerouri, 5 5 5, bla bla bla. Deci, intrebarea aici este de ce o face imprima că, în loc de exact 0,1? Deci, motivul pentru care aici este acum virgulă mobilă imprecizie. Amintiți-vă că un flotor este de numai 32 de biți. Astfel încât să putem reprezenta doar un număr finit de plutitoare valorile punctelor cu cele 32 biți. Ei bine, nu e în cele din urmă la infinit multe valori în virgulă mobilă, și nu există infinit de multe plutitor Valorile în puncte în între 0 și 1, și suntem în mod evident în măsură să reprezintă chiar mai multe valori decât asta. Deci, avem de a face sacrificii pentru a fie în măsură să reprezinte cele mai multe valori. Deci, o valoare cum ar fi 0,1, aparent nu putem reprezenta asta exact. Deci, în loc de a reprezenta 0,1 facem cel mai bun putem reprezenta această 0.100000 5 5 5. Și asta e destul de aproape, dar pentru o mulțime de aplicații va trebui să vă faceți griji cu privire la virgulă mobilă imprecizie, pentru că nu ne putem reprezenta exact toate punctele de flotant. Întrebarea 15. Luați în considerare codul de mai jos. Noi doar de imprimare 1 plus 1. Deci, nu există nici un truc aici. 1 plus 1 este evaluată la 2, și atunci suntem imprimare asta. Tipărește numai 2. Întrebarea 16. Acum suntem imprimare caracterul 1 plus caracterul 1. Deci, de ce face acest lucru nu imprima același lucru? Ei bine, personajul 1 plus caracterul 1, personajul 1 are o valoare ASCII 49. Deci, acest lucru este într-adevăr spune 49 plus 49, și în cele din urmă acest lucru se întâmplă pentru a imprima 98. Deci, acest lucru nu se imprimă 2. Întrebarea 17. Finalizarea procesului de punere în aplicare de impar de mai jos într-un mod că funcția returnează true dacă n este impar și fals în cazul în care n este chiar. Acesta este un scop mare pentru operator mod. Deci, luăm argument n noastră, dacă n mod 2 este egal cu 1, și ceea ce înseamnă că n divizat de 2 a avut un rest. Dacă n împărțit la 2 a avut un rest, care înseamnă că n este impar, deci ne întoarcem adevărat. Altfel ne vom întoarce false. De asemenea, ar fi putut face n MOD 2 egali la zero, return false, altfel return true. Luați în considerare funcția recursiv de mai jos. Deci, dacă n este mai mic sau egală cu 1, se întoarcă 1, întoarcere altceva de n ori f de n minus 1. Deci, ce este această funcție? Ei bine, acesta este doar funcția factorial. Acest lucru este frumos reprezentat ar fi n factorial. Deci, întrebarea 19 acum, vrem să să ia această funcție recursive. Vrem să-l iterativ. Deci, cum facem asta? Ei bine, pentru personalul soluție, și din nou, nu e mai multe moduri în care ar fi putut face că, vom începe cu acest produs int egal cu 1. Și în toată această pentru bucla, vom care urmează să fie produs la înmulțirea în cele din urmă încheia cu factorialul complet. Deci, pentru int i este egal cu 2, i este mai mică sau egală cu n, i ++. S-ar putea fi mirat de ce i este egal cu 2. Ei bine, amintiți-vă că aici avem de a asigurați-vă cazul nostru de bază este corectă. Deci, dacă n este mai mic sau egal la 1, noi suntem doar revenirea 1. Deci, aici, vom începe la i este egal cu 2. Ei bine, dacă i s-au 1, atunci the-- sau dacă n-au fost cu 1, atunci pentru buclă nu s-ar executa deloc. Și așa ne-ar pur și simplu produs întoarcere, care este 1. În mod similar, în cazul în care n-au nimic mai puțin decât 1-- în cazul în care au fost de 0, 1 negativ, whatever-- am fi mai întoarce 1, care este exact ceea ce Versiunea recursiv este de a face. Acum, dacă n este mai mare mult de 1, apoi vom merge de a face cel puțin o repetare a acestei buclă. Deci, haideți să spunem n este 5, atunci suntem de gând să faci ori de produs este egal cu 2. Deci, acum produs este de 2. Acum am de gând să faci ori de produs este egal cu 3. Acum e 6. Ori de produs este egal cu 4, acum e 24. Ori de produs este egal cu 5, acum e de 120. Deci, atunci în cele din urmă, vom revenind 120, care este corect 5 factorial. Întrebarea 20. Aceasta este cea în care va trebui să completați în acest tabel cu orice algoritm dat, nimic din ce am văzut, că se potrivește acestea centrare algoritmică ori aceste ori asimptotice termen. Deci, ce este un algoritm care este omega de 1, dar O mare de n? Deci, ar putea exista la infinit mai multe răspunsuri aici. Cel pe care l-am văzut, probabil, cel mai frecvent este doar de căutare liniară. Deci, în cel mai bun caz scenariu, elementul suntem căutați este de la începând din lista și așa în omega de 1 etapele, primul lucru pe care îl verifica, ne-am întoarce imediat că am găsit elementul. În cel mai rău caz, elementul este la sfârșitul anului, sau elementul nu este în listă, la toate. Așa că trebuie să caute întreaga listă, toate n elemente, și de aceea este o de n. Deci, acum este ceva care este atât de omega de n log n, și O mare de n log n. Ei bine, lucrul cel mai relevant am vazut aici este fuziona fel. Așa că îmbinare sortare, amintiți-vă, este în cele din urmă Theta de n log n, unde theta este definit dacă ambele omega și mari O sunt la fel. Atât n log n. Ce-i ceva care este omega de n, și O. n pătrat? Ei bine, din nou, nu e mai multe răspunsuri posibile. Aici se întâmplă să spunem bubble sort. Fel de inserție va lucra, de asemenea, aici. Amintiți-vă că bubble sort are ca optimizare în cazul în care, dacă sunteți în stare să mă prin întreaga listă fără a fi nevoie de a face orice swap-uri, atunci, ei bine, ne putem întoarce imediat că lista a fost sortate pentru a începe cu. Deci, în cel mai bun caz, e doar omega de n. În cazul în care nu e doar un frumos listă pentru a începe cu sortate, atunci avem de O n pătrat swap-urilor. Și, în sfârșit, ne-am selectie fel pentru n pătrat, atât omega și mare O. Întrebarea 21. Ce este număr întreg de preaplin? Ei bine din nou, similar cu mai devreme, avem doar finit multi biti pentru a reprezenta un număr întreg, Deci, poate 32 de biți. Să presupunem că avem un număr întreg semnat. Cea mai mare apoi în cele din urmă număr pozitiv putem reprezenta este de la 2 la 31 minus 1. Deci, ce se întâmplă dacă încercăm să apoi incrementarea că întreg? Ei bine, vom merge de la 2 la 31 minus 1, tot drumul până la negativ 2 la 31. Deci, această depășire număr întreg este atunci când vă păstrați incrementare, și în cele din urmă nu se poate a lua orice mai mare și doar inveleste tot drumul înapoi în jurul valorii de la o valoare negativă. Ce zici de un buffer overflow? Deci, un tampon overflow-- amintesc ce un tampon este. E doar o bucată de memorie. Ceva de genul un tablou este un tampon. Deci, un buffer overflow este atunci când când încercați să accesați memorie dincolo de sfârșitul acestei matrice. Deci, dacă aveți o matrice de dimensiune 5 și tu incercati sa accesati in suport matrice 5 sau 6 suport sau suport 7, sau ceva dincolo scop, sau chiar nimic Suport matrice below-- negativ 1-- toți cei care sunt buffer overflow. Te atinge de memorie într-un mod rău. Întrebarea 23. Deci, în aceasta aveți nevoie să pună în aplicare strlen. Și am să vă spun că puteți presupune s nu va fi considerat nul, astfel încât să nu trebuie să face orice verificare pentru nul. Și acolo sunt mai multe moduri ai fi putut face acest lucru. Aici ne-am lua simplă. Vom începe cu un contor, n. n este numărare câte caractere sunt. Deci, vom începe de la 0, iar apoi ne-am repeta peste întreaga listă. Este s suport 0 egal cu null caracter terminator? Amintiți-vă căutăm caracterul terminator nul pentru a determina cât de mult șir noastră este. Care se va termina orice șir relevant. Deci, este s suport 0 egal pentru terminatorul nul? În cazul în care nu e, atunci vom uita-te la s suport 1, s suport 2. Noi continuăm până când vom găsi terminatorul nul. După ce l-am găsit, atunci n conține lungimea totală a șirului, și ne putem întoarce doar asta. Întrebarea 24. Deci, aceasta este cea în care ați au de a face compromisul. Deci, un lucru este bun într-o singură Astfel, dar, în ce mod este rău? Deci, aici, merge tinde fel de fi mai rapid decât balon fel. Acestea fiind spuse that-- bine, acolo sunt mai multe răspunsuri aici. Dar cel principal este că bula fel este omega de n pentru o listă sortat. Amintiți-vă că tabelul tocmai am văzut mai devreme. Deci, cu bule soiuri omega de n, cel mai bun scenariu este capabil de a merge doar peste lista dată, determina hei acest lucru este deja sortate, și retur. Merge fel, indiferent de ce ce faci, este omega de n log n. Deci, pentru lista de sortat, cu bule sortare va fi mai rapid. Acum, ce putem spune despre legată de listele de? Deci, o listă legat poate să crească și reduce pentru a se potrivi cât mai multe elemente cum este necesar. După ce a spus that-- astfel de obicei, comparația directă va fi o legătură lista cu o serie. Deci, chiar dacă matrice poate să crească ușor și reduce pentru a se potrivi cât mai multe elemente după cum este necesar, o listă legată comparativ cu un un array-- matrice are acces aleator. Putem index în orice element particular de matrice. Deci, pentru o listă legat, nu putem du-te la al cincilea element, avem de a traversa de la început până când vom ajunge la al cincilea element. Și asta ne va împiedica să a face ceva de genul căutare binar. Vorbind de căutare binare, căutare binară tinde să fie mai rapid decât căutarea liniară. După ce a spus that-- astfel, un singur lucru este posibil este că nu se poate face binar cauta pe liste legate, o poti face doar pe tablouri. Dar, probabil, mai important, nu se poate face căutare binare pe o matrice care nu este sortată. Avans ați putea avea nevoie pentru a sorta matrice, și abia apoi se poate ce faci căutare binară. Deci, dacă lucru nu este sortat pentru a începe cu, apoi căutare liniară ar putea fi mai rapidă. Întrebarea 27. Deci, ia în considerare programul de mai jos, care va fi în slide-ul urmator. Și acest lucru este cea în care suntem gând să doriți să precizeze în mod explicit valorile pentru diverse variabile. Deci, să ne uităm la asta. Deci, o linie. Avem int x este egal cu 1. Asta e singurul lucru care sa întâmplat. Deci, la o linie, vom vedea în nostru tabel, că y, a, b, și tmp sunt toate leșinat. Deci, ce este x? Ei bine, ne-am stabilit o egală cu 1. Și apoi linia doi, ei bine, vom vedea că y este setat la 2, iar masa este deja completate pentru noi. Deci x este 1 și y este 2. Acum, linia trei, suntem acum in interiorul functiei swap. Ce am trece la schimb? Am trecut ampersand x pentru o, și y ampersand pentru b. În cazul în care problema anterioară afirmat că adresa de x este 0x10, și adresa y este 0x14. Deci a și b sunt egale cu 0x10 și 0x14, respectiv. Acum, la linia trei, care sunt x și y? Ei bine, nimic nu sa schimbat despre x și y în acest moment. Chiar dacă ele sunt într-un cadru stivă principal, ei încă mai au aceeași Valorile au făcut-o înainte. Noi nu am modificat nici memorie. Deci x este 1, y este 2. Bine. Deci, acum ne-a declarat int tmp egal să stea o. Deci, la linia patru, tot este aceeași, cu excepția tmp. Noi nu am schimbat valori de nimic în afară de tmp. Suntem stabilirea tmp egal să stea o. Ce este o stea? Ei bine, un puncte pentru x, Deci juca un se va x egal, care este 1. Deci, totul este copiat jos, iar tmp este setat la 1. Acum, următoarea linie. Stea un egal stea b. Deci, prin linia five-- bine din nou, totul este același, cu excepția indiferent de stea a este. Ce este o stea? Ei bine, tocmai am spus stea o este de x. Așa că schimbă x la egal stea b. Ce este steaua b? y. punctele B la y. Deci, stele și b este y. Așa că setarea x egal cu y, și orice altceva este la fel. Deci, vedem în rândul următor, care x este acum 2, iar restul sunt doar copiate jos. Acum, în următoarea linie, stea b este egal cu tmp. Ei bine, tocmai ne-a declarat stea b este y, așa că setarea y egal cu tmp. Orice altceva este același, așa că totul devine copiat jos. Ne setarea y egal cu TMP, care este unul, și orice altceva este aceeași. Acum în cele din urmă, linia șapte. Ne-am întors în funcția de principal. Suntem după ce de swap este terminat. Am pierdut a, b, și tmp, dar în cele din urmă noi nu se schimbă valori de ceva în acest moment, ne-am copia x și y în jos. Și vedem că x și y sunt acum 2 și 1 în loc de 1 și 2. Swap-a executat cu succes. Întrebarea 28. Să presupunem că vă confruntați mesajele de eroare de mai jos în timpul orelor de serviciu anul viitor, ca un CA sau TF. Sfătui cum să o rezolvi fiecare dintre aceste erori. Referință astfel nedefinit la getString. De ce te-ar putea vedea acest lucru? Ei bine, în cazul în care un student se utilizează GetString în codul lor, ei au Hash în mod corespunzător inclus CS50 dot h pentru a include biblioteca CS50. Ei bine, ceea ce fac ei Trebuie să repara această eroare? Ei au nevoie pentru a face o lcs50 liniuță de la linie de comandă atunci când acestea sunt compilarea. Deci, dacă acestea nu trec zăngăni lcs50 bord, sunt nu va avea reale cod care implementează getString. Întrebarea 29. Implicit de declarare funcția de bibliotecă strlen. Ei bine acest lucru acum, ei nu au face hash corespunzătoare includ. În acest caz particular, fișierul header de care au nevoie pentru a include este șir punct de ore, inclusiv șir punct de ore, acum student-- acum compilator are acces la declarațiile de strlen, și se știe că codul dvs. folosește corect strlen. Întrebarea 30. Mai multe conversii la sută decât argumentele date. Deci, ce e asta? Ei bine, amintiți-vă că aceste procente signs-- modul în care acestea sunt relevante pentru printf. Deci, în printf am putea percent-- s-ar putea imprima ceva ca la sută i backslash n. Sau am putea imprima ca la sută i, spațiu, sut i, spațiu, sut i. Deci, pentru fiecare dintre cei semne la sută, avem nevoie de pentru a trece o variabilă la sfârșitul printf. Deci, dacă spunem paren printf la sută i backslash Parant n apropiate, ei bine, noi spunem că suntem merge pentru a imprima un număr întreg, dar atunci nu ne trece printf un număr întreg de a imprima de fapt. Deci, aici mai mult la sută conversii decât argumentele date? Asta spune că avem o grămadă de procente, și nu avem suficiente variabile pentru a umple de fapt, în aceste procente. Și apoi cu siguranță, pentru întrebarea 31, cu siguranta pierdut 40 de bytes în una blocuri. Deci, aceasta este o eroare Valgrind. Aceasta spune că undeva în codul dvs., aveți o alocare care este de 40 bytes mare, astfel încât să malloced 40 de bytes, și niciodată nu-l eliberați. Cel mai probabil doar ce ai nevoie pentru a găsi unele scurgeri de memorie, și pentru a găsi în cazul în care aveți nevoie pentru a desprindă acest bloc de memorie. Și întrebarea 32, scrie invalid de dimensiune 4. Din nou, aceasta este o eroare Valgrind. Acest lucru nu trebuie să faci cu pierderi de memorie acum. Acesta este, cel mai likely-- Adică, e un fel de drepturi de memorie invalide. Și cel mai probabil, acest lucru este ceva un fel de buffer overflow. În cazul în care aveți o matrice, poate o matrice întreg, și să spune că e de dimensiune 5, și tu încercați să atingeți suportul matrice 5. Deci, dacă încercați să scrie pentru că valoare, că nu este o piesă de memorie pe care le au de fapt acces la, și deci ai de gând pentru a obține această eroare, spunând scrie invalid de dimensiune 4. Valgrind este de gând să recunoască că ești încercarea de a atinge memorie necorespunzător. Și asta e pentru quiz0. Sunt Rob Bowden, iar acest lucru este CS50.