Здравствуйте. Как найти второй нулевой элемент в массиве, получилось найти первый и последний, второй не как не получается, подскажите пожалуйста.
program z_1;
var
m: array [1..1000] of integer;
i,n,summa,d1,d2,k,v: integer;
s: real;
begin
summa := 0;
repeat
writeln('Введите любое целое количество элементов');
readln(n);
if n <= 0 then
writeln('n не может быть меньше или равно нулю');
until n>0;
for i := 1 to n do begin
writeln('Введите i элемент:');
readln(m[i]);
end;
for i:= 1 to n do begin
if m[i] = 0 then
d1 := i;
break;
end;
for i:= 1 to n do begin
if m[i] = 0 then
d2 := i;
end;
for i := d1 to d2 do
summa := summa + m[i];
s := summa / n;
writeln('Среднее арифметическое = ', s);
writeln(d1, d2);
end.
const N = 10 ;
var i,i0,k: integer;
mas: array [1..N] of integer ;
begin
// тут заполнили массив
i0 := 0 ;
k:=0;
for i := 1 to N do
if mas[i] = 0 then
inc(k);
if k = 2 then
begin
i0 := i ; Break
end;
if k = 2 then Writeln ('Index = ', i0)
else Writeln ('Net ni hrena!') ;
end.
program z_1;
var
m: array [1..1000] of integer;
i, n, summa, d1, d2, k, v: integer;
s: real;
begin
summa := 0;
repeat
writeln('Введите любое целое количество элементов');
readln(n);
if n <= 0 then
writeln('n не может быть меньше или равно нулю');
until n > 0;
for i := 1 to n do
begin
writeln('Введите i элемент:');
readln(m[i]);
end;
for i := 1 to n do
begin
if m[i] = 0 then
d1 := i;
break;
end;
for i := 1 to n do
if m[i] = 0 then
d2 := i;
for i := d1 to d2 do
summa := summa + m[i];
s := summa / n;
writeln('Среднее арифметическое = ', s);
writeln(d1, d2);
end.
Спасибо, работает, всё было так просто). А ещё один вопрос появился, я же нахожу сред.ареф., он у меня всё нормально вычисляет, но когда дела доходит до количества, то допустим я ввёл 7 элементов 0 10 10 10 0 4 0, то он у меня делит на все 7 элементов, а как сделать, чтобы он делил только на те элементы, которые находятся между первым и вторым нулевыми элементами, не учитывая при этом нули. Я думал если я сделал цикл типа от первого и второго элемента и он будет только между ними работать, но так не работает. Извиняюсь за такой сраное объяснение )
Там вообще весь подсчет в одном цикле спокойно делается и у ТС большие проблемы с операторными скобками:
IndexZeroEnd:=0; //здесь будет индекс последнего нуля
IndexZeroOne:=0; //здесь будет индекс первого нуля
IndexZeroTwo:=0; //здесь будет индекс второго нуля
summa:=0;
for i:=1 to n do begin
if m[i]=0 then begin
IndexZeroEnd:=i;
if IndexZeroOne=0 then IndexZeroOne:=i
else if IndexZeroTwo=0 then IndexZeroTwo:=i;
end;
if (IndexZeroOne>0) and (i>IndexZeroOne) and (IndexZeroTwo=0) then summa:=summa+m[i];
end;
потом делить summa на IndexZeroTwo-IndexZeroOne-1 если это не 0 разумеется и IndexZeroTwo>0
Спасибо огромное! Всё ясн и понятно, а то на остальных форумах писали такой непонятный бред, что я просто в шоке сидел, возможно было и правильно, но нифига непонятно)
Ещё один вопрос возник, я сейчас перебирал условия, типа когда один нулевой элемент или их вообще нет с этими условиями я всё понял, но вот не пойму как сделать условия, чтобы не выводилось сред.арефм. если между нулевыми элементами, нет элементов т.е протос стоит 0 0