Лекции по проге / 12_Функции, определяемые пользователем
.pdf
Дополнительное задание на вызов функции, использующей выходные аргументы скалярного типа
Найти координаты четвертой вершины прямоугольника, если остальные координаты заданы переменными x1, y1, x2, y2, x3, y3
Результат записать в переменные x4, y4
31
Пример вызова функции, использующей выходные аргументы скалярного типа
double x1 = 3, y1 = 15, x2 = 3, y2 = 25, x3 = 25, y3 = 15, x4, y4;
// Нахождение четвертой координаты прямоугольника fourth_vertex_1 (x1, y1, x2, y2, x3, y3, &x4, &y4);
printf("(%g, %g)", x4, y4);
(25.0, 25.0)
32
Пример реализации функции, использующей выходные аргументы скалярного типа
/*! Определить четвертую вершину прямоугольника * (стороны прямоугольника параллельны осям координат)
* \param [in] x_a, y_a, x_b, y_b, x_c, y_c – координаты трех вершин прямоугольника
* \param [out] x_d, y_d – координаты четвертой вершины */
|
void fourth_vertex_1( |
|
|
double x_a, double y_a, double x_b, double y_b, |
|
|
double x_c, double y_c, double *x_d, double *y_d ) |
|
|
{ |
|
|
// Определяем х-координату |
|
|
if(x_a == x_b) |
*x_d = x_c; |
|
else |
*x_d = x_a; |
|
// Определяем y-координату |
|
|
if(y_a == y_b) |
*y_d = y_c; |
33 |
else |
*y_d = y_a; |
} |
|
|
Обновляемые данные = обновляемые аргументы
|
|
Скалярные типы |
Массивы |
|
|
Входные |
Обновляемые ар- |
переданные по |
+ |
Выходные |
|
данные |
гументы [in|out] |
адресу |
данные |
||
|
|||||
|
|
|
|
|
В языке Си обновляемые аргументы реализуются точно так же, как и выходные
Различие между ними смысловое: вых. аргументы передаются в функцию с неопределенным значением, а обновляемые — уже содержат некоторые значения, которые считываются внутри функции, а затем изме-
|
няются. По завершению функции вых. и обновл. аргу- |
34 |
менты изменяют свои первоначальные значения |
|
Задание на определение входных и выходных данных для функции
Определить входные и выходные данные для функции sort() - упорядочить два значения по возрастанию
35
Пример определения входных и выходных данных для функции
Функция sort() - упорядочить два значения по возрастанию
Входные данные: два целочисленных значения, которые должны быть упорядочены
Выходные данные: два целочисленных значения, упорядоченных по возрастанию
36
Задание на объявление функции
Выбрать способ реализации входных и выходных данных функции
Задать прототип функции sort() - упорядочить два значения по возрастанию
Входные данные: два целочисленных значения, которые должны быть упорядочены
Выходные данные: два целочисленных значения,
упорядоченных по возрастанию
37
Пример объявления функции, использующей обновляемые аргументы скалярного типа и типа массив
/*!
*Упорядочить два значения по возрастанию — используем скалярные аргументы
*\param [in|out] a - первое значение (меньшее)
*\param [in|out] b - второе значение (большее)
*/
void sort_1(int *a, int *b);
/*!
*Упорядочить два значения по возрастанию — используем массив
*\param [in|out] values — упорядочиваемые значения
*/
void sort_2(int values[2]);
38
Задание на вызов функции, использующей обновляемые аргументы скалярного типа и типа массив
Используя sort_1() и sort_2(), упорядочить константные значения 7 и 5
Используя sort_1() и sort_2(), упорядочить
переменные int k = 34; int m = 33;
Используя sort_1() и sort_2(), упорядочить массив по возрастанию
39 int mass[] = {22, 13, 9};
Пример вызова функции, использующей обновляемые аргументы скалярного типа и типа массив
//Упорядочиваем константы
//Ошибка!!!! Нельзя обновить константные значения sort_1(&7, &5);
//Ошибки нет, т.к. преобразуем две константы в массив int arr[2] = {7, 5};
sort_2(arr);
// Упорядочиваем скалярные переменные
int k = 34; int m = 33; sort_1(&k, &m);
int arr[2]; arr[0] = k; arr[1] = m;
sort_2(arr);
40 k = arr[0]; m = arr[1];
