Приветствую Вас Гость | RSS

Delphi заготовки

Понедельник, 13.05.2024, 21:35
Главная » 2012 » Май » 28 » Работа со строками в Pascal
07:38
Работа со строками в Pascal
{

Задание : Поиск строки,удовлетворяющей заданному условию.

В какой из них больше слов,длина которых равна заданному пользователем числу?

Все вычисления должны выполнятся в функции
}
uses crt;
const MaxCountWord=1000; { максимальное количество слов в тексте }
type
  Tword=record
   word:string;
   col:integer;
 end;
 
 TDocumcent=record;
    WordList: array[1..MaxCountWord] of Tword;{список слов}
    WordListCount:integer; {список слов }
 end;
var
    DocBody:TDocumcent; {тело документа }
    text:string; {строка }
    lnstr:integer; {длина слова}

 Procedure AddWord(word:string;var Doc:TDocumcent);
 var x:integer;
 begin
   for x:=1 to Doc.WordListCount do
   if Doc.wordlist[x].word=word then begin Doc.WordList[x].col:=Doc.WordList[x].col+1; exit; end;
   Doc.WordListCount:=Doc.WordListCount+1;
   Doc.WordList[Doc.WordListCount].word:=word;
   Doc.WordList[Doc.WordListCount].col:=1;
 end;
 Function CreateDocument(StextValue:string):TDocumcent;
  var
      doc:TDocumcent;
      s,s2:string;
      s3:string;
      im,i,y,start,x:Integer;

 begin
    s2:='';
    s3:='';
    s:=StextValue;
    doc.WordListCount:=0;
 for x:=1 to length(s) do begin
   if (s[x] in ['A'..'Z','a'..'z','А'..'Я','а'..'я','0'..'9']) and (x<>Length(s)) then begin {список символов из которых могут сосотоять слова}
   if s2='' then start:=x;
   s2:=s2+s[x];
   end
   else begin {если этот символ не из массива тех символов из которыйх могут состоять слова / значит это конец слова}
        if (s[x] in ['A'..'Z','a'..'z','А'..'Я','а'..'я','0'..'9']) then  {список символов из которых могут сосотоять слова}
        s2:=s2+s[x];
        if s2<>'' then begin
  //       if (pos(s2,copy(stext,1,start))=0) and (pos(s2,copy(stext,start+length(s2),length(s)))=0) then
         AddWord(s2,doc);

        s2:='';
        end;
   end;
 end;
 CreateDocument:=doc;
 end;
 {возвращает количестов слов длина которыз len в представлении строки TDocumcent}
 
 Function GetCountLenStr(Doc:TDocumcent;len:integer):Integer;
 var c,x:integer;
 begin
    c:=0;
     for x:=1 to Doc.WordListCount do
     if length(doc.wordlist[x].word)=len then  c:=c+1;
     GetCountLenStr:=c;
 end;
 
 {процедура  выполняет разбиение текста на строки для поиска }
Function ExecutRow(AllText:string;len:integer):integer;
{В какой из них больше слов,длина которых равна заданному пользователем числу}
     var RowIndex:integer;
         s:string;
         s2:string;
         l:Integer; {длина всего текста }
         m,x:integer;
         MaxRowIndex:integer;
         MaxRowValue:integer;
   begin
      s:=AllText;
      l:=length(s);
      s2:='';
      M:=0;
      MaxRowValue:=0;
      MaxRowIndex:=0;
      RowIndex:=0; {счетчик строк}
      for X:=1 to l do begin
        if (copy(s,x,2)=(#13+#10)) or ( s[x]=#10) then begin
         if s2<>'' then begin
           M:=GetCountLenStr(CreateDocument(s2),len);
           RowIndex:=RowIndex+1;
           if MaxRowValue<M then begin
               MaxRowIndex:=RowIndex;
               MaxRowValue:=m;
           end;

           end;
           s2:='';
        end
        else s2:=s2+s[x];
      end;
      ExecutRow:=MaxRowIndex;
   end;
 
begin
clrscr;
text:='Задание : Поиск строки,удовлетворяющей заданному условию.'+#13+#10+
'В какой из них больше слов,длина которых равна заданному пользователем числу?'+#13+#10+'Все вычисления должны выполнятся в функции';
Writeln('Введите длину слова ');
readln(lnstr);
Writeln('В строке номер ',ExecutRow(text,lnstr),' больше слов,длина которых равна ',lnstr);


end.
Просмотров: 1311 | Добавил: NetSoftWare | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: