Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по СИ.doc
Скачиваний:
12
Добавлен:
23.08.2019
Размер:
433.15 Кб
Скачать

Лабораторная работа №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

Индивидуальные задания:

Выполнить упражнения из раздела «Двумерные массивы», оформив каждый пункт задания в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.