View difference between Paste ID: jW0FKhSn and NpDzyxrU
SHOW: | | - or go back to the newest paste.
1
#include <iostream>
2
#include <sstream>
3
#include <stdio.h>
4
#include <fstream>
5
#include <string>
6
#include<ctime>
7
#include<cstdlib>
8
9
using namespace std;
10
template <typename TYP>
11
class Tablica
12
{
13
	int mRozmiar;
14
	TYP* pTablica;
15
	Tablica() = delete;
16
public:
17
	void adres()
18
	{
19
		cout << pTablica << endl;
20
	}
21
	Tablica(int rozmiar)
22
		: mRozmiar(rozmiar)
23
	{
24
		pTablica = new TYP[rozmiar];
25
	}
26
	bool WczytajTablice(std::istream &strumienWej)
27
	{
28
		TYP doWczytania;
29
		int iterator = 0;
30
		while (iterator < mRozmiar && strumienWej >> doWczytania)
31
		{
32
			pTablica[iterator] = doWczytania;
33
			++iterator;
34
		}
35
		return iterator == mRozmiar;
36
	}
37
38
	void WypiszTablice(std::ostream &strumienWyj)
39
	{
40
		for (auto i = 0; i < mRozmiar; ++i)
41
		{
42
			strumienWyj << pTablica[i] << " ";
43
		}
44
45
	}
46
47
	~Tablica()
48
	{
49
		delete[] pTablica;
50
	}
51
52
	bool ZapiszDoPliku(std::string nazwa, bool czyBinarny = false)
53
	{
54
		auto binarny = czyBinarny ? ios::binary : 0;
55
		std::fstream plikWyjsciowy(nazwa.c_str(), ios::out | binarny);
56
57
		if (plikWyjsciowy.is_open())
58
		{
59
			WypiszTablice(plikWyjsciowy);
60
			plikWyjsciowy.close();
61
			return true;
62
		}
63
		else
64
		{
65
			return false;
66
		}
67
68
	}
69
70
	bool WczytajZPliku(std::string nazwa, bool czyBinarny = false)
71
	{
72
		auto binarny = czyBinarny ? ios::binary : 0;
73
		std::fstream plikWyjsciowy(nazwa.c_str(), ios::in | binarny);
74
		if (plikWyjsciowy.is_open())
75
		{
76
			return WczytajTablice(plikWyjsciowy);
77
		}
78
		else
79
		{
80
			return false;
81
		}
82
83
	}
84
85
	bool ZapiszDoPlikuBinarnego(std::string nazwa)
86
	{
87
		return ZapiszDoPliku(nazwa, true);
88-
		return WczytajZPliku(nazwa, true)
88+
89
90
	bool WczytajDoPlikuBinarnego(std::string nazwa)
91
	{
92
		return WczytajZPliku(nazwa, true);
93
	}
94
95
	Tablica& operator =(Tablica& x)
96
	{
97
		mRozmiar = x.mRozmiar;
98
		TYP* wsk = new TYP[mRozmiar];
99
		for (int i = 0; i < mRozmiar; i++)
100
		{
101
			wsk[i] = x.pTablica[i];
102
		}
103
		pTablica = wsk;
104
		return *this;
105
		//return pTablica = wsk;
106
		//return wsk;
107-
		srand(time(NULL));
107+
108
109
	void wypelnijLiczbamiLosowymi()
110
	{
111
		srand((unsigned int)time(NULL));
112
		//int liczbaWylosowana = (rand()%1000+1);
113
		for (int i = 0; i < mRozmiar; i++)
114
		{
115
			pTablica[i] = (rand()); //% 1000 + 1);
116
		}
117
	}
118
119
	/*Tablica& tworzKopia(Tablica& dawca const)
120
	{
121
		Tablica tabKopia(mRozmiar) = dawca;
122
		return tabKopia;
123
	}*/
124
125
};
126
127
128
void menu()
129
{
130
	typedef int nazwaTypu;
131
	cout << "Wybierz rozmiar tablicy\n";
132
	int rozmiarTablicy;
133
	cin >> rozmiarTablicy;
134
	Tablica<nazwaTypu> tab(rozmiarTablicy);
135
	int opcja;
136
	do
137
	{
138
		cout << "1.Wczytanie tablicy z konsoli" << endl;
139
		cout << "2.Wyswietlenie tablicy" << endl;
140
		cout << "3.Wczytywanie z pliku tekstowego" << endl;
141
		cout << "4.Zapisywanie do pliku tekstowego" << endl;
142
		cout << "5.Wczytywanie z pliku binarnego" << endl;
143
		cout << "6.Zapisywanie do pliku binarnego" << endl;
144
		cout << "7.Wypelnianie tablicy" << endl;
145
		cout << "8.Tworzenie dynamicznej kopii + wyswietlenie kopii" << endl;
146
		cout << "0.Koniec" << endl;
147
		cout << "Wybierz opcje: ";
148
		cin >> opcja;
149
		
150
151
		switch (opcja){
152
		case 0:
153
			break;
154
		case 1:
155
			tab.WczytajTablice(cin);
156
			break;
157
		case 2:
158
			tab.WypiszTablice(cout);
159
			break;
160
		case 3:
161
		{
162
			cout << "Podaj nazwe pliku\n";
163
			string nazwa;
164
			cin >> nazwa;
165
			tab.WczytajZPliku(nazwa);
166
				break;
167
		}
168
		case 4:
169
		{
170
			cout << "Podaj nazwe pliku\n";
171
			string nazwa;
172
			cin >> nazwa;
173
			tab.ZapiszDoPliku(nazwa);
174
			break;
175
		}
176
		case 5:
177
			{
178
			cout << "Podaj nazwe pliku\n";
179
			string nazwa;
180
			cin >> nazwa;
181
			tab.WczytajDoPlikuBinarnego(nazwa);
182
			break;
183
		}
184
		case 6:
185
{
186
			cout << "Podaj nazwe pliku\n";
187
			string nazwa;
188
			cin >> nazwa;
189
			tab.ZapiszDoPlikuBinarnego(nazwa);
190
			break;
191
		}
192
		case 7:
193
			tab.wypelnijLiczbamiLosowymi();
194
			break;
195
		case 8:
196
		{
197
			{
198
				Tablica < nazwaTypu > tabKopia(rozmiarTablicy);
199
				Tablica < nazwaTypu > tabKopia1(rozmiarTablicy);
200
				tabKopia = tab;
201
				tabKopia1 = tab;
202
				tabKopia.WypiszTablice(cout);
203
				tab.adres();
204
				tabKopia.adres();
205
				tabKopia1.adres();
206
				cout << "\ntab  " << &tab << endl;
207
				cout << "tabKopia  " << &tabKopia << endl;
208
				cout << "tabKopia  " << &tabKopia1 << endl;
209
				break;
210
			}
211
		}
212
		default:
213
			cout << "Nie ma takiej opcji\n";
214
			break;
215
		}
216
		cout << "\n";
217
	} while (opcja != 0);
218
}
219
220
221
222
223
////////////////////////////////////////main
224
225
226
227
int main()
228
{
229
230
	menu();
231
232
	/*{
233
		Tablica<int> tab(3);
234
		std::stringstream test("3 5 7");
235
		auto wynik = tab.WczytajTablice(test);
236
237
		if (wynik == true)
238
		{
239
			std::cout << "Test 1 PASS" << std::endl;
240
		}
241
		else
242
		{
243
			std::cout << "Test 1 padl" << std::endl;
244
		}
245
246
	}
247
248
	{
249
		Tablica<float> tab(3);
250
		std::stringstream test("3 5 7 5");
251
		auto wynik = tab.WczytajTablice(test);
252
253
		if (wynik == true)
254
		{
255
			std::cout << "Test 2 PASS" << std::endl;
256
		}
257
		else
258
		{
259
			std::cout << "Test 2 padl" << std::endl;
260
		}
261
	}
262
263
	{
264
		Tablica<int> tab(3);
265
		std::stringstream test("3 5");
266
		auto wynik = tab.WczytajTablice(test);
267
268
		if (wynik == false)
269
		{
270
			std::cout << "Test 3 PASS" << std::endl;
271
		}
272
		else
273
		{
274
			std::cout << "Test 3 padl" << std::endl;
275
		}
276
	}
277
278
	{
279
		Tablica<int> tab(3);
280
		std::stringstream test("3 4 5");
281
		tab.WczytajTablice(test);
282
		std::stringstream wyjscie;
283
		tab.WypiszTablice(wyjscie);
284
285
		if (wyjscie.str() == "3 4 5 ")
286
		{
287
			std::cout << "Test 4 PASS" << std::endl;
288
		}
289
		else
290
		{
291
			std::cout << "Test 4 padl" << std::endl;
292
		}
293
	}
294
295
	{
296
		{
297
			Tablica<int> tab(3);
298
			//std::stringstream test("3 4 5");
299
			//tab.WczytajTablice(test);
300
			tab.WczytajZPliku("plik1.txt", false);
301
			std::stringstream wyjscie;
302
			tab.WypiszTablice(wyjscie);
303
304
			if (wyjscie.str() == "3 4 5 ")
305
			{
306
				std::cout << "Test 5 PASS" << std::endl;
307
			}
308
			else
309
			{
310
				std::cout << "Test 5 padl" << std::endl;
311
			}
312
		}
313
		{
314
			Tablica<int> tab(3);
315
			std::stringstream test("3 4 5");
316
			tab.WczytajTablice(test);
317
			std::string nazwaPliku("test6.dat");
318
319
			tab.ZapiszDoPliku(nazwaPliku);
320
			Tablica<int> tab2(3);
321
			tab2.WczytajZPliku(nazwaPliku);
322
			std::stringstream wyjscie;
323
			tab2.WypiszTablice(wyjscie);
324
325
			if (wyjscie.str() == "3 4 5 ")
326
			{
327
				std::cout << "Test 6 PASS" << std::endl;
328
			}
329
			else
330
			{
331
				std::cout << "Test 6 padl" << std::endl;
332
			}
333
		}
334
	}
335
336
{
337
	Tablica<int> tab(3);
338
	//	std::stringstream test("3 5 7");
339
	auto wynik = tab.WczytajTablice(std::cin);
340
341
	if (wynik == true)
342
	{
343
		std::cout << "Test 1 PASS" << std::endl;
344
	}
345
	else
346
	{
347
		std::cout << "Test 1 padl" << std::endl;
348
	}
349
350
}
351
{
352
	Tablica<int> tab(3);
353
	Tablica<int> tab1(3);
354
	bool wynik = tab.WczytajTablice(std::cin);
355
	if (wynik == true)
356
	{
357
		cout << "Czesc 1 PASS" << endl;
358
		tab1 = tab;
359
		cout << "tab \n";
360
		tab.WypiszTablice(cout);
361
		cout << "tab1 \n";
362
		tab1.WypiszTablice(cout);
363
364
	}
365
	else
366
	{
367
		cout << "czesc 1 padla " << endl;
368
	}
369
}
370
371
372
{
373
	cout << "Podaj rozmiar\n";
374
	int rozmiarTd;
375
	cin >> rozmiarTd;
376
	Tablica<int> tab(rozmiarTd		);
377
	//	std::stringstream test("3 5 7");
378
	cout << "Losowanie liczb \n";
379
	tab.wypelnijLiczbamiLosowymi();
380
	tab.WypiszTablice(cout);
381
382
}
383
*/
384
{
385
	char c;
386
	std::cin >> c;
387
}
388
	return 0;
389
}