Форум по программированию - Delphi Sources

 


   Сайт  
   Исходники  
   Компоненты  
   Статьи  
   FAQ  
   Поиск по исходникам  
   Футболки  

Вернуться   Форум по программированию - Delphi Sources > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.04.2010, 21:14
Fazotron Fazotron вне форума
Прохожий
 
Регистрация: 26.10.2009
Сообщения: 38
Репутация: 10
По умолчанию чтение массива из файла

Код:
procedure TForm1.Button1Click(Sender: TObject);
var a:array[1..5] of real; i: integer;
    max, min, s: real; counter: integer;
begin
 if OpenDialog1.Execute then
   Begin
    AssignFile(f,OpenDialog1.FileName);
    Reset(f);
    i:=0;
    while not eof(f) do
      Begin

       i:=i+1;
       Readln(f,a[i]);
       Memo1.Lines.Add(floattostr(a[i]));

      end;
    end
     else
      exit;

max:= a[1];
min:= a[1];
s:=a[1];
for i:=1 to length(a) do
if a[i+1]> max then
max:= a[i+1];

If a[i+1]< min then
min:= a[i+1];
Edit1.Text:= floattostr(min+max);

if i mod 2 <>0 then
  if abs(a[i+1]) >s then
  s:= a[i+1];
  Edit2.text:=floattostr(s);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
end.

как сделать чтобы кол-во элементов массива было не фиксированным (в моем случае 5), а менялось автоматически в зависимости от кол-ва чисел в текстовом файле?

Последний раз редактировалось Fazotron, 23.04.2010 в 22:56.
Ответить с цитированием
  #2  
Старый 23.04.2010, 21:43
beavi5 beavi5 вне форума
Прохожий
 
Регистрация: 13.04.2010
Сообщения: 49
Репутация: 12
По умолчанию

ой.. чот я запутался.))

Последний раз редактировалось beavi5, 23.04.2010 в 21:50.
Ответить с цитированием
  #3  
Старый 23.04.2010, 23:14
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Код:
...
var
  a:array of real;
...
begin
...
  SetLength(a, 0);
...
  while not eof(f) do
    begin
       SetLength(a, Length(a)+1);
       Readln(f,a[high(a)]);
       Memo1.Lines.Add(floattostr(a[high(a)]));    
    end;
...
  SetLength(a, 0);
end;
Ответить с цитированием
  #4  
Старый 24.04.2010, 00:26
Fazotron Fazotron вне форума
Прохожий
 
Регистрация: 26.10.2009
Сообщения: 38
Репутация: 10
По умолчанию

Спасибо, только у меня теперь сумма минимального и максимального элемента неправильно считается)) вообще хз почему, вроде все четко =(
Код:
procedure TForm1.Button1Click(Sender: TObject);
var a:array of real; i: integer;
    max, min, s,sum: real;
begin
Memo1.Lines.Clear;

 if OpenDialog1.Execute then
   Begin
    setlength (a,0);
    AssignFile(f,OpenDialog1.FileName);
    Reset(f);
    i:=0;
    while not EOF(f) do
      begin
       SetLength(a, Length(a)+1);
       i:=i+1;
       Readln(f,a[high(a)]);
       Memo1.Lines.Add(floattostr(a[high(a)]));
      end;
    end
     else
      exit;

max:= a[1];
min:= a[1];
s:=a[1];

for i:=1 to high(a) do
begin
if a[i+1] > max then
max:= a[i+1];
end;

for i:=1 to high(a) do
begin
If a[i+1] < min then
min:= a[i+1];
end;

Edit1.Text:= floattostr(max+min);

for i:=1 to high(a) do
begin
if i mod 2 <>0 then
  if abs(a[i+1]) > s then
  s:= a[i+1];
  Edit2.text:=floattostr(s);
end;
SetLength(a, 0);
end;

procedure TForm1.Button2Click(Sender: TObject);

begin
if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;

Последний раз редактировалось Fazotron, 24.04.2010 в 00:35.
Ответить с цитированием
  #5  
Старый 24.04.2010, 00:48
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Вы первых, массив начинается с нулегого элемента,
Во вторых, i+1 у тебя вылетает за диапозон, так как, High(a) - последний элемент.
В последнем цикле у тебя не хватает скобок begin end;
Да и все можно обработать в одном цикле..
Код:
...
Max:=a[Low(a)];
Min:=Max;
s:=Max;

for i:=Low(a)+1 to High(a) do
  begin
  if a[i] > Max then Max:=a[i];
  if a[i] < Min then Min:=a[i];
  if i mod 2 <>0 then
    if abs(a[i]) > s then
     begin
     s:= a[i];
     Edit2.text:=floattostr(s);
     Application.ProcessMessages;
     end;
  end;

Edit1.Text:= floattostr(max+min);
SetLength(a, 0);
...
Кстати, для выполнения твоего задания, массив впринципе не нужен, можно сделать и без него.)

Последний раз редактировалось Asinkrit, 24.04.2010 в 01:54.
Ответить с цитированием
  #6  
Старый 24.04.2010, 22:50
Fazotron Fazotron вне форума
Прохожий
 
Регистрация: 26.10.2009
Сообщения: 38
Репутация: 10
По умолчанию

Спасибо =)
а массив по условию задачи нужен, ну это уже неважно)
можно закрывать

Последний раз редактировалось Fazotron, 25.04.2010 в 03:18.
Ответить с цитированием
  #7  
Старый 25.04.2010, 18:19
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

Код:
SetLength(a, Length(a)+1);

У меня почемуто так не выходило когда мне нужно было создавать динамический масив. Я подумал что это наверное из за того что при выполнении SetLength выделяется новая динамическая память. Надо будет попробывать
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2016

ВКонтакте   Twitter   Facebook