Опис математичної моделі. Реальне явище або процес замінюється певним математичним співвідношенням, при цьому допускаються певні спрощення в математичній моделі. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Опис математичної моделі. Реальне явище або процес замінюється певним математичним співвідношенням, при цьому допускаються певні спрощення в математичній моделі.



Опис математичної моделі. Реальне явище або процес замінюється певним математичним співвідношенням, при цьому допускаються певні спрощення в математичній моделі.

Розв’язання математичної моделі. Якщо математичні співвідношення допускають точні розв’язки, то нема потреби використовувати наближені методи. Якщо ж модель є достатньо складною, то використовується якийсь із наближених чисельних методів.

Побудова алгоритму розв’язку. Часто одну і ту ж задачу можна розв’язати різними способами. Отримавши різні алгоритми, звичайно обирається найефективніший з них. В якості критерію ефективності вибирається час виконання, точність отриманого результату, використанням системних ресурсів. Оскільки час роботи суттєво залежить від машини, на якій реалізується алгоритм, то швидкодію алгоритму прийнято в кількості так званих „важких” операцій. Під „важкими” розуміють ті операції, на які процесор затрачає більше часу та ресурсів. Для математичних задач – операції множення, ділення та звернення до функції, для задач обробки структур даних – операція порівняння, для задач системного програмування процесора – операція пересилки даних.

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

Крім оцінки ефективності алгоритму встановлюють такі властивості, як стійкість та коректність, а для алгоритмів послідовних наближень ще й збіжність.

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

Під коректним алгоритмом розуміють такий алгоритм, який дає єдиний стійкий розв’язок за скінчену кількість кроків. Остання умова означає, що він не повинен зациклюватися.

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

В будь-якому випадку алгоритм повинен будуватися без орієнтації на якусь конкретну мову програмування.

Програмна реалізація алгоритму. Вибір мови програмування здійснюється з двох основних міркувань:

а) можливостями мови;

б) наявність матеріальних ресурсів та апаратних засобів.

При програмуванні проводиться верифікація програм та їх оптимізація. Це ніби продовження аналізу ефективності алгоритму та покращення за рахунок можливостей певної мови програмування.

Під верифікацією розуміється правильності програми.

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

ТЕМА Структурне програмування. Основні структурні елементи алгоритмів.

При розробці великих програмних систем виникає проблема контролю за виконанням всього проекту. Одним із способів вирішення принципів цієї проблеми є принцип „розділяй і володарюй”. Він передбачає розбиття основної задачі на деякі під задачі, які більш-менш незалежні. Кожен з компонентів теж може поділятися на під задачі. При цьому зрозуміло, що алгоритм розв’язку теж розділяється на під алгоритми. Такий поділ значно полегшує розробку і від лагодження певних частин.

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

В структурному програмування більшість програм можна представити як послідовність викликів окремих найбільш загальних підпрограм.

При допомозі цих трьох елементів можна побудувати будь-яку конструкцію алгоритму, а отже і весь алгоритм.

Зрозуміло, що такий стиль програмування можна реалізувати в засобах структурних мов програмування. Їх особливістю є те, що програми мають строго визначену структуру. Основні частини програми, які відповідають за окремі алгоритми, за своєю будовою подібні до головної програми, тобто мають таку ж структуру.

До структурних мов програмування відносять Pascal, C++,Delphi. В цих мовах основною компонентою є програми, процедури або функції. Це є ніби програма, яка виконує окрему частину алгоритму. Структурні мови зручні тим, що на основі них можна будувати модулі, бібліотеки зовнішніх програм, які використовуються декількома програмами одночасно.

ТЕМА: Основні поняття програмування на мові Pascal.

1) Алфавітмовивключає в себе:

а) 52 англійські букви, знак підкреслення.

б) десяткові цифри 0,1,...,9.

в) спеціальні символи:

+ - плюс @ - комерційне а

- - мінус. – крапка

* - зірочка, - кома

/ - дробова риска: - двокрапка

= - дорівнює; - крапка з комою

> - більше ‘ - апостроф

< - менше № - номер

[ ] – квадратні дужки $ - знак грошової одиниці

() – круглі дужки ^ - тильда

{ } – фігурні дужки _ - проміжок (не має позначення)

Проміжок – незаповнена позиція в тексті. Можна сказати, що це невидимий, але такий, що сприймається ЕОМ символ, який займає в тексті одну позицію.

2) Лексемимови. Під лексемами розуміють елементарні конструктивні елементи програми, які є неподільними:

а) службові слава (55):

Absolute end inline procedure

And external interface program

Array file interrupt record

Begin for label repeat

Case forward mod set

Const function nil shl

Div goto not shr

Do if of string

Downto implementation o then

Else in packed to

Object virtual type unit

Until uses var while

With xor constructor destructor

б) ідентифікатори – імена окремих компонентів програми (констант, змінних, типів, процедур, функцій, файлів і програм).

Правило запису ідентифікаторів:

ü ідентифікатори починаються тільки з букви або знаку підкреслення;

ü ідентифікатор може складатися з букв, цифр і знаку підкреслення;

ü між двома ідентифікаторами повинен бути хоча б один проміжок;

ü максимальна довжина ідентифікатора 127 символів, але ЕОМ розпізнає тільки перші 63 символи;

ü ідентифікатор не повинен співпадати за написанням ні з одним зі службових слів;

ü великі і малі букви в ідентифікаторі не розрізняються.

в) зображення – об’єкти програми, що є значенням певного типу. Це можуть бути числа, символи, рядки символів.

г) розділювані. В якості них використовують символи. Вони відокремлюють окремі компоненти.

д) коментарі. { коментар }.

Е) директиви. Не виконувана інструкція процесору.

ТЕМА: Структура програми.

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

Програма складається з описової частини та тіла.

ОПИСОВАЧАСТИНА:

1. Program < ім’я програми> (не обов’язкова частина).

2. Директиви (не обов’язкові) { $... }.

Uses – специфікація (uses CRT).

Label – оголошення міток. Мітки у програмі позначають оператори, на які повинне передаватися виконання згідно з алгоритмом, якщо потрібно здійснити обхід деякого фрагменту. Мітки використовуються з оператором goto. Використання міток не бажане.

Const – оголошення констант. Константи – величини, значення яких встановлені в описовій частині програми і в процесі виконання програми не змінюються.

CONST < ідентифікатор > = < значення константи>;

Наприклад.

Const max = 1000; min = 1;

Type – оголошення типів. Тип – повна сукупність елементів деякої природи, що володіють спільними для них властивостями.

Ці властивості визначають діапазон допустимих значень, операції, що застосовують до елементів типу.

Скалярні типи – множини елементів, які є анатомічними величинами, тобто неподільними на простіші елементи(дійсні, цілі числа, символьні, логічні, перелічувані та інтервальні типи).

Перші чотири типи – стандартні, а два останні будуються згідно певних правил.

TYPE <ідентифікатор> = <опис типу>;

Наприклад

Type n=integer; n1=array[1..10] of real; n2=(red,yellow,green);

Var – оголошення змінних. Змінні – величини, значення яких в процесі виконання програми може змінюватися. Якщо є декілька змінних одного типу, то їх можна оголосити в одному розділі, перелічуючи їх через кому. Заданя типу змінних може бути явне, або через раніше оголошений тип.

VAR <ідентифікатори>: <ім’я типу>;

Наприклад

Var a,b,c: integer;

ПРОЦЕДУРА.

PROCEDURE <імя> (<список формальних параметрів>);

<оголошення>

<тіло>

ФУНКЦІЯ.

FUNCTION <імя> (<спиток формальних пораметрів>);<тип результату>;

<оголошення>

<тіло>

BEGIN

<оператор>;

END.

Виконання цього оператора здійснюється з права наліво: спочатку обчислюється результат виразу, здійснюється перевірка відповідності типів, здійснюється занесення в ділянку пам’яті, де розміщена змінна відповідного значення.

Наприклад

Var x:real; y:integer; c:char;

y:=2;

x:=y+3.5;

y:=ord(c);

2. Складенийоператор. Якщо потрібно деяку групу команд інтерпретувати, їх як одну команду, тобто об’єднати їх в певному контексті, то використовують складені оператори.

BEGIN<оператор1>;<оператор2>...; END;

Наявність крапки з комою перед end означає, що перед ним ще є один пустий оператор. Він потрібний в таких випадках: якщо має здійснюватися безумовний перехід по мітці на кінець вкладеного оператора, то ця мітка повинна відмічати пустий оператор, а не слово end.

<мітка>: <пустий оператор> END;

4. Операторивводу - виводу. В мові програмування Turbo Pascal ввід-вивід здійснюється насправді не операторами, а стандартними

Підпрограмами - процедурами вводу-виводу, якщо вважати виклик підпрограми як оператор виклику підпрограми, то в цьому розумінні можна вважати відповідні процедури операторами. Під пристроєм вводу-виводу розуміється сукупність наступних компонентів ЕОМ: клавіатура, монітор, порти для під єднання цих пристроїв.

а) Операторвводу. Pascal має дві процедури вводу: READ,READLN. Оператор вводу read здійснює читання даних із буфера обміну пристрою вводу-виводу без переведення біжучого провідника на новий рядок. Процедура readln здійснює читання із переведенням біжучого вказівника на початок нового рядка.

Процедури можуть мати в якості своїх параметрів різну кількість різних об’єктів різних типів. Для процедур читання це може бути список ідентифікаторів лише змінних. Кількість їх і порядок довільний, головне, щоб тип був допустимий для процедур читання. Не можна читати перелічувальні, цілі масиви, цілі записи.

Наприклад

Var

x: integer;

y: real;

s: string;

c: char;

read (x,y,s,c);

Наприклад

Var

x: integer;

y: real;

s: string;

c: char;

x: =2; y: =6.35; s: =’осіння’; c: =’A’;

writeln(x,’3’, x+y, s+’ пора’, ord(c)); { 238.35осіння пора65 }

Як видно з прикладу дані вводяться послідовно один за одним. Для їх відокремлення можна користуватися або форматним виводом, або використати додаткові параметри виводу, що є послідовністю декількох пропусків.

Для дійсних чисел задається два числа через розділював і двокрапку: перше – загальна кількість позицій, друге – кількість позицій в дробовій частині. Якщо друге не менше першого – це не помилка. Вивід буде здійснюватися при мінімальній кількості позицій.

Наприклад

y: = -365.4587;

writeln(y) {-3.654587E+02 }

writeln(y:12:5) {…-365.4587}

writeln(y:12:3) {….-365.459}

writeln(y:0:7) {-365.4587}

5. Операторрозгалуження. В ряді випадків алгоритм розв’язку задачі передбачає розгалуження, тобто можливість виконання декількох різних дій в залежності від значення певної логічної умови.

Наприклад

Begin

Writeln (‘введіть коефіцієнти a, b, c’);

Readln(a,b,c);

d:=b*b-4*a*c;

if d >0 then

Begin

x1:=(-b+sqrt(d))/2/a;

x2:=(-b-sqrt(d))/2/a;

writeln(‘x1=’,x1:12:6, ‘ x2=’,x2:12:6)

End

Else

if d=0 then

Begin

x1:=-b/2/a;

writeln (‘x=’,x1:12:6)

End

Else

writeln (‘коренів немає’)

End.

6. Операторициклу.

а) Операторциклузпараметром. Якщо потрібно у алгоритмі виконати повторення деякої кількості команд кілька разів, застосовують оператор циклу з параметром.

FOR <параметр>: = <початкове значення> TO<кінцеве значення> DO <оператор тіла циклу>;

Параметр – змінна якогось із дискретних типів. Її початкове значення задається виразом, після кожного етапу циклу значення параметру збільшується на 1 визначеного типу. Повторення повторюються доти, доки значення не стане кінцевим.

Наприклад

  1. Програма знаходження суми чисел 1..10.

Var

i, S:integer;

S:=0;

For i:=1 to 10 do S:=S+i;

Writeln(S);

End.

  1. Програмадрукуваннясимволівa’..’z’.

Var c:char;

Begin

For c:=’a’ to ‘z’ do write(c:3);

End.

  1. Програмапобудовитаблиціістинностідляand.

Var a,b: Boolean;

Begin

For a:=false to true do

Begin

For b:=false to true do

Write (a and b:6);

Writeln

End;

End.

Цей оператор циклу ще називають оператором циклу з параметром for to, він передбачає повторення із збільшенням параметру. Оскільки в Turbo Pascal не можна керувати кроком зміни параметра, то для реалізації повторення із зменшенням параметра використовують інший варіант циклу for downto.

FOR<параметр>: = <початкове значення> DOWNTO <кінцеве значення> DO <тіло циклу>;

Поки значення логічного виразу в заголовку є істинним, виконується тіло циклу, коли значення виразу хибне, цикл припиняється. Якщо логічний вираз є хибним відразу, то цикл не виконується жодного разу.

Наприклад

Begin

m:=0.05;

dm:=0.005;

S:=0; i:=0;

While S<=10 do

Begin

S:=S+m; i:=i+1;

m:=m+dm

end;

writeln(кількість картоплин‘’,i-1)

End.

в) Операторциклузпісляумовою. Цикл з передумовою передбачає спочатку перевірку, а потім виконується. Деколи потрібно навпаки, спочатку виконати дію, а потім перевірити результат. Якщо результат незадовільняє, то повторити відповідні дії.

REPEAT <тіло циклу> UNTIL <логічний вираз>;

Наприклад

Begin

m:= 0.05;

dm:= 0.005;

i:=0;

repeat i:=i+1;

m:=m+dm

until m>=0.5;

writeln(кількість картоплин‘’,i+1)

End.

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

Наприклад

Begin

m:=0.05;

dm:=0.005;

S:=0; i:=0;

While (S<=10) and(m<0.5) do

Begin S:=S+m; m:=m+dm; i:=i+1

End;

If S>10 then writeln(‘відро переповнилося’) else writeln(‘0ю5 кг картоплина під №’,i);

End.

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

Відмінність від оператора розгалуження полягає у тому, що кількість можливих альтернативних варіантів може бути значно більшою ніж 2. Вибір варіанту визначається не значенням логічного виразу, а значенням параметра, що є величиною одного із порядкових типів. Загальна структура:

CASE <параметр> OF

<значення1>: <оператор>;

<значення2>: <оператор2>;

...

<значення п>: <оператор п>

END

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

Наприклад

Begin

Repeat

Writeln (‘введіть символ, клавіша esc - кінець’);

Readln(c);

Case c of

#0..#31: writeln(‘командний’);

‘A’..’Z’,’a’..’z’: writeln(‘англійська буква’);

‘0’..’9’: writeln(‘цифра’);

#128..#255: writeln(‘альтернативна частина таблиці’);

End

else writeln (розділовий знак‘’)

until c=#27;

End.

ТЕМА: Система типів мови Pascal.

Мову програмуванняTurbo Pascal відносять до строго типізованих мов. Це означає, що всі елементи програми повинні бути оголошені явним чином. Явне оголошення типу визначає діапазон допустимих значень та допустимими операціями.

Div, mod – результат цілий.

Наприклад

5 div 2 =2, 5 mod 2 =1.

Наприклад

при виконанні додавання чисел 32767+1 отримаємо результат -

-32768.

б) Дійснітипи

Плаваюча крапка.

[знак] мантиса Е [знак] порядок.

BOOLEAN (булевий тип).

Цей тип має всього два значення:

FALSE (хибна), TRUE (істина).

CHAR.

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

Наприклад

Type rainbow = (read, orange, yellow, green, blue, dark blue, magenta);

При обробці даних перелічувального типу можна користуватися як значеннями, що задані при оголошені типу, так і відповідними байтовими числами. Другий випадок використовується для реалізації вводу та виводу даних цього типу. Це пов’язано з тим, що стандартні процедури вводу-виводу не допускають використання в якості параметрів вводу-виводу величини перелічувального типу. Це можна здійснити за допомогою механізму перетворення типів даних. А саме: вводиться байтове числове значення, що відповідає деякому із перелічених значень і через ідентифікатори перелічувального типу здійснює присвоєння цього значення.

Наприклад

Var x:rainbow; i:byte;

readln (i);

x:=rainbow(i)

б) Інтервальнийтип

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

Наприклад

Type s = 0..9; g = -32768..-1; b = ‘A’..’Z’;

Інкрементація.

Декрементація.

Якщо для цих операцій використовувати 2 аргументи, то другий може задавати кількість одиниць відповідного типу, на яку збільшується або зменшується значення аргументу. Якщо 2-й параметр відсутній, то по замовчуванню вважається крок 1.

Наприклад

Var

x1: integer; x2: char; x3: boolean; x3: rainbow;

x1: =32766;

x2: =’A’;

x3: =true;

x4: = red;

inc (x1); { x1=32767 }

inc (x1,2); { x1=-32767 }

dec (x3,2); { x3=true }

dec (x4); { x4=magenta }

4. Структуроканітипиданих:

Раніше розглядалися скалярні дані. Це означає, що здійснювалася обробка неподільних значень деякого типу. Навіть, якщо в програмі викликається багато скалярних величин одного типу, але вони не є незалежними, то їх не можна вважати деякими структурами даних. Структурування передбачає об’єднання складених даних в єдині складені структури, що обробляються і розміщуються в пам’яті як одне ціле. Одним із способів структурування є формування так званих регулярних структур даних. До них відносять масиви, рядки, множини.

а) Регулярнітипимасиви

Масиви – структури даних, які є об’єднанням в одне ціле деякої фіксованої кількості однотипних елементів. Оголошуються масиви за допомогою службового слова array, після якого вказується розмір масиву, кількість елементів, а також тип самих елементів масиву.

TYPE<ідентифікатор типу >= ARRAY[<діапазон індексів>,<діапазон індексів >,…] OF<тип елементів >;

В якості діапазонів індексів можуть викликатися інтервали одного із дискретних типів.

Кількість діапазонів визначає розмірність масиву:

1 діапазон – одновимірний масив;

2 діапазони – двовимірний (таблиці, матриці);

П діапазонів – п-вимірний.

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

Наприклад

Type

rainbow =(red, orange, yellow, blue, dark blue, magenta);

vector = array [1..3] of real;

mas1 = array[‘A’..’Z’] of byte;

mas2 = array[1..8,’A’..’H’] of byte;

mas3 = array[false,true, red..yellow] of char;

mas4 =array[-100..-50] of vector;

Або явним чином

a: array[1..26] of byte;

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

Якщо масиви використовуються в якості типізованих констант, то їх константні значення задаються переліком значень всіх елементів по кожній розмірності, елементи 1-ї розмірності обмежуються дужками. Якщо ж більше ніж одна, то кожен наступний рівень передбачає зовнішньою парою дужок.

б) Регулярнийтипрядкисимволів:

Наприклад

Var

S1: string;

S2: string[6];

S1:=’ABCDEFGH’;

S2:=S1; {S2=’ABCDEF’}

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

Об’єднання (конкатенація).

Наприклад

S:=’і’ + ‘ стань’ + ‘ зіркою’; {і стань зіркою}

Операція порівняння

Наприклад

S1: string;

S2:string;

S1:= ‘ABCD’; {S1=S2}

S2:= ‘ABCD’;

Множини і тип даних теж відносяться до регулярних складених типів. Це означає, що елементи таких структур даних будуть однотипні значення (цілі числа, символи, перелічувальні типи). На відмінну від масивів, де кількість елементів є фіксованою і незміною, множини можуть змінювати свій склад, проте кількість елементів не може перевищувати деякого фіксованого значення. І масиви, і рядки можуть мати декілька однакових елементів, у множині всі елементи різні.

Оголошення множини, при доповненні стандартних слів set of, після яких вказується ідентифікатор елементів множини. В якості базових типів можуть бути лише порядкові типи і кількістю елементів до 256. це цілі byte, shorting, символи char, логічні boolean.

Наприклад

Var

A: set of byte;

B: set of 0..100;

C: set of char;

D: set of rainbow;

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

Наприклад

A:=[109,100,0,5..50];

B:=[100,0..99];

C:=[‘A’,’Z’];

D:=[red];

Множини можуть бути пустими[ ].

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

Якщо базовий тип є перелічувальний або інтервальний із меншою ніж 256 елементів, то і відповідне поле в пам’яті буде менше. Заданя перелічувальних типів визначає порядок бітів, що відповідають кожному елементу.

5. Комбінованіструктуриданих.

а) Записи

Масиви, рядки, множини давали складені структури даних, елементи яких були одного і того ж типу. Кількість елементів в них могла б бути різною. В масивах фіксованою, в рядках і множинах могла б змінюватися, але тип був би спільним. Часто виникає проблема у формування структур даних, елементи яких мають різний тип.

TYPE

<ім’я типу запису> = RECORD

<ідентифікатор1>: <тип поля>;

<ідентифікатор2>: <тип поля>;

...

END;

Наприклад

Type

Student = record

Name: string;

Yy, mm, dd: word;

Pol: (female, male);

Educ: (state, pay);

Usp:real;

End;

Наприклад

Наприклад

Type

Date = record

Yy: integer;

Mm, dd: byte;

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

WITH <ім’я запису>DO <оператор над полями>;

Наприклад

With a do

Begin

Readln(name);

With date born do

Readln(yy, mm, dd);

Readln(usp);

Операції над записами зводяться до операцій відношення до порівняння на рівність і не рівність.

Наприклад

Програма формування бази даних про студентів у вигляді масиву із п записів.

Type

Student = record

{}

end;

Var

a: array[1..n] of student;

i, j: byte;

Begin

for i:=1 to n do

with a[i] do

Begin

writeln(‘введіть ім’я’);

readln(name);

With date born do

Begin

writeln(‘введіть дату народження’);

readln(yy,mm,dd);

end;

writeln(‘введіть стать: 0-жін; 1-чол’);

readln(j);

if j=1 then pol:=male else pol:=female;

writeln(‘введіть форму навчання: 0-держ; 1-плат’);

readln(j);

if j=1 then educ:=pay else educ:=state;

writeln(‘введіть успішність’);

readln(usp);

end;

Наприклад

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

Зауваження

Ключ варіантної частини повинен бути визначеним певним типом. Для кожного значення ключа задається перелік полів запису, кожному полю вказується тип. Якщо кількість полів відповідно значення ключа більша ніж одне, то ці поля обмежуються парою дужок.

Величини типу записів з варіантами розміщується так само, як і звичайні записи, розмір відповідає максимуму сумарних розмірів всіх полів серед всіх варіантів. Таким чином запис студент матиме розмір 51+(2+1+1)+1+1+6+1+1.

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

Наприклад

База даних про студентів

Var

a: array[1..n] of student;

i, j: byte;

Begin

for i:=1 to n do

with a[i] do begin

readln(name);

With date born do

readln(yy, mm, dd);

readln(j);

if j=1 then educ:=pay else educ:=state;

readln(usp);

writeln(‘введіть стать: 0-жін; 1-чол’);

readln(j);

if j=1 then pol:=male else pol:=female;

Case pol of

Male: begin

writeln(‘0-непридатний, 1-придатний’);

readln(j);

if j=1 then army:=yes else army:=no;

writeln(‘зріст’);

readln(hight);

end;

Female: begin

writeln(‘волосся: 0-чорне, 1-шатенка, 2-блондинка’);

readln(j);

Case j of

0: hair:=black;

1: hair:=shaten;

2: hair:=blond;

end;

writeln(‘очі: 0-чорні, 1-зелені, 2-сині, 3-карі’);

readln(j);

Case j of

0: eyes:=black;

1: eyes:=green;

2: eyes:=blue;

3: eyes:=brown;

end;

writeln(‘косметика’);

readln(cosmetics);

end;

end;

end;

End.

End.

ТЕМА: Програми обробки структурованих типів.

1. Прикладизадач з масивами

a) Знайти середнє арифметичне додатніх і від’ємних елементів масиву цілих чисел.

Var

a: array[1..20] of integer;

S1, S2, i, i1, i2: integer;

x1,x2: real;

Begin

for i:=1 to 20 do

Begin

write (‘?’); {ввід масиву}

readln(a[i])

end;

for i:=1 to 20 do

Begin

if a[i]>0 then begin S1:=S1+a[i]; i1:=i1+1 end;

if a[i]<0 then begin S2:=S2+a[i]; i2:=i2+1 end;

