5.4 Символьний тип даних
5.51. Скласти алгоритм
виведення великих літер латинського алфавіту в алфавітному порядку.
Розв’язок. Алгоритм виведення буде мати вигляд
алгоритм АВС це
змін
S: симв;
поч
для
S¬'A' до 'Z' повт
показати(S)
кц
ка.
5.52. Визначити, чи є даний символ латинською літерою (великою або маленькою),
цифрою або ні тим ні іншим.
Надалі в цьому розділі під "текстом" будемо
розуміти завдання непорожньої послідовності символів c1, …, cn
(n заздалегідь не відоме), що передують символу '.' (тобто, в текст крапка не входить).
5.53. Визначити, яка з двох заданих літер у даному тексті зустрічається частіше.
5.54. Визначити, чи входить до даного тексту
кожна з літер слова key.
5.55. Перевірити, чи правильно в заданому тексті розставлені круглі дужки (тобто,
чи знаходиться справа від кожної відкриваючої дужки відповідна їй закриваюча
дужка, а зліва від кожної закриваючої - відповідна їй відкриваюча).
Відповідь - "так" або
"ні".
Розв’язок.
алг
Дужки це
змін
с: симв;
k: ціл;
поч
взяти(с); k ¬0;
поки (с<>'.')&(k>=0) повт
якщо
с='('
то k¬k+1
інякщо с=')' то k¬k-1 кр
взяти(c)
кц;
якщо k=0 то
показати('Так')
інакше
показати('Ні')
кр
ка.
5.56.
Визначити, чи є заданий текст правильним записом цілого числа (можливо зі
знаком).
5.57.
Надрукувати заданий текст:
а) виключивши з нього всі цифри і подвоївши знаки '+' та '-';
б) виключивши з нього всі знаки '+', безпосередньо за якими знаходиться
цифра;
в) виключивши з нього всі літери 'в', безпосередньо перед якими знаходиться
літера 'с';
г) замінивши в ньому всі пари 'ph' на літеру 'f';
д) виключивши з нього всі зайві пропуски, тобто з кількох, що йдуть підряд,
залишити один.
Розв'язок б)
алг Виключеня це
змін a,b:симв;
поч
взяти(a,b);
поки b<>'.' повт
якщо (a<>'+')Ú(b<'0')Ú(b>'9') то показати(а) кр;
a¬b; взяти(b)
кц;
показати(а)
ка.
5.58. Дано текст, серед символів якого є принаймні одна кома.
Знайти номер
а) першої по
порядку коми;
б) останньої по
порядку коми.
5.59. Виключити з заданого тексту групи символів, які знаходяться між
'(' та ')'. Самі дужки теж мають бути виключені. Вважається, що дужки
розставлено правильно (парами) та всередині кожної пари дужок немає інших
дужок.
5.60. Заданий текст, серед символів якого міститься двокрапка ':'.
Отримати всі символи, розміщені
а) до першої
двокрапки включно;
б) після першої
двокрапки;
в) між першою і другою двокрапкою. Якщо другої двокрапки немає, то отримати
всі символи, розміщені після єдиної двокрапки.
5.61. Задана непорожня послідовність непорожніх слів з латинських
літер. Словами називаються групи символів, які розділені одним чи кількома
пропусками та не містять пропусків всередині себе. Визначити кількість слів,
які:
а) містяться в
даній послідовності;
б) починаються з
заданої літери;
в) закінчуються
заданою літерою;
г) починаються і
закінчуються однією літерою;
д) містять
принаймні одну задану літеру;
є) містять рівно
три заданих літери.
5.62.
В умовах попереднього завдання:
а) знайти довжину самого короткого слова;
б) підрахувати кількість входжень заданої літери в останнє слово даної
послідовності.
5.63. Заданий текст надрукувати по рядках, розуміючи під рядком або
наступні 60 символів, якщо серед них немає коми, або частину тексту до коми
включно.
5.64. Використовуючи тільки символьне введення,
ввести непорожню послідовність цифр, перед якою може знаходитись знак '+' чи
'-' і за якою знаходиться крапка, і отримавши відповідне ціле число, присвоїти
його цілій змінній m.
Розв'язок:
Алг Введення_цілого це
змін s:симв;
k0,m,zn:ціл;
поч
взяти(s); zn¬1;
якщо s='-' то zn¬ -1; взяти(s)
інякщо
s='+' то взяти(s) кр
m¬0; k0¬ord('0');
поки s<>'.' повт
m¬m*10+ord(s) - k0;
взяти(s)
кц;
m¬zn*m;
показати(m)
ка.
5.65.
Використовуючи тільки символьне виведення, вивести на друк значення цілої змінної
k (знак '+' не друкувати).
5.66. Використовуючи тільки символьне введення, ввести задане
дійсне число із знаком, записане у форматі з фіксованою крапкою, за яким
знаходиться символ '?'. Присвоїти його дійсній змінній x.
5.67.
Використовуючи тільки символьне виведення, надрукувати дійсне число x у наступній формі:
±0.d1d2...d9E ± p1p2,
де di, pj - цифри, причому d1¹ 0, якщо x ¹ 0.
5.68. Задана послідовність символів, яка має вигляд:
d1 ± d2 ± ... ± dn
(di-цифри, n>1), за якою знаходиться крапка. Обчислити
значення цієї алгебраїчної суми.
5.69. Задане натуральне число n. Надрукувати в трійковій системі числення цілі
числа від 0 до n.
5.70. В заданий текст входять тільки цифри та літери. Визначити, чи
задовольняє він наступній властивості:
а) текст є десятковим записом числа, кратного 9 (6, 4);
б) текст починається з деякої ненульової цифри, за якою знаходяться тільки
літери і їх кількість дорівнює числовому значенню цієї цифри;
в) текст містить (крім літер) тільки одну цифру, причому її числове
значення дорівнює довжині тексту;
г) сума числових значень цифр, які входять в текст, дорівнює довжині
тексту;
д) текст співпадає з початковим (кінцевим, будь-яким) відрізком ряду
0123456789;
е) текст складається тільки з цифр, причому їх числові значення складають
арифметичну прогресію (наприклад, 3 5 7 9, 8 5 2, 2).
Розв'язок
г)
Алг Сума_значень це
змін s:симв;
k,k0,m:ціл;
поч
взяти(s); k0¬ord('0');
k¬0; m¬0;
поки
s<> '.' повт
k¬k+1;
якщо (s<='9')&(s>='0') то
m¬m+ord(s)-k0
кр;
взяти(s)
кц;
показати('Сума числових значень цифр');
якщо k<>m то показати('не') кр;
показати('дорівнює довжині тексту')
ка.
5.71. Знайти у даному тексті символ та довжину найдовшої послідовності
однакових символів, що йдуть підряд.
5.5 Типи перерахування та
обмеження
5.72.
Скласти алгоритм виведення назв:
а) днів тижня;
б) місяців у році;
в) кольорів спектру;
г) шахових фігур.
Розв'язок а)
Алг Дні_Тижня це
тип тиждень=(пн,вт,ср,чт,пт,сб,нд);
змін день:тиждень;
поч
для день¬пн до нд повт
показати (день)
кц
ка.
5.73.
За назвою країни визначити назву її столиці.
Вказівка.
Розглянути типи:
тип
країна=(Австрія,Болгарія,Італія,Україна,Франція,Швеція);
столиця=(Відень,Софія,Рим,Київ,Париж,Стокгольм).
5.74. За українською назвою мови програмування
визначити її англійську назву.
5.75. За назвою країни визначити назву континенту, де вона розташована.
5.76. За назвою місяця визначити сезон (пору року), на який цей місяць
приходиться.
Розв'язок.
Алг Пора_року це
тип сезон=(зима,весна,літо,осінь);
місяць=(січ,лют,бер,квіт,трав,чер,лип,сер,вер,жов,лис,груд);
змін m:місяць;
s:сезон;
поч
взяти(m);
вибрати m із
|груд,січ,лют:s¬зима;
|бер,квіт,трав:s¬весна;
|чер,лип,сер:s¬літо;
|вер,жов,лис:s¬осінь
кв;
показати(s)
ка.
5.77.
Довжину відрізка, задану в міліметрах, сантиметрах, дециметрах чи кілометрах замінити
на величину цієї довжини в метрах.
5.78. Надрукувати слово з заданого переліку: (степ, біль, зошит, двері) у заданому
відмінку і однині.
5.79. Корабель йшов за деяким курсом, потім його курс було змінено
згідно даному наказу. Визначити новий курс корабля.
Вказівка. Розглянути типи
тип курс
=(північ,схід,південь,захід);
наказ=(вперед,
вправо, вліво, назад);
5.80.
За літерою-цифрою d від '0' до '5'
визначити назву цієї цифри.
5.81. Для натурального числа k від 1 до 99 надрукувати фразу "Мені k років", враховуючи при цьому, що при
деяких значеннях k слово "років" треба замінити на слово "рік" або
"роки".
Розв'язок.
Алг
Вік це
змін k:1..99; l:0..9;
поч
взяти(k);
показати('Мені ',k,' ');
якщо (k<=19)&(k>=11) то
показати('років')
інакше
l¬k
mod 10;
вибрати k із
|0,5..9: показати('років');
|1: показати('рiк');
|2..4:показати('роки')
кв
кр
ка.
5.82.
Для натурального числа k надрукувати фразу "Ми знайшли k грибів у лісі", погодивши закінчення
слова "гриб" з числом k.
5.83.
Визначити кількість днів в заданому місяці.
5.84.
Визначити дату наступного дня.
5.85. Визначити день тижня у 1994 році за його датою, знаючи, що 7
січня 1994 року - субота.
5.86. Визначити дату k-го за рахунком дня високосного року.
5.87.
Визначити порядковий номер того дня високосного року, який має задану дату.
Розв'язок
Алг Номер_дня це
тип
місяць=(січ,
лют, бер, квіт, трав, чер, лип, сер, вер, жов, лис, груд);
змін
m,m1:місяць;
k:0..366; d:1..31;
поч
взяти(d,m);
m1¬січ; k¬d;
поки m1<m повт
вибрати m1 із
|січ,бер,трав,лип,сер,жов: k¬k+31;
|лют:k¬k+29;
|квіт,чер,вер,лис:k¬k+30
кв;
m1¬succ(m1)
кц;
показати(k)
ка.
5.6 Тип даних рядок
5.88. Скласти алгоритм підрахунку загального
числа входжень символів '+', '-', '*' у рядок А.
5.89. Скласти алгоритм перетворення рядка А, замінивши у
ньому всі знаки оклику '!' крапками '.', кожну крапку – трьома
крапками '...', кожну зірочку '*'- знаком '+'.
5.90. Інверсія рядка A - це рядок B, записаний тими ж символами у зворотньому порядку. Інверсія порожнього рядка за означенням –
порожній рядок. Побудувати інверсію рядка.
5.91. Рядок називається симетричним, якщо його символи,
рівновіддалені від початку та кінця рядка, співпадають. Порожній рядок
вважається симетричним. Перевірити рядок A на симетричність.
5.92. Скласти алгоритм видалення із рядка А всіх входжень заданої групи символів.
5.93. Скласти алгоритм перетворення слова А, видаливши у
ньому кожний символ '*' та подвоївши кожний символ, відмінний від '*'.
5.94. Скласти алгоритм підрахунку найбільшої кількості цифр, що
йдуть підряд, у рядку А.
5.95. Скласти алгоритм підрахунку числа входжень у рядок А заданої послідовності літер.
5.96. Скласти алгоритм, який за рядком А та символом S
будує новий рядок,
отриманий заміною кожного символу, слідуючого за S, заданим
символом С.
5.97. Cкласти алгоритм перетворення рядка А видаленням із нього всіх ком, які передують першій крапці, та
заміною у ньому знаком '+' усіх цифр '3', які зустрічаються після першої
крапки.
5.98. Cкласти алгоритм виведення на друк усіх цифр, які входять в
заданий рядок, та окремо - решту символів, зберігаючи при цьому взаємне
розташування символів у кожній з цих двох груп.
5.99. Рядок називається монотонним, якщо він складається з
зростаючої або спадної послідовності символів. Cкласти алгоритм перевірки
монотонності рядка.
5.100. Cкласти алгоритм обчислення числа входжень у рядок А символів, перелічених у рядку V.
Знайти символ, кількість
входжень якого у рядок A
а) максимальна;
б) мінімальна.
5.101. Виділити з рядка A найбільший підрядок, перший і останній символи якого співпадають.
5.102. Перевірити, чи складається рядок з
а) 2 симетричних підрядків;
б) n симетричних підрядків.
5.103. Видалити з рядка всі повторні входження символів.
5.104. Виділити з рядка найбільший монотонний підрядок, коди
послідовних символів якого відрізняються на 1.
5.105. Замінити всі пари однакових символів рядка, які йдуть
підряд, одним символом. Наприклад, рядок ‘aabcbb’ перетворюється у ‘abcb’.
5.106. Побудувати рядок S з рядків S1, S2 так, щоб у S входили
а) ті символи S1, які не входять у S2;
а) всі символи S1, які не входять у S2, та всі символи S2, які не входять у S1.
5.107. Видалити з рядка симетричні початок та кінець. Наприклад,
рядок ‘abcdefba’ перетворюється у ‘cdef’.
5.108. Cкласти алгоритм виведення на друк тільки маленьких літер українського
алфавіту, які входять в заданий рядок.
Розвязок. Наступний
символ рядка виводиться на друк, якщо він співпадає з одним з символів слова V
- послідовності всіх
маленьких літер українського алфавіту.
Алг
Ukr_lit це
змін c,d:симв;
A,P,V:рядок;
q:бул;
поч
взяти(A);
V¬ 'абвгдеєжзіийклмнопрстуфхцчшщьюя';
поки len(A)>0 повт
P¬V;
c¬hd(A);
повт
q¬c=hd(P);
P¬tl(P);
до qÚ(len(P)=0);
якщо q то показати(с) кр;
A¬tl(A)
кц;
ка.
5.109. Скласти алгоритм виведення на друк рядка А, складенного з маленьких літер українського алфавіту, відповідними
великими літерами.
5.110. Заданий рядок, який складається з великих літер українського
алфавіту. Скласти алгоритм перевірки впорядкованості цих літер за алфавітом.
5.111. Скласти алгоритм виведення на друк в алфавітному порядку
усіх різних маленьких українських літер, які входять до даного рядка.
5.112. Словами називаються підрядки, які розділені одним чи
кількома пропусками та не містять пропусків всередині себе. За рядком A скласти алгоритм виведення на друк:
а) всіх слів рядка у зворотньому порядку;
б) усіх слів, які зустрічаються у рядку по одному разу;
в) цього ж рядка, але з видаленням з нього повторних входжень слів.
5.113. Знайти
а) найкоротше слово рядка;
б) найдовше слово рядка;
5.114. Використовуючи операції роботи з рядками, скласти алгоритми,
які реалізують наступні дії:
а) знищення n символів рядка S, починаючи з позиції k;
б) вставка рядка А у рядок В, починаючи з позиції k;
в) виділення із рядка S підрядка R довжиною n символів, починаючи з позиції k;
г) перетворення дійсного числа d у рядок S;
д) перетворення рядка S у дійсне число d з кодом перетворення і: і=0 у випадку успішного перетворення або і дорівнює номеру першого помилкового символу
рядка;
е) виділення з рядка А підрядка довжиною n
символів, починаючи з
кінця рядка.
Зауваження. Задачі 5.53 – 5.71 з підрозділу "Символьний тип даних" (5.4) можуть бути
сформульовані у термінах рядків і запропоновані для розв'язання у даному
підрозділі. Тоді в умовах
задач замість “текст” або “послідовність символів” слід читати “рядок”. Так, наприклад, алгоритм розв'язку задачі 5.59 може бути складено наступним
чином:
Алг
Del_scob це
змін d:симв;
A,S:рядок;
поч
взяти(A); S¬' ';
поки len(A)>0 повт
d¬hd(A);
якщо d='(' то
повт
A¬tl(A)
до hd(A)=')'
кц
інакше S¬app(S,d)
кр;
A¬tl(A)
кц;
показати(S)
ка.