[Mūzikas atskaņošanai] ZAMYLA Chan: Tagad pieņemsim risināt mantkārīgs. Saka, tu esi kasieris, un jūs ir nepieciešams, lai dotu savu Klientam zināma pārmaiņām. Nu, ja Jums bija mantkārīgs kasieris, Jūs vēlaties, lai saglabātu visas monētas, lai sevi. Tātad jūs vēlaties dot klientam to pārmaiņas izmantojot tik maz monētu, cik vien iespējams. Tavs uzdevums šajā p-komplektā ir īstenot Mantkārīgs, programma, kas aprēķina minimālo skaitu gada monētām, ko lieto, lai kāda ņemot vērā apjomu izmaiņas. Pirms iegremdēšanās plānošanas koncepcijas un C sintakse mantkārīgs, pieņemsim vispirms runāt ar mantkārīgs programmu, un redzēt, ja mēs var identificēt algoritmu. Atcerieties, ka algoritms ir tikai kopa instrukcijas problēmu risināšanai. Algoritms mantkārīgs būtu vienkārši kopums loģiski noteikumus un pasākumus, kas mēs varam sekot. Un viņi vienmēr dod minimālo monētu skaits, kas nepieciešami. Pirmā lieta, jūs nepieciešams zināt, cik daudz pārmaiņu ir parādā klientam. Attiecībā uz šo piemēru, teiksim $ 0,32. Ir daudzi veidi, kā iegūt atpakaļ $ 0,32. Jūs varētu izmantot, piemēram, 32 pennies. Vai, ja jūs būtu mazliet greedier in Izvēloties savas monētas, jūs varētu izmantot 32 piecas monētas vietā, sniedzot klientu trīs dimes - $ 0,10 katru - un divi pennies - $ 0,01 katrā. Bet mēs varam darīt labāk nekā piecus monētām? Vai mēs varam būt vēl greedier? Ļoti iespējams. Turpināsim ejot cauri mantkārīgs programmu, un redzēt. Ja jūsu gala mērķis ir izmantot dažas monētas iespējams, tad tas būtu ļoti lietderīgi izmantot lielāko iespējamās monētas. Tu labprātāk dod vienu ceturtdaļu back - $ 0,25 katru - nekā piecus nickels - $ 0,05 katrā. Tāpēc varbūt mūsu reglamentē likums Mantkārīgs var būt, lai vienmēr izmantot lielākais monētu iespējams. No ceturtdaļas, dimes, nickels, un pennies, mūsu lielākais monēta ir ceturksnis. Tāpēc mēs cenšamies izmantot tos vispirms. Atpakaļ uz mūsu $ 0,32. Mēs varam izmantot vienu ceturtdaļu, lai dotu klients 0,32 $? Jā. Tas atstāj mūs ar $ 0,07 kreisi. Mēs varam izmantot vēl vienu ceturtdaļu? Nr, jo 25 ir lielāks par septiņiem. Mēs nevēlamies, lai sniegtu klientam vairāk nekā mēs viņiem parādā. Labi. Tagad, ka mēs esam izsmeltas mūsu ceturtdaļas, pieņemsim pāriet uz nākamā lielākā monēta, dimetānnaftalīns. Mēs varam izmantot dimetānnaftalīns, lai dotu klients to $ 0,07 atpakaļ? Nr, jo 10 ir lielāks par septiņiem. Tātad nākamais lielākais monēta pieejama mums ir niķeļa. Mēs varam izmantot niķeļa? Jā. Un tad mēs ir $ 0,02 paliek pāri. Mēs nevaram izmantot niķeļa atgriezties $ 0,02. Tāpēc mēs pārvietots pēdējā monēta pie Mūsu rīcībā - penss. Un pēc tam, izmantojot divus pennies, mēs gribētu būt kreisi ar nulles centiem, kas nozīmē, ka mēs esam veiksmīgi atmaksāta lietotājs to izmaiņas parādā izmantojot tikai četras monētas - viena ceturtdaļa, viena niķelis, un divi pennies. Jūs varat palaist personāla risinājumu, lai redzētu, vai Mūsu reglamentē likums un process deva mūs pareizā atbilde. Lielākajai daļai problēmu kopām, jūs varēsiet palaist personāla risinājumu, lai redzētu, kā savu programmu vajadzētu strādāt. Un īpašus norādījumus, būs būt problēmas nosaka specs. Pēc tam, kad mēs palaist personāla risinājumu, tā liek mums, cik lielas izmaiņas ir parādā ņemiet vērā, ka tas prasa summa dolāros. Mēs ievade $ 0,32, 0,32. Tā stāsta, ka četras monētas ir parādā, saskan ar mūsu atbildi. Fantastiska. Tāpēc tagad sāksim meklē at īstenošanai no mantkārīgs algoritmu. Mēs zinām pāris lietas. Viens, ka mums būs nepieciešams, lai ātri Lietotājs par summu izmaiņām. Divi, ka mēs vēlamies sekot mūsu reglamentē noteikums vienmēr izmantot lielākais monētu iespējams. Un trīs, ka mums ir nepieciešams, lai izsekotu cik daudz monētu mēs izmantojam. Jo visbeidzot, mums ir nepieciešams izdrukāt monētu skaits, kas mums. Pirmkārt, pamudinot lietotājam par summu izmaiņām. Ikreiz, kad jūs nodarbojas ar lietotāja ievadi, padarīt pārliecinieties, ka jūs domājat par visu prasības ievadi, un tikai pieņemt ievadi, kas atbilst tiem, prasības. Šajā gadījumā, mēs vēlamies, lai risinātu ar naudas vērtību dolāros. Šā GetFloat un GetInt funkcijas nodrošināt ka ieguldījums ir ciparu. Bet lietotājs var ievadīt negatīvas skaitliskās vērtības. Tātad, atcerieties, lai tikai izmantot nav negatīvs ieejas, kas ietver visu negatīvo numurus un nulle. Šajā gadījumā, ievades būtu peldēt. Citiem vārdiem sakot, decimāls skaitlis. Jo problēma komplekts spec nepieciešama jūs lūgt ievadi dolāros. Bet C, peldošā punkta vērtības nevar pārstāvēt precīzi. Jo ir ierobežots skaits bitu, ar kuru pārstāv bezgalīgs vērtības. Veikt numuru 0.1. Ja es būtu lūgt jums rakstīt 0,1 līdz roku simto aiz komata, Jūs varētu uzrakstīt 1, kam seko ar 99 nullēm. Mēs gribētu sagaidīt, ka mūsu dators būtu izdrukāt tieši to pašu ja mēs lūdzām to. Tātad, pieņemsim redzēt, ko tā dara. Es pārskatīt drukāšanas vērtības virzienā beigās tas iet cauri. Tagad, redzēt, šeit, ka f% ir viettura par peldošo punktu. Bet mēs norādām iepriekš, ka mēs gribam 100 skaitlis aiz parādīti, un tad jaunu līnija nicer formatējumu. Pēc virknes, mēs izvēlamies 0,1 kā peldēt, ka mēs gribam izdrukāt. Un rezultātā, viens, kam seko daži nullēm, bet tad Visa ķekars numuriem. Protams, ne kā gaidīts. Peldošā komata neprecizitāte var ieviest noapaļošanas kļūdas uz jūsu aprēķinus, kas jums būs noteikti vēlaties izvairīties. Ja jūs vēlaties redzēt vairāk piemēru, jūs varat lejupielādēt imprecision.ce no iet caur kodu, kas ir vienkāršs programma, kas prasa peldēt un izdrukā to atpakaļ uz simto aiz komata. Protams, ja jūs vēlaties, lai parādītu vairāk vai mazāk zīmēm aiz komata Jūs varat mainīt sevi. Kā jūs redzēsiet, lai gan atšķirība starp abiem ir mazs, kad jums to reizinot un pievienojot pludiņiem, ka neatbilstība var beidzot saskaitīt. Atpakaļ uz mantkārīgs. Mēs vēlamies, lai izvairītos no noapaļošanas kļūdas pievēršot uzmanību gan ar veseliem skaitļiem. Tātad, pēc tam, kad mēs derīgu ieguldījumu no lietotājs, pieņemsim pārvērst to dolāra vērtība centiem. Garīgi, mēs to darām, reizinot dolāra vērtības ar 100. Bet atcerieties, ka peldošā komata neprecizitāte, mēs vēlamies, lai pārliecināts, ka mēs esam, izmantojot pareizo vērtību. Reizinot ar 100 būtībā pārvietoties aiz komata divas telpas, lai labi, nocērtot vai truncating kaut ko vēlāk. Ja jūs spēlēt aptuveni ar dažiem vairāk piemēri, jūs redzēsiet, ka jums nebūs vienmēr got pareizo numuru, ja jūs izmantot šo metodi truncating. Piemēram, 12.59 uzdrukāts uz 100 zīmēm aiz komata, kas dod Jums 12,5899, uc. Jūs vēlaties saņemt 12.58, ja saīsināts, nevis 12.59, kā jums nepieciešams. Tā vietā, tas ir labākais, lai noapaļot numuru pirmās. Par laimi, C nāk ar funkciju sauc Round. Tas ir math bibliotēkā. Ja jūs vēlaties zināt, kā izmantot Round, tad jūs varat audzināt rokasgrāmatā vai Vīrietis lapa par šo funkciju. To var izdarīt, ierakstot cilvēks, īss roku, un tad tu funkciju vēlaties meklēt. Tātad, ierakstot vīrieti kārtu uz terminālu komandrindas būs audzināt rokasgrāmatu. Tas varētu būt nedaudz grūti atšifrēt, bet galu galā jūs saņemsiet pakārt par to. Vīrietis lapas parādīs to, ko funkcijas dara, un pēc tam daži iespējamo izmantošanu no tā. Es ņemšu atvaļinājumu jums izpētīt vīrietis lapa kārtā. Bet zinu, ka jūs varat izmantot, lai noapaļot vērtība laikā jūsu pāreja no dolāru centiem. Kārta dos jums atpakaļ numuru Datu veids double. Un jūs varat pārvērst vai čuguna to int vēlāk. Lieliski. Līdz šim mēs esam lika lietotāju par naudas summu, un pārvērš to centus. Tagad mēs varam īstenot algoritmu kas vienmēr izmanto Lielākie monētas pieejami. Paturiet prātā, ka ir vairāki veidi, kā īstenot mantkārīgs, tāpat kā ir vairāki veidi, kā pieeja katrs datorzinātnes problēma. Meklējot visvairāk elegants veids, tas ir jautri daļa. Visu šo p komplektu, ja jūsu programma nav tieši atbilst manu skaidrojumu ar walkthroughs, tas ir OK. Bet tikai lai pārliecinātos, ka tas iet pārbaudīt 50, atbilst visiem prasības veido specifikācijas, un, ka jūs uzskatāt, vai jūsu pieejai ir labs dizains. Citiem vārdiem sakot, cik efektīvs tas ir? Piemēram, jūs tipa atkārtojas kods līnijas, nevis izmantojot cilpu? Rakstot kodu ar labāku dizainu nāk pieredzi, kā jūs progress caur kursu. Lai tas iet cauri, es iešu divas metodes, ko var izmantot, lai pabeigtu mantkārīgs. Pirmā metode ir metode, izmantojot cilpas un atņemšanu. Agrāk, kad mēs runājām caur Mantkārīgs process, mēs nepārtraukti pārbaudīts, vai mēs varētu izmantot ceturksnī, un ko izmanto par ceturtdaļu līdz vērtība atlikušais bija mazāka par $ 0,25. Tas nozīmē arī to kamēr cilpa struktūra. Lai gan mēs joprojām var izmantot ceturksnī, izmantot vienu. Ka, lai gan cilpa vajadzētu izpildīt tik ilgi kā atlikusī vērtība ir lielāka nekā vai vienāds ar ceturkšņa centu vērtībā. Tas nozīmē, ka jūs arī vēlaties, lai sekot atlikušo naudas vērtību, un to atjaunina ik laiks, ka jūs izmantojat monētu. Tāpat jāatceras, ka beigās, jūsu produkcija ir vairāki monētām, ko lieto. Tā cita lieta, lai sekotu ir monētu skaits, ko izmanto. Jūs varat sekot tiem, izmantojot labi nosaukts mainīgie. Un kas organismā jūsu cilpas būtu būt atjaunināta ar šiem mainīgajiem. Pēc tam, kad cilpa ceturksnī apdari, jums var izmantot līdzīgu vienu par dimes, un tā tālāk, un tā tālāk, līdz brīdim, kad jūs esat atpakaļ visu naudu. Es esmu uzrakstījis dažas pseido-kodu šeit palīdzēs jums iztēloties, cik process, ko mēs apspriedām varētu tulkot C. Kā jūs redzat šeit, es esmu joprojām, izmantojot Angļu vārdus. Tas nav C yet. Bet es esmu sācis ievilkums lietām. Esmu likts nosacījumus iekšā mans iekavas. Tas sāk izskatīties mazliet mazliet līdzīgi programmēšanas kodu. Pseido-kods ir lielisks veids lai iegūtu sev sākās. Vizualizēt savu kodu pirms Jūs meklēt sintaksi. Jo bieži vien cieta daļa par problēma ir patiešām saprastu, kas tieši tā, kas jums jādara. Pēc tam, kad jūs rakstāt, ka uz leju, tad tas ir daudz vieglāk uzmeklēt funkcijas un sintakse attiecas uz jūsu līnija pseido-koda Paturiet prātā, ka tas varētu nebūt identiska veida skeletu Jūsu kods, ka jūs rakstāt. Vienmēr ir optimizācijas jāveic. Un jo īpaši manā pseido-kodu šeit, redzēt, ja jūs varat uz vietas to. Bet būtībā process un domāšanas ir tāpat kā mēs apspriests. Pirmā līnija stāsta mums, lai iegūtu noteiktu summu dolāros. Un otrs stāsta mums pārvērst to centiem. Un pēc tam, bet ceturtdaļām var izmantot, mēs vēlas palielināt monētu skaitu un samazināt naudas summu. Tas pats attiecas uz dimes, nickels, un pennies. Un visbeidzot, mēs pateikt lietotāju cik monētas mēs izmantojām. Lieliski. Tā, ka noslēdz cilpa metodi. Tagad parunāsim par modulārās metodes, , kas ir vairāk kā sadalījumu. Mēs visi esam iepazinušies ar plus, mīnus, reizināt un dalīt uzņēmējus pieejamas mums. C ir visi četri no tiem, bet ir arī moduli operators, kuru pārstāv procentu zīme. Modulo ir ļoti veikls. Tas dod jums atlikumu no dalot divus skaitļus. Atcerēties ilgi dalīšanas paziņojumu, kad Jūs sadalīt, teiksim, 74 ar trīs? Sākot ar desmitiem vietu, jūs zinu, ka 3 tērēta septiņās divreiz, lai veiktu sešas ar atlikušo vienu. Jūs rakstīt divus augšā, un pēc tam atņemt 6 no septiņiem, pārnesot atlikušo 14 līdz atkārtojiet procesu. Trīs tērēta 14 četras reizes, lai veikt 12, ar atlikušo divi. Un divi nav pārnest vairs. Tāpēc divas būtu jānodod Apakšējā kā pārējā. Un tas, ko moduļa dod jums ka skaitlis apakšā. Tātad, 74 moduļa trīs dotu jums divi. Un 10 modulo divi, labi, ka dotu jums nulles. Jo tur vairs nav atlikums ja jūs sadalīt 10 ar divi. Seši moduļa pieci, arī piecas tērēta sešiem reizi. Un tad tas ir viens, kas paliek pāri. Tāpēc seši moduļa pieci ir viens. Tad, ja Jums ir septiņi modulo deviņi, jūs saņemsiet septiņi. Tāpēc, ka deviņi ir lielāks nekā septiņi. Tātad tas nav sadalīt to visu septiņiem, atstājot septiņi kā savu atbildi. Ja jūs domājat par modulo nedaudz vairāk, atcerieties, ka tas dod jums pārējais pēc tam, kad jūs sadalīt kaut ko. Padomājiet, kā jūs varētu būt iespēja izmantot to mantkārīgs. Pieņemsim, ka lietotājs pieprasa $ 400,11. Kas ir veids, lai noskaidrotu, cik daudz ceturtdaļas jums ir nepieciešams, bez skaitīt katru vienu? Tiklīdz jūs saprast, cik daudz ceturtdaļas Jūs varat izmantot, lai $ 400,11, cik daudz izmaiņas paliek? Varbūt kombinācija šeit starp moduli un sadalījums varētu nonākt ērts, lai dotu jums cool, elegants pieeja mantkārīgs problēmu. Bet atcerieties, ka ECB noteikums joprojām ir spēkā. Vienmēr lietojiet lielāko monētu iespējams. Tiklīdz jūs esat darījuši aprēķinu par to, cik daudz monētu, lai izmantotu, pēdējais solis ir drukāt out skaitu monētas, jums aprēķināts. Līdz šim mēs esam bijuši, izmantojot printf darboties tikai stīgas. Bet, ja jūs vēlaties, lai izdrukāt in, vai tikai jebkāda datu veids, kas ir saglabāti ar mainīgo, jums ir jānorāda ka, izmantojot vietturi. Šeit es esmu iekļauts tikai dažus padomus par to, kā izdrukāt vērtības. Ja jums ir vesels skaitlis, jūs būtu uzrakstiet savu string, izmantojot% d, jo vietturis. Pēc noslēguma citāts zīme, ierakstiet komatu. Un tad ieliek skaitlim, kas būs veikt vietā% d, kad izdrukāt. Tātad, pēc tam parādot skaits no kategorijas monētu, tu esi gatavo ar mantkārīgs. Pārliecinieties, lai pārbaudītu visus stūra gadījumus, uzkopt savu stilu mazliet, un jūs esat visi, kas jāiesniedz. Beigās šo problēmu kopumu, jūs vairāk pazīstams ar CS50 ierīce, terminālu, un cilpas struktūras un mainīgie C. Jūs labi pa ceļam. Mācīšanās līkne var šķist sarežģīta. Tāpēc ņemt to soli pa solim. Pārliecinieties, ka jūs rakstīt pseido kodu Pirms niršanas pārāk dziļi uz nepazīstamu sintaksi. Padara to do sarakstu, un plīsumi uzdevums mazākās vairāk Veicamo darbu. Izpētīt visas CS50 resursiem. Papildus lekciju, rewatch Tas iet cauri. Pievērst uzmanību sadaļā. Pārbaudiet šorti. Lasīt Klasesbiedru jautājumiem gada Apspriediet, un pēc savu. Best of luck ar p-komplektu. Un paldies, lai skatītos. Tas bija mantkārīgs. [Mūzikas atskaņošanai]