как то так тебе надо ?
Код:
procedure TForm4.Button1Click(Sender: TObject);
var
a, b: array [1 .. 5] of string;
i, j: integer;
nach, kon: char;
begin
StringGrid1.Cells[0, 0] := 'вася';
StringGrid1.Cells[0, 1] := 'нитро';
StringGrid1.Cells[0, 2] := 'ясен';
StringGrid1.Cells[0, 3] := 'опасно';
StringGrid1.Cells[0, 4] := 'огонь';
for i := 1 to 5 do
a[i] := StringGrid1.Cells[0, i - 1];
b[1] := a[1];
a[1] := '';
for i := 1 to 4 do
begin
kon := b[i][length(b[i])];
for j := 1 to 5 do
begin
if length(a[j]) > 0 then
begin
nach := a[j][1];
if nach = kon then
begin
b[i + 1] := a[j];
a[j] := '';
break;
end;
end;
end;
end;
for i := 1 to 5 do
StringGrid1.Cells[1, i - 1] := b[i];
end;
но тебе еще надо учесть что если не найдется слово подходящее для продолжения и тд ...
и еще надо учесть буквы 'А' и 'а' программа воспримет как разные ...
и ты в своем коде перепутал начало с концом ... ты брал nach:=b[i][1]; хотя как я понял в б будет уже готовое идти ... тоесть надо брать последнюю букву. .. и тд ... короче я код накидал смотри .. если че спрашивай ...
а да и ошибку он тебе выдавал на строках
nach:=b[i][1];
kon:=a[j][Length(a[j])];
потому что у тебя походу переменные были пустые ... и получалось a[j][Length(a[j])] если a[j] пустая то выходило a[j][0] ... поэтому и ошибка ..