§ 9. Радковыя велічыні
Сайт: | Профильное обучение |
Курс: | Інфарматыка. 10 клас (Павышаны ўзровень) |
Книга: | § 9. Радковыя велічыні |
Напечатано:: | Гость |
Дата: | Четверг, 2 Май 2024, 16:11 |
Оглавление
- 9.1. Увод, вывад, прысвойванне радковых велічынь
- 9.2. Параўнанне і складанне радковых велічынь
- 9.3. Пошук у радку
- 9.4. Капіраванне, устаўка, замена і выдаленне сімвалаў
- 9.5. Аналіз тэксту на наяўнасць розных сімвалаў
- 9.6. Пераўтварэнне радкоў
- 9.7. Пераўтварэнне радкоў у лікі і лікаў у радкі
- Пытанні да параграфу
- Практыкаванні
9.1. Увод, вывад, прысвойванне радковых велічынь
З радковым тыпам даных вы пазнаёміліся ў мінулым годзе. У мове С++ таксама ёсць тып даных, які дазваляе працаваць з радковымі велічынямі. Пераменныя радковага тыпу ў С++ апісваюцца тыпам string (гэтак жа, як і ў Pascal). Для работы з пераменнымі тыпу string патрабуецца падключыць бібліятэку, імя якой супадае з імем тыпу string. Радок складаецца з набору паслядоўна размешчаных сімвалаў і выкарыстоўваецца для захоўвання тэксту. Радкі могуць мець адвольную даўжыню. Радок, у якім няма ніводнага сімвала, называецца пустым. Радок апісваецца наступным чынам: string <імя радка>; Калі радок не змяшчае службовых сімвалаў, то яго можна ўводзіць з дапамогай каманды cin. Калі ў радку змяшчаюцца прабелы, ці сімвалы табуляцыі, ці іншыя службовыя сімвалы, то ў радок будуць перададзены сімвалы да першага службовага, астатнія сімвалы будуць праігнараваны. Для ўводу радка са службовымі сімваламі выкарыстоўваюць каманду getline(cin, s); Першы параметр гэтай каманды — імя патоку для ўводу, а другі — імя пераменнай, у якую будзе запісаны радок. Увод заканчваецца націсканнем клавішы Enter. Сімвал, які адпавядае націсканню гэтай клавішы, счытваецца, але да радка не дабаўляецца. Для вываду радкоў выкарыстоўваецца каманда cout (прыклад 9.1). З дапамогай каманды прысвойвання пераменнай радковага тыпу можна прысвоіць значэнне. Значэнне радковай велічыні запісваецца ў двайным двукоссі. Пусты радок задаецца наступным чынам: s = ""; Запіс тлумачальнага тэксту пры вывадзе ў камандзе cout з’яўляецца радковай канстантай. Да сімвалаў у радку можна звяртацца, выкарыстоўваючы індэкс. Нумарацыя сімвалаў пачынаецца з нуля, s[i] адпавядае i-му сімвалу ў радку s. |
Прыклад 9.1. Увядзём два радкі (з дапамогай розных каманд) і выведзем іх значэнні.
Тэсціраванне: У першым выпадку радок счытваецца з дапамогай каманды getline, таму прачыталіся і вывеліся ўсе сімвалы. У другім выпадку счыталіся і вывеліся сімвалы да прабелу. Калі памяняць месцамі каманды вываду (спачатку cin, потым getline), то вынік будзе наступным: У карыстальніка не будзе магчымасці ўвесці другі радок. У яго будуць счытаны сімвалы, якія засталіся ў буферы пасля ўводу першага радка. Калі ўзнікае неабходнасць выкарыстаць каманду getline адразу пасля каманды cin, то трэба папярэдне ачысціць буфер даных. Гэта можна зрабіць з дапамогай каманды cin.ignore(200,'\n'); Першы параметр паказвае, якую максімальную колькасць сімвалаў трэба праігнараваць, пакуль не сустрэнецца сімвал, вызначаны ў якасці другога параметру. Каманда cin.ignore(); (без параметраў) ігнаруе сімвал '\n'. Гэта можа быць трэба, калі спачатку з дапамогай cin уводзіцца лік, а затым з дапамогай getline счытваюцца радкі.
Без cin.ignore() першы радок будзе пуст. |
9.2. Параўнанне і складанне радковых велічынь
Гэтак жа, як і для іншых тыпаў даных, для радкоў вызначаны свае аперацыі — дзеянні, якія можна выконваць з данымі тыпу string. Для радковага тыпу такімі аперацыямі з’яўляюцца параўнанне і складанне. Для параўнання радкоў трэба ўмець параўноўваць сімвалы. Радкі параўноўваюцца пасімвальна. Спачатку параўноўваюцца першыя сімвалы двух радкоў. Калі сімвалы розныя, то большы той радок, сімвал якога мае большы нумар. Калі сімвалы аднолькавыя, то пераходзяць да параўнання наступных сімвалаў. Параўнанне заканчваецца, калі знойдзены розныя сімвалы ці ў адным з радкоў скончыліся сімвалы. У гэтым выпадку большы той радок, у якім сімвалы засталіся. Калі пры параўнанні сімвалаў адрозненні не знойдзены і радкі скончыліся адначасова, то яны роўныя (прыклад 9.2). Парадак, у якім меншы радок папярэднічае большаму, называюць лексікаграфічным. Гэту назву лексікаграфічны парадак атрымаў па аналогіі з сартаваннем па алфавіце ў слоўніку. Пры параўнанні радкоў трэба памятаць, што вялікія і малыя літары — гэта розныя літары, паколькі маюць розныя нумары ў табліцы сімвалаў. Таму радкі "mama" і "Mama" будуць рознымі, а няроўнасць "mama" > "Mama" — правільнай (у літары 'm' код 109, а ў 'М' — 77). Для праверкі правільнасці параўнання радкоў можна выкарыстаць праграму з прыклада 9.3. Для радкоў вызначана аперацыя складанне (канкатэнацыя). Абзначаецца яна знакам «+». У выніку складання двух радкоў атрымліваецца новы радок, у якім пасля сімвалаў першага радка будуць запісаны сімвалы другога радка. Вынік дадзенай аперацыі залежыць ад парадку складаемых (прыклад 9.4). Прыклад 9.5. Напісаць праграму, якая просіць увесці назву дзяржавы і яе сталіцу, а затым выводзіць паведамленне: Сталіца дзяржавы … — горад … . Замест шматкроп’я павінны быць выведзены адпаведныя значэнні. Этапы выканання задання I. Зыходныя даныя: пераменныя str (назва дзяржавы) і gor (назва горада). II. Вынік: пераменная s (выніковы радок). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. |
Прыклад 9.2. Прыклады параўнання радкоў.
Прыклад 9.3. Параўнанне радкоў.
Гэта праграма будзе карэктна працаваць як для лацінскіх сімвалаў, так і для рускіх, нягледзячы на тое, што каманды для работы з рускімі літарамі не падключаны. Гэта можна растлумачыць тым, што адносны парадак сімвалаў адпавядае алфавітнаму. Таму які б код не мела літара «Б», яна будзе пасля літары «А». Выключэннем з’яўляецца літара «ё». У розных кодавых табліцах яна можа размяшчацца або да ўсіх рускіх літар, або пасля іх. Прыклад 9.4. Прыклады складання радкоў.
Тэсціраванне: Прыклад 9.5. V. Праграма:
VI. Тэсціраванне. |
9.3. Пошук у радку
Сучасныя камп’ютарныя ўстройствы дазваляюць дастаткова хутка ажыццяўляць пошук у тэксце, выкарыстоўваючы для гэтага розныя алгарытмы. Мовы праграміравання даюць для алгарытмаў шырокі набор функцый для работы з тэкстам. У класе string рэалізавана некалькі розных функцый, якія дазваляюць ажыццяўляць пошук сімвала ці падрадка (часткі радка) у радку. У якасці выніку атрымліваем нумар першага ўваходжання шуканага ўзору ці значэнне –1, калі ўзор не знойдзены. Значэнне –1 пошукавыя функцыі вяртаюць толькі для кампілятара MinGW. Універсальным значэннем, якое вяртаецца, з’яўляецца канстанта string::npos. Функцыі могуць ажыццяўляць прагляд сімвалаў злева направа ці справа налева. Некаторыя з функцый прадстаўлены ў табліцы:
Больш падрабязна з функцыямі для работы з радкамі можна азнаёміцца ў дадатку. У прыкладзе 9.6. паказана, як ужываць дадзеныя функцыі. Прыклад 9.7. Напісаць праграму, якая ўводзіць слова, а затым выводзіць яго па адным сімвале ў радку. Этапы выканання задання I. Зыходныя даныя: пераменная s — зыходнае слова. II. Вынік: слова на экране, кожны сімвал у асобным радку. III. Алгарытм рашэння задачы. 1. Уводзім зыходныя даныя. IV. Апісанне пераменных: s – string, n – int. Прыклад 9.8. Напісаць праграму, якая выводзіць на экран апошні сімвал уведзенага слова і вызначае, ці сустракаецца гэты сімвал у слове яшчэ раз. Калі сустракаецца, то праграма выводзіць індэкс гэтага сімвала. Этапы выканання задання I. Зыходныя даныя: пераменная s — уведзенае слова. II. Вынік: апошні сімвал у слове і адпаведнае паведамленне: сустракаецца ці не сустракаецца. III. Алгарытм рашэння задачы. 1. Увод зыходных даных. |
Мова С++ з’яўляецца аб’ектна-арыентаванай мовай. Тып даных string не з’яўляецца часткай мовы С++, а рэалізаваны як шаблонны клас, які ўваходзіць у стандартную бібліятэку STL. З паняццем класа вы пазнаёміцеся пазней. Пры апісанні класа вызначаецца не толькі спосаб захоўвання даных, але і метады апрацоўкі гэтых даных. Метады рэалізаваны ў выглядзе функцый, доступ да якіх мае любая пераменная, якая з’яўляецца аб’ектам дадзенага класа. Для выкліку функцыі яе імя запісваюць пасля імя пераменнай, раздзяляючы іх кропкай. Напрыклад: s.length(), s.find('*') і інш. У акне рэдактара кода спіс функцый, якія належаць да пераменнай тыпу string, можа адкрывацца, калі пасля імя пераменнай паставілі кропку. Пасля чаго функцыю можна выбраць са спіса. Для таго каб спіс функцый з’явіўся ў Code::Bloks, трэба прапісаць дадатковую прастору імёнаў: using namespace std::__cxx11; Прыклад 9.6. Прыклады выкарыстання функцый.
Прыклад 9.7. V. Праграма:
VI. Тэсціраванне. Прыклад 9.8. V. Праграма:
IV. Тэсціраванне. |
9.4. Капіраванне, устаўка, замена і выдаленне сімвалаў
Пры рабоце з тэкстам часта даводзіцца вылучаць і ператвараць часткі радкоў. Частку тэксту (падрадок) можна скапіраваць ці выразаць, а затым уставіць у іншае месца ў тэксце. Радок ці яго частка могуць быць заменены на іншы радок. Каманды для выканання аперацый па рабоце з фрагментам тэксту паказаны ў табліцы.
Ва ўсіх камандах пераменная n абазначае пазіцыю (нумар) сімвала, пачынаючы з якога выконваюць аперацыю, а пераменная k — колькасць сімвалаў. Разбяром каманды падрабязней (прыклад 9.9). У выніку выканання каманды substr радок s не змяняецца. Вынік работы функцыі прысвойваецца іншаму радку. Каманды erase, insert і replace змяняюць зыходны радок s. У прыкладзе 9.10 паказана, як выкарыстоўваюцца пералічаныя каманды. Функцыі insert і replace маюць яшчэ адзін варыянт рэалізацыі. Гэты варыянт дазваляе выкарыстоўваць пры ўстаўцы не ўвесь радок s1, а толькі яго частку. У гэтым выпадку задаюцца два дадатковыя параметры: пазіцыя n1 і колькасць сімвалаў k1, якія належаць да радка s1. Параметры дазваляюць вылучыць падрадок у радку s1, які і ўстаўляецца ў зыходны радок: insert(n, s1, n1, k1), replace(n, k, s1, n1, k1). Прыклад 9.11. Напісаць праграму, якая вызначыць, колькі разоў сустракаецца зададзены падрадок у радку. Этапы выканання задання I. Зыходныя даныя: пераменная s — зыходны радок, p — зыходны падрадок. II. Вынік: k — шуканая колькасць. III. Алгарытм рашэння задачы. 1. Уводзім зыходныя даныя. 4.1. Вылучым з радка s падрадок t такой жа даўжыні, што і даўжыня p, пачынаючы з бягучага сімвала 5. Вывад выніку. IV. Апісанне пераменных: s, p, t — string, n1, n2, k — int. |
Прыклад 9.9. Каманды для пераўтварэння радкоў. 1. Запіс s1 = s.substr(n, k); азначае, што ў радку s вылучаюць k сімвалаў, пачынаючы з сімвала, індэкс якога запісаны ў пераменнай n. Сімвалы капіруюцца ў пераменную s1 (дзеянне каманды можна параўнаць з капіраваннем фрагмента тэксту ў буфер абмену). 2. Запіс s.erase(n, k); азначае, што ў радку s вылучаюць k сімвалаў, пачынаючы з сімвала, індэкс якога запісаны ў пераменнай n. Вылучаныя сімвалы выдаляюцца з радка s. Астатнія сімвалы радка зрушваюцца ўлева (дзеянне каманды можна параўнаць з выдаленнем фрагмента тэксту). 3. Запіс s.insert(n, s1); азначае, што ў радок s устаўляюць сімвалы радка s1, устаўка адбываецца ў пазіцыі n. Астатнія сімвалы радка зрушваюцца ўправа (дзеянне каманды можна параўнаць з устаўкай фрагмента тэксту з буфера абмену ў пазіцыю курсора). 4. Запіс s.replace(n, k, s1); азначае, што сімвалы радка s замяняюць на сімвалы радка s1. Замяняюцца k сімвалаў, пачынаючы з сімвала, што стаіць у пазіцыі n. Астатнія сімвалы радка зрушваюцца (дзеянне каманды можна параўнаць з устаўкай фрагмента тэксту з буфера абмену на месца вылучанага фрагмента). Прыклад 9.10. Прыклады выкарыстання каманд (каманды ўжываюцца паслядоўна).
Прыклад 9.11. V. Праграма:
VI. Тэсціраванне. Эфектыўнае рашэнне дадзенай задачы можна атрымаць з дапамогай алгарытму Кнута — Морыса — Прата (КНП-алгарытм)[1]. [1] Котаў У. М., Лапо А. І., Быкадораў Ю. А., Вайцеховіч А. М. Інфарматыка, 9 клас. Мінск: Народная асвета, 2019. С. 44. |
9.5. Аналіз тэксту на наяўнасць розных сімвалаў
Сучасныя тэкставыя рэдактары дазваляюць атрымаць статыстыку па сімвалах і словах у дакуменце (прыклад 9.12). Пісьменны набор тэксту прадугледжвае наяўнасць аднаго прабелу паміж словамі. У такім тэксце колькасць слоў будзе большай за колькасць прабелаў на адзінку Прыклад 9.12. Напісаць праграму, якая вызначыць колькасць слоў у тэксце, калі паміж любымі двума словамі роўна адзін прабел. Мяркуецца, што ў тэксце ёсць хоць бы адно слова. Этапы выканання задання I. Зыходныя даныя: радок тэксту st. II. Вынік: колькасць слоў k. III. Алгарытм рашэння задачы: st — string, n, k — int. 1. Уводзім зыходныя даныя. IV. Апісанне пераменных: st — string, n, k — int. Прыклад 9.13. Напісаць праграму, якая вызначыць, якіх знакаў прыпынку ў тэксце больш: тых, якімі заканчваецца сказ («.», «?», «!»), ці тых, якія стаяць унутры сказа («,», «:», «;»). Этапы выканання задання I. Зыходныя даныя: пераменная st (тэкст). II. Вынік: паведамленне пра тое, якіх знакаў больш. III. Алгарытм рашэння задачы. 1. Увядзём зыходныя даныя. 5.1. Калі сустрэўся знак прыпнку «.», «!» або «?», то павялічым значэнне лічыльніка k1 на 1. 6. Параўноўваем атрыманыя значэнні лічыльнікаў і выводзім вынік. IV. Апісанне пераменных: st, z1, z2 – string, n, k1, k2 – int.
|
Прыклад 9.12. Статыстыка ў дакуменце Word (адпаведная каманда на ўкладцы Рецензирование). V. Праграма:
VI. Тэсціраванне (для праверкі можна скапіраваць тэкст абзаца з дакумента Word). VII. Аналіз выніку. Калі паглядзець статыстыку Word для гэтага абзаца, атрымаем: Прыклад 9.13. V. Праграма:
VI. Тэсціраванне (для праверкі можна скапіраваць тэкст абзаца)[1].
[1] Чехов, А. П. Человек в футляре // http:ilibrary.ru/text/438/p.1/index.html (дата доступу: 28.07.2020). |
9.6. Пераўтварэнне радкоў
Прыклад 9.14. Па правілах арфаграфіі новы сказ пачынаецца заўсёды з вялікай літары. Тэкставыя рэдактары аўтаматызуюць увод вялікай літары, г. зн. калі карыстальнік напісаў першае слова ў сказе з малой літары, то яна замяняецца на вялікую. Напісаць праграму, якая выконвае такую аўтазамену для тэксту, набранага лацінскімі літарамі. Лічыць, што тэкст набраны карэктна і пасля кожнага знака прыпынку, які азначае канец сказа («.», «!», «?»), стаіць прабел. Этапы выканання задання I. Зыходныя даныя: пераменная st (уведзены радок). II. Вынік: пераўтвораны радок. III. Алгарытм рашэння задачы. 1. Увод зыходных даных. 4.1. Калі бягучы сімвал з’яўляецца сімвалам канца сказа, то трэба замяніць сімвал, які стаіць на дзве пазіцыі далей, калі гэты сімвал — малая літара. 5. Вывад выніку. IV. Апісанне пераменных: st – string, n – int. Ва ўсіх тэкставых рэдактарах рэалізавана функцыя Заменить. Пры выкананні гэтай каманды некаторыя сімвалы з радка выдаляюцца, а замест іх устаўляюцца іншыя сімвалы. Прыклад 9.15. Напісаць праграму, якая заменіць у тэксце кожную лічбу 2 словам «two». Этапы выканання задання I. Зыходныя даныя: пераменная st (уведзены тэкст). II. Вынік: пераўтвораны тэкст III. Алгарытм рашэння задачы. 1. Увод зыходных даных. 2.1. Калі бягучы сімвал тэксту «2», то выдаляем яго і ўстаўляем падрадок «two». . 3. Вывад выніку. IV. Апісанне пераменных: st – string, i – int. Пры правільным наборы камп’ютарнага тэксту паміж любымі двума словамі павінен быць роўна адзін прабел. Аднак часам выпадкова ўстаўляюць некалькі прабелаў. У гэтым выпадку Word падкрэслівае прабелы блакітнай хвалістай лініяй (прыклад 9.16). Прыклад 9.17. Напісаць праграму, якая правярае правільнасць расстаноўкі прабелаў у тэксце і, калі паміж словамі больш за адзін прабел, — выдаляе лішнія. Этапы выканання задання I. Зыходныя даныя: пераменная st (уведзены тэкст). II. Вынік: пераўтвораны тэкст. III. Алгарытм рашэння задачы. 1. Увод зыходных даных. 3.1. Калі абодва суседнія сімвалы з’яўляюцца прабеламі, то выдалім адзін з іх. Суседнія сімвалы маюць індэксы, якія адрозніваюцца на адзін: i і i + 1. 4. Вывад выніку. VI. Апісанне пераменных: st – string, i– int. Прыклад 9.18. Напісаць праграму, якая правярае правільнасць расстаноўкі прабелаў вакол працяжніка. Калі прабелы прапушчаны, то ўстаўляе іх. Мяркуецца, што ў тэксце няма слоў, якія пішуцца праз злучок, двух знакаў «-» запар і лішніх прабелаў. Этапы выканання задання I. Зыходныя даныя: пераменная st (уведзены тэкст). II. Вынік: словы-паліндромы III. Алгарытм рашэння задачы. 1. Увод зыходных даных. 2.1. Калі суседні справа сімвал (i + 1) не прабел, то ўстаўляем прабел. 3. Пераходзім да наступнага сімвала. IV. Апісанне пераменных: st – string, i– int. Прыклад 9.19. Напісаць праграму, якая выведзе словы-паліндромы [3] (словы, якія аднолькава чытаюцца злева направа і справа налева), што ўваходзяць у зададзены тэкст. Словы ў тэксце могуць быць падзелены адным ці некалькімі прабеламі. Прабелы могуць быць у пачатку і ў канцы тэксту. Этапы выканання задання I. Зыходныя даныя: пераменная st (уведзены тэкст). II. Вынік: словы-паліндромы. III. Алгарытм рашэння задачы. 1. Увод зыходных даных. 4.1. Выдалім прабелы ў пачатку радка. Вылучым першае слова з радка. 5. Апішам тры дадатковыя алгарытмы. 5.1. Функцыю DelSpace для выдалення прабелаў у пачатку радка. Прабелы выдаляюцца з радка толькі тады, калі ён не пусты. Калі прабелаў у пачатку радка няма, то функцыя не зменіць зыходны радок. 6. Вывад паведамлення «няма паліндромаў» у выпадку, калі значэнне p засталося false. IV. Апісанне пераменных: st, sl – string, i, n – int, p - bool.[3] В мире интересных слов. Палиндромы. http://www.tramvision.ru/words/pal.htm. (дата доступу: 28.07.2020) |
Прыклад 9.14. V. Праграма:
VI. Тэсціраванне [2]. Прыклад 9.15. V. Праграма:
VI. Тэсціраванне. VII. Аналіз выніку. Замест двух функцый erase і insert можна выкарыстаць функцыю replace. st.replace(i, 1, "two"); Прыклад 9.16. Вылучэнне лішніх прабелаў у Word. Прыклад 9.17. V. Праграма:
VI. Тэсціраванне. Разгледзім падрабязней сітуацыю, калі ў тэксце стаяць запар два ці больш прабелаў. У прыкладзе такая сітуацыя сустракаецца паміж словамі «правільным» і «наборы». Умова (st[i] == ' ' && st[i + 1] == ' ') для i = 14 выканаецца, і прабел, які стаіць на 14-м месцы, выдаліцца. Тады прабел, які стаіць на месцы 15, зрушыцца ўлева і атрымае нумар 14. Пры наступным выкананні цела цыкла зноў выдаліцца прабел на месцы 14, а прабел на месцы 15 зрушыцца ўлева. Пераход на наступны сімвал ажыццявіцца толькі тады, калі ўмова (st[i] == ' ' && st[i + 1] == ' ') будзе няправільнай — паміж словамі застанецца толькі адзін прабел. Прыклад 9.18. V. Праграма:
VI. Тэсціраванне. Увядзіце тэкст «Жизнь прожить — не поле перейти. Родимая сторона — мать, чужая — мачеха. Сделал дело — гуляй смело.» Вынік: VII. Аналіз выніку. У прыкладзе сустракаюцца ўсе чатыры магчымыя сітуацыі: прабелаў няма ні злева, ні справа ад працяжніка; прабел толькі злева; прабел толькі справа; прабелы з двух бакоў. У выніку выканання ўсе прабелы расстаўлены правільна. Прыклад 9.19. V. Праграма:
VI. Тэсціраванне. Увядзіце тэкст: «На берегу стоит шалаш из камыша. Для трафаретной печати предназначен ротатор, или мимеограф. Пшеничная лепёшка наан является блюдом индийской национальной кухни». Вынік: [2] Куприн, А. И. Гранатовый браслет http:ilibrary.ru/text/1022/p.7/index.html (дата доступу: 28.07.2020). |
9.7. Пераўтварэнне радкоў у лікі і лікаў у радкі
Лікавыя даныя выкарыстоўваюцца для выканання арыфметычных аперацый. Калі сімвалы лічбаў запісаны ў радковую пераменную, то выконваць вылічальныя дзеянні з імі нельга. Але можна ператвараць радкі, якія змяшчаюць сімвалы лічбаў, у лікі (прыклад 9.20). У радковых пераменных лёгка выконваць такія аперацыі, як выдаленне, устаўка ці замена сімвала. Устаўка, замена ці выдаленне лічбы з ліку выконваюцца больш складана (задача пра вылучэнне лічбаў з ліку разглядалася ў § 8 — гл. прыклад 8.17). Пры неабходнасці лік можна пераўтварыць у радок, выканаць патрэбныя дзеянні і пераўтварыць радок назад у лік.. Прыклад 9.21. Напісаць праграму, якая правярае, ці з’яўляецца дадзены тэкст запісам ліку. Калі так, то знайсці суму лічбаў дадзенага ліку, інакш вывесці адпаведнае паведамленне. Этапы выканання задання I. Зыходныя даныя: пераменная st (уведзены тэкст). II. Вынік: сума лічбаў або паведамленне пра тое, што гэта не лік. III. Алгарытм рашэння задачы. 1. Увод зыходных даных. 5.1. Калі бягучы сімвал тэксту — лічба, то пераўтвараем яго ў лік, дабаўляем лік да сумы. Сімвал радка з’яўляецца лічбай, калі выконваецца ўмова(st[i] >= '0' && st[i] <= '9'). 6. Калі пасля цыкла k < n, то тэкст не з’яўляецца запісам ліку. Інакш выводзім суму лічбаў. IV. Апісанне пераменных: st – string, n, s, k – int. Прыклад 9.22*. Напісаць праграму, якая раскрывае дужкі ў лікавым выразе і вылічвае яго значэнне. Выраз мае выгляд a + b + c +… і ўводзіцца як радок. Замест a, b і c — сімвалы лічбаў, якія ўтвараюць цэлы лік (колькасць лічбаў у кожным з іх не большая за дзевяць, колькасць складаемых — адвольная). Вывесці значэнне выразу. Напрыклад, для выразу 5 + 17 + 8 павінны атрымаць 30. Этапы выканання задання I. Зыходныя даныя: пераменная st (тэкст). II. Вынік: лікавае значэнне выразу. III. Алгарытм рашэння задачы. 1. Увод зыходных даных 2.1. Знойдзем сімвал «+», сімвалы да яго скапіруем у пераменную s1. 3. Вывад выніку. IV. Апісанне пераменных: st, s1, – string, x, s – int. |
Прыклад 9.20. У табліцы прыведзены каманды для пераўтварэння.
Функцыі пераўтварэння радковых велічынь тыпу string у лікавыя з’явіліся толькі ў 11 стандарце C++. Аднак у Code:: Bloks яны падтрымліваюцца толькі з 14-й версіі стандарту. Для падключэння кампілятара з падтрымкай гэтага стандарту неабходна выканаць каманду Settings → Compiler… Прыклад 9.21. V. Праграма:
VI. Тэсціраванне. Праверку таго, ці з’яўляецца сімвал лічбай, можна выканаць некалькімі рознымі спосабамі. Гэта можна зрабіць аналагічна таму, як у прыкладзе 9.14 выконвалася праверка знакаў прыпынку. Для гэтага трэба стварыць радок і пералічыць у ім усе лічбы — z = ''0123456789''; Функцыі пераўтварэння ў якасці параметра прымаюць толькі радок, таму ў праграме прыйшлося прысвоіць радку z значэнне бягучага сімвала. Для атрымання лікавага значэння сімвала лічбы можна паступіць па-іншаму:
У дадзеным выпадку пераменная z — розніца кодаў бягучай лічбы і лічбы 0. Паколькі лічбы ў табліцы размешчаны па парадку, то атрымаем лікавае значэнне сімвала лічбы. Прыклад 9.22. V. Праграма:
VI. Тэсціраванне. |
Пытанні да параграфу
1. Як апісваюцца радковыя пераменныя? 2. З чаго складаюцца радкі? 3. Якія аперацыі магчымыя над радкамі? 4. Як параўноўваюцца радкі? 5. Што з’яўляецца вынікам складання двух радкоў? 6. Што такое даўжыня радка? З дапамогай якой функцыі можна знайсці даўжыню радка? 7. Якія функцыі выкарыстоўваюцца для вызначэння пазіцыі падрадка ў радку? 8. Як скапіраваць сімвалы з аднаго радка ў іншы? 9. Якая функцыя выкарыстоўваецца для выдалення сімвалаў з радка? 10. Якая функцыя прызначана для ўстаўкі сімвалаў у радок? |
Практыкаванні
1. Напішыце праграму для рашэння задачы. Карыстальнік уводзіць сваё прозвішча, клас і навучальную ўстанову, праграма павінна вывесці паведамленне «Навучэнец … вучыцца ў … класе ДУА "…"». Замест шматкроп’я павінны быць выведзены адпаведныя значэнні.
2. Змяніце праграму з прыкладу 9.8 так, каб на экран выводзіўся сімвал уведзенага слова, які стаіць пасярэдзіне. Выведзіце пазіцыі ўсіх сімвалаў, якія супадаюць з сярэднім сімвалам слова.
3. Змяніце праграму з прыкладу 9.8 так, каб малыя і вялікія літары аналізаваліся праграмай аднолькава (напрыклад, для рускага слова «Анна» адказ павінен быць наступным: «Апошні сімвал — а, сімвал сустрэўся на месцы 1»).
4. Дадзены два словы. Ці правільна, што адно са слоў пачынаецца на тую ж літару, на якую заканчваецца іншае? (Першая літара аднаго са слоў можа быць вялікай). Калі так, то вывесці літару, інакш адпаведнае паведамленне. *Калі адказ «правільна», вызначыць, ці належаць літары аднаму рэгістру.
5. Напішыце праграму, якая аналізуе тэкст на наяўнасць розных сімвалаў.
1. Напішыце праграму, якая вызначыць колькасць сказаў у тэксце. Сказ заканчваецца адным з трох сімвалаў: «.», «?», «!». Мяркуецца, што ў тэксце ёсць хоць бы адзін сказ (гл. прыклад 9.12).
2. Напішыце праграму, якая вызначыць колькасць слоў у тэксце, калі паміж любымі двума словамі можа быць больш за адзін прабел. Мяркуецца, што ў тэксце ёсць хоць бы адно слова.
3. Напішыце праграму, якая вызначыць, якіх літар у радку з рускім тэкстам больш: «о» ці «O».
4. Напішыце праграму, якая вызначыць, які працэнт складаюць літары «a» ва ўведзеным тэксце.
5. Напішыце праграму, якая вызначыць, колькі слоў у тэксце пачынаецца на літару «а».
6*. Напішыце праграму, якая вызначыць, які працэнт слоў у тэксце пачынаецца на літару «к». (Слова можа пачынацца як з вялікай, так і з малой літрары.))
6. Дадзены тэкст. Напішыце праграму, якая праверыць, ці правільна ў ім расстаўлены круглыя дужкі. Калі не, то вывесці адпаведнае паведамленне: «адкрывальных дужак больш (менш), чым закрывальных», «закрывальная дужка раней ідзе за адкрывальную дужку».
7. Напішыце праграму, якая ажыццявіць у тэксце замену сімвалаў.
1. Замяніць у зададзеным тэксце кожную літрау «a» сімвалам «*».
2. Замяніць у зададзеным тэксце кожную лічбу сімвалам «?».
3. Замяніць у зададзеным тэксце з лацінскіх літар усе ўваходжанні «x» на «ks».
4. Замяніць у зададзеным тэксце з лацінскіх літар усе ўваходжанні «ing» на «ed».
5. Замяніць усе словы А1 на словы А2 (словы ў тэксце падзелены прабеламі, словы А1 і А2 уводзяцца).
8. Напішыце праграму, якая выдаліць з тэксту некаторыя сімвалы.
1. Выдаліць з тэксту ўсе галосныя літары
2. Выдаліць з тэксту ўсе знакі «+», непасрэдна за якімі стаіць не лічба..
9. Напішыце праграму, якая ўставіць у тэкст некаторыя сімвалы.
1. Пасля кожнай лацінскай літары «q» дабавіць літару «u».
2. Пасля кожнага з пералічаных знакаў прыпынку («.», «,», «:», «;») уставіць прабел, калі яго там няма.
10. Выканайце для прыкладу 9.19.
1. Змяніце функцыю CheckPalindrom так, каб словы, якія пачынаюцца на вялікую літару, таксама лічыліся паліндромамі, напрыклад: рус. «Анна», бел. «Ала».
2. Дабаўце ў праграму падлік колькасці выведзеных паліндромаў.
11*. Фразы-паліндромы чытаюцца аднолькава злева направа і справа налева без уліку прабелаў і знакаў прыпынку. Напрыклад, у рускай мове: «Кулинар, храни лук» або «А роза упала на лапу Азора». Напішыце праграму, якая вызначыць, ці з’яўляецца фраза паліндромам.
12. Напішыце праграму, якая правярае, ці з’яўляецца дадзены тэкст запісам ліку. У непусты тэкст могуць уваходзіць толькі лічбы або літары. Калі так, то праверыць, ці дзеліцца дадзены лік на 4, інакш вывесці адпаведнае паведамленне. Для праверкі дзялімасці на 4 выкарыстоўваць прымету дзялімасці: лік дзеліцца на 4, калі двухзначны лік, састаўлены з апошніх двух лічбаў зыходнага ліку, дзеліцца на 4.
13. Змяніце праграму з практыкавання 12 так, каб правяралася дзялімасць на 2, 3, 5, 6, 8, 12 (выкарыстоўвайце адпаведныя прыметы дзялімасці).
14. Дадзены тэкст. Напішыце праграму, якая праверыць, ці можа быць гэты тэкст запісам рэчыўнага ліку.
15. Напішыце праграму для рашэння задачы. Радок уяўляе сабой запіс наступнага выгляду: «а ± b ± с ±…». Знайсці значэнне выразу. Замест знака «±» можа быць знак «+» або знак «–». Лікі з’яўляюцца цэлымі (тып int).
16. Напішыце праграму для рашэння задачы. Радок уяўляе сабой запіс наступнага выгляду: «(a + b)c». Вылучыць з запісу лікі і знайсці значэнне выразу. Лікі, якія ўваходзяць у выраз, з’яўляюцца цэлымі (тып int).
17*. Радок уяўляе сабой запіс наступнанга выгляду: «лік лік ± лік лік ± … ± лік лік», дзе замест знака можа быць * або /, а замест знака «±» — знакі «+» або «—». Напісаць праграму, якая выдзеліць з запісу радка лікі і знойдзе значэнне выразу. Значэнні лікаў змяшчаюцца ў тып double.
18. Напішыце праграму, якая вызначыць, які працэнт слоў у тэксце валодае наступнай уласцівасцю: першай літарай з’яўляецца галосная, а далей зычныя і галосныя літары чаргуюцца праз адну.