Алгоритмізація та програмування 2: Процедурне програмування
ЗВІТ
до лабораторної роботи № 2
«Динамічне виділення пам’яті для одно- та двовимірних масивів»
Варіант 16
Дата «26» квітня 2022
ЗАВДАННЯ:
1. Ознайомитись з особливостями роботи з динамічними одно- та двовимірними масивами.2. Розробити Блок-схему програмного алгоритму.3. Виконати індивідуальне завдання.4. Оформити ЗВІТ до лабораторної роботи згідно вимог та методичних рекомендацій.5. Вихідні дані (завдання) обрати згідно свого варіанта у Додатку B-2.
Варіант завданнь:
За варінатом 16 – з таблиці з рисунка 1 варіант 16.
/
Рисунок 1.
Теоритичні відомості:
div_t div(int numerator, int denominator)
Прототип:
stdlib.h
Опис:
Функція div() повертає частку від ділення і остачу операції numerator/denominator.
Структура типа div_t визначена у файлі stdlib.h й має два насупних поля:
int quot; /* частка */int rem; /* остача */
Приклад:
Наступна программа виводить частку від ділення й остачу при виконанні операції 10/3:#include <stdio.h>#include <stdlib.h>int main(void){div_t n;n = div(10,3);printf("Quotient and remainder: %d %d\n", n.quot, n.rem);return 0;}
Блок-схеми
/
Вивід програми: /
Код програми:
Посилання на Repl.it:
https://replit.com/join/buzqqttxlx-tr-15khavkin
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
int main(int args, char *argv[]) {
int x,n,m,l,j;
int *array1,*array12;
int **array2,**array22;
srand(time(NULL));
//Ініціалізація одновимірного массиву
printf("\nІніціалізації елементів одновимірного масива випадковими числами\nВведіть кількість елемнетів: ");
scanf("%d", &x);
array1=(int*)malloc(x * sizeof(int));
for (int i=0; i < x; i++){
array1[i]= rand() % 40 - 20;
printf("\narray1[%d]: %d", i, array1[i]);
}
array12=(int*)malloc(x * sizeof(int));
//Перше завдання
printf("\nЗавданя 1 для одновимернго массиву\n");
j=0;
for (int i=0; i < x; i++){
printf("%d ", array1[i]);
if(array1[i]>=0){
array12[j]=array1[i];
j++;
}
}
printf("\n\nОтриманний массив array1:\n");
for (int i=0; i < j; i++) printf("%d ", array12[i]);
//Ініціалізація двовимірного массиву
printf("\n\nІніціалізації елементів для двовимірного масиву випадковими числами\nВведіть розмірність L*M\nВведіть L:");
scanf("%d", &l);
printf("\nВведіть M:");
scanf("%d", &m);
array2=(int**)malloc(l * sizeof(int*));
for (int i=0; i < l; i++)array2[i]=(int*)malloc(m*sizeof(int));
for (int i = 0; i < l; i++ ) {
for (int j = 0; j < m; j++ ){
array2[i][j]= rand() % 40 - 20;
printf("array2[%d,%d]: %d ", i, j, array2[i][j]);
}
printf("\n");
}
//Друге завдання
int N,K,str,quot,rem;
printf("\n\nЗавданя 2 для двовимернго массиву");
printf("\nВведіть значення N: ");
scanf("%d", &N);
printf("\nВведіть значення K: ");
scanf("%d", &K);
printf("\nВведений массив array2:\n\n");
for (int i = 0; i < l; i++ ) {
for (int j = 0; j < m; j++ ){
printf("%d ",array2[i][j]);
}
printf("\n");
}
printf("\nОтриманний массив array2:\n");
div_t str2;
str2 = div(N,m);
if(rem==0)str=str2.quot-1;
else str = str2.quot;
array22=(int**)malloc(l * sizeof(int*));
for (int i = 0; i < l; i++) {
if(i==str){
array22[i] = (int*)malloc(m+K * sizeof(int));
for(int j=0; j<str2.rem;j++){
array22[i][j]=array2[i][j];
printf("%d ", array22[i][j]);
}
for(int g=0; g<K;g++){
array22[i][(str2.rem)+g]=rand() % 40 - 20;
printf("\033[1;32m%d ", array22[i][str2.rem+g]);
}
for(int j=str2.rem; j<m;j++){
array22[i][j+K]=array2[i][j];
printf("\033[0m%d ", array22[i][j+K]);
}
}else{
array22[i] = (int*)malloc(m * sizeof(int));
for(int j=0; j<m;j++){
array22[i][j]=array2[i][j];
printf("%d ", array22[i][j]);
}
}
printf("\n");
}
return 0;
}
Висновок:
У цій лабораторної роботі було ознайомлено з роботою динамічних масивів(одно-двовимірних) та з їх особливостями. Заповнення масивів було виконано випадковими числами. Зроблені маніпуляції з масивами згідно до варіанту 16 з Додатку. Виведені результуючі масиви. Створенні блок-схеми до коду. Зроблено звіт з лабораторної роботи та вчасно надіслано викладачу на перевірку.