Здравствуйте уважаемые программисты!
Вновь обращаюсь к вам с вопросом.
У меня поставлена следующая задача:
Нужно обработать текстовой файл, состоящий из 2-х столбцов чисел. Первый столбик аргумент, второй функция. Эти значения нужно раскидать по корзинам, в зависимости от значения аргумента, в первую попадают только те значения для которых значение аргумента лежит в условии 0,0<=x<0.5, во вторую 0.5<=x<1.0 в третью 1.0<=x<1.5 и так далее с шагом 0,5.
Строки аргумента не упорядочены по значениям. В каждой корзине нужно найти среднее значение функции. После этого софрмировать выходной файл, содержащие средние вычисленные значения:
В каждой строке файла должно быть два числа:
-первое (1 знак после запятой) - начало интверала аргумента (0,5;1,0;1,5;2,0)
- второе -вычисленное среднее значение функции.
Интервалы должны выводиться в порядке возрастания.
Но сейчас появилась необходимость, дополнить некоторые функции к этой программе ( а я не знаю как

):
- возможность сделать шаг не только через 0,5 , а через 1 или 2, чтобы шаг можно было вбивать вручную в edit`e...
т.е. чтобы внутри программы задавалось условие в зависимости от указанного шага
1.0<=x<2.0, 2<=x<3, и так далее шаг 1;
2.0<=x<4.0, 4<=x<6, и так далее шаг 2.
- возможность для обработки еще двух дополнительных столбиков (третьего и четвёртого), которые расчитываются по таким же правилам как и 2-ой, т.е. средние значения...
Если открыть файл с третьим и четвёртым столбиком, то подсчёт будет не верный... ПОэтому я прикрепил для образца файлы, (Образец (2 столбика)), и файлы где 4 столбика.
У меня есть код (программу прикреплю):
Она расчитывает всё как положено. Шаг 0,5 первый столбик, Средние значения во втором.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Button2: TButton;
OpenDialog1: TOpenDialog;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
const NumBackets=2048; // максимально количество
type
tBacket=record
summ:extended; //накопление значений функций
numb: longint; //количество значений в корзине
end;
var
t:textfile;
i,n:longint;
a:array[0 .. NumBackets-1] of tBacket;
x,y:extended;
F,Str:string;
begin
if OpenDialog1.execute then
begin
fillchar(a,sizeof(a),0);
F:=OpenDialog1.FileName;
assignfile (t, F);
Delete(Str,0,32);
reset (t);
readln(t,F);
end;
while not eof(t) do begin
readln(t,x,y);
if (x>=0.0) and(x<(NumBackets/2)) then begin
n:=trunc(x*2.0);
a[n].summ:=a[n].summ+y;
inc(a[n].numb);
end else begin
closefile(t);
writeln('It isn`t enough backets');
halt(1);
end;
end;
closefile(t);
F:=FormatDateTime(' ddddd_hh.nn',Now)+'.txt';
showmessage('complete!');
assignfile(t,F);
rewrite(t);
for i:=0 to Numbackets-1 do
if a[i].numb>0 then
if odd(i) then
writeln(t,i/2:1:1,#9,a[i].summ/a[i].numb:1:2)
else
writeln(t,i/2:1:0,#9,a[i].summ/a[i].numb:1:2);
closefile(t);
end;
end.