Created
April 20, 2017 12:26
-
-
Save mAlishera/49f744d427df8d4f916bddc121a88b74 to your computer and use it in GitHub Desktop.
1 - сдвиг массива влево до минимального и потом вправо до максимального, 2 - сортировка матрицы по столбцам
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdlib.h> | |
#include <math.h> | |
#include <curses.h> | |
#include <cmath> | |
#include <algorithm> | |
#include <iostream> | |
#include <time.h> | |
// функция, которая получает и выводит на пачеть | |
// *ptr - указатель на нулевой элемент | |
void print_arrays(int *ptr, int k, int num) { | |
printf("\n\n\t"); | |
printf("\n %4d -----", num); | |
for(int i=0; i<k; i++) | |
printf("%4d", ptr[i]); | |
printf("\n"); | |
} | |
int main(int argc, const char * argv[]) | |
{ | |
// Задача 1: Динамический одномерный массив наполнен целыми неповторяющимися числами | |
// 1. путем циклич сдвига влево преобразовываем массив, чтобы его минимальный элемент оказался на первом месте | |
// и путем цикличестого сдвига вправо оставшихся n-1 - добиться чтобы максимальный занял последнее место | |
// распечатать 3 массива | |
int n(0); | |
int * p(NULL); | |
int * s(NULL); | |
const int M = 99; | |
printf("\n\t Enter num of elements in array: "); | |
scanf("%d", &n); | |
p = (int*) malloc (n*sizeof(int)); | |
s = (int*) malloc (n*sizeof(int)); | |
if (!p) { | |
printf("\n\t Not enough memory!"); | |
} | |
srand((unsigned)time(NULL)); | |
for(int i=0; i<n; i++) { | |
p[i]=rand()%M; | |
s[i]=p[i]; | |
} | |
print_arrays(p, n, 0); | |
for(int j=0; j<n; j++) { | |
for(int k=0; k<(n - 1)-j; k++) { | |
if(p[k]>p[k+1]) { | |
// сортируем массив минимальных | |
int tmp = p[k]; p[k] = p[k+1]; | |
p[k+1] = tmp; | |
}; | |
}; | |
} | |
print_arrays(p, n, 1); | |
printf("\t минимальное - %4d", p[0]); | |
printf("\t максимальное - %4d", p[n-1]); | |
// сдвигаем массив влево до момента когда минимальный элемент станет нулевым. сдвинутые записываем в хвост | |
while (s[0] != p[0]) { | |
int temp = s[0]; | |
for(int j=1; j<n; j++) { | |
s[j-1] = s[j]; | |
} | |
s[n-1] = temp; | |
} | |
print_arrays(s, n, 2); | |
int *pp=&s[1]; | |
// сдвигаем массив без минимального вправо до момента, когда максимальный элемент станет последним, сдвинутые записываем вперед | |
while (pp[n-2] != p[n-1]) { | |
int temp = pp[n-2]; | |
for(int j=(n-2); j>0; j--) { | |
pp[j] = pp[j-1]; | |
} | |
pp[0] = temp; | |
} | |
printf("\n\n\t результат сдвигов влево до минимального и вправо до максимального - \n\n"); | |
printf("\n\t %4d", p[0]); | |
for(int i=0; i<(n-1); i++) { | |
printf("%4d", pp[i]); | |
} | |
printf("\n"); | |
// освобождаем память только динамическую | |
// обычным способом заданый массив не надо освобождать - он в статической памяти | |
free((void*)p); | |
// Задача 2: Дана двумерная квадратная статическая матрицв, заполненная случайными числами | |
// методом попарных перестановок добиться, чтобы элементы расположились в возрастающем порядке по столбцам | |
// const int R = 3; | |
// const int N = 90; | |
// | |
// int a[R][R]; | |
// int i, j; | |
// | |
// srand((unsigned) time(0)); | |
// for(i=0; i<R; i++) | |
// for(j=0; j<R; j++){ | |
// a[i][j]=rand()%N; | |
// }; | |
// | |
// printf("\n\t Исходный квадратный массив - "); | |
// for(i=0; i<R; i++) { | |
// printf("\n\t"); | |
// for(j=0; j<R; j++) | |
// printf("%4d", a[i][j]); | |
// }; | |
// | |
// // взять указатель на нулевой элемент массива - это будет одномерный массив, его отсортировать пузырьком и оттранспанировать | |
// int *p=&a[0][0]; | |
// printf("\n\n\t Исходный одномерный массив - \n"); | |
// for(i=0; i<R*R; i++) { | |
// printf("%4d", p[i]); | |
// } | |
// | |
// for(int j=0; j<R*R; j++) { | |
// for(int k=0; k<(R*R - 1)-j; k++) { | |
// if(p[k]>p[k+1]) { | |
// // сортируем массив минимальных | |
// int tmp = p[k]; p[k] = p[k+1]; | |
// p[k+1] = tmp; | |
// }; | |
// }; | |
// } | |
// | |
// printf("\n\n\t Отсортированный одномерный массив - \n"); | |
// for(i=0; i<R*R; i++) { | |
// printf("%4d", p[i]); | |
// } | |
// | |
// printf("\n\n\t Отсортированный квадратный массив - "); | |
// for(i=0; i<R; i++) { | |
// printf("\n\t"); | |
// for(j=0; j<R; j++) | |
// printf("%4d", a[i][j]); | |
// }; | |
// | |
// for(i = 0; i < R; i++) | |
// for(j = 0; j < R; j++) | |
// if(i < j) { | |
// int buf = a[i][j]; | |
// a[i][j] = a[j][i]; | |
// a[j][i] = buf; | |
// }; | |
// | |
// printf("\n\n\t Транспонированный квадратный массив - "); | |
// for(i=0; i<R; i++) { | |
// printf("\n\t"); | |
// for(j=0; j<R; j++) | |
// printf("%4d", a[i][j]); | |
// }; | |
// конец main | |
printf("\n\t"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment