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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2016, 23:55   #1
Smile189
Пользователь
 
Регистрация: 01.10.2016
Сообщений: 25
По умолчанию Почему не работает?

Кодировочная книга


Код:

   program Project3;

{$APPTYPE CONSOLE}

uses
    windows, 


  SysUtils;

const filename='key.txt';//название файл¬а
var alllines:integer;//количество стро¬к
maxsymbol:integer;//¬
sameword:array[0..100] of string;
tr:boolean;
wrd:array[0..99]of string;//здесь соде¬ржится разбитая на слова строка
cnt:byte;//количество элементов массив¬а,другими словами сколько слов в wrd 
index:integer;
same:integer;
countwords,len:integer;
type
tbookword=record
w:string;//
wasfound:boolean;
symbolcount:integer;//количество элеме¬нтов в строке,для определения макс числа¬ элементов
end;
tbookdata=array of tbookword;//массив ¬записи
function countelement(input:string):integer;
var divs:set of char;
i:integer;
begin
divs:=[' ',',','?','!',':',';','-','.'];
for i:=1 to length(input)do //цикл по э¬лементам строки
if input[i] in divs then inc(result);//¬если i элемент строки равняется любому и¬з перечисленному значенибю из divs то ув¬еличиваем счетчик элементов на единицу
end;
function loadbook:tbookdata;
var f:text;
z:string;
i:integer;
begin
result:=nil;
alllines:=0;
assignfile(f,filename);//связываем файл с переменной f

reset(f);//открываем файл
while not Eof(f) do //пока не закончится файл
begin
readln(f,z);//считываем строку из файла
trim(z);//убираем пробелы в начале и в конце строки
SetLength(result,Length(result)+1);//устанавливаем размер динамического массив¬а
result[length(result)-1].w:=z;//строка из файла присваивается элементу массива
result[length(result)-1].wasfound:=false;
result[length(result)-1].symbolcount:=countelement(z)+1;//забиваем в массив ко¬личество элементов определенной строки
inc(alllines);//подсчет макс количества строк
end;
closeFile(f);//закрываем файл
end;
procedure DivStrToWrd(s:string);//функция разбиения строки в массив на слова д¬ля определения позиции слова в строке
var i,b:integer;
divs:set of char;
w:boolean;
begin
divs:=[' ',',','.','!','?',':',';']; //¬разделители
w:=false;
s:=s+' ';
cnt:=0;
for i:=1 to length(s) do
begin
if w then
begin
if s[i] in divs then //если равняется то мы не в слове
begin
inc(cnt);//увеличиваем счетчик элеме¬нта в массиве
wrd[cnt]:=copy(s,b,i-b);//копируем с¬лово в массив
w:=false;
end;
end else
begin
if not (s[i] in divs) then //если не ¬равняется ни одному из символов значит м¬ы в начале слова
begin
w:=true;//в начале слова
b:=i;//с какой позиции копировать сл¬ово
end;
end;
end;
end;
Function Encode(input:string;book:tbookdata):string;//функция кодирования
var posline,posofword,c,g:integer;
l1,l2,l3,l4:integer;
enc1,enc2:string;
c1,c2:integer;
i:integer;
index:integer;
m:integer;
countnul:integer;
mas:array[1..100] of string;
poslines:array[1..100] of integer;
poswords:array[1..100] of integer;
massive:array[1..1000] of string;
ind:integer;
k:integer;
num:integer;
mm:integer;
begin
index:=1;
ind:=1;
len:=len*100;
for g:=0 to alllines-1 do //цикл allli¬es-количество строк
if pos(input,book[g].w)<>0 then //если ¬введеное слово найдено в массиве то у на¬с есть номер массива в котором содержитс¬я строка
begin
DivStrToWrd(book[g].w);//разбиваем стро¬ку на слова
posline:=g;//позиция строки искомого сл¬ова
for c:=1 to cnt do//цикл определения по¬зиции слова в строке
if input=wrd[c] then 
begin
posofword:=c;//если введеное слово=слов¬у из разбитой на слова строки(которая в -массиве wrd) то позиция равняется с
poslines[index]:=posline;
poswords[index]:=c;
inc(index);
end;
end;
for m:=1 to same do
begin
posofword:=poswords[m];
posline:=poslines[m];
l1:=length(inttostr(alllines));//length¬ определяет количество символов;узнаем с¬колько символов
l2:=length(inttostr(posline));
l3:=length(inttostr(maxsymbol));//
l4:=length(inttostr(posofword));//
if l1>l2 then 
begin
c1:=l1-l2;//получаем количество нулей к¬оторые мы добавим вначале строки
for i:=1 to c1 do enc1:=enc1+'0';//доба¬вляем
end;
if l3>l4 then 
begin
c2:=l3-l4;//то же самое
for i:=1 to c2 do enc2:=enc2+'0';
end;
mas[ind]:=(enc1+inttostr(posline)+enc2+inttostr(posofword)+' ');//выводим на эк¬ран
inc(ind);
enc1:='';
enc2:='';
if posofword=0 then 
begin
inc(countnul);
dec(same);
end;
end;
i:=1;
k:=1;
while i<=100 do 
begin
while k<=same do
begin 
massive[i]:=mas[k];
inc(k);
inc(i);
end;
k:=1;
inc(i);
end;
if countnul>same then
for i:=1 to same+countnul+same-1 do
write(massive[i])
else
for i:=1 to same+countnul+1 do
write(massive[i])
end;
Function Decode(input:string;book:tbookdata):string;
var
l1,l2:integer;
st1,st2:string;
l3:integer;
i:integer;
st3:string;
yes:integer;
Begin
l1:=length(inttostr(alllines));//определяем кол-во символов 
l3:=length(input);//колво символов стро¬ки
for i:=1 to l1 do st1:=st1+input[i];//т¬ут мы разбиваем строку на две пример 031¬ разбимваем на 03 1 зависит сколько симв¬олов в l1;допустим 00301-всего строк 200¬(в числе 200 три символа значит в первой¬ строке будет три символа от введенной с¬троки а на 2 строку оставшиеся символы)
For i:=l1+1 to l3 do st2:=st2+input[i];
i:=1;
while st1[i]='0' do//избавляемся от нул¬ей до тех пор пока не будет символ нерав¬ный 0
if st1[i]='0' then Delete(st1,i,1) else break;//если символ равен 0 удаляем из ¬строки ноль
while st2[i]='0' do
if st2[i]='0' then Delete(st2,i,1) else break;
//итого в st1 у нас номер строки в st2 номер позиции
st3:=book[strtoint(st1)].w;//strtoint-перевод из строки в число;st3 присваиваем¬ строку из массива
DivStrToWrd(st3);//разбиваем строку на слова чтобы вытянуть по позиции слова ис¬комое слово
write(wrd[strtoint(st2)]+' ');
end;
var str:string;
i:integer;
w:string;
c:integer;
k:integer;
g:integer;
max:integer;
l:integer;
yes:integer;
wordsame:string;
book:tbookdata;
begin
SetConsoleCP(1251); 
SetConsoleOutputCP(1251); 

maxsymbol:=0;
index:=0;
book:=loadbook;//вызываем функцию 
for i:=0 to length(book)-1 do//с помощю length определяем макс число элементов массива
if book[i].symbolcount>=maxsymbol then maxsymbol:=book[i].symbolcount;//макс число элементов в строке
writeln('Кодируем-1,Декадируем-0: ');
readln(yes);
writeln('Введите текст');
readln(str);
i:=1;
while i<=length(str) do//разбиваем на слова введенную строку,пример Ветер леденит сначала будет идти работа со словом ветер а затем со след словом
begin
while (i<=length(str)) and (str[i]=' ') do i:=i+1;
w:='';
while (i<=length(str)) and (str[i]<>' ') do
begin
w:=w+str[i];//получили слово
i:=i+1;
end;
sameword[index]:=w; 
inc(index);
end;
same:=1;
for i:=0 to index-1 do
begin
if wordsame= sameword[i] then
begin tr:=true; inc(same);
end
else wordsame:=sameword[i]; 
end;
countwords:=index;
len:=index*index;
if yes=1 then
begin
if tr then Encode(sameword[i],book)
else
for l:=0 to index-1 do
begin
Encode(sameword[l],book);
//Decode(sameword[l],book);
end;
end
else
begin
if tr then Encode(sameword[i],book)
else
for l:=0 to index-1 do
begin
Decode(sameword[l],book);
end;
end;
end.
Smile189 вне форума Ответить с цитированием
Старый 16.11.2016, 08:28   #2
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

ТЫ бы хоть выделил что не работает, тут никто твой листинг разбирать небудет.
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 16.11.2016, 09:36   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
ТЫ бы хоть выделил что не работает
Бесполезно.
Коллега, Вы посмотрите другие сообщения от этого пользователя.
Уже есть темы, где обсуждаются проблемы с реализацией шифрации/дешифрации.

Да и сообщению, на которое Вы отвечаете, уже две недели.
Не удивлюсь, если на одном из тех форумов, где TC задал свои сакраментальные вопросы про кодировочную книгу уже всё разобрали и проблему решили.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему прсер работает на одних сайтах и не работает на других PHP_DELETANT PHP 4 12.02.2016 13:45
Здравствуйте ! в чем проблема,почему почему время исполнения операций не работает ? ion leahu Помощь студентам 6 23.11.2014 19:36
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
почему интеренет на Xp не работает, а на семерке работает Lenura Windows 18 04.10.2010 12:04
Почему не работает тег align=right?valign работает а align нет! aviv HTML и CSS 5 21.01.2009 17:46