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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2011, 17:48   #1
ldinka135
Пользователь
 
Регистрация: 22.12.2009
Сообщений: 10
По умолчанию Односвязные списки, создание англо-русского словаря

Здравствуйте!!!
Помогите пожалуйста, сделать вот такую работу, я вообще без понятия как...*

Используя односвязный список, создать англо-русский словарь. Каждая компонента структуры содержит следующие сведения: английское слово и его перевод (переводы). При запуске программы список формируется на основе данных считанных из файла, затем сортируется по ключу(в качестве ключевого поля использовать англ. слово). При выходе из программы данные из словаря сохраняются в том же файле.
Реализовать следующие операции для пользователя:
1) добавление нового слова в словарь.
2) поиск по английскому и русскому слову.
3) удаление слова из словаря.
4) вывод всего словаря в алфавитном порядке с организацией паузы для просмотра и возможностью прерывания просмотра.

Помогите, пожалуйста чем сможете =(
ldinka135 вне форума Ответить с цитированием
Старый 05.01.2011, 17:53   #2
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

оч не охото копаться у себя и удалять, то что Вам не нужно, поэтому просто выкладываю все
Код:
program spisok;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type PList=^TList;

  TList=record
    inf:integer;
    prior:Plist;
    next:Plist
  end;

  ListCont=object first,last:PList;
    constructor Init;
    function Empty:boolean; //функция проверки существования списка
    procedure Insert(x:integer); //процедура всавки элементов в конец списка
    procedure Print_forward(start:PList); //процедура печати списка от первого
    procedure Print_back(start:PList);  //процедура печати списка от последнего
    procedure Remove(var start:PList);  //процедура удаления списка
    function GetById(i:integer):PList;  //получение указателя по индексу
    function GetByValue(x:integer):PList; //получение указателя по значению
    function GetNextByValue(P:Plist):Plist;   //получение значения следующего за текущим
    procedure RemoveAll(var start:PList;x:integer); //процедура удаления элементов по значению
    procedure Swap(i,j:integer);  //процедура обмена элементов
    procedure BubbleSort; //сортировка пузырьком
    procedure QuickSort(l:integer;r:integer);   //быстрая сортировка
    function Exist(P:Plist):boolean;  //проверка входит ли элемент в список
    function countElement(start:Plist):integer; //количество элементов
    function GetNext(P:Plist):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):Plist;  
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:integer);   //быстрая сортировка
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;
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 05.01.2011, 17:54   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Код:
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;

function ListCont.GetByValue(x:integer):PList; //получение указателя по значению(инофрмационное поле)
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.
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 05.01.2011, 17:56   #4
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

написано на delphi, это можно смело убирать
Код:
  ListCont=object first,last:PList;
    constructor Init;
    function Empty:boolean; //функция проверки существования списка
    procedure Insert(x:integer); //процедура всавки элементов в конец списка
    procedure Print_forward(start:PList); //процедура печати списка от первого
    procedure Print_back(start:PList);  //процедура печати списка от последнего
    procedure Remove(var start:PList);  //процедура удаления списка
    function GetById(i:integer):PList;  //получение указателя по индексу
    function GetByValue(x:integer):PList; //получение указателя по значению
    function GetNextByValue(P:Plist):Plist;   //получение значения следующего за текущим
    procedure RemoveAll(var start:PList;x:integer); //процедура удаления элементов по значению
    procedure Swap(i,j:integer);  //процедура обмена элементов
    procedure BubbleSort; //сортировка пузырьком
    procedure QuickSort(l:integer;r:integer);   //быстрая сортировка
    function Exist(P:Plist):boolean;  //проверка входит ли элемент в список
    function countElement(start:Plist):integer; //количество элементов
    function GetNext(P:Plist):Plist;
  end;
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 05.01.2011, 18:05   #5
ldinka135
Пользователь
 
Регистрация: 22.12.2009
Сообщений: 10
По умолчанию

Спасибо огромное!!!!!!!!!!!!!!!!!!!! Все сделаю дальше!!!!!!!! СПАСИБО!!!!!!!!!!!!!!!!!!!!!
ldinka135 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна база англо-русского словаря в txt kostek Помощь студентам 4 13.05.2019 07:05
Односвязные списки Nike0 Общие вопросы C/C++ 0 26.12.2010 12:07
Односвязные списки Anna T Паскаль, Turbo Pascal, PascalABC.NET 2 19.12.2010 18:58
ЯЗЫК СИ.ОДНОСВЯЗНЫЕ СПИСКИ. Даша Киска Помощь студентам 0 09.12.2010 20:18
Односвязные списки art_stalker Общие вопросы C/C++ 5 21.04.2010 22:49