Лабораторная работа №5 Простейшие функции
Задание: Выполнить упражнение из лабораторной работы «Двумерные массивы», оформив каждый пункт задания в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
Пример задания: Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом. Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.
Пример решения задачи:
/*
Подключение рабочих библиотек:
<stdio.h> - библиотека ввода/вывода
*/
#include <stdio.h>
/* Объявление прототипов функций */
void Task1(int *mat, int m, int n);
void Task2(int *mat, int m, int n);
int main(int argc, char* argv[])
{
/* Объявляем и инициализируем матрицу 8х8 */
int matrix[8][8] = {
{ 2, 7, 2, 7, 1, 4, 0, 3 },
{ 1, 0, 7, 6, 0, -8, 3, 5 },
{ 2, 7, 1, 8, 1, 4, 9, 3 },
{ 9, 2, 8, 5, 2, 0, 0, 6 },
{ 7, 1, 1, 3, 9, 3, 9, 1 },
{ 8, 2, 4, 9, 1, -6, 4, 9 },
{ 0, 3, 9, 0, 9, 4, 8, 8 },
{ 1, 8, 3, 2, 8, 2, 8, 0 }
};
Task1(&matrix[0][0], 8, 8);
Task2(&matrix[0][0], 8, 8);
return 0;
}
void Task1(int *mat, int m, int n)
{
int i, j; /* Счетчики */
bool bFlag; / Флаг */
printf("k = ");
for (i = 0; i < m; i++)
{
/* Присваеваем Флагу исходное значение */
bFlag = true;
for (j = 0; j < n; j++)
{
/* Сравниваем элемент i-й строки j-го столбца с элементом j-й строки i-го столбца. В случае их несоответствия присваеваевам Флагу значение Ложь и прерываем цикл по j конструкцией break */
if (mat[i * m + j] != mat[j * m + i])
{
bFlag = false;
break;
}
}
/* В случае сохранения флагом исходного значения выводим на экран */
/* номер соответствующей строки */
if (bFlag) printf("%d ", i);
}
}
void Task2(int *mat, int m, int n)
{
int i, j, iSumm; /* Счетчик и переменная для хранения суммы */
bool bFlag; /* Флаг */
printf("\n\n");
for (i = 0; i < m; i++)
{
/* Присваеваем переменным исходные значения */
bFlag = false;
iSumm = 0;
for (j = 0; j < n; j++)
{
/* При нахождение хотя бы одного отрицательного элемента присваиваем Флагу значение Истина, обозначающее необходимость вывода Суммы на экран */
if (mat[i * m + j] < 0) bFlag = true;
/* Суммируем значения элементов i-й строки */
iSumm += mat[i * m + j];
}
/* В случае нахождения в строке хотя бы одного отрицательного элемента выводим на экран сумму элементов i-й строки */
if (bFlag) printf("Summ of elements of row #%d = %d\n", i, iSumm);
}
}
Результат выполнения программы:
k = 2 6
Сумма элементов строки #1 = 14
Сумма элементов строки #5 = 31
Индивидуальные задания:
Выполнить упражнения из раздела «Двумерные массивы», оформив каждый пункт задания в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.