Цитата:
Сообщение от Denim1916
и вот еще одна...
Заданный масив целых чисел делится на три части двумя элементами: максимальным и минимальным. определите сумму элементов в каждой части массива. используйте функции для нахождения индексов минимального и максимального элементов и подсчета суммы элементов в указанной части массива..
Благодарю за ранее( особенно тем кто придумал этот сайт огромное спасибо и большой респект и уважуха!!!)))))))
|
Как-то так. Ничего, что для индексов использована процедура, а не функции? Если это критично, процедуру можно разбить на две функции, просто программа еще раздуется. Ну а уж подсчет сумм в какие-то функции упихивать - по-моему, перебор. По здравому смыслу тут вообще подпрограммы ни нафиг не нужны!
Код:
CONST
N=7;
R=50;
TYPE
AR=ARRAY[1..N] of INTEGER;
VAR
A:AR;
i,Imax,Imin,S1,S2,S3,b1,b2:INTEGER;
PROCEDURE Search_Min_Max(As:AR; VAR IminS, ImaxS:INTEGER);
VAR
Max,Min,Is,IminScur,ImaxScur:INTEGER;
BEGIN
Max:=-(R+1);
Min:=R+1;
FOR Is:=1 TO N DO
BEGIN
IF As[Is]>Max THEN
BEGIN
Max:=A[Is];
ImaxScur:=Is;
END;
IF As[Is]<Min THEN
BEGIN
Min:=A[Is];
IminScur:=Is;
END;
END;
ImaxS:=ImaxScur;
IminS:=IminScur;
END;
BEGIN
Randomize;
FOR i:=1 TO N DO
BEGIN
A[i]:=RANDOM(2*R)-R;
Write(A[i]:4);
END;
WriteLn;
WriteLn;
Search_Min_Max(A,Imin,Imax);
IF Imin<Imax THEN
BEGIN
b1:=Imin;
b2:=Imax;
END ELSE
BEGIN
b1:=Imax;
b2:=Imin;
END;
S1:=0;
S2:=0;
S3:=0;
FOR i:=1 TO b1 DO
S1:=S1+A[i];
FOR i:=b1 TO b2 DO
S2:=S2+A[i];
FOR i:=b2 TO N DO
S3:=S3+A[i];
WriteLn('S1= ',S1);
WriteLn('S2= ',S2);
WriteLn('S3= ',S3);
ReadLn;
END.
И еще. В условии не сказано, включать или не включать максимальный и минимальный элементы в подсчет сумм. В программе они включены, причем каждый - дважды (подсчитывается сумма от первого элемента до, например, минимального (включая последний), потом от минимального до максимального (включая оба) и, наконец, от максимального до последнего, тоже включая максимальный.