Лабораторная работа по PC
По теме:
«Динамическое выделение памяти для двумерных массивов.
Использование функций и указателей на языке Си»
Вариант: 11.
2020 год
Лабораторная работа 4
Тема: Динамическое выделение памяти для двумерных массивов. Использование функций и
указателей на языке Си
Задание:
Для заданного двумерного массива из n строк и m столбцов вывести на экран следующее меню
операций:
КОД:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <locale.h>
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
{
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;
}
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;
}
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;
}