![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример 2.7
Program Codes_of_Chars; {Программа вводит символ и выводит на экран его код. Для завершения работы программы нужно дважды нажать Enter} var ch: Char; {Вводимый символ} const CR = 13; {Код символа CR} begin repeat ReadLn(ch); WriteLn(ch, ' = ', ord(ch)) until ord(ch) = CR end. Обратите внимание: пара REPEAT... UNTIL подобна операторным скобкам begin... end, поэтому перед UNTIL ставить точку с запятой необязательно. Для гибкого управления циклическими операторами FOR, WHILE и REPEAT в состав Турбо Паскаля включены две процедуры: BREAK - реализует немедленный выход из цикла; действие процедуры заключается в передаче управления оператору, стоящему сразу за концом циклического оператора; CONTINUE - обеспечивает досрочное завершение очередного прохода цикла; эквивалент передачи управления в самый конец циклического оператора. Введение в язык этих процедур практически исключает необходимость использования операторов безусловного перехода |
Структурований тип даних – масив. Задання типу масив. Індексація елементів. Тип індексації. Доступ до елементів масиву. Дії над масивами.
Масиви [ред.]
Досить часто виникає потреба обробляти зберігати ряд однотипних змінних разом. Наприклад, якщо програма має зберігати (наприклад, для знаходження середнього) оцінки з інформатики 10 учнів, можна писати так:
program Otsinky;
var o1, o2, o3, o4, o5, o6, o7, o8, o9, o10: integer;
s: real;
Begin
writeln('Введіть оцінки: ');
readln(o1, o2, o3, o4, o5, o6, o7, o8, o9, o10);
s: =(o1+o2+o3+o4+o5+o6+o7+o8+o9+o10)/10;
writeln(s);
end.
Але такий спосіб запису:
· дуже довгий;
· потребує явної операції з кожною змінною, неможливо загнати їх усіх в цикл.
Щоб вирішити ці проблеми, в мові Паскаль існує спеціальний тип даних - масив. Запис
var o: array [1..10] of integer;
визначає 10 змінних типу integer, об'єднаних під єдиним ім'ям. Окремі змінні називаються за індексом в квадратних дужках: o[1], o[5], o[10]. Індекс може бути змінною (o[i] - i-ий елемент масиву) чи навіть виразом: o[max(i, j)]. Зверніть увагу на те, що тип елементів масива, а також найменший і найбільший можливі індекси масива вказуються при його визначенні; спроба звернутися до елементу, що виходить за ці межі, на кшталт o[11] чи o[30] викличе помилку. Перепишемо програму, наведену вище:
program Otsinky;
var o: array [1..10] of integer;
i: integer;
s: real;
Begin
for i: =1 to 10 do begin
write('Введіть оцінку ', i, '-го учня: ');
readln(o[i]);
end;
s: =0;
for i: =1 to 10 do
s: =s+o[i];
writeln(s);
end.
Зверніть увагу, що для обчислення суми нам довелося скористатися додатковою змінною s, яка спочатку рівна нулю, а потім до неї покроково додається оцінка кожного учня.
Введення, виведення і сортування масивів [ред.]
Це три найтиповіші задачі, з якими доводиться стикатися при роботі з масивами, і які викликають в початківців питання. Массив - не одна змінна, тому стандартні команди write і readln з ним не працюють (перевірте це!). Оскільки масив - це набір змінних, до яких звертаються за допомогою індекса, то більшість операцій з масивами потребують циклів по цьому індексу. Отже, ввід масиву виглядає приблизно так:
writeln('Введіть елементи масиву');
for i: =1 to n do
readln(A[i]);
а вивід, відповідно,
writeln('Масив A: ');
for i: =1 to n do
write(A[i], ', ');
де мається на увазі, що масив A має індекси від 1 до n, а i - змінна типу integer. Звісно, вводити і виводити можна і іншими способами, експерементуйте!
Що ж стосується сортування, тобто впорядковування елементів, то існує багато [: w: Алгоритм сортування|різних алгоритмів] для цього. Найпростішим є так званий " бульбашковий алгорим", який полягає в тому, що перший елемент порівнюється з другим; якщо перший більший, елементи обмінюються місцями. Після цього другий порівнюється з третім, за потреби обмінюються, третій - з четвертим і т.д. Виходить, ніби легка " бульбашка" спливає у важкій рідині. Після досягнення кінця циклу можна бути впевненим, що останній елемент - найбільший; після цього спливає нова " бульбашка" і т.д., доки весь масив не буде впорядкованим. Ось повний код програми:
Program Bulbashka;
var arr: array [1..10] of integer;
i, j, t: integer;
Begin
writeln('Введіть елементи масиву');
for i: =1 to 10 do
readln(arr[i]);
for i: =1 to 9 do begin
for j: =1 to 10-i do begin
if arr[j] > arr[j + 1] then begin
t: = arr[j];
arr[j]: = arr[j + 1];
arr[j + 1]: = t;
end;
end;
end;
writeln('Відсортований масив: ');
for i: =1 to 10 do
write(arr[i], ', ');
end.
Зверніть увагу:
· для вводу і виводу ми скористалися наведеними вище фрагментами коду;
· t - тимчасова змінна, потрібна для обміну значень;
· на організацію вкладених циклів;
· на розстановку операторних дужок begin-end у вкладених циклах. Чи всі вони потрібні? Без яких можна обійтися? Яка програма легше сприймається - з ними чи без них?