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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 11:55   #1
Asira
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 84
По умолчанию Графика делфи

Создать следующее изображение , расположив его
в центре вкладки:
шахматную доску размером n*n клеток. Доска должна иметь заданную площадь S;
Может быть кто то делала подобное задание?
Asira вне форума Ответить с цитированием
Старый 07.06.2010, 13:02   #2
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

Код:
type
  TForm1 = class(TForm)
    edt1: TEdit;  // ввод площади
    btn1: TButton; // рисовать
    edt2: TEdit;   // ввод n
    procedure FormCreate(Sender: TObject); // ввод n
    procedure btn1Click(Sender: TObject);
    procedure Kvadrat(x,y:Integer;col:Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  s:LongInt;  //площадь
  a:integer;  // сторона доски
  dx:Integer; // сторона квадратика
  n:Integer;  // n - она и в Африке n
  c:Boolean;  // цвет  true -черный false- белый
   x0,y0:Integer;
implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var i,j:Integer;
begin
     (*ввод исходных*)
   n:=StrToInt(edt2.text); // n
   s:=StrToInt(edt1.text); // s
          (*расчет *)
   a:=Trunc(Sqrt(s));    // a
   dx:= a div n;         // dx
   (*очистим рисунок*)
   form1.Canvas.Brush.Color:=clWhite;
   form1.Canvas.Pen.Width:=1;
   form1.Canvas.Rectangle(0,0,form1.Width,form1.Height);
     (*найдем  середину формы*)
   x0:=form1.ClientWidth div 2;
   y0:=form1.ClientHeight div 2;
      (*найдем  левый верхний угол доски*)
   x0:=x0-a div 2; // найдем  левый верхний угол доски
   y0:=y0-a div 2;
   if n mod 2=0 then c:=false
  else
  c:=true;

  for I := 0 to n-1  do
   begin
   if n mod 2=0 then
   c:=not c; // если n четное меняем цвет
   for j := 0 to n - 1 do
     Kvadrat(x0+i*dx,y0+j*dx,c);//рисуем квадратик
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
edt2.Text:='5';
edt1.Text:=IntToStr(form1.ClientHeight*form1.ClientWidth);
end;

procedure TForm1.Kvadrat(x, y: Integer; col: boolean);
begin
 with  form1.Canvas do
 begin
 if col then Brush.Color:=clBlack // цвет квадратика
 else Brush.Color:=clWhite;
Brush.Style:=bsSolid;    // сплошная заливка
  Rectangle(x,y,x+dx,y+dx);// квадратик рисуем
 end;
  c:=not c;  // меняем цвет на противоположный
end;

end.
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!

Последний раз редактировалось DoDge_VipeR; 07.06.2010 в 13:19.
DoDge_VipeR вне форума Ответить с цитированием
Старый 07.06.2010, 13:12   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Может быть кто то делала подобное задание?
Растяни на вкладке обычный DrawGridи задай размеры ячеек и их кол-во - получишь доску.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.06.2010, 14:07   #4
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Задано площадь шахматного поля ( S ) и количество клеток ( n ).
Вычисляем размер стороны поля L = sqrt( S ) и размер стороны одной клетки m = L / n.
Далее по n и m строим поле

Код:
var
  Form1: TForm1;
  x,y: integer; // координаты
  S: integer; // заданая площадь поля
  n: byte; // заданное кол-во клеток
  l: extended; // размер стороны поля
  m: integer; // размер одной клетки поля
  cnt: byte; // вспомогательный счетчик


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   S:= 160000; n:= 8; // задаем исходные размеры
   l:= sqrt(S);  //  размер стороны поля
   m:= Round(l / n);    // размер одной клетки поля
   x:= 100; y:= 100;  // начальные координаты левого верх. угла поля
end;

procedure TForm1.FormPaint(Sender: TObject);
var i,j: byte;
begin
  for i:= 0 to (n -1) do
  begin
    for j:= 0 to (n -1) do
    begin
      Inc(cnt);
      if (cnt mod 2) = 0 then Form1.Canvas.Brush.Color:= clBlack
      else Form1.Canvas.Brush.Color:= clWhite;
      Form1.Canvas.Rectangle(x + i*m, y + j*m, x + i*m + m, y + j*m + m);
    end;
     Inc(cnt);
  end;
end;

end.
Задавать S и n можно через Edit, как в посте #2.
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 07.06.2010 в 14:11.
DeKot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
графика в Делфи. pionerka Помощь студентам 5 28.04.2010 16:38
Графика в Делфи. Как нарисовать строфоиду? stscolt Помощь студентам 3 07.09.2009 10:12
Графика в Делфи R_A_M_I_L7777777 Помощь студентам 14 27.03.2009 15:21
Графика в Делфи TCanvas Summerrain Помощь студентам 1 19.12.2008 02:39
Графика в Делфи Killbrum Мультимедиа в Delphi 19 17.09.2008 22:29