lud202310info.cpp

  1  #include <iostream>         // cin, cout
  2  #include <fstream>          // fájlkezelés
  3  #include <vector>           // vector adattípus
  4  #include <string>           // szöveg adattípus
  5  #include <algorithm>        // maximum (max_element)
  6  
  7  using namespace std;
  8  
  9  void feladat(int f)
 10  {
 11      printf("-------------------------------------------------------------------------\n");
 12      printf("%d. feladat\n" ,f);
 13      printf("-------------------------------------------------------------------------\n");
 14  }
 15  
 16  void F1_2(vector<string> &osv, vector<int> &dob)
 17  {
 18      ifstream fbe;
 19      fbe.open("osvenyek.txt");
 20      string temp;
 21      while(fbe >> temp)
 22      {
 23          osv.push_back(temp);
 24      }
 25      fbe.close();
 26      fbe.open("dobasok.txt");
 27      int itemp;
 28      while(fbe >> itemp)
 29      {
 30          dob.push_back(itemp);
 31      }
 32      cout << endl;
 33      feladat(2);
 34      cout << "A dobások száma: " << dob.size() << endl;
 35      cout << "Az ösvények száma: " << osv.size() << endl;
 36  }
 37  
 38  bool max_szempont(string a, string b)
 39  {
 40      return a.length() < b.length();
 41  }
 42  
 43  void F3(vector<string> osv)
 44  {
 45      feladat(3);
 46      vector<string>::iterator it = max_element(osv.begin(),osv.end(),[](string a, string b) {return a.size() < b.size();});
 47      string maxh = *it;
 48      cout << "Az egyik leghosszabb a(z) " << it - osv.begin() + 1 << ". ösvény, hossza: " << maxh.size() << endl;
 49  }
 50  
 51  void F4(vector<string> osv, vector<int> dob, int &os, int &jsz)
 52  {
 53      feladat(4);
 54      cout << "Adja meg egy ösvény sorszámát! ";
 55      cin >> os;
 56      cout << "Adja meg a játékosok számát! ";
 57      cin >> jsz;
 58  }
 59  
 60  void F5(vector<string> osv, int os)
 61  {
 62      feladat(5);
 63      vector<char> mezok={'M','V','E'};
 64      int db;
 65      for(char mezo:mezok)
 66      {
 67          db = count(osv[os].begin(),osv[os].end(),mezo);
 68          if(db>0) printf("%c: %d darab\n",mezo,db);
 69      }
 70  }
 71  
 72  void F6(vector<string> osv, int os)
 73  {
 74      ofstream fki;
 75      fki.open("kulonleges.txt");
 76      char mezo;
 77      for(auto i=0;i<osv[os].size();i++)
 78      {
 79          mezo=osv[os][i];
 80          if(mezo!='M') fki << i+1 << "\t" << mezo << endl;
 81      }
 82      fki.close();
 83  }
 84  
 85  void F7(vector<string> osv, vector<int> dob, int os, int jsz)
 86  {
 87      feladat(7);
 88      vector<int> pozicio={0,0,0,0,0};       // max. 5 játékos lehet
 89      int vege,nyertes=0;
 90      for(auto i=0;i<dob.size()-jsz;i+=jsz)
 91      {
 92          for(auto j=0;j<jsz;j++)
 93          {
 94              pozicio[j]+=dob[i+j];
 95              if(pozicio[j]>=osv[os].size())
 96                  nyertes=j+1;
 97                  vege=i/jsz+1;
 98          }
 99          if(nyertes!=0) break;
100      }
101      printf("A játék a(z) %d. körben fejeződött be. A legtávolabb jutó(k) sorszáma: %d\n",vege,nyertes);
102  }
103  
104  void F8(vector<string> osv, vector<int> dob, int os, int jsz)
105  {
106      feladat(8);
107      vector<int> pozicio={0,0,0,0,0};       // max. 5 játékos lehet
108      vector<int> nyertesek={};
109      int vege=0;
110      for(auto i=0;i<dob.size()-jsz;i+=jsz)
111      {
112          for(auto j=0;j<jsz;j++)
113          {
114              pozicio[j]+=dob[i+j];
115              if(pozicio[j]<osv[os].size())
116              {
117                  switch(osv[os][pozicio[j]-1])
118                  {
119                      case 'V': pozicio[j]-=dob[i+j]; break;
120                      case 'E': pozicio[j]+=dob[i+j];
121                  }
122              }
123              if(pozicio[j]>=osv[os].size()) nyertesek.push_back(j+1);
124          }
125          if(nyertesek.size()>0) break;
126      }
127      cout << "Nyertes(ek): ";
128      for(auto i=0;i<nyertesek.size();i++)
129      {
130          cout << nyertesek[i] << " ";
131      }
132      if(nyertesek.size()==jsz)
133          cout << "Mindenki nyertes!" << endl;
134      else
135      {
136          cout << "\nA többiek pozíciója:" << endl;
137          for(auto i=0;i<jsz;i++)
138          {
139              if(pozicio[i] < osv[os].size())
140                  cout << i+1 << ". játékos, " << pozicio[i] << ". mező" << endl;
141          }
142      }
143  }
144  
145  int main()
146  {
147      setlocale(LC_ALL,"");
148      // adatok
149      cout << "TÁRSAS - 2023. október emelt informatika" << endl;
150      vector<string> osvenyek;
151      vector<int> dobasok;
152      int os, jsz;
153      F1_2(osvenyek, dobasok);
154      F3(osvenyek);
155      F4(osvenyek, dobasok, os, jsz);
156      F5(osvenyek,os-1);
157      F6(osvenyek,os-1);
158      F7(osvenyek, dobasok, os-1, jsz);
159      F8(osvenyek, dobasok, os-1, jsz);
160  
161      return 0;
162  }