/*Дан массив X(N,M) .Найти среднее арифметическое тех строк массива, первый элемент которых положительный*/#include <iostream>#include <time.h>#define M 5#define N 5using namespace std; void printArray(int *mas, int n,int m)//инициализация и вывод массива { srand(time(0)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { *mas = rand() % 21-10; cout << *mas << "\t"; mas++; } cout << endl; }}
void srArray(int mas[][M], int n)//нахождение и подсчет тех строк, где первый элемент положительный{ int a; double sum = 0; for (int i = 0; i < n; i++) { double sr = 1; if (mas[i][0] > 0) { for (int j = 0; j < M; j++) { sum += mas[i][j]; } sr = sum / M; cout << "Ср элеменитов " << i + 1 << "-й строки = " << sr << endl; } else ; } }
void main()//основная функция{ setlocale(LC_ALL, "rus"); int x[N][M]; printArray(&x[0][0], N, M); cout << endl; cout << ""<<endl; srArray(x, N); system("pause");}
т.к. n заранее не дано(и это все лишь фрагмент кода) то m при разных n будет получаться разный. n лежит в промежутке [-2;8]
потому, что тут m:=(l+r)div 2; при n<-2 получается индекс <0
и при n>8 в цикле индекс >7
а массив у нас всего 8 элементов
Поэтому в цикле я вывел все значения m при всех возможных значениях n
Надеюсь понятно объяснил.
при n=-2 m=0
при n=-1 m=0
при n=0 m=0
при n=1 m=1
при n=2 m=2
при n=3 m=3
при n=4 m=4
при n=5 m=5
при n=6 m=6
при n=7 m=6
при n=8 m=6
Pascal
var
a:array [0..7] of integer = (34, 16, 16, 2, 2, 0, -4, -4);
l, n, m, key, r:integer;
flag:boolean;
begin
for n:=-2 to 8 do begin
key:=-4;
L:=1;
r:=n;
flag:=false;
Repeat
m:=(l+r)div 2;
if a[m]>key then
l:=m+1
else
if a[m]=key then
flag:=true
else
r:=m-1;
until flag or (l>r);
writeln('при n=',n,' m=', m);
end;
end.
void printArray(int *mas, int n,int m)//инициализация и вывод массива { srand(time(0)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { *mas = rand() % 21-10; cout << *mas << "\t"; mas++; } cout << endl; }}
void srArray(int mas[][M], int n)//нахождение и подсчет тех строк, где первый элемент положительный{ int a; double sum = 0; for (int i = 0; i < n; i++) { double sr = 1; if (mas[i][0] > 0) { for (int j = 0; j < M; j++) { sum += mas[i][j]; } sr = sum / M; cout << "Ср элеменитов " << i + 1 << "-й строки = " << sr << endl; } else ; }
}
void main()//основная функция{ setlocale(LC_ALL, "rus"); int x[N][M]; printArray(&x[0][0], N, M); cout << endl; cout << ""<<endl; srArray(x, N); system("pause");}