Найти слово под заданным номером

Задача: 

Найти слово, стоящее в тексте под определенным номером, и вывести его первую букву.

Описание переменных: 
  • count - счетчик слов;
  • flag - "сигнализатор" о нахождении внутри слова.
Алгоритм решения задачи: 
  1. Если очередной символ не пробел, и мы не находимся внутри слова, то увеличить переменную-счетчик слов и запоминать, что находимся внутри слова. Если счетчик слов равен искомому по счету слову, то завершить выполнение цикла.
  2. Когда встречается пробел, сообщать, что вышли из слова.
Программа на языке Паскаль: 

var
    str: string;
    len, count, flag, i, n: byte;
 
begin
	writeln('String: '); readln(str);
	write('Word №: '); readln(n);
	len := length(str);
	count := 0;
	flag := 0;
	for i:=1 to len do begin
		if (str[i] <> ' ') and (flag = 0) then begin
			count := count + 1;
			flag := 1;
			if count = n then break; 
		end;
		if str[i] = ' ' then flag := 0;
	end;
 
	writeln(str[i]);
end.

Пример выполнения кода:

String: 
hello world big    ban lala uuu vasy
Word №: 5
l

Комментарии

Можно и так

program nomerslova;
uses crt;
var  s,word: string; i,m,k,n:integer;
begin
    clrscr;
    writeln('Vvedite stroku: ');
    readln(s);    //вписываем строку
    for i:=1 to length(s) do
     delete(s,pos('  ',s),1);   //удаляем лишнее пробелы внутри
    if s[1]=' ' then delete(s,1,1);  //удаляем пробел сначала, если он есть
    if s[length(s)]<> ' ' then s:=s+' ';   // в конце должен стоять пробел, чтоб выводить последнее слово
    for i:=1 to length(s) do
    if (s[i]='!') or  (s[i]='.') or  (s[i]=',') or  (s[i]='(') or (s[i]=')') or (s[i]='?')   then
    delete(s,i,1);   // тут мы удаляем лишние разделители
    k:=1;
    for i:=1 to length(s) do
    if s[i]=' ' then k:=k+1;
    n:=0;
    while (n>k) or (n<=0)do
    begin
    write('Vvedite nomer slova: ');read(n);writeln;  // Вводим номер нашего слова
    end;
    k:=0; word:='';
    for i:=1 to length(s) do
    begin
        if s[i]<>' ' then
        begin
            k:=k+1;  // тута увеличиваем длину слова, пока на встретим пробел
        end
        else
        begin
            m:=m+1;  // когда встретим пробел, увеличиваем номер слова на+1
            word:=copy(s,i-k,k);  // Записываем само слово в переменную Word 
            if m=n then  
            begin    
                write(word);
                break; //если это искомое слово, то выводим его и останавливаем цикл
            end;
            k:=0;  //если это не есть искомым словом, то идем дальше
        end;
    end;
    readln;readln;
end.

if (str[i] <> ' ') and (flag

if (str[i] <> ' ') and (flag = 0) then begin
			count := count + 1;
			flag := 1;

смысл этого? Первое слово сработает, дальше флаг станет 1 и цикл работать не будет

Неверно решена задача

Скопировал себе в паскаль, запустил программку, ввёл данные. Программа выводит неверное решение. Тестил несколько раз, в алгоритме косяк)

Проверяю в FreePascal в

Проверяю в FreePascal в Linux. Если вводить английские слова, то работает, если русские - то нет.