Skip to content

Instantly share code, notes, and snippets.

@mAlishera
Created April 20, 2017 12:26
Show Gist options
  • Save mAlishera/49f744d427df8d4f916bddc121a88b74 to your computer and use it in GitHub Desktop.
Save mAlishera/49f744d427df8d4f916bddc121a88b74 to your computer and use it in GitHub Desktop.
1 - сдвиг массива влево до минимального и потом вправо до максимального, 2 - сортировка матрицы по столбцам
#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