Зміст вступ 5
Вид материала | Документы |
§ 8.5 Вправи та завдання 9. Робота з літерними та символьними величинами § 9.1 Основні операції для роботи з літерними величинами |
- Зміст, 429.02kb.
- Зміст, 329.83kb.
- Зміст вступ, 361.97kb.
- Зміст, 242.29kb.
- Зміст, 384.58kb.
- Зміст, 410.71kb.
- Зміст вступ, 388.95kb.
- Зміст перелік скорочень, 569.12kb.
- Зміст вступ, 540.64kb.
- Зміст Вступ, 574.44kb.
§ 8.5 Вправи та завдання
176 Знайти різницю в рості між найвищим і найнижчим футболістом команди, якщо в складі команди 20 чоловік.
177 В складі баскетбольної команди 12 гравців. Скільки гравців в команді мають зріст, менший за середній зріст команди?
178 В зв’язку з економічною кризою в країні і скороченням коштів на потреби освіти в школі два 10 класи по 18 учнів у кожному було об’єднано в один. Вважаючи, що в класах навчались одні хлопці, об’єднати дані про зріст хлопців з двох масивів в один, але зберегти порядок шикування по зросту на уроці фізкультури (від вищих до нижчих). Вхідні масиви вважати відсортованими і заданими у вигляді констант.
179 В кондитерський відділ магазину поступило 15 видів цукерок по різній ціні і в різній кількості. Знаючи дані про ціни і кількості товарів, знайти, яких цукерок було завезено в магазин за найбільші кошти.
180 Описати числові масиви з цілих чисел X, Y, Z і виконати наступні перетворення:
а) переписати елементи масиву Х в масив Y в зворотному порядку;
б) сформувати масив Y таким чином: Y[1] := X[1] + X[N]; Y[2] := X[2] + X[N–1], ..., Y[N] := X[N] + X[1].
в) в масив Y занести лише ті елементи масиву Х, що знаходяться в заданому діапазоні [A, B].
г) в масив Y занести 10 найменших додатних елементів, а в масив Z – 15 найбільших за модулем.
д) записати в масив Y лише парні елементи, а в масив Z – лише ті, що діляться на 3.
е) в масив Y занести лише ті елементи масиву Х, що є числами Фіббоначі, а в масив Z – лише ті, квадратні корені яких є цілими числами.
181 Шкільній футбольній команді з 15 чоловік потрібно закупити форму для участі у змаганнях. Підприємці пропонують М видів форми ( 10 £ М £ 15). Скільки найбільше футбольних м’ячів вартістю Р зможе купити команда, якщо вибере не найкращу форму? Яку форму при цьому буде закуплено для команди?
182 У змаганнях з стрибків у довжину кожен спортсмен має право на 5 спроб. До підсумкового результату зараховується найкраща. Скласти програму, яка визначає учасників, що зайняли перші три призові місця і виводить на екран прізвища переможців з вказівкою місця, що посів спортсмен і його результат. Кількість спортсменів не перевищує 20.
183 При складанні бухгалтерського звіту за рік від бухгалтера кооперативу Колобок, що займається виготовленням і продажем хлібопекарних виробів забажали отримати відомості про кількість виробів, що продаються за найвищою ціною. Виготовлялось протягом року М виробів (10 £ М £ 20). Дані про ціни на вироби знаходяться в масиві Х. Скласти програму для полегшення роботи бухгалтера.
184 Розв’язати попередню задачу у випадку, коли вимагається подати дані про найбільшу кількість виробів, що продаються за однаковою ціною.
185 В заданому цілочисельному масиві знайти елементи, сума яких дорівнює заданому числу.
186 Задано масив натуральних чисел. Знайти мінімальне натуральне число, яке не можна представити сумою ніяких елементів цього масиву.
187 У відсортованому масиві з 1000 чисел знайти номер елемента, значення якого рівне K.
9. Робота з літерними та символьними величинами
Ми вже з вами згадували про символьні змінні, які описуються як тип char, і нагадаємо, що змінні даного типу можуть бути лише одним символом з множини 256 символів, що є й розпорядженні ПЕОМ. А як бути у тому випадку, коли нам потрібно працювати з словами, реченнями і, навіть, цілими фрагментами тексту. Для цього у мові Паскаль передбачено ще один тип змінної, який називається string. В багатьох підручниках та посібниках це слово переводиться як рядок, що не зовсім відповідає дійсності. Взагалі кажучи, в українській мові не існує слова, яке було б буквальним перекладом або розумінням англійського string. По суті справи нам повинно бути зрозуміло, що щось схоже до звичного нам рядку літер, хоча вже тут ми припустились неточності, адже вираз 1998 є числом, в звичному для нас мовному розумінні, а у мові Паскаль це може бути або числом , або рядком – в залежності від того, як було описано змінну, значенням якої є написаний вираз. Тому не будемо вдаватись до точних тлумачень значення слова string, а просто скажемо, що даний тип характеризує символьну змінну, яка може складатись не з одного символу, а з багатьох і надалі величини, описані даним типом домовимось називати літерними величинами. Літерні величини можуть бути і рядками, і реченнями, і словами, і окремими символами.
Паскаль накладає обмеження на даний тип змінної, тобто кількість символів у значенні змінної типу string не може бути більшою за 255.
Розробники мови при створенні типу string описали його як array[1..255] of char, але ми можемо задавати і менший (але ні в якому разі не більший!) розмір змінних або констант даного типу, наприклад:
§ 9.1 Основні операції для роботи з літерними величинами
Перейдемо до розгляду основних операцій, призначених для роботи з літерними величинами.
Для роботи з літерними величинами у мові Паскаль передбачено наступні операції, процедури та функції :
Length(st) – визначає довжину літерної величини st. Іншими слова, просто підраховує кількість символів в літерній величині. Цю ж інформацію можна отримати, зчитавши значення st[0], але будьте уважні, необхідно на друк виводити значення не st[0], a ord(st[0])!
Copy(st, m, n) – виділяє з літерної величини st n символів, починаючи з символу під номером m. Дана функція використовується для копіювання.
Concat(st1, st2) – об’єднує дві літерні величини. Дана функція виконує ту ж саму дію, що й операція ‘+’, введена вона для сумісності з більш ранніми версіями мови Паскаль.
Val(st, m, kod) – перетворює літерну величину st в число m. Якщо kod <> 0, то введена літерна величина не є числом.
Для кращого розуміння приведемо простеньку програму:
program demo_val_str;
var st : string;
k, kod : integer;
begin
write('Введiть слово: ');readln(st);
val(st, k, kod);
if kod <> 0 then writeln(' Введене слово не є числом ')
else writeln('Слово є числом ', k);
readln
end.
Str(m, st) – перетворює число в літерну величину, тобто дана процедура є оберненою до val.
Delete(st, m, n) – видалення деякої групи символів довжиною n починаючи з позиції m в літерній величині st.
Insert(st2, st1, n) – вставити в літерну величину st1 літерну величину st2 починаючи з позиції n.
Крім того, до літерних величин можна застосовувати операції порівняння, так само, як і до числових величин. З останнім розберемося дещо детальніше на прикладі конкретної задачі.
Задача 188 Знайти, яке з двох введених слів більше.
Розв’язання: Всі розглянуті раніше операції порівняння двох величин, які ми застосовували до числових змінних, можна застосовувати і до літерних величин. Тобто можна говорити, що одна величина дорівнює іншій, або величина А більша (менша) за величину В. Тут необхідно зробити відповідні роз’яснення.
По–перше, зрозуміло, що мама = мама, але тільки у тому випадку, коли всі літери в обох словах написані одними й тими ж символами, тобто літерами одного і того ж алфавіту. Якщо ж ми у першому слові літери а напишемо літерами англійського алфавіту, а у другому – на перший погляд ті ж самі літери а напишемо у російському (українському) алфавіті, то ці слова вже не будуть однаковими. Це пов’язано з тим, що, як ми вже вказували, тип string описано як масив типу char, а останній тип є впорядкованим і однакові на вигляд літери різних алфавітів не є однаковими, оскільки їм відповідають різні порядкові номери відповідних символів.
По–друге, як бути у випадках, коли слова мають різну кількість літер (мама – мам), або ж відрізняються одним символом (мама – Мама)? У даному випадку (як і всіх інших) ПЕОМ діє наступним чином: порівнюються попарно відповідні літери двох слів і як тільки виявляється, що два чергові символи в слові відмінні, то більшим вважається те слово, у якого код даного символу більший.
Все вищесказане демонструє наступна програма:
program poriwn_stroki;
var st1, st2 : string;
i,s: integer;
begin
write('Введiть переше слово: ');readln(st1);
write('Введiть друге слово: ');readln(st2);
s := 0;
for i := 1 to length(st1) do
begin
write(ord(st1[i]):3,' ');
s := s + ord(st1[i]);
end;
writeln('s = ',s);
s := 0;
for i := 1 to length(st2) do
begin
write(ord(st2[i]):3,' ');
s := s + ord(st2[i]);
end;
writeln('s = ',s);
if st1 = st2 then writeln('Слова однаковi')
else if st1 > st2 then writeln('Переше слово бiльше')
else writeln('Друге слово бiльше');
readln;
end.