SPREKER 1: Kom ons praat oor water.
In hierdie probleem, vra ons die gebruiker in staat om te vertel ons hoe lank in minute hul stort was
en dan bereken ons die ekwivalent aantal bottels water
dat hulle stort gebruik.
>> So, wat is ons to-do's vir hierdie probleem?
In die eerste plek gaan ons wil om vinnig en dan bekragtig
die insette wat die gebruiker gee ons.
Sodra ons verseker dat ons geldige toevoer van die gebruiker,
ons gaan die berekening gelykstaande aantal bottels water
dat die gebruiker het tydens hul stort, en dan is ons
gaan om hulle te vertel deur uit te druk dat die getal.
>> So laat ons pak ons ​​eerste taak, waarna en validering
die toevoer van die gebruiker.
Vir hierdie het ons geskrywe n funksie vir jou genoem
get_int geleë in die CS50 biblioteek.
get_int verseker dat die gebruiker insette 'n heelgetal, so enige positiewe getalle,
negatiewe getalle, of nul is almal aanvaar.
Maar as die gebruiker insette enigiets anders, so 'n kombinasie van letters of nommers
of desimale getalle, dan is die gebruiker sal gevra word om weer te probeer
en die funksie sal niks aanvaar totdat die gebruiker gee hulle 'n heelgetal.
>> So, hoe doen ons gebruik get_int?
As jy jou werkspasie oop en skep 'n lêer met die naam integer.c laat
tik die volgende.
Hashtag sluit cs50.h.
Dit is nodig omdat get_int is 'n cs50 biblioteek funksie,
dus moet ons hashtag insluit sy verklaring ten einde
om die funksie te gebruik.
En dan in my funksioneer Ek gaan net
om net noem die funksie get_int.
>> So laat ons hardloop dit en sien hoe dit werk.
Ek het reeds opgestel het, so laat ons net voort te gaan en uit te voer hierdie program,
./heelgetal.
Hier het ek 'n vinnige en hier is waar ek insette van die waarde.
Sê Ek sit in net 'n paar heelgetal, 50, die program aanvaardt en verlaat
en dit is dit.
>> Maar Ek sê hardloop dit weer en Ek insette iets anders.
Miskien, hello world.
Dit is nie 'n heelgetal so die program sal my aanspoor om weer te probeer.
Kom ons probeer weer met miskien 'n desimale hierdie tyd.
0.5, weer, nie 'n heelgetal so die program sal dit nie aanvaar nie
en dit sal vir my sê om weer te probeer.
So kom ons gee dit 'n ander nommer.
Die program aanvaar dit, gesluit, en ons klaar.
>> So nou het ons 'n funksie wat ons toelaat en verseker
dat die gebruiker insette n heelgetal, maar hoe kan ons
eintlik hou van die heelgetal ingevoer deur die gebruiker?
Wel, al wat ons sal doen, is om die winkel hierdie waarde in 'n veranderlike, sê N.
So as ek verklaar 'n heelgetal n, En ek het dit waarde tot get_int,
dan N sal dan slaan alles waardeer die gebruiker ingevoer.
>> Goed, so nou het ons seker gemaak dat die gebruiker sal ons 'n heelgetal gee
en ons weet hoe om tred te hou van die heelgetal, maar onthou,
heelgetalle is beide positief en negatief.
So dit maak nie regtig sin maak nie in die konteks van die probleem
dat die gebruiker neem 'n stort van sê negatiewe 12 minute.
Ons moet dus seker maak dat die gebruiker eintlik gee ons 'n positiewe heelgetal.
Nou het ons nie net 'n enkele funksie vir daardie,
so ons gaan hê te skep wat onsself.
>> So ons wil om voortdurend gevra die gebruiker
totdat hulle gee ons 'n positiewe heelgetal.
As ek iets doen voortdurend daarna dit is soortgelyk aan 'n lus, 'n herhaling.
So een van die konstrukte wat ons gebruik in c te implementeer herhaling en lusse
is 'n while lus.
So 'n while lus, soos hier getoon, sal voer
alles wat in die liggaam van die lus as Solank as wat die gegewe toestand evalueer
waar.
Sodra daardie toestand evalueer om valse, dan
die program sal voortgaan om alles kom nadat die liggaam van die lus.
>> Dus, terwyl loops gaan wees regtig nuttig in CS50.
Maar in hierdie spesifieke geval, ons weet dat ons
gaan die gebruiker ten minste gevra een keer en dan net lus indien nodig.
So hier kom ons by 'n spesiale konstruksie en dis
baie soortgelyk aan die tyd lus bekend as 'n do-while lus.
>> So 'n do-while lus voer die liggaam van die lus ten minste een keer
en dan kontroleer om te sien of dit moet uit te voer,
in teenstelling met 'n while lus, wat sal die toestand te monitor
en dan die liggaam uit te voer.
So in 'n do-while lus wat ons kan doen, is gevra die gebruiker vir 'n heelgetal,
en dan kyk of dit is ongeldig of nie.
As dit ongeldig, dan sal ons herhaal die proses vra die gebruiker
ons gee 'n ander heelgetal, en dan net vir daardie heelgetal is geldig,
Ons sal voortgaan om alles kom agterna.
>> Nou sal jy sien dat die verklaring van die heelgetal n
is 'n bietjie anders as wat ons het voor in die vorige voorbeeld
en dit is as gevolg van die omvang.
As ons die heelgetal n binnekant het verklaar van die liggaam van die do-while lus,
dan sou ons nie in staat wees om toegang te verkry dat waarde van N buite die krullerige
draadjies wat die liggaam van die lus.
Maar ons het in werklikheid wil om toegang tot die waarde van N later in ons program.
>> OK, so nou kom ons praat oor wat hierdie toestand moet wees.
Ons wil net reprompt die gebruiker solank N is ongeldig.
So dink aan jouself wat 'n ongeldige heelgetal waarde sou lyk
en dan 'n Boole uitdrukking te druk nie.
>> Ons is amper klaar met ons subtaak van waarna en bekragtiging van die gebruiker se toevoer.
So kom ons maak dit 'n bietjie bietjie meer gebruikersvriendelik
en 'n bietjie gee die gebruiker bietjie meer inligting
van wat ons hulle is waarna vir.
So laat ons vinnig die gebruiker, volgens die spec, met die string minute.
So met jou printf state, maak seker dat jy dié wedstryd presies.
>> Alles reg.
So nou het ons 'n geldige gebruiker insette, 'n positiewe heelgetal
waarde vir hoeveel minute hulle het in die stort.
So, wat is volgende, is om te bereken die ekwivalente aantal bottels.
Wat gaan ons hier doen kan baie duidelik na jou toe met die eerste,
en dit is OK.
Wat ons wil doen, is ons wil begin oefen
die idee van die opsporing van patrone en ontwikkeling formules vir die probleem.
>> So ons het per die spec dat 'n minuut in die stort
is gelykstaande aan ongeveer 12 bottels water.
So dan twee minute sou wees gelykstaande aan 24,
en vyf minute sou wees gelykstaande aan 60.
So nou as jy dink jy het dit, laat ons dan
kyk of jy kan kom met 'n patroon of formule
uit te druk as ons sê: N minute, hoeveel bottels water
sou dit uitgedruk word in terme van n?
>> Weereens, selfs al is dit eenvoudige dalk op die eerste,
later op wanneer ons by ingewikkelder probleme
ons gaan wil kry in die praktyk te identifiseer
patrone en die ontwikkeling van formules om hierdie dinge uit te vind.
>> In C het jy toegang tot standaard rekenkundige operasies,
optel, aftrek, vermenigvuldiging, en afdeling.
So ek sal dit laat jy nou om uit te vind
hoe om die druk gelykstaande aantal bottels
dat die gebruiker verbruik tydens hul stort.
>> Goed, ons is amper klaar.
Ons het die gebruiker vir hul insette gevra, Ons het seker gemaak dat dit geldige toevoer,
en dan het ons uitgepluis het hoe om die ekwivalent bereken
aantal bottels wat hulle verteer.
So het die laaste ding om te doen is om uitset die ekwivalente aantal bottels
en hopelik te moedig hulle 'n bietjie water te bespaar.
>> Uitdruk die waarde sal 'n printf verklaring.
As ek wou om jou te vertel dat ek het drie troeteldiere, byvoorbeeld,
Ek kan 'n printf verklaring gebruik wat lyk iets soos hierdie.
Ek het drie troeteldiere, en 'n nuwe lyn vir mooi opmaak.
>> Nou het ons nie wil eenvoudig hard-kode dinge.
Sê die getal van my troeteldiere verander met verloop van tyd.
Toe ek gaan om gebruik te maak plekhouers in my printf verklaring.
So hier is my nommer is 'n heelgetal.
So ek gaan 'n plekhouer te maak vir 'n heelgetal met behulp van% i.
Ek gaan die string te skryf, en dan na die string
Ek skryf 'n komma en dan die veranderlike wat ek wil druk.
Sodat waarde sal gedruk word in plaas van dat plekhouer,% i.
>> Jy kan plekhouers gebruik, soos Wel, vir dryf met 'n% f.
Jy kan ook verskeie plekhouers in 'n string.
Byvoorbeeld, as ek het 'n paar nommer van honde en 'n paar aantal katte,
Ek sit twee plekhouers hier en dan my twee veranderlikes in onderskeie orde.
>> So nou dat ons weet hoe om te druk die waardes gestoor in veranderlikes,
die heel laaste ding om te doen, is om ons te verseker
druk die waarde in die presiese formaat aangedui in die spesifikasie.
Met dit, het ons daartoe gelei dat die gebruiker en bekragtig hul insette.
Ons het dan bereken die ekwivalent aantal bottels water
dat hulle verteer tydens hul stort, en ons het dit waarde vir hulle outputted.
En so het ons water voltooi.
>> My naam is [? Zamila,?] en dit is CS50.