Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Приклад 12.4

Приклад 12.3

Приклад 12.2.

Результати прикладу 12.1.

У наведеному прикладі значення змінної d1 буде послідовно приймати значення від Monday до Sunday, а на екран в залежності від того яке значення надано змінній d1 будуть виводитися сталі рядкового типу Vyhidnyj або robochyj.

Змінній dir не було надано значення, тому ні одна з умовних інструкцій не виконується.

Спосіб надання значень змінним перелічувального типу

Для надання значень змінним перелічувального типу можна використовувати інструкції привласнення.

Суттєвий недолік даних перелічувального типу

Дані перелічувального типу не можна вводити і виводити за домогою відповідно інструкцій Read (Readln) та Write (Writeln).

Створити одновимірний масив, індексами якого будуть назви місяців, а елементами кількість днів відповідного місяця.

Приклад 12.2. (розділ об’яв)

 

Program masiv_perelichuvalnyj;

uses crt;

Type m=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);

days=1..31;

var a: array[m] of days;

t:m;

Приклад 12.2. (розділ інструкцій)

 

Begin clrscr;

for t:=jan to dec do

case t of

jan,mar,may,jul,aug,oct,dec: a[t]:=31;

apr,jun,sep,nov: a[t]:=30;

feb: a[t]:=28;end;

for t:=jan to dec do

writeln('m=',ord(t)+1, ' d=',a[t]);

end.

Задано type week=(mo,tu,we,th,fr,sa,sy);

var year:array[1..365] of week;

Визначити назву того дня тижня, на який випадає і-тий день невисокосного року, якщо 1 січня-середа.

Program dni_roku;

type week=(mo,tu,we,th,fr,sa,su);

var year:array[1..365] of week;

i,m,n:integer; t:week; f:text;

begin assign(f,'dni_new.pas'); rewrite(f);

for i:=2 to 365 do begin

case year[i-1] of

tu: year[i]:=we;

we: year[i]:=th;

th: year[i]:=fr;

fr: year[i]:=sa;

sa: year[i]:=su;

su: year[i]:=mo;

mo: year[i]:=tu; end;

if year[i]=mo then writeln(f,'i=',i,' y=mo') else

if year[i]=tu then writeln(f,'i=',i,' y=tu') else

if year[i]=we then writeln(f,'i=',i,' y=we') else

if year[i]=th then writeln(f,'i=',i,' y=th') else

if year[i]=fr then writeln(f,'i=',i,' y=fr') else

if year[i]=sa then writeln(f,'i=',i,' y=sa') else

if year[i]=su then writeln(f,'i=',i,' y=su'); end;

close(f); End.

По заданій даті (число, місяць(цифра), рік) визначити дату наступного дня.

Приклад 12.4 (розділ об’яв)

program data;

type month=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);

day=1..31; year=1900..2000;

var d:day; m:month; y:year; number:1..12;

Приклад 12.4 (розділ інструкцій)

begin Readln(d,number,y);

case number of

1: m:=jan; 2: m:=feb;

3: m:=mar; 4: m:=apr;

5: m:=may; 6: m:=jun;

7: m:=jul; 8: m:=aug;

9: m:=sep; 10: m:=oct;

11: m:=nov; 12: m:=dec; end;

case m of

jan,mar,may,jul,aug,oct: if d=31 then begin d:=1; m:=succ(m); end else d:=d+1;

apr,jun,sep,nov: if d=30 then begin d:=1; m:=succ(m);end else d:=d+1;

dec:if d=31 then begin d:=1; m:=jan; y:=y+1;

end else d:=d+1;

feb: if (d=28) and (y mod 4<>0) then begin d:=1; m:=mar; end

else if (d=29) then begin d:=1; m:=mar; end

else d:=d+1; end; write(d:2);

case m of

jan: write('jan'); feb: write('feb');

mar: write('mar'); apr: write('apr');

may: write('may'); jun: write('jun');

jul: write('jul'); aug: write('aug');

sep: write('sep'); oct: write('oct');

nov: write('nov'); dec: write('dec'); end;

