Лекции по проге / 12_Функции, определяемые пользователем
.pdf
Пример использования одномерных массивов произвольной длины
/*!
* Найти в массиве элементы равные заданному значению |
||
* \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; |
|
} |
|
|
