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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2011, 12:02   #1
Abrokadawr
 
Регистрация: 03.11.2011
Сообщений: 8
По умолчанию Сдвиг элементов массива на 1 влево. Вывести матрицу в Memo

Дан массив из n (n=<10) элементов(кол-во указывается пользователем), заполненный цифрами.Создать и вывести матрицу, в которой выполняется сдвиг элементов так, чтобы по горизонтали все элементы сдвигались влево на одну позицию, а тот элемент который стоял слева первый - перемещался в конец, т.е.

Например: кол-во элементов n=4

Матрица

0 1 2 3
1 2 3 0
2 3 0 1
3 0 1 2

Сам код массива со сдвигом уже готов, подскажите как вот это чудо вывести в компонент Memo.

Код:
procedure TForm1.Button1Click(Sender: TObject);
 var kol,i,j,x:integer;
 mass : array of array of integer;
begin
  kol:=StrtoInt(SpinEdit1.Text);
  SetLength(mass, kol, kol);
  Memo1.Lines.Clear;

   for i:=0 to kol-1 do
    begin
    for j:=0 to kol-1 do
     mass[i,j]:=j;
     end;


   for i:=0 to kol-1 do//все строки
    begin
     x:=mass[i,0];//запомним первый элемент строки
      for j:=1 to kol-2 do//сдвинем элементы с 2 до предпоследнего на 1 влево
       mass[i,j]:=mass[i,j+1];
     mass[i,kol-1]:=x;//вставим в конец первый элемент
    end;



end;

end.
Abrokadawr вне форума Ответить с цитированием
Старый 04.11.2011, 15:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
var s : string;
....
begin
....

   Memo1.Lines.Clear; {сотрём всё содержимое в Memo1}

   {выведем массив в Memo}
   for i:=0 to kol-1 do
    begin
       s := '';
       for j:=0 to kol-1 do
          s := s + IntToStr(mass[i,j])+' ';
       Memo1.Lines.Append(s);
     end;
это по простому, без форматирования..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.11.2011, 20:42   #3
Abrokadawr
 
Регистрация: 03.11.2011
Сообщений: 8
По умолчанию

С этим кодом, который ты мне предложил, в Memo выводится просто в каждой строке все цифры по порядку, причем цифры "1" вообще не наблюдается, и каждая строка заканчивается нулем. Т.е. например кол-во элементов 4, что получаем на выходе:

0 2 3 0
0 2 3 0
0 2 3 0
0 2 3 0

А должно быть:

0 1 2 3
1 2 3 0
2 3 0 1
3 0 1 2

Мой код сдвига наврял-ли неправильный, проверял. Но всё же посмотрите, может в моем коде ошибка...
Abrokadawr вне форума Ответить с цитированием
Старый 04.11.2011, 23:13   #4
Хамяг
Форумчанин
 
Аватар для Хамяг
 
Регистрация: 22.08.2008
Сообщений: 105
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Count,i,j: Cardinal;
  Mas: array of array of Cardinal;
  S: String;
begin
  Count:=StrToIntDef(Edit1.Text,0);
  Edit1.Text:=IntToStr(Count);
  if Count <> 0 then
  begin
    SetLength(Mas,Count,Count);
    for i:=0 to Count-1 do
      for j:=0 to Count-1 do
      begin
        Mas[i,j]:=j+i;
        if Mas[i,j] > Count-1 then Mas[i,j]:=Mas[i,j]-Count;
      end;
    Memo1.Clear;
    for i:=0 to Count-1 do
    begin
      S:='';
      for j:=0 to Count-1 do S:=S+IntToStr(Mas[i,j])+' ';
      if Length(S) > 0 then S:=Copy(S,1,Length(S)-1);
      Memo1.Lines.Add(S);
    end;
    SetLength(Mas,0,0);
    Mas:=nil;
  end;
end;
Хамяг вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элементов массива и сдвиг Alex11223 Паскаль, Turbo Pascal, PascalABC.NET 1 12.01.2011 20:01
Описать процедуру,осуществляющую циклический сдвиг элементов массива на k позиций Bloodpoisoning Общие вопросы C/C++ 0 29.11.2010 15:50
Не получается циклический сдвиг элементов списка влево Джиксер Общие вопросы C/C++ 5 02.06.2010 23:38
КАК повернуть матрицу на 90 градусов вправо (или влево). RomT24 Помощь студентам 15 09.12.2009 10:52