1. Необходимо использовать Тэг 
[сode] для исходников, Да мне тоже не нравится зеленый цвет, и не очень удобно читать. Но администрация сайта обещала сделать подсветку синтаксиса. И при необходимости можно будет ту или иную ветку форума, сгенерировать в другой форма. (При условии, что он будет оформлен по правилам) А у вас Код не записан в Тег  [Сode].
2. Nik +1. 
3. Ravil -1. 
Какая ошибка, на какой строке. Вы думаете кому то нужно читать ваш КОД ?.4. Где пишете в FPC или в Lazarus-е. Какая OC. 
5. И конечно спасибо, за то что вы думаете, что тут одни Ясновидцы (Просьба больше не смотреть Битву Экстросенцев на ТНТ).
6. Скорее всего если нет ошибок в коде, то возможно вы не учли следущего, при заполнении массивов тогоже a_b мы его заполняем не весь... т.е в остатке лежит мусор, я сделал процедуру коррекции см код во избежании ошибки -
 SIGFPE — сигнал, посылаемый процессу, при попытке выполнения ошибочной арифметической операции.Теперь по делу из-за того, что не понятно где ошибка и какая. Решил задачу на Lazarus-е.
Вот Код:
- Код: Выделить всё
- unit Unit1; 
 
 {$mode objfpc}{$H+}
 
 interface
 
 uses
 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
 
 const
 n = 50; a = 20; b =40;
 type
 mass = array [1..n] of real;
 
 type
 
 { TForm1 }
 
 TForm1 = class(TForm)
 Button1: TButton;
 Memo1: TMemo;
 procedure Button1Click(Sender: TObject);
 Procedure ShowResultFromMass(var AMass:mass);
 Procedure CorrectMass(var AMass:mass; MaxIndex:Integer);
 private
 { private declarations }
 public
 
 { public declarations }
 end;
 
 
 
 var
 Form1: TForm1;
 
 implementation
 
 {$R *.lfm}
 
 procedure realgenerator;
 var
 f : file of real;
 y : real;
 i : integer;
 begin
 randomize;
 AssignFile(f, 'c:\digit.dat');
 Rewrite(f);
 
 for i:=1 to n do
 begin
 y:=random(50);
 Write(f,y);
 end;
 CloseFile(f);
 end;
 
 { TForm1 }
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
 f : file of real;
 y : real;
 i : integer;
 IndexBefore_A, IndexA_B,
 IndexAfter_B, IndexFull :Integer;
 before_a, a_b, after_b, Full : mass;
 begin
 IndexBefore_A:=1;
 IndexA_B     :=1;
 IndexAfter_B :=1;
 IndexFull    :=1;
 
 realgenerator; //Генерируем новый файл с данными.
 
 AssignFile(f,'c:\digit.dat');
 Reset(f);
 
 while not Eof(f) do
 begin
 Read(f, y);
 
 Full[IndexFull]:=y;
 Inc(IndexFull);
 
 if y<a then
 begin
 before_a[IndexBefore_A]:=y;
 Inc(IndexBefore_A);
 end;
 
 if ((y >=a) and (y<=b)) then
 begin
 a_b[IndexA_B]:=y;
 Inc(IndexA_B);
 end;
 
 if y>b then
 begin
 after_b[IndexAfter_B]:=y;
 Inc(IndexAfter_B);
 end;
 
 end;//  while not Eof(f) do
 CloseFile(F);
 
 //коррекция массивов (т.к. Мы не полностью заполнили массивы, где то есть мусор)
 CorrectMass(before_a,IndexBefore_A);
 CorrectMass(a_b,IndexA_B);
 CorrectMass(after_b,IndexAfter_B);
 
 //Вывод на экран результатов
 Memo1.Lines.Add('Исходный массив:');
 ShowResultFromMass(Full);
 
 Memo1.Lines.Add('Массив Before_A:');
 ShowResultFromMass(before_a);
 
 Memo1.Lines.Add('Массив a_b:');
 ShowResultFromMass(a_b);
 
 Memo1.Lines.Add('Массив after_b:');
 ShowResultFromMass(after_b);
 end;
 
 procedure TForm1.ShowResultFromMass(var AMass: mass);
 var I:Integer;
 S:String;
 begin
 S:='';
 //If AMass[1]=Nil then exit;
 
 for i:=1 to High(AMass) do
 if AMass[I]<> -1 then
 S:=S+FloatToStr(AMass[I])+'; ';
 
 Memo1.Lines.Add(S);
 
 end;
 
 procedure TForm1.CorrectMass(var AMass: mass; MaxIndex: Integer);
 var I:Integer;
 begin
 for I:=MaxIndex to High(AMass) do
 AMass[I]:=-1;
 end;
 end.
 
Вот Скрин:

В Аттаче исходники: