Advertisement
tiberiup

Untitled

Nov 1st, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.82 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. class productie
  8. {
  9. string stanga,dreapta;
  10.  
  11. public:
  12. productie();
  13. productie(string s, string d);
  14. void determinaProductie(string s);
  15. void afiseaza();
  16. void determinaSimboluri(string& neterminale, string& terminale);
  17. };
  18.  
  19. void citesteProductii(productie productii[], string& neterminale, string& terminale);
  20. void afiseazaSimboluri(string neterminale, string terminale);
  21.  
  22. int main()
  23. {
  24. productie* p;
  25. string n,t;
  26. citesteProductii(p,n,t);
  27. afiseazaSimboluri(n,t);
  28. return 0;
  29. }
  30.  
  31. productie::productie()
  32. {
  33. stanga=dreapta="";
  34. }
  35.  
  36. productie::productie(string s, string d)
  37. {
  38. stanga=s;
  39. dreapta=d;
  40. }
  41.  
  42. void productie::determinaProductie(string s)
  43. {
  44. int i;
  45. for(i=0;s[i]!='\0'&&(s[i]!='-'||s[i+1]!='>');i++)
  46. stanga+=s[i];
  47. if(s[i]=='\0')
  48. {
  49. cout<<"Productie gresita"<<endl;
  50. return ;
  51. }
  52. for(i+=2;s[i]!='\0';i++)
  53. dreapta+=s[i];
  54. }
  55.  
  56. void productie::afiseaza()
  57. {
  58. cout<<"Stanga: "<<stanga<<" Dreapta: "<<dreapta<<endl;
  59. }
  60.  
  61. void productie::determinaSimboluri(string& neterminale, string& terminale)
  62. {
  63. int i;
  64. for(i=0;stanga[i]!='\0';i++)
  65. {
  66. if(stanga[i]>='A'&&stanga[i]<='Z'&&neterminale.find(stanga[i])==string::npos)
  67. neterminale+=stanga[i];
  68. if(stanga[i]>='a'&&stanga[i]<='z'&&terminale.find(stanga[i])==string::npos)
  69. terminale+=stanga[i];
  70. }
  71.  
  72. for(i=0;dreapta[i]!='\0';i++)
  73. {
  74. if(dreapta[i]>='A'&&dreapta[i]<='Z'&&neterminale.find(dreapta[i])==string::npos)
  75. neterminale+=dreapta[i];
  76. if(dreapta[i]>='a'&&dreapta[i]<='z'&&terminale.find(dreapta[i])==string::npos)
  77. terminale+=dreapta[i];
  78. }
  79. }
  80.  
  81. void citesteProductii(productie productii[], string& neterminale, string& terminale)
  82. {
  83. ifstream f("in.txt");
  84. if(!f)
  85. {
  86. cout<<"Eroare la citire din fisier";
  87. return ;
  88. }
  89.  
  90. int n,i;
  91. string s;
  92. f>>n;
  93. getline(f,s);
  94. productii=new productie[n];
  95. for(i=0;i<n;i++)
  96. {
  97. getline(f,s);
  98. productii[i].determinaProductie(s);
  99. productii[i].afiseaza();
  100. productii[i].determinaSimboluri(neterminale,terminale);
  101. }
  102. }
  103.  
  104. void afiseazaSimboluri(string neterminale, string terminale)
  105. {
  106. int i;
  107. cout<<"N=";
  108. if(neterminale=="")
  109. cout<<"Ø";
  110. else
  111. {
  112. cout<<"{"<<neterminale[0];
  113. for(i=1;neterminale[i]!='\0';i++)
  114. cout<<", "<<neterminale[i];
  115. cout<<"}";
  116. }
  117. cout<<endl;
  118. cout<<"T=";
  119. if(terminale=="")
  120. cout<<"Ø";
  121. else
  122. {
  123. cout<<"{"<<terminale[0];
  124. for(i=1;terminale[i]!='\0';i++)
  125. cout<<", "<<terminale[i];
  126. cout<<"}";
  127. }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement