Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > PASCAL: текстовые задачи


Автор: xxBOBAHxx 8.12.2008, 20:49
№1.
Расставить слова в каждом предложении в алфавитном порядке и одновременно рассортировать предложения по возрастанию количества слов в каждом.

ПРИМЕР:
дано: Жили, жили не тужили дед да бабка.(7 слова) Долго они жили и счастливо.(5 слов)
требуемый результат: Долго жили и они счастливо. Бабка да дед жили жили не тужили.(все слова в обоих предложениях в алфавитном порядке)

Общие указания при составлении программы:
1. Текст стандартного типа String ввести с клавиатуры.
2. Между словами могут быть различные разделители (пробел, запятая, точка и т.д.), которые необходимо задать во множестве.
3. Вывести исходный текст и текст после преобразования его по условию задачи.

Теперь у меня проблема. Я смог расставить слова по алфавиту во всем тексте, а мне надо расставить слова по алфавиту отдельно в каждом предложении.
Помогите мне осуществить данную цель, пожалуйста)))
P.S. А рассортировать рассортировать предложения по возрастанию количества слов в каждом я попытаюсь сам)))

Код

var t1, t2:string;
mn, mn1:set of char;
a:array[1..50] of string[25];
c:string[25];
kb, kp, ksl, i, k:byte;
p:boolean;
begin
  readln(t1); t1:=t1+'';
  mn1:=['.', '!', '?'];
  mn:=[' ', ',', '-', ':', ';'];
  kp:=0;
  kb:=0; ksl:=0;
  for i:=1 to length(t1)  do
  if  (t1[i] in mn1) then inc (kp);  writeln('kol-vo pred =', kp);{считаю кол-во предложений}

  for i:=1 to length(t1)  do
  if not (t1[i] in mn) then inc (kb)
  else if kb>0 then{пустые слова не берем}
    begin
      inc(ksl);{счетчик слов}
      a[ksl]:=copy(t1, i-kb, kb);
      kb:=0;
    end;
  k:=ksl;
  repeat{сортируем в алфавитном порядке}
    p:=true; dec(k);
    for i:=1 to k do
      if (a[i])>(a[i+1]) then {сравниваем сами слова}
        begin
          c:=a[i];
          a[i]:=a[i+1];
          a[i+1]:=c;
          p:=false;
        end;
      until p;
  t2:='';
  for i:=1 to ksl do
  t2:=t2+a[i]+' ';
  writeln('text v alfavitnom poradke   ', t2);
end.

Автор: mr.Anderson 8.12.2008, 22:24
Все достаточно просто, сформируй массив из предложений (разбей строку по символам точки) и анализируй отдельно каждое предложение, потом склеишь их обратно в текст.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)