Ответ: Не такое оно и сложное.Главная проблема — то, что между словами может быть несколько пробелов.Устраним её, написав функцию, которая оставляла бы между словами по 1 пробелу:function RemoveSpaces(str : string) : string;begin   //Тут цикл for, переписанный через while   var iter := 1;   //Проходим по строке   while (iter < str.Length) do   begin      //Если видим 2 пробела подряд, удаляем 1 и откатывает итератор.      if (str[iter] = ‘ ‘) and (str[iter + 1] = ‘ ‘) then         begin            str := str.Remove(iter, 1);            iter -= 1;         end;      iter += 1;   end;   RemoveSpaces := str;end;Теперь мы можем получить кол-во слов очень просто:function CalcWords(str : string) : integer;begin   CalcWords := RemoveSpaces(str).Split(‘ ‘).Count();end;Т.е. мы делим строку на массив через пробелы, и считаем кол-во элементов массива.полный код: https://pastebin.com/A63ggdWm