>> JASON Hirschhorn: Bonvenon, al ĉiuj, al Semajno 6.
Mi ĝojas vidi vin cxiujn kaj vivanteco post Kvizo 0, ĉar mi scias, ke
Estis iom malglata.
Sed dankeme, vi ĉiuj faris nekredeble bone.
Kaj tiel tio estas mirinda.
Se vi estas en mia sekcion, Mi donis plej el vi apogi vian kvizojn jam.
>> Paro de vi, mi renkontis post klaso.
Kaj se vi estas etendo studento kaj vi ne ricevis vian kvizo reen
tamen, via TF estas verŝajne laborante sur ĝi kaj grading ĝin, kaj enretigos ĝin reen
al vi baldaŭ.
Do mia kromprogramo studentoj, kiuj estas rigardi ĝuste nun - espereble vivi -
Mi enretigos vian kvizojn baldaŭ ankaŭ.
>> Nia agendo por hodiaŭ estas kiel sekvas.
Unue, ni tuj iru super iu rimedojn kiuj CS50 havigas al vi.
Ni tuj transiru Kvizo 0 proksima, kaj Mi respondos ajnajn demandojn iu
havas pri apartaj problemoj.
Kaj tiam, ni iros trans dosiero / Aŭ kaj problem starigis 5.
Tiuj lastaj du temoj prenos ĝis la ŝvelaĵo de sekcio hodiaŭ.
>> Mi metas ĉi listo ĉiun semajnon kiel rememorigilo al vi ĉiuj, sed el kerno
sekcio, ni nur havas 90 minutojn - ni ne povis kovri ĉion, kion mi
ŝategus kovru vin guys.
Sed ni ja havas barelon da rimedoj por vi desegni sur kiel vi ekkoni
la materialo kaj laboro tra via problemo aroj.
>> Ni memorigas, ke mi havas en linio de teksto skatolo, starigis por vi plenigi se vi
havas iun opinion pri mi, ambaŭ pozitivajn kaj
konstrua, pri sekcio.
Tio URL situas rekte malsupren, tie ĉi.
Do bonvolu preni momenton, se vi havas ajnan sugestoj, cxu dum tiu sekcio,
aŭ post, aŭ post vi spekti la video linio, por doni al mi vian reagon.
Mi vere dankas ĉiaj kaj ĉiuj de ĝi.
>> Do mi estis havanta malgrandan konversacioj kun amaso da mia
studentoj en la tuta semajno - kiel mi transdonis reen kvizojn, parolante pri la
Kompreneble, vidante kiel vi faras.
Kaj unu temo levigxis super kaj super en raporti - en
aparta -
problemo aroj.
Kaj mi encapsulada tiu temo sur la tabulo nun.
>> Esence, ekzistas diferenco inter turnante en iun kiu estas
farita ĝuste kaj ion kiu estas farita bone.
Plej multaj homoj estis farante fantazia en terminoj de korekteco -
5 La aŭ 4 de la tuta psets.
Plej multaj homoj fartas tiuj la tuta tempo.
>> Tamen, nur ĉar vi jam faris io rajton ne signifas ke vi jam
farinta ion kiel elegante, aŭ kompetente, aŭ kiel pure kiel vi
povus esti farinta.
Kaj tio estas kion la dezajno -
kaj plej malgranda grado, stilo -
aksoj estas por.
Do mi pelis vin cxiujn, kaj aliaj TFS pelas vi, knaboj, ne nur vico
en aferoj, kiuj estas korekta, sed turni en la aferoj kiuj estas koditaj bone.
>> Ne fari nenecesan POR masxojn, Ne recalculating variabloj se
vi ne devas.
Ekzemple, rigardante malantauxen al problemo starigis 4, kiam metante la brikojn sur la
ekrano, ĉiu vico - ĉiun brikon en donita vico havas la saman y-koordinato -
la saman altecon koordinato.
>> Por ke y-koordinato ne bezonas esti kalkulita ene de la interno
nestitaj POR buklo kiun vi verŝajne uzas meti tiujn brikojn sur la ekrano.
Ĝi nur bezonas al esti kalkulita ĉiu tempo vi ŝanĝis vico, aŭ
movita suben vicon.
Do diru, se estas 10 brikojn en linio, ĉiu briko povas havi la saman
y-koordinato, kaj ke y-koordinato povas simple esti kalkulita
iam por ĉiuj el tiuj.
>> Ĝi ne devas esti kalkulita 10 tempoj, nek faras ke kalkulo bezono
okazos en la fakta funkcio alvoko -
la nova gracked funkcio nomita.
Do, se tio estis iom konfuza por vi, pli genéricamente, aĵoj kiuj
ne bezonas okazi ĉiun solan fojon vi iru tra POR buklo ne devus esti
metu ene de la POR buklo, kaj malakceptu okazi ĉiufoje kiam vi iros
tra la POR-cirklon.
>> Alia bona dezajno ekzemplo ni vidis en la semajno 3 por 15, vi povus subteni
spuro de la nulo.
Do kiam vi pravalorizi la tabulo, vi konservi - en globala variablo, eble -
la x kaj y-koordinato de la nulo.
Kaj poste kiam ajn vi -
en via movado funkcion, kiam ajn vi faras sukcesan movadon, vi ĝisdatigas la
situo de la nulo.
>> Tio savus vin de devi fari nestitaj POR masxojn rigardi tra la
forumaraj ĉiufoje en via movado funkcio kaj trovu la nulo, aŭ trovos la kahelo,
kaj tiam kontrolu kio estas apud gxi.
Anstataŭe, vi havos la situo de la nulo, vi povas simple rigardi supre, malsupre,
kaj al la maldekstra kaj dekstra el tio, trovi la kahelo vi serĉis.
>> Do, en terminoj de la programoj ni estas skribado, ili estas neniam sufiĉe granda
ke iuj el tiuj decidoj de dezajno estas vere tuj malhelpi vian
programo, aux fari gxin kuras pli malrapide, aŭ eble eĉ kuri el memoro.
Sed ni ankoraŭ puŝante you guys skribi kiel eleganta kaj
efika kodo ebla.
>> Do, se vi faros fini skribi aferojn ke havi signife pli grandan
medion, ili estos skribita kun bona desegni krom esti korekta.
Do multaj el vi havos alportis tion eksteren.
Tio estas io, kion ni serĉas - iu ni tuj daŭre
puŝi you guys plu.
>> Se vi iam havas demandojn pri la dezajno de via programo, ni invitas
alveni al mi, kaj mi estas feliĉa marŝi tra via programo kun vi,
kaj atentigi iun el la dezajno decidojn vi faris, kaj donos al vi iuj
sugestoj pri kiel fari eĉ bona dezajno decidoj.
>> Do ni tuj pluiri por paroli pri Kvizo 0.
Antaŭ ni faru tion, ĉu iu havas iujn demandojn pri kio
Mi jam kovrita ĝis nun?
>> [Susurado NOISE]
>> JASON Hirschhorn: Sep sekundoj.
OK.
Ni parolu pri Kvizo 0 por iom.
Plimulto el vi havas vian Kvizo 0 dorson.
Se vi ne faru, mi esperas vi rememoros ŝin iom.
Sed se vi jam prenita Kvizo 0, tiam vi ankaŭ havas aliron al la PDF interrete en
la specimeno solvoj.
>> Ĉu iu havas demandojn antaŭe ni salti en la semajno da materialo pri
apartan problemon pri Kvizo 0 -
kial la respondo estas kio ĝi estas?
Ĉu iu konfuzita pri io?
Eĉ se vi havas la problemon pravas, sed nur volus mi por klarigi ĝin iom
pli, mi ĝojas fari tion nun.
>> Do mi demandis al vi knaboj al venu preta kun iuj
pensoj pri Kvizo 0.
Do, kiuj ŝatus liberigi nin komenciĝis per demando aŭ
komenti pri Kvizo 0?
>> [PAPERO susurado]
>> JASON Hirschhorn: Ne ĉiuj faris perfekte.
Do mi scias [rie]
tie devas esti iuj demandoj pri Kvizo 0.
OK.
Jes.
Ompica.
>> OMPICA: Numero 10.
>> JASON Hirschhorn: Numero 10.
Kiun estis numero 10?
>> OMPICA: La -
>> JASON Hirschhorn: Mi haven't -
>> OMPICA: La inkluzivi -
>> JASON Hirschhorn: Numero 10 La agxon de ok al mi - skribi ok al mi?
>> OMPICA: Jes.
>> JASON Hirschhorn: okej.
Do alia demando, kiun vi povus havi demandis estis mi prescient?
La respondo estas jes.
En sekcio antaŭ la kvizo, mi demandis you guys kodigi ambaŭ Sterling kaj
ok al i.
Ambaŭ el ili okazis aperi sur la kvizo.
Do espereble, vi pagas atenton al tio.
>> Kaj se vi havis, tiam vi havus probable faris bone en tiuj du.
Sed ok al mi, ni ne vere kodo gxin en la klaso, sed ĝi estis, denove,
demandis en la kvizo.
Do kelkajn aferojn por preni noti, kiam kodigo ok al i.
La unua afero, por la demando, estis ke vi bezonis por kontroli se la kordo
estis egala al nula.
>> Paro personoj provis kontroli poste en la programo se s krampo i estis -
tiel specifan karakteron en tiu kordoj - estis egalaj al nula.
Sed memoru, ke nula estas esence - ĝi estas bona pensi pri
nula kiel nulon montrilo - puntero al nulo -
someplace memore kie Vi neniam povas aliri.
>> Do, se io estas egala al nula, vi scias ke ĝi ne estis pravalorizita,
aŭ nenio estas tie.
Do s estas char stelo, s krampo i estas char.
Do ĝi havas sencon kompari s al nula, sed ne s krampo i al nula.
Sed denove - tiel ke estis la unua horo ke vi estis supozitaj fari -
kontroli por certiĝi ke vi efektive akiris veran kordo.
>> Tuj poste, vi volis iri tra ĉiun karakteron en la kordo.
Kaj tiel tio estus kiel s krampo i, ekzemple, se i estas via iterator.
Kaj prenu tiun karakteron, kaj trovi ĝian realan valoron.
Vi gxin stokitaj kiel char, sed la ASCII valoro por nulo -
nulo kiel gravulo -
ne estas vere la entjera nulo.
Ĝi estas iu alia nombro, ke vi povas serĉi en la ASCII tablo.
>> Do unu maniero por korekti cxar tio - verŝajne la plej bona maniero por korekti por
ke - estas subtrahi el ĝi la karaktero valoro -
nulo kiel gravulo.
Do minus unu citaĵo, nulo, alia simpla citaĵo.
Kiu prenos ajn numeron vi havas kiel signo, kaj instigi lin egala al
la nombro kiel reala entjero.
>> Kaj tio estas tre simila al la alproksimiĝo multaj homoj prenis en la
problemo starigis 2, kun Cezaro kaj Viginere -
tiuj koditaj, kiam vi estis turnanta ilin.
Do post kiam vi havas ĝin kiel nombro de nulo ĝis naŭ, tiam - depende de
kien gxi iras en la fina nombro - vi devas multipliki ĝi
per potenco de 10.
>> Kelkaj homoj movis de la dorso al la fronto, kaj multigxis la individuo
nombro per potenco de 10.
Kelkaj homoj kopiis el la fronto por apogi -
kaj tiel ili prenis la plej alta ordigi nombroj unua -
kaj savus tiuj en tutmonda nombrilo variablo.
Kaj tiam cxiu tempo tra la POR buklo, multipliki tiu giganto tutmonda
kontraŭi variablon per 10, fari spaco por la venonta signo.
>> Do, kiu estis iom konfuza sen mi skribas ĝin sur la tabulo.
Sed la specimeno solvo estas disponebla al vi.
Sed tiuj estis la grandaj aferoj ni serĉis.
Ankaŭ ĉekon por certigi ke ĉiu individuaj karaktero estis ja
karaktero inter nulo kaj naŭ, kaj ne iu alia gravulo, kiel A,
ekzemple.
>> Tiuj estis la aferoj ni rigardis cxar en tiu demando.
Ĉu tio respondas vian demandon?
>> OMPICA: Jes.
>> JASON Hirschhorn: okej.
Ĉu ekzistas aliaj demandoj pri Kvizo 0?
Kio pri kompili?
Ĉiuj kompili rajton?
N-ro
Tie estis -
[Rie]
Demandojn pri la kompilita procezo?
Wow.
>> [PAPERO susurado]
>> JASON Hirschhorn: Jes.
Michael.
>> MICHAEL: Is numero 7 - hazarda?
>> JASON Hirschhorn: Numero 7.
Numero 7 estis akiri hazarda entjero.
Bonegaj.
Do vi estas donita entjero a kaj an entjero b, kaj vi volas hazarda
entjero inter a kaj b.
Ni povas vere skribos ĉi tiu sur la tabulo, ĉar ĉi tiu
Estis unu linio de kodo -
unu maniero fari ĝin.
>> Do ni estas donita drand kiel funkcio ni povus uzi.
Kaj kion signifas drand -
alprenanta ĝi estas estinta semita -
kion signifas drand reveni?
>> MICHAEL: float inter 0,0 kaj 1,0.
>> JASON Hirschhorn: numero - yeah.
A nombro inter 0 kaj 1.
Kaj tial ni b kaj a.
Kaj tiam ni havos niajn hazarda nombro inter 0 kaj 1 donitaj al ni de drand.
Kelkaj personoj provis meti b, aŭ b minus al, aŭ io interne tiuj
parentezoj.
Tio signifus ke ili estas argumentojn por tiu funkcio.
>> drand ne prenas ajnan argumentoj - kiel getString faras
Ne prenu ajnan argumentoj.
Do ĝi estas nur malfermita paren, fermo paren - kaj ke, mem, estas
la funkcio nomita.
Kaj kiu donas vin kelkaj inter 0 kaj 1.
Kompreneble, ni havas tuta gamo ke nombroj povas esti in
>> Diru, se b estas 10 kaj a estas 5, ni vere ĉu nombro kun gamo de 5.
Do la sekva afero, kiun ni devas fari estas multipliki ĉi tiu per la ventumilo b minus unu.
Do supozante ke tio kreskis.
Kaj tio donos al ni nombro en donita gamo.
Kaj tiu specifa gamo esti la diferenco inter b minus unu.
>> Kaj fine, tio estos nur doni ĝin el - diri la distancon inter b minus unu
estas 5, kiu donos al ni nombro de 0 al 5.
Sed se oni estas fakte 5, necesas plifortigi tiu gamo ĝis kie ĝi estas
efektive supozis esti, aldonante.
Do kiu metas la logiko pravas.
Kaj poste, ĉu vi havas alia demando?
>> MICHAEL: N-ro
Mi nur sentas min vere muta nun.
[Rie]
>> JASON Hirschhorn: N-ro
Ne sentas vere stultaj.
Nombro de homoj baraktis kun tiu demando.
Kaj poste, la alia demando estas, drand, Vi diris, donas al vi float -
Revenas float.
Sed ĉi tiu funkcio fakte demandis por entjero esti reveninta.
>> Vi ne bezonas jxeti ĉi eksplicite al entjero, ĉar tiuj
operacioj traktos ĝin kiel ĉiu flosi - kiel glitpunkta nombro.
Kiel ĉi tiu volo - eĉ se tiu estas entjero, tiu volo
pligrandigxu korekte.
Ĉiuj multipliko laboros.
Vi ne bezonas, por elpeli ilin ĉi tie.
Fakte, vi devus ne jxetu gxin.
>> Tio donus -
se vi estus jxeti nombro tio estas inter 0 kaj 1 -
hazarda nombro, flosanta punkto -
tiam estos bone esti sola 0 aŭ 1, tiel vi perdos la tutan de tiu precizeco.
Sed fine, kiam vi revenas, ĝi aŭtomate ricevas
resendita kiel entjero.
Do vi ne bezonas fari ke enjxetantan mem.
>> Do tiu estis la respondo al tiu demando, numero 7.
Ajna alia demandojn je Kvizo 0?
Yeah, Annie.
>> Annie: Kiam ni uzas rekursia -
Kiam do ni uzu ripeta masxojn?
>> JASON Hirschhorn: Kiam vi uzas rekursia - tiom pli ĝenerale, la
avantaĝoj kaj malavantaĝoj de rekursio kontre ripeta alproksimiĝo.
Ĉu iu proponas avantaĝo aŭ oni kontraŭ?
Bonvolu?
Ne povas neniu.
Kiu povas proponi avantaĝo aŭ oni kontraŭ?
>> [PAPERO susurado]
>> Studenta 1: Rekursia estas malpli kodigo - malpli tajpado?
>> JASON Hirschhorn: Do ĝenerale, rekursio speciale, funkcio -
aux algoritmon kiel merge speco - kiuj pruntas
al rekursia alproksimiĝo -
povus esti pli simpla kodigi rekursie.
Kaj ĝuste fari pli sentita fari ĝin rekursie.
Do kiu estus avantaĝo por rekursio.
Aliaj?
Jes?
>> Studenta 2: Kun por rekursio -
Ĝi uzas pli da memoro.
>> JASON Hirschhorn: Do ĝuste.
A rekursia funkcio gardos aldono stako kadroj al la stako.
Do se vi estas funkcianta sur tereno de nombroj, kaj devas nomi tiun ĉi
funkcii multe, tiam vi certe prenu pli da memoro, dum
ripeta alproksimiĝo estos nur metis unu pilo kadro sur la stako, ĉar
ĉion okazas ene de unu funkcio.
>> Ajna alia avantaĝojn kaj malavantaĝojn?
Jes.
>> Studenta 3: Avantaĝoj de rekursio.
Vi ne devas determini en antaŭi, kiom da fojoj la
kodo devis esti ripetita.
Vi povas havi antaŭdeterminita nombro de fojoj, ke vi devas persisti, tiam
rekursio estas bona, ĉar ĝi prenas tiun rezulton.
>> JASON Hirschhorn: mi kredas ke tio estas vera.
Sed mi opinias, en ambaŭ kazoj vi farus neniam -
vi verŝajne akiri iom enigo de la uzanto.
Aŭ ĉi funkcio havus iujn enigo kiuj fiksus kiom da fojoj ĝi
devus funkcii.
Do ĝenerale, vi ne volis forte kodo - eĉ en ripeta alproksimiĝo - kiom
multajn fojojn, ke buklo devus funkcii.
>> Ĉu vi havas alian vi estis pensante pri, Annie?
OK.
Do tiuj estas verŝajne la du -
la plej granda avantaĝo kaj la plej granda con al rekursia kontre
ripeta alproksimiĝo.
OK.
Ion alian sur Kvizo 0?
>> Ni movi plu.
Dosiero mi / O. Estas mirinde mallonga ĉi-semajne en dosiero / Aŭ ke espereble
vi spektis multnombraj tempoj, kaj admiris.
Multa laboro eniris en tiun, kaj mi aŭdis estas insanely helpema.
Mi ankaŭ inkludis la ligilon en ĉi tiu bildo, en la okazo vi ne havis
okazon rigardi ĝin 10 fojojn.
>> Do, ni tuj mallonge transiros grandaj paŝoj al malfermo kaj kunlaboro
per dosieroj, kaj poste ni iras al plonĝi en kodigo problemon antaux
ekzameni la problemon aro.
Do denove, mi tuj metis ĉi supre sur la ekranon, sed mi tuj parolos por
nur minuton pri kio ni estas faras ĉi tie kun dosieron I/O--
kion tio signifas?
>> Tio signifas ke ni povas krei niajn programoj, kaj tiam havas niajn programojn
eliro, kaj ne faris ajnan efikon sur la mondo ekstera de nia programo.
Sed kiam ni komencos labori kun dosieroj - ambaŭ legi ilin en kaj kreado
ilin - ni povas havi iun efekton sur la mondon ekstere de nia programo.
>> Ĝuste kiel se Microsoft Word ne povis fari ian Vorto dokumentojn, tiam
unufoje Microsoft Word quit, ĉiuj de viaj laboro estus irinta, kaj estus
vere esti senutila.
Ni finfine volas povi skribi programojn kiuj povas tuŝi la
mondo cxirkaux ili, ambaŭ per prenante en kompleksa enigoj - en terminoj de dosieroj kaj
per dosieroj, kaj ankaŭ kreante interesaj kaj konvinka eliroj -
en terminoj de malsamaj tipoj de dosieroj.
>> Tial estas kial ni komencas lerni kiel labori kun dosieroj.
Pli specife, kion ni do estas la jena.
Ĝi estas tre simpla.
Estas nur kelkaj paŝoj, kaj ili estas listigitaj ĉi tie pri tiu kodo.
Do ni tuj iru tra tiun kodon linio por linio.
>> Unue, vi vidos reliefigis -
kiam vi laboras per dosiero, sendepende de la tipo de dosiero estas,
Vi bezonas malfermi ĝin.
Kaj kiu estas kun alvoko al fopen -
ĝuste ĉi tie.
Vi inkluzivas la nomon de la dosiero.
Se la dosiero ne estas en via adresaro, aŭ la dosierujo kie ĉi programo
vivoj, tiam vi ankaŭ bezonos inkluzivi pado al kie tiu dosiero.
>> Ni tuj supozas, ke tiu dosiero nomata "text.txt" -
simpla teksto dokumento - estas en la sama dosierujo kiel tiu programo estas.
Do tio estas alia afero por gardi en menson - ke se vi volas malfermi dosieron
aliloke, vi vere bezonas por inkluzivi lian situon.
>> Due, vi povas pasi argumento por fopen, kaj tio kion vi volas fari
kun la arkivo.
Estas tri ĉefaj argumentoj kiuj vi tuj pasi al fopen.
Kiu povas doni al mi tiuj tri?
Kiu povas doni al mi unu el ili?
Jes.
>> Studenta 4: La dosiero nomo?
>> JASON Hirschhorn: Pardonu.
Tri ĉefaj argumentoj vi povas pasi kiel la dua argumento al fopen.
Vi pravas - la dosiernomo estas la unua argumento.
Sed la dua argumento al fopen estas ĝenerale tri kordojn, kaj - jes.
Aleja.
>> ALEJA: A por append.
>> JASON Hirschhorn: A, se vi volas append al dosiero kiu jam ekzistas.
>> Studenta 5: R por legado.
>> JASON Hirschhorn: R, se vi volas legi el dosiero.
>> Studenta 6: W por skribi.
>> JASON Hirschhorn: Kaj w, se vi volas skribi al dosiero.
Do, en tiu kazo, ni skribas por la dosiero, tiel ni havos w.
Vi malfermas ĝin, vi ankaŭ devas savi la dosiero ie, kaj tio estas kun la
kodo al la maldekstra flanko de la atribuo operatoro -
Mi kreante montrilon al dosiero nomis, en ĉi tiu kazo, dosiero.
>> Ni ne tuj maltrankviliĝu kio tiu tuta kaskedoj DOSIERO afero.
Sufiĉas diri, tio estas longa rivereto de nuloj kaj aĵoj.
Kaj tiu estas kiel ni tuj eksplodi ĝin kaj kompreni ĝin.
>> La sekva afero, kiun ni devas fari - kaj tio estas nekredeble grava -
kiam ajn vi malfermas dosieron -
fakte, kiam ajn vi nomas malloc, por Ekzemple, kaj akiri iom memoro kaj provi
kaj savos gxin en montrilon, vi ĉiam volas kontroli por certiĝi ke tiu
funkcio ne revenis nula.
>> Do, en tiu kazo, ni estas kontrolanta fari certas, ke ni efektive malfermis la
dosiero korekte, kaj tie estis neniu eraro en nia programo.
Tuj poste, iam ni kontrolis certigi ke ni havos funkciantan dosiero, ni povas
skribi al, aŭ legu el, aux postglui al la dosiero.
En ĉi tiu kazo, mi simple presi unu linio al ĉi tiu dosiero.
>> Kiel mi scias, ke?
Nu, mi uzas ĉi funkcio vokis fprintf.
Ĉiuj el la funkcioj vi uzos kiam skribante al, aŭ legado de, aŭ
manipulanta dosierojn estos simila al funkcioj vi vidis antaŭe, sed
komenci per la litero C, staranta por dosiero.
Kaj fprintf, kontraste al nia normala print app, prenas unu aldona argumento,
kaj tio estas la dosiero kie vi deziras presi jenan linion al.
>> Mi ne havas nenion Dekstre de ohai.
Mi ne havas la trian argumento por printf -
aŭ la dua argumento por printf, la tria argumento al fprintf, ĉar mi
ne havas ajnan anstataŭiloj tie.
Mi ne inkludante ajna variabloj.
Sed denove, fprintf kaj ĉiuj el tiuj dosieron funkcioj kiuj operacias kun dosieroj
ĝenerale tuj bezonos la dosiero sur kiu ili estas funkcianta.
>> Fine, la lasta grava afero do estas por fermi la dosieron, same kiel
kun - kiam ajn ni malloc ion, ni volas liberigi ion, por ke ni
havas memoron liko - ni volas fermi nian dosieron.
Se tiu programo ĝi eliris sen fermo la dosiero, probabloj estas nenio irus
erara, precipe se ĝi Estis malgranda dosiero.
>> Sed estas certe bona kodigo stilo kaj ekzerci por ĉiam fermi vian dosieron
kiam vi estas finita uzante gxin.
Do kiu estas la fundamentoj de dosiero mi / O. Vi verŝajne vidis ke antaŭe, aŭ
rigardis ŝin en tiu fantazia mallonga.
Ĉu iu havas iun demandon, antaŭ ol Ni iru en iun praktikon kodigon
problemoj, pri dosiero / Aŭ aŭ paŝoj Mi ĵus transiris?
>> [Tajpado SOUNDS]
>> JASON Hirschhorn: Do vi havas demandon, Avi?
>> AVI: N-ro
>> JASON Hirschhorn: okej.
Mi iras al atendu alian sep sekundoj.
[Rie]
Tio estas vere bona konsilo.
Vi infanoj simple ne ŝatas demandi demandojn.
Tio estas bone.
OK.
Do nia unua praktiko problemo estas, ni estas tuj duobligas la funkcion de
komandan linion ilo kiun vi probable uzata antaŭ - kopio -
la kopio ilo.
Se vi tajpas cp kaj tiam fordoni du argumentojn en via terminalo, vi povas
kopii dosieron.
Kaj tio estas kion ni iras skribi ĝuste nun.
>> Do denove, legante for de ĉi glito, mi tute vi skribi programon kiu prenas
du kaj nur du komand-linio argumentoj -
fonto-dosieron kaj celloko dosiero -
kaj kopias la enhavon de la fonto fajli la celloko dosieron
unu bajton por fojo.
Do tio estas multe peti.
>> Denove, bona alproksimiĝo al ĉi tio estas por Ne iru rekte al la C-kodo, sed
rompi gxin malsupren en kelkaj ŝtupoj.
Unue, pensu pri la logiko - ekzakte kion mi petas vin fari -
kaj kompreni ĉiujn paŝoj al tiu problemo.
Ne en C, nur en iuj _pseudocode_, aŭ eĉ mensa modelo de
kio okazas.
>> Tuj poste, iam vi havos la _pseudocode_ malsupren, elkompreni kiel la _pseudocode_
mapoj sur ilojn kaj aĵojn ni lernis uzi en C.
>> Kaj fine, kiam vi havas cxion, kion kune, vi povas programi la problemon.
Prenu 5 al 10 minutoj labori pri tiu problemo.
Mi metos la instrukciojn reen en sekundo.
Kaj tiam ni tuj iru super la _pseudocode_, kaj kodo
ĝi vivas kiel grupo.
>> Se vi havas demandojn dum vi estas laboras pri tio, bonvolu levi
via mano, kaj mi venos ĉirkaŭe kaj respondi ilin.
>> Studenta 7: Ĉu mi swipe peco da papero?
>> JASON Hirschhorn: KIO OKAZAS?
>> [Tajpado SOUNDS]
>> JASON Hirschhorn: okej.
Ni transiru la _pseudocode_ unue, kaj tiam Mi donos al vi du pli
minutojn por fini kodigo.
>> Kiu ŝatus komenci min kun la unua linio de
_pseudocode_ por ĉi tiu funkcio?
>> Studenta 8: Kontrolu por certigi ke vi estis donitaj la du dosierojn.
>> JASON Hirschhorn: okej.
Kaj se ni ne estas?
>> Studenta 8: mi revenus 0.
>> JASON Hirschhorn: Cxu ni revenu 0?
>> Studenta 8: Reiru al -
Forviŝo.
Pardonon.
>> JASON Hirschhorn: Jes.
Probable ne 0.
Ĉar 0 signifas ĉio estis bona.
OK.
Do jen la unua linio de _pseudocode_.
Kiu havas la dua linio de _pseudocode_?
>> Studenta 9: Open ambaŭ la dosierojn?
>> JASON Hirschhorn: Malfermu ambaŭ dosierojn.
OK?
>> Studenta 10: Kontrolu vidi se la dosiero estas NULL?
>> JASON Hirschhorn: Kontrolu fari certa nek estas nula.
Kiel flanken -
oblikvo 0 -
estas ke NULL?
>> Studenta 11: N-ro
>> JASON Hirschhorn: Tio ne estas nula.
Tio nomiĝas la nula finilo.
Ĝi estas fakte literumita kun nur unu l.
Do kontrolanta iun kontraŭ tio - ke estas reale karaktero -
tiel kontrolanta iun kontraŭ kiu ne la sama kiel oni kontrolas, se ĝi
egalas NULL.
>> Kaj iuj homoj -
sur iliaj kvizojn kaj ilia problemo aroj - ili atingis la
du el tiuj konfuzita.
Sed la du de tiuj estas fakte malsamaj.
Unu finiĝas ĉenon -
unu estas montrilo al 0.
>> Studenta 12: Kial vi ne kontrolu Certigi ke la dosieroj estas ne NULL
antaŭ ol vi malfermas ilin?
>> JASON Hirschhorn: Do malferma ŝparas ion en tiu dosiero.
Kaj se vi reiros tien -
tial cxi tiu linio - fopen -
donos al vi adreso kaj vendejo tiu adreso en dosieron, se tio funkcias.
Se tio ne funkcias, ĝi amasigos NULL -
>> Studenta 12: Ho.
OK.
Got vi.
>> JASON Hirschhorn: En dosiero.
Do vi ne povas kontroli NULL antaŭ vi jam malfermis ilin.
NULL signifas ion ne funkcii ĝuste.
OK.
Do kontroli por certiĝi nek estas?
Aŭ ĉu?
Kion ni pensu?
Ni devos iri kun tio.
>> Studenta 13: Estas.
>> JASON Hirschhorn: Ĉu?
Nek estas?
>> Studenta 13: Estas.
>> JASON Hirschhorn: okej.
Ni ŝajnas havi iu unuanimeco pri tio.
Nek estas nula.
OK, sekvanta linio de _pseudocode_.
Kiu min ne donis linion ankoraŭ?
Ni atendos vin.
Jes.
>> Studenta 14: Vi devas legi de la unua dosiero?
>> JASON Hirschhorn: okej.
>> Studenta 14: Aŭ ni uzu fscanf aŭ io kiel ke la unua dosiero?
>> JASON Hirschhorn: Do ni volas legi de la unua dosiero kaj -
ni metas tiun ĉi tie.
Legu el la fonta dosiero.
Kaj poste, kion ni faros kiam ni legu el la fonta dosiero?
Iu alia?
>> Studenta 15: Skribu en La celloko dosiero?
>> JASON Hirschhorn: Ni skribu al La celloko dosiero, kaj -
OK.
Kion alian ni mankas?
Iu ajn, kiu ne donis al mi linio de kodo ankoraŭ - de _pseudocode_.
Jes.
>> Studenta 16: Eble vi povas ĉiam kontroli ĉu estas io por legi,
kiel la sekva linio?
Tio estas kiel la sekva linio, rigardu, cxu gxi ekzistas.
>> [ELECTRONIC beep]
>> JASON Hirschhorn: Oops.
Tiu estas mia taglibro programaro.
Jes?
>> Studenta 16: Jes.
>> JASON Hirschhorn: Do donu ĝin al mi unu pli longa tempo.
>> Studenta 16: Kontrolu ĉu ekzistas ankoraŭ sekva linio el la
fontdosieron por legi.
>> JASON Hirschhorn: okej.
Do ni ne legas linioj - legis bitokoj tie -
sed vi estas korekta.
Ni volas legi kaj skribi ĝis tie estas ne bajtoj.
OK.
Kaj tial tiuj devus vere esti dentado iom, ĉar ili estas sub tie.
Ĝuste?
Ĝis ni estas el bitokoj, ni iras al legu el la fonta dosiero kaj skribi
al la celloko dosiero.
>> Kaj tiam, kio estas la lasta linio de _pseudocode_?
Iu, kiu ne estas donita al mi ion ankoraŭ.
>> Studenta 17: Fermu la dosierojn?
>> JASON Hirschhorn: Ekzakte.
Fermu la dosierojn.
Do tie estas nia _pseudocode_.
Mi tuj metos la _pseudocode_ en gedit, kaj en kelkaj minutoj ni
estos kodigi ĉi kune.
>> OK.
Ni komencu kiel grupo.
Nishant, mi havas mian novan dosieron.
Mi ĵus malfermis ĉi supre.
Untitled Document 1.
Kio estas la unua aĵo kiun mi devus fari?
>> NISHANT: Inkluzivi bibliotekoj?
>> JASON Hirschhorn: okej.
Kio bibliotekoj?
>> NISHANT: Stdio.h, stdlib.h, mi kredas?
>> JASON Hirschhorn: okej.
Kio estas stdlib por?
>> NISHANT: Mi forgesis.
>> JASON Hirschhorn: okej.
Do, stdio.
Kion mi faru, eĉ antaŭ ol Mi komencos kodigo?
>> NISHANT: Skribu kaplinio?
>> JASON Hirschhorn: Kiel do I get it kolorigita?
>> [Intermetante Voĉoj]
>> NISHANT: Kiamaniere vi akiras gxin kolora?
>> JASON Hirschhorn: Kiel ĉu mi kolora kodigo?
>> NISHANT: Mi ne scias.
Oh.
Gardi.
>> JASON Hirschhorn: Savu.
Jes.
Mi devus konservi ĝin kiel. C.
Do savi gxin sur la labortablo kiel cp.c.
Dolĉa.
Kaj se mi volas ricevi plenan stilo punktoj, kion do mi
inkluzivi en la pinto?
>> NISHANT: Vi povus skribi vian nomon, la nomon de la programo, kaj la celo
de la programo tiel?
>> JASON Hirschhorn: Aspektas bone.
Bonegaj.
Do vi jam komenciĝis ni ekstere perfekte.
# Include -
ni ankaŭ skribas -
OK.
Do mi pensas ke mi tuta aro iri.
Kiu havas la unuan linion de kodo por mi - aŭ la unuajn liniojn de kodo ke
prenos por kontentigi nian unuan komenti en _pseudocode_?
Vi.
>> Studenta 18: Should it be int argc, kaj tiam char * argv?
>> JASON Hirschhorn: Mi opinias Vi pravas.
Ni ŝanĝu ĝin al int main, malferma paren, int argc, komo, char * argv?
Kiel tio?
>> Studenta 18: krampoj.
>> JASON Hirschhorn: krampoj.
Malferma krampo, proksime krampo, proksime patro.
Perfekta.
Nun mi povas preni komandlinion argumentoj.
OK.
Certigu ni donita du dosierojn.
Vi povas doni al mi, ke tiel.
>> Studenta 18: Se argc -
ĉi tiu ne egalas 3.
>> JASON Hirschhorn: Se malferma paren argc ne egalas 3?
>> Studenta 18: Jes, vi revenos 1 aŭ nenion.
>> JASON Hirschhorn: Pardonu.
>> Studenta 18: Return 1 aŭ nenion.
>> JASON Hirschhorn: Reiru 1.
OK?
Granda.
Malfermu ambaŭ dosierojn.
Kiu povas helpi min malfermi ambaux dosieroj?
Kiu min ne donis kodo ankoraŭ?
Kurt?
>> Kurt: Do ĉiuj kaskedoj F-mi-L-E stelo fonto.
>> JASON Hirschhorn: Mi iras preni el la vokaloj.
Tiuj estas malvarmeta.
Estas kiel Tumblr.
>> Studenta 18: Egalas fopen -
>> JASON Hirschhorn: Egalas fopen?
>> Studenta 18: Malferma paren, argv, malferma krampo.
>> JASON Hirschhorn: Atendu.
Pardonon.
Malferma paren.
OK.
>> Studenta 18: Jes.
Argv sub 1.
>> JASON Hirschhorn: Sub 1?
>> Studenta 18: Jes.
Argv malferma krampo 1 -
jes.
Kaj tiam komo, kaj tiam malfermitaj duobla citaĵo, r, citilon,
proksime paren, punktokomo.
>> JASON Hirschhorn: Dolĉa.
Kaj kio pri la aliaj la unuan?
>> Studenta 18: Tre similaj, sed anstataŭ de S-R-C, oni kredus nomas ĝin D-S-T.
>> JASON Hirschhorn: Oo!
Mi ŝatas tiun.
>> Studenta 18: Just D-S-T. Jes.
Kaj tiam argv, malferma krampo, 2.
Jes.
Kaj poste w anstataŭ r.
Jes.
>> JASON Hirschhorn: Granda.
Sekva paro de linioj.
Ankaŭ, se iu havas aĵojn aldoni linioj, kiujn ni faris, ni invitas al
aldoni tiujn ankaŭ.
Kontrolu certigi nek estas nula.
Kiu povas doni al mi la kodon mi bezonas kontentigi tiun linion el _pseudocode_?
Archer.
>> Archer: Se src egalas egaluloj NULL aŭ DST egalas egaluloj
NULL, tiam vi revenos -
>> JASON Hirschhorn: Kio?
>> Archer: Reiru 2?
>> JASON Hirschhorn: Reiru 2.
Do se malfermita paren src egalas egalas NULL, aŭ -
kion ajn tio thing's - pipon?
Pipon?
Ni nomas ĝin pipon.
Pipo, pipo, DST egalas egaluloj NULL, revenu 2.
OK?
Ĝis ni estas el bitokoj -
ni ia saltis super tiu ŝtupo de la _pseudocode_ parto por iri tien.
>> Sed ĝis ni el bitokoj - kion faras tiu sono kiel?
Kio tipo de C strukturo -
sed mi ne uzas la vorto strukturo, ĉar ni tuj ekuzi
ke en aliaj kazoj -
sed C ilo faras tiun sonon kiel?
>> Studenta 19: buklo.
>> JASON Hirschhorn: Ciklo.
Sonas kiel ciklo.
Do kiu povas doni al mi la unua linio de la buklo kodo ĝuste ĉi tie?
Vi povas ankaŭ elekti kian buklo vi volas, se vi donos al mi
tiu linio de kodo.
Ekzistas tri specoj.
Vi atingos pick.
Mi sugestus unu el tiuj.
Avi.
Kiun vi volas?
>> AVI: POR.
>> JASON Hirschhorn: POR.
>> AVI: int i egalas nulo.
>> JASON Hirschhorn: okej.
>> AVI: Tiu parto mi ne certas pri.
Sed mi estas malpli ol la grandeco de stelo fonto?
Mi ne estas certa pri tio.
>> JASON Hirschhorn: okej.
>> AVI: Ĉar oni volas ke la grandeco de dosiero, ĉu ne?
>> JASON Hirschhorn: Do tio probable ne faros donu al ni la grandeco de la efektiva
dosiero en bajtoj.
Do, kion alian ni povis fari?
Kio estas alia tipo de buklo?
Aux cxu ni batas kun la buklo?
>> Studenta 20: Povus fari DUM buklo?
Kaj tiam, kion vi ŝatus fari estas you'd -
ĉar ni havas char * por la dosiero.
Do, se ni simple observas pliigante ke gxis ni volus trovi la NULL karaktero ĉe
Fine de ĝi?
Aŭ ne, estas ke ne kiom dosierojn funkcias?
>> JASON Hirschhorn: Do ni povas subteni pliigante la signo *
ĝis ni trovos la NULL -
>> Studenta 20: Esence plu iri karaktero de karaktero, ĝis ni batis
la finon de la dosiero.
>> JASON Hirschhorn: Jes.
Do, tio estas kion ni volas fari.
Ni volas teni legado, karaktero per karaktero, ĝis ni atingos
la finon de la dosiero.
>> Studenta 20: Jes.
Trovi -
kio estas la fino aŭ halto signo ĉe la fino de teksta dosiero.
>> JASON Hirschhorn: okej.
Do kiam ni atingos la finon de la dosiero - Kiel do ni scias ke ni jam atingis
la finon de iu dosiero?
Se mi vokas -
do ni retropaŝon.
Kio estas funkcio?
Ni iru al tiu linio ĝuste ĉi tie.
Legu el la fonta dosiero.
Kiu povas doni al mi tiun linion de kodo?
>> Studenta 21: Fscanf?
>> JASON Hirschhorn: Fscanf.
OK.
Kio, se mi volas legi, tre specife, unu bajto?
>> Studenta 21: Mi ne scias.
>> JASON Hirschhorn: okej.
Eĉ pli simpla ol fscanf - kio estas -
Mi volas legi de fonto-dosiero?
Legu el fonto dosiero.
Kio estas funkcio - yeah.
>> Studenta 22: Estas fread?
>> JASON Hirschhorn: Fread.
Mi pensas ni estas alkrocxitaj kun ke oni ĝis nun.
Kiajn argumentojn tio fread preni?
>> Studenta 22: Probable la dosiertipon, kaj tiam situo en la dosiero?
>> JASON Hirschhorn: Kion mi povas tajpi tie elkompreni kiel tipo de argumentoj
fread prenas?
>> Multiple studentoj: Viro fread.
>> JASON Hirschhorn: Viro fread kaj fwrite.
Aspektas kiel ili pendas ekstere kune.
Do fread prenas kiom da argumentoj?
>> Studenta 23: Kvar.
>> JASON Hirschhorn: Preno kvar argumentojn.
Ĝi portas montrilon, grandeco, kaj ke afero, kiu estas bizara, kaj iuj dosiero.
OK?
Ni legis pri ĝi ĉi tie.
"La funkcio fread legas n memb elementoj de datumoj, ĉiu grandeco bitokoj
longa, de la torento indikis per rojo, stoki ilin ĉe la situo
donita per montrilo. "
>> Do kvar argumentojn.
Kial mi ne nur kopii ĉi, kaj algluu ĝin ĉi tie.
OK.
Do kiu povas komenci plenigado tiuj argumentoj por mi?
Avi.
>> AVI: Prenu el la malplenon.
Metu nur src.
Prenu el montrilon kaj la stelo.
Put src.
Tiam -
>> JASON Hirschhorn: Do mi tuj halti vi ekzistas, ĉar tio estas malĝusta.
Vi pravas kun src, sed kie devus src iri?
>> [Intermetante Voĉoj]
>> JASON Hirschhorn: Ĝi devus transiru cxi tie.
Tio estas la src - nia src estas tipo.
Ni rigardu tien.
Ĉi petas tipo DOSIERO *, ni fakte kutime vidas ilin tiel.
Do tiu estas petante argumento de tajpi DOSIERO * nomas rojo kiu estas src.
OK?
>> Kio grandeco de aferoj fari Ni volas legi?
Mi donis al vi ĉi tion en la problemo priskribo.
>> Studenta 24: Unu bajto samtempe.
>> JASON Hirschhorn: Unu bajto.
Kiom grandaj estas bitoko?
Lia grandeco estas en bajtoj, do kio mi povas meti dekstra tie?
>> Studenta 25: Unu.
>> JASON Hirschhorn: Unu.
Ĝuste.
Lia grandeco estas en unueco bajto, tiel 1 estas 1 bajtoj.
Kiom mi volas legi samtempe.
>> Studenta 26: Oni?
>> JASON Hirschhorn: Unu afero.
Mi volas legi unu aĵon de grandeco 1, unu mordo samtempe.
Kaj kie mi metis gxin, iam mi legis ĝin?
>> Studenta 27: Destination?
>> JASON Hirschhorn: Do mi ne povas meti lin rekte en celloko.
>> Studenta 28: Vi estas gonna meto ĝin en tria montrilo?
>> Studenta 27: Al la celloko.
>> JASON Hirschhorn: okej.
Jes.
>> Studenta 29: Oni povas deklari ion agi kiel portempa stokado antaŭe.
>> JASON Hirschhorn: okej.
Donu al mi, ke.
>> Studenta 29: Alia dosieron montrilo, eble?
>> JASON Hirschhorn: okej.
Do tiu estas malsagxulo stelo -
ĝi estas tipo void stelo, do ĝi ne devas esti dosiero montrilo.
Kaj se mi legas unu bajto, kie estus bona loko
stoki unu bajto?
>> Studenta 29: tabelo?
>> JASON Hirschhorn: An tabelo.
OK.
Kaj kio ajn estas ion ke estas nur grandecon unu bajto?
>> Studenta 30: A char *?
>> Studenta 29: Jes.
>> JASON Hirschhorn: A char * ne estas unu bajto.
>> Studenta 29: A char.
>> JASON Hirschhorn: A char estas unu bajto.
Ĝuste?
Do ni nomas tiun bufro estas ĝenerala nomo uzata por tiuj aferoj por gardi
ion provizore.
Do mi krei bufro.
Ĝuste?
Sed ĝi prenas malplenon *.
Do eble vi pravas, ke gxi devus esti remparo de grandeco 0.
Do stokas unu -
dekstra.
>> Pro tiu rajto tie - char bufro estas gravulo, sed
ĉi prenas malplenon * -
puntero.
Do mi povis fari tion, kaj nun bufro estas montrilo.
Kion alian mi povis fari?
>> Studenta 31: Metu stelon apud char.
>> JASON Hirschhorn: mi povis kreis gxin char *.
OK.
Kio estas alia afero, kiun mi povis fari?
Aŭ ni iros kun cxi tiu.
Char * bufron, do kio do mi metis ĉi tien?
>> Studenta 31: Bufro.
>> JASON Hirschhorn: Bufro.
Bufro estas montrilo al char.
Kaj en tiu situacio, ni metante unu bajto de io jam legis.
Jes.
Avi.
>> AVI: Just a quick demando.
Ĉu vi volas malloc buffer?
>> JASON Hirschhorn: Kiu povas respondi tiun demandon?
>> Studenta 32: Nu, ĝi ne vere punkto ion nun, do -
>> JASON Hirschhorn: Sed faru ni volas malloc ĝin?
>> Studenta 32: Se vi volus fari tion, ke vojo, mi supozas, jes, ĉar vi bezonus
iu loko por tio atentigi al.
>> JASON Hirschhorn: Do nin devas malloc ĝin?
>> Studenta 33: Se vi iros al uzi ĝin ekster la buklo.
>> JASON Hirschhorn: Ĉu ni tuj uzi ĝin ekster la buklo?
>> Studenta 34: Jes.
>> Studenta 35: Atendu.
Ĉu ni volas sciigi en la buklo al transe?
>> JASON Hirschhorn: Do mi supozas ke ni havos kelkaj pseŭdo DUM buklo tie ke ni estas
provi elkompreni, ke ni ankoraŭ ne alvenis al ankoraŭ.
Ni ne bezonas malloc ĝin.
Ni funkcianta en ĉefa, ĝi estas nur irante esti uzata ene ĉi maŝo.
Ĝi ne bezonas ekzisti ekster tio.
>> Do ĝi povas esti loka variablo.
Vi havas montrilon por loka variablo.
>> Studenta 36: Sed estas ne indikante ion.
>> JASON Hirschhorn: Ne, estas ne pravalorizita al nenio.
Sed ni ne tuj uzos ĝin ankaŭ.
Ni tuj metis ion en ĝi la unuan fojon ni uzu ĝin.
Tial ŝajnas okej.
Do ni ne bezonas malloc tie.
Kaj mi kredas ke estas OK, kiel estas.
OK.
Ni havas la fread linio.
Ni faros la sekva linio.
>> Se ni volas skribi al dosiero, kio estas bonan funkcion uzi por fari tion?
>> Studenta 37: Fwrite?
>> Studenta 38: fprintf?
>> JASON Hirschhorn: fprintf estas unu.
Kio estas alia?
>> Studenta 39: Fwrite.
>> JASON Hirschhorn: Fwrite.
Kaj por niaj celoj, fwrite, kion ni vidis tie, estas
probable la pli bona elekto.
Ĝi prenas kvar argumentojn tiel.
Nishant, ĉu vi povas doni mi la argumentoj?
>> NISHANT: La unua onia irado esti simple bufro.
>> JASON Hirschhorn: okej.
>> NISHANT: La dua onia nur iri al esti 1.
Tria oni tuj estos 1.
Kaj la kvara oni tuj estos DST.
>> JASON Hirschhorn: Ĉu iu havas demandojn pri tiu linio?
Tio aspektas bona.
OK.
Do nun ĝi aspektas kiel la sola afero ni estas alia - fakte, ni skribi
ĉi lastan linion.
Fermu la dosierojn.
Kiu povas fini nin skribo tiuj lastaj du linioj?
Jes.
Pardonu, kio estas via nomo?
>> Lucy: Lucy.
>> JASON Hirschhorn: Lucy.
>> Lucy: Fclose src kaj poste fclose celloko.
>> JASON Hirschhorn: Fclose, malferma paren, src, proksime paren, punktokomo.
Kaj fclose -
yeah?
>> Lucy: Malferma krampo, DST kaj tiam punktokomo.
>> JASON Hirschhorn: Granda.
Kaj kion mi devus inkluzivi en la fino?
>> Lucy: Reiru 0.
>> JASON Hirschhorn: Reiru 0.
Ĉu mi devas?
Just a question.
Ĉu ni devas inkluzivi revenon 0?
>> Multiple studentoj: N-ro
>> JASON Hirschhorn: N-ro
Ĉefa faras ĝin aŭtomate se vi alvenas al la fino.
Sed mi pensas, ke estas agrable inkluzivi eksplicite.
Precipe kiam ni revenas al aliaj aferoj tra la tuta programo.
OK.
Tio estas kion ni mankas -
DUM kio?
Kiu povas elpensi ian -
havas iom da senco de tio, kion povis iri tien?
Eĉ se ĝi estas nur en kelkaj _pseudocode_ kiel lingvon?
>> Kio ni estas vere - kio cxu ni volas iri ĝis?
Yeah, Lucy.
>> Lucy: La fino de la dosiero.
>> JASON Hirschhorn: La fino de la dosiero.
Do, kion vi celas diri per fino de la dosiero?
>> Lucy: Iam vi atingos la fino de la dosiero, stop.
>> JASON Hirschhorn: okej.
Do iam ni atingos la finon de la dosiero.
Kiel ni scias, kiam ni jam alvenis la finon de la dosiero?
>> Studenta 40: mi opinias buffer estos agordita al NULL.
>> Studenta 41: Bufro estas deklarita interne de la ciklo.
>> JASON Hirschhorn: Do vi opinias bufro estos agordita al NULL.
Kial buffer enkadrigeblajn por Nula?
>> Studenta 40: Ĉar, kiam vi fread, vi provas meti
nenio en bufron.
>> JASON Hirschhorn: okej.
Do vi pensas fread -
Kiam ni atingis la finon de la dosiero, kio fread faros?
Mi kredas ke tio estas la demando ni devas eltrovi.
What does fread fari?
Ĉu ĝi metis NULL en bufron, aŭ ghi fari ion alian?
Kiel oni povas diveni, kion ĝi faras?
>> Studenta 42: Viro.
>> JASON Hirschhorn: Viro.
Do ni rigardu super tie.
Reiru valoro.
On sukceso, fread kaj fwrite redoni la nombro da eroj legi aŭ skribi.
Ĉi tiu nombro egalas la nombron de bajtoj kopiitaj nur kiam grandeco estas 1.
Se eraro okazas, aŭ la fino de la dosiero estas atingita, la reveno valoro estas
mallongan eron grafo aŭ 0.
>> Do por niaj celoj, se fread atingojn la finon de la dosiero, kaj legas de
la finon de la dosiero, tie estas nenio forlasis legi, kion ĝi tuj revenos?
>> Studenta 43: Nulo?
>> JASON Hirschhorn: Kio?
>> Studenta 43: Nulo?
>> JASON Hirschhorn: Nulo.
Ĝi tuj revenos nulo.
Do ni scias ke fread, kiam ni atingis la finon de la dosiero, tuj
reveni nulo.
Kiel ni povas uzi tiun al nia avantaĝo?
>> AVI: Oni povas deklari variablon ekstere de la buklo nomas ĉeko.
Se ĉekon egalas -
cxar nun - unu.
>> JASON Hirschhorn: okej.
>> AVI: Kaj tiam vi povas meti SE aserto dekstre post fread dirante se
fread egalas nulo -
Ne.
>> JASON Hirschhorn: Kiu povas helpi Avi ekstere?
>> AVI: Kio estas la valoro revenis por fread?
>> JASON Hirschhorn: Ni nur iris trans tio.
>> AVI: Kiel vi reprezentus ĝin?
>> JASON Hirschhorn: Do li revenas - ni rigardu ĉi tien - ĝi redonas
size_t, kiu estas esence entjero.
Do ĝi redonas entjeron.
Kaj en nia kazo, gxi revenu 1 aŭ 0 -
1 se ĝi legis unu afero - unu bajto, kaj 0 se ni jam atingis la finon.
Do se fread -
yeah?
>> Studenta 45: Ĉu vi ne povas ĝuste meti la plenan fread (buffer, 1, 1, src) en la
dum buklo?
>> JASON Hirschhorn: Do vi proponas fari tion en tie?
>> [Intermetante Voĉoj]
>> JASON Hirschhorn: Atendu.
Do ni liveri de tiu.
Do vi proponas meti fread en tie?
Kion ni ankaŭ movi se vi volas fari tion?
>> Studenta 45: La bufro ekstere.
>> JASON Hirschhorn: Ni devus ankaŭ movi ĉi tie ĉi.
>> Studenta 45: Sed faras tion senĉese movi gxin antauxen?
>> [Intermetante Voĉoj]
>> JASON Hirschhorn: okej.
Do ĉi tiu estas kion Okshar proponitaj.
Ni kreas nian bufro.
Ni DUM fread, tiam ni fwrite.
Pensoj pri tio?
>> Studenta 46: Mia sola demando estas, ĉu ĝi reale ekzekuti la komandon fread?
>> JASON Hirschhorn: Granda demando.
Kiam vi metante funkcio alvoko interne de kondiĉo, faras ke
funkcio alvoko ekzekuti?
Ni jam vidis ekzemplojn de tio antaŭe.
Ĝuste?
>> Studenta 46: okej.
Jes.
Prave ekzekuti.
>> JASON Hirschhorn: Ni vidis tion kiel tio antaŭe, kie ni havas
funkcio alvokon ene de kondiĉo.
Ĉu tiu funkcio alvoko ekzekuti?
Jes.
Do la respondo estas jes.
Tiu funkcio alvoko Mi faros.
Sed denove, estas tio, kion ni volas?
>> Kio estas maniero ni povus diveni ĉu ĝi estas kion ni volas?
>> Multiple studentoj: Rulu ĝin?
>> JASON Hirschhorn: Ni povus ruli ĝin.
Sed antaŭ ol ni faras tion, ni povis same rezoni tra ĉi.
Se -
diras, ke ni havos unu bajton en nia fajliloj, ni ricevos tie,
ni atingos ĉi tiun kodon.
Ĉi kuros.
fread revenos unu bajto kaj stoki ĝin en la bufro.
Kaj tion taksos al 1, dekstra, poste li revenas 1.
>> Do DUM 1.
Ĉu tio signifas la kodon ene la DUM buklo faros?
>> Studenta 47: Jes.
Ĝi estas vera.
>> JASON Hirschhorn: Jes.
1 estas vera.
Ĝi estas ne 0.
Do la kodon ene tie faros.
Do ni skribos tion.
Ni movi reen al ĉi tiu linio denove.
Nun ni havas -
ni estas ĉe la fino de nia dosiero.
Ni legis el la fino de nia dosiero, ĉar ni nur havis unu bajton en ĝi.
>> Fread revenas 0, butikoj io en bufron.
Sincere, mi ne scias kion stokas en bufron.
Ni povus eble rigardi supren por vidi, kion ĝi faras.
Kiun mi honeste ne scias.
Ni ne scias, kiu zorgas kio stokas en bufro?
Sed ĝi ne revenos 0.
Kaj estos dum 0 ekzekuti?
>> DUM 0 ne agos.
Tial ni movos cxi tie.
Do ni ricevas pruvon de la manoj, se tiu estas la kodo oni devus kuri, aŭ se ni
devus fari ŝanĝojn unue.
Do, se vi opinias - vi devas voĉdoni.
Se vi opinias ke ni devus kuri kun tiu kodo kiel estas, bonvolu levi vian manon.
>> OK.
Tie estas unu -
cxu vi havas demandon, zorgo?
Jes.
>> Studenta 48: Post kiam ni movos buffer eksteren de la maŝo, do ni
devas malloc ĝin?
>> JASON Hirschhorn: Granda demando.
Poste ni movi buffer ekster la buklo, ĉu ni devos malloc ĝin?
Tiu estas medio demando.
Se ni pravalorizi buffer ekstere de tiu ciklo, ĉu ĝi ekzistas
interne de la buklo?
>> Multiple lernantoj: Jes.
>> JASON Hirschhorn: Jes.
Lia medio kovras interne de la ciklo, kaj, vere, io malsupre gxin interne
de tiu kodo, inkluzive de la aferojn interne tie.
Do ni ne bezonas malloc ĝin.
Estas loka variablo, kaj lia medio ankoraŭ inkluzivas la banton.
>> Studenta 49: Cxu ni bezonas por liberigi lin?
>> JASON Hirschhorn: Do nin bezonas liberan buffer?
>> Studenta 49: Jes, se ni ne malloc.
>> JASON Hirschhorn: Do nin bezonas liberan buffer?
Ni ne faras.
Denove, tio estas loka variablo, tial ni ne bezonas por liberigi lin.
OK.
Ni vidu kio okazos.
Do ĝi estas uninitialized.
Tio estis kion iu kiu Marcus proponita pli frue.
Do ni havas tiun eraron, variablo buffer Estas uninitialized kiam uzata ĉi tie.
>> Kiel oni povas ripari tion?
>> Studenta 50: malloc ĝin?
>> Studenta 51: Egalas NULL?
>> Studenta 52: Diru buffer egalas NULL.
>> JASON Hirschhorn: okej.
Aspektas bone.
Ni havas ĝin nun.
Ni kreos ion provi kopii.
Do ni havas nian teksta dosiero.
Kiel ni povas kuri tiun programon?
Jes.
>> Studenta 53: Vi povas fari dot oblikvo cp, test.txt.
Kaj tiam vi povas enoficigi alian dosieron kio ĝi konservos en.
>> JASON Hirschhorn: okej.
Ni nomas ĝin out.txt.
Cool?
Seg kulpo.
Pensoj pri la seg kulpas?
Ĉi tiu estas granda.
Kiel ni povas trovi kie la seg kulpo estas?
Kio?
>> Studenta 54: GDB.
>> JASON Hirschhorn: GDB.
Ni kuras gdb verkante gdb dot oblikvo, la nomo de nia programo.
Neniu komandlinia argumentoj tie.
Ni tuj aperigos Haltpunkto ĉe ĉefa.
Se mi volas komenci gdb, kion mi faru?
>> Studenta 55: R.
>> JASON Hirschhorn: R. Kaj poste kio?
>> Studenta 55: La argumentoj?
>> JASON Hirschhorn: Tiam la komandlinion argumentoj.
Ni promenu tra.
N estas simple preni min linio por linio.
Mi tuj iros ĝis Mi prenos mian seg kulpo.
Estas mia seg kulpo.
Ĝi aspektas kiel fread kaŭzitaj mia seg kulpo.
Mi scias fread kaŭzis mia seg kulpo, ĉar tio estis la
linio ni nur ekzekutita.
>> Kaj la sola afero, kiun estis okazas en tiu linio -
du aferoj okazis.
Fread tuj, kaj poste ni estis fari iun DUM kontrolado.
Mi pretas veti, ke la DUM kontrolanta ne kaŭzante mia seg kulpo.
Plej verŝajne, fread estis kaŭzante mia seg kulpo.
Mi ankaŭ vidas ion ĉi tie, memcopy.
>> Memoro kopion.
Sonas kiel movanta memoro de unu loko al la alia.
Sonas kiel iu kiu devus okazi en fread, eble kelkaj memoroj
movante tien de cxi tie.
Ni iru tra tiu denove.
Kjel mi komencas ĝin sur kaj ruli ĝin denove?
Jes.
>> Studenta 56: Ĉu vi bezonas meti kaj-simbolo antaux buffer?
>> JASON Hirschhorn: Do ampersand antaŭe buffer donus al mi la adreson de
bufro, kiu estas char *.
Ni kuras tra ĉi tiu pli da tempo.
Kjel mi kuras tra ĝi unu pli da tempo?
>> Studenta 57: Can vi ĵus tajpi kuri denove?
>> JASON Hirschhorn: Simple tajpu run denove.
Do ni ne tuj ekzekuti tiun linion.
Do bufro estas NULL montrilo.
Korekti?
Oni montras al - ni vidos.
Se ni havos niajn -
cxerpi rapidan bildon de tio.
Ĉu ĉiuj vidos se Mi skribos ĉi tie?
>> Do, en la stako, ni havos lokan ŝanĝiĝema kaj ĝi nomiĝas bufro, kaj
ĝi estas montrilo al char.
Kio adreso estas jena char at?
>> Studenta 58: 0x0.
>> JASON Hirschhorn: Ĝuste.
Tion ĉi estas.
En ĉi tie, interne buffer, stokas 0x0.
Tio estas kion ni havas - la instalinstrukciojn ni havas nun.
Do ĉi tiu linio, fread, metas ion el fonto kie?
En tiun skatolon aŭ tiu skatolo?
Kiu skatolo?
Maldekstra skatolo aŭ dekstra skatolo?
Tiu dekstra skatolo.
>> Ĝi sekvas la montrilon, kaj metas ĝin en ĉi tie.
Kiam ni provas kaj takto memoro ĉe situo 0, kion do ni havos?
A segmentación kulpo.
Tio estas la eraro ni havas nun.
Jes.
>> Studenta 59: Ĉu vi ne havas meti stelon buffer?
Aŭ ne?
Por fread?
>> JASON Hirschhorn: Do fread prenas montrilo.
Do pasas en bufron.
Kaj tiam ĝi malebligos _de_-referenco ĝi ie interne fread.
Sed denove, ni ekvidis, ĝi prenas montrilo.
Ni ne bezonas por pasi ĝin stelo bufro.
Tio estus pasante ĝi ajn estas ĉi tie.
Kaj tio estus verŝajne al ni eraro ĉar ni de-referenco ĝin.
>> Ĝuste?
Kiam ni de-referenco ĉi montrilon, kiam Ni provu aliri al ĉi loko,
ni ricevas eraro - nia segmentación kulpo.
Do -
oops.
Ni tuj forlasis el gdb.
Nia linio -
nia problemo - estas gxusta ĉi tie sur tiu linio.
Kaj ĝi estas problemo, ĉar de tiu linio.
>> Kiel ni povas krei skatolo kiu estas alirebla en fread.
Ĝuste?
Ni bezonas krei skatolo jen unu bajto grandajn, la amplekso de tipo char.
Sed ni bezonas tiun skatolon por esti atingebla kiam tiu funkcio ekzekutas.
Do kie -
yeah.
Ajna ideoj?
>> Studenta 60: Just starigis gxin kiel ajna hazarda karaktero.
Nur faru char buffer egaluloj la karaktero.
Kaj tiam, kiam vi buffer tie -
>> JASON Hirschhorn: Atendu.
Char buffer?
Do neniu stelo?
>> Studenta 60: Jes.
Prenu el la stelo.
Egalas hazarda karaktero.
>> JASON Hirschhorn: okej.
Do donu al mi unu.
>> Studenta 60: Kiel aux io.
Kaj poste, kiam vi havas bufron tie, vi uzas al -
>> Studenta 61: Stelo?
Oh ne, la kaj-signo.
>> Studenta 60: Uzu la ampersand.
>> JASON Hirschhorn: okej.
Kaj kio pri en fwrite?
>> Studenta 60: Uzu la ampersand denove.
>> JASON Hirschhorn: Bone.
Do, via ideo estas, ni kreos char kaj meti ion en ĝi, kaj poste
skribi al tiu tipo char.
>> Studenta 60: Jes.
>> JASON Hirschhorn: Kio cxu homoj pensas?
>> Studenta 62: Oni labirinta.
>> JASON Hirschhorn: okej.
Ni cxerpi gxin.
Do ĉi tiu fojo, mi iros, por cxerpi tio en ruĝa sur la stako tie, kaj tiam ni
havos -
ooh!
Pardonon.
Do tiu tempo ni havas ion nomita buffer, kaj ĝi estas sur la stako.
Korekti?
Kaj ni ŝparas en ĝi, komence.
>> Tiam ni havas nian alvokon al fread.
Kio fread tio estas prenas bajto de nian dosieron kaj metas gxin ie.
Ĝi metas ĝin en kion ajn la afero'S indikante.
Nu, antaŭ ol ni havis tiun adreson -
0x0.
Nun kio adreso ni havas?
>> Studenta 63: Kio ajn adreso buffer is.
>> JASON Hirschhorn: Kion ajn adreso buffer is.
Ĝi estas verŝajne tuj estos io kiel tio.
Probable tuj komencu per b kaj an f, kaj tiam ili havas ses aliaj
deksesumaj ciferoj.
Ne gravas.
Kelkaj adreso.
Kaj ni pasante tiu adreso in
>> Kaj ni tuj metis nian unu bajto afero en tiu adreso.
Do ni tuj metis nian unu bajto afero ene tie.
Kaj tiam ni tuj skribos el kio estas iam interne tie.
Ĉu iu havas demandojn sur tio?
Kiu pensas tiun kodon laboros?
>> Levu la manojn, se vi opinias tiun kodon laboros.
Vi devas preni starpunkton.
Kaj kiu pensas tiu kodo ne funkcios?
Levi vian manon.
Cxiu alia devus esti levante sian manon.
OK.
Michael, kie vi staras?
>> MICHAEL: mi ne povas decidi.
Speco de en la mezo.
>> JASON Hirschhorn: Vi estas en la mezo.
Pick tiu.
>> MICHAEL: Mi havos fidon kaj diri ĝi funkcios.
>> JASON Hirschhorn: okej.
Vi havos fidon kaj diri ĝi funkcias?
Kio okazis?
>> [Intermetante Voĉoj]
>> JASON Hirschhorn: Neniu seg kulpo.
Kiel ni povas kontroli por vidi se du aferoj estas egalaj?
Du dosieroj estas egalaj.
>> Studenta 64: Diff.
>> JASON Hirschhorn: Diff.
Klarigo ĉekojn por la diferencoj inter du dosieroj, kaj se ĝi redonas
nenion, ili estas identaj.
Kaj se ni malfermas, ni atingos nian dosieron.
Tiel estis la ĝusta solvo.
Ni retrorigardas al unu pli longa tempo.
Ni vere agis eĉ ne bezonas pravalorizi ĝin.
>> Estus probable aspektas iom purigisto, se vi ne metis
io hazarda en tie.
La punkto estas, vi bezonis krei iu spaco por stoki ion el
fread kaj prenu ion el fwrite.
Kaj tiu afero devis esti ĉu loka variablon en la stako - vi
povis jam malloc'd iun spacon.
>> Do ni efektive povus havi skribita malloc tie, kaj
kiu estus laborinta.
Kaj tiam ni estus estintaj stokante niaj aferoj ie sur la monteto.
Sed tio estas vere, probable, la plej eleganta solvo.
Nur krei iun spacon sur la stako cxar tion al iri.
>> Mi havas du aliajn komentojn.
Se vi volus preni deĵoro en tio, kaj tiam get notis pri tio, mia komentoj
estus jene.
Tiuj 1 estas chi tie, por mi, rigardi kiel magio nombroj.
Ĉi 1, en terminoj de fread, sencas.
Tio estas la nombro de la aferoj legi aŭ skribi.
>> Sed ĉi tiu ĝuste ĉi tie devus Probable estas io alia.
Do kio estas unu solvo?
>> Studenta 65: Grandeco de bitoko.
>> JASON Hirschhorn: Kiel tio?
>> Studenta 65: Grandeco de tipo char.
>> JASON Hirschhorn: Grandeco de tipo char.
Yeah, bajto estas ne tipo.
Do grandeco char verkoj.
Ni povus havi, ĉe la supro de nia kodo, # difinis tion.
Nomis ion bajto kaj ĝi estas vere char.
Efektive, eĉ pli bone alproksimiĝo povus esti tiu -
uint.
Iu scias kio tio estas?
>> Pardonon.
Mi havas ĝin malantaŭen.
Atendu, ne.
Kiun vojon faras ĝi iras?
Iu scias kio tio estas?
Jes.
>> Studenta 67: Supozita helpi normigi trans sistemoj, kio
havas - kiel sensigna entjeroj kiuj havas 8 bajtoj?
>> JASON Hirschhorn: Tio estas ĝuste.
Pri diversaj maŝinoj, la grandeco de char -
ne kutime char.
Signaĵoj estas kutime unu bajto.
Sed la amplekso de aliaj datumtipoj estas malsamajn grandecojn je 32-bitoj maŝino
kontre 64-bitan komputilon.
A uint8_t ĉiam 8 bitoj -
ĉiam unu bajto.
>> Kaj mi bezonas inkluzivi ke norma int kaplinio dosiero.
Do nun, tiu estus probable estis la plej bona maniero por skribi tiun kodon.
Do mi forigi la magio nombroj.
Kaj mi ankaux havas pli logika tajpi por bufro.
Ĝi ne estas simple char, estas bitoko, kio estas kion ni atendas ke ĝi estu.
>> Kaj ĝis ĉi tie, ni reale estis iom pli fortika.
Ni ne nomante ĝin char, kiu -
eble, kiu scias - povus esti malsama grandeco sur malsamaj maŝinoj.
Ni efektive dirante tio estas ekzakte unu bajto, ĉiam, negrave kion.
Kaj se ni rigardas tien, ni faru cp.
Uh-oh.
Kio okazis?
>> Studenta 68: Povus esti ŝanĝita.
>> JASON Hirschhorn: Kio?
>> Studenta 69: Ĉu?
>> Studenta 70: Vi ne difini ĝin kiel tipo.
>> Studenta 71: Sed ĝi devus esti difinita en normo.
>> Studenta 72: Kio okazas?
>> Studenta 73: Should difini estu ĉiuj kaskedoj?
>> JASON Hirschhorn: Do estas ne # difini.
Efektive, en tiu kazo, mi estas tuj uzi typedef.
Ĉar ni uzas ĝin kiel tipo en unu loko.
Do, en tiu kazo, ni vere volas typedef kiel ni presado nova tipo
bajto, kaj ĝi estas, esence, tiu.
Ĝi estas iom malsamaj ol # difini.
>> Kaj nun, ho nia kodo funkcias perfekte.
Do, denove, # difini prenas ion, Anstataŭas ĝin ĉie
kun la alia afero.
Estas nur makro -
stenografio por malfari magion nombroj.
Sed en tiu kazo, ĉar ni estas uzante ĝin kiel tipo -
ĝuste ĉi tie -
en ordo por ke labori, ni bezonas al typedef ajn bajto estas.
>> Kaj ni difinante ĝin ĉi tie.
Tio ne estas struct, fakte nur sensigna entjera.
Ĝi estas unu bajto longa.
Ĉi tiu kodo estos alirebla rete, kaj vi ĉiuj devas havi ĝin nun.
>> Do ni havas -
perfekta -
13 minutoj lasis iri super problemon agordi 5.
Mi volas promeni tra copy.c kune, kaj poste ni parolos mallonge
Pri la aliaj partoj de la problemo metita.
Do lasu min eltiri supren copy.c.
Kaj la malvarmeta afero estas, ke ni reale jam skribis multon de tiu kodo.
>> La kodo de ni skribis laŭvorte nur elvenis de tie kiam mi estis
skribi tion en mia propra.
Sed tio estas copy.c, formas la fundamenton por la unuaj du partoj de
la problemo metita por whodunit.c, kiuj vi devas skribi, kaj resize.c.
Recover.c, kiu estas la tria kaj fina parton de la problemo aron, ne estas
bazita ekstere de tiu dosiero.
>> Vi tuj bezonos skribi ke dosiero, ni donu al vi unu ŝablonon por ke
dosiero, sed ĝi havas nenion fari kun copy.c.
Sed ĉar copy.c estas la fundamento por La unuaj du partoj, ni iras
marŝi tra ĝi nun, do vi devos bona senso de kio faras.
>> Kaj la komentojn doni iom da ĝi for.
Ni jam skribis kelkajn el ĉi.
Unue, ni cerciorándose ni preni tri argumentojn.
Venonta, ni memoras la dosiernomon.
Do ni skipped tiun paŝon kiam ni coded nia afero -
kiam niaj cp.
Sed ĉi tie, ili estas farante gxi iom pli pura.
>> Ili estas kontrolanta certigi ambaŭ dosieroj estas bona, en
Krom malfermante ilin.
Ni skribis tiun tutan kodo gxuste nun, do mi estas Ne tuj, por logxi sur tiu kodo.
Sekva estas iuj aĵoj estas specifa al la tipoj de dosieroj ni uzas, kiujn
Estas bitmap dosierojn.
Bitmap dosieroj havas iujn metadatumoj asociita kun ili.
>> Do la unua paro da bajtoj rakontos al vi pri la dosiero.
Ili ne estas la koloroj de la rastrumero en tiu bildo.
Ili diros al vi pri la dosiero.
Kaj se vi legas tra la problemon aro, vi devos multe pli da informoj
sur kio tipoj de metadatumoj strukturoj inkludas kun bitmaps.
>> Sed tio estas kial ni havas tiun unuan aro de - tiun kodon ĝuste ĉi tie.
Ni legas la metadatumojn -
du pecojn de metadatumoj - la dosiero kaplinio kaj la info kaplinion.
Kaj ni estas kontrolanta kelkaj partoj de ĝi al certigi estas vera bitmap dosieron
antaŭ ol daŭrigi.
>> Kaj denove, ĉi tiuj estas detaloj ni ne bezonas iri en nun.
Se vi tralegu la problemo aro, vi komprenos tiuj.
Longan rakonton, tiuj estas nur diras, tio estas bitmap dosiero, kaj
konfirmante tion.
>> Tuj, ni skribas tiujn al la ekster-dosiero.
Ni vidas, ke ĉi tie.
Ni skribas al la ekster montrilo.
Venonta, ni determini Plenigado.
Do denove, kiel estas particularidad kun a bitmap dosiero, kelkaj linioj inkluzivi
Plenigado ĉe la fino.
Kaj se vi legas tra la problemon aro, vi lernos pli pri Plenigado.
Jen la formulo por trovi Plenigado.
>> Gravas memori -
kiam vi ŝanĝos la grandecon de bitmap arkivo, la Plenigado ŝanĝojn.
Kiam vi ŝanĝas la grandeco de arkivo, la Plenigado ŝanĝojn.
Ĝi estos neniam pli granda ol 3 -
tio estos 0 tra 3, inkluziva.
Sed kiam vi ŝanĝos la grandeco de iu, la Plenigado ŝanĝojn.
>> Se mi havas nur unu rastrumero en tiu vico, mi bezonas tri bitokoj de Plenigado, ĉar
ĉiu vico devas esti obloj de kvar bajtoj longe en bitmap dosiero.
Sed se mi duobligi tion, por iri de unu rastrumero al du bildero, ĉiu el kiuj,
diru, estas bajto, do mi bezonas du bajtojn de Plenigado fari
ke egalas kvar.
>> Do, kiam mi ŝanĝas la grandecon de io, Mi bezonas ŝanĝi la kvanto
de Plenigado mi havas.
Ĉu tio havas sencon por ĉiuj?
Tuj, ni persisti super ĉiu vico, aŭ tra ĉiuj vicoj.
Kaj tiam ni persisti tra ĉiu kolumno en ĉiu vico.
Ni traktis ĉi bitmap kiel krado, kiel ni traktis
la estraro en 15.
>> Kiel ni traktis la brikoj kiam Ni presas ilin sur la ekrano.
A krado de vicoj kaj kolumnoj.
Tiam - ni vidis tion.
Ni fakte ĝuste kodita ĉi.
Ni kreis iujn provizora stokado.
Ni legas en tie, kaj poste ni skribos ĝin.
Ĉi tiu estas ekzakte kion ni ĵus faris.
>> Tuj poste, ĉar mi diris ĉiu linio finiĝas per kelkaj Plenigado, ni
salti super kiuj Plenigado -
la malnovaj Plenigado.
Kaj poste ni aldonu gxin returne.
En ĉi tiu kazo, ni kreas la sama ĝusta dosiero.
Ni simple kopiante ĝin.
Do ĉi tiu linio estas ia stulta.
Ni povis laŭvorte nur metu la Plenigado in
>> Sed se vi ŝanĝos la grandeco de la dosiero, ĉu vi ankoraŭ volas tiun linion?
Do, se ni ŝanĝos la grandeco de dosiero: ni ankoraŭ volas salti
super la malnovan Plenigado?
>> Studenta 74: Jes.
>> JASON Hirschhorn: Do, ni faros.
Pro tio, denove, temas kun la fonta dosiero.
Ni ne zorgas pri la Plenigado el la fonta dosiero.
Ni volas iri al la sekva linio.
Sed ni ne simple metu reen la malnovaj kvanto de Plenigado.
Ni devas meti reen la nova sumo de Plenigado.
>> Do kiam ni ŝanĝas la grandeco de dosiero, ni ankoraŭ volas salti super la
Plenigado en la malnova dosiero - kio Ni legas en de.
Sed kion ni skribas al ni tuj bezoni remetu kelkaj malsamaj
numeron de Plenigado ke ni jam decidita.
Jes.
>> Studenta 75: La ordo de tiuj du linioj ne gravas, ĉu?
Ĉar vi estas uzado malsamajn dosierojn.
>> JASON Hirschhorn: Ekzakte.
La ordo de tiuj du linioj Ne gravas.
Ni skribu tiun linion.
Ĉi tie estas la dosiero Ni skribas al.
Tio estas grava, tiel ni atingos la dekstra kvanto de Plenigado.
Tio devas trakti kun la en dosiero.
Ni volas salti dekstra super la Plenigado.
>> Ni ne volas legi -
se ni legas bajto je tempo, ni ne zorgas pri tiuj Plenigado bajtoj.
Ni volas movi al la sekva linio.
Fine nur kiel Lucy donis pro ni, Ni fermas la dosierojn kaj revenas 0.
Do tiu estas copy.c.
Kaj ni efektive skribis - ni pasigis la plimulton de sekcio skribas ĉi tion, esence.
>> Vi faris tion.
Do espereble vi havis bonan senson de kio okazas en ĉi tie.
La granda diferenco, honeste, estas nur tiu unua parto kiu traktas
proprecoj de bitmap dosierojn.
Do mi havas kiel mia proksima glito, Kion ni devas fari?
Nu, ni pensu pri whodunit.
>> Kaj por iu, kiu legas tra la problemo metita, kion ni faras
bezonas fari en whodunit?
Simple.
Aleja.
>> ALEJA: Ĉu vi povas preni el la parto de ĉiu rastrumero kiuj signas ruĝa.
Kaj tiam -
speco de?
>> JASON Hirschhorn: okej.
Do prenu el la parto de ĉiu rastrumero kiuj signas ruĝa.
Tio estas apude, sed ne ĉiuj de ĝi.
>> Studenta 76: Nu, tie estas malsamaj manieroj fari ĝin.
>> JASON Hirschhorn: okej.
Donu al mi unu vojo.
>> Studenta 76: Prenu al cxiuj el la ruĝa kaj tiam substreki la blua kaj verda.
>> JASON Hirschhorn: okej.
Do donita ambaŭ ĉi tiuj manieroj -
gxi sonas kiel ni donu al ĝi bildero, ĝi havas ruĝan, bluan kaj verdan nivelo.
Ni volas ŝanĝi la relativajn niveloj de la ruĝaj, bluaj kaj verdaj, depende
sur tiu bildero.
Kie en tiu kodo oni devus ŝanĝi la relativa ruĝaj, bluaj kaj verdaj
niveloj de donita bildero.
Poste ni legis ĝin -
antaŭ ol ni skribi ĝin?
Donu al mi la linion nombro.
>> Multiple lernantoj: 83.
>> JASON Hirschhorn: 83.
Do ĝuste ĉi tie.
Por whodunit, la kodo kiun vi bezonas por registran ĉiuj devas iri rajton tie.
Kaj tio estas la nura kodo vi devas skribi.
Ĉar, kiel oni aŭdis, ĉiuj vi bezonas fari estas ŝanĝi tiujn relativajn blua,
ruĝa kaj verda niveloj de ĉiu bildero.
>> Vi jam legis ĝin, kaj nun vi estas tuj skribos ĝin.
Kiel mi estas rekompenciĝita - se mi havas tiun aĵon nomas triobla, ĝuste ĉi tie, kaj ĝi estas de
tajpi RGBTRIPLE -
bone, se ni rigardas en bmp.h, kio estas RGBTRIPLE?
>> Studenta 77: Estas struct.
>> JASON Hirschhorn: RGBTRIPLE Estas struct.
Ni vidas, ke ĝuste ĉi tie.
Kaj tial, se mi volis aliri, ni diru, la ruĝa nivelo de la struct, kiel do mi
aliri al la ruĝa nivelon de ĉi struct?
>> [CLASS murmuroj]
>> Studenta 78: RGBTRIPLE.rgbtred?
>> JASON Hirschhorn: Ĉu tio estas korekta?
>> Studenta 79: Ĝi devus esti triobla streketo anstataux RGBTRIPLE dot?
>> JASON Hirschhorn: Triobla.
Triobla estas la loka variablo, do ĉi tie, ne estas indikoj tie.
Do ni simple uzas la skalara skribmaniero.
Tio donos al mi la nivelon de ruĝa.
Se mi volas ŝanĝi ĝin, mi nur starigis ĝi egalus al io malsama.
Do denove, ĉi tiu linio de kodo aliroj ĉi variablo ene ĉi struct, kaj
ni povas agordi gxin por io nova.
>> Do por whodunit, denove, ĉi tio estas, en esenco, kion ni devas fari.
Tre simpla.
Nur ŝanĝi iujn relativaj niveloj, kaj tio estas kie tiu kodo iras.
Regrandigi, aliflanke, estas iom trickier.
Fakte, ŝanĝi grandecon estas probable la trickiest parto de tiu problemo metita.
Ni havas tri minutoj por iri sur ĝi.
>> Sed denove, ni jam skribis plejparto de ĉi tiu kodo, tiel ni
devus esti bela familiara.
Kion estas kelkaj aferoj kiujn ni volas fari en regrandigi, se vi legis super la
problemo starigis?
Se vi donos al mi, ni povas paroli pri ili.
Kion estas kelkaj aferoj kiujn ni volas fari?
>> Studenta 80: vertikale -
tiel vi devas horizontale regrandigi ĝi, sed vertikale regrandigi gxin tiel?
>> JASON Hirschhorn: Do, se ni donas bildero, kaj ni volas regrandigi ĝi per
faktoro de du, ŝi nun bezonas esti malpligrandigeblaj horizontale kaj malpligrandigeblaj
vertikale.
Ĉu tio havas sencon?
Jes.
Do tio estas probable la plej granda defio.
Kaj ni parolos pri tio en sek.
Jes.
>> Studenta 81: La vojon Mi pensis pri tio Estis vi bezonis presi ĝin -
>> JASON Hirschhorn: Atendu.
Ne diru al ni, kion vi faris.
Ni iras por paroli en logiko.
>> Studenta 81: okej.
Kio estis la demando?
>> JASON Hirschhorn: Vi nur levis viajn manojn.
Ne estis demando.
Permesu al mi prezenti gxin.
Lasu min nur diskutas ĉi mallonge.
Do ni jam unu bildero, ni volas repliki ĝin, ambaŭ horizontale kaj
vertikale.
Do ideale kion ni faras tie ĉi estas, ni legu en nia bildero, oni skribu tion
Tamen multaj da fojoj.
>> Sed poste ni havos niajn lertaĵo ĉi tie, ĉar do ni volas salti al la
sekvanta linio kaj skribi ĝin ĉe la komencante de la sekva linio.
Do, se ni deziras repliki ambaŭ horizontale kaj vertikale, kio estas
unu bona maniero por fari tion -
unu bona kvankam fari tion?
Do ni ne bezonas konstante serĉi ĉirkaŭ nia arkivo por meti la aferojn.
>> Tiu demando ne havu faris senco, sed mi pripensos
respondi al ĝi helpos.
>> Studenta 82: Krei tabelo?
>> JASON Hirschhorn: Do ni opinias de ĉiu dosiero vico.
Ni opinias, en terminoj de vicoj.
Se ni havos nian unuan vicon de nia malgranda bildo, ni povas fari, ke vico
en vastan vico de granda bildo, kaj tiam repliki ke vico tamen
multajn fojojn gxin bezonas por esti multoblighas, anstataŭ iri rastrumero per rastrumero,
kiuj ricevas konfuza kiam kontraktanta kun dosieroj.
>> Ĉar se ni havis -
Mi elĉerpiĝas de spaco.
Se tio estas nia arkivo, kaj ni havas ke unu rastrumero tie, kaj ni volas meti ĝin
Dekstre, ni havas ankoraŭ kelkajn aferojn ke necesas iri tien, kiam ni estas
skribo kaj kreante nia nova dosiero -
nia dosiero kiu estas duoble pli granda.
>> Sed estas vere malmola kun dosieron funkcioj salti ĉirkaŭ la novaj linioj
kiel tiu, kaj tiam revenu ĉi tien kaj ili metis tion en tie.
Estas preskaŭ neeble fari ion kiel ke, se tio havas sencon.
Do, se ni kredas en terminoj de vicoj, ni povas prenu nian vicon, kaj tiam metis ĝin -
repliki vicoj vertikale.
>> Kaj tiu estas kiel ni pritrakti regrandigi vertikale ol horizontale.
Tio estis speco de viva kaj iom konfuza.
Bedaŭrinde nia tempo estas supre.
Mi staros ekstere por tiuj el vi ĉi tie, kiuj havas demandojn pri la
problemo aro, inkluzive de rekuperi.
>> Do ni adjourn ĝis nun.
Kaj cetere, se vi havas demandojn, ni povas babili ekstere.