МИНИСТЕРСТВО ПО РАЗВИТИЮ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И КОММУНИКАЦИЙ РЕСПУБЛИКИ УЗБЕКИСТАН
ТАШКЕНТСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ ИМЕНИ МУХАММАДА АЛЬ-ХОРЕЗМИ
ФАКУЛЬТЕТ РАДИО И МОБИЛЬНАЯ СВЯЗЬ
Практическая работа № 1
по Проектирование алгоритмов
Выполнил:Нуриддинов Абдуллох 813-20
Задание №1
Составить программу вычисления квадратного уравнения.
#include
#include
using namespace std;
int main()
{
double a;
double b;
double c;
double x;
cout << "Введите значение a: ";
cin >> a;
cout << "Введите значение b: ";
cin >> b;
cout << "Введите значение c: ";
cin >> c;
if((b*b - 4*a*c) >= 0) //Если дискриминант больше или равен 0
{
x = ( -1*b + sqrt(b*b - 4*a*c) ) / (2 * a);
cout << "Первый корень равен " << x << endl;
x = ( -1*b - sqrt(b*b - 4*a*c) ) / (2 * a);
cout << "Второй корень равен " << x << endl;
}
else
{
cout << "Дискриминант меньше 0, корни невещественные." << endl;
}
return 0;
}
2.Реализовать программу вычисления площади треугольника по формуле Герона.
include // std::cout, std::fixed
#include // std::setprecision //данную библиотеку подключаем для того, чтобы установить количество знаков после запятой
#include //данную библиотеку подключаем для того, чтобы была возможность извлечь корень и возвести в квадрат
using namespace std;
//функция рассчитывает расстояние между двумя точками с заданными координатами
double distance (double x1, double y1, double z1,
double x2, double y2, double z2)
{
return sqrt( pow(x1-x2, 2) + pow(y1-y2, 2) + pow(z1-z2, 2));
}
//функция вычисляет площадь треугольника по формуле Герона
double Geron (double x1, double y1, double z1,
double x2, double y2, double z2,
double x3, double y3, double z3)
{
double a,b,c,P;//стороны треугольника и полупериметр
a = distance(x1,y1,z1, x2,y2,z2);
b = distance(x2,y2,z2, x3,y3,z3);
c = distance(x1,y1,z1, x3,y3,z3);
P = (a+b+c)/2;
return sqrt(P*(P-a)*(P-b)*(P-c));
}
//функция вычисляет площадь полной поверхности пирамиды
double square (double x1, double y1, double z1,
double x2, double y2, double z2,
double x3, double y3, double z3,
double x4, double y4, double z4)
{
double S1,S2,S3,S4,S;//площади треугольников и площадь полной поверхности пирамиды
S1 = Geron(x1,y1,z1,x2,y2,z2,x3,y3,z3);
S2 = Geron(x1,y1,z1,x2,y2,z2,x4,y4,z4);
S3 = Geron(x1,y1,z1,x3,y3,z3,x4,y4,z4);
S4 = Geron(x2,y2,z2,x3,y3,z3,x4,y4,z4);
S = S1+S2+S3+S4;
return S;
}
int main()
{
double x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4;//координаты вершин пирамиды
cin >> x1 >> y1 >> z1
>> x2 >> y2 >> z2
>> x3 >> y3 >> z3
>> x4 >> y4 >> z4;
double S = square (x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4);
cout << fixed << setprecision(1) << S << endl;
return 0;
}
Задание № 2
#include
#include
using namespace std;
const int N = 10;
int main()
{
int mass[N], max, min;
cout << "Элементы: |";
for(int r = 0; r {
mass[r] = rand()%99;
cout << mass[r] << "|";
}
cout << endl;
max = mass[0];
min = mass[0];
for(int r = 1; r {
if(max < mass[r]) max = mass[r];
if(min > mass[r]) min = mass[r];
}
cout << "Min: " << min << endl;
cout << "Max: " << max << endl;
return 0;
}
Задание №3
#include
using namespace std;
int main()
{
int row1, row2, col1, col2;
double** a, ** b, ** c;
system("chcp 1251");
system("cls");
cout << "Введите количество строк первой матрицы: ";
cin >> row1;
cout << "Введите количество столбцов первой матрицы: ";
cin >> col1;
cout << "Введите количество строк второй матрицы: ";
cin >> row2;
cout << "Введите количество столбцов второй матрицы: ";
cin >> col2;
if (col1 != row2)
{
cout << "Умножение невозможно!";
cin.get(); cin.get();
return 0;
}
// Ввод элементов первой матрицы
a = new double* [row1];
cout << "Введите элементы первой матрицы" << endl;
for (int i = 0; i < row1; i++)
{
a[i] = new double[col1];
for (int j = 0; j < col1; j++)
{
cout << "a[" << i << "][" << j << "]= ";
cin >> a[i][j];
}
}
// Вывод элементов первой матрицы
for (int i = 0; i < row1; i++)
{
for (int j = 0; j < col1; j++)
cout << a[i][j] << " ";
cout << endl;
}
// Ввод элементов второй матрицы
b = new double* [row2];
cout << "Введите элементы второй матрицы" << endl;
for (int i = 0; i < row2; i++)
{
b[i] = new double[col2];
for (int j = 0; j < col2; j++)
{
cout << "b[" << i << "][" << j << "]= ";
cin >> b[i][j];
}
}
// Вывод элементов второй матрицы
for (int i = 0; i < row2; i++)
{
for (int j = 0; j < col2; j++)
{
cout << b[i][j] << " ";
}
cout << endl;
}
// Умножение матриц
c = new double* [row1];
for (int i = 0; i < row1; i++)
{
c[i] = new double[col2];
for (int j = 0; j < col2; j++)
{
c[i][j] = 0;
for (int k = 0; k < col1; k++)
c[i][j] += a[i][k] * b[k][j];
}
}
// Вывод матрицы произведения
cout << "Матрица произведения" << endl;
for (int i = 0; i < row1; i++)
{
for (int j = 0; j < col2; j++)
cout << c[i][j] << " ";
cout << endl;
}
cin.get(); cin.get();
return 0;
}
Задание № 4
#include // добавляем функции для ввода и вывода на экран
#include // добавляем математические функции
// функция, интеграл
double f(double x)
{
return sin(x);
}
int main()
{
int i; // счётчик
double Integral; // здесь будет интеграл
double a = 0.0, b = 1.0; // задаём отрезок интегрирования
double h = 0.1;// задаём шаг интегрирования
double n; // задаём число разбиений n
n = (b - a) / h;
// вычисляем интеграл по формуле центральных прямугольников
Integral = 0.0;
for(i = 1; i <= n; i++)
Integral = Integral + h * f(a + h * (i - 0.5));
cout << "I1 = " << Integral << "\n";
// вычисляем интеграл по формуле трапеций
Integral = h * (f(a) + f(b)) / 2.0;
for(i = 1; i <= n-1; i++)
Integral = Integral + h * f(a + h * i);
cout << "I2 = " << Integral << "\n";
// вычисляем интеграл по формуле Симпсона
Integral = h * (f(a) + f(b)) / 6.0;
for(i = 1; i <= n; i++)
Integral = Integral + 4.0 / 6.0 * h * f(a + h * (i - 0.5));
for(i = 1; i <= n-1; i++)
Integral = Integral + 2.0 / 6.0 * h * f(a + h * i);
cout << "I3 = " << Integral << "\n";
system("pause");
}
Задание № 5
a) Метод последовательных приближений (метод итераций)
#define _USE_MATH_DEFINES
#include
#include
using namespace std;
double find(double x, double eps)
{
double rez; int iter = 0;
cout << "x0= " << x << " ";
do {
rez = x;
x = 1 / (sin(M_PI*x / 180));
iter++;
} while (fabs(rez - x) > eps && iter<20000);
cout << iter << " iterations" << endl;
return x;
}
int main()
{
cout << find(7, 0.00001);
cin.get();
return 0;
}
b) Метод Ньютона (метод касательных)
#define _USE_MATH_DEFINES
#include
#include
using namespace std;
double find(double x, double eps)
{
double f, df; int iter = 0;
cout << "x0= " << x << " ";
do {
f = sin(M_PI*x / 180) - 1 / x;
df = M_PI / 180 * cos(M_PI*x / 180) + 1 / (x*x);
x = x - f / df;
iter++;
} while (fabs(f) > eps && iter<20000);
cout << iter << " iterations" << endl;
return x;
}
int main()
{
cout << find(1, 0.00001);
cin.get(); return 0; }
c) Метод секущих (метод хорд)
#define _USE_MATH_DEFINES
#include
#include
using namespace std;
double find(double x0, double x1, double eps)
{
double rez = x1, f0, f;
int iter = 0;
cout << "x0= " << x0 << " x1= " << x1 << " ";
do {
f = sin(M_PI*rez / 180) - 1 / rez;
f0 = sin(M_PI*x0 / 180) - 1 / x0;
rez = rez - f / (f - f0)*(rez - x0);
iter++;
} while (fabs(f) > eps && iter<20000);
cout << iter << " iterations" << endl;
return rez;
}
int main()
{
cout << find(1.0, 10.0, 0.000001);
cin.get(); return 0;
}
d) Метод половинного деления (метод дихотомии)
#define _USE_MATH_DEFINES
#include
#include
using namespace std;
double func(double x)
{
return (sin(M_PI*x / 180) - 1 / x);
}
double find(double x0, double x1, double eps)
{
double left = x0, right = x1, x, fl, fr, f;
int iter = 0;
cout << "x0= " << x0 << " x1= " << x1 << " ";
do {
x = (left + right) / 2;
f = func(x);
if (f > 0) right = x;
else left = x;
iter++;
} while (fabs(f) > eps && iter<20000);
cout << iter << " iterations" << endl;
return x;
}
int main()
{
cout << find(1.0, 10.0, 0.000001);
cin.get(); return 0;
}
Do'stlaringiz bilan baham: |