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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2013, 11:54   #1
ADK01
Пользователь
 
Регистрация: 23.02.2013
Сообщений: 10
По умолчанию Delphi. Ход конем

Здравствуйте!

Есть задача по делфи:

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

Буду благодарен за любую помощь!

На форме нарисовал следующее:
Изображения
Тип файла: jpg delphi_k.jpg (42.1 Кб, 73 просмотров)
ADK01 вне форума Ответить с цитированием
Старый 23.02.2013, 12:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
var i,j:integer;
begin
  with StringGrid1 do begin
    for i:=0 to RowCount-1 do begin
      for j:=0 to ColCount-1 do begin
        Cells[i,j]:='';
      end;
    end;
    i:=Col;j:=Row;
    Cells[i,j]:='K';
     Cells[i,j+1]:='*';Cells[i,j+2]:='*';Cells[i+1,j+2]:='*';
     Cells[i,j+1]:='*';Cells[i,j+2]:='*';Cells[i-1,j+2]:='*';
     Cells[i,j-1]:='*';Cells[i,j-2]:='*';Cells[i+1,j-2]:='*';
     Cells[i,j-1]:='*';Cells[i,j-2]:='*';Cells[i-1,j-2]:='*';

     Cells[i+1,j]:='*';Cells[i+2,j]:='*';Cells[i+2,j+1]:='*';
     Cells[i+1,j]:='*';Cells[i+2,j]:='*';Cells[i+2,j-1]:='*';
     Cells[i-1,j]:='*';Cells[i-2,j]:='*';Cells[i-2,j+1]:='*';
     Cells[i-1,j]:='*';Cells[i-2,j]:='*';Cells[i-2,j-1]:='*';

  end;
end;
i и j пусть принимают координаты коняки.
Идея понятна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.02.2013, 13:00   #3
ADK01
Пользователь
 
Регистрация: 23.02.2013
Сообщений: 10
По умолчанию

Спасибо за ответ!

Т.е. получается координаты m и n будут равняться i и j? А не нужно ли здесь задавать массив mas:=array [1..8,1..8] of char для i и j? Или нужно сделать массив с двумя значениями m и n, которые и будут i и j, и прикрутить его к Edit'ам?

Может я не правильно размышляю - с массивами еще не очень, но пытаюсь понять.

Вот попробовал написать код:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;
  sg:array[1..8,1..8] of byte;
begin
  i:=StrToInt(Edit1.Text);
  j:=StrToInt(Edit2.Text);
    for i:=1 to 8 do begin
      for j:=1 to 8 do begin
        sg[i,j]:=StrToInt(StringGrid1.Cells[i,j])
      end;
    end;

    with StringGrid1 do begin
      for i:=1 to 8 do begin
      for j:=1 to 8 do begin
        Cells[i,j]:='0';
      end;
    end;
    i:=Col;j:=Row;
    StringGrid1.Cells[i,j]:='K';
     Cells[i+1,j+2]:='*';
     Cells[i+2,j+1]:='*';
     Cells[i+2,j-1]:='*';
     Cells[i+1,j-2]:='*';
     Cells[i-1,j-2]:='*';
     Cells[i-1,j-1]:='*';
     Cells[i-2,j+1]:='*';
     Cells[i-1,j+2]:='*';

  end;
end;

end.
Но при нажатии на кнопку выдает ошибку Project raised exeption class EConvertError with message "" is not a valid integer value.

Подскажите, в чем проблема.

Последний раз редактировалось Stilet; 23.02.2013 в 19:00.
ADK01 вне форума Ответить с цитированием
Старый 23.02.2013, 15:42   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Зачем Вам массив?
Код:
for i:=1 to 8 do begin 
      for j:=1 to 8 do begin 
        sg[i,j]:=StrToInt(StringGrid1.Cells[i,j]) 
      end; 
    end;
Выбросьте

Ошибка возникает, т.к. в стринггриде все клетки пустые, и StrToInt не может выполниться.
Кстати, в сами едиты тоже не забудьте вписать числа.

