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

Лабы 1 курс 2 семестр / ЛР 6 Информатика 2 сем 2020

.pdf
Скачиваний:
10
Добавлен:
15.01.2021
Размер:
674.9 Кб
Скачать

Реализуем функции согласно блок-схемам и напишем программу для вычисления заданного выражения:

//решение: #include <iostream> #include <stdlib.h>

//функция для нахождения степени числа

float stepen(float osnovanie, unsigned int pokazatel)

{

float result = osnovanie;

for(unsigned int i = 1; i <= pokazatel; i++)

{

result *= osnovanie;

}

return result;

}

//функция для нахождения факториала числа unsigned int faktorial(unsigned int chislo)

{

float result = 1;

for(unsigned int i = 2; i <= chislo; i++)

{

result *= i;

}

return result;

}

//функция main() в которой вычисляется заданное выражение

//с использованием созданных функций степени и факториала void main()

{

unsigned int N; std::cout<<"vvedite N:"; std::cin>>N;

float x; std::cout<<"\nvvedite x:"; std::cin>>x;

float S = 0;

for(unsigned int i = 1; i <= N; i++)

117

{

S += stepen(x, 2*i) / faktorial(i);

}

std::cout<<"resultat: "<< S; system("pause");

}

Тесты

Вычислим заданное выражение для различных значений N и x:

N

1

2

3

5

4

0

x

2

2

1

2

0

3

S

4

12

1.667

41.867

0

0

Результат вражения S вычислен верно во всех случаях, созданные функции работают правильно.

Задание Б Написать функцию для генерации случайного вещественного числа из заданного диапазона (границы диапазона включены).

Решение

Составим блок-схему алгоритма работы функции

Начало

Вещественные числа min, max

Передача значений min, max

Если min > max, меняем их местами

Вещественное число result = (double)rand() / RAND_MAX * (max - min) + min

Возвращение result

Конец

118

Реализуем и протестируем функцию:

// include-ы и функция main, в которой прописано srand(time(NULL)), здесь не приведены

double randomval(double min, double max)

{

if(min > max)

{

double temp = max; max = min;

min = temp;

}

//генерируем очередное значение массива

//(RAND_MAX - наибольшее число, которое может

//сгенерировать функция rand() )

return (double)rand() / RAND_MAX * (max - min) + min;

}

Тесты созданной функции:

min

10

10

10

10

10

10

-90

-90

-90

-0.05

-0.05

max

20

20

20

20

20

20

35.5

35.5

35.5

0.05

0.05

return

18.96

16.417

12.762

12.97

13.471

17.077

-9.388

4.476

-30.714

0.02

-0.009

value

 

 

 

 

 

 

 

 

 

 

 

Проведя серию тестов созданной фунции, убедились, что она работает верно.

Задача В Написать функцию, которая удаляет из строки каждый второй символ.

Решение:

Составим блок-схему алгоритма работы заданной функции

119

Начало

Указатель на символьный массив str

Инициализация указателя str

Целое неотрицательное число i = 2

 

да

str[i] != '\0' &&

нет

 

 

 

 

 

str[i+1] != '\0'

 

str[i/2]

= str[i]

 

 

 

 

 

 

да

нет

 

 

 

 

 

 

 

 

str[i] != '\0'

i+=2

 

 

 

 

 

str[i/2]

= str[i]

 

 

 

i+=2

 

str[i/2] = '\0'

Конец

На основе блок-схемы алгоритма реализуем заданную функцию

#include <iostream> #include <stdlib.h>

/* Функция «прорезки» (массив передается в функцию по адресу, поэтому не приходится заботиться о том, чтобы возвращать измененные значения его элементов).*/

void prorezka(char str[])

{

unsigned int i=2;

for(; str[i] != '\0' && str[i+1] != '\0'; i+=2)

{

str[i/2] = str[i];

}

if(str[i] != '\0')

120

{

str[i/2] = str[i]; i+=2;

}

str[i/2]= '\0';

}

//Функцию main() по заданию составлять не требовалось,

//но она нужна для тестирования функции prorezka() void main()

{

char st[100]; std::cin.getline(st, 100); prorezka(st); std::cout<<st<<'\n'; system("pause");

}

Тесты

Вводимая строка

1234567890

Hello, World!

a b c d e f

Выводимая строка

13579

Hlo ol!

abcdef

Все тесты пройдены успешно, функция работает правильно.

7.4Задания:

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

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

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

Задача 6.1.1. Написать функцию для вычисления длины медианы треугольника с длинами сторон А, В, С, проведенной к стороне длины А.

Задача 6.1.2. Написать функцию для вычисления длины высоты треугольника с длинами сторон А, В, С, проведенной к стороне длины А.

121

Задача 6.1.3. Написать функцию для вычисления длины биссектрисы треугольника с длинами сторон А, В, С, проведенной к стороне длины А.

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

Задача 6.1.5. Написать функцию для вычисления числа сочетаний по формуле

C

k

 

n!

 

n(n 1)...(n k 1)

.

 

 

 

 

 

 

 

n

 

k!(n k)!

 

k!

 

 

 

 

 

 

Задача 6.1.6. Написать функцию для вычисления наименьшего общего кратного двух натуральных чисел

Задача 6.1.7. Написать функцию для вычисления наибольшего общего делителя двух натуральных чисел

Задача 6.1.8. Написать функцию для определения, является ли натуральное число простым.

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

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

Задача 6.1.11. Написать функцию для вычисления суммы заданного количества слагаемых: 1/1 + 3/2 + 5/3 + 7/4 +... .

Задача 6.1.12. Написать функцию для вычисления произведения заданного количества множителей: (1+1/2) * (1+1/3) * (1+1/4) *... .

Задача 6.1.13. Написать функцию для вычисления суммы заданного количества слагаемых: 1 + 1/2 - 1/3 + 1/4 – 1/5 + ... .

Задача 6.1.14.

Написать функцию для вычисления выражения

N

 

S

1.5 * i

по заданным N и n.

 

i n i 50

 

122

Задача

S

6.1.15.

Написать функцию для вычисления выражения

K

K k

 

i

по заданным K и k.

4

i k

 

Задача 6.1.16.

 

 

Написать

функцию

для

вычисления

выражения

N

 

 

 

 

 

 

 

 

P (1

a

)

по заданным a, b и N.

 

 

 

 

 

 

 

 

 

i 1

b

 

 

r

 

 

 

 

 

 

 

 

 

 

Задача 6.1.17.

 

 

Последовательность

 

 

образована по правилу ri

 

 

i

i 1

 

 

 

 

 

 

 

= 1 / i. Написать функцию, которая по заданному вещественному

числу a, такому, что 0 < a < 0.5, находит такое ri , чтобы ri-1 > a ri.

Задача 6.1.18.

 

 

Написать

функцию

для

определения

расстояния

между двумя точками, заданными их координатами.

Задача 6.1.19. Поле шахматной доски определяется парой натуральных чисел, первое из которых задаст номер вертикали, а второе - номер горизонтали. Написать функцию для подсчѐта минимального количества ходов, за которые шахматный король пройдѐт от одного заданного поля до другого.

Задача 6.1.20. Поле шахматной доски определяется парой натуральных чисел, первое из которых задаст номер вертикали, а второе - номер горизонтали. Написать функцию для подсчѐта минимального количества ходов, за которые шахматная пешка дойдѐт до конца доски. Учесть цвет пешки. Проверять входные данные на корректность.

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

Задача 6.2.2. Написать функцию (одну общую) для нахождения квадрата, куба и четвѐртой степени переданного в неѐ числа.

Задача 6.2.3. Написать функцию (одну общую) для подсчѐта суммы, разности и произведения двух чисел.

Задача 6.2.4. Написать функцию (одну общую) для подсчѐта количества цифр в натуральном числе, их суммы и произведения.

Задача 6.2.5. Написать функцию (одну общую) для нахождения синуса, косинуса и тангенса заданного угла.

123

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

Задача 6.2.7. Написать функцию (одну общую) для нахождения квадрата и квадратного корня заданного числа.

Задача 6.2.8. Написать функцию (одну общую) для нахождения двух ближайших целых чисел к заданному нецелому числу.

Задача 6.2.9.

Написать функцию (одну общую) для вычисления

значений m и n в зависимости от значений x и y.

x*y, при y < 27;

x*y, при x < 32;

m =

 

n =

x+y, при y >= 27.

x+y, при x >= 32.

Задача 6.2.10. Написать функцию (одну общую) для вычисления значений m и n в зависимости от значений x и y.

x, при x+y < 25;

y, при x+y < -10;

m = 2x, при 25<= x+y <=50; n =

2y, при -10<= x+y <=10;

3x, при x+y > 50.

3y, при x+y > 10.

Задача 6.2.11. Написать функцию (одну общую) для вычисления значений m, n, k в зависимости от значений x и y.

3, при x < -5, y < -5;

m =

-3, в остальных случаях

10, при x < 10, y > 10;

n =

-10, в остальных случаях

5, при x > -15, y > -15;

k =

-5, в остальных случаях

Задача 6.2.12. Написать функцию для вычисления произведения (ax + b)*(cx +d), где x – переменная величина, a, b, c, d – заданные коэффициенты (функция должна определять коэффициенты получающегося трѐхчлена).

Задача 6.2.13.

Написать функцию для определения корней

квадратного

уравнения ax2 + bx + c = 0 по заданным

коэффициентам a, b и c.

124

Задача 6.2.14. Написать функцию (одну общую) для нахождения (n- 1), n и (n+1) по счѐту чисел Фиббоначчи.

Задача 6.2.15. Написать функцию для определения точки на плоскости, находящейся посередине между двумя заданными (точки задаются координатами)

Задача 6.2.16. Написать функцию (одну общую) для определения площади и длины элипса по заданным полуосям

Задача 6.2.17. Написать функцию (одну общую) для определения площади и длины окружности по заданному диаметру

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

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

Задача 6.2.20. Написать функцию (одну общую) для определения, сколько чѐрных полей и сколько белых полей содержит шахматная доска размера n*n (поле a1 чѐрного цвета).

Задача 6.3.1. Написать функцию, которая циклически сдвигает массив на один элемент вправо.

Задача 6.3.2. Написать функцию, которая находит в строке цифры, и считает их сумму.

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

Задача 6.3.4. Написать функцию, которая на основе целочисленного массива сформирует новый массив, куда войдут только те элементы первого массива, которые делятся нацело на заданное число.

Задача 6.3.5. Написать функцию для определения, какая цифра входит в значения массива, заполненного натуральными числами, наибольшее количество раз. Вывести на экран сформированный массив, найденую цифру и количество еѐ вхождений.

125

Задача 6.3.6. Написать функцию, которая циклически сдвигает массив на один элемент вправо.

Задача 6.3.7. Написать функцию для заполнения массива заданной длины случайными вещественными числами из заданного диапазона.

Задача 6.3.8. Создать функцию для заполнения матрицы заданного размера случайными числами из заданного диапазона.

Задача 6.3.9. Создать функцию для транспонирования квадратной матрицы (предполагается, что на основе заданного двухмерного массива функция создаѐт и заполняет новый двухмерный массив).

Задача 6.3.10. Написать функцию для заполнения массива заданной длины элементами ri = 1 + 1/2 + 1/3 + 1/4 + 1/5 + ... + 1/i, где ri – i-

тый элемент массива.

Задача 6.3.11. Написать функцию для определения количества вхождений в строку заданного символа.

Задача 6.3.12. Написать функцию для определения количества вхождений в целочисленный числовой массив числа, равного по модулю заданному.

Задача 6.3.13. Написать функцию для определения наибольшего количества подряд идущих положительных элементов числового массива.

Задача 6.3.14. Написать функцию для определения, расположены ли элементы числового массива по возрастанию.

Задача 6.3.15. Создать функцию для определения по массиву чисел, можно ли построить многоугольник с длинами сторон, равными этим числам.

Задача 6.3.16.

Написать

функцию

ддля заполнения массива

заданной длины числами Фиббоначчи.

Задача 6.3.17.

Написать

функцию,

находящую минимальный и

максимальный элементы числового массива.

126