2 семестр / Лабораторная работа №1
.docxФГБОУ ВО
«Уфимский государственный авиационный технический университет»
Кафедра ТК
ОТЧЕТ
по лабораторной работе № 1
по дисциплине «Программирование»
Вариант № 27
Выполнил: студент гр. ИВТ-127Б
Проверил: доцент каф. ТК
Федорова Н. И.
Уфа 2022
Тема работы: Динамические массивы (Путь в лабиринте).
Цель работы: Получение навыков реализации программы на языке С++ с использованием динамических массивов.
Задачи работы:
Составить блок-схему алгоритма работы программы;
Написание программы на языке С++ с использованием динамических массивов;
Тестирование работоспособности программы для различных исходных данных;
Вариант № 27
Задание:
Выполнение задания:
Решение задачи:
На вход подается двумерный массив, необходимо собрать одномерный массив из элементов в особом порядке (с нижнего правого края в зигзагообразном порядке).
Создаем оба массива, заполняем двумерный массив A функцией rand().
В отдельном двумерном массиве прописываем ходы (влево, вверх по диагонали, вверх, вниз по диагонали).
Собираем одномерный массив с помощью циклов до точки перехода. В точке перехода меняем ходы в двумерном массиве на (вверх, вверх по диагонали, влево, вниз по диагонали).
Завершаем проход по новым ходам.
Выводим одномерный массив.
Удаляем оба массива.
Схема алгоритма работы программы:
Текст программы:
#include <iostream>
using namespace std;
int** GiveMem(int** massiv, int size) {
massiv = new int* [size];
for (int i = 0; i < size; i++) {
massiv[i] = new int[size];
}
return massiv;
}
void fillMatrix(int** massiv, int size) {
cout << endl;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
massiv[i][j] = rand() % 10;
}
}
}
void prinfMatrix(int** massiv, int size) {
cout << endl;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
cout << massiv[i][j] << " ";
}
cout << endl;
}
}
int main()
{
setlocale(0,"");
int i, j, k, l, N, vector[4][2];
int** a = 0;
vector[0][0] = 0; vector[0][1] = -1; vector[1][0] = -1;
vector[1][1] = 1; vector[2][0] = -1; vector[2][1] = 0;
vector[3][0] = 1; vector[3][1] = -1;
cout << "Дана квадратная матрица размером N x N." << endl;
cout << "Из ее элементов сформировать одномерный массив, заполняя его в зигзагообразном порядке , начиная с правого нижнего угла матрицы.\n" << endl;
cout << "Введите количество столбцов и строк N. " << endl;
cout << "N="; cin >> N;
a = GiveMem(a, N);
fillMatrix(a, N);
cout << "Исходная матрица";
prinfMatrix(a, N);
int* b = new int[N * N];
i = N - 1; j = N-1; l = 0;
for (k = 0; k < N * N; k++)
{
if (l == 4) l = 0;
if (i == N-1 && j == 0) { vector[0][0] =-1; vector[0][1] = 0; vector[2][0] = 0; vector[2][1] = -1; }
b[k] = a[i][j]; i += vector[l][0]; j += vector[l][1];
if (i == 0 || j == 0 || i == N - 1 || j == N - 1) l++;
}
cout << "\nРезультат: \n Массив B\n";
for (i = 0; i <N*N; i++)
{ cout << "b[" << i + 1 << "] = " << b[i] << "\n";
}
cout << endl;
for (i = 0; i < N; i++) delete[] a[i];
delete[] a;
delete[] b;
system("pause");
return 0;
}
Тестовый пример:
Исходный массив a=|174|, при n=3
|094|
|882|
При i=2, j=2, l=0;
b[1]=2; i=2, j=1, l=1
При i=2, j=1, l=1;
b[2]=8, i=1, j=2, l=2
При i=1, j=2, l=2;
b[3]=4, i=0, j=2, l=3
При i=0, j=2, l=3;
b[4]=4, i=1, j=1, l=3
При i=1, j=1, l=3;
b[5]=9, i=2, j=0, l=4
При i=2, j=0, l=4;
b[6]=8; i=1, j=0, l=1
При i=2, j=1, l=1;
b[7]=0, i=0, j=1, l=2
При i=1, j=2, l=2;
b[8]=7, i=0, j=0, l=3
При i=0, j=2, l=3;
b[9]=1, i=1, j=-1, l=3
Вывод:
b ={2;8;4;4;9;8;0;7;1}
Вывод: В ходе выполнения лабораторной работы были получены навыки реализации программ на языке С++ с использованием динамических массивов.