Facebook
  1. //TWORZENIE MACIERZY : PROBLEM A, AUTOR  URSZULA SKOTNY
  2.  
  3. #include <iostream>
  4. #include <fstream>
  5. #include <string>
  6. //#include "stdafx.h"
  7.  
  8. using namespace std;
  9.  
  10. void T(char **M_pocz, int rozmiarMacierzy);
  11. void D(char **M_pocz, int rozmiarMacierzy);
  12. void H(char **M_pocz, int rozmiarMacierzy);
  13. void V(char **M_pocz, int rozmiarMacierzy);
  14.  
  15. void A(char **M_pocz, int rozmiarMacierzy);
  16. void B(char **M_pocz, int rozmiarMacierzy);
  17. void C(char **M_pocz, int rozmiarMacierzy);
  18. void X(char **M_pocz, int rozmiarMacierzy);
  19. void Y(char **M_pocz, int rozmiarMacierzy);
  20. void Z(char **M_pocz, int rozmiarMacierzy);
  21.  
  22. void Show(char **M_pocz, int rozmiarMacierzy);
  23.  
  24. int main(int argc, char*argv[])
  25. {
  26.         string linia;
  27.        
  28.         getline(cin, linia);
  29.  
  30.         int iloscTestow = stoi(linia); // Funkcja stoi konwertuje sekwencję znaków w _Str do wartości typu int i zwraca wartość
  31.  
  32.         for (int i = 0; i < iloscTestow; i++) // mowię ile razy ma sie wykonać - czyli ilośc testow
  33.         {
  34.                 // pobranie rozmiaru macierzy
  35.                 getline(cin, linia);
  36.                 int rozmiarMacierzy = stoi(linia);
  37.  
  38.                 // alokacja pamieci odpowiednio przydział i zwolnienie ciągłego obszaru pamięci.
  39.                 char **macierz = new char*[rozmiarMacierzy];
  40.  
  41.                 for (int j = 0; j < rozmiarMacierzy; j++)
  42.                 {
  43.                         macierz[j] = new char[rozmiarMacierzy];
  44.                 }
  45.  
  46.                 // wczytanie danych z pliku wejsciowego
  47.                 for (int j = 0; j < rozmiarMacierzy; j++)
  48.                 {
  49.                         getline(cin, linia);
  50.                         for (int k = 0; k < rozmiarMacierzy; k++)
  51.                         {
  52.                                 macierz[j][k] = linia[k];
  53.                         }
  54.                 }
  55.  
  56.                 string operacje;
  57.                 getline(cin, operacje); // bierz skad i co
  58.  
  59.                 int iloscOperacji = operacje.length() - 1;
  60.  
  61.                 for (int j = 0; j < iloscOperacji; j++)
  62.                 {
  63.                         switch (operacje[j])
  64.                         {
  65.                         case 'T':
  66.                                 T(macierz, rozmiarMacierzy);
  67.                                 break;
  68.                         case 'D':
  69.                                 D(macierz, rozmiarMacierzy);
  70.                                 break;
  71.                         case 'H':
  72.                                 H(macierz, rozmiarMacierzy);
  73.                                 break;
  74.                         case 'V':
  75.                                 V(macierz, rozmiarMacierzy);
  76.                                 break;
  77.  
  78.                         case 'A':
  79.                                 A(macierz, rozmiarMacierzy);
  80.                                 break;
  81.                         case 'B':
  82.                                 B(macierz, rozmiarMacierzy);
  83.                                 break;
  84.                         case 'C':
  85.                                 C(macierz, rozmiarMacierzy);
  86.                                 break;
  87.  
  88.                         case 'X':
  89.                                 X(macierz, rozmiarMacierzy);
  90.                                 break;
  91.                         case 'Y':
  92.                                 Y(macierz, rozmiarMacierzy);
  93.                                 break;
  94.                         case 'Z':
  95.                                 Z(macierz, rozmiarMacierzy);
  96.                                 break;
  97.                         }
  98.                 }
  99.  
  100.                         // zapis do pliku wyjsciowego
  101.                 for (int j = 0; j < rozmiarMacierzy; j++)
  102.                 {
  103.                         for (int k = 0; k < rozmiarMacierzy; k++)
  104.                         {
  105.                                 cout << (char)macierz[j][k];
  106.                         }
  107.                         cout << endl;
  108.                 }
  109.                        
  110.         }
  111. }
  112.  
  113. void T(char **M_pocz, int rozmiarMacierzy)
  114. // M_pocz - macierz pocżatkowa. czyli wejściowa
  115. {
  116.         char **m_pocz = new char *[rozmiarMacierzy];
  117.         //m_pocz - macierz końcowa, czyli wyjściowa
  118.         for (int i = 0; i < rozmiarMacierzy; i++) m_pocz[i] = new char[rozmiarMacierzy];
  119.         for (int i = 0; i < rozmiarMacierzy; i++)
  120.         {
  121.                 for(int j=0; j< rozmiarMacierzy; j++)
  122.                 {
  123.                         m_pocz[j][i] = M_pocz[i][j];
  124.                 }      
  125.         }
  126.         for (int i = 0; i < rozmiarMacierzy; i++)
  127.         {
  128.                 for (int j = 0; j < rozmiarMacierzy; j++)
  129.                 {
  130.                         M_pocz[i][j] = m_pocz[i][j];
  131.                 }
  132.  
  133.  
  134.         }
  135. }
  136. void D(char **M_pocz, int rozmiarMacierzy)
  137. {
  138.         char **m_pocz = new char*[rozmiarMacierzy];
  139.         for (int i = 0; i < rozmiarMacierzy; i++) m_pocz[i] = new char[rozmiarMacierzy];
  140.         for (int i = 0; i < rozmiarMacierzy; i++)
  141.         {
  142.                 for (int j = 0; j < rozmiarMacierzy; j++)
  143.                 {
  144.                         m_pocz[rozmiarMacierzy - j - 1][rozmiarMacierzy - i - 1] = M_pocz[i][j];
  145.                 }
  146.         }
  147.         for (int i = 0; i < rozmiarMacierzy; i++)
  148.         {
  149.                 for (int j = 0; j < rozmiarMacierzy; j++)
  150.                 {
  151.                         M_pocz[i][j] = m_pocz[rozmiarMacierzy- i-1][j];
  152.                 }
  153.  
  154.         }
  155.  
  156.  
  157.        
  158.  
  159.  
  160.  
  161.  
  162. }
  163. void H(char **M_pocz, int rozmiarMacierzy)
  164. {
  165.         char **m_pom = new char *[rozmiarMacierzy];
  166.         for (int i = 0; i < rozmiarMacierzy; i++)  m_pom[i] = new char[rozmiarMacierzy];
  167.         for (int i = 0; i < rozmiarMacierzy; i++)
  168.         {
  169.                 for (int j = 0; j < rozmiarMacierzy; j++)
  170.                 {
  171.                         m_pom[i][rozmiarMacierzy - j - 1] = M_pocz[i][j];
  172.                 }
  173.         }
  174.         for (int i = 0; i < rozmiarMacierzy; i++)
  175.         {
  176.                 for (int j = 0; j < rozmiarMacierzy; j++)
  177.                 {
  178.                         M_pocz[i][j] = m_pom[rozmiarMacierzy - j - 1][i];
  179.                 }
  180.         }
  181.  
  182. }
  183. void V(char **M_pocz, int rozmiarMacierzy)
  184. {
  185.         char **m_pom = new char *[rozmiarMacierzy];
  186.         for (int i = 0; i < rozmiarMacierzy; i++)  m_pom[i] = new char[rozmiarMacierzy];
  187.         for (int i = 0; i < rozmiarMacierzy; i++)
  188.         {
  189.                 for (int j = 0; j <rozmiarMacierzy; j++)
  190.                 {
  191.                         m_pom[rozmiarMacierzy - i - 1][j] = M_pocz[i][j];
  192.                 }
  193.         }
  194.         for (int i = 0; i < rozmiarMacierzy; i++)
  195.         {
  196.                 for (int j = 0; j <rozmiarMacierzy; j++)
  197.                 {
  198.                         M_pocz[i][j] = m_pom[j][rozmiarMacierzy - i - 1];
  199.                 }
  200.         }
  201. }
  202.  
  203. void A(char ** M_pocz, int rozmiarMacierzy) //Obrót w prawo o 90st
  204. {
  205.         char **m_pom = new char *[rozmiarMacierzy];
  206.  
  207.         for (int i = 0; i < rozmiarMacierzy; i++)
  208.                 m_pom[i] = new char[rozmiarMacierzy];
  209.  
  210.         for (int i = 0; i < rozmiarMacierzy; i++)
  211.         {
  212.                 for (int j = 0; j <rozmiarMacierzy; j++)
  213.                 {
  214.  
  215.                         m_pom[j][rozmiarMacierzy - i - 1] = M_pocz[i][j];
  216.                 }
  217.         }
  218.         for (int i = 0; i < rozmiarMacierzy; i++)
  219.         {
  220.                 for (int j = 0; j < rozmiarMacierzy; j++)
  221.                 {
  222.                         M_pocz[i][j] = m_pom[i][j];
  223.                 }
  224.         }
  225. }
  226. void B(char ** M_pocz, int rozmiarMacierzy ) // obrót w prawo o 180st
  227. {
  228.         for (int i = 0; i < 2; i++) A(M_pocz, rozmiarMacierzy); // wykorzystanie sposobu z A- skracanie kodu
  229. }
  230. void C(char ** M_pocz, int rozmiarMacierzy) // obrót o 270st w prawo
  231. {
  232.         for (int i = 0; i < 3; i++) A(M_pocz,rozmiarMacierzy );
  233. }
  234. void X(char ** M_pocz, int rozmiarMacierzy) // obrót w lewo o 90
  235. {
  236.         char **m_pom = new char *[rozmiarMacierzy];
  237.         for (int i = 0; i < rozmiarMacierzy; i++) m_pom[i] = new char[rozmiarMacierzy];
  238.         for (int i = 0; i <rozmiarMacierzy; i++)
  239.         {
  240.                 for (int j = 0; j < rozmiarMacierzy; j++)
  241.                 {
  242.  
  243.                         m_pom[rozmiarMacierzy - j - 1][i] = M_pocz[i][j];
  244.                 }
  245.         }
  246.         for (int i = 0; i <rozmiarMacierzy; i++)
  247.         {
  248.                 for (int j = 0; j < rozmiarMacierzy; j++)
  249.                 {
  250.                         M_pocz[i][j] = m_pom[i][j];
  251.                 }
  252.         }
  253. }
  254. void Y(char **M_pocz, int rozmiarMacierzy) // obrót w lewo o 180
  255. {
  256.         for (int i = 0; i < 2; i++) X(M_pocz, rozmiarMacierzy); // wykorzystanie fukcji X
  257. }
  258. void Z(char **M_pocz, int rozmiarMacierzy)
  259. {
  260.         for (int i = 0; i < 3; i++) X(M_pocz, rozmiarMacierzy);
  261. }
  262.  
  263. void Show(char **M_pocz, int rozmiarMacierzy)
  264. {
  265.         for (int i = 0; i < rozmiarMacierzy; i++)
  266.         {
  267.                 for (int j = 0; j < rozmiarMacierzy; j++)
  268.                 {
  269.                         cout << "[" << M_pocz[i][j] << "]\t";
  270.                 }
  271.                 cout << endl;
  272.         }
  273. }
  274.