|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.12.2010, 01:32 | #1 |
Новичок
Джуниор
Регистрация: 09.12.2010
Сообщений: 8
|
программирование в delphi
пожалуйста исправьте 3 ошибки в коде,а то неделю мучаюсь
l,w,mc,pc,sc,p: integer; //l - длина, w - шиина, mc - счетчик массива поля, pc - счетчик массива крайних точек map,pts: array[0..1000] of TPoint; //map - массив поля, pts - массив крайних точек sq,sqmax: array[0..1000] of integer; implementation function TForm1.findPoint(x, y: integer): integer; var i,r:integer; begin r := -1; for i:=0 to mc do begin if(map[i].X=x) and (map[i].Y=y) then begin r := i; break; end; end; findPoint := r; end; function TForm1.getSq(p1, p2, p3, p4: TPoint): integer; var lb,lt: TPoint; a,b:integer; begin if(p1.X<=p3.X) then begin lb:=p1; lt.X:=p1.X; lt.Y:=p3.Y; end else if (p3.X<=p1.X) then begin lb.X:=p3.X; lb.Y:=p1.Y; lt:=p3; end; a := lt.Y-lb.Y; b := w; getSq := a*b; end; function TForm1.getSq2(p1, p2, p3, p4: TPoint): integer; var lb,rb: TPoint; a,b:integer; begin if(p1.X<=p3.X) then begin lb:=p1; end else if (p3.X<p1.X) then begin lb.X:=p3.X; lb.Y:=p1.Y; end; if(p2.X>=p4.X) then rb:=p2 else if(p2.X<p4.X) then begin rb.X:=p4.X; rb.Y:=p2.Y; end; a := l; getSq2 := a*b; end; procedure TForm1.sortSqMax ; var a,i,j: integer; begin for i:=0 to sc do begin for j:=0 to sc do begin if(sqmax[i]>sqmax[j]) then begin a:=sqmax[i]; sqmax[i]:=sqmax[j]; sqmax[j]:=a; end; end; end; end; function TForm1.getMaxSq :integer; var i,j: integer; begin sqmax := sq; sortSqMax; for i:=0 to sc do begin if(sq[i]=sqmax[0]) then begin getMaxSq:=sq[i]; ListBox1.Canvas.TextOut(10,10,'max= ' +inttostr(sq[i])); if(i<p) then begin ListBox1.Canvas.Rectangle(0,map[pts.x],w, map[pts[i+1].X]; {max.X0 := 0; max.Y0 := map[pts[i].X].Y; max.X1 := w; max.Y1 := map[pts[i+1].X].Y;} end else begin ListBox1.Canvas.Rectangle(map[pts[i].X],0,map[pts[i+1].X],l); end; break; end; end; procedure TForm1.Button2Click(Sender: TObject); var i,j,k:integer; begin //вывод контрольных точек по углам области with ListBox1, Canvas do begin pen.Width:=10; pen.color:= clyellow; end; listbox1.canvas.pixels[0,0]; listbox1.canvas.pixels[l,w]; listbox1.canvas.pixels[0,w]; listbox1.canvas.pixels[l,0]; //вывод точек из файла for i:=0 to mc do begin //рисуем деревья with ListBox1, Canvas do begin pen.color:= clBlack; end; listbox1.canvas.pixels[map[i].X,map[i].Y]; end; //выполняем расчет наибольшего //i - высота, j - ширина от 0 до w, k - ширина от w до 0 for i:=0 to l do begin for j:=0 to w do begin if(findPoint(j,i) <> -1) then begin //нашли точку от левого края with ListBox1, Canvas do begin pen.Width:=10; pen.color:= clblack; end; Listbox1.canvas.Pixels[map[findPoint(j,i)].X,map[findPoint(j,i)].Y]; pts[pc].X := findPoint(j,i); break; end; end; for k:=w downto 0 do begin if(findPoint(k,i) <> -1) then begin //нашли точку от левого края with ListBox1, Canvas do begin pen.Width:=10; pen.color:= clyellow; end; ListBox1.Canvas.Pixels[[findPoint(k,i)].X,map[findPoint(k,i).Y]]; pts[pc].Y := findPoint(k,i); break; end; end; if((pts[pc].X <> 0) and (pts[pc].Y <> 0) and (i>0)) or (((pts[pc].X=0) or (pts[pc].Y=0)) and (i=0)) then pc := pc+1; p := pc; pc := pc-1; //трассировка крайних точек (снизу вверх) for i:=1 to pc do begin sq[sc] := getSq(map[pts[i-1].X],map[pts[i-1].Y],map[pts[i].X],map[pts[i].Y]); sc := sc+1; end; //выполняем расчет наибольшего //определяем слева направо линии параллельные оси Y //i - ширина, j - высота от 0 до l, k - ширина от l до 0 for i:=0 to w do begin for j:=0 to l do begin if(findPoint(i,j) <> -1) then begin //нашли точку от левого края with ListBox1, Canvas do begin pen.Width:=10; pen.color:= clyellow; end; listbox1.canvas.pixels[map[findPoint(i,j)].X,map[findPoint(i,j)].Y]; pts[pc].X := findPoint(i,j); break; end; end; for k:=l downto 0 do begin if(findPoint(i,k) <> -1) then begin //нашли точку от левого края with ListBox1, Canvas do begin pen.Width:=10; pen.color:= clyellow; end; listbox1.canvas.pixels[map[findPoint(i,k)].X,map[findPoint(i,k)].Y]; pts[pc].Y := findPoint(i,k); break; end; end; if((pts[pc].X <> 0) and (pts[pc].Y <> 0) and (i>0)) or (((pts[pc].X=0) or (pts[pc].Y=0)) and (i=0)) then pc := pc+1; end; pc := pc-1; //трассировка крайних точек (слева направо) for i:=p to pc do begin sq[sc] := getSq2(map[pts[i-1].X],map[pts[i-1].Y],map[pts[i].X],map[pts[i].Y]); sc := sc+1; end; memo1.Lines.Add(''); memo1.Lines.Add('Максимальная площадь: '+inttostr(getMaxSq)); end; end. |
09.12.2010, 01:35 | #2 |
Новичок
Джуниор
Регистрация: 09.12.2010
Сообщений: 8
|
программирование в delphi
ошибки следующие
хcode] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ExtCtrls, TeeShape, Series, BubbleCh, TeEngine, TeeProcs, Chart; type TForm1 = class(TForm) Memo1: TMemo; ListBox1: TListBox; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Edit1: TEdit; OpenDialog1: TOpenDialog; max: TShape; procedure Button1Click(Sender: TObject); procedure sortSqMax(); function getMaxSq(): integer; function findPoint(x, y: integer): integer; function getSq(p1, p2, p3, p4: TPoint): integer; function getSq2(p1, p2, p3, p4: TPoint): integer; procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button2Click(Sender: TObject); { procedure FormCreate(Sender: TObject); } private { Private declarations } public { Public declarations } end; var Form1: TForm1; l,w,mc,pc,sc,p: integer; //l - длина, w - шиина, mc - счетчик массива поля, pc - счетчик массива крайних точек map,pts: array[0..1000] of TPoint; //map - массив поля, pts - массив крайних точек sq,sqmax: array[0..1000] of integer; implementation {$R *.dfm} function TForm1.findPoint(x, y: integer): integer; var i,r:integer; begin r := -1; for i:=0 to mc do begin if(map[i].X=x) and (map[i].Y=y) then begin r := i; break; end; end; findPoint := r; end; function TForm1.getSq(p1, p2, p3, p4: TPoint): integer; var lb,lt: TPoint; // ,rb a,b:integer; begin //left bottom //left top if(p1.X<=p3.X) then begin lb:=p1; lt.X:=p1.X; lt.Y:=p3.Y; end else if (p3.X<=p1.X) then begin lb.X:=p3.X; lb.Y:=p1.Y; lt:=p3; end; //calc a := lt.Y-lb.Y; b := w; //dbg.Items.Add('ab: '+inttostr(a)+' '+inttostr(b)); getSq := a*b; end; function TForm1.getSq2(p1, p2, p3, p4: TPoint): integer; var lb,rb: TPoint; // ,lt a,b:integer; begin //left bottom //left top if(p1.X<=p3.X) then begin lb:=p1; end else if (p3.X<p1.X) then begin lb.X:=p3.X; lb.Y:=p1.Y; end; //rigth bottom if(p2.X>=p4.X) then rb:=p2 else if(p2.X<p4.X) then begin rb.X:=p4.X; rb.Y:=p2.Y; end; //calc a := l; b := p3.X-p1.X; //dbg.Items.Add('ab: '+inttostr(a)+' '+inttostr(b)); getSq2 := a*b; end; procedure TForm1.sortSqMax ; var a,i,j: integer; begin for i:=0 to sc do begin for j:=0 to sc do begin if(sqmax[i]>sqmax[j]) then begin a:=sqmax[i]; sqmax[i]:=sqmax[j]; sqmax[j]:=a; end; end; end; end; function TForm1.getMaxSq :integer; var i,j: integer; // a, // str: TStringList; begin sqmax := sq; sortSqMax; // str := TStringList.Create; for i:=0 to sc do begin if(sq[i]=sqmax[0]) then begin getMaxSq:=sq[i]; // str.Add('max = '+inttostr(sq[i])); ListBox1.Canvas.TextOut(10,10,'max= ' +inttostr(sq[i])); if(i<p) then begin ListBox1.Canvas.Rectangle(0,map[pts.x],w, map[pts[i+1].X]; {max.X0 := 0; max.Y0 := map[pts[i].X].Y; max.X1 := w; max.Y1 := map[pts[i+1].X].Y;} end else begin ListBox1.Canvas.Rectangle(map[pts[i].X],0,map[pts[i+1].X],l); { max.X0 := map[pts[i].X].X; max.Y0 := 0; max.X1 := map[pts[i+1].X].X; max.Y1 := l; } end; break; end; end; |
09.12.2010, 01:39 | #3 |
Новичок
Джуниор
Регистрация: 09.12.2010
Сообщений: 8
|
record,object or class type required
there nis no overloaded version of 'rectangle' that can be called with this argument задача следующая дана прямоугольная площадка,на ней могут расти деревья,нужно найти максималный размер площади для танцплощадки так чтоб на ней не было деревьев,деревья и размер площадки задается из текстового файла в виде массива извините если не правильно пишу,только сегодня зарегистрировалась |
09.12.2010, 09:44 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Нет. Так дело не пойдет. Прикрепляй архив с полным проектом. Перенабирать за тебя в Делфи никто не станет.
I'm learning to live...
|
09.12.2010, 17:04 | #5 |
Новичок
Джуниор
Регистрация: 09.12.2010
Сообщений: 8
|
программирование в delphi
вот он архив
|
09.12.2010, 17:13 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
В функции getMaxSq
Есть строка Код:
Далее pts - это тоже массив, значит нужно писать pts[номер элемента]. Понятна ошибка?
I'm learning to live...
|
09.12.2010, 20:49 | #7 |
Новичок
Джуниор
Регистрация: 09.12.2010
Сообщений: 8
|
программирование в delphi
а какой номер элемента мне необходимо задать?надо ли координату указывать?просто я уже не знаю что делать...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программирование Delphi | Ericnex | Помощь студентам | 3 | 11.04.2010 15:01 |
Программирование на Delphi | thebestneo | Фриланс | 3 | 03.02.2010 19:41 |
Программирование на Delphi | ЧеширскийКот | Фриланс | 15 | 14.01.2010 10:32 |
Программирование Delphi | vrealmaker | Фриланс | 2 | 14.11.2007 09:33 |