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

Лекции по проге / 12_Функции, определяемые пользователем

.pdf
Скачиваний:
31
Добавлен:
14.03.2016
Размер:
209.62 Кб
Скачать

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

Найти координаты четвертой вершины прямоугольника, если остальные координаты заданы переменными 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];