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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2013, 06:11   #1
HailMe
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 13
По умолчанию Сортировка вставками

Здравствуйте. Нужно отсортировать слова в тексте методом простых вставок, по алфавиту. Перед сортировкой нужно слова из текста перенести в другой файл, в формате "Слово НомерВТексте".
Пытался использовать двухсвязный список. Пишу в ABC.NET. Сортировать может только при 529 словах в файле максимум. Больше - никуда. Пишет System.ExecutionEngineException. В самом тексте для сортировки около 1800 слов. Проблема в среде или в оптимизации и как можно это исправить?

PHP код:
type
  words 
record
    inf
integer;
    
wrdstring;
    
nmb:integer;
  
end;
  
  
plist = ^tlist;
  
tlist record
    data
words;
    
nextprevplist;
  
end;
  
  
p2list = ^plist;


procedure Display(list: plist);
var
 
  
pplist;
begin
 
  
if list = nil then
    writeLn
('EMPTY')
  else
  
begin
    p 
:= list;
    
    while 
p^.prev <> nil do
      
:= p^.prev;
    
    while 
<> nil do
    
begin
      
if (p^.data.wrd 'Begin'then p := p^.next;
      
writeln(p^.data.wrd,' ',p^.data.inf);
      
:= p^.next;
      if (
p^.data.wrd 'яяяяяяяяя'then Break;
    
end
  end
;
end;

procedure AddToEnd(list: p2listdintegersstring);
var
  
priorplist;
begin
  prior 
:= nil;
  
  while list^ <> 
nil do
  
begin
    prior 
:= list^;
    list :=  @list^^.
next
  end
;
  
  New(list^);
  
  
with list^^ do
  
begin
    data
.inf := d;
    
data.wrd := s;
    
data.nmb := d;
    
next := nil;
    
prev := prior
  end
end
;





procedure Sort(list: plistn:integer);
label m;
  
  function 
Check(abstring): boolean;
  var
    
iinteger;
  
begin
    i 
:= 1;
    
  for 
i:=1 to Length(a) do begin  
    
if a[i] = b[ithen continue
    else if 
a[i] < b[ithen begin Check := false; break; end
    
else begin Check := true; break; end
  end
;
  
end;



var
  
pplist;
  
sstring;
  
iinteger;
  
save1save2words;

begin
  p 
:= list;
  
  while 
<> nil do 
  
begin
    
    
for := 1 to n do  
    
begin
     
      
      
      
if p^.data.nmb i then begin
        repeat
          p 
:= p^.prev;
        
until p^.data.nmb i;
      
end;
      
      if 
p^.data.nmb i then begin
        repeat
          p 
:= p^.next;
        
until p^.data.nmb i;
      
end;
      
      if (
p^.next)^.data.wrd 'яяяяяяяяя' then goto m;
      
      if  (
Check(p^.data.wrd, (p^.next)^.data.wrd)) = true then begin
        
        save1 
:= p^.data;
        
:= p^.next;
        
save2 := p^.data;
       
p^.data.wrd := save1.wrd;
       
p^.data.inf := save1.inf;
       
:= p^.prev;
       
p^.data.inf := save2.inf;
       
p^.data.wrd := save2.wrd;
        
        
      
end;
      
      
:= p^.next;
      if 
p^.data.nmb 0 then goto m;
      
      if  (
Check(p^.data.wrd, (p^.next)^.data.wrd)) = true then begin
        
        save1 
:= p^.data;
        
:= p^.next;
        
save2 := p^.data;
       
p^.data.wrd := save1.wrd;
       
p^.data.inf := save1.inf;
        
:= p^.prev;
       
p^.data.inf := save2.inf;
       
p^.data.wrd := save2.wrd;  
      
end
         
repeat
        
if  (((p^.prev)^.data.nmb)<>0) and ((Check((p^.prev)^.data.wrd, (p^.data.wrd))) = truethen begin
          p 
:= p^.prev;   
          
save1 := p^.data;
          
:= p^.next;
          
save2 := p^.data;
          
p^.data.wrd := save1.wrd;
          
p^.data.inf := save1.inf;
          
:= p^.prev;
          
p^.data.wrd := save2.wrd;
          
p^.data.inf := save2.inf;
          
        
end
      until 
(Check((p^.prev)^.data.wrd, (p^.data.wrd))) = false;
      
    
end;
  
end;
  
m:  end;

var
  list: 
plist;
  
inhjerr,linteger;
  
f,gtext;
  
str1str2str3str4,str5str6string;

begin
  n
:=1;
  
AddToEnd(@list, 0'Begin');
  
  
assign(g'D:\PASCAL\g.txt');
  
reset(g);
  
assign(f'D:\PASCAL\f.txt');
  
rewrite(f);
  
  while 
not (EOF(g)) do
  
begin
    
    readln
(gstr1);
    
    
str2 := str1;
    
    if 
str2='' then continue;
    
    if 
str2[length(str2)] <> ' ' then
      str2 
:= str2 ' ';
    
    
:= 1;
    
    
repeat
      
if str2[i] = ' ' then begin
        str3 
:= copy(str21i);
       
       for 
l:=1 to length(str3) do
        
str3[l]:=LowCase(str3[l]);
       
        
delete(str21i);
        if 
str3<>'— ' then begin
        
        writeln 
(f,str3,n);
        
n:=n+1;
        
end;
        
:= 0;
      
end;
      
:= 1;
    
until str2 '';
    
  
end;
  
close (f);
  
assign(f'D:\PASCAL\f.txt');
  
reset (f);
  
  while 
not  EOF(f) do begin
   readln 
(f,str4);
   
h:=Length(str4);
    for 
i:=1 to h do begin
     
if str4[i]=' ' then begin
      str5
:=copy(str4,1,i);
      
str6:=copy(str4,i+1,h);
      
Val(str6,j,err);
      
AddToEnd(@list, jstr5);
      
end;
     
end;    
   
   
end;  
  
  
AddToEnd(@list, 0'яяяяяяяяя');
  
  
Display (list);
  
writeln;
  
Sort(list, n);
  
end
HailMe вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка вставками Mahoyn93 Общие вопросы C/C++ 0 20.05.2012 20:24
Сортировка-ВСТАВКАМИ sher_man Помощь студентам 0 15.04.2011 08:03
Сортировка вставками Katyunya Помощь студентам 1 20.04.2010 08:27
Сортировка вставками blind0482 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.12.2009 13:15
Сортировка вставками Pti44ka Помощь студентам 3 17.11.2009 16:49