Методичка_2013_14_весна(1курс) / Лаб_ раб_2_ф_мас
.doc
ЛАБОРАТОРНАЯ РАБОТА №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
|
Сформировать массив Р[р1,р2,р3],где компоненты 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 Контрольные вопросы
-
Какие существуют варианты описание функции, если аргументом функции является одномерный массив?
-
Как описать массив с определенным количеством элементов?
-
Как описать массив с неопределенным количеством элементов?
-
Как обозначаются элементы массива внутри функции?
-
Как выглядит вызов функции в указанных выше случаях?
-
Как описать массив с помощью указателя на начало массива?
-
Как можно обозначать элементы массива внутри функции, если массив описан с помощью указателя на начало массива?
-
Существуют ли варианты вызова функции, если массив описан с помощью указателя на начало массива?