IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Сортировки, Помогите решить задачу
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской

Репутация: -  0  +


Задача.
Дан список морфем, в котором указана сама морфема и её тип (приставка, корень, суффикс или окончание). В списке могут встречаться повторяющиеся морфемы.
Написать программу, результатом работы которой должен быть список морфем, разбитый на группы для каждого типа. Внутри этих групп морфемы должны быть упорядочены в лексикографическом порядке. В группе корней одна и таже морфема может встречаться несколько раз, а в других группах морфемы должны быть уникальными.


С чего начать???
Что сделать???
Как сделать???
Помогите.....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской

Репутация: -  0  +


Ну я так и делал, но пишет
Цитата
[Ïðåäóïðåæäåíèå] sort.dpr(33): Return value of function 'CmpStr' might be undefined

Вот тот же код (на всякий случай)::
Код

program sort;

{$APPTYPE CONSOLE}
uses
  SysUtils,
  windows;

{
  ôóíêöèÿ ñðàâíåíèÿ 2-õ ñòðîê â ëåêñèêîãðàôè÷åñêîì ïîðÿäêå
}
function CmpStr(const a, b: string): integer;
var
  i, lenA, lenB: byte;

begin
  lenA := length(a);
  lenB := length(b);

  i := 1;
  while (i <= lenA) and (i <= lenB) and (a[i] = b[i]) do
    inc(i);

  if (i > lenA) and (i > lenB) then
    CmpStr := 0
  else if (i > lenA) or ((i <= lenB) and (a[i] < b[i])) then
    CmpStr := -1
  else if (i > lenB) or ((i <= lenA) and (a[i] > b[i])) then
    CmpStr := 1;
end;

type
  { âîçìîæíûå âèäû ìîðôåì: ïðèñòàâêà, êîðåíü, ñóôôèêñ, îêîí÷àíèå }
  MorphemeType = (
    PREFIX,
    ROOT,
    SUFFIX,
    TERMINATION
  );

  MorphPtr = ^Morpheme;
  
  { ñòðóêòóðà, õðàíÿùàÿ èíôîðìàöèþ î ìîðôåìå â ñïèñêå ìîðôåì }
  Morpheme = record
    _type: MorphemeType; { âèä ìîðôåìû }
    _value: string;              { çíà÷åíèå ìîðôåìû }
    next: MorphPtr;            { óêàçàòåëü íà ñëåäóþùóþ ìîðôåìó â ñïèñêå }
  end;

  { îáúåêò - ñïèñîê ìîðôåì, ôàêòè÷åñêè îáû÷íûé îäíîíàïðàâëåííûé ñïèñîê, âîò òîëüêî ýëåìåíòû
    äîáàâëÿþòñÿ íå â íà÷àëî èëè êîíåö ñïèñêà, à äîáàâëÿþòñÿ òàêèì îáðàçîì, ÷òîáû ïîñëå äîáàâëåíèÿ
    î÷åðåäíîãî ýëåìåíòà â ñïèñîê, îí (ñïèñîê) áûë óïîðÿäî÷åí ïî ïîëÿì _value â ëåêñèêîãðàôè÷åñêîì ïîðÿäêå
  }
  MorphemList = object
    first: MorphPtr; // óêàçàòåëü íà ïåðâûé ýëåìåíò ñïèñêà

    constructor Create; // ñîçäàíèå ïóñòîãî ñïèñêà
    destructor Free; // óíè÷òîæåíèå ñïèñêà

    procedure Add(const mType: MorphemeType; const value: string); {
       äîáàâëåíèå ìîðôåìû â ñïèñîê (mType - òèï ìîðôåìû), value - çíà÷åíèå
   }
    procedure Print; // ïå÷àòü ñïèñêà ìîðôåì
  end;

constructor MorphemList .Create;
begin
  first := nil;
end;

destructor MorphemList.Free;
var
  head: MorphPtr;

begin
  while first <> nil do begin
    head := first;
    first := first^.next;
    dispose(head);
  end;
end;

procedure MorphemList.Add(const mType: MorphemeType; const value: string);
var
  p, prev, next: MorphPtr;
  cmp: integer;
begin
  new(p);

  p^._type  := mType;
  p^._value := value;

  if first = nil then begin
    p^.next := nil;
    first := p;
  end else begin

    prev := nil;
    next := first;
    cmp := CmpStr(next^._value, value);

    while (next <> nil) and (cmp < 0) do begin
      prev := next;
      next := next^.next;

      if next <> nil then
        cmp := CmpStr(next^._value, value);
    end;

    if (cmp <> 0) or (mType = ROOT) then begin
      if (prev = nil) then begin
        p^.next := first;
        first := p;
      end else if (next = nil) then begin
        p^.next := nil;
        prev^.next := p
      end else begin
        p^.next := next;
        prev^.next := p;
     end;
    end else dispose(p);

  end;

end;

procedure MorphemList.Print;
var
  p: MorphPtr;
begin
  p := first;
  while p <> nil do begin
    writeln(p^._value);
    p := p^.next;
  end;
end;

{
  â ðåçóëüòàòå ðàáîòû ïðîöåäóðû, íà âõîä êîòîðîé ïîñòóïàåò ñòðîêà S âèäà
  <íàçâàíèå_ìîðôåìû òèï_ìîðôåìû>
  áóäåò çàïèñü òèïà_ìîðôåìû â ïåðåìåííóþ mType è ñàìîé ìîðôåìû â ïåðåìåííóþ value
}
procedure GetMorphemInfo(const s: string;
                        var mType: MorphemeType;
                        var value: string);
var
  temp: string;
begin
  temp := copy(s, pos(' ', s) + 1, 255);

  if temp = 'ROOT' then
    mType := ROOT
  else if temp = 'PREFIX' then
    mType := PREFIX
  else if temp = 'SUFFIX' then
    mType := SUFFIX
  else mType := TERMINATION;

  value := copy(s, 1, pos(' ', s) - 1);
end;


const
  // ñèìâîëüíîå îòîáðàæåíèå íàçâàíèé âèäîâ ìîðôåì
  // szMotphTypes[PREFIX] == "PREFIX" è ò.ä.
  szMorphTypes: array [ MorphemeType ] of string =
    ('PREFIX',
     'ROOT',
     'SUFFIX',
     'TERMINATION'
    );

var
  // ìàññèâ ñïèñêîâ ìîðôåì, êàæäûé ýëåìåíò ìàññèâà - ñïèñîê ìîðôåì îïðåäåëåííîãî âèäà,
  // íàïðèìåð mList[ROOT] - ñïèñîê êîðíåé
  mList: array [ MorphemeType ] of ^MorphemList;
  mt: MorphemeType; // äîïîëíèòåëüíàÿ ïåðåìåííàÿ
  morphFile: Text; // òåêñòîâûé ôàéë ñ ìîðôåìàìè (ïðèìåð ñîäåðæàíèÿ ôàéëà ÿ ïðèâåë)
  temp, value: string; // äîïîëíèòåëüíûé ïåðåìåííûå

begin
  {îáðàùåíèå ê ðóññêîìó ÿçûêó}
  setconsoleCp(1251);
  setconsoleOutputCp(1251);

  assign( morphFile, 'morphems.txt' );
   reset( morphFIle ); // îòêðûâàåì ôàéë ñ ìîðôåìàìè äëÿ ÷òåíèÿ

  for mt := PREFIX to TERMINATION do
    new( mList[ mt ], Create ); // ñîçäàåì âñå ñïèñêè ìîðôåì

  while not eof ( morphFile ) do begin // ÷èòàåì ñòðîêè èç ôàéëà
    readln( morphFIle, temp );
    GetMorphemInfo(temp, mt, value); // âûäåðãèâàåì èç ñòðîêè èíôîðìàöèþ î ìîðôåìå
    mList[mt]^.Add(mt, value); // çàíîñèì ìîðôåìó â ñîîòâåòñòâóþùèé ñïèñîê
  end;

  for mt := PREFIX to TERMINATION do begin
    writeln( szMorphTypes[ mt ], '''s:'); // ïîäñêàçêà ïîêàçûâàåò ñïèñîê êàêîé èç ìîðôåì ñåé÷àñ áóäåò âûâåäåí
    mList[ mt ]^.Print; // ïå÷àòü î÷åðåäíîãî ñïèñêà ñïèñêà
    writeln;
    dispose( mList[ mt ], Free ); // óäàëåíèå ñïèñêà
  end;

  close( morphFile ); // íå çàáûâàåì çàêðûòü ôàéë
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
*alt   Сортировки   27.04.2008 19:25
*alt   Народ, ну помогите)) с чего начать????   4.05.2008 16:12
klem4   {$B-} uses crt; { функция сравнения 2-х с…   5.05.2008 0:30
Гость   klem4, а можно прокомментировать решение, а то я т…   7.05.2008 16:51
klem4   Хорошо, сегодня добавлю общие комметарии к програм…   8.05.2008 12:37
*alt   Сразу извинюсь, за следующий вопрос. Но всё же Что…   10.05.2008 17:21
volvo   Убрать подключение модуля Crt (вместо него подключ…   10.05.2008 17:34
*alt   Ну я так и делал, но пишет Вот тот же код (на вся…   10.05.2008 17:42
volvo   И что? Warning от Error отличаешь? Оно просто тебя…   10.05.2008 18:05
*alt   Она компилируется, но сразу же вылетает... Значит …   10.05.2008 18:24
volvo   А ты перед последней строкой ReadLn добавить не пр…   10.05.2008 19:15
*alt   Спасибо, volvo Всегда readln в конце проверяю, а щ…   10.05.2008 19:21
*alt   Ещё один вопрос... Как описать всё то же, но без и…   12.05.2008 14:04
volvo   Например вот так: uses sysutils; type MorphemeT…   12.05.2008 14:50
*alt   Не работает... Сначала пишет ошибку:: Constant obj…   12.05.2008 15:04
volvo   :mad: *alt, ты мою подпись как следует читал? Пер…   12.05.2008 15:09
*alt   volvo, пожалуйста, вы не могли бы написать коммент…   13.05.2008 15:50
*alt   volvo, ну напишите, пожалуйста, комментарии...   20.05.2008 13:48
volvo   Комментарии добавлены:   20.05.2008 14:57


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 22:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name