Консультация № 162755
19.03.2009, 15:39
0.00 руб.
0 2 2
дан одномерный массив, состоящий из n вещественных элементов.
1) вычислить произведение элементов массива, расположенных после максимального элемента(задачу решить за один проход по массиву)
2) преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом - все остальные.

Обсуждение

давно
Профессор
401888
1232
19.03.2009, 16:51
общий
это ответ
Здравствуйте, сальникова светлана!
Решение задачи с пояснениями в приложении.

Приложение:
uses crt;
const n=10;{размер массива}
var a:array[1..n] of real;{тип массива}
i,imax,k,j:byte;
p,max,x:real;
begin
clrscr;
randomize;
writeln('Ishodnyj massiv:');
for i:=1 to n do
begin
a[i]:=4*random-2;{интервал (-2,2)}
write(a[i]:6:2);
end;
writeln;
i:=1;p:=1;max:=a[1];{начало массива, произведение=1, максимальный элемент-первый}
while i<n do
begin
i:=i+1;{переходим к следующему элементу}
if a[i]>max then{если он больше максимального}
begin
p:=1;{произведение снова равно 1}
max:=a[i];{этот элемент будет максимальным}
imax:=i;{запомним его номер}
end
else p:=p*a[i];{если не больше максимального, умножаем}
end;
if imax=n then writeln('Maximalnyj element poslednyj!')
else writeln('Max el a[',imax,']=',max:0:2,' P=',p:0:2);
k:=0;
for i:=1 to n do
if abs(a[i])<=1 then{если елемент по модулю меньше 1, то}
begin
k:=k+1;{считаем его}
x:=a[i];{запоминаем его значение}
for j:=i downto k+1 do{от его номера до места в массиве сдвигаем массив }
a[j]:=a[j-1];{на 1 элемент вправо}
a[k]:=x;{на освободившееся место вставляем этот элемент}
end;
writeln('Perestanovka:');
for i:=1 to n do
write(a[i]:6:2);
readln
end.
Неизвестный
19.03.2009, 17:30
общий
это ответ
Здравствуйте, сальникова светлана!
Программа с динамическим массивом.
Код:

program Pascal_162755;
var
arr,aptr,aptr2:^double;
p,max,tmp:double;
N,i:word;
begin
{ Вводим количество элементов }
Write('N=');ReadLn(N);
{ Выделяем память }
GetMem(arr,N*sizeof(double));
{ Вводим массив }
aptr:=arr;
for i := 1 to N do begin
Write('arr[',i,']=');ReadLn(aptr^);
Inc(aptr);
end;
{ Ищем произведение элементов после максимального }
aptr:=arr;
max:=aptr^;
p:=1;
Inc(aptr);
for i := 2 to N do begin
if aptr^>max then begin
max:=aptr^;
p:=1;
end else p:=p*aptr^;
Inc(aptr);
end;
WriteLn('P=',p);
{ Переставляем элеменьы согласно условия }
aptr:=arr;aptr2:=arr;Inc(aptr2,N-1);
while aptr<>aptr2 do begin
{ Ищем неправильно расположенные элементы }
while (aptr<>aptr2) and (abs(aptr^)<=1) do Inc(aptr);
while (aptr<>aptr2) and (abs(aptr2^)>1) do Dec(aptr2);
{ Переставляем их }
tmp:=aptr^;
aptr^:=aptr2^;
aptr2^:=tmp;
end;
{ Выводим получившийся массив }
WriteLn('Result array:');
aptr:=arr;
for i := 1 to N do begin
Write(aptr^:9,' ');
Inc(aptr);
end;
{ Освобождаем память }
FreeMem(arr);
ReadLn;
end.

Пример работы:
Код:

N=10
arr[1]=3
arr[2]=0.7
arr[3]=-34
arr[4]=4
arr[5]=0.6
arr[6]=-0.8
arr[7]=45
arr[8]=2
arr[9]=0.7
arr[10]=1
P= 1.40000000000000E+0000
Result array:
1.0E+0000 7.0E-0001 7.0E-0001 -8.0E-0001 6.0E-0001 4.0E+0000 4.5E+0001 2.0E+0000 -3.4E+0001 3.0E+0000
Форма ответа