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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2015, 14:26   #1
dubsteppaman
 
Аватар для dubsteppaman
 
Регистрация: 28.03.2015
Сообщений: 7
Восклицание Заполнение ячеек таблицы по определенному правилу.

Добрый день, уважаемые форумчане! Знаю, возможно вы начнёте кидаться камнями и прочими тяжёлыми предметами, говоря, что 300 лет тому назад разбиралась подобная задача. Суть такова, мне нужно переделать два алгоритма для заполнения StringGrid разными способами (в данном случае по зигзагу и по спирали). Мои коды умеют делать это только для квадратных таблиц, мне бы хотелось, чтобы они умели заполнять также прямоугольные таблицы MxN. Прошу, помогите переделать (или предложите свой) код. Заранее благодарен!

Код:
//=================== "Заполнение по зигзагу" ==================
Procedure ZigZag(var m,n:integer; StringGrid1:TStringGrid; TrackBar1:TTrackBar);
  var i,j,k,q: integer;
Begin
q:=0;
  With StringGrid1 do
    begin
      m:=RowCount-1;
      n:=ColCount-1;
 
      For i:=1 to 2*n-1 do
        begin
          if i>n then k:=n else k:=i;
          if i mod 2 = 1 then
          for j:=1+i-k to k do
            begin
              inc(q);
              Cells[j,1-j+i]:=IntToStr(q);
              Delay(Trunc(1000/TrackBar1.Position));
            end
          else
            for j:=k downto 1+i-k do
              begin
                inc(q);
                Cells[j,1-j+i]:=IntToStr(q);
                Delay(Trunc(1000/TrackBar1.Position));
              end;
        end;
    MessageDlg('Таблица заполнена!', mtInformation, [mbOk], 0);
    end;
end;
 
//================ "Заполнение спиралью" ===============
Procedure Spiral(var m,n:integer; StringGrid1:TStringGrid; TrackBar1:TTrackBar);
   var i,j,k,p:integer;
Begin
i:=0;
k:=0;
p:=1;
 
  with StringGrid1 do
    begin
    m:=RowCount-1;
    n:=ColCount-1;
 
    while i<n*m do
      begin
        inc(k);
 
          for j:=k to m-k+1 do
            begin
              inc(i);
              Cells[j,k]:=IntToStr(p);
              inc(p);
              Delay(Trunc(1000/TrackBar1.Position));
            end;
 
          for j:=k+1 to n-k+1 do
            begin
              inc(i);
              Cells[m-k+1,j]:=IntToStr(p);
              inc(p);
              Delay(Trunc(1000/TrackBar1.Position));
            end;
 
          for j:=m-k downto k do
            begin
              inc(i);
              Cells[j,n-k+1]:=IntToStr(p);
              inc(p);
              Delay(Trunc(1000/TrackBar1.Position));
            end;
 
          for j:=n-k downto k+1 do
            begin
              inc(i);
              Cells[k,j]:=IntToStr(p);
              inc(p);
              Delay(Trunc(1000/TrackBar1.Position));
            end;
    end;
    MessageDlg('Таблица заполнена!', mtInformation, [mbOk], 0);
  end;
end;
dubsteppaman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анимированное заполнение ячеек таблицы StringGrid разными способами dubsteppaman Помощь студентам 15 06.04.2015 13:59
Заполнение ячеек таблицы gerka997 Microsoft Office Access 0 26.10.2014 14:06
Полное заполнение таблицы в общем доступе/, но без права повторного редактирования ячеек после сохранения Print Microsoft Office Excel 3 01.10.2011 13:20
сформировать списки по определенному правилу Shindji Помощь студентам 9 17.02.2010 14:55
поиск и заполнение ячеек таблицы Окоча Юра Microsoft Office Excel 2 16.01.2010 19:00