end;

if i1>0 then begin x1:=S1/i1; writeln(x1)

else writeln(‘+немає’);

if i2>0 then begin x2:=S2/i2; writeln(x2) else writeln (‘ – немає’);

End

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

Наприклад

Var

S1,S2: string;

i: byte;

Begin

writeln(‘’);

readln(S1);

S2:=”;

For i:=length(S1) downto 1 do

S2:=S2+copy(S1,I,1);

If S1=S2 then writeln (‘’) else writeln (‘’);

End.

в) Функціязнаходженняномерапозиції

Begin

P:=pos(WORD,R); {P=5}

Writeln(P);

End.

г) Процедуравставленняслова

Var

Poz: integer;

R,WORD: string;

Begin

Poz:=20; {Мова програмування Turbo Pascal}

R:=’Мова програмування Pascal’;

WORD:= ‘Turbo’;

Insert(WORD,R,Poz);

Writeln(R);

End.

д) Процедуравидалення

Наприклад

Var

R: string;

N,Poz: integer;

Begin

R:= ‘Мова програмування Turbo Pascal’;

Poz:= 1;

N:=19; {Turbo Pascal}

Delete(R,Poz,N);

Writeln(R);

End.

е) Функціяобєднаннярядків

обєднання рядків може проводитися не лише при доповню вального знака операції +, а і функцією concat. Ця функція може містити довільну кількість аргументів типу string.

CONCAT (<рядок1>,<рядок2>,…);

Наприклад

Var

S1, S2: string;

i: byte;

Begin

writeln(‘’);

readln(S1);

S2:=S1;

For i:=1 to length(S2) do

If copy(S1,i,3)=’abc’ then

Begin

Delete(S2,i,3);

Insert(‘xy’, S2,i);

End;

Writeln(S1);

Writeln(S2);

End.

Var

S1, S2: string;

i: byte;

begin {}

S2:=S1;

For i:=1 to length(S2) do

If copy(S2,i,1)=copy(S2, i+1,1) then

Begin

Delete(S2,i+1,1);

i:=i-1;

end;

writeln(S1);

writeln(S2);

End.

3. Операціїнадмножинами

Над множинами можуть виконуватися наступні дії:

а) Обєднання (додавання)

Наприклад

A:=[1,2,3] B:=[3,4,8] C:=A+B { C=[1,2,3,4,8] }

Наприклад

[1,2,3]*[3,4,8] =[3]

[1,2,3]*[ ]= [ ]

Наприклад

[1,2,3]-[3,4,8]=[3]

Наприклад

[1] in [3,4,8] = false

[1] in [1,2,3]=true

Формування множини безпосередньо з клавіатури і вивід їх на екран неможливо, оскільки стандартні процедури вводу-виводу не допускають параметрів множини так як і перелічувального. Але ці дії легко реалізувати за рахунок операції обєднання та перевірки належності in для виводу.

Наприклад

Var A:=[ ]; A:=[ ];

A: set of byte; repeat readln(x);

i, x: byte; readln(x); while x<>0 do

… A:=A+[x]; begin

A:=[ ]; until x=0; A:=A+[x];

for i:=1 to n do readln(x);

Begin end.

readln(x);

A:=A+[x]

End;

Наприклад

For i:=1 to 255 do

If I in A then writeln(i);

Type

Wwekend = set of week;

Week = 0..6;

Workers = array [1..6] of integer;

Var

k, i, j: byte;

a: workers;

c:weekend;

Begin

c:=[0..6];

for i:=1 to 6 do

Begin

writeln(‘введіть номери вихідних днів’, і, ‘-го працівника’);

readln(j,k);

a[i]:=[j,k];

c:=c*a[i];

end;

if c=[ ] then writeln(‘все добре’)

else writeln(‘є повний вихідний’);

End.

Розглянуті раніше способи структурування даних мають суттєвий недолік: після завершення роботи програми всі дані пропадають в оперативній пам’яті, крім цього обмеження розміру статичної частини оперативної пам’яті, де зберігаються всі змінні, які обмежені в програмі (менше 64 кбайт), накладається обмеження на кі



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 283; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.152.251 (0.461 с.)