Главная страница
    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.006 c
3-67668
s_ser
2003-06-26 13:00
2003.07.21
Работать с BLOB полями в INTERBASE, через IBX компоненты.


1-67821
galexis
2003-07-09 17:42
2003.07.21
Вычитание дат


7-68090
OpoloXAI
2003-05-12 17:49
2003.07.21
Как переключить ракладку клавиатуры на Украинский язык?


6-67949
panov
2003-05-16 13:03
2003.07.21
Socket. Передача символа я


3-67710
Savage
2003-06-27 11:17
2003.07.21
Создание отчетов с помощью Quick Report





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