[Music kucheza] ZAMYLA CHAN: Sasa hebu kukabiliana na tamaa. Sema wewe ni cashier, na haja ya kutoa wateja wako a kiasi fulani cha mabadiliko. Naam, kama ungekuwa cashier tamaa, wewe d wanataka kushika yote sarafu na wewe mwenyewe. Hivyo d kutoa wateja mabadiliko yao kutumia sarafu kama machache iwezekanavyo. Kazi yako kwa hii p-kuweka ni kutekeleza Tamaa, mpango huo mahesabu ya idadi ya chini ya sarafu kutumika kufanya lolote kutokana na kiasi cha mabadiliko. Kabla ya kupiga mbizi katika programu dhana na C syntax kwa tamaa, hebu majadiliano ya kwanza kwa njia tamaa mpango, na kuona kama sisi wanaweza kutambua algorithm. Kumbuka kwamba algorithm ni seti ya maelekezo kwa ajili ya kutatua matatizo. algorithm kwa tamaa ingekuwa tu kuwa seti ya sheria mantiki na hatua ambazo tunaweza kufuata. Na siku zote mavuno kiwango cha chini idadi ya sarafu inahitajika. Jambo la kwanza d haja ya kujua ni mabadiliko ya kiasi gani zinadaiwa na wateja. Kwa mfano huu, hebu kusema $ 0.32. Kuna njia nyingi za kupata nyuma $ 0.32. Unaweza kutumia, kwa mfano, 32 pennies. Au kama ungekuwa kidogo pupa katika kuchagua sarafu yako, unaweza kutumia sarafu tano badala ya 32 kwa kutoa wateja tatu dimes - $ 0.10 kila - na pennies mbili - $ 0.01 kila mmoja. Lakini tunaweza kufanya vizuri zaidi kuliko sarafu tano? Tunaweza kuwa na hata pupa? Kabisa ikiwezekana. Hebu kuendelea kutembea kwa njia ya Mpango tamaa, na kuona. Kama mwisho lengo lako ni kutumia sarafu chache kama inawezekana, basi itakuwa zaidi busara kutumia kubwa iwezekanavyo sarafu. D badala ya kutoa robo moja nyuma - $ 0.25 kila - kuliko nickels tano - $ 0.05 kila mmoja. Hivyo labda utawala utawala wetu kwa Tamaa inaweza kuwa daima kutumia sarafu kubwa iwezekanavyo. Kati ya robo, dimes, nickels, na pennies, yetu sarafu kubwa ni robo. Hivyo tutaweza kujaribu kutumia yao ya kwanza. Nyuma kwa yetu ya dola $ 0.32. Tunaweza kutumia robo kutoa wateja $ 0.32? Ndiyo. Ambayo kuondoka na sisi na $ 0.07 kushoto. Tunaweza kutumia robo mwingine? Hapana, kwa sababu 25 ni zaidi ya saba. Hatutaki kutoa wateja yoyote zaidi ya sisi deni yao. Sawa. Sasa kwa kuwa tumekuwa nimechoka robo yetu, basi hoja juu ya ujao kubwa sarafu, dime. Tunaweza kutumia dime kutoa wateja wao $ 0.07 nyuma? No, tangu 10 ni zaidi ya saba. Hivyo basi sarafu ijayo kubwa kupatikana kwetu ni nickel. Tunaweza kutumia nickel? Ndiyo. Na kisha tunatarajia kuwa na $ 0.02 kushoto juu. Hatuwezi kutumia nickel kurudi $ 0.02. Hivyo sisi wakiongozwa sarafu ya mwisho katika ovyo yetu - senti. Na baada ya kutumia pennies mbili, tunatarajia kuwa na kushoto na senti zero, ambayo ina maana kwamba tumekuwa mafanikio kulipwa user mabadiliko yao deni kutumia sarafu nne tu - robo moja, nickel moja, na pennies mbili. Unaweza kukimbia ufumbuzi wafanyakazi ili kuona kama utawala wetu utawala na mchakato walionyesha sisi jibu sahihi. Kwa seti moja ya tatizo kubwa, wewe utakuwa na uwezo kuendesha ufumbuzi wafanyakazi kuona ni jinsi gani mpango wako mwenyewe wanapaswa kufanya kazi. Na maelekezo maalumu mapenzi kuwa katika tatizo seti specs. Mara baada ya sisi kukimbia ufumbuzi wafanyakazi, ni papo kwa sisi kwa jinsi mabadiliko mengi zinadaiwa kumbuka kwamba anauliza kwa kiasi katika dola. Sisi pembejeo $ 0.32, 0.32. Inatuambia kwamba sarafu nne ni deni lake, sambamba na jibu letu. Ajabu. Hivyo sasa hebu kuanza kuangalia katika utekelezaji ya algorithm tamaa. Tunajua mambo kadhaa. Mmoja, kwamba tutaweza haja ya haraka user kwa kiasi cha mabadiliko. Mbili, tutaweza wanataka kufuata yetu uongozi utawala wa daima kutumia sarafu kubwa iwezekanavyo. Na tatu, kwamba sisi haja ya kuweka wimbo ya jinsi ya sarafu nyingi sisi kutumia. Kwa sababu mwisho, tunahitaji magazeti idadi ya sarafu kwamba sisi. Kwanza, na hivyo kusababisha user kwa kiasi cha mabadiliko. Kila kukabiliana na pembejeo user, kufanya kuhakikisha kwamba, unaweza kufikiria yote ya mahitaji ya pembejeo, na tu kukubali pembejeo kwamba hukutana wale mahitaji. Katika kesi hiyo, tunataka kukabiliana na thamani ya fedha kwa dola. GetFloat na GetInt kazi kuhakikisha kwamba pembejeo ni nambari. Lakini user ni uwezo wa pembejeo hasi numeric maadili. Hivyo kumbuka tu matumizi yasiyo ya hasi pembejeo, ambayo ni pamoja na hasi wote idadi na sifuri. Katika kesi hiyo, pembejeo lazima kuelea. Kwa maneno mengine, idadi decimal. Kwa sababu tatizo kuweka spec inahitaji kuuliza kwa ajili ya pembejeo katika dola. Lakini katika C, floating maadili hatua hawawezi kuwa kuwakilishwa kwa usahihi. Kwa sababu kuna idadi finite ya bits ambayo kwa kuwakilisha maadili kubwa. Kuchukua idadi 0.1. Kama ningekuwa na kuuliza wewe kuandika 0.1 na mkono mia mahali decimal, ungependa kuandika 1, ikifuatiwa kwa 99 zeroes. Tunatarajia kutarajia kwamba kompyuta yetu ingekuwa magazeti halisi kitu kimoja kama sisi aliuliza kwa. Basi hebu angalia nini anafanya. Mimi utakagua maadili ya uchapishaji kuelekea mwisho wa hii kutembea kwa njia ya. Kwa sasa, angalia hapa kwamba f% ni kishika kwa ajili ya hatua yaliyo. Lakini sisi bayana kabla kwamba tunataka 100 decimals kuonyeshwa, na kisha mpya line kwa formatting nzuri. Baada ya kamba, sisi kuchagua 0.1 kama kuelea kwamba tunataka magazeti nje. Na matokeo yake, moja, ikifuatiwa na baadhi ya zeros, lakini kisha kundi zima la idadi. Hakika si kama ilivyotarajiwa. Yaliyo hatua kutokuwa sahihi inaweza kuanzisha rounding makosa ndani yako mahesabu kwamba wewe dhahiri wanataka kuepuka. Kama unataka kuona mifano zaidi, unaweza kushusha imprecision.ce kutoka kutembea kwa njia ya kanuni, ambayo ni rahisi mpango huo anauliza kuelea na Prints ni nyuma mia mahali decimal. Bila shaka, kama unataka kuonyesha zaidi au chini ya maeneo decimal unaweza kubadilisha mwenyewe. Kama utaona, ingawa tofauti kati ya mbili ni ndogo, wakati kupata kwa kuzidisha na kuongeza ikifungwa, kwamba tofauti inaweza hatimaye kuongeza up. Nyuma kwa tamaa. Sisi utasikia wanataka kuepuka makosa rounding na kushughulika na idadi nzima. Hivyo, baada ya sisi kupata halali pembejeo kutoka kwa user, hebu kubadilisha hii thamani ya dola senti. Kiakili, sisi kufanya hivyo kwa kuzidisha thamani ya dola na 100. Lakini kumbuka, kwa sababu ya yaliyo hatua kutokuwa sahihi, tunataka kufanya uhakika kwamba sisi ni kutumia thamani ya haki. Kuzidisha kwa 100 kimsingi hoja mahali decimal nafasi mbili kwa haki, ukataji wa mbali au truncating kitu chochote baada ya hapo. Kama wewe kucheza karibu na baadhi zaidi mifano, utaona kwamba wewe si daima got idadi ya haki kama wewe kutumia njia hii ya truncating. Kwa mfano, 12.59 kuchapishwa na 100 maeneo decimal, kwamba anatoa 12.5899, nakadhalika. Wewe Ningependa kupata 12.58 kama wewe truncated, si 12.59, kama unahitaji. Badala yake, ni bora kwa pande zote namba kwanza. Kwa bahati nzuri, C kuja na kazi kuitwa Round. Ni katika maktaba math. Kama Unataka kujua jinsi ya kutumia Round, basi unaweza kuleta up mwongozo au mtu ukurasa kwa ajili ya kazi hiyo. Unaweza kufanya hivyo kwa kuandika mtu, short kwa mwongozo, na kisha kazi kwamba wanataka kuangalia up. Hivyo kuandika mtu mzima ndani ya terminal amri line kuleta up mwongozo. Inaweza kuwa ngumu kidogo decipher, lakini hatimaye itabidi kupata hutegemea yake. Kurasa mtu kuonyesha nini kazi gani, na kisha baadhi matumizi ya uwezekano wa hilo. Mimi itabidi kuondoka kuchunguza mtu ukurasa kwa Round. Lakini tunajua kwamba unaweza kutumia kwa pande zote thamani wakati wa uongofu wako kutoka dola za Kimarekani kwa senti. Pande zote nitakupa nyuma idadi ya aina data mara mbili. Na unaweza kubadilisha au kutupwa kwa int baadaye. Kubwa. Kwa sasa tumekuwa ilisababisha user kwa kiasi fedha, na kuongoka katika senti. Sasa tunaweza kutekeleza algorithm kwamba kwa kawaida hutumia sarafu kubwa zaidi. Kumbuka kwamba kuna nyingi njia ya kutekeleza tamaa, kama kuna njia nyingi kwa njia ya kila sayansi ya kompyuta tatizo. Kutafuta njia ya kifahari zaidi, hiyo ni sehemu ya kujifurahisha. Katika haya p-sets, ikiwa mpango wako haina hasa mechi ya yangu maelezo katika walkthroughs, kwamba ni sawa. Lakini tu kuhakikisha kwamba hupita kuangalia 50, satisfies wote mahitaji ya kuunda specifikationer, na kwamba wewe kufikiria kama yako mbinu ina mpango nzuri. Kwa maneno mengine, jinsi ufanisi ni nini? Kwa mfano, je, aina repetitive mistari code, badala ya kutumia kitanzi? Kuandika code pamoja na kubuni bora mapenzi kuja uzoefu kama wewe maendeleo kupitia kozi. Kwa hili kutembea kwa njia ya, nitakwenda juu ya njia mbili ambazo zinaweza kutumika kwa kukamilisha tamaa. Njia ya kwanza ni njia ya kutumia loops na kutoa. Mapema, wakati sisi aliyesema kupitia Mchakato wa tamaa, sisi kuendelea checked kama tunaweza kutumia robo, na kutumika robo mpaka thamani iliyobaki ilikuwa chini ya $ 0.25. Hii inasababisha vizuri kwa kitanzi wakati muundo. Wakati sisi bado unaweza kutumia robo, kutumia moja. Kwamba wakati kitanzi lazima kutekeleza kwa muda mrefu kama thamani iliyobaki ni kubwa kuliko au sawa na robo ya asilimia thamani. Hiyo ina maana kwamba itabidi pia wanataka kuweka wimbo wa fedha iliyobaki thamani, na taarifa hiyo kila wakati kwamba matumizi ya sarafu. Pia kumbuka kwamba mwisho, yako pato ni idadi ya sarafu kutumika. Hivyo kitu kingine kuweka wimbo wa ni idadi ya sarafu kwamba matumizi. Unaweza kuweka wimbo wa haya kwa kutumia vizuri kwa jina vigezo. Na ndani ya mwili wa kitanzi yako ingekuwa kuwa update kwa vigezo hizo. Mara baada ya kitanzi kwa robo alimaliza, wewe Unaweza kutumia moja sawa kwa ajili ya dimes, na kadhalika na kadhalika, mpaka wameweza akarudi yote ya fedha. Nimeandika baadhi pseudo-code hapa kwa kukusaidia taswira tu jinsi mchakato sisi kujadiliwa wanaweza kutafsiri kwa C. Kama unaweza kuona hapa, mimi bado nina kutumia Maneno ya Kiingereza. Ni si C bado. Lakini nimeanza mambo Indent. Nimekuwa kuweka hali ya ndani ya mabano yangu. Ni mapya ya kuangalia kidogo kidogo kama programu code. Pseudo-code ni njia kuu ya kwa kupata mwenyewe kuanza. Taswira code yako kabla ya wewe kuangalia juu syntax. Kwa sababu mara nyingi sehemu ya gumu kuhusu tatizo ni kweli kuelewa kile hasa unahitaji kufanya. Mara baada ya kuandika kwamba chini, basi ni rahisi sana kwa kuangalia kazi na syntax maalum yako mstari wa Pseudo-code Kumbuka kwamba hii inaweza kuwa kufanana na aina ya mifupa ya code yako kwamba kuandika. Daima kuna optimizations kufanywa. Na hasa katika wangu pseudo-code hapa, kuona kama unaweza doa yake. Lakini kimsingi mchakato na njia ya kufikiri ni tu kama sisi kujadiliwa. mstari wa kwanza anatuambia kupata kiasi fulani katika dola. Na pili anatuambia kubadilisha kwa senti. Na kisha, wakati robo inaweza kutumika, sisi wanataka kuongeza kuhesabu sarafu na kupungua kwa kiasi fedha taslimu. Same huenda kwa dimes, nickels, na pennies. Na hatimaye, sisi tunasema user jinsi sarafu nyingi sisi kutumika. Kubwa. Ili anahitimisha njia kitanzi. Sasa hebu majadiliano kuhusu njia msimu, ambayo ni zaidi kama mgawanyiko. Sisi sote ni ukoo na plus, minus, kuzidisha na kugawanya operators kwa ajili yetu. C ina zote nne za hizo, lakini pia ina modulo operator, na kuwakilishwa na asilimia ishara. Modulo ni nadhifu kweli. Ni anakupa salio kutoka kugawa namba mbili. Kumbuka muda mrefu ujumbe mgawanyiko wakati kugawanya, kusema, 74 na tatu? Kuanzia pamoja na mamia mahali, ungekuwa kujua kwamba 3 huenda katika saba mara mbili kwa kufanya sita kwa salio moja. Ningependa kuandika mbili saa ya juu, na kisha Ondoa 6 kutoka saba, kufanya juu ya salio ya 14 kurudia utaratibu. Tatu huenda katika 14 mara nne kwa kufanya 12, na salio mbili. Na mbili haina kubeba zaidi ya tena. Hivyo mbili itakuwa kushoto katika chini kama salio. Na kwamba ni nini modulo inatoa, wewe kwamba idadi ya chini. Hivyo 74 modulo tatu bila kukupa mbili. Na 10 modulo mbili, pamoja na kwamba awajalieni sifuri. Kwa sababu hakuna salio yoyote wakati kugawanya 10 na mbili. Sita modulo tano, pamoja na tano huenda katika sita mara moja. Na wakati huo mmoja wa kushoto juu. Hivyo sita modulo tano ni moja. Kisha kama wewe na modulo saba tisa, utaweza kupata saba. Kwa sababu tisa ni kubwa kuliko saba. Hivyo hana kugawanya yote ndani ya saba, kuacha saba kama jibu lako. Kama unafikiri kuhusu modulo zaidi kidogo, kukumbuka kwamba anatoa salio baada ya kugawanya kitu. Fikiria jinsi unaweza kuwa na uwezo wa kutumia katika tamaa. Hebu sema user anauliza kwa $ 400.11. Nini njia kufikiri ni jinsi gani wengi robo unahitaji bila ya kuwa na kuhesabu kila mmoja? Mara baada ya kufikiri ni jinsi gani robo wengi unaweza kutumia kufanya $ 400.11, ni kiasi gani kubadili mabaki? Labda mchanganyiko hapa kati ya modulo na mgawanyiko atakuja katika Handy kukupa baridi, kifahari mkabala na tatizo tamaa. Lakini kumbuka kwamba utawala utawala bado inatumika. Daima kutumia sarafu kubwa iwezekanavyo. Mara baada ya umefanya kosa mahesabu ya jinsi sarafu nyingi kutumia, hatua ya mwisho ni magazeti nje ya idadi ya sarafu kwamba mahesabu. Hadi sasa, tumekuwa kutumia printf kazi tu kwa ajili ya masharti. Lakini wakati unataka magazeti nje Katika, au tu ya aina yoyote data kwamba kuhifadhiwa katika variable, una zinaonyesha kwamba kwa kutumia placeholder. Hapa nimekuwa ni pamoja na baadhi tu tips juu ya jinsi ya magazeti nje maadili. Kama una integer, ungekuwa kuandika kamba yako kwa kutumia% d kama placeholder. Baada ya kufunga quotation alama, kuingia comma. Na kisha kuweka katika integer kwamba mapenzi kuchukua nafasi ya% d wakati kuchapishwa. Kwa hiyo baada ya kuonyesha idadi ya sarafu kutumika, wewe ni kumaliza na tamaa. Kuhakikisha na kuangalia matukio yote kona, tidy style yako kidogo, na wewe ni kuweka wote kuwasilisha. Mwishoni mwa kuweka tatizo hili, utasikia kuwa zaidi ya ukoo na CS50 appliance, terminal, na kitanzi miundo na vigezo katika C. Wewe vizuri katika njia yako. kujifunza Curve inaweza kuonekana mgumu. Hivyo kuchukua ni hatua kwa hatua. Kuhakikisha kuandika pseudo-code kabla ya kupiga mbizi pia kina ndani ya usio wa kawaida syntax. Kufanya kufanya orodha, na kuvunja kazi katika ndogo, zaidi manageable kazi. Kuchunguza yote ya rasilimali CS50. Mbali na hotuba, rewatch hii kutembea kwa njia ya. Makini sana sehemu. Angalia kaptula. Kusoma maswali wanafunzi wako ' juu ya Jadili, na baada ya yako mwenyewe. Bora wa bahati na p-kuweka. Na shukrani kwa ajili ya kuangalia. Hii ilikuwa ni tamaa. [Music kucheza]