Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите исправить ошибку EinvalidPointer

69K
07 апреля 2011 года
Ирина Минлибаева
1 / / 04.04.2011
Пишу дипломную программу по вычислению оптимального расписания из n задания для m машин (минимизация суммарного взвешенного запаздвания). Застряла на подсчете суммарного штрафа, а именно в процедуре Method_opt_vstavki. Не могу понять что не так, тем более что иногда все срабатывает нормально, а иногда выдает эту ошибку.
Что самое непонятное это то, что он полностью проходит код и только в конце не выводит матрицу. Не понимаю.
Посмотрите пожалуйста.

Код:
procedure Method_opt_vstavki(lenght,height:integer; dir_srok, shtraf:massive; matrica_pi:matrica);
var
index_massive,dop_mass,c,t,summ_pi_str,summ_shtraf,s: massive;
znach,nomer,y,k,h,parametr,cc,summ_str: integer;
index_matr: matrica;
begin
  SetLength(index_massive, lenght);
  SetLength(s, lenght);
  SetLength(dop_mass, lenght);
  SetLength(summ_pi_str, lenght);
  SetLength(c, lenght);
  SetLength(t, lenght);
  SetLength(summ_shtraf, lenght);
  for i:=0 to lenght-1 do
    begin
      index_massive:=0;
      s:=0;
      c:=0;
      t:=0;
      dop_mass:=0;
      summ_pi_str:=0;
      summ_shtraf:=0;
    end;

  SetLength(index_matr, lenght);
  for i:=0 to lenght-1 do SetLength(index_matr, lenght);
  for j:=0 to lenght-1 do
    for i:=0 to lenght-1 do
      index_matr[i,j]:=0;

  for i:=0 to lenght-1 do index_massive:=i+1;

  SetLength(summ_pi_str, lenght);
  for i:=0 to lenght-1 do
    begin
      summ_str:=0;
      for j:=0 to height-1 do summ_str:=summ_str+matrica_pi[i,j];
      summ_pi_str:=summ_str;
    end;

  nomer:=1;

  while nomer<=(n-1) do
  begin
      parametr:=index_massive[nomer];
      //вставка последнего элемента массива во всевозможные позиции в массиве
      for i:=0 to nomer do
      begin
        for y := 0  to i-1 do dop_mass[y]:=index_massive[y];
        dop_mass:=parametr;
        for y := i+1  to nomer do dop_mass[y]:=index_massive[y-1];
        for j:=0 to nomer do index_matr[i,j]:=dop_mass[j];
        //подсчет суммарного штрафа для полученной последовательности
        //обнуляем массивы чисел
        for j:=0 to nomer do
          begin
            c[j]:=0; t[j]:=0;
          end;
        //считаем сi
        cc:=0;
        for j:=0 to nomer do
          begin
            k:=dop_mass[j];
            c[k]:=cc+summ_pi_str[k];
            cc:=c[k];
          end;
        //выбор значений штрафа
        for j:=0 to nomer do
          begin
            k:=c[j]-dir_srok[j];
            if (0 < k) then t[j]:=k;
          end;

      end;
      nomer:=nomer+1;
  end;

  Form1.StringGrid2.ColCount:=n+1;
  for j:=1 to n do
    for i:=1 to n do
      Form1.StringGrid2.Cells[j,i]:=inttostr(index_matr[i-1,j-1]);
end;
1
08 апреля 2011 года
kot_
7.3K / / 20.01.2000
для поиска подобных ошибок используйте отладчик. Его как бы для этого и сделали.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог