Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int myInput();
- void myInputPointer(int* a);
- int compareString(char* a, char* b);
- int isCharInt(char ch);
- int isMyInputCorrect(int res);
- int** resmat(int m, int n);
- int** input(int m, int n, int* matrixCorrect);
- void output(int** matrix, int m, int n);
- /*
- 1 6 7
- 2 5 8
- 3 4 9
- */
- void sort_vertical(int **matrix, int n, int m, int **result_matrix);
- /*
- 1 2 3
- 6 5 4
- 7 8 9
- */
- void sort_horizontal(int **matrix, int n, int m, int **result_matrix);
- int main(){
- int **matrix, **result;
- int n,m;
- m = myInput();
- n = myInput();
- int matrixCorrect = 1;
- if (isMyInputCorrect(m) && isMyInputCorrect(n) && m > 0 && n > 0) {
- matrix = input(m,n,&matrixCorrect);
- if(matrixCorrect){
- result = resmat(m,n);
- sort_vertical(matrix, m, n, result);
- output(result, m, n);
- printf("\n");
- sort_horizontal(matrix, m, n, result);
- // output(result);
- output(result, m, n);
- }
- }
- else{
- matrixCorrect = 0;
- }
- if(matrixCorrect == 0){
- printf("n/a");
- }
- }
- void sort(int *a, int n) {
- int i, j;
- for (i = 0; i < n - 1; i++) {
- for (j = 0; j < n - i - 1; j++) {
- if (a[j] > a[j + 1]) {
- int temp = a[j];
- a[j] = a[j + 1];
- a[j + 1] = temp;
- }
- }
- }
- }
- void sort_vertical(int **matrix, int m, int n, int **result_matrix){
- int *a = malloc(m * n * sizeof(int));
- int counter = 0;
- for (int i = 0; i < m; i++)
- for (int j = 0; j < n; j++) {
- a[counter] = matrix[i][j];
- counter++;
- }
- sort(a, counter);
- int counter1 = 0;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++) {
- result_matrix[j][i] = a[counter1];
- counter1++;
- }
- free(a);
- }
- void sort_horizontal(int **matrix, int m, int n, int **result_matrix){
- int *a = malloc(m * n * sizeof(int));
- int counter = 0;
- for (int i = 0; i < m; i++)
- for (int j = 0; j < n; j++) {
- a[counter] = matrix[i][j];
- counter++;
- }
- sort(a, counter);
- int counter1 = 0;
- for (int i = 0; i < m; i++)
- for (int j = 0; j < n; j++) {
- result_matrix[i][j] = a[counter1];
- counter1++;
- }
- free(a);
- }
- int **resmat(int m, int n) { // m -rows n -cols
- int **mat = (int **)malloc(m * n * sizeof(int) + m * sizeof(int *));
- int *ptr = (int *)(mat + m);
- // int flag = 1;
- // int temp;
- for (int i = 0; i < m; i++) mat[i] = ptr + n * i;
- return mat;
- }
- int** input(int m, int n, int* matrixCorrect) { // m -rows n -cols
- int** mat = (int**)malloc(m * n * sizeof(int) + m * sizeof(int*));
- int* ptr = (int*)(mat + m);
- int flag = 1;
- int temp;
- for (int i = 0; i < m; i++) mat[i] = ptr + n * i;
- for (int i = 0; i < m; i++)
- for (int j = 0; j < n; j++) {
- if (flag) {
- temp = myInput();
- if (!isMyInputCorrect(temp)) {
- flag = 0;
- *matrixCorrect = 0;
- } else {
- mat[i][j] = temp;
- }
- }
- }
- return mat;
- }
- void output(int** matrix, int m, int n) {
- for (int i = 0; i < m; i++) {
- for (int j = 0; j < n; j++) {
- if (j == 0)
- printf("%d", matrix[i][j]);
- else
- printf(" %d", matrix[i][j]);
- }
- if (i != m - 1) printf("\n");
- }
- }
- /**************** Проверка на ввод инта **********
- * Концепция:
- *
- * Попытка проверить на инты без сторонних библиотек
- *
- * Так, моя идея создать функцию myInput() и там проверять через строки
- * Так как злые дяди и тети запретили мне использовать сторонние библиотеки
- * и я не могу использовать strcmp() я создал свой strcmp()
- * Более детальное объяснение снизу. Мы русские с нами бог...
- *************************************************/
- /*************************************************
- * Функция myInput():
- * Какую же гадость я написал...
- *
- * У нас есть две строки checker
- * Изначально из консоли мы записываем в checker1
- * Переносим это все в int a
- * Потом int a преобразуем в строку и записываем в checker2
- * И по сути если мы ввели не int то здесь строки будут разные
- *
- * Проверка на одинаковость строк через другую непонятную функцию
- *************************************************/
- int myInput() {
- int a;
- char checker1[256], checker2[256];
- if (1 != scanf("%s", checker1)) {
- a = -2147483647;
- } else {
- sscanf(checker1, "%d", &a);
- sprintf(checker2, "%d", a);
- if (compareString(checker1, checker2) != 0) {
- a = -2147483647;
- }
- }
- return a;
- }
- /*************************************************
- * Функция compareString():
- * Какую же гадость я написал x2...
- *
- * Концепция что мы проверяем посимвольно и если вдруг какой-то
- * символ другой возвращаем разницу этих символов по таблице ASCI
- *************************************************/
- int compareString(char* a, char* b) {
- while ((*a == *b) && (*a != 0)) {
- // printf("%s. %d | ", a, *a);
- // printf("%s. %d\n", b, *b);
- a++;
- b++;
- }
- return *a - *b;
- }
- /*************************************************
- * Функция myInputPointer():
- * Жизнь меня заставляет использовать указатель...
- *
- * Концепция один в один как myInput() только вместо return используем указатель
- *************************************************/
- void myInputPointer(int* a) {
- char checker1[256], checker2[256];
- if (1 != scanf("%s", checker1)) {
- *a = -2147483647;
- } else {
- sscanf(checker1, "%d", a);
- sprintf(checker2, "%d", *a);
- if (compareString(checker1, checker2) != 0) {
- *a = -2147483647;
- }
- }
- }
- /*************************************************
- * Функция isCharInt():
- * Жизнь странная штука. Теперь я добавляю еще одну странную функцию...
- *
- * Смысл украден с myInput()
- * Мы должны проверить является ли char числом [0-9]
- * Получаем char ch, значение заносим в char[] checker1, потом переносим
- * значение char[] checker1 в int a и потом в char[] checker2
- * По итогу сравниваем checker1 и checker2
- *
- * Возвращаемые значения: целая положительная цифра [0-9] or -10 if error
- *************************************************/
- int isCharInt(char ch) {
- int a, res = 1;
- char checker1[256], checker2[256];
- sprintf(checker1, "%c", ch);
- sscanf(checker1, "%d", &a);
- sprintf(checker2, "%d", a);
- if (compareString(checker1, checker2) != 0) {
- res = -10;
- } else {
- res = a;
- }
- return res;
- }
- /*************************************************
- * Я устал делать проверки поетому пусть он за меня делает
- **************************************************/
- int isMyInputCorrect(int res) {
- if (res != -2147483647) {
- return 1;
- } else {
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement