Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2016, 21:35   #1
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию Кодировочная книга Delphi

Реализация алгоритма «Кодировочная книга». При этом будем считать, что кодом служит позиция слова в кодировочной книге (специально подготовленном файле), причем, если слово встречается несколько раз и в открытом тексте, и в кодировочной книге, в закрытом тексте для одного и того же слова будут использованы разные коды.
Код:
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.
Неверно выводит закодированный текст. Подскажите в чем проблема?
Pistoletka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal кодировочная книга Bree Помощь студентам 0 16.12.2012 17:57
Делфи кодировочная книга nikagru Помощь студентам 0 11.11.2012 21:28
Электронная книга на Delphi Ansuz Помощь студентам 8 06.12.2010 14:10
Delphi. Книга qwq Обсуждение статей 10 09.11.2009 14:15
Книга по Delphi ViNcHeStEr Свободное общение 2 28.04.2009 16:20