Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

with Man . Adress do



Begin

Misto:= ‘Київ’;

Vul:= ‘Хрещатик’;

Bud:= 1;

Kv:= 26;

end;

Запис з варіантною частиною*

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

Type

Figure = (Square, Triangle, Circle);

Param = record

X, Y: Real;

Case Figе: Figure of

Square: (Side: Real);

Triangle: (Side1, Side2, Angle: Real);

Circle: (Radiuse: Real);

end;

Var

MySquare, MyTriangle, MyCircle: Param;

Варіантна частина починається зі слова Case, за яким слідує змінна вибору варіанта (в наведеному прикладі Figе) з описом типу. Далі вказуються константи, значення яких може приймати змінна вибору (у прикладі Square, Triangle, Circle, які були описані в типі-переліченні Figure). За кожною константою після двох крапок у дужках описуються поля варіантної частини запису з описом типу. Дужки є необхідними, навіть якщо варіантна частина відсутня для даного варіанту. Треба відмітити, що варіантна частина не завершується своєю операторною дужкою end, так як звичайна конструкція Case, так як далі йде завершальна операторна дужка end всього типу.

В стандарті мови Паскаль перед тим як використовувати один з варіантів запису, змінній вибору варіанта треба присвоїти відповідне значення:

MySquare. Fige:= Square;

MySquare. Side:= 15.5;

MySquare.x:=0.5;

MySquare.y:=7.5;

В Turbo Pascal цю операцію виконувати не обов’язково, але, якщо змінна вибору задана, її значення можна переглянути в програмі, для того щоб визначити, який був заданий варіант. [1]

Тип множина

З терміном множина всі знайомляться в курсі математики. Множина – це набір однотипних логічно пов’язаних між собою об’єктів [3]. Мова програмування Паскаль надає для утворення множин спеціальний тип даних, який будується на базі порядкових типів (аналогічно типу-діапазон):

set of <перелічення припустимих значень>;

Розглянемо приклади опису власних типів-множин на базі символьного і цілочисельного типів:

Type

Digits = set of ‘0’..’9’;

AlphaBet = set of ‘A’..’Z’;

Alpha_Dig = set of ‘0’..’9’, ‘A’..’Z’;

Dig_int = set of 0..9;

Double_dig= set of 10..99;

Var

D:Digit;

A:AlphaBet;

Dig:Double_dig;

Кількість елементів множини не може перевищувати 256. Елементи внутрі множини нумеруються від 0 до 255 (номер можна отримати за допомогою функції ord).

Ініціалізація змінних відбувається за допомогою конструктору множини – списку елементів множини, які перелічуються через кому:

D:=[ ‘0’, ’3’..‘5’, ‘9’];

A:= [];

Dig:=[11, 22, 33, 44, 55, 66, 77, 88, 99];

Зверніть увагу на те, що елемента, які записуються до множина задаються у квадратних дужках. Якщо вказати путі квадратні дужки (змінна А), то множина буде пустою.

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

Над множинами припустимі такі операції:

* пересічення множин. Результат містить елементи, що є спільними для обох множин. Припустимо задані дві множини:

Var

A,B,С:set of 1..10;

Їм присвоєні такі значення:

A:=[1,3,5,7,9]; B:=[3,4,8,9,10];

Тоді С:=А*В дасть [3,9].

+ об’єднання множин. Результат містить елементи обох множин. С:=А+В дає [1,3,4,5,7,8,9,10].

- різниця множин. Результат містить елементи першої множини, що не входять до другої. С:=А-В дає [1,5,7].

= перевірка еквівалентності множин. Результат дорівнює true, якщо множини еквівалентні.

< > перевірка нееквівалентності множин. Результат дорівнює true, якщо множини нееквівалентні.

<= перевірка входження, повертає true, якщо перша множина включена до другої.

>= перевірка входження, повертає true, якщо друга множина включена до першої.

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

3 in A дає true;

7*7 in B дає false.

Додатково до цих операцій можливо використовувати дві процедури:

INCLUDE (< множина >, < елемент >) – включає новий елемент до множини.

EXCLUDE (< множина >, < елемент >) – виключає з множини заданий елемент.

На різницю від операцій + та – ці процедури виконують дії над елементом і множиною, а не над двома множинами.

Опис типізованих констант-записів та констант-множин

Визначення типізованих констант-записів має вигляд:

< ім’я константи >: < тип запису > = (< список значень полів >);

< ім’я константи > - довільний правильний ідентифікатор;

< тип запису > - ідентифікатор типу запису, який декларований в розділі type;

< список значень полів > включає ідентифікатори полів, дві крапки, значення полів, які задаються у круглих дужках і розділяються крапкою з комою:

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

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

Наприклад;

Type

TZero = record

x,y,z: real;

end;

Const

Zero: TZero = (x:0; y:0; z:0);

Визначення типізованих констант-множин має вигляд:

< ім’я константи >: < тип множини > = < конструктор множини >;

< ім’я константи > - довільний правильний ідентифікатор;

< тип запису > - ідентифікатор типу множини, який декларований в розділі type;

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

Type

Seconds = set of 0..59;

Digits = set of ‘0’..’9’;

Const

Half_min: Seconds = [0..29];

Empty: Digits = [ ];

Контрольні запитання за темою

На які групи можна розділити всю множину типів мови Паскаль? Дайте коротку характеристику типів кожної групи.

Для чого використовується тип запис мови Паскаль? Як описуються змінна цього типу?

Як проводиться ініціалізація полів запису? Що таке розкриття запису?

Для чого використовується оператор приєднання? Наведіть синтаксис його опису.

Як описується власний тип даних запис?

Як описується масив записів? Як здійснюється доступ до елементів цього масиву та їх полів?

Як здійснити введення / виведення елементів масиву записів?

Для чого і як використовуються записи з варіантною частиною? Чи може бути в записі дві варіантні складові?

Що таке множина і як вона описується у програмі мовою Паскаль?

Чи обмежена кількість елементів множини? Чи може бути пуста множина?

Що таке конструктор множини, для чого він використовується і який в нього синтаксис опису?

Які операції над множинами ви знаєте і які правила їх застосування?

Для чого використовуються процедури INCLUDE та EXCLUDE? Чим вони відрізняються від операцій + та -?

Як описуються типізовані константи-записи?

Як описуються типізовані константи-множини?

ТЕМА 10 Побудова графіку функції

Підключення графічної бібліотеки

Мова Паскаль Мова Сі
Uses Graph; #include <graphics.h>
… … … … … …

Ініціалізація графічного режиму роботи екрану

Мова Паскаль Мова Сі
Procedure Init_Graph; void init_graph(void)
Var {
GraphDriver, GraphMode, ErrorCode: integer; int GraphDriver, GraphMode, ErrorCode;
begin  
GraphDriver:= detect; GraphDriver = DETECT;
InitGraph(GraphDriver, GraphMode,’ ’); initgraph(&GraphDriver, &GraphMode, " ");  
ErrorCode:=GraphResult; ErrorCode = graphresult();
if ErrorCode <>grOK Then if(ErrorCode!= grOk)
begin {
WriteLn(‘Graphics System Error:’, GraphErrorMsg(ErrorCode)); printf(" Graphics System Error: %s\n", grapherrormsg(ErrorCode));
Halt; exit(1);
End; }
End; }

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

Установка розмірів активного вікна для виводу зображення

Установка розмірів активного вікна здійснюється процедурою SetViewPort(x1,y1,x2,y2,ClipOn), де x1,y1,x2,y2 - координати, відповідно, лівого верхнього та правого нижнього кутів вікна у пікселах.

Мова Паскаль Мова Сі
SetViewPort(x1,y1,x2,y2, ClipOn) setviewport(x1,y1,x2,y2, CLIPON)

Відображення осей координат

При відображенні осей координат та графіку функції необхідно врахувати такі фактори:

· початок координат розташований в лівому верхньому куті встановленої робочої області(або екрану);

· вісь ординат(У) екрану спрямована донизу;

· координати точок на екрані вимірюються в пікселах.

 
 

Побудова графіка здійснюється відносно умовного центру з координатами (Cx,Cy) (дивися рисунок).

Якщо центр координат розташований по центру екрана, то його координати можна визначити так:

Тоді координати кінців осей координат будуть приблизно такі:

Ось Початок Кінець
Х У Х У
Х x1+10 Cy x2-10 Cy
У Cx y1+10 Cx y2-10

Віднімання або додавання 10 пікселів необхідно для того, щоб ось трохи відступала від границь вікна.

