Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Одномерные массивы

Автор: Neon6868 12.05.2007 18:24

Задание:В одномерном массив, состоящем из n элементов, вычислить:
1)Количество положительных элементов массива
2)Сумму элементов массива, расположенных после последного нулевого элемента
Сначала надо преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых не превышает 1, а затем все остальные.

Я программу написал, но она неправильно считает кол-во элементов, расположенных после последнего нулевого элемента.Всегда выводится значение 0.Если в цикле

Код
for(i=i+1;i<n;i++) summa=summa+a[i];
вместо начального значения i=i+1 написать например i=5, то всё правильно считается.Подскажите как это исправить?

Программа:
Код

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main()
  {
  const int n=10;
  int a[n],i,x,m=0;
  printf("\nIsxodnii massiv\n");
  randomize();
  for (i=0;i<n;i++)
  {
  a[i]=random(10)-5;
  printf("%3d",a[i]);
  }
  for (i=0;i<n;i++)
  {
  if (a[i]<=1)
  {
  x=a[m];
  a[m]=a[i];
  a[i]=x;
  m++;
  }
  }
  printf("\nPreobrazovannii massiv\n");
  for (i=0;i<n;i++) printf("%3d",a[i]);
  int pol=0;
  for(i=0;i<n;i++)
  if (a[i]>=0) pol++;
  printf("\nKol-vo polozhitelnix elementov=%d",pol);
  int summa=0;
  for(i=n;i>0;i--)
  {
  if (a[i]==0)
  {
  for(i=i+1;i<n;i++) summa=summa+a[i];
  printf("\nSumma elementov posle poslednego nulevogo elementa=%d",summa);
  return;
  }
  }
}

Автор: volvo 12.05.2007 18:44

Ошибка - здесь:

for(i=n;i>0;i--)

Индексация - с 0 до n-1, а не до n... Правильно - будет так:
for(i=n-1;i>=0;i--)

Автор: Neon6868 12.05.2007 19:08

Помощь больше не нужна!