|
lift200905_C++.cpp
|
|
1 #include <iostream> // cin és cout parancsok
2 #include <fstream> // fájlkezelés
3 #include <vector> // vector adattípushoz
4 #include <set> // set (halmaz) adattípushoz
5 #include <algorithm> // min és max függvények
6 #include <ctime> // srand és rand függvények (véletlenszámok)
7
8 using namespace std;
9
10 struct igeny
11 {
12 int o, p, mp, cs, be, ki;
13 };
14
15 int hely; // 2. és 5. feladat
16 int cspszam; // 6. és 7. feladat
17 int szintek; // 4. feladat
18 int csapat; // 7. feladat
19 set<int> nem; // 7. feladat
20
21 void F1(vector<igeny> &igenyek)
22 {
23 cout << "1. feladat - adatok beolvasása..." << endl;
24 igeny temp;
25 ifstream fbe;
26 fbe.open("igeny.txt");
27 int igenyszam;
28 fbe >> szintek;
29 fbe >> cspszam;
30 fbe >> igenyszam;
31 while(fbe>>temp.o&&fbe>>temp.p&&fbe>>temp.mp&&fbe>>temp.cs&&fbe>>temp.be&&fbe>>temp.ki)
32 {
33 igenyek.push_back(temp);
34 }
35 fbe.close();
36 /*
37 for(auto elem:igenyek)
38 cout << elem.o << " " << elem.p << " " << elem.mp << " " << elem.cs << " " << elem.be << " " << elem.ki << endl;
39 */
40 }
41
42 void F2()
43 {
44 cout << "****************************************************************\n2. feladat" << endl;
45 cout << "Kérem a lift indulási helyét! ";
46 cin >> hely;
47 }
48
49 void F3(vector<igeny> igenyek)
50 {
51 cout << "****************************************************************\n3. feladat" << endl;
52 int utolso=igenyek[igenyek.size()-1].ki;
53 printf("A lift a(z) %d. szinten áll az utolsó igény teljesítése után.\n", utolso);
54 }
55
56 void F4(vector<igeny> igenyek)
57 {
58 cout << "****************************************************************\n4. feladat" << endl;
59 int min_sz=szintek;
60 int max_sz=0;
61 for(auto elem:igenyek)
62 {
63 min_sz=min(min_sz,min(elem.be,elem.ki));
64 max_sz=max(max_sz,max(elem.be,elem.ki));
65 }
66 printf("A legalacsonyabb szint: %d\n", min_sz);
67 printf("A legmagasabb szint...: %d\n", max_sz);
68 }
69
70 void F5(vector<igeny> igenyek)
71 {
72 cout << "****************************************************************\n5. feladat" << endl;
73 int aktual=hely; // ez az a hely, ahol a legelején áll a lift (lsd. 2. feladat)
74 int ures=0, utas=0; // megfelelő számlálók inicializálása
75 for(auto elem:igenyek) // végigmegyünk az igényeken...
76 {
77 if(elem.be<elem.ki) utas++; // ha induló szint kisebb, akkor felfelé megy utassal
78 if(elem.be>aktual) ures++; // ha a lift alacsonyabb szinten van a híváskor, akkor üresen megy fel a szerelőkhöz
79 aktual=elem.ki; // ahol kiszállnak az lesz az "új" altuális hely
80 }
81 printf("A lift %d alkalommal ment felfelé utasokkal.\n", utas);
82 printf("A lift %d alkalommal ment felfelé utasok nélkül.\n", ures);
83 }
84
85 void F6(vector<igeny> igenyek)
86 {
87 cout << "****************************************************************\n6. feladat" << endl;
88 int csapatok[cspszam]={0};
89 for(auto elem:igenyek)
90 {
91 csapatok[elem.cs-1]++;
92 }
93 for(int i=0;i<cspszam;i++)
94 {
95 if(csapatok[i]==0)
96 {
97 nem.insert(i+1);
98 cout << i+1 << " ";
99 }
100 }
101 cout << endl;
102 }
103
104 void F7(vector<igeny> igenyek)
105 {
106 cout << "****************************************************************\n7. feladat" << endl;
107 srand(time(NULL));
108 do
109 {
110 csapat=rand()%cspszam+1;
111 }
112 while(nem.count(csapat)>0);
113 printf("A véletlenszerűen kiválasztott csapat: %d\n", csapat);
114
115 bool gyalog=false; // gyalog mennek-e a szerelők
116 bool kezd=true; // az adott csapat először kezdő állapotát nézem-e
117 int kiszallas; // ahol kiszállnak a liftből
118 for(auto elem:igenyek)
119 {
120 if(elem.cs==csapat) // megvan a csapatunk
121 {
122 if(kezd) // most kezdjük vele a viszgálatot
123 {
124 kiszallas=elem.ki; // ahol kiszállnak a liftből
125 kezd=false; // innentől már nem kezdőállapotot nézünk majd
126 }
127 else
128 {
129 if(elem.be!=kiszallas) // ha a beszállási hely eltér attól ahol előzőleg hagyták a liftet, akkor gyalog mentek a két szint között
130 {
131 printf("Gyalogosan közlekedtek a(z) %d. ", kiszallas);
132 printf("és a(z) %d. szint között!\n", elem.be);
133 gyalog=true; // volt gyaloglás
134 }
135 kiszallas=elem.ki; // ezt ne felejtsük el aktualizálni...
136 }
137 }
138 }
139 if(!gyalog) printf("Nem bizonyítható szabálytalanság!\n"); // ha nem volt gyaloglás a vizsgálat végén, akkor...
140 }
141
142 void F8(vector<igeny> igenyek)
143 {
144 cout << "****************************************************************\n8. feladat - adatok kiírása..." << endl;
145 ofstream fki;
146 int fkod;
147 string siker;
148 fki.open("blokkol.txt");
149 for(auto elem:igenyek)
150 {
151 if(elem.cs==csapat)
152 {
153 cout << "Indulási emelet: " << elem.be << endl; // képernyőre
154 fki << "Indulási emelet: " << elem.be << endl; // fájlba
155 cout << "Célemelet: " << elem.ki << endl;
156 fki << "Célemelet: " << elem.ki << endl;
157 cout << "Feladatkód: ";
158 cin >> fkod;
159 fki << "Feladatkód: " << fkod << endl;
160 cout << "Befejezés ideje: " << elem.o << ":" << elem.p << ":" << elem.mp << endl;
161 fki << "Befejezés ideje: " << elem.o << ":" << elem.p << ":" << elem.mp << endl;
162 cout << "Sikeresség: ";
163 cin >> siker;
164 fki << "Sikeresség: " << siker << endl;
165 }
166 }
167 fki.close();
168 }
169
170 int main()
171 {
172 setlocale(LC_ALL,"");
173
174 vector<igeny> igenyek;
175 igenyek.reserve(100);
176 F1(igenyek);
177 F2();
178 F3(igenyek);
179 F4(igenyek);
180 F5(igenyek);
181 F6(igenyek);
182 F7(igenyek);
183 F8(igenyek);
184 return 0;
185 }