Оператор циклу з передумовою.
Використовується в випадку неозначеності кількості повторів. Умова закінчення циклу перевіряється перед виконанням циклу.
Формат:
While <умова> do <оператор>;
<умова>- логічний вираз
<оператор> -тіло циклу. Може бути простим або складним оператором.
Алгоритм виконання:
1) Визначається значення <умова>.
2) Якщо результат істина, то виконується <оператор>.В протилежному випадку цикл завершується.
3) Після виконання <оператор>дії повторюються з кроку 1).
Таким чином, цикл повторюється до тих пір, поки значення <умова>буде істина.
Щоб оператор працював вірно, необхідно щоб в тілі циклу змінювались елементи, що входять до виразу <умова>.
Оператор циклу з післямовою.
Використовується в випадку неозначеності кількості повторів. Умова закінчення циклу перевіряється після виконання циклу. Тому тіло циклу виконується хоча б один раз.
Формат:
Repeat
<оператор 1>;
.
.
<оператор n>
until <умова>;
<умова> -логічний вираз
<оператор1> . . <оператор n> -тіло циклу.
Алгоритм виконання:
1) Виконуються оператори тіла циклу.
2) Визначається значення <умова>.
3) Якщо результат не істина, то перехід до дії 1).В протилежному випадку цикл завершується.
Таким чином, цикл повторюється до тих пір, поки значення <умова>буде не істина.
Розробка програм реалізації циклічних алгоритмів.
Приклад 1.Вивести послідовно числа від 150 до вказаного меншого числа в зворотному порядку.
| |||
Приклад 2.Знайти суму десяти введених значень.
| |||
Приклад 3.Вводиться послідовність символів. При введенні символу ´П´ - вивести своє прізвище, при введенні символу ´І´ - ім´я, при введенні символу ´к´ - завершити роботу.
| |||
Приклад 4.Знайти найбільше значення функції Y=2sin(X+3)+2X на проміжку [10,100] в точках з кроком 10.
| |||
Приклад 5.Знайти кількість цифр в заданому числі.
| |||
Приклад 6.Вивести всі трьохзначні числа у яких крайні цифри однакові.
| |||
Завдання для самоперевірки.
1. Який з операторів реалізації циклічних процесів краще використати, якщо відома кількість повторів.
2. Який з операторів реалізації циклічних процесів краще використати, якщо відомо, що повтори потрібно завершити при натисканні деякої клавіші.
3. Який з операторів реалізації циклічних процесів краще використати, якщо відома, що повтори потрібно завершити коли змінна набуде деякого значення.
4. В операторі for параметр циклу повинен бути якого типу?
5. Що являється умовою завершення циклу в операторі repeat ?
6. Скільки разів буде виконано цикл For i:=1 to 1 do writeln (‘День добрий!’);
7. Визначити Y. Y:=1; For i:=1 to 5 do if i<4 then inc(y);
8. Що являється умовою завершення циклу в операторі while ?
9. Скільки разів буде виконано цикл While true do writeln (‘День добрий!’);
10. Що являється умовою завершення циклу в операторі for ?
11. Розробити програму, яка визначає кількість позитивних, негативних і нульових значень в послідовності 15 заданих чисел.
12. Розробити програму, яка визначає факторіал заданого числа.
13. Розробити програму, яка визначає мінімальне введене значенні при вводі послідовності цілих чисел. Введення завершується при вводі числа -77.
14. Розробити програму, яка визначає всі натуральні дільники заданого числа.
15. Розробити програму, яка визначає чи є задане ціле число простим.
16. Розробити програму, яка знаходить кількість цифр заданого натурального числа.
17. Розробити програму, яка виводить всі трьохзначні натуральні числа у яких середня цифра є нуль.
18. Розробити програму, яка знаходить суму членів ряду . N = 20.
19. Розробити програму, яка знаходить суму перших десяти членів ряду .
20. Розробити програму, яка знаходить суму для заданого n.
Складні типи даних
Складні типи мають внутрішню структуру, яка складається з сукупності простих типів. До складних типів відносяться масиви, множини, записи, файли, об’єкти, посилання і процедурний тип.
Складні типи можна поділити на структуровані, посилання і процедурні типи.
Структуровані типи даних
1) Масиви
2) Строкові дані
3) Множини
4) Записи
5) Типізовані константи
6) Файли
7) Об’єкти
Масиви.
1) Одновимірні масиви.
2) Багатовимірні масиви. Двовимірні масиви (матриці).
Масив - це обмежена послідовність елементів одного типу.
Кожний елемент в масиві має свій порядковий номер. Елементи масиву можна перерахувати (проіндексувати). Індексом може бути довільний перелічувальний тип.
Масив характеризується іменем, розміром і типом елементів.
Масиви можуть бути одновимірні і багатовимірні.
Одновимірні масиви.
Формат опису типу "масив" для одновимірних масивів:
type
<ім’я типу> = ARRAY <[<диапазон індексу>]> OF <тип елементів>;
<диапазон індексу> - діапазон довільного перелічувального типу. Якщо діапазон охоплює всі елементи типу, то замість діапазону можна вказувати ім’я типу, наприклад, BYTE, CHAR.
Наприклад:
type
Tmas = array [1..10] of real;
Tmas1= array [10..100] of char;
Tmas2= array [‘a’..’k’] of integer;
Tmas3= array [byte] of string[30];
Для використання масиву в програмі необхідно об’явити змінні типу „масив”:
Var
mas: Tmas;
mas1: Tmas1;
mas2: Tmas2;
mas3: Tmas3;
mas4: array [1..10] of word;
Кожний елемент масиву характеризується іменем масиву і індексом. Наприклад, mas1[11], mas3[2]. Такі змінні називають індексованими змінними.
Область допустимих значень для масиву визначається типом елементів масиву.
Операції над масивами: не визначені, тобто не допускаються ніякі операції. Але для однотипних масивів можна виконувати оператор присвоєння. Наприклад, якщо маємо опис
Var
mas5,mas6: Tmas;
то можна виконати mas5:=mas6; В результаті вміст масиву mas5 буде таким же, як і вміст масиву mas6.
Щоб обробити масив(ввести, вивести, змінити), необхідно звернутись до кожного елементу масиву, тобто, для обробки масивів використовуються оператори циклу.
Розробка програм з використанням одновимірних масивів.
Приклад 1.Для заданого масиву з 10 дійсних значень знайти суму позитивних значень.
| |||
Приклад 2.В заданому масиві з 10 дійсних значень кожне негативне значення зменшити в разів.
PROGRAM masiv;
{Заміна негативних позитивних значень в масиві з 10 дійсних чисел на значення в 5 разів збільшене.}
var
M:array [1..10] of real;
i:byte; {M – масив значень i - змінна циклу}
begin
for i:=1 to 10 do
begin
write ('введи число');
readln(M[i]);
end;
for i:=1 to 10 do
if M[i]< 0 then
M[i]:=5*M[i];
writeln ('Новий вміст масиву’);
for i:=1 to 10 do
write (M[i]); writeln;
end.
Приклад 3.Маємо 2 масиви цілих елементів розміром по 5 елементів. Порахувати кількість пар відповідних елементів масивів, сума яких не більше 15. Індекс цих пар записати в третій масив.
Program masiv;
var
mas1,mas2,mas3:array [1..5] of integer;
i,k:word;
begin
for i:=1 to 10 do
begin
write ('Введи пару чисел');
readln(маі1[i], маі2[i]);
end;
k:=0;
for i:=1 to 5 do
if mas1[i]+mas2[i]<=15 then
begin
inc(k);
mas3[k]:=i;
end;
writeln ('Кількість пар ',k:4);
writeln ('Результуючий масив:');
for i:=1 to k do
write (mas3[i]:5);
writeln; end.
Приклад 4.Вводиться послідовність символів. Необхідно підрахувати скільки разів введено кожну малу букву латинського алфавіту. Завершення вводу - введення символу *.
В цьому прикладі використаємо масив для зберігання кількості кожного введеного символу. Індексом цього масиву визначимо символи буков.
Program simbol;
var
K:array [‘a’..’z’] of integer; {Масив кількостей кожного символа}
c:char;
begin
{Очистка масиву кількостей, тобто кількість кожного символу встановлюється
рівною нулю}
for c:=’a’ to ’z’ do
K[c]:=0;
{Цикл по обробці введених символів}
repeat
write (‘Введи символ’);
readln (c);
if ( c>=’a’) and (c<=’z’) then
K[c]:= K[c]+1;
Until c=’*’;
writeln ('Кількість букв ‘);
{Цикл виведення результатів}
for c:=’a’ to ’z’ do
write (c,’=’,K[c]:2);
writeln;
readln;
end.
Приклад 5.Визначити, чи елементи заданого масиву 10 дійсних значень розташовані в зростаючому порядку. Перегляд масиву припинити при порушенні порядку.
В таких задачах цикл може припинитись в двох випадках; якщо переглянуто всі елементи і якщо знайдено порушення. В такому разі не можна використовувати цикл з параметром, хоча кількість членів масиву відома. Невизначеність повторів вносить умова порушення порядку. В таких випадках доцільно ввести логічну змінну, яка змінює своє значення на протилежне при визначенні порушення порядку розташування членів масиву. Індекс масиву необхідно рахувати окремо.
По завершенні циклу по значенню цієї змінної можна визначити чи було порушення.
PROGRAM posled;
{Визначення, чи елементи масиву розташовані в зростаючому порядку.}
var
M:array [1..10] of real;
i:byte;
b:Boolean;
{M – масив значень
i - змінна циклу
b - =true, якщо елементи в зростаючому порядку, false - якщо ні }
begin
for i:=1 to 10 do
begin
write ('введи число');
readln(M[i]);
end;
b:=true;
i:=1;
while (i<10) and b do
begin
if M[i+1]< M[i] then
b:=false;
i:=i+1;
end;
if b then
writeln ('Елементи масиву зростають’)
else
write ('Елементи не масиву зростають’);
readln;
end.
Приклад 6.Визначити значення виразу:
В даному прикладі необхідно знайти суму, елементами якої є вираз, елементами якого є два масиви A і B. Розмір масивів можна визначити з знаку суми, де вказано, що треба скласти 15 елементів.
Щоб знайти значення цього виразу необхідно заповнити значеннями масиви і , крім того, ввести значення для змінної m.
PROGRAM suma;
{Визначення значення виразу з сумою.}
var
A,B:array [1..15] of real;
k:byte;
S:real;
{A,B – масиви значень
k - змінна циклу
S - сума}
begin
for k:=1 to 15 do
begin
write ('Введіть 2 числа');
readln(A[k],B[k]);
end;
write ('Введіть значення m');
readln(m);
S:=0;
for k:=1 to 15 do
S:=S+(A[k]+B[k])/(k+5);
S:=15*m+7*S;
writeln (‘S=’,S:8:3);
readln;
end.
Багатовимірні масиви
Для багатовимірних масивів вказуються діапазони для кожного індексу, перелічені через кому. Індексом може бути будь-який перелічений тип.
Найчастіше використовуються двовимірні масиві, які називають матрицями.
Формат опису типу "масив" для двовимірних масивів:
type
<ім’я типу> = ARRAY <[<диапазон індексу 1>,<диапазон індексу 2>]> OF
<тип елементів>;
Наприклад:
type
Tmatr= array [1..10,1..10] of word;
Tmatr1= array ['a'..'z',1..100] of integer;
Var
matr: Tmatr;
matr1: Tmatr1;
Елемент матриці характеризується іменем матриці і двома індексами. Наприклад, matr[2,3].
Деякі відомості про матриці:
Матриця має вигляд
a11 a12 a13
a21 a22 a23
a31 a32 a33
Матриця складається з рядків і стовпців. Перший індекс вказує на номер рядка, а другий - на номер стовпця. Розмір матриці визначається добутком кількості рядків на кількість стовпців.
Якщо кількість рядків дорівнює кількості стовпців, то матриця називається квадратною.
Елементи матриці, які мають однакові індекси, складають головну діагональ матриці. В нашому прикладі це елементи (a11, a22, a33). Елементи, що лежать над головною діагоналлю - (a12, a13, a23). Можна помітити, що у цих елементів другий індекс більше першого. Елементи, що лежать під головною діагоналлю - (a21, a31, a32). У цих елементів другий індекс менше першого.
Матрицю можна розглядати як масив рядків, де кожний рядок є масив. Тобто опис
mas= array [1..10,1..10] of word; і опис
mas2= array [1..10] of array [1..10] оf word; є ідентичними.
Можна звертатись до рядка, як до масиву, наприклад, mas[3].
Розробка програм з використанням двовимірних масивів.
Приклад 1.Знайти суму елементів квадратної матриці 3*3.
program suma;
var
matr:array[1..3,1..3] of real;
i,k:word;
s:real;
begin
writeln (‘ Введiть матрицю у виглядi матриці’);
for i:=1 to 3 do
begin
for k:=1 to 3 do
read (matr[I,k];
readln;
end;
s:=0;
for i:=1 to 3 do
for k:=1 to 3 do
s:=s+matr[i,k];
writeln ('Сума елементів матриці=',s:6:2);
end.
Приклад 2.В матриці 5*4 знайти суму елементів кожного рядка.
program rd;
var
matr:array[1..5,1..4] of real;
i,k:word;
s:real;
begin
writeln (‘ Введiть матрицю у виглядi матриці’);
for i:=1 to 5 do
begin
for k:=1 to 4 do
read (matr[I,k];
readln;
end;
for i:=1 to 5 do
begin
s:=0;
for k:=1 to 4 do
s:=s+matr[i,k];
writeln ('Сума елементів',i:3,'рядка',s:6:2);
end;
end.
Приклад 3.В матриці 5*3 поміняти місцями 2 і 4 рядки.
program zamina;
type
TM = array[1..3] of real;
var
M: array[1..5] of TM;
C:TM;
i,k:word;
begin
writeln (‘ Введiть матрицю у виглядi матриці’);
for i:=1 to 5 do
begin
for k:=1 to 3 do
read (M[I,k];
readln;
end;
C:=M[2];
M[2]:=M[4];
M[4]:=C;
Writeln (‘Нова матриця’);
for i:=1 to 5 do
begin
for k:=1 to 3 do
write (M[I,k]:6:2);
writeln;
end;
end.
Завдання для самоперевірки.
1. Маємо опис
Type
Vector=array [1..30] of real;
Var
Dan:Vector;
Скільки елементів в масиві Dan?
Назвати перший і останній елементи масиву.
2. Маємо опис
Type
day=(yesterday, today, tomorrow);
Var
Dan:array [day] of 0..24;
Скільки елементів в масиві Dan?
Які значення може приймати індекс?
Назвати перший і останній елементи масиву.
Які значення можуть приймати елементи масиву?
3. Описати масив, елементами якого є натуральні числа, а індексами довільні символи.
4. Чи можна в процесі виконання програми змінити розмір масиву?
5. Масив може складатись з одного елементу? Описати його.
6. Описати масив розміром 10 елементів, значеннями яких може бути true або false.
7. Маємо опис
Type
TMas=array of [1..15,’a’..’z’] of real ;
Var
A,B:TMas;
Які з вказаних дій допустимі в мові Pascal:
A=B; A:=B; A:=A+B; read(A); A[1}:=B[2]; A[3]:=A[4]; A[5,’a’]:=B[6,’d’]; A<>B;
8. Маємо опис
Type
TMas=array of [1..5,1..5] of real ;
Var
A,B:TMas;
Скільки елементів містить масив А?
Назвати перший і останній елементи масиву.
Назвати елемент масиву, що знаходиться в третьому рядку і четвертому стовпці.
9. Визначити кількість нульових елементів в заданому масиві.
10. Задано 20 чисел. Визначити, скільки серед них чисел, що дорівнюють останньому.
11. Задано масив з 10 символів. Вивести символи в зворотному порядку.
12. Задано масив з 30 цифрами. Визначити, яка цифра в ньому зустрічається найчастіше.
13. Задано масив 20 символів. Визначити, чи порядок символів з початку масиву до кінця і навпаки однаковий. Наприклад, абвгддгвба.
14. Знайти суму всіх елементів матриці 5х5.
15. Підрахувати суму додатних елементів в кожному рядку матриці 5х6.
16. Масив розміром 12х31 містить дані про температуру в місті. Визначити дні, коли була найвища і найнижча температура.
17. Розробити програму формування матриці за зразком: 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 2 0 0 0 0 0 0 0
0 0 0 3 0 0 0 0 0 0
. . . . . . . . . . . . . . .
0 0 0 0 0 0 0 0 0 9
Дата добавления: 2015-12-10; просмотров: 995;