Помощь - Поиск - Пользователи - Календарь
Полная версия: разделение одномерного массива
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
falcon
паскаль только начал изучать помогите пожалуйста вот с такой програмой:
Разделить одномерный массив на 3 части, которые по возможности имеют минимальное расхождение сумм
P.S.заранее спасибо
klem4
Как-то так ?

uses crt;

const
n = 5;

type
TArray = array [1..n] of Integer;

TResult = record
a, b: Integer;
end;

function Part(const arr: TArray; const _from, _to: Integer): Integer;
var
s, i: Integer;
begin
s := 0;
for i := _from to _to do
inc(s, arr[i]);
Part := s;
end;

procedure GetParts(const arr: TArray; var R: TResult);
var
a, b, delta, min: Integer;
begin

min := MaxInt;

for a := 1 to n - 2 do
for b := a + 1 to n - 1 do begin

DELTA :=
abs ( Part(arr, b + 1, n) - Part(arr, a + 1, b) ) +
abs ( Part(arr, b + 1, n) - Part(arr, 1, a) ) +
abs ( Part(arr, a + 1, b) - Part(arr, 1, a));

if DELTA < min then begin
min := DELTA;
R.a := a;
R.b := b;
end;
end;
end;

const
X: TArray = (1, 2, 3, 4, 5);
var
R: TResult;
begin
clrscr;

GetParts(X, R);

writeln('1->', R.a, ', ', R.a + 1, '->', R.b, ', ', R.b + 1, '->', n);

readln;
end.
volvo
Только не будет это компилироваться под TP ... no1.gif
klem4
yes2.gif

Исправил под TP.
kpi
а вы уверены что эта прога пашет?
rolleyes.gif
она у меня вызывает сомнения blink.gif
volvo
А ты приведи пример входных данных, то, что тебе программа выдает, и то, что ты ХОЧЕШЬ, чтобы она выдавала... А то слишком много вот таких как ты: "У меня вызывает сомнения" mad.gif А сам даже не соизволил пример работы программы привести...

Вызывает - напиши сам, чтоб НЕ вызывало!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.