Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Касаткин С., Раткевич И., Травова Н. - Лаборато...doc
Скачиваний:
1
Добавлен:
22.11.2019
Размер:
1.01 Mб
Скачать

Лабораторная работа № 3 Тема: “Программы, использующие вспомогательные функции”.

Наберите одну из нижеследующих программ (комментарии набивать не нуж­но), подберите тестовые исходные дан­ные и выполните программу в поша­го­вом режиме. Остальные программы внимательно просмотрите и запомните реализован­ные в них алгоритмы.

1. Программа, которая считывает координаты вершин треугольника на плоскости и находит все углы этого треугольника в градусах.

Углы треугольника можно найти через площадь, поскольку .

Чтобы воспользоваться этой формулой для нахождения угла, нужно найти длины сторон треугольника.

#include<iostream>

#include<iomanip>

#include<conio.h>

#include <windows.h>

#define _USE_MATH_DEFINES

/* Это определение необходимо включать перед подключением математической библиотеки для использования математических констант */

#include <math.h>

using namespace std;

//--------------------------------------------------------------------

//функция Len, которая будет находить длину отрезка между двумя точками, // используя формулу :

double Len ( double x1, double y1, double x2, double y2)

{

return sqrt( pow(x1-x2,2) + pow(y1-y2,2) );

}

//------------------------------------------------------------

/* Следующая функция будет находить угол между двумя сторонами в градусах. В качестве аргументов функция должна получать дли­ны двух сторон и площадь треугольника */

double Angle(double a, double b, double s)

{

double x = 2*s / (a*b); //x – это

// находим угол и переводим его в градусы

return asin(x) * 180 / M_PI;

}

//============================================================

int main()

{

if(SetConsoleCP(1251)==0

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

double x1, y1, x2, y2, x3, y3; // Координаты вершин

double a, b , c, u1, u2, u3; // Длины сторон и углы треугольника

do

{

cout<<"Введите координаты вершин треугольника: x1 y1 x2 y2 x3 y3 " ;

cin>> x1 >> y1 >> x2 >> y2 >> x3 >> y3;

// Находим длины сторон, вызывая функцию Len()

a=Len(x1,y1,x2,y2);

c=Len(x2,y2,x3,y3);

b=Len(x1,y1,x3,y3);

/* Проверяем возможность построения треугольника: сумма любых двух сторон должна быть больше третьей стороны */

if (a+b>c && b+c>a && a+c>b)

{

cout<<"Длины сторон треугольника: " <<setprecision(2)<<a<<' '<<b<<' '<<c<<endl;

// Находим площадь треугольника по формуле Герона:

double p = (a+b+c)/2;

double s = sqrt(p*(p-a)*(p-b)*(p-c));

// Находим углы, используя функцию Angle():

u1 = Angle(a, b, s);

u2 = Angle(b, c, s);

u3 = Angle(a, c, s);

cout<<"Углы треугольника: "<<u1<<' '<<u2<<' '<<u3<< " градусов" << endl;

}

else

cout << "Треугольник вырожден\n";

} while (_getch()!=27);

return 0;

}

2. Программа, которая находит заданное количество чисел, содержащих цифру 3

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<windows.h>

using namespace std;

bool hold3(long n); /* Объявляем функцию, которая будет определять, содержит ли число цифру 3. Функция будет возвращать значение истина или ложь (true или false), поэтому функция имеет тип bool. */

int main()

{

//Настройки шрифтов и региональных стандартов

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0) //тоже самое для вывода

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

int k=0, count = 0; /* k – количество чисел, которое нужно найти, count – количество уже найденных чисел */

cout<<"Сколько чисел нужно найти ";

cin >> k;

long n = 1; /* будем проверять все числа числового ряда, начиная c 1 */

while (count < k) /* пока заданное количество чисел не найдено, повторяем следующие действия: */

{

if (hold3(n)) // если число содержит цифру 3

{

cout<< n << " "; // выводим это число

count++; // и увеличиваем счетчик на 1

}

n++; /* берем следующее число*/

if ( n > 1000 ) break; /* если мы проверяем все числа чис­ло­вого ряда, мы должны помнить, что этот ряд бесконечен, а компьютер может работать только в конечном диапазоне, зависящем от типа числа. В данном примере прове­ря­е­мые числа ограничены числом 1000, чтобы выводимые числа уместились на экране. */

}

if (count < k)

cout<< "Не удалось найти заданное количество чисел";

cout<< endl;

_getch();

return 0;

}

/* определение функции, которая проверяет одно число и устанавливает, содержит ли оно цифру 3: */

bool hold3(long n) // аргументом функции является число n

{

/* алгоритм проверки цифр основан на алгоритме, описанном в примере 3 лабораторной работы № 2 */

do

{

unsigned cifra = n % 10; /* Находим цифру путем вычисления остатка от деления на 10 */

if (cifra == 3) return true;

n /= 10;

} while (n);

return false;

}

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.