Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <locale.h>
- #include <time.h>
- int main(){
- setlocale(LC_ALL, "");//подключили стандартную для ОС кодировку (и теперь есть русский язык!)
- int size=0;//создаём переменную под размер
- while(!(size>=1&&size<=8)){//повторяем код внутри блока до тех пор, пока не введут значения в заданном интервале
- puts("Введите размер квадратной матрицы");//перевод новой строки уже есть в функции puts
- scanf("%i", &size);//считываем значение с клавиатуры
- }
- int array[size][size];//создаём матрицу заданного размера
- int choice=0;//используется для выбора типа задания матрицы
- while(!(choice==1||choice==2)){//повторяем код внутри блока до тех пор, пока не введут значения в заданном интервале
- puts("Введите способ задания матрицы: 1 для ручного и 2 для автоматического");//перевод новой строки уже есть в функции puts
- scanf("%i", &choice);//считываем значение с клавиатуры
- }
- if (choice==1){//ручной ввод
- for(int i=0; i<size; i++){
- for(int j=0; j<size; j++){
- printf("Введите значение %i-ой строки %i-ого столбца: ", i+1,j+1);
- scanf("%i", &array[i][j]);
- }}}
- if (choice==2){//автоматическое заполнение матрицы с помощью псевдослучайных чисел
- srand(time(NULL));//задаём начальное значение для генератора случайных чисел текущим временем
- for(int i=0; i<size; i++)
- for(int j=0; j<size; j++){
- array[i][j]=rand()%100;//берем остаток от деления на 100, т.е. числа в интервале [0, 100]
- }}
- puts("Сформированная матрица имеет вид");
- for(int i=0; i<size; i++){
- for(int j=0; j<size; j++)
- printf("%3i ", array[i][j]);//выводим элементы массива, выделяя по три ячейки на каждое значение
- puts(""); //перевод вывода на новую строку
- }
- int sortarray[size+2*(size-1)];//создаём массив для сортировки
- int k=0;
- for(int i=0; i<size; i++)
- sortarray[k++]=array[i][0];//вводим в массив значения левой вертикали
- for(int i=1; i<(size-1); i++)
- sortarray[k++]=array[0][i];//вводим в массив значения горизонтали
- for(int i=0; i<size; i++)
- sortarray[k++]=array[i][size-1];//вводим в массив значения правой вертикали
- int tmp;//сортировка пузырьком
- int noSwap;
- int i;
- for (i= (size+2*(size-1)) - 1; i >= 0; i--)
- {
- noSwap = 1;
- int j;
- for (j = 0; j < i; j++)
- {
- if (sortarray[j] > sortarray[j + 1])
- {
- tmp = sortarray[j];
- sortarray[j] = sortarray[j + 1];
- sortarray[j + 1] = tmp;
- noSwap = 0;
- }
- }
- if (noSwap == 1)
- break;
- }
- k=0;
- for(int i=size-1; i>0; i--)
- array[i][0]=sortarray[k++];//выводим из массива значения левой вертикали
- for(int i=0; i<(size-1); i++)
- array[0][i]=sortarray[k++];//выводим из массива значения горизонтали
- for(int i=0; i<size; i++)
- array[i][size-1]=sortarray[k++];//выводим из массива значения правой вертикали
- puts("");
- puts("Отсортированная матрица 'по букве П'имеет вид");
- for(int i=0; i<size; i++){
- for(int j=0; j<size; j++)
- printf("%3i ", array[i][j]);//выводим элементы массива, выделяя по три ячейки на каждое значение
- puts(""); //перевод вывода на новую строку
- }
- int min=100;//изначально самое большое число
- int max=0;//изначально самое маленькое число
- for(int i=1; i<(size-1); i++)
- for(int j=1; j<size;j++){
- if(min>array[j][i])
- min=array[j][i];
- if(max<array[j][i])
- max=array[j][i];
- }
- printf("Максимальное среди неотсортированных элементов: %i. Минимальное: %i\n", max, min);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement