ПЕРЕДАЧА ОДНОМЕРНОГО МАССИВА В ФУНКЦИЮ

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

 

Краткие теоретические сведения

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

тип_результата имя_функции(тип_данных *, int);

При вызове функции параметры необходимо передавать следующим образом:

- первый параметр – это имя массива;

- второй параметр – это размер массива.

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

#include <stdio.h>

#include <conio.h>

void show_array (int v[], int b)

{

int i;

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

printf (“%d\n”, v[i]);

}

int Min (int v[], int b)

{

int i, m=v[0];

for (i=1; i<b; i++)

if (v[i]<m) m=v[i];

return m;

}

void main()

{ const n=10;

int i, min, a[n] ;

puts( “Введите массив “);

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

scanf (“%d”, &a[i]);

show_array(a, n); // Вызов 1-ой функции

min = Min (a, n); // Вызов 2-ой функции

printf (“min= %d\n”, min );

getch();

}

Порядок выполнения работы

1. Изучить теоретические сведения.

2. Выполнить задание.

Задания для выполнения

Выполнить задания из лабораторной работы № 13 часть 2, используя функции для обработки массивов.

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

ПЕРЕДАЧА МНОГОМЕРНОГО МАССИВА В ФУНКЦИЮ

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

Краткие теоретические сведения

Если размеры известны на этапе компиляции, то

void f1(int m[3][4]) {

int i, j;

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

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

. . . // Обработка массива

}

Двухмерный массив, как и одномерный, также передается как указатель, а указанные размеры используются просто для удобства записи. При этом первый размер массива не используется при поиске положения элемента массива в ОП, поэтому передать массив можно так:

void main(void)

{ int mas [3][3]={{1,2,3}, {4,5,6}};

fun (mas);

}

void fun( int m[ ][3]) {

}

Если же размеры двухмерного массива, например, вводятся с клавиатуры (неизвестны на этапе компиляции), то их значения следует передавать через дополнительные параметры, например:

void fun( int**, int, int);

void main()

{ int **mas, n, m;

...

fun (mas, n, m);

}

void fun( int **m, int n, int m) {

. . . // Обработка массива

}

 

Пример.В целочисленном двухмерном массиве (матрице) размером N´М найти сумму четных элементов и их количество. Ввод исходных данных и вывод результатов выполнить в основной функции. Решение поставленной задачи оформить в функции пользователя.

Текст программы может иметь следующий вид:

#include <stdio.h>

#include <conio.h>

// Описание прототипа функции

int Fun_Sum_Kol(int, int, int**, int*);

void main()

{ const n=3, m=4;

int **a, i, j, sum, kol;

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

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

{ printf ("\n a[%d][%d]=”, i+1, j+1);

scanf(“%d”,&a[i][j]);

}

puts(" Matrix A:");

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

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

printf( "%d\t", a[i][j]);

printf(“\n”);

}

// Обращение к функции с указанием фактических аргументов

sum = Fun_Sum_Kol(n, m, a, &kol);

printf("\n Kol-vo = %d \t Summa = %d\n", kol, sum);

getch();

}

/* Реализация (определение) описанной выше функции, в заголовке которой указаны формальные параметры, идентификаторы которых обрабатываются в ее коде */

int Fun_Sum_Kol(int a, int b, int **x, int *k)

{

int i, j, s = 0;

*k = 0;

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

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

if(x[i][j] % 2 ==0){

(*k)++; // Скобки обязательны

s += x[i][j];

}

return s;

}

 

Обратите внимание на то, что из функции мы должны получить два скалярных результата – посчитанные сумму и количество четных чисел. С помощью оператора return мы возвращаем первое значение (сумму), а второе значение мы передаем в точку вызова с помощью указателя (адреса): при обращении к функции в качестве четвертого параметра передаем адрес &kol, а в функции используем «значение, находящееся по указанному адресу» *k (* – операция разадресации).

Порядок выполнения работы

1. Изучить теоретические сведения.

2. Выполнить задание.

Задания для выполнения

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

1. Найти сумму элементов, расположенных на главной диагонали.

2. Найти произведение элементов, расположенных на главной диагонали.

3. Найти максимальный элемент и поменять его с первым элементом.

4. Найти минимальный элемент и поменять его с первым элементом.

5. Найти максимальный элемент и поменять его с последним элементом.

6. Найти минимальный элемент и поменять его с последним элементом.

7. Найти количество отрицательных и положительных элементов массива.

8. Найти количество 0-й и 1-ц в массиве, а также сумму единиц.

9. Найти число элементов массива, больших T (вводится с клавиатуры) и просуммировать эти элементы.

10. Найти число элементов массива > T и их произведение.

11. Найти число элементов массива < T и их сумму.

12. Найти число элементов массива < T и перемножить эти элементы.

13. Найти число элементов массива = T и сложить эти элементы.

14. Найти число элементов массива = T и перемножить эти элементы.

15. Найти максимальный элемент среди лежащих ниже главной диагонали.

 

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