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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2009, 04:58   #1
Natasha666
 
Регистрация: 19.05.2009
Сообщений: 3
По умолчанию Не могу найти ошибку в коде!

Задача:
Шахматную доску будем представлять символьной матрицей размера 8x8. Даны натуральные числа n, причём 1<=n<=8 и m, причём 1<=m<=8. Эти числа номера вертикали и горизонтали, определяющие местоположения коня. Соответствующий элемент матрицы надо положить равным символу K. Поля находящиеся под угрозой коня, надо положить равными символу *, а остальные – символу 0.

мой код программы:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
sg: TStringGrid;
X: TEdit;
Y: TEdit;
ok: TButton;
exit: TButton;
procedure okClick(Sender: TObject);
procedure exitClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
bul:boolean; // объявление логической переменной (true or false)
a,b,i,j,x1,y1:integer;

implementation

{$R *.dfm}

procedure TForm1.okClick(Sender: TObject);
begin
for i:=0 to 8 do
for j:=0 to 8 do
sg.Cells[i,j]:=' '; //Отчистка окна стрингрида
try begin // позволяет избежать фатальные ошибки
x1:=strtoint(x.text)-1; // перевод значения текстового в числовое
y1:=strtoint(y.Text)-1;
if (x1>-1) and (x1<8) and (y1>-1) and (y1<8) then // проверка корректности ввода
begin
for i:=0 to 8 do
for j:=0 to 8 do
inc(i);
if (x1-i>-1) and (y1-i>-1) then
sg.cells[x1-1,y1-2]:='*'
else bul:=true;
until bul;
i:=0;
bul:=false;
repeat
inc(i);
if (x1-i>-1) and (y1-i>-1) then
sg.cells[x1-2,y1-1]:='*'
else bul:=true;
until bul;
i:=0;
bul:=false;
repeat
inc(i);
if (x1+i<8) and (y1+i<8) then
sg.cells[x1+1,y1+2]:='*'
else bul:=true;
until bul;
i:=0;
bul:=false;
repeat
inc(i);
if (x1+i<8) and (y1+i<8) then
sg.cells[x1+2,y1+1]:='*'
else bul:=true;
until bul;
i:=0;
bul:=false;
repeat

inc(i);
if (x1-i>-1) and (y1+i<8) then
sg.cells[x1-1,y1+2]:='*'
else bul:=true;
until bul;
i:=0;
bul:=false;
repeat

inc(i);
if (x1-i>-1) and (y1+i<8) then
sg.cells[x1-2,y1+1]:='*'
else bul:=true;
until bul;
i:=0;
bul:=false;
repeat
inc(i);
if (x1-i>-1) and (y1+i<8) then
sg.cells[x1+2,y1-1]:='*'
else bul:=true;
until bul;
i:=0;
bul:=false;
repeat

inc(i);
if (x1+i<8) and (y1-i>-1) then
sg.cells[x1+1,y1-2]:='*'
else bul:=true;
until bul;
sg.cells[x1,y1]:='K';
end;
end;
except
Showmessage('Введите адекватные числа'); // ошибка ввода
end;
end;

procedure TForm1.exitClick(Sender: TObject);
begin
Application.Terminate;
end;

end.
Natasha666 вне форума Ответить с цитированием
Старый 20.05.2009, 09:27   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

Код:
for i:=0 to 8 do
for j:=0 to 8 do
inc(i);
if (x1-i>-1) and (y1-i>-1) then
Так делать нельзя. переменная I в цикле итак каждый раз увеличивается на 1

Последний раз редактировалось fbus; 20.05.2009 в 09:54.
fbus вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в коде Jora_Kornev Общие вопросы Delphi 10 10.01.2009 17:00
Помогите найти ошибку в коде! alex2008ean Паскаль, Turbo Pascal, PascalABC.NET 1 27.12.2008 18:31
Помогите найти ошибку в коде C++ Жека:) Помощь студентам 15 29.10.2008 11:32
Памагите найти ошибку в коде...С++ Goblin Помощь студентам 1 13.05.2008 18:15