Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <locale.h>
- #include <stdio.h>
- #include <windows.h>
- #include <conio.h>
- int main()
- {
- setlocale(LC_ALL, "Russian");
- int i, j, g, n1;//Переменные иттерации, проверки и работы с массивом
- int ** matrix_chg;//Матрица
- int n_size;//Размерность
- int min, gap, temp;//Переменные для сортировки Шелла и пузырька
- printf("Введите размерность матрицы: ");
- if (!scanf("%d", &n_size)||n_size<0)//*Сверхинтеллектуальный* ввод
- {
- printf("\nВы ввели отрицательное число, аккуратнее!\n\n");
- system("pause");
- return 0;
- }
- system("CLS");
- if(!(matrix_chg=(int**)calloc(n_size,sizeof(int*))))//Ввод матрицы через 2-ой указатель
- {
- printf("Недостаточно памяти!");
- system("pause");
- return 0;
- }
- for(i=0; i<n_size; i++)//(Позволяет удобнее оперировать с каждым столбцом или строкой)
- if(!(matrix_chg[i]=(int*)calloc(n_size,sizeof(int)))) //В методе есть!
- {
- printf("Недостаточно памяти!");
- free(matrix_chg[i]);
- system("pause");
- return 0;
- }
- for(i=0; i<n_size; i++)//Ввод *интеллектуальный* матрицы (matrix_chg[][])
- for(j=0; j<n_size; j++)
- do{
- system("CLS");
- printf("Введите значение matrix_chg[%d][%d]: ", i, j);
- fflush(stdin);
- n1=scanf("%d", (*(matrix_chg+i)+j));
- }while(n1==0);
- system("CLS");
- printf("Исходная матрица matrix_chg: \n\n");//Вывод исходной матрицы
- for(i=0; i<n_size; i++)
- {
- printf("\n");
- for(j=0;j<n_size; j++)
- printf("%4d", *(*(matrix_chg+i)+j));
- }
- /* //Сортировка Шелла для матрицы
- for(i=0; i<n_size; i++)//Цикл столбцов
- for (gap = n_size / 2; gap > 0; gap /= 2)//Цикл разрыва между элементами, которые следует сравнить
- for (j = gap; j < n_size; j++)//Цикл строк
- {
- //Условие выбора значения для сравнения
- temp = *((matrix_chg+i)+j);//Выбор значения сравнения
- for (g = j; g >= gap; g -= gap)//Цикл выборки значений для сравнения
- {
- if((*((matrix_chg+i)+(g-gap))<0) && (temp >*((matrix_chg+i)+(g-gap))))//Условие сравнения и сравнение
- *((matrix_chg+i)+g) = *((matrix_chg+i)+(g-gap);
- else
- break;
- }
- *((matrix_chg+i)+g) = temp;//Окончательная замена значений
- }
- */
- /*
- 000000000000 00000000000
- 00000000 00000 000000 0000000
- 0000000 000 00000
- 0000000 0 0000
- 000000 0000
- 00000 0000
- 00000 00000
- 00000 //Пузырек топ 000000
- 000000 0000000
- 0000000 0000000
- 000000 000000
- 000000 000000
- 00000 0000
- 0000 0000
- 0000 000
- 000 000
- 000 00
- 00!!00
- */
- for (j = n_size - 1; j >= 0; j--) {
- gap = n_size;
- for (g = 0; g < n_size; g++) {
- gap--;
- for (i = gap; i >= 0; i--) {
- if (*(*(matrix_chg + i) + j) > 0) continue;
- if (*(*(matrix_chg + i) + j) < 0 && *(*(matrix_chg + gap) + j)>0) gap = i;
- if (*(*(matrix_chg + gap) + j) < (*(*matrix_chg + i) + j ))
- {
- temp = *(*(matrix_chg + i) + j);
- *(*(matrix_chg + i) + j) = *(*(matrix_chg + gap) + j);
- *(*(matrix_chg + gap) + j) = temp;
- }
- }
- }
- }
- /*
- for(j=0; j<n_size; j++)
- for(g=0; g<(n_size-1); g++)
- {
- gap=0;
- for(i=(n_size-1); i>g; i--);
- {
- if((*((matrix_chg+(i-1))+j)<0) && (*((matrix_chg+(i-1))+j)<*((matrix_chg+i)+j)) && gap==0)
- {
- temp=*((matrix_chg+(i-1))+j);
- *((matrix_chg+(i-1))+j)=*((matrix_chg+i)+j);
- *((matrix_chg+i)+j)=temp;
- }
- else if(*((matrix_chg+i)+j)<0)
- {
- gap=*((matrix_chg+i)+j);
- continue;
- }
- else if((*((matrix_chg+(i-1))+j)<0) && (*((matrix_chg+(i-1))+j)<gap) && gap<0)
- {
- temp=*((matrix_chg+(i-1))+j);
- *((matrix_chg+(i-1))+j)=gap;
- gap=temp;
- gap=0;
- }
- }
- }
- */
- /*
- for (j =0; j<n_size; j++)
- for(i=0; i<n_size; i++)
- {
- min=*((matrix_chg+i)+j);
- for(g=i;g<n_size;g++)
- {
- if(*((matrix_chg+g)+j)<min && *((matrix_chg+g)+j)<0)
- {
- temp=*((matrix_chg+g)+j);
- *((matrix_chg+g)+j)=min;
- min=temp;
- }
- }
- }
- */
- printf("\n\nПреобразованная матрица matrix_chg: \n\n");
- for(i=0; i<n_size; i++)
- {
- printf("\n");
- for(j=0;j<n_size; j++)
- printf("%4d", *(*(matrix_chg+i)+j));
- }
- printf("\n\n");
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement