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

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

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

Пример использования одномерных массивов произвольной длины

/*!

* Найти в массиве элементы равные заданному значению

* \param [in] mass -

исходный массив

* \param [in] length

- длина исходного массива

*

\param [in] val - искомое значение

*

\param [out] index_list - индексы найденных

*

элементов

*

\return кол-во найденных элементов

*/

int find_value_2( const int *mass, int length, int val, int *index_list );

51

Задание

Используя функцию find_value_2(), найти первое нулевое значение (индекс строки и индекс столбца) в матрице

int matrix[3][5]= { {3, 4, 5, 5, 6},

{3,

5,

5,

0,

9},

{0,

4,

1,

2,

3}

};

52

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

int matrix[3][5];

//

исходная матрица

 

int

index_list[5];//

индексы найденных эл-тов

int

count;

//

кол-во найденных

эл-тов

//Ищем первое нулевое значение в матрице count = 0;

for(int i = 0; (i < 5) && (count == 0); i++)

{

count = find_value_2(matrix[i], 5, 0, index_list);

}

//Печатаем позицию нулевого эл-та, если он найден if(count > 0)

{ printf("%d %d", i, index_list[0]); } else

53 { printf("no solution"); }

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

/*!

*Присвоить всем элементам массива заданное значение

*\param [in|out] mass - исходный массив

*\param [in] length - длина исходного массива

*\param [in] val - целевое значение

*/

void mem_set (int *mass, int length, int val)

{

for( int i = 0; i < length; i++ )

{

mass[i] = val;

}

}

54

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

Обнулить правую половину матрицы

#define ROW 6 #define COL 5

int matrix1[ROW][COL];

Обнулить нижнюю половину матрицы

int matrix2[ROW][COL];

55

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

#define ROW 6 #define COL 5

int matrix1[ROW][COL]; // исходная матрица int matrix2[ROW][COL]; // исходная матрица

//Обнуляем правую половину матрицы for(int i = 0; i < ROW; i++)

{

mem_set (matrix1[i] + (COL+1)/2, COL/2, 0);

}

//Обнуляем нижнюю половину матрицы

for(int i = (ROW+1)/2; i < ROW; i++)

{

mem_set (matrix2[i], COL, 0);

56 }

И это еще не все...

Использование структур в качестве аргументов и возвращаемых значений, а так же использование массивов структур в качестве аргументов

57

Задание

Объявить и реализовать функцию fourth_vertex_2()

Входные данные: три вершины прямоугольника – A, B и С – типа структура

struct vertex

{

double x; double y;

};

Выходные данные: координаты четвертой верши- 58 ны прямоугольника — структурированный тип

Пример объявления функции, использующей аргументы и возвращаемое значение типа "структура"

/*!

*Определить четвертую вершину прямоугольника

*(стороны прямоугольника параллельны осям координат)

*\param[in] А - первая вершина

*\param[in] B - вторая вершина

* \param [in] С - третья вершина * \return - четвертая вершина

*/

struct vertex fourth_vertex_2 (struct vertex A, struct vertex B, struct vertex C);

59

Пример реализации функции, использующей аргументы и возвращаемое значение типа "структура"

/*! Определить четвертую вершину прямоугольника * (стороны прямоугольника параллельны осям координат)

* \param[in] А, В, C — три вершины прямоугольника * \return - четвертая вершина

*/

struct vertex fourth_vertex_2 (struct vertex A,

 

{

struct vertex B, struct vertex C)

 

 

 

struct vertex D; // четвертая вершина

 

if(A.x == B.x) D.x = C.x;

 

else

D.x = A.x;

 

if(A.y == B.y) D.y = C.y;

 

else

D.y = A.y;

60

return D;

 

}