Добавил:
Если чем-то мне удалось вам помочь, то благодарность принимаю на эту карту: 2200 2460 1776 0607 Для защищенки 5 сем: https://t.me/+h5cc9QNQe19kODVi Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

экзамен / Primery_zkzamenats_zadach_i_reshenia (2)

.docx
Скачиваний:
5
Добавлен:
10.10.2023
Размер:
13.87 Mб
Скачать

Разбор задач в экзаменационных билетах

Задача 1

Определите и объясните результат работы программы (возможно и сообщение об ошибке):

Задача 1.1

x

y

в main до вызова func

23

10

в func

28

12

в main после вызова func

23

12

Ответ: 23+12 = 35


void func(int x, int& y)

{

x = x + 5; y = y + 2;

}

void main()

{

int x = 23, y = 10;

func(x, y);

cout<<(x + y);

}

Задача 1.2

void func(int x, int& y)

{

x = x + 5; y = y + 2;

return x;

}

void main()

{

int x = 23, y = 10;

func(x, y);

cout<<(x + y);

}

ОТВЕТ: Ошибка в func: тип возвращаемого значения не соответствует типу функции

Задача 2

1) Разработать функцию на языке C++ с типом возвращаемого значения double, вычисляющую медиану треугольника со сторонами a, b, c (входные параметры функции), проведенную к стороне a, по формуле

2) Написать фрагмент кода для вычисления всех медиан треугольника со сторонами x, y, z.

Решение:

Медианы к двум оставшимся сторонам вычисляются по формулам

// первый по порядку параметр - сторона,

// медиана к которой вычисляется

double med(double a, double b, double c)

{

double ma = 0.5*sqrt(2.0*b*b + 2.0*c*c - a*a);

return ma;

}

……………………..

double x = 3, y= 4, z = 5;

double mx = med(x,y,z); // медиана к стороне x

double my = med(y,x,z); // медиана к стороне y

double mz = med(z,x,y); // медиана к стороне z

cout<<mx;

cout<<my;

cout<<mz;

……………………..

ИЛИ

1) Разработать функцию на языке C++ с типом возвращаемого значения void, вычисляющую медиану треугольника со сторонами a, b, c (входные параметры функции), проведенную к стороне a, по формуле

2) Написать фрагмент кода для вычисления всех медиан треугольника со сторонами x, y, z.

Решение:

// первый по порядку параметр - сторона,

// медиана к которой вычисляется

void med(double a, double b, double c, double& ma)

{

ma = 0.5*sqrt(2.0*b*b + 2.0*c*c - a*a);

}

……………………..

double x = 3, y= 4, z = 5;

double mx, my, mz;

med(x, y, z, mx); // медиана к стороне x

med(y, x ,z, my); // медиана к стороне y

med(z,x,y, mz); // медиана к стороне z

cout<<mx;

cout<<my;

cout<<mz;

Еще пример задачи 2:

Задача 3

Разработать схему алгоритма и функцию с типом double на языке C++ для вычисления

с применением базового алгоритма поиска минимума (максимума) из нескольких значений без использования дополнительных функций. Написать фрагмент кода для вызова разработанной функции.

double Branch(double x, double y, double c, double d)

{

double r;

if (x*y > 3.0)

{

double r1 = c*x;

r = d*y;

if (r1 > r) r = r1;

if (x < r) r = x;

if (y < r) r = y;

r = 3.0*r;

}

else

if (x*y >= 0.0)

{

double r1 = x*x*x;

double r2 = log10(pow(x*y, c*d));

if (r1 > r2)

r = r1;

else

r = r2;

}

else

r = pow(2.0, c*d) - x;

return r;

}

…………………………………………………..

double x, y, c, d;

cin>>x;

cin>>y;

cin>>c;

cin>>d;

double r = Branch(x, y, c, d);

cout<<r<<endl;

……………………………………………………………………….

Задача 4.1

Разработать схему алгоритма и функцию на языке C++, с типом возвращаемого значения void, которая находит наименьшее значение функции Y=3∙cos2(2x+1) и соответствующее значение аргумента на отрезке [a;b] с шагом h, где a, b, hвходные параметры функции. В качестве параметра цикла использовать переменную целого типа.

Написать фрагмент кода для вызова разработанной функции.

Решение:

// табулируемая функция

float func(float x)

{

return 3.*pow(cos(2.*x + 1.), 2);

}

void GetMin(float a, float b, float h, float& xmin, float& ymin)

{

float x, y;

int n = int((b + h/2. - a)/h) + 1;

ymin = 1e38;

for (int i=1; i<=n; i++)

{

x = a + float(i-1)*h;

y =func(x);

if (y < ymin)

{

ymin = y;

xmin = x;

}

}

}

………………………………….

float a = -3., b = 3., h = 0.375, ym, xm;

GetMin(a, b, h, xm, ym);

cout<<xm<<endl;

cout<<ym<<endl;

Задача 4.2

Разработать схему алгоритма и функцию на языке C++ , с типом возвращаемого значения int, которая находит сумму и количество положительных значений функции

при изменении x на отрезке [a;b] с шагом h1 и y на отрезке [c;d] с шагом h2 (a, b, h1, c, d, h2 – входные параметры функции). В качестве параметра цикла использовать переменную целого типа.

Написать фрагмент кода для вызова разработанной функции.

Решение:

// табулируемая функция

float f(float x, float y)

{

if (x>0 && x<1 && y>0 && y<1)

return x*x + y*y;

else

return x + y;

}

int GetPos(float a, float b, float h1, float c, float d,

float h2, float& sPos)

{

int n1 = int((b+h1/2-a)/h1) + 1;

int n2 = int((d+h2/2-c)/h2) + 1;

sPos = 0.0;

int nPos = 0;

float x, y, z;

for (int i=1; i<=n1; i++)

{

x = a + (i-1) * h1;

for (int j =1; j<=n2; j++)

{

y = c + (j-1) * h2;

z = f(x,y);

if (z > 0)

{

sPos+=z;

nPos++;}

}

}

}

return nPos;

}

…………………………………………………………………………………….

float a=0, b=2, h1=0.25, c=0.5, d=1.5, h2=0.25;

float sPos;

int nPos;

nPos = GetPos(a, b, h1, c, d, h2, sPos);

cout<<sPos<<endl;

cout<<nPos<<endl;

…………………………………………………………………………………….

Задача 5

Разработать алгоритм и программный код функции, с типом возвращаемого значения double, реализующей вычисление суммы членов бесконечного ряда с заданной точностью ε. Предварительно вывести рекуррентную формулу для нахождения значения очередного слагаемого суммы.

.

Написать фрагмент кода для вызова разработанной функции.

1. Вывод рекуррентной формулы

  1. Формула для n–го члена ряда

  1. Формула для (n+1)-го члена ряда an+1, заменив в предыдущей формуле всюду n на n+1

  1. Вычисление знаменателя геометрической прогрессии, подставив (n+2)! = (n+1)!*(n+2)

  1. Тогда рекуррентная формула будет иметь вид:

Первый член ряда a=x-1, его номер n=0.

2. Схема алгоритма

3. Программный код

double SumPos(double x,double e)

{

int n=0;// номер первого слаг.

double a, s;

a = x-1;// знач. первого слаг.

s = 0;

while (abs(a) > e)

{

s = s + a;//добавление в сумму

a = -a * (x - 1) / (n + 2);

n++;// номер след. слаг-го

}

return s;

}

…………………………………………………………………………..……….

double arg = 0.5, eps = 1e-6;

double s = SumPos(arg, eps);

cout<<s;

……………………………………………………………………………………..

Еще пример задачи 5

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

Схема алгоритма:

double Sum (double x,double e)

{

int n=2;// номер первого слаг.

double a, s;

a = x*x/24.0;// знач. первого слаг.

s = 0;

while (abs(a) > e)

{

s = s + a;//добавление в сумму

a = -a *x*x/((3*n-1)*3*n*(3*n+1));

n++;// номер след. слаг-го

}

return s;

}

…………………………………………………………………………..……….

double arg, eps;

cin >> arg >> eps;

double s = SumPos(arg, eps);

cout<<s;

……………………………………………………………………………………..

Соседние файлы в папке экзамен