Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2008, 23:29   #1
OLesechka300490
 
Регистрация: 08.06.2008
Сообщений: 5
Восклицание встроенные функции,использование записей и файлов

помогите пожалуйста решить задачу,вообще ума не приложу((((
Поля шахматной доски характеризуются записью
Type
Pole=record
Vera,b,c,d,e,f,g,h); {вертикальные координаты}
Hor:1..8; {горизонтальные координаты}
end;

Вывести шахматную доску, пометив крестиками все поля, которые «бьет» ферзь, стоящий на поле с координатами Ver и Hor , и ноликами – остальные поля.
OLesechka300490 вне форума Ответить с цитированием
Старый 08.06.2008, 23:54   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,691
По умолчанию

Можно так
Код:
type pole=record
   ver: 'a'..'h';
   hor: 1..8;
end;
var
  xy: pole;
  i: byte;
  j: char;
begin
   write('x, y == '); readln(xy.ver, xy.hor);
   for i:=1 to 8 do begin
     for j:='a' to 'h' do
        if (xy.ver=j) or (xy.hor=i) or (ord(j)-ord(xy.ver)=i-xy.hor)
        or (ord(j)-ord(xy.ver)=xy.hor-i)
        then write('x ') else write('o ');
     writeln
   end;
   readln
end.
eoln вне форума Ответить с цитированием
Старый 08.06.2008, 23:55   #3
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,435
По умолчанию

Лучше использовать 2-у мерный массив MAS:array [1..8,1..8] of ..; Ферзь бьет весь столбец и строку и диогонали( главную и побочную). Допустим Ф[4,3] (3 это c) значит выделяеш все ячейки
For i:=1 to 8 do
MAS[4,i]:='Х';
MAS[i,3]:='X';

а затем и диогонали.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 09.06.2008, 00:02   #4
OLesechka300490
 
Регистрация: 08.06.2008
Сообщений: 5
По умолчанию

да я бы с радостью так сделала,но надо именно с помощью записи...

спасибо,только как это потом на экран в делфи вывести с помощью чего?

Последний раз редактировалось Stilet; 09.06.2008 в 08:23.
OLesechka300490 вне форума Ответить с цитированием
Старый 09.06.2008, 00:20   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,691
По умолчанию

Так там с помощью записи и сделано
В Delphi делаем консольное приложение и всё. Если надо оконное приложение, то then write('x ') else write('o '); writeln заменяем на
Код:
memo1.text:=memo1.text+'x ' else memo1.text:=memo1.text+'0 ';
memo1.lines.add('');
А лучше StringGrid использовать
eoln вне форума Ответить с цитированием
Старый 09.06.2008, 08:41   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,803
По умолчанию

Цитата:
А лучше StringGrid использовать
Поддерживаю. Вот даже примерчик могу показать, который отрисовывает клетки которые под боем ферзя. Мышой выбирается клетка (она красным подсвечивается) и от нее все зеленые - боевые
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormResize(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormResize(Sender: TObject);
begin
StringGrid1.DefaultColWidth:=Width div 8-10;
StringGrid1.DefaultRowHeight:=Height div 8-10;
StringGrid1.Align:=alClient;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Invalidate;
if (ACol=StringGrid1.Col)or(ARow=StringGrid1.Row)
 or (abs(ACol-StringGrid1.Col)=abs(ARow-StringGrid1.Row)) then
 StringGrid1.Canvas.Brush.Color:=clGreen
else
 StringGrid1.Canvas.Brush.Color:=clBtnFace;
if (ACol=StringGrid1.Col)and(ARow=StringGrid1.Row) then
 StringGrid1.Canvas.Brush.Color:=clRed;

StringGrid1.Canvas.FillRect(Rect);
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование функции ExitWindowsEx. Yurazav Свободное общение 11 07.06.2010 21:28
Какие языки (системы разработки) имеют встроенные сложные операции над объектами? asmc Общие вопросы C/C++ 1 26.06.2008 09:01
Нужна помощь: выбор файлов исходя из имени файлов Antik163RUS Помощь студентам 4 19.06.2008 21:20
Печать pdf файлов из списка файлов в Excel АПС Microsoft Office Excel 5 15.04.2008 16:04
Использование функции Excel из Delphi Геля Общие вопросы Delphi 3 07.06.2007 07:33