Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

c++ / Лаб 2. Арифметические операции и математические функции

.pdf
Скачиваний:
73
Добавлен:
18.03.2015
Размер:
450.68 Кб
Скачать

Лабораторная работа №2 Тема: Арифметические операции и математические функции.

Цель работы: получение практических навыков в программировании алгебраических выражений и использовании математических функций.

Теоретические сведения

Стандартные математические функции находятся в файле math.h. abs - абсолютное значение целого числа - |x|

int abs(int x);

labs - абсолютне значення "длинного" целого числа - |x|: long labs(long x);

fabs - абсолютное значение числа с плавающей точкой - |x|: double fabs(double x);

sqrt - извлечение квадратного корня: double sqrt(double x);

pow - возведение в степень:

double pow(double x, double y);

cos - косинус - cos x (здесь и далее x задается в радианах): double cos(double x);

sin - синус - sin x:

double sin(double x); tan - тангенс - tg x:

double tan(double x); acos - арккосинус - arccos x:

double cos(double x); asin - арксинус - arcsin x:

double sin(double x); atan - арктангенс - arctg x:

double atan(double x); atan2 - арктангенс - arctg x/y:

double atan2(double x, double y); exp - експонента :

double exp(double x); log - натуральный логарифм - ln x:

double log(double x);

log10 - десятичный логарифм - log10x: double log10(double x);

Темы для предварительной проработки

Типы данных языка C.

Объявление переменных.

Функции стандартного ввода-вывода.

арифметические операции

порядок выполнения операций

стандартные математические функции

Задание

Составьте программу, которая подсчитывает и выводит значение t1 и t2 по формулам, которые приведены в Вашем варианте индивидуального задания. Определите области допустимых значений параметров формул и задайте произвольные значения из этих областей. Параметры, которые имеют имена: n и m - целые, остальные параметры - с плавающей точкой. Значения параметров с именами x и y должны вводиться с клавиатуры, значения остальных - задаваться как начальные значения при объявлении соответствующих переменных. Допускается (и даже желательно) упростить / разложить формулы для того , чтобы обеспечить минимизацию объема вычислений .

 

Варианты индивидуальных заданий

 

 

 

Вариант 0

 

Вариант 1

 

 

 

Вариант 2

 

Вариант 3

 

 

 

Вариант 4

 

Вариант 5

 

 

 

Вариант 6

 

Вариант 7

 

 

 

Вариант 8

 

Вариант 9

 

 

 

Вариант 10

 

Вариант 11

 

 

 

 

 

Вариант 12

Вариант 13

 

 

Вариант 14

Вариант 15

 

 

Вариант 16

Вариант 17

 

 

Вариант 18

Вариант 19

 

 

Вариант 20

Вариант 21

 

 

Вариант 22

Вариант 23

 

 

Вариант 24

Вариант 25

 

 

Вариант 26

Вариант 27

 

 

Вариант 28

Вариант 29

Вариант 00

Примеры решения задач (вариант 00)

Основной алгоритм

Алгоритм решения задачи - линейный и состоит из:

ввода значений x и y;

вычисления значения t1;

вычисления значения t2;

вывода значений t1 и t2.

Оптимизация алгоритма

Перед непосредственным программированием алгоритма проанализируем, как в

нем можно изменить объем вычислений.

Выражение ax встречается один раз в первой формуле и дважды - во второй. Следовательно, можно один раз произвести умножение a*x, а потом использовать этот результат.

Во второй формуле дважды встречается умножение квадратного корня на тангенс - это вычисление можно так же сделать один раз.

Выражение c2-b2 можно разложить на (c+b)(c-b). До разложения в выражении было две операции умножения (возведение в степень 2) и одна - сложения. После разложения - два сложения и одно умножение, что выгоднее для вычислений.

Ограничения на значения параметров

Аргумент функции, которую вычисляет логарифм, не может быть 0 или меньше. Отсюда вытекают требования к значениям:

a * x + b > 0; y * x + d > 0

Аргумент функции извлечения квадратного корня не может быть меньше 0,

отсюда: c2 - b2 >= 0

В знаменателе выражения не может быть 0, отсюда: кроме того:

Определение переменных программы

Для решения задачи нам понадобятся переменные для представления каждого параметра формул - a, b, c, d, x, y и результатов - t1, t2. Кроме того, придется ввести дополнительную переменную ax для хранения промежуточного результата , необходимого для оптимизации. Тип всех переменных - double.

Разработка текста программы

Программа начинается с включения файлов:

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

в которых находятся описания функций вводавывода и математических функций соответственно.

Далее открываем главную функцию: int main(void)

Включаем описания переменных (см. п.5.2): double x,y;

double a=12.5, b=1.3; double c=14.1, d=2.7; double t1, t2;

double ax;

Вводятся значения для переменных x и y: printf("Введите x, y >");

scanf("%lf %lf",&x,&y);

Далее вычисляется первое промежуточное значение: ax=a*x;

ипервый результат: t1=(b*log(ax+b)/a+d*log(y*x+d)/y)/c;

Вычисляется второй промежуточный результат: ax=sqrt((c-b)*(c+b))*tan(ax);

ивычисляется второй окончательный результат: t2=log((ax+b)/(ax-b))/2/a/b;

Полученные результаты выводятся на экран: printf("t1 = %lg\n",t1); printf("t2 = %lg\n",t2);

Полный текст программы.

#include "stdafx.h" #include <iostream> #include <iomanip> #include <stdio.h> #include <conio.h> #include <math.h> #include <windows.h>

int _tmain(int argc, _TCHAR* argv[]) {double x,y;

/* параметры, которые задаются в программе */

double a=12.5,

b=1.3;

double c=14.1,

d=2.7;

double t1, t2;

/*

результаты */

double ax;

/*

рабочая переменная */

setlocale(0,"Rus"); // отображение русских букв в консоли printf("Введите x, y >");

scanf("%lf %lf",&x,&y); ax=a*x;

t1=(b*log(ax+b)/a+d*log(y*x+d)/y)/c; ax=sqrt((c-b)*(c+b))*tan(ax); t2=log((ax+b)/(ax-b))/2/a/b; printf("t1 = %lg\n",t1);

printf("t2 = %lg\n",t2); getch();

return 0;

}

Дополнительное задание 1

Создать интерфейс позволяющий выбрать один из вариантов расчета параметров, которые будут заданы в виде таблицы (выбор должен осуществляться по порядковому номеру и по типу выражения):

П/п

Тип

Выражение

1

Логарифм

t=1/(b^3)*(ln(y/x – a^2*x^2/(2*y^2)))

2

Корень

t=1/(b^0,5)*(y^0,5/x – a^0,5*x^2/(2*y^0,5)))

3

Тригонометрия

t=cos(bx+0,5)*sin(y/x – a^0,5*x^2)

Дополнительное задание 2

Добавить возможность изменения формулы (замена имен параметров или операций).