Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] работа с файлами


Автор: katerinchic 2.6.2008, 02:10
Помогите пожалуйста отредактировать программу)) 

Составила программу для решения этой задачи:

Дан массив X, содержащий вещественные числа. Найти и записать на место X(1) — наибольший элемент массива X, а на место X(N) — наименьший элемент массива (X1,X2,...,XN). Ввод исходного массива X осуществить из файла на диске. Вывод обеспечить в трех вариантах:1)на экран; 2)на печатающее устройство; 3)в файл на диске.

Только вот почему-то не работает функция ввода данных из файла, замены элементов массива и вывода результата на экран... Функцию замены элементов я просто не додумалась как закончить (т.к. обычно для подобных функций использую размерность массива, которая задаётся в Edit, а по условию задачи размерность не задается, т.к. массив читается из файла) ,а всё остальное вроде должно было работать... Помогите пожалуйста отредактировать))

Буду оч. признательна =))

Автор: Wedafl 2.6.2008, 13:07
Я бы предложил использовать типизированный файл вместо текстового, тогда код будет проще:
Код

procedure TForm1.N1Click(Sender: TObject);
var
  F: file of Real;
  I: Integer;
  X: array of Real;
begin
  if not od1.Execute then
    Exit;
  AssignFile(F, od1.FileName);
  Reset(F);
  SetLength(X, FileSize(F));
  for I := 0 to Length(X) - 1 do
  begin
    Read(F, X[I]);
    Memo1.Lines.Add(FloatToStr(X[I]));
  end;
  CloseFile(F);
end;

Если же использовать текстовый файл, то сначала придется подсчитать количество строк в файле. Считаем что в одной строке одно число:
Код

procedure TForm1.N1Click(Sender: TObject);
var
  F: TextFile;
  I: Integer;
  X: array of Real;
begin
  if not od1.Execute then
    Exit;
  AssignFile(F, od1.FileName);
  Reset(F);
  I := 0;
  while not Eof(F) do
  begin
    Readln(F);
    Inc(I);
  end;
  SetLength(X, I);
  CloseFile(F);
  Reset(F);
  for I := 0 to Length(X) - 1 do
  begin
    Readln(F, X[I]);
    Memo1.Lines.Add(FloatToStr(X[I]));
  end;
  CloseFile(F);
end;

Автор: katerinchic 2.6.2008, 18:05
Wedafl, большое спасибо! =) теперь функция ввода из файла работает)) насчёт типизированного файла: специально использовала текстовый,т.к. не знаю через какую программу создавать типизированный файл - file of Real.... не подскажешь через какую?)

Автор: Letov 2.6.2008, 18:30
Напиши программу на Delphi которая будет записывать значения в File of Real.

Автор: katerinchic 3.6.2008, 13:37
Осталасть только одна проблема - замены элементов массива и вывода результата на экран...
В результате всех действий, программа выдаёт "0"  :

Код

procedure TForm1.N3Click(Sender: TObject);
var
NameFile:String[20];
F:TextFile;
a:array [0..20] of integer;
b:array [0..20] of integer;
i,nmax,nmin:byte; n,max,min:integer;
begin
N3.Checked:=True;
n:=Memo1.Lines.Count;   // количество чисел,считанных из файла 
for i:=1 to n do
a[i]:=Memo1.Lines[i];
max:=a[0]; nmax:=0;  // максимальный элемент и его номер   
min:=a[0]; nmin:=0;
for i:=1 to n do
begin
if a[i]>max then
begin
max:=a[i];
nmax:=i
end;
if a[i]<min then
begin
min:=a[i];
nmin:=i
end;
end;
nmax:=min;
nmin:=max;
for i:=0 to n-1
Memo2.Lines.Add(FloatToStr(b[i+1]));
end;


Автор: katerinchic 3.6.2008, 16:15
Всё,я со всем разобралась сама))  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)