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

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

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

12

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

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

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

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

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

  • ввод данных;

  • печать массива;

  • вывод результатов;

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

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

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

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

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

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

1) как массив с неопределенным количеством элементов:

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

где n – количество элементов массива a.

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

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

fun(y, 20,…);

2) как указатель на начало массива:

void fun(float *pta, int n,…)

где n – количество элементов массива.

Внутри функции элементы массива записываются через указатель

*(pta+i) == a[i].

Вызов функции может осуществляться двояко - на первом месте указывается имя массива, на втором – количество элементов, или на первом месте указывается адрес нулевого элемента, на втором – количество элементов:

fun(y, 20,…);

fun(&y[0], 20,…);

Пример.

Заданы два массива, А[10] и В[20]. Найти в них максимальный, минимальный элементы и сумму всех элементов. Сформировать массив и найти сумму в 1-й функции, найти максимальный и минимальный элементы во 2-й функции. Вывести элементы массива, сумму, максимальный и минимальный элементы в основной функции.

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

/*1-ая функция, формирует массив и находит сумму*/

void f1(float *x, int n, float *ps)

{

int i;

*ps=0;

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

{

*(x+i)=0.001*rand();

*ps=*ps+*(x+i);

}

}

/*2-ая функция, находит максимальный та минимальный элементы*/

void f2(float *x,int n,

float *pt_max,float *pt_min)

{

int i;

*pt_max=*pt_min=*x;

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

{

if (*(x+i)<*pt_min) *pt_min=*(x+i);

if (*(x+i)>*pt_max) *pt_max=*(x+i);

}

}

/* основная функция*/

void main()

{

float a[10], b[20];

float as, amax, amin, bs, bmax, bmin;

int i;

clrscr();

f1(a,10,&as); /*вызов функции f1 для массива а */

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

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

printf("\n");

printf("\n sa= %7.1f ",as);

f2(a,10,&amax,&amin);/*вызов функции f2 для массива а */

printf("\n");

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

f1(b,20,&bs); /*вызов функции f1 для массива b */

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

printf(" %7.1f ", b[i]);

printf("\n");

printf("n sb= %7.1f ",bs);

f2(b,20,&bmax,&bmin);/*вызов функции f2 для массива b */

printf("\n");

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

}

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

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

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

Задания для составления подпрограммы

Массивы и формулы их получения.

1

2

3

1

Найти для каждого массива количество элементов, значение которых меньше среднего арифметического значения.

В каком массиве их больше.

c[i]=2.8+5.1*sin(i/2+0.5)

r[j]=6.6+4.7*sin(j/3-1.2)

s[l]=1.7-3.6*sin(l/4+0.2)

i=160, j=110, l=118

2

Найти сумму максимальных элементов, найденных для каждого из массивов.

d[i]=3.1*i-59.7*i-16.2

f[j]=5.4*j-82.1*j+29.6

p[k]=-6.9*k+31.2*k-10.5

d[18], f[40], p[22]

3

Найти для каждого массива разность между максимальным и минимальным значениями. В каком массиве она наиболь-

шая.

d[j]=1.5(j-3.2)-1.1*j

h[k]=2.7(k-0.8)-0.5*k

u[n]=3.3(n+2.5)-1.8*n

d[20], h[40], u[20]

4

Из исходных массивов сформировать массив d [3], элементы которого равны количеству отрицательных элементов в исходных массивах. Найти большее значение элемента и его номер в массиве d

a[i]=9.6i-15.3tan(i+1.5)

b[j]=11.2j+18.1tan(j+1.5)

c[k]=-8.7k+11.6tan(k-2.2)

a[20], b[50], c[16]

5

Найти для каждого массива разность между максимальным и средним арифметическим значениями.

a[i]=1.4i-2.9e

b[j]=-8.5j+1.6e

c[k]=11.3k-4.7e

a[20], b[10], c[14]

6

Определить сумму минимальных элементов, найденных для каждого массива и сумму максимальных элементов. Определить большее значение из модулей этих двух значений.

a[i]=3.8i-12.4i+5.1

b[j]=5.6j+11.5j-29.3

c[k]=18.1k-6.8k-9.9

a[8], b[16], c[12]

7

Найти для каждого массива отношение между максимальным и средним арифметическим значениями.

a[i]=1.2(i-2)*sin(i)

f[j]=5.9(j-5)*sin(j)

z[k]=12.3(k-4)*sin(k)

а[8], f[6],z[10]

8

Найти для каждого массива количество элементов, значение которых меньше среднего между минимальным элементом и максимальным.

b[i]=2.8-(i+4.5)

c[i]=-12.6+(i-2.2)

z[i]=-9.1-(i+5.7)

b[18], c[12],z[10]

9

Найти отношение между максимальным и минимальным значениями элементов массива.

a[i]=2.9(i-1.5)-3.1i

s[k]=11.7(k-3.1)-8.1k

b[j]-4.7(j+2.2)-5.6j

a[10], s[12], b[30],

10

Определить большее значение из трех значений сумм элементов, найденных для каждого массива.

d[i]=13.4i-exp(0.5i)

p[k]=8.7k-exp(-1.4k)

h[j]=-21.5j+exp(0.5j)

i=150, k=112, j=112

11

Сформировать массив Р[р123],где компоненты pi определяются как cумма положительных значений элементов одномерных массивов. Найти максимальный элемент этого массива.

b[i]=lg(1.5i)+tan(i-5.5)

c[l]=lg(8.5l)+tan(l+3.9)

d[j]=lg(2.9j)-tan(j+1.7)

i=160, j=180, l=130

12

Из исходных массивов сформировать массив d [3], элементы которого равны количеству положительных элементов в исходных массивах. Найти меньшее зна-чение элемента и его номер в массиве d.

p[i]=4.8sin(i-2.7)

z[k]=2.5sin(k+5.4)

x[j]=11.6sin(j-4.4)

i=17, k=15, j=18

13

Сформировать массив v(r1,r2,r3,r4), компоненты которого равны минимальным значениям элементов соответствующих массивов.

Найти сумму элементов этого массива.

g[i]=15.3i-16.9i+4.7

z[k]=8.8k-12.4k-5.9

x[m]=6.7m+2.5m-18.6

i=140, k=150, m=170

14

Определить для каждого массива разность cуммы положительных элементов и суммы модулей отрицательных элементов.

a[i]=2.7i-(i+4.1)

b[i]=12.4i-(i+21.6)

c[i]=-8.9i+(i-1.3)

а[18], b[20], c[10]

15

Определить отношения максимального и минимального элементов для указанных массивов. Найти z = а + b + с, где а, b, с - отношения максимального и минимального элементов

c[i]=tan(2.5i)+sin(1.8i)

d[i]=tan(3.2i)+sin(2.5i0

f[i]=tan(5.6i)+sin(3.7i)

c[18], d[20], f[10]

16

Определить, какой из массивов имеет большее количество элементов, которые принадлежат отрезку [a,b] Значения a и b задаются при вводе.

c(i)=17.2i*sin(i-1.1)

f(j)=5.9j*sin(j+2.4)

p(m)=12.3m*sin(m-2.9)

c[20], f[40], p[10]

17

Найти для каждого из массивов разницу между произведениями элементов с четными индексами и элементов с нечетными индексами. Определить в каком массиве она наибольшая:

x[i]=3.7sin(i-5)

z[k]=12.2sin(k-3.7)

y[j]=5.4sin(j+2.2)

x[28], z[12], y[10]

18

Определить в каком массиве наибольшее среднее арифметическое. Выстроить эти значения в порядке убывания.

u[k]=-2.5+1.8k+14.2* lg(k)

z[m)=1.6-0.5m+5.9*lg(m)

x[l]=1.3+3.5l-2.7*lg(l)

u[18], z[32], x[40]

19

Сформировать массив B(bl,b2,b3), компоненты которого равны минимальным элементам соответствующих массивов. Определить большее значение из массива B.

r[i]=1.5tan(5.7i)

p[j]=4.3tan(2.9j)

q[l]=11.6tan(8.2l)

r[42], p[20], q[16]

20

Определить для каждого массива значение среднего арифметического. Найти сумму этих значений и большее из них.

c[i]=17.2i*sin(i-1.1)

f[j]=5.9j*sin(j+2.4)

p[m]=12.3m*sin(m-2.9)

c[10], f[20], p[30]

21

Определить разности q между максимальным и минимальным значениями элементов массивов. В каком из массивов она наименьшая.

d [j]=1.5(j-3.2)-1.1*j

h[k]=2.7(k-0.8)-0.5*k

u[n]=3.3(n+2.5)-1.8*n

d[15], h[10], u[20]

22

Сформировать массив R, компоненты которого являються минимальными по абсолютному значению элементами соответствующих массивов. Упорядочить массив R по возростанию.

g[i]=15.3i-16.9i2+4.7

z[k]=8.8k-12.4k2-5.9

x[m]=6.7m+2.5m2-18.6

g[12], z[20], x[15]

23

Найти сумму минимальных элементов, найденных для каждого из массивов. Определить в каком массиве он наибольший.

d[i]=3.1*i-59.7*i-16.2

f[j]=5.4*j-82.1*j+29.6

p[k]=-6.9*k+31.2*k-10.5

d[18], f[40], p[22]

24

Определить для каждого массива значение максимального элемента. Найти сумму этих значений и большее из них.

c[i]=17.2i*sin(i-1.1)

f[j]=5.9j*sin(j+2.4)

p[m]=12.3m*sin(m-2.9)

c[12], f[24], p[15]

25

Сформировать массив X(xl,x2,x3), компоненты которого равны максимальным элементам соответствующих массивов. Упорядочить массив X, определить большее значение из массива X.

r[i]=1.5tan(5.7i)

p[j]=4.3tan(2.9j)

q[l]=11.6tan(8.2l)

r[42], p[20], q[16]

26

Определить разности q между максимальным и минимальным значениями элементов массивов. Упорядочить их и определить в каком из массивов она наибольшая.

c [j]=1.5(j-3.2)-1.1*j

a[k]=2.7(k-0.8)-0.5*k

y[n]=3.3(n+2.5)-1.8*n

c[15], a[10], y[20]

27

Из исходных массивов сформировать массив r [3], элементы которого равны количеству положительных элементов в исходных массивах. Найти большее значение элемента и его номер в массиве d

a[i]=9.6i-15.3cos(i+1.5)

b[j]=11.2j+18.1cos(j+1.5)

c[k]=-8.7k+11.6 cos(k-2.2)

a[20], b[50], c[16]

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

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

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

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

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

  5. Как выглядит вызов функции в указанных выше случаях?

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

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

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