Лабораторный практикум
.pdfРис.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