Advertisement
dmilicev

rotation_of_matrix.c

Apr 9th, 2020
574
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.25 KB | None | 0 0
  1. /*
  2.  
  3. I'm sorry, I don't have time to translate this program to English.
  4.  
  5. Rotiranje matrice:
  6.  
  7. - udesno za 90 stepeni, tri verzije
  8. - ulevo  za 90 stepeni
  9. - oko horizontalne ose, dve verzije
  10. - oko vertikalne ose, dve verzije
  11.  
  12.  
  13. You can find all my C programs at Dragan Milicev's pastebin:
  14.  
  15. https://pastebin.com/u/dmilicev
  16.  
  17. https://www.facebook.com/dmilicev
  18.  
  19. */
  20.  
  21.  
  22. #include <stdio.h>
  23. #include <stdlib.h> // zbog exit()
  24.  
  25. #define MAX_SIZE 100
  26.  
  27.  
  28. // Prikazuje matricu M[][] koja ima r redova i k kolona
  29. void prikazi_matricu( char *tekst, int M[][MAX_SIZE], int r, int k )
  30. {
  31.     int i, j;
  32.  
  33.     printf("\n%s\n\n",tekst);
  34.  
  35.     for(i=0;i<r;i++) {    // Stampamo matricu M[][]
  36.         for(j=0;j<k;j++)
  37.             printf(" %4d",M[i][j]);
  38.  
  39.         printf("\n\n");   // novi red matrice
  40.     }
  41.     printf("\n");
  42. }
  43.  
  44.  
  45. // Formira matricu M[][] koja ima r redova i k kolona
  46. // Elementi su redni brojevi.
  47. void formiraj_matricu( int M[][MAX_SIZE], int r, int k )
  48. {
  49.     int i, j;
  50.  
  51.     for(i=0;i<r;i++)
  52.         for(j=0;j<k;j++)
  53.             M[i][j] = i*k + j+1;
  54. }
  55.  
  56.  
  57. // Funkcije koje ne manjaju matricu M vec je samo prikazju izmenjenu
  58.  
  59.  
  60. // Prikazuje matricu rotiranu oko horizontalne ose.
  61. void prikazi_matricu_rotiranu_oko_horizontalne_ose( int M[][MAX_SIZE], int r, int k )
  62. {
  63.    int i,j;
  64.  
  65.     for(i=r-1;i>=0;i--){    // za sve redove matrice M
  66.         for(j=0;j<k;j++){       // za sve kolone matrice M
  67.             printf(" %4d",M[i][j]);
  68.         }
  69.         printf("\n\n");
  70.     }
  71. }
  72.  
  73.  
  74. // Prikazuje matricu rotiranu oko horizontalne ose, verzija 1.
  75. void prikazi_matricu_rotiranu_oko_horizontalne_ose_v1( int M[][MAX_SIZE], int r, int k )
  76. {
  77.    int i,j,ip=r-1,jp;       // ip i jp su indeksi za prikaz M[ip][jp]
  78.  
  79.     for(i=0;i<r;i++){       // za sve redove matrice M
  80.         jp=0;
  81.         for(j=0;j<k;j++)        // za sve kolone matrice M
  82.             printf(" %4d",M[ip][jp++]);
  83.         ip--;
  84.         printf("\n\n"); // novi red matrice
  85.     }
  86. }
  87.  
  88.  
  89. // Prikazuje matricu rotiranu oko vertikalne ose, verzija 1.
  90. void prikazi_matricu_rotiranu_oko_vertikalne_ose_v1( int M[][MAX_SIZE], int r, int k )
  91. {
  92.    int i,j,ip=0,jp;     // ip i jp su indeksi za prikaz M[ip][jp]
  93.  
  94.     for(i=0;i<r;i++){       // za sve redove matrice M
  95.         jp=k-1;
  96.         for(j=0;j<k;j++)        // za sve kolone matrice M
  97.             printf(" %4d",M[ip][jp--]);
  98.         ip++;
  99.         printf("\n\n"); // novi red matrice
  100.     }
  101. }
  102.  
  103.  
  104. // Prikazuje matricu rotiranu oko vertikalne ose.
  105. void prikazi_matricu_rotiranu_oko_vertikalne_ose( int M[][MAX_SIZE], int r, int k )
  106. {
  107.    int i,j;
  108.  
  109.     for(i=0;i<r;i++){       // za sve redove matrice M
  110.         for(j=k-1;j>=0;j--)        // za sve kolone matrice M
  111.             printf(" %4d",M[i][j]);
  112.         printf("\n\n"); // novi red matrice
  113.     }
  114. }
  115.  
  116.  
  117. // Prikazuje matricu rotiranu udesno za 90 stepeni, verzija 2.
  118. // Prvi je donji levi element i njegova kolona se prikazuje unazad kao prvi red.
  119. // Kolone postaju redovi i prikazuju se unazad.
  120. void prikazi_matricu_rotiranu_udesno_za_90_stepeni_v2( int M[][MAX_SIZE], int r, int k )
  121. {
  122.    int i,j,ip,jp=0;     // ip i jp su indeksi za prikaz M[ip][jp]
  123.  
  124.     for(i=0;i<r;i++){       // za sve redove matrice M
  125.         ip=r-1;
  126.         for(j=0;j<k;j++)        // za sve kolone matrice M
  127.             printf(" %4d",M[ip--][jp]);
  128.         jp++;
  129.         printf("\n\n"); // novi red matrice
  130.     }
  131. }
  132.  
  133.  
  134. // Prikazuje matricu rotiranu udesno za 90 stepeni, verzija 1.
  135. // Prvi je donji levi element i njegova kolona se prikazuje unazad kao prvi red.
  136. // Kolone postaju redovi i prikazuju se unazad.
  137. void prikazi_matricu_rotiranu_udesno_za_90_stepeni_v1( int M[][MAX_SIZE], int r, int k )
  138. {
  139.     int i,j;
  140.  
  141.     for(j=0;j<k;j++){
  142.         for(i=r-1;i>=0;i--)
  143.             printf(" %4d",M[i][j]);
  144.         printf("\n\n"); // novi red matrice
  145.     }
  146. }
  147.  
  148.  
  149. // Prikazuje matricu rotiranu udesno za 90 stepeni.
  150. // Prvi je donji levi element i njegova kolona se prikazuje unazad kao prvi red.
  151. // Kolone postaju redovi i prikazuju se unazad.
  152. void prikazi_matricu_rotiranu_udesno_za_90_stepeni( int M[][MAX_SIZE], int r, int k )
  153. {
  154.     int i,j;
  155.  
  156.     for(i=0;i<k;i++){
  157.         for(j=k-1;j>=0;j--)
  158.             printf(" %4d",M[j][i]); // PAZNJA, indeksi su zamenili mesta M[j][i]
  159.         printf("\n\n"); // novi red matrice
  160.     }
  161. }
  162.  
  163.  
  164. // Prikazuje matricu rotiranu ulevo za 90 stepeni.
  165. // Prvi je gornji desni element i njegova prva desna kolona se prikazuje kao prvi red.
  166. // Kolone postaju redovi.
  167. void prikazi_matricu_rotiranu_ulevo_za_90_stepeni( int M[][MAX_SIZE], int r, int k )
  168. {
  169.    int i,j,ip,jp=k-1;   // ip i jp su indeksi za prikaz M[ip][jp]
  170.  
  171.     for(i=0;i<r;i++){       // za sve redove matrice M
  172.         ip=0;
  173.         for(j=0;j<k;j++)        // za sve kolone matrice M
  174.             printf(" %4d",M[ip++][jp]);
  175.         jp--;
  176.         printf("\n\n"); // novi red matrice
  177.     }
  178. }
  179.  
  180.  
  181. // Kopira matricu M u matricu M1, r je broj redova, k je broj kolona
  182. void kopiraj_matricu( int M1[][MAX_SIZE], int M[][MAX_SIZE], int r, int k )
  183. {
  184.     int i,j;
  185.  
  186.     for(i=0;i<r;i++)        // za sve redove matrice M
  187.         for(j=0;j<k;j++)        // za sve kolone matrice M
  188.             M1[i][j] = M[i][j];
  189. }
  190.  
  191.  
  192. // Funkcije koje manjaju matricu M
  193.  
  194.  
  195. // Rotira matricu udesno za 90 stepeni.
  196. void rotiraj_matricu_udesno_za_90_stepeni( int M[][MAX_SIZE], int r, int k )
  197. {
  198.     int M1[MAX_SIZE][MAX_SIZE]; // deklarisemo novu matricu M1
  199.     int i,j;
  200.  
  201.     // Matricu M kopiramo u matricu M1
  202.     kopiraj_matricu(M1,M,r,k);  // kopira matricu M u matricu M1
  203.  
  204.     // Ponovo formiramo matricu M tako sto iz matrice M1 uzimamo
  205.     // odgovarajuce elemente i stavljamo ih u matricu M.
  206.     for(i=0;i<r;i++)        // za sve redove matrice M
  207.         for(j=0;j<k;j++)        // za sve kolone matrice M
  208.             M[i][j] = M1[k-1-j][i];
  209. }
  210.  
  211.  
  212. // Rotira matricu ulevo za 90 stepeni.
  213. void rotiraj_matricu_ulevo_za_90_stepeni( int M[][MAX_SIZE], int r, int k )
  214. {
  215.     int M1[MAX_SIZE][MAX_SIZE]; // deklarisemo novu matricu M1
  216.     int i,j;
  217.  
  218.     // Matricu M kopiramo u matricu M1
  219.     kopiraj_matricu(M1,M,r,k);  // kopira matricu M u matricu M1
  220.  
  221.     // Ponovo formiramo matricu M tako sto iz matrice M1 uzimamo
  222.     // odgovarajuce elemente i stavljamo ih u matricu M.
  223.     for(i=0;i<r;i++)        // za sve redove matrice M
  224.         for(j=0;j<k;j++)        // za sve kolone matrice M
  225.             M[i][j] = M1[j][r-1-i];
  226. }
  227.  
  228.  
  229. // Rotira matricu oko horizontalne ose.
  230. void rotiraj_matricu_oko_horizontalne_ose( int M[][MAX_SIZE], int r, int k )
  231. {
  232.     int M1[MAX_SIZE][MAX_SIZE]; // deklarisemo novu matricu M1
  233.     int i,j;
  234.  
  235.     // Matricu M kopiramo u matricu M1
  236.     kopiraj_matricu(M1,M,r,k);  // kopira matricu M u matricu M1
  237.  
  238.     // Ponovo formiramo matricu M tako sto iz matrice M1 uzimamo
  239.     // odgovarajuce elemente i stavljamo ih u matricu M.
  240.     for(i=0;i<r;i++)        // za sve redove matrice M
  241.         for(j=0;j<k;j++)        // za sve kolone matrice M
  242.             M[i][j] = M1[r-i-1][j];
  243. }
  244.  
  245.  
  246. // Rotira matricu oko vertikalne ose.
  247. void rotiraj_matricu_oko_vertikalne_ose( int M[][MAX_SIZE], int r, int k )
  248. {
  249.     int M1[MAX_SIZE][MAX_SIZE]; // deklarisemo novu matricu M1
  250.     int i,j;
  251.  
  252.     // Matricu M kopiramo u matricu M1
  253.     kopiraj_matricu(M1,M,r,k);  // kopira matricu M u matricu M1
  254.  
  255.     // Ponovo formiramo matricu M tako sto iz matrice M1 uzimamo
  256.     // odgovarajuce elemente i stavljamo ih u matricu M.
  257.     for(i=0;i<r;i++)        // za sve redove matrice M
  258.         for(j=0;j<k;j++)        // za sve kolone matrice M
  259.             M[i][j] = M1[i][k-1-j];
  260. }
  261.  
  262.  
  263.  
  264. int main(void)
  265. {
  266.     int M[MAX_SIZE][MAX_SIZE];
  267.  
  268.     int i, r=4, k=4;   // r je broj redova a k je broj kolona matrice M[][]
  269.  
  270. /*
  271.     printf("\n Unesi broj redova matrice M[r][k] (manji od 21) : r = ");
  272.     scanf("%d", &r);
  273.     printf("\n");
  274.  
  275.     printf("\n Unesi broj kolona matrice M[%d][k] (manji od 21) : k = ",r);
  276.     scanf("%d", &k);
  277.     printf("\n");
  278.  
  279.     if ( r > 20 || k > 20 ) {
  280.         printf("\n Zbog prikaza nema smisla da broj redova matrice bude veci od 20 \n");
  281.         printf("\n ili broj kolona matrice bude veci od 20 !!! \n");
  282.         exit(1);
  283.     }
  284. */
  285.  
  286.     formiraj_matricu(M,r,k);
  287.     prikazi_matricu(" Matrica M je: ",M,r,k);
  288.  
  289.     printf("\n Funkcije koje ne menjaju matricu M vec je samo prikazju izmenjenu : \n\n");
  290.  
  291.     printf(" \n Matrica rotirana udesno za 90 stepeni je: \n\n");
  292.     prikazi_matricu_rotiranu_udesno_za_90_stepeni(M,r,k);
  293.  
  294.     printf(" \n Matrica rotirana udesno za 90 stepeni v1 je: \n\n");
  295.     prikazi_matricu_rotiranu_udesno_za_90_stepeni_v1(M,r,k);
  296.  
  297.     printf(" \n Matrica rotirana udesno za 90 stepeni v2 je: \n\n");
  298.     prikazi_matricu_rotiranu_udesno_za_90_stepeni_v2(M,r,k);
  299.  
  300.     printf(" \n Matrica rotirana ulevo za 90 stepeni je: \n\n");
  301.     prikazi_matricu_rotiranu_ulevo_za_90_stepeni(M,r,k);
  302.  
  303.     printf(" \n Matrica rotirana oko horizontalne ose je: \n\n");
  304.     prikazi_matricu_rotiranu_oko_horizontalne_ose(M,r,k);
  305.  
  306.     printf(" \n Matrica rotirana oko horizontalne ose v1 je: \n\n");
  307.     prikazi_matricu_rotiranu_oko_horizontalne_ose_v1(M,r,k);
  308.  
  309.     printf(" \n Matrica rotirana oko vertikalne ose je: \n\n");
  310.     prikazi_matricu_rotiranu_oko_vertikalne_ose(M,r,k);
  311.  
  312.     printf(" \n Matrica rotirana oko vertikalne ose v1 je: \n\n");
  313.     prikazi_matricu_rotiranu_oko_vertikalne_ose_v1(M,r,k);
  314.  
  315.     prikazi_matricu(" Matrica M je: ",M,r,k);
  316.  
  317.  
  318.     printf("\n Funkcije koje menjaju matricu M : \n\n");
  319.  
  320.     rotiraj_matricu_udesno_za_90_stepeni(M,r,k);
  321.     prikazi_matricu(" Matrica rotirana udesno za 90 stepeni je: ",M,r,k);
  322.  
  323.     formiraj_matricu(M,r,k);    // resetujemo matricu M jer je bila izmenjena
  324.     rotiraj_matricu_ulevo_za_90_stepeni(M,r,k);
  325.     prikazi_matricu(" Matrica rotirana ulevo za 90 stepeni je: ",M,r,k);
  326.  
  327.     formiraj_matricu(M,r,k);    // resetujemo matricu M jer je bila izmenjena
  328.     rotiraj_matricu_oko_horizontalne_ose(M,r,k);
  329.     prikazi_matricu(" Matrica rotirana oko horizontalne ose je: ",M,r,k);
  330.  
  331.     formiraj_matricu(M,r,k);    // resetujemo matricu M jer je bila izmenjena
  332.     rotiraj_matricu_oko_vertikalne_ose(M,r,k);
  333.     prikazi_matricu(" Matrica rotirana oko vertikalne ose je: ",M,r,k);
  334.  
  335.     formiraj_matricu(M,r,k);    // resetujemo matricu M jer je bila izmenjena
  336.     prikazi_matricu(" Matrica M je: ",M,r,k);
  337.  
  338.  
  339.     return 0;
  340. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement