Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Алгоритмізація та програмування

Частина тексту файла (без зображень, графіків і формул):

Національний технічний університет України «Київський політехнічний інститут імені Ігоря Сікорського» Кафедра АПЕПС Алгоритмізація та програмування - 2. Процедурне програмування ЗВІТ до лабораторної роботи № 2 «Динамічне виділення пам’яті для одно- та двовимірних масивів» Варіант № 15 Дата «26» травня 2022 ЗАВДАННЯ: 1. Ознайомитись з особливостями роботи з динамічними одно- та двовимірними масивами. 2. Розробити Блок-схему програмного алгоритму. 3. Виконати індивідуальне завдання. 4. Оформити ЗВІТ до лабораторної роботи згідно вимог та методичних рекомендацій. 5. Вихідні дані (завдання) обрати згідно свого варіанта у Додатку B-2. РЕЗУЛЬТАТ РОБОТИ: 1. Роздрукувати отримані результати (вивести на екран). 2. ЗВІТ до комп’ютерного практикуму для перевірки додати в Клас. 3. Програмний код розмістити на сайті Repl.it (посилання виключно через кнопку «+ Invite»). Теоретичні відомості: Об’єкти з динамічної тривалістю життя створюються і руйнуються конкретними викликами функцій при виконанні програми. Їм розподіляється пам’ять зі спеціального резерву пам’яті, що називається купою (heap), за допомогою бібліотечної функцій malloc. Відповідно скасування розподілу пам’яті виконується за допомогою функції free. Функція malloc використовується для виділення пам’яті. Вона повертає покажчик на блок виділеної пам’яті. Якщо для блоку недостатньо пам’яті, вона повертає NULL. Щоб виділити пам’ять для одновимірного масиву скористаємося таким синтаксисом: int *parr; parr=(int**)malloc(size*sizeof(int*)); де size – це потрібний розмір масиву. Якщо потрібно виділити для двовимірного масиву скористаємось вказівником на вказівник, тобто синтаксис створення динамічного двовимірного масиву буде виглядати приблизно так: int **pmat; parr=(int**)malloc(rows*sizeof(int*)); for(int i = 0; i<rows;i++) { pmat[i] = (int*)malloc(cols*sizeof(int)); } Щоб змінити розмір виділеної раніше пам’яті використовується функія realloc. Функція free звільняє пам’ять виділену під блок. Хід роботи: Завдання / Короткий опис виконання Завдання 1: Створюю одновимірний динаміничний масив. Заповнюю його. Прохожусь по ньому, якщо знаходжу позитивний елемент, то переношу його у кінець, усі негативні елементи масиву переношу у їхньому порядку у лівий бік. В кінці усіх перетворень змінюю виділену пам’ять, та виводжу результат. В кінці виконання звільняю зайняту пам’ять. Блок-схема до завдання 1: / Короткий опис рішення завдання 2: Створюю двовимірний динамічний масив. Заповнюю його. Проходжусь по ньому починаючи з рядка з індексом 0 та стовпця із індексом 1(тому що перший стовпець непарний). Переношу всі непарні стовпці вліво, а всі парні вправо. Після того змінюю виділену пам’ять для двовимірного масиву, так виводжу результат. Блок-схема до завдання 2 / Результат виконання програми: / Висновок: Під час виконання даної лабораторної роботи набуто практичних навичок із особливість роботи з динамічними одно- та двовимірними масивами. Було обрано варіант та завдання відносно нього. Усі завдання виконано правильно, згідно вимог. Алгоритми працють справно. Силка на Replit: https://replit.com/join/ifffzyepxa-tr-15fundamient Копія коду: // Лабораторна робота №2 // Виконує Фундамент Даніїл ТР-15 // 05.05.2022 #include <stdio.h> #include <stdlib.h> #include <malloc.h> int main() { printf("---- Завдання 1 ----\n"); int *parr = NULL; int arrSize; printf("Введіть к-сть елементів одновимірного масиву: \n"); scanf("%d", &arrSize); parr = (int*)malloc(arrSize * sizeof(int)); //input for(int i = 0; i < arrSize; i++) { scanf("%d", &parr[i]); } //output printf("Початковий масив: \n"); for (int i = 0; i < arrSize; i++) { printf("%d ", parr[i]); } printf("\n\n"); //delete all positive elements for(int i = 0; i < arrSize; i++) { while (parr[i] > 0) { for(int j = i; j < arrSize; j++) parr[j] = parr[j+1]; parr = (int*)realloc(parr, (--arrSize)*sizeof(int)); } } //output printf("Результат: \n"); for (int i = 0; i < arrSize; i++) { printf("%d ", parr[i]); } free(parr); printf("\n\n"); printf("---- Завдання 2 ----\n"); int **pmat = NULL; int rows, cols; printf("Введіть к-сть рядків двовимірного масиву: \n"); scanf("%d", &rows); printf("Введіть к-сть стовпців двовимірного масиву: \n"); scanf("%d", &cols); pmat = (int**)malloc(rows * sizeof(int*)); for(int i = 0; i < rows; i++) { pmat[i] = (int*)malloc(cols * sizeof(int)); } // input for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { printf("*parray[%d][%d] = ", i, j); scanf("%d", &pmat[i][j]); } } printf("\n\n"); //output printf("Початкова матриця: \n"); for(int i = 0; i < rows; i++) { for(int j = 0; j < cols; j++) { printf("%d ", pmat[i][j]); } printf("\n"); } // delete all even cols for(int i = 0; i < rows; i++) { for(int j = 1; j < cols; j++) { for(int k=j;k<cols;k++) pmat[i][k] = pmat[i][k+1]; } } for(int k = 0; k < rows; k++) { pmat[k] = (int*)realloc(pmat[k], (cols-cols/2) * sizeof(int)); } cols -= cols/2; printf("\n"); //output printf("Результат: \n"); for(int i = 0; i < rows; i++) { for(int j = 0; j < cols; j++) { printf("%d ", pmat[i][j]); } printf("\n"); } }
Антиботан аватар за замовчуванням

03.05.2023 19:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

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

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!