Для зображення осей необхідно скористатися процедурою Line, встановивши перед цим колір та стиль для виведення ліній:

Паскаль Сі
SetLineStyle(SolidLn, 0, NormWidth); SetColor(колір_осей); Line(…);{координати кінців осі Х} Line(…);{координати кінців осі У} setlinestyle(SOLID_LINE, 0, NORM_WIDTH); setcolor(колір_осей); line(…); line(…);

Для виведення стрілок та підписів осей можна скористатися процедурою текстового виведення OutTextXY, задавши для виведення стрілок символи ‘^’, ‘>’.

Паскаль Сі
OutTextXY(кординати Х, У кінця осі, ‘^’); OutTextXY(кординати Х, У кінця осі, ‘Y’); outtextxy(кординати Х, У кінця осі, “^”); outtextxy(кординати Х, У кінця осі, “Y”);

Крім того стрілки можна вивести, намалювавши їх крильця двома лініями.

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

Вибір масштабу зображення

Визначення масштабних коефіцієнтів необхідно тому, що відстань в 1 піксел значно менше, ніж відстань, наприклад, в 1 см. Для вибору масштабу зображення необхідно:

визначити діапазон зміни значень по осям. По осі х – це заданий інтервал [a, b], по осі У – [minY, maxY], що можна визначити з таблиці табулювання функції;

розрахувати коефіцієнти масштабування за такими формулами:

.

Побудова графіку функції

Якщо точка А в декартовій системі координат має координати (XA,YA), то для виводу на екран їх треба переобчислити за формулами:

де Мху - масштабні коефіцієнти, які є необхідними для переведення величин XA,YA в пікселі. Віднімання при обчисленні У-координат визначено тим, що ось У екрану спрямована донизу.

 
 

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

Паскаль Сі
x:=a, dx:=0.1; while x<=b do begin PutPixel(Cx+x*Mx, Cy-f(x)*My колір_пікселя); x:=x+dx; end; x=a, dx=0.1; while (x<=b) { putpixel(Cx+x*Mx, Cy-f(x)*My колір_пікселя); x+=dx; }

ТЕМА 11 Розробка програм з підпрограмами.

Підпрограма.

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

“Чорна скриня”.

Специфікація підпрограми.

Функція.

Параметри підпрограми.

Формальні параметри;

Фактичні параметри.

Глобальні ідентифікатори.

Локальні ідентифікатори.

Час життя змінної.

Область дії імен(область видимості).

Правила опису та відмінності в використання підпрограм-процедур та підпрограм-функцій.

Підпрограма, формальні та фактичні параметри підпрограми, локальність та глобальність змінних, час життя та область дії змінної.

ТЕМА 12 Математичне моделювання функціональних залежностей

Обчислення суми степеневого ряду:

Обчислити суми ряду

(1)

з заданою точністю на проміжку [a,b], де a<b при при .

Скласти ітеративну функцію обчислення значення суми ряду (1).

Скласти рекурсивну функцію обчислення суми ряду (1).

Скласти програми для обчислення суми ряду (1) з заданою точністю на заданому проміжку.

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

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

Математична постановка задачі (МПЗ).

Під терміном “табулювання функції” розуміють обчислення n значень певної функції y=f(x) для х, значення якого належать проміжку [a,b] і змінюється з кроком Dx (рис.1). Отже, необхідно обчислити значення:

,

,

.

Якщо задано n – кількість точок на проміжку, тоді .

Процес обчислення значень функції носить циклічний характер, тіло циклу складають дії:

.

Математична постановка задачі обчислення значення функції для кожної із точок

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

,

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

Наближене значення суми ряду можна отримати або обмежуючись сумою перших N членів ряду (1), або обчислюючи суму з наперед заданою точністю e.

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

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

Отже обчислення суми ряду переривається коли:

.

Розглянемо обчислення суми такого ряду (1). Він буде спадним для .

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

Ітеративний підхід

Якщо прийняти , тоді початкове значення , .

. (2)

Наступне значення для a та b будуть:

. (3)

Обчислення суми ряду (1) переривається для (ряд буде спадним), коли:

. (4)

Обчислення суми ряду (1) переривається для . обмежуючись сумою перших N членів ряду

Рекурсивний підхід

З формули (1) зрозуміло, що S обмежуючись сумою перших N членів ряду можна подати як функцію від a та b– S(a, b)., тоді (2) трансформується в вираз:

, (5)

де – наступні значення для a та b, що визначаються за формулою (2).

Враховуючи (3), цю ж саму функцію можна визначити так:

(6)

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

Обчислення значення ланцюгового дробу

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

Ланцюговим, або неперервним, дробом називають вираз виду:

або .

Звичайно замість вище наведеного запису застосовують більш компактний, записуючи ланки ланцюгового дробу:

або .

Числа , ,... називають частковими чисельниками, а , , ,... - частковими знаменниками ланцюгового дробу.

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

Значення ланцюгового дробу Сі можна також визначити рекурентним співвідношенням:

. (6)

Розглянемо визначення значення такого дробу:

Ітеративний підхід

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

Частковий знаменник кожного разу зменшується на 1, а частковий чисельник збільшується на 1.

Отже, для ,

, , .

Рекурсивний підхід

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

,

які кожного разу будуть зменшуватися(a) та збільшуватися(b) на 1.

З формули (6) зрозуміло, що С можна подати як функцію від a та b– С(a, b), тоді (6) трансформується в вираз:

(8)

де – наступні значення для a та b.

Враховуючи (8), цю ж саму функцію можна визначити так:

(5)

Перший виклик цієї рекурсивної функції буде S(x,1). В результаті цього виклику буде отримане значення дробу.

Чисельні методи визначення коренів нелінійних рівнянь

Чисельні методи визначення коренів нелінійних рівнянь дозволяють знайти корінь рівняння f(x)=0 на заданому проміжку [a, b] з певною похибкою розрахунку Е.

Вхідні дані:

E - точність обчислення;

a, b - границі інтервалу, в якому буде проводитись пошук кореня.

Вихідні дані: x – корінь рівняння.

Варіант 1: метод дихотомії

Ітеративний підхід

Обчислення значень ya=f(a) i yb=f(b).

Обчислення першого приблизного значення та y=f(x), де х - корінь рівняння.

Якщо ça-b ç< E, переходимо до п.7.

Якщо y i ya мають різні знаки, то корінь знаходиться в інтервалі [a, x]. Тоді b=х; переходимо до п. 1.

Якщо y i yb мають однакові знаки, то корінь знаходиться на інтервалі [x, b]. Тоді а=х; переходимо до п.1.

Друк результату.

Рекурсивний підхід

Функцію пошуку кореня можна подати як рекурсивну:

Варіант 2: метод січної (хорди)

Ітеративний підхід

Обчислення ya=f(a), yb=f(b)

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

Якщо ça-bç< E, то виконується п.6.

Якщо y i ya мають різні знаки, то корінь знаходиться в інтервалі [a, x]. Тоді b=х; переходимо до п. 1.

Якщо y i yb мають однакові знаки, то корінь знаходиться на інтервалі [x, b]. Тоді а=х; переходимо до п.1.

Друк результату.

Рекурсивний підхід

Функцію пошуку кореня можна подати як рекурсивну:

Варіант 3: метод дотичної

Ітеративний підхід

Початкове значення х=0.

Якщо êf(x) ê< E, корінь знайдено, переходимо до п.4.

Обчислення наступного приблизного значення , де f‘(x) - похідна від f(x). Перехід до п.2.

Друк результату.

Рекурсивний підхід

Функцію пошуку кореня можна подати як рекурсивну:

Варіант 4: метод хорд–дотичних

Ітеративний підхід

Початкове значення х0=0, х=0.

Якщо êf(x) ê< E, корінь знайдено, переходимо до п.5.

Обчислення наступного приблизного значення , , перехід до п.2.

Друк результату.

Рекурсивний підхід

Функцію пошуку кореня можна подати як рекурсивну:


СПИСОК ЛІТЕРАТУРИ

1. Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0 – 3-е изд., стер. – М.: “Диалог-МИФИ”, 1997. – 288 с.

2. Марченко А.И., Марченко Л.А. Программирование в среде TurboPascal 7.0. – К.: ЮНИОР, 1997 – 496 с., ил.

3. Фаронов В.В. Тур,о Паскаль 7.0. Начальный курс. – М.: “Нолидж”, 1997- 616 с., ил.


* - матеріали цього підрозділу повністю взяті з [1]





Дата публикования: 2014-11-03; Прочитано: 447 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.047 с)...