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

Алгоритмизация и программирование. Учебное пособие для студентов направления подготовки 09.03.02 Информационные системы и технологии

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

Рис 69. Программный код задачи 20

Результаты реализации программы:

– для $ = 5 (рис. 70)

Рис 70. Результат решения задачи 20 для n=5

– для $ = 10 (рис. 71)

Рис 71. Результат решения задачи 20 для n=10

При реализации данной программы можно заметить, что на самом деле функция rand генерирует псевдослучайные числа. То есть числа, которые кажутся случайными, но на самом деле имеют вполне определенные значения и повторный вызов функции rand элементы массива не изменяет.

Для получения случайного числа необходимо использовать функцию srand из стандартной библиотеки, которая получает целый аргумент unsigned, и при каждом использовании функции rand она будет умножать его на переданное число. Чтобы не вводить каждый раз начальное число, используют показания часов.

91

srand ((unsigned)time(NULL)); // автоматически считывает показания часов в качестве начального числа

Функция time возвращает текущее время, выраженное в секундах. Данное значение преобразуется в беззнаковое целое число и используется как начальное значение в ГСЧ.

При использовании функции srand обязательно добавлять в заголовочный файл библиотеки #include <time.h>.

Для достижения желаемого результата случайности вызывать функцию srand необходимо один раз. Иначе это приводит к снижению эффективности программы.

Для предыдущего примера получим массив случайных чисел с помощью ГСЧ с использованием функции srand. Приведем только часть программы, в которой будут изменения

– подключение библиотеки #include <time.h> и обращении к функции srand. Остальные действия останутся неизменными.

Задача 21. Создайте массив случайных чисел с помощью ГСЧ и напечатайте его. Математическая модель и описание алгоритма решения. Пользователю предлагается

указать размер массива $, после чего программа генерирует случайные элементы массива заданного размера. Тело программы совпадает с задачей 20, за исключением некоторых моментов (см. ниже).

Текст программы к задаче 21.

------------------------------------------------------------------------------------------------

#include<stdio.h>

#include<math.h>

# include <time.h>

int main ()

{

srand((unsigned) time(NULL)); int A[100], n, i;

………………………………………………………..

………………………………………………………..

return 0;

}

------------------------------------------------------------------------------------------------

В компиляторе языка С++ этот компьютерный код представлен на рис. 72.

92

Рис 72. Программный код задачи 21

Результаты реализации программы:

– для $ = 5 (рис. 73)

Рис 73. Результат решения задачи 21 для n=5

– для $ = 10 (рис. 74)

Рис 74. Результат решения задачи 21 для n=10

Обратите внимание, значения элементов массива теперь действительно случайные и не повторяются.

93

§ 4. Пример решения задач с массивами.

Задача 22. Найдите длину массива и сумму его элементов: {500, 800, 200, 300, 700, 500, 600, 250}.

Математическая модель и описание алгоритма решения. Программа описывает поиск длины массива и суммы его элементов. Массив задан в условии, пользователю не нужно ничего вводить.

Текст программы к задаче 22.

------------------------------------------------------------------------------------------------

#include <iostream> using namespace std;

int main ()

{

int sum = 0;

int salaries[] = { 500, 800, 200, 300, 700, 500, 600, 250 }; int length = sizeof(salaries) / sizeof(salaries[0]);

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

{

sum += salaries[i];

}

cout << " Sum of array elements: " << sum << "\n"; cout << " Array length: " << length << "\n";

}

------------------------------------------------------------------------------------------------

В компиляторе языка С++ этот компьютерный код представлен на рис. 75.

Рис 75. Программный код задачи 22

94

Результаты реализации программы на рис. 76:

Рис 76. Результат решения задачи 22

Задача 23. Найдите минимальное и максимальное значения в массиве {1, 2, 32, 40, 100, 2, 33, 5, 6, 213, 7, 9, 2, -1}.

Математическая модель и описание алгоритма решения. Программа описывает поиск минимального значения в массиве. Массив задан в условии, пользователю не нужно ничего вводить.

Текст программы к задаче 23.

------------------------------------------------------------------------------------------------

#include <iostream> using namespace std;

int main ()

{

int nums[] = { 1, 2, 32, 40, 100, 2, 33, 5, 6, 213, 7, 9, 2, -1 }; int min = nums[0], max = nums[0];

int length = sizeof(nums) / sizeof(nums[0]); for(int i = 0; i < length; i++)

{

if(nums[i] < min)

{

min = nums[i];

}

if(nums[i] > max)

{

max = nums[i];

}

}

cout << " Minimum value: " << min;

cout << "\n Maximum value: " << max << "\n";

}

------------------------------------------------------------------------------------------------

95

В компиляторе языка С++ этот компьютерный код представлен на рис. 77.

Рис 77. Программный код задачи 23

Результаты реализации программы на рис. 78:

Рис 78. Результат решения задачи 23

Задача 24. Установите взаимное соответствие между элементами массивов имен работников и их зарплат:

{"Anton", "Igor", "Boris", "Artyom"} и {100, 200, 300, 350}.

Математическая модель и описание алгоритма решения. Программа описывает установление взаимного соответствия между двумя массивами. Оба массива заданы в условии, пользователю не нужно ничего вводить.

96

Текст программы к задаче 24.

------------------------------------------------------------------------------------------------

#include <iostream> using namespace std;

int main ()

{

string names[] = { "Anton", "Igor", "Boris", "Artyom" }; int salaries[] = { 100, 200, 300, 350 };

string name; int index = -1; int salary;

cout << " Enter your name: "; cin >> name;

int length = sizeof(salaries) / sizeof(salaries[0]); for(int i = 0; i < length; i++)

{

if (names[i] == name)

{

salary = salaries[i]; index = i;

break;

}

}

cout << " Hello, " << name << "!\n Your ID in the system: "; cout << index << "\n Your salary: " << salary << " rubles \n";

}

------------------------------------------------------------------------------------------------

В компиляторе языка С++ этот компьютерный код представлен на рис. 79.

97

Рис 79. Программный код задачи 24

Результаты реализации программы на рис. 80:

Рис 80. Результат решения задачи 24

98

Глава 8. ФУНКЦИИ

§ 1. Функции: определение и структура.

Решая любую сложную задачу, можно разбить её на более мелкие подзадачи. Составление алгоритма решения таких задач включает использование вспомогательных алгоритмов или подпрограмм. Главное преимущество подпрограмм – обращение к ним возможно многократно число раз из любого места основной программы, что облегчает написание кода программы.

Вязыке программирования С++ такие подпрограммы называют функцией – совокупность объявлений и операторов, предназначенных для решения определенной подзадачи.

Каждая функция должна иметь имя, по которому её объявляют, определяют и вызывают в программе. Как минимум с одной функцией мы всегда встречаемся в языках программирования С/С++, это главная функция main(). При запуске она вызывается автоматически и в каком месте она бы не находилась, именно с неё начинается выполнение программы.

Всвою очередь функция main() может вызывать другие функции. Различают стандартные и программируемые пользователем функции.

Работа с функциями состоит в трех этапах:

1. Определение – описание действий, которые выполняет функция.

2. Объявление – задание формы обращения к функции.

3. Вызов функции в программе.

Рассмотрим подробнее каждый этап работы с функцией.

Вопределение функции входит заголовок и тело функции.

Заголовок содержит информацию о типе результата, имя функции, список формальных параметров, их количество и порядок следования. Тело функции задает вспомогательный алгоритм с использованием внутренних локальных переменных.

Структура определения функции:

[<тип_результата>] <имя_функции> ([<список_формальных_параметров>])

{

<тело_функции>

}

Имя функции – это произвольный идентификатор, несовпадающий со служебными словами и именами других объектов программы.

Список формальных параметров представляет собой последовательность объявлений формальных параметров <обозначение_типа> <имя_параметра>, разделенная запятыми.

99

§ 2. Формальные и фактические параметры функции.

Формальные параметры – это переменные, которые используются внутри тела функции; они получают значения при вызове функции в программе. При этом им присваиваются значения фактических параметров – соответствующих аргументов функции: переменных, констант, выражений.

Указывать имена формальных параметров не обязательно, достаточно указать их тип.

Пример. Приведем несколько функций:

1)double Sum(double x, double y, double z); // возвращает значение типа double, имеет три параметра

2)int Prod(int, int); // возвращает значение типа int, имеет два параметра

3)void Mod(int z); // возвращает значение типа void, имеет один параметр

4)Vect(); // возвращает значение типа int, не имеет параметров

Все переменные, которые объявлены в теле функции без указания класса памяти, являются локальными и имеют класс памяти auto. При выходе из функции значения этих переменных теряются.

Результатом функции является временная переменная, которая может возвращаться функцией и использоваться в том месте программы, где было к ней обращение.

§ 3. Способы передачи параметров функции.

Важным оператором в теле функции является оператор возврата функции в место её вызова:

return [<выражение>];

Если функция не возвращает никакое значение, то <выражение> в return отсутствует. Для каждой функции задается тип возвращаемого значения. Если он явно не опреде-

лен, то по умолчанию считается тип возврата int.

Функция может содержать несколько операторов return, а может не содержать ни одного. После выполнения оператора return программа переходит к следующему оператору после функции, и команды тела функции больше не выполняются. Если в функции явно не написан оператор return, то компилятор автоматически считает, что return находится в конце тела функции перед закрывающейся фигурной скобкой.

100

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]