Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 1: Базові концепції програмування
ЗВІТ
до лабораторної роботи № 4
«Математичні функції та управляючі конструкції»
Варіант 15
Дата «12» листопада 2021
Завдання:
1. Створити одновимірний та двовимірний масиви.2. Виконати початкову ініціалізацію всіх елементів масиву.3. Виконати маніпуляції з елементами масивів.У якості індивідуального завдання необхідно написати програму, в якій, на першому етапі, користувачем задається вимірність та розмірність масиву та спосіб ініціалізації (з клавіатури/консолі або випадковими числами) елементів масиву. На другому етапі необхідно скористатися варіантом індивідуального завдання з Додатку В-4.
РЕЗУЛЬТАТ РОБОТИ ПОТРІБНО:
1. Роздрукувати (вивести на екран) значення всіх елементів масиву.2. Відкритий для редагування програмний код розмістити на сайті https://replit.com/ (посилання через кнопку «+ Share»).3. Звіт до комп’ютерного практикуму № 4 додати в свій Клас на ресурсі https://classroom.google.com/.
Умова Варіанту 15:
/
Для одновимірного масиву – видалити всі додатні елементи.
Для двовимірного масиву – видалити всі парні стовпці.
Теоретичні відомості та хід вирішення завдань:
Для виконання даної лабораторної роботи №3 був використаний сайт replit.com . На цьому сайтів був написаний код програми на мові С. Саму програму можна переглянути за посиланням:
https://replit.com/join/vuwjrvpkar-tr-15fundamient
Масив це структура даних, представлена у вигляді групи осередків одного типу, об'єднаних під одним єдиним ім'ям. Масиви використовуються для обробки великої кількості однотипних даних.
Одновимірний масив – масив, з одним параметром, характеризує кількість елементів одновимірного масиву. Фактично одновимірний масив – це масив, у якого може бути тільки один рядок, і n-е кількість стовпців. Стовпці в одновимірному масиві – це елементи масиву.
Двовимірний масив – це звичайна матриця. Факчтино, це одновимірний масив одновимірних масивів.
На початку своєї програми я ініціалізував два масиви:
mas[SIZE1] – одновимірний масив,
mat[SIZE2][SIZE2] – двовимірний масив.
Далі за обраним варіантом були введені значення елементів цих масивів (за допомогою клавіатури, за допомогою консолі або заповнені випадковими числами).
Наступний крок – Завдання 1.
Ініціалізую лічильник k і присвоюю йому значення 0, він буде слугувати для підрахунку кількості від’ємних елементів масиву, щоб під задану кількість створити новий масив. Після підрахунку (за допомогою циклу for і умовного оператора if ) створюється новий масив masNeg[k]. Він створюється під певну кількість елементів(к-сть від’ємних елементів). І далі перебором основного масиву шукаються усі від’ємні елементи і переношу їх у новий масив masNeg[]. У кінці програми виводиться масив masNeg[] у якому тільки від’ємні значення.
Завдання 2.
Ініціалізую лічильник kk і присвоюю йому значення 0, він буде слугувати для підрахунку кількості парних стовпців(тому що номерація починається з нуля). За допомогою циклу for і оператора if я перебираю даний двовимірний масив визначаю на скільки стовпчиків має бути новий масив, вже без парних стовпчиків. Далі створюю цей новий масив і цим же самим циклом присвоюю значення взяті зі старого масиву у новий.
Блок-схема програми:
/
Скріншоти програми:
/
/
/
/
/
//
Результат роботи програми:
/
Висновок:
Під час виконання даної програми було удосконалено навички щодо роботи в одновимірними та двовимірними масивами. Набуто досвід з рішення типових задач із задіянням масивів. Також набуто досвід з використання вказівників.
Завдання заплановані у даній лабораторній роботі виконані і працюють без нарікань. Усі результати були виведені на екран
Силка на Repl:
https://replit.com/join/vuwjrvpkar-tr-15fundamient
Код програми:
#include <stdio.h>
#include <stdlib.h>
#define SIZE1 10
#define SIZE2 5
int main(int argc, char *argv[]) {
printf("Будь-ласка оберіть метод заповнення одновимірного масиву:\n<1> - за допомогою клавіатури,\n<2> - за допомогою консолі,\n<3> - випадковими числами.\n");
int number;
scanf("%d", &number);
int mas[SIZE1];
int *pmas = &mas[0];// створюю визначник, якому надаю адресу першого елементу масиву
int mat[SIZE2][SIZE2];
//Присвоєння значень одновимірному масиву
if (number == 1) {
//Введення елементів за допомогою клавіатури
printf("\nЗаповнення одновимірного масиву:\n");
for(int i = 0; i < SIZE1; i++) {
printf("Уведіть значення [%d] елементу одновимірного масиву: \n", i+1);
scanf("%d", &mas[i]);
}
printf("\nЗаповнення двовимірного масиву:\n");
for(int i = 0; i < SIZE2; i++) {
for (int j = 0; j < SIZE2; j++) {
printf("Уведіть значення [%d][%d] елементу двовимірного масиву: \n", i+1, j+1);
scanf("%d", &mat[i][j]);
}
}
// Вивід одновимірного масиву (за допомогою вказівника)
printf("\nОдновимірний масив: \n\n[ ");
for(int i = 0; i < SIZE1; i++) {
printf("%d ", *pmas);
}
printf("]\n\n");
// Вивід двовимірного масиву
printf("\nДвовимірний масив:\n\n");
for(int i = 0; i < SIZE2; i++) {
printf("| ");
for (int j = 0; j < SIZE2; j++) {
printf("%d ", mat[i][j]);
}
printf("|\n");
}
} else if (number == 3) {
//Введення елементів випадковими числами
// Заповнення одновимірного масиву випадковими числами
for(int i = 0; i < SIZE1; i++) {
mas[i] = rand() % 2001 - 1000;
}
//Заповнення двовимірного масиву випадковими числами
for(int i = 0; i < SIZE2; i++) {
for (int j = 0; j < SIZE2; j++) {
mat[i][j] = rand() % 2001 - 1000;
}
}
// Вивід одновимірного масиву (за допомогою вказівника)
printf("\nОдновимірний масив: \n\n[ ");
for(int i = 0; i < SIZE1; i++, pmas++) {
printf("%d ", *pmas);
}
printf("]\n");
// Вивід двовимірного масиву
printf("\nДвовимірний масив: \n\n");
for(int i = 0; i < SIZE2; i++) {
printf("| ");
for (int j = 0; j < SIZE2; j++) {
printf("%d ", mat[i][j]);
}
printf(" |\n");
}
} else if(number == 2 && argc == 36) {
//Введення елементів за допомогою консолі (через ./main)
for (int i = 0; i < SIZE1; i++){
mas[i] = atoi(argv[i+1]);
}
for (int i = 0; i < SIZE2; i++){
for (int j = 0; j < SIZE2; j++) {
mat[i][j] = atoi(argv[SIZE1+1+i]);
}
}
printf("\nОдновимірний масив: \n\n[ ");
for(int i = 0; i < SIZE1; i++, pmas++) {
printf("%d ", *pmas);
}
printf("]\n");
printf("\nДвовимірний масив:\n\n");
for(int i = 0; i < SIZE2; i++) {
printf("| ");
for (int j = 0; j < SIZE2; j++) {
printf("%d ", mat[i][j]);
}
printf("|\n");
}
} else {
printf("---- EROR ----\n");
return 0;
}
// Завдання 1 (Видалити всі додатні елементи масиву)
int k = 0;
//підраховую к-сть від'ємних елементів у масиві
for (int i = 0; i < SIZE1; i++) {
if (mas[i] < 0) {
k++;
}
}
int masNeg[k];
int *pMasNeg = &masNeg[0];//Створюю визначник і надаю йому адресу одновимірного масиву від'ємних чисел
int count = 0;//створюю лічильник та новий масив, куди перенесу всі від'ємні елементи попереднього масиву
// Усі від'ємні елементи початкового масиву присвоюю новому
for (int i = 0; i < SIZE1; i++) {
if(mas[i] < 0) {
masNeg[count] = mas[i];
count++;
}
}
//Вивожу новий масив без додатніх елементів
printf("\nОдновимірний масив у результаті виконання завдання: \n\n [ ");
for(int i = 0; i < k; i++,pMasNeg++) {
printf("%d ", *pMasNeg);
}
printf("]\n");
// Завдання 2 (видалити всі парні стовпці двовимірного масиву)
int kk = 0;
// Підраховую скільки парних стовпців у матриці (Рахую через парність, тому що номерація починається з нуля)
for (int i = 0; i < SIZE2; i++) {
for (int j = 0; j < SIZE2; j++) {
if (j % 2 == 0) {
kk++;
}
}
}
int count2 = 0;
int q = kk/SIZE2;
int newMat[SIZE2][q]; // Створюю лічильник та новий двовимірний масив, у який буду переносити всі непарні стовпці
// Усі непарні стовпці присвоюю новому масиву
for (int i = 0; i < SIZE2; i++) {
for (int j = 0; j < SIZE2; j++) {
if (j % 2 == 0) {
newMat[i][count2] = mat[i][j];
count2++;
}
}
count2 = 0;
}
// Виводжу новий двовимірний масив, який складається тільки з непарних стовпчиків початкового
printf("\nДвовимірний масив у результаті виконання завдання: \n\n");
for (int i = 0; i < SIZE2; i++) {
printf("| ");
for (int j = 0; j < q; j++) {
printf("%d ", newMat[i][j]);
}
printf("|\n");
}
}