350 Алгоритми та структури даних

Конспекти лекцій та Лабораторні роботи з дисципліни "Алгоритми та структури даних" для III курсу спеціальності 121 "Інженерія програмного забезпечення" ОКР "Фаховий молодший бакалавр" Херсонського політехнічного фахового коледжу Державного університету "Одеська політехніка"

View the Project on GitHub solidol/nmk-asd

Перелік усіх робіт

Робота з динамічною пам’яттю

Мета роботи

Ознайомитися з можливостями роботи з динамічною засобами мови С++. Отримати навички роботи з динамічними масивами.

Обладнання

Персональний комп’ютер, Visual Studio 2008 або інша середа розробки для мови C++

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

Покажчики — це змінні, котрі містять адресу пам’яті, розподіленої для об’єкта відповідного типу. Усі змінні, розглянуті до цього, зберігали якісь значення (дані). Ці дані могли бути різних типів: символьного, цілого, дійсного тощо. При оголошенні змінної-покажчика слід вказати тип даних, адресу яких буде містити змінна, та ім’я покажчика з символом «*».

Загальний формат опису покажчика має вигляд:

тип *ім’я;

де тип — тип значень, на який вказує покажчик; ім’я — ім’я змінної-покажчика; «*» — операція над типом, що читається «покажчик на тип».

Наприклад:

int *pn; // покажчик на ціле значення;
float *pf1, *pf2; // два покажчики на дійсні значення.

Покажчики не прив’язують дані до якого-небудь визначеного імені змінної і можуть містити адреси будь-якого неіменованого значення. Існує адресна константа NULL, що означає порожню адресу.

Слід нагадати, що мова C++ налічує лише дві операції, які стосуються адрес змінних, а саме:

«&» — операція взяття адреси («адреса значення»);

«*» — операція розіменування («значення за адресою»).

Операція взяття адреси «&» застосовується разом зі змінною і повертає адресу цієї змінної. Операція розіменування «*» використовується разом з покажчиками і вилучає значення, на яке вказує змінна-покажчик, розташована безпосередньо після символа «*».

Оголошення покажчиків можна здійснити одним з таких способів:

<тип> *ptr;
<тип> *ptr = <змінна-покажчик>;
<тип> *ptr = &<ім’я змінної>;

Наприклад:

int *ptx, b; 
float y; // — оголошені змінна-покажчик ptx та змінні b і у;
float *sp = &y; // — покажчику sp присвоюється адреса змінної у;
float *p = sp; // — покажчику р присвоюється значення (адреса значення), яке міститься в змінній sp, тобто адреса змінної у. 

Хід роботи

  1. Завантажити Visual Studio 2008. Знайдіть на робочому столі ярлик з Visual Studio 2008 або Пуск → Всі програми→ Microsoft → Microsoft Visual Studio 2008.

  2. Створити новий проект «Visual C++ (консольное приложение Win32)». Файл → Cтворити → Проект, тип проекту «Консольное приложение Win32».

  3. Перевірити роботу програми та намалювати блок-схему алгоритму

#include <iostream.h>
#include <conio.h>
int main ( )
{ int x = 10;
  int *px (&x);   // int *px = &x;
cout << "x =" << x << endl; 
  cout << "*px =" << *px << endl;
  x *= 2;          //x=x*2;
  cout << "Новое значение *px = " << *px << endl;*
  px += 2;       // *px=*px + 2;
  cout << "Результат *px, т. e. x = " << x << endl;
  getch();     //задержка экрана
}
#include <iostream>
#include <clocale>

using namespace std;
int main(){
	setlocale(LC_ALL,"Russian");
	int n,i,j=1;
	cout<<"N= ";
	cin>>n;
	int *a=new int[n];
	for (i=0;i<=n;i++){
		*(a+i)=j;  
		j+=2;
	}
	cout<<"Массив:\n";
	for (i=0;i<=n;i++)
		cout<<*(a+i)<<'\n';
	system("pause");
	return 0;
}
  1. Розв’язати задачу згідно з варіантом. Намалювати блок-схему.

    • Варіант 1. Дано ціле число N (N<0). Сформувати і вивести цілочисельний масив разміру N, що містить ступені двійки від першої до N-ої: 2,4,8,16,..
    • Варіант 2. Дано ціле число N (N>1), а також перший член A та різниця D арифметичної прогресії. Сформувати і вивести масив розміру N, що містить N перших членів даної прогресії: A, A+D, A+2*D, A+3*D,..
    • Варіант 3. Дано ціле число N (N>1), а також перший член A та знаменник D геометричної прогресії. Сформувати і вивести масив розміру N, що містить N перших членів даної прогресії: A, A*D, A*D2, A*D3,..
    • Варіант 4. Дано ціле число N (N>2). Сформувати і вивести цілий масив розміру N, що містить N перших елементів послідовності чисел Фібоначчі FK: F1=1, F2=1, FK=FK-2+FK-1, k=3,4,..
    • Варіант 5. Сформувати і вести цілий масив з n елементів: 6,5,4,6,5,4,..
    • Варіант 6. Дано ціле число n. Сформувати та вивести масив: 1,1,2,1,2,3,1,2,3,4,…,1,2,3,..n.
    • Варіант 7. Дано ціле число n. Сформувати та вивести масив: x0=0, xi=i!, i=1,2,..,n-1
    • Варіант 8. Дано ціле число n (n> 0). Сформувати і вивести цілий масив розміру n, що містить n перших позитивних парних чисел: 2,4,6,8,10,..
    • Варіант 9. Дано ціле число N (N> 0). Сформувати і вивести цілий масив розміру N, що містить ступені трійки від першої до N-ої: 3,9,27,..
    • Варіант 10. Сформувати та вивести масив, що складається з n елементів, заповнивши його квадратами значень індексів елементів.
    • Варіант 11. Дано ціле число N(N>1) та дійсне число A(A≠0). Сформувати і вивести масив розміру N за таким правилом: A, A2, A3,..
    • Варіант 12. Дано ціле число N(N>1) та дійсне число A(A≠0). Сформувати і вивести масив розміру N за таким правилом: AN, AN-1, AN-2,..
    • Варіант 13. Дано ціле число N(N>1) та дійсне число A(A≠0). Сформувати і вивести масив розміру N за таким правилом: (A-1)N, (A-2)N, (A-3)N,..
    • Варіант 14. Дано ціле число N(N>1) та дійсне число A. Сформувати і вивести масив розміру N за таким правилом: sin(A), sin(A-0.1), sin(A-0.2),..
    • Варіант 15. Дано ціле число N(N>1) та дійсне число A(A≠0). Сформувати і вивести масив розміру N за таким правилом: 1A, 2A, 3A,..
  2. Для кожного етапу роботи зробити знімки екрану та додати їх у звіт з описом кожного скіншота
  3. Додати програмний код завдання для самомтійного виконання
  4. Дати відповіді на контрольні запитання
  5. Зберегти звіт у форматі PDF

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

  1. Що таке покажчик та який він має загальний формат вигляду?
  2. Які існують операції адрес змінних в мові С++?
  3. Якими способами можна зробити оголошення покажчика?
  4. Що дозволяє з’ясувати оператор адресу &?
  5. Як присвоїти значення покажчику?
  6. Що спільного між покажчиком і змінною-масивом?
  7. Як звернутися до комірки масива, використовуючи арифметику покажчиків?

Приклади

  1. Приклад 1
  2. Приклад 2

Довідники та додаткові матеріали

  1. Arrays - cplusplus.com
  2. Arrays (C++) - Microsoft Docs
  3. Використання масивів