Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
Модератор форума: Berestovskiy  
Строки в Delphi 7
Помогите сделать задания.
Задания:
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.
1 | Автор: anton94by | 2014-04-13, 23:30   |  Репутация: [ + 1 ]
Программа, которую вы предоставили, написана на 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, я могу переписать и предложить вариант для этой платформы.
2 | Автор: DenH13855 | 2024-08-20, 13:42   |  Репутация: [ + 0 ]
  • Страница 1 из 1
  • 1
Поиск: