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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2010, 15:53   #11
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию

как удалить элемент в массиве заданный пользователем. как вообще делается удаление?
Multiman вне форума Ответить с цитированием
Старый 28.11.2010, 16:37   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Перезаписываются все ячейки после него в цикле в новую позицию.
т.е. следующая ячейка записывается в удаляемый элемент, следующая за ней в ту позицию где первая была и т.д.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.11.2010, 16:42   #13
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Перезаписываются все ячейки после него в цикле в новую позицию.
т.е. следующая ячейка записывается в удаляемый элемент, следующая за ней в ту позицию где первая была и т.д.
И так как массив динамический то он позволяет делать таблицу (матрицу) с разными длинами строк(столбцов).
Ybn2 вне форума Ответить с цитированием
Старый 28.11.2010, 19:23   #14
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию

Не догоняю как это цикл замутить...( уже много информации перечитал все равно не получается(
Multiman вне форума Ответить с цитированием
Старый 29.11.2010, 19:21   #15
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию

Help!!! как сделать эту подпрограмму???
Multiman вне форума Ответить с цитированием
Старый 29.11.2010, 23:00   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пример в архиве.

вот код.
Код:
unit DynArrayExampleUnit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    StringGrid1: TStringGrid;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Button2: TButton;
    chbLinearNumbers: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TDynArray = array of array of integer;

var
  Form1 : TForm1;
  mas : TDynArray;

implementation

{$R *.DFM}

procedure MoveOneElementWithShift( Row, Col : integer; var M : TDynArray);
var
  i, j,
    MaxJ, MasPosition, NextI, NextJ : integer;
begin
  for i := Row to Length(M) - 1 do begin
     if (i = Row)
        then j := Col
        else j := 0;
     if (i = (Length(M)-1))
        then MaxJ := Length(M[i]) - 2
        else MaxJ := Length(M[i]) - 1;
     while j <= MaxJ do begin
        MasPosition := i*Length(M[i]) + j;
        NextI := (MasPosition + 1) div Length(M[i]);
        NextJ := (MasPosition + 1) mod Length(M[i]);
        M[i, j] := M[NextI, NextJ];
        inc(j);
     end;

     {если последняя строка, уменьшим размер последней строчки на 1}
     if (i = (Length(M)-1))
       then if Length(M[i])>0 then SetLength(M[i], Length(M[i]) - 1);
  end;
  if Length(M[Length(M)-1]) = 0 then
              SetLength(M, Length(M) - 1)

end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: integer;
begin
  Randomize;

  StringGrid1.FixedRows := 0;
  StringGrid1.FixedCols := 0;

  SetLength(Mas, StrToInt(Edit1.Text), strToInt(Edit2.Text));
  StringGrid1.RowCount := StrToInt(Edit1. Text);
  StringGrid1.ColCount := strToInt(Edit2. Text);
  for i := 0 to Length(mas) - 1 do
    for j := 0 to Length(mas[i]) - 1 do
    begin
      if chbLinearNumbers.Checked then
         Mas[i, j] := i*Length(mas[i])+j+1
      else
         Mas[i, j] := StrToInt(Edit3.text) + Random(StrToInt(Edit4.Text) - StrToInt(Edit3.text) + 1);
         
      StringGrid1.Cells[j, i] := IntToStr(Mas[i, j]);
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i, j: integer;
begin
  if (StringGrid1.Row+1>Length(mas)) then begin
    Application.MessageBox('Ячейка не указывает на элемент массива', 'Ошибка', MB_ICONINFORMATION or MB_OK);
    Exit;
  end;
  if (StringGrid1.Col+1>Length(mas[StringGrid1.Row])) then begin
    Application.MessageBox('Ячейка не указывает на элемент массива', 'Ошибка', MB_ICONINFORMATION or MB_OK);
    Exit;
  end;

  MoveOneElementWithShift( StringGrid1.Row, StringGrid1.Col, Mas );

  for i := 0 to StringGrid1.RowCount-1  do
    for j := 0 to StringGrid1.ColCount-1 do
    begin
      StringGrid1.Cells[j, i] := '';
    end;


  for i := 0 to Length(mas) - 1 do
    for j := 0 to Length(mas[i]) - 1 do
    begin
      StringGrid1.Cells[j, i] := IntToStr(Mas[i, j]);
    end;

end;

end.

Только умоляю, попробуйте разобраться, как оно работает, самостоятельно...
ну, или обратитесь к помощи форумчан.
Вложения
Тип файла: rar DynArrayExample1.rar (157.0 Кб, 10 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические массивы Цветик Общие вопросы C/C++ 1 22.11.2010 08:46
динамические массивы - C++ ? denes Общие вопросы C/C++ 31 18.06.2010 10:57
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
Динамические массивы Matr1x Общие вопросы C/C++ 5 07.12.2009 13:38