Форум: "Основная";
Текущий архив: 2003.07.21;
Скачать: [xml.tar.bz2];
ВнизПеревод программы с 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c