Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КТіП Лекції 20110516 (1).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆
    1. Використання псевдовипадкових чисел

Для генерації псевдовипадкових чисел можна використовувати функцію rand, яка повертає значення цілого типу в діапазоні від 0 до максимального значення типу int. Кожне звертання до функції у процесі виконання програми викликає генерування нового псевдовипадкового числа з рівномірним законом розподілу. Приклад використання функції rand:

#include <iostream>

#include <ctime>

using namespace std;

int main() {

srand(unsigned(time(NULL)));

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

cout << rand() << endl;

}

Функція rand починає генерування значень з єдиного встановленого початкового значення. Тому при виконання програми кожного разу будемо отримувати одну і ту саму послідовність псевдовипадкових чисел. Для того, щоб послідовності чисел були різними, необхідно встановлювати їх початкове значення. Для цього можна використовувати функцію time, яка повертає поточний час.

Для генерації випадкових чисел в довільному діапазоні значень використовуються операцію %. Наприклад, необхідно отримати 10 чисел в діапазоні від 5 до 15:

#include <iostream>

#include <ctime>

using namespace std;

int main() {

srand(unsigned(time(NULL)));

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

cout << 5 + rand() % 10 << endl;

}

  1. Масиви

    1. Властивості масивів в мові програмування С++

Масиви належать до складених (агрегованих) типів даних. За визначенням масив – це організована певним чином сукупність даних одного типу (елементів масиву). Основні властивості масивів в мові програмування С++:

  1. масив займає неперервну ділянку оперативної пам'яті;

  2. всі елементи масиву мають однаковий тип і спільне ім’я;

  3. тип елементів масиву може бути довільним простим або складеним;

  4. елементи масиву розташовані в пам'яті послідовно за порядком зростання індексів;

  5. індекс першого елементу масиву завжди дорівнює нулю;

  6. до елементів масиву можна звертатись за допомогою індексів і вказівників;

  7. ім’я масиву є константним вказівником на його перший елемент;

  8. масив може бути одновимірним і багатовимірним.

    1. Одновимірні масиви

Одновимірний масив – це лінійна послідовність однотипних елементів. Такі масиви часто називають математичним терміном вектор. Кожен елемент масиву має свій порядковий номер (індекс), який визначає розташування цього елемента в масиві.

Як і звичайні змінні, масиви перед використанням необхідно явно оголошувати. Це виконується за допомогою такої синтаксичної конструкції:

тип_елементів ім’я_масиву [ кількість_елементів ];

тут тип елементів – довільний допустимий простий або складений тип, ім’я масиву – ідентифікатор, що відповідає правилам запису імен, квадратні дужки – обов’язкова ознака масиву, кількість елементів – константа чи константний вираз, що визначає розмірність даного масиву. Для кожного масиву компілятор виділяє неперервну ділянку пам'яті, обсяг якої дорівнює добутку

кількість_елементів × sizeof( тип_елементів )

При оголошенні масивів можна відразу виконувати ініціалізацію їх елементів. Застосовують дві форми ініціалізації: з зазначенням кількості елементів масиву і без зазначення кількості елементів масиву.

У першому випадку масив оголошується звичайним чином, після чого в фігурних дужках записують константні значення елементів масиву, починаючи від першого (тобто елемента з індексом нуль). При цьому кількість заданих значень не повинна перевищувати вказану розмірність масиву, але може бути меншою за неї – тоді для перших елементів масиву, для яких вказані значення, присвоюються ці значення, решті присвоюється нуль. Цю властивість мови програмування С++ зручно використовувати для присвоєння нульових значень елементам масиву.

int a[5] = { 1, 2, 3, 4, 5 }; // 1 2 3 4 5

int b[5] = { 1, 2, 3 }; // 1 2 3 0 0

int c[5] = { }; // 0 0 0 0 0

Якщо в оголошенні масиву виконується його повна ініціалізація, тобто вказані початкові значення для всіх елементів масиву, то кількість елементів масиву можна не опустити. Розмірність масиву визначається кількістю елементів – ініціалізаторів. Розмірність масиву, оголошеного без зазначення кількості елементів, можна визначити за допомогою операції sizeof:

кількість_елементів = sizeof(ім’я_масиву) / sizeof(тип_елементів)

Операція sizeof(ім’я_масиву) повертає розмір (обсяг в байтах) усієї ділянки пам'яті, яку займає масив, незалежно від того, наскільки він заповнений. Визначимо кількість елементів в масиві, оголошеному без зазначення його розмірності:

int a[] = { 1, 2, 3, 4, 5 };

int n = sizeof( a ) / sizeof( int );

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

cout << a[i] << endl;

Елемент масиву є змінною, яка має тип, заданий в оголошенні масиву, і синтаксично може використовуватися у будь якому місці програми, де може бути записане дане такого типу. Звертання до елементу масиву виконується по його номеру (індексу) таким чином:

ім’я_масиву [ індекс_елемента ]

де індекс елемента може бути довільним виразом, який має значення цілого типу і задає порядковий номер елемента в масиві (нумерація починається з нуля). Компілятор не контролює відповідність значень індексів до розміру масиву. Некоректні звертання до елементів масиву можуть призвести до аварійного завершення роботи програми або краху системи.

Заповнити масив з 100 елементів цілими випадковими числами в діапазоні від 0 до 1000. Знайти найбільший елемент масиву і середнє значення елементів масиву.

#include <iostream>

#include <ctime>

using namespace std;

int main() {

srand(unsigned(time(NULL)));

const int NUM = 100; // кількість елементів масиву

const int MIN = 0; // мінімальне значення елементів масиву

const int MAX = 1000;// максимальне значення елементів масиву

int a[NUM], i, m;

double avg;

for ( i = 0; i < NUM; ++i )

a[i] = MIN + rand( ) % MAX;

for ( i = 0, m = 0, avg = 0; i < NUM; ++i ) {

avg += a[i];

if ( a[i] > m )

m = a[i];

}

avg /= NUM;

cout << "avg = " << avg << endl;

cout << "max = " << m << endl;

}

Заповнити масив з 10 елементів цілими випадковими числами від -10 до 10. Вивести на екран спочатку додатні елементи масиву, потім – від’ємні. Замінити від’ємні елементи масиву на їх модулі.

#include <iostream>

#include <ctime>

using namespace std;

int main() {

srand(unsigned(time(NULL)));

const int NUM = 10;

const int MIN = -10;

const int MAX = 10;

int a[NUM], i;

for ( i = 0; i < NUM; ++i )

a[i] = MIN + rand( ) % ( MAX - MIN );

for ( i = 0; i < NUM; ++i )

if ( a[i] >= 0 )

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

for ( i = 0; i < NUM; ++i )

if ( a[i] < 0 ) {

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

a[i] = -a[i];

}

cout << endl;

for ( i = 0; i < NUM; ++i )

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

}

Знайти кількість елементів масиву (у відсотках), більших середнього арифметичного. Масив заповнимо дійсними випадковими числами від 0 до 1.

#include <iostream>

#include <ctime>

using namespace std;

int main() {

srand( unsigned( time ( NULL ) ) );

const int NUM = 1000;

double a[ NUM ], avg;

int i, n;

for ( i = 0, avg = 0; i < NUM; ++i ) {

a[ i ] = ( rand( ) % 1000 ) / 1000.;

avg += a[ i ];

}

avg /= NUM;

cout << avg << endl;

for (i = 0, n = 0; i < NUM; ++i)

if ( a[ i ] > avg )

n++;

cout << ( double ) n / NUM * 100 << endl;

}

Поміняти місцями максимальний і мінімальний елементи масиву.

#include <iostream>

#include <ctime>

using namespace std;

int main() {

srand( unsigned( time( NULL ) ) );

const int N = 10;

int a[ N ], min, max, i, t;

for ( i = 0, min = 0, max = 0; i < N; ++i ) {

a[ i ] = rand( ) % 10;

if ( a[ i ] > max ) max = i;

if ( a[ i ] < min ) min = i;

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

}

cout << endl;

t = a[ min ];

a[ min ] = a[ max ];

a[ max ] = t;

for ( i = 0; i < N; ++i )

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

cout << endl;

}

Є послідовність цілих випадкових чисел в діапазоні від 0 до 9. Знайти кількість кожного з чисел, тобто кількість нулів, одиниць, двійок і так далі, в цьому масиві.

#include <iostream>

#include <ctime>

using namespace std;

int main() {

srand( unsigned( time( NULL ) ) );

const int N = 1000; // кількість чисел

int a[ 10 ] = { }, i;

for ( i = 0; i < N; ++i )

a[ rand( ) % 10 ] ++;

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

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

}

В математиці, многочленом чи поліномом однієї змінної називається вираз вигляду

де сі є сталими коефіцієнтами (константами), а х – змінна.

Сума многочленів є многочленом. Степінь суми многочленів дорівнює максимуму степенів доданків:

Знайти значення полінома для довільного х і суму двох поліномів.

#include <iostream>

#include <ctime>

using namespace std;

int main() {

srand( unsigned( time( NULL ) ) );

const int NMAX = 100;

double p1[ NMAX ] = { 1, 2, 3 };

double p2[ NMAX ] = { 2, 3, 4, 5, 6 };

double p3[ NMAX ] = { };

int np1 = 3;

int np2 = 5;

int np3, i;

double x, s;

x = 1.1;

for ( i = 0, s = 0; i < np1; i++ )

s += p1[ i ] * pow( x, (double) i );

cout << s << endl;

for ( i = 0, s = 0; i < np2; i++ )

s += p2[ i ] * pow( x, (double) i );

cout << s << endl;

np3 = np1 > np2 ? np1 : np2;

for ( i = 0; i < np3; i++ ) {

p3[ i ] = p1[ i ] + p2[ i ];

cout << p3[ i ] << " ";

}

for ( i = 0, s = 0; i < np3; i++ )

s += p3[ i ] * pow( x, (double) i );

cout << endl << s << endl;

}

Вивести на екран таку послідовність чисел:

1

1 2

1 2 3

1 2 3 4

#include <iostream>

using namespace std;

int main() {

int i, j, n;

cin >> n; // кількість рядків

for ( i = 1; i <= n; i++ ) {

for ( j = 1; j <= i; j++ )

cout << j << " ";

cout << endl;

}

}