|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.06.2009, 14:21 | #1 |
Новичок
Джуниор
Регистрация: 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. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите найти ошибку в программе (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 |