>> [Музыка Прайграванне]
>> ZAMYLA чан: Што б вы аддалі перавагу атрымаць $ 10000000 прама зараз ці атрымаць
пені кожны дзень месяца, дзе кожны наступны дзень, вы атрымліваеце
у два разы больш пені вы атрымалі напярэдадні?
У драбяза, мы збіраемся даказаць, чаму вы павінны
вызначана ўзяў капейкі.
Ваша задача, каб напісаць pennies.c--
праграму, якая спачатку пытаецца карыстальніка, як колькі дзён у месяцы і
Затым пытаецца, колькі грошаў карыстальніка атрымае ў першы дзень.
Праграма павінна затым вылічыць суму, якую карыстальнік будзе мець
назапашаны ў канцы месяц і паказаць яго.
>> Мы можам разбіць гэтую праграму да у некалькі задач.
Нам трэба будзе запытваць некалькі ўваходаў карыстальніка -
дні і месяцы, i грошы на першы дзень.
Мы павінны адсочваць, колькі грошай Карыстальнік мае і абнаўляць яго кожныя
дзень, падваенне колькасці пені, якія яны атрымліваюць.
І, нарэшце, мы друкуем іх выніковая сума, у далярах.
>> Давайце снасці ўваходу карыстача ў першую чаргу.
Я збіраюся адкрыць apples.c, кароткая праграма, якая займаецца
з ўваходамі і выхадамі.
У верхняй тут, я ўключыў некаторыя бібліятэк, што мне трэба, -
CS50 бібліятэку і стандартны Бібліятэка ўводу / высновы.
Я друкую радкі з дапамогай Е функцыю з
стандартная бібліятэка ўводу / высновы.
Але фактычны выснову запыту адбываецца ў наступным радку з гэтым
GetInt функцыі ў CS50 бібліятэкі.
>> GetInt атрымлівае ўваходныя дадзеныя ад карыстальніка і гарантуе, што ўваход з'яўляецца цэлым лікам.
Так я захоўваю ўваходу карыстача ў цэлае Я, адняць 1 з I, а затым
раздрукаваць новае значэнне, калі я.
Пасля кампіляцыі apples.c дапамогай Каманда "зрабіць яблыкі," У мяне ёсць
Яблыкі выкананы файл.
Запуск гэтага, я буду ўваходу 1.
Праграма распавядае мне, што У мяне ёсць 0 яблыкаў засталося.
І так, каб працавалі як чакалася.
>> Так давайце запусцім гэта зноў і адмоўным уваходам 1.
Зараз, маючы адмоўнае колькасць яблыкаў на самай справе не мае сэнсу, але
Праграма прымае яго, таму што недахоп 1, ну, гэта з'яўляецца цэлым лікам.
А цяпер праграма або монстра ўнутры праграмы есць адмоўным
яблык, і зараз у мяне ёсць адмоўнымі 2 яблыка.
Хм, так вось адзін урок -
хоць функцыя і GetInt функцый, звязаных як GetFlow або
GetString атрымаць правільны тып дадзеных, павінны пераканацца, што ўваходныя робіць
для вашай праграмы.
>> У грошы, ён не будзе рабіць як раз спраўны для цэлага, вы павінны будзеце зрабіць
Пераканайцеся, што карыстач уводзіць цэлае якія маюць сэнс дадзенага кантэксту.
Месяц можа мець толькі 28, 29, 30 або 31 дзён.
Мы хочам пастаянна патрабаваць дапушчальнае цэлы лік.
Калі яны ўводзяць цэлае за межамі нашай прынятых межаў, мы будзем падказваць ім
ня зноў і зноў, пакуль вы даць нам сапраўднае цэлае.
>> Нагадаем, "Repeat Until" блакаваць ў пустым месцы?
Вы можаце зрабіць аналагічную канструкцыю, у Сі з ", а" пятля
або "зрабі той час як" пятлю.
Структуры ў той час як пятля мае стан якія павінны быць выкананы для
целе цыкла для выканання.
>> Гэта павінна выглядаць трохі падобныя, таму што ўмова гэтак жа, як
Драпіны блокаў з кутамі і ідзе ў дужках
з ", а" пятлю.
Так што ўмова будзе правяраць цэлае знаходзіцца ў межах
адпаведных межаў.
Вы можаце падказаць цэлы лік, выкарыстоўваючы GetInt а затым выканаць вашы ", а"
завесы, паўтараючы хуткага і друку інструкцый, у той час як ўваходных
не зьяўляецца дапушчальным.
>> Яшчэ адзін спосаб забяспечыць правільны ўваход карыстальніка з'яўляецца выкарыстанне "зрабі той час як" завесы,
які вельмі падобны на нейкі час цыклу.
"Зрабі той час як" пятля выконвае код ўнутры цела тыя, і затым правярае
Ці ўмова ці не.
Гэта карысна для атрымання карыстацкага ўводу таму што вы ведаеце, што вам трэба
каб падштурхнуць іх хоць бы раз.
Калі ўмова не выконваецца, праграма будзе выконваць лінію пасля
Вашай "зрабі той час як" пятлю.
Калі ўмова выконваецца, хоць, цыкл будзе паўтарацца
>> "Зрабі той час як" пятля для праверкі карыстацкага ўваход будзе выглядаць прыкладна так.
Я абвясціць зменную N, GetInt і затым паўтарыце, пакуль N не з'яўляецца сапраўдным.
І гэты працэс, я патлумачыў, выкарыстаў цэлалікавых тыпаў дадзеных, якія
Вы будзеце выкарыстоўваць для дзён месяца.
Але мы ведаем, што колькасць капейкі будуць назапашвацца хутчэй, таму для таго, каб
захоўваць вялікія ліку, выкарыстаць гэты тып дадзеных LongLong, але памятайце, тое ж
Прынцып праверкі ўжываецца.
>> Дзіўны, таму, як толькі ў нас ёсць два сапраўдных уводаў ад карыстальніка -
дзён у месяцы і капейкі У першы дзень -
мы можам перайсці да наступнага часткі праграмы.
У першы дзень, карыстальнік пачынае з Аднак многія грошы яны пазначаны
і колькасць пені, што яны атрымаць на наступны дзень у два разы.
Так што мае сэнс адсочваць з гэтых двух сум -
колькі грошай у карыстальніка і як многія грошы яны дадуць.
>> Зараз, рабіць нешта для 28 да 31 дзён паўтараюцца, так што давайце выкарыстоўваць "для"
завесы для перабору дзён месяц, абнаўленне агульнага і Пені
складуць кожны раз.
«За» сінтаксіс цыклу ўтрымлівае наступнае -
ініцыялізацыя, ўмова, і абнаўлення.
Вашы "за" цыкл ініцыялізацыі зменнай, калі яна
першая ўваходзіць у цыкл.
Калі ўмова выконваецца, то цела цыклу будзе выконвацца.
Пасля гэтага абнаўлення будуць выконвацца.
Калі ўмову ўсё яшчэ выконваецца, цыкл будзе выконвацца і абнаўлення, і
Паўтараю, пакуль ваш стан ацэньваецца як ісціна.
>> Вось "за" цыкл, які дзеліць цэлага р 2 у агульнай складанасці 10 разоў.
Звярніце ўвагу, як я абвясціў цэлых р па-за маё "за" завесы, такім чынам, каб
цэлае можа быць даступная за межамі "для" цыклу.
Пасля месяца прайшло, пара каб паведаміць карыстальніку, колькі грошай
яны атрымалі.
Згодна з спецыфікацыі, вы павінны сказаць карыстачу колькі даляраў, а не як многія
грошы, якія яны маюць.
Але да гэтага часу, вы сачылі за Усяго i грошы выкарыстаннем LongLongs,
якія з'яўляюцца цэлымі лікамі.
>> Ёсць 100 пені да $ 1, таму што, калі не колькасць грошы з'яўляецца
кратнай 100, вам трэба ўяўляюць знакаў пасля коскі.
Падвоілася автотипия дазваляе Вам гэта зрабіць.
Так як жа нам канвертаваць з прадстаўляюць грошы даляраў?
>> Давайце зірнем pi.c.
Пры гэтым праграма займае LongLong big_pi і дзеліць яго на 100 000, і друкуе
вынік да пяці знакаў пасля коскі.
Калі б мы хацелі адлюстравання чатырох дзесятковых месца, то мы можам проста замяніць гэтую
нумар тут.
Дык давайце захаваем, кампіляваць Пі, і затым убачыць вынік, які мы
разлічваць на 3,1415 -
Першыя пяць лічбаў колькасці пі.
>> Гэта не ўсё ж.
І чаму?
Ну, таму што гэта big_pi LongLong, які з'яўляецца цэлым лікам, якая не будзе
адсочваць знака пасля коскі.
Мадыфікацыя мне трэба робяць гэта ў дывізіёне.
Мне трэба, каб кінуць да падвойнаму тут раней дзялення, так як парны не можа трымаць
адсочваць дзесятковых знакаў.
І я збіраюся дадаць новы радок Тут для лепшага фарматавання.
>> І тут у нас ёсць гэта -
3,1416.
Вы можаце заўважыць, што яна друкуе 3.1416 замест 3,1415, як чакаецца.
Гэта таму, што падчас тураў падзел працэсу, а не проста
ўсячэння значэння.
Цяпер вы павінны быць у стане раздрукаваць выніковая сума правільна, што заканчвае
праграме.
>> Віншую.
Мяне клічуць Zamyla.
І гэта капейкі.
>> [Музыка Прайграванне]