You are on page 1of 6

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»

ІКТА
кафедра ЕОМ

ЗВІТ
до лабораторних робіт з курсу: «Основи алгоритмізації та
програмування»
ЛАБОРАТОРНА РОБОТА №6 РОЗВ'ЯЗУВАННЯ НА МОВІ С ЗАДАЧ, В
ЯКИХ ВИКОРИСТОВУЮТЬСЯ ДИНАМІЧНІ ЧИСЛОВІ МАСИВИ.
РОЗРОБКА БАГАТОФАЙЛОВИХ ПРОЕКТІВ

Виконав:
ст. гр. КІ-104
Мороз М.Т.
.
Прийняв:
Асистент каф.
ЕОМ Гузинець
Н.В.
Львів 2023
Мета роботи:
▪ познайомитися з використанням динамічних масивів в мові програмування С;
• познайомитися із принципами розробки багатофайлових проектів на мові
програмування С;
• познайомитися із засобами розробки багатофайлових проектів в інтегрованому
середовищі Microsoft Visual Studio 2022.
Теоретичний вступ:
Динамічні масиви в програмуванні відрізняються від звичайних масивів тим, що їх
розмір і пам'ять виділяються під час виконання програми за допомогою спеціальних
функцій. Це надає більшу гнучкість і можливість робити масиви зі змінною кількістю
елементів. Давайте розглянемо основні аспекти створення та використання динамічних
масивів.
Оголошення динамічного одновимірного масиву за допомогою `malloc`:
Для створення одновимірного динамічного масиву використовується функція `malloc`.
Ось приклад оголошення динамічного одновимірного масиву з `N` елементів типу
`float`:
int N = 10;
float* a = (float*)malloc(sizeof(float) * N);
Оголошення динамічного одновимірного масиву за допомогою `calloc`:
Альтернативно, можна використовувати функцію `calloc` для виділення пам'яті під
динамічний масив:
int N = 10;
float* a = (float*)calloc(N, sizeof(float));
Звільнення пам'яті:
Пам'ять, виділена під динамічний масив, повинна бути звільнена після використання
для уникнення витоку пам'яті:
free(a);
Робота з динамічними масивами:
Динамічні масиви можна індексувати та звертатися до їх елементів за допомогою
індексів, як і в звичайних масивах. Наприклад, `a[i]` дає доступ до `i`-го елемента
динамічного масиву `a`.
Двовимірні динамічні масиви:
Двовимірні динамічні масиви займають пам'ять сусідніми блоками, і елементи
розташовані в пам'яті один за одним. Для оголошення та роботи з такими масивами,
можна використовувати вказівники на вказівники. В цьому випадку, кожен рядок
масиву є окремим динамічним масивом.
Оголошення двовимірного динамічного масиву:
int rows = 3;
int cols = 5;
float** matrix = (float**)malloc(rows * sizeof(float*));
for (int i = 0; i < rows; i++) {
matrix[i] = (float*)malloc(cols * sizeof(float));
}
Звільнення пам'яті для двовимірного динамічного масиву:
for (int i = 0; i < rows; i++) {
free(matrix[i]);
}
free(matrix)
Це дозволяє працювати з двовимірними динамічними масивами, як із звичайними, і
забезпечує звільнення пам'яті після завершення використання масиву.
Багатофайлові проекти
Великі програми на мові C розбиваються на окремі функції, що спрощує кодування та
налагодження програми. Основні частини багатофайлового проекту включають:
1. **Головний файл з функцією `main()`:** Це файл, в якому зазвичай розміщується
функція `main()`, яка є входом програми.
2. **Файли з прототипами функцій (.h):** Ці файли містять оголошення (прототипи)
функцій, які будуть визначені в інших файлах. Вони мають розширення `.h`.
3. **Файли з визначеннями функцій (.cpp):** Ці файли містять реалізацію функцій, які
були оголошені в файлах з прототипами. Вони мають розширення `.cpp`.

Завдання:Варіант 18

Розв’язок:
блок-схема алгоритму буде мати вигляд:
Код програми:
/* File main.c */
#include<stdio.h>
#include<stdlib.h>
#include"Header.h"

int main() {
int N = 9;
int** arr = (int**)malloc(N * sizeof(int*));

for (int i = 0; i < N; i++)


arr[i] = (int*)malloc(N * sizeof(int));

int tempB = 0;
for (int i = 0; i < N; i++)
{
tempB = set_spiral(arr, i, N - i, tempB);
}

printArr(arr, N);

// Очищення пам'яті
for (int i = 0; i < N; i++)
free(arr[i]);
free(arr);

return 0;
}
/* File Header.h*/
int set_spiral(int** arr, int start, int end, int tempB);
void printArr(int** arr, int N);
/* File MyFunc.cpp */
#include<stdio.h>
#include<stdlib.h>
//#include"Header.h"
int set_spiral(int** arr, int start, int end, int tempB) {
for (int i = start; i < end; i++)
{
for (int j = start; j < end; j++) {
tempB++;
arr[j][i] = tempB;
}
tempB--;
for (int j = start; j < end; j++)
{
tempB++;
arr[end - 1][j] = tempB;
}
break;
}
for (int i = end - 1; i >= start; i--)
{
tempB--;
for (int j = end - 1; j >= start; j--)
{
tempB++;
arr[j][i] = tempB;
}
for (int j = end - 1; j >= start; j--)
{

if (arr[start][j] == -842150451) {
tempB++;
arr[start][j] = tempB;
}

}
break;
}
return tempB;
}
void printArr(int** arr, int N) {
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++) {
printf("%d ", arr[i][j]);
if (arr[i][j] < 100 && arr[i][j] >= 10) {
printf(" ");
}
if (arr[i][j] < 10) {
printf(" ");
}
}
printf("\n");
}
}
Демонстрація:

Висновок: Я познайомився як працювати з двовимірними динамічними масивами,


та багатофайловими проектами

You might also like