Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні icon

Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні



НазваниеЛабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні
Дата конвертации15.07.2013
Размер107.41 Kb.
ТипЛабораторна робота
скачать >>>



Лабораторна робота №7
Вказівники та посилання. Динамічні масиви




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

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



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

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

В С++ також існують і змінні типу вказівник. Значенням змінної типу вказівник є адреса змінної або об'єкта. Нехай змінна типу вказівник має ім'я ptr, тоді в якості значення їй можна присвоїти адресу за допомогою наступного оператора:

ptr=&vr;

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

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

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

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

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

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

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

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

Вказівники використовуються для роботи з масивами. розглянемо оголошення двовимірного масиву:

int mas[4][2];

int *ptr;

Тоді вираз ptr=mas вказує на перший стовпець першого рядка матриці. Записи mas і &mаs[0][0] рівносильні. Вираз ptr+1 вказує на mas[0][1], далі йдуть елементи: mas[1][0], mas[1][1], mas[2][0] і т. д.; ptr+5 вказує на mas[2][1].

Двовимірні масиви розташовані в пам’яті так само, як і одновимірні масиви, займаючи послідовні комірки пам’яті

ptr

ptr+1

ptr+2

ptr+3

ptr+4

ptr+5

mas[0][0]

mas[0][1]

mas[1][0]

mas[1][1]

mas[2][0]

mas[2][1]

Розміщення двовимірного масиву в пам’яті


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

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

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

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

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

Приклад 2. Використання посилань.

#include // cout

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) і повинно бути ініціалізоване під час оголошення. Такий спосіб використання посилань може призвести до фатальних помилок, які важко виявити через виникнення плутанини у використанні змінних.

Інше застосування посилань — можливість створення параметрів функції, які передаються за допомогою посилання, при цьому перед цим параметром ставиться знак &.

Приклад 3. Функція з параметром-посилання.

#include // cout

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;

}

7.2. Приклад



Використовуючи вказівники, вивести на екран масив із заданою кількістю елементів.

#include

#include

int main()

{

int *a;

int n;

cout<<"Enter number of elements in your massive:" <
cin>>n;

cout<<"Your massive: "<
a=new int [n];

for (int i=0;i
{

*(a+i)=i+1;

cout<<*(a+i)<
}

getch();

delete []a;

return 0;

}

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

В С++ для роботи з динамічними об’єктами використовують спеціальні операції new і delete. За допомогою операції new виділяється пам’ять під динамічний об’єкт (який створюється в процесі виконання програми), а за допомогою операції delete створений об’єкт видаляється з пам’яті.

Приклад. Виділення пам’яті під динамічний масив.

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



int n;

cin>>n; // n — розмірність масиву

int *mas=new int[n]; // виділення пам’яті під масив

delete [] mas; // звільнення пам’яті




В цьому прикладі mas є вказівником на масив з n елементів. Оператор int *mas=new int[n] виконує дві дії: оголошується змінна типу вказівник, далі вказівнику надається адреса виділеної області пам’яті у відповідності з заданим типом об’єкта.

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



int n, *mas;

cin>>n;// n - розмірність масиву

mas=new int[n];// виділення пам’яті під масив

delete [] mas;// звільнення пам’яті



Якщо за допомогою операції new неможливо виділити потрібний об’єм пам’яті, то результатом операції new є 0.

Іноді при програмуванні виникає необхідність створення багатовимірних динамічних об’єктів. Програмісти-початківці за аналогією з поданим способом створення одновимірних динамічних масивів для двовимірного динамічного масиву розмірності n*k запишуть наступне

mas=new int[n][k]; // Невірно! Помилка!

Такий спосіб виділення пам’яті не дасть вірного результату. Наведемо приклад створення двовимірного масиву.

#include

#include

int main()

{

int n;const m=5;

cout<<"input the number";

cin>>n;

int** a; //a - вказівник на масив вказівників на рядки

a=new int* [n]; //виділення пам’яті для масиву вказівників на n рядків

for(int i=0;i
a[i]=new int [m]; //виділення пам’яті для кожного рядка масиву розмірністю nxm



for(int i=0;i
{for(int j=0;j
cout<
cout<
for(int i=0;i
delete [] a[i]; //звільнення пам’яті від кожного рядка

delete [] a; //звільнення пам’яті від масиву вказівників

getch();

return 0;

}

^

7.3. Порядок виконання роботи



7.3.1. Проаналізувати умову задачі.

7.3.2. Розробити алгоритм та створити програму розв’язання задачі згідно з номером варіанту.

7.3.3. Результати роботи оформити протоколом.

^

7.4. Варіанти завдань



Реалізувати варіанти завдань з попередньої лабораторної роботи.

1. Знайти мінімальний елемент матриці заданого розміру та добуток всіх її додатних елементів.

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

3. Обчислити добуток матриці на вектор та максимальний елемент отриманого вектора.

4. Знайти добуток двох матриць та мінімальний елемент отриманої матриці.

5. Знайти суму двох матриць та обчислити слід (суму діагональних елементів) отриманої матриці.

Завдання підвищеної складності:

1) Дано послідовність чисел . Отримати квадратну матрицю порядку n, елементами якої є числа , розташовані за схемою:




2) Дано послідовність чисел . Отримати квадратну матрицю порядку n, елементами якої є числа , розташовані за схемою:




3) Заповнити матрицю послідовністю чисел, кратних 3 у наступному порядку:





4) Дано послідовність чисел . Отримати квадратну матрицю порядку n, елементами якої є числа , розташовані за схемою:




5) Дано послідовність чисел . Отримати квадратну матрицю порядку n, елементами якої є числа , розташовані за схемою:




6) Дано послідовність чисел . Отримати квадратну матрицю порядку n, елементами якої є числа , розташовані за схемою:




7) Дано дійсну квадратну матрицю порядку n. Знайти всі непарні елементи у заштрихованій області.




8) Дано квадратну матрицю порядку n, елементи якої є цілими числами. Знайти всі менші від 100 числа-паліндроми (див. Лабораторну роботу № 2) із позначеної області.




9) Дано символьну квадратну матрицю порядку n. Обчислити кількість букв а над головною діагоналлю та кількість букв в під бічною діагоналлю, та замінити у матриці ці букви на символ *.





10) Дано дійсну квадратну матрицю В. Отримати цілочисельну квадратну матрицю А того ж порядку, в котрій елемент =1, якщо відповідний елемент початкової матриці , більший від елемента, розташованого в тому ж самому рядку на головній діагоналі, в іншому випадку =0.





11) Дано натуральне число n та дійсну квадратну матрицю порядку n. Побудувати послідовність нулів та одиниць, в котрій , тоді і тільки тоді, коли елементи i-го рядка матриці утворюють послідовність, що зростає або спадає.





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





13) Дано дійсну квадратну матрицю порядку 2n. Отримати нову матрицю, переставляючи її блоки розміру nxn:




14) Дано дійсну квадратну матрицю порядку 2n. Отримати нову матрицю, переставляючи її блоки розміру nxn:




15) Дано дійсну квадратну матрицю порядку 2n. Отримати нову матрицю, переставляючи її блоки розміру nxn:




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





17) Отримати квадратну матрицю порядку n .


18) Утворити квадратну матрицю порядку n, заповнюючи заштриховану частину матриці квадратами натурального ряду чисел




19) Створити квадратну матрицю порядку n .

20) Створити квадратну матрицю порядку n


21) Створити квадратну матрицю порядку n

.


22) Дано цілочисельну квадратну матрицю порядку n. Знайти значення елементів, що розташовані вище головної діагоналі та діляться на 5 без остачі. Вивести індекси відповідних елементів.




23) Дано послідовність чисел . Отримати квадратну матрицю порядку n, елементами якої є числа , розташовані за схемою:




24) Дано дійсну квадратну матрицю порядку n. Знайти найбільше за модулем число із значень елементів, розташованих в позначеній частині матриці.




25) Дано дійсну квадратну матрицю порядку n. Знайти найбільше із значень елементів, розташованих в позначеній частині матриці.

7.5. Контрольні запитання



1. Що таке вказівник? Навіщо він використовується?

2. Як оголошується змінна типу вказівник?

3. Чому при оголошенні вказівника необхідно вказувати тип змінної, яка адресується з його допомогою?

4. Розкажіть про посилання.

5. Навіщо використовуються змінні типу-посилання?

6. Яке значення операції &?

7. Що таке динамічний масив?

8. Яке застосування операцій new і delete?



Похожие:

Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні iconЛабораторна робота №9 Передача масивів у функції Мета роботи: отримати навички роботи з масивами у функціях. Теоретичні
Масиви можуть бути параметрами функцій, і функції як результат можуть повертати вказівник на масив. Розглянемо ці можливості
Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні iconЛабораторна робота №6 Масиви Мета роботи : отримати навички роботи з одно та багатовимірними масивами. Теоретичні
Масив являє собою набір однотипних об’єктів, які мають спільне ім’я і відрізняються місцезнаходженням в цьому наборі (або індексом,...
Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні iconЛабораторна робота №10 Робота з рядками (string) Мета роботи : отримати навички роботи з рядками. 10 Теоретичні
В с++ з'явилася дуже корисна бібліотека роботи з рядками. Вона досить ефективна І дозволяє легко вирішувати наступні задачі
Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні iconЛабораторна робота №2 Умовна операція та множинний вибір Мета роботи : отримати навички роботи з умовною операцією та оператором множинного вибору. Теоретичні
Мета роботи: отримати навички роботи з умовною операцією та оператором множинного вибору
Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні iconЛабораторна робота №5 Функції Мета роботи : отримати навички роботи з функціями. Теоретичні
Кожна програма у своєму складі повинна мати головну функцію main(). Саме функція main() забезпечує створення точки входу в об’єктний...
Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні iconЛабораторна робота №3 Цикл while з передумовою та постумовою Мета роботи : Отримати навички роботи з циклом while Теоретичні
При виконанні програми часто виникає необхідність неодноразового повторення однотипних обчислень над різними даними. Для цих цілей...
Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні iconЛабораторна робота №1 Принципи програмування на С++ Мета роботи : отримати навички роботи з типами даних та виразами. Теоретичні
Кожна програма на С++ у своєму складі повинна мати головну функцію main(). Саме функція main() забезпечує створення точки входу в...
Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні iconЛабораторна робота №4 Цикл for мета роботи : отримати навички роботи з циклом for. Теоретичні
При цьому виконуються три операції: ініціалізація лічильників циклів, порівняння його значення з деяким граничним значенням і зміна...
Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні iconЛабораторна робота №8 Рекурсивні функції Мета роботи : отримати навички роботи з рекурсивними функціями. Теоретичні
Така необхідність виникає при реалізації динамічних структур даних, таких як стеки, дерева, черги. Для реалізації рекурсивних алгоритмів...
Лабораторна робота №7 Вказівники та посилання. Динамічні масиви Мета роботи : отримати навички роботи з вказівниками, посиланнями та динамічними масивами. Теоретичні iconЛабораторна робота 1 Тема. Класи та об’єкти. Мета роботи: засвоїти основні поняття об’єктно-орієнтованого програмування на прикладі мови програмування С++. Теоретичні
Основні поняття, потрібні для виконання роботи. Це 1 класи; 2 область доступу; 3 ієрархія класів
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©gua.convdocs.org 2000-2015
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов