1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| *alt |
Сообщение
#1
|
|
Новичок ![]() Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
Задача.
Дан список морфем, в котором указана сама морфема и её тип (приставка, корень, суффикс или окончание). В списке могут встречаться повторяющиеся морфемы. Написать программу, результатом работы которой должен быть список морфем, разбитый на группы для каждого типа. Внутри этих групп морфемы должны быть упорядочены в лексикографическом порядке. В группе корней одна и таже морфема может встречаться несколько раз, а в других группах морфемы должны быть уникальными. С чего начать??? Что сделать??? Как сделать??? Помогите..... |
![]() ![]() |
| *alt |
Сообщение
#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. |
*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
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![]() ![]() |
|
Текстовая версия | 7.11.2025 8:41 |