ЛАБА7

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

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

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

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Інші
Група:
СА 12
Варіант:
8

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" Інститут ІКНІ Кафедра ІСМ ЗВІТ про виконання лабораторної роботи №7 на тему: «Робота з динамічними масивами» з предмету «Програмування та алгоритмічні мови» Мета роботи: навчитися виділяти та використовувати динамічні масиви даних. Хід роботи Завдання 1. Пишу програму для виконання дій над динамічним двовимірним масивом згідно з своїм варіантом (Варіант 1). Написати програму, яка впорядковує за спаданням елементи головниї діагоналі квадратної матриці. Реалізую доступ до елементів масива двома способами: за допомогою індексів та вказівників. Кожний спосіб реалізую окремою функцією. Алгоритм формування початкового масива реалізую двома способами: за допомогою введення даних з клавіатури та випадкової генерації чисел. В окремій фнкції передбачаю виділення пам’яті під динамічний масив функціями malloc, calloc та new.Кожний спосіб реалізую окремою функцією. Також вивожу на екран елементи початкового масива, а також змінений. В підпрограмі не використовую глобальні змінні. Інформація у підпрограмі передається лише за допомогою параметрів. Введення даних, виведення даних і виконання дій над масивами реалізую в окремих функціях. У головній програмі виконую їхній виклик. Введення-виведення даний супроводжуються відповідними повідомленнями. Код програми першого завдання: #include<conio.h> #include<math.h> #include <clocale> #include<iostream> #include <time.h> #include <iomanip> using namespace std; void newMemoryAllocation(int**&a, int rowCount) { a = new int*[rowCount]; for (int i = 0; i < rowCount; i++) a[i] = new int[rowCount]; } void mallocMemoryAllocation(int**&a, int rowCount) { a = (int**)calloc(rowCount,sizeof(int*)); for (int i = 0; i < rowCount; i++) a[i] = (int*)calloc(rowCount,sizeof(int)); } void callocMemoryAllocation(int**&a, int rowCount) { a = (int**)malloc(rowCount*sizeof(int*)); for (int i = 0; i < rowCount; i++) a[i] = (int*)malloc(rowCount*sizeof(int)); } void input(int**&a, int rowCount) { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < rowCount; j++) { std::cout << "a[" << i << "][" << j << "] = "; std::cin >> a[i][j]; } } } void random(int**&a, int rowCount) { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < rowCount; j++) { a[i][j] = rand() % 200 - 100; } } } void output(int**a, int rowCount) { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < rowCount; j++) std::cout << a[i][j] << "\t"; std::cout << std::endl; } } void sort(int**&a, int rowCount) { int s = 0; for (int i = 0; i < rowCount; i++) for (int j = 0; j < rowCount-1; j++) if (a[j][j]<a[j+1][j+1]) { int temp = a[j+1][j+1]; a[j + 1][j + 1] = a[j][j]; a[j][j] = temp; } } int main() { setlocale(LC_CTYPE, "ukr"); srand(time(NULL)); char check = 0; char check1 = 0; int **a=NULL; int rowCount; cout << "Введіть кільість рядків: "; cin >> rowCount; int choice = 0; std::cout << "введiть 1, якщо хочете викликати calloc, 2 якщо malloc, 3 якщо new \n"; std::cin >> check; if (check == '1') callocMemoryAllocation(a, rowCount); else if (check == '2') mallocMemoryAllocation(a, rowCount); else newMemoryAllocation(a, rowCount); std::cout << "введiть 1, якщо хочете вводити власноруч, якщо нi то будь-який інший символ \n"; std::cin >> check1; if (check1 == '1') input(a, rowCount); else random(a, rowCount); output(a, rowCount); sort(a, rowCount); cout << "\n\n"; output(a, rowCount); _getch(); } Рис 1. Результат виконання першої програми Блок-схема до першого завдання: Рис 2. Алгоритм виконання програми Завдання 2. Пишу програму для виконання дій над динамічним двовимірним масивом згідно з своїм варіантом (Варіант 1). Задано двовимірний масив цілих числез діапазону (-16,…,22). Знайти всі елементи кратні 3 або всі, крім від’ємних. Реалізую доступ до елементів масива двома способами: за допомогою індексів та вказівників. Кожний спосіб реалізую окремою функцією. Алгоритм формування початкового масива реалізую двома способами: за допомогою введення даних з клавіатури та випадкової генерації чисел. В окремій фнкції передбачаю виділення пам’яті під динамічний масив функціями malloc, calloc та new.Кожний спосіб реалізую окремою функцією. Також вивожу на екран елементи початкового масива, а також змінений. В підпрограмі не використовую глобальні змінні. Інформація у підпрограмі передається лише за допомогою параметрів. Введення даних, виведення даних і виконання дій над масивами реалізую в окремих функціях. У головній програмі виконую їхній виклик. Введення-виведення даний супроводжуються відповідними повідомленнями. . Код програми до другого завдання: #include<conio.h> #include<math.h> #include <clocale> #include<iostream> #include <time.h> #include <iomanip> using namespace std; void newMemoryAllocation(int**&a, int rowCount, int columnCount) { a = new int*[rowCount]; for (int i = 0; i < rowCount; i++) a[i] = new int[columnCount]; } void mallocMemoryAllocation(int**&a, int rowCount, int columnCount) { a = (int**)calloc(rowCount, sizeof(int*)); for (int i = 0; i < rowCount; i++) a[i] = (int*)calloc(columnCount, sizeof(int)); } void callocMemoryAllocation(int**&a, int rowCount, int columnCount) { a = (int**)malloc(rowCount*sizeof(int*)); for (int i = 0; i < rowCount; i++) a[i] = (int*)malloc(columnCount*sizeof(int)); } void input(int**&a, int rowCount, int columnCount) { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { std::cout << "a[" << i << "][" << j << "] = "; std::cin >> a[i][j]; } } } void random(int**&a, int rowCount, int columnCount) { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { a[i][j] = rand() % 200 - 100; } } } void output(int**a, int rowCount, int columnCount) { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) std::cout << a[i][j] << "\t"; std::cout << std::endl; } } void outputCondition(int**&a, int rowCount, int columnCount) { cout << "Елементи масиву, що більші нуля або кратні 3: "; for (int i = 0; i < rowCount; i++) for (int j = 0; j < columnCount; j++) if (a[i][j]>=0||a[i][j]%3==0) cout << a[i][j]<<" "; } int main() { setlocale(LC_CTYPE, "ukr"); srand(time(NULL)); char check = 0; char check1 = 0; int **a = NULL; int rowCount, columnCount; cout << "Введіть кільість рядків: "; cin >> rowCount; cout << "Введіть кільість стовпців: "; cin >> columnCount; int choice = 0; std::cout << "введiть 1, якщо хочете викликати calloc, 2 якщо malloc, 3 якщо new \n"; std::cin >> check; if (check == '1') callocMemoryAllocation(a, rowCount, columnCount); else if (check == '2') mallocMemoryAllocation(a, rowCount, columnCount); else newMemoryAllocation(a, rowCount, columnCount); std::cout << "введiть 1, якщо хочете вводити власноруч, якщо нi то будь-який інший символ \n"; std::cin >> check1; if (check1 == '1') input(a, rowCount,columnCount); else random(a, rowCount, columnCount); output(a, rowCount, columnCount); cout << "\n\n"; outputCondition(a, rowCount, columnCount); _getch(); } / Рис 3. Результат виконання другого завдання Блок-схема до другого завдання: Рис 4. Блок-схема до завдання 2 Завдання 3. Пишу програму для виконання дій над динамічним двовимірним масивом згідно з своїм варіантом (Варіант 1). Задано двовимірний масив цілих числез діапазону (-16,…,22). Знайти всі елементи кратні 3 або всі, крім від’ємних. Реалізую доступ до елементів масива двома способами: за допомогою індексів та вказівників. Кожний спосіб реалізую окремою функцією. Алгоритм формування початкового масива реалізую двома способами: за допомогою введення даних з клавіатури та випадкової генерації чисел. В окремій фнкції передбачаю виділення пам’яті під динамічний масив функціями malloc, calloc та new.Кожний спосіб реалізую окремою функцією. Також вивожу на екран елементи початкового масива, а також змінений. В підпрограмі не використовую глобальні змінні. Інформація у підпрограмі передається лише за допомогою параметрів. Введення даних, виведення даних і виконання дій над масивами реалізую в окремих функціях. У головній програмі виконую їхній виклик. Введення-виведення даний супроводжуються відповідними повідомленнями. Код програми третього завдання: #include<conio.h> #include<math.h> #include <clocale> #include<iostream> #include <time.h> #include <iomanip> using namespace std; void newMemoryAllocation(int**&a, int rowCount, int columnCount) { a = new int*[rowCount]; for (int i = 0; i < rowCount; i++) a[i] = new int[columnCount]; } void mallocMemoryAllocation(int**&a, int rowCount, int columnCount) { a = (int**)calloc(rowCount, sizeof(int*)); for (int i = 0; i < rowCount; i++) a[i] = (int*)calloc(columnCount, sizeof(int)); } void callocMemoryAllocation(int**&a, int rowCount, int columnCount) { a = (int**)malloc(rowCount*sizeof(int*)); for (int i = 0; i < rowCount; i++) a[i] = (int*)malloc(columnCount*sizeof(int)); } void input(int**&a, int rowCount, int columnCount) { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { std::cout << "a[" << i << "][" << j << "] = "; std::cin >> a[i][j]; } } } void random(int**&a, int rowCount, int columnCount) { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { a[i][j] = rand() % 20 - 10; } } } void output(int**a, int rowCount, int columnCount) { for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) std::cout << a[i][j] << "\t"; std::cout << std::endl; } } void outputCondition1(int**&a, int rowCount, int columnCount) { int count = 0; for (int i = 0; i < rowCount; i++) { bool check = 1; for (int j = 0; j < columnCount; j++) if (a[i][j] == 0) check = 0; if (check == 1) count++; } cout << "> 0 cont: " << count; } void outputCondition2(int**&a, int rowCount, int columnCount) { int max = -9999999; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { if (a[i][j] > max) { for (int i2 = 0; i2 <= i; i2++) for (int j2 = 0; j2 < (i2==i?j:rowCount); j2++) if (a[i][j] == a[i2][j2]) max = a[i][j]; } } } if (max == -9999999) cout << "жодне з чисел не повторюється"; else cout << "max: " << max; } int main() { setlocale(LC_CTYPE, "ukr"); srand(time(NULL)); char check = 0; char check1 = 0; int **a = NULL; int rowCount, columnCount; cout << "Введіть кільість рядків: "; cin >> rowCount; cout << "Введіть кільість стовпців: "; cin >> columnCount; int choice = 0; std::cout << "введiть 1, якщо хочете викликати calloc, 2 якщо malloc, 3 якщо new \n"; std::cin >> check; if (check == '1') callocMemoryAllocation(a, rowCount, columnCount); else if (check == '2') mallocMemoryAllocation(a, rowCount, columnCount); else newMemoryAllocation(a, rowCount, columnCount); std::cout << "введiть 1, якщо хочете вводити власноруч, якщо нi то будь-який інший символ \n"; std::cin >> check1; if (check1 == '1') input(a, rowCount, columnCount); else random(a, rowCount, columnCount); output(a, rowCount, columnCount); cout << "\n\n"; outputCondition1(a, rowCount, columnCount); cout << "\n\n"; outputCondition2(a, rowCount, columnCount); _getch(); } Рис 5. Результат обчислення програми, написаної відповідно 3 завдання. Блок-схема до третього завдання: Рис 8. Алгоритм виконання третього завдання. Висновок: На даній лабораторній роботі я вивчила засоби мови C для оголошення та ініціалізації динамічних двовимірних масивів, звернення до їх елементів за допомогою індексів та вказівників, введення масивів з клавіатури, генерування випадкових значень елементів та виведення їх на екран. Також навчилася, як правильно сортувати елементи двовимірного масива, а також за допомогою яких обмежень можна обчислити тільки додатні елементи будь-якого масива. Дізналася в чому полягає відмінність одновимірного масива від двовимірного. Також навчилася правильно будувати блок-схеми для програм з використанням масивів. Також оволоділа новим навиком – випадковим генеруванням елементів масива.
Антиботан аватар за замовчуванням

16.02.2017 20:02-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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