Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка_2013_14_весна(1курс) / Лаб_ раб_3_ф_матр

.doc
Скачиваний:
9
Добавлен:
03.03.2016
Размер:
104.45 Кб
Скачать

18

ЛАБОРАТОРНАЯ РАБОТА № 3

ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ ПРИ ОБРАБОТКЕ ДВУМЕРНЫХ МАССИВОВ

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

3.1 Требования к выполнению работы

  • Для выполнения всех расчетов использовать несколько функций, каждая из которых выполняет отдельную задачу:

  • формирование матрицы;

  • обработка матрицы и получение одномерного массива;

  • обработка одномерного массиваи получение конечного результата;

  • печать всех промежуточных и конечных результатов.

  • результатов и т.п.).

  • Тип функций, при возвращении промежуточных данных выбрать самостоятельно и обосновать.

  • Рассмотреть два варианта описания массива – как массив с неопределенным количеством элементов и с помощью указателя.

  • Значения элементов матрицы задавать с помощью функций, формирующих случайные числа.

3.2 Теоретические положения

В том случае, если аргументом функции является матрица, то такой аргумент можно описать следующими способами:

1.Массив задается с фиксированной длиной строки k.

void fun(float a[][k], int n,…);

При этом способе есть возможность варьирования количества строк.

Внутри функции элементы массива записываются как переменная с индексом - a[i][j].

При вызове функции на первом месте указывается имя матрицы, на втором – количество строк, например:

fun(y, 20,…);

2. Массив задается в виде указателя на его начало, количество строк и столбцов задается рядом

. void fun ( float *ptx, int m, int n,… )

Элементы массива в программе записываются с помощью указателя: *( ptx+i*n+ j )

При вызове функции в качестве фактического аргумента задается адрес нулевого элемента матрицы и фактические размеры:

fun(&y[0][0],4,6…);

Пример.

Задана матрица действительных чисел размером 4х4. Найти сумму элементов матрицы, значения которых не превышают среднего арифметического всей матрицы.

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

Текст програми

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

void sum (float *ptx, int n,int m,float *pt_sr)

{

int i,j;

float s=0, sr;

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

for (j=0;j<m;j++)

{

*(ptx+i*m+j)=0.0001*rand();

s=s+*(ptx+i*m+j);

}

sr=s/n*m;

*pt_sr=0;

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

for (j=0;j<m;j++)

if (*(ptx+i*m+j)< sr)

*pt_sr=*pt_sr+*(ptx+i*m+j);

}

void main()

{

float a[6][8];

int i,j;

printf(“задайте размеры матрицы”);

scanf(“%d%d”,k,l);

sum (&a[0][0],k,l,&ssr);

for (i=0;i<k;i++)

{

printf("\n");

for (j=0;j<l;j++)

printf("%5.1f",a[i][j] );

}

printf("\n ssr= %6.2f \n",ssr);

}

3.3 Варианты индивидуальных заданий.

Варианты индивидуальных заданий приведены в таблице 3.1.

Для всех задач получить элементы квадратной матрицы А, используя функцию, формирующую последовательность случайных чисел.

Используя сформированную матрицу получить по заданному правилу компоненты массива Х.

Вычислить значение некоторого параметра r, используя, функция f(X).

Предусмотреть вывод на печать исходной матрицы, промежуточных матриц или массивов, результирующего массива Х, а также значение параметра r.

Таблица 3.1.Варианты индивидуальных заданий.

п.п.

Правило получения массива Х.

Вид функции f(X).

1

Массив Х - строка с наименьшей суммой элементов, и элементы которой сдвинуты на две позиции влево циклическим сдвигом.

2

Массив Х - главная диагональ матрицы А, преобразованной сначала таким образом, что в начале каждой строки нужно собрать ее положительные элементы, а в конце - отрицательные элементы.

3

Массив Х - строка с наибольшей суммой элементов, порядок следования, в которой инвертирован.

max | xi+1 | - | xi |

1<=i<=n-1

4

Компоненты массива Х - средние арифметические значения элементов строк матрицы А, упорядоченные по убыванию.

5

В качестве x[i] принять разность между минимальным элементом каждой строки матрицы А и суммой элементов всей матрицы .

6

В качестве x[i] принять max[i] - min[i] каждой строки матрицы А.

max | xi | 1<=i<=n

7

В матрице А найти строку с максимальной суммой элементов. Массив Х получить путем сдвига элементов этой строки на позицию в левую сторону.

8

Массив Х - главная диагональ матрицы А, преобразованной таким образом, что в начале каждой строки нужно собрать ее положительные элементы, а в конце - отрицательные элементы.

9

Компоненты массива Х - упорядоченные по возрастанию средние арифметические значения элементов столбцов матрицы А.

min | xi | 1<=i<=n

10

Массив Х - побочная диагональ матрицы А, элементы которой сдвинуты на три позиции вправо.

11

Компоненты массива Х - упорядоченные по убыванию суммы элементов строк матрицы А.

12

Массив Х - строка матрицы А, сумма элементов которой наименьшая. В найденной строке элементы сдвинуты циклическим сдвигом на 2 позиции влево.

min xi - x_sred

1<=i<=n

13

В качестве x[i] принять разность между максимальным элементом и средним арифметическим каждой строки матрицы А.

14

Массив Х - главная диагональ матрицы А, порядок следования элементов которой инвертирован.

15

В качестве x[i] принять разность между минимальным элементом и последним элементом каждой строки матрицы А.

16

В качестве x[i] принять разность между максимальным элементом и первым элементом каждой строки матрицы А.

max x_sred - xi+1

1<=i<=n

17

Массив Х - строка с наименьшей суммой элементов, элементы которой сдвинуты циклическим сдвигом на 2 позиции вправо.

min | xi+1 | - | xi |

1<=i<=n-1

18

Компоненты массива Х - средние арифметические значения элементов строк матрицы А, упорядоченные таким образом, что в начале стоят отрицательные значения, а потом положительные.

max ( xi+1 | - | xi |)*x_sred

1<=i<=n-1

19

Массив Х - строка матрицы А, у которой сумма элементов с наименьшей, и порядок следования элементов в которой инвертирован.

min |xi|-|x_sred| 1<=i<=n

20

В качестве x[i] принять разность между средним арифметическим и минимальным элементом каждого столбца матрицы А.

21

Массив Х - строка с наибольшей суммой элементов, и элементы которой сдвинуты на три позиции вправо циклическим сдвигом.

min | xi+1 | - | xi |

1<=i<=n-1

22

Компоненты массива Х - средние арифметические значения элементов столбцов матрицы А, упорядоченные по возрастанию.

23

В качестве x[i] принять a_sr[i] - min[i] каждой строки матрицы А.

24

В качестве x[i] принять разность между минимальным элементом и суммой элементов каждой строки матрицы А.

25

Компоненты массива Х - средние арифметические значения элементов строк матрицы А, упорядоченные по возрастанию.

26

Массив Х - главная диагональ матрицы А, предварительно преобразованной так, что элементы каждой строки упорядочены по возрастанию.

max x_sred - xi+1

1<=i<=n

27

В качестве x[i] принять разность между максимальным элементом каждой строки матрицы А и суммой элементов всей матрицы .

max | xi+1 | - | xi |

1<=i<=n-1

3.4 Контрольные вопросы.

  1. Какие существуют варианты описание функции, если аргументом функции является матрица?

  2. Как описать матрицу с неопределенным количеством строк?

  3. Можно ли описать матрицу с неопределенным количеством и строк, и столбцов?

  4. Как описать матрицу с помощью указателя на начало массива?

  5. Как обозначаются элементы матрицы внутри функции, если матрица описана с неопределенным количеством строк?

  6. Как обозначаются элементы матрицы внутри функции, если матрица описана с помощью указателя?

  7. Как выглядит вызов функции, если матрица описана с заданным количеством строк и столбцов?

  8. Как выглядит вызов функции, если матрица описана с помощью указателя?

  9. Как можно обозначать элементы массива внутри функции, если массив описан с помощью указателя на начало массива?

  10. При каком варианте описания массива существует возможность варьировать только количеством строк?

  11. При каком варианте описания массива существует возможность варьировать и количеством строк, и количеством столбцов?