Advertisement
Motocelium

PB 10.2

Jan 15th, 2024 (edited)
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.53 KB | None | 0 0
  1. //10.2//
  2.  
  3. //main.cpp
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include "biblioteca.h"
  7.  
  8. struct mat
  9. {
  10.     int **val;
  11.     int rand;
  12.     int col;
  13. };
  14.  
  15. int main()
  16. {
  17.     struct mat m={}, b={};
  18.    
  19.     int r, c, x, y, k, t;
  20.     scanf("%d%d", &r, &c);
  21.    
  22.     in_mat(m, r, c);
  23.     citire(m);
  24.    
  25.     scanf("%d", &k);
  26.     scanf("%d", &x);
  27.     scanf("%d", &y);
  28.     scanf("%d", &t);
  29.    
  30.     switch(t)
  31.     {
  32.         case 1:
  33.             afisare(m);
  34.             break;
  35.        
  36.         case 2:
  37.             bordare(m, k);
  38.             //printf("%d %d\n", m.rand, m.col);
  39.             afisare(m);
  40.             break;
  41.            
  42.         case 3:
  43.             in_mat(b, k, k);
  44.             bordare(m, k);
  45.             extragere(m, b, x, y, k);
  46.             afisare(b);
  47.             break;
  48.            
  49.         case 4:
  50.             binar(m);
  51.             afisare(m);
  52.             break;
  53.        
  54.         case 5:
  55.             binar(m);
  56.             printf("%d", transformare(m));
  57.             break;
  58.            
  59.         case 6:
  60.             bordare(m, k);
  61.             in_mat(b, k, k);
  62.             extragere(m, b, x, y, k);
  63.             binar(b);
  64.             printf("%d", transformare(b));
  65.             break;
  66.     }
  67.    
  68.            
  69. }
  70.  
  71. //biblioteca.cpp
  72. #include "biblioteca.h"
  73.  
  74. struct mat
  75. {
  76.     int **val;
  77.     int rand;
  78.     int col;
  79. };
  80.  
  81.  
  82. void in_mat(struct mat &m, int r, int c)
  83. {
  84.     m.val=(int**) malloc(r*sizeof(int*));
  85.    
  86.     for(int i=0; i<r; i++)
  87.         m.val[i]=(int*) malloc(c*sizeof(int));
  88.    
  89.     m.rand=r; m.col=c;
  90. }
  91.  
  92. void citire(struct mat m)
  93. {
  94.     for(int i=0; i<m.rand; i++)
  95.         for(int j=0; j<m.col; j++)
  96.             scanf("%d", &m.val[i][j]);
  97. }
  98.  
  99. void afisare(struct mat m)
  100. {
  101.     for(int i=0; i<m.rand; i++)
  102.     {
  103.         for(int j=0; j<m.col; j++)
  104.             printf("%d ", *(*(m.val+i)+j));
  105.         printf("\n");
  106.     }
  107. }
  108.  
  109. void bordare(struct mat &m, int k)
  110. {
  111.     struct mat temp;
  112.     in_mat(temp, m.rand+k-1, m.col+k-1);
  113.    
  114.     for(int i=0; i<m.rand; i++)
  115.         for(int j=0; j<m.col; j++)
  116.             temp.val[i][j]=m.val[i][j];
  117.    
  118.     for(int i=m.rand; i<temp.rand; i++)
  119.         for(int j=0; j<temp.col; j++)
  120.             temp.val[i][j]=0;
  121.    
  122.     for(int j=m.col; j<temp.col; j++)
  123.         for(int i=0; i<temp.rand; i++)
  124.             temp.val[i][j]=0;
  125.    
  126.     for(int i=0; i<m.rand; i++)
  127.         free(m.val[i]);
  128.    
  129.    
  130.     m=temp;
  131. }
  132.  
  133. void extragere(struct mat m, struct mat &b, int x, int y, int k)
  134. {
  135.     for(int i=x, p=0; i<x+k; i++, p++)
  136.         for(int j=y, q=0; j<y+k; j++, q++)
  137.             b.val[p][q]=m.val[i][j];
  138. }
  139.  
  140. void binar(struct mat m)
  141. {
  142.     int v=(*(*(m.val+m.rand/2)+m.col/2));
  143.     for(int i=0; i<m.rand; i++)
  144.         for(int j=0; j<m.col; j++)
  145.             if((*(*(m.val+i)+j))>v)
  146.                 (*(*(m.val+i)+j))=1;
  147.             else
  148.                 (*(*(m.val+i)+j))=0;
  149. }
  150.  
  151. int transformare(struct mat m)
  152. {
  153.     long long p=1;
  154.     long long n=0;
  155.    
  156.     for(int i=0; i<m.rand; i++)
  157.         for(int j=0; j<m.col; j++)
  158.         {
  159.             if((*(*(m.val+i)+j))==1)
  160.                 n+=p;
  161.             p*=2;
  162.         }
  163.    
  164.     return n;
  165. }
  166.  
  167. //biblioteca.h
  168. #ifndef BIBLIOTECA_H
  169.  
  170. #define BIBLIOTECA_H
  171. #include <stdio.h>
  172. #include <stdlib.h>
  173.  
  174. struct mat;
  175.  
  176. void in_mat(struct mat &m, int r, int l);
  177. void citire(struct mat m);
  178. void afisare(struct mat m);
  179. void bordare(struct mat &m, int k);
  180. void extragere(struct mat m, struct mat &b, int x, int y, int k);
  181. void binar(struct mat m);
  182. int transformare(struct mat m);
  183.  
  184. #endif
Tags: PCLP1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement