Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.10.2016, 21:41
Pistoletka Pistoletka вне форума
Прохожий
 
Регистрация: 29.10.2016
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Кодировочная книга

Реализация алгоритма «Кодировочная книга». При этом будем считать, что кодом служит позиция слова в кодировочной книге (специально подготовленном файле), причем, если слово встречается несколько раз и в открытом тексте, и в кодировочной книге, в закрытом тексте для одного и того же слова будут использованы разные коды.


Код:
program Lab41;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
 tbookword=record
                  w:string;
                  wasfound:boolean;
                 end;
 tbookdata=array of tbookword;
 var s:string; //вводимый открытый текст
      w:string; // для выделения отдельного слова
      i:integer; 
      st: string; // закрытый текст
      tb:tbookdata; // для загрузки кодировочной книги
 function loadbook:tbookdata;
 var f:text;
      z:string;
  begin
   result:=nil;
   assignfile(f,'E:\Labs\Кодировочная книга.txt');
   reset(f);
   //Length(Result) – кол-во элементов в массиве
   //SetLength(Result, n) – выставить кол-во элементов в массиве = n
   while not Eof(f) do
    begin
     readln(f,z);
     SetLength(result,Length(result)+1);
     result[length(result)-1].w:=z;
     result[length(result)-1].wasfound:=false;
    end;
   closeFile(f);
  end;
 function number_of_word(w:string; var tb:tbookdata):integer;
 var lastfound, i:integer;
  begin
   result:=-1;
   lastfound:=-1;
   for i := 0 to length(tb)-1 do
    begin
     if (tb[i].w=w) then
      begin
       if (result<0) and (not tb[i].wasfound) then
        begin
         result:=i;
         tb[i].wasfound:=true;
        end;
       lastfound:=i;
      end;
     end;
   if result>=0 then
    begin
     if result=lastfound then
      for i := 0 to length(tb)-1 do
       if tb[i].w=w then tb[i].wasfound:=false;
     result:=result+1;
    end;
 end;

begin

writeln('vvedite text :');
 readln(s);
 i:=1;
 st:='';
 tb:=loadbook;
 while i<=length(s) do
  begin
   while (i<=length(s)) and (s[i]=' ') do i:=i+1;
   w:='';
   while (i<=length(s)) and (s[i]<>' ') do
    begin
     w:=w+s[i];
     i:=i+1;
    end;
  if w<>'' then
   begin
   st:=st+IntToStr(number_of_word(w,tb)) + ' ';
   end;
  end;
  writeln(' close text:', st);
  readln;
end.

Неверно выводит закодированный текст. Подскажите в чем проблема?
Ответить с цитированием
  #2  
Старый 29.10.2016, 22:21
ShamanVV ShamanVV вне форума
Прохожий
 
Регистрация: 28.10.2016
Сообщения: 3
Версия Delphi: xe8
Репутация: 10
По умолчанию

А что именно выдает? И что должно выдавать?
Ответить с цитированием
  #3  
Старый 29.10.2016, 23:51
Pistoletka Pistoletka вне форума
Прохожий
 
Регистрация: 29.10.2016
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от ShamanVV
А что именно выдает? И что должно выдавать?
Выдает: -1 -1 -1 -1. А должно выдавать так: 1012151116191413, тут 4 слова закодированы, первые 2 цифры строка, потом 2 цифры позиция элемента в строке. Например, 1012 - 10 строка, 12 элемент.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter