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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2022, 10:35   #11
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 483
По умолчанию

Цитата:
Сообщение от mr.stranger Посмотреть сообщение
Если заданы разные размеры для матрицы (не квадратная и/или нет четкой середины) то отправной элемент - слева, как на примере ниже
это что касается горизонтали, по вертикали так же (тот что выше)?
Снимок экрана от 2022-06-06 11-42-22.png

Снимок экрана от 2022-06-06 11-45-10.png

Последний раз редактировалось Valick; 06.06.2022 в 11:46.
Valick вне форума Ответить с цитированием
Старый 06.06.2022, 12:01   #12
mr.stranger
Пользователь
 
Регистрация: 02.05.2022
Сообщений: 52
По умолчанию

Да, средний элемент главной диагонали
mr.stranger вне форума Ответить с цитированием
Старый 06.06.2022, 17:11   #13
mr.stranger
Пользователь
 
Регистрация: 02.05.2022
Сообщений: 52
По умолчанию

Пока что вот так
Работает диагональка

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j,k,x,y: integer;
begin
with StringGrid1 do
for i := 1 to RowCount-1 do
for j := 1 to ColCount-1 do

with StringGrid1 do
for i := 1 to RowCount-1 do
for j := 1 to ColCount-1 do
if j <= i then
inc(k)
else
break;

with StringGrid1 do
if RowCount div 2 < ColCount div 2 then
x := RowCount div 2
else
x := ColCount div 2;
y := x;
j := 0;
for i := 0 to k-1  do
begin
StringGrid1.Cells[x, y] := IntToStr(k);
case j of
0:begin
dec(x);
dec(y);
if (x = 0) or (y = 0) or ((x - 1 >= 0) and (y - 1 >= 0) and (StringGrid1.Cells[x - 1, y - 1] <> '0')) then
j := 1;
end;

1:begin
dec(x);
dec(y);
if (x = 0) or (y = 0) or ((x - 2 >= 0) and (y - 2  >= 0) and (StringGrid1.Cells[x - 2, y - 2] <> '0')) then
j := j + 1;
end;
end;
WaitAMoment;
end;
end;
mr.stranger вне форума Ответить с цитированием
Старый 06.06.2022, 17:27   #14
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

В том то вся проблема. Вам надо определить в
Код:
case j of
...
1: //идем вниз
2: //шаг вправо
3: //идем вверх
4: //шаг вправо вниз по диагонали
end;
Если не поняли то, что надо сделать, тогда сначала сделайте вручную
Код:
case i of // Для приведенного вами примера из #1
 0: begin Cells[x,y] := inttostr(i + 1); x := x - 1; y := y - 1; end; // j = 0
 1: begin Cells[x,y] := inttostr(i + 1); x := x - 1; y := y - 1; end; // j = 0
 2: begin Cells[x,y] := inttostr(i + 1);             y := y + 1; end; // j = 1
 3: begin Cells[x,y] := inttostr(i + 1);             y := y + 1; end; // j = 1
 4: begin Cells[x,y] := inttostr(i + 1);             y := y + 1; end; // j = 1
 5: begin Cells[x,y] := inttostr(i + 1);             y := y + 1; end; // j = 1
 6: begin Cells[x,y] := inttostr(i + 1);             y := y + 1; end; // j = 1
 7: begin Cells[x,y] := inttostr(i + 1); x := x + 1;             end; // j = 2
 8: begin Cells[x,y] := inttostr(i + 1);             y := y - 1; end; // j = 3
 9: begin Cells[x,y] := inttostr(i + 1);             y := y - 1; end; // j = 3
10: begin Cells[x,y] := inttostr(i + 1);             y := y - 1; end; // j = 3
11: begin Cells[x,y] := inttostr(i + 1); x := x + 1; y := y + 1; end; // j = 4
12: begin Cells[x,y] := inttostr(i + 1);             y := y + 1; end; // j = 1
13: begin Cells[x,y] := inttostr(i + 1);             y := y + 1; end; // j = 1
14: begin Cells[x,y] := inttostr(i + 1); x := x + 1;             end; // j = 2
15: begin Cells[x,y] := inttostr(i + 1);             y := y - 1; end; // j = 3
16: begin Cells[x,y] := inttostr(i + 1); x := x + 1; y := y + 1; end; // j = 4
17: begin Cells[x,y] := inttostr(i + 1);                  break; end; // j = -1
end;
Потом придумайте условия при которых алгоритм должен менять направление

Последний раз редактировалось macomics; 06.06.2022 в 17:48.
macomics вне форума Ответить с цитированием
Старый 06.06.2022, 17:44   #15
mr.stranger
Пользователь
 
Регистрация: 02.05.2022
Сообщений: 52
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
0: begin
dec(x); dec(y);
if (x = 0) or (y = 0) or ((x - 1 >= 0) and (y - 1 >= 0) and (Cells[x - 1, y - 1] <> '0')) then j := 1;
end;
Аа, просто здесь по диагонали вводятся две ячейки, не доходит до угла, это сбило с толку
mr.stranger вне форума Ответить с цитированием
Старый 06.06.2022, 17:50   #16
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Значит я где-то в условиях просчитался. Но это легко можно исправить когда видишь результат.
macomics вне форума Ответить с цитированием
Старый 06.06.2022, 17:53   #17
mr.stranger
Пользователь
 
Регистрация: 02.05.2022
Сообщений: 52
По умолчанию

Пытаюсь исправить через обратный цикл downto, но чего-то не получается
mr.stranger вне форума Ответить с цитированием
Старый 06.06.2022, 17:57   #18
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Сделайте сначала так как в #14. Ручным способом. Там не надо никаких downto. Весь смысл в том, что надо сделать вариант функции f(t) где t - монотонно прирастающее значение. Далее все будет элементарно. По таймеру надо будет сделать вызов функции f(t++)
Код:
x := 2; y := 2; i := 0;
while true do begin
  Cells[x,y] := inttostr(i + 1);
  case i of // Для приведенного вами примера из #1
   0: begin dec(x); dec(y); end; // j = 0, x = 1, y = 1 if (x = 0) and (y = 0) then j := 1;
   1: begin dec(x); dec(y); end; // j = 0, x = 0, x = 0 if (x = 0) and (y = 0) then j := 1;
   2: begin         inc(y); end; // j = 1, x = 0, y = 1 if y = RowCount - 1 then j := 2;
   3: begin         inc(y); end; // j = 1, x = 0, y = 2 if y = RowCount - 1 then j := 2;
   4: begin         inc(y); end; // j = 1, x = 0, y = 3 if y = RowCount - 1 then j := 2;
   5: begin         inc(y); end; // j = 1, x = 0, y = 4 if y = RowCount - 1 then j := 2;
   6: begin         inc(y); end; // j = 1, x = 0, y = 5 if y = RowCount - 1 then j := 2;
   7: begin inc(x);         end; // j = 2, x = 1, y = 5 j := 3; Только 1 шаг - условия не нужно
   8: begin         dec(y); end; // j = 3, x = 1, y = 4 ...
   9: begin         dec(y); end; // j = 3, x = 1, y = 3
  10: begin         dec(y); end; // j = 3, x = 1, y = 2
  11: begin inc(x); inc(y); end; // j = 4, x = 2, y = 3
  12: begin         inc(y); end; // j = 1, x = 2, y = 4
  13: begin         inc(y); end; // j = 1, x = 2, y = 5
  14: begin inc(x);         end; // j = 2, x = 3, y = 5
  15: begin         dec(y); end; // j = 3, x = 3, y = 4
  16: begin inc(x); dec(y); end; // j = 4, x = 4, y = 5
  17: begin          break; end; // j = -1, x = 4, y = 5
  end;
  inc(i);
  WaitAMoment;
end;

Последний раз редактировалось macomics; 06.06.2022 в 18:40.
macomics вне форума Ответить с цитированием
Старый 08.06.2022, 14:09   #19
funny.weirdo
Пользователь
 
Регистрация: 24.05.2022
Сообщений: 15
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Весь смысл в том, что надо сделать вариант функции f(t)
Это ж вроде можно без функции сделать

Только не знаю, как, но вроде можно, нет?
funny.weirdo вне форума Ответить с цитированием
Старый 08.06.2022, 14:16   #20
mr.stranger
Пользователь
 
Регистрация: 02.05.2022
Сообщений: 52
По умолчанию

Цитата:
Сообщение от funny.weirdo Посмотреть сообщение
Это ж вроде можно без функции сделать

Только не знаю, как, но вроде можно, нет?
Ну я видел примеры, там саму функцию как function не писали
Делали через case
Просто его надо как-то правильно сформулировать, чтобы оно не вручную по шагам работало, а само
Вопрос только в том, как это сделать
mr.stranger вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с Edit, Timer, StringGrid Женька Good Помощь студентам 1 19.10.2012 22:08
Timer... Teleport Общие вопросы Delphi 13 14.09.2011 17:02
Timer или While? xrob Общие вопросы Delphi 7 24.08.2011 14:06
timer(vc++) NiCola999 Windows Forms 13 31.01.2011 06:00
Timer... Roof Общие вопросы Delphi 11 11.10.2007 12:57