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

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

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2018, 21:24   #1
kostya_hor
Пользователь
 
Регистрация: 23.05.2018
Сообщений: 58
По умолчанию Данная целочисленная матрица размера 6x9. Найти матрицу, выходит из данной:

Данная целочисленная матрица размера 6x9. Найти матрицу, выходит из данной:
а) Перестановкой столбцов - первого с последним, второго предпоследним и т.д.
б) Перестановкой строк - первой с последней, второй с предпоследней и т.д.

У меня есть код в Паскале,но я не знаю переделать его в Делфи и вывести в StringGrid
Я ток учусь и поэтому немного не понимаю

а)


Код:
const m=6;
      n=9;
var a:array[1..m,1..n] of integer;
    i,j:byte;
    x:integer;
begin

randomize;
writeln('Pohatkova matrica:');
for i:=1 to m do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=random(20);
    write(a[i,j]:4);
   end;
  writeln;
 end;
for j:=1 to n div 2 do
for i:=1 to m do
 begin
  x:=a[i,j];
  a[i,j]:=a[i,n-j+1];
  a[i,n-j+1]:=x
 end;
writeln('Perestanovka stovpciv:');
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln
 end;
readln
end.

б)


Код:
const n=6;
      m=9;
var a:array[1..n,1..m]of integer;
    i,j,s,k:integer;
begin
   
randomize;
writeln('Pochatkova matrica:');
for i:=1 to n do
  begin
    for j:=1 to m do
      begin
       a[i,j]:=random(20);
       write(a[i,j]:4);
      end;
    writeln;
  end;
for i:=1 to n div 2 do
for j:=1 to m do
   begin
     s:=a[i,j];
     a[i,j]:=a[n-i+1,j];
     a[n-i+1,j]:=s;
   end;
Writeln('Perestanovka ryadkiv:');
for i:=1 to n do
  begin
    for j:=1 to m do
    write(a[i,j]:4);
    writeln;
  end;
readln
end.
Изображения
Тип файла: png Безымянный.png (18.1 Кб, 120 просмотров)

Последний раз редактировалось kostya_hor; 24.05.2018 в 22:13.
kostya_hor вне форума Ответить с цитированием
Старый 24.05.2018, 21:39   #2
kostya_hor
Пользователь
 
Регистрация: 23.05.2018
Сообщений: 58
По умолчанию

я пытаюсь вывести так
StringGrid1.Cells[i,j]:=inttostr(a);
но это не подходит
да,я знаю я рак
kostya_hor вне форума Ответить с цитированием
Старый 24.05.2018, 21:52   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от kostya_hor Посмотреть сообщение
Код:
StringGrid1.Cells[i,j]:=inttostr(a);
- А, нет, номер строки, номер столбца массива в Паскале все-таки через запятую. Ну, может быть здесь ошибка в том, что IntToStr(a) - нужно написать с большими буквами I, T и S - как я написал.
Скажете потом, что помогло, ладно?

Последний раз редактировалось Cuprum5; 24.05.2018 в 22:05. Причина: Изменил сообщение.
Cuprum5 вне форума Ответить с цитированием
Старый 24.05.2018, 22:11   #4
kostya_hor
Пользователь
 
Регистрация: 23.05.2018
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
- А, нет, номер строки, номер столбца массива в Паскале все-таки через запятую. Ну, может быть здесь ошибка в том, что IntToStr(a) - нужно написать с большими буквами I, T и S - как я написал.
Скажете потом, что помогло, ладно?
Нет,не помогло.Там без разницы с какой буквы писать
Оно пишет ошибку
There is no overloaded version of 'IntToStr' that can be called with these arguments
kostya_hor вне форума Ответить с цитированием
Старый 24.05.2018, 22:13   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

в первом случае заменяете вот этот код:
Цитата:
Сообщение от kostya_hor Посмотреть сообщение
Код:
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln
 end;
заменяем на вот этот:
Код:
for i:=1 to m do
  for j:=1 to n do
     StringGrid1.Cells[j,i] := IntToStr( a[i,j] );


во втором аналогичный код
Цитата:
Код:
for i:=1 to n do
  begin
    for j:=1 to m do
    write(a[i,j]:4);
    writeln;
  end;
заменяете на
Код:
for i:=1 to n do
    for j:=1 to m do
     StringGrid1.Cells[j,i] := IntToStr( a[i,j] );

p.s. Только так я и не понял, зачем делать РАЗНЫЕ матрицы:

Цитата:
Сообщение от kostya_hor Посмотреть сообщение
Код:
var a:array[1..m,1..n] of integer;
Цитата:
Сообщение от kostya_hor Посмотреть сообщение
Код:
var a:array[1..n,1..m]of integer;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.05.2018, 22:21   #6
kostya_hor
Пользователь
 
Регистрация: 23.05.2018
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

p.s. Только так я и не понял, зачем делать РАЗНЫЕ матрицы:
Просто сначала это были две разные программы,а сейчас нужно чтобы одна кнопка перестанавливала строки,а другая столбцы
kostya_hor вне форума Ответить с цитированием
Старый 24.05.2018, 22:26   #7
kostya_hor
Пользователь
 
Регистрация: 23.05.2018
Сообщений: 58
По умолчанию

оно что-то выводит ток в один StringGrid,а в другой пусто.
Код:
rocedure TForm4.Button1Click(Sender: TObject);
const
     m=6;
     n=9;
var
i,j:byte;
x:integer;
a:array[1..m,1..n] of integer;

begin
randomize;
for i:=1 to m do

 begin
  for j:=1 to n do

   begin
    a[i,j]:=random(20);
    end;
 StringGrid1.Cells[j,i] := IntToStr( a[i,j] );
 end;
 for j:=1 to n div 2 do
for i:=1 to m do

 begin
  x:=a[i,j];
  a[i,j]:=a[i,n-j+1];
  a[i,n-j+1]:=x
   end;
for i:=1 to n do
    for j:=1 to m do
     StringGrid1.Cells[j,i] := IntToStr( a[i,j] );
 end;
kostya_hor вне форума Ответить с цитированием
Старый 24.05.2018, 22:35   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от kostya_hor Посмотреть сообщение
оно что-то выводит ток в один StringGrid,а в другой пусто.
ну, как Вы написали, так оно и делает. Вы у себя в коде StringGrid2 видите? Вот он и не заполняется.

я предлагаю Вам вынести Randomize в событие создание формы (onCreate())
а на кнопке поставить такой код:

Код:
Procedure TForm4.Button1Click(Sender: TObject);
const
     n=6;
     m=9;
var
  i,j:byte;
  x:integer;
  a:array[1..n,1..m] of integer;

begin
  // заполнить матрицу случайными числами и вывести в первый грид
  for i:=1 to n do
    for j:=1 to m do
      begin
        a[i,j]:=random(20);
        StringGrid1.Cells[j,i] := IntToStr( a[i,j] );
      end;

   // преобразовать
   for j:=1 to m div 2 do
      for i:=1 to n do
       begin
         x:=a[i,j];
         a[i,j]:=a[i,m-j+1];
         a[i,m-j+1]:=x
       end;

  // вывести преобразованную матрицу во втрой грид
  for i:=1 to m do
    for j:=1 to n do
       StringGrid2.Cells[j,i] := IntToStr( a[i,j] );

end;
кстати, при таком подходе исходная матрица будет при каждом нажатии кнопки меняться.
Мне кажется, что это Вы неправильно спроектировали.
Нужно исходную матрицу заполнить один раз (или заполнять по отдельной кнопке).
Ведь к процедурам "Перестановка а)" и "Перестановка б)" заполнение исходной матрицы не отностится, верно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.05.2018, 22:55   #9
kostya_hor
Пользователь
 
Регистрация: 23.05.2018
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
кстати, при таком подходе исходная матрица будет при каждом нажатии кнопки меняться.
Мне кажется, что это Вы неправильно спроектировали.
Нужно исходную матрицу заполнить один раз (или заполнять по отдельной кнопке).
Ведь к процедурам "Перестановка а)" и "Перестановка б)" заполнение исходной матрицы не отностится, верно?
а как сделать чтобы одна StringGrid была заполненной,а другая менялась при нажатии одной из кнопок?4
а как сделать чтобы одна StringGrid была заполненной,а другая менялась при нажатии одной из кнопок?

Последний раз редактировалось kostya_hor; 24.05.2018 в 22:57.
kostya_hor вне форума Ответить с цитированием
Старый 24.05.2018, 22:59   #10
kostya_hor
Пользователь
 
Регистрация: 23.05.2018
Сообщений: 58
По умолчанию

Мне потом нужно будет чтобы это все в ворд вывелось,но с этим я буду мучаться сам
kostya_hor вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данная целочисленная матрица размера M N, элементы которой могут приобретать значения от 0 до 100. Найти количество столбцов, похожих на последний столбец этой матрицы Nenero Помощь студентам 1 22.02.2018 08:39
Дана целочисленная матрица размера MXN. Найти ее столбцы, все элементы которых различны.Эти столбцы должны закрашиваться. Kate21143 Общие вопросы Delphi 2 11.06.2014 07:54
Найти ошибку в коде (Для данной целочисленной матрицы размером n*m найти матрицу из 0 и 1...) код на C camel5 Помощь студентам 1 26.11.2013 06:11
Дана целочисленная матрица размера M × N. Найти номер последнего из ее столбцов, содержащих равное количе tanjusha Общие вопросы C/C++ 4 01.04.2010 20:03