You are on page 1of 7

Міністерство освіти і науки України

Національний технічний
університет
«Дніпровська політехніка»
Факультет інформаційних
технологій Кафедра інформаційних
технологій та комп’ютерної
інженерії

Звіт з лабораторної роботи №5


дисципліни «Програмування»

Тема роботи: «Робота з динамічними векторами


та матрицями.
Розробка багатомодульної програми»

Виконав студент
групи 123-23-2
Т.C.Ларко

Перевірив
Доцент каф ITKI
Т.М.Булана

Дніпро 2023
Лабораторна
робота №5
Робота з динамічними векторами та матрицями.
Розробка багатомодульної програми
Мета роботи: закріпити знання по роботі з динамічними масивами даних,
основним алгоритмом обробки векторів та матриць, а також навички
створення багатомодульних програм з елементами мови С++.
Хід роботи
1. Файл mylib.h з оголошеннями функцій
// mylib.h

#ifndef MYLIB_H

#define MYLIB_H

// Функція для знаходження мінімального значення в векторi/матрицi

double min(const double *data, int count);

double min(double **data, int rows, int cols);

// Функція для знаходження максимального значення в векторi/матрицi

double max(const double *data, int count);

double max(double **data, int rows, int cols);

// Функція для обчислення середнього значення елементів

вектора/матрицi double avg(const double *data, int count);

double avg(double **data, int rows, int cols);

// Функція для отримання статистики (мінімум, максимум, середнє)


в векторi/матрицi

void getStat(const double *data, int count, double *pmin, double *pmax, double
*pavg);

void getStat(const double **data, int rows, int cols, double *pmin, double *pmax,
double *pavg);

// Функція для введення даних з консолі в вектор/матрицю

double *inputFromConsole(double *data, int count);

double **inputFromConsole(double **data, int rows, int cols);

// Функція для виведення даних вектора/матрицi


void print(const double *data, int count);
void print(const double **data, int rows, int cols); #endif
2. Файл mylib.cpp з визначеннями функцiй

// mylib.cpp
#include "mylib.h"
#include <stdio.h>

double min(const double *data, int count) {


double min_value = data[0];
for (int i = 1; i < count; i++) {
if (data[i] < min_value) {
min_value = data[i];
}
}
return min_value;
}

double min(const double **data, int rows, int cols)


{ double min_value = data[0][0];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++)
{
if (data[i][j] < min_value) {
min_value = data[i][j];
}
}
}
return min_value;
}

double max(const double *data, int count) {


double max_value = data[0];
for (int i = 1; i < count; i++) {
if (data[i] > max_value) {
max_value = data[i];
}
}
return max_value;
}

double max(const double **data, int rows, int cols)


{ double max_value = data[0][0];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++)
{
if (data[i][j] > max_value) {
max_value = data[i][j];
}
}
}
return max_value;
}

double avg(const double *data, int count) {


double sum = 0;
for (int i = 0; i < count; i++) {
sum += data[i];
}
return sum / count;
}

double avg(const double **data, int rows, int cols)


{ double sum = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++)
{
sum += data[i][j];
}
}
return sum / (rows * cols);
}

void getStat(const double *data, int count, double *pmin, double *pmax,
double *pavg) {
*pmin = min(data, count);
*pmax = max(data, count);
*pavg = avg(data, count);
}

void getStat(const double **data, int rows, int cols, double *pmin,
double *pmax, double *pavg) {
*pmin = min(data, rows, cols);
*pmax = max(data, rows, cols);
*pavg = avg(data, rows, cols);
}

double *inputFromConsole(double *data, int count) {


for (int i = 0; i < count; i++) {
printf("Enter vector data[%d]: ", i);
scanf("%lf", &data[i]);
}
return data;
}
double **inputFromConsole(double **data, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("Enter matrix data[%d][%d]: ", i,
j);
scanf("%lf", &data[i][j]);
}
}
return data;
}

void print(const double *data, int count) {


printf("\n| ");
for (int i = 0; i < count; i++) {
printf("%lf ", data[i]);
}
printf("|\n\n");
}

void print(const double **data, int rows, int cols)


{ printf("\n");
for (int i = 0; i < rows; i++)
{ printf("| ");
for (int j = 0; j < cols; j++) {
printf("%lf ", data[i][j]);
}
printf("|\n");
}
printf("\n");
}

3. Файл testmylib.cpp для виклику та тестування функцiй

#include "mylib.h"
#include <stdio.h>

int main() {
int rows, cols;
printf("Enter the number of rows: "); // Запитуємо кількість рядків
scanf("%d", &rows);
printf("Enter the number of columns: "); // Запитуємо кількість стовпців
scanf("%d", &cols);
// Виділення пам'яті для вектора та матриці
double *v = new double[rows];
double **m = new double *[rows];
for (int i = 0; i < rows; i++)
{ m[i] = new double[cols];
}
// Введення та виведення вектора
inputFromConsole(v, rows);
print(v, rows);
// Введення та виведення матриці
inputFromConsole(m, rows, cols);
print((const double **)m, rows, cols);
// Тестування функцій статистики
double min, max, avg;
getStat(v, rows, &min, &max, &avg);
printf("Vector - Min: %lf, Max: %lf, Avg: %lf\n", min, max, avg);
getStat((const double **)m, rows, cols, &min, &max, &avg);
printf("Matrix - Min: %lf, Max: %lf, Avg: %lf\n", min, max, avg);
// Звільнення виділеної пам'яті
delete[] v;
for (int i = 0; i < rows; i++)
{ delete[] m[i];
}
delete[] m;
return 0;
}

4. Компiлюю файли разом testmylib.cpp i mylib.cpp через команду:

g++ testmylib.cpp mylib.cpp

Висновок:

Запровадив динамічне виділення пам'яті та можливість вводу даних через консоль для векторів та
матриць, що робить програму гнучкою для різних сценаріїв використання. Інтегровані функції для
статистичного аналізу дозволяють користувачам швидко отримувати ключові дані, такі як мінімум,
максимум та середнє. Правильне управління пам'яттю гарантує ефективність та безпеку
програми..

You might also like