Код:
i:=Col;j:=Row;
Тоже выбросьте, т.к. берете значения из едитов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.02.2013, 15:55   #5
ADK01
Пользователь
 
Регистрация: 23.02.2013
Сообщений: 10
По умолчанию

Спасибо большое!

Ошибка действительно больше не появляется. Получившийся код

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;

begin
  i:=StrToInt(Edit1.Text);
  j:=StrToInt(Edit2.Text);

    with StringGrid1 do begin
      for i:=0 to 8 do begin
      for j:=0 to 8 do begin
        Cells[i,j]:='0';
      end;
    end;

    StringGrid1.Cells[i,j]:='K';
     Cells[i+1,j+2]:='*';
     Cells[i+2,j+1]:='*';
     Cells[i+2,j-1]:='*';
     Cells[i+1,j-2]:='*';
     Cells[i-1,j-2]:='*';
     Cells[i-1,j-1]:='*';
     Cells[i-2,j+1]:='*';
     Cells[i-1,j+2]:='*';

  end;
end;

end.
Правда с любыми значениями i и j теперь все поле просто заполняется нулями.
ADK01 вне форума Ответить с цитированием
Старый 23.02.2013, 16:25   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Код:
 with StringGrid1 do begin
    for i:=0 to 7 do
        for j:=0 to 7 do
            Cells[i,j]:='0';

     i:=StrToInt(Edit1.Text);
     j:=StrToInt(Edit2.Text);

     Cells[i,j]:='K';
     Cells[i+1,j+2]:='*';
     Cells[i+2,j+1]:='*';
     Cells[i+2,j-1]:='*';
     Cells[i+1,j-2]:='*';
     Cells[i-1,j-2]:='*';
     Cells[i-1,j-1]:='*';
     Cells[i-2,j+1]:='*';
     Cells[i-1,j+2]:='*';
  end;
Проглядел этот момент. У Вас получалось, что значения i и j инициализируются эдитами, а потом эти переменные используются для цикла.

[цитата]Эхх, проиграл целую минуту BDA)))[/цитата]
Лол =)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 23.02.2013 в 16:32.
BDA вне форума Ответить с цитированием
Старый 23.02.2013, 16:26   #7
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Код:
i:=StrToInt(Edit1.Text);
  j:=StrToInt(Edit2.Text);
У вас значения этих переменных потом "затираются" циклами. Либо используйте другие переменные для хранения, либо меняйте местами строки кода.

Эхх, проиграл целую минуту BDA)))
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 23.02.2013, 16:31   #8
ADK01
Пользователь
 
Регистрация: 23.02.2013
Сообщений: 10
По умолчанию

Спасибо всем большое!
ADK01 вне форума Ответить с цитированием
Старый 23.02.2013, 19:02   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
теперь все поле просто заполняется нулями.
Смотри мой пример: У меня рисование происходит только во втором цикле. Соответственно выборка данных из Эдитов должна стоять вместо i:=Col;j:=Row; а не в самом начале.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.02.2013, 20:23   #10
ADK01
Пользователь
 
Регистрация: 23.02.2013
Сообщений: 10
По умолчанию

С рисованием символов "К", "*", "0" разобрался. Но возникло две проблемы, которые я не смог решить. Не могу понять как их решить.

1. Если i или j такое, что i-1, j-1, i-2, j-2 будут отрицательными, то в итоге будет ошибка и решаться не будет.

2. Координаты по j идут сверху вниз, а надо снизу вверх. Т.е. если мы пишем j=2, то это будет не вторая клетка снизу, а седьмая (или вторая сверху).

Помогите, пожалуйста, разобраться.
ADK01 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ход конем m00nJinn Общие вопросы C/C++ 3 09.12.2011 18:58
Ход конем skorpi Помощь студентам 3 08.09.2011 09:03
Ход конем Etlau Помощь студентам 3 28.05.2010 19:16
Ход конем на Си Ekатерина Помощь студентам 2 02.05.2010 15:41
ход конем Zuuu92 Паскаль, Turbo Pascal, PascalABC.NET 1 29.04.2010 22:16