Лаба 12 ТГУ ИБ. Занятие 10. Указатели и ссылки. Имя массива как указатель. Динамические массивы Вариант Выполнил студент Тюмень2021
Скачать 107.28 Kb.
|
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего образования «ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» ИНСТИТУТ МАТЕМАТИКИ И КОМПЬЮТЕРНЫХ НАУК Кафедра программного обеспечения Лабораторное занятие №10. Указатели и ссылки. Имя массива как указатель. Динамические массивы Вариант 2. Выполнил студент: Тюмень-2021 Цель работы Цель работы – изучить работу с указателями, ссылками, получить навыки программирования с использованием динамических массивов. Задача 2 Дан одномерный массив, состоящий из N вещественных элементов. Найти максимальный элемент среди элементов, индексы которых четные числа. Вычислить среднеарифметическое отрицательных элементов массива. Вывести элементы массива с нечетными индексами на экран в обратном порядке. Входные данные: размерность массива int n Выходные данные: результаты работы функций (вывод массива, макс. элемент с четными индексами, среднеарифметическое отриц. элементов, элементы массива с нечетными индексами в обратном порядке) #include using namespace std; void vivod_mass(int *m, int len){ for (int i = 0; i < len; i++) { std::cout << *(m+i) << '\t'; }std::cout << '\n'; } int find_max_ev(int* m, int len) { int max = INT_MIN; for (int i = 0; i < len; i += 2) { if (max < *(m+i) max = *(m+i); } return max; } double sr_otr(int* m, int len) { int sum = 0,kolvo=0; for (int i = 0; i < len; i ++) { if (*(m+i) < 0) { sum += *(m+i); kolvo++; }; } if (kolvo == 0) return 1; return ((double)sum / kolvo); } void special_vivod(int* m, int len) { int i = len-1; while (i>=0) { if (i % 2 == 1) { std::cout << *(m+i) << '\t'; i--; } else i--; }std::cout << '\n'; } void zapolnenie(int* m, int len) { for (int j = 0; j < len; j++) { *(m+j) = rand() % 201 - 100; } } int main()//2 { setlocale(LC_ALL, "Russian"); srand(static_cast int n; std::cout << "Введите размерность массива: "; std::cin >> n; int* mass = new int[n]; zapolnenie(mass, n); std::cout << "Сформированный массив : \n"; vivod_mass(mass, n); std::cout << "Макс. эл. на чётных индексах: "; std::cout << find_max_ev(mass, n); std::cout << endl; float sredn = sr_otr(mass, n); if (sredn==1){ std::cout << "Отрицательных элементов нет"; }else{ std::cout << "Ср. арифм. среди отрицательных элементов = "< std::cout << "\nВывод в обратном порядке эл. с нечётн. индексами" << endl; special_vivod(mass, n); } Задание 22 Входные данные: X, выбор меню menu Выходные данные: результаты работ функций #include using namespace std; double f1(double x) { if (x>=0) { return acos(sqrt(x)); } else return 0; } double f2(double x) { if ((1-x) != 0) { return log((1+x)/(1-x)); } else return 0; } double f3(double x) { return cos(x*x); } double f4(double x) { return pow(2.718281828459045,- x*x); } int main()//22 { setlocale(LC_ALL, "Russian"); srand(static_cast int menu = 0; double x; double (*p)(double)=f1; while (menu != 5) { std::cout << "Введите x: "; std:cin >> x; std::cout << "1 - arccos(x^2)\n2 - ln(x)\n3 - 1/(1+x^2)\n"; std::cout << "4 - e^(-x^2)\n5 - выход\n\t-> "; std::cin >> menu; switch (menu) { case 1: { p = f1; std::cout << '\n'; break; } case 2: { p = f2; std::cout << '\n'; break; } case 3: { p = f3; std::cout << '\n'; break; } case 4: { p = f4; std::cout << '\n'; break; } case 5: { std::cout << "Завершение работы программы"; return 0; } default: {std::cout << "Что-то непонятное, повторите"; } } std::cout << p(x)<<"\n"; } } Список использованных источников: С++ Указатели https://metanit.com/cpp/tutorial/4.1.php Указатели в С++: адрес и удаление https://codelessons.ru/cplusplus/ukazateli-v-c-podrobnoe-rukovodstvo.html Операторы https://ravesli.com/urok-80-ukazateli-vvedenie/ |