1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:01,960 SPEAKER 1: Laten we praten over water. 3 00:00:01,960 --> 00:00:07,280 In dit probleem, vragen we de gebruiker om te vertellen ons hoe lang in minuten hun douche was 4 00:00:07,280 --> 00:00:11,040 en dan berekenen we het equivalent aantal flessen water 5 00:00:11,040 --> 00:00:12,970 dat hun douche gebruikt. 6 00:00:12,970 --> 00:00:16,379 >> Dus wat zijn onze to-do's voor dit probleem? 7 00:00:16,379 --> 00:00:20,050 In de eerste plaats gaan we willen om onmiddellijke en vervolgens valideren 8 00:00:20,050 --> 00:00:22,100 de input die de gebruiker geeft ons. 9 00:00:22,100 --> 00:00:24,790 Zodra we ervoor zorgen dat we geldige input van de gebruiker, 10 00:00:24,790 --> 00:00:28,230 we gaan naar het berekenen equivalent aantal flessen water 11 00:00:28,230 --> 00:00:30,770 dat de gebruiker hadden tijdens hun douche, en dan zijn we 12 00:00:30,770 --> 00:00:33,720 gaan ze vertellen door afdrukken van dat nummer. 13 00:00:33,720 --> 00:00:37,230 >> Dus laten we pakken onze eerste taak, wordt gevraagd en valideren 14 00:00:37,230 --> 00:00:38,550 de gebruikersinvoer. 15 00:00:38,550 --> 00:00:40,910 Hiervoor hebben we geschreven -functie voor je geroepen 16 00:00:40,910 --> 00:00:43,950 get_int gelegen in het CS50 Library. 17 00:00:43,950 --> 00:00:48,710 get_int zorgt ervoor dat de gebruiker ingangen een integer, zodat positieve getallen, 18 00:00:48,710 --> 00:00:51,700 negatieve getallen, of nul worden geaccepteerd. 19 00:00:51,700 --> 00:00:55,900 Maar als de gebruiker voert iets anders, dus elke combinatie van letters of cijfers 20 00:00:55,900 --> 00:00:59,710 of kommagetallen, dan de gebruiker wordt gevraagd om opnieuw te proberen 21 00:00:59,710 --> 00:01:04,319 en de functie zal niets aanvaarden totdat de gebruiker geeft hen een integer. 22 00:01:04,319 --> 00:01:06,410 >> Dus hoe kunnen we gebruiken get_int? 23 00:01:06,410 --> 00:01:10,830 Als u uw werkruimte openen en maak een bestand met de naam integer.c laten 24 00:01:10,830 --> 00:01:12,110 typt u het volgende. 25 00:01:12,110 --> 00:01:14,760 Hashtag cs50.h. 26 00:01:14,760 --> 00:01:18,480 Dit is nodig omdat get_int is een CS50 bibliotheekfunctie, 27 00:01:18,480 --> 00:01:21,890 dus we moeten hashtag zijn verklaring in orde 28 00:01:21,890 --> 00:01:23,370 de functie. 29 00:01:23,370 --> 00:01:26,570 En dan in mijn belangrijkste functioneren Ik ga gewoon 30 00:01:26,570 --> 00:01:29,560 om gewoon te bellen met de functie get_int. 31 00:01:29,560 --> 00:01:31,750 >> Dus laten we lopen dit en zien hoe het werkt. 32 00:01:31,750 --> 00:01:35,092 Ik heb het al gecompileerd, dus laten we gewoon doorgaan en lopen dit programma, 33 00:01:35,092 --> 00:01:36,480 ./geheel getal. 34 00:01:36,480 --> 00:01:39,880 Hier heb ik een snelle en hier is waar ik het invoeren van de waarde. 35 00:01:39,880 --> 00:01:44,880 Zeg ik in slechts enkele integer, 50, het programma excepts en wordt afgesloten 36 00:01:44,880 --> 00:01:45,960 en dat is dat. 37 00:01:45,960 --> 00:01:49,350 >> Maar zeggen dat ik het draaien weer en I ingang iets anders. 38 00:01:49,350 --> 00:01:51,350 Misschien, hello wereld. 39 00:01:51,350 --> 00:01:55,660 Dat is geen geheel getal is, zodat de programma zal me gevraagd om opnieuw te proberen. 40 00:01:55,660 --> 00:01:59,160 Laten we proberen opnieuw met misschien een decimale deze tijd. 41 00:01:59,160 --> 00:02:03,450 0,5 wederom geen geheel zo het programma zal het niet accepteren 42 00:02:03,450 --> 00:02:05,290 en het zal me vertellen om opnieuw te proberen. 43 00:02:05,290 --> 00:02:07,070 Dus laten we het een ander nummer. 44 00:02:07,070 --> 00:02:09,830 Het programma aanvaardt, afgesloten en we zijn klaar. 45 00:02:09,830 --> 00:02:13,520 >> Dus nu hebben we een functie die ons in staat stelt en garandeert 46 00:02:13,520 --> 00:02:16,790 dat de gebruiker voert een integer, maar hoe kunnen we 47 00:02:16,790 --> 00:02:20,330 eigenlijk bijhouden van de integer ingevoerd door de gebruiker? 48 00:02:20,330 --> 00:02:25,260 Nou, alles wat we doen is op te slaan deze waarde in een variabele, zeg n. 49 00:02:25,260 --> 00:02:30,580 Dus als ik verklaar een integer n, en ik die waarde te get_int, 50 00:02:30,580 --> 00:02:34,700 dan n zal dan slaan wat waardeert de gebruiker ingevoerd. 51 00:02:34,700 --> 00:02:38,620 >> Oké, dus nu hebben we ervoor gezorgd dat de gebruiker zal ons een integer te geven 52 00:02:38,620 --> 00:02:42,550 en we weten hoe om bij te houden van de integer, maar vergeet niet, 53 00:02:42,550 --> 00:02:45,610 integers zijn zowel positieve als negatieve. 54 00:02:45,610 --> 00:02:49,110 Dus het maakt niet echt zinvol in het kader van deze problematiek 55 00:02:49,110 --> 00:02:53,570 dat de gebruiker neemt een douche van zeg negatieve 12 minuten. 56 00:02:53,570 --> 00:02:59,310 Dus moeten we ervoor zorgen dat de gebruiker eigenlijk geeft ons een positief geheel getal. 57 00:02:59,310 --> 00:03:02,130 Nu hebben we niet alleen een enkele functie daarvoor, 58 00:03:02,130 --> 00:03:04,620 dus we gaan om te hebben creëren dat zelf. 59 00:03:04,620 --> 00:03:07,190 >> Dus we willen voortdurend vraagt ​​de gebruiker 60 00:03:07,190 --> 00:03:09,730 totdat ze geven ons een positief geheel getal. 61 00:03:09,730 --> 00:03:14,300 Als ik iets te doen dan continu dat verwant is aan een lus, een herhaling. 62 00:03:14,300 --> 00:03:19,130 Dus een van de constructen die we gebruiken c in te voeren herhaling en loops 63 00:03:19,130 --> 00:03:20,410 is een while lus. 64 00:03:20,410 --> 00:03:23,020 Dus een tijdje loop, zoals hier getoond, wordt uitgevoerd 65 00:03:23,020 --> 00:03:27,030 wat in het lichaam van de lus zolang de gegeven voorwaarde evalueert 66 00:03:27,030 --> 00:03:27,900 op true. 67 00:03:27,900 --> 00:03:30,640 Zodra deze voorwaarde onwaar, dan 68 00:03:30,640 --> 00:03:34,830 het programma zal overgaan tot wat komt nadat het lichaam van de lus. 69 00:03:34,830 --> 00:03:39,400 >> Dus terwijl loops gaan zijn echt nuttig in CS50. 70 00:03:39,400 --> 00:03:42,590 Maar in dit geval, we weten dat we 71 00:03:42,590 --> 00:03:48,140 naar de gebruiker minstens gevraagd een keer en dan alleen loop indien nodig. 72 00:03:48,140 --> 00:03:51,080 Dus hier komen we tot een speciale constructie en dat is 73 00:03:51,080 --> 00:03:55,020 vergelijkbaar met de while lus wel een do-while-lus. 74 00:03:55,020 --> 00:03:58,840 >> Dus een do-while lus voert de orgaan van de lus ten minste eenmaal 75 00:03:58,840 --> 00:04:01,750 en controleert dan om te zien of het moet worden uitgevoerd, 76 00:04:01,750 --> 00:04:05,310 in tegenstelling tot een while lus, die zal de conditie controleren 77 00:04:05,310 --> 00:04:07,200 en daarna het lichaam te voeren. 78 00:04:07,200 --> 00:04:11,880 Dus in een do-while lus wat we zouden kunnen doen is vraagt ​​de gebruiker om een ​​integer, 79 00:04:11,880 --> 00:04:14,450 en dan controleren of het ongeldig of niet. 80 00:04:14,450 --> 00:04:18,130 Als het ongeldig is, dan zullen we herhaal het proces waarin de gebruiker 81 00:04:18,130 --> 00:04:22,290 om ons nog een integer, en vervolgens Alleen wanneer deze integer geldig, 82 00:04:22,290 --> 00:04:25,060 we blijven wat komt daarna. 83 00:04:25,060 --> 00:04:28,030 >> Nu zult u merken dat de verklaring van de integer n 84 00:04:28,030 --> 00:04:31,670 is iets anders dan wat we voorheen in het vorige voorbeeld 85 00:04:31,670 --> 00:04:33,640 en dit is vanwege scope. 86 00:04:33,640 --> 00:04:37,920 Als we het getal n binnenkant had verklaard van het lichaam van de do-while lus, 87 00:04:37,920 --> 00:04:42,640 dan zouden we niet in staat zijn om toegang te krijgen deze waarde van n buiten deze curly 88 00:04:42,640 --> 00:04:45,050 bretels met vermelding van het lichaam van de lus. 89 00:04:45,050 --> 00:04:51,080 Maar we willen eigenlijk wilt toegang tot de waarde van n later in ons programma. 90 00:04:51,080 --> 00:04:55,730 >> OK, dus nu laten we praten over Wat deze voorwaarde zou moeten zijn. 91 00:04:55,730 --> 00:05:00,400 We willen alleen de reprompt gebruiker zolang n is ongeldig. 92 00:05:00,400 --> 00:05:04,640 Dus denk je bij jezelf wat een ongeldige integer waarde zou uitzien 93 00:05:04,640 --> 00:05:08,060 en maak vervolgens een Booleaanse uitdrukking aan te geven dat. 94 00:05:08,060 --> 00:05:13,070 >> We zijn bijna klaar met onze deeltaak van gevraagd en valideren van input van de gebruiker. 95 00:05:13,070 --> 00:05:16,010 Dus laten we dit een beetje bit gebruiksvriendelijker 96 00:05:16,010 --> 00:05:18,390 en een beetje geven de gebruiker bit meer informatie 97 00:05:18,390 --> 00:05:20,510 van wat wij hen nu gevraagd voor. 98 00:05:20,510 --> 00:05:24,500 Dus laten we de gebruiker vragen, per de spec, met de string minuut. 99 00:05:24,500 --> 00:05:28,935 Dus met behulp van uw printf verklaringen, maken ervoor dat u deze exact overeenkomen. 100 00:05:28,935 --> 00:05:30,230 >> Okee. 101 00:05:30,230 --> 00:05:33,840 Dus nu hebben we een geldige gebruikersnaam ingang een positief geheel getal 102 00:05:33,840 --> 00:05:37,400 waarde voor hoeveel minuten brachten ze in de douche. 103 00:05:37,400 --> 00:05:41,300 Dus wat is de volgende stap is om te berekenen het equivalent aantal flessen. 104 00:05:41,300 --> 00:05:45,250 Wat we gaan doen hier misschien zeer duidelijk voor u op het eerste, 105 00:05:45,250 --> 00:05:46,640 en dat is OK. 106 00:05:46,640 --> 00:05:49,320 Wat we willen doen is dat we wilt beginnen met oefenen 107 00:05:49,320 --> 00:05:53,810 het idee detecteren patronen en ontwikkelen formules voor het probleem. 108 00:05:53,810 --> 00:05:57,200 >> Dus we vertelden per de spec dat één minuut in de douche 109 00:05:57,200 --> 00:05:59,960 is gelijk aan ongeveer 12 flessen water. 110 00:05:59,960 --> 00:06:03,020 Dus dan twee minuten zou gelijk aan 24, 111 00:06:03,020 --> 00:06:05,850 en vijf minuten zou gelijk aan 60. 112 00:06:05,850 --> 00:06:08,390 Dus nu als je denkt je hebt het, laten we dan 113 00:06:08,390 --> 00:06:10,390 kijk of je kunt komen met een patroon of formule 114 00:06:10,390 --> 00:06:14,990 uit te drukken als we zeggen, n minuten, hoeveel flessen water 115 00:06:14,990 --> 00:06:17,930 dat zou worden uitgedrukt in termen van n? 116 00:06:17,930 --> 00:06:20,680 >> Nogmaals, hoewel deze eenvoudig kan op het eerste, 117 00:06:20,680 --> 00:06:23,240 Later als we in ingewikkelder problemen 118 00:06:23,240 --> 00:06:26,360 we gaan willen krijgen in de praktijk van identificatie 119 00:06:26,360 --> 00:06:30,120 patronen en ontwikkelen formules om deze dingen uit te zoeken. 120 00:06:30,120 --> 00:06:33,450 >> In c heb je toegang tot standaard rekenkundige bewerkingen, 121 00:06:33,450 --> 00:06:36,520 optellen, aftrekken, vermenigvuldigen en delen. 122 00:06:36,520 --> 00:06:38,420 Dus ik laat het aan jullie nu om erachter te komen 123 00:06:38,420 --> 00:06:41,300 hoe het te uiten equivalent aantal flessen 124 00:06:41,300 --> 00:06:43,990 dat de gebruiker geconsumeerd tijdens hun douche. 125 00:06:43,990 --> 00:06:45,700 >> Oké, we zijn bijna klaar. 126 00:06:45,700 --> 00:06:50,650 We hebben de gebruiker voor hun inbreng wordt gevraagd, we hebben ervoor gezorgd dat het een geldige invoer, 127 00:06:50,650 --> 00:06:53,330 en dan hebben we bedacht hoe De overeenkomstige berekening 128 00:06:53,330 --> 00:06:55,480 aantal flessen die zij verbruikt. 129 00:06:55,480 --> 00:06:59,430 Dus het laatste wat te doen is om de uitgang het equivalent aantal flessen 130 00:06:59,430 --> 00:07:02,410 en hopelijk aan te moedigen hen om wat water te besparen. 131 00:07:02,410 --> 00:07:06,270 >> Afgeven van de waarde zijn een printf statement. 132 00:07:06,270 --> 00:07:09,720 Als ik wilde je vertellen dat ik drie huisdieren, bijvoorbeeld, 133 00:07:09,720 --> 00:07:13,090 Ik heb misschien een printf statement gebruiken dat ziet er ongeveer als volgt uit. 134 00:07:13,090 --> 00:07:15,880 Ik heb drie huisdieren, en een nieuwe lijn voor sfeervolle formatteren. 135 00:07:15,880 --> 00:07:17,880 >> Nu willen we niet aan gewoon harde code dingen. 136 00:07:17,880 --> 00:07:20,740 Zeggen dat het aantal van mijn huisdieren veranderingen in de tijd. 137 00:07:20,740 --> 00:07:25,080 Dan ga ik om gebruik te maken placeholders in mijn printf statement. 138 00:07:25,080 --> 00:07:27,350 Dus hier mijn nummer is een integer. 139 00:07:27,350 --> 00:07:31,480 Dus ik ga een placeholder maken voor een integer gebruik% i. 140 00:07:31,480 --> 00:07:33,930 Ik ga naar de string te schrijven, en dan na de string 141 00:07:33,930 --> 00:07:38,000 Ik schrijf een komma en vervolgens de variabele die ik wil afdrukken. 142 00:07:38,000 --> 00:07:42,730 Zodat waarde wordt afgedrukt in plaats van dat placeholder,% i. 143 00:07:42,730 --> 00:07:47,630 >> U kunt tijdelijke aanduidingen gebruiken, zoals goed, voor wagens met een f%. 144 00:07:47,630 --> 00:07:50,420 U kunt ook meerdere placeholders in een string. 145 00:07:50,420 --> 00:07:53,950 Bijvoorbeeld, als ik een getal honden en katten bepaald aantal, 146 00:07:53,950 --> 00:07:59,210 Ik zet twee placeholders hier en dan mijn twee variabelen in de respectievelijke volgorde. 147 00:07:59,210 --> 00:08:03,130 >> Dus nu we weten hoe u kunt afdrukken de waarden opgeslagen in variabelen 148 00:08:03,130 --> 00:08:06,030 het laatste ding om doen, is dat we ervoor zorgen 149 00:08:06,030 --> 00:08:10,920 print de waarde in de juiste vorm aangegeven in de beschrijving. 150 00:08:10,920 --> 00:08:14,990 Met dat, hebben we gevraagd of het gebruiker en gevalideerd hun inbreng. 151 00:08:14,990 --> 00:08:17,920 We hebben dan berekend het equivalent aantal flessen water 152 00:08:17,920 --> 00:08:22,100 dat ze verbruiken tijdens hun douche, en we hebben die waarde voor hen uitgevoerd. 153 00:08:22,100 --> 00:08:24,440 En dus hebben we water voltooid. 154 00:08:24,440 --> 00:08:28,730 >> Mijn naam is [? Zamila,?] en dit is CS50. 155 00:08:28,730 --> 00:08:29,909