writeln(y:5,'year'); end.

Дані та результати програми

29 02 2009

30feb 2009 year

29 02 2009

1mar 2000 year

28 02 1996

29feb 1996 year

29 02 1996

1mar 1996 year

30 03 2009

31mar 2009 year

31 03 2009

1apr 2009 year

Лекція 13

Двовимірні масиви

Приклад 13.1. Задано матрицю А. Скласти програму обчислення матриці В=А2 та суми елементів кожного рядка матриці В. Матриці А і В мають розмірність (3 3). Cхему алгоритму представлено на рис. 9.1.

program masrab2;

type mas1=array[1..3] of integer;

mas2=array[1..3,1..3] of integer;

var y:mas1; a,b:mas2; b0,j,i,k:integer;

begin for i:=1 to 3 do

for j:=1 to 3 do read(a[i,j]);

for i:=1 to 3 do begin

for j:=1 to 3 do begin

b0:=0;

for k:=1 to 3 do

b0:=b0+a[i,k]*a[k,j];

b[i,j]:=b0;

write(b[i,j],' '); end; writeln; end;

for i:=1 to 3 do begin

b0:=0;

for j:=1 to 3 do

b0:=b0+b[i,j];

y[i]:=b0;

writeln(y[i]); end; end.

 


 

 

Кінець
i=1,3
b0=0
b0=b0+bij
j=1,3
yi=b0
Вив.yi
i=1,3
j=1,3
k=1,3
b0=0
b0=b0+aikakj
bij=b0
Початок
i=1,3
j=1,3
Введ.аij

 


Приклад 13.2. Задано матрицю C, яка має розмірність (4 3). Знайти найменший елемент матриці C та записати нулі в рядок і стовпчик на перетині яких знаходиться цей елемент. Cхему алгоритму представлено на рис. 13.2.

Файл c:\bp\bin\pryklad\lecture\masiv\mminnul.pas

program masprim20_4; uses crt;

type mas2=array[1..4,1..3] of real;

var c:mas2; s,t:text;

j,i,stb,str:integer; min:real;

begin clrscr; assign(S,'mminnuld.pas'); reset(S);

assign(T,'mas2nrez.pas'); rewrite(T); Writeln(t,'masiv c');

for i:=1 to 4 do begin

for j:=1 to 3 do begin

read(s,c[i,j]); write (t,c[i,j]:6:2); end;

writeln(t); end;

min:=c[1,1];

for i:=1 to 4 do begin

for j:=1 to 3 do begin

if c[i,j]<min then begin min:=c[i,j];

str:=i; stb:=j; end; end; end;

for i:=1 to 4 do if i<>str then c[i,stb]:=0;

for j:=1 to 3 do if j<>stb then c[str,j]:=0;

writeln (t,' new matrix ');

for i:=1 to 4 do begin

for j:=1 to 3 do

write (t,c[i,j]:6:2);

writeln(t); end; close(t); end.

Файл даних c:\bp\bin\pryklad\lecture\masiv\mminnuld.pas

2.2 3.4 0.8 2.3 4.5 7.6 7.1 1.1 5.4 0.95 0.01 5.76

Файл результатів c:\bp\bin\pryklad\lecture\masiv\mas2nrez.pas

masiv c new matrix
2.20 3.40 0.80 2.30 4.50 7.60 7.10 1.10 5.40 0.95 0.01 5.76 2.20 0.00 0.80 2.30 0.00 7.60 7.10 0.00 5.40 0.00 0.01 0.00

 

 

Вив. Ci,j
j=1,3
КІНЕЦЬ
Ci,stb=0
j=1,3
j<>stbb
C str, j=0
i=1,4
T
F
F
T
i=1,4
i<>str
MIN=C1,1
i=1,4
j=1,3
MIN>Ci,j
MIN=Ci,j
str=i;stb=j
Початок
i=1,4
j=1,3
ВведCi,j]
ВивCi,j
F
T

 

 


Рис.9.2

 

