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

опа 1

.docx
Скачиваний:
0
Добавлен:
27.06.2025
Размер:
174.99 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ

ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение

высшего образования

«Национальный исследовательский Томский политехнический университет»

Инженерная школа информационных технологий и робототехники

Отделение автоматизации и робототехники

Направление: 15.03.04 – Автоматизация технологических процессов и производств

Отчёт по лабораторной работе № 1

по дисциплине «Основы программирования и алгоритмизации»

«Функции с C++; Передача параметров по значению, сслылке и

указателю; Параметры по умолчанию.»

вариант № 13

Выполнил:

Студент группы 8Т41 Кирильцева К. М.

Проверил:

Ассистент ________________ Кургинов Я. О.

Томск 2024

Цель работы:

Научиться работать с функциями в С++ и указателями.

Задание:

Формулировка

1

Найти общий объем n прямоугольных параллелепипедов, у каждого из

которых одинаковое соотношение длин ребер, исходящих из одного

угла: 1:2:3, если длины их наименьших ребер образуют

последовательность а, а/2, а/3, …, a/n.

2

Дан массив целых чисел {ai} (i=1, 2, …,n), вернуть массив в обратном

порядке.

3

Реализовать математическую функцию

f(x, y)=13*sqrt(x)*tan(y+5)-1.2*x*sqrt(y)

y(t)=-t+t2

x(t)=cos(t)-sin(t)

Анализ задания:

Задание 1:

Определим формулу объёма одного параллелепипеда через длину его наименьшего ребра. Длина наименьшего ребра равна ai, тогда длины остальных рёбер будут 2ai и 3ai. Объём одного параллелепипеда равен произведению длин его рёбер: Vi = ai * 2 ai * 3 ai = 6ai3. Последовательность длин наименьших рёбер задаётся как a, a/2, a/3, ..., a/n. Подставляем каждое значение ai в формулу объёма и суммируем объёмы всех параллелепипедов. Обозначаем общую сумму объёмов как totalvolume += volume, где volume = length1 * length2 * length3.

Задание 2:

Получаем входной массив { a1, a2, ..., an}.Создаём новый массив той же длины. Заполняем новый массив элементами исходного массива в обратном порядке:

- Первый элемент нового массива будет последним элементом исходного an.

- Второй элемент нового массива — предпоследний элемент исходного an-1, и так далее до конца. Возвращаем заполненный массив.

Задание 3:

Определяем функции x(t) и y(t), заданные параметрически: x(t) = cos(t) - sin(t), y(t) = -t + t2. Вводим эти значения в выражение для f(x, y): f(x, y) = 13*sqrt(x)*tan(y+5) - 1.2x*sqrt(y).

Решаем эту функцию пошагово:

- Вычисляем sqrt{x}, где x = cos(t) - sin(t).

- Вычисляем tan(y+5), где y = -t + t2.

- Умножаем результат на 13.

- Вычисляем -1.2x*sqrt(y), где y = -t + t^2.

- Складываем результаты двух выражений.

Блок схема:

Блок схема функции opa1 представлена на рисунке 1.

Рисунок 1- Блок схема функции opa1

Блок схема функции x представлена на рисунке 2.

Рисунок 2 - Блок схема функции x

Блок схема функции y представлена на рисунке 3.

Рисунок 3 - Блок схема функции y

Блок схема функции rand представлена на рисунке 4.

Рисунок 4 - Блок схема функции rand

Блок схема функции outArray представлена на рисунке 5.

Рисунок 5 - Блок схема функции outArray

Блок схема функции opa2 представлена на рисунке 6.

Рисунок 6 – Блок схема функции opa2

Блок схема функции f представлена на рисунке 7.

Рисунок 7 - Блок схема функции f

Блок схема заданий представлена на рисунке 8.

Рисунок 8 - Блок схема заданий

Результат задания 1 показан на рисунке 9:

Рисунок 9 - Результат задания 1

Результат задания 2 показан на рисунке 10:

Рисунок 10 - Результат задания 2

Результат задания 3 показан на рисунке 11:

Рисунок 11 - Результат задания 3

Вывод:

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

Приложение А. Листинги программ

Листинг 1 – для функций

  1. #include <iostream>

  2. #include <cstdlib>

  3. #include <ctime>

  4. #include <cmath>

  5. double opa1(int n, double a) {

  6. double totalvolume{0};

  7. for (double i = 1; i <= n; ++i)

  8. {

  9. double length1 = a / i;

  10. double length2 = 2 * length1;

  11. double length3 = 3 * length1;

  12. double volume = length1 * length2 * length3;

  13. totalvolume += volume;

  14. }

  15. return(totalvolume);

  16. }

  17. void opa2(int *a, int *b, int n){

  18. // Обратный порядок массива A в массив B

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

  20. b[i] = a[n - 1 - i];

  21. }

  22. }

  23. void outArray(int* a, int m) {

  24. for (int i = 0; i < m; i++) {

  25. std::cout << a[i] << " ";

  26. }

  27. }

  28. void random(int* a, int m){

  29. srand(time(0));

  30. for (int i = 0; i < m; i++) {

  31. a[i] = rand() % 100; // Заполнение массива случайными числами от 0 до 99

  32. }

  33. }

Продолжение листинг 1

  1. double f(double x, double y) {

  2. return 13 * sqrt(x) * tan(y + 5) - 1.2 * x * sqrt(y);

  3. }

  4. double y(double t) {

  5. return -t + t * t;

  6. }

  7. double x(double t) {

  8. return cos(t) - sin(t);

  9. }

Листинг 2 – для кода заданий

  1. #include <iostream>

  2. #include <cstdlib>

  3. #include "Head.h"

  4. int main() {

  5. setlocale(LC_ALL, "Russian");

  6. int num{0};

  7. std::cout << "Введите номер задания: ";

  8. std::cin >> num;

  9. if (num == 1){

  10. int n{0};

  11. double a{0};

  12. std::cout << "Введите количество параллелепипедов (n): ";

  13. std::cin >> n;

  14. std::cout << "Введите размер наибольшего ребра: ";

  15. std::cin >> a;

  16. double totalVolume = 0.0;

  17. totalVolume = opa1(n, a);

  18. std::cout << "Общий объем " << n << " параллелепипедов: " << totalVolume << std::endl;

  19. return 0;

  20. }

  21. if (num == 2) {

  22. int n{0};

  23. std::cout << "Введите размер массива: ";

  24. std::cin >> n;

  25. int* a = new int[n];

Продолжение Листинга 2

  1. int* b = new int[n];

  2. random(a, n);

  3. opa2(a, b, n);

  4. std::cout << "Array a: ";

  5. outArray(a, n);

  6. std::cout << "\n";

  7. std::cout << "Array b: ";

  8. outArray(b, n);

  9. delete[] a;

  10. delete[] b;

  11. return 0;

  12. }

  13. if (num == 3) {

  14. double t{0};

  15. std::cout << "Введите значение t: ";

  16. std::cin >> t;

  17. std::cout << "\n";

  18. double x_val = x(t);

  19. double y_val = y(t);

  20. double result = f(x_val, y_val);

  21. std::cout << "x(t) = " << x_val << std::endl;

  22. std::cout << "y(t) = " << y_val << std::endl;

  23. std::cout << "f(x, y) = " << result << std::endl;

  24. return 0;

  25. }

  26. }

Соседние файлы в предмете Основы программирования и алгоритмизации