[Powered by Google Translate] ZAMYLA Chan: Bone, ĉiuj.
Bonvenon Walkthrough 1.
Ĉi Walkthrough estos sur pset 1, kiu estas C. Mi esperas ke vi
ĉiuj havis amuzon kun via Scratch projektoj.
Do nun en ĉi walkthrough, ni fakte tuj estos
povis eniri en C, enir skribi iujn maŝino kodo.
Do se vi ne estis ĉe Walkthrough 0, tiam tiuj
walkthroughs vere - we're tuj iros tra
problemo aro, paroli tra iu komuna bekojn kaj teknikoj
ke vi povas uzi.
Ni rompos la asigno supren enen regebla mordas, por ke
you guys povas komenci kaj espereble
kompreni kiel fari ĝin.
>> Okay.
Do pset 1.
La psets ĉi tiu jaro havos strukturon kie la unua -
tie tuj estos sekcio de demandoj, serio de
demandojn kiuj vere ankaŭ helpos vin komenci kun
la pset, helpi vin ekzerci iuj teknikaj kiu vi bezonas.
Kaj tial tiuj demandoj, mi ne tuj kovri en la
walkthrough ĉar en via sekcio, via atribuita instruado
ulo estas vere tuj marŝi tra tiuj
demandojn kun vi.
Je la fino de via sekcio, vi iradu for kun la
respondojn al tiuj demandoj sed ankaŭ kun la konfido kiun
vi povas apliki iujn el la trajtoj kiujn vi bezonos
por la lasta parto de la pset.
>> Pset 1 konstituas Mario.
Kaj tio estas amuza iom programo kie esence ni
skribi kaj presi duono piramido en la tipa Mario sceno.
Kaj tiam la dua parto de la pset nomas Greedy.
Kaj tiel en Greedy ni esence agi kiel avida
kasisto, kie se iu donas al ni kvanto da mono
ke ni volas, ni kalkuli la minimuman kvanton da moneroj kiujn
ni povas reveni al ili ankoraŭ doni al ili tiun kvanton.
>> Bone.
Do ĉiu walkthrough havos iloj.
Kaj denove, vi eble ne uzis ĉiujn la iloj en ĉi
iloj aŭ vi povus uzi ĉiuj ili.
En ajna kazo, ĝi estas vere bona scii kion
vi ekipita kun.
Do ni havas la CS50 Appliance, kiun Mi montros al vi infanoj kaj
enkonduki vin al tio.
Tiam ankaŭ ĝenerale, bona stilo estas definitive unu el niaj
plej gravaj iloj.
Stilo esence rilatas al kiel legebla estas via kodo?
Kiam iu alia iras kaj legas vian kodon, do ili havas
facila tempo?
Povas kompreni tion?
Ĉu eleganta?
Tiam ni parolos pri kiel oni povas valida uzanto enigo en vian
programo ĉar en ambaŭ Mario kaj en Greedy, vi devas
demandu al la uzanto eniro kaj doni al vi ian numeron.
Tial ni volas certigi ke nombro estas valida.
Tiam memoras en Scratch, ni havis blokoj kiel Ripetu,
Ripeti Ĝis, aŭ Atendu, aŭ Forever.
Do ni tuj ia traduki ke en C nun kaj
rigardi bukloj kiel por, dum, kaj do-tempo.
Tiam ankaŭ ni ankaŭ bezonas montri valoroj denove sur la
ekrano, ĉu ĝi estas en Mario aŭ en Greedy.
Kaj tiel ni parolos pri kiel oni presas tion for strings al
entjeroj kaj flosas.
Kaj poste fine, ni parolos pri _pseudocode_, vere
grava koncepto por memori laŭlonge de ĉi tiu kurso.
Kion mi trovas min helpas plej kun problemo aroj estas pensi kaj
priskribi kion mi volas fari antaŭ pensi ajna C.
Sed ĝuste priskribi la agon.
Do _pseudocode_ estas speco de en inter la angla kaj C, tia
priskribanta la procezoj sen la ĝusta sintaksa sed
havigante sufiĉe bona strukturo.
Kaj do mi havos iujn ekzemplojn de _pseudocode_ por vi tiel
en ĉi walkthrough.
>> Okay.
Do kion ni povas labori kun estas la CS50 Appliance.
Estas esence virtuala maŝino tian kuras
komputilo en via propra komputilo.
Kaj ĉi tiu havas multajn avantaĝojn.
Unu estas, ke ĝi estas preestablecida kun amaso de la iloj kiujn vi instruos vin
bezonas por CS50.
Tiel, tio signifas ke ĉiu estas la sama tero,
ĉu Mac aŭ PC aŭ alia mastruma sistemo.
Ni povas ĉiuj kuras la virtuala maŝino.
Kaj tiel estas instrukcioj ĉe manual.cs50.net/appliance.
Kaj do se vi iras al ligantaj kaj sekvu la instrukciojn,
tiam espereble vi povos instali la aparaton.
>> Do unue, vi devas instali aplikon, an
reala apliko por povi kuri la virtuala maŝino.
Kaj tiam vi elŝuti la aparaton.
Sed denove, estas instrukcioj ĉe
manual.cs50.net/appliance.
Do mi jam elŝutis mian aparaton, kaj mi instalis
ĝin en VMware Fusion.
Kaj tial iam mi elŝutis la aparaton, mi iris al Dosiero.
Mi iris al Malfermi kaj tiam trovis kie mi
stokita la CS50 Appliance.
Kaj de tie, mi kuris ĝin ĉi tie.
Sed mi havas ĝin jam tie, do ni prenas pli proksima rigardo.
>> Bone.
Do nun ni estas ene CS50 Appliance.
Mi faris ĝin plena ekrano.
Vi povas elekti fari tion se vi volas aŭ simple devos ĝin kiel
malgrandaj fenestro sur via labortablo.
Jen ni havas nur simpla tablo kun
hejmo kaj rubo.
Sed se vi iras al Menu kaj tiam al Programado, tiam vi vidos
ke ni havas ion nomita Terminal.
Kaj tiel en tie, ni povas navigi ĉirkaŭ nia komputilo.
Ni povas skribi kodon.
Sed reale, ni povas uzi programon nomata gedit, aŭ "g
redakti, "kiu ajn kiu estas.
Do ni estos uzi tiun verki kodon.
Do vi havas tiujn du iloj kiuj vi estos uzanta unuavice
skribi kodon.
Tiam krome, estas nur kiel regula komputilo.
Ni havas retumilo.
Ni elektis Google Chrome.
Kion mi faris estas mi starigis Dropbox enhavi ĉiuj
la dokumentoj.
Kaj por ke io ke tio ege kuraĝigis.
Dropbox uzas nubo sinkronigi do se -
tiel ekzemple, iu hazarde - ni esperas ke ne -
okazas al via aparaton, tiam ĉiuj estos
synced sur la nubo.
>> Bone.
Do tiuj estas la aplikoj kiuj vi estos uzanta en la
CS50 Appliance.
Nun por navigi ĉirkaŭ la komandlinio.
La fina povas fakte agas kiel speco de formo de reale
tajpi komandojn en -
kiel, se vi estas Mac, a Buscador.
Aŭ se vi estas en Windows, mi kredas ke estas "esplori mia
komputilo "aŭ io simila.
Do, se ni reiru al la aparaton, ni malfermi
fina fenestro.
Do ĝi havas ĉi prompto, jharvard @ aparaton.
Ni simple fari ĉi granda.
Okay.
Do, se ni tajpu la komandon ls, tiam tiu listas ĉiuj
dosieroj en nia komputilo, en nia aktuala dosierujo.
Dosierujoj estas nur kiel dosierujoj.
Ni uzas tiujn terminojn sendiference.
Bone, do ni listigas la dosierojn
kiuj estas en tiu ĉi dosierujo.
Nun se ni volas aliri, diru niaj Dropbox, tiam ni povas
ŝanĝi dosierujoj.
Do cd kaj poste Dropbox.
Ni ls denove, kaj tiam ni vidos la listo de dosieroj, kiuj estas en
ĉi dosierujo.
Tio estas analoga al mi iras al mia hejmo, do klakante
Dropbox, kaj tiam vidi la liston ĉi tie.
>> Bone.
Do diru -
kiam vi infanoj tuj faros viajn pset 1, ni faros
katalogo nomis pset1.
Do ni estas en Dropbox nun, kiel vi povas vidi de ĉi
instigas tie.
Do ni faru dosierujo.
Do mkdir, ni nomas ĝin pset1.
Kaj tial nun, se ni ls denove, tiam ni
vidi ke pset1 aperas.
Kaj do se ni volas iri interne pset1, tiam ni povas iri interne
ke dosierujo kun la komando cd.
Bone.
Do denove, vidu se ni -
diri, ni faru ĝin alian vojon.
Tio estas analoga al nur diras "Krei
Nova Dosierujo, pset1.
Sed kiel vi trovas, vi povas interagi kun
la fina tre.
Do kelkfoje ĝi estas multe pli facila, perdita rapida justaj
labori en la fina fari tiujn varojn de aĵoj.
Okay.
Kaj tiam tiuj aliaj komandoj.
Jen rm por forigi dosieron.
Do vi simple tajpi rm kaj tiam la nomo de la
enarkivigi forigi ĝin.
Ni iru en kelkaj ekzemploj de tiu poste.
Kaj tiam ni havas ion nomita la viro komando, kiu
Alportas manlibro por tipo de funkcio.
Denove, mi elvoku reala ekzemplo de tiu poste.
>> Do alia vere grava ilo, kiel mi menciis mallonge
antaŭe, estas stilo.
Do esence, stilo devas vidi kun legibilidad.
Ĉu iu alia povos legi, sekvu, kaj
komprenas vian kodo?
Tio estas aparte grava por vi, vi mem, fakte.
Se vi enlitiĝi malfrue kodigo, kaj tiam vi poste
reiru kaj vi estas kiel, kion faras tiu variablo meznombro?
Diru vi laboras en grupo projekto kun iu, kaj vi
ambaŭ devas rigardi reciproke kodo.
Estas vere grava ke vi enoficigi vian variabloj korekte
kaj fari ĝin rigardi bela ĉar tio faras la tutan diferencon.
Sed tiam ĉefe, ni estas en kurso nun.
Do por la intereso de CS50 kaj speciale pro via
instruado uloj kaj graders kiu estos rigardante vian
psets, bonvolu, bonvolu uzi korekta stilo.
Kaj via instruado uloj estos sufiĉe feliĉa.
Do denove, stilo inkludas indenting aferojn ĝuste,
speciale uzi vian streĉaj kaj indenting tiuj.
Enoficigante variabloj iu kiu faras sencon.
Ĝuste nun ni sekvas la konvencion kiam vi havas
multnombraj vortoj en vian variablon nomo, tiam vi
konekti ilin kun substreki, kiel vi vidas en tiu
enoficigi ekzemplo tie.
>> Tiam fine, iu vokis magio nombroj.
Esence, kiam vi legas tra kodo kaj diru
vi havas variablo -
diru, vi ne havas variablo sed ĝuste diri bone, ĝis tia
kaj tia estas malpli ol 10.
Tiam via grader tuj iros bone, atendi,
kien ke 10 venis?
Do vere klarigante mem gravas multe.
Por helpi vin klarigi mem estas komentoj.
Komentoj estas probable la plej grava afero por inkludi en
viaj programoj.
Kaj tio helpas vin ne nur vere klarigi -
ĝi helpas vin ia klarigi vian rezonadon kiel
vi iras kune.
Kaj do se vi faros tion, denove, ĝi tuj estos multe pli facile
reiru en via kodo kaj tipon de kompreni kion vi estas
fari tie.
Denove, graders vere ŝatas komentojn.
Do vi diras bone kaj -
speco de kiel libera punktoj.
Kaj kiu ne ŝatas liberan punktoj?
Vi povas ankaŭ havi plurliniaj komentoj.
Kaj tiel mi komprenis ian ŝablonon ĝis ĉi tie.
Esence, kutime tiuj estas uzataj ĉe la supro de via
programo por ia klarigi ĝenerale kion
via problemo aro faras.
Inkluzivi vian nomon, la dato, kaj tiel plu.
Kaj tiel, kiel mi diris en tiu plurliniaj komentoj,
manual.cs50.net/style_guide havas pli konsiloj kaj reguloj pri
stilo por cikloj, kaj tiel plu.
>> Okay.
Do nun ke mi diris al vi iom pri stilo, vidu
tio en agado.
Bone.
Do jen, Tommy skribis al ni belege hidaj
Ekzemplo de stilo en programo.
Do vi vidas tie, tute certe.
Tiu estas fakte tute bona.
Vi vidos la plurliniaj komentoj ĉi tie.
Vi komencu ĝin per antaŭen oblikvo kaj tiam du asteriskoj.
Vi daŭrigu kune, vicigante la asteriskoj laŭ la linio
kaj poste fini ĝin per asterisko kaj oblikvo.
Bone.
Por ke estas bone.
Ĉi tie estas bone.
Li inkluzive la bibliotekoj.
Sed tiam tie li havas komentojn generanta multnombraj linioj.
Ekzistas multaj aĵoj malbona ĉi.
Komentoj generanta multnombraj linioj, ĉi tie li uzas
la sintakso por nur unu linion komentojn.
Li ankaŭ melding ĉion en la sama komento.
Do ni volas eviti tion.
Tiam tie ni vidas ke tiuj krampoj, ekzemple, estas ĉiuj
super la loko.
La deŝovon estas erara.
Fakte ne montros al vi definitive kie io
skuigxas kaj alia afero finiĝas.
Tiam ankaŭ, vidas li havas difinita variablo i = 5 tie.
Sed tiam ĉi kvar venas el nenie, kaj tie estas neniu
diri al vere klarigi kie tiu venas.
>> Okay.
Do nun ni rigardu iun kiu estas fakte ĝuste la sama
kodo krom kun bona stilo.
Do denove, ĉi tiu estas la bona stilo, ekzemple,
la plurliniaj ekzemplo.
Kaj tiam tie estas sufiĉe pura.
Ni vidas, ke li komenciĝas kun se aserto tie, eniras en novan
linio, havas malfermita streĉa.
Tiam li havas deŝovon.
Li gardas tiun deŝovon -
li gardas tiun indikon uniformo trans la tuta
programo kaj vere montras kiam bloko de kodo komenciĝas, kiam
unu bloko de kodo finas.
Ĉi tio povas simili iom nitpicky en nia parto komenci
kun, sed vi vidos kiel vi skribas vian kodon.
Estas vere utila por povi apartigi ĉi eksteren.
Kaj ankaux vian graders vere ŝatas tion.
Kaj tial vi vidas, anstataŭ nur metante nombro en
tie, li efektive nomis la variablo iteraciones.
Kaj tial ni ne vere rigardas ĉi tiun kodon nun
sed gxuste tia vidi ekzemplon de
bona kontre malbona stilo.
Kaj do se vi rigardas ilin unu apud la alia ĉi tie, vi estus
definitive preferas legi la unu dekstre.
>> Bone.
Do unu lastan aferon antaŭ ol ni plonĝi en la reala karnon de la
pset estas kiel tradukigi kaj ruli vian kodon.
Kaj tial esence kiam vi skribas C, kiu fakte ne estas
tradukita al la reala maŝino kodo, la nuloj kaj
kiuj la maŝino povas fakte legis kaj interpreti.
Do ni havas ion -
Clang estas tradukilo, ke ni uzu por C.
Estas multaj tradukiloj.
Sed en CS50, ni estos uzi Clang.
Kaj tiel Clang esence tradukas de C al maŝino
kodo por vi.
Do ni rigardu ekzemplon - pikita en la Appliance tie.
Bone.
Do ĝuste nun ni estas en nia hejmo dosierujo.
Ni efektive ne estas kie ajna kodo estas.
Do ni ŝanĝi nian dosierujon al Dropbox/walkthrough1, kie
Mi stokitaj kelkaj kodo.
Do, se ni premu ls, tiam oni vidas, ke mi havas
kelkaj dosieroj en ĉi tie.
>> Bone.
Do mi jam skribis hello.c, do ni kompili ĝin
kaj poste vidi kion ĝi faras.
Do baza kompili komando estus clang tiam hello.c,
esence dirante bone, kompili hello.c por mi.
Mi alklakos Enter, ŝajnas esti irinta pravas.
Ni klaku ls denove.
Ĉi a.out dosiero nun montrata.
Kaj tiel a.out estas plenumebla dosiero.
Do por ruli ĝin, vi faras. / A.out.
Kaj tial ni vidas ke ĉi hello.c programo ŝajne
presas el saluton kvinfoje.
Bone.
Sed diru ni ne volas uzi la nomon a.out.
Ekzemple, ni volas lanĉi la programon saluton ĉar tio
faciligante komprenas.
Do diru clang hello.c, kaj tiam esence vi bezonas
pasi en iuj aĵoj nomata flagoj.
Dirinte bone, bone mi volas citi ĉi ion alian.
Vi ankaŭ povas pasi en tereno de pluraj flagoj,
kion vi vidos.
Do la flago por enoficigi programon ion por ke vi
volas estas-o.
Post-o, vi skribu la nomon de la programo.
Ni simple nomas ĝin saluton.
>> Do nun ni vidas ke ni efektive havas saluton ruleblan dosieron.
Do ni povas ruli ĝin, kaj ĝi faras same kiel antaŭe.
Do nun ni havas saluton, ni povas ankaŭ forigi, por
Ekzemple, nia a.out.
Do rm por eltiri, a.out, via fina stacio instigas vin, demandi
por vi por konfirmi ĉu vi vere volas
forviŝi ĝin aŭ ne.
Ni diru y por jes.
Kaj tie ni iru.
A.out estas for.
Bone.
Sed kelkfoje ĝi atingas konfuzi memori ĉiujn
flagoj kiujn ni bezonas por inkludi kaj tajpu el clang.
Kaj kiel ni vidos, kiam ni uzas pli kompleksaj programoj, ni
esti inkludita malsamaj bibliotekoj.
Kaj tiel niaj ordonoj al Clang ricevos pli longaj kaj pli longa.
Do inkluzivita en la CS50 Appliance estas la fakto komando.
Do vi simple tajpi fari saluton.
Oops.
Ni jam faris tiun plenumeblan dosieron.
Do mi simple forigu ĝin rapide.
Nun ni tajpi fari saluton.
Kaj vi vidos en tiu linio tie esence dirante fari
saluton engaĝas ĉiuj tiuj ordonoj ke
iri en ĝin por vi.
>> Do inkluzivita en la CS50 Appliance estas la fakto dosiero.
Do simple, kiam vi havas dosieron name.c, tiam ĉiuj vi faras
estas diri fari dosiernomo.
Kaj tiam vi havos plenumebla
dosiero kun tiu nomo.
Jes?
>> Parolanto 1: Por mia komputilo, anstataux Clang diras GCC.
Ĉu tio estas kiel -
ZAMYLA Chan: Yeah.
Do via komputilo povus diri GCC kiel kontraŭ Clang ĉar
GCC estas alia tipo de tradukilo.
Se vi estas en la CS50 Appliance tamen, tiam
devus uzi Clang.
Se ĝi ne estas, tiam eble venu paroli al mi poste aŭ afiŝi
sur CS50 Diskutu kaj ni povas ordigi tion diveni.
>> Bone.
Do nun ni havas niajn speco de bazaj iloj sube, tiam ni
povas plonĝi en Mario.
Okay.
Do Mario estas programo kie esence ni tuj estos
fari nian propran specon de komenca versio de la Mario
ludo fono.
Vi scias, Mario kutime havas pipon kaj
arbo kaj iuj blokoj.
Kaj tiam tie estas speco de duono piramido.
Do ni simple tuj estos enfokusigante ke duono piramido,
farante kodo tia ke ĝi presas el hashes por la speco
de blokoj en ĉi tiu formato.
Do kio okazos estas la uzanto volas enigo certa
alteco de la piramido kaj tiam vi presi ke el
tia, ke la fundo lasis hash -
tiel ke je la malsupro ĉi tie - ke unu vicigos
kun la fundo maldekstra de via terminalo.
Okay.
>> Do la unua afero, kiun vi bezonas -
la unua iom mini problemo, ke ni bezonas pritrakti estas kiel
por ricevi la eniro de la uzanto.
Do ni bezonas esti kontraktanta kun kio la uzanto eniroj kaj tiam
speco de eligo aferojn tie.
Do ni rigardu rigardas dosiero nomata apples.c ke mi skribis
kiu traktas eniroj kaj eliroj.
Okay.
Do jen supre, mi inkluzivis iujn el la bibliotekoj
ke mi bezonas.
La vere grava tie estas stdio (normo I / O). Kiu klopodas
kun normo eniroj kaj eliroj ĉar nin tuj
pritraktatos uzanto enigas.
Bone.
Tial mi komencos mian ĉefa funkcio.
Kaj tiam mi petas la uzanto bone, kiom da pomoj vi havas?
Tiam ĉi tie, kio estas tiu linio faras -
Mi atribuas la variablo i al la valoro de GetInt.
>> Do GetInt estas funkcio kiu estas inkluzivita en stdio.
Kaj tial esence, ke pritraktos ĝin por vi.
Ĝi instigas la uzanton por int.
Kion ajn ili revenas, kiu estos atribuita al la
variablo i.
Kaj tiel do estas nur iom programo kiu malpliigas la
valoro de i per 1 kaj poste presas el la nova valoro.
Bela afero pri gedit estas fakte ke ekzistas minimuma
fina dekstre en ĉi tie.
Do anstataŭ devi ŝanĝi antaŭen kaj malantaŭen inter
gedit kaj la fina, vi povas efektive
nur ruli ĝin de ĉi tie.
Do ni unue eniri la dekstra dosierujo.
Do ni ŝanĝi nian dosierujoj por
Dropbox/walkthrough1.
Bone.
Do nun ni faros pomoj, kompilas ĝin por ni.
Kaj tial nun ni kuras pomoj.
Kiom da pomoj ni havas?
Mi diras, ke mi havas 3.
Kaj diras "mwahaha Mi manĝos unu el ili" kaj diras
"Vi nun havas 2 pomoj".
>> Bone.
Do ni kuros ke denove.
Kaj diru mi havas 1 pomon.
Nun mi havas 0 pomoj.
Okay.
Do ĉi tiu programo ŝajnas funkcii kiel atendita.
Ni enigo numeron, ĝi malgrandiĝas ĝin per 1, kaj poste
presas ĝin denove.
Sed kion se, ekzemple, mi havas -1 pomojn?
Tio ne sufiĉe sencon.
Sed estas ankoraŭ entjero, do la programo akceptas ĝin.
Kaj tiel li revenas al vi ankoraŭ pli negativa nombro.
Do jen unu leciono por ni, ke kvankam la GetInt
funkcio kaj la alia asociita aĵoj kiel
GetFloat aŭ GetString -
kvankam tiuj ricevos al ni la rajton datumtipo, por
Ekzemple, se mi nur diris [tajpado],
tiam diru al mi por reprovi.
Do ĉi pritraktos ajn datumoj tajpi via enigo
estas sed ne efektive kontroli, nu, ĉu vere tipo de
valoro, kiun mi volas?
Tial parto de Mario estas ke la uzanto devas eniro
numero kiu reprezentas la alton de duono piramido
ke vi faras.
Kaj tiel do se ni instigante tiu uzanto por la alteco, tiam
devus esti du baroj sur ĉi.
Ĝuste?
En la specifo, ĝi diras ke ne devus esti pli ol 23
karakterojn pro tio speco de la normo
alteco de la terminalo.
Sed tiam, kion aliaj baro, eble suba baro, eble
ni volas inkludi?
>> Se ni vere desegni piramido, ia pensante reen
al kiom alta piramido povas esti, povas ĝin iam ajn esti malsupera ol
iu numero?
Parolanto 2: Bigger ol tri.
ZAMYLA Chan: Hmm?
Parolanto 2: Bigger ol tri.
ZAMYLA Chan: Tio estas bona punkto.
Ĝi povus esti -
ni volus limigi ĝin al nur tri nivelo piramido.
Sed ni pensas -
diru kiel oni hash tablo rakontas kiel piramido tro.
Do kion devus nia reala suba baro estus?
Pensante reen al pomoj, ni ne volas
negativa alteco piramido.
Ĝuste?
Okay.
Do, kiam vi petas la eniro de la uzanto, tiam vi devos
inkluzivi iu maniero certigi ke la entjera ke
ili provizas vin per ne negativa ĉar vi ne povas
desegni negativa piramido.
>> Okay.
Do estas kelkaj manieroj por fari tion.
Esence, kiam vi petas uzanto enigo, vi volas postuli
ke ili provizas vin per ĝentila enigo.
Do vi volas postuli ke ili provizas vin per nombro
kiu ne estas negativa, sed ankaŭ malpli ol 24.
Do ni pritraktas nulo ĝis 23, inkluzive.
Bone.
Do ni volas senĉese demandar -
se ili ne donis al ni valida entjero, ili volas
senĉese postulas ne.
Donu al mi valida enigo.
Donu al mi valida alteco.
Do rememori reen en Scratch, ni havis la Ripetu Ĝis bloko aŭ
la Forever Se bloko.
Tiuj estas maŝojn kiuj estas tre similaj al la dum loop kaj
la do dum buklo, kiun ni ricevos en nur en dua.
Do la tempo buklo esence havas kondiĉe ke vi kontrolu
jen Bulea valoro, ke vi metis ene tie, kiel la
blokoj en Scratch kun la anguloj.
Tion iras ene de la krampoj de la dum ciklo.
Do vi devos havi ian kondiĉo tie.
Kaj kiel ni ĵus diskutis pli frue, tiu kondiĉo volo
devas fari kun la limoj de la entjero kiu inputted.
Do la kondiĉo havus ion por fari kun ĉu
la entjero estas ene de la taŭgaj baroj.
>> Do tio estas dum ciklo.
Ekzemple, vi povas instigas por la entjera kaj poste
senĉese kontrolu dum ĉi enigo ne estas valida.
Ekzemple, daŭre re-instigante, daŭre demandas
la uzanto por entjero.
Por ke povus esti unu vojo.
Alia vojo povus esti do dum ciklo, kiu estas tre
simila al tempo buklo krom kia fari dum faras estas -
vi povas ia vidi por la sintakso -
estas ke ĝi havas la do kaj poste la fakta buklo korpo unua.
Tiam ĝi havas tempon, kondiĉoj.
Do kion dum cikloj -
kion ili estas utilaj por estas, ke ili efektive ekzekuti la
kodo almenaŭ unufoje kaj poste kontrolu ĉu la kondiĉo estas
renkontis aŭ ne.
Do se vi estus fari do dum ciklo, tiam en via
deklaro povas instigas por entjero ĉar vi en
almenaŭ devas demandi al la uzanto tuj.
Kaj tiam post vi instigas ilin, tiam vi povas diri bone,
bone unufoje Mi faris tion, ĉu validas?
Se jes, tiam vi povas simple daŭre iras.
Sed se ĝi ne estas, tiam devos simple agas kiel regula dum
buklo kaj poste daŭre petas.
>> Okay.
Do ni estas reen al Mario.
Do ni scias kiel instigas por la ĝusta uzanto enigo tio
ene de la dekstra baroj.
Do nun ni efektive devas desegni tiun duonon piramido.
Ĝi aspektas kiel simpla teksto gravuloj.
Do ni efektive malferma -
ni nur malfermi fenestron kaj diru bone, bone kion se mi
vere faros tion permane, tajpu unu mem?
Okay.
Do ni vidu.
Diru, ekzemple, ni volas fari piramido tio
vicigitaj laŭlonge de la maldekstra flanko, tiam estus nur faru -
en Mario, la supera nivelo havas du blokoj anstataŭ unu.
Do ni komencu per du.
Ni alklakos Eniru.
Ni faras tri, kaj poste kvar, Enter, kvin.
Okay.
Por ke estas sufiĉe simpla.
Krom en ĉi tiu problemo aro, ni volas vere vicigi kun
la dekstra flanko de nia ekrano.
Bone.
Do, kiel povus el vi efektive tajpi ĉi tia ke
ĝi estas vicigitaj laux la rajto?
Anstataŭ meti la hash unua, kiel eble vi speco de
movi ĝin kune?
Parolanto 3: Skribu linio?
ZAMYLA Chan: Hmm?
Parolanto 3: Skribu linio?
ZAMYLA Chan: Yeah.
Yeah.
Vi povus skribi kiel substreki aŭ ion kiel
tion, sed ni povas nur diri uzi spaco.
Ni metis en kiel tri spacoj tie.
Tiam la sekva linio, nu, ni devus meti du spacoj.
La sekva linio, ni nur metis unu spaco.
Kaj poste por nia lasta linio, ni ne metis neniun spacoj.
Kaj tie ni havas niajn piramido.
>> Do jen speco de -
memori, ke tia logiko.
Kaj provi kaj eltrovi ian mastron, ke ni povas
tiam traduki al C kaj engaĝi en ia buklo.
Bone.
Supozu ke ni havas altecon ok, tiam nia unua vico devos
du hashes.
Sed por atingi tiujn hashes, vi devus skribi iujn
spacoj antaŭe.
Ĝuste?
Kion mi faris estas mi ĵus travivis.
Mi tiris ĝin el mi mem, piramido en mia tekstoredaktilo, oni
piramido kun alteco de ok kaj poste kalkuli kiom da
spacojn mi bezonis fari.
Do mi diris bone, bone la unuan vicon estas
havos du hashes.
Sed antaŭ tio, mi bezonas enigo sep spacoj.
La proksima havas ses spacoj kaj tiam
tri hashes, kaj tiel plu.
>> Tial ni provu kaj alporti tion al alia tavolo de
abstraktado.
Kio se ni havis por la n-a vico, kiom da hashes kaj kiel
multaj spacoj estus ni bezonas?
Ĉu iu vidis la mastro?
Do la unua vico havas du hashes.
La dua havas tri.
La tria havas kvar.
Do la n-a vico havus -
Parolanto 4: N plus 1?
ZAMYLA Chan: Yeah.
N plus 1.
Ekzakte.
Tial ni vidas ke la numero de hashes tuj estos -
se ni rakonti la unua vico por esti unu, tiam la nombro
de hashes estas ĝuste tuj estos pli ol tio.
Okay.
Tial kio pri la nombro de spacoj?
Do ni provu kaj esprimi tion en terminoj de la alteco.
Se la alto estas ok, tiam la unua
vico havas sep spacoj.
Por ke ia respondas al 8 minus 1.
Ĝuste?
Do tiam la dua vico tuj havos ses spacoj,
kiu estas 8 minus 2.
Tial mi tuj forlasos ĝin al vi ia figuro el
la ŝablono por tio.
>> Okay.
Sed en programado, kelkfoje ni efektive indekso je nulo.
Do ni komencu je nulo anstataŭ unu.
Do anstataŭ la unua vico estante nomita la unua vico,
ni iras al nomante ĝin la 0-a vico.
Do laŭ la vojo, kiun vi volas apliki ĝin, esti
tre zorgema ĉu vi komencas je nulo, ĉu vi starti je
unu, via mastro tuj estos kompensita de unu.
Okay.
Do nun ni ia supozis, la programo, ni
devas diri okay.
Do por ĉiu speco de nivelo de la ŝtuparo, mi tuj presi
Tie kaj nombro de spacoj kaj tiam tiaj kaj
tia nombro de hashes.
Tio dependas de la ŝablono, ke ni establis antaŭe.
Okay.
Do unu vojo de ripetanta tra kaj tipon de irante
tra starigis nombro de aĵoj estas por ciklo, ia kiel
la ripeto 10 bloko aŭ kiel ripeto kaj vi eniris en
nombro en por Scratch.
Do esence, por cxiu nivelo de ŝtuparoj, ni volas
presi la spacoj unua.
Tiam presi la nombro de hashes.
Kaj poste ni volas enmeti novan linion kaj poste ripeti ĝin
denove por la venonta bloko.
Okay.
>> Do ni rigardu por bukloj por sek al ia vidi unu vojo
ke ni iru per aro nombro, iri tra la nombro
de paŝoj en tiu ĉi duona piramido.
Do por cikloj konsistas el tri partoj.
Unue, vi havas inicialización.
Por ke esence aroj variablo.
Ĝi tuj enkadrigeblajn por tiu valoro ĉiufoje
ke por buklo komenciĝas.
Tiam vi tuj havos kondiĉon.
Via por buklo nur ekzekuti tiel longe kiel tiu
kondiĉo taksas al vera.
Kaj tiam vi havos ĝisdatigon kondiĉo.
Por ke ĝi devas vidi kun la variablo kiu vi inicializado.
Do iel de esence certigante ke oni povas rompi
de la ciklo, ke ni ne daŭre ekzekuti
ĝi ĉiam kaj eterne.
Ĉar kontraste Scratch, ni vere ne havas nur
ebenaĵo Forever buklo.
En C, la programo devas fini eventuale.
Do ni devas certigi, ke iel ni ĝin haltigi.
>> Okay.
Do ekzemplo de a por buklo kiun vi eble deziras uzi por
Mario estas ĉi.
Do vi havas entjero mi ke vi komencu je 0.
Tiel longe, kiel ĝi estas malpli ol la alteco, vi ekzekuti la korpon
de la ciklo ene tie.
Post tiu korpo de la ciklo estas ekzekutitaj, tiam vi farus
pliigi i per 1.
Tiam via programo kontroli denove - bone, bone, estas mi malpli ol
la alto?
Se jes, tiam vi daŭre.
Do jen unu ekzemplo de nulo indeksado, kie ni komencos je
nulo kaj tiam ni -
rimarkas, ke nia kondiĉo estas malpli ol la alteco.
Do diru nia alteco estas kvar, ekzemple, i
ekos je 0.
Ĝi estos 1.
Estos 2.
Ĝi estos 3.
Kaj tiam tuj ĝin ĝisdatigas, kiam la por buklo ĝisdatigoj, i estos
tiam enkadrigeblajn por 4.
Sed 4 estas ne malpli ol 4, kaj tiel poste ni estus
daŭrigi al la resto de nia ciklo.
>> Okay.
Do ke ​​tio ekde nulo.
Sed ni ankaŭ povus starti je unu, ekzemple.
Sed ĉar ni komencu en unu, oni ia devas iri pli
tempo je la fino.
Tial jen kial ni aldonos la malpli ol aŭ egala al.
Do unu el la grandaj aĵoj kiujn mi ŝatas de komputilo
programado estas, ke ekzistas nur tiom
multaj manieroj por fari tion.
Do vi povas elekti ĉu vi komencas je nulo, ĉu vi
starti je unu.
Ankaŭ, se vi volas, vi povus simple uzi
dum buklo, ekzemple.
Do vi povus -
ni efektive malferma hello.c.
Do ni havas por buklo tie.
Ĝi komenciĝas je i = 0, i <5.
Mi havas komenton ĉi tie rakontas al ni, kion ĝi faras.
Ĝi presas saluton kvinfoje uzante por buklo.
Sed ni povus ankaŭ fari tion uzante dum buklo tiel.
>> Do ni rigardu kiel ni povus fari tion.
Do, se ni tuj imiti a por ciklo, tiam ni ankaŭ volas
imitas la inicialización, la kondiĉo, kaj la ĝisdatigon.
Do la kondiĉo devus esti bela simpla ĉar en la
dum sintakso, kiam vi rigardas ĝin, ĝi diras kiam (kondiĉo).
Do ni ĵus enigo kondiĉe tie.
i <5.
Okay.
Do ni scias, ke ni volas presi adiaŭ.
Ni scias ke tio estas la korpo de niaj buklo.
Sed ni mankas la inicialización
kaj la ĝisdatigon, ĉu ne?
Ĉar ni ne povas havi cxiam buklo.
Ĝi devas finiĝi.
Do ni aldonu ian inicialización tie uzante la
sama kiun ni uzas en niaj por ciklo, int i = 0.
Okay.
Do ni starti kun int i.
Ni ripetas ĉi dum buklo dum i estas malpli ol 5.
Tial ni mankas unu afero, kiu estas la ĝisdatigo.
Do kio ŝanĝo estus ni bezonas uzi se ni estis esence
amuzante la por buklo supre?
Ni havas la inicialización i estas egala al 0.
Ni havas la kondiĉon i estas malpli ol 5.
Kaj poste jen ĝisdatigon, ĉu ne?
Do ni deziras kopii tion.
Ni volas diri bone, mi + +.
Tio estas la sama afero kiel dirante i = i + 1.
Sed ĉar ĝi estas uzata tiel ofte, stenografio por tio estas ĝuste
dirante i + +.
>> Granda.
Okay.
Ĉi tie mi efektive ne eliri el mia pomoj programo.
Do mi simple tuj klaku Control-C kaj ke tuj
botoj min el mia programo kaj alportas
min apogi por la fina stacio.
Tiel ke, ekzemple, se vi trafos cimon kie vi
forgesis ĝisdatigi vian dum buklo tia, ke ĝi estus
finiĝi, kaj vi eniros senfina ciklo, tiam vi povas
uzi Control-C rompi el tiu.
Bone.
Do ni estas en la dekstra dosierujo.
Do ni faru saluton.
Kaj tiam se ni kuras saluton, ni vidas ke la adiaŭo buklo faras
la ĝusta sama afero kiel nia por buklo faras.
Por ke estas nur aludo.
Ĉu vi estas pli komforta kun por cikloj aŭ
kun dum maŝojn, ili povas esti interŝanĝeblaj.
Do kiom unu vi volas uzi por persisti tra -
en ĉi tiu kazo -
la alto de la Mario piramido.
Kaj tial denove, ĉi tiu estas nur memorigilo, se oni komencas je nulo
por via variablo, tiam vi volas havi malsamajn
kondiĉo ol se vi komencis je unu.
Do ĉi tiu tabulo nur speco de tie vi memorigas.
Se vi volas ripeti 10 fojoj, ekzemple, tiam vi
povas aŭ komenci vian variablon je nulo.
Kaj via kondiĉo povas esti malpli ol 10.
Kaj por ke ia montras al vi la matrico de tio.
>> Okay.
Do ni iris tra Mario.
Ni diris Konsentite, bone ni bezonas por kontroli por korekta enigo,
nulo kaj 23 inkluziva.
Ni tuj trovos ian mastron, ia maniero
esprimi la n-a vico aŭ la th,-a vico.
Kaj ni tuj decidi, Konsentite, ke ni tuj presi ĉi
multaj spacoj, ĉi multaj hashes, novan linion.
Bone.
Do ni havas tion.
Do nun ni povas movi al Greedy.
Greedy estas programo kie uzanto donas kvanton de
kontanta kiu esence vi kiel la kasistino devas reveni.
Sed vi volas uzi kiel iom moneroj ebla.
Kaj tiel tio estas kie Greedy algoritmo envenas, kie
ni volas uzi la minimuma kvanto da moneroj eblas
fari ke kvanto de ŝanĝo.
>> Okay.
Do ekzemplo de ĉi tio en vian solvon povus rigardi
iu kiel ĉi tio.
Vi kuras. / Avidaj.
Vi instigis diri bone, bone, kiom ŝanĝo sxuldis?
Tiun valoron tuj esti valoro en dolaroj.
Por ke tuj estu kaleŝego.
Via programo estos tiam kalkuli la minimuman kvanton
da moneroj postulis fari, en ĉi tiu kazo, $ 0.32.
Kaj tial la minimuma nombro estas kvar.
Do antaŭ ol ni kalkuli, kion fari, ni ia promeno
tra la procezo kiu vi povus iri.
Do se la enigo estas 32, tiam esence mi tuj uzos
la malplej kvanto de moneroj se mi uzas tiom da
grandaj moneroj ebla.
Ĝuste?
Do ĝi estas multe pli facile uzi unu kvarono kiel
kontraste al kvin Nickels.
Do diru, vi devas reveni $ 0.32.
Nu, mi povas uzi kvarono en tio?
Yeah, vi povas.
Kaj tiam vi estus malkreskis al $ 0,07.
Ni vidu se mi povas uzi alian kvara pagi vin.
Nu, ne.
Mi ne povas persvadi kvarono en tio.
Do mi iros por movi al la sekvanta granda monero.
Ĉu mi povas uzi groŝon?
$ 0.07, ne vi ne povas uzi groŝon pagi $ 0,07.
Do vi diras ne.
Movu al la sekva, kiu estas nikelo.
Ĉu vi povas uzi nikelo?
Jes.
Sep estas pli granda ol $ 0.05, do ni povas uzi nikelo.
Kaj tiam ni havas du cendojn lasis super.
Ĉu ni povas uzi unu denaro?
Jes ni povas.
Ĉu ni povas uzi alian centono?
Jes.
Ĉu ni povas uzi alian centono?
Neniu ĉar nun ni havas sukcese
pagis la uzanto dorso.
Kaj por ke tutaj kvar moneroj uzataj.
>> Do pensas tiu procezo, ni ĉiun
tempo decidi bone,
kio estas la plej granda monero, ke ni povas uzi?
Iam ni uzas tiun, ni ia observu mensan noton de kiom
pli da mono ni devas reveni al la uzanto tiel kiel kiom
moneroj ni estas uzanta.
Okay.
Do sed denove, la unua paŝo - same kiel Mario - estas instigas
la uzanto por mona sumo.
Kaj tiel ĉi tiu kvanto tuj estos -
ĝi tuj devos dekuma valoro ĉar nin tuj
demandi ilin por dolaroj.
Por ke datumtipo estas ne tuj estos entjero.
Sed ĝi estas tuj estos -
yeah, kaleŝego.
Sed ĝuste kiel pomoj, flosas povas esti pozitiva aŭ negativa.
Tial, kiam vi kontrolu por valoroj, vi tuj volas
por certigi ke via kaleŝego -
la eniro de la uzanto - estas nenegativaj.
Okay.
Ni povis trakti flosas en nia tuta programo, reprezenti
kazernoj de 0,25, dimes per 0,1, kaj tiel plu.
Sed mi trovas ĝin multe pli facile trakti en nur pura cendoj.
Ankaŭ -
kaj ni parolos pri tio iom poste -
en C, flosanta punktoj havas ion nomatan imprecision.
Do kiam vi eniros en 0.12, ekzemple, la komputilo
vere tendencas kiel kiel 0.1111119 aŭ
io simila.
>> Do ĝi estas multe pli facile konverti al cendoj.
Nu do kiel ni konverti dolaro valoro al cendoj?
Parolanto 5: Times ĝin 100?
ZAMYLA Chan: Yeah.
Yeah.
Do ni volus fojoj per 100.
Sed unu malfacila afero pri flosantaj punktoj estas ke
Estas iuj imprecision.
Do ni nur rigardas ekzemplo de tio.
Do mi tuj malfermos imprecision.c.
Okay.
Tio ĉi estas tre simpla programo.
Ĝi petas kaleŝego, kaj presas ĝin.
Unu belan bekon en terminalo estas vi povas simple tajpi klara, kaj
tiam vi havas klaran ekrano.
Kaj tial vi ne bezonas rigardi al ajna antaŭa eligo aŭ ajna
eraroj aŭ cimo raportoj, io simila.
Okay.
Do ni faru imprecision.
Ni kuras ĝi.
Do mi haven't -
en mia kodo, mi ne presi ajna prompto aŭ io kiel tio.
Do nur havas palpebrumante kursoro.
Do ĝi estas nur atendantaj por mi enigo kaleŝego.
Do let's -
hazarda kaleŝego.
Kaj vi vidos ke ĝi presas ĝin sed havas iomete
nombroj, ke ni certe ne inkluzivas.
Do ni volas certigi, ke tiu ne
okazi en nia programo.
>> Tial kion ni volas fari estas certigi ke ni efektive
speco de rondigita al la taŭga valoro.
Ĝuste?
Kaj tiel bonŝance ni havas funkcion nomata ronda inkludis
en la Appliance.
Ĝi estas en la math biblioteko.
Se vi volas scii kiel uzi ronda, tiam vi vere uzas
la manlibro.
Vi povas alklaki viro ĉirkaŭvojo.
Tiam tie alportas supren -
povus esti iom malfacile deĉifri, sed fine
vi ricevos la hang de ĝi.
Ĉio montras al vi, kion la funkcio faras kaj tiam iuj
eblaj uzoj de tiu.
Do kiam vi eventuale ricevas taŭgan, valida enigo de la
uzanto, tiam vi volas igi ĝin al cendoj.
Certiĝu, ke vi ĉirkaŭis la valoro por ke vi eviti tiun
glitpunktaj imprecision.
>> Okay.
Do ni instigis la uzanto por mona sumo.
Nun kion ni volas fari estas esence kontroli, ĉu ne?
Konsentite, tiel mi povas uzi la plej granda monero ebla?
Se vi povas, tiam vi uzas ĝin.
Vi konservi trako de kiom da moneroj vi uzis ĝis nun kaj
ankaŭ la dekadenca kvanto.
Ĝuste?
Kaj tiam vi tuj kontroli.
Iam vi havas ia elĉerpis la kazernoj, vi volas iri
al la sekvanta ebla.
>> Do, kian strukturon aŭ kian buklo forto ni
volas uzi por senĉese kontroli ĉu ni povas ankoraŭ uzi
kvarono, ekzemple?
Parolanto 6: Dum valoro pli granda ol?
ZAMYLA Chan: Yeah, perfektigi.
Ekzakte.
Do dum valoro estas pli granda ol.
Do dum la valoro kiun ni havas redoni ankoraŭ
pli granda ol kvarono, dum ni povas ankoraŭ uzi kvarono,
uzi kazernoj.
Konservu spuri de tio.
Kaj tiam daŭre iras.
Perfekta.
Okay.
Ho, jen mi ĵus komprenis nur iuj konsiloj pri kiel printi
el valoroj.
Do en via printf funkcio, ni kutime estis ĵus
kontraktanta kun kordoj.
Sed kiam vi volas presi an int aŭ simple ajna tipo de
cifero, vi devas ia skribi ian lokon posedanto.
Do ke ​​tio reprezentas la procentojn,% d por entjeroj.
Vi skribas ke, tiam poste vi fakte -
post komo -
meti en kio valoro vere iras tien.
Ĝuste.
>> Okay.
Do ni decidis ke ni volas kontroli ĉu -
unu maniero fari ĉi estus senĉese kontroli ĉu
ni povas ankoraŭ uzi kvaraj, kaj poste uzi la kazernoj, teni
spuri, kaj poste movi al la venonta plej granda valoro.
Nun alispeca neta ke vi povus fari tion estas
uzante la operatoro module.
Do ni jam havas la pli, minus, multipliki, kaj dividi
disponebla al ni.
Sed la module operatoro estas speco de neta.
Kion faras estas ĝi reale revenas al vi la reston de
dividanta du nombroj.
Do, se vi memoras en longa divido kiam vi volus, diru,
do 74 dividite per 3, vi skribus gxin, porti plus
resti, kaj tiam fine la nombro je la fundo estas
la restaĵo.
Nu, kion module faras vere nur donas al vi tion.
Do 74 module 3 donus vi 2.
Simile, 10 module 2 donas vin 0 ĉar estas neniaj
resto kiam vi dividas 10 por 2.
6 module 5, bone 5 iras en 6 unu foje kaj poste
ĝi 1 forlasis super.
Tiam se vi havas 7 module 9, bone 9 estas pli granda ol 7.
Do ĝi ne povas iri ajna alia foje.
Do logike ke la reveno valoro estas 7.
Do, se vi pensas pri module, kiel ĝi donas al vi la reston
post vi dividas ion, vi povas ia vidi kiel vi
eble povus uzi ĝin en Greedy, ĉu ne?
Do se vi speco de kombini la module eble kun la divido
operatoro, io simila, tiam vi eble havas cool
speco de Mathy maniero alproksimigi la problemo aro.
>> Do nun ni scias ke estas paro de malsamaj
manieroj kiuj ni povus fari tion - estas definitive multan
malsamaj manieroj eĉ skribi la dum cikloj.
Do mi skribis kelkajn _pseudocode_ tie.
Ĝi povus ne esti identa al la speco de skeleto de via
kodo, kiun vi skribis.
Sed esence, la procezo kaj la pensmaniero estas
kiel ni diskutis.
Do unue, la unua linio diras akiri certan
en dolaroj.
Kaj tiam implicita tie estas konverti ĝin al cendoj.
Tiam dum kazernoj povas uzi, ni volas
pliigi la grafo.
Kaj poste ni volas malpliigi la kvanton, la valoro kiu
ni reveni reen.
Kiel vi vidas tie, ne estas sufiĉe C. Sed mi havas ankaŭ
dentado aferoj, mi metis mian kondiĉoj ene de
krampoj.
>> Tial tia gets me komencis.
Kaj tiam poste, mi povas nur serĉi la sintakso.
Ofte la plej malfacila parto vere pri problemo estas
komprenas kion ekzakte vi bezonas fari.
Do iam vi skribas ke sube, tiam ĝi estas multe pli facile tiam
traduki al _pseudocode_.
Kaj tiam el _pseudocode_, sintakso venas bela facila.
Do ni vidas dum kazernoj, povas esti uzata, pliigi grafo,
malpliigi la kvanton.
Dum dimes povas uzi, tiam vi stiri ĝin tiel plu kaj tiel
reen, ĝis vi elĉerpita ĉiuj viaj moneroj.
Vi presi la nombro de moneroj uzataj, kiuj estos la
minimuma kvanto por ke la uzanto inputted valoro.
Kaj tie vi havas vian Greedy algoritmo.
Kaj tiam kiam vi finos tion, vi ankaux finis pset 0.
>> Ĉu iu havas demandojn pri io?
Bone.
Nu, mi batos ĉirkaŭrigardis por iom post se vi havas
demandojn.
Tio estis walkthrough 1.
Dankon pro veni.