Приклад 13.3 Задано матрицю А, яка має розмірність (3х 3). Знайти найбільший та найменший елементи цієї матриці та номери їх рядків. Поміняти місцями рядок, що містить найбільший елемент, з рядком, який містить найменший елемент. Cхему алгоритму представлено на рис. 13.3

program mas2rab;

{perestanovka mestami strok s max i min elementami}

uses crt;

const n=3;

type mas2=array[1..n] of real;

var a:array[1..n] of mas2;

s,t:text; j,i,k,rmax,rmin:integer;

per,max,min:real;

begin clrscr;

assign(S,'mas1dat.pas');reset(S);

assign(T,'masrerez.pas');rewrite(T);

Writeln(t,'masiv a');

for i:=1 to n do begin

for j:=1 to n do begin

read(s,a[i,j]); write (t,a[i,j]:6:2); end; writeln(t); end;

writeln (t,'max element');

max:=a[1,1]; rmax:=1; min:=a[1,1]; rmin:=1;

for i:=1 to n do

for j:=1 to n do begin

if a[i,j]> max then begin max:=a[i,j]; rmax:=i; end;

if a[i,j]< min then begin min:=a[i,j]; rmin:=i; end; end;

writeln (t,max:6:2,min:6:2);

writeln (t,' perestanovka ');

for j:=1 to n do begin

per:=a[rmax,j]; a[rmax,j]:=a[rmin,j]; a[rmin,j]:=per; end;

for i:=1 to n do begin

for j:=1 to n do

write (t,a[i,j]:6:2); writeln (t);

end; close(t); end.

'mas1dat.pas'

2.2 3.4 0.8 2.3 4.5 7.6 7.1 1.1 5.4

masiv a

2.20 3.40 0.80

2.30 4.50 7.60

7.10 1.10 5.40

max element

7.60 0.80

perestanovka

2.30 4.50 7.60

2.20 3.40 0.80

7.10 1.10 5.40

Armin,j= per
j=1,n
per=Armax,j
j=1,n
Armax,j= Armin,j
i=1,n
Вив.Aij
КІНЕЦЬ
Початок
i=1,n
j=1,n
Введ Ai,j
MIN=A1,1rmin=1
i=1,n
j=1,n
Ai,j>MAX
MAX=Aijrmax=i
MAX=A1,1rmax=1
Ai,j<MIN
MIN=Ai,jrmin=i
T
T
F
F

 

 


Приклад 13.4 Задано матрицю А, яка має розмірність (5 5). Знайти локальні мінімуми цієї матриці. Cхему алгоритму представлено на рис.13.4.

Program localmin;

uses crt;

const n=5;

var a: array[1..n,1..n] of real;

min,c:real; k,l,i,j:integer;

f,f1:text;

Begin clrscr;

assign (f, 'lokaldat.pas'); reset(f);

assign (f1,'lokalrez.pas'); rewrite(f1);

for i:=1 to n do begin

for j:=1 to n do begin

read (f,a[i,j]);

write (f1,a[i,j]:5:2); end;

writeln (f1); end;

for i:=2 to n-1 do

for j:=2 to n-1 do begin

min:=a[i,j];

for k:=(i-1) to (i+1) do

for l:=(j-1) to (j+1) do

if (min>a[k,l]) then min:=a[k,l];

writeln (f1,'min[',k,',',l,']=',min:5:2); end;

close(f1); end.

2.20 3.40 0.80 2.30 4.50 min[3,3]= 0.60 min[4,5]= 0.20

7.60 7.10 1.10 5.40 0.20 min[3,4]= 0.60 min[5,3]= 0.10

1.10 4.50 0.60 8.90 5.20 min[3,5]= 0.20 min[5,4]= 0.10

3.10 3.40 0.50 9.80 1.90 min[4,3]= 0.50 min[5,5]= 0.50

7.60 0.10 6.10 4.70 8.30 min[4,4]= 0.50

Приклад 13.5 Задано матрицю розмірності 4х5,елементами якої є дійсні числа. Впорядкувати її рядки по зростанню перших елементів кожного рядка.

Program TP_11;

TYPE st=array[1..5] of real;

mat=array[1..4] of st;

