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

Вниз

Объявление массива...   Найти похожие ветки 

 
Sfagnum   (2003-08-29 10:54) [0]

Есть массив
array[char] of byte
ентот массив преполагет в себе 256 элементов как бы мне определить его так шоб вместо чара он определялся 36"ю следующими знаками "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
но сохранил свою функциональность

Извените за ламерский вопрос...


 
HolACost!   (2003-08-29 10:57) [1]

ну типа
type
my = array[char] of "0".."9","A".."Z"


 
Skier   (2003-08-29 10:59) [2]

type
TYourSet = "0".."Z";
var
A : array[TYourSet] of Byte;


 
Smithson   (2003-08-29 10:59) [3]

ну строго наоборот.

Type
TEngChars = "0".."9","A".."Z";
T36Array = array[TEngChar] of byte;


 
HolACost!   (2003-08-29 11:00) [4]

Логичнее!


 
Sfagnum   (2003-08-29 11:09) [5]

Ругаеться на запятую в строке
TEngChars = "0".."9","A".."Z";


 
Smithson   (2003-08-29 11:10) [6]

Значит, в скобках


 
Sfagnum   (2003-08-29 11:14) [7]

2 Skier ©
Length(A) будет 43 получаються лишнии символы...


 
Anatoly Podgoretsky   (2003-08-29 11:15) [8]

Массив тут совсем лишний, обычная текстовая константа более чесм достаточно
"0123456789AB...Z"


 
Sfagnum   (2003-08-29 11:17) [9]

2 Smithson
так что ли
TEngChars = ("0".."9","A".."Z");
indentifer expected but string constant found


 
Sfagnum   (2003-08-29 11:21) [10]

2 Anatoly Podgoretsky
type
TYourSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";


".." expected but ";" found


 
Skier   (2003-08-29 11:21) [11]

>Sfagnum © (29.08.03 11:14)
По другому объявить, думаю, не получится.
А зачем тебе такая конструкция нужна ?


 
KSergey   (2003-08-29 11:23) [12]

Подгорецкий же написл, что константа, а ты тип пендюришь.. А подумать?


 
Sfagnum   (2003-08-29 11:25) [13]

индекс у массива должон быть char, но char за указанный диапазон сто пудово не вылезет, хочеться поменьше массивчик... а то их что то много получаеться...


 
Sfagnum   (2003-08-29 11:29) [14]

2 KSergey
сорьки не заметил..
ну тогда по-моему совсем что то не то получаеться...


 
Skier   (2003-08-29 11:30) [15]

>Sfagnum © (29.08.03 11:29)
Ну скажи же наконец : " Зачем тебе это ?"


 
Sfagnum   (2003-08-29 11:40) [16]

да вроде объяснил... но если совсем "Зачем"
для реализации поиска образцов в тексте с помощью КА..

там просто юзаю массивчик
array[0..>70,0..13,char] of byte
>70 - вообще то этот параметр определяеться динамически, но это приблезительное количество...

и ессно дело хочеться его "чуть-чуть" поуменьшить (71*14*(256-36)) = 215600

есть смысл по извращаться?


 
Sandman25   (2003-08-29 11:47) [17]

По-моему, тут извращения не помогут, тип описать нельзя.
Я бы использовал 0..35, с пересчетом индекса
if Ch > "9" then
I := Ord(Ch) - Ord("0")
else
I := Ord(Ch) - (Ord("A") - 10);


 
Anatoly Podgoretsky   (2003-08-29 11:50) [18]

Нет смысла, 71*14*256 = всего 254 кб, а удобство неоспоримо


 
Skier   (2003-08-29 11:53) [19]

Чтобы контролировать char можно ещё использовать св-во массив.
(Крнтролировать валидность в процедуре установки св-ва)
Это просто как вариант...


 
Sfagnum   (2003-08-29 12:03) [20]

2 Sandman25
Вариант... но мне не очень

2 Anatoly Podgoretsky
вместо 254кб мне реально надо всего 35кб так сто не скажите...
это же не единственное что весит в памяти...
если как я хочу не задать то склоняюсь в сторону совета Skier от 29.08.03 10:59

2 Skier
не пояснишь подробнее, а то не очень понял


 
Skier   (2003-08-29 12:09) [21]

>Sfagnum © (29.08.03 12:03)

Примерно так :

type

TDigits = "0".."9";
TLetters = "A".."Z";

TYourClass = class
private
FDigits : array[TDigits] of Byte;
FLetters : array[TLetters] of Byte;
function GetYourArray(Index: Char): Byte;
procedure SetYourArray(Index: Char; const Value: Byte);
protected
public
property YourArray[Index : Char] : Byte read GetYourArray write SetYourArray;
end;

//....................

{ TYourClass }

function TYourClass.GetYourArray(Index: Char): Byte;
begin
//проверка Index;
end;

procedure TYourClass.SetYourArray(Index: Char; const Value: Byte);
begin
//проверка Index;
end;


 
Sfagnum   (2003-08-29 12:22) [22]

Пасибки...
(в задумчивости)...


 
han_malign   (2003-08-29 14:40) [23]

Вопрос, что важнее скорость или память - перевес в лишние (43-36)*71*14 - не так уж велик...
Хотя и 6(включая mov al и call) операций на пересчет индекса, тоже не так уж много (тем более, если учесть, что современный процессор выполнит это все за один такт):
function Char2Index(aChar: Char): byte;
const A_9 = byte("A")-10;
begin
if(aChar>"9") //cmp al,$39 ;1
//jbe +$03 ;2
then Result:=byte(aChar)-A_9 //sub al,$37 ;3
//ret ;4
else Result:=byte(aChar)-byte("0"); //sub al,$30 ;3
end; //ret ;4


З.Ы. А через индексированные проперти, помоему, лишнее -
array[0..>70,0..13, byte] of byte
.........
mass[i,j,Char2Index(ch)]

- вполне достаточно, причем там где забыл преобразование поставить - компилятор подскажет - тип то другой(char ==> byte)


 
Илия Кожевников // ИК студия   (2003-08-29 15:27) [24]


> Есть массив
> array[char] of byte
> ентот массив преполагет в себе 256 элементов как бы мне
> определить его так шоб вместо чара он определялся 36"ю следующими
> знаками "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
> "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L",
> "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
> "Y", "Z"
> но сохранил свою функциональность


Может так? Скажи если получиться :)

procedure TForm1.Button1Click(Sender: TObject);

type
NewArray = (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z);

var
Mas : array [NewArray] of Byte;
I : NewArray;

begin
for i:=_0 to _Z do begin {bla_bla :)} end;
end;


 
Илия Кожевников // ИК студия   (2003-08-29 15:35) [25]

Проверил, работает :)


 
Sfagnum   (2003-08-29 17:01) [26]

2 han_malign
я тоже так посчитал... при min(RAM) = 128MB

2 Илия Кожевников // ИК студия
спасибо



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

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

Наверх





Память: 0.5 MB
Время: 0.009 c
3-33428
Доброжелатель
2003-08-22 10:43
2003.09.11
ZeosDBO


1-33610
Qwerr
2003-09-01 12:48
2003.09.11
Проблема с текстовым полем (String)


3-33439
P0tia
2003-08-21 19:05
2003.09.11
Про excel


1-33649
_MAD_
2003-08-30 16:59
2003.09.11
TCheckBox


4-33852
Th
2003-07-08 11:00
2003.09.11
Искусственный вызов Window Menu приложения





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