Особенности работы функций Если функция возвращает значение через return, то ее можно использовать в выражениях и операторе вывода, например n=a+b+sum(x,y)*5; printf(“%d”, sum(x,y)); Не следует возвращать из функции адреса локальных переменных, та

Слайд 2

Двумерные массивы. Ввод и вывод void vv_matr(int a[][10], int *n, int

Двумерные массивы. Ввод и вывод

void vv_matr(int a[][10], int *n, int *m)

//или int (*a)[10]
{ //передаем массив указателей на строки, n и m – по адресу
int i, j;
printf("n = "); scanf("%d", n);
printf("m = "); scanf("%d", m);
printf("Введите матрицу размера %d на %d \n“,*n,*m);
for(i=0; i<*n; i++)
for(j=0; j<*m; j++)
scanf("%d", a[i]+j);
}
//передаем n и m по значению
void viv_matr(int a[][10], int n, int m) {int i, j;
for(i=0; i {
for(j=0; j printf("%4d", a[i][j]);
printf("\n");
}
}

int main()
{int a[10][10], n, m;
vv_matr(a,&n,&m);
viv_matr(a,n,m);
return 0;
}

Слайд 3

Задача 1.Вычислить максимальный среди отрицательных элементов целочисленной матрицы А, не встречающихся

Задача 1.Вычислить максимальный среди отрицательных элементов целочисленной матрицы А, не встречающихся

в массиве В.

Ввод и вывод матрицы, ввод массива и вычисления оформить в виде отдельных функций.
Формальные параметры функции maxot() (для вычислений):
Вход:
n – количество строк в матрице А,
m – количество столбцов матрицы А,
a – указатель на массив указателей на строки матрицы А,
k – количество элементов в массиве В,
b – указатель на первый элемент массива В,
Выход:
flag – признак существования max (=0, если max не найден ).
Значение, возвращаемое функцией maxot() – искомый элемент.

Слайд 4

#include “iostream” #include “stdio.h” #include “limits.h” using namespace std; void vv_matr(int

#include “iostream”
#include “stdio.h”
#include “limits.h”
using namespace std;
void vv_matr(int a[][10], int *n, int

*m);
void viv_matr(int a[][10], int n, int m);
int vv_mas(int b[]);
int maxot(int n, int m, int a[][10], int k, int b[], int *flag)
{
int i,j,t,max = - LONG_MAX;
*flag = 0;
Слайд 5

for (i = 0; i for (j = 0; j if

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

j < m; j++)
if (a[i][j] < 0)
{
for (t = 0; t < k && a[i][j] != b[t]; t++);
if (t == k)
if (a[i][j] >= max)
{
max = a[i][j];
*flag = 1;
}
}
return max;
}
Слайд 6

int main() { setlocale(LC_ALL,”RUS”); int n,m,a[10][10],k,b[10],max,flag; vv_matr(a, &n, &m); viv_matr(a, n,

int main()
{
setlocale(LC_ALL,”RUS”);
int n,m,a[10][10],k,b[10],max,flag;
vv_matr(a, &n, &m);
viv_matr(a, n, m);
k =

vv_mas(b);
max = maxot(n,m,a, k, b, &flag) ;
if (flag)
printf(“max = %7d”, max);
else
printf(“нет max”);
return 0;
}
/* здесь должны располагаться функции vv_matr, viv_matr, vv_mas*/
Слайд 7

/* в результате выполнения проверочной работы должна получиться примерно такая функция*/

/* в результате выполнения проверочной работы должна получиться примерно такая функция*/
int

vv_mas(int b[])
{int nb, i;
printf(“ Введите длину массива:”);
scanf(“%d”, &nb);
printf(“ Введите массив из %d элементов:\n”);
for(i=0; i scanf(“%d”, &b[i]);
return nb;
}
Слайд 8

Задача 3. Определить адреса двух первых четных элементов массива А с

Задача 3. Определить адреса двух первых четных элементов массива А с

использованием функции

#include “stdio.h”
#include “iostream”
void adress(int a[ ], int na,int **u1,int **u2)
{
int *ua;
*u1=*u2=NULL;
for(ua=a;uaif (*ua %2==0)
{ if (*u1==NULL)
*u1=ua;
else *u2=ua;
}
}