[MUSIC nagpe-play] David MALAN: Hello, lahat. Ito ang supersection CS50. Nakatalagang Seksyon ay hindi simulan para sa isa pang linggo. At kaya ngayon, ako dito with-- MARIA: Maria. David MALAN: --to talaga tingnan ang problema itakda ang isa, ang kurso na iyon unang linggo ng materyal, maging pamilyar ka sa CS50 IDE, isang bit ng Linux, sa operating system na tumatakbo sa IDE, pati na rin ang Tingnan natin ang ilan sa mga transition mula sa simula sa C nangungunang hanggang sa hanay ng problema ng isa. Kaya nang walang karagdagang linggal, sa hanay ng problema sa isa, ikaw ay pagpunta sa maging ipinakilala sa CS50 IDE, na kung saan ay ang web-based programming environment na ginagamit namin upang sumulat ng mga programa. Ito ay idinisenyo upang tumingin napaka nakapagpapaalaala ng isang tipikal na computer sistema ng pagpapatakbo ng isang operating sistema na tinatawag na Linux. Ngunit ito ay sa mga tinatawag na ulap, na nangangahulugan na lahat ng tao sa klase ay maaaring aktwal na magkaroon ng kanyang sariling account at gamitin ito, pati na rin. Kaya ang karamihan ng sa iyo marahil ay hindi kailanman ginamit isang Linux na kapaligiran bago o di kaya kahit na isang command line na kapaligiran. At isang command line kapaligiran ay naiiba. Lahat ng ito ay sa texto. Lahat ng ito ay keyboard command. At ito ay walang mousing, walang mga icon, walang dialogue bintana, walang mga menu. Ito ay panay text. Kaya sa una, ito uri ng pakiramdam ng tulad ng isang hakbang paurong sa mga tuntunin ng kabutihang-asal. Ngunit ito ay nagtatapos up pagiging isang pulutong mas malakas na, tiyak, para sa isang computer scientist, sa huli. Kaya sabihin tumagal ng isang pagtingin. Narito ako sa CS50.io, sa pamamagitan ng kung saan maaari kang mag-log sa CS50 IDE. At tulad ng sa simula, may tatlong pangunahing mga lugar sa screen na ito. Kaya sa kaliwang gilid, kami ay may kung ano ang magiging file browser. At may folder na ito sa top, na kung saan ay sa ngayon walang laman dahil ako got alisan ng lahat ng aking mga file bago supersection. At na kung saan ipapakita namin i-save ang C file na namin magsulat. Sa kanang tuktok, mayroon kaming isang lugar kung saan lahat ng aming mga code ay pagpunta upang makakuha ng nakasulat. At sa katunayan, kung nag-click ako na ito kasama ang, ito ay pagpunta sa hayaan mo akong pumili New File. At dito ko simulan ang pagsusulat ng C code o, talaga, ang anumang bilang ng iba pang mga wika. At pagkatapos ay sa ilalim kung saan ito sabi jharvard @ ide50-- at kalooban sa iyo sabihin ng isang bagay ng isang maliit na different-- kung ano ang tinatawag na ito? Terminal window. Oo. Kaya ang terminal na window ay ang tinatawag na command line interface sa pamamagitan ng kung saan maaari kang makipag-ugnayan may pinagbabatayan operating system. At sa ngayon, kami ay pagpunta sa gumawa ng masyadong maliit na paggamit ng this-- lamang na sumulat ng libro, upang tumingin sa mensahe ng error na nakikita natin, at upang patakbuhin ang aming programa. Ngunit sa huli, kami ay pagpunta upang gawin ito sa marami pang iba, pati na rin. At maaari ka ring i-install ang software at mamahala ng iyong workspace sa loob ng CS50 IDE, pati na rin. Ngunit higit pa sa na sa ibang panahon. Kaya sabihin sige at isulat isang napaka-simpleng programa lamang pumunta sa pamamagitan ng isang mainit-init-up ng hello.c, na kung saan ay marahil ang pinakasimpleng programa maaari naming magsulat. Na iyong binuksan ko ang isang bagong tab. Pupunta ako sa sige at sabihin ng pamantayang io.h. Pagkatapos int pangunahing (walang bisa). At pagkatapos ay printf ("hello, world" backslash n, malapit quote, malapit panaklong, at tuldok-kuwit. Lahat tama. Paunawa Kaya ngayon ang aking window ay walang pamagat. Kaya ako masyadong mabilis ang pagpunta upang pumunta up sa File, I-save. At ito ay mahalaga na ang Ako tawag na ito ay hindi "hello." Kaya isang napaka-pangkaraniwang pagkakamali, lalo na sa mga hanay ng problema sa isa, ay ang tawag sinasadyang lamang ang iyong "tubig" o "sakim" o "Mario" program o "credit" o mga katulad. Ngunit ang tunay na nais na gumawa ng Siguraduhin na mayroon kang mga extension ng file dahil ito ay ang tanging paraan na ang ang tagatala at din ang code editor alam na ikaw ay aktwal na pagsusulat C code. Kaya hayaan mo akong magpatuloy at i-click ang I-save. At ngayon, masyadong, kung ano ang CS50 IDE ginawa para sa atin ay ito ay din ng syntax-highlight ang lahat ng bagay. Kaya ito ay ginawa ang lahat ng bagay napaka makulay. At ang buong layunin ng na ito ay hindi na umaandar. Ito ay lamang upang gumuhit ang aking mata sa conceptually iba't ibang mga piraso ng programang ito. Kaya sabihin sige at makatipon ito. At maaari kong sumulat ng libro na ito sa loob ng ilang mga paraan. At sa isang linggo, ang old-school na paraan na aming ginawa ito ay literal sa utos line-- "clang hello.c." At pagkatapos ay ako pindutin ang Enter. At tila walang mangyari sa terminal na window. Ngunit kung ano ang ginawa ang pagbabago sa mga IDE? Saan, muli, ay nangangahulugan lamang IDE Integrated Development Environment. Ito ay isang magarbong paraan ng sinasabi ito integrated development kapaligiran para sa pagbuo ng software. Kaya kung ano ang magbabago sa UI? Ano paunawa ninyo na iba, Maria? MARIA: Napansin ko ng isang bagay sa ilalim ng IDE50 folder up dito. David MALAN: Oo. Kaya hanggang dito, hindi lamang ang mayroon tayo "hello.c." Mayroon din kaming "a.out," na siyang uri ng isang pipi na pangalan para sa isang programa. Ngunit sa katunayan, ito ay ang default na pangalan para sa isang program kapag compile mo lang ang iyong code at huwag sabihin sa mga compiler kung ano ang file na output. Kaya kung nais kong patakbuhin ito, ako kailangan na sabihin ang compiler-- o sa halip, kailangan ko na sabihin ang workspace na ako nais na patakbuhin ang program na tinatawag na "a.out." Enter. At may "hello, mundo. "ngayon ang" ./ ". ay talagang mahalaga. Kahit na ang aming normal lamang isulat ang mga pangalan ng mga utos, kapag ito ay isang program na sa iyo nakasulat, mo nais na sabihin ang "./" dahil na tahasang nagsasabi sa Linux na nais mong magpatakbo ng isang programa na tinatawag na "a.out" na ito sa, kung saan dot nangangahulugan direktoryong ito na kasalukuyang ako in, na ang mangyayari sa tinatawag na workspace, "a.out. Dahil kung ang sinabi ko lang "a.out," Ipasok, Pupunta ako upang makakuha ng "a.out command hindi natagpuan "dahil ang computer-- dahil imbento ko "a.out;" hindi ito nanggaling sa mga computer-- ay hindi alam kung saan upang tumingin para sa mga ito, kahit na ito ay karapatan sa ilalim ng aking ilong, kaya na magsalita. SIGE. Kaya maaari naming baguhin ito sa maging "clang -o kumusta hello.c." At kung ako pindutin ang Enter, ano ang programa ito po ba ay output para sa akin? Ano ang pangalan ng file? Oo, sa likod. Tama iyan. "Kamusta." Kaya "hello" ay magiging ang pangalan ng programa dahil kami ay ginagamit ng isang tinatawag na argument ng linya ng command, na lamang isang paraan ng pagbabago ng pag-uugali ng ang compiler sa aktwal na output isang tiyak na pangalan ng file. At sa katunayan, kung ako mag-zoom out at tumingin dito, ngayon ay mayroon akong hindi lamang "a.out" at "hello.c" ngunit din "hello," pati na rin. Kaya ngayon maaari kong gawin "./hello," Enter. At may "hello, world." Ngunit lastly-- at ito ay ngayon ay ang convention ginagamit namin ang buong semestre, typically-- ay maaari mo ring sabihin lamang ang "gumawa ng halo." At sa katunayan, ito ay nagsasabi na ito ay up to date dahil ito ay umiiral na. Hayaan akong sige at mag-alis, na may ang rm utos, parehong "a.out" - at sabihin ang "alisin regular file a.out?" Ito ay nangangahulugan lamang, ikaw ay bang gusto mong tanggalin ito? Pupunta ako sa oo. At pagkatapos ay ako pagpunta sa alisin "hello" ngunit hindi "hello.c." Pupunta ako sa sabihin ang "yes" tahasan, ngunit "y" ay sapat na, pati na rin. At ngayon mapansin kung ako type ls-- saan, pagpapabalik, nangangahulugan list-- inililista nito ang lahat ng mga file sa aking folder. At sa katunayan, kung ako mag-zoom out at tumingin sa kaliwang tuktok, Kinukumpirma nito na kung ano ang sa folder na ito, kahit na kahit na ito ay may label na bilang IDE50 up dito at hindi workspace, ito ay "hello.c." lamang Kaya ngayon down dito, kung ako huwag "gumawa ng hello," Ipasok, ngayon ay nakikita ko ng isang mas matagal na utos kundi isang mas sopistikadong utos na pupuntahan upang maging kapaki-pakinabang sa mga darating na linggo. At ngayon maaari kong sabihin "./hello." Kaya sabihin kumuha ng isang mabilis na tour utos ng ilang mga iba pang mga Linux. Pagkatapos ay kung bakit hindi namin kumuha ng isang hakbang bumalik at talagang tumingin sa C pa sa pangkalahatan, paglipat mula sa scratch sa C, at pagkatapos ay tapusin na may hitsura sa unang problema itakda sa C. Lahat ng karapatan. Kaya ako pagpunta sa sige lang at malinis ang aking workspace sa Control-L lang upang panatilihin ang malinis at maayos ang screen. Ngunit na ay walang functional epekto sa ibang paraan. Pagpapabalik na nasaksihan namin ng ilang mga utos na ngayon. Kaya nakita namin na ang kumalatong, na sa pangkalahatan ay sa iyo hindi magkakaroon ng sa mano-mano-execute anymore. Sa halip Gagamitin namin make. Subalit nakita din namin ls, na nagpapakita ng isang listahan ng mga file sa aking directory. At ngayon there-- ang dahilan kung bakit mayroong dalawang file ngayon, "hello" at "hello.c." Bakit mayroong isang star o isang asterisk pagkatapos ng "hello"? Ano ang ginawa na maging tanda, batay sa kung ano ang nakita natin sa isang linggo? Ano sa palagay mo? Ano ang ginagawa ng star magpakilala? MARIA: For-- programa ng "hello"? David MALAN: "Hello *". Oo. Oh, oo? Oh, executable. Tama iyan. Kaya na nangangahulugan na "hello" ay executable. Kaya sa katunayan, iyon ang dahilan kung bakit Ang maaari kong gawin "./hello." Lahat tama. Kaya ano pa ang maaari kong gawin dito? Well, ito ay lumiliko out na ko ring lumikha ng mga direktoryo. Kaya hayaan mo akong magpatuloy at lumikha, halimbawa, ang isang "pset1" direktoryo. At ang mga detalye ng problema set ay magkakaroon ng sa iyo nang eksakto na ito, kaya hindi mo na kailangang tandaan ang araw na ito. Ngunit "mkdir pset1" Mukhang na magkaroon ng walang epekto. Ngunit muli, walang mensahe ng error ay karaniwang isang magandang bagay. Kaya kung type ko "ls" now-- ah, ngayon Mayroon akong isang executable file na tinatawag na "hello," isang C file na tinatawag na "hello.c." At pagkatapos ay ang trailing slash, para sa magsalita, ay nangangahulugan na ito ay isang directory. Kaya sa katunayan, ngayon ay nais ko upang buksan ito. At hindi ko double click sa mga ito tulad ng sa isang GUI, isang graphical na kapaligiran. Sa halip kong sabihin "cd pset1." Enter. Walang mga kagiliw-giliw parang may nangyari maliban sa aking maliit na prompt here-- ito ay Linux ng paraan ng pagpapaalala sa akin kung saan ako, kaya kung ano ang folder ay bukas. Lang ang nagsasabi sa akin tahasan bilang laban sa graphically. At kung ako type "ls," bakit ako nakakakita ng iba pang prompt agad, sa tingin ninyo, kapag ang listahan ko ang mga nilalaman ng pset1? MARIA: Ikaw ay malamang na hindi magkaroon ng anumang bagay sa doon. David MALAN: Oo. Kaya pagkatapos kami ay may hindi malinaw naman nilikha ng anumang bagay sa doon dahil ako lamang nilikha sa direktoryo. Ngayon, kung Nais kong lumikha ng isang file para sa Halimbawa, maaari ba akong lumikha ng isang bagong file. At pagkatapos ay ako ay pumunta sa I-save at i-save ito bilang, tulad ng, "mario.c" kung gumagawa ka ng ang standard na edisyon ng pset isa. At pagkatapos, tulad ng anumang Mac o PC, lamang piliin ang folder na "pset1, I-save. At ngayon, ang file ay walang laman. Ngunit sabihin mag-zoom in muli para sa isang ikalawang ipaalam. Ni gawin ls dito. Ngayon tingnan natin ang "mario.c". Kaya may ilang mga iba pang mga utos na ay nagkakahalaga ng pagsunod sa isip ng higit sa time-- malinaw, o Control-L ay kung ano na ko naging pagpindot; mkdir nakakita kami; rm nasaksihan namin, pati na rin, na kung saan ay para sa pag-alis o pagtanggal ng isang file. Mag-ingat sa maaari mong also-- at kung titingnan mo sa online na tutorial, makikita mo ang rm-RF ay isang karaniwang paraan ng pagsasabi tanggalin ang isang folder na may mga bagay-bagay sa loob nito. Basta super, sobrang maingat. RF ay nangangahulugan recursively tanggalin ang anumang mga ito ay sinusubukan mong tanggalin ang at pwersahang tanggalin ito. Kaya recursive na paraan kung ito ay isang folder na may isang folder na may isang folder na may isang folder, tanggalin ang lahat ng mga ito. At pwersahang nangangahulugan hindi kahit hilingin sa akin ng oo o hindi, ako ba? Kaya ito ay isang super mapanganib na paraan ng mabilis na pagtanggal ng maraming mga bagay-bagay. Ngunit beware-- masyadong madalas ay isang matapang ang mag-aaral sinasadyang tanggalin, sabihin nating, pset isa, halimbawa. MARIA: At kung sila lamang gawin r, sila ay pagpunta upang hilingin sa kanila tungkol sa bawat solong file. David MALAN: Alin ang Katamtamang nakakainis. MARIA: Oo. David MALAN: Kaya na ang dahilan kung bakit kaya marami sa amin, sa sarili kasama, Ako sa ugali ng mga gamit-RF. Ngunit ito ay mapanganib. Kaya mag-ingat bumibili. At pagkatapos mv ay uri ng kawili-wili pinangalanan. Kaya ito ay ang utos na ilipat, na pakiramdam ng isang maliit na kakaiba dahil maaari mong talagang gamitin ito upang ilipat ang mga file mula sa isang lugar patungo sa isa pa. Halimbawa, ipagpalagay na ako messed up. Ipagpalagay na nilikha ko isang bagong file para sa pset. At save ito bilang "greedy.c." Ngunit ipagpalagay ko sinasadyang i-save ito sa IDE50-- kaya sa aking mismo workspace at hindi sa pset1. Maaari mong makita ang bilang marami sa kaliwang tuktok. May "greedy.c." At may ilang mga solusyon. Kaya isa, maaari ko bang gamitin ang super paraan user-friendly na lamang ng pag-drag at pag-drop sa mga ito. At iyon ay aktwal na ayusin ang problemang ito. Ngunit ngayon, ang aming sinusubukan na tingnan ang mga ang mas arcane ngunit malakas na paraan ng paggawa nito. Kaya hayaan mo akong kumuha ng "ls" sa pset1. At lamang ko makita "mario.c." Hayaan akong magpatuloy at gawin ang "cd ..". Kaya CD muli ay palitan ang directory. ".." Ay nangangahulugan na ano, kahit na? Huling oras na sinabi ko "cd pset1 "upang pumunta sa pset1. Kaya kapag sinabi ko "cd ..", kung ano ang aking ginagawa? Paurong. Oo. Kaya ito ay pagpunta sa mga tinatawag na magulang. Pumunta sa isang antas up, tulad ng paglabas mula sa isang folder. Kaya ang Enter. At sa katunayan, tumingin kung ano ang ginawa ito. Sa halip ay inilipat ito sa akin sa lamang workspace ng sa pset1, na nasa workspace. At ngayon, kung nagta-type ako "ls", may isang buong grupo ng mga bagay-bagay. Sa may "greedy.c". Kaya ngayon hayaan mo akong gamitin mv sa literal ilipat "greedy.c" sa pset1. At kaya ng isang pulutong ng Linux command gumana nang eksakto tulad nito. Nagsasagawa sila ng walang argumento o kumuha sila ng isa argument o kumuha sila ng dalawang command line argumento at iba pa. At sa kasong ito, ito ay literal ginagawa kung ano sinasabi nito, kahit succinctly-- ilipat greedy.c sa pset1. Enter. Walang tila sa mangyayari. Ngunit kung gagawin ko muli ng isang ls, sakim ay wala na. At kung gagawin ko "cd pset1", Ipasok, at pagkatapos ay ls muli, na ngayon ay nasa tamang lugar. Bilang isang tabi, kung para sa ilang reason-- lalo kung mayroon kang mga paulit-ulit pagkakakonekta ng network o ikaw ay paglalakad sa paligid campus sa iyong laptop talukap ng mata sarado at pagkatapos ay buksan ito muli at ang iyong workspace tila medyo out of sync, hindi sang-ayon. I-reload lang ang iyong browser window, at ito ay dapat na resync upang ang kaliwang mukhang eksakto file browser tulad ng mga terminal na window. Hindi mag-alala. Kapag may pagdududa, i-reload ang pahina, kaya hangga't iyong na-save ang mga file na. SIGE. Kaya mv ay maaari ring gamitin upang palitan ang pangalan ng mga file. At tumagal ng isang pagtingin sa ipaalam ito huling utos dito. Kaya suppose-- at ito ay super karaniwan, masyadong, sa maagang bahagi. Ang ilang mga mag-aaral lumikha ng paminsan-minsan ang isang file tinatawag, ni say-- ano ang isa pa hayaan? Gusto "WATER.C." Kaya kukunin ko na lang sumigaw, para walang dahilan, sa lahat ng takip. Ngunit ito ay hindi ang tamang pangalan para sa file kung lamang dahil naka-set ang aming mga problema specification ay hindi magsasabi sa iyo upang i-save ang file bilang ang lahat ng caps "WATER.C." Sa halip, inaasahan namin "water.c" sa lowercase. At, sa katunayan, ito ay may problema dahil check50, isang programa na iyong pupuntahan makipagtagpo sa problema itakda ang isa na awtomatikong sumusubok ang kawastuhan ng iyong code ay pagpunta sa sumigaw sa iyo kung hindi ito maaari mahanap ang "water.c" sa lahat ng maliit na. Kaya kailangan ko upang ayusin ito. Kaya maraming iba't ibang paraan upang gawin ito, ang unang na kung saan ay magiging sa Control-click o i-right-click ang pangalan ng file at baguhin lamang Rename. Ganap fine upang gawin iyon. Subalit muli, ngayon, sabihin gawin ito ng isang maliit na may interes. Gamitin natin mv upang baguhin Ipaalam "WATER.C" sa "water.c." Kaya maaari mo ring gamitin ang unang argumento upang palitan ang pangalan nito sa ikalawang argument kung ang pangalawang argumento ay hindi, sa katunayan, ang isang folder o isang pangalan ng direktoryo. Lahat tama. At sa wakas, ang isang maliit na trick-- kaya ako sa aking direktoryo workspace sa sandaling ito. Kung gusto ko upang makakuha ng sa pset isa, Ako tiyak na nagta-type "cd pset1." Ngunit ito ay kaya nakakapagod mag-type "pset1" o mas mahabang pangalan ng file o mga pangalan ng direktoryo pa rin. Kaya napakadalas sa Linux, kung ano maaari mong gawin ay simulan ang pag-type ng "pse" at makakuha lamang nababato, pindutin ang Tab, at hayaan ang computer tayahin ito para sa iyo. Super helpful upang makakuha ng sa na ugali. Ang tanging catch ay kung mayroon kang maramihang mga file o folder na nagsisimula may titik "p" o "PS," na maaaring mayroon ka mag-type ng ilang mga mas bago ang alam computer kung ano ang gagawin. MARIA: Gusto naming shortcut. David MALAN: kalooban Ito i-save mo kaya maraming oras. At din, tulad ng sinabi namin sa panayam, mo maaaring mag-scroll up sa kasaysayan, pataas at pababa, upang maghanap ng mga kamakailan-lamang na pinaandar utos, pati na rin. Lahat tama. Kaya ngayon, ni i-alaman pabalik ipaalam sa isang simpleng programa, hello mundo. Kaya inipon namin ang mga ito nang eksakto. At ngayon kung bakit hindi natin isang pagtingin sa mga uri ng data at pagkatapos ay lumipat mula sa ilang kaukulang bloke scratch sa C. MARIA: Kahanga-hanga. Kaya ngayon na ikaw ay nagsimula pagsulat ng mga programa sa C, kami ay pagpunta sa simulan ang pakikipag tungkol sa mga uri at mga variable data. Kaya ang ilang mga uri ng data na iyong ay nais na malaman simula ngayon ay ang mga na naka-highlight sa asul. Kaya mayroon kaming int una, na ang ibig sabihin integer. At na humahawak integers, tulad ng sa iyo maaaring mayroon guessed-- kaya 1, 2, 3, at ang anumang iba pang mga integers na maaari mong isipin. David MALAN: At negatibong din. MARIA: At din negatibong mga bago, yep. And 0. Pagkatapos kami ay may sa kamay, na kung saan ay lumulutang point numero. Kaya na ang lahat ng mga tunay na mga numero na mayroon ang mga decimal point. So 5.0, 5.2, at kahit pa digit pagkatapos ng decimal point, pati na rin, at din negatibong iyan. Pagkatapos kami ay may char kung saan ay isang character. Kaya sa tingin ko usapan natin ang tungkol ito sa lecture ngayon. Ngunit kami ay may mga titik, para example-- A, B, C-- na maaaring ma-imbak bilang isang pansamantalang trabaho. Ngunit pagkatapos ay mayroon kami ng maraming higit pang mga simbolo na maaaring ma-imbak bilang isang pansamantalang trabaho. At ang mga ito ay naka-imbak na ASCII. At pagkatapos kami ay may bool, na kung saan ay Booleans. At yaong suriin sa True o False o 1 at 0, ayon sa pagkakabanggit. David MALAN: At pagpapabalik na bool ay mula sa CS50 library. Kaya ito ay hindi nakapaloob sa C, ngunit ito ay sobrang kapaki-pakinabang na magkaroon ng mga kuru-kuro ng mga tunay at huwad. At kahit na sa iyo Maaaring think-- masaya katotohanan. Technically pangangailangan kung gaano karaming mga bits A bool, tunay, na kumakatawan sa True laban False? Gaano karaming mga bits sa tingin ninyo ikaw ay kailangan, maximally? Oo, isa lang. Kaya ito ay lumiliko out na ang C hindi maaaring magbigay ka lamang ng isang bit. Ang pinakamaliit na yunit ng pagsukat maaari kang makakuha ay walong. Kaya ito ay isang maliit na bulagsak nila ikaw ay gamit ang isang buong byte, o walong bits, upang kumatawan sa true o false. Ngunit ito lamang ang paraan na ito ay ipinatupad sa C sa pamamagitan ng CS50 library. MARIA: At pagkatapos ay ang mga na hindi namin hindi pagpunta sa makipag-usap tungkol sa bilang ng husto karapatan now-- double, iyan ay para sa mas malaking kamay. Long mahaba at maikling ay din para sa integer. David MALAN: Sa katunayan. Sa Hacker edisyon ng pset isa, talaga naming gamitin ang haba haba. Ngunit para sa mga standard edition, hindi ito dapat na kinakailangan. MARIA: Cool. SIGE. Kaya operators-- dapat ay malamang na pamilyar sa karamihan ng mga ito. Addition, +; pagbabawas, -. Para sa pagpaparami, kami ay ang *. Kaya hindi ang X na namin ay karaniwang gamitin. Division, mayroon kaming ang backslash. At modulo ay ang aming huling operator na kami ay pagpunta sa makipag-usap tungkol sa ngayon. Ito ay isang operator na nagbibigay-daan sa amin upang kunin ang mga natitira sa isang dibisyon. Kaya kung kami ay may 4% 2, 4 na hinati sa pamamagitan ng 2 ay 2 na may natitira sa 0. Kaya 4% 2 ay 0. 4% 3 ay 1. 4% 5 ay 4, tulad ng maaari mong nahulaan. At tandaan na kapag gumagamit ng lahat ng mga operator na gamitin ang mga patakaran PEMDAS. David MALAN: Kaya upang maging malinaw, kung ikaw gawin 4% 2, kung bakit ay na 0, eksakto? MARIA: Dahil 4 na hinati sa 2 ay 2 na may isang natitira sa 0. Kaya modulo ay nagbibigay sa amin na naiwan na laban sa mga resulta ng paghahati. David MALAN: At sa katunayan, ano ang makikita namin ito nakatulong sa iyo para sa ay na sa ilang mga problema iyan ay hindi kinakailangan ng isa, kung nais mong magkaroon ng mga epekto ng paghihigpit sa iyong sarili sa isang hanay ng mga numero tulad ng 0 hanggang ang isang bagay, maaari mong gamitin ang modulo sa wrapper sa paligid mas maaga kaysa tulad ng 2 bilyong o ang halaga 4 na bilyon na Na-usapan natin ang tungkol sa panayam. MARIA: Oo. At kahit na sa "sakim" baka namin. David MALAN: Oo, sa hanay ng problema sa isa, pati na rin. MARIA: Oo, nice. David MALAN: Magandang hint. MARIA: Sorry. Boolean expressions-- kaya para sa Boolean operator, kami ay pagpunta sa makipag-usap tungkol sa lahat ng sa mga ito na makikita mo dito. Kaya ngayon, kami ay may dalawang pantay na mga palatandaan na nakalista para sa katumbas. Kaya ang mga ay para sa paghahambing. Sa ngayon, na lamang namin nakita isa ay katumbas sign. Na kapag magtalaga namin isang halaga sa isang variable. Kaya kung nasaksihan namin int n = 5, pagkatapos nagtalaga kami ng 5 sa mga variable n. Ngunit kung gusto naming gamitin == para paghahambing, maaari naming suriin kung n == 5. At kung n == 5, pagkatapos na ang totoo. Kaya Boolean operator daan sa amin, talaga, upang suriin Boolean expression upang true o false. Kaya hindi equals-- na namin ang mga exclamation mark at equals. Kaya maaari naming ring suriin kung n ay hindi katumbas 5-- kaya n! = 5. Mas mababa kaysa sa, mas mababa sa o katumbas ng, mas malaki kaysa sa, mas malaki kaysa sa o katumbas ng, at pagkatapos ay mayroon kaming ang mga lohikal na AT at ang mga lohikal na OR. At ang mga daan sa amin upang suriin maramihang Boolean expression magkasama sa talaga magtagpo bilang isang buong Boolean expression. Kaya kung nais namin upang mahanap ang isang numero, sabihin, iyon ay mas malaki kaysa 5 ngunit mas mababa sa 15 sa parehong oras, gusto naming gamitin ang mga lohikal AND operator upang makita kung n ay mas malaki kaysa 5 && n mas mababa sa 15. David MALAN: At dito, masyadong, ito ay tunay madali maaga upang sinasadyang gamitin lamang ang isang solong ampersand o ng isang solong vertical bar. At sana ang tagatala ay sumigaw sa iyo dahil sila ay talagang magkaroon ng isang napaka iba't ibang kahulugan. Para sa mga curious, ang mga ito ginagamit para sa mga operasyon bitwise, operating sa mga indibidwal na mga bits. Subalit hindi mo nais ang mga pares ng mga ito dito. At sobrang mahalaga ay na unang isa, ang equal sign, kung saan ay ang operator na pagkakapantay-pantay ng kasang-ayon ang assignment operator. MARIA: At ang mga vertical na bar ay matatagpuan sa pagitan ng Delete at Return. David MALAN: Oo. Sa isang tipikal na US keyboard. MARIA: Yep. Kaya sabihin tumalon karapatan sa kondisyon na pahayag. Sa simula, na sa iyo na nakita, marahil, kung ang mga pahayag na nagbibigay-daan sa iyo upang suriin kung ang isang bagay ay totoo, pagkatapos gawin ang iba pa. Kaya maaaring may gusto sa iyo upang suriin kung ang iyong mga engkanto ay hawakan ng ilang mga iba pang mga engkanto o ang border ng iyong screen. At pagkatapos ay maaaring may gusto sa inyo na tapusin ang laro o gawin ang iba pa. Kaya ang syntax para sa na ay "kung (kalagayan)." Kaya kung ang iyong mga engkanto ay pagpindot sa isang bagay, pagkatapos ay ang sa loob ng kulot tirante. Pagkatapos kami ay may kung-ibang mga pahayag. Iba Pa ay nagbibigay-daan sa amin upang gawin ang isang bagay kung ang mga kondisyon na namin suriin para sa simula ay hindi totoo. Kaya kung ang mga engkanto ay pagpindot sa border, gawin ito ng ibang tao gawin ang iba pa. Kaya kung hindi man gawin ang iba pa. Pagkatapos kami ay may isang maikling halimbawa para sa mga ito. Kaya kung ang (military_time <12), kami ay nais na printf "Magandang umaga!" Iba Pa kami ng pagpunta sa printf "Magandang gabi!" Basic na halimbawa. David MALAN: Magandang. MARIA: Cool. Kaya ngayon kami ay lumipat na pahayag. Lumipat pahayag sa pangkalahatang maaari daan sa amin upang gawin ang isang pulutong ng mga parehong bagay na usapan natin lamang tungkol sa kung ang mga pahayag. Halimbawa, sa ngayon kami ay may mga pangkalahatang form ng switch statement na nagbibigay-daan sa amin upang kunin variable na tinatawag na n a at ihambing ito sa isang pulutong ng mga iba't ibang mga halaga, na kung saan namin dito may tinatawag constant1, constant2. Maaari naming magkaroon ng isang mas marami. At ang mga ito ay tinatawag na mga kaso. Kaya kung kami ay may isang lumipat statement-- at ito gumagana para lamang sa integers-- kami ay may isang variable sa kasong ito na ang n. Kung ang variable n ay katumbas ng constant1, kami ay magsagawa ng ilang mga snippet ng code o isang bagay na gusto naming gawin. At pagkatapos ay namin masira. Kaya ang break ay nangangahulugan na ang switch statement titigil Isinasagawa kung n ay katumbas ng constant1, at pagkatapos ang iyong programa ay magpapatuloy. Ito ay lumabas sa labas ng lumipat statement at makikita ito patuloy na gawin ang iba pa. Kung, gayunpaman, n ay hindi katumbas ng constant1, pagkatapos kaso para constant2 ay naka-check. Kaya kung n ay katumbas constant2, na ang ibang snippet ng code ay pinaandar. At pagkatapos ay makikita ito ng break kung iyon ay katumbas ng mga ito. At pagkatapos ay maaari kaming magkaroon ng also-- hindi kinakailangan, though-- isang default na kaso, na kung saan ang mangyayari kung n ay hindi katumbas ng alinman sa mga kaso na iyong inilista. At sa default kaso, kami din hindi na kailangan ng pahinga talaga dahil ang switch statement ay alam na kinakailangan nito upang tapusin pagkatapos ng default kaso kung iyon ang kaso. David MALAN: Ngunit stylistically, palagi naming ilagay ito sa doon. MARIA: Oo. David MALAN: Oo. Kaya lalo na kapag nagsisimula, lalo na kung kabilang sa mga mas kumportable, gusto ko personal Inirerekumenda lamang stick sa ifs at ifs-elses at kung-tao-kung-elses at iba pa kung lamang dahil ang mga ito ng isang maliit na mas tapat. Ito ay isang magandang optimization, o minsan kahit aesthetically ito gumagawa pa nababasa ang mga code. At sa katunayan, marahil mid-semester namin makita ang isang problema itakda kung saan mas mahusay ito lamang ang hitsura at mas madaling basahin para sa mga kawani na tao sa pamamagitan ng paggamit ng isang lumipat statement. Ngunit huwag mag-alala tungkol sa masyadong maaga nakakapit sa mga ito. MARIA: Oo. Kung mayroon kang isang pulutong ng kung pahayag, maaaring ito lamang ay hindi maaaring masyadong nababasa. Maaaring hindi ito masyadong mabilis para sa inyo na pumunta sa pamamagitan nito. Kaya lumipat na pahayag ay maaaring maging tunay na kapaki-pakinabang, pati na rin. At din, huwag remember-- hindi kalimutan na maglagay ng mga break sa doon. David MALAN: Huwag tandaan na ito. MARIA: Dahil pagkatapos ay maaari kang mahulog sa pamamagitan ng mula sa isang kaso sa isa pa. Kaya sabihin natin na kaso constant1 ay hindi magkaroon ng pahinga statement sa loob nito. At maaari tayong mabigo sa loob kaso constant2. At hindi namin nais na gawin na kung Narating na namin ang kaso constant1 at ito ay katumbas ng n. Kaya, halimbawa, kung kami ay may isang variable n na naglalaman ng isang numero ng klase, at gusto naming makita kung ano na ang klase is-- kung n ay katumbas ng 50, kami ay pagpunta sa i-print ang "CS50 ay Panimula sa Computer Science I. " Pagkatapos kami ay pagpunta sa masira. At na ito. Kung, gayunpaman, n ay katumbas hanggang 51, kami ay pagpunta upang i-print "CS51 ay Panimula sa Computer Science II. " Pagkatapos, muli, kami ay pagpunta sa break. Gayunpaman, kung pagkatapos ay inilalagay namin 124, 61, ang anumang iba pang mga numero na maaari mong isipin, o programa ay hindi pagpunta upang makilala na. Kaya ito ay pagpunta sa sabihin, "Sorry, hindi ako hindi pamilyar sa klase. " At ito ay pagpunta sa break. David MALAN: Kaya maaari mong talagang makita ang kung, tao kung, tao ideya dito. Ito ay naiiba lamang syntax para sa pagpapahayag ang eksaktong parehong ideya. MARIA: Eksakto. Ngayon na namin ang aming tatlong bagay operator. Mayroon So tatlong bagay operator tatlong parts-- isang kondisyon, isang bagay na dapat gawin kung kondisyon na ito ay totoo, at pagkatapos ay isang bagay na gawin kung ang condition ay hindi totoo. Kaya tingnan mo, talaga, ang syntax ng iyon dito. Mayroon kaming mga tandang pananong, at pagkatapos the-- ano ang tawag namin sa mga ito? David MALAN: Ang colon. MARIA: Colon. Salamat. Sorry. Kaya tingnan natin ang ating halimbawa upang ipaalam tingnan kung maaari naming magkaroon ng kahulugan ng this-- class_num == 50. Kaya dito nakita namin ang aming Boolean operator == na naghahambing sa mga variable class_num to 50. Kaya class_num tindahan isang integer. At kung na integer ay katumbas ng 50, at pagkatapos ay hindi namin pagpunta sa mga tindahan ng "David Malan" sa loob ng mga propesor string. Kung number klase ay hindi kasing-halaga ng 50, "hindi David Malan" ay magiging mga propesor. David MALAN: Salamat sa iyo. At kaya ito ay tila katumbas ng ano, gusto mo sabihin, sa unang tingin? MARIA: Para sa akin ito ay tila tulad ng kung-ibang mga pahayag. David MALAN: Oo. At sa katunayan, ito ang uri ng isang magandang isa liner, wika nga, para sa pagpapatupad eksakto ang logic ng kung-ibang ngunit ang paggawa ng lahat ng bagay sa isang hakbang. MARIA: Eksakto. Oo. Kaya kung-ibang mga pahayag baka tumagal ng isang pulutong ng mga puwang. Sila ay maaaring maging masyadong mahaba para sa kasing simple ng ito ng isang bagay. Kaya ito ay maaaring masyadong maikli at malinaw at napakabuti. Kaya ngayon kami ay pagpunta sa pagtingin sa Isinasagawa muli at muli sa isang bagay, kaya suri para sa isang kalagayan ng maraming beses at pagkatapos ay magpatuloy upang gawin ang isang bagay habang kondisyon na ito ay totoo. Kaya ito ay magbibigay sa amin mabuti sa habang loop. Sa kaliwa, kami ay ang aming unang habang loop. Kaya habang ang isang bagay ay totoo, gawin muli at muli sa isang bagay. Kaya't tiyakin na mapansin na ang aming kalagayan dito ay napatunayan sa itaas. Sapagkat sa aming ikalawang loop-- tawag namin na ang isang do-habang loop-- gawin namin ang isang bagay, pagkatapos ay tingnan namin para sa isang kondisyon. At kung kondisyon na ay patuloy na maging totoo, naming bumalik at gawin muli ang bagay. Kaya ang pangunahing pagkakaiba ay kung saan ang kondisyon ay naka-check para sa. At ang mga code ay hindi maaaring maging naisakatuparan kung ang mga kondisyon ay hindi totoo sa habang loop. Sapagkat sa do-habang loop, mayroon kaming mga code na palaging pinaandar ng hindi bababa sa isang beses. At pagkatapos habang ang kundisyon ay patuloy na maging totoo, maaari naming bumalik at ulitin muli sa loob. Kaya bakit sa tingin mo gusto naming gamitin isang gawin-habang loop sa loob ng isang habang loop? Right. Kaya kung gusto naming upang i-prompt ang gumagamit para sa ilang uri ng mga input, kung gusto naming hilingin sa kanila na ipasok ang kanilang pangalan, gusto naming hindi bababa sa hilingin sa kanila nang isang beses. At kung sila pumasok na pangalan, kami ay hindi pagpunta sa hilingin sa mga ito muli dahil mayroon na malaman namin ito. Ngunit kung hindi sila pumasok ang kanilang pangalan, o kung ang mga ito ipasok ang isang bagay na malinaw naman hindi isang pangalan, tayo pa rin bang magpatuloy pagtatanong sa kanila ang sa para sa kanilang mga pangalan. David MALAN: At sa lecture namin ay may isa tulad nito na may makakuha ng positibong int halimbawa, kung saan may walang upang suriin sa unang dahil ikaw ay may hindi kahit na tapat na paraan sa isang int. Kaya gusto naming gawin this-- makakuha ng isang int mula sa user-- pagkatapos suriin ito, marahil, at muli at muli. MARIA: Eksakto. Para loops-- OK. Para sa mga loop ay maaaring magbigay sa amin upang gawin ang halos ang eksaktong parehong bagay, pati na rin. Ito ay talagang ang parehong bagay. So may wala na maaari mong gawin sa para sa mga loop na hindi mo nais na ma kinalaman sa habang loop. Ngunit para sa mga loop ay maaaring mukhang isang maliit na kaunti pang kumplikado syntactically dahil sila ay may tatlong bahagi sa loob kung ano ay bago lang ang kondisyon na may habang loop. Kaya ang unang bahagi na iyong dagat, ang kaliwa-pinaka, mayroon kaming "int dwarves = 0." Kaya ito ay kung saan namin magpasimula aming variable. Pagkatapos kami ay may isang tuldok-kuwit at "dwarf <7." Kaya ito ay kung saan out kondisyon ay tunay. Kaya na kung ano ang gusto naming magkaroon ilagay lamang sa habang loop-- "habang dwarves <7." Dito, na napupunta sa gitna ng aming para sa loop. Kaya "dwaves <7." At pagkatapos ay ang aming huling bahagi ay "dwarf ++," na kung saan ay kung saan namin i-update ang aming mga variable. Kaya ang mga mahalagang bagay upang mapagtanto na ito ay pagpunta sa pumunta sa pamamagitan ng ito para sa loop pitong beses at maglalapat ng pitong beses. Kaya kami ay may pitong dwarf, at ang mga ito ang lahat ng pagpunta sa sabihin, "Ako dito upang makatulong sa iyo, Snow White " dahil ang mga ito ay handa na upang matulungan ang Snow White. Sa habang loop, kami ay nagawa na Pinasimulan at ang pag-update hindi sa loob ng kalagayan, muli, ngunit alinman sa bago o sa loob ng loop habang tiyakin na we-- dahil laging kailangan namin ng mga bahagi. Kaya tiyakin na mayroon kami ang mga ito, kami ay nai idinagdag ang mga ito pa rin on, hindi lamang sa loob ng panaklong. David MALAN: At kaya mukhang like-- sa mga panayam, halimbawa, Ako halos palaging gamitin, tulad ng, i at n at medyo panganganak variable. Mukhang maaari mong gamitin ang mas maraming cleverly pinangalanan variable, masyadong. MARIA: Oo, ito ay aktwal na napakabuti gamitin ng kaunti pang mapaglarawang variable dahil lalo na kung ang ibang tao ay pagbabasa ng iyong code-- baka ikaw greyder o kung ikaw ay nakikipagtulungan may kasama-- Gusto mong tiyakin na sila maunawaan kung ano ang iyong ginagawa. SIGE. Kaya ito ay isang bagay na lubhang funky-- para sa loop sa loob ng isang para sa loop. Hindi ko alam kung nakita namin na ito bago. Hindi siguro. Ngunit ang tunay na kami ay maaaring magkaroon ng this-- kaya loops sa halip ng mga loop. Kaya ang sinuman nais na siguro maglakad akin sa pamamagitan ng kung ano ang nangyayari sa dito? David MALAN: makikita ko ang isang ulos. MARIA: Cool. David MALAN: OK. Kaya, spoiler-- gusto naming i-print ang mga bagay-bagay na nasa ibaba-kanang sulok doon. MARIA: Tama. Oo, oo. David MALAN: Kaya hindi namin lamang ilagay sample na output doon. Kaya ang maaari kong magpakilala mula sa kataas-taasan loop na kayo iterating sa paglipas ng mga hilera ng pinakamalayo loop, kaya na magsalita. At ikaw ay iterating sa paglipas ng mga hanay na may mga kaloob-loobang loop. At intuitively, ito dapat sana may katuturan dahil sa pamamagitan ng likas na katangian ng lahat ng programa namin nakita bago, printf, kung saan ay ang function na aming ginagamit, sa huli, ay may kakayahan upang i-print ang mga bagay-bagay out mahalagang linya sa pamamagitan ng linya. Tulad ng, sa oras na iyong outputted ng isang bagong linya, may walang pagdodoble bumalik at pag-print ng isang bagay mas mataas sa screen, sa hindi bababa sa hindi gumagamit ng printf tulad nito. At kaya sa bagay na iyon, ito ay gumagawa ng kamalayan na ang pinakamalayo loop dapat na nagre-refer sa mga hilera dahil para sa bawat ibinigay na hilera, ikaw ay pagpunta sa nais na i-print ang XXXXX, at pagkatapos ay ilipat sa sa susunod na hilera, XXXXX. Kaya hilera unang dumating. At pagkatapos ay sa loob ng bawat hilera, i-print mo haligi. Kung sinubukan mong gawin ito sa kabaligtaran, ito marahil ay hindi lumabas bilang nilayon mo. MARIA: Oo. Kami lamang ay hindi maaaring bumalik sa nakaraang hilera na may printf. David MALAN: At kung ano ang mga kagiliw-giliw per ngayon chat tungkol sa saklaw, talaga, ay na row ay isang int na ipinahayag sa mga kataas-taasan loop. Ngunit mapansin na ito ay pa rin sa loob ng, kaya na magsalita, ang kulot tirante na kaagad na susunod, kahit na ito ay hindi technically loob ng mga kulot braces. Kaya row ay sa saklaw para sa kabuuan ng snippet ng code, pareho sa loob ng panlabas na para sa loop at sa loob ng panloob na para sa loop. Ngunit sa pamamagitan ng kaibahan, kung saan ay haligi sa saklaw? Ang variable haligi? Oo, lamang sa loob ng loop. At iyan ay OK dahil hindi namin ma-access ang ito sa labas ng kanyang curly braces. Lahat tayo ay print out ng isang bagong line sa dulo doon. Kaya na sa katunayan ay OK. Kaya ito ay ang epekto, mukhang, ng paggawa ng tatlong mga hilera at apat na haligi. MARIA: Tama. Kaya una pumunta kami sa pamamagitan ng aming unang hanay. At lamang sa aming unang hilera, ginagawa namin ang apat na mga haligi sa loob ng unang hanay. Kaya i-print namin sa labas ng apat na X ni. At pagkatapos ay maaari naming lumabas ang para sa loop, dahil naka-print na namin ang apat na X ni. At i-print namin ang isang bagong linya. At pagkatapos ay pumunta kami sa pamamagitan ng mga parehong proseso para sa dalawang higit pang mga hilera upang gumawa ng isang kabuuan ng tatlong. David MALAN: At ito ay nagkakahalaga ng pagpuna na ito ay lamang ng isang artifact ng font, ang katunayan na ang sample output mukhang kaya mas matangkad, na tila mayroon pa mga hilera sa haligi. Ngunit ito lamang ay sapagkat ang mga X ay mas mataas kaysa ito ay malawak. Iyan na ang lahat na nangyayari doon, plus ang puting espasyo sa pagitan ng mga linya. MARIA: Tama. Cool. David MALAN: Lahat ng karapatan. Kaya ang isang mabilis na pagtingin sa hanay ng problema sa isa, gumawa ng anumang mga tanong, at pagkatapos ay ipinid? Lahat tama. Kaya sa set ng isang problema, may tatlong pangunahing hamon, sa huli. Ngunit una, makikita mo ang na-set ang problema detalye, tulad ng maraming mga psets ngayong taglagas, ang pagpunta sa paglalakad mo sa pamamagitan ng ilang mga mainit-up magsanay, ituro sa iyo ng ilang mga mapagkukunan na maaaring o maaaring Hindi nakita na. Halimbawa, CS50 may isang suite ng shorts, na kung saan ay maikling video, hindi iba ito, ngunit na ay masyadong topic specific-- siguro sa limang minuto, 10 minuto ang haba sa loop o sa mga kondisyon o sa mga algorithm o sa ibang pagkakataon sa mas maraming advanced na mga paksa, pati na rin. At kami ay karaniwang i-embed mga sa mga problema sets upang ang mga mag-aaral magkaroon ng isang mapagkukunan na kung saan upang repasuhin ang mga materyal na maaaring magkaroon na lumapit sa panayam o seksyon. Subalit sa ganitong paraan ito ay mas pokus at higit pa sa kanilang mga kamay. Madalas din kaming mag-embed sa problema nagtatakda ng mga bagay na tinatawag na walkthroughs. Kaya halos lahat ng mga halimbawang ginagawa ko sa panayam, sa entablado dito, kami din may shot ng kamera sa isulong ang isang mas mabagal, isang matatalik walkthrough sa pamamagitan ng sa akin sa aking laptop ng na code, linya sa pamamagitan ng linya kaya na sa klase, bibigyan namin ng madalas pagsagap sa pamamagitan ng isang bagay o tao ay magsingit ng isang sagot sa isang katanungan. Ngunit ito ay hindi naman malugi in para sa lahat ng tao sa audience. Kaya makikita ninyo code walkthroughs para sa karamihan ng mga halimbawa na ginagawa namin dito sa lecture upang ikaw maaaring lakarin ito sa sarili mong bilis at rewind o fast forward o laktawan sa kabuuan, kung gusto mo. Madalas May ilang katanungan warm-up na hihilingin sa iyo na-uri-uriin ng palakasin ang materyal na ito at tiyakin na ikaw ay komportable sa harap ikaw ay magpatuloy sa ang magpahinga ng ang pset. At pagkatapos ay, of course, naroon ang pset mismo. At isa sa mga bagay-bagay kami ay tunay kusa gawin sa CS50 ay halos araw hindi kawili-wili o intellectually hindi kawili-wili makina na hakbang na maaaring kailangan mong gawin ay halos palaging tunay mabuti dokumentado. Sa haba ng panahon, bibigyan namin ng simulan na magtanong pa pantalumpati katanungan tulad ng matandaan kung paano gawin ito o na? Ngunit sa pangkalahatan, makikita mo ang na makuha mo ang mga hanay ng problema sa pamamagitan ng mga mechanics ng isang bagay upang ang ang mga kagiliw-giliw, intelektuwal na hamon sa huli ay iniwan sa iyo ang mag-aaral. Sa na sinabi, Zamyla, kung kanino kami iningatan referring ngayon sa panayam, ay isa sa aming matagal nang staff miyembro na din humahawak walkthroughs sa mga tiyak na mga problema sa pset tulad ng Mario at sakim, bagaman hindi tubig sa taong ito. At ito ay sa mga walkthroughs na siya madalas Nag-aalok ng ilang mga tip at trick para sa kung paano magpatuloy, hindi na nagsasabi sa iyo eksakto kung ano ang gagawin, ngunit rather-- tulad ng isang kondisyon, kung ikaw will-- na nagbibigay sa iyo ng hindi bababa sa isang pares ng mga ideya upang ito ay nasa sa iyo, sa huli, upang magpasya kung paano lapitan ang mga ito. MARIA: Pagsunud-sunurin ng tulad ng isang mataas na antas ng pag-unawa sa lohika ng kung ano kami ay humihingi sa inyo na gawin. David MALAN: Eksakto. At, sa katunayan, Zamyla ni walkthroughs ay sinadya upang sagutin ang mga madalas nagtanong tanong ng kung saan gawin ako ay nagsimulang, lalo na kapag mga pang detalye ay isang maliit na daunting ibinigay ang lahat ng teksto at koleksyon ng imahe na mayroon sila sa mga ito. Kaya water.c, makikita ninyo pagkatapos mong makumpleto ang, ito ay talagang medyo tapat. Hinding isang bungkos ng iyong pagpunta sa putok ang inyong mga ulo laban sa mga pader sinusubukan para malaman kung bakit hindi ito kino-compile o kung bakit ito ay hindi tama ang tumatakbo. Ngunit sa sandaling tapos ka na sa mga ito at sa sandaling hindi mo nagastos ng ilang oras na pakikipagbuno sa anumang ng mga bug na maaaring mayroon ka, makikita ninyo na ito ay isang maikling programa. Ito ay maaaring gawin sa loob lamang ng ilang mga linya ng code, karamihan sa mga nasaksihan namin dito sa lecture na, kung ipon mo ang karapatan bloke ng gusali. At bilang iminumungkahi namin dito, ito ay pagpunta sa magtanong sa iyo upang tukuyin kung ilang minuto ang isang tao ay ang pagkuha ng isang shower sa campus. Kami tukuyin sa mga problema itakda ang rate ng daloy ng tubig in, tulad ng, ang isang mababang-daloy shower ulo, na halos tulad ng Seinfeld clip Nakita namin kahapon o ang kabaligtaran nito. At saka mo lamang upang gawin ang isang piraso ng matematika, really-- arithmetic gamit C upang sabihin sa amin kung gaano karaming, halos, bote ng tubig ay na katumbas sa kung kami ay pagkuha ng isang n minutong shower. Ngayon, sa mario.c, ito ay pagpunta upang maging isang bahagyang na programa. Pa rin ito ay hindi magiging mahaba ito. Ng ilang linya lang na mas mahaba sa water.c. Ngunit ito ay magiging pagkakataon upang muling likhain ang lumang paaralan Mario pyramid mula sa Super Mario Brothers o ilang follow-on. Ito ay hindi pagpunta upang tumingin bilang prettier o bilang makulay na bilang na ang isa doon. Kami ay pagpunta upang gamitin ang maliit na hashtags tulad na namin dito sa screen gamit ang teksto ASCII. Ngunit ito ay humigit-kumulang ang parehong ideya. At ito ay magiging isang ipatupad na sa unang tingin tila medyo simple-- lamang i-print ang isang simpleng pyramid. Subalit mayroong isang pares na mga katangian dito na kawili-wili. Pansinin na ang rightmost gilid ng pyramid talaga ay may dalawang lapad. Kaya may dalawang pantay taas haligi, na kung saan Ginagawa ito ay nangangailangan ng isang maliit na bit ng pag-iisip upang gumawa ng mga matiyak na makuha mo na ang eksaktong karapatan, tulad ng laban sa lamang ng isang ganap na naka-anggulong linya. Kaya na ang isang piraso ng isang sulok kaso ngunit tumutugma sa aktwal na laro. At ito ay hindi halata sa unang ring sulyap sa kung paano i-print ang white space. Kaya kapag tumingin ako sa sample output here-- at ito ay din sa spec-- ito uri ng hitsura tulad ng isang parihaba, ngunit isang dayagonal ng rectangle ay tinadtad off, at ito lamang ang puting espasyo, kaya na magsalita. At kaya ng mga madalas na tinatanong tanong dito ay palaging, well, paano ko ilipat ang mga hashtags sa ibabaw ng mga karapatan? O kung paano ko ipi-print ang mga blangko ang puwang? At ito ay tunay madali kaysa sa karamihan ng mga mag-aaral sa tingin. Right? Maaari mo itong humigit-kumulang na biswal sa pamamagitan lamang pagpindot ang space bar o dalawang beses o tatlong beses. At kaya kahit na may printf kami ng halos laging i-print out ng isang string o isang int o isang salita tulad ng "hello, world "o serye ng mga salita, maaari mo ring i-print lamang quote, space, magpanipi. At iyon ay ang tunay na magbibigay mo ang isang white space doon. Kaya panatilihin na sa isip at huwag overthink ito. Ka tunay may sa magpasya hilera sa pamamagitan ng hilera sa pamamagitan ng hilera, hindi iba ang iyong mga halimbawa ng isang ilang sandali ang nakalipas, kung ilan sa mga dapat na puting espasyo haligi at kung ilan sa mga ito ay dapat na hashtags. Aabutin ng isang piraso ng oras, ngunit ito ay sa huli ng isang logic puzzle ng masama. MARIA: Oo. Ngunit ang logic ng pagpunta hanay sa hanay ay magiging lubhang kapaki-pakinabang dito. David MALAN: Oo. Tingin ko ang mga sample code gave-- ka kahit kahit na ito ay hindi isang kumpletong programa. Kailangan mo pa rin int at pangunahing at walang bisa at # include stdio.h, isang pulutong ng mga bagay-bagay mula sa panayam. Ngunit ang mga bloke ng gusali mukhang doon. At pagkatapos ay sa wakas ay isang bagay na isang maliit na mas algorithmic. Kaya ito ay lumiliko out na ang anumang panahon na kayo pumunta sa CVS o anumang convenience store at ang isang tao ay kamay mo ang mga bills cashier o barya bilang pagbabago, ito ay lumiliko out na ang mga ito, ang mga tao, kung o hindi nila alam ito o hindi, marahil ay gumagamit ng kung ano ang tinatawag na isang sakim na algorithm, kung saan kung ikaw ay dapat bayaran, sabihin, $ 21 sa pagbabago dahil sa ilang kadahilanan ikaw ay bumili ng isang bagay napaka murang na may isang malaking bayarin sa CVS, ay ito ay talagang nakakainis kung ang nagbigay sa iyo ng cashier 21 singles, o mas masahol pa, ang isang buong pulutong ng mga barya. Sa halip, kung ano ang isang makatwirang tao ay marahil pagpunta sa gawin ay ang kanilang pagpunta kukunin ng isang $ 20 at pagkatapos ay isang $ 1-bill, at kamay mo ang kuwenta lamang ng dalawang sa kasong iyon. MARIA: Kaya sila ay naghahanap upang i-minimize ang pagbabago na bigyan sila pabalik sa iyo. David MALAN: Eksakto. At parehong pakikitungo sa mga barya, pati na rin. Kung ikaw ay inutang, sabihin, $ 0.50, inaasahan namin na hindi mo nais 50 pennies. Sa halip ay nais dalawang quarters, halimbawa. Ngayon, ito ay ipinapalagay na cashier ay sapat ng bawat denominasyon na siya ay maaaring nais na magbigay sa iyo. Ngunit huwag naming-daan sa iyo upang ipalagay tulad ng marami sa mga problema. At ang mga layunin, sa huli, ay upang ipatupad sa C code isang sakim algorithm. Kaya ang user ay pinapayagan i-type sa kung magkano baguhin siya ay utang sa dolyar at cents, ang ilang mga uri ng mga lumulutang na tuldok halaga marahil. At pagkatapos ay may sa gawin ang matematika at malaman kung algorithmically, well, kung gaano karaming mga barya ang maaari kong ibigay mo minimally upang bigyan ka ng eksakto na halaga ng mga pagbabago. Ngunit may pagpunta sa maging isang ilang mapaglalang bahagi dito, right? Tulad ng may ang buong isyu imprecision. MARIA: Eksakto. Kaya lumulutang point mga halaga ay may imprecision. Usapan namin ba tungkol dito sa lecture ngayon? David MALAN: Ginawa namin ang huling oras sa lecture. Usapan natin ang tungkol imprecision. At hindi mo nais na dayain ang user ng kung magkano ang pagbabago na siya ay dapat bayaran. At upang ang walkthrough, sa ang mga detalye ng problema set, magbigay ng ilang mga pag-iisip, sa huli, tulad ng sa kung paano mo maaaring pagaanin ang mga imprecision mga error, potensyal na. Ito ay avoidable, tiyak, para sa ang input pinag-uusapan natin ang tungkol sa. At, sa katunayan, pennies-- marahil kami umalinsunod sa Zamyla, Sa tingin ko, para sa mga tricks doon. Kaya sa huli, makakahanap ka ng isang paglala ng mga problema sa linggong ito, ang unang na kung saan ay medyo maliit, pagkatapos ay medium, pagkatapos ng isang maliit na mas malaki. Subalit ang lahat ng mga ito gamitin ang mga gusali bloke mula sa nakaraang linggo, mula sa mga ito supersection, itakda specification problema Binibigyan ka sa di mabilang na mga mapagkukunan. Ngunit pa rin struggling, kung sa lahat, lalo na sa mga sa mga mas kumportable na walang paunang background, dumating sa oras ng opisina sa Lunes at Martes at Miyerkules at Huwebes. Pumunta sa CS50 Talakayin sa pamamagitan ng website ng kurso, sa pamamagitan ng kung saan maaari kang makipag-chat sa mga kawani at mga kaklase. Ngunit sa huli, sa tingin ko ang pinakamahusay na payo ay lamang magsimula ng maaga. Ito ay hindi ang uri ng klase na kayo dapat na simula psets sa Miyerkules gabi, o mas masahol pa, kahapon. MARIA: Aking pinakamahusay na payo ay na nagsimula sa pamamagitan ng Lunes. David MALAN: Lunes. Kaya kung hindi mo pa nagsimula already-- no. Ngunit kahit na hindi Monday, pagkatapos ay Martes. Ang mas maaga ang mas mahusay. At iyan ang dahilan ng siyempre ay may napakaraming mga late araw na ito ay upang bigyan ka ng isang piraso ng isang sikolohikal na presyon upang simulan ang mas maaga pa rin ngunit hayaan mga bagay na mali kapag ang mga bagay na mas matagal kaysa sa iyong inaasahan. MARIA: At gusto mong gumawa ng paggamit ng oras ng opisina hanggang kaya mo, masyadong. David MALAN: Ang anumang mga katanungan? Lahat tama. Well, bakit hindi natin itindig dito?