Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

2мерный стринговый массив   Найти похожие ветки 

 
margel   (2004-11-07 22:20) [0]

Здравствуйте мастера!
Подскажите пожалуйста такой вопрос, как сделать такую вещь, создать 2х мерный массив, и наполнить его любыми стринговыми символами, а потом вернуть любой символ 2го столбца, относительно первого. Сколько не делаю, все ошибка в блоке таком то .. :(
Т.е.

function return_mass(a:integer): string;
var
i: integer;
mass: array of array of string;
begin
SetLength(mass, 2, 200);
for i:=1 to 200 do
 begin
  mass[1,i]:=IntToStr(i);          
  mass[2,i]:=IntToStr(Random(100))
 end;
Result:=mass[2,a];                
end;

procedure Tfm.Button1Click(Sender: TObject);
begin
 Showmessage(return_mass(15));
end;


И еще, вопрос, из первого, как наполнить массив не в цикле, а в ручную, в теле этой же ф-и, т.е.
1 - 5455
2 - 9998
3 - 4566
4 - 6878
....
Тоже с этим разобраться не могу, в PHP это элементарно реализуется, а тут прямо, с 5 вечера сижу, 5й час :(
Заранее всем спасибо.


 
margel   (2004-11-07 22:21) [1]

Скажу ещё, массив обыкновенный, 2 столбика, и 200 строчек. (в данном примере)


 
YurikGL ©   (2004-11-07 22:24) [2]


> margel   (07.11.04 22:20)  

Не проще

> mass: array of array of string;
-> mass array[1..2,1..200] of string?


 
YurikGL ©   (2004-11-07 22:27) [3]

Кстати, у меня такое чувство, что TStringList тебе больше подойдет...

Какая задача стоит то?


 
GuAV ©   (2004-11-07 22:33) [4]

margel   (07.11.04 22:20)
for i:=1 to 200 do
begin
 mass[1,i]:=IntToStr(i);          
 mass[2,i]:=IntToStr(Random(100))


У дин массивов первый элемент 0.
Т.е.
0 to 1999
а лучше
Low(mass) to High(mass)


 
KilkennyCat ©   (2004-11-07 22:36) [5]

я бы не так делал.
1) если данные - цифры, пусть массив и будет integer, преобразование делать при уже дальнейшем использовании.
2) mass[1,i]:=IntToStr(i); - возможно, лишнее, если потом не подрезумевается перетасовка элементов массива, с сохранением информации о порядковом номере.

а ошибка простая - SetLength(mass, 2, 200) делает массив [0..1, 0..199]


 
KilkennyCat ©   (2004-11-07 22:37) [6]

ну вот, опять опередили...


 
margel   (2004-11-08 11:10) [7]

Спасибо за ответы!
Хочу сделать ф-ю, возвращающую одно значение, относительно другого. Т.е. есть "таблица", в 2 колонки. Строк до 1000 и чуть более.
Сейчас, с вашей помощью сделал так, и все работает, но реализация, конечно, оставляет желать лучшего  :)


function return_mass(a:string): string;
var
i: integer;
mass: array[1..2,1..200] of string;
begin
mass[1,1]:="ee1";  mass[2,1]:="rr1";
mass[1,2]:="ee2";  mass[2,2]:="rr2";
mass[1,3]:="ee3";  mass[2,3]:="rr3";
mass[1,100]:="ee100";  mass[2,100]:="rr100";
mass[1,177]:="ee177";  mass[2,177]:="rr177";  //и так может до 1000 строк :(

for i:=1 to 200 do
 if a=mass[1,i]
   then
    begin
     Result:=mass[2,i];
     break;
    end
   else
    Result:="No return";

end;

procedure Tfm.Button1Click(Sender: TObject);
begin
 Showmessage(return_mass("ee177"));  //вернет "rr177"
end;


 
KilkennyCat ©   (2004-11-08 11:17) [8]

mass[1,1]:="ee1";  mass[2,1]:="rr1";
mass[1,2]:="ee2";  mass[2,2]:="rr2";
mass[1,3]:="ee3";  mass[2,3]:="rr3";
mass[1,100]:="ee100";  mass[2,100]:="rr100";
mass[1,177]:="ee177";  mass[2,177]:="rr177";

я бы это заменил на

for i := 1 to 1000 do begin
 mass[1,i] := "ee"+inttostr(i);
 mass[2,i] := "rr"+inttostr(i);
end;


 
margel   (2004-11-08 11:35) [9]

KilkennyCat ©   (08.11.04 11:17)
Да, спасибо, но тут слова для теста, реально, слова другие и совсем без цифр. А вот вопрос, можно ли в функции отсавить только поиск в массиве, а сам массив вынести в др. место? Я бы вынес в OnCreate формы, но сам этот модуль реализован в отдельном юните, и OnCreate нет...
Сейчас получается, при каждом обр. к ф-и я определяю весь массив заново, хотя его достаточно вбить 1 раз, при загрузке приложения и все...


 
KilkennyCat ©   (2004-11-08 11:41) [10]


> margel   (08.11.04 11:35) [9]


конечно, можно. Просто объявить его глобально, а не в функции. Если же он вообще очень редко меняется, то имеет смысл его забить в файл данных или ресурс, а в программе предусмотреть только возможность изменения.



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

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.126 c
1-1099484746
dolphin
2004-11-03 15:25
2004.11.21
Создание курсора


9-1088497561
Bizon's
2004-06-29 12:26
2004.11.21
Фоновый рисунок


4-1097214101
TeNY
2004-10-08 09:41
2004.11.21
Окно на первом плане


1-1100077166
StarCon
2004-11-10 11:59
2004.11.21
Refresh RxDBGrid


1-1098792537
Tormoz
2004-10-26 16:08
2004.11.21
Макрос из MSWord