![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 14.05.2010
Сообщений: 20
|
![]()
Нужно создать толковый словарь!!!! Pascale!!!!
1) добавление нового слова в словарь. 2) поиск по слову. 3) удаление слова из словаря. 4) вывод всего словаря в алфавитном порядке с организацией паузы для просмотра и возможностью прерывания просмотра. заранее спасибо!!!!!! ![]() program spisok; {$APPTYPE CONSOLE} uses SysUtils; type PList=^TList; TList=record inf:integer; prior:Plist; next:Plist end; constructor ListCont.Init; //инициализация списка begin first:=nil; last:=nil; end; function ListCont.countElement(start:Plist): integer; //подсчет количества элементов var temp:integer; begin temp:=0; while(start<>nil) do begin inc(temp); start:=start^.next; end; countElement:=temp; end; function ListCont.GetNextByValue(P:Plist):Pl ist; Var S:PList; i:integer; begin if (Exist(P)) then begin if p=last then GetNextByValue:=nil else begin s:=p^.next; GetNextByValue:=S; end; end else GetNextByValue:=nil; end; function ListCont.Exist(P:Plist):boolean; var start:PList; flag:boolean; begin flag:=false; start:=first; while ((start<>nil) and (flag=false)) do begin if start=p then flag:=true else start:=start^.next; end; end; function ListCont.Empty:boolean; //процедура проверки наличия списка begin Empty:=(last=nil) and (first=nil); end; procedure ListCont.QuickSort(l:integer;r:inte ger); //быстрая сортировка var i,j:integer; X:Plist; begin i:=l; j:=r; x:=GetByid((l+r) div 2); repeat while (GetById(i)^.inf<x^.inf) do inc(i); while (GetById(j)^.inf>x^.inf) do dec(j); if (i<=j) then begin Swap(i,j); inc(i); dec(j); end; until (i>j); if j>l then QuickSort(l,j); if r>i then QuickSort(i,r); end; procedure ListCont.BubbleSort; //пузырьковая сортировка var p,q:PList; i,j,n:integer; begin n:=countElement(first); for i:=2 to n do begin for j:=n downto i do begin p:=GetById(j-1); q:=GetById(j); if p^.inf<q^.inf then begin swap(j,j-1); end; end; end; end; procedure ListCont.Insert(x:integer); //процедура вставки элементов в конец списка(информационная часть) var p:PList; begin new(p); p^.inf:=x; p^.next:=nil; if Empty then begin first:=p; first^.prior:=nil; end else begin last^.next:=p; p^.prior:=last; end; last:=p; end; procedure ListCont.Remove(var start:PList); //процедура удаления списка var q:Plist; begin if Exist(start) then begin if start=nil then writeln('List not init') else begin while start<>nil do begin q:=start; start:=start^.next; dispose(q); end; end; end else writeln('ne tot spisok'); end; procedure ListCont.Print_forward(start:PList) ; //процедура печати элементов с первого(начало) begin if start=nil then writeln('List not init') else begin while (start<>nil) do begin write(start^.inf,' '); start:=start^.next; end; end; end; procedure ListCont.Print_back(start:PList); //процедура печати элементов с последнего(начало) begin if start=nil then writeln('List not init') else begin while (start<>nil) do begin write(start^.inf,' '); start:=start^.prior; end; end; end; function ListCont.GetById(i:integer):PList; //получение указателя по индексу(индекс) var p:PList; j:integer; begin p:=first; j:=1; while ((p<>nil) and (j<>i)) do begin p:=p^.next; inc(j); end; if p=nil then GetById:=nil else if j=i then GetById:=p; end; |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 14.05.2010
Сообщений: 20
|
![]()
function ListCont.GetByValue(x:integer):PLis t; //получение указателя по значению(информационное поле)
var p:PList; begin p:=first; while ((p<>nil) and (p^.inf<>x)) do begin p:=p^.next; end; if p=nil then GetByValue:=nil else if p^.inf=x then GetByValue:=p; end; procedure ListCont.RemoveAll(var start:PList;x:integer); //процедуру удаления элементов больших по значению(информационное поле) //если такого значения инф поля нет то список оставлять таким? var p,q,t:PList; begin p:=first; t:=GetByValue(x); if t=nil then writeln('element not find') else begin while (p<>nil) do begin if p^.inf > x then //косяк begin //нашли нужные значения if p = first then begin //если удаляем первый элемент first := p^.next; //то редактируем указатель начала first^.prior := nil; //удалить end else if p^.next = nil then p^.prior^.next := nil else//если последний, то редактируем предпоследний begin //если где-то в середине p^.prior^.next := p^.next;//редактируем p^.next^.prior := p^.prior;//соседнии элементы end; q := p; //указатель на удаляемый элемент p := p^.next; dispose(q);//удаляем continue end; p:=p^.next; end; end; end; procedure ListCont.Swap(i,j:integer); //процедура обмена элементов var p,q,t:PList; begin p:=ListCont.GetById(i); q:=ListCont.GetById(j); if ((p<>nil) and (q<>nil)) then begin new(t); t^.inf:=p^.inf; p^.inf:=q^.inf; q^.inf:=t^.inf; end else writeln('element not find') end; function ListCont.GetNext(P:Plist):Plist; //получение значения следующего за текущим var max,x,q,start:PList; flag:boolean; begin flag:=false; writeln('element ',p^.inf); new(max); max^.inf:=32767; start:=first; while (start<>nil) do begin if start^.inf>p^.inf then begin if ((start^.inf<max^.inf) and (start^.inf<>p^.inf)) then begin max:=start; flag:=true; end; end; start:=start^.next; end; if flag=false then GetNext:=nil else GetNext:=max; end; var List:ListCont; //список temp_o,temp_t,i:integer; temp_list:PList; flag:boolean; begin List.Init; //создание списка {================================== =================================== ========== вставка элементов в список и вывод =================================== =================================== =========} writeln('output list forward'); List.Print_forward(List.first); writeln('output list back'); List.Print_back(List.last); flag:=true; while (flag) do begin writeln('enter data element'); read(temp_o) ; if temp_o=-1 then flag:=false else List.Insert(temp_o); end; writeln('output list forward'); List.Print_forward(List.first); //удаление списка { writeln; List.Remove(List.first); writeln('output list forward'); List.Print_forward(List.first);} //удаление элементов больше заданной ин части { writeln; writeln('entert data'); readln(temp_o); List.RemoveAll(List.first,temp_o); writeln('output list forward'); List.Print_forward(List.first);} //получение указателя по индексу { writeln; writeln('enter index'); readln(i); temp_list:=List.GetById(i); if temp_list=nil then writeln('index not find') else writeln('data=', temp_list^.inf);} //получение указателя по значению { writeln; writeln('enter inf'); readln(temp_o); temp_list:=List.GetByValue(temp_o); if temp_list=nil then writeln('element not find') else writeln('data=', temp_list^.inf); } //получение значения следующего за текущим { writeln; writeln('next value'); temp_list:=List.GetNextByValue(List .first); if temp_list<>nil then writeln('data=', temp_list^.inf) else writeln('element not find'); } //сортировка пузурьком { writeln; writeln('buble sort'); List.BubbleSort; writeln('output list forward'); List.Print_forward(List.first); } readln(i); end. ![]() |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Толковый словарь (односвязный список) | solisoul | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 08.01.2011 13:06 |
Толковый словарь (односвязный список) | solisoul | Фриланс | 5 | 08.01.2011 00:18 |
Проверьте код | neomax38 | Помощь студентам | 2 | 27.12.2010 16:53 |
Проверьте код | monty "2" | Помощь студентам | 2 | 08.04.2010 17:44 |
Проверьте код ! | Михаил Юрьевич | Общие вопросы Delphi | 7 | 08.02.2008 09:32 |