Язык Си. Лабораторные работы / Примеры отчетов / Lab8
.docx
Лабораторная работа №8
ОБРАБОТКА ДВУМЕРНЫХ МАССИВОВ
Студент гр. ИКПИ-81
Коваленко Л. А.
А. Постановка задачи
Требуется выполнить обработку числового двумерного массива. Все основные действия (ввод исходных массивов с клавиатуры, вычисления, вывод) следует выполнять с помощью функций.
Дано произвольное число строк (N<=10) и столбцов (M<=10). Необходимо вычислить для каждой строки массива отклонение её элементов от среднего значения для этой строки.
Лабораторная работа выполняется в виде одного файла, содержащего функции для работы с массивами и основную функцию main().
Б. Разработка алгоритма
Алгоритм решения задачи следующий:
-
Ввод исходного двумерного массива данных с помощью циклов for (главного и вложенного).
-
Вычисление для каждой строки массива отклонение её элементов от среднего значения для этой строки.
-
Подсчет среднего значения для строки (переменная mean).
-
Подсчет отклонения очередного элемента от среднего значения (использование стандартной библиотечной функции fabs()).
-
Перезапись строки существующего массива (исходные данные меняются на новые, содержащие отклонения).
-
-
Вывод результатов вычислений (двумерного массива).
Входные данные состоят из величин 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)));
}
}
Ж. Выводы
Тот факт, что результаты контрольных расчетов, выполненных вручную, достаточно совпадают с результатами контрольных расчетов, выполненных на ЭВМ, свидетельствуют о том, что программа составлена правильно.