![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |