Показать сообщение отдельно
Старый 10.05.2009, 15:10   #14 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
4. В одномерном массиве, состоящем из N целых элементов вычислить:
а)сумму элементов массива с четными номерами (оформить в виде функции)
б)произведение жлементов массива, расположенных между 1 и последним нулевыми лементами (оформить в виде процедуры)
Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Освободившиеся элементы в конце массива заполнить нулями
CONST
N=10;
TYPE AR=ARRAY[1..N] of INTEGER;
VAR
A,B:AR;
i,j,Ncur,i1zer,i2zer,Prod:INTEGER;

FUNCTION S_even(AS:AR):INTEGER;
VAR
Scur,i:INTEGER;
BEGIN
Scur:=0;
FOR i:=1 TO N DO
IF (i mod 2)=0 THEN
Scur:=Scur+AS[i];
S_even:=Scur;
END;

PROCEDURE Product(AP:AR;i1p,i2p:Integer; VAR Pr:INTEGER);
VAR
Pr_cur,i:INTEGER;
BEGIN
Pr_cur:=0;
IF i1p=0 THEN
WriteLn('Array contains no zero elements') ELSE
IF i1p=i2p THEN
WriteLn('Array contains only one zero element') ELSE
BEGIN
Pr_cur:=1;
FOR i:=i1p+1 TO i2p-1 DO
Pr_cur:=Pr_cur*AP[i];
END;
Pr:=Pr_cur;
END;

BEGIN
Randomize;
FOR i:=1 TO N DO
BEGIN
A[i]:=Random(6)-3;
B[i]:=A[i];
END;
i1zer:=0;
i2zer:=0;
i:=1;
REPEAT
IF A[i]=0 THEN i1zer:=i;
INC(i);
UNTIL (i1zer>0) OR (i=N+1);
i:=N;
REPEAT
IF A[i]=0 THEN i2zer:=i;
DEC(i);
UNTIL (i2zer>0) OR (i=0);

i:=1;
Ncur:=N;
REPEAT
IF ABS(B[i])<=1 THEN
BEGIN
FOR j:=i+1 TO N DO
B[j-1]:=B[j];
B[N]:=0;
DEC(i);
DEC(Ncur);
END;
INC(i);
UNTIL i=Ncur+1;
FOR i:=1 TO N DO
Write(A[i]:4);
Writeln;
Writeln('Sum of even elements is ', S_even(A));
Product(A,i1zer,i2zer,Prod);
IF (i1zer>0) AND (i1zer<i2zer) THEN
Writeln('Product of elements between first and last zero is ',Prod);
FOR i:=1 TO N DO
Write(B[i]:4);
Writeln;
ReadLn;
END.
Vladimir_S вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070