Печатать книгуПечатать книгу

§ 11. Структураваны тып даных масіў

Сайт: Профильное обучение
Курс: Інфарматыка. 10 клас (Павышаны ўзровень)
Книга: § 11. Структураваны тып даных масіў
Напечатано:: Гость
Дата: Понедельник, 29 Апрель 2024, 09:25

11.1. Паняцце масіву

У сучасным свеце штосекундна адбываецца апрацоўка вялізнай колькасці даных з дапамогай камп’ютара. Калі неабходна апрацоўваць даныя аднаго тыпу — лікі, сімвалы, радкі і інш., то для іх захоўвання можна выкарыстаць тып даных, які называецца масіў.

Масіў — упарадкаваная паслядоўнасць даных, якая абазначаецца адным імем і складаецца з канечнай колькасці элементаў, што маюць адзін і той жа тып.

Масіў з’яўляецца структураваным (састаўным) тыпам даных. Гэта азначае, што велічыня, апісаная як масіў, складаецца з канечнай колькасці іншых велічынь. Так, напрыклад, можна стварыць масівы з 10 цэлых ці 100 рэчаісных лікаў. Тып элементаў масіву называюць базавым тыпам. Усе элементы масіву ўпарадкаваны па індэксах (нумарах элементаў), якія вызначаюць месцазнаходжанне элемента ў масіве. У мове С++ элементы масіву заўсёды нумаруюцца з нуля.

Масіву прысвойваецца імя, пры дапамозе якога можна спасылацца на яго як на адзінае цэлае. Элементы масіву ўпарадкаваны так, што кожнаму элементу адпавядае нумар (індэкс), які вызначае яго месца ў агульнай паслядоўнасці (прыклады 11.1—11.3). Індэксы могуць быць выразам, значэнне якога належыць любому простаму  тыпу, акрамя рэчыўнага. Індэксы павінны быць неадмоўнымі. Доступ да кожнага асобнага элемента ажыццяўляецца зваротам да імя масіву з указаннем індэкса патрэбнага элемента, індэкс элемента запісваецца пасля імя ў квадратных дужках (прыклад 11.4).

Калі зварот да элементаў масіву ажыццяўляецца пры дапамозе толькі аднаго індэкса, то такія масівы называюць аднамернымі або лінейнымі. Для захоўвання масіву ў памяці камп’ютара вылучаецца бесперапынны ўчастак, у якім элементы размяшчаюцца паслядоўна адзін за адным.

Упершыню тып даных масіў з’явіўся ў мове Фартран (створана ў перыяд з 1954 па 1957 г. у карпарацыі IBM). Ужо першыя версіі мовы падтрымлівалі трохмерныя масівы (у 1980 г. максімальная размернасць масіву была павялічана да 7). Масівы былі неабходны для стварэння матэматычных бібліятэк, у прыватнасці тых, што змяшчалі працэдуры рашэння сістэм лінейных ураўненняў.

Прыклад 11.1. У 10 «А» класе 25 навучэнцаў. Вядомы рост кожнага ў сантыметрах. Для захоўвання значэнняў росту можна выкарыстоўваць масіў А, які складаецца з 25 цэлых лікаў.

Індэкс кожнага элемента — парадкавы нумар навучэнца са спіса ў класным журнале. Паколькі элементы масіву нумаруюцца ад нуля, то запіс а[5] — рост навучэнца, які ў журнале запісаны пад нумарам 6.

Прыклад 11.2. Кожны дзень у снежні вымяралі тэмпературу паветра. Для захоўвання значэнняў тэмпературы можна выкарыстоўваць масіў t, які складаецца з 31 рэчаіснага ліку.

Індэкс элемента — нумар дня ў снежні са зрухам на 1. Запіс t[15] — тэмпература паветра 16 снежня.

Прыклад 11.3. У 10 «Б» класе 27 навучэнцаў. У класным журнале паказаны прозвішча і імя кожнага навучэнца. Для захоўвання спіса навучэнцаў можна выкарыстоўваць масіў s, які складаецца з 27 радкоў.

Індэкс кожнага элемента — парадкавы нумар навучэнца са спіса ў класным журнале. Тады запіс s[5] — прозвішча і імя навучэнца пад № 6.

Прыклад 11.4. Зварот да элемента масіву: а[3], t[i], s[n-1].

Мова праграміравання С++ падтрымлівае работу з масівамі, якія дасталіся ёй ў спадчыну ад мовы С. Аднак работа з такімі масівамі патрабуе глыбокага разумення таго, як яны змяшчаюцца ў памяці камп’ютара. У якасці альтэрнатывы рэкамендуецца выкарыстоўваць шаблоны класаў, якія апісаны ў стандартнай бібліятэцы: array<> і vector<>. 

11.2. Апісанне масіваў

Мы будзем разглядаць работу з масівам, выкарыстоўваючы тып даных vector, рэалізаваны ў стандартнай бібліятэцы. Гэты тып даных, як і ўжо знаёмы вам тып даных string, з’яўляецца шаблонным класам, таму шмат якія каманды для работы будуць аднолькавымі.

Для работы з тыпам даных vector неабходна падключыць аднайменную бібліятэку:

#include <vector>

Для стварэння вектара выкарыстоўваецца наступная каманда:

vector <тып элементаў> імя_масіву (колькасць элементаў);

Імя масіву з’яўляецца ідэнтыфікатарам і задаецца па тых жа правілах, што і імёны любых іншых пераменных.

Тып элементаў задае значэнне базавага тыпу для дадзенага масіву. Базавы тып можа быць любым з вядомых вам тыпаў (прыклады 11.5–11.7).

Памер масіву — колькасць элементаў у ім.

Усе элементы вектара пасля апісання атрымліваюць значэнне нуля. Калі неабходна іншае значэнне, яго можна паказаць другім параметрам (прыклад 11.8).

Паняцце вектара шырока ўжываецца ў фізіцы і матэматыцы. Так, напрыклад, у фізіцы вектар разглядаецца як структура, якая мае адначасова велічыню (модуль) і напрамак. Шматмерныя вектары выкарыстоўваюцца ў квантавай механіцы. У геаметрыі пад вектарамі разумеюць накіраваныя адрэзкі. Арыфметычным вектарам называюць упарадкаваную сукупнасць з n лікаў. Вектар можа разглядацца як паслядоўнасць (картэж) аднародных элементаў. Менавіта ў такім выглядзе вектар разумеецца ў праграміраванні.

Прыклад 11.5. Апішам масіў, разгледжаны ў прыкладзе 11.1. Памер апісанага масіву 25 элементаў.

   vector <int> a(25);    

Прыклад 11.6. Апішам масіў, разгледжаны ў прыкладзе 11.2. Памер апісанага масіву — 31 элемент.

  vector <double> t(31);  

Прыклад 11.7. Апішам масіў, разгледжаны ў прыкладзе 11.3.

  vector <string> s(27);  

Прыклад 11.8. Апішам масіў, усім элементам якога спачатку прысвойваецца значэнне –1:

  vector <int> a(25, -1);  

11.3. Аперацыі над масівамі

Масівы, апісаныя тыпам даных vector, можна выкарыстоўваць у аперацыях прысвойвання. У выніку выканання гэтай каманды ўсе элементы аднаго масіву будуць перапісаны ў другі (прыклад 11.9)

Калі ў апісанні вектары маюць розны памер, то ён будзе ператвораны, паколькі вектары з’яўляюцца дынамічнымі структурамі, якія могуць змяняць свой памер у час выканання праграмы.

Вектары можна параўноўваць. Пры параўнанні выкарыстоўваюць аперацыі параўнання «==» і «!=». Вектары роўныя, калі яны змяшчаюць аднолькавыя элементы на тых жа пазіцыях, інакш яны не роўныя.

Іншыя аперацыі для масіву як для тыпу даных не вызначаны.

Аперацыі, якія выконваюцца з элементамі масіву, адпавядаюць аперацыям, якія выконваюцца над базавым тыпам. Калі, напрыклад, апісаны масіў з лікаў тыпу int, то з элементамі такога масіву можна выконваць такія ж аперацыі, як і з цэлымі лікамі. Элементы масіву называюць індэксаванымі пераменнымі. Яны могуць выкарыстоўвацца гэтак жа, як і простыя пераменныя (прыклад 11.10). 

