Задача состоит в чтении некоторого текста, выборе из него слов и подсчете частоты их появления, то есть, в составлении частотного словаря. Для чего нужно составить список слов, найденных в тексте. Каждое очередное слово, прочитанное в тексте, ищется в списке. Если слово найдено, то счетчик его частоты увеличивается, в противном случае слово добавляется к списку.Предполагается, что слова уже выделены из исследуемого текста и находятся во входном файле.
Что -то я никак не могу сообразить. Помогите пожалуйста, если не трудно. Заранее, большое спасибо!!!!
Lapp
9.12.2007 5:15
1. Объясни мне, неучу, что такое ЛОС. Честно искал в словарях и просто в Яндексе, не нашел ничего подходящего..
2. Текст на каком языке? На русском? Тогда как ты собираешься поступать с различными формами слова? разные окончания, суффиксы, приставки.. Или это не есть реальный текст, а просто набор слов, и о таких вещах беспокоиться не нужно?
Гость
9.12.2007 16:51
Цитата(Lapp @ 9.12.2007 1:15)
1. Объясни мне, неучу, что такое ЛОС. Честно искал в словарях и просто в Яндексе, не нашел ничего подходящего..
2. Текст на каком языке? На русском? Тогда как ты собираешься поступать с различными формами слова? разные окончания, суффиксы, приставки.. Или это не есть реальный текст, а просто набор слов, и о таких вещах беспокоиться не нужно?
ЛОС- Линейный Односвязный Список. Слова скорее всего любые. Должно быть 100% совпадение. Я думаю здесь лучше тип String использовать.
Bandit
9.12.2007 16:54
ЛОС- Линейный Односвязный Список. Слова скорее всего любые. Должно быть 100% совпадение. Я думаю здесь лучше тип String использовать.
Я первый раз забыл на форум зайти.
Bandit
12.12.2007 20:36
Type te=string; pe=^el; el=Record inf:te; next:pe end; Var sag,p,q,sag2:pe; n,i,j:integer; procedure COPY (sag:pe; Var sag2:pe); //Копирование списка sag в список sag2 begin if sag=nil then sag2:=nil else begin new (sag2); sag2^.inf:=sag^.inf; COPY (sag^.next, sag2^.next) end; end; procedure PRINT (sag:pe);// вывод на экран Var q:pe; begin q:=sag^.next; while q<>nil do begin write (q^.inf, ' '); q:=q^.next end; end; {--------------------------------------------------------------------------------}
begin New (sag); sag^.next:=Nil; p:=sag; writeln ('Zadayte kol-vo elementov LOS'); readln (n); For i:=1 to n do Begin New (q); Writeln ('Vvedite zna4 o4erednogo elementa:'); readln (q^.inf); p^.next:=q; p:=q; end; q^.next:=Nil;//Ввод ЛОСа PRINT (sag); COPY (sag, sag2); PRINT (sag2); writeln; writeln ('Lx'); PRINT (sag); readln; end.
Написал вот как вводить Список и вывести его. Мне для этой задачи как я понял нужно при вводе слова или символа его нужно искать в списке. Если его там нет, добавить к списку, а если есть повысить счётчик данного слова/символа.
Вот у меня вопрос: как реализовать счетчик у каждого символа, и что б к ним ещё можно было потом обратится для увеличения счётчика. Для этого, что нужно создать ещё один Список, или тут чем-то другим можно обойтись?
klem4
12.12.2007 23:28
разберешься ?
type PTListElem = ^TListElem;
TListElem = record data: String; count: Integer; next: PTLIstElem end;
constructor TList.Create; begin head := nil; last := nil; end;
destructor TList.Free; var T: PTListElem; begin while not Empty do begin T := head; head := head^.next; dispose(T); end; end;
function TList.Empty: Boolean; begin Empty := head = nil; end;
procedure TList.Pop(var value: TListElem); var T: PTListElem; begin if not Empty then begin T := head; head := head^.next; value := T^; dispose(T); end; end;
procedure TList.Push(const value: String); var R, first: PTListElem; begin first := head;
while (head <> nil) and (head^.data <> value) do head := head^.next;
if head <> nil then begin inc(head^.count); head := first; end else begin new®;
R^.data := value; R^.count := 1; R^.next := nil;
head := first;
if Empty then begin head := R; last := head; end else begin last^.next := R; last := R; end; end;
end;
procedure TList.PrintList; var T: TListElem; begin while not Empty do begin Pop(T); writeln(T.data, ': ', T.count); end; end;
Спасибо, попробую разобраться. Но, когда попробовал запустить выдал ошибку.
Эта ошибка как я заметил, появляется в крупных программах. Что это за ошибка и как от неё избавиться!!??
klem4
13.12.2007 1:49
ну это явно не Паскалевский еррор ... В Паскале 105 - я ошибка связана с использованием inline вроде ... Какой у тебя компилятор ?
volvo
13.12.2007 1:54
Если в Runtime - "File not open for output"
Особенно актуально при запуске на Дельфи неконсольного приложения, и попытке выполнить WriteLn
Bandit
13.12.2007 13:27
У меня Delphi 7. Прогу пишу в Console Application.
volvo
13.12.2007 13:47
Тогда проверь наличие директивы {$APPTYPE CONSOLE}, потому что с ней ошибки не возникает, а вот без нее - очень даже...
Lapp
13.12.2007 13:48
Цитата(Bandit @ 13.12.2007 9:27)
У меня Delphi 7. Прогу пишу в Console Application.
М
Разговоры про Дельфи - в раздел Дельфи.
Bandit
13.12.2007 14:11
Спасибо!!! Всё заработало!!! Я думал, что эта строчка какая-то лишняя и удалял её всегда, чтоб место не занимала.
Прошу прощения, что не в том разделе форума тему создал. Но ведь консоль Делфи, это ж Турбо Паскаль.
Lapp
13.12.2007 14:18
Цитата(Bandit @ 13.12.2007 10:11)
Прошу прощения, что не в том разделе форума тему создал. Но ведь консоль Делфи, это ж Турбо Паскаль.
Да?.. Ну, тогда вставляй эту строчку во все ТР-программы и ни в коем случае не выбрасывай! Тема, может, и в том разделе, если ты касаешься только того, что совместимо с ТР. Но вопрос про ошибку - уже не в том.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.