Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / Лабораторная работа №1

.docx
Скачиваний:
1
Добавлен:
16.05.2023
Размер:
485.67 Кб
Скачать

ФГБОУ ВО

«Уфимский государственный авиационный технический университет»

Кафедра ТК

ОТЧЕТ

по лабораторной работе № 1

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

Вариант № 27

Выполнил: студент гр. ИВТ-127Б

Проверил: доцент каф. ТК

Федорова Н. И.

Уфа 2022

Тема работы: Динамические массивы (Путь в лабиринте).

Цель работы: Получение навыков реализации программы на языке С++ с использованием динамических массивов.

Задачи работы:

  1. Составить блок-схему алгоритма работы программы;

  2. Написание программы на языке С++ с использованием динамических массивов;

  3. Тестирование работоспособности программы для различных исходных данных;

Вариант № 27

Задание:

Выполнение задания:

Решение задачи:

На вход подается двумерный массив, необходимо собрать одномерный массив из элементов в особом порядке (с нижнего правого края в зигзагообразном порядке).

  1. Создаем оба массива, заполняем двумерный массив A функцией rand().

  2. В отдельном двумерном массиве прописываем ходы (влево, вверх по диагонали, вверх, вниз по диагонали).

  3. Собираем одномерный массив с помощью циклов до точки перехода. В точке перехода меняем ходы в двумерном массиве на (вверх, вверх по диагонали, влево, вниз по диагонали).

  4. Завершаем проход по новым ходам.

  5. Выводим одномерный массив.

  6. Удаляем оба массива.

Схема алгоритма работы программы:

Текст программы:

#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|

  1. При i=2, j=2, l=0;

b[1]=2; i=2, j=1, l=1

  1. При i=2, j=1, l=1;

b[2]=8, i=1, j=2, l=2

  1. При i=1, j=2, l=2;

b[3]=4, i=0, j=2, l=3

  1. При i=0, j=2, l=3;

b[4]=4, i=1, j=1, l=3

  1. При i=1, j=1, l=3;

b[5]=9, i=2, j=0, l=4

  1. При i=2, j=0, l=4;

b[6]=8; i=1, j=0, l=1

  1. При i=2, j=1, l=1;

b[7]=0, i=0, j=1, l=2

  1. При i=1, j=2, l=2;

b[8]=7, i=0, j=0, l=3

  1. При 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}

Вывод: В ходе выполнения лабораторной работы были получены навыки реализации программ на языке С++ с использованием динамических массивов.