Прыклад 11.9. Няхай масівы a і b апісаны наступным чынам:

   vector <int> a(25), b(30);  

У выніку выканання каманды:

   a = b;   

памер масіву a будзе павялічаны да 30 элементаў, усе элементы ў масіве a будуць мець тыя ж значэнні, што і ў масіве b.

У выніку выканання каманды:

  b = a;   

памер масіву b будзе паменшаны да 25 элементаў, усе элементы ў масіве b будуць мець тыя ж значэнні, што і ў масіве a. Значэнні апошніх 5 элементаў, якія зыходна былі ў вектары b, будуць страчаны.

Прыклад 11.10. Аперацыі над індэксаванымі пераменнымі:

  a[3] = 25 % 7;

  sr = (t[0] + T[29]) / 2;

  b[k] = a[k] * 2;

  sum = sum + a[i];

  if (s[i] < 0) …

  n = s[i].length();

11.4. Увод і вывад элементаў масіву

Для таго каб працаваць з масівам, неабходна задаць пачатковыя значэнні элементаў масіву. Зрабіць гэта можна некалькімі спосабамі:

1) вызначэнне элементаў масіву як канстант;

2) увод элементаў масіву з клавіятуры;

3) выкарыстанне выпадковых лікаў для вызначэння значэнняў;

4) выкарыстанне функцый (уласных ці стандартных) для вызначэння значэнняў;

5) увод элементаў масіву з тэкставага файла.

Элементам масіву можна задаць значэнні пры апісанні (прыклады 11.11, 11.12). У гэтым выпадку колькасць элементаў не задаецца, а вызначаецца аўтаматычна.

Пры ўводзе элементаў масіву з клавіятуры кожны элемент павінен уводзіцца асобна. Калі колькасць элементаў, што ўводзяцца, вызначана, то можна выкарыстаць цыкл for (прыклад 11.13).

Пры апісанні вектара яго памер можа быць зададзены пераменнай. Важна, каб значэнне гэтай пераменнай было вызначана да апісання вектара. Гэта значэнне можа быць зададзена з дапамогай каманды прысвойвання ці ўведзена з клавіятуры (прыклад 11.14).

Пры ўводзе радкоў трэба памятаць, што  прабел выкарыстоўваецца як раздзяляльнік. Калі выкарыстоўваць для ўводу каманду cin, то элементамі масіву могуць быць толькі асобныя словы радка (прыклад 11.15). Калі трэба, каб элементамі масіву былі радкі з прабеламі, то для ўводу неабходна каманда getline (прыклад 11.16).

Часам бывае зручна задаваць элементы масіву выпадковым чынам. Для гэтага выкарыстоўваецца функцыя rand(), якая генеруе выпадковы цэлы лік з прамежку [0; 32768). Калі элементы масіву павінны належаць адрэзку [a; b], то можна вызначыць значэнне элемента масіву як a[i]= rand() % (b – a + 1) + a; (прыклад 11.17).

Рэчыўны выпадковы лік у прамежку [0, 32.768) можна атрымаць так: a[i]= 1. * rand() / 1000;

Выводзіць элементы масіву можна ў радок (прыклад 11.18) ці ў слупок (прыклад 11.19). Калі элементы масіву выводзяцца ў радок, то паміж імі трэба выводзіць знак-раздзяляльнік (часцей за ўсё выкарыстоўваюць прабел), інакш усе лікі будуць раздрукаваны запар як адзін лік з вялікай колькасцю лічбаў. Выводзіць элементы масіву можна не толькі ў прамым парадку, але і ў адваротным (прыклад 11.20).

Прыклад 11.21. Напісаць праграму, якая сфарміруе масіў з n цотных лікаў з адрэзка [20, 70] выпадковым чынам. Запісаць лікі з масіву ў тэкставы файл. Вывесці на экран k-ы элемент масіву.

Этапы выканання задання

I. Зыходныя даныя: колькасць элементаў n і масіў a.

II. Вынік: шуканы элемент.

III. Алгарытм рашэння задачы.

1. Увод зыходных даных.
2. Генерацыя масіву.

2.1. Для таго каб элементы масіву былі толькі цотнымі, неабходна кожны атрыманы элемент памнажаць на 2. 
2.2. Паколькі элементы памнажаюцца на два, межы зыходнага адрэзка трэба паменшыць у 2 разы.
2.3. Вывад масіву па элементах.

3. Увод значэння k і вывад выніку.

IV. Апісанне пераменных:

n, k – int, a – vector <int>.

Прыклад 11.22. Напісаць праграму, якая прачытае з тэкставага файла спіс прозвішчаў навучэнцаў, запіша іх у масіў і выведзе са спіса прозвішчы з нумарамі ад k1 да k2.

Этапы выканання задання

I. Зыходныя даныя: масіў s і колькасць навучэнцаў n, нумара прозвішчаў  k1 і k2.

II. Вынік: спіс зададзеных прозвішчаў.

III. Алгарытм рашэння задачы.

1. Увод зыходных даных.
2. Вывад выніку
.

IV. Апісанне пераменных:

n, k1, k2 – int, a – vector <string>.

Калі для тэсціравання праграмы выкарыстоўваюцца прозвішчы, напісаныя кірыліцай, то важна захаваць тэкставы файл у той жа кадзіроўцы, якая ўстанаўліваецца для кансолі. Па змоўчанні для Блокнота можа быць устаноўлена кадзіроўка UTF-8.

Прыклад 11.11. Апісанне лікавага масіву, элементы якога з’яўляюцца канстантамі. 

vector <int> simple_numb = {2, 3, 5, 7, 11};

Прыклад 11.12. Апісанне масіву, элементы якога з’яўляюцца радковымі канстантамі.

vector <string> c_rgb = {"red", "green", "blue"};

 Прыклад 11.13. Увесці элементы масіву a з клавіятуры.

vector <int> a(10);

cout << "vvedi 10 chisel" << endl;

 for (int i = 0; i < 10; i++)

  cin >> a[i];

 Прыклад 11.14. Увесці зададзеную колькасць элементаў масіву a.

int n;

cout << "kol-vo chisel" << endl;

cin >> n;

vector <int> a(n);

cout << "vvedi chisla" << endl;

for (int i = 0; i < n; i++)

  cin >> a[i];

Прыклад 11.15. Увод масіву радкоў (без прабелаў):

int n;

cout << "kol-vo elementov" << endl;

cin >> n;

vector <string> s(n);

cout << "vvedi slova " << endl;

for (int i = 0; i < n; i++)

  cin >> s[i];

Прыклад 11.16. Увод масіву радкоў (з прабеламі): 

int n;

cout << "kol-vo elementov" << endl;

cin >> n;

cin.ignore();

vector <string> s(n);

cout << "vvedi stroki" << endl;

for (int i = 0; i < n; i++)

  getline (cin,  s[i]);

Прыклад 11.17. Выпадковым чынам задаць n элементаў масіву А. Кожны элемент — лік з адрэзка [-20; 20].

int n;

cout << "kol-vo elementov" << endl;

cin >> n;

vector <int> a(n);

for (int i = 0; i < n; i++)

  a[i] = rand() % 41 - 20; 

 Прыклад 11.18. Вывад элементаў масіву ў радок (праз прабел):

for (int i = 0; i < n; i++)

  cout << a[i] << " "; 

cout << endl;

Калі элементы масіву задаюцца выпадковым чынам, то пасля генерацыі іх трэба вывесці. Гэта неабходна для праверкі правільнасці работы, інакш незразумела, з якімі данымі працуе праграма.

Прыклад 11.19. Вывад элементаў масіву ў слупок (па адным у радку):

for (int i = 0; i < n; i++)

  cout << a[i] << endl;

Прыклад 11.20. Вывад элементаў масіву ў радок (у адваротным парадку):

for (int i = n - 1; i >= 0; i--)

  cout << a[i] << " ";

cout << endl;

Прыклад 11.21.

V. Праграма:

#include <iostream>

#include <fstream>

