ЛАБА7

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

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

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

Рік:
2017
Тип роботи:
Лабораторна робота
Предмет:
Інші
Група:
СА 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:28

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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