Текущий архив: 2006.05.28;
Скачать: CL | DM;
Внизмассив Найти похожие ветки
← →
дямак © (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;
Скачать: CL | DM;
Память: 0.55 MB
Время: 0.012 c