Главная страница
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.022 c
14-68019
Sergio_nnm
2003-07-04 03:14
2003.07.21
TOOLBAR


14-67993
Lary King
2003-07-03 21:47
2003.07.21
Оплата за показы банеров


1-67872
BillyJeans
2003-07-08 09:42
2003.07.21
TCheckListBox и его OnDrawItem...


4-68113
D@VINCHI
2003-05-15 16:17
2003.07.21
Создание сплывающей панельки...


7-68086
Song
2003-05-06 08:40
2003.07.21
Печать на рулон