Помогите пожайлуста доделать программу.В одномерном массиве, из N вещественных элементов,(n<=50) вычислить сумму и количество отрицательных элементов массива, расположенных между максимальным и минимальным элементами.
Program one; type m=array[1..50] of integer; var a:m; i,n:integer; min,max,mini,maxi:integer; procedure printArray(var a:m); var i:integer; begin write('n='); readln(n); for i:=1 to n do a[i]:=random(100)-50 end; procedure outarray(var a:m); var i:integer; begin for i:=1 to n do write('',a[i]:4); end; procedure minandmax(var a:m); var i:integer; begin max:=a[1]; min:=a[1]; for i:= 1 to n do if a[i]>max then begin max:=a[i]; maxi:=i; for i:=1 to n do if a[i]<min then begin min:=a[i]; mini:=i; writeln; writeln('maxi=',maxi); writeln('mini=',mini); end; end; end; procedure sumandkol(var a:m); var i,n,s:integer; begin writeln('maxi=',maxi); writeln('mini=',mini); s:=0; n:=0; while a[i]<0 do begin if ((a[i]>mini) and (a[i]<maxi)) then s:=s+a[i]; end; writeln('summs=',s); n:=abs(max-min); writeln('kol-vo',n); end; BEGIN randomize; printarray(a); outarray(a); minandmax(a); sumandkol(a); readln; end.
Yevgeny
21.01.2008 23:55
Сразу бросается в глаза, что массив твой не из вещественных чисел, а из целых!!!
m=array[1..50] of integer;
замени integer на real!!!
snopy
21.01.2008 23:59
а что ещё исправить?
Yevgeny
22.01.2008 0:01
не присвайвай минимальному и максимальному первый элемент массива!!! сегодняшняя тема, там аналогичный поиск, масксимального и минимального, в этом вроде бы ошибка... задачи на массив и матрицу
snopy
22.01.2008 0:03
почему ведь должно проходится с первого
Client
22.01.2008 0:10
Тебе не нужны значения мах и min, а нужны их номера.
uses crt; const n=10; type m=array[1..n] of integer; var a:m; imin,imax:integer;
procedure printArray(var a:m); var i:integer; begin for i:=1 to n do read(a[i]) end;
procedure outarray(var a:m); var i:integer; begin for i:=1 to n do write(a[i]:5); end;
procedure minandmax(var a:m); var i:integer; begin imax:=1; imin:=1; for i:= 1 to n do begin if a[imax]<a[i] then imax:=i; if a[imin]>a[i] then imin:=i end; writeln(' IMAX= ',imax,' IMIN= ',imin); end;
procedure sumandkol(var a:m); var i,n,s:integer; begin s:=0; n:=0; for i:= imax+1 to imin-1 do begin //раз МЕЖДУ ними if a[i]<0 then s:=s+a[i]; inc(n) end;
расположенных между максимальным и минимальным элементами.
И сколько между ними отрицательных элементов?
snopy
22.01.2008 0:28
а если другой набор встречается то неправильно считается.
Yevgeny
22.01.2008 0:29
сорри
Client
22.01.2008 0:32
Цитата
а если другой набор встречается то неправильно считается.
Не работает то, не работает сё... Ты покажи на каких примерах дало неправильный результат
Yevgeny
22.01.2008 0:32
введи например, -10,-5...,20,1,2,3 и их ноль всё равно ведь будет...
Добавлено через 4 мин. ну правильно, потому что s, и n должны быть параметрами процедуры, а не локальными переменными вот и ошибка...
volvo
22.01.2008 0:37
Сорри, что вмешиваюсь, а если imax будет БОЛЬШЕ imin - то цикл For не будет просто пропущен? Надо еще ко всему написанному поменять imin и imax местами так, чтобы imin было гарантированно НЕ МЕНЬШЕ чем imax...
Yevgeny
22.01.2008 0:40
а вот и нет это я на счёт своего сообщения...
Client
22.01.2008 0:41
Цитата
Сорри, что вмешиваюсь, а если imax будет БОЛЬШЕ imin - то цикл For не будет просто пропущен? Надо еще ко всему написанному поменять imin и imax местами так, чтобы imin было гарантированно НЕ МЕНЬШЕ чем imax...
Я только рад А всего-то надо чуть изменить
procedure sumandkol(var a:m); var i,n,s,k:integer; begin s:=0; n:=0; if imin<imax then begin k:=imax; imax:=imin; imin:=k end; for i:= imax+1 to imin-1 do begin s:=s+a[i]; inc(n) end;
writeln('summs=',s); writeln('kol-vo',n); end;
Про что, собственно, забыл уточнить
snopy
22.01.2008 0:44
всем большое спасибо
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.