Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторный практикум

.pdf
Скачиваний:
48
Добавлен:
15.06.2021
Размер:
3 Mб
Скачать

Рис.2. Результат выполнения программы к примеру 2

Текст программы:

#include <iostream> #include <iomanip> #include <time.h> using namespace std; void main()

{

setlocale(LC_CTYPE, "Russian"); srand((unsigned)time(NULL));

const int n = 10;// количество элементов массива

int

a[n];

// объявление массива

for

(int i = 0; i<n; i++) a[i] = rand() / 100 -

100;

cout << "Массив>";

for (int i = 0; i<n; i++)cout << setw(5) << a[i] ; cout << endl;

int max = a[0], n_max = 0;// начальные значения

// максимального элемента и его порядкового номера for (int i = 0; i<n; i++)

{

if (a[i]>max)

{

max = a[i]; n_max = i;

}

}

cout << "Максимальный элемент=" << max << " его по-

рядковый номер=" << n_max + 1 << endl;

}

Пример 3. Даны массивы Х(20) и Y(20). Вычислить значения элементов массива Z(20) по формуле zi xi2 yi 2 .

73

Решение. Сформируем массивы X и Y с помощью датчика случайных чисел и выведем их значения на экран. Далее в цикле вычислим значения элементов массива Z и также выведем их на экран (рис.3).

Рис.3. Результат выполнения программы к примеру 3

Текст программы:

#include <iostream> #include <iomanip> #include <time.h>

using namespace std; void main()

{

setlocale(LC_CTYPE, "Russian"); srand((unsigned)time(NULL));

const int n = 20;// количество элементов массивов double x[n], y[n], z[n];

/* формирование массивов X и Y и вывод их значений на экран */

cout << "Массив X" << endl;

for (int i=0; i<n; i++) x[i] = rand() / 100 - 100; for (int i = 0; i<n; i++) cout << setw(5) << x[i] ; cout << endl;

cout << "Массив Y" << endl;

for (int i=0; i<n; i++) y[i] = rand() / 100 - 100; for (int i = 0; i<n; i++)cout << setw(5) << y[i] ; cout << endl;

// Формирование массива Z

for (int i = 0; i<n; i++) z[i] = sqrt(pow(x[i], 2)

+pow(abs(y[i]), 2));

//Вывод значений элементов массива z на экран cout << "Массив Z=" << endl;

for (int i = 0; i<n; i++) cout << setw(8) << setprecision(5)<< z[i];

74

cout << endl;

}

Пример 4. Дан массив действительных чисел X(N). Вычислить

элементы массива Y, где y0 = max(x0, x1), y1 = max(x2, x3), y2 = max(x4, x5) и

т.д. Если N нечетно, то последний элемент y = xN–1. Определить в Y наименьший элемент и его порядковый номер.

Решение. Представим нахождение i-го элемента массива Y с помощью рекуррентного выражения: yi = max(x2i, x2i+1), где i = 0, 1, 2,…, N–1.

Текст программы:

#include <iostream> #include <iomanip> #include <time.h> using namespace std; void main()

{

setlocale(LC_CTYPE, "Russian"); srand((unsigned)time(NULL));

const int n = 9, //количество элементов массива X k = n/2 + 1;//количество элементов массива Y

double x[n], y[k];

// Формирование и вывод значений элементов массива X cout << "Массив X" << endl;

for (int i = 0; i<n; i++) x[i]= rand() / 100 - 100; for (int i = 0; i<n; i++)cout << setw(5) << x[i] ; cout << endl;

//Формирование значений элементов массива Y for (int i = 0; i<n / 2; i++)

{

if (x[2 * i]>x[2 * i + 1])y[i] = x[2 * i]; else y[i] = x[2 * i + 1];

}

//Вывод значений элементов массива Y на экран cout << "Массив Y=" << endl;

for(int i=0; i<n/2;i++)cout<<setw(5)<< y[i] << " ";

//Если количество элементов массива x нечетно,

//добавление в массив y последнего элемента и вывод его на экран

if (n % 2 != 0)

{

y[k - 1] = x[n - 1]; cout << y[k - 1];

}

75

cout << endl;

/* нахождение минимального элемента массива y и его порядкового номера */

double min = y[0]; int n_min = 0;

for (int i = 0; i<k; i++) if (y[i]<min)

{

min = y[i]; n_min = i;

}

cout << "Минимальный элемент в Y=" << min << " его порядковый номер=" << n_min + 1 << endl;

}

Результат выполнения программы представлен на рис.4.

Рис.4. Результат выполнения программы к примеру 4

Пример 5. Написать программу сортировки одномерного массива по возрастанию.

Решение. Разобьем массив условно на две части: отсортированную левую и неотсортированную правую. Границей между отсортированной и неотсортированной частью будет параметр цикла i, меняющийся от 0 до последнего элемента массива. В цикле, «просматривая» все элементы массива в неотсортированной части, начиная с i + 1 до последнего элемента, найдем наименьший элемент и поменяем его с элементом, стоящим на первом месте в неотсортированной части.

Результат приведен на рис.5.

76

Рис.5. Результат выполнения программы к примеру 5

Текст программы:

#include <iostream> #include <iomanip> #include <time.h> using namespace std; void main()

{

setlocale(LC_CTYPE, "Russian"); srand((unsigned)time(NULL));

const int n = 15; // количество элементов массива int x[n];

//формирование и вывод на экран элементов

//исходного массива

for (int i = 0; i<n; i++) x[i]=rand() / 100 - 100; cout << "Исходный массив>" << endl;;

for (int i = 0; i<n; i++)cout << setw(5) << x[i]; cout << endl;

// Сортировка массива

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

{

//начальные значения наименьшего элемента и

//его порядкового номера в неотсортированной части int min = x[i], n_min = i;

//поиск наименьшего элемента и его порядкового

//номера в неотсортированной части

for (int j = i + 1; j<n; j++) if (x[j]<min)

{

min = x[j]; n_min = j;

}

//На место найденного минимального элемента //записать значение первого элемента в //неотсортированной части

x[n_min] = x[i];

//На место первого элемента неотсортированной части

//записать значение минимального элемента

x[i] = min;

}

cout << "Отсортированный массив>" << endl;

for (int i = 0; i<n; i++)cout << setw(5)<< x[i] ; cout << endl;

}

77

Порядок выполнения работы

1.Разработать и выполнить программу в соответствии с вариантом задания.

2.Результаты выполнения программы занести в отчет по работе.

3.Показать результаты работы преподавателю.

Требования к отчету

Отчет должен содержать:

1)наименование лабораторной работы;

2)формулировку задания;

3)текст программы для варианта задания;

4)результат выполнения программы.

78

Варианты заданий

Написать программу в соответствии с номером варианта. Номер варианта задания соответствует номеру компьютера в компьютерном классе, на котором выполняется лабораторная работа.

Задание

п/п

 

1

Дан массив отрицательных чисел с1, с2 ..., с40 и некоторое отри-

 

цательное число Р. Найти сумму тех элементов массива {с}, ко-

 

торые меньше числа Р, и подсчитать количество таких элементов

2

Дан массив чисел {xi }, где i = 1,40. Найти сумму значений

 

элементов массива {xi }, больших некоторого числа С, и подсчи-

 

тать количество таких сумм

3

Дан массив положительных чисел k1 , k2, . ., k100. Найти сумму

 

членов последовательности ln k1, ln k2, … , ln k100 и подсчитать

 

количество чисел, значение которых больше значения первого

 

элемента массива

4

Дан массив чисел {ai }, где i = 1,70. Найти произведение положи-

 

тельных элементов и подсчитать количество таких элементов

5

Даны два массива чисел x1 , x2 , ..., x35 и y1 , y2 , ... , y35 .

 

Найти произведение тех элементов массива {у}, которые по аб-

 

солютной величине больше соответствующих элементов массива

 

{x}, и подсчитать количество таких элементов

6

Дан массив чисел x1 , x2 , ..., x40 . Найти сумму таких элементов

 

массива Х, значения которых попадают в заданный интервал

 

[а; b], и подсчитать количество таких элементов

7

Дан массив чисел x1 , x2 , ... , x30 . Найти сумму отрицательных

 

членов последовательности sin x1 , sin x2 , ... , sin x30 и подсчи-

 

тать количество таких членов

8

Даны два массива чисел {хk} и {уk} , где k = 1,80. Найти произ-

 

ведение отрицательных сумм элементов (хk + уk) и подсчитать

 

количество таких сумм

9

Дан массив чисел {ck }, где k = 1, … , 19. Вычислить Z = ck для

 

положительных элементов массива

10

Дан массив чисел {zn }, где n = 1, 2, ... , 25. Вычислить количест-

 

во элементов, равных нулю, и найти сумму отрицательных чисел

 

79

 

Продолжение

Задание

п/п

 

11

Даны два массива чисел x1, x2 , ... , x35 и y1, y2, ... , y35. Найти про-

 

изведение тех элементов массива {y}, которые по абсолютной

 

величине больше соответствующих элементов массива {x}, и

 

подсчитать их количество

12

Даны два массива чисел {xk} и {yk}, где k = 1, … , 80. Найти про-

 

изведение отрицательных сумм элементов (xk + yk) и подсчитать

 

количество таких сумм

13

Дан массив чисел c1, c2 ..., c20 , среди которых есть нулевые

 

элементы. Найти произведение ненулевых элементов массива

 

{с} и подсчитать число нулевых элементов

14

Даны два массивы чисел {xk} и {yk}, где k = 1, … ,25. Найти про-

 

изведения из тех абсолютных значений разностей |xk yk|, кото-

 

рые больше некоторого числа А, и подсчитать их количество

15

Дан массив чисел а1, а2, а3, ... , а20. Найти произведение положи-

 

тельных членов последовательности cos а1, cos а2, … , cos а20 и

 

подсчитать количество таких членов

16

Дан массив чисел l1, l2, … , l50. Найти произведение положитель-

 

ных элементов массива {l}, стоящих на четных местах, и под-

 

считать количество отрицательных элементов

17

Даны два массива чисел а1, а2, а3, …, а20 и с1, с2, с3, …, с20. Найти

 

сумму тех элементов массива {ai}, для которых выполнено ус-

 

ловие аi > ci , и подсчитать количество таких элементов

18

Даны два массива чисел b1, b2, ... , b50 и d1, d2, …, d50. Найти сум-

 

му всех положительных элементов массивов {b} и {d} и подсчи-

 

тать количество положительных элементов массива {b}

19

Найти произведение всех положительных чисел массива {ai},

 

где i = 1,2,…,13, и подсчитать количество отрицательных значе-

 

ний

20

Даны два массива чисел {xk} и {yk}, где k = 1, … , 40. Найти

 

сумму тех разностей элементов массивов {xk} и {yk}, которые

 

больше некоторого числа С, и подсчитать количество таких раз-

 

ностей

80

 

Окончание

Задание

п/п

 

21

Дан массив чисел n1, n2, … , n15. Найти произведение отрица-

 

тельных элементов массива n, стоящих на нечетных местах, и

 

подсчитать количество положительных значений

22

Даны два массива чисел {aj}и {bj}, где j = 1, 2, … , 20. Найти

 

произведение тех отрицательных элементов массива {bj}, кото-

 

рые по абсолютной величине больше соответствующего эле-

 

мента массива {aj}, и подсчитать количество таких элементов

 

массива

23

Дан массив чисел а1, а2, а3, ... , а20. Найти произведение тех эле-

 

ментов массива {a}, значения которых не попадают в заданный

 

интервал [d; l], и подсчитать количество таких элементов масси-

 

ва

24

Даны два массива чисел {ci} и {di}, где i = 1,2, … ,14. Найти

 

сумму отрицательных произведений элементов cidi, и подсчи-

 

тать количество таких отрицательных произведений cidi

25

Даны два массива чисел а1, а2, а3, … , а20 и b1, b2, b3, … , b20.

 

Найти сумму всех положительных элементов массивов {a} и

 

{b} и подсчитать количество отрицательных элементов массива

 

{a}

81

Лабораторная работа № 5

Программирование задач с использованием матриц

Цель работы: изучение приемов программирования задач с использованием матриц; получение практических навыков программирования задач с использованием матриц.

Теоретические сведения

Матрица - это двумерный массив или массив массивов, в котором каждый элемент одномерного массива (строки) представляет собой также одномерный массив (столбец). Нумерация строк и столбцов начинается с нуля. Элементы матрицы в памяти компьютера располагаются по строкам.

А0 0

А0 1

А0 2

А0 n–1

...

Аm–1 0

Аm–1 1

Аm–1 2

Аm–1 n–1

Описание матрицы. Общий вид:

тип идентификатор[кол-во_строк][кол-во_столбцов]

Примеры описания:

//целочисленный массив из 10 строк и 15 столбцов int a[10][15];

// вещественный массив из 5 строк и столбцов double matr[5][5];

Задать начальные значения для элементов массива можно несколькими способами:

инициализировать элементы массива, т.е. в программе задать численные значения;

ввести с клавиатуры значения элементов массива;

82