#include <vector>

#include <ctime>

#include <cstdlib>

 

using namespace std;

 

int main()

{

  srand(time(NULL));

  int n;

  cout << "n = ";

  cin >> n;

  vector <int> a(n);

  ofstream fout("output.txt");

  for (int i = 0; i < n; i++){

    a[i] = 2 * (rand() % 26 + 10);

    fout << a[i] << " ";

  }

  int k;

  cout << "k = ";

  cin >> k;

  cout << a[k];

  return 0;

}

VI.Тэсціраванне:

Прыклад 11.22.

V. Праграма:

#include <iostream>

#include <fstream>

#include <vector>

#include <windows.h>

 

using namespace std;

 

int main()

{

  SetConsoleCP(1251);

  SetConsoleOutputCP(1251);

  ifstream fin("input.txt");

  int n;

  fin >> n;

  fin.ignore();

  vector <string> s(n);

  for (int i = 0; i < n; i++)

    fin >> s[i];

  int k1, k2;

  cout << "k1 = ";

  cin >> k1;

  cout << "k2 = ";

  cin >> k2;

  for (int i = k1; i <= k2; i++)

    cout << s[i] << endl;

  return 0;

}


VI. Тэсціраванне:

11.5. Рашэнне задач з выкарыстаннем масіваў

Аперацыі, якія выконваюцца з элементамі масіву, адпавядаюць аперацыям, якія выконваюцца над базавым тыпам элементаў масіву (прыклад 11.23).

Прыклад 11.24. Зададзены аднамерны масіў з цэлых лікаў. Знайсці суму і здабытак элементаў гэтага масіву.

Этапы выканання задання

I. Зыходныя даныя: масіў a і колькасць элементаў n.

II. Вынік: сума элементаў і— здабытак элементаў масіву.

III. Алгарытм рашэння задачы.

1. Увод зыходных даных. Масіў уводзіцца паэлементна з клавіятуры. 
2. Вызначэнне пачатковага значэння для сумы (s = 0) і для здабытку (p = 1).
3. У цыкле дабаўляем чарговы элемент масіву да сумы і да здабытку.
4. Вывад выніку.

IV. Апісанне пераменных: n, s, p — int, a – vector <int>.

Прыклад 11.25. Адзнакі па інфарматыцы за першую чвэрць для ўсіх навучэнцаў 10 «Б» класа запісаны ў тэкставым файле (першы лік у файле паказвае колькасць навучэнцаў). Паспяховасць у класе будзем лічыць добрай, калі сярэдні бал большы за 7, дрэннай — калі сярэдні бал ніжэйшы за 4, у астатніх выпадках паспяховасць сярэдняя. Вызначыць паспяховасць класа па зададзеных адзнаках.

Этапы выканання задання

I. Зыходныя даныя: масіў a для захоўвання адзнак і колькасць навучэнцаў n

II. Вынік — адно са слоў: «добрая», «сярэдняя», «дрэнная» ў залежнасці ад значэння сярэдняга бала.

III. Алгарытм рашэння задачы.

1. Увод зыходных даных. Спачатку ўводзім колькасць навучэнцаў у класе, затым масіў адзнак.
2. Для вызначэння паспяховасці трэба вылічыць сярэдні бал (пераменная sr). Сярэдні бал вызначаецца як сума (пераменная s) усіх адзнак, падзеленая на колькасць навучэнцаў у класе. Пачатковае значэнне для сумы — s = 0.
3. У цыкле дабаўляем чарговы элемент масіву да сумы.
4. Дзелім атрыманую суму на колькасць навучэнцаў у класе.
5. Правяраем значэнне сярэдняга бала і выводзім вынік.

IV. Апісанне пераменных: n, s, p – int, sr – double, a – vector <int>.

Прыклад 11.26. Зададзены натуральны лік n (1 < n < 5000)Вызначыць, ці з’яўляецца гэты лік простым.

Этапы выканання задання

I. Зыходныя даныя: n — натуральны лік.

II. Вынік: вывад паведамлення «просты» ці «састаўны».

III. Алгарытм рашэння задачы.

1. Увод зыходных даных. 
2. Вядома, што лік n з’яўляецца простым, калі ён не падзяляецца ні на адзін просты лік, не большы за begin mathsize 16px style square root of straight n end style. Максімальны лік па ўмове — 5000, begin mathsize 16px style square root of 5000 space almost equal to space 70 comma 7107 end style. Створым масіў канстант s_n простых лікаў, не большых 71. 
3. У цыкле будзем дзяліць лік n на кожны з лікаў, не большых за  begin mathsize 16px style square root of straight n end style, якія захоўваюцца ў масіве канстант. Калі лік n не падзяліўся ні на адзін з іх, то лік n — просты, інакш — састаўны. 
4. Правяраем, з якой умовай скончыў работу цыкл: лік з’яўляецца простым, калі апошні прагледжаны элемент масіву большы за  begin mathsize 16px style square root of straight n end style (лік ні на што не падзяліўся).
5. Вывад выніку.

IV. Апісанне пераменных: n, — int, s_n – vector <int>.

Прыклад 11.23. Аперацыі над базавым тыпам.

  • Калі базавым тыпам элементаў масіву з’яўляецца тып int, то для элементаў дапушчальныя наступныя аперацыі: +, –, *, /, %.
  • Калі ў масіве захоўваюцца лікі тыпу double, то дапушчальнымі будуць аперацыі +, –, *, /. 
  • Калі ў масіве захоўваюцца радкі, то для кожнага яго элемента даступныя радковыя функцыі.

Прыклад 11.24.

V. Праграма:

#include <iostream>

#include <vector>

 

using namespace std;

 

int main()

{

  int n;

  cout << "vvedi n=";

  cin >> n;

  vector <int> a(n);

  for (int i = 0; i < n; i++)

    cin >> a[i];

  int s = 0;

  int p = 1;

  for (int i = 0; i < n; i++) {

    s += a[i];

    p *= a[i];

  }

  cout << "proizvedenie=" << p;

  cout << " summa=" << s << endl;

  return 0;

}

VI. Тэсціраванне.

Прыклад 11.25.

V. Праграма:

#include <iostream>

#include <fstream>

#include <vector>

 

using namespace std;

 

int main()

{

  ifstream fin("input.txt");

  setlocale(0, "");

  int n;

  fin >> n;

  vector <int> a(n);

  for (int i = 0; i < n; i++)

    fin >> a[i];

  int s = 0;

  for (int i = 0; i < n; i++)

    s += a[i];

  double sr = 1. * s / n;

  cout << "sr = " << sr << endl;

  if (sr > 7)

    cout << "хорошая" << endl;

  else

    if (sr < 4)

      cout << "плохая" << endl;

    else

      cout << "средняя" << endl;

  return 0;

}

VI. Тэсціраванне.

Прыклад 11.26.

Умова s_n[i] <= sqrt(n) правяраецца доўга за кошт выкліку функцыі sqrt(n) і пераходу да вылічэнняў с рэчыўным тыпам даных. Гэту ўмову звычайна замяняюць эквівалентным: s_n[i]*s_n[i] <= n.

V. Праграма:

#include <iostream>

#include <vector>

 

using namespace std;

 

int main()

{

  vector <int> s_n = {2, 3, 5, 7, 11, 
  13, 17, 19, 23, 29, 31, 37, 41, 43, 
  47, 53, 59, 61, 67, 71};

  int n;

  cout << "n = ";

  cin >> n;

  int i = 0;

  while (s_n[i] * s_n[i] <= n

         && n % s_n[i])

    i++;

  if (s_n[i] * s_n[i] > n)

    cout << "prostoe" << endl;

  else

    cout << "sostavnoe" << endl;

  return 0;

}

VI. Тэсціраванне.

Аналіз вынікаў. Праверыць правільнасць вылічэнняў можна на калькулятары або паглядзець у табліцы простых лікаў [1].


[1] Тэхнічныя табліцы — http://tehtab.ru/guide/guidemathematics/guidemathematicsfigurestables/simplefigures/
(дата доступу: 28.07.2020)

Пытанні да параграфу

1. Што такое масіў?

2. Як апісваюцца масівы?

3. Што такое памер масіву?

4. Якія аперацыі дапушчальныя для масіваў?

5. Якія спосабы задання значэнняў элементам масіву вы ведаеце?

6. Як можна вывесці масіў?

7. Якія аперацыі дапушчальныя для элементаў масіву рэчыўных лікаў?

Практыкаванні

    

1. Напішыце праграму, якая запіша масіў з n выпадковых лікаў з адрэзка [–10; 10] у тэкставы файл. Выведзіце: першы элемент; апошні элемент; элемент, які стаіць на сярэднім месцы.

2. Запішыце ў масіў n радкоў, прачытаўшы іх з тэкставага файла. Выведзіце элементы масіву ў адваротным парадку.

3. Для атрымання рэчыўных выпадковых лікаў можна паасобку атрымліваць цэлую і дробавую часткі, а затым знаходзіць іх суму. Напрыклад, атрымаць лік з прамежку [0; 1) з трыма лічбамі пасля коскі можна з дапамогай каманды:

double x = 1. * rand() % 1000  / 1000;

Напішыце праграму, якая згенеруе масіў са 100 рэчыўных лікаў і запіша іх у тэкставы файл. Знайдзіце сярэдняе арыфметычнае гэтых лікаў.

4. Для масіву, апісанага ў прыкладзе 11.6, задайце значэнні выпадковымі рэчыўнымі лікамі з інтэрвалу (–20; 10) з адным знакам пасля коскі. Запішыце атрыманыя даныя ў тэкставы файл. Выведзіце ў іншы тэкставы файл значэнні тэмператур для зададзенага дыяпазону дат. Вывад для дыяпазону дат ад 1 снежня да 8 снежня можа быць такім:

1 снежня тэмпература была = 9.4
2 снежня тэмпература была = –11.8
3 снежня тэмпература была = –16.6
4 снежня тэмпература была = 8
5 снежня тэмпература была = 0.9
6 снежня тэмпература была = –9.3
7 снежня тэмпература была = –11.5
8 снежня тэмпература была = 6.6

5. Для задачы з прыкладу 11.24 выканайце наступныя заданні:

1. Запоўніце табліцу.

N

n

a

S

P

1

3

-2 -3 -5

 

 

2

5

1 2 3 4 5

 

 

3

10

1 -3 -2 3 4 3 2 4 3 2

 

 

2. Дабаўце ў табліцу свае значэнні n і a.
3. Паспрабуйце падабраць такія значэнні элементаў масіву, каб S = P, для n = 2 і n = 5.
4. Для n = 10 увялі ўсе элементы масіву, роўныя 9. Які вынік атрымалі? Чаму? Што трэба выправіць у праграме для атрымання правільнага выніку?

6. Напішыце праграмы, якія для зададзенага масіву вылічаць: 

    1. .begin mathsize 16px style square root of open vertical bar a subscript 0 space asterisk times space a subscript 1 space asterisk times... asterisk times a subscript n space – space 1 end subscript close vertical bar end root end style
    2. a0 + 2a1 + 3a2 + ... + nan – 1.
    3. a0*a1 + a* a2 + a* a3 + ... + a– 2 * an  – 1.
    4. a0 a1 + a2 a3 +... + (–1)n - 1a– 1.
    5. a0 2a1 + 4a2 8a3 ... + (–2)na– 1.
    6. a0 + a1 – 2a2 + 6a3 – 24a4 ... + (n 1)!(–1)nan 1.

7. У ходзе хакейнага матча выдаляліся гульцы абедзвюх каманд. Для кожнага выдаленага гульца вядомы час яго адсутнасці на полі. Напішыце праграму для вызначэння, якая вызначыць, якая з каманд правяла больш часу на лаўцы штрафнікоў

8. Для задачы з прыкладу 11.26 выканайце наступныя заданні.

1. Увядзіце лік 5557. Чаму з’явілася памылка?
2. Дапоўніце масіў канстант простымі лікамі так, каб праграма магла выдаваць адказ для лікаў, меншых за 10 000. (Для гэтага можна выкарыстаць саму праграму або табліцу простых лікаў.)