var a:mat;x:st;i,j,k:integer;

f,f1:text;

Begin

assign(f,'matr1.pas');reset(f);

assign(f1,'rezultat1.pas');rewrite(f1);

for i:=1 to 4 do begin

for j:=1 to 5 do begin

read(f,a[i,j]);write(f1,a[i,j]:8:2);end;

writeln(f1);end;

for k:=4 downto 2 do begin

j:=1;

for i:=2 to k do

if a[i,1]>a[j,1] then j:=i;

x:=a[k];a[k]:=a[j];a[j]:=x;end;

writeln(f1,'rezultat');

for i:=1 to 4 do begin

for j:=1 to 5 do begin

write(f1,a[i,j]:8:2);end;writeln(f1);end;

close(f1);end.

-2 3 8 10 -12

15 -3 5 -25 36

-13 37 9 28 -5

5 7 10 -3 6

Файл результатів rezultat

-2.00 3.00 8.00 10.00 -12.00 -13.00 37.00 9.00 28.00 -5.00

15.00 -3.00 5.00 -25.00 36.00 -2.00 3.00 8.00 10.00 -12.00

-13.00 37.00 9.00 28.00 -5.00 5.00 7.00 10.00 -3.00 6.00

5.00 7.00 10.00 -3.00 6.00 15.00 -3.00 5.00 -25.00 36.00

Лекція 14

Підпрограми

Підпрограма у алгоритмічній мові Pascal.

Алгоритмічна мова Pascal має засоби, завдяки яким можна оформлювати послідовність інструкцій, як підпрограму. Підпрограма у алгоритмічній мові Pascal – це частина програми, яку оформлено у вигляді окремої синтаксичної конструкції і цій конструкції програмістом надане ім'я.

Виклик підпрограми.

“Виклик” підпрограми, тобто виконання дій, заданих у підпрограмі у вигляді інструкцій, можна виконати у будь-якій частині програми і довільну кількість разів, вказавши ім'я цієї підпрограми.

Опис підпрограми

Опис підпрограми розташовується у розділі об'яв програми, завершуючи опис об'єктів програми і складається з трьох основних частин:

Заголовку підпрограми;

Розділу об'яв локальних змінних, які використовуються підпрограмою. Ця частина може бути відсутня.

Розділу інструкцій (тіла підрограми), які і виконують обчислення.

Два види підпрограм

Розрізняють два види підпрограм - підпрограми-процедури та підпрограми-функції (у подальшому просто процедури та функції). Усі процедури і функції поділяються на два класи: стандартні і визначені користувачем.

Стандартні процедури і функції

Стандартні процедури і функції є частиною алгоритмічної мови (наприклад, sin(x), exp(x), процедури і функції, що реалізують роботу з даними рядкового типу) і тому не вимагають попереднього опису.

Структура процедури і функції

Маючи подібну структуру процедури і функції, відрізняються призначенням і засобом їхнього використання.

Структура заголовків процедур та функцій

Структура заголовків процедур та функцій дуже схожа. Починаються вони службовим словом, яке визначає вид підпрограми, далі слідує ім'я цієї підпрограми, за яким у дужках розташовуються формальні параметри (хоча вони можуть бути відсутні).

Функція

Для функцій необхідно вказати тип результата, який вони повертають у основну програму. Вказується тип після двокрапки за дужками з формальними параметрами. Тіло функції повинно включати інструкцію, у якій імені функції привласнюється результат обчислень

Заголовок підпрограми

За заголовком підпрограми, як і у програмі слідує розділ об'яв локальних змінних, які використовуватимуться у даній підпрограмі. Далі слідує тіло підпрограми, яке розташовується між операторними дужками begin…end.

Підпрограма

Підпрограма лише формалізує алгоритм обчислень, а виконуються обчислення лише після виклику підпрограми з основної програми. Виклик підпрограми відбувається після вказування імені відповідної підпрограми з фактичними параметрами у основній програмі.

<== предыдущая лекция | следующая лекция ==>
Приклад 11.4 | Приклад 14.6
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 226; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.099 сек.