Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.04.2017, 11:31
ceccu9l ceccu9l вне форума
Прохожий
 
Регистрация: 22.04.2017
Сообщения: 1
Версия Delphi: Delphi XE4
Репутация: 10
По умолчанию массив

Дополните программу пожалуйста, нужно вывести отсортированный массив из массива2 (удалить повторяющиеся элементы(оставить по 1), и отсортировать полученный массив в порядке возрастания)+ желательно комментарии к программе(что бы попытаться разобраться).
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  a:array[1..15,1..15] of integer;
  n,m:integer;
implementation

{$R *.dfm}
             //кнопка создания матрицы
procedure TForm1.Button1Click(Sender: TObject);
var k:integer;
begin
val(Edit1.Text,n,k);
//размеры таблицы 1
n:=2*n+1;
StringGrid1.RowCount:=n; //количество строк таблицы 1
StringGrid1.ColCount:=n; //количество столбцов таблицы 1
m:=4*(n-1)+1;
StringGrid2.ColCount:=m; //количество столбцов таблицы 2
StringGrid1.Options:=StringGrid1.Options+[goEditing,goTabs];//разрешим редактирование ячеек
ShowMessage('Введите в таблицу 1 элементы матрицы, целые числа ');
end;
//кнопка для формирование нового массива
procedure TForm1.Button2Click(Sender: TObject);
var i,j,k:integer;
begin
for i:=1 to n do
for j:=1 to n do
 begin
  val(StringGrid1.Cells[j-1,i-1],a[i,j],k);
  if k<>0 then ShowMessage('В ячейке ['+inttostr(i)+','+inttostr(j)+'] неверно введено число, поправьте'); //защита
 end;
for i:=1 to n-1 do
 begin
  StringGrid2.Cells[i-1,0]:=inttostr(a[1,i]);      //первая строка
  StringGrid2.Cells[n+i-2,0]:=inttostr(a[i,n]);    //последний столбец
  StringGrid2.Cells[2*n+i-3,0]:=inttostr(a[n,n-i+1]); //последняя строка с конца
  StringGrid2.Cells[3*n+i-4,0]:=inttostr(a[n-i+1,1]);//первый столбец снизу-вверх
 end;
StringGrid2.Cells[m-1,0]:=inttostr(a[n div 2+1,n div 2+1]);  //центральный элемент
end;
end.
Вложения
Тип файла: rar программа Delphi - копия.rar (608.8 Кбайт, 0 просмотров)
Ответить с цитированием
  #2  
Старый 24.04.2017, 12:03
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Чтоб "(удалить повторяющиеся элементы(оставить по 1) " нужны дополнительные данные на массив и массив2, их размерность, а вот с упорядочиванием одномерного массива намного проще
Код:
type
  TArr = array of integer;
procedure tpm(var a : TArr);
var
 i,j,t : integer;
begin
  {сортировка массива методом простых обменов ("пузырька") }
  for i:= 0 to Length(a)-1 do
    for j:=i+1 to Length(a)-1 do
      if a[i] <= a[j] then
       begin
        t := a[i];
        a[i] := a[j];
        a[j] := t;
       end;
end;
применительно к вашей задаче, вариант по сортировке столбцов из StringGrid1 в StringGrid2
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
 i,j,b: integer;
 a: TArr;
 begin
 for i := 0 to StringGrid1.ColCount-1 do
  begin
    SetLength(a,StringGrid1.ColCount);

   for j := 0 to StringGrid1.RowCount-1 do
    a[j]:= StrToInt(StringGrid1.Cells[i,j]);
    tpm(a);

   for b := 0 to Length(a) do
    StringGrid2.Cells[i, b]:= IntToStr(a[b]);
  end;

 end;
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter