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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.057 c
1-1099657876
msguns
2004-11-05 15:31
2004.11.21
"Параметр задан неверно"


1-1099363557
KisaNetik
2004-11-02 05:45
2004.11.21
резко сам по сибе уменьшился размер проги в Delphi


3-1098502374
Vasis
2004-10-23 07:32
2004.11.21
Выборка по дате


14-1099656127
anton2v
2004-11-05 15:02
2004.11.21
Кто такой мастер


1-1099480835
Tracer
2004-11-03 14:20
2004.11.21
Как в тело программы запихнуть файлы?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский