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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2014, 13:28   #1
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
Восклицание Вывод массива

Помогите найти ошибку при выводе двумерного массива в таблицу Grid
Код:
procedure TForm12.Button6Click(Sender: TObject);
begin
   StringGrid1.cells[i,j]:=' ';
   randomize;
     for i:=1 to 10 do
      for j:=1 to 10 do
       begin
         c[i,j]:=random(100)-30;
      StringGrid1.cells[i,j]:=StringGrid1.cells[i,j]+IntToStr(c[i,j]);
       end;
end;
Форма выглядит вот так:
Изображения
Тип файла: jpg Безымянный.jpg (27.3 Кб, 143 просмотров)

Последний раз редактировалось Stilet; 08.07.2014 в 13:49.
ksesh вне форума Ответить с цитированием
Старый 08.07.2014, 13:37   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,821
По умолчанию

Код:
StringGrid1.cells[i,j]:=' ';
Чему здесь равны i, j?

Код:
for i:=1 to 10 do
for j:=1 to 10 do
В СтрингГриде счет идет от 0.
p51x вне форума Ответить с цитированием
Старый 09.07.2014, 00:14   #3
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
По умолчанию

StringGrid1.cells[i,j]:=' ';
сначала вроде пустому множеству.
ksesh вне форума Ответить с цитированием
Старый 09.07.2014, 02:10   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
StringGrid1.cells[i,j]:=' ';
в переменных i и j у Вас МУСОР!!!

Хотите в этом убедиться?!
Так легко:
Код:
procedure TForm12.Button6Click(Sender: TObject);
begin
   ShowMessage('Смотри,переменная i = '+IntToStr(i)+' j = '+IntToStr(j));
   StringGrid1.cells[i,j]:=' ';
   randomize;
     for i:=1 to 10 do
это ошибка номер раз.

ошибка номер два.

Переменные для циклов нужно объявлять ЛОКАЛЬНО:
Код:
procedure TForm12.Button6Click(Sender: TObject);
var i, j : integer;
begin
...
ошибка номер три.
в StringGrid.Cells сначала задаётся номер столбца, потом номер строки.

Может быть, Вы нам расскажете, какую задачу решаете.
Потом расскажете, какую ошибку Вы имеете в виду:
Цитата:
Помогите найти ошибку при выводе двумерного массива в таблицу Grid
А вот потом и поговорим?!

и ещё. а какой, по вашему смысл должен выполнять код
Цитата:
Код:
StringGrid1.cells[i,j]:=' ';
??? Может быть, Вы расскажете, что хотели написать и тут Вам подскажут, как это сделать?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.07.2014, 10:43   #5
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
Восклицание

Задание: отсортировать каждый элемент матрицы в порядке возрастания.
Все коды в форму вставляются. 1 кнопка должна сформировать рандомно массив 10Х10 элементов и вывести в таблицу StringGrid1. Вторая кнопка должна отсортировать все элементы этого массива методом "пузырька" в порядке возрастания и вывести во вторую таблицу StringGrid2.
ksesh вне форума Ответить с цитированием
Старый 09.07.2014, 11:12   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
отсортировать каждый элемент матрицы в порядке возрастания.
извините, пожалуйста, у Вас русский язык не родной?
потому как нельзя отсортировать КАЖДЫЙ элемент массива.

Ну это звучит так. У вас есть друзья. Они разного роста.
Поставьте КАЖДОГО из них по росту.

Так. допустим, это банальная опечатка. Требуется отсортировать ВСЕ элементы массива по возрастанию.
ОК.
но тут проблема в том, что массив двухмерный (матрица).
А его можно просматривать, как построчно, так и по столбцам.

например, если есть массив 4 x 4:
Код:
16  11   2  17
 1   7   9   4
12  10   3   5
 6   8  15  14
каком массив должен получится после сортировки?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.07.2014, 12:35   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,821
По умолчанию

Цитата:
но тут проблема в том, что массив двухмерный (матрица).
А его можно просматривать, как построчно, так и по столбцам.
А еще по диагоналям, по парам, по суммам... Проблема в том, что двумерный массив по определению не является упорядоченным множеством.

П.С. А потом еще говорят - зачем математику учить программистам...
p51x вне форума Ответить с цитированием
Старый 09.07.2014, 12:54   #8
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
Восклицание

Каюсь, ошиблась. Сортироваться должны все элементы матрицы построчно в порядке возрастания.
ksesh вне форума Ответить с цитированием
Старый 09.07.2014, 15:42   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

изучайте:
StringGridSortExample.rar

суть:
Код:
const
  ArrayRowCount = 10;
  ArrayColCount = 10;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    StringGrid2: TStringGrid;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    c : array[1..ArrayRowCount,1..ArrayColCount] of integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;

  StringGrid1.FixedCols := 0;   StringGrid1.FixedRows := 0;
  StringGrid1.ColCount := ArrayColCount;
  StringGrid1.RowCount := ArrayRowCount;
  StringGrid1.Width := 560;
  StringGrid1.DefaultColWidth := (StringGrid1.Width - 20) div ArrayColCount;
  StringGrid2.DefaultColWidth := 54;
  StringGrid2.Width := 560;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i, j : integer;
begin
  // заполнить массив C случайными числами
  for i:=1 to ArrayRowCount do
   for j:=1 to ArrayColCount do
         c[i,j]:=random(100)-30;

  // вывести массив С в StringGrid1
  for i:=1 to ArrayRowCount do
   for j:=1 to ArrayColCount do
         StringGrid1.cells[j-1, i-1] := IntToStr(c[i,j]);
end;

procedure TForm1.Button2Click(Sender: TObject);
var i, j, r : integer;
  temp : integer;
begin
   // отсортируем массив построчно:
   //    все элементы матрицы построчно в порядке возрастания
   for r := 1 to ArrayRowCount do begin

      {сортировка строки C[r] методом простых обменов}
      for i := 1 to  ArrayColCount - 1 do
        for j := i+1 to ArrayColCount  do
          if c[r,i] > c[r,j] then begin
            temp := c[r,i];
            c[r,i] := c[r,j];
            c[r,j] := temp;
          end;
   end;


   // всё. Теперь отсортированный массив выведем в StringGrid2
  for i:=1 to ArrayRowCount do
   for j:=1 to ArrayColCount do
         StringGrid2.cells[j-1, i-1] := IntToStr(c[i,j]);

end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.07.2014, 11:18   #10
ksesh
Пользователь
 
Регистрация: 23.05.2014
Сообщений: 26
Радость

спасиииибоооо огроммное!!!!!!!!!!!!!!! всё идёт!!!! обнимаю вас и цалую!!!!!!!
ksesh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
Вывод массива McFrey Помощь студентам 2 26.12.2011 20:50
вывод массива saix Общие вопросы C/C++ 3 26.03.2011 23:13
вывод массива DrSMERTb C++ Builder 6 23.02.2011 18:07
Вывод массива в текст valeologiya Общие вопросы C/C++ 0 06.11.2009 11:58