Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 1: Базові концепції програмування
ЗВІТ
до лабораторної роботи № 4
«Математичні функції та управляючі конструкції»
Варіант 4
Дата «12» листопада 2021
Завдання:1. Створити одновимірний та двовимірний масиви.2. Виконати початкову ініціалізацію всіх елементів масиву.3. Виконати маніпуляції з елементами масивів.У якості індивідуального завдання необхідно написати програму, в якій, на першому етапі, користувачем задається вимірність та розмірність масиву та спосіб ініціалізації (з клавіатури/консолі або випадковими числами) елементів масиву. На другому етапі необхідно скористатися варіантом індивідуального завдання з Додатку В-4.РЕЗУЛЬТАТ РОБОТИ ПОТРІБНО:1. Роздрукувати (вивести на екран) значення всіх елементів масиву.2. Відкритий для редагування програмний код розмістити на сайті https://replit.com/ (посилання через кнопку «+ Share»).3. Звіт до комп’ютерного практикуму № 4 додати в свій Клас на ресурсі https://classroom.google.com/.
Витяг з теорії:
Масив - це структура даних, подана у вигляді групи осередків одного типу, об'єднаних під одним єдиним ім'ям. Масиви використовують для обробки великої кількості однотипних даних. Ім'я масиву є покажчиком, що таке покажчики розповім трохи згодом. Окрема комірка даних масиву називається елементом масиву. Елементами масиву можуть бути дані будь-якого типу. Масиви можуть мати як один, так і більше одного виміру. Залежно кількості вимірювань масиви діляться на одномірні масиви, двовимірні масиви, тривимірні масиви тощо до n-мерного масиву. Найчастіше у програмуванні використовуються одновимірні та двовимірні масиви, тому ми розглянемо лише ці масиви.
Елемент масиву (значення елемента масиву) – значення, що зберігається у певній комірці пам'яті, розташованої в межах масиву, а також адресу цієї комірки пам'яті.
Кожен елемент масиву характеризується трьома величинами:адресою елемента - адресою початкової комірки пам'яті, в якій розташований цей елемент;індексом елемента (порядковим номером елемента у масиві);значенням елемента.Адреса масиву – адреса початкового елемента масиву. Ім'я масиву – ідентифікатор, який використовується для звернення до елементів масиву.Розмір масиву – кількість елементів масивуРозмір елемента – кількість байт, які займає один елемент масиву.
Одновимірні масиви в С
Одновимірний масив - масив, з одним параметром, що характеризує кількість елементів одновимірного масиву. Фактично одновимірний масив - це масив, у якого може бути лише один рядок, і n-е кількість стовпців. Стовпці в одновимірному масиві – це елементи масиву. На малюнку 1 показана структура цілісного одновимірного масиву a. Розмір цього масиву - 16 осередків
/
Двовимірні масиви в С
До цього ми розглядали одномірні масиви, якими який завжди можна обмежитися. Допустимо, необхідно обробити деякі дані з таблиці. У таблиці є дві характеристики: кількість рядків та кількість стовпців. Також і в двомірному масиві, крім кількості елементів масиву, є такі характеристики як кількість рядків і кількість стовпців двовимірного масиву. Тобто, візуально, двовимірний масив — це звичайна таблиця з рядками та стовпцями. Фактично двовимірний масив – це одномірний масив одновимірних масивів. Структура двовимірного масиву, з іменем a, розміром m на n показана нижче
/
Завдання за варіантом:
№ варіанта
Одновимірний масив
Двовимірний масив
4
Видалити непарний елемент з
номером N (N ввести з клавіатури)
Видалити всі рядки, в яких є хоча б один
нульовий елемент
Блок-схема алгоритму програми:
/
Результати компіляції:
Одновимірний масив:
//
Непарний елемент під номером три був успішно видалений
Двовимірний масив:
/
Всі рядки з нульовими елементами були успішно видалені
Посилання на код в середовищі Replit:https://replit.com/join/osvaziixaw-ironfire2535
Висновок
Під час виконання лабораторної роботи №4 було набуто практичних навичок у роботі з одновимірними та двовимірними масивами, а саме: їх створенні, ініціалізації та оперуванням над ними. Була створена програма у середовищі Replit, що виконує задані в додатку В-4 маніпуляції. Була зроблена перевірка перевірка за допомогою компіляції. Ні кінець був зроблен звіт з лабораторної роботи, що містить всі необхідні компоненти.
Код програми:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <time.h>
#include <memory.h>
void fillArray(int *array, int size) {
for (int i = 0; i < size; ++i) {
array[i] = rand() % 10;
}
}
void fillArrayKeybord(int *array,int size){
for (int i = 0; i < size; ++i) {
printf("\nInput array[%d]:",i);
scanf("%d",&array[i]);
}
}
void fillMtrx(int **mtrx,int rows,int cols){
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
mtrx[i][j] = rand() % 10-5;
}
}
}
void fillMtrxKeyboard(int **mtrx,int rows,int cols){
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("\nInput mtrx[%d][%d]:",i,j);
scanf("%d",&mtrx[i][j]);
}
}
}
void printArray(int *array, int size) {
printf("\nArray:");
for (int i = 0; i < size; ++i) {
printf("%d ", array[i]);
}
}
void printMatrix(int **mtrx, int rows, int cols) {
printf("\nMatrix:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%6d ", mtrx[i][j]);
}
printf("\n");
}
}
int CalcZeroRows(int **mtrx,int rows,int cols){
int calc = 0;
for(int i =0;i<rows;i++){
for(int j=0;j<cols;j++){
if(mtrx[i][j] == 0 ){
mtrx[i][0]=0;
calc++;
break;
}
}
}
return calc;
}
int main() {
int key = 0;
while (key <= 0 || key >= 3) {
printf("For create array type '1'"
"\nFor create Matrix type '2"
"\nEnter key:");
scanf("%d", &key);
if (key <= 0 || key >= 3) {
printf("Wrong Input!\n");
}
}
srand(time(NULL));
if (key == 1) {
int size = 0;
do {
printf("Input array size:");
scanf("%d", &size);
} while (size <= 0);
int *arr = (int *) malloc(size * sizeof(int));
printf("Array was created");
int choose = 0;
do {
printf("\nSelect how to fill array\nFron keybord type '1'\nRandom value type' 2':");
scanf("%d", &choose);
} while (choose <= 0 || choose >=3);
if(choose == 1){
fillArrayKeybord(arr,size);
}else if(choose ==2){
fillArray(arr, size);
}
printArray(arr, size);
int index = 0;
int countOfElem=0;
for(int i = 0; i <size;i++){
if(arr[i]%2 != 0){
countOfElem++;
}
}
if(countOfElem !=0){
do{
printf("\nInput index wich will be deleted:");
scanf("%d",&index);
}while(index<=0 || index >= size || index >countOfElem);
int counter = 0;
for(int i = 0; i <size;i++){
if(arr[i]%2 != 0){
counter++;
}
if(counter == index){
index = i;
break;
}
}
size--;
counter = 0;
int *temp = (int *) malloc(size * sizeof(int));
for (int i = 0; i < size+1; ++i) {
if(i!=index){
temp[i-counter] = arr[i];
}else{
counter++;
}
}
arr = (int *) realloc(arr, sizeof(int) * (size));
for (int i = 0; i < size; i++) {
arr[i] = temp[i];
}
printf("\nThe element was deleted.");
printArray(arr, size);
free(arr);
}else{
printf("\nThere are no odd elements");
}
} else if (key == 2) {
int rows = 0;
int cols = 0;
do {
printf("Input size of matrix\nInput cols:");
scanf("%d", &cols);
printf("Input rows:");
scanf("%d", &rows);
} while (rows <= 0 || cols <= 0);
int choose = 0;
do {
printf("\nSelect how to fill array\nFron keybord type '1'\nRandom value type' 2':");
scanf("%d", &choose);
} while (choose <= 0 || choose >=3);
int **mtrx = (int **) malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
mtrx[i] = (int *) malloc(cols * sizeof(int));
/*for (int j = 0; j < cols; j++) {
mtrx[i][j] = rand() % 10-5;
}*/
}
if(choose == 1){
fillMtrxKeyboard(mtrx,rows,cols);
}else if(choose ==2){
fillMtrx(mtrx,rows,cols);
}
printMatrix(mtrx, rows, cols);
int zeroRows = CalcZeroRows(mtrx,rows,cols);
int newRows = rows - zeroRows;
int c=0;
int **tmpMtrx = (int **) malloc(newRows * sizeof(int *));
for (int i = 0; i < newRows; i++) {
tmpMtrx[i] = (int *) malloc(cols * sizeof(int));
}
for (int i = 0; i < rows; i++) {
if(mtrx[i][0] != 0){
tmpMtrx[i] = (int *) malloc(cols * sizeof(int));
for (int j = 0; j < cols; j++) {
tmpMtrx[i-c][j] = mtrx[i][j];
}
}else{
c++;
}
}
rows= newRows;
mtrx = (int **) realloc(mtrx, rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
mtrx[i] = (int *) malloc(cols * sizeof(int));
for (int j = 0; j < cols; j++) {
mtrx[i][j] = tmpMtrx[i][j];
}
}
for(int i=0; i<rows;i++){
free(tmpMtrx[i]);
}
free(tmpMtrx);
printf("After delete ");
printMatrix(mtrx, rows, cols);
for(int i=0; i<rows;i++){
free(mtrx[i]);
}
free(mtrx);
}
return 0;
}