Другие языки программирования и технологии

Задача по C++ Не могу придумать как одновременно записывать в массив и считать функцию.

Напишите программу, которая создает массив с 2мя строками и 21м столбцом, рассчитайте значение функции sinx*cosx на интервале от -1 до 1 с шагом 0.1, в первую стоку массива занося значения аргумента, во вторую – соответствующее значение функции. Найти при каких значениях аргумента на этом интервале функция принимает максимум и минимум.
Не могу придумать как одновременно записывать в массив и считать функцию)
#include <iostream>
#include <iomanip>
using namespace std;
using box_t = pair<double, double>;
int main() {
const auto n = 21, beg = -10, last = 10;
double args[n], funcs[n];
box_t max = { 0, numeric_limits<double>::min() };
box_t min = { 0, numeric_limits<double>::max() };
for (auto step = beg, i = 0; step <= last; ++step, ++i) {
auto arg = double(step) / 10;
args[i] = arg;
funcs[i] = sin(arg) * cos(arg);
if (funcs[i] < min.second) {
min.first = arg;
min.second = funcs[i];
}
if (funcs[i] > max.second) {
max.first = arg;
max.second = funcs[i];
}
}
cout << fixed;
for (auto i = 0; i < n; ++i) {
cout
<< setw(6) << setprecision(1) << args[i]
<< setw(15) << setprecision(8) << funcs[i]
<< '\n';
}
cout
<< "\n arg =" << setw(5) << setprecision(1) << min.first
<< " min value =" << setw(12) << setprecision(8) << min.second
<< "\n arg =" << setw(5) << setprecision(1) << max.first
<< " max value =" << setw(12) << setprecision(8) << max.second
<< endl;
system("pause");
}
Валентин Крысюков
Валентин Крысюков
90 537
Лучший ответ
Ничего одновременного тут нет, сначала создание массива (конструктор), потом его заполнение.
Икс - линейная функция индекса массива (и параметра цикла вычисления)
N=(abs(-1)+1)/.1+1=21
i=[0..20]
x(i)=.1*i-1
Максим Иванов
Максим Иванов
96 567
не совсем понятно что у тебя там не получается

свой код пиши сюда - посмотрим
Иван Становый
Иван Становый
60 920
Михаил Бакал Я ничего дельного пока в коде то не написал, я не могу придумать как записывать в массив значения функции и одновременно считать ее.
Это получается надо три цикла for вложенных или как? Все никак не дойдет до меня
не увидел что на плюсах посему вот вам питон

import math

xy = [[],[]]

steps = 21
x = 1.0; y = 0
y_min = 2; y_max = 2
idx_min = 0; idx_max = 0

for i in range(steps):
xy[0].append(x)
y = math.sin(x)*math.cos(x)
xy[1].append(y)
if y > y_max: y_max = y; idx_max = i
if y < y_min: y_min = y; idx_min = i
x = round(x + 0.1, 1)

print("min: x:" + str(xy[0][idx_min]) + "; y:" + str(xy[1][idx_min]))
print("max: x:" + str(xy[0][idx_max]) + "; y:" + str(xy[1][idx_max]))

а вот вам плюсы (на 98 тоже скомпилится)

#include <stdio.h>
#include <vector>
#include <math.h>

int main()
{
int steps = 21;
double x = 1.0, y;
double y_min = 2, y_max = 2;
int idx_min = 0, idx_max = 0;

std::vector<std::vector<double>> xy = std::vector<std::vector<double>>(2, std::vector<double>(steps, 0.0));

for (int i = 0; i < steps; i++)
{
xy[0][i] = x; x = ((int)((x + 0.1) * 10)) / 10.0; // ошибка будет но минимальна
xy[1][i] = y = sin(xy[0][i]) * cos(xy[0][i]);
if (y > y_max) { y_max = y; idx_max = i; }
if (y < y_min) { y_min = y; idx_min = i; }
}

printf("min: x:%f; y:%f\r\n", xy[0][idx_min], xy[1][idx_min]);
printf("max: x:%f; y:%f\r\n", xy[0][idx_max], xy[1][idx_max]);
return 0;
}