Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Methods_AP_LABS_II

.pdf
Скачиваний:
17
Добавлен:
17.03.2016
Размер:
1.05 Mб
Скачать

a = {10, 15, 20, …} мм;

співвідношення більшого (ширина блоків) і меншого розмірів повинне становити 1.5:

b = 1.5*a;

Розміри всіх елементів символів обчислюються, виходячи зі значень a і b відповідно до таблиці 2.1. Не повинні змінюватися кути й інші параметри,

що впливають на відповідну форму символів.

 

 

 

 

 

 

 

Таблиця 2.1

 

Співвідношення розмірів символів

 

 

 

 

 

 

 

 

 

 

 

 

 

Зображення символу

 

 

 

Опис

 

 

 

 

 

Символ «Процес» відображає функцію

 

 

 

обробки даних будь-якого виду (виконання

 

 

 

певної

операції

або

групи

операцій, що

 

1.

 

призводить до зміни значення, форми або

 

 

 

розміщення інформації або до визначення,

 

 

 

по якому з декількох напрямків потоку слід

 

 

 

рухатися).

 

 

 

 

 

 

 

 

Символ «Розв'язок» відображає розв'язок

 

 

 

або функцію перемикального типу, що має

 

 

 

один вхід і ряд альтернативних виходів,

 

 

 

один

і тільки

один

з яких може

бути

 

2.

 

активізований

після

обчислення

умов,

 

 

 

визначених всередині цього символу.

 

 

 

Відповідні

результати

обчислення можуть

 

 

 

бути записані по сусідству з лініями, що

 

 

 

відображають ці шляхи.

 

 

 

 

 

Символ

«Підготовка»

відображає

 

 

 

модифікацію команди або групи команд із

 

3.

 

метою впливу на деяку наступну функцію

 

 

(установка

перемикача,

модифікація

 

 

 

 

 

 

індексного

регістру

або

ініціалізація

 

 

 

програми).

 

 

 

 

 

 

 

 

Символ «Зумовлений процес» відображає

 

 

 

зумовлений процес, що складається з однієї

 

4.

 

або

декількох

операцій

або

кроків

 

 

 

програми, які визначені в іншому місці (у

 

 

 

підпрограмі, модулі).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Символ

 

«Введення-виведення»

 

 

використовується для перетворення даних у

5.

 

форму, придатну для обробки (введення)

 

 

або відображення

результатів

обробки

 

 

(виведення).

 

 

 

 

 

 

 

 

Символ «Термінатор» відображає вихід у

 

 

зовнішнє середовище та вхід із зовнішнього

6.

 

середовища (початок або кінець схеми

 

 

програми, зовнішнє використання і джерело

 

 

або пункт призначення даних).

 

 

 

 

 

 

Символ «З'єднувач» відображає вихід у

 

 

частину схеми та вхід з іншої частини цієї

7.

 

схеми й використовується для обриву лінії й

 

продовження її в іншому місці. Відповідні

 

 

 

 

символи-з'єднувачі повинні містити те саме

 

 

унікальне позначення.

 

 

 

Символ «Коментар» застосовується, якщо

 

 

пояснення

не

містяться

всередині

8.

 

графічного символу. Символ поміщають на

 

 

вільному місці алгоритму й з'єднують із

 

 

символом, що пояснюється.

 

 

 

 

 

 

Символ відображає початок циклу. Умова

 

 

для ініціалізації, збільшення, завершення і

9.

 

т.д. міститься всередині символу, якщо

 

 

операція, що перевіряє умову, розташована

 

 

на початку циклу.

 

 

 

 

 

 

 

Символ відображає кінець циклу. Умова

 

 

для ініціалізації, збільшення, завершення і

10.

 

т.д. міститься всередині символу, якщо

 

 

операція, що перевіряє умову, розташована

 

 

наприкінці циклу.

 

 

 

 

 

 

 

 

Правила виконання схем алгоритмів і програм наведені в ДЕРЖСТАНДАРТ 19.701-90.

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

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

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

У схемах може використовуватися ідентифікатор символів. Це пов'язаний з даним символом ідентифікатор, який визначає символ для використання в довідкових цілях в інших елементах документації

(наприклад, у лістингу програми). Ідентифікатор символу повинен розташовуватися зліва над символом.

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

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

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

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

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

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

Лінії в схемах повинні підходити до символу або зліва, або зверху, а

виходити або справа, або знизу. Лінії повинні бути спрямованими до центру символу.

Кілька виходів із символу необхідно показувати:

– декількома лініями від даного символу до інших символів;

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

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

A=B

Порівняти

A<B

 

 

 

A, B

 

A>B

Рисунок 1.2 - Приклад символу «Розв'язок» з умовами на кожному виході

Приклад використання деяких символів наведено на рисунку 2.2.

Почато

 

 

к

5

SUB(B)

 

A

B=B+A

B=0

A1

A1

i=1,5

B

5

Кінець

Рисунок 2.2 – Приклади використання деяких символів

3 Основна частина Лабораторна робота №5. Робота з пам’яттю.

Мета роботи: отримати навички роботи з вказівниками, посиланнями та динамічними масивами.

5.1. Теоретичні відомості

5.1.1 Вказівники

У мові С++ є операція визначення адреси — &, за допомогою якої визначаються адреси комірки пам’яті, що містить задану змінну. Наприклад,

якщо vr — ім’я змінної, то &vr — адреса цієї змінної.

У С++ також існують і змінні типу вказівник.

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

Значенням змінної типу вказівник є адреса змінної або об'єкта.

Опис змінних типу вказівник здійснюється за допомогою операторів наступної форми:

<тип> *<ім'я вказівника на змінну заданого типу>;

Приклад 5.1. Опис вказівників

int *ptri; //вказівник на змінну цілого типу

char *ptrc; //вказівник на змінну символьного типу float *ptrf; //вказівник на змінну з плаваючою

комою.

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

Нехай змінна типу вказівник має ім'я ptr (тобто оголошена змінна int* ptr), тоді в якості значення їй можна присвоїти адресу за допомогою наступного оператора:

ptr=&vr;

Наприклад:

int vr = 1;

int* ptr = &vr; // ptr містить адресу змінної vr

&vr

ptr

...

1

...

...

vr

У мові С++ при роботі з вказівниками велике значення має операція непрямої адресації (розіменування вказівника) — *. Операція * дозволяє звертатися до змінної не напряму, а через вказівник, який містить адресу цієї змінної. Ця операція є одномісною і має асоціативність зліва на право. Цю операцію не слід плутати з бінарною операцією множення. Нехай ptr

вказівник, тоді *ptr — це значення змінної, на яку вказує ptr. Для вищенаведеного прикладу:

int *ptr; // оголошення змінної типу вказівник

*ptr=1; // розіменування вказівника (значення

//змінної vr, на яку вказує вказівник)

Операція * у деякому розумінні є оберненою до операції &.

Приклад 5.2

 

int a = 1,

b;

int*

ptr =

&a; //містить адресу змінної a

cout

<< “

Змінна a = ” << (*ptr) << “зберігається

за адресою ” << ptr;

b = ptr; // помилка: вказівник не перетворюється у

ціле число

b = *ptr + 1; // b = 2

5.1.2 Посилання

Посилання (reference) являє собою видозмінену форму вказівника, яка використовується в якості псевдоніму (іншого імені) змінної. У зв'язку з цим посилання не потребують додаткової пам’яті. Для визначення посилання використовують символ & (амперсант), який ставитися перед змінною-

посиланням.

Змінні типу посилання можуть використовуватися в наступних цілях:

замість передачі у функцію об'єкта за значенням;

для визначення конструктора копії;

для перевантаження унарних операцій.

Лістинг 5.1. Використання посилань

#include <iostream> using namespace std; int main()

{

int t = 13,

int &r = t;// ініціалізація посилання на t

// тепер r синонім імені t

cout << "Початкове значення t:" << t; // виводить

13

r += 10; // зміна значення t через посилання cout<<"\n Остаточне значення t:" << t; // виводить

23

return 0;

}

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

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

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

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

значенням вказівника або за посиланням.

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

Лістинг 5.2. Функція з параметром-вказівником

#include <iostream> using namespace std;

void sqr(int*);// прототип функції

int main()

{

int t = 3;

cout << "Початкове значення t:"<<t;//виводить 3 sqr(&t); // передача адреси змінної t cout<<"\nОстаточне значення t:"<<t; //виводить 9 return 0;

}

void sqr(int* x)

{

(*x)*= (*x);//використано операцію розіменування

}

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

Лістинг 5.3. Функція з параметром-посиланням

#include <iostream> using namespace std;

void sqr(int &);// прототип функції

int main()

{

int t = 3;

cout << "Початкове значення t:" << t; //

виводить 3 sqr(t);

cout<<"\nОстаточне значення t:" << t; //

виводить 9 return 0;

}

void sqr(int& x)

{

x*= x;

}

5.1.5 Масиви та вказівники

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

починаючи з базової адреси.

Приклад 5.3. Опис одновимірних масивів

int masl[492];// масив з 492 елементів,

//оголошений як глобальна змінна

 

int main()

 

{

 

double mas2[250];// масив з 250 чисел типу double

 

static char mas3[20];//статичний рядок з

20

символів

 

int mas4[2][4]; // двовимірний масив з чисел типу

int

 

...

 

}

 

В цьому прикладі квадратні дужки [ ] означають, що

всі

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]