Вазифа: Берилган маълумотларни керакли навбат, рўйхат ва стекка доир операторларни қўллаган ҳолда, номлар фазосидан фойдаланган ҳолда дастурни тузинг. Дастур қуйидаги критериялар бўйича бахоланади:
А) Дастур ечимида мустақил ёндашувчанлик – 1 балл;
В) Дастурни консолдаги ечими – 1 балл;
С) Дастур ечимида итераторлардан фойдаланиш – 1 балл;
Д) Аудиториядаги дарсларда талабани актив қатнашуви – 1 балл;
Е) Дастур кодларини изоҳига – 1 балл;
1-вазифа ечимига намуналар:
1.1 намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include
#include
#include
using namespace std;
int main() {
cout << "Кавслардан иборат сатрни киритинг\n";
deque d;
string s;
getline(cin, s);
for (auto &r : s) d.push_back(r);
bool f = true;
while (f)
if ((d.back() == ')' && d.front() == '(') ||
(d.back() == ']' && d.front() == '[')) {
d.pop_back();
d.pop_front();
} else {
f = false;
}
d.shrink_to_fit();
if (d.empty())
cout << "Кавслар тугри кўйилган!";
else
cout << "Кавслар нотугри куйилган!";
cout << endl;
return 0;
}
|
1.2.-намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#include
#include
#include
#include
using namespace std;
using namespace chrono;
int main() {
vector mas;
vector save;
// 50 максимал эффективлигини гарантиялаймиз
mas.reserve(50);
save.reserve(50);
int seed = system_clock::now().time_since_epoch().count();
default_random_engine rnd(seed);
uniform_int_distribution d(10, 30);
int n;
cout << "Массив ўлчамини киритинг: "; cin >> n;
for (int i = 0; i < n; i++) {
// Вектор бўш, шунинг учун фақат push_back()!
mas.push_back(d(rnd));
// кайсидир элемент массивда бор бўлган
save.push_back(1);
// элемент бўлса – индекси хам бор, экранга чиқарамиз
cout << mas[i] << " ";
}
cout << endl;
// жуфтликларни топамиз
for (size_t i = 0; i < mas.size() - 1; i++)
for (size_t j = i + 1; j < mas.size(); j++) {
// Озгина ўтишни тезлаштирамиз)
if (save[j] > 2) continue;
if (mas[i] == mas[j]) {
// Бир массивда жуфтликларни қидирамиз,
// белгилашни бошқасида белгилаймиз
save[i]++;
save[j]++;
}
}
// Ўчиришга тайёрлаш (эффектив бўлади қачонки,
// фақат битта массивдан элементларни ўчириб ташласа)
for (size_t i = 0; i < mas.size(); i++)
if (save[i] == 2)
// ўчириш учун белгилаб оламиз
mas[i] = -1;
// итераторни фақат бошида қўллаймиз,
// бунда циклда итератор охирида бўлади
// (потенциал бўлади) таъсирга эга бўлмайди
auto first = mas.begin();
// хар бир қадамда итератор охирини янгилаб борамиз
while (first != mas.end()) {
if (*first == -1)
// итераторни ўчириб, кейинги элементга
// қадар сура бошлаймиз
first = mas.erase(first);
else
// акс ҳолда, кейинга қараб қадам ташлаймиз
first++;
}
// натижани чиқарамиз
for (auto &ar : save)
cout << ar << " ";
cout << endl;
cout << "\n массивнинг янги ўлчами: "
<< mas.size()
<< "\n ўзгартирилган массив:\n";
for (auto &ar : mas)
cout << ar << " ";
cout << endl;
return 0;
}
|
Массив ўлчамини киритинг: 30
23 20 17 26 14 26 21 18 13 25 11 17 20 24 28 11 27 20 15 30 22 20 15 26 11 17 19 20 25 23
2 5 3 3 1 3 1 1 1 2 3 3 5 1 1 3 1 3 2 1 1 3 2 3 3 3 1 3 2 2
массивнинг янги ўлчами: 24
ўзгартирилган массив:
20 17 26 14 26 21 18 13 11 17 20 24 28 11 27 20 30 22 20 26 11 17 19
1.3.-намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#include
#include
#include
using namespace std;
void myStk(int&, int&, stack&);
int main() {
string S;
cout << "арифметик қийматни ифодаловчи сатрни киритинг:"
<< endl;
getline(cin, S);
stack stc;
for (auto &r : S) {
if (r == '*') {
int a, b;
myStk(a, b, stc);
stc.push(a * b);
}
else if (r == '+') {
int a, b;
myStk(a, b, stc);
stc.push(a + b);
}
else if (r == '-') {
int a, b;
myStk(a, b, stc);
stc.push(a - b);
}
else
stc.push(r - '0');
}
cout << stc.top() << endl;
return 0;
}
void myStk(int &m, int &n, stack &st) {
m = st.top();
st.pop();
n = st.top();
st.pop();
}
|
1.4.-намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include
#include
using namespace std;
int main() {
int a, b, i = 0;
cout << "илдиз => "; cin >> a;
cout << "қидирилаётган катталик => "; cin >> b;
queue rob;
bool f = false;
// Жорий катталикни навбатга қўямиз
rob.push(a);
// Хозирча навбат бўш эмас
while (!rob.empty()) {
// Элементни навбатдан оламиз (зиёратга катталикни
//ёнига борамиз
int p = rob.front();
rob.pop();
// Ворисларни аниқлаб, уларни навбатга қўшамиз
rob.push(p * 4);
rob.push(p + 3);
i += 2;
// Тегишли қиймат билан катталик аниқланса - чиқамиз
if (p * 4 == b || p + 3 == b) {
f = true;
break;
}
// лимитга эришса хам чиқамиз
if (rob.size() > 1000)
break;
}
int j = 0;
// буйруқлар сонини аниқлаймиз
if (f) {
while (i > 1) {
++j;
i /= 2;
}
cout << "буйруқлар сони = "
<< j << endl;
} else
cout << "Алгоритм топилмади, шунда хам тушунмасангиз кўпроқ китоб ўқинг" << endl;
return 0;
}
|
1-Вазифа учун вариантлар:
Бутун сонлардан иборат N ўлчамли массив берилган. Массивни барча 2 га каррали элементларини олиб ташланг ва массив ўлчамини ва ундаги элементларни экранга чиқаринг. Мисолни навбат контейнеридан фойдаланган ҳолда ечинг.
Бутун сонлардан иборат N ўлчамли массив берилган. Массивнинг биринчи ва иккинчи элементларини қўшиб, уни 5 марта оширинг. Ҳосил бўлган массивни ўлчамини ва ундаги элементларни стек контейнеридан фойдаланган ҳолда ечинг.
(3, 4, 5, 6) – сонларидан иборат рўйхат берилган. Рўйхатнинг бошига 0, 1, 2 сонларини, рўйхат бошига 7, 8, 9 сонларини қўшинг. Ҳосил бўлган рўйхатни ўлчами ва элементларини экранга чиқаринг.
9 та элементли навбат берилган. Навбатнинг бошига, охирига ва ўртасига элемент қўшинг. Ҳосил бўлган навбатни ўлчами ва элементларини экранга чиқаринг.
14 та элементли рўйхат берилган. Рўйхатнинг бошидан 5 та элементни ўчиринг. Ҳосил бўлган рўйхатни ўртасидан элементни олиб ташланг, рўйхатни ўлчами ва элементларини экранга чиқаринг.
10 та элементли рўйхатни 1, 2, 3-чи элементларини сақлаб қолинг, 4-чи элементидан то охирги элементигача элементларни ўчириб ташланг. Ҳосил бўлган навбатни ўлчами ва элементларини экранга чиқаринг.
Стекнинг жуфт индексли элементларини олиб ташланг, хосил бўлган стек элементларини охирига 2 та элементини қўшинг. Хосил бўлган стек элементларини экранга чиқаринг.
Берилган Nта элементли навбатнинг 1-чи ярмини ўчириб ташланг. Қолган элементларни 4 баравар ошириб, ҳосил бўлган навбатни экранга чиқаринг.
N та элементли навбатни экранга чиқаринг. Унинг ўлчамини 2 баравар кўпайтиринг. Навбатнинг охирги иккита элементини олиб ташланг.
Рўйхат элементларини охирги учтасини йиғиндисини топинг. Ҳосил бўлган рўйхатни ўлчамини экранга чиқаринг.
Навбат 12 элементдан иборат, ундаги тоқ индексли элементларни 3 баравар оширинг, ҳосил бўлган навбатни ўлчамини ва элементларини экранга чиқаринг.
5 та элементли навбат элементларини хар бирини 2 га кўпайтиринг ва 3баравар оширинг. Граф кўринишдан фойдаланинг.
6 та элементли навбат берилган. Унинг хар бир элементини қийматини 4 баравар кўпайтиринг ва 4 баравар оширинг. Граф кўринишдан фойдаланинг.
N элементли рўйхат берилган. Унинг боши ва охирига 2 та элемент қўшинг ва уларни 2 баравар кўпайтиринг. Ҳосил бўлган рўйхат ўлчами ва элементларини экранга чиқаринг.
8та элементли стек берилган. Унинг ўлчамини 3 баравар кўпайтиринг. Ҳосил бўлган стекни 2-ярмини олиб ташланг. Стек ўлчами ва элементларини экранга чиқаринг.
Берилган 8 та элементли навбатнинг 7-чи элементидан сўнг 3 маротаба 4 элементини киритинг. Хосил бўлган навбатни ўлчамини 2 баробар оширинг ва экранга чиқаринг.
Рўйхатнинг бошига n та элемент қўшинг, унинг хар бир элементини 2 баробар оширинг. Хосил бўлган рўйхат ўлчами ва элементларини экранга чиқаринг.
Навбатнинг хар бир жуфт индексли элементини 3 баробар оширингва 3 баробар кўпайтиринг. Граф кўринишидан фойдаланинг.
Вазифа: Берилган маълумотларни керакли файллар билан ишлашга доир операторларни қўллаган ҳолда, номлар фазосидан фойдаланган ҳолда дастурни тузинг. Дастур қуйидаги критериялар бўйича бахоланади:
А) Дастур ечимида мустақил ёндашувчанлик – 1 балл;
В) Дастурни консолдаги ечими – 1 балл;
С) Дастур ечимида файл оқимларидан фойдаланиш – 1 балл;
Д) Аудиториядаги дарсларда талабани актив қатнашуви – 1 балл;
Е) Дастур кодларини изоҳига – 1 балл;
2-вазифа ечимига намуналар:
Вазифага намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include
#include
using namespace std;
int main() {
fstream fio("output", ios::in | ios::out);
char C = 'A';
for (int i = 0; i < 11; i++) {
for (int j = 0; j < i; j++)
fio.put(C);
fio.put('\n');
}
fio.seekg(1, ios::beg);
char S[100];
fio.read(S, 100);
cout.write(S, 65);
return 0;
}
|
Вазифага намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include
#include
using namespace std;
int main() {
int a, b;
ifstream fin("input");
ofstream fout("output");
fin >> a >> b;
cout << a << " " << b << endl;
fout << a + b << endl;
fin.close();
fout.close();
return 0;
}
|
Вазифага намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include
#include
#include
#include
#include
using namespace std;
int main() {
srand(time(0));
int k = 0, j = 0;
// киритиш ва чиқариш учун файл очилган
fstream fin("input", ios::out | ios::in);
ofstream fout("output");
for (int i = 1; i <= 10; i++){
k = 10 + rand() % 90;
fin << k << endl;
}
// кўрсаткични файл бошига қайтарамиз
fin.seekg(0, ios::beg);
while (!fin.eof()){
fin >> k;
j += k;
}
fout << scientific << float(j) / 10 << endl;
fin.close();
fout.close();
return 0;
}
|
Вазифага намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#include
#include
#include
#include
#include
#include
#include
using namespace std;
template
void addip(T1&, T2&);
int main() {
// IP-адреса и маскиларни, алоҳида байтларни(октетларни)
// сақлаш учун
array ip;
array mask;
vector users;
string S1, S2;
//===================================================//
// файлли оқим яратамиз //
//===================================================//
ifstream fin("input");
fin >> S1 >> S2;
fin.ignore();
addip(ip, S1);
addip(mask, S2);
while (!fin.eof()) {
array net;
string login, name, user_ip, S;
getline(fin, S);
//===============================================//
// сатрли оқим яратамиз //
//===============================================//
istringstream is(S);
is >> login >> name >> user_ip;
addip(net, user_ip);
// IP-адрес ва маскини разрядли
//конъюнкциясини еча туриб, биз массивда
//сақланаётган ip IP-адресли тармоқни
// текширади
for (size_t i = 0; i < net.size(); i++)
net[i] &= mask[i];
if (net == ip)
users.push_back(login);
}
sort(users.begin(), users.end());
for (auto &r : users)
cout << r << endl;
return 0;
}
//===================================================//
// Массивдаги ёзувда октетларни сатрдан олиб ташлаш //
// функция шаблони //
//===================================================//
template
void addip(T1 &ar, T2 &St) {
St += '.';
for (auto &r : ar) {
size_t k = St.find('.');
T2 S = St.substr(0, k);
St.erase(0, k + 1);
r = stoi(S);
}
};
|
Вазифага намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include
#include
#include
#include
#include
#include
using namespace std;
int main() {
// сатр асосида
string S("1 2 3 4 5 6 7 8 9 10 11 12 13 14 15");
// сатрли оқим яратамиз
istringstream is(S);
// Бу оқим билан итераторларни иницализация қилинади
// оқим бошидаги итератор
istream_iterator is_first(is);
// охиридаги итератор;
//қавсларни йўқлигига эътибор қаратинг
istream_iterator is_last;
// Оқимли итераторларда вектор эълон қиламиз
vector V(is_first, is_last);
for (auto &r : V)
cout << r << " ";
cout << endl;
// is ўчирилади, бўлмаса оқимни янгилаб бўлмайди
is.clear();
// Яна шу сатрга оқимга юборамиз
is.str(S);
// Итераторни қисқароқ таърифи
// бунда eof итератор номи, функция эмас
istream_iterator is_it(is), eof;
vector Va(15);
// Оқимдан векторни тўлдирамиз критерийлар бўйича
copy_if(is_it, eof, Va.begin(), [](const int &r){return !(r % 3);});
for (auto &r : Va)
cout << r << " ";
cout << endl;
return 0;
}
|
Вазифага намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include
#include
#include
#include
#include
using namespace std;
int main() {
istringstream is("qqqqqqwwwwweeerrrrrtyu");
istreambuf_iterator in_it(is), it_eof;
string S;
// сатр ўлчамини киритамиз,
// хеч қаерга нусхалаб бўлмайди
S.resize(20);
// Сатрга фақат уникал символларни нусхалаймиз
unique_copy(in_it, it_eof, S.begin());
cout << S << endl;
return 0;
}
|
Вазифага намуна:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include
#include
#include
#include
#include
#include
using namespace std;
int main() {
int i = 20;
ostream_iterator os_it(cout, " ");
// Стандарт оқимга сонларни жойлаймиз
// бунда итератор интерфейсидан фойдаланамиз
while (--i) {
*os_it = i;
os_it++; // Фойдаланиш мумкин, лекин эффекти йўқ
}
// Чиқариш файл оқимини яратамиз
ofstream fout("output");
// Энди файлга шунга сатрларни ёзамиз
ostream_iterator of_it(fout, " ");
i = 10;
while (--i) {
int j = 20;
while (--j) {
*of_it = j;
of_it++;
}
fout << '\n';
}
cout << endl;
// векторни экранга чиқарамиз
vector mas {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
copy(mas.cbegin(), mas.cend(), ostream_iterator(cout, " "));
return 0;
}
|
2-Вазифа учун вариантлар:
Берилган рўйхатдан охирги элементлари олиниб кейинги файлга узатилсин.
Навбатда келтирилган элементларнинг 2-нчи ярми файлдан олинган элементлар билан тўлдирилсин.
Рўйхатда келтирилган элементларнинг 1-нчи ярми 2-нчи файлга узатилсин. Қабул қилинган элементларни ўлчами 2 баробар оширилсин.
Файлда кўрсатилган элементлар стек кўринишида қабул қилинган. Кейинги файлга узатилган элементлар навбат кўринишида қабул қилинсин.
Файлдаги натурал сонлардан ташкил топган элементлар кейинги файлга 104 кўринишда қабул қилинсин.
Файлга берилган элементлар сони 102 қиймати билан граф кўринишида кейинги файлга узатилсин.
Файлдаги сонларни қиймати кейинги файлга ўлчами 3 баробар оширилиб узатилсин.
Берилган натурал сонлар миқдори кейинги файлга 104 қийматида узатилсин. Кўрсаткичлардан фойдаланилсин.
Берилган сонлар миқдори 105 миқдорда берилган. Динамик массивлардан фойдаланган ҳолда бу сонлар ўлчами 2 баробар оширилиб кейинги файлга навбатлардан фойдаланиб қабул қилинсин.
Файлга ўзлаштирилган сонлар динамик массивлардан фойдаланган ҳолда ўлчами 2 баробар оширилган. Буни кейинги файлга стеклардан фойдаланган ҳолда маълумотлар узатилсин.
Файлдаги сонлар натурал сонлар бўлиб, улар 3 га карралидир. Буларни кейинги файлга массив кўринишида қабул қилинсин, ва файлдан ўчирилсин.
Файлдани натурал сонлар динамик массивлардан фойдаланган ҳолда яратилган. Уларнинг ўлчами 2 баробар оширилиб кейинги файлга узатилсин.
Файллардаги сонларни миқдори 2 баробар камайтирилиб кейинги файлга навбат кўринишида қабул қилинсин ва хотирадан ўчириб ташлансин.
Натурал сонлардан иборат массив қиймати 5 га каррали сонлардан ташкил топган. Уларнинг миқдори 2 баробар оширилиб кейинги файлга узатилсин. Динамик хотирадан фойдаланилсин.
Ҳақиқий сонлардан иборат массив элементлари 3 баробар оширилиб кейинги файлга узатилсин. Хотирадан ўчирилсин.
Динамик массивнинг 10 га каррали элементлари 108 миқдорда кейинги файлга рўйхат кўринишида қабул қилинсин.
Динамик массивнинг 3 ва 5 га каррали элементлари файлга натурал сон кўринишида қабул қилинсин.
Массивнинг энг катта қиймати натурал сон кўринишида файлга ўтказилсин ва хотирадан ўчирилсин.
Do'stlaringiz bilan baham: |