Вы находитесь на странице: 1из 7

Технический университет Молдовы.

Лабораторная работа по PC

По теме:
«Динамическое выделение памяти для двумерных массивов.
Использование функций и указателей на языке Си»

Вариант: 11.

Выполнила: ст. гр. CR-214. Алексей Душков .


Проверил: Brinzan Leon.

2020 год

Лабораторная работа 4
Тема: Динамическое выделение памяти для двумерных массивов. Использование функций и
указателей на языке Си

Цель работы: Программирование алгоритмов для обработки двумерных массивов с


использованием функций, указателей и динамического выделения памяти для массива.

Задание:

Для заданного двумерного массива из n строк и m столбцов вывести на экран следующее меню
операций:

1. Динамическое выделение памяти для двумерного массива


2. Ввод элементов массива с клавиатуры
3. Заполнение массива случайными числами
4. Сортировка элементов массива (по вариантам)
5. Вывод элементов массива на экран
6. Освобождение памяти, выделенной для массива
7. Окончание работы программы

Разработать функции для реализации операций меню.

11. Отсортировать первую и последнюю строки массива по убыванию с помощью


метода линейного выбора.

КОД:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <locale.h>

//объявляем функцию "MassSozd"

int MassSozd(int **&array, int &M, int &N, bool &memory, bool &massiv)
{
printf("Введите размер матрицы\n");
printf("Кол-во строк:"); scanf("%d", &M);
printf("Кол-во столбцов:"); scanf("%d", &N);
if (M<1)
{
printf("\nОшибка. Количество строк должно быть больше 0\n");
}
else if (N<1 )
{
printf("\nОшибка. Количество столбцов должно быть больше 0\n");
}
else
{

//выделяем память под массив размерностью M*N

array=new int*[M];
for (int i = 0; i < M; i++)
{
array[i]=new int[N];
}
printf("\nМатрица %d на %d создана\n", M, N);
massiv=true;
memory=false;
}
return 0;
}

//объявляем функцию "random", которая заполняет массив рандомно

void random(int **&array, int &M, int &N, bool &zapol)


{
srand(time(NULL));
zapol=true;
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
array[i][j]=rand()%200-100;
}
}
printf("\nМассив успешно заполнен рандомными числами\n");
}

//обьявляем функцию "klaviatura" , которая позволяет заполнить массив с клавиатуры

void klaviatura(int **&array, int &M, int &N, bool &zapol)


{

for (int i = 0; i < M; i++)


{
for (int j = 0; j < N; j++)
{
printf("a[%d][%d]=", i, j);
scanf("%d", &array[i][j]);
}
printf(" ");
}
zapol=true;
}
//объявляем функцию "vivod", которая выводит массив на экран

void vivod(int **&array, int &M, int &N)


{
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
printf("%d\t", array[i][j]);
}
printf("\n");
}

//объявляем функцию, которая освобождает выделенную память

void del(int **&array, int &M, int &N, bool &memory, bool &massiv, bool &zapol)
{
for (int i = 0; i < M; i++)
delete [] array[i];
memory=true;
massiv=false;
zapol=false;
}

//объявляем функцию "sortMass" , которая сортирует массив

void sortMass(int**& array, int &M, int &N)


{
int k=1;
while(k!=0)
{
k=0;
int iValue;
for(int j=0; j<N-1;++j)
{
if(array[0][j]<array[0][j+1])
{
iValue=array[0][j];
array[0][j]=array[0][j+1];
array[0][j+1]=iValue;
k=1;
}
if(array[M-1][j]<array[M-1][j+1])
{
iValue=array[M-1][j];
array[M-1][j]=array[M-1][j+1];
array[M-1][j+1]=iValue;
k=1;
}
}
}
}

int main()
{
//объявляем переменные
setlocale(LC_ALL, "Rus");
int **array;
bool memory=false, massiv=false, zapol=false;
int M, N;
int choice;
while (choice!=7)
{
printf("///МЕНЮ///\n");
printf("1.Динамическое выделение памяти для двумерного массива "); printf("2.Ввод элементов
массива с клавиатуры ");
printf("3.Заполнение массива случайными числами "); printf("4.Отсортировать первую и
последнюю строки массива по убыванию с помощью линейного метода. ");
printf("5.Вывод элементов массива на экран "); printf("6.Освобождение памяти, выделенной для
массива ");
printf("7.Окончание работы программы \n");
printf("Выш выбор:"); scanf("%d", &choice);
switch (choice)
{
case 1:
if (massiv==true)
{
printf("\nОшибка. Память уже выделена\n");
break;
}
MassSozd(array, M, N, memory, massiv);
break;
case 2:
if (massiv==false)
{
printf("\nОшибка. Выделите память для массива\n");
break;
}
if (zapol==true)
{
printf("\nОшибка. Массив уже заполнен\n");
break;
}
klaviatura(array, M, N, zapol);;
break;
case 3:
if (massiv==false)
{
printf("\nОшибка. Выделите память для массива\n");
break;
}
if (zapol==true)
{
printf("\nОшибка. Массив уже заполнен\n");
break;
}
random(array, M, N, zapol);
break;
case 4:
if (massiv==false)
{
printf("\nОшибка. Выделите память для массива и заполните его\n");
break;
}
sortMass(array, M, N);
printf("\nМассив отсортирован успешно\n");
break;
case 5:
printf("\nВаш массив:\n");
vivod(array, M, N);
break;
case 6:
if (memory==true)
{
printf("\nПамять свободна или уже была освобождена\n");
break;
}
del(array, M, N, memory, massiv, zapol);
printf("\nПамять очищена\n");
break;
case 7:
if (massiv==false)
{
printf("\nРабота программы остановлена\n");
delete [] array;
break;
}
printf("\nРабота программы остановлена\n");
break;
default:
printf("\nТакого пункта в меню нет\n");
break;
}
}
return 0;
}

Вывод: В данной лабораторной работе, я научился писать


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

Вам также может понравиться