Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2009, 14:21   #1
Nemles
Новичок
Джуниор
 
Регистрация: 14.06.2009
Сообщений: 1
По умолчанию Помогите найти ошибку в программе

Транспортная задача методом Лебедева.

При данном методе подсчитывается Сij по строкам и столбцам и каждая сумма делится на число элементов в строке или строке, в результате чего получаются средние величины.
Каждый элемент вычитается из суммы двух соответствующих средних. При этом разности называются коэффициентами очередности.
Распределение поставок производится сначала в клетку таблицы с наибольшими коэффициентами, далее в следующую за ним по величине и т.д.
Пример:
матрица 3 на 5
Ai = 60,35,40
Bj = 22, 45, 20,18,30
Cij= 4 1 3 4 4
2 3 2 2 3
3 5 2 4 4
Код программы:

procedure TForm1.N9Click(Sender: TObject);
var
s{сумма поставок},i,j,imax,jmax,s1,s2,Z:int eger;
max:real;
aver_i,aver_j:array[1..100] of real;
fl:array[1..100] of array[1..100] of boolean;
koef:array[1..100] of array[1..100] of real;
begin
{обнуление массива заполненных элементов}
for i:=0 to m do
for j:=0 to n do
fl[j,i]:=false;
{нахождение сумм и средних значение по строкам}
for i:=0 to m do
begin
s:=0;
for j:=0 to n do
s:=s+strtoint(sg3.cells[j,i]);
aver_i[i]:=s/(n+1);
end;
{нахождение сумм и средних значение по столбцам}
for j:=0 to n do
begin
s:=0;
for i:=0 to m do
s:=s+strtoint(sg3.Cells[j,i]);
aver_j[j]:=s/(m+1);
end;
{вычисление коэффициентов}
for i:=0 to m do
for j:=0 to n do
koef[j,i]:=aver_i[i]+aver_j[j]-strtoint(sg3.Cells[j,i]);

repeat
i:=0;
j:=0;
{поиск первого незаполненного элемента в матрице}
while (fl[j,i]) and (i<=m) do
begin
if j<n then
inc(j)
else if (j=n) and (i<m) then
begin
inc(i);
j:=0;
end;
end;
max:=koef[j,i];
imax:=i;
jmax:=j;
{поиск незаполненного элемента с максимальным коэффициетом}
for i:=0 to m do
for j:=0 to n do
if (koef[j,i]>max) and (not fl[j,i]) then
begin
max:=koef[j,i];
imax:=i;
jmax:=j;
end;
i:=imax;
j:=jmax;
{запись поставки в sg6 в соответствии со спросом и предложением}

if strtoint(sg5.cells[j,0])<strtoint(sg4.cells[0,i]) then
begin
sg6.Cells[j,i]:=sg5.cells[j,0];
sg4.cells[0,i]:=inttostr(strtoint(sg4.cells[0,i])-strtoint(sg5.cells[j,0]));
sg5.cells[j,0]:='0';
fl[j,i]:=true;
end
else if strtoint(sg5.cells[j,0])>strtoint(sg4.cells[0,i]) then
begin
sg6.Cells[j,i]:=sg4.cells[0,i];
sg5.cells[j,0]:=inttostr(strtoint(sg5.cells[j,0])-strtoint(sg4.cells[0,i]));
sg4.cells[0,i]:='0';
fl[j,i]:=true;
end
else if strtoint(sg5.cells[j,0])=strtoint(sg4.cells[0,i]) then
begin
sg6.Cells[j,i]:=sg4.cells[0,i];
sg5.cells[j,0]:='0';
sg4.cells[0,i]:='0';
fl[j,i]:=true;
end;


{подсчет и проверка суммы оставшихся поставок}
s:=0;
for i:=0 to m do
s:=s+strtoint(sg4.cells[0,i]);
until s=0;


При решении выдает вот такую ошибку: First chance exception at $7549B4F4. Exception class EAccessViolation with message 'Access violation at address 004057D6 in module 'Project1.exe'. Read of address CCCCCCC5'. Process Project1.exe (1664)

Последний раз редактировалось Nemles; 14.06.2009 в 14:24.
Nemles вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в программе (C++) Olya90 Помощь студентам 1 28.03.2009 16:36
Помогите найти ошибку в программе Wast Паскаль, Turbo Pascal, PascalABC.NET 2 29.12.2008 20:40
помогите на найти ошибку в программе SYL@R Помощь студентам 1 28.11.2008 12:35
Помогите найти ошибку в программе Evgenii Помощь студентам 3 24.07.2008 09:06
Помогите найти ошибку в программе KnDmPetr Паскаль, Turbo Pascal, PascalABC.NET 5 10.03.2008 14:19