Помогите сделать задания. Задания: 1) Дан текст. Найти множество всех слов, которые встречаются во всех предложениях текста. 2) Для каждого из слов заданного предложения указать, сколько раз оно встречается в предложении. Заранее Спасибо.Добавлено (13.04.14, 23:28) --------------------------------------------- Вот код для первого задания, конечно не знаю правильный ли, но хоть даже и правильный, то отладить у меня его не получилось: Код ConstNums = ["0","1","2","3","4","5","6","7","8","9"];
Letters = [ "q","w","e","r","t","y","u","i","o","p", "a","s","d","f","g","h","j","k","l","z", "x","c","v","b","n","m","Q","W","E","R", "T","Y","U","I","O","P","A","S","D","F", "G","H","J","K","L","Z","X","C","V","B", "N","M","й","ц","у","к","е","н","г","ш", "щ","з","х","ъ","ф","ы","в","а","п","р", "о","л","д","ж","э","я","ч","с","м","и", "т","ь","б","ю","Й","У","К","Е","Н","Г", "Ш","Щ","З","Х","Ъ","Ф","Ы","В","А","П", "Р","О","Л","Д","Ж","Э","Я","Ч","С","М", "И","Т","Ь","Б"];
NumsAndLetters = Nums + Letters;
WordChars = NumsAndLetters+["-"];
Procedure ParseWords(const s:String;p_nMinWordLength:Integer); Var c,r:String; cn,l,n,k:Integer; wrds:TStringList;
Function _ReadWord:Boolean; Label m; Begin
m: Result:=False; c:=""; If n>(l+1) Then Exit; While True Do Begin If s [n]In WordChars Then Break; If n=l Then Break; Inc(n); End;
c:=s[n]; Inc(n); While True Do Begin
If s [n]In WordChars Then c:=c+s [n]Else Break; If n=l Then Break; Inc(n); End; If Length(c)<=p_nMinWordLength Then GoTo m Else Result:=True;
End;
Begin
If Trim(s)="" Then Exit; wrds:=TStringList.Create; wrds.Sorted:=True; l:=Length(s); n:=1; While _ReadWord Do If c<>"" Then Begin r:=AnsiLowerCase(c); k:=wrds.IndexOf(r); If k=-1 Then wrds.AddObject(r,TObject(0)) Else wrds.Objects[k]:=TObject(Integer(wrds.Objects[k])+1); End; Form1.Memo2.Lines.Add("Строка ""+s+"""); For k:=0 to wrds.Count-1 Do Form1.Memo2.Lines.Add(" Количество слов ""+wrds[k]+"":"+IntToStr(Integer(wrds.Objects[k])+1)); Application.ProcessMessages; wrds.Free; End;
procedure TForm1.sButton1Click(Sender: TObject); Var i:Integer; begin For i:=0 to Memo1.Lines.Count-1 Do ParseWords(Memo1.Lines[i],2); end; Добавлено (13.04.14, 23:30) --------------------------------------------- Вот код для второго задания, конечно не знаю правильный ли, но хоть даже и правильный, то отладить у меня его не получилось: Код program Project1;{$APPTYPE CONSOLE}
//uses crt;
var s,sl:string; k,i:integer; begin write('Vvedite tekst:'); readln(s); write('Vvedite slovo: '); readln(sl); k:=0; while pos(sl,s)>0 do begin k:=k+1; delete(s,pos(sl,s),length(sl)); end; writeln('Slovo v danom tekste vstre4aetsia ->',k, 'raz'); end.
|
|
|
Программа, которую вы предоставили, написана на Delphi (для первого задания) и Pascal (для второго). Прежде чем приступить к улучшению и отладке кода, давайте разберем и предложим решения для каждой задачи. Задание 1: Найти множество всех слов, которые встречаются во всех предложениях текста Для этого нужно: Разделить текст на предложения.Для каждого предложения выделить слова и сохранить их в виде множества.Найти пересечение всех множеств слов из каждого предложения.Вот пример на Python: pythonimport refrom functools import reducedef parse_words(text): return set(re.findall(r'\b\w+\b', text.lower()))def find_common_words(text): sentences = re.split(r'[.!?]', text) word_sets = [parse_words(sentence) for sentence in sentences if sentence.strip()] common_words = reduce(set.intersection, word_sets) return common_wordstext = "Пример текста. Текст содержит слова. Пример с общими словами."common_words = find_common_words(text) print("Слова, встречающиеся во всех предложениях:", common_words)Задание 2: Указание количества повторений слов в предложенииДля этого нужно: Разделить предложение на слова.Подсчитать количество каждого слова.Вот пример на Python: pythonfrom collections import Counterdef count_words(sentence): words = re.findall(r'\b\w+\b', sentence.lower()) word_count = Counter(words) return word_countsentence = "Это пример предложения. Это предложение содержит слова."word_count = count_words(sentence) for word, count in word_count.items(): print(f"Слово '{word}' встречается {count} раз(а)")Подсказки по кодуВместо использования списков для букв и цифр, можно использовать регулярные выражения для выделения слов.Использование встроенных коллекций (например, set и Counter в Python) упрощает работу с множествами и частотным анализом.Если вы хотите, чтобы код был улучшен на Delphi или Pascal, я могу переписать и предложить вариант для этой платформы.
|
|
|