Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
39
Добавлен:
01.10.2019
Размер:
133.98 Кб
Скачать

Лабораторная работа №8

ОБРАБОТКА ДВУМЕРНЫХ МАССИВОВ

Студент гр. ИКПИ-81

Коваленко Л. А.

А. Постановка задачи

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

Дано произвольное число строк (N<=10) и столбцов (M<=10). Необходимо вычислить для каждой строки массива отклонение её элементов от среднего значения для этой строки.

Лабораторная работа выполняется в виде одного файла, содержащего функции для работы с массивами и основную функцию main().

Б. Разработка алгоритма

Алгоритм решения задачи следующий:

  1. Ввод исходного двумерного массива данных с помощью циклов for (главного и вложенного).

  2. Вычисление для каждой строки массива отклонение её элементов от среднего значения для этой строки.

    1. Подсчет среднего значения для строки (переменная mean).

    2. Подсчет отклонения очередного элемента от среднего значения (использование стандартной библиотечной функции fabs()).

    3. Перезапись строки существующего массива (исходные данные меняются на новые, содержащие отклонения).

  3. Вывод результатов вычислений (двумерного массива).

Входные данные состоят из величин N (количество строк), M (количество столбцов, или, иначе говоря, количество чисел в каждой строке) и числовых последовательностей. Значения N и M вводятся в основной части программы.

В. Таблица идентификаторов

N

Обозначение в задаче

Идентификатор

Назначение

1

N

n

Входные данные

2

M

m

Входные данные

3

Двумерный массив

a[10][10]

Входные и выходные данные

4

i

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

5

k

6

mean

0

Г. Схемы алгоритма

Начало

Ввод n, m

1

2

3

4

Останов

5

Конец

0

8

2

4

1

3

4

5

6

7

0

1

2

3

Д. Контрольный расчет

Контрольный набор с , ; , .

Результаты вычислений приведены ниже в таблице вычислений.

Назначение набора данных

Набор данных

Результаты вычислений

n

m

a[1]

a[2]

a[3]

Ручные

Машинные

a[1]

a[2]

a[3]

a[1]

a[2]

a[3]

Контрольный набор

1

4

2

3

3

4

1

1

6

1

1

8

3

3

3

5

10

24

10

21

3

42

21

3

42

20

25

99

11

2

47

11

2

47

30

26

47

1

1

5

1

1

5

40

27

78

9

0

26

9

0

26

55

33

26

24

6

26

24

6

26

Е. Программа на языке Си

/* Файл Lab8.c */

#include <stdio.h>

#include <math.h>

/*

Лабораторная работа 8

ОБРАБОТКА ДВУМЕРНЫХ МАССИВОВ

Студент гр. ИКПИ-81

Коваленко Л. А.

*/

/* Описания функций */

void InputFunc (double [][10], int, int);

void DevMeanFunc (double [][10], int, int);

void OutputFunc (double [][10], int, int);

int main(int argc, char **argv)

{

int n, m;

double a[10][10] = {{0.0}};

/* Ввод исходных данных */

printf("Input N, M: ");

scanf("%d %d", &n, &m);

InputFunc(a, n, m);

/* Вычисления */

DevMeanFunc(a, n, m);

/* Вывод */

OutputFunc(a, n, m);

return 0;

}

/* Определения функций */

void InputFunc (double a[][10], int n, int m) {

printf("Enter the numbers (%d items for one line): \n", m);

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

for (int k = 0; k < m; k++)

scanf("%lf", (*(a + i) + k));

}

void DevMeanFunc (double a[][10], int n, int m) {

double mean;

for (int i = 0; i < n; i++) {

mean = 0;

for (int k = 0; k < m; k++)

mean += *(*(a + i) + k);

mean = mean / m;

for (int k = 0; k < m; k++)

*(*(a + i) + k) = fabs(mean - *(*(a + i) + k));

}

}

void OutputFunc (double a[][10], int n, int m) {

for (int i = 0; i < n; i++) {

for (int k = 0; k < (m-1); k++)

printf("%.3lf, ", *(*(a + i) + k));

printf("%.3lf\n", *(*(a + i) + (m-1)));

}

}

Ж. Выводы

Тот факт, что результаты контрольных расчетов, выполненных вручную, достаточно совпадают с результатами контрольных расчетов, выполненных на ЭВМ, свидетельствуют о том, что программа составлена правильно.

Соседние файлы в папке Примеры отчетов