|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
чтение массива из файла
Код:
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
|
|||
|
|||
ой.. чот я запутался.))
Последний раз редактировалось beavi5, 23.04.2010 в 21:50. |
#3
|
|||
|
|||
Код:
... 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
|
|||
|
|||
Спасибо, только у меня теперь сумма минимального и максимального элемента неправильно считается)) вообще хз почему, вроде все четко =(
Код:
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
|
|||
|
|||
Вы первых, массив начинается с нулегого элемента,
Во вторых, 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
|
|||
|
|||
Спасибо =)
а массив по условию задачи нужен, ну это уже неважно) можно закрывать Последний раз редактировалось Fazotron, 25.04.2010 в 03:18. |
#7
|
||||
|
||||
Код:
SetLength(a, Length(a)+1); У меня почемуто так не выходило когда мне нужно было создавать динамический масив. Я подумал что это наверное из за того что при выполнении SetLength выделяется новая динамическая память. Надо будет попробывать |