Исходный код программы с комментариями 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Исходный код программы с комментариями



#include <iostream>

#include <conio.h>

 

struct L1 // Структура очереди

{

    int elem;   // Данные типа int

    L1* next;  // Указатель на следующий элемент

};

 

struct L2 // Структура динамической матрицы

{

    L1* Queue; // Данные типа L1 (Очередь)

    L2* prev; // Указатель на предыдущий элемент

    L2* next; // Указатель на следующий элемент

};

 

 

L1* MenuQueue(int matr, L1* Queue);

 

void vivodQueue(L1* begin) //функция для вывода очереди

{

    L1 *str;

    str = begin;

    printf("\nОчередь: ");

    while (str->next!=NULL) // пока str->next!=NULL выводим элемент очереди

    {

              printf("%d ", str->elem);

              str = str->next;

    }

    printf("%d ", str->elem);

}

 

void vivodmasselem(L1* begin)//функция для вывода элемента матрицы

{

 

    if (begin == NULL)

    {

              printf("Очередь пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              L1* uk;

              uk = begin;

              while (uk->next!= NULL) // вывод очереди

              {

                       printf("%d ", uk->elem);

                       uk = uk->next;

              }

              printf("%d ", uk->elem);

    }

}

 

void Vivodmass(L2**mass,L2*begin,bool flagstartMatr, int m, int n)//Функция для вывода матрицы

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if(begin==NULL)

    {

              printf("Матрица пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              printf("Матрица: \n\n");

              for (int i = 0; i < n; i++)//пока j < кол-ва строк

              {

                       for (int j = 0; j < m; j++)//пока j < кол-ва столбцов

                       {

                                 printf("\t\tmass[%d][%d] = ", i, j);

                                 vivodmasselem((mass[i] + j)->Queue); //функция для вывода элемента матрицы

                       }

                       printf("\n");

              }

                  

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

void Queuefunc1(L1** begin, L1** end,L1 **uk, bool *flagstartQueue,int matr)//Функция начинает работу с очередью

{

    if (*flagstartQueue == 1)

    {

              printf("Вы уже начали работу с очередью!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (matr == 1)

    {

              printf("Вы начали работу с очередью!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

 

              *uk = *begin; // если мы зашли в изменение элемента то указатель end становится на свое место

              while ((*uk)->next!= NULL)

              {

                       (*uk) = (*uk)->next;

              }

              *end = *uk;

              *flagstartQueue = 1;

    }

    else {

              printf("Вы начали работу с очередью!");// флаги становятся NULL

              *begin = *end;

              *begin = NULL;

              *end = NULL;

              *uk = NULL;

              *flagstartQueue = 1;

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

void Queuefunc2(L1** begin, L1** end, L1** uk, bool flagstartQueue,int *maxelem)//Функция делает очередь пустой

{

    if (flagstartQueue == 0)

    {

              printf("Вы не начали работу с очередью!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              L1 *str;

              *uk = *begin;

              while (*uk!= *end)//от begin до end идет освобождение памяти

              {

                       str = *uk;

                       str = str->next;

                       free(*uk);

                       *uk = str;

              }

              free(*uk);// в конце указатели становятся NULL

              *uk = NULL;

              *begin = NULL;

              *end = NULL;

              *maxelem = 0;

              printf("Очередь успешно очищена!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

void Queuefunc3(L1** begin, L1** end, bool flagstartQueue)//Функция проверяет пуста ли очередь

{

    if (flagstartQueue == 0)

    {

              printf("Вы не начали работу с очередью!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (*begin==NULL&&*end==NULL)

    {

              printf("Очередь пуста!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              printf("Очередь не пуста!");

              vivodQueue(*begin);

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

void Queuefunc4(L1* begin,L1*end, bool flagstartQueue)//Функция показывает значение элемента в начале очереди

{

    if (flagstartQueue == 0)

    {

              printf("Вы не начали работу с очередью!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL)

    {

              printf("Очередь пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              printf("Элемент в начале очереди: ");

              printf("%d", begin->elem);

              vivodQueue(begin);

                       printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

void Queuefunc5(L1** begin, L1** end, bool flagstartQueue,int *maxelem)//Функция удаляет начало очереди

{

    if (flagstartQueue == 0)

    {

              printf("Вы не начали работу с очередью!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (*begin == NULL)

    {

              printf("Очередь пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (*begin == *end)// проверка если в очереди 1 элемент

    {

              printf("Число %d успешно удалёно!", (*begin)->elem);

              L1* uk;

              uk = (*begin)->next;//ставит uk на следующий элемент после удаляемого

              free(*begin);//освобождает память под удаляемый элемент

              *begin = NULL;

              *end = NULL;

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              (*maxelem)--;

              _getch();

    }

    else

    {

              printf("Число %d успешно удалёно!",(*begin)->elem);

              L1* uk;

              uk = (*begin)->next;

              free(*begin);

              (*begin) = uk;

              vivodQueue(*begin);

              (*maxelem)--;// уменьшение счетчика для проверки максимального кол-ва элементов

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

int Queuefunc6(L1** begin,L1**end, bool flagstartQueue,int *maxelem)//Функция берет элемент из начала очереди

{

    if (flagstartQueue == 0)

    {

              printf("Вы не начали работу с очередью!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (*begin == NULL)

    {

              printf("Очередь пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (*begin == *end)// проверка если в очереди 1 элемент

    {

              printf("Вы успешно взяли число %d!", (*begin)->elem);

              int saveelem;

              L1* uk;

              uk = (*begin)->next;

              saveelem = (*begin)->elem;

              free(*begin);

              *begin=NULL;

              *end = NULL;

              (*maxelem)--;

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

              return(saveelem);// возвращаем взятый элемент

    }

    else

    {

              printf("Вы успешно взяли число %d!", (*begin)->elem);

              int saveelem;

              L1* uk;

              uk = (*begin)->next;

              saveelem = (*begin)->elem;

              free(*begin);

              (*begin) = uk;

              vivodQueue(*begin);

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

              (*maxelem)--;

              return(saveelem);// возвращаем взятый элемент

    }

}

 

void Queuefunc7(L1** begin,L1**end, bool flagstartQueue)//Функция изменяет значение элемента в начале очереди

{

    if (flagstartQueue == 0)

    {

              printf("Вы не начали работу с очередью!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (*begin == NULL)

    {

              printf("Очередь пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              int element = 0;

              printf("Введите число на который вы который хотите заменить: ");

              scanf("%d", &element);

              printf("\nЧисло %d успешно изменено на %d!\n", (*begin)->elem,element);

              (*begin)->elem = element;// элемент в начале очереди становится новым элементом

              vivodQueue(*begin);

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

void Queuefunc8(L1** begin, L1** end, L1** uk, bool flagstartQueue,int *maxelem)//Функция добавляет элемент в конец очереди

{

    if (flagstartQueue == 0)

    {

              printf("Вы не начали работу с очередью!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if(*maxelem>5)// проверка в очереди больше 6 элементов?

    {

              printf("Вы не можете добавить элемент, так как максимаьлное число элементов в очереди = 6!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if((*begin==NULL) && (*end==NULL))// если очередь пуста

    {

              getchar();

              int element = 0;

              printf("Введите число который хотите добавить: ");

              scanf("%d", &element);

 

              L1* str;

              str = (L1*)malloc(sizeof(L1));// выделяем память под int

              if(!str)

              {

                       printf("Память не была выделена!!!");

                       exit(1);

              }

              *begin = str;

              *end = str;

              *uk=str;

              str->elem = element;// сохраняем в данных elem переменную element

              str->next = NULL; // указатель на следующий = NULL

              printf("\nЧисло успешно добавлено!\n");

              vivodQueue(*begin);

              (*maxelem)++; // увеличиваем счетчик для максимально допустимого кол-ва элементов

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              int element = 0;

              printf("Введите число который хотите добавить: ");

              scanf("%d", &element);

 

              L1* str;

              str = (L1*)malloc(sizeof(L1));

              if(!str)

              {

                       printf("Память не была выделена!!!");

                       exit(1);

              }

              str->elem = element;

              (*end) = str;

              (*uk)->next = str;

              *uk = str;

              str->next = NULL;

              printf("\nЧисло успешно добавлено!\n");

              vivodQueue(*begin);

              (*maxelem)++;

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

void Queuefunc9(L1* begin, bool flagstartQueue)//Функция распечатывает очередь

{

    if (flagstartQueue == 0)

    {

              printf("Вы не начали работу с очередью!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL)

    {

              printf("Очередь пуста!!!");

        printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              L1 *uk;

              uk = begin;

              printf("Очередь: ");

              while (uk->next!=NULL)// пока uk.next!=NULL выводим по 1 символу из очереди

              {

                       printf("%d ", uk->elem);

                       uk = uk->next;

              }

              printf("%d ", uk->elem);

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

L1* Queuefunc10(L1** begin, L1** end, L1** uk, bool *flagstartQueue)//Функция заканчивает работу с очередью

{

    if (flagstartQueue == 0)

    {

              printf("Вы не начали работу с очередью!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              flagstartQueue = 0;

              printf("Вы успешно завершили работу с очередью!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

              system("cls");

              return(*begin);// возвращает указатель на начало очереди который попадает в Queue элементов матрицы.

    }

}

 

 

void Matrfunc1(L2** begin, L2** end, bool* flagstartMatr)//Функция начинает работу с матрицей

{

    if (*flagstartMatr == 1)

    {

              printf("Вы уже начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              printf("Вы начали работу с матрицей!");//обнуление указателей

              *begin = *end;

              *begin = NULL;

              *end = NULL;

              *flagstartMatr = 1;

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

void Matrfunc2(L2***mass,L2** begin, L2** end, bool flagstartMatr, int* m, int* n)//Функция начинает работу с матрицей

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if(*begin==NULL&&*end==NULL)//проверка матрица пуста?

    {

              printf("Матрица уже пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              L2* uk;

              L1* str, * str1;

              uk = *end;

 

              while (uk!= *begin)//идем с конца матрицы до начала

              {

                       str = uk->Queue;

                       while (str->next!= NULL)//обнуляем очереди

                       {

                                 str1 = str;

                                 str1 = str1->next;

                                 free(str);

                                 str = str1;

                       }

                       free(str);

                       uk = uk->prev;

              }

 

 

              str = uk->Queue;

              while (str->next!= NULL)//обнуляем послудний элемент

              {

                       str1 = str;

                       str1 = str1->next;

                       free(str);

                       str = str1;

              }

              free(str);

 

              for (int i = *n - 1; i > 0; i--)//освобождаем память под массив

              {

                       free(*mass[i]);

              }

              free(*mass[0]);

              flagstartMatr = 0;

              *begin = NULL;

              *end = NULL;

              printf("Матрица успешно очищена!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

}

 

void Matrfunc3(L2**mass,L2* begin, L2* end, bool flagstartMatr, int m, int n)//Функция проверяет пуста ли матрица

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL && end == NULL)

    {

              printf("Матрица пуста!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              printf("Матрица не пуста!\n\n");

              Vivodmass(mass, begin, flagstartMatr, m, n);//вызов функции для вывода матрицы

    }

}

 

void Matrfunc4(L2**mass,L2* begin, L2* end, bool flagstartMatr, int m, int n)//Функция определяет число строк в матрице

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL && end == NULL)

    {

              printf("Матрица пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              printf("Число строк в матрице = %d\n\n", n);//просто выводит переменную n

              Vivodmass(mass, begin, flagstartMatr, m, n);

    }

}

 

void Matrfunc5(L2**mass,L2* begin, L2* end, bool flagstartMatr, int m, int n)//Функция определяет число столбцов

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL && end == NULL)

    {

              printf("Матрица пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              printf("Число столбцов в матрице = %d\n\n", m);//просто выводит переменную m

              Vivodmass(mass, begin, flagstartMatr, m, n);

    }

}

 

void Matrfunc6(L2** mass,L2* begin, L2* end, bool flagstartMatr, int m, int n)//Функция показывает значение элемента с индексом m n

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL && end == NULL)

    {

              printf("Матрица пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              int m1=0, n1=0;

                  

              printf("Матрица: \n\n");//Cначала выводится матрица

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

              {

                       for (int j = 0; j < m; j++)

                       {

                           printf("\t\tmass[%d][%d] = ", i, j);

                                 vivodmasselem((mass[i] + j)->Queue);

                       }

                       printf("\n");

              }

 

              printf("\nВведите номер строки: n = ");//ввод номера строки

              scanf("%d", &n1);

              if (n1 > n-1||n1<0)

              {

                       printf("Вы ввели неверный номер строки!!!");

                       printf("\n\n\nДля продолжения нажмите любую кнопку...");

                       _getch();

              }

              else

              {

                       printf("\nВведите номер cтолбца: m = ");//Ввод номера столбца

                       scanf("%d", &m1);

                       if (m1 > m-1 || m1 < 0)

                       {

                                 printf("Вы ввели неверный номер столбца!!!");

                                 printf("\n\n\nДля продолжения нажмите любую кнопку...");

                                 _getch();

                       }

                       else

                       {

 

                                 printf("\nЗначение элемента mass[%d][%d] = ", n1, m1);//Если ввели m и n правилььно то показываем значение элемента массива

                                 vivodmasselem((mass[n1] + m1)->Queue);

                                 printf("\n\n\nДля продолжения нажмите любую кнопку...");

                                 _getch();

                       }

              }

    }

}

 

L1* Matrfunc7(L2** mass, L2* begin, L2* end, bool flagstartMatr, int m, int n)//Функция берет элемент с индексами m n

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL && end == NULL)

    {

              printf("Матрица пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              int m1 = 0, n1 = 0;

 

              printf("Матрица: \n\n");//Cначала выводится матрица

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

              {

                       for (int j = 0; j < m; j++)

                       {

                                 printf("\t\tmass[%d][%d] = ", i, j);

                                 vivodmasselem((mass[i] + j)->Queue);

                       }

                       printf("\n");

              }

 

              printf("\nВведите номер строки: n = ");

              scanf("%d", &n1);

              if (n1 > n - 1 || n1 < 0)

              {

                       printf("Вы ввели неверный номер строки!!!");

                       printf("\n\n\nДля продолжения нажмите любую кнопку...");

                       _getch();

              }

              else

              {

                       printf("\nВведите номер cтолбца: m = ");

                       scanf("%d", &m1);

                       if (m1 > m - 1 || m1 < 0)

                       {

                                 printf("Вы ввели неверный номер столбца!!!");

                                 printf("\n\n\nДля продолжения нажмите любую кнопку...");

                                 _getch();

                       }

                       else

                       {

 

                                 printf("\nВы взяли элемент: mass[%d][%d] = ", n1, m1);//Если ввели m и n правилььно то берем значение элемента массива и возвращаем его

                                 vivodmasselem((mass[n1] + m1)->Queue);

                                 printf("\n\n\nДля продолжения нажмите любую кнопку...");

                                 _getch();

                                 return((mass[n1] + m1)->Queue);

                       }

              }

    }

}

 

void Matrfunc8(L2*** mass,L2* begin, L2* end, bool flagstartMatr, int m, int n)//Функция изменяет значение элемента индексами m n

{

    if (flagstartMatr == 0)

    {

        printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL && end == NULL)

    {

              printf("Матрица пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              int m1 = 0, n1 = 0;

              L2** mass1 = *mass;

              printf("Матрица: \n\n");

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

              {

                       for (int j = 0; j < m; j++)//вывод массива

                       {

                                 printf("\t\tmass[%d][%d] = ", i, j);

                                 vivodmasselem(((mass1[i]) + j)->Queue);

                       }

                       printf("\n");

              }

 

              printf("\nВведите номер строки: n = ");

              scanf("%d", &n1);

              if (n1 > n - 1 || n1 < 0)

              {

                       printf("Вы ввели неверный номер строки!!!");

                       printf("\n\n\nДля продолжения нажмите любую кнопку...");

                       _getch();

              }

              else

              {

                       printf("\nВведите номер cтолбца: m = ");

                       scanf("%d", &m1);

                       if (m1 > m - 1 || m1 < 0)

                       {

                                 printf("Вы ввели неверный номер столбца!!!");

                                 printf("\n\n\nДля продолжения нажмите любую кнопку...");

                                 _getch();

                       }

                       else

                       {

 

                                 ((mass1[n1]) + m1)->Queue = MenuQueue(1, ((mass1[n1]) + m1)->Queue);//Вызывается меню очереди и в поле Queue попадает указатель на начало очереди

                                 printf("Значение элемента mass[%d][%d] успешно изменено!\n ", n1, m1);

                                 printf("\nmass[%d][%d] = ", n1, m1);

                                 vivodmasselem(((mass1[n1]) + m1)->Queue);//вывод измененного значения элемента

                                 printf("\n\n\nДля продолжения нажмите любую кнопку...");

                                 _getch();

                       }

              }

    }

}

 

void Matrfunc9(L2**mass,L2* begin, L2* end, bool flagstartMatr, int m, int n)//Функция показывает строку с индексом n

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL && end == NULL)

    {

              printf("Матрица пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              int n1 = 0;

 

              printf("Матрица: \n\n");//вывод матрицы

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

              {

                       for (int j = 0; j < m; j++)

                       {

                            printf("\t\tmass[%d][%d] = ", i, j);

                                 vivodmasselem((mass[i] + j)->Queue);

                       }

                       printf("\n");

              }

 

              printf("\nВведите номер строки: n = ");

              scanf("%d", &n1);

              if (n1 > n - 1 || n1 < 0)

              {

                       printf("Вы ввели неверный номер строки!!!");

                       printf("\n\n\nДля продолжения нажмите любую кнопку...");

                       _getch();

              }

              else

              {

                       printf("\nЗначение строки с индексом %d:\n\n", n1);

                       for (int i = 0; i < m-1; i++)//Вывод строки с индексом n

                       {

                                 printf("mass[%d][%d] = ",n1, i);

                                 vivodmasselem((mass[n1] + i)->Queue);

                                     

                       }

                       printf("mass[%d][%d] = ",n1, m-1);

                       vivodmasselem((mass[n1] + m-1)->Queue);

                       printf("\n\n\nДля продолжения нажмите любую кнопку...");

                       _getch();

              }

    }

        

}

 

void Matrfunc10(L2**mass,L2* begin, L2* end, bool flagstartMatr, int m, int n)//Функция показывает столбец с индексом m

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL && end == NULL)

    {

              printf("Матрица пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              int m1 = 0;

 

              printf("Матрица: \n\n");//вывод матрицы

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

              {

                       for (int j = 0; j < m; j++)

                  {

                                 printf("\t\tmass[%d][%d] = ", i, j);

                                 vivodmasselem((mass[i] + j)->Queue);

                       }

                       printf("\n");

              }

 

              printf("\nВведите номер столбца: m = ");

              scanf("%d", &m1);

              if (m1 > m - 1 || m1 < 0)

              {

                       printf("Вы ввели неверный номер строки!!!");

                       printf("\n\n\nДля продолжения нажмите любую кнопку...");

                       _getch();

              }

              else

              {

                       printf("\nЗначение столбца с индексом %d:\n\n", m1);//Вывод столбца с индексом m

                       for (int i = 0; i < n - 1; i++)

                       {

                                 printf("mass[%d][%d] = ", i, m1);

                           vivodmasselem((mass[i] + m1)->Queue);

                                 printf("\n");

 

                       }

                       printf("mass[%d][%d] = ", m1, m - 1);

                       vivodmasselem((mass[n-1] + m1)->Queue);

                       printf("\n\n\nДля продолжения нажмите любую кнопку...");

                       _getch();

              }

    }

}

 

void Matrfunc11(L2**& mass, L2*& begin, L2*& end, bool flagstartMatr, int& m, int& n)//Функция удаляет строку матрицы

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL && end == NULL)

    {

              printf("Матрица пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

 

              L2* uk;

              L1* str, * str1;

              uk = end;

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

              {

                       str = uk->Queue;

                       while (str->next!= NULL)//удаление очередей в строке

                       {

                                 str1 = str;

                                 str1 = str1->next;

                                 free(str);

                                 str = str1;

                       }

                       free(str);//удаление элементов строки

                       uk = uk->prev;

              }

              if (n == 1)//проверка если в матрице 1 элемент

              {

                       printf("Последняя строка успешно удалена!\nМатрица очищена!");

                       printf("\n\n\nДля продолжения нажмите любую кнопку...");

                       _getch();

                       begin = NULL;

                       end = NULL;

                       m = 0;

                       n = 0;

              }

              else

              {

                       printf("Последняя строка успешно удалена!\n\n");//меняем указатели в последнем элементе массива (уже без строки)

                       end = uk;

                       end->next = NULL;

                       n--;

                       Vivodmass(mass, begin, flagstartMatr, m, n);

              }

              free(mass[n]);//освобождение памяти под последний элемент в массиве указателей

    }

}

 

 

void Matrfunc12(L2**& mass, L2*& begin, L2*& end, bool flagstartMatr, int& m, int& n)//Функция удаляет столбец матрицы

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else if (begin == NULL && end == NULL)

    {

              printf("Матрица пуста!!!");

              printf("\n\n\nДля продолжения нажмите любую кнопку...");

              _getch();

    }

    else

    {

              L2* uk;

              L1* str, * str1;

 

 

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

              {

                       uk = (mass[i] + m - 1);

                       str = uk->Queue;

                       while (str->next!= NULL)//удаление очередей в столбце

                       {

                                 str1 = str;

                                 str1 = str1->next;

                                 free(str);

                                 str = str1;

                       }

                       free(str);//удаление элементов столбца

              }

 

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

              {

                       mass[i] = (L2*)realloc(mass[i], (m - 1) * sizeof(L2));//очищение мамяти под последний столбец

                       if(!mass[i])

                       {

                                 printf("Память не была выделена!!!");

                                 exit(1);

                       }

              }

 

              if (m == 1)//проверка если в матрице 1 элемент

              {

                       printf("Последний столбец успешно удалён!\nМатрица очищена!");

                       printf("\n\n\nДля продолжения нажмите любую кнопку...");

                       _getch();

                       begin = NULL;

                       end = NULL;

                       m = 0;

                       n = 0;

              }

              else

              {

                       for (int i = 0; i < n - 1; i++)//правильно расставляем указатели после удаления столбца

                       {

                                 uk = (mass[i] + m - 2);

                                 uk->next = mass[i + 1];

                                 mass[i + 1]->prev = uk;

                       }

                       (mass[n - 1] + m - 2)->next = NULL;

                       end = (mass[n - 1] + m - 2);

                       begin = mass[0];

                       m--;

                       printf("Последний столбец успешно удалён!\n\n");

                       Vivodmass(mass, begin, flagstartMatr, m, n);

              }

    }

}

 

L2* Matrfunc13(L2**mass,L2* begin, L2* end, bool flagstartMatr, int m, int n)//Функция берет строку с индексом n

{

    if (flagstartMatr == 0)

    {

              printf("Вы не начали работу с матрицей!!!");

        printf("\n\n\nДля продолжения нажмите любую кнопку...");



Поделиться:


Последнее изменение этой страницы: 2021-05-11; просмотров: 46; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.31.209 (0.603 с.)