Слайд 1Глава 3 Обработка массивов
Массив – это упорядоченная совокупность однотипных данных.
Каждому элементу массива соответствует один или несколько индексов, определяющих положение
элемента в массиве.
Объявление массива:
<Тип элемента> <Имя>[<Размер1>] [<Размер2>] ...[=
{<Список значений >}];
Количество индексов задает размерность массива.
Тип индекса – порядковый – определяет доступ к элементу.
Нумерация индексов ВСЕГДА начинается с 0.
Размер – определяет количество элементов по данному индексу.
Тип элемента – любой кроме файла, в том числе, другой массив.
Массив в памяти не может занимать более 2 Гб.
Слайд 23.1 Одномерные массивы
Одномерными называются массивы, в котором положение элемента в
массиве определяется одним индексом.
Объявление одномерных массивов
Примеры определения одномерных массивов;
int a[10];
- массив на 10 целых чисел;// индекс меняется 0 - 9
float mas[20] – массив на 20 вещественных чисел;
char sim[8] – массив на 8 символов;
double massiv[30] – массив на 30 вещественных чисел двойной точности;
unsigned int koord[10] – массив целых беззнаковых чисел .
Индекс меняется от 0 до величины, на 1 меньшей указанной в размере
Инициализация массива при объявлении
int a[5]={0,-36,78,3789,50};
float b[10]={0,-3.6,7.8,3.789,5.0,6.1,0,-6.5,8.9,3.0};
long double c[4]={7.89L,6.98L,0.5L,56.8L};
Слайд 3Операции над одномерными массивами
1. Доступ к элементу массива:
Пример:
int a[5],l;
...
a[0]=51; {прямой доступ}
...
l=3;
a[l]:=3; {косвенный доступ: значения индексов
находятся в переменных}
Слайд 4Косвенный доступ к элементам массива
Косвенный доступ позволяет реализовать последовательную обработку
элементов массивов:
for(i=1;i=0;i--) a[i]=i*i;
Прямой доступ
Косвенный доступ
Слайд 5Операции над массивами (2)
2. Ввод массивов.
Оуществляется поэлементно:
Пример 1. Ввод
элементов одномерного массива
int a[5]; //массив на 5 целых чисел
...
for(i=0;i
printf(“\n”); // вводит последнее Enter и очищает буфер
Значения вводятся через пробел, Tab(→) или Enter(↵):
а) 2 -6 8 56 34 ↵
б) 2 ↵
-6 → 8 ↵
56 ↵
34 ↵
i=0,4,1
a[i]
Слайд 6Операции над массивами (3)
3. Вывод массива
Также осуществляется поэлементно.
int b[7]={-3,5,8,-45,0,-1,8};
...
for(j=0;j
a0 a1 a2 a3 a4 a5 a6}
printf(“\n”); {переходим на следующую строку}
...
На экране:
∪∪-3∪∪∪5∪∪∪8∪-45∪∪∪0∪∪-1∪∪∪8
i=0,6,1
a[i]
0
6
Слайд 7Пример программы с вводом выводом
// Ex3_1
#include "stdafx.h"
#include
int a[8],b[8];
int i,j,n;
int
main(int argc, char* argv[])
{
puts("Input n
for(i=0;i
printf("\n");
puts("Inputed Massiv");
for(i=0;i printf("\n");
Написать программу формирования массива b из отрицательных элементов массива a
Слайд 8Пример программы с вводом выводом(2)
j=-1;
for(i=0;i
b[j]=a[i];
}
if (j==-1) puts("Massiv b empty");
else
{
puts("New Massiv");
for(i=0;i<=j;i++)printf("%4d",b[i]);
printf("\n");
}
return 0;
}
Слайд 93.2 Основные приемы программирования обработки одномерных массивов
Все задачи по
работе с массивами можно разбить на следующие группы:
1. Однотипная обработка
массивов.
2. Переформирование массивов.
3. Одновременная обработка нескольких массивов и/или подмассивов.
4. Поисковые задачи.
3.2.1 Однотипная обработка массивов
a) Поэлементная (нахождение суммы элементов, произведения элементов, среднего арифметического, среднего геометрического, подсчет количества элементов, отвечающих определенному условию или обладающих некоторыми признаками, а также их суммы, произведения и т.д. ).
Пример. Написать программу определения максимального элемента массива и его положения в массиве.
Слайд 10
Определить максимальный элемент массива и его номер
45
34
56
2
-3
А
45
0
1
АMAX
IMAX
i
2
3
56
2
4
{
}
Слайд 11Программа определения максимального элемента массива и его номера
//Ex3_2;
#include “stdafx.h”
#include
int main(int argc, char* argv[])
{float a[5], amax; int i,
imax;
puts(“Input 5 values:”);
for(i=0;i<5;i++)scanf(“%f “,&a[i]);printf(“\n”);
amax=a[0];
imax=0;
for(i=1;i<5;i++)
if(a[i]>amax)
{ amax=a[i]; imax=i;}
puts(“Values:“);
for(i=0;i<5;i++)printf(“%7.2f ”,a[i]);printf(“\n”);
printf(“Max = %7.2f number = %5d\n”,amax, imax);
return 0; }
Слайд 12Однотипная обработка массивов(2)
b) Выборочная (задачи по формулировке сходные с задачами
предыдущего типа, но операция выполняется не надо всеми элементами массива,
а только теми, которые имеют вполне определенное значение индексов).
Особенностью таких задач является наличие определенного закона изменения индексов рассматриваемых элементов.
Пример .
Написать программу, определяющую количество отрицательных элементов среди элементов одномерного массива целых чисел, стоящих на четных местах.
45
-34
12
-25
16
10
11
int A[7]
0 1 2 3 4 5 6
1.Счетный цикл
а) i = 1 – n/2 с шагом 1
Nel=i*2-1
б) i = 1 – n с шагом 2
Nel=i
2. Цикл с постусловием
Слайд 13Программа определения количества отрицательных элементов, стоящих на четных местах
// Ex3_3.cpp
#include "stdafx.h"
#include
int a[7];
int i,kol,n;
int main(int argc, char* argv[])
{ puts("Input
n<=7");
scanf("%d",&n);
printf("input %3d elementov massiva\n",n);
for(i=0;i
printf("\n");
puts("Inputed Massiv");
for(i=0;i printf("\n");
Начало
Ввод
n
Ввод
a(n)
Вывод
a(n)
1
Слайд 14Продолжение программы
kol=0;
for(i=1;i
return 0;
}
1
a[i]
Слайд 153.2.2 Переформирование массива.
Переформирование массива без изменения его размеров (перестановки элементов
различного характера и сортировки).
Пример. Написать программу упорядочивания массива по возрастанию
его элементов.
int A[8]
20
-10
15
-4
6
8
10
19
-10
-4
6
8
10
15
19
20
0
1
2
3
4
5
6
7
Находим минимальный элемент и его номер
2. Меняем его местами с 0
3. В оставшейся чисти массива находим минимальный элемент
4. Меняем его с 1
Далее действие 3 и 4 повторяем, пока не закончится массив
Слайд 16Переформирование массива (2)
// Ex3_4.cpp
#include "stdafx.h"
#include
int a[8];
int i,j,imin,min,n;
int main(int
argc, char* argv[])
{puts("Input n
printf("\n");
puts("Inputed Massiv");
for(i=0;i printf("\n");
Слайд 17Переформирование массивов (3)
for(i=0;i
for(j=i+1;j
}
puts("Sorted Massiv");
for(i=0;i
printf("\n");
return 0;
}
j=i+1,n-1,1
i=0,n-2,1
min=a[i]
imin=i
min=a[j]
imin=j
a[j]a[imin]=a[I]
a[i]=min
да
нет
Слайд 18Переформирование массивов (4)
b) Переформирование массива с изменением его размеров (вычеркивание
и вставка элементов, отвечающих определенным условиям или обладающих заданными признаками).
Пример. Дан одномерный массив. Вычеркнуть из него все отрицательные элементы. Есть 2 варианта решения.
1.
-3
-5
10
-5
10
6
6
-1
-1
2
2
0
10
6
-1
2
0
0
10
6
2
0
0
0
int B[6]
i=0
ib[i]<0
j=i,n-2,1
b[j]=b[j+1]
i=i+1
b[n-1]=0
да
да
нет
нет
Слайд 19Переформирование массивов (5)
2.
-3
-5
10
6
-1
2
6
i=0 - 5
10
0
2
j= -1
i=0
i=1
i=2
i=3
i=4
i=5
0
0
J=j+1=0
J=j+1=1
J=j+1=2
j= 3 -5
n=6
n=3
j=
-1
i=0,n-1,1
j= j+1
b[i]>=0
b[j]=b[i]
b[i]= 0
i=j+1,n-1,1
n=j+1
да
нет
Ex3_5
#include "stdafx.h"
#include
int b[6];
int i,j,n;
int main(int argc, char*
argv[])
{puts("Input n<=6");
scanf("%d",&n);
printf("input %3d elem. massiva\n",n);
for(i=0;i printf("\n");
Слайд 20Переформирование массивов (6)
puts("Inputed Massiv");
for(i=0;i
неотрицательных элементов
if (b[i]>=0)
{ j=j+1;
b[j]=b[i];
}
for(i=j+1;i
оставшихся элементов
b[i]=0;
n=j+1; // новый размер массива
puts("New Massiv");
for(i=0;i printf("\n");
return 0;
}
Слайд 213.2.3 Одновременная обработка массивов
Синхронная обработка нескольких массивов или подмассивов
Пример. Дан массив целых чисел, содержащий четное количество элементов. Определить,
является ли вторая половина массива, копией первой.
1
8
3
9
1
8
9
3
int s[8]
0
1
2
3
4
5
6
7
i= 0 - 3
j= 4 - 7
j=i+4
5
6
4
2
6
4
2
key=true
key=true
key=false
key=1
i=0
key&&iS[i]<>S[i+4]
key=0
i=i+1
да
нет
да
нет
Слайд 22Синхронная обработка нескольких массивов или подмассивов
//Ex3_6
#include "stdafx.h"
#include
int main(int argc,
char* argv[])
{int s[8];
int i,n,key;
puts("Input kol.elementov chetnoe n
printf("Input %4d elem \n",n);
for(i=0;i
scanf("%d",&s[i]);
puts("Inputed Massiv");
for(i=0;i printf("%3d",s[i]);
printf("\n");
начало
Ввод n
Ввод S(n)
S(n)
1
Слайд 23Продолжение программы
key=1;
for(i=0;i
ravny");
return 0;
}
1
i=0,n/2-1,1
S[i]S[i+4]
key=true
key=false
да
нет
key
да
нет
Является
Не является
конец
Слайд 24Одновременная обработка массивов
б) Асинхронная обработка массивов
Пример. Дан массив А вещественных
чисел. Переписать в массив С все отрицательные элементы массива А.
float
A[5],C[5]
2.4
-6.4
-2.0
-1.9
7.4
i=0
j=-1
i=1
i=2
i=3
j=j+1=0
j=j+1=1
J=j+1=2
i=4
-6.4
-2.0
-1.9
Слайд 25Асинхронная обработка массивов(2)
// Ex3_7.cpp
#include "stdafx.h"
#include
int main(int argc, char*
argv[])
{ float A[5],C[5];
int i,j;
printf("Input 5 elem \n");
for(i=0;i
puts("Inputed Massiv A");
for(i=0;i<5;i++)
printf("%5.2f",A[i]);
printf("\n");
Слайд 26Асинхронная обработка массивов(3)
j=-1;
for(i=0;i
C[j]=A[i];}
puts("New Massiv C");
for(i=0;i
0;
}
j=-1
i=0,n-1,1
A[i]<0
C[j]=A[i]
j=j+1
C(j)
да
нет
Слайд 273.2.4 Поисковые задачи
Пример:
Дан массив А вещественных чисел. Определить первый отрицательный
элемент массива и его номер.
float A[6] ={2.6,4.7,-5.8,-4.0,7.1,-5.0}
2.6
4.7
-5.8
-4.7
7.1
-5.0
i=0
i=1
i=2
key=0
iotr=2
potr=-5.6
iotr=i
key=1
i=0
(key=0) и (i
Слайд 28Поисковые задачи (2)
// Ex3_8.cpp
#include "stdafx.h"
#include
int main(int argc, char* argv[])
{
float potr,A[6]={2.6,4.7,-5.8,-4.0,7.1,-5.0};
int i,iotr,key;
puts("Inputed Massiv A");
for(i=0;i
i=0;
key=0;
while((key==0)&&(i<6))
if(A[i]<0)
{key=1;potr=A[i];iotr=i;}
else i++;
printf("potr= %6.2f iotr= %4d\n",potr,iotr);
return 0;
}
Слайд 293.3 Обработка матриц
Двумерными называются массивы, имеющие два индекса. По аналогии
с математикой, иногда такие массивы называют матрицами.
Для простоты изложения
в дальнейшем будем придерживаться именно этой терминологии.
Описание матриц
int a[4][5] – матрица целого типа из 4 строк и 5 столбцов
индексы меняются первый от 0 до 3, второй от 0 до 4
float matr[10][20] – матрица вещественного типа из 10 строк и 20
столбцов
double x[10][10] - матрица вещественного типа с двойной
точностью из 10 строк и 10 столбцов
В памяти матрицы располагаются по строкам. Быстрее изменяется второй индекс
Слайд 30Расположение матрицы в памяти
Инициализация матриц при объявлении
int A[4][3]
12
45
11
67
21
56
-13
0
90
-54
-87
44
i=0
i=1
i=2
i=3
0
2
1
0
1
2
2
2
0
0
1
1
j=0 -
2
short x[3][4] ={{9,6,-56,0}, {10,3,-4,78}, {-6,8,45,7}};
int A[4][3]={{12,45,11},{67,21,56},{90,0,-13},{44,-87,-54}};
Слайд 31Операции над матрицами
1. Доступ к элементам матрицы
Пример:
int a[5][4],i,j;
...
a[0][1]=5.1;
{прямой доступ}
...
i=3;j=3
a[i][j]:=23; {косвенный доступ: значения индексов
находятся в переменных}
Слайд 32Операции над матрицами (2)
2. Ввод матриц
Оуществляется поэлементно, по строкам:
Пример 1.
Ввод элементов матрицы
const int n=3;
const int m=4;
float A[n][m];
printf(“Input %3d
strok po %3d elem.\n”);
for(int i=0;i
for(int j=0;j scanf(“%f”,&A[i][j]);
i=0,n-1,1
j=0,m-1,1
Ввод A[i][j]
Значения вводятся через пробел, Tab(->) или Enter(↵ ):
2 -6 8 23↵
56 9 0 -7↵
6 12 -56 -8↵
Слайд 33Операции над матрицами (3)
3. Вывод матриц
Осуществляется поэлементно, по строкам или
по столбцам, в зависимости от требования программы
Пример 1. Вывод элементов
матрицы
....
puts(“ MASSIV”);
for(int i=0;i
for(int j=0;j printf(“%7.2f”,A[i][j]);
printf(“\n”);}
Информация на экране:
∪∪∪2.00∪∪−6.00∪∪∪8.00 ∪∪23.00
∪∪∪6.00∪∪12.00∪−56.00∪∪−8.00
∪∪56.00∪∪∪9.00∪∪∪0.00∪∪−7.00
i=0,n-1,1
j=0,m-1,1
A[i,][j]
Слайд 343.3.1 Особенности программирования обработки матриц
При обработке матриц используются вложенные циклы.
Обработка
матриц может производиться как по строкам, так и по столбцам.
Так
как матрица расположена в памяти по строкам, второй индекс меняется быстрее. Поэтому при обработке по строкам, внешний цикл индексирует строки, а внутренний столбцы.
for(i=0;i for(j=0;j {…обработка элемента A[ i ] [ j ]...}
4. При необходимости обойти матрицу по столбцам, достаточно изменить последовательность выполнения циклов.
for(j=0;j for(i=0;i {…обработка элемента A[ i ] [ j ]..}
В этих примерах i – номер элемента в строке
j - номер элемента в столбце
Слайд 35Поэлементная обработка матрицы
Пример.
Дана матрица вещественного типа. Определить максимальный элемент матрицы
и его координаты в матрице.
float P[3][5];
2.45
17.5
-12.4
20.25
-0.45
45.0
-55.1
12.4
21.5
72.0
2.45
2.45
2.45
2.45
2.45
0
1
2
0
1
2
3
4
pmax=-1*e+10
pmax=2.45
pmax=17.5
imax=-1
jmax=-1
imax=0
pmax=20.25
imax=1
pmax=-1e+10
imax=-1
jmax=-1
i=0,4,1
i=0,2,1
P[i][j]>pmax
pmax=P[i][j]
imax=i
jmax=j
да
нет
jmax=0
jmax=1
jmax=3
pmax=45.0
jmax=0
jmax=4
pmax=72.0
Слайд 36Поэлементная обработка матрицы (2)
// Ex3_10.cpp
#include "stdafx.h"
#include
#include
int main(int argc,
char* argv[])
{ float P[3][5],pmax;
int i,j,imax,jmax;
for(i=0;i
of %2d string:\n",i);
for (j=0;j<5;j++) scanf("%f",&P[i][j]);
}
puts(" MATRICA ");
for(i=0;i<3;i++)
{ for (j=0;j<5;j++)
printf("%7.2f ",P[i][j]);
printf("\n");
}
pmax=-1e+6;
imax=-1;
jmax=-1;
for(i=0;i<3;i++)
for(j=0;j<5;j++)
if (P[i][j]>pmax)
{ pmax=P[i][j];
imax=i;
jmax=j;
}
printf("Max Eem. = %7.2f",pmax);
printf(" imax= %4d”,imax+1);
printf(“ jmax=%4d\n",jmax+1);
getch();
return 0;
}
Слайд 37 Поэлементная обработка матрицы (2)
Пример.
Дана вещественная матрица. Определить
номер строки, содержащей самую большую сумму элементов.
2.45
17.5
-2.4
20.25
-0.45
45.0
-55.1
12.4
21.5
72.0
2.45
2.45
2.45
2.45
2.45
0
1
2
0
1
2
3
4
float s[3][5] ;
Sumt=0
im=-1
Sumt=2.45
Sumt=19.95
Sumt=17.55
Sumt=37.8
Sumt=37.35
summ=-1e+10
Summ=37.35
Summ=95.8
Sumt=0
Sumt=45.0
Sumt=-10.1
Sumt=2.3
Sumt=23.8
Sumt=95.8
Sumt=0
Sumt=2.45
Sumt=4.9
Sumt=7.35
Sumt=9.8
Sumt=12.25
im=0
im=1
im=i
im=-1
Sumt=0
i=0,2,1
i=0,4,1
Summ=Sumt
Sumt+=s[i][j]
Sumt>Summ
Summ=-1e+10
да
нет
Summ,im
Слайд 38Поэлементная обработка матрицы(3)
// Ex3_11.cpp
#include "stdafx.h"
#include
#include
int main(int argc, char*
argv[])
{ float s[3][5],Summ,Sumt;
int i,j,im;
for(i=0;i
string:\n",i+1);
for (j=0;j<5;j++) scanf("%f",&s[i][j]);
}
puts(" MATRICA ");
for(i=0;i<3;i++)
{ for (j=0;j<5;j++)
printf("%7.2f ",s[i][j]);
printf("\n");
}
Summ=-1e+6;
im=-1;
for(i=0;i<3;i++)
{ Sumt=0;
for(j=0;j<5;j++)
Sumt+=s[i][j];
if (Sumt>Summ)
{ Summ=Sumt;
im=i;
}
}
printf("Max Sum Elem. =“); printf(“%7.2f",Summ);
printf(" im= %4d \n",im+1);
getch();
return 0;
}
Слайд 39Выборочная обработка матрицы
Пример. Дана целочисленная матрица. Определить среди четных строк,
строку, имеющую наибольшее среднее арифметическое ее элементов.
int C[4][3]
2
11
-41
-12
6
21
17
-8
32
43
-31
6
0
1
3
0
2
1
2
Sr=0
Srm=-1e+6
im=-1
Sr=-12
Sr=9
Sr=15
Sr=5
Srm=5
im=1
Sr=0
Sr=43
Sr=12
Sr=18
Sr=6
Srm=6
im=3
i=1,3,2
Srm=-1e+6
im=-1
j=0,3,1
Sr=0
Sr+=C[i][j]
Sr=Sr/3
Sr>Srm
Srm=Sr
im=i
Srm=-1e+6
im=-1
i=1
iSrm
Srm=Sr
im=i
i=i+2
да
да
нет
нет
да
нет
a)
b)
Слайд 40Выборочная обработка матрицы(2)
// Ex3_12.cpp
#include "stdafx.h"
#include
#include
int main(int argc,
char* argv[])
{ int C[4][3]; float Srm,Sr;
int i,j,im;
for(i=0;i
printf(“ %2d string:\n",i+1);
for (j=0;j<3;j++) scanf("%d",&C[i][j]);
}
puts(" MATRICA ");
for(i=0;i<4;i++)
{ for (j=0;j<3;j++)
printf("%4d ",C[i][j]);
printf("\n");
}
Srm=-1e+6;
im=-1;
for(i=1;i<4;i=i+2)
{ Sr=0;
for(j=0;j<3;j++)
Sr+=C[i][j];
Sr=Sr/3;
if (Sr>Srm)
{ Srm=Sr;
im=i;
}
}
printf("Max SR Sum Elem.= ");
printf(" %7.3f",Srm);
printf(" im= %4d \n",im+1);
getch();
return 0;
}
Слайд 41Переформирование матрицы
Пример. Дана целочисленная матрица. Отсортировать ее по возрастанию элементов
последнего столбца.
int b[3][4]
10
23
11
34
4
6
22
12
15
11
9
5
0
1
2
3
0
1
2
23
6
22
12
34
11
10
4
10
23
11
34
11
9
5
15
15
9
11
5
4
6
22
12
key=1
i=0
ib[k+1][m-1]
j=0,m-1,1
b[k][m-1=b[k+1][m-1]
b[k+1][m-1=c
c=b[k][m-1]
key=1
да
нет
да
нет
i=i+1
Слайд 42Переформирование матрицы(2)
// Ex3_13.cpp
#include "stdafx.h"
#include
#include
#include
#include
int main(int
argc, char* argv[])
{int n,mat[10][10],i,j,m,k,key,b;
srand( (unsigned)time( NULL ));
printf(" Inputed size of
massiv n,m<=10 \n");
scanf("%d %d",&n,&m);
for (i=0;i
for (j=0;j mat[i][j]=rand()/1000-rand()/1000;
printf("\n Inputed Massiv \n");
for(i=0;i for(j=0;j printf("%4d%c",mat[i][j],(j==m-1)?'\n':' ');
key=1;
i=0;
while((i{key=0;
for(k=0;k if(mat[k][m-1]>mat[k+1][m-1])
{ for(j=0;j { b=mat[k][j];
mat[k][j]=mat[k+1][j];
mat[k+1][j]=b;}
key=1;
}
}
printf("\n Sorted massiv \n");
for(i=0;i for(j=0;jprintf("%4d%c",mat[i][j],(j==m-1)?'\n':' ');
getch();
return 0;}
Слайд 43
Одновременная обработка массивов и подмассивов.
Сумма элементов строк матрицы
А
S
i
j
Подсчет суммы
элементов i-ой
строки
{
}
Дана матрица А(5,5) целого типа. Определить сумму элементов
каждой строки и записать ее в новый массив S.
Слайд 44Программа определения суммы строк марицы (Ex3_9)
#include "stdafx.h"
#include
#include
const int
N=5;
int main(int argc, char* argv[])
{ int a[N][N],i,j,s[N];
for(i=0;
i { printf("Input numbers of %2d string:\n",i);
for (j=0; j }
puts(" MATRICA SUMMA ");
for(i=0;i for (j=0,s[i]=0;j for(i=0; i { for (j=0; j printf("%10d\n",s[i]);
}
getch();
return 0; }
Слайд 45Обработка матрицы по частям
Кроме задач, по приемам похожих на обработку
одномерных массивов, есть большая группа задач, связанных с различными вариантами
обхода матриц, и задач обработки разных групп элементов.
int c[5][5]
i=j
i=1 – 4
j=0 – i-1
i=0 – 4
j=i+1- 4
i+j=4
j=4-i
i=1 -4
j=4-i+1 - 4
i= 0 – 3
j=0 – 4-i
Слайд 46Пример обработки элементов матрицы, лежащих в определенной области
Пример. Дана целочисленная
матрица F(10,10). Определить сумму отрицательных элементов матрицы и их количество,
среди элементов, лежащих выше главной диагонали.
int F[10][10] n=5
i=0
i=1
i=2
i=3
j=1
j=2
j=3
j=4
j=2
j=3
j=4
j=3
j=4
j=4
kol=0
sum=0
i=1,n-2,1
j=i+1,n-1,1
F[i][j]<0
да
да
нет
kol++
sum=sum+ F[i][j]
Слайд 47Пример программы
// Ex3_14.cpp
#include "stdafx.h"
#include
#include
#include
#include
int main(int
argc, char* argv[])
{int n,mat[10][10],i,j,sum,kol;
srand( (unsigned)time( NULL ));
printf(" Inputed size
of massiv n<=10 \n");
scanf("%d",&n);
for (i=0;i
for (j=0;j mat[i][j]=rand()/1000-rand()/1000;
printf("\n Inputed Massiv \n");
for(i=0;i for(j=0;j printf("%4d%c",mat[i][j],(j==n-1)?'\n':' ');
sum=0;
kol=0;
for(i=0;i for(j=i+1;j if(mat[i][j]<0)
{ sum=sum+mat[i][j];
kol=kol+1;
}
printf("Summa “);
printf(“%7d otricatelnyx”,kol); printf(“elementov");
printf(" = %8d\n",sum);
getch();
return 0;
}