Пры арганізацыі лінейнага пошуку ў аднамерным масіве для праверкі складаных умоў пошуку стваралі функцыі, якія правяралі асобны элемент. Пры рабоце з двухмернымі масівамі можна паступіць аналагічна. У гэтым выпадку функцыя будзе прымаць у якасці параметра лінейны масіў і апрацоўваць яго.
Прыклад 17.6. Зададзены двухмерны масіў a з m радкоў і n слупкоў. Атрымаць лінейны масіў b, у якім b[i] — сума элементаў i-га радка масіву a, кратных 3.
Этапы выканання задання
I. Зыходныя даныя: пераменныя n і m — колькасць радкоў і слупкоў у масіве а, a — двухмерны масіў.
II. Вынік: лінейны масіў b.
III. Алгарытм рашэння задачы.
- Увод зыходных даных. Элементы масіву згенерыраваны выпадковым чынам.
- Для апрацоўкі асобнага радка створым функцыю, якая вылічвае суму элементаў лінейнага масіву, кратных тром.
- У цыкле выклічам функцыю для кожнага радка.
- Вывад выніку. Для вываду лінейнага масіву выкарыстоўваецца функцыя print. Яна ж выкарыстоўваецца для вываду радкоў двухмернага масіву.
IV. Апісанне пераменных: n, m – int, a – vector<vector<int>>, b – vector<int>.
Прыклад 17.7. Зададзены двухмерны масіў a з m радкоў і n слупкоў. Вывесці нумары радкоў, элементы якіх утвараюць узрастаючую паслядоўнасць. Калі такіх радкоў у масіве няма, то ўвесці адпаведнае паведамленне.
Этапы выканання задання
I.Зыходныя даныя: пераменныя n і m — колькасць радкоў і слупкоў у масіве а, a — двухмерны масіў.
II. Вынік: нумары радкоў і паведамленне, што радкоў няма.
III. Алгарытм рашэння задачы.
- Увод зыходных даных. Элементы масіву згенерыраваны выпадковым чынам.
- Для апрацоўкі асобнага радка створым функцыю, якая правярае, ці ўтвараюць яго элементы ўзрастаючую паслядоўнасць.
2.1. Элементы ўтвараюць узрастаючую паслядоўнасць, калі кожны наступны большы за папярэдні. 2.2. Калі для якой-небудзь пары элементаў умова не выканалася, далейшую праверку спынім.
- У цыкле выклічам функцыю для кожнага радка і праверым вынік.
- Вывад выніку. Створым пераменную-флаг, якая спачатку будзе мець значэнне true. Калі які-небудзь нумар радка будзе выведзены, то зменім значэнне гэтай пераменнай. Калі пераменная-флаг не памяняла свайго значэння, то радкі не знойдзены.
IV. Апісанне пераменных: n, m – int, a – vector<vector<int>>, b – vector<int>. |
Прыклад 17.6.
V. Праграма:
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
void print(vector<int> &d)
{
for (int i = 0; i < d.size(); i++){
cout.width(5);
cout << d[i];
}
cout<<endl;
}
int sum3(vector<int> &d)
{
int s = 0;
for (int i = 0; i < d.size(); i++)
if (d[i] % 3 == 0)
s += d[i];
return s;
}
int main()
{
srand(time(NULL));
int m, n;
cout << "m, n" << endl;
cin >> m >> n;
vector <vector <int>> a(m, vector <int> (n));
vector <int> b(m);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
a[i][j] = rand () % 100;
for (int i = 0; i < m; i++)
print(a[i]);
for (int i = 0; i < m; i++)
b[i] = sum3(a[i]);
cout << "rez" << endl;
print(b);
return 0;
}
|
VI. Тэсціраванне.
Прыклад 17.7.
V. Праграма:
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
bool check(vector<int> &d)
{
for (int i = 0; i < d.size() - 1; i++)
if (d[i] >= d[i + 1])
return false;
return true;
}
int main()
{
srand(time(NULL));
int m, n;
cout << "m, n" << endl;
cin >> m >> n;
vector <vector <int>> a(m, vector <int> (n));
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
a[i][j] = rand () % 100;
cout << setw(5) << a[i][j];
}
cout << endl;
}
bool f = true;
for (int i = 0; i < m; i++)
if (check(a[i])){
cout << i << " ";
f = false;
}
if (f)
cout << "net strok" << endl;
return 0;
}
|
VI. Тэсціраванне.
|