Нахождение второго нулевого элемента в массиве

Здравствуйте. Как найти второй нулевой элемент в массиве, получилось найти первый и последний, второй не как не получается, подскажите пожалуйста.

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.

:slight_smile:

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 элементов, а как сделать, чтобы он делил только на те элементы, которые находятся между первым и вторым нулевыми элементами, не учитывая при этом нули. Я думал если я сделал цикл типа от первого и второго элемента и он будет только между ними работать, но так не работает. Извиняюсь за такой сраное объяснение )

Так а что в коде? Должно работать.

Нахождение сред.арефм. между первым и вторым нулевыми элементами.

k := 0;
for i := d1+1 to d2-1 do begin inc(k)
    summa := summa + m[i];end;
  s := summa / k;

можно делить на d2-d1 исграться с ± 1, вообщем на любителя

Там вообще весь подсчет в одном цикле спокойно делается и у ТС большие проблемы с операторными скобками:

  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

отлично. а n больше 1000 может быть?

Спасибо огромное! Всё ясн и понятно, а то на остальных форумах писали такой непонятный бред, что я просто в шоке сидел, возможно было и правильно, но нифига непонятно)

Вообще нет, я ещё условия на это не поставил, сейчас доработаю программу

Ещё один вопрос возник, я сейчас перебирал условия, типа когда один нулевой элемент или их вообще нет с этими условиями я всё понял, но вот не пойму как сделать условия, чтобы не выводилось сред.арефм. если между нулевыми элементами, нет элементов т.е протос стоит 0 0

в посте выше

Спасибо, сначала не понял, потом догнал )