Advertisement
vasylmartyniv

C2S1-Yulia-3

Dec 10th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int check(int *arr, int columns){//Функція яка перевіряє чи той рядок який ми їй передали має одинакові числа
  5.     int i,j;
  6.     for(i=0;i<columns-1;i++){//Проходимся від початку до кінця
  7.         for(j=i+1;j<columns;j++){//Проходимся від того елементу на якому попередній цикл до кінця
  8.             if(*(arr+j)==*(arr+i)){//Порівнюємо чи елемент в першому циклі дорівнює елементу в цьому
  9.                 return 1;
  10.             }
  11.         }
  12.     }
  13.     return 0;
  14. }
  15.  
  16. int main()
  17. {
  18.     int rows, columns,i,j;
  19.     printf("Input amount of rows:");
  20.     scanf("%d", &rows);
  21.     printf("Input amount of columns:");
  22.     scanf("%d", &columns);
  23.     int *array=malloc(rows*columns*sizeof(int));
  24.     //Зірочка це вказівник на точку в пам'яті компютера а malloc
  25.     // виділяє певне число байтів в памяті і в цій стрічці ми виділяємо кількість памяті рівну кількоті рядків помножити
  26.     // на кількість стовпців помножити на кількість байт що займає інтеджер і робимо вказівник на початок цього блоку памяті
  27.    
  28.    
  29.     for(i=0;i<rows;i++){
  30.         for(j=0;j<columns;j++){
  31.             printf("Input a[%d][%d]: ",i,j);
  32.             scanf("%d",(array+i*columns+j));//Вводимо елементи в масив
  33.         }
  34.     }
  35.     printf("-----Old matrix-----\n");
  36.     for(i=0;i<rows;i++){
  37.         for(j=0;j<columns;j++){
  38.             printf("%d ",*(array+i*columns+j));//Виводимо елементи з масиву
  39.         }
  40.         printf("\n");
  41.     }
  42.     int *newmatrix=malloc(sizeof(int));//Створюємо нову матрицю і робимо їй мінімалний розмір
  43.     int newmcounter=0;//Змінна щоб рахувати кількість рядків нової матриці
  44.     for(i=0;i<rows;i++){//Проходимося по всіх рядках старої матриці
  45.         if(check(array+i*columns,columns)!=1){//Передаємо рядок в функцію щоб перевірити на повторення
  46.             newmatrix=realloc(newmatrix,((newmcounter+1)*columns)*sizeof(int));
  47.             //Якщо повторень немає то з допомогою realloc збільшуємо розмір памяті нової матриці (Збільшуємо на один рядок)
  48.            
  49.             int *old=array+i*columns;//Робимо вказівник на початок цього рядка в старій матриці
  50.             int *new=newmatrix+newmcounter*columns;//Робимо вказівник на початок останнього рядка в новій матриці
  51.             for(j=0;j<columns;j++){//Проходимось по елементах нового рядка
  52.                 *(new+j)=*(old+j);//Присвоюємо їм відповідний елемент старого рядка
  53.             }
  54.             newmcounter++;//Збільшуємо кількість рядків в новій матриці
  55.         }
  56.     }
  57.     printf("-----New matrix-----\n");
  58.     for(i=0;i<newmcounter;i++){
  59.         for(j=0;j<columns;j++){
  60.             printf("%d ",*(newmatrix+i*columns+j));//Виводимо нову матрицю
  61.         }
  62.         printf("\n");
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement