Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сборник лабораторных работ.doc
Скачиваний:
6
Добавлен:
17.11.2019
Размер:
5.38 Mб
Скачать

14Краткая теоретическая справка

Функция – это набор объявлений и операторов, предназначенных для решения какой-либо конкретной задачи.

Объявление функции (прототип, заголовок, сигнатура) задает ее имя, тип возвращаемого значения и список передаваемых параметров.

тип имя(список формальных параметров);

Определение функции содержит, кроме объявления, тело функции, представляющее собой последовательность операторов и описаний в фигурных скобках:

тип имя(список формальных параметров){

тело функции

}

Тип возвращаемого функцией значения может быть любым, кроме массива и функции (может быть указателем на массив или функцию). Если функция не должна возвращать значение, указывается тип void. Если тип возвращаемого значения не указан, то по умолчанию считается, что функция возвращает тип int.

Список параметров определяет величины, которые требуется передать в функцию при ее вызове. Для каждого параметра указываются его тип и имя (в прототипе имя можно не указывать, так как компилятором они игнорируются). Параметры, перечисленные в заголовке описания функции, называются формальными параметрами, или просто параметрами, а записанные в операторе вызова функции – фактическими параметрами, или аргументами.

Тип возвращаемого значения и типы параметров совместно определяют тип функции.

Функция возвращает значение оператором return, что позволяет вернуть только одно значение. Вернуть несколько значений после работы функции можно либо объединив эти значения в структуру, либо передавая указатели через список аргументов функции.

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

имя(список фактических параметров);

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

double F(double x, int y); - объявление функции F

double F(double, int); - альтернативное объявление функции F

void main(){

double d=5.67, e;

int n=3;

F(3.14, 5); - вызов функции F

F(d, 2); - вызов функции F

e = F(d, n) + F(d, 2*n); - вызов функции F (в выражении)

}

double F(double s, int n){ - определение функции F

return pow(s, n) + 2*s;

}

15Индивидуальные задания

Задача 1. Решить задачу с использованием функций.

Формулировка задачи

1

Даны действительные числа S, T. Получить

, где .

Вычисление h() и max() оформить в виде функций.

2

Получить все числа Армстронга из указанного пользователем диапазона. Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу ( например, 371 = 33 + 73 + 13 ). Для проверки, является ли целое N числом Армстронга определить функцию IsArmstrong(N).

3

Даны действительные числа a, b, c, d, e. Найти площадь заштрихованного четырехугольника, изображенного на рисунке:

Определить функцию вычисления площади треугольника по трем его сторонам.

4

Даны действительные числа x, y. Получить

, где .

Вычисление q() оформить в виде функции.

5

Даны длины a, b, c сторон некоторого треугольника. Найти медианы треугольника. Возможно, для решения задачи пригодится функция вычисления площади треугольника по трем его сторонам (по формуле Герона). Определить отдельную функцию для вычисления расстояния между двумя точками, заданными своими координатами.

6

Определить функцию Area(Ax,Ay,Bx,By,Cx,Cy), находящую площадь треугольника ABC по трем его сторонам (по формуле Герона). С помощью этой функции найти площади треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D. Определить отдельную функцию для вычисления расстояния между двумя точками, заданными своими координатами.

7

Составить программу для вычисления значения выражения z=(x1+x2)/(y1+y2), где

x1, x2 – корни уравнения ax2+bx+c=0;

y1, y2 – корни уравнения dy2+ey+f=0.

Для вычисления корней уравнения использовать функцию.

8

Даны длины сторон двух треугольников. Определить, какой из них имеет большую площадь.

9

Определить функцию Pi(eps) для вычисления числа  с заданной точностью eps, воспользовавшись формулой Грегори:

С помощью данной функции вычислить площадь круга с радиусом R для различных пяти значений eps.

10

Заданы три квадратных уравнения

.

Найти минимальное значение среди корней этих уравнений. Решение квадратного уравнения и поиск минимального значения двух чисел оформить в виде функции.

11

Определить функцию Heights(Ax,Ay,Bx,By,Cx,Cy,hA,hB,hC), находящую высоты hA, hB, hC треугольника ABC, проведенные соответственно из вершин A, B, C. С помощью этой процедуры найти высоты треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.

12

Определить функцию Dist(Px,Py,Ax,Ay,Bx,By,D), находящую расстояние D от точки P до прямой AB по формуле D = 2SPAB / |AB|, где SPAB – площадь треугольника PAB. С помощью этой функции найти расстояния от точки P до прямых AB, AC, BC, если даны координаты точек P, A, B, C. Определить отдельную функцию для вычисления расстояния между двумя точками, заданными своими координатами.

13

Определить функцию Perim(Ax,Ay,Bx,By,Cx,Cy), находящую периметр треугольника ABC по координатам его вершин (Ax, Ay, Bx, By, Cx, Cy – вещественные параметры). С помощью этой функции найти периметры треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D. Определить отдельную функцию для вычисления расстояния между двумя точками, заданными своими координатами.

14

Определить функцию Exp(x,eps) (параметры x, eps – вещественные, eps > 0), находящую приближенное значение функции exp(x): exp(x) = 1 + x + x2 / 2! + x3 / 3! + ... + xn / n! + ... . В сумме учитывать все слагаемые, большие eps. С помощью этой функции найти приближенное значение экспоненты для данного x при шести данных eps.

15

Определить функцию Sin(x,eps) вещественного типа (параметры x, eps – вещественные, eps > 0), находящую приближенное значение функции sin(x): sin(x) = x – x3 / 3! + x5 / 5! – ... + (–1)n x2n+1 / (2n+1)! + ... В сумме учитывать все слагаемые, большие по модулю eps. С помощью этой функции найти приближенное значение синуса для данного x при шести данных значениях eps.

16

Определить функцию Cos1(x,eps) вещественного типа (параметры x, eps – вещественные, eps > 0), находящую приближенное значение функции cos(x): cos(x) = 1 – x2 / 2! + x4 / 4! – ... + (–1)n x2n / (2n)! + ... В сумме учитывать все слагаемые, большие по модулю eps. С помощью этой функции найти приближенное значение косинуса для данного x при шести данных значениях eps.

17

Определить функцию Ln(x,n) вещественного типа (параметры x, eps – вещественные, |x| < 1, eps > 0), находящую приближенное значение функции ln(1+x): ln(1+x) = x – x2 / 2 + x3 / 3 – ... + (–1)n xn+1 / (n+1) + ... В сумме учитывать все слагаемые, большие по модулю eps. С помощью этой функции найти приближенное значение ln(1+x) для данного x при шести данных значениях eps.

18

Определить функцию Arctg(x,n)2 вещественного типа (параметры x, eps – вещественные, |x| < 1, eps > 0), находящую приближенное значение функции arctg(x): arctg(x) = x – x3 / 3 + x5 / 5 – ... + (–1)n x2n+1 / (2n+1) + ... В сумме учитывать все слагаемые, большие по модулю eps. С помощью этой функции найти приближенное значение arctg(x) для данного x при шести данных значениях eps.

19

Определить функцию Frac(a,b,p,q), преобразующую дробь a/b к несократимому виду p/q (все параметры функции целого типа). Знак результирующей дроби p/q приписывается числителю (т.е. q > 0). С помощью этой функции найти несократимые дроби, равные a/b + c/d, a/b + e/f, a/b + g/h (числа a, b, c, d, e, f, g, h даны). Организовать отдельную функцию для нахождения наибольшего общего делителя двух чисел.

20

Определить функцию SumDigit(N), находящую сумму цифр целого числа N. Используя эту функцию, найти сумму цифр чисел из диапазона [a, b].

21

Определить функцию SumDigit(N,S), находящую сумму цифр S целого числа N (N – входной, S – выходной параметр). Используя эту функцию, найти сумму цифр чисел из диапазона [a, b].

22

Используя функцию Min2(x,y) для нахождения минимального значения из двух вещественных чисел, определить функцию Min4(A,B,C,D), находящую минимальное из четырех вещественных чисел A, B, C и D. С помощью этой функции найти минимальные из наборов (A,B,C,D), (A,B,C,E), (A,C,D,E), если даны числа A, B, C, D, E.

23

Используя функцию Max2(x,y) для нахождения максимального значения из двух вещественных чисел, описать функцию Max4(A,B,C,D), находящую максимальное из четырех вещественных чисел A, B, C и D. С помощью этой функции найти максимальные из наборов (A,B,C,D), (A,B,C,E), (A,C,D,E), если даны числа A, B, C, D, E.

24

Вычислить значение выражения (все переменные – натуральные числа, m>3, e>n). Вычисление сумм оформить в виде функции.

25

Описать функцию Fact(N) целого типа, вычисляющую значение факториала N! = 1·2·...·N (N > 0 – параметр целого типа). С помощью этой функции вычислить факториалы 5 случайных чисел из диапазона [1, 10].

26

Описать функцию Fact2(N) целого типа, вычисляющую значение "двойного факториала": N!! = 1·3·5·...·N, если N — нечетное, N!! = 2·4·6·...·N, если N — четное (N > 0 — параметр целого типа). С помощью этой функции вычислить двойные факториалы 5 случайных чисел из диапазона [3, 12].

27

Описать функцию Fib(N) целого типа, вычисляющую N-е число Фибоначчи F(N) по формуле: F(1) = F(2) = 1, F(k) = F(k–2) + F(k–1), k = 3, 4, ... С помощью этой функции вычислить 10 чисел Фибоначчи со случайными номерами из диапазона [1, 21].

28

Описать функцию IsPrimeNumber(N), проверяющую, является ли целое число простым. С помощью этой функции найти простые числа из диапазона [a, b] (a и b – случайные целые числа, 1<a<b<2500).

29

Описать функцию IsOneSide(a,b,c,x1,y1,x2,y2), проверяющую, находятся ли точки (x1,y1) и (x2,y2) по одну сторону от прямой ax+by+c=0. Описать функцию LineABC(x1,y1,x2,y2,a,b,c), которая определяет коэффициенты a,b,c прямой ax+by+c=0, заданной двумя точками (x1,y1) и (x2,y2). С помощью этих функций определить, лежит ли точка A(x,y) внутри треугольника BCD, заданного координатами вершин.

30

Описать функцию IsOneSide(a,b,c,x1,y1,x2,y2), проверяющую, находятся ли точки (x1,y1) и (x2,y2) по одну сторону от прямой ax+by+c=0. Описать функцию LineABC(x1,y1,x2,y2,a,b,c), которая определяет коэффициенты a,b,c прямой ax+by+c=0, заданной двумя точками (x1,y1) и (x2,y2). С помощью этих функций определить, является ли четырехугольник ABCD выпуклым.

Задача 2. Решить задачу с использованием функций. Ввод-вывод значений массивов осуществить с помощью функций.

Формулировка задачи

1

По заданным 10-элементным массивам А, В и С вычислить:

2

Заданы три матрицы A[3][3], B[2][2], C[3][3]. Найти минимальное из трех чисел  x, y, z, где  x – след матрицы Ay – след матрицы B, z – след матрицы C. Следом матрицы называется сумма элементов главной диагонали. Вычисление следа оформить в виде функции.

3

По заданным 10-элементным целым массивам  X  и  Y вычислить

Вычисление суммы оформить в виде функции.

4

Даны коэффициенты многочленов  P(x) и  Q(x) 5-й степени и дано вещественное a. Вычислить P(a+Q(a)P(a+1)).

5

Составить программу для нахождения сумм элементов каждого столбца матриц A и B, используя функцию.

6

Заданы три одномерных массива X, Y, Z. Упорядочить по возрастанию три числа a, b и c, где a – минимальный элемент массива X, b – минимальный элемент массива Y, а c – минимальный элемент массива Z. Поиск минимального элемента оформить в виде функции.

7

Решить уравнение dx=c, где d – длина вектора a={a1,a2,…,a10}, c – длина вектора b={b1,b2,…,b7}. Вычисление длины вектора оформить в виде функции.

8

Составить программу для вычисления значения функции , где a – среднее арифметическое отрицательных элементов массива x[10], b – среднее арифметическое отрицательных элементов массива y[20]. Для вычисления среднего арифметического элементов массива использовать функцию.

9

Заданы два вектора x={x1,x2,x3,x4} и y={y1,y2,y3,y4}. Определить угол  между векторами x и y по формуле

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

10

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

, где ,

xij – элементы матрицы 5x10, yi – элементы массива y[10].

Суммирование оформить функцией. 

11

Заданы четыре вектора x={x1,x2,x3}, y={y1,y2,y3}, z={z1,z2,z3,z4}, p={p1,p2,p3,p4}. Вычислить скалярное произведение векторов x и y, сравнить его со скалярным произведением векторов z и p, найти большее. Вычисление скалярного произведения оформить в виде функции.

12

Описать функцию Polynom(A,N,X), находящую значение полинома P в вещественной точке X. Полином P задается параметрами N (степень полинома, 0 < N < 8) и A (коэффициенты полинома, вещественный массив размера N+1): P(X) = A[0]·XN + A[1]·XN–1 + ... + A[N-1]·X + A[N]. Используя эту функцию, найти значения заданного полинома в пяти данных (случайных) точках.

13

Описать функцию NMin(A,N) целого типа, находящую номер минимального элемента массива A (массив состоит из N вещественных чисел). С помощью этой функции найти номера минимальных элементов массивов A, B, C размера NA, NB, NC соответственно.

14

Описать функцию NMinmax(A,N,NMin,NMax), находящую номера минимального и максимального элемента массива A из N вещественных чисел. Выходные параметры: NMin (номер минимального элемента) и NMax (номер максимального элемента). С помощью этой функции найти номера минимальных и максимальных элементов массивов A, B, C размера NA, NB, NC соответственно.

15

Описать функцию Factors(A,N,F), находящую разложение натурального числа A на простые множители. Количество множителей возвращается в целой переменной N, а сами множители (в порядке неубывания) – в целочисленном массиве F (N и F – выходные параметры; максимальное число элементов массива F считать равным 15). С помощью этой функции разложить на простые множители пять данных чисел.

16

Описать функцию PerimN(X,Y,N), находящую периметр N-угольника, координаты вершин которого (в порядке их обхода) передаются в вещественных массивах X, Y размера N (> 2). С помощью этой функции найти периметры трех данных многоугольников (с числом вершин NA, NB, NC соответственно), если даны координаты их вершин. Для вычисления расстояния между двумя точками определить отдельную функцию.

17

Описать функцию Invert(A,N), меняющую порядок следования элементов массива A из N вещественных чисел на противоположный ("инвертирование массива"). С помощью этой функции инвертировать массивы A, B, C размера NA, NB, NC соответственно.

18

Описать функцию MoveRight(A,N,k)2, осуществляющую циклический сдвиг элементов вещественного массива A размера N на k позиций вправо (0 < k < 5, k < N). С помощью этой функции осуществить сдвиг элементов данного массива размера N на k1 позиций, а затем – сдвиг элементов полученного массива на k2 позиций (k1 и k2 даны). После каждого вызова функции выводить на экран результирующий массив.

19

Описать функцию MoveLeft(A,N,k), осуществляющую циклический сдвиг элементов вещественного массива A размера N на k позиций влево (0 < k < 5, k < N). С помощью этой функции осуществить сдвиг элементов данного массива размера N на k1 позиций, а затем – сдвиг элементов полученного массива на k2 позиций (k1 и k2 даны). После каждого вызова функции выводить на экран результирующий массив.

20

Описать функцию Smooth(A,N), заменяющую каждый элемент вещественного массива A размера N на его среднее арифметическое со своими соседями ("сглаживание массива"). С помощью этой функции выполнить пятикратное сглаживание данного массива A размера N, выводя на экран результаты каждого сглаживания.

21

Описать функцию SumLine(A,M,N,k), вычисляющую сумму элементов вещественной матрицы A размера M x N, расположенных в k-й строке (если k ≥ M, то функция возвращает 0). Для данной матрицы A размера M x N и трех данных k найти SumLine(A,M,N,k).

22

Описать функцию SumCol(A,M,N,k), вычисляющую сумму элементов вещественной матрицы A размера M x N, расположенных в k-м столбце (если k ≥ N, то функция возвращает 0). Для данной матрицы A размера M x N и трех данных k найти SumCol(A,M,N,k)

23

Описать функцию SwapLine(A,M,N,k1,k2), осуществляющую перемену местами строк вещественной матрицы A размера M x N с номерами k1 и k2 (если k1 или k2 больше или равно M, то матрица не изменяется). Используя эту функцию, поменять для данной матрицы A размера M x N строки с номерами k1 и k2.

24

Описать функцию SwapCol(A,M,N,k1,k2), осуществляющую перемену местами столбцов вещественной матрицы A размера M x N с номерами k1 и k2 (если k1 или k2 больше или равно N, то матрица не изменяется). Используя эту функцию, поменять для данной матрицы A размера M x N столбцы с номерами k1 и k2.

25

Описать функцию Transp(A,M), выполняющую транспонирование квадратной вещественной матрицы A порядка M. Использовать эту функцию для транспонирования данной матрицы A порядка M.

26

Описать функцию Gauss(A,M,N,i1,i2,X), преобразующую вещественную матрицу A размера M x N следующим образом: из строки i1 вычитается строка i2, умноженная на вещественное число X. С помощью этой функции, используя в качестве вспомогательной первую строку, обнулить в остальных строках данной матрицы A размера M x N элементы k-го столбца (число k дано, причем A[0][k]≠0).

27

Описать функцию Simm(A,M,N), преобразующую вещественную матрицу A размера M x N симметричным отображением относительно вертикальной оси:

0

1

2

3

4

4

3

2

1

0

Вывести на экран матрицу до выполнения функции и после.

28

Дана матрица A[m][n] действительных чисел. Заменить нулями все элементы, отличающиеся от среднего значения более, чем на заданную величину. Нахождение среднего значения и изменение матрицы оформить с помощью функций.

29

Описать функцию PositivNegativ(A,M,N,B,C), вычисляющую для заданной вещественной матрицы A размерности M x N логические значения двух векторов B[M] и C[N] следующим образом: элемент вектора bi равен истине, если в i-ой строке матрицы есть положительные элементы, и ложь, если нет; аналогично, элемент вектора ci должен показывать наличие в соответствующем столбце отрицательных элементов.

30

Даны две матрицы A[n][k] и B[k][m] целых чисел. Получить матрицу C[n][m] – произведение заданных матриц. Вычисление произведения оформить в виде функции Product(A,B,C,m,n,k).

Тема: Обработка строк

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