Определить в нем среднее арифметическое отрицательных элементов, стоящих после первого элемента, большего 10 и среднее арифметическое всех элементов до этого элемента. Выдать на печать массив и вычисленные средние арифметические значения или сообщения о невозможности их вычислить с указанием конкретных причин.
<em>Алгоритм решения предполагает, что если в массиве не будет найдено элемента, большего 10, то позиции этого элемента не существует и средние арифметические членов, располагающихся как после этой позиции, так и до нее, тоже не могут существовать.</em>
<u><em>"Современное решение"</em></u> // 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.
<em><u>Тестовые просчеты:</u></em> Количество элементов в массиве: 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: пусто
<u><em>"Школьный вариант решения"</em></u> // 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.
<em>Этот вариант существенно длиннее, но главное, что нужно долго вглядываться в текст программы, чтобы понять, что именно она делает.</em>
1)наберем А пол А==5 В==0 2)перельем из А в В пол. А==0 В==5 3) А наберем и дольем из А в В полу. А==3 В==7 4)выльем В и перельем из А в В пол. А==0 В==3 5)наберем А и перельем из А в В пол. А==1 В==7 6)выльем из В и перельем из А в В пол. А==0 В==1 7) заполним А и перельем из А в В получим А==0 В==6 8)заполним А и перельем в В получим А=4 В=7
Первая программа: program n1; var a: array[1..10] of integer; i,k:integer; begin for i:=1 to 10 do a[i]:=random(100); K:=0; For i:=1 to 10 doIf a [i]> 50 then k:=k+1; Write ('k=', k); end.
Вторая программа:
program n1; var a: array[1..10] of integer; i,s:integer; begin for i:=1 to 10 do a[i]:=random(100); s:=0; for i:=1 to 10 doif (a [i]>50) and (a [i]<60) then s:=s+a [i]; write ('s=', s); end.