Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

массив   Найти похожие ветки 

 
дямак ©   (2006-05-08 11:46) [0]

здравствуйте, Уважаемые мастера! На днях вот начал юзать delphi, прочитал какую-то книгу по совету одного из мастеров, вроде чё-то понял, но на подробное изучение не хватает времени, так как мне лабу в четверг сдавать надо , а она у меня ещё не сделана, точнее одну про график функции я сделал, а вот про массив никак! Может я тупой такой, вот я тут начал делать заполнение массива случайно

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   Edit1: TEdit;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function Unic(var flag: array of boolean; range: integer): integer;
begin
 { возвращение одного случайного числа}
 result := random(range);
 while flag[result] do
   result := random(range); //какого числа еще нет
 flag[result] := true; //чтобы не было повторений
end;

procedure MassRand(range: integer; var inputMass: array of integer);
var
 i: integer;
 bm: array of boolean;
begin
 SetLength(bm, length(inputMass));
 for i := 0 to length(inputMass) - 1 do
 begin
  inputMass[i]:=Unic(bm,range);//заполнение от 0,1, ... ,до N
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
 mass: array of integer; //собственно сам массив
begin
 Memo1.Lines.Clear; //Ввод результата
 SetLength(mass, strtoint(Edit1.Text)); //скока линий
 MassRand(strtoint(Edit1.Text), mass); //использование процедуры
 for i := 0 to length(mass) - 1 do
 begin
   Memo1.Lines.Add(inttostr(mass[i])); //результат
 end;
end;

end.

но он по ходу одномерный (или как он там называется), а мне нужно чтобы  он был многомерный (может я неправильно выражаюсь, ну чтобы например 10 строк и 10 столбцов) объясните чё я неправильно делаю?


 
alex-drob ©   (2006-05-08 11:55) [1]

Тебе нужен масив вида mas: array [0..9,0..9] of integer.
Ну а если динамический то
_mas: array of integer;
mas: array of _mas;
Кажеться так.


 
дямак ©   (2006-05-08 12:06) [2]

сенкс


 
alex-drob ©   (2006-05-08 12:06) [3]


> _mas: array of integer;

Ошибся
type TMas=array of integer;
var mas:array of tmas;


 
Плохиш ©   (2006-05-08 12:08) [4]

mas: array of array of integer;


 
дямак ©   (2006-05-08 14:02) [5]

ещё такой вопросик! объясните или лучше напишите плиз как мне эту процедуру инициализации матрицы случайными целыми числами  адресовать procedure TForm1.Button1Click(Sender: TObject); (ну т.е. чтоб при нажатии на кнопку появлялась матрица 10*10)

type
 TMatrix=array [1..10,1..10] of integer;

var
 Arr:TMatrix;

procedure RandomMatrix(var M:TMatrix;r,c:integer);
var i,j:integer;
begin
for i:=1 to r do
 for j:=1 to c do
  M[i,j]:=random(10);
end;


 
Пусик ©   (2006-05-08 14:14) [6]

Инициализировать нужно неповторяющимися значениями или такого жесткого условия нет?


 
дямак ©   (2006-05-08 14:19) [7]

нет, любыми, плиз напиши если можешь


 
Пусик ©   (2006-05-08 14:22) [8]


> дямак ©   (08.05.06 14:19) [7]
>
> нет, любыми, плиз напиши если можешь

Так ты уже написал.

type
TMatrix=array [1..10,1..10] of integer;

var
Arr:TMatrix;

procedure RandomMatrix(var M:TMatrix;r,c:integer);
var
 i,j:integer;
 g: Integer;
begin
 g := r*c;
 for i:=1 to r do
  for j:=1 to c do M[i,j]:=random(g);
end;


 
дямак ©   (2006-05-08 14:28) [9]

ТЫ НАВЕРНОЕ МЕНЯ НЕ ПОНЯЛ. Я НАПИСАЛ ПРОЦЕДУРУ ДЛЯ ИНИЦИАЛИЗАЦИИ, А МНЕ НУЖНО ЕЩЁ НАПИСАТЬ ПРОЦЕДУРУ ДЛЯ ОБРАБОТЧИКА СОБЫТИЯ OnClick чтоб при нажатии на кнопку Button1 появлялась матрица 10*10, и где она ваще должна появляться в Memo или StringGrid?


 
Пусик ©   (2006-05-08 14:32) [10]


> и где она ваще должна появляться в Memo или StringGrid?


Так это тебе выбирать, где матрица должна отобразиться.


 
дямак ©   (2006-05-08 14:35) [11]

ну помоги если можешь, а то уж очень хочется самому лабу сделать, а то до этого всегда списывал, а теперь вот начал разбираться да поздновато!


 
Шпиён   (2006-05-08 14:35) [12]


> дямак ©   (08.05.06 14:28) [9]

И вовсе незачем так орать (с)


 
Шпиён   (2006-05-08 14:47) [13]


type
TMatrix=array [1..10,1..10] of integer;

procedure TForm1.Button1Click(Sender: TObject);
var
Arr:TMatrix;
i,j:integer;
s:string;
row,col:integer;
   procedure RandomMatrix(var M:TMatrix;r,c:integer);
   var
    i,j:integer;
    g: Integer;
   begin
        g := r*c;
        for i:=1 to r do
            for j:=1 to c do M[i,j]:=random(g);
   end;

begin
   row:=10;col:=10;
   RandomMatrix(Arr,row,col);
   for i:=1 to row do
   begin
       s:="";
       for j:=1 to col do s:=s+IntToStr(Arr[i,j])+#9;
       Memo1.Lines.Add(s);
end;
end;



 
дямак ©   (2006-05-08 14:59) [14]

спасибо за помощь!
простите за назойливость, но как сделать так чтобы кол-во символов можно было самому вводить например в TEdit? а то уж больно она большая получается в этом примере!


 
Пусик ©   (2006-05-08 15:04) [15]


> дямак ©   (08.05.06 14:59) [14]
>
> спасибо за помощь!
> простите за назойливость, но как сделать так чтобы кол-во
> символов


Символов в чем?


 
дямак ©   (2006-05-08 15:07) [16]

символов в матрице, просто в приведённом коде Шпиёна матрица появляется,но в неё 4 столбца и где-то 30 строк


 
KilkennyCat ©   (2006-05-08 15:13) [17]


> 4 столбца и где-то 30 строк


а должно быть 10 на 10...


 
Шпиён   (2006-05-08 15:15) [18]


> просто в приведённом коде Шпиёна матрица появляется,но в
> неё 4 столбца и где-то 30 строк

Это каким-же образом ты так код испортить умудрился, чтобы он вместо матрицы 10x10 выдал матрицу 30х4? -(
ПлакалЪ


row:=StrToInt(Edit1.Text);
col:=StrToInt(Edit2.Text);


 
дямак ©   (2006-05-08 15:16) [19]

я понимаю что из стороки  TMatrix=array [1..10,1..10] of integer; следует что должно быть 10 на 10 ,но не получается, не верите попробуйте сами


 
дямак ©   (2006-05-08 15:20) [20]

сорри, она 10 на 10, просто между столбцами расстояние большое, вот я и подумал что больше, кстати как расссояние между столбцами уменьшить?


 
KilkennyCat ©   (2006-05-08 15:20) [21]


> как расссояние между столбцами уменьшить?


заменить #9 на "    "


 
Шпиён   (2006-05-08 15:21) [22]


> я понимаю что из стороки  TMatrix=array [1..10,1..10] of
> integer; следует что должно быть 10 на 10

Ничего подобного. 10 на 10 следует из строки
row:=10;col:=10;


 
дямак ©   (2006-05-08 15:27) [23]

спасибо Вам Мастера куда бы я без вас!!


 
KilkennyCat ©   (2006-05-08 15:28) [24]

известно, куда... в армию.


 
Шпиён   (2006-05-08 15:36) [25]


> KilkennyCat ©   (08.05.06 15:20) [21]
>
> > как расссояние между столбцами уменьшить?
>
>
> заменить #9 на "    "

И будет криво -)
Лучше, например, так:

      s:=s + Format("%4.2d",[Arr[i,j]]);


 
дямак ©   (2006-05-08 15:49) [26]

опять я! может вы меня сейчас пошлёте куда подальше, но дочитав своё задание до конца я поня что мне ещё нужно В  каждой строке поменять местами наибольший и наименьший элементы. скажите вот этот алгоритм правильный? если да , то как мне сделать так чтоб при нажатии на Button2 он мне обрабатывал мою первую матрицу?

var
A: array [1..N, 1..N] of Integer;
I, J, Min, Max, Temp: Integer;
begin
for I := Low(A) to High(A) do
begin
  Min := Low(A[I]);
  Max := Min;
  for J := Succ(Low(A[I])) to High(A[I]) do
    if A[I, Min] > A[I, J] then
      Min := J
    else if A[I, Max] < A[I, J] then
      Max := J;
  if Min <> Max then
  begin
    Temp := A[I, Min];
    A[I, Min] := A[I, Max];
    A[I, Max] := Temp
  end;
end;


 
KilkennyCat ©   (2006-05-08 15:51) [27]

Вообщем, дямак, пиши задание полностью сразу... так проще будет.


 
дямак ©   (2006-05-08 15:58) [28]

проще то оно проще, только мне нужно чтобы я понимал что делаю!
пока вы мне тут втирали, я уже более или менее стал въезжать что к чему, а задание такое: Дана матрица A(N,N). В  каждой строке поменять местами наибольший и наименьший элементы.


 
дямак ©   (2006-05-08 16:25) [29]

значит никто не поможет?  Ну пожалуйста, я бы и сам разобрался, но времени уже почти нет! вчера скачал кучу книг, купил учебник Архангельского, но сами понимаете за 2 дня Делфи не изучишь!


 
Шпиён   (2006-05-08 16:36) [30]


> Дана матрица A(N,N). В  каждой строке поменять местами наибольший
> и наименьший элементы.

А если в строке, например два одинаковых наименьших элемента? Ваши действия? -)


 
Пусик ©   (2006-05-08 16:40) [31]


> дямак ©   (08.05.06 16:25) [29]

Алгоритм простой:
Определяем переменные - MaxEl, MinEl,MaxInd,MinInd
1. Цикл по строкам
 2. Цикл по строке элементов
   Алгоритм по строке:
     1 MinEl = первый элемент, MaxEl = первый элемент, MaxInd=0,MinInd=0
     2 Индекс = Индекс+1
     3 Если текущий элемент<MinEl -> MinEl=текущий элемент, MinInd=текущий индекс
     4. Если текущий элемент>MaxEl -> MaxEl=текущий элемент, MaxInd=текущий индекс
     5. Если обработали последний элемент -> выход из цикла, если нет --> п.2


 
дямак ©   (2006-05-08 16:42) [32]

кстати да! фишка! может нужно чтобы матрица заполнялась случайными целыми неповторяющимися числами! Помогите плиз! Обещаю впреть больше сюда не соваться за советами и самостоятельно изучать Delphi! Пожалста


 
дямак ©   (2006-05-08 16:58) [33]

>Пусик ©   (08.05.06 16:40)

если б я шарил в этих алгоритмах! то написал бы, а мне надо уже готовый!


 
KilkennyCat ©   (2006-05-08 16:58) [34]

>    Алгоритм по строке:
>      1 MinEl = первый элемент, MaxEl = первый элемент, MaxInd=0,MinInd=0 это лишнее, или, по крайней мере, Low


 
дямак ©   (2006-05-08 17:10) [35]

Кто - нибудь пожалуйста напишите код!


 
Шпиён   (2006-05-08 17:35) [36]

Достаточно, чтобы числа в строке были уникальными (хотя это и не обязательно)...

> Кто - нибудь пожалуйста напишите код!

Чем это отличается от списывания?


 
Шпиён   (2006-05-08 17:50) [37]

Попробуй для начала разобраться с этим кодом:
Ограничения: матрица квадратная (N на N)

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   Button1: TButton;
   Memo1: TMemo;
   Button2: TButton;
   Edit1: TEdit;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
type
TMatrix=array of array of integer;

var
   Arr : TMatrix;
   rowcol : integer=10;

procedure RandomMatrix(var M:TMatrix; r:integer);
var
   i,j :integer;
   g: Integer;
begin
   Randomize;
   SetLength(M,r,r);
   g := r*r;
   for i:=0 to r-1 do
       for j:=0 to r-1 do
               M[i,j]:=random(g);
end;

procedure ArrayToMemo(A : TMatrix; Mem:TMemo);
var
   i, j :integer;
   s:string;
begin
  for i:=Low(A) to High(A) do
  begin
      s:="";
      for j:=Low(A) to High(A) do
          s := s + Format("%4.2d",[A[i,j]]);
      Mem.Lines.Add(s);
   end;
end;
procedure ArraySort(var A : TMatrix);
var
   i, j, Temp, Min, Max :integer;
begin
   for i := Low(A) to High(A) do
   begin
       Min := Low(A);
       Max := Min;
       for j := Succ(Low(A)) to High(A) do
           if A[i, Min] > A[i, j] then
               Min := j
           else
               if A[i, Max] < A[i, j] then
                   Max := j;
       if Min <> Max then
       begin
           Temp := A[i, Min];
           A[i, Min] := A[i, Max];
           A[i, Max] := Temp
       end;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  TryStrToInt(Edit1.Text,RowCol);
// Здесь если RowCol=0 можно вывести предупреждение
// и выйти
  RandomMatrix(Arr,rowcol);
  ArrayToMemo(Arr,Memo1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Memo1.Lines.Add("==Result==");
   ArraySort(Arr);
   ArrayToMemo(Arr, Memo1);
end;

end.


А потом можно и процедуру RandomMatrix переписать так, чтобы генерировала уникальные числа


 
дямак ©   (2006-05-08 18:14) [38]

пасиб, буду учиться!


 
дямак ©   (2006-05-08 18:26) [39]

>Шпиён   (08.05.06 17:50) [37]

на форме рамещаю компоненты  Panel1,Button1,Button2, Edit1,Memo1 согластно твоему коду, компилятор не ругается, но прога не реагирует на нажатие кнопок!


 
Шпиён   (2006-05-08 18:28) [40]

А обработчики на нажатия кнопок кто цеплять будет, Пушкин?



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.01 c
1-1145295250
Volf_555
2006-04-17 21:34
2006.05.28
Как в TWebBrowser изменить кодировку на КИРИЛЛИЦУ?!


2-1147198249
Firefly
2006-05-09 22:10
2006.05.28
TFileStream


15-1146430993
iZEN
2006-05-01 01:03
2006.05.28
С днём весны и труда.


3-1143869964
Некто
2006-04-01 09:39
2006.05.28
ФИО или Ф, И и О?


15-1146548663
Ega23
2006-05-02 09:44
2006.05.28
С Днём рождения! 2 мая





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский