Tucancitto

FAI - PROGRAM1

Dec 14th, 2020 (edited)
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #pragma warning(disable: 4996)
  2. //In monoidul liber generat de un alfabet I,
  3. //fie cuvintele p,q,r astfel incat p*q^k=r^k*p si se dau lungimile cuvintelor p si q.
  4. //Sa se determine p si q in functie de simbolurile cuvantului r.
  5.  
  6. #include <iostream>
  7. #include <fstream>
  8. #include <cstring>
  9. #include <cmath>
  10. using namespace std;
  11.  
  12. void citireDate(int& k, int& lp, int& lq)
  13. {
  14.     ifstream fin("intrare.txt");
  15.     fin >> k >> lp >> lq;
  16. }
  17. void afisareDate(int& k, int& lp, int& lq, char p[], char q[])
  18. {
  19.     ofstream fout("iesire.txt");
  20.  
  21.     //afisam datele introduse in fisierul de iesire
  22.     fout << "Date introduse:\n";
  23.     fout << "k=" << k;
  24.     fout << "\nl(p)=" << lp;
  25.     fout << "\nl(q)=" << lq;
  26.     fout << "\n\n";
  27.  
  28.     //afisam p
  29.     fout << "Cuvantul p este: " << p << "\n";
  30.     //afisam q
  31.     fout << "Cuvantul q este: " << q << "\n";
  32. }
  33.  
  34. int nrCifre(int x)
  35. {
  36.     int nrCif = 0;
  37.     do
  38.     {
  39.         nrCif++;
  40.         x /= 10;
  41.     } while (x != 0);
  42.     return nrCif;
  43. }
  44.  
  45. void adaugareCifre(char v[], int& dim, int nr)
  46. {
  47.     int cifre = nrCifre(nr);
  48.     for (int k = cifre; k > 1; k--)
  49.     {
  50.         int p = pow(10, k - 1);
  51.         v[dim++] = '0' + nr / p % 10;
  52.     }
  53.     v[dim++] = '0' + nr % 10;
  54. }
  55.  
  56. void concat(char v[], int& dim, int nr)
  57. {
  58.     v[dim++] = 'a';
  59.     v[dim++] = '_';
  60.     adaugareCifre(v, dim, nr);
  61. }
  62.  
  63. void formareP(int lp, int lq, char p[])
  64. {
  65.     int lungSirP = 0;
  66.     if (lp / lq > 0)
  67.     {
  68.         strcpy(p, "r^");
  69.         lungSirP = 2;
  70.         adaugareCifre(p, lungSirP, lp / lq);
  71.     }
  72.     for (int i = 1; i <= lp % lq; i++)
  73.         concat(p, lungSirP, i);
  74.     p[lungSirP] = NULL;
  75. }
  76.  
  77. void formareQ(int lp, int lq, char q[])
  78. {
  79.     int lungSirQ = 0, nrq = 0;
  80.     for (int i = lp % lq + 1; i <= lq; i++)
  81.         concat(q, lungSirQ, i);
  82.     for (int i = 1; i <= lp % lq; i++)
  83.         concat(q, lungSirQ, i);
  84.     q[lungSirQ] = NULL;
  85. }
  86.  
  87. int main()
  88. {
  89.     int k, lp, lq;
  90.     char p[1000], q[1000];
  91.     citireDate(k, lp, lq);
  92.     formareP(lp, lq, p);
  93.     formareQ(lp, lq, q);
  94.     afisareDate(k, lp, lq, p, q);
  95.     return 0;
  96. }
Add Comment
Please, Sign In to add comment