В матрице из букв найти слово

Задача: 

Дана квадратная матрица, состоящая из букв. Найти в ней цепочку букв, составляющую заданное слово. Цепочку составляют соседние по горизонтали или вертикали буквы. Вывести на экран номер строки и столбца, в котором начинается слово, а также его расположение (вертикальное или горизонтальное).

Описание переменных: 

str - матрица из символов;
w - заданное слово;
wcol - строка из букв столбцов.

Алгоритм решения задачи: 

Чтобы не заполнять матрицу вручную, заполним ее случайными буквами английского алфавита. Далее запросим у пользователя искомое слово.

Функция pos() языка программирования Pascal ищет вхождение подстроки (первый параметр функции) в строку (второй параметр). Если подстрока найдена, то возвращается номер ее первой буквы в строке. Если не найдена, то возвращается 0.

В языке Pascal если матрица состоит из типа данных char, то к строкам матрицы можно обращаться как к строкам, а не массивам. То есть можно извлечь строку матрицы целиком, опуская второй индекс (номер столбца). Таким образом при поиске вхождения заданного слова в строку достаточно перебрать матрицу построчно, каждую строку проверить на вхождение слова (подстроки) с помощью функции pos(). Если pos() возвращает значение больше 0, значит слово входит в строку. Это слово будет начинаться в строке, чей номер определяется итерацией цикла, и в столбце, чей номер определяется значением, которое вернула функция pos().

При поиске слова по столбцам матрицы надо сначала сформировать строку из символов очередного столбца. Внешний цикл в данном случае будет проходить по столбцам, а внутренний - по буквам столбца (по строкам), присоединяя каждую к строке. После того как строка будет сформирована, следует проверить вхождение заданного слова (подстроки) в эту строку. Если слово входит в строку, то его позиция определяется значением, которое вернула pos() (номер строки), и номером итерации внешнего цикла (номер столбца).

Программа на языке Паскаль: 

const N = 10;
var
    str: array[1..N,1..N] of char;
    i,j,k: byte;
    w, wcol: string[N];
 
begin
    randomize;
    for i:=1 to N do begin
        for j:=1 to N do begin
            str[i,j] := chr(random(26) + 97);
            write(str[i,j],' ');
        end;
        writeln;
    end;
    write('Введите слово: ');
    readln(w);
    // проверяем по строкам
    for i:=1 to N do begin
        j := pos(w,str[i]);
        if j > 0 then 
            writeln('Слово начинается в строке ', i, ' в столбце ', j, ' (горизонтально)');
    end;
    // проверяем по столбцам
    for j:=1 to N do begin
        // собираем строку из букв столбца
        wcol := '';
        for i:=1 to N do 
            wcol := wcol + str[i,j];
        // проверяем нет ли в ней слова
        k := pos(w,wcol);
        if k > 0 then
            writeln('Слово начинается в строке ', k, ' в столбце ', j, ' (вертикально)');
    end;
end.

Пример работы программы:

t r j c s m x i c j 
p c u k r e q k q s 
k k v i a l t q d l 
z b m o e e n o b a 
u d b p w u x w p p 
y n y x p f f m j d 
t z h q j f z b a d 
d r p l x e h i q c 
o m z g c o e t f a 
x y d w d e p j p m 
Введите слово: moe
Слово начинается в строке 4 в столбце 3 (горизонтально)

Комментарии

НЕ РАБОТАЕТ

Не работает если в одной строке(столбце) есть содержится несколько таких слов. Примерно написал работает)

const n=10;
var a: array[1..n,1..n] of char;
    i, i2, g, l, gl: integer;
    st, s: string;
begin
for i:=1 to n do
begin
 for i2:=1 to n do
 begin
 a[i,i2]:=chr(random(ord('Я')-ord('А'))+ ord('А'));
 write(a[i,i2], ' ');
 end;
 writeln;
end;
write('Введите слово:'); readln(st);
for i:=1 to n do
begin
s:='';
gl:=0;
for i2:=1 to n do
 s:=s+a[i,i2];
repeat
g:=pos(st,s);
if g>0 then
writeln('строка ', i, ', столбец ', g+gl, '(горизонтально)');
l:=length(s);
gl:=g+gl;
s:=copy(s,g+1,l-g-1);
until g=0;
s:='';
gl:=0;
for i2:=1 to n do
 s:=s+a[i2,i];
repeat
g:=pos(st,s);
if g>0 then
writeln('столбец ', i, ', строка ', g+gl, '(вертикально)');
l:=length(s);
gl:=g+gl;
s:=copy(s, g+1, l-g-1);
until g=0;
end;
end.

вопрос

j := pos(w,str[i]);
в этой строке пишет ошибка
Нельзя преобразовать тип array [1..10] of char к string

j:=pos(w,str[i,j]);

j:=pos(w,str[i,j]);