Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  172

•  TDictionary Custom Sort  3 344

•  Fast Watermark Sources  3 095

•  3D Designer  4 852

•  Sik Screen Capture  3 350

•  Patch Maker  3 556

•  Айболит (remote control)  3 665

•  ListBox Drag & Drop  3 018

•  Доска для игры Реверси  81 742

•  Графические эффекты  3 948

•  Рисование по маске  3 253

•  Перетаскивание изображений  2 633

•  Canvas Drawing  2 761

•  Рисование Луны  2 586

•  Поворот изображения  2 195

•  Рисование стержней  2 171

•  Paint on Shape  1 569

•  Генератор кроссвордов  2 240

•  Головоломка Paletto  1 770

•  Теорема Монжа об окружностях  2 237

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 059

•  Игра HIP  1 282

•  Игра Go (Го)  1 230

•  Симулятор лифта  1 477

•  Программа укладки плитки  1 219

•  Генератор лабиринта  1 548

•  Проверка числового ввода  1 368

•  HEX View  1 497

•  Физический маятник  1 359

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Определить корень слова (для поиска похожих слов)



Автор: ___Nikolay
WEB-сайт: http://delphiworld.narod.ru

// Поиск по корню слова
function RootOfWord(s: string): string;
label
  start;
const
  sGlas = 'аеёиоуыэюяaeiou'; // With english letters
  sSoglas = 'бвгджзйклмнпрстфхцчшщъь';
  sCompletions1 = 'й ь s';
  sCompletions2 = 'ам ям ом ем ин ём ся ет ит ут ют ат ят ыв ив ев ан ян ов ев ог ег ир ер ых ок ющ ущ er ed';
  sCompletions3 = 'енн овл евл ённ анн ост ест';
  sAttachments1 = 'в с';
  sAttachments2 = 'на за ис из до по вы во со';
  sAttachments3 = 'при рас пре про под';
  sAttachments4 = 'пере';
var
  sResult: string;
  i, iCnt, iGlasCount, iCheckCount: integer;
begin
  sResult := AnsiLowerCase(Trim(s));
  iCheckCount := 0;

  start:
  // "ся"
  if Length(sResult) > 3 then
    if sResult[Length(sResult) - 1] + sResult[Length(sResult)] = 'ся' then
      Delete(sResult, Length(sResult) - 1, 2);

  (*  E N G L I S H  *)

  // "ing"
  if Length(sResult) > 4 then
    if sResult[Length(sResult) - 2] + sResult[Length(sResult) - 1] + sResult[Length(sResult)] = 'ing' then
      Delete(sResult, Length(sResult) - 2, 3);

  // --

  // Гласные
  if Length(sResult) > 3 then
  begin
    iGlasCount := 0;
    for i := Length(sResult) downto 1 do
      if Pos(sResult[i], sGlas) <> 0 then // Если последний символ - гласная
        inc(iGlasCount)
      else
        break;
    if iGlasCount <> 0 then
    begin
      iGlasCount := iGlasCount - 1;
      Delete(sResult, Length(sResult) - iGlasCount, iGlasCount + 1);
    end;
  end;

  // Окончания
  if Length(sResult) > 3 then
    if Pos(sResult[Length(sResult)], sCompletions1) <> 0 then
      Delete(sResult, Length(sResult), 1);

  // "ся"
  if Length(sResult) > 3 then
    if sResult[Length(sResult) - 1] + sResult[Length(sResult)] = 'ся' then
      Delete(sResult, Length(sResult) - 1, 2);

  if Length(sResult) > 3 then
    while Pos(sResult[Length(sResult) - 2] + sResult[Length(sResult) - 1] +
      sResult[Length(sResult)], sCompletions3) <> 0 do
    begin
      if Length(sResult) > 3 then
        Delete(sResult, Length(sResult) - 1, 3)
      else
        break;
    end;

  if Length(sResult) > 3 then
    while Pos(sResult[Length(sResult) - 1] + sResult[Length(sResult)], sCompletions2) <> 0 do
    begin
      if Length(sResult) > 3 then
        Delete(sResult, Length(sResult) - 1, 2)
      else
        break;
    end;

  // Гласные
  if Length(sResult) > 3 then
  begin
    iGlasCount := 0;
    for i := Length(sResult) downto 1 do
      if Pos(sResult[i], sGlas) <> 0 then // Если последний символ - гласная
        inc(iGlasCount)
      else
        break;
    if iGlasCount <> 0 then
    begin
      iGlasCount := iGlasCount - 1;
      Delete(sResult, Length(sResult) - iGlasCount, iGlasCount + 1);
    end;
  end;

  // Приставки
  iCnt := 4;
  if Length(sResult) > iCnt then
    if Pos(Copy(sResult, 1, iCnt), sAttachments4) <> 0 then
      Delete(sResult, 1, iCnt);

  iCnt := 3;
  if Length(sResult) > iCnt then
    if Pos(Copy(sResult, 1, iCnt), sAttachments3) <> 0 then
      Delete(sResult, 1, iCnt);

  iCnt := 2;
  if Length(sResult) > iCnt then
    if Pos(Copy(sResult, 1, iCnt), sAttachments2) <> 0 then
      Delete(sResult, 1, iCnt);

  iCnt := 1;
  if Length(sResult) > iCnt then
    if Pos(Copy(sResult, 1, iCnt), sAttachments1) <> 0 then
      Delete(sResult, 1, iCnt);

  inc(iCheckCount);
  if iCheckCount < 2 then
    goto start;

  Result := sResult;
end;




Похожие по теме исходники

Нейросеть для распознавания образов

Механизм станка качалки для нефти

Весы для взвешивания

Кувшины для воды

 

Доска для игры Реверси

Квадратные сетки из слов

Проверка числового ввода




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте