Advertisement
STANAANDREY

tp1 ex 1

Feb 21st, 2023
973
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.34 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int** initMat(int n) {
  5.   int **a = NULL;
  6.   if((a=(int**)malloc(n*sizeof(int*)))==NULL){
  7.     printf("memorie insuficienta\n");
  8.     exit(EXIT_FAILURE);
  9.   }
  10.   // alocare linii
  11.   for(int i=0;i<n;i++){
  12.     if((a[i]=(int*)malloc(n*sizeof(int)))==NULL){
  13.       for(i--;i>=0;i--)free(a[i]); // elibereaza liniile alocate anterior
  14.       free(a); // elibereaza vectorul de pointeri
  15.       printf("memorie insuficienta\n");
  16.       exit(EXIT_FAILURE);
  17.     }
  18.   }
  19.   return a;
  20. }
  21.  
  22. void readMat(int **a, int n) {
  23.   for (int i = 0; i < n; i++) {
  24.     for (int j = 0; j < n; j++) {
  25.       scanf("%d", &a[i][j]);
  26.     }
  27.   }
  28. }
  29.  
  30. void freeMat(int **a, int n) {
  31.   for (int i = 0; i < n; i++) {
  32.     free(a[i]);
  33.   }
  34.   free(a);
  35. }
  36.  
  37. int ok(int **a, int n, int **b, int m, int l, int c) {
  38.   for (int i = 0; i < m; i++) {
  39.     for (int j = 0; j < m; j++) {
  40.       if (a[i + l][j + c] != b[i][j]) {
  41.     return 0;
  42.       }
  43.     }
  44.   }
  45.   return 1;
  46. }
  47.  
  48. int main(void) {
  49.   int **a, **b, n, m;
  50.   scanf("%d%d", &n, &m);
  51.   a = initMat(n);
  52.   b = initMat(m);
  53.   readMat(a, n);
  54.   readMat(b, m);
  55.  
  56.   for (int i = 0; i <= n - m; i++) {
  57.     for (int j = 0; j <= n - m; j++) {
  58.       if (ok(a, n, b, m, i, j)) {
  59.     printf("(%d, %d) ", i, j);
  60.       }
  61.     }
  62.   }
  63.   puts("");//*/
  64.  
  65.   freeMat(a, n);
  66.   freeMat(b, m);
  67.   return 0;
  68. }
  69.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement