Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wis #77

Open
wants to merge 16 commits into
base: Khanaeva_Valeria
Choose a base branch
from
36 changes: 36 additions & 0 deletions 4hw/5
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include <iostream> //стандартная библиотека основных операций
#include <cmath> //облегчает ввод данных

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian"); //подключаем русский язык
double x, y, z, D, x1, x2;
// вводим исходные данные
cout << "введите x\n";
cin >> x;
cout << "введите y\n";
cin >> y;
cout << "введите z\n";
cin >> z;

D = y * y - 4 * x * z; // рассчитываем дискриминант

if (D < 0) // при дискриминанте меньше нуля
cout << "D < 0, Действительных корней уравнения не существует";
if (D == 0) // для дискриминанта равного нулю
{
x1 = -(y / (2 * x));
cout << "x1 = x2 = " << x1 << "\n";
}
if (D > 0) // при дискриминанте больше нуля
{
x1 = ((-y) + sqrt(D)) / (2 * x);
x2 = ((-y) - sqrt(D)) / (2 * x);
cout << "x1 = " << x1 << "\n";
cout << "x2 = " << x2 << "\n";
}


}
106 changes: 106 additions & 0 deletions 5*/1
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#include <iostream>//стандартная библиотека основных операций
#include <iomanip>//библиотека, в которой содержится модификатор setw. С его помощью можно, например, установить ширину поля для каждой координаты вектора, или элемента матрицы
#include <cmath>//библиотека, в которой содержатся функции, предназначенные для выполнения простейших математических операций

float locate(float start, float end, float step);//функция строит 1 таблицу значений
void finde(float start, float end, const float accuracy);//функция строит 2 таблицу значений
double function(float input);//функция, содержащая в себе уравнение

int main(int argc, char const* argv[])//аргумент argc типа integer содержит в себе количество аргументов командной строки. Аргумент argv типа char - указатель на массив строк, каждый элемент массива указывает на аргументы командной строки
{
//тип данных float служит для хранения чисел с плавающей запятой
float start = 0;//переменная, хранящая в себе исходное значение
float end = 10;//переменная, хранящая в себе конечное значение
float step = 0.2;//переменная, содержащая в себе шаг
const float accuracy = 0.0001;//константа ε, обозначающая заданную точность в 0.0001
float change = locate(start, end, step);//переменная, содержащая в себе информацию, об изменениях
finde(change - step, change, accuracy);////функция строит 2 таблицу значений
return 0;
}

double function(float input) //функция, содержащая в себе уравнение
{
return pow(exp(1), -input) - 2 * sqrt(input);//уравнение
}

float locate(float start, float end, float step) //функция строит 1 таблицу значений
{
//тип данных double предоставляет самые большие и наименьшие возможные величины числа, по умолчанию равен 0
double ans1, ans2;//переменные корней уравнения
ans1 = function(start);//переменная принимает начальное значение функции
std::cout << "x" << "\t" << "y" << std::endl;//на экран выводятся буквы x и y как часть таблицы их значений
std::cout << start << "\t" << ans1 << std::endl;//на экран выводится таблица значений x и у соответствующие решению уравнения
int count = 0;//создается переменная-счетчик для того, что бы понять, сколько операций будет проведено
for (float i = start + step; i <= end; i += step)
{
ans2 = function(i);//значение y
std::cout << i << "\t" << ans2 << std::endl;
count++;//переменная счетчик увеличивается на 1
if (ans1 * ans2 < 0)
{
std::cout << "Root of equation located by " << count << " iterations" << std::endl;//выводится фраза "Корень уравнения был найден после 1 шага"
return i;
}
ans1 = ans2;
}
return 0;
}

void finde(float start, float end, const float accuracy) //функция строит 2 таблицу значений
{
float half;//создается переменная, для столбца "c"
double fa, fc, fproduct;//создается переменная для столбцов "f(a)","f(b)","f(a)*f(c)"
int count = 1;//создается переменная-счетчик для того, что бы понять, сколько операций будет проведено
std::cout << "Iteration "// заголовок столбца "шаги"
//функция setw используется для установки количества символов, которые будут использоваться в качестве ширины поля для следующей операции вставки
<< std::setw(10) << "a"//заголовкок столбца "a"(10, т.к. 1й столбец выводится отдельно без отступа)
<< std::setw(15) << "b"//заголовкок столбца "b"
<< std::setw(15) << "c"//заголовкок столбца "c"
<< std::setw(15) << "|a-b|"//заголовкок столбца "|a-b|"
<< std::setw(15) << "f(a)"//заголовкок столбца "f(a)"
<< std::setw(15) << "f(c)"//заголовкок столбца "f(c)"
<< std::setw(15) << "f(a)*f(c)"//заголовкок столбца "f(a)*f(c)"
<< std::endl;
//функция fabs() позволяет вычислить абсолютное значение по модулю x и возвращает значение типа double
while (fabs(start - end) >= accuracy) //длина отрезка проверяется на соответствие константе ε
{
half = (start + end) / 2;//середина отрезка
fa = function(start);//результат выполнения функции по начальному значению, функция "f(a)"
fc = function(half);//результат выполнения функции по срединному значению, функция "f(c)"
fproduct = fa * fc;//результат выполнения функции "f(a)*f(c)"
std::cout << std::setw(5) << count//столбец "шаги", нумерует каждую строчку
<< std::setw(15) << start//выводит значение столбца "a"
<< std::setw(15) << end//выводит значение столбца "b"
<< std::setw(15) << half//выводит значение столбца "c"
<< std::setw(15) << fabs(start - end)// выводит значение столбца "|a-b|"
<< std::setw(15) << fa// выводит значение столбца "f(a)"
<< std::setw(15) << fc// выводит значение столбца "f(с)"
<< std::setw(15) << fproduct// выводит значение столбца "f(a)*f(c)"
<< std::endl;//отступ
if (fproduct < 0) //2 этап, 4 пункт задания заменить значения при определенных условиях
{
end = half;//новый конец отрезка
}
else
{
start = half;//новое начало отрезка
}
count++;//переменная счетчик увеличивается на 1
}
half = (start + end) / 2;//новая середина отрезка
fa = function(start);//новый результат выполнения функции по начальному значению, функция "f(a)"
fc = function(half);//новый результат выполнения функции по срединному значению, функция "f(c)"
fproduct = fa * fc;//новый результат выполнения функции "f(a)*f(c)"
std::cout << std::setw(5) << count//столбец "шаги", нумерует каждую строчку
<< std::setw(15) << start//выводит значение столбца "a"
<< std::setw(15) << end//выводит значение столбца "b"
<< std::setw(15) << half //выводит значение столбца "c"
<< std::setw(15) << fabs(start - end)// выводит значение столбца "|a-b|"
<< std::setw(15) << fa// выводит значение столбца "f(a)"
<< std::setw(15) << fc// выводит значение столбца "f(с)"
<< std::setw(15) << fproduct// выводит значение столбца "f(a)*f(c)"
<< std::endl;//отступ
std::cout << "Root of equation is " << (start + end) / 2 << " and was received by " << count << " iterations" << std::endl;//выводится фраза "Корень уравнения был найден после 12 шагов"


}
116 changes: 116 additions & 0 deletions 5*/2
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
#include <iostream>//стандартная библиотека основных операций
#include <cmath>//библиотека, в которой содержатся функции, предназначенные для выполнения простейших математических операций

int main(int argc, char const* argv[]) //аргумент argc типа integer содержит в себе количество аргументов командной строки. Аргумент argv типа char - указатель на массив строк, каждый элемент массива указывает на аргументы командной строки
{
//тип данных float служит для хранения чисел с плавающей запятой. Этот тип часто используется для операций с данными, считываемыми с аналоговых входов.
float coord[2][8] = { {2.0 , 2.1 , 2.2 , 2.3 , 2.4 , 2.5 , 2.6 , 2.7},{1.220 , 1.253 , 1.256 , 1.232 , 1.175 , 1.091 , 0.985 , 0.850} };//создается массив значений x (первая фигурная скобка) и y (вторая фигурная скобка)

std::cout << "Input points value: " << std::endl;//выводится фраза "Значение входных точек:"

//цикл для выведения таблицы значений x и y
for (int i = 0; i < 2; i++) //создается переменная i для шага, при выполнении цикла увеличивается на 1, i<2 т.к. переменных 2
{
if (i == 0) // если переменная i равна 0, то выводится x, таким образом x будет на 1й строчке
{
std::cout << "x" << "\t";//выводим "x"
}
else //иначе
{
std::cout << "y" << "\t";//выводим "y"
}
//цикл для выведения значений x и y
for (int j = 0; j < 8; j++) //создается переменная j для шага, при выполнении цикла увеличивается на 1, i<8 т.к. значений по 8 для каждой переменной
{
std::cout << coord[i][j] << "\t";//выводим значения переменных
}
std::cout << "" << std::endl;//отступ
}

std::cout << "" << std::endl;//отступ
std::cout << "Nearest function is: " << std::endl;//выводится фраза "Близжайщая функция:"
std::cout << " y = ax^2 + bx + c " << std::endl;//выводится уравнение

double sumxze = 8;//создается переменная

double sumxon = 0;//создается переменная сумма
double sumxtw = 0;//создается переменная сумма
double sumxth = 0;//создается переменная сумма
double sumxfo = 0;//создается переменная сумма
double sumy = 0;//создается переменная сумма
double sumxony = 0;//создается переменная сумма
double sumxtwy = 0;//создается переменная сумма

for (int j = 0; j < 8; j++) //создается переменная j для шага, при выполнении цикла увеличивается на 1, i<8 т.к. значений по 8 для каждой переменной
{

sumxon += coord[0][j];//сумма всех значений x
sumy += coord[1][j];//сумма всех значений y

sumxtw += pow(coord[0][j], 2);//сумма квадратов всех значений x
sumxth += pow(coord[0][j], 3);//сумма кубов всех значений x
sumxfo += pow(coord[0][j], 4);//сумма всех значений x^4

sumxony += coord[0][j] * coord[1][j];//сумма произведений всех наборов x*y
sumxtwy += pow(coord[0][j], 2) * coord[1][j];//сумма всех произведений (x^2 *y)

}
//Нахождение параметров квадратичной функции
std::cout << "To find a, b, c need solve this system of linear equations: " << std::endl;//выводится фраза "Чтобы найти a, b, c, нужно решить эту систему линейных уравнений:"
std::cout << "" << std::endl;//отступ
//система уравнений:
std::cout << sumxze << "*c + " << sumxon << "*b + " << sumxtw << "*a = " << sumy << std::endl;
std::cout << sumxon << "*c + " << sumxtw << "*b + " << sumxth << "*a = " << sumxony << std::endl;
std::cout << sumxtw << "*c + " << sumxth << "*b + " << sumxfo << "*a = " << sumxtwy << std::endl;
//параметры a, b, c находят из условия минимума функции:
double delta = ((sumxze * sumxtw * sumxfo) + (sumxon * sumxth * sumxtw) + (sumxon * sumxth * sumxtw)) - ((sumxtw * sumxtw * sumxtw) + (sumxon * sumxon * sumxfo) + (sumxth * sumxth * sumxze));
//Условия минимума функции сводятся к системе уравнений:
double delta_c = ((sumy * sumxtw * sumxfo) + (sumxony * sumxth * sumxtw) + (sumxon * sumxth * sumxtwy)) - ((sumxtw * sumxtw * sumxtwy) + (sumxony * sumxon * sumxfo) + (sumxth * sumxth * sumy));
double delta_b = ((sumxze * sumxony * sumxfo) + (sumxon * sumxtwy * sumxtw) + (sumy * sumxth * sumxtw)) - ((sumxtw * sumxony * sumxtw) + (sumxon * sumy * sumxfo) + (sumxtwy * sumxth * sumxze));
double delta_a = ((sumxze * sumxtw * sumxtwy) + (sumxon * sumxth * sumy) + (sumxon * sumxony * sumxtw)) - ((sumy * sumxtw * sumxtw) + (sumxon * sumxon * sumxtwy) + (sumxth * sumxony * sumxze));

double c = delta_c / delta;//параметр C квадратичной функции
double b = delta_b / delta;//параметр B квадратичной функции
double a = delta_a / delta;//параметр A квадратичной функции

std::cout << "" << std::endl;//отступ
std::cout << "Finded function is: " << std::endl;//выводится фраза "Искомая функция:"
std::cout << "y = ";//выводится "y = "
//Функция fabs вычисляет абсолютное значение (модуль) и возвращает его |х|
if (a > 0) //если a>0, то знак не меняется
{
std::cout << a << "*x^2 ";//выводится выражение
}
else //иначе знак меняется на "-"
{
std::cout << "- " << fabs(a) << "*x^2 ";//выводится выражение
}
if (b > 0) //если b>0, то знак не меняется
{
std::cout << "+ " << b << "*x ";//выводится выражение
}
else //иначе знак меняется на "-"
{
std::cout << "- " << fabs(b) << "*x ";//выводится выражение
}
if (c > 0) //если c>0, то знак не меняется
{
std::cout << "+ " << c << std::endl;//выводится выражение
}
else //иначе знак меняется на "-"
{
std::cout << "- " << fabs(c) << std::endl;//выводится выражение
}

double falls = 0;//создается переменная для расчета невязки
for (int j = 0; j < 8; j++) //создается переменная j для шага, при выполнении цикла увеличивается на 1, i<8 т.к. значений по 8 для каждой переменной
{
falls += pow(coord[1][j] - (a * pow(coord[0][j], 2) + b * coord[0][j] + c), 2);//сумма ряда?
//Первый член прогрессии j=0, шаг=1, конечный верхний предел = 8
}
double delta_f = sqrt(falls / 8);//создается переменная, содержащая в себе невязку в поиске аргументов
std::cout << "" << std::endl;//отступ
std::cout << "Fallibility in finding the arguments: = ";//выводится фраза "Невязка в поиске аргументов: =
std::cout << delta_f << std::endl;//выводим данные
return 0;
}
22 changes: 22 additions & 0 deletions 6hw/1
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include <iostream>
#include <cmath>
using namespace std;

void function(int f[])//создается функция
{
for (int n = 3; n < 16; n++)//для отображения первых 15-ти чисел
{
f[n] = f[n - 1] + f[n - 2] + f[n - 3];
cout << f[n];
}
}

int main() //переменным присваиваем первые 3 значения
{
int f[15];
f[0] = 0;
f[1] = 3;
f[2] = 5;
function(f);

}
Loading