Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2014, 21:28   #1
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
Восклицание

Помогите доделать программу. ( Архив внизу)
Задания:
1) Дан текст. Найти множество всех слов, которые встречаются во всех предложениях текста.
2) Для каждого из слов заданного предложения указать, сколько раз оно встречается в предложении.
( чтение и запись из файла можно не делать, само важное отладить работу 1 и 2 задания).
Заранее Спасибо.

Код для 2-го задания, отладьте его для программы

Код:
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-ой программы, отладьте его для программы, которая вложена в архиве

Код:
Const
Nums = ["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;
Вложения
Тип файла: rar 8.rar (191.7 Кб, 7 просмотров)

Последний раз редактировалось Stilet; 13.04.2014 в 23:17.
Anton94.by вне форума Ответить с цитированием
Старый 14.04.2014, 10:09   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Для каждого из слов заданного предложения
каждого - нужно не вводить слово, а дать число для каждого из них.
заданного - нужно выбирать интересуемое предложение или вывести для каждого?

Короче, для решения обеих задач нужно разбить текст на предложения, а предложения на слова.

Начнем.
1. Выделяем предложения (предложения разделяются точкой)
- удали последнюю точку, если она там есть
- переведи весь текст в нижний регистр
- разбей текст на предложения (например TStringList). Каждое новое предложение начинай с точки
2. Выделяем слова (слова разделяются пробелом и знаками препинания)
- удали ненужные знаки препинания (, ; : ... и т.д.) и переносы заменив их пробелами
- разбей предложения на слова (сохраняй тоже в TStringList (Sorted = True, Duplicates = dupIgnore*)).

* - пока не посчитал сколько повторов - дублекаты нужны

Последний раз редактировалось Sibedir; 14.04.2014 в 12:42.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с Delphi 2010 - как в Delhpi 2010 установить компонент TCommPortDriver Chudyak Компоненты Delphi 0 08.04.2014 08:06
работа со строками 3 Fuckoff Помощь студентам 0 18.04.2011 21:40
delhpi sergi Помощь студентам 1 24.02.2011 20:01
работа со строками CHOSEN1 Помощь студентам 5 22.12.2010 18:59
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19