вопрос по программе

zubr15

Туплю уже около часа:(
Суть вопроса: есть два массива 1-ый-[ 1,1,2,2,3] , 2-ой -[1,1,6,3,0]. Считаю кол-во одинаковых элементов в первом массиве, а во втором среднее между соответсвиями (эти массивы связаны
В итоге должно получиться следующее : для первого массива - [2,2,1], а для второго [(1+1)/2=1, (6+3)/2=4.5, 0/1=0]
Вот сам код с которым мучаюсь (он уже успел вырасти
Не могу сделать так, чтоб корректно работал:(
c-1-ый массив, d - второй

Function Total(var c,d:array of Double):Tarray;
 var
  i,j,k,z:integer;
  b,g,e:TArray;
begin
  j:=0;
  k:=0;
  z:=0;
  SetLength(b,j+1);
  SetLength(g,j+1);
  b[j]:=1;
for i:=0 to Length(c)-2 do
 begin
  if c[i]=c[i+1] then
    begin
    b[j]:=b[j]+1;
    Inc(z);
    SetLength(e,z);
    e[z-1]:=d[i];
    end
  else
  begin
    Inc(j);
    SetLength(b,j+1);
    b[j]:=1;
    Inc(k);
    SetLength(g,k);
    g[k-1]:=Mean(e);
    z:=0
  end;
     Inc(z);
     SetLength(e,z);
     e[z-1]:=d[i+1];
 end;
     Inc(z);
     SetLength(e,z);
     e[z-1]:=d[i+1];
    Inc(k);
    SetLength(g,k);
    g[k-1]:=Mean(e);
 result:=b;
end;

Dasar

а сам вопрос в чем?

zubr15

где ошибка:)

Dasar

для начала сделай функцию AddItem(Array arr, int v которая добавляет элемент в массив
и все Inc;SetLength;[]=;
замени на этот AddItem

Dasar

а для самого начала дай нормальные имена массивам и переменным
хотя бы что-нибудь типа:
equalItemCounts, averages

Andbar

я правильно понимаю, что ты на Delphi пишешь?
 
array of Double
если это тоже самое, что Tarray, то следует так и писать, а то у тебя получается open array parameter. Далее я бы сделал что-то типа такого (не читал код, поэтому пишу по словесному описанию):
const epsilon = 0.0001;
Function Total(c,d:Tarray):Tarray;
var i, j: integer; sum: double;
begin
j:=0;
sum:=d[0];
setlength(c, length(c;setlength(d, length(d;//это надо сделать чтобы не портить исходные массивы
for i:=1 to length(c)-1do begin
if abs(c[i]-c[j])<epsilon*abs(c[i]) //именно так следует сравнивать значения типа double
then begin
sum:=sum+d[i];
continue;
end;
d[j]:=sum/(i-j);
inc(j);
c[j]:=c[i];
end;
d[j]:=sum/(length(s)-1-j);
setlength(c, j+1);
setlength(d, j+1);
//что надо вернуть, не понял.
end;

ps: не проверял

zubr15

Спасибо, но уже сделал:)
При оптимизации кода обязательно учту, а пока надо срочно данные обработать:(
Оставить комментарий
Имя или ник:
Комментарий: