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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2010, 01:32   #1
melkaya9112
Новичок
Джуниор
 
Регистрация: 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.
melkaya9112 вне форума Ответить с цитированием
Старый 09.12.2010, 01:35   #2
melkaya9112
Новичок
Джуниор
 
Регистрация: 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;
melkaya9112 вне форума Ответить с цитированием
Старый 09.12.2010, 01:39   #3
melkaya9112
Новичок
Джуниор
 
Регистрация: 09.12.2010
Сообщений: 8
По умолчанию

record,object or class type required
there nis no overloaded version of 'rectangle' that can be called with this argument
задача следующая
дана прямоугольная площадка,на ней могут расти деревья,нужно найти максималный размер площади для танцплощадки так чтоб на ней не было деревьев,деревья и размер площадки задается из текстового файла в виде массива

извините если не правильно пишу,только сегодня зарегистрировалась
melkaya9112 вне форума Ответить с цитированием
Старый 09.12.2010, 09:44   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нет. Так дело не пойдет. Прикрепляй архив с полным проектом. Перенабирать за тебя в Делфи никто не станет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2010, 17:04   #5
melkaya9112
Новичок
Джуниор
 
Регистрация: 09.12.2010
Сообщений: 8
По умолчанию программирование в delphi

вот он архив
Вложения
Тип файла: zip Новая папка.zip (304.7 Кб, 12 просмотров)
melkaya9112 вне форума Ответить с цитированием
Старый 09.12.2010, 17:13   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В функции getMaxSq
Есть строка
Код:
ListBox1.Canvas.Rectangle(0,map[pts.x],w, map[pts[i+1].X];
map - это массив записей, значит map[...].Y. Верно?
Далее pts - это тоже массив, значит нужно писать pts[номер элемента].
Понятна ошибка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2010, 20:49   #7
melkaya9112
Новичок
Джуниор
 
Регистрация: 09.12.2010
Сообщений: 8
По умолчанию программирование в delphi

а какой номер элемента мне необходимо задать?надо ли координату указывать?просто я уже не знаю что делать...
melkaya9112 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование 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