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

Вниз

Перевод программы с C на Object Pascal   Найти похожие ветки 

 
default ©   (2003-07-07 22:31) [0]

кто может, переведите код ниже на паскаль:


#include <stdio.h>
#include <string.h>

#define WORD_SIZE 16 /* Разрядность слова процессора в битах */
#define ABC_SIZE 256 /* Размер используемого алфавита символов */

unsigned int M; /* Длина шаблона в символах */
unsigned int Bit[WORD_SIZE]; /* Вспомогательная диагональная матрица */
unsigned int CVTbl[ABC_SIZE]; /* Таблица характеристических символов */

void OkMatch( char *Text )
{
/* Обрабатываем найденное совпадение. Параметр Text указывает на конец
совпадения в просматриваемом тексте */
printf( " Found coincidence: \"%s\"\n", Text-M+1);
}

void BuildCVTbl( char *Pattern, unsigned int CVTbl[])
{
int i;

M = strlen( Pattern );

for( i=0; i<WORD_SIZE; i++) Bit[i] = (1 << (WORD_SIZE-i-1));

for( i=0; i<ABC_SIZE; i++) CVTbl[i] = 0;
for( i=0; i<M; i++) CVTbl[ (unsigned char) Pattern[i] ] |= Bit[i];
}

void ExactShiftAND( char *Text, unsigned int CVTbl[])
{
unsigned int R; /* Текущий столбец */
unsigned int CVector; /* Характеристический вектор для текущего
символа */
unsigned int Bit0; /* Младший бит */
unsigned int EndPos; /* Маска обнаружения совпадения */

EndPos = Bit[M-1];
Bit0 = Bit[0];
R = 0;

for( ; *Text!="\0"; Text++)
{
CVector = CVTbl[ (unsigned char) *Text ];

R = ((R >> 1) | Bit0) & CVector;

if( (R & EndPos) != 0 ) OkMatch( Text ); /* Совпадение обнаружено */
}
}

void FuzzyShiftAND( char *Text, unsigned CVTbl[])
{
unsigned int R1, R2; /* Текущие столбцы таблиц */
unsigned int CVector; /* Характеристический вектор для текущего
символа */
unsigned int Bit0; /* Младший бит */
unsigned int EndPos; /* Маска обнаружения совпадения */

EndPos = Bit[M-1];
Bit0 = Bit[0];
R1 = R2 = 0;

for( ; *Text!="\0"; Text++)
{
CVector = CVTbl[ (unsigned char) *Text ];

R1 = (R1 >> 1) | Bit0;
R2 = ((R2 >> 1) & CVector) | R1;
R1 &= CVector;

if( (R2 & EndPos) != 0 ) OkMatch( Text ); /* Совпадение обнаружено */
}
}

void main( void )
{
char Pattern[] = "vivid"; /* Шаблон поиска */
char *Text = "vivi&dv&vivid"; /* Указатель на ASCII-буфер, в котором искать */

/* Строим таблицу характеристических векторов */
BuildCVTbl( Pattern, CVTbl);

/* Осуществляем точный поиск */
printf( "Exact search\n" );
ExactShiftAND( Text, CVTbl);

/* Осуществляем приблизительный поиск */
printf( "Fuzzy search\n" );
FuzzyShiftAND( Text, CVTbl);

printf( "\n" );
}



 
default ©   (2003-07-07 22:50) [1]

всё, не надо теперь ничего переводить!



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

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

Наверх




Память: 0.47 MB
Время: 0.021 c
1-67782
Smithson
2003-07-09 10:58
2003.07.21
Как обнаружить взаимоблокировки


3-67674
Пубертанец
2003-06-26 12:25
2003.07.21
Как в SQL-запросе писать в Мемо-поле (INSERT INTO ...)?


14-68012
cyborg
2003-07-04 09:51
2003.07.21
Delphi 6 Update Pack #2


14-68020
JibSkeart
2003-07-04 16:54
2003.07.21
EhLib как сделать чтобы работал без IDE


1-67905
3APA3A
2003-07-08 13:55
2003.07.21
Что это за I/O Error 183 ???