Оператор циклу з передумовою.

Використовується в випадку неозначеності кількості повторів. Умова закінчення циклу перевіряється перед виконанням циклу.

Формат:

While <умова> do <оператор>;

<умова>- логічний вираз

<оператор> -тіло циклу. Може бути простим або складним оператором.

 

Алгоритм виконання:

1) Визначається значення <умова>.

2) Якщо результат істина, то виконується <оператор>.В протилежному випадку цикл завершується.

3) Після виконання <оператор>дії повторюються з кроку 1).

Таким чином, цикл повторюється до тих пір, поки значення <умова>буде істина.

Щоб оператор працював вірно, необхідно щоб в тілі циклу змінювались елементи, що входять до виразу <умова>.

 

 

Оператор циклу з післямовою.

 

Використовується в випадку неозначеності кількості повторів. Умова закінчення циклу перевіряється після виконання циклу. Тому тіло циклу виконується хоча б один раз.

Формат:

Repeat

<оператор 1>;

.

.

<оператор n>

until <умова>;

<умова> -логічний вираз

<оператор1> . . <оператор n> -тіло циклу.

 

Алгоритм виконання:

1) Виконуються оператори тіла циклу.

2) Визначається значення <умова>.

3) Якщо результат не істина, то перехід до дії 1).В протилежному випадку цикл завершується.

Таким чином, цикл повторюється до тих пір, поки значення <умова>буде не істина.

Розробка програм реалізації циклічних алгоритмів.

 

Приклад 1.Вивести послідовно числа від 150 до вказаного меншого числа в зворотному порядку.

       
 
   
PROGRAM chisla; var x,i:byte; {x - значення, що вводиться i - змінна циклу} begin write ('введи ціле число, менше 150'); readln(x); for i:=150 downto x do write (i:5); end.  
 


Приклад 2.Знайти суму десяти введених значень.

 

       
 
   
PROGRAM suma; var x,s:real; i:byte; {x - значення, що вводиться s - сума введених значень i - змінна циклу} begin s:=0; for i:=1 to 10 do begin write ('введи наступне значення'); readln(x); s:=s+x; end; writeln ('Сума введених значень = ',s:10:2); end.  
 

 


 

Приклад 3.Вводиться послідовність символів. При введенні символу ´П´ - вивести своє прізвище, при введенні символу ´І´ - ім´я, при введенні символу ´к´ - завершити роботу.

 

       
 
   
  PROGRAM Dann; var c:char; {c - символ, що вводиться} begin repeat write (‘Введи символ (для заверш.роботи символ к)’); readln c; case c of ’П’,’п’: writeln (’Iванов’); ’I’,’i’: writeln (’Іван ’); end; until c=’к’; end.  
 

 

 


 

Приклад 4.Знайти найбільше значення функції Y=2sin(X+3)+2X на проміжку [10,100] в точках з кроком 10.

 

       
   
  PROGRAM Funk; var X,Y: max:real; begin X:=10; Max:=2*sin(X+3)+2*X; While X<= 100 do Begin Y:= 2*sin(X+3)+2*X; If Y>max then Max:=Y; X:=X+10; End; Writeln (‘Максимальне значення функції ‘,max:7:2); end.  
 
 

 


Приклад 5.Знайти кількість цифр в заданому числі.

       
 
   
Program chislo; {Сума цифр заданого числа} var x,S:integer; begin write ('Введи чисдо'); readln (x); S:=0; while x<>0 do begin S:=S+x mod 10; x:=x div 10; end; writeln ('Сума цифр заданого числа = ',S:5); readln; end.    
 

 

 


Приклад 6.Вивести всі трьохзначні числа у яких крайні цифри однакові.

       
 
   
Program chislo; var k,m,n:integer; begin for k:=1 to 9 do for m:=0 to 9 do for n:=0 to 9 do if k=n then writeln (k*100+m*10+n:5); readln; end.  
 

 

 


Завдання для самоперевірки.

 

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 дійсних значень знайти суму позитивних значень.

       
 
   
PROGRAM suma; {Знаходження суми позитивних значень в масиві з 10 дійсних чисел.} var M:array [1..10] of real; s:real; i:byte; {M – масив значеннь s - сума введених значень i - змінна циклу} begin s:=0; for i:=1 to 10 do begin write ('введи число'); readln(M[i]); end; for i:=1 to 10 do if M[i]>0 then s:=s+ M[i]; writeln ('S = ',s:10:2); end.  
 

 

 


Приклад 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; просмотров: 954;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.199 сек.