DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

Національний технічний університет України «Київський політехнічний інститут імені Ігоря Сікорського» Кафедра АПЕПС Алгоритмізація та програмування - 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:04

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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