![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Народ помогите разобраться с программой которая создает массив случайных целых чисел, подсчитывает их среднее арифметическое, а также определяет и выводит на экран минимальное и максимальное из этих чисел.
Кому не трудно посмотрите plizzz и скажите, что я сделал не так! Прога не может подсчитать мин. макс. числа! Код:
procedure TfmExample.BEnterClick(Sender: TObject);
const
N = 1000;
MAX_VALUE = 100+1;
var
m: array [1..N] of Integer;
i: Integer;
max,min: Integer;
sum: Real;
begin
for i:=1 to N do
m[i]:= Random (MAX_VALUE);
sum := m[1];
max := m[1];
min := m[1];
for i:= 2 to N do
begin
sum :=sum+m[i];
if m[i]<min then min:= m[i]
else if m[i]>max then max:= m[i]
end;
mmOutput.Lines.Add('Минимальное значение данного массива равно '+inttostr(min));
mmOutput.Lines.Add('Среднее арифметическое число данного массива равно '+floattostr(sum/N));
mmOutput.Lines.Add('Максимальное значение данного массива равно '+inttostr(max));
end;Последний раз редактировалось Lukas, 06.03.2008 в 16:49. |
|
#2
|
|||
|
|||
|
На мой взгляд все правильно. А что вас не устраивает в результатах работы программы?
|
|
#3
|
||||
|
||||
|
Все действительно правильно, но вычисление min и max я бы выделил в отдельную процедуру:
Код:
function FindMin(Arr : array of integer) : integer; //возвращает само значение, но не индекс
var i : integer;
begin
Result := Arr[0];
for i := 1 to Length(Arr)-1 do
if ( Arr[i] < Result ) then
Result := Arr[i];
end;
function FindMax(Arr : array of integer) : integer;
var i : integer;
begin
Result := Arr[0];
for i := 1 to Length(Arr)-1 do
if ( Arr[i] > Result ) then
Result := Arr[i];
end;
mmOutput.Lines.Add('Минимальное значение данного массива равно '+inttostr(FindMin(m)));
mmOutput.Lines.Add('Максимальное значение данного массива равно '+inttostr(FindMax(m)));Дело в том, что при N=1000 шанс, что в массиве будет 0 и 100 равен 1. Уменьши N до..скажем..10 или MAX_VALUE до..5001 и результаты тебя порадуют ![]() Последний раз редактировалось KOOL, 07.03.2008 в 10:44. |
|
#4
|
||||
|
||||
|
Ошибка вот в чем - сортировать нужно ВЕСЬ массив, а не со 2-го его элемента.
Вообще-то это должно выглядеть так: (я заккоментировал на мой взгляд неправильные конструкции и написал свои). Код:
procedure TfmExample.BEnterClick(Sender: TObject);
const
N = 1000;
MAX_VALUE = 100+1;
var
m: array [1..N] of Integer;
i: Integer;
max,min: Integer;
sum: Real;
begin
for i:=1 to N do
m[i]:= Random (MAX_VALUE);
sum:=0;//!!!sum := m[1];
max := m[1];
min := m[1];
for i:= 1//!!!2 to N do
begin
sum :=sum+m[i];
if m[i]<min then min:= m[i]
else if m[i]>max then max:= m[i]
end;
mmOutput.Lines.Add('Минимальное значение данного массива равно '+inttostr(min));
mmOutput.Lines.Add('Среднее арифметическое число данного массива равно '+floattostr(sum/N));
mmOutput.Lines.Add('Максимальное значение данного массива равно '+inttostr(max));
end; |
|
#5
|
||||
|
||||
|
2Thrasher:
Ошибки тут нет. Если ты не заметил, нумерация массива идет с 1 |
|
#6
|
|||
|
|||
|
Все равно не хочет работать, ни как не получается!
|
|
#7
|
|||
|
|||
|
С помощью модуля Math можно не писать цикл:
Код:
Asum := SumInt(m);
Amax := MaxIntValue(m);
Amin := MinIntValue(m);
{ср. ариф.}:= Mean(m)Последний раз редактировалось AlexSku, 07.03.2008 в 12:35. |
|
#8
|
||||
|
||||
|
Цитата:
Тут все дело именно в N и MAX_VALUE. Если N слишком большое, то min всегда будет 0, а max - MAX_VALUE-1. |