Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
1-67768
Луарвик
2003-07-08 19:02
2003.07.21
Смена картинки на форме...


14-67962
zolotov
2003-07-01 19:00
2003.07.21
Где можно достать ToolBar c окном настройки кнопок?


3-67708
Dan
2003-06-27 10:24
2003.07.21
ADO, QReport, SQL и хранимые процедуры


1-67900
Alex_DM
2003-07-08 14:25
2003.07.21
Динамические массивы и DLL несовместимы?


1-67848
lex7
2003-07-07 16:53
2003.07.21
QuickReport -> Word/Excel





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