Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.02.2015, 14:40
Svay10 Svay10 вне форума
Прохожий
 
Регистрация: 25.02.2015
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Проблема с кодом

Пишет Project raised exception class ElistError with message 'List index out of nounds(-1)'. Process stopped. Use Step or Run to continue.

Сам проэкт во вложение.
Вот код:

Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids, XPMan;
type
  TForm1 = class(TForm)
    Button1: TButton;
    tmr1: TTimer;
    strngrd1: TStringGrid;
    lbl1: TLabel;
    lbl2: TLabel;
    lbl3: TLabel;
    lbl4: TLabel;
    edt1: TEdit;
    lbl5: TLabel;
    {xpmnfst1: TXPManifest;}
    lbl6: TLabel;
    lbl7: TLabel;
    lbl8: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure tmr1Timer(Sender: TObject);
    procedure WriteGrid;
    procedure strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure WaitingTime;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  proc: array [1..5] of array [0..2] of Integer;    // массив с информацией о процессах
  number_proc:Integer;     // помер текущего исполняемого процесса
  kvant: Integer = 0;      // текущий квант времени
  i:Integer = 1;           // вспомогательная переменная для ограничения количества квантов времени для текущего исполняемого процесса
implementation
{$R *.dfm}
procedure SortProc;       //  сортировка по времени поступления
var i,j: Integer;
    x0,x1,x2: Integer;
begin
  for I := 1 to 4 do
    for j := 1 to 4 do
      if proc[j,1] > proc[j+1,1] then
        begin
          x0:= proc[j+1,0];
          x1:= proc[j+1,1];
          x2:= proc[j+1,2];
          proc[j+1,0] := proc[j,0];
          proc[j+1,1] := proc[j,1];
          proc[j+1,2] := proc[j,2];
          proc[j,0] := x0;
          proc[j,1] := x1;
          proc[j,2] := x2;
        end;
end;
procedure TForm1.Button1Click(Sender: TObject);  // запуск
begin
  if tmr1.Enabled then
  begin
    tmr1.Enabled:=false;
    Button1.Caption:='Запуск';
  end else
  begin
    FormCreate(Sender);
   { for k:=1 to strngrd1.RowCount-1 do
    for j:=1 to strngrd1.ColCount-1 do
      strngrd1.Cells[j, k]:='';}
    strngrd1.ColCount:=1;
    number_proc:=1;
    kvant:=0;
    i:=1;
    SortProc;
    tmr1.Interval:=StrToInt(edt1.Text);
    tmr1.Enabled:=True;
    Button1.Caption:='Стоп';
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);     //заполнение массива информацией о процессах
var i:integer;
begin
   for i:=1 to 5 do
   begin
   strngrd1.Cells[0, i]:=IntToStr(i);
   proc[i,0]:= i;
   end;
   proc[1,1]:= 3;
   proc[1,2]:= 10;
   proc[2,1]:= 6;
   proc[2,2]:= 4;
   proc[3,1]:= 0;
   proc[3,2]:= 5;
   proc[4,1]:= 2;
   proc[4,2]:= 1;
   proc[5,1]:= 4;
   proc[5,2]:= 3;
end;
procedure TForm1.WaitingTime;       // расчет среднего времени ожидания и выполнения
var  waiting_time, turnaroud_time:Real;
i,j:Integer;
begin
 waiting_time:=0;
 turnaroud_time:=0;
 for i:=1 to strngrd1.RowCount-1 do
  for j:=1 to strngrd1.ColCount-1 do
  begin
    if strngrd1.Cells[j,i]='Г' then  waiting_time:=waiting_time+1;
    if strngrd1.Cells[j,i]<>'-' then  turnaroud_time:=turnaroud_time+1;
  end;
  lbl3.Caption:='Среднее время ожидания: '+ FloatToStr(waiting_time/5);
  lbl4.Caption:='Среднее полное время выполнени: '+ FloatToStr(turnaroud_time/5);
end;
procedure TForm1.WriteGrid;         //отрисовка таблицы
var i:Integer;
begin
  lbl1.Caption:='Текущий квант времени: '+inttostr(kvant);
  lbl2.Caption:='Исполняемый процесс: '+inttostr(proc[number_proc,0]);
  strngrd1.Cells[kvant,0]:=IntToStr(kvant);
  strngrd1.ColCount:=kvant+1;
  strngrd1.Cells[kvant,proc[number_proc,0]]:='В';
  for i:=1 to 5 do
  begin
    if i<>number_proc then
    begin
      if ((proc[i,2]=0) or (proc[i,1]>kvant)) then  strngrd1.Cells[kvant,proc[i,0]]:='-'
      else strngrd1.Cells[kvant,proc[i,0]]:='Г';
    end;
    end;
end;
procedure TForm1.tmr1Timer(Sender: TObject);   // реализация алгоритма RR
var j,k:integer;
flag:Boolean;
begin
   k:=0;
   Inc(kvant);
   repeat
     if ((proc[number_proc,1]<=kvant) and (proc[number_proc,2]<>0) and (i<=4)) then
     begin
     Dec(proc[number_proc,2]);
     Inc(i);
     flag:=True;
     WriteGrid;
     WaitingTime;
     end
     else
     begin
     Inc(number_proc);
     if number_proc>5 then number_proc:=1;
     flag:=False;
     i:=1;
     end;
     for j:=1 to 5 do
     if proc[j,2]<>0 then Inc(k);
     if k=0 then
     begin
      tmr1.Enabled:=False;
      Button1.Caption:='Запуск';
      Exit;
     end;
   until (flag);
end;
procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer;    // раскраска  таблицы stringgrid
  Rect: TRect; State: TGridDrawState);
begin
if strngrd1.Cells[ACol, ARow] = 'В' then strngrd1.Canvas.Brush.Color:=255;
if strngrd1.Cells[ACol, ARow] = 'Г' then strngrd1.Canvas.Brush.Color:=clMenuHighlight;
strngrd1.Canvas.Font.Color := clBlack;
  strngrd1.Canvas.FillRect(Rect);
  strngrd1.Canvas.TextOut(Rect.Left, Rect.Top, strngrd1.Cells[ACol, ARow]);
end;
end.

MAD: учимся пользоваться тегами!!!
Вложения
Тип файла: 7z project.7z (181.3 Кбайт, 3 просмотров)

Последний раз редактировалось M.A.D.M.A.N., 25.02.2015 в 18:14.
Ответить с цитированием
  #2  
Старый 25.02.2015, 15:07
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Никаких ошибок не выдало
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #3  
Старый 25.02.2015, 15:19
Svay10 Svay10 вне форума
Прохожий
 
Регистрация: 25.02.2015
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

а у меня выдаёт, ктонибудь может написать программу за деньги подобную этой точнее переделать код
Ответить с цитированием
  #4  
Старый 25.02.2015, 16:57
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Ну вообще он же говорит - ну типа не существующий индекс (-1)
т.е. где-то в "списке", при каких-то условиях идет ссылка на строку списка с индексом "-1", а такой строки нету, т.к. они начинаются например с "0"...
запусти в дебаге, когда вылезет ошибка, нажми "Break" и тебе подсветит строчку кода которая вызвала ошибку.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #5  
Старый 26.02.2015, 16:39
Zemius Zemius вне форума
Прохожий
 
Регистрация: 26.02.2015
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Добрый день.
У меня такой вот. У меня не выводиться информация в поле memo.
Подскажите пожалуйста почему. Прошу не винить если есть глупая ошибка. Я не программист, но лабораторные нужно сделать вот пробую) покупать не охотно мне) Заранее спасибо.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
  var Unom, Snom: Real;
  begin
   Unom:=10.5;   
   Snom:=25000; 
  end;

procedure TForm1.Memo1Change(Sender: TObject);
 var str1, str2: string;
begin
 str1:= 'Unom= ';
 str2:= ' кВ';
 memo1.Lines.Add(str1);
 memo1.Lines.Add(str2);
end;

end.
Админ: Пользуемся тегами при оформлении кода!
+ читаем правила: один вопрос - одна тема!

Последний раз редактировалось Admin, 26.02.2015 в 19:28.
Ответить с цитированием
  #6  
Старый 26.02.2015, 17:10
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

если ты ЭТО
Код:
procedure TForm1.Memo1Change(Sender: TObject);
var
  str1, str2: string;
begin
  str1:= 'Unom= ';
  str2:= ' кВ';
  memo1.Lines.Add(str1);
  memo1.Lines.Add(str2);
end;
повесил на Memo1.OnChange, то должен получить StsackOverflow
То есть изнутри обработчика изменения Memo1, ты добавляешь туда же две строчки.
Ответить с цитированием
  #7  
Старый 26.02.2015, 17:46
Zemius Zemius вне форума
Прохожий
 
Регистрация: 26.02.2015
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от icWasya
если ты ЭТО
Код:
procedure TForm1.Memo1Change(Sender: TObject);
var
  str1, str2: string;
begin
  str1:= 'Unom= ';
  str2:= ' кВ';
  memo1.Lines.Add(str1);
  memo1.Lines.Add(str2);
end;
повесил на Memo1.OnChange, то должен получить StsackOverflow
То есть изнутри обработчика изменения Memo1, ты добавляешь туда же две строчки.


Спасибо большое, но к сожалению я учусь на электроснабжение предприятий, а не на ИС. И пока Ваш сленг мне не понянет. По идее я так пониамю что при нажатии кнопки, или без нее в мемо должно появиться те строки.
Прога запускается без ошибок, но ничего не отображается.

Последний раз редактировалось Zemius, 26.02.2015 в 17:54.
Ответить с цитированием
  #8  
Старый 26.02.2015, 22:36
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вы замыкаете первичную обмотку трансформатора на вторичную с гальванической связью происходит какбы самогенерация, переместите код из чейнжа мемо в обработчик кнопки, строки появятся и так
Ответить с цитированием
  #9  
Старый 27.02.2015, 08:14
Zemius Zemius вне форума
Прохожий
 
Регистрация: 26.02.2015
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Вы замыкаете первичную обмотку трансформатора на вторичную с гальванической связью происходит какбы самогенерация, переместите код из чейнжа мемо в обработчик кнопки, строки появятся и так
Спасибо огромное)) Все заработало) Очень понравился ответ) Хорошего дня Вам) И извините что не нарушил правила форума.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter