1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:01,960 SPREKER 1: Kom ons praat oor water. 3 00:00:01,960 --> 00:00:07,280 In hierdie probleem, vra ons die gebruiker in staat om te vertel ons hoe lank in minute hul stort was 4 00:00:07,280 --> 00:00:11,040 en dan bereken ons die ekwivalent aantal bottels water 5 00:00:11,040 --> 00:00:12,970 dat hulle stort gebruik. 6 00:00:12,970 --> 00:00:16,379 >> So, wat is ons to-do's vir hierdie probleem? 7 00:00:16,379 --> 00:00:20,050 In die eerste plek gaan ons wil om vinnig en dan bekragtig 8 00:00:20,050 --> 00:00:22,100 die insette wat die gebruiker gee ons. 9 00:00:22,100 --> 00:00:24,790 Sodra ons verseker dat ons geldige toevoer van die gebruiker, 10 00:00:24,790 --> 00:00:28,230 ons gaan die berekening gelykstaande aantal bottels water 11 00:00:28,230 --> 00:00:30,770 dat die gebruiker het tydens hul stort, en dan is ons 12 00:00:30,770 --> 00:00:33,720 gaan om hulle te vertel deur uit te druk dat die getal. 13 00:00:33,720 --> 00:00:37,230 >> So laat ons pak ons ​​eerste taak, waarna en validering 14 00:00:37,230 --> 00:00:38,550 die toevoer van die gebruiker. 15 00:00:38,550 --> 00:00:40,910 Vir hierdie het ons geskrywe n funksie vir jou genoem 16 00:00:40,910 --> 00:00:43,950 get_int geleë in die CS50 biblioteek. 17 00:00:43,950 --> 00:00:48,710 get_int verseker dat die gebruiker insette 'n heelgetal, so enige positiewe getalle, 18 00:00:48,710 --> 00:00:51,700 negatiewe getalle, of nul is almal aanvaar. 19 00:00:51,700 --> 00:00:55,900 Maar as die gebruiker insette enigiets anders, so 'n kombinasie van letters of nommers 20 00:00:55,900 --> 00:00:59,710 of desimale getalle, dan is die gebruiker sal gevra word om weer te probeer 21 00:00:59,710 --> 00:01:04,319 en die funksie sal niks aanvaar totdat die gebruiker gee hulle 'n heelgetal. 22 00:01:04,319 --> 00:01:06,410 >> So, hoe doen ons gebruik get_int? 23 00:01:06,410 --> 00:01:10,830 As jy jou werkspasie oop en skep 'n lêer met die naam integer.c laat 24 00:01:10,830 --> 00:01:12,110 tik die volgende. 25 00:01:12,110 --> 00:01:14,760 Hashtag sluit cs50.h. 26 00:01:14,760 --> 00:01:18,480 Dit is nodig omdat get_int is 'n cs50 biblioteek funksie, 27 00:01:18,480 --> 00:01:21,890 dus moet ons hashtag insluit sy verklaring ten einde 28 00:01:21,890 --> 00:01:23,370 om die funksie te gebruik. 29 00:01:23,370 --> 00:01:26,570 En dan in my funksioneer Ek gaan net 30 00:01:26,570 --> 00:01:29,560 om net noem die funksie get_int. 31 00:01:29,560 --> 00:01:31,750 >> So laat ons hardloop dit en sien hoe dit werk. 32 00:01:31,750 --> 00:01:35,092 Ek het reeds opgestel het, so laat ons net voort te gaan en uit te voer hierdie program, 33 00:01:35,092 --> 00:01:36,480 ./heelgetal. 34 00:01:36,480 --> 00:01:39,880 Hier het ek 'n vinnige en hier is waar ek insette van die waarde. 35 00:01:39,880 --> 00:01:44,880 Sê Ek sit in net 'n paar heelgetal, 50, die program aanvaardt en verlaat 36 00:01:44,880 --> 00:01:45,960 en dit is dit. 37 00:01:45,960 --> 00:01:49,350 >> Maar Ek sê hardloop dit weer en Ek insette iets anders. 38 00:01:49,350 --> 00:01:51,350 Miskien, hello world. 39 00:01:51,350 --> 00:01:55,660 Dit is nie 'n heelgetal so die program sal my aanspoor om weer te probeer. 40 00:01:55,660 --> 00:01:59,160 Kom ons probeer weer met miskien 'n desimale hierdie tyd. 41 00:01:59,160 --> 00:02:03,450 0.5, weer, nie 'n heelgetal so die program sal dit nie aanvaar nie 42 00:02:03,450 --> 00:02:05,290 en dit sal vir my sê om weer te probeer. 43 00:02:05,290 --> 00:02:07,070 So kom ons gee dit 'n ander nommer. 44 00:02:07,070 --> 00:02:09,830 Die program aanvaar dit, gesluit, en ons klaar. 45 00:02:09,830 --> 00:02:13,520 >> So nou het ons 'n funksie wat ons toelaat en verseker 46 00:02:13,520 --> 00:02:16,790 dat die gebruiker insette n heelgetal, maar hoe kan ons 47 00:02:16,790 --> 00:02:20,330 eintlik hou van die heelgetal ingevoer deur die gebruiker? 48 00:02:20,330 --> 00:02:25,260 Wel, al wat ons sal doen, is om die winkel hierdie waarde in 'n veranderlike, sê N. 49 00:02:25,260 --> 00:02:30,580 So as ek verklaar 'n heelgetal n, En ek het dit waarde tot get_int, 50 00:02:30,580 --> 00:02:34,700 dan N sal dan slaan alles waardeer die gebruiker ingevoer. 51 00:02:34,700 --> 00:02:38,620 >> Goed, so nou het ons seker gemaak dat die gebruiker sal ons 'n heelgetal gee 52 00:02:38,620 --> 00:02:42,550 en ons weet hoe om tred te hou van die heelgetal, maar onthou, 53 00:02:42,550 --> 00:02:45,610 heelgetalle is beide positief en negatief. 54 00:02:45,610 --> 00:02:49,110 So dit maak nie regtig sin maak nie in die konteks van die probleem 55 00:02:49,110 --> 00:02:53,570 dat die gebruiker neem 'n stort van sê negatiewe 12 minute. 56 00:02:53,570 --> 00:02:59,310 Ons moet dus seker maak dat die gebruiker eintlik gee ons 'n positiewe heelgetal. 57 00:02:59,310 --> 00:03:02,130 Nou het ons nie net 'n enkele funksie vir daardie, 58 00:03:02,130 --> 00:03:04,620 so ons gaan hê te skep wat onsself. 59 00:03:04,620 --> 00:03:07,190 >> So ons wil om voortdurend gevra die gebruiker 60 00:03:07,190 --> 00:03:09,730 totdat hulle gee ons 'n positiewe heelgetal. 61 00:03:09,730 --> 00:03:14,300 As ek iets doen voortdurend daarna dit is soortgelyk aan 'n lus, 'n herhaling. 62 00:03:14,300 --> 00:03:19,130 So een van die konstrukte wat ons gebruik in c te implementeer herhaling en lusse 63 00:03:19,130 --> 00:03:20,410 is 'n while lus. 64 00:03:20,410 --> 00:03:23,020 So 'n while lus, soos hier getoon, sal voer 65 00:03:23,020 --> 00:03:27,030 alles wat in die liggaam van die lus as Solank as wat die gegewe toestand evalueer 66 00:03:27,030 --> 00:03:27,900 waar. 67 00:03:27,900 --> 00:03:30,640 Sodra daardie toestand evalueer om valse, dan 68 00:03:30,640 --> 00:03:34,830 die program sal voortgaan om alles kom nadat die liggaam van die lus. 69 00:03:34,830 --> 00:03:39,400 >> Dus, terwyl loops gaan wees regtig nuttig in CS50. 70 00:03:39,400 --> 00:03:42,590 Maar in hierdie spesifieke geval, ons weet dat ons 71 00:03:42,590 --> 00:03:48,140 gaan die gebruiker ten minste gevra een keer en dan net lus indien nodig. 72 00:03:48,140 --> 00:03:51,080 So hier kom ons by 'n spesiale konstruksie en dis 73 00:03:51,080 --> 00:03:55,020 baie soortgelyk aan die tyd lus bekend as 'n do-while lus. 74 00:03:55,020 --> 00:03:58,840 >> So 'n do-while lus voer die liggaam van die lus ten minste een keer 75 00:03:58,840 --> 00:04:01,750 en dan kontroleer om te sien of dit moet uit te voer, 76 00:04:01,750 --> 00:04:05,310 in teenstelling met 'n while lus, wat sal die toestand te monitor 77 00:04:05,310 --> 00:04:07,200 en dan die liggaam uit te voer. 78 00:04:07,200 --> 00:04:11,880 So in 'n do-while lus wat ons kan doen, is gevra die gebruiker vir 'n heelgetal, 79 00:04:11,880 --> 00:04:14,450 en dan kyk of dit is ongeldig of nie. 80 00:04:14,450 --> 00:04:18,130 As dit ongeldig, dan sal ons herhaal die proses vra die gebruiker 81 00:04:18,130 --> 00:04:22,290 ons gee 'n ander heelgetal, en dan net vir daardie heelgetal is geldig, 82 00:04:22,290 --> 00:04:25,060 Ons sal voortgaan om alles kom agterna. 83 00:04:25,060 --> 00:04:28,030 >> Nou sal jy sien dat die verklaring van die heelgetal n 84 00:04:28,030 --> 00:04:31,670 is 'n bietjie anders as wat ons het voor in die vorige voorbeeld 85 00:04:31,670 --> 00:04:33,640 en dit is as gevolg van die omvang. 86 00:04:33,640 --> 00:04:37,920 As ons die heelgetal n binnekant het verklaar van die liggaam van die do-while lus, 87 00:04:37,920 --> 00:04:42,640 dan sou ons nie in staat wees om toegang te verkry dat waarde van N buite die krullerige 88 00:04:42,640 --> 00:04:45,050 draadjies wat die liggaam van die lus. 89 00:04:45,050 --> 00:04:51,080 Maar ons het in werklikheid wil om toegang tot die waarde van N later in ons program. 90 00:04:51,080 --> 00:04:55,730 >> OK, so nou kom ons praat oor wat hierdie toestand moet wees. 91 00:04:55,730 --> 00:05:00,400 Ons wil net reprompt die gebruiker solank N is ongeldig. 92 00:05:00,400 --> 00:05:04,640 So dink aan jouself wat 'n ongeldige heelgetal waarde sou lyk 93 00:05:04,640 --> 00:05:08,060 en dan 'n Boole uitdrukking te druk nie. 94 00:05:08,060 --> 00:05:13,070 >> Ons is amper klaar met ons subtaak van waarna en bekragtiging van die gebruiker se toevoer. 95 00:05:13,070 --> 00:05:16,010 So kom ons maak dit 'n bietjie bietjie meer gebruikersvriendelik 96 00:05:16,010 --> 00:05:18,390 en 'n bietjie gee die gebruiker bietjie meer inligting 97 00:05:18,390 --> 00:05:20,510 van wat ons hulle is waarna vir. 98 00:05:20,510 --> 00:05:24,500 So laat ons vinnig die gebruiker, volgens die spec, met die string minute. 99 00:05:24,500 --> 00:05:28,935 So met jou printf state, maak seker dat jy dié wedstryd presies. 100 00:05:28,935 --> 00:05:30,230 >> Alles reg. 101 00:05:30,230 --> 00:05:33,840 So nou het ons 'n geldige gebruiker insette, 'n positiewe heelgetal 102 00:05:33,840 --> 00:05:37,400 waarde vir hoeveel minute hulle het in die stort. 103 00:05:37,400 --> 00:05:41,300 So, wat is volgende, is om te bereken die ekwivalente aantal bottels. 104 00:05:41,300 --> 00:05:45,250 Wat gaan ons hier doen kan baie duidelik na jou toe met die eerste, 105 00:05:45,250 --> 00:05:46,640 en dit is OK. 106 00:05:46,640 --> 00:05:49,320 Wat ons wil doen, is ons wil begin oefen 107 00:05:49,320 --> 00:05:53,810 die idee van die opsporing van patrone en ontwikkeling formules vir die probleem. 108 00:05:53,810 --> 00:05:57,200 >> So ons het per die spec dat 'n minuut in die stort 109 00:05:57,200 --> 00:05:59,960 is gelykstaande aan ongeveer 12 bottels water. 110 00:05:59,960 --> 00:06:03,020 So dan twee minute sou wees gelykstaande aan 24, 111 00:06:03,020 --> 00:06:05,850 en vyf minute sou wees gelykstaande aan 60. 112 00:06:05,850 --> 00:06:08,390 So nou as jy dink jy het dit, laat ons dan 113 00:06:08,390 --> 00:06:10,390 kyk of jy kan kom met 'n patroon of formule 114 00:06:10,390 --> 00:06:14,990 uit te druk as ons sê: N minute, hoeveel bottels water 115 00:06:14,990 --> 00:06:17,930 sou dit uitgedruk word in terme van n? 116 00:06:17,930 --> 00:06:20,680 >> Weereens, selfs al is dit eenvoudige dalk op die eerste, 117 00:06:20,680 --> 00:06:23,240 later op wanneer ons by ingewikkelder probleme 118 00:06:23,240 --> 00:06:26,360 ons gaan wil kry in die praktyk te identifiseer 119 00:06:26,360 --> 00:06:30,120 patrone en die ontwikkeling van formules om hierdie dinge uit te vind. 120 00:06:30,120 --> 00:06:33,450 >> In C het jy toegang tot standaard rekenkundige operasies, 121 00:06:33,450 --> 00:06:36,520 optel, aftrek, vermenigvuldiging, en afdeling. 122 00:06:36,520 --> 00:06:38,420 So ek sal dit laat jy nou om uit te vind 123 00:06:38,420 --> 00:06:41,300 hoe om die druk gelykstaande aantal bottels 124 00:06:41,300 --> 00:06:43,990 dat die gebruiker verbruik tydens hul stort. 125 00:06:43,990 --> 00:06:45,700 >> Goed, ons is amper klaar. 126 00:06:45,700 --> 00:06:50,650 Ons het die gebruiker vir hul insette gevra, Ons het seker gemaak dat dit geldige toevoer, 127 00:06:50,650 --> 00:06:53,330 en dan het ons uitgepluis het hoe om die ekwivalent bereken 128 00:06:53,330 --> 00:06:55,480 aantal bottels wat hulle verteer. 129 00:06:55,480 --> 00:06:59,430 So het die laaste ding om te doen is om uitset die ekwivalente aantal bottels 130 00:06:59,430 --> 00:07:02,410 en hopelik te moedig hulle 'n bietjie water te bespaar. 131 00:07:02,410 --> 00:07:06,270 >> Uitdruk die waarde sal 'n printf verklaring. 132 00:07:06,270 --> 00:07:09,720 As ek wou om jou te vertel dat ek het drie troeteldiere, byvoorbeeld, 133 00:07:09,720 --> 00:07:13,090 Ek kan 'n printf verklaring gebruik wat lyk iets soos hierdie. 134 00:07:13,090 --> 00:07:15,880 Ek het drie troeteldiere, en 'n nuwe lyn vir mooi opmaak. 135 00:07:15,880 --> 00:07:17,880 >> Nou het ons nie wil eenvoudig hard-kode dinge. 136 00:07:17,880 --> 00:07:20,740 Sê die getal van my troeteldiere verander met verloop van tyd. 137 00:07:20,740 --> 00:07:25,080 Toe ek gaan om gebruik te maak plekhouers in my printf verklaring. 138 00:07:25,080 --> 00:07:27,350 So hier is my nommer is 'n heelgetal. 139 00:07:27,350 --> 00:07:31,480 So ek gaan 'n plekhouer te maak vir 'n heelgetal met behulp van% i. 140 00:07:31,480 --> 00:07:33,930 Ek gaan die string te skryf, en dan na die string 141 00:07:33,930 --> 00:07:38,000 Ek skryf 'n komma en dan die veranderlike wat ek wil druk. 142 00:07:38,000 --> 00:07:42,730 Sodat waarde sal gedruk word in plaas van dat plekhouer,% i. 143 00:07:42,730 --> 00:07:47,630 >> Jy kan plekhouers gebruik, soos Wel, vir dryf met 'n% f. 144 00:07:47,630 --> 00:07:50,420 Jy kan ook verskeie plekhouers in 'n string. 145 00:07:50,420 --> 00:07:53,950 Byvoorbeeld, as ek het 'n paar nommer van honde en 'n paar aantal katte, 146 00:07:53,950 --> 00:07:59,210 Ek sit twee plekhouers hier en dan my twee veranderlikes in onderskeie orde. 147 00:07:59,210 --> 00:08:03,130 >> So nou dat ons weet hoe om te druk die waardes gestoor in veranderlikes, 148 00:08:03,130 --> 00:08:06,030 die heel laaste ding om te doen, is om ons te verseker 149 00:08:06,030 --> 00:08:10,920 druk die waarde in die presiese formaat aangedui in die spesifikasie. 150 00:08:10,920 --> 00:08:14,990 Met dit, het ons daartoe gelei dat die gebruiker en bekragtig hul insette. 151 00:08:14,990 --> 00:08:17,920 Ons het dan bereken die ekwivalent aantal bottels water 152 00:08:17,920 --> 00:08:22,100 dat hulle verteer tydens hul stort, en ons het dit waarde vir hulle outputted. 153 00:08:22,100 --> 00:08:24,440 En so het ons water voltooi. 154 00:08:24,440 --> 00:08:28,730 >> My naam is [? Zamila,?] en dit is CS50. 155 00:08:28,730 --> 00:08:29,909