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

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

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

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


Новичок
*

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

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


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


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


Гость






Например вот так:
uses sysutils;

type
MorphemeType = (
PREFIX, ROOT, SUFFIX, TERMINATION
);
const
szMorphTypes: array [MorphemeType] of string = (
'PREFIX', 'ROOT', 'SUFFIX', 'TERMINATION'
);

type
PTListItem = ^TListItem;
TListItem = record
value: string;
next: PTListItem;
end;
TList = record
first, last: PTListItem;
end;


procedure CreateList(var L: TList);
begin
L.first := nil; L.last := nil;
end;
procedure DestroyList(var L: TList);
var T: ptlistitem;
begin
while L.first <> nil do begin
T := L.first;
L.first := L.first^.next;
dispose(T);
end;
end;

procedure AppendToList(var L: TList; const value: string);
var p: PTListItem;
begin
new(p);
p^.value := value;
p^.next := nil;

if L.first = nil then L.first := p
else L.last^.next := p;

L.last := p;
end;

function ExistsInList(L: TList; const value: string): boolean;
var p: ptlistitem;
begin
ExistsInList := true;
p := L.first;
while p <> nil do begin
if p^.value = value then exit;
p := p^.next;
end;
ExistsInList := false;
end;

procedure SortList(var Ls: TList);
function insert_sort(l: ptlistitem): ptlistitem;

function insert(a: ptlistitem; l: ptlistitem): ptlistitem;
begin
a^.next := nil;
if l = nil then insert := a
else
if a^.value < l^.value then begin
a^.next := l; insert := a;
end
else begin
l^.next := insert(a, l^.next);
insert := l;
end;
end;

begin
if l = nil then insert_sort := nil
else insert_sort := insert(l, insert_sort(l^.next));
end;

begin
Ls.first := insert_sort(Ls.first);
end;

procedure PrintList(var L: TList);
var p: PTListItem;
begin
SortList(L);

p := L.first;
while p <> nil do begin
writeln(p^.value);
p := p^.next;
end;
end;

const
in_list: array[MorphemeType] of TList = (
(first:nil; last:nil),
(first:nil; last:nil),
(first:nil; last:nil),
(first:nil; last:nil)
);


procedure AppendMorph(mt: morphemetype; var value: string);
begin
if
((mt <> ROOT) and (not ExistsInList(in_list[mt], value)))
or
(mt = ROOT)
then begin
AppendToList(in_list[mt], value);
end;
end;


function GetMorphemInfo(const s: string;
var value: string): MorphemeType;
var
temp: string;
p: integer;
mt: morphemetype;
begin
p := pos(' ', s);
temp := copy(s, p + 1, 255);
for mt := low(mt) to high(mt) do begin
if temp = szMorphTypes[mt] then begin
GetMorphemInfo := mt;
end;
end;
value := copy(s, 1, p - 1);
end;


var
morphFile: Text;
temp, value: string;
mt: morphemetype;

begin
assign( morphFile, 'morphems.txt' );
reset( morphFIle );

while not eof ( morphFile ) do begin
readln( morphFIle, temp );
AppendMorph(GetMorphemInfo(temp, value), value);
end;

for mt := low(mt) to high(mt) do begin
PrintList(in_list[mt]);
DestroyList(in_list[mt]);
end;

close( morphFile );
readln;
end.
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 1.08.2025 16:22
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"