Составьте блок-схему линейного алгоритма: а=100 b=15. нужно вычесть из большего числа меньшее и к полученной сумме прибавить 14 и результат умножить на 3 50
Алгоритм решения предполагает, что если в массиве не будет найдено элемента, большего 10, то позиции этого элемента не существует и средние арифметические членов, располагающихся как после этой позиции, так и до нее, тоже не могут существовать.
"Современное решение" // PascalABC.NET 3.0, сборка 1076 begin var n:=ReadInteger('Количество элементов в массиве: '); var x:=ArrRandom(n,-20,20); Writeln('Массив Х'); x.Println; Write('Ср. арифм. отрицательных элементов после первого, большего 10: '); var a1:=x.SkipWhile(x->x<=10).Where(x->x<0); if a1.Count=0 then Writeln('пусто') else Writeln(a1.Average); Write('Ср. арифм. всех элементов до первого, большего 10: '); a1:=x.TakeWhile(x->x<=10); if a1.Count=0 then Writeln('пусто') else Writeln(a1.Average) end.
Тестовые просчеты: Количество элементов в массиве: 15 Массив Х -11 11 16 -7 11 -8 10 -16 15 -15 -10 -8 -6 -13 -17 Ср. арифм. отрицательных элементов после первого, большего 10: -11.1111111111111 Ср. арифм. всех элементов до первого, большего 10: -11
Количество элементов в массиве: 13 Массив Х 14 -9 1 2 12 -15 0 16 -19 16 -11 -15 -12 Ср. арифм. отрицательных элементов после первого, большего 10: -13.5 Ср. арифм. всех элементов до первого, большего 10: пусто
Количество элементов в массиве: 5 Массив Х -11 2 0 15 7 Ср. арифм. отрицательных элементов после первого, большего 10: пусто Ср. арифм. всех элементов до первого, большего 10: -3
Количество элементов в массиве: 3 Массив Х 15 10 8 Ср. арифм. отрицательных элементов после первого, большего 10: пусто Ср. арифм. всех элементов до первого, большего 10: пусто
"Школьный вариант решения" // PascalABC.NET 3.0, сборка 1076 const nmax=50; { максимальное кол-во элементов } var i,n,p,s1,s2,k2:integer; x:array[1..nmax] of integer; begin Write('Количество элементов в массиве: '); Read(n); Randomize; Writeln('Массив Х'); p:=0; for i:=1 to n do begin x[i]:=Random(41)-20; Write(x[i],' '); if p=0 then if x[i]>10 then p:=i; end; Writeln; Write('Ср. арифм. отрицательных элементов после первого, большего 10: '); if p=0 then Writeln('пусто') else begin s2:=0; k2:=0; for i:=p+1 to n do if x[i]<0 then begin s2:=s2+x[i]; Inc(k2) end; if k2=0 then Writeln('пусто') else Writeln(s2/k2) end; Write('Ср. арифм. всех элементов до первого, большего 10: '); if p=0 then Writeln('пусто') else begin s1:=0; for i:=1 to p-1 do s1:=s1+x[i]; Writeln(s1/(p-1)) end end.
Этот вариант существенно длиннее, но главное, что нужно долго вглядываться в текст программы, чтобы понять, что именно она делает.
"Современное решение"
// PascalABC.NET 3.0, сборка 1076
begin
var n:=ReadInteger('Количество элементов в массиве: ');
var x:=ArrRandom(n,-20,20);
Writeln('Массив Х'); x.Println;
Write('Ср. арифм. отрицательных элементов после первого, большего 10: ');
var a1:=x.SkipWhile(x->x<=10).Where(x->x<0);
if a1.Count=0 then Writeln('пусто')
else Writeln(a1.Average);
Write('Ср. арифм. всех элементов до первого, большего 10: ');
a1:=x.TakeWhile(x->x<=10);
if a1.Count=0 then Writeln('пусто')
else Writeln(a1.Average)
end.
Тестовые просчеты:
Количество элементов в массиве: 15
Массив Х
-11 11 16 -7 11 -8 10 -16 15 -15 -10 -8 -6 -13 -17
Ср. арифм. отрицательных элементов после первого, большего 10: -11.1111111111111
Ср. арифм. всех элементов до первого, большего 10: -11
Количество элементов в массиве: 13
Массив Х
14 -9 1 2 12 -15 0 16 -19 16 -11 -15 -12
Ср. арифм. отрицательных элементов после первого, большего 10: -13.5
Ср. арифм. всех элементов до первого, большего 10: пусто
Количество элементов в массиве: 5
Массив Х
-11 2 0 15 7
Ср. арифм. отрицательных элементов после первого, большего 10: пусто
Ср. арифм. всех элементов до первого, большего 10: -3
Количество элементов в массиве: 3
Массив Х
15 10 8
Ср. арифм. отрицательных элементов после первого, большего 10: пусто
Ср. арифм. всех элементов до первого, большего 10: пусто
"Школьный вариант решения"
// PascalABC.NET 3.0, сборка 1076
const
nmax=50; { максимальное кол-во элементов }
var
i,n,p,s1,s2,k2:integer;
x:array[1..nmax] of integer;
begin
Write('Количество элементов в массиве: '); Read(n);
Randomize;
Writeln('Массив Х');
p:=0;
for i:=1 to n do begin
x[i]:=Random(41)-20;
Write(x[i],' ');
if p=0 then
if x[i]>10 then p:=i;
end;
Writeln;
Write('Ср. арифм. отрицательных элементов после первого, большего 10: ');
if p=0 then Writeln('пусто')
else begin
s2:=0; k2:=0;
for i:=p+1 to n do
if x[i]<0 then begin s2:=s2+x[i]; Inc(k2) end;
if k2=0 then Writeln('пусто')
else Writeln(s2/k2)
end;
Write('Ср. арифм. всех элементов до первого, большего 10: ');
if p=0 then Writeln('пусто')
else begin
s1:=0;
for i:=1 to p-1 do s1:=s1+x[i];
Writeln(s1/(p-1))
end
end.
Этот вариант существенно длиннее, но главное, что нужно долго вглядываться в текст программы, чтобы понять, что именно она делает.
#include <iostream>
using namespace std;
int main()
{
int a[3][3],i,j,max,min,imax,jmax,imin,jmin;
for (i=0;i<3;i++) // Ввод массива
{
for (j=0;j<3;j++)
{
cin >> a[i][j];
}
}
cout << "Введенный массив: " << endl;
for (i=0;i<3;i++) // Вывод массива
{
for (j=0;j<3;j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
max = a[0][0];
min = a[0][0];
for (i=0;i<3;i++) // Поиск макс. и мин. элементов
{
for (j=0;j<3;j++)
{
if (a[i][j] > max)
{
max = a[i][j];
imax = i;
jmax = j;
}
if (a[i][j] < min)
{
min = a[i][j];
imin = i;
jmin = j;
}
}
}
cout << "Максимальный элемент: " << max << " Его индексы: " << imax << " " << jmax << endl;
cout << "Минимальный элемент: " << min << " Его индексы: " << imin << " " << jmin;
}
Вывод программы:3 4 5 9 5 3 1 5 5 (Это ввод массива)
Введенный массив:
3 4 5
9 5 3
1 5 5
Максимальный элемент: 9 Его индексы: 1 0 (Нумерация с 0)
Минимальный элемент: 1 Его индексы: 2 0