Methods_AP_LABS_II
.pdfa = {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 |
|
... |
|
} |
|
В цьому прикладі квадратні дужки [ ] означають, що |
всі |
ідентифікатори, після яких вони стоять, є іменами масивів. Число в дужках визначає кількість елементів масиву. Доступ до окремого елементу масиву організується з використанням номера цього елементу, або індекса.