[Powered by Google Translate] [Pjesa 4] [Less komode]
[Nate Hardison] [Universiteti i Harvardit]
[Kjo është CS50.] [CS50.TV]
>> Të gjithë të drejtë, të mirëpritur prapa në seksion.
Në seksionin e kësaj jave ne do të bëjmë disa gjëra.
Ne jemi duke shkuar për të parë Problem Set radhitje 2,
e cila është vendosur Cezari dhe Vigenere problem.
Dhe pastaj ne do të zhyten në shqyrtim Quiz 0
dhe të shpenzojnë pak kohë recapping çka kemi biseduar rreth
në secilin prej leksioneve deri më tani, dhe ne do të bëjmë edhe disa probleme
kuize nga viti paraardhës.
Në këtë mënyrë ju djema keni një mënyrë e mirë për t'u përgatitur për këtë.
>> Për të filluar, unë kam booted një çift të zgjidhjeve të mira
për të vendosur problemin e mëparshëm, Problem 2 Set, në këtë hapësirë.
Në qoftë se ju djema të gjithë e goditi këtë link,
dhe në qoftë se ju klikoni emrin tim dhe klikoni mbi rishikimin tim të parë
ju do të shihni caesar.c, e cila është pikërisht ajo që unë jam duke kërkuar në.
Le të flasim për këtë të vërtetë të shpejtë.
Kjo është vetëm një zgjidhje mostër.
Kjo nuk është domosdoshmërisht zgjidhje e përkryer.
Ka shumë mënyra të ndryshme për të shkruar këtë,
por ka disa gjëra që kam kërkuar për të nënvizuar
që unë pashë, si unë u klasifikim, gabimet e zakonshme që unë mendoj se
kjo zgjidhje bën një punë shumë të mirë të trajtimit.
>> E para është të paturit e një lloj komenti header në krye.
Në linjat 1 deri në 7 të shihni detajet,
çfarë saktësisht ky program është bërë.
Një praktikë e mirë standarde, kur ju jeni të shkruar kodin C
pavarësisht nëse programi juaj është të përfshira brenda një file të vetëm ose
nëse është e ndarë rreth dosjeve të shumta është që të ketë disa lloj
orientimin koment në krye.
Kjo është edhe për njerëzit që të shkojnë jashtë dhe të shkruani kodin në botën reale.
Kjo është ajo ku ata do të vënë informacion autorit.
Më poshtë janë përfshin #.
On line 16 ka kjo # define, të cilat ne do të kthehen në vetëm një grimë.
Dhe pastaj një herë funksioni fillon, fillon njëherë kryesore,
sepse ky program ka qenë të përfshira të gjitha në një funksion të vetme
Gjëja e parë që ndodh-dhe kjo është shumë idiomatike dhe tipike e një programi C
që merr në argumente command line-është se ai menjëherë kontrollon
>> për numërimin e argumentit, argc.
Drejtë këtu ne shohim se ky program është duke pritur 2 argumente saktësisht.
Mos harroni se ka Argumenti i parë që është e veçantë
që është gjithmonë emri i programit që është duke u drejtuar,
emri i file ekzekutues.
Dhe kështu ajo që kjo nuk është ajo parandalon përdoruesit nga drejtimin e programit
me argumente më shumë ose më pak.
Arsyeja që ne duam të kontrolloni për këtë të drejtë larg është për shkak se
ne nuk mund të vërtetë të hyrë në këtë koleksion argv drejtë këtu besueshme
deri sa ne kemi kontrolluar për të parë se sa e madhe është.
>> Një nga gabimet e zakonshme që unë pashë ishte njerëzit do të shkojnë menjëherë në
dhe kapje argv [1].
Ata do të kap argumentin kryesor nga grup dhe të bëjë një të i kontrolluar në të,
dhe pastaj ata do të bëjnë testin për argc si provë tjetër,
nëse janë apo jo Argumenti i parë ishte me të vërtetë një numër të plotë në të njëjtën kohë,
dhe që nuk punojnë, sepse në rast se nuk ka argumente të furnizuara
ju do të jetë grabbing një argument që nuk është atje ose duke u përpjekur për të rrëmbyer atë që nuk është atje.
>> Gjëja tjetër e madhe që ju duhet të njoftim është se
ju gjithmonë doni të shtypura nga një lloj mesazhi gabimi dobishme
për përdoruesit për të orientuar ato.
Unë jam i sigurt që ju keni të gjitha programe të kandidojë ku të gjithë një e papritur ajo crashes,
dhe ju merrni këtë dialog pak qesharake që pops up dhe thotë
diçka tmerrësisht fshehtë dhe ndoshta ju jep një gabim të kodit apo diçka të tillë
që e bën nuk ka kuptim.
Kjo është ajo ku ju me të vërtetë doni për të siguruar diçka të dobishme
dhe në shënjestër të përdoruesit në mënyrë që kur ata të drejtuar atë që ata të shkojnë "Oh," fytyra e pëllëmbë.
"Unë e di saktësisht se çfarë duhet të bëni. Unë e di se si për të rregulluar këtë."
>> Nëse ju nuk bëni shkruar një mesazh, atëherë ju deri në fund të vërtetë
lënë përdoruesit për të shkuar të shqyrtuar kodin tuaj burim
të kuptoj se çfarë shkoi keq.
Ka edhe disa herë që ju do të përdorni kode të ndryshme gabim.
Këtu kemi vetëm një për të përdorur thonë se ka qenë një gabim,
ka qenë një gabim, ka qenë një gabim.
Programet më të mëdha, shpesh programet që quhen nga programe të tjera,
do të kthehen një lloj të kodeve gabim të veçanta në skenarë të ndryshëm
të programuar të komunikuar atë që ju do të ndryshe
përdorni vetëm një mesazh të mirë për anglisht.
Cool.
Si punojmë poshtë, ju mund të shikoni ne tërheqë jashtë kyç.
Ne test për të parë nëse çelësi i përshtatet.
Ne kemi marrë një mesazh nga përdoruesi.
Arsyeja që ne bëjmë në këtë bërë, ndërsa loop-dhe kjo është diçka që ne do të mbulojë
në një pak pak, por kjo rezulton se në qoftë se ju shkruani kontrollit D
kur ju merrni se getString shpejtë në terminal
atë që në të vërtetë nuk është ajo dërgon një karakter të veçantë
te programit.
Është quajtur Elf, ose në fund të karakterit file.
Dhe në këtë rast, vargu ynë do të jetë mesazhi null,
kështu që kjo nuk ishte diçka që ne e kontrolluar në problemin vendosur vetë.
>> Por si ne do të shkojmë më, tani që ne kemi filluar të flasim për pointers
dhe alokimi dinamike kujtesës në tog,
kontrolluar for null sa herë që ju keni një funksion që mund të
kthehen null si një vlerë është diçka që ju do të dëshironi të merrni në zakonin e të bërit.
Kjo është kryesisht për ilustrim këtu.
Por kur ju e shihni getString në të ardhmen,
kështu që nga Problem Set 4, ju do të duan të mbajnë këtë në mendje.
Përsëri, kjo nuk është një çështje për problemin Set 3 ose që ne nuk e kishte mbuluar atë ende.
Së fundi, ne kemi marrë në këtë pjesë ku ne të merrni në lak kryesore encryption,
dhe ka disa gjëra në vazhdim e sipër këtu.
Së pari, ne iterate mbi vargun mesazh tërë vetë.
Këtu ne kemi mbajtur thirrjen strlen në gjendje,
të cilën një numër prej jush kanë vënë në dukje nuk është një mënyrë e madhe për të shkuar.
Kjo rezulton në këtë rast kjo nuk është gjithashtu e madhe,
pjesërisht për shkak se ne jemi modifikuar përmbajtjen e mesazhit vetë
brenda për lak, kështu që nëse ne kemi një mesazh që është 10 karaktere të gjatë,
hera e parë që ne të fillojë për lak strlen do të kthehen çfarë?
10.
>> Por në qoftë se ne atëherë modifikoni mesazhin, thonë se ne modifikoj karakterin e saj 5,
dhe ne hedhin në një karakter \ 0 në pozitën e 5-të,
në një përsëritje të mëvonshëm strlen (mesazhi) nuk do të kthehet atë që bëri
hera e parë që ne përsëritur,
por ajo do të kthehet në vend 5, sepse ne e hodhi në atë terminator null,
dhe gjatësia e vargut është përcaktuar
nga pozita e atij \ 0.
Në këtë rast, kjo është një mënyrë e madhe për të shkuar, sepse ne jemi duke modifikuar atë në vend.
Por ju vini re se kjo është në fakt çuditërisht e thjeshtë për të encrypt
në qoftë se ju mund të merrni matematikë saktë.
E gjithë kjo është e nevojshme është për të kontrolluar nëse janë apo jo letrën që ju jeni duke kërkuar në
uppercase vogle ose është.
>> Arsyeja që ne vetëm duhet të shikoni për këtë dhe ne nuk kemi për të kontrolluar për
është rasti alfa është për shkak se
nëse një karakter është uppercase ose nëse është e vogla
atëherë kjo është padyshim një karakter alfabetik,
sepse ne nuk kemi shifra uppercase dhe të vogla.
Gjë tjetër që ne bëjmë, dhe kjo është pak e ndërlikuar-
po ne kemi modifikuar standarde Cezarit shifër formulë
që ne i dha në specifikimet e caktuar e problemit.
Çfarë është e ndryshme këtu është se ne zbriten
në kryeqytetin rast MËDHAJA A, dhe pastaj kemi shtuar kapitalin e një
mbështetur në në fund.
>> Unë e di se disa prej jush e kanë bërë këtë në kodin tuaj.
A ndonjë nga ju të bëni këtë në parashtrimet tuaja?
Ju e bëri këtë. Mund ta shpjegoni se çfarë ky bën, Sahb?
Duke zbritur atë, sepse keni bërë një mod të drejtë pas tij,
ju duhet të merrni atë jashtë, kështu mënyrë që ju të merrni [kollitjes] pozita.
Dhe pastaj duke shtuar atë përsëri më vonë ju zhvendosur mbi atë që keni kërkuar.
Po, pikërisht.
Çfarë Sahb tha ishte se kur ne duam të shtoni
mesazhi ynë dhe çelësi jonë së bashku
dhe pastaj se, mod mod që nga NUM_LETTERS,
nëse ne nuk e shkallës mesazhin tonë në varg duhur 0-25 parë,
atëherë ne mund të përfundojnë duke marrë një numër të vërtetë i çuditshëm
sepse vlerat që ne jemi duke kërkuar në, kur ne shikojmë në mesazhin [i],
Kur ne shikojmë në karakterin e ith plain-text mesazhin tonë,
është një vlerë diku në këtë varg 65-122
bazuar në vlerat ASCII për uppercase një përmes z Fjala.
Dhe kështu, kur ne mod atë me 26 ose me NUM_LETTERS,
pasi që ishte # jonë të përcaktojë në krye të drejtë deri këtu,
që do të na japin një vlerë që është në varg 0-25,
dhe kemi nevojë për një mënyrë për të, atëherë shkallë që back up
dhe të merrni atë në rangun e duhur ASCII.
Mënyra më e lehtë për të bërë këtë është që vetëm të shkallës gjithçka poshtë
në varg 0-25 për të filluar me të,
dhe pastaj zhvendoset gjithçka kthehet deri në fund.
>> Një tjetër gabim i përbashkët që unë pashë njerëzit të kandidojë në është se
në qoftë se ju nuk mund të vërtetë të bëjë këtë shkallë menjëherë
dhe ju shtoni mesazhin dhe çelësin bashku dhe ju shtoni ato, të themi,
në një variabël char, problemi me këtë
është që mesazhi [i] është një numër relativisht i madh për të filluar me-
mos harroni se të paktën 65 në qoftë se ajo është një karakter uppercase-
në qoftë se ju keni një çelës të madh, të themi, diçka si 100,
dhe ju shtoni ato së bashku në një 2 char nënshkruar ju jeni do të merrni një vërshim ujërash.
Ju jeni do të merrni një vlerë që është më i madh se 127,
cila është vlera më e madhe që një ndryshore char mund të mbajë.
Përsëri, kjo është arsyeja pse ju do të doni të bëni atë gjë e tillë për të filluar me.
Disa njerëz mori rreth atë rast, duke bërë një tjetër, nëse dhe testimin e
për të parë nëse ajo do të del nga shtrati para se të bëjnë këtë,
por në këtë mënyrë merr rreth se.
Dhe pastaj në këtë zgjidhje, ne shtypet nga vargut të tërë në fund.
Njerëz të tjerë të shtypura nga një karakter në një kohë. Të dyja janë awesome.
Në këtë pikë, ju djema keni ndonjë pyetje, ndonjë koment në lidhje me këtë?
Gjërat që ju pëlqen, gjëra që ju nuk më pëlqen?
>> Unë kisha një pyetje.
Ndoshta unë humbur atë gjatë shpjegimit tuaj, por si e bën këtë program
kaloni hapësirat për lidhjen kyç për kohëzgjatjen e tekstit?
Kjo shifër është vetëm Cezari. >> Oh, sorry, yeah.
Po, ne do të shohim se.
Në shifër Caesar kemi marrë rreth se për shkak
ne vetëm kthyer karaktere.
Ne vetëm ndërruar ata në qoftë se ata ishin të uppercase ose Fjala.
Ju djema ndjenjë mjaft të mirë në lidhje me këtë?
Ndjehen të lirë për të kopjuar këtë shtëpi, të marrë atë,
krahasojnë atë me atë që ju djema shkruajtur.
Patjetër të ndjehen të lirë për të dërguar pyetje për atë shumë.
Dhe përsëri, e kuptojnë se qëllimi këtu me problemin tuaj përcakton
nuk është për të marrë ju djema për të shkruar kodin perfekt për grupe tuaja problem.
Kjo është një përvojë mësimi. Po.
>> Përsëri në të bërë, ndërsa loop, në qoftë se ajo është e barabartë null,
kështu null thjesht do të thotë asgjë, ata vetëm goditi të hyjë?
Null është një vlerë të veçantë akrep,
dhe ne i përdorim null kur ne duam të themi
ne kemi një ndryshore tregues që është duke treguar asgjë.
Dhe kështu zakonisht do të thotë se kjo është e ndryshueshme, kjo është e ndryshueshme mesazh
është e zbrazët, dhe këtu, sepse ne jemi duke përdorur llojin CS50 veçantë string,
çfarë është lloji CS50 string?
A keni parë se çfarë është ajo, kur Davidi u tërhoq prapa individualitet në leksionin?
Kjo është një i shokuar-kjo është një akrep, e drejtë?
Mirë, po. >> Kjo është një char *.
Dhe kështu me të vërtetë ne mund të zëvendësojë këtë
drejtë këtu me mesazhin char *,
dhe kështu funksionin getString, në qoftë se ajo nuk ka marrë me sukses një varg nga përdoruesit,
ajo nuk mund analizimi një varg, dhe një rast në të cilën ai nuk mund analizimi një varg
është nëse përdoruesi lloje fundin e karakterit fotografi, D kontrollit,
e cila nuk është diçka që ju bëni në mënyrë tipike, por nëse kjo ndodh
atëherë funksioni do të kthehet këtë vlerë zero si një mënyrë për të thënë
"Hej, unë nuk e kam marrë një varg."
Çfarë do të ndodhte nëse ne nuk e vënë mesazh = null,
e cila është diçka që ne nuk e kemi bërë ende?
Pse do që të jetë një problem këtu?
Sepse unë e di që ne biseduam pak në leksionin mbi rrjedhjet e kujtesës.
Po, le ta bëjë këtë, dhe le të shohim se çfarë ndodh.
>> Pyetja Vasili ishte se çfarë ndodh në qoftë se ne nuk mund të vërtetë kanë
ky mesazh Testi = null?
Le të shkoni deri në krye.
Ju djema mund të komentojë këtë.
Në fakt, unë do të të shpëtuar atë në një rishikim.
Kjo do të jetë Revision 3.
Çfarë ju do të duhet të bëni për të drejtuar këtë program është që ju do të duhet të klikoni këtë ikonë veshje deri këtu,
dhe ju do të keni për të shtuar një argument për të.
Ju do të keni për të dhënë atë argumentin kryesor që ne duam të kalojë në një argument command line.
Këtu unë jam duke shkuar për të dhënë atë numrin 3. Më pëlqen 3.
Tani zooming nga mbrapa, drejtimin e programit.
Është drejtimin, hartimin, ndërtimin.
Këtu ne do të shkojmë. Është pritur që të nxitet.
Nëse unë lloji në diçka si hello-ku bëri që të shkojnë?
Oh, programi im mori një kohë të gjatë për të kandiduar. Unë u jawing për një kohë të gjatë.
Këtu ajo shkon.
Tani unë lloji në përshëndetje.
Ne e shohim se ai kodon të përshtatshme.
Tani çfarë ndodh në qoftë se ne bëjmë getString shpejtë të kthehen null?
Mos harroni, kam thënë se ne e bëri atë duke shtypur kontrollit D në të njëjtën kohë.
Unë do të shkoni deri këtu. Ne do të kandidojë përsëri.
Ndërtimi. Ka ajo shkon.
Tani kur unë goditi kontrollit D
I kam këtë linjë që thotë opt/sandbox50/bin/run.sh, faji segmentimit.
A keni djema shihet se më parë?
>> [Student] Pse është atje nuk->> Na vjen keq?
[Student] Pse është atje nuk ka hale thelbësore në këtë rast?
Hale kryesor është-pyetja është pse nuk ka ndonjë hale core këtu?
Pyetja është se nuk mund të jetë, por hale thelbi është një file
që merr ruajtur në hard drive.
Në këtë rast ne kemi aftësi të kufizuara mërzi kryesore
në server drejtuar në mënyrë që të mos ketë njerëz seg përgënjeshtrojnë
dhe ndërtimin ton mërzi kryesore.
Por ju mund të merrni një të tillë.
Mërzi kryesore janë lloj i gjë që ju shpesh mund të çaktivizoni,
dhe ndonjëherë ju bëni.
Faji segmentimit, për t'iu përgjigjur pyetjes tuaj, Vasili,
është thënë se kemi provuar për të hyrë në një akrep
që nuk u ngrit për pikë për çdo gjë.
Të ruaj të Binky në video, kur Binky përpiqet të
shkoni hyni një tregues që nuk është duke treguar asgjë?
Në këtë rast unë mendoj se teknikisht treguesi është duke treguar diçka.
Është treguar null, i cili është teknikisht 0,
por që është përcaktuar që të jetë në një segment që nuk është arritshëm
nga programin tuaj, kështu që ju të merrni një defekt segmentimit
sepse ju nuk jeni duke hyrë kujtesës që është në një segment të vlefshme
si segment grumbull ose segment rafte apo segment të dhënave.
Cool.
Ndonjë pyetje më shumë rreth Cezarit?
>> Le të lëvizë. Le të shikojmë në Revision 2 vërtetë shpejt.
Kjo është Vigenere.
Këtu në Vigenere
ne do të ecin nëpër këtë shumë shpejt, sepse, përsëri,
Vigenere dhe Cezari janë mjaft të ngjashme.
Komenti header është përpara,
# Define është e para për të shmangur përdorimin e këtyre numrave magjike.
Gjë e bukur është që të thoni që ne të kërkuar për të lëvizur në
një alfabet të ndryshme ose diçka të tillë.
Në vend që të shkojnë dorë të ndryshojë të gjitha 26-së në kodin
Ne mund të ndryshojë këtë në 27 ose rënie atë poshtë
në qoftë se ne ishim duke përdorur alfabete të ndryshme, gjuhë të ndryshme.
Përsëri, ne kemi marrë këtë kontroll të numërimit argumentit,
dhe me të vërtetë ju mund të pothuajse të marrë këtë si një template.
Pretty much çdo program që ju shkruani duhet të ketë-
në qoftë se ajo merr argumente command line-disa sekuenca e linjave
që lexon si kjo në fillim.
Kjo është një nga testet mendje e shëndoshë e parë që ju doni të bëni.
>> Ja çfarë nuk u kemi bërë të sigurtë që
fjalen ishte e vlefshme, dhe që ishte kontrolloni dytë që ne e bëmë.
Vini re përsëri se kemi ndarë këtë nga argc dhe 2.
Vini re se në këtë rast një gjë që ne duhej të bëja ishte në vend
e përdorimit të një të i kemi dashur për të vërtetuar të gjithë tekstin,
dhe në mënyrë që të bëjë që ju të vërtetë duhet të shkoni karakter nga karakteri
mbi varg.
Nuk ka asnjë mënyrë e mirë për të thirrur diçka në atë
sepse edhe, për shembull, një të unë do të kthehen 0
në qoftë se ajo nuk mund të kuptoj një numër të plotë, kështu që nuk do të punojnë edhe.
Përsëri, mesazhi i bukur thënë përdorues pikërisht ajo që ndodhi.
Atëherë këtu, përsëri, kemi trajtuar edhe rastin kur
përdoruesi lloje në një karakter D të kontrollit të rastit.
>> Dhe pastaj Charlotte kishte një pyetje më parë për mënyrën se si kemi arritur të kaloni hapësira
në vargun tonë këtu.
Ky ishte lloj i ngjashëm me atë që ne e bëmë me programin Myspace
që ne e bëmë në nenin, dhe në këtë mënyrë ka punuar
është se ne gjurmuar numrin e shkronjave që ne do të shihet.
Siç kemi ecur mbi vargun mesazh, siç kemi ecur mbi karakter nga karakteri,
kemi gjurmuar indeksin si pjesë e tonë për lak, dhe pastaj ne gjithashtu zbuloi
numri i letrave, kështu që jo të veçanta karaktere, jo-shifrat, jo-hapësirë ​​të bardhë
se ne do të shihet në ndryshore të veçantë.
Dhe atëherë kjo zgjidhje modifikon kryesore
për të marrë një numër të plotë aktuale kyçe, dhe kjo bën që të fluturojnë,
drejtë para se ajo pastaj shkon për të encrypt karakterin aktuale mesazh.
Ka disa zgjidhje që ishin shumë të madh të përkryer
që do të ndryshojë kyç deri kur testimit për vlefshmërinë çelësi së.
Përveç kësaj për të bërë të sigurtë se karakteri dhe fjalen
ishte një karakter alfabetik ajo gjithashtu u kthye atë në një numër të plotë
në varg 0-25 për të pastaj kaloni pasur nevojë të bëjë që më vonë në këtë për lak.
Përsëri, ju shihni këtu kjo është me të vërtetë kodin e saktë të njëjtën
që kemi përdorur në Çezarit në këtë pikë.
Ju jeni duke bërë njëjtën gjë e saktë, kështu që mashtrim i vërtetë është parafytyruar
se si ta kthejnë fjalen në një numër të plotë.
>> Një gjë që ne e bëmë këtu që është pak i dendur
është që ne përsëriti këtë frazë, I guess ju mund të telefononi atë,
3 herë veçanta në linjat 58, 59, dhe 61.
Mund dikush të shpjegojë se çfarë pikërisht kjo frazë nuk?
Është hyrë në një karakter, si ju tha.
Po, kjo është [padëgjueshme] një karakter në fjalë,
dhe kështu që është numri i shkronjave parë, sepse ju jeni vetëm duke lëvizur së bashku
fjalen herë ju keni parë letrën,
kështu që do të kaloni në mënyrë efektive hapësira dhe stuff like that.
Po, pikërisht.
Dhe pastaj një herë ju keni parë bosh fjalen qe sapo mod kështu që ju kthehem rreth.
Saktësisht. Kjo është një shpjegim të përsosur.
Çfarë Kevin thënë është se ne duam të indeksit në fjalen.
Ne duam për të marrë karakterin num_letters_seen, në qoftë se ju do,
por në qoftë se num_letters_seen tejkalon gjatësinë e fjalen,
mënyrën se si ne të kthehet në varg duhur është ne përdorim operatorin mod
në mënyrë efektive për të përfunduar rreth.
Për shembull, si në afat të shkurtër, fjalen ynë është proshutë,
dhe kjo është 5 shkronja e gjatë.
Por ne kemi parë 6 letra në tekstin tonë të thjeshtë në këtë pikë
dhe Encrypted 6.
Ne do të përfundojë deri në qasjen e num_letters_seen,
cili është 6, MOD gjatësia e fjalen, 5,
dhe kështu që ne do të merrni 1, dhe kështu ajo që ne do të bëjmë është që ne do të
futu brenda e parë karakterin e fjalen sonë në atë pikë.
>> Të gjithë të drejtë, ndonjë pyetje në Vigenere
para se të shkojë në?
Ju djema ndjenjë mjaft të mirë në lidhje me këtë?
Cool, great.
Unë dua të bëni të sigurtë që ju djema jeni duke shans për të parë kodin
që ne mendojmë se duket e mirë dhe të kenë mundësinë për të mësuar nga ajo.
Kjo do të jetë e fundit ne do të jetë duke përdorur hapësira për momentin,
dhe ne jemi duke shkuar për tranzicionin tani, dhe unë jam duke shkuar për të shkuar në cs50.net/lectures
kështu që ne mund të bëjë një grimë të vogël e shqyrtimit quiz.
Mënyra më e mirë Unë mendoj se të fillojnë të bëjnë quiz shqyrtim
është për të ardhur tek kjo faqe leksione, cs50.net/lectures,
dhe nën secilën nga titujt javë, kështu që nëse unë shoh këtu në Javës 0,
Unë shoh se ne kemi një listë të temave që ne të mbuluar në Javën 0.
>> Nëse ndonjë nga këto tema duket të panjohura për ju
ju patjetër do të duan për të shkuar mbrapa dhe gërryen shënime leksion dhe ndoshta
edhe cek nëpërmjet leksioneve, të shikojnë ata përsëri në qoftë se ju doni
për të marrë një të ndjehen për atë që po ndodh me secilin nga këto tema.
Unë do të them gjithashtu këtë një vit e burimeve të ftohtë ne kemi marrë
Janë këto pantallona të shkurtra që ne kemi krijuar, dhe në qoftë se ju shikoni në Javës 0,
ne nuk kemi të gjitha temat e mbuluara, por ne kemi marrë mjaft disa prej tyre,
disa nga ato komplikuar, kështu që shikuar këto pantallona të shkurtra përsëri
është një mënyrë e mirë për të merrni ju deri në shpejtësinë.
Në mënyrë të veçantë, unë jam duke shkuar për të vënë në një prizë për 3 në fund, pasi që kam bërë ato.
Por në qoftë se ju jeni duke luftuar me binare, bit, magji, se lloj i stuff,
binar është një vend i madh për të filluar.
ASCII është një tjetër që është e mirë për të parë shumë.
Ju edhe mund të shikojnë mua në shpejtësi 1.5X në qoftë se unë jam duke shkuar tepër i ngadalshëm për ju.
Që nga ajo e shqyrtimit, të ndjehen të lirë për të bërë këtë.
>> Vetëm për të filluar me të vërtetë shpejt, ne jemi duke shkuar për të shkuar nëpërmjet një çift të këtyre problemeve quiz
vetëm për të dybek shpejt nëpërmjet këtyre.
Për shembull, le të shohim problemin 16 që unë kam marrë të drejtë deri këtu në bord.
Ne kemi marrë këtë llogaritje e mëposhtëm në binar,
dhe ne duam të tregojmë ndonjë punë.
Mirë, unë jam duke shkuar për të dhënë këtë një e shtënë.
Ju djema duhet të ndjekin së bashku me letër,
dhe ne do të bëjmë këtë me të vërtetë shpejt.
Ne duam për të kryer llogaritjen e mëposhtëm në binar.
Unë kam marrë 00.110.010.
Dhe unë jam duke shkuar për të shtuar në 00.110.010.
Për matematikë gjenive pas së bashku në shtëpi,
kjo është shumëzuar në mënyrë efektive nga 2.
Le të fillojë.
Ne jemi duke shkuar për të ndjekur algorithm njëjtë edhe se ne bëjmë
kur ne të shtoni numra decimal së bashku.
Me të vërtetë dallimi i vetëm këtu është se ne loop përsëri përreth
pasi ne kemi 1 + 1 vend të sapo kemi marrë në 10.
>> Në qoftë se ne fillojmë nga e djathta, me të vërtetë shpejt, çfarë është shifra e parë?
[Student] 0. >> [Nate H.] 0.
Madhe, shifra e dytë?
[Student] 1.
[Nate H.] A është kjo një 1? 1 + 1 është?
[Student] 10.
[Nate H.] Pikërisht, kështu që çfarë është shifra që unë të shkruaj drejtë nën 2 ato shtuara së bashku?
[Student] 1, 0, ose 0 dhe pastaj mbajnë 1.
[Nate H.] 0 dhe të mbajnë një 1, pikërisht.
Next lart një, Basil, ju jeni.
Çfarë është e treta? >> [Basil] 1.
[Nate H.] 1, perfekt. Kevin?
[Kevin] 0. >> [Nate H.] 0, Charlotte?
[Charlotte] 0. >> [Nate H.] Yeah, dhe çfarë të bëj?
[Student] 1.
[Nate H.] Dhe çfarë të bëj? Dhe atëherë unë mbajnë 1.
Perfect, Sahb? >> [Sahb] Tani ju keni 1.
[Nate H.] Dhe nuk kam të bëjë asgjë këtu?
[Sahb] Pastaj për një tjetër ju keni 1 sepse ke i çuar mbi 1.
[Nate H.] Madhe, kështu që këtu ne mund të përfundojë atë.
Cool.
[Student] A 0 + 0 = 0?
0 + 0 = 0.
1 + 1, si ju tha, është 10, ose 1, 0, më tepër.
10 është një term i gabuar, sepse për mua do të thotë 10 numrin 10,
dhe kjo është gjë e çuditshme se si ne jemi duke përfaqësuar atë kur ne jemi duke e shkruar atë.
Ne përfaqësojnë numrin 2 nga 1, 0, dhe numri 10 është pak ndryshme.
>> Çfarë është lloj i bukur për binare është se ka të vërtetë nuk janë aq shumë
raste që ju duhet për të mësuar.
Nuk 0 + 0 = 0, 0 + 1 = 1,
1 + 1 është 0, dhe pastaj mbajnë një 1,
dhe pastaj ju mund të shihni këtu në kolonën e tretë nga e drejta
kemi pasur këtë 1, 1, dhe 1.
Dhe 1 + 1 + 1 është një 1,
dhe keni kryer një tjetër 1.
Kur ju jeni duke bërë shtimin binar, shumë e thjeshtë.
Unë do të bëjë një çift shumë nga këto të mendje e shëndoshë kontrolloni veten
para se të shkoni në, sepse kjo është
ndoshta diçka që ne do të shohim në quiz.
Tani le të bëjmë këtë një tjetër si.
Le ta bëjmë problem të 17.
Ne jemi duke shkuar për të kthyer në numrin e mëposhtëm binar të dhjetore.
Unë kam marrë 10100111001.
Kujtohet në video binar që kam bërë
Unë eci nëpër një çift të shembujve, dhe i tregoi se si
gjithçka punon kur ju jeni duke bërë atë në decimal.
Kur ju jeni duke punuar në përfaqësimin decimal Unë mendoj se ne jemi
në këtë pikë në jetën tonë në mënyrë të rrjedhshëm në atë që
kjo është goxha e lehtë për të komentoj mbi mekanizmin e se si në fakt funksionon.
>> Por për të bërë një radhitje të shpejtë, në qoftë se unë kam numrin 137
kjo me të vërtetë do të thotë-dhe përsëri, kjo është në decimal përfaqësim-
numri 137 në decimal të thotë se kam 1 x 100 + 10 + 3 x 7 x 1.
Kjo është e gjitha duke qëndruar në ekran.
Dhe pastaj nëse ju shikoni në këto numra të drejtë këtu,
100, 10 dhe 1, ju shihni se ata janë në fakt të gjitha fuqitë e 10.
Unë kam 10 m², 10 ¹, dhe 10 në zero.
Ne kemi një lloj të ngjashëm të gjë në binar,
përveç se baza tona, siç e quajmë ne, është 2 në vend të 10.
Këto 10s që kam shkruar këtu poshtë në pjesën e poshtme,
kjo 10 m², 10 ¹, 10 në zero, 10 është baza jonë,
dhe eksponenti, 0, 1, ose 2,
nënkuptohet nga pozita e shifra në numrin që kemi shkruar.
1, nëse ne shikojmë në të, kjo 1 është në pozitën e 2.
E 3 është në pozicionin 1, dhe 7 është në pozicionin 0.
Kjo është se si ne të merrni eksponentët ndryshme më poshtë për bazat tona.
>> Pas gjithë kësaj we'll-në fakt, ju e dini se çfarë?
Ne do të bëjmë-ku e ka butonin undo tim të shkojë?
Ka ajo shkon.
I love this prish gjë.
Pas kësaj unë mendoj se për mua të paktën
mënyra më e lehtë për të filluar konvertimin e një numri binar
ose një numër heksadecimal, ku baza është 16
dhe jo 10 ose 2 është që të shkoni përpara dhe të shkruani nga
bazat eksponentët dhe për të gjitha numrat në numrin tim binar në krye.
Në qoftë se ne fillojmë nga e majta në të djathtë përsëri,
cila është lloj i counterintuitive,
Unë do të ndryshojë përsëri në të zezë këtu, ne kemi 2 në pozicionin 0,
dhe pastaj ne kemi 2 ¹, 2 ²,
dhe pastaj 2 në 3, 2 të 4, 2 në 5, 6,
7, 8, 9, dhe 10.
Këta numra Unë kam shkruar se janë të gjithë eksponentët.
Unë vetëm shkroi bazat këtu në 3 parë vetëm për hapësirë.
>> Në këtë pikë unë jam duke shkuar për të shkuar përpara dhe unë jam në të vërtetë do të fshihet
sende që ne e bëmë në decimal, në qoftë se është në rregull.
Ju keni marrë të gjitha këto.
Ata prej jush shikuar online Unë jam i sigurt se do të jetë në gjendje për të Rewind mua, nëse ju dëshironi.
Switching back to stilolaps.
Tani, ajo që ne mund të bëjmë, në qoftë se ju djema nuk janë tërësisht deri në shpejtësinë në fuqitë tuaja të 2,
kjo është krejtësisht e ftohtë.
Kjo ndodh. Unë e kuptoj.
Unë dikur kishte një intervistë për punë, ku unë u tha unë duhet të di të gjitha fuqitë e 2
deri përmes 2 në 30.
Kjo nuk ishte një punë që kam marrë.
Gjithsesi, ju djema mund të shkoni përpara dhe të bëjë matematikë këtu,
por me binar ajo nuk ka të vërtetë të bëjë kuptim,
dhe as nuk ka kuptim me decimal ose hexadecimal ose,
të bëjë matematikë nga ku ju keni zero.
Ju mund të shihni se unë kam 0 këtu, një 0 këtu, këtu 0, 0 këtu, këtu 0, 0 këtu.
Pse nuk mund të ketë kuptim për të bërë matematikë aktuale
për të llogaritur fuqinë e duhur për atë pozitë 2?
Pikërisht, si tha Charlotte, ajo do të jetë 0.
Mund edhe të kurseni vetes kohë nëse llogaritjen kompetencat e 2 nuk është kostum tuaj të fortë.
Në këtë rast, ne vetëm duhet për të llogaritur atë për 2 të 0-cila është?
[Student] 1.
[Nate H.] 1, 2 në 3 cila është-?
[Student] 8. >> [Nate H.] 8.
2 deri në 4?
[Student] 2. Unë jam i keq, 1.
[Nate H.] 2 në 4 është 16, saktësisht.
2 në 5, Kevin? >> 32.
[Nate H.] 32, 2 në 8?
[Student] 32 x 8, 256.
[Nate H.] Perfect.
Dhe 2 në 10?
[Student] 1024.
[Nate H.] Yeah, 1024.
>> Pasi ne kemi marrë këto numra mund të përmbledhur të gjithë ata lart.
Dhe ky është vendi ku ajo është me të vërtetë e rëndësishme për të bërë disa gjëra.
Njëra është të shkoni të ngadalshëm dhe të kontrolloni punën tuaj.
Ju mund të thoni se ka një 1 në fund të këtij numri,
kështu që unë duhet patjetër të marrë një numër të rastësishëm, si rrjedhojë e mia,
sepse të gjitha ato të tjera do të jetë edhe numrat
duke qenë se kjo është një numër binar.
Gjë tjetër për të bërë është në qoftë se ju të merrni në këtë pikë në testin
dhe ju keni shkruar atë deri tani
dhe ju jeni drejtimin jashtë kohe
shikoni në numrin e pikave që ky problem është me vlerë.
Ky problem, si ju mund të shihni, nëse unë rrokullisje prapa në laptop tim të vërtetë shpejt-
ky problem është me vlerë 2 pikë, kështu që kjo nuk është lloj i kësaj
ju duhet të shkojnë nëpër qoftë se ju jeni me të vërtetë presion për kohën.
Por ne do të kaloni prapa në iPad, dhe ne do të shkojnë nëpërmjet saj të vërtetë shpejt.
>> Më pëlqen bërë numrat e vegjël parë
sepse unë të gjeni se më të lehtë.
Më pëlqen 32 dhe 8 për shkak se ata të shkojnë së bashku mjaft lehtë, dhe ne kemi marrë 50.
16 dhe 1 merr 17.
Nuk kemi marrë 57,
dhe pastaj ne mund të bëjmë pjesën tjetër të këtë, kështu që ne mund të bëjmë 57, 156.
Come on.
Njeriu, pra, le të shohim.
Ne kemi pasur 57, 256, dhe 1024.
Në këtë pikë, unë do të vetëm të shkojnë përmes.
Unë nuk kam asnjë clue. Unë në mënyrë të qartë duhet të lexoni deri në këtë.
7, 6, dhe 4, që ju të merrni 17.
1, 5, 5, 2, 13.
Pastaj ne të merrni 3, dhe pastaj ne të merrni 1.
1337.
Vezë të Pashkëve, dikush?
Çdokush njeh këtë numër?
Chris njeh numrin. Çfarë do të thotë kjo, Chris?
[Chris] Leet.
Leet, kështu që nëse ju shikoni në këtë, kjo duket si Leet.
Sende Hacker. Watch për atë lloj stuff në afatmesme ose Quiz, jo.
Nëse ju shihni atë lloj stuff dhe ju jeni të pyesin "Huh,"
që mund të vërtetë do të thotë diçka.
Nuk e di. Davidi i pëlqen vënë atë in
Kjo është një mënyrë e mirë për mendje e shëndoshë të kontrolluar atë.
Si rregull, unë mund të shoh se çfarë po ndodh.
>> Kjo është sende 0/Week Jave 1.
Nëse ne të kaloni prapa në laptopë tonë tani,
zoom jashtë, dhe disa gjëra tjera.
Ka ASCII, të cilat ne kemi qenë duke bërë një shumë me grupe problem.
Ky nocion i kapitalit A. Cila është se me të vërtetë?
Duke e ditur se është integer decimal.
65 është ajo që është plotësisht në tabelën ASCII,
dhe kjo është arsye se kompjuteri shkruan atë,
dhe kjo është se si ne kemi qenë duke marrë larg me të vërtetë shkrim
kryeqyteti karakteri A dhe personazhi me të vogla a
në disa nga këto zgjidhje dhe vendos probleme që ju keni qenë duke bërë.
Një disa gjëra të tjera.
Ne kemi marrë deklaratat, shprehje boolean, kushtet unazore, variablat dhe temat.
>> Ata të gjithë duket për të bërë kuptim për pjesën më të madhe?
Disa prej këtij terminologjisë është një shokuar pak në kohë.
Më pëlqen të mendoj për një deklaratë si për diçka më pjesë që përfundon me një pikëpresje.
Deklarata të tilla si x = 7, e cila përcakton një ndryshore,
thirri me sa duket x = 7.
Me sa duket x është gjithashtu një tip që mund të ruajë numrin 7,
kështu që kjo është një int, ose ndoshta një float ose një të shkurtër apo një char,
diçka të tillë.
Një shprehje boolean është duke përdorur këto dyfishtë barabartë
dhe zhurmë barabartë ose jo të barabartë, më pak se, më e madhe se,
më pak se ose e barabartë me, të gjitha llojet e që stuff.
Kushtet pastaj nëse janë deklarata tjetër.
Unë do të mbani mend se ju nuk mund të ketë një tjetër pa një korresponduese, nëse.
Gjithashtu, ju nuk mund të ketë një tjetër në qoftë se pa një korresponduese, nëse.
Sythe, kujtojnë 3 llojet e sythe ne kemi qenë të përgatitur në ju
për dy të fundit e seksioneve dhe vendos problematike.
Përdorimi bëni ndërsa kur ju jeni duke marrë të dhëna përdoruesi,
duke përdorur sythe, ndërsa deri në një gjendje të caktuar është e vërtetë,
dhe pastaj duke përdorur ato për sythe në qoftë se keni nevojë për të
e di që përsëritje e lak jeni aktualisht në është se si unë mendoj për këtë.
Ose në qoftë se ju jeni duke bërë një për çdo karakter në një varg unë dua të bëj diçka,
për çdo element në një grup unë dua të bëjë diçka për këtë element.
>> Temat dhe ngjarjet.
Këto ne nuk kemi mbuluar në mënyrë eksplicite në C,
por mos harroni kjo nga e para.
Ky është nocioni i pasur Scripts ndryshme.
Kjo është edhe ky nocion të transmetimit një ngjarje.
Disa njerëz nuk përdorin transmetimin në projektet e tyre në fillim,
e cila është tërësisht e ftohtë,
por këto janë 2 mënyra të ndryshme të trajtimit të kësaj çështjeje të madhe të quajtur konkurrencën,
e cila është se si ju të merrni për të ekzekutuar programe
ose në dukje të ekzekutuar në të njëjtën kohë?
Detyrat e ndryshme të rrjedhshëm, ndërsa detyra të tjera janë gjithashtu running.
Kjo është se si sistemi juaj operativ duket për të punuar.
Kjo është arsyeja pse edhe pse, për shembull,
Unë kam marrë drejtimin shfletuesin tim, unë gjithashtu mund të kthehet në Spotify dhe të luajë një këngë.
Kjo është më shumë një gjë konceptuale për të kuptuar.
Unë do të marrë një vështrim në temat shkurtër
në qoftë se ju dëshironi të mësoni më shumë për këtë.
>> Le të shohim, unë besoj se nuk mund të ketë qenë
një problem për këtë në një nga këto.
Përsëri, unë mendoj se temat dhe ngjarjet nuk janë diçka që ne do të mbulojë në C
vetëm për shkak se ajo është shumë më e vështirë se sa në para.
Ju nuk duhet të shqetësohen për atë atje, por patjetër të kuptuar konceptet,
të kuptojnë se çfarë po ndodh.
Para se ne shkojmë më, ndonjë pyetje në Javës 0 materiale?
Gjithkush ndjenjë mjaft të mirë?
Variablave të kuptuarit dhe çfarë është një variabël është?
>> Lëvizin më. Java 1.
Një disa gjëra këtu që nuk janë të mbuluara në veçanti
në shqyrtimin quiz domosdoshmërisht dhe gjithashtu janë gjërat më konceptuale për të menduar rreth.
E para është ky nocion i asaj kod burim, hartuesit dhe kodin objekt janë.
Çdokush? Vasili.
Është objekt Kodi-Unë do të thotë kodi burim është çfarë keni vënë në tingëllimë,
dhe kodi objekti është ajo tingëllimë vë jashtë në mënyrë që kompjuteri juaj mund të lexoni programin.
Saktësisht.
Source code është kodi C që ju të vërtetë lloji deri.
Kodi objekti është ajo që ju merrni nga tingëllimë.
Është 0s dhe 1s në atë format binar.
Atëherë ajo që ndodh është kur ju keni një bandë e dosjeve objekt,
thonë se ju jeni hartimin e një projekt apo një program që përdor fotografi të shumta kod burim,
të cilat nga Konventa janë dhënë extension. C file.
Kjo është arsyeja pse ne kemi caesar.c, vigenère.c.
Nëse jeni të shkruar programe Java ju jepni atyre extension. Java.
Programet python kanë shtrirjen. Py shpesh.
>> Një herë ju keni të shumta. Fotografi c, ju përpilojnë ato.
Tingëllimë pështyn nga të gjitha junk këtë binar.
Pastaj për shkak se ju doni vetëm 1 program
ju keni lidhjen Linker të gjitha këto fotografi së bashku objekti
1 në skedë të ekzekutueshme.
Kjo është edhe ajo që ndodh kur ju përdorni bibliotekën CS50, për shembull.
Biblioteka CS50 është edhe kjo. Fotografi h header
që keni lexuar, se # includecs50.h.
Dhe pastaj ajo është gjithashtu një bibliotekë të veçantë binar skedar
që është hartuar që është 0s dhe 1s,
dhe se-l flamuri, kështu që nëse ne do të shkojmë përsëri në hapësirat tona dhe ne shikojmë vërtetë shpejt
Në çfarë po ndodh këtu, kur ne shikojmë në komandën tonë tingëllimë,
ajo që ne kemi marrë është ky është kodi ynë source file drejtë këtu.
Këto janë një bandë e flamujve përpiluesit.
Dhe pastaj në fund, këto-l flamuj Lidhje në
fotografi aktuale binare për këto 2 bibliotekat, bibliotekës CS50 dhe pastaj bibliotekës matematikë.
>> Kuptimi çdo lloj qëllim dosjeve '
në procesin e hartimit është diçka që ju do të duan të jenë në gjendje të
japin të paktën një pasqyrë të nivelit të lartë të.
Source code vjen in Kodi Object vjen nga.
Fotografi code object lidhin së bashku, dhe ju merrni një skedar të bukur, ekzekutues.
Cool.
Kjo është edhe ku ju mund të merrni gabime në pikat e shumta
në procesin e hartimit.
Kjo është ajo ku, për shembull, në qoftë se ju merrni këtë flamur që lidh,
the CS50 flamuri, dhe ju heq atë në hapësirat ose kur ju jeni drejtimin kodin tuaj,
kjo është ajo ku ju do të merrni një gabim në fazën e lidh,
dhe linker do të thonë: "Hej, ju quajti një funksion getString
që është në bibliotekën CS50 ".
"Ju më tha se ishte në bibliotekë CS50, dhe unë nuk mund të gjejnë kodin për të."
Kjo është ajo ku ju duhet të lidhë atë në, dhe kjo është e veçantë
nga një gabim përpilues sepse përpiluesi është duke kërkuar në sintaksë dhe atë lloj stuff.
Është mirë të dini se çfarë po ndodh kur.
>> Gjëra të tjera të dini rreth.
Unë do të thonë se ju patjetër duan të marrin një vështrim në të shkurtër në typecasting bërë nga Jordan
për të kuptuar se çfarë ints janë nën kapuç,
çfarë chars janë nën kapuç.
Kur ne flasim për ASCII dhe ne fakt duken në tryezë ASCII,
ajo që është bërë është duke na dhënë një vështrim nën kapuç
se si kompjuteri në fakt paraqet kapitalin A dhe 7 shifra
dhe një presje dhe një pikëpyetje.
Kompjuteri gjithashtu ka mënyra të veçanta për të përfaqësuar
Numri 7, si një numër të plotë.
Ajo ka një mënyrë të veçantë për të përfaqësuar numrin 7 si një numër lundrues pikë,
dhe ato janë shumë të ndryshme.
Typecasting është se si ju tregoni kompjuteri "Hej, unë dua që ju të konvertohet
nga një përfaqësim në një tjetër përfaqësim ".
Pse nuk kemi marrë një vështrim në atë.
>> Unë do të marrë një vështrim në të shkurtër në bibliotekat dhe të shkurtër në hartuesit.
Ata flasin për procesin e hartimit,
çfarë është një bibliotekë, dhe të shkoj për disa nga këto pyetje që ju mund të merrni kërkuar.
Pyetjet në 1 Week materiale?
A ka ndonjë çështje në këtu që të duket e frikshme që ju dëshironi për të mbuluar?
Unë jam duke u përpjekur për të hedhur nëpër shumicën e këtyre temave më parë në mënyrë që ne mund të merrni për
pointers dhe të bëjë një grimë të vogël të recursion.
Mendime?
Çdo gjë për të mbuluar?
Koha për disa çokollatë ndoshta?
Ju djema janë duke punuar nëpërmjet saj.
Unë jam duke shkuar për të mbajtur sipping në kafe tim.
Java 2.
Thirrje të mira, thirrja e mirë.
Në javën e 2, ne biseduam pak më shumë në lidhje me funksionet.
>> Në vendos para problemeve pak nuk kemi me të vërtetë shkruani ndonjë funksion në të gjitha
përveç që funksion?
[Student] kryesore. >> Kryesore, pikërisht.
Dhe kështu që ne kemi parë në kostume të ndryshme që kryesore vesh.
Nuk është një në të cilën ajo nuk merr argumente,
dhe ne vetëm të themi zbrazëti në mes të kllapa,
dhe pastaj ka një tjetër ku ne do të duan të marrin argumente command line,
dhe siç e pamë, kjo është ajo ku ju keni argc int dhe string koleksion argv
apo tani që ne kemi ekspozuar string në fakt të jetë * char se është
ne jemi duke shkuar për të filloni të shkruani atë si char * argv dhe pastaj kllapa.
Në Set Problem 3, you guys pa një bandë e funksioneve,
dhe ju zbatuar një bandë e funksioneve, barazim, shikoni lart ngjitem.
Prototipa janë shkruar të gjithë atje për ju.
>> Ajo që kam kërkuar për të biseduar rreth këtu me funksione të vërtetë shpejt
është se ka 3 pjesë të tyre sa herë që ju shkruani një funksion.
Ju duhet të specifikoni llojin e kthimit të funksionit.
Ju duhet të specifikoni një emër për funksionin, dhe pastaj ju duhet të specifikojë
lista argumenti ose lista parametri.
Për shembull, në qoftë se unë do të shkruaj një funksion për të përmbledhur një bandë e integers
dhe pastaj të kthehen tek unë shumën çfarë do të jetë tipi im kthim
nëse kam kërkuar për të përmbledhur integers dhe pastaj kthehen shumë?
Atëherë emri i funksionit.
Nëse unë shkoj përpara dhe të shkruani në të gjelbër, kjo pjesë është lloji kthimit.
Kjo pjesë është emri.
Dhe pastaj në mes të kllapa
është vendi ku unë jap argumentet,
shpesh shkurtuar si args, ndonjëherë i quajtur params per parametrave.
Dhe në qoftë se ju keni një, ju vetëm specifikoni një.
Nëse ju keni të shumta që ju ndajë secili prej tyre me një presje.
Dhe për çdo argument të ju jap 2 gjëra që janë-Kevin?
[Kevin] Ju duhet të jepni llojin dhe pastaj emrin.
Dhe pastaj emrin dhe emrin është emri që ju jeni do të përdorin
për t'iu referuar atij argumentit brenda funksionit shuma,
brenda funksionit që ju jeni duke shkruar.
>> Ju nuk keni për të-për shembull, në qoftë se unë jam duke shkuar për të përmbledhur,
thonë se, një grup i integers-we'll bëjë array int,
dhe unë do të jap vetes disa formatimin e teksteve kaçurrel ka-
atëherë kur të kalojë një koleksion në funksion shuma
Kam kalojë atë në pozicionin e parë e lista argumentit.
Por array që unë të kalojë në nuk duhet të ketë arr emrin.
Arr do të jetë si unë i referohen atij argumentit brenda trupit të funksionit.
Gjë tjetër që ne duhet të marrë parasysh,
dhe kjo është paksa e ndryshme nga funksionet, por unë mendoj se është një pikë e rëndësishme,
është se në C, kur unë jam duke shkruar një funksion si kjo
si mund ta di se sa elemente janë në këtë grup?
Kjo është disi e një pyetje mashtrim.
Ne biseduam në lidhje me këtë pak në seksionin e javës së kaluar.
Si mund ta dini numrin e elementeve brenda një koleksion në C?
A ka ndonjë mënyrë?
>> Ajo rezulton se nuk ka asnjë mënyrë për të ditur.
Ju duhet të kalojë atë në vete.
Nuk është një mashtrim që ju mund të bëni
nëse jeni në të njëjtin funksion në të cilin grup ka qenë deklaruar,
dhe ju jeni duke punuar me një grup të rafte.
Por kjo funksionon vetëm nëse ju jeni në të njëjtin funksion.
Sapo ju të kalojë një koleksion në një tjetër funksion, ose në qoftë se ju keni deklaruar një grup
dhe ju vënë atë grup në grumbull, ju keni përdorur malloc
dhe se lloj i stuff, atëherë të gjitha bastet janë jashtë.
Pastaj ju të vërtetë duhet të kalojnë nëpër
një argument të veçantë ose në një tjetër parametër
ju thënë se sa e madhe është array.
Në këtë rast, unë do të duan të përdorin një presje-Jam keq, ajo që po ndodh jashtë ekranit këtu-
dhe unë do të kalojë në një tjetër argument i
dhe e quajti atë len int për gjatësi.
>> Një gjë që mund të vijë deri në quiz
është duke i kërkuar që ju të shkruani apo të zbatojë një funksion të veçantë të quajtur diçka.
Nëse ne nuk do të ju japin prototip, kështu që kjo gjë të tërë këtu,
kjo rrëmujë e tërë quhet deklaratë funksion apo prototip funksion,
kjo është një nga gjërat e para që ju do të dëshironi të shtie në dorë në qoftë se ajo nuk është dhënë
për ju menjëherë në quiz.
Mashtrim tjetër që unë kam mësuar është se
thonë se ne bëjmë të ju jap një prototip për një funksion, dhe ne themi, "Hej, ju keni marrë për të shkruar atë."
Brenda formatimin e teksteve kaçurrel që ju keni në quiz
nëse vëreni se ka një lloj kthimi dhe vëreni se lloji kthimi
është diçka tjetër përveç zbrazëti, që do të thotë se funksioni nuk ka kthim asgjë,
atëherë një gjë që ju patjetër doni të bëni është të shkruani
disa lloj deklarate kthimit në fund të funksionit.
Kthimit, dhe në këtë rast, ne do të vënë një bosh, sepse ne duam që të plotësoni në bosh.
Por kjo ju merr duke menduar në mënyrë të drejtë në lidhje me mënyrën se si jam unë do t'i qasen këtij problemi?
Dhe kjo ju kujton se ju jeni do të duhet të kthehen një vlerë
tek thirrësi e funksionit.
>> Po. >> [Student] A Stili aplikohet kur ne jemi duke shkruar kodin në quiz?
Të tilla si vulë dhe këtë lloj të stuff? >> [Student] Yeah.
Jo jo, sa më shumë.
Unë mendoj se një shumë e-kjo është diçka që ne do të qartësojë në quiz në ditën e,
por zakonisht shqetësuese në lidhje me # përfshin dhe se lloj i stuff, kjo është lloj i jashtë.
[Student] A keni nevojë për të komentuar kodin tuaj shkruar me dorë?
A keni nevojë për të komentuar kodin tuaj shkruar me dorë?
Duke komentuar është gjithmonë e mirë nëse ju jeni të shqetësuar në lidhje me kredi të pjesshme
apo doni të komunikoni synimin tuaj për grader.
Por unë, përsëri, do të sqarojë në quiz vetë dhe në ditën quiz,
por unë nuk besoj se ju do të kërkohet për të shkruar komente, nr.
Zakonisht jo, por kjo është padyshim gjë e tillë ku
ju mund të komunikojnë qëllimin tuaj, si "Hej, ky është vendi ku unë jam duke shkuar me të."
Dhe nganjëherë kjo mund të ndihmojë me kredi të pjesshme.
Cool.
>> Vasili.
[Basil] Çfarë është dallimi në mes të deklaruar, të themi, int Lang
në argumentet apo parametrat kundrejt deklaruar një ndryshore brenda funksionit?
Wow, kafe shkoi poshtë laring.
[Basil] Ashtu që gjërat që ne duam të vënë në argumente.
Po, kjo është një pyetje e madhe.
Si mund të zgjidhni atë që ju doni të vënë në argumentet
kundrejt çfarë gjëra që ju duhet të bëni në brendësi të funksionit?
Në këtë rast kemi të përfshira të dyja këto si argumente
sepse ata janë diçka që kushdo që do të përdorin funksionin shuma
duhet të specifikojë ato gjëra.
>> Funksioni Shuma, si kemi biseduar rreth, nuk ka asnjë mënyrë për të ditur
sa e madhe është ajo array merr nga thirrësit e saj, ose kush është duke përdorur funksionin shuma.
Ajo nuk ka asnjë mënyrë për të ditur se sa e madhe është se array.
Arsyeja që ne të kalojë në këtë gjatësi të drejtë këtu si argument
është për shkak se kjo është diçka që ne jemi në thelb thënë thirrësi të funksionit,
kushdo që do të përdorin funksionin shuma, "Hej, jo vetëm që ju keni për të na dhënë një sërë
e ints, ju gjithashtu duhet të na tregoni se sa e madhe array që na keni dhënë është. "
[Basil] Ata do të jenë të dyja argumentet command line?
Jo, këto janë argumentet aktuale që ju do të kalojnë në funksion.
>> Më lejoni të bëjë një faqe të re këtu.
[Basil] Si emri do të kalojë-
[Nate H.] Nëse unë kam int kryesor (i pavlefshëm),
dhe unë jam duke shkuar për të vënë në 0 time kthimit këtu poshtë në pjesën e poshtme,
dhe thonë se unë dua të thirrur funksionin shuma.
Unë dua të them int x = Shuma ();
Për të përdorur funksionin shuma duhet të kalojë në të dy grup që unë do të duan për të përmbledhur
dhe gjatësia e vektorit, kështu që kjo është ku
supozuar kam pasur një grup të ints,
thonë pata int numbaz [] = 1, 2, 3,
lloji i përdorimit që hacked deri sintaksë të drejtë atje,
atëherë çfarë do të bëj është në shumën unë do të duan të kalojnë në
dyja numbaz dhe numri 3
për të treguar funksionin shuma "Mirë, këtu është array Unë dua që ju të përmbledhur."
"Këtu është madhësia e tij."
Bën që të bëjnë kuptim? Bën që të përgjigjem pyetjes tuaj?
>> Në shumë mënyra kjo nuk paralelisht atë që ne jemi duke bërë me kryesore
kur ne kemi argumente command line.
Një program si Caesar shifër, për shembull, se e nevojshme
argumente command line nuk do të jetë në gjendje të bëjë asgjë.
Kjo nuk do të dinë se si për të encrypt në qoftë se ju nuk e tregoni atë se çfarë kyç për të përdorur
ose në qoftë se ju nuk e tregoni atë se çfarë string ju kërkuar për të encrypt.
Bërë për të dhëna, ky është vendi ku ne kemi marrë 2 mekanizma të ndryshëm
për të marrë të dhëna në nga përdoruesit, për të marrë informacion në nga përdoruesit.
Për Problem Set 1 pamë këtë GetInt, getString rrugë, GetFloat
e bërë për të dhëna, dhe që është quajtur përdorur lumë standarde input.
Kjo është pak më ndryshe.
Kjo është diçka që ju mund të bëni në një kohë në krahasim me
kur ju kërkoj programin, kur ju filloni programi running.
Argumentet command line të gjithë janë të specifikuara, kur ju filloni running program.
Ne kemi qenë përzierja e dy prej atyre.
Kur ne përdorim argumente për një funksion, kjo është më shumë si argumente command line në kryesore.
Kjo është kur ju kërkoj funksionin që ju duhet të tregoni atë
çfarë saktësisht ajo ka nevojë në mënyrë që të kryejnë detyrat e veta.
Një tjetër gjë e mirë për të parë dhe unë do të ju lejojnë të shikoni në atë në kohën tuaj rezervë,
dhe ajo ishte e mbuluar në quiz-ishte ky nocion i fushës
dhe variablave lokale kundrejt variablave globale.
A i kushtoj vëmendje për këtë.
>> Tani që ne jemi duke marrë për gjëra të tjera për këtë,
në Javën e 3 ne kemi filluar duke folur në lidhje me kërkimin dhe klasifikim.
Kerkuar dhe sorting, të paktën në CS50,
është shumë e një hyrje në disa nga pjesët më teorike të shkencës kompjuterike.
Problemi i kërkimit, problemi i sorting
janë të mëdha, problemet kanonike.
Si mund të gjeni një numër të veçantë në një rrjet të integers miliarda?
Si mund të gjeni një emër të veçantë brenda një libër telefoni
që është ruajtur në laptop?
Dhe kështu që ne të futur këtë nocion të drejtuara herë asymptotic
me të vërtetë të matur se sa kohë, sa e vështirë këto janë problemi,
sa kohë ata e marrin për të zgjidhur.
Në, unë besoj, quiz 2011 e ka një problem që unë mendoj se meriton
mbulon shumë shpejt, e cila është kjo, problemi 12.
O jo, kjo është Omega.
>> Këtu ne jemi duke folur në lidhje me kohën më të shpejtë të mundshme drejtuar
për një algoritmi të caktuar dhe pastaj koha slowest të jetë e mundur drejtuar.
Kjo Omega dhe o janë me të vërtetë vetëm shkurtore.
Ata janë shkurtesat notational për të thënë
sa shpejt në rastin më të mirë të mundshme do të kandidojë tonë algorithm,
dhe si i ngadalshëm në rastin më të keq të mundshëm do të algorithm tonë drejtuar?
Le të bëjmë një çift nga këto, dhe këto janë gjithashtu të mbuluara
në të shkurtër në simbol asymptotic, të cilën unë rekomandoj.
Jackson bëri një punë vërtet të mirë.
Me kërkimin binar, ne flasim për kërkimin binar si të qenit një algoritmi,
dhe ne zakonisht flasin për atë në drejtim të saj e madhe O.
Çfarë është e madhe o?
Çfarë është koha të drejtuar slowest të jetë e mundur të kërkimit binar?
[Student] N ²?
Afër, unë mendoj të ngjashme me këtë.
Kjo është një shumë më shpejt se kaq.
[Student] Binary? >> Po, kërko binar.
[Student] Është log n.
Hyni n, kështu që çfarë do të thotë të hyni n?
Ajo gjysmave atë çdo përsëritje.
Pikërisht, kështu që në rastin slowest të jetë e mundur,
thonë se në qoftë se ju keni një koleksion të renditura
e një milion integers dhe numri që ju jeni duke kërkuar për
është ose elementi i parë në rrjet ose element shumë i fundit në grup.
Mos harroni, algorithm kërko binar punon duke shikuar në elementin e mesme,
shohim nëse kjo është ndeshja që ju jeni duke kërkuar për të.
Nëse është, atëherë i madh, keni gjetur atë.
>> Në rastin më të mirë të mundshme, sa shpejt e bën të kandidojë kërkimit binar?
[Studentët] 1.
1, është koha të vazhdueshme, të mëdha o 1. Po.
[Student] Unë kam një pyetje. Kur ju thonë të hyni n, do të thotë në lidhje me bazën 2, e drejtë?
Po, kështu që kjo është gjë tjetër.
Ne themi n log, dhe unë mendoj kur isha në shkollë të mesme
Unë gjithmonë supozohet se ishte log bazë 10.
Yeah, kështu që po, hyni 2 Baza zakonisht është ajo që ne përdorim.
Përsëri, duke shkuar prapa në kërkim binar, nëse ju jeni në kërkim për ose
elementi në fund, ose elementi në fillim,
sepse ju filloni në mes dhe pastaj ju hidhni
cilado gjysma nuk i plotëson kriteret që ju jeni duke kërkuar për,
dhe ju shkoni në gjysmën tjetër dhe gjysmën tjetër dhe në gjysmën tjetër.
Nëse unë jam duke kërkuar për elementin më të madh në rrjet milion integer
Unë jam duke shkuar për të përgjysmojë atë në log më të madhe të 1 milion herë
para se në fund të provuar dhe të shohim se elementi unë jam duke kërkuar për
është në i madh ose në indeksin më të lartë të array,
dhe që do të marrë të log n, hyni prej 1 milion herë.
>> Lloj Bubble.
A ju djema kujtohet algoritmin e renditjes flluskë?
Kevin, ju mund të jepni një përmbledhje të shpejtë të asaj që ndodhi në algorithm lloj flluskë?
[Kevin] Në thelb ajo shkon përmes gjithçka në listë.
Ajo duket në dy të parat.
Nëse e para është më e madhe se ajo e dytë ajo këmbime tyre.
Pastaj ai krahason dytë dhe të tretë, të njëjtën gjë, këmbime,
tretë dhe të katërt, të gjithë rrugën poshtë.
Numrat më të mëdha do të ndjekin deri në fund.
Dhe pas sythe megjithatë shumë ju jeni bërë.
Pikërisht, kështu që çfarë Kevin thënë është se ne do të shikojnë numrat mëdha
flluskë deri tek fundi i vektorit.
Për shembull, a keni mendje duke ecur ne nëpërmjet këtë shembull nëse kjo është array tonë?
[Kevin] Ju do të merrni 2 dhe 3.
3 është më e madhe se 2, kështu që ju bie në ujdi tyre.
[Nate H.] E drejta, kështu që ne swap këto, dhe kështu që ne të merrni 2, 3, 6, 4 dhe 9.
[Kevin] Pastaj ju krahasoni 3 dhe 6.
3 është më e vogël se 6, kështu që ju lënë ato,
dhe 6 dhe 4, ju do të bie në ujdi tyre, sepse është më i vogël se 4 6.
[Nate H.] E drejta, kështu që unë të marrë 2, 3, 4, 6, 9.
[Kevin] Dhe 9 është më e madhe se 6, kështu që ju lënë atë.
Dhe ju do të kthehet nëpër atë përsëri.
>> [Nate H.] Am kam bërë në këtë pikë? >> [Kevin] Nr
Dhe pse nuk jam bërë unë në këtë pikë?
Sepse ajo duket si grup ime është e renditura. Unë jam duke kërkuar në të.
[Kevin] Shko nëpër atë përsëri dhe sigurohuni që nuk ka më këmbime
para se të mund plotësisht të ndaluar.
Pikërisht, kështu që ju duhet të mbani duke shkuar nëpër dhe të sigurohemi se nuk ka këmbime
që ju mund të bëni në këtë pikë.
Ajo ishte me të vërtetë vetëm fat, si ju tha, se ne fund deri
vetëm që ka të bëjë 1 kalojë përmes dhe ne jemi të renditura.
Por për të bërë këtë në rastin e përgjithshëm në fakt ne do të duhet ta bëjnë këtë mbi dhe mbi përsëri.
Dhe në fakt, kjo ishte një shembull i rastit më të mirë të mundshme,
ashtu siç e pamë në problem.
Ne pamë se rasti mirë të mundshme u n.
Ne shkuam nëpër kohë array 1.
Cila është rasti keqe e mundshme për këtë algorithm?
[Kevin] N ².
Dhe çfarë bën që të duken si? Çfarë do një vështrim grup si kjo do të marrë kohë n ²?
[Kevin] [padëgjueshme] renditura.
Pikërisht, kështu që nëse kam pasur koleksion 9, 7, 6, 5, 2,
e parë që do të 9 flluskë gjithë rrugën deri.
Pas 1 përsëritje, ne do të kemi 7, 6, 5, 2, 9.
Atëherë 7 do flluskoj lart, 6, 5, 2, 7, 9, dhe kështu mbi dhe kështu radhë.
>> Ne do të duhet të kalojnë nëpër të gjithë grup n herë,
dhe ju në fakt mund të merrni pak më të saktë se kjo
sepse një herë ne kemi lëvizur 9 të gjithë rrugën deri në pozicionin e tij të fundit të mundshme
ne e dimë që ne kurrë nuk duhet të krahasohen kundër atij elementi përsëri.
Sapo ne fillojmë bubbling deri në 7
ne e dimë që ne mund të ndalojë herë 7 është e drejtë para 9
pasi ne kemi krahasuar tashmë 9 për të.
Nëse ju bëni këtë në një mënyrë të zgjuar kjo nuk është me të vërtetë, unë mendoj, se sa kohë.
Ju nuk jeni do të krahasohen të gjitha të mundshme [e padëgjueshme] kombinimet
çdo herë të vetme që ju të shkoni nëpër çdo përsëritje.
Por ende, kur flasim për këtë sipërme detyruar të themi se
ju jeni duke kërkuar në n ² krahasime të gjithë rrugën nëpër.
>> Le të kthehemi, dhe që ne jemi duke filluar për të marrë një pak të shkurtër në kohë
Unë do të thonë se ju duhet patjetër të kalojnë nëpër pjesën tjetër të kësaj tabele,
plotësoni të gjitha jashtë.
Mendoni për shembuj. Mendoni për shembuj konkretë.
Kjo është me të vërtetë i dobishëm dhe të dobishme për të bërë.
Tërheqë atë jashtë.
Kjo është lloj i tabelës se si ju shkoni nëpër në shkenca kompjuterike
ju duhet të vërtetë të fillojë të dini këto zemrën nga.
Këto janë llojet e pyetjeve që ju të merrni në intervista.
Këto janë llojet e gjërave që janë të mira për të dini,
dhe të mendojnë për ato raste buzë, me të vërtetë duke parafytyruar se si të mendojnë për
duke e ditur se për flluskë lloj array keqe të mundshme
për të zgjidhur me këtë është ai që është në mënyrë të kundërt.
>> Pointers. Le të flasim pak për pointers.
Në minutat e fundit, ne kemi këtu
E di që kjo është diçka së bashku me dosjen e I / O se është mjaft e re.
Kur ne flasim për pointers arsye ne duam të flasim për pointers
është për shkak se, një, kur ne jemi duke punuar në C
ne jemi me të vërtetë në një nivel mjaft të ulët në krahasim me gjuhët e programimit më moderne.
Ne jemi aktualisht në gjendje për të manipuluar variablave në kujtesë,
kuptoj se ku ata janë të vendosura në të vërtetë brenda RAM tonë.
Pasi të keni shkuar për të marrë klasat e sistemit operativ ju do të shihni
se kjo është, përsëri, një lloj i abstraksionit.
Kjo nuk është e vërtetë rasti.
Ne kemi marrë kujtesës virtuale që është fshehur ato detaje nga ne.
>> Por tani për tani ju mund të supozojmë se kur ju keni një program,
për shembull, kur ju filloni drejtimin e Cezarit programin tuaj, shifër
Unë do të kaloni përsëri në iPad tim të vërtetë shpejt-
se në programin fillimi tuaj, nëse keni, të themi,
4 gigabajt të RAM për laptopë tuaj,
ju merrni vënë mënjanë këtë copë, dhe ne do të quajmë këtë RAM.
Dhe ajo fillon në një vend që ne jemi duke shkuar për të thirrur 0,
dhe ai përfundon në një vend që ne do të thërrasë 4 gigabajt.
Unë me të vërtetë nuk mund të shkruaj. Njeri, që është hacked.
Kur programi juaj ekzekuton
sistemi operativ carves deri RAM,
dhe ajo specifikon segmente të ndryshme për pjesë të ndryshme të programit tuaj për të jetuar in
Këtu poshtë kjo zonë është lloj i një tokë e askujt.
Kur ju shkoni deri pak përpara këtu
ju keni marrë në të vërtetë vendi ku
Kodi për jetën tuaj të programit.
Se kodi aktual binare, që file e ekzekutueshme në fakt merr ngarkuar në memorie
kur ju drejtuar një program, dhe ajo jeton në segmentin kodin.
Dhe si programi juaj ekzekuton procesor duket në këtë segment kodi
të kuptoj se çfarë është udhëzim tjetër?
Çfarë është vija e ardhshme e kodit kam nevojë për të ekzekutuar?
>> Ka gjithashtu një segment të dhënave, dhe kjo është ku ato konstante string
të ruhet që ju keni qenë duke përdorur.
Dhe pastaj më larg deri atje është ky vend quhet grumbull.
Ne hyni në kujtesë në atje duke përdorur malloc,
dhe pastaj drejt krye të programit tuaj
ka rafte,
dhe kjo është ajo ku ne kemi qenë duke luajtur për shumicën e fillimit.
Kjo nuk është në shkallë apo ndonjë gjë.
Një shumë e kjo është shumë e varur makinë,
sistemit operativ të varur, por kjo është se si gjërat relativisht merrni chunked deri.
Kur ju drejtuar një program dhe ju të deklarojë një ndryshore të quajtur x-
Unë jam duke shkuar për të nxjerrë një tjetër kuti poshtë, dhe kjo do të jetë RAM si.
Dhe unë jam duke shkuar për të parë.
Ne do të vijoj dehur për të treguar kjo është vetëm një pjesë e vogël e RAM
dhe jo të gjithë prej saj si ne të nxjerrë në krye.
>> Nëse unë deklaroj një ndryshore integer quajtur x,
atëherë ajo që unë në fakt të merrni është një hartë
që është ruajtur në tabelën simbolin e programit tim
që lidh x emrin në këtë rajon e kujtesës që unë kam tërhequr
të drejtë këtu në mes të hekurave vertikale.
Nëse unë kam një linjë të kodit në programin tim që thotë se x = 7
procesor di "Oh, në rregull, unë e di që jeton në këtë vend x në kujtesë."
"Unë jam duke shkuar për të shkuar përpara dhe të shkruajnë një 7 atje."
Si e bën atë të dini se çfarë është në këtë vend kujtesë?
E pra, kjo është bërë të gjithë në kohën e kompilimit.
Përpiluesi kujdeset për shpërndarjen e ku secili prej variablave do të shkojnë
dhe krijimin e një hartë të veçantë ose më lidh dots
midis një simbol dhe ku ajo shkon, emri i një variabël
dhe ku ajo do të jetojë në kujtesën.
Por kjo rezulton se ne fakt mund të hyni në atë në programet tona si.
Kjo merr rëndësi kur ne fillojmë të flasim për disa nga strukturat e të dhënave,
cila është një koncept që ne jeni do te prezantuar më vonë.
>> Por tani për tani, ajo që ju mund ta dini është se unë mund të krijojë një tregues për këtë vend, x.
Për shembull, unë mund të krijojë një variabël akrep.
Kur kemi krijuar një variabël akrep ne përdorim simbol yll.
Në këtë rast, kjo thotë se unë jam duke shkuar për të krijuar një tregues për një int.
Kjo është një lloj i vetëm si çdo tjetër.
Ne jepte një ndryshore si y,
dhe pastaj ne kemi vendosur të barabartë me adresë, në një adresë.
Në këtë rast, ne mund të vendosni për pikë në y x
duke marrë adresën e X, të cilat ne bëjmë me ky simbol,
dhe pastaj ne kemi vendosur y për pikë për të.
Çfarë kjo në thelb do është nëse ne shikojmë në RAM tonë
kjo krijon një variabël të veçantë.
Ajo do të thërrasë atë y,
dhe kur kjo linjë e kodit ekzekuton
ajo në fakt do të krijojë një tregues të vogël që ne zakonisht të nxjerrë si një shigjetë,
dhe ajo vendos y për pikë në x.
Po.
[Student] Nëse x është tashmë një akrep, do të ju vetëm bëni
int * y = x vend të pasur simbol?
Po.
Nëse x është tashmë një akrep, atëherë ju mund të vendosni 2 pointers të barabarta me njëri-tjetrin,
në të cilin rast y nuk do të theksojnë x,
por kjo do të tregojnë për çfarëdo x është treguar.
Për fat të keq, ne jemi jashtë kohës.
>> Ajo që unë do të thonë se në këtë pikë, ne mund të flasim për këtë offline,
por unë do të thoja të fillojnë të punojnë me këtë problem, # 14.
Ju mund të shihni se ka tashmë një pak plotësuar për ju këtu.
Ju mund të shihni se kur ne të deklarojë 2 pointers, int * x * y dhe,
dhe vini re se treguar nga * ardhshëm të ndryshueshme ishte diçka që ishte bërë vitin e kaluar.
Ajo rezulton se kjo është e ngjashme me atë që ne jemi duke e bërë këtë vit.
Kjo nuk ka rëndësi se ku ju shkruani * kur ju jeni duke deklaruar treguesin.
Por ne kemi shkruar * ardhshme të llojit
sepse kjo e bën shumë të qartë se ju jeni duke deklaruar një ndryshore akrep.
Ju mund të shihni se shpallja e 2 pointers na jep 2 kuti.
Këtu, kur ne kemi vendosur x barabartë me malloc
ajo që kjo është thënë është vendosur mënjanë memorie në tog.
Kjo kuti pak të drejtë këtu, kjo rrethi, është e vendosur në tog.
X është vënë për të.
Vini re se y ende nuk është duke treguar asgjë.
Për të marrë kujtesës-për të ruajtur numrin 42 në x
ne do të përdorin atë simbol?
[Student] * x = 42.
Pikërisht, * x = 42.
Kjo do të thotë ndiqni arrow dhe hedhin 42 në atje.
Këtu ku ne kemi vendosur y dhe x kemi y treguar x.
Përsëri, kjo është vetëm si ajo ka thënë Kevin ku ne kemi vendosur y barabartë me x.
Y nuk është vënë për të x.
Përkundrazi, ajo është treguar për atë që x është treguar si.
>> Dhe pastaj në fund të fundit në këtë kuti janë 2 gjëra të mundshme që ne mund të bëjmë.
Njëra është që ne mund të themi * x = 13.
Gjë tjetër është që ne mund të themi-Alex, ju e dini se çfarë ne mund të bëjmë këtu?
Ju mund të thoni * x = 13 ose-
[Student] Ju mund të them çfarëdo int.
[Nate H.] Nëse kjo u përmendur si një variabël int ne mund ta bëjë këtë.
Ne gjithashtu mund të themi * y = 13 sepse ata janë të dy duke treguar në të njëjtin vend,
kështu që ne mund të përdorim ose të ndryshueshme për të arritur atje.
Po. >> [Student] Çfarë do të duket si në qoftë se ne vetëm të themi x int është 13?
Që do të deklaruar një ndryshore të ri të quajtur x, e cila nuk do të punojë.
Ne do të kemi një përplasje, sepse ne x deklaruar të jetë një tregues deri këtu.
[Student] Nëse ne vetëm kishte atë deklaratë nga vetë çfarë do të duket si në aspektin e rrethit?
Nëse do të kishim x = 13, atëherë ne do të kemi një kuti, dhe në vend se të paturit e një shigjetë
vijnë nga kutia ne do të tërheqë atë si vetëm një 13.
[Student] Në të kutisë. Rregull.
>> Faleminderit për shikimin, dhe fat të mirë në Quiz 0.
[CS50.TV]