Если несложно проверьте (делалось по похожему заданию с методички).
При нажатии F8 в turbo pascal 7.0 ошибок не выдаёт, но и желаемого результата тоже

Задание 1
Работа с типом данных STRING (строка).
Написать программу, которая считывает текст и выводит на экран только предложения, не содержащие числа.

program kr;
uses crt;
var
w,a:string;
b,q,s,i,j,g:integer;
begin
clrscr;
writeln('Please, read text.');
readln(a);
s:=length(a);
b:=0;
q:=1;
for j:=1 to s do
if (copy(a,j,1)='.') or (copy(a,j,1)='!') or (copy(a,j,1)='?') then
begin
w:=copy(a,q,j-q+1);
q:=j+1;
g:=length(w);
for i:=1 to g do
if (copy(w,i,1)<>'1') and (copy(w,i,1)<>'2') and
(copy(w,i,1)<>'3') and (copy(w,i,1)<>'4') and
(copy(w,i,1)<>'5') and (copy(w,i,1)<>'6') and
(copy(w,i,1)<>'7') and (copy(w,i,1)<>'8') and
(copy(w,i,1)<>'0') and (copy(w,i,1)<>'9') then b:=b else b:=b+1;
if b=0 then begin write(w); b:=0;end else b:=0;
end;
end.

По второму заданию программа тоже не находит ошибки, но и нет даже приглашения к вводу матрицы.

program kr;
uses crt;
var
i,j,x,b,s,q:integer; a:array[1..5,1..5] of byte;
begin
clrscr;
randomize;
x:=5; b:=1;s:=0;q:=0;
for i:=1 to x do
for j:=1 to x do
A[i,j]:=random(100);
for i:=1 to x do begin
for j:=1 to x do
write(a[i,j],' ');writeln;end;
for i:=1 to x-1 do begin
for j:=1 to x-b do
if (a[i,j])mod(2)=0 then s:=s+1;b:=b+1;end;
writeln('Kolichestvo chetnih elementov vishe diagonali =',s);
b:=5;
for i:=2 to x do begin
for j:=b to x do
if (a[i,j])mod(2)=0 then q:=q+1;b:=b-1;end;
writeln('Kolichestvo chetnih elementov nizhe diagonali =',q);
if s>q then writeln('Kolichestvo chetnih elementov vishe diagonali bolshe kolichestva chetnih elementov nizhe diagonali');
if s<q then writeln('Kolichestvo chetnih elementov vishe diagonali menshe kolichestva chetnih elementov nizhe diagonali');
if s=q then writeln('Kolichestvo chetnih elementov vishe diagonali ravno kolichestvu chetnih elementov nizhe diagonali');
end.

Проверьте плиз и обьясните что такое метод половинного деления и как записать его на паскале.
Спасибо.