Pascal Чётные и нечётные количества букв в словах

Помогите дописать код. Не могу никак до конца реализовать. Требуется чтобы программа возвращала три целых числа, количество слов в строке с чётным количеством букв, нечётным и количество слов. Важно чтобы это происходило посимвольно.

Char:        ' '
in_word:     false
word_count:  1
word_length: 0

Char:        'w'
in_word:     false -> true
word_count:  1
word_length: 1

Char:        'o'
in_word:     true
word_count:  1
word_length: 2

Char:        'r'
in_word:     true
word_count:  1
word_length: 3

Char:        'l'
in_word:     true
word_count:  1
word_length: 4

Char:        'd'
in_word:     true
word_count:  1
word_length: 5

Char:        ' '
in_word:     false
word_count:  2
word_length: 0

И сам код

program helptest;
var
   input     : string;
   in_word   : boolean;
   word_count    : integer;
   word_length   : integer;
   word_position : integer;
   i         : integer;
begin
  i := 0;
  in_word := false;
  word_count := 0;
  word_length := 0;
  word_position := 0;
  input:= ' ';
  writeln('Enter your string');
  read(input);
  for i := 1 to length (input) do
  begin
    if in_word and (input[i] = ' ') then
      begin
     word_length = input[i] - word_position; 
     in_word = false;
     inc(word_count);
      end
    else if in_word then
      begin
     word_length = input[i] - word_position;
     in_word = false;
      end
    else if not in_word and (input[i] <> ' ') then
      begin
     word_position = input[i];
     in_word = true;
      end;
     writeln('word_length = ', word_length);
     writeln('word_count = ', word_count);
  end
end.

Ответы (1 шт):

Автор решения: MBo

Вам нужно отслеживать только два комбинированных условия (в остальных случаях просто нечего делать)

Если in_word and (s[i] = ' '), то слово закончилось, нужно посчитать его длину как разность с запомненным началом, увеличить соотв. счётчик и сбросить in_word. То же самое нужно сделать, если строка закончилась в состоянии in_word. От лишнего кода для этого случая можно избавиться, просто добавив к строке пробел.

Если not in_word and (s[i] <> ' '), то слово начинается, запомните позицию, и установите in_word

Всё.

program contest1;
var
  s: string;
  in_word: Boolean;
  i, Start, Odd_count, Even_count: Integer;
begin
   s := 'А мама мыла   грязную раму';

   s := s + ' ';
  for i := 1 to length(s) do
    if in_word and (s[i] = ' ') then begin
      in_word := False;
      if Odd(i - Start) then
        Inc(Even_count)
      else
        Inc(Odd_count);
    end
    else if not in_word and (s[i] <> ' ') then begin
      in_word := True;
      Start := i;
    end;

  Writeln('Odd ', Odd_count, ' Even ', Even_count);
  Readln;
end.
→ Ссылка