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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2014, 23:53   #1
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию Не чертится линия, где ошибка?(Delphi)

Не чертится линия , из-за расхождения типов, видимо, или я совсем все делаю не так? Подскажите, пожалуйста. Условие следующее: Найти ломаную, пересекающую наибольшее количество треугольников. И вот кусок программы, где у меня проблема. Ошибка ссылается на след строку:
Код:
 CoordPoints[M].X:= M;
Код:
procedure TForm2.BtnDecideClick(Sender: TObject);

var
  Num: Boolean;
  I,J,Max1,Max2,K1,K2,D1,D2,Kol,M,N: Integer;
  CoordXPoints: array of Integer;
  CoordYPoints: array of Integer;
begin

     for M := 0 to Image1.Height - 1  do
     for N := 0 to Image1.Height - 1 do
     if (Image1.Canvas.Pixels[N,M] = clBLACK) then

        BEGIN
          CoordPoints[M].X:= M;
          CoordPoints[N].Y:= N;
        END;
      // Найдем первое звено ломаной линии,
      // пересекающая наибольшее количество сторон треугольников
    max1:=0;
    for I:=low(CoordPoints) to high(CoordPoints) - 1 do
    for J := I + 1 to high(CoordPoints) do
    begin
         // Строим зеленую ломаную
          with Image1.Canvas do
          begin
            Pen.Color := clGreen;
            MoveTo(CoordPoints[I].X,CoordPoints[I].Y);
            LineTo(CoordPoints[J].X,CoordPoints[J].Y);
          end;
          kol:=0;
          // Найдем количество пересекаемых сторон треугольников
          for M := 0 to Image1.Height - 1  do
          for N := 0 to Image1.Height - 1 do
          if (Image1.Canvas.Pixels[N,M] = clRed) and (Image1.Canvas.Pixels[N,M]=clGreen)then
            kol:=kol+1;
          if kol>max1 then
          // Сохраняем координаты и количество первого звена, пересекающее максимум треугольников
          begin
            Max1:=Kol;
            K1:=I;
            K2:=J;
          end;
          // стираем ломаную
          for M := 0 to Image1.Height - 1  do
          for N := 0 to Image1.Height - 1 do
          if (Image1.Canvas.Pixels[N,M] = clGreen) then
          Image1.Canvas.Pixels[N,M] := clWhite;
    end;
    // Найдем второе звено ломаной линии,
    // пересекающая наибольшее количество сторон треугольников
    max2:=0;
    for I:=low(CoordPoints) to high(CoordPoints) - 1 do
    if I<>K1 then
    begin
         // Строим зеленую ломаную
          with Image1.Canvas do
          begin
            Pen.Color := clGreen;
            MoveTo(CoordPoints[I].X,CoordPoints[I].Y);
            LineTo(CoordPoints[J].X,CoordPoints[J].Y);
          end;
          kol:=0;
          // Найдем количество пересекаемых сторон треугольников
          for M := 0 to Image1.Height - 1  do
          for N := 0 to Image1.Height - 1 do
          if (Image1.Canvas.Pixels[N,M] = clRed) and (Image1.Canvas.Pixels[N,M]=clGreen)then
            kol:=kol+1;
          if kol>max2 then
          // Сохраняем координаты и количество ломаной пересекающая максимум треугольников
          begin
            Max2:=Kol;
            D1:=I;
            D2:=J;
          end;
          // стираем ломаную
          for M := 0 to Image1.Height - 1  do
          for N := 0 to Image1.Height - 1 do
          if (Image1.Canvas.Pixels[N,M] = clGreen) then
          Image1.Canvas.Pixels[N,M] := clWhite;
    end;
    // Строим зеленую ломаную
    with Image1.Canvas do
    begin
      Pen.Color := clGreen;
      MoveTo(CoordPoints[K1].X,CoordPoints[K1].Y);
      LineTo(CoordPoints[K2].X,CoordPoints[K2].Y);
      LineTo(CoordPoints[D1].X,CoordPoints[D1].Y);
    end;
end;

Последний раз редактировалось zaira001002; 23.04.2014 в 00:02.
zaira001002 вне форума Ответить с цитированием
Старый 23.04.2014, 00:32   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,432
По умолчанию

До конца не стал дочитывать. Прямо с самого начала:
Массивы динамические - длина не задается
Циклы по N и M - оба до Image1.Height - 1
Объявлены 2 массива для Integer - попытка записи в массив записей, причем в разные его ячейки (CoordPoints[M].X:= M; CoordPoints[N].Y:= N; )
Одна и та же точка не может быть одновременно двух цветов ((Image1.Canvas.Pixels[N,M] = clRed) and (Image1.Canvas.Pixels[N,M]=clGreen))

Вообще, список ошибок, который выдает дельфи, достаточно прозрачен.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка? Delphi 7 DoS. Помощь студентам 2 23.05.2013 13:11
Где ошибка? Delphi. Вычисление значения по формуле в трёх условиях Erlotaza Помощь студентам 6 06.06.2012 20:34
Delphi. 2 графика в потоках. Не знаю, где ошибка Erlotaza Помощь студентам 6 26.04.2012 20:24
Где ошибка? (Delphi: Canvas+Threads) Erlotaza Помощь студентам 5 26.04.2012 20:22
Delphi! Где ошибка в коде? sokolik-117845 Общие вопросы Delphi 2 09.04.2012 17:34