Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. #include <bits/stdc++.h>
  5.  
  6. using namespace std;
  7.  
  8. ifstream f("graf.in");
  9.  
  10. void citireMatrice(int &n, int A[][51])
  11. {///Citeste din fisier elementele matricei patratice A
  12.     f>>n;
  13.     for (int  i = 1; i <= n; i++)
  14.         for (int j = 1; j <= n; j++)
  15.             f>>A[i][j];
  16. }
  17.  
  18. void afisareSir(int n, int X[])
  19. {///Afiseaza elementele sirului de numere X
  20.     if (n == 0)
  21.         cout<<"Sirul X este vid";
  22.     else
  23.         for (int i = 1; i <= n; i++)
  24.             cout<<X[i]<<' ';
  25. }
  26.  
  27. void mutareElementeLaDreapta(int &n, int X[], int poz)
  28. {///Muta toate elementele incepand cu pozitia "poz" cu un element la dreapta
  29.     n++;
  30.     for (int i = n; i >= poz; i--)
  31.         X[i] = X[i-1];
  32. }
  33.  
  34. bool isPrim(int nr)
  35. {///Verifica daca numarul este unul prim
  36.     if (nr < 2)
  37.         return false;
  38.     for (int d = 2; d*d <= nr; d++)
  39.         if (nr % d == 0)
  40.             return false;
  41.     return true;
  42. }
  43.  
  44. bool isSuperPrim(int nr)
  45. {///Ia la rand numarul si toate prefixele sale, verificand daca toate sunt prime
  46.     do{
  47.         if (!isPrim(nr))
  48.             return false;
  49.         nr/=10;
  50.     }while(nr > 0);
  51.     return true;
  52. }
  53.  
  54. void inserareElementInSirDescrescator(int &n, int X[], int el)
  55. {///Insereaza un element dat, "el", in sirul X ordonat descrescator astfel incat sa se pastreze ordonarea, evitand inserarea elementelor deja prezente in sir
  56.  
  57.     int ok = 0; ///Verifica daca am inserat elementul
  58.     for (int i = 1; i <= n && ok == 0; i++)
  59.     {
  60.         if (el == X[i])
  61.         {///Nu se insereaza elemente identice
  62.             ok = 1;
  63.         }
  64.         else
  65.             if (el > X[i])
  66.             {
  67.                 ok = 1; ///Am terminat de inserat
  68.                 mutareElementeLaDreapta(n,X,i);
  69.                 X[i] = el;
  70.             }
  71.     }
  72.     if (ok == 0)///Daca nu am inserat elementul in vector, atunci il inseram la final
  73.     {
  74.         n++;
  75.         X[n] = el;
  76.         ok = 1;
  77.     }
  78. }
  79.  
  80. void parcurgereTriunghiStang(int n, int A[][51], int &lungimeSir, int X[])
  81. {///Parcurge toate elementele din triunghiul stang al matricei partatice A si insereaza elementele superprime in sirul X
  82.     for (int j = 1; j <= n/2; j++)
  83.         for (int i = j + 1; i <= n-j; i++)
  84.             if (isSuperPrim(A[i][j]))
  85.                 inserareElementInSirDescrescator(lungimeSir,X,A[i][j]);
  86. }
  87.  
  88. void parcurgereTriunghiDrept(int n, int A[][51], int &lungimeSir, int X[])
  89. {///Parcurge toate elementele din triunghiul drept al matricei partatice A si insereaza elementele superprime in sirul X
  90.     for (int j = 1; j <= n/2; j++)
  91.         for (int i = j + 1; i <= n-j; i++)
  92.             if (isSuperPrim(A[i][n-j+1]))
  93.                 inserareElementInSirDescrescator(lungimeSir,X,A[i][n-j+1]);
  94. }
  95.  
  96. void construireSirX(int n, int A[][51], int &lungimeSir, int X[])
  97. {///Construieste sirul X parcurgand triunghiul stang si cel drept al matricei patratice A, inserand in sir elementel superprime
  98.     parcurgereTriunghiStang(n,A,lungimeSir,X);
  99.     parcurgereTriunghiDrept(n,A,lungimeSir,X);
  100. }
  101.  
  102.  
  103. int main()
  104. {
  105.     int n, lungimeSir = 0;
  106.     int A[51][51];
  107.     int X[2501];
  108.     citireMatrice(n,A);
  109.     construireSirX(n,A,lungimeSir,X);
  110.     afisareSir(lungimeSir,X);
  111.     return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement