синтаксически конструкция должна быть
if условие then
begin
....
end
else if условие2 then
begin
...
end;
у вас же
else b <= 0 then
находится внутри первого блока if. потому компилятор и ругается. Имея только тут код что сейчас в вопросе - могу предположить что вы что-то такое пытаетесь написать (это странно с точки зрения логики т.к. второй блок будет выполнятся только если b = 0, но имеем что имеем)
Program qwert;
const n=12;
var
A : array [1..N] of integer;
i : integer;
b : integer;
begin
for i := 1 to N do
begin
A[i] := random (30) - 20;
b := ( A[i]);
if b < 0 then
begin
b := 0;
writeLn ('A[', i, '] = ', b);
end
else if b <= 0 then
writeLn ('A[', i, '] = ', b);
end;
end.