Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по информатике 2009.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
12.36 Mб
Скачать

2.6. Одномерные массивы

Массив – это упорядоченный набор фиксированного количества данных одного типа. В Паскале над переменной типа «массив» определено лишь две операции: присваивания и сравнения, поэтому при работе с массивом требуемую операцию следует осуществить над каждым элементом массива.

Основные действия над массивами

1. Формирование массива:

а. Вводом с клавиатуры:

FOR i:=1 TO N DO BEGIN write(’C[’,i,’]=’); readln(C[i]) END;

б. Расчет массива по формуле (например, ):

FOR i:=1 TO N DO C[i]:=exp(-iln(2));

в. Задание массива с помощью функции RANDOM:

randomize; {пишется перед первым употреблением RANDOM}

...

FOR i:=1 TO N DO C[i]:=RANDOM;

2. Вывод массива на экран.

FOR i:=1 TO N DO writeln(’C[’,i,’]=’,C[i]:12);

3. Расчет последовательностей ( ):

C[1]:=3.6; FOR i:=2 TO N DO C[i]:=4C[i-1]+17.3;

4. Нахождение минимального (или максимального) элемента.

Cmin:=C[1]; FOR i:=2 TO N DO IF C[i]<Cmin THEN Cmin:=C[i];

5. Нахождение номера минимального (или максимального) элемента:

Nmin:=1; FOR i:=2 TO N DO IF C[i]<C[Nmin] THEN Nmin:=i;

6. Нахождение первого (последнего) элемента массива с заданным условием (например, xi<0):

k:=0; REPEAT k:=k+1 UNTIL X[k]<0; (поиск 1-го элемента)

k:=N+1; REPEAT k:=k-1 UNTIL X[k]<0; (поиск последнего элемента)

7. Перестановка местами элементов массива с номерами i и j:

r:=C[i]; C[i]:=C[j]; C[j]:=r;

8. Нахождение количества элементов массива, удовлетворяющих условию (например, 2<xi5):

M:=0; FOR i:=1 TO N DO IF (2<X[i]) AND (X[i]<=5) THEN M:=M+1;

9. Способ задания массива в разделе CONST:

CONST d:ARRAY[1..4] OF real=(1.2, 3.6, 2e-1, 12.34);

Пример 2.6.1. Составить программу определения минимального элемента массива А(10), суммы элементов, стоящих до него и произведения положительных элементов после него.

VAR A:ARRAY[1..10] OF real;

i, MinN:integer;

Min, S, P:real;

B EGIN

{Ввод массива А(10)}

FOR i:=1 TO 10 DO

BEGIN

write(’Введите ’,i,’ элемент массива:’); readln(A[i]);

END;

{Поиск номера минимального элемента в массиве А(10)}

Min:=A[1]; MinN:=1;

FOR i:=2 TO 10 DO

IF Min>A[i] THEN

BEGIN Min:=A[i]; MinN:=i; END;

writeln(’Минимальный элемент данного массива =’, Min);

{Расчет суммы и произведения}

S:=0; P:=1;

FOR i:=1 TO MinN-1 DO S:=S+A[i];

FOR i:=MinN+1 TO 10 DO

IF A[i]>0 THEN P:=PA[i];

writeln(’Сумма =’, S:10:6);

writeln(’Произведение =’, P:10:6);

END.

Пример 2.6.2. Найти критерий линейной корреляции по формуле

где , .

VAR x, y:ARRAY[1..100] OF real;

Xs, Ys, Sxy, Sx2, Sy2, k:real;

i, n:integer;

BEGIN

{Ввод массивов x и y с клавиатуры.}

write(’Введите количество элементов в массиве. n=’);

readln(n);

FOR i:=1 TO n DO

BEGIN

write(’x’,i, ’=’); readln(x[i]);

write(’y’,i, ’=’); readln(y[i])

END;

{Расчет средних значений массивов x и y}

Xs:=0; Ys:=0;

FOR i:=1 TO n DO

BEGIN

Xs:=Xs+x[i]/n;

Ys:=Ys+y[i]/n

END;

{Расчет коэффициента линейной корреляции}

Sxy:=0; Sx2:=0; Sy2:=0;

FOR i:=1 TO n DO

BEGIN

Sxy:=Sxy+(y[i]-Ys)(x[i]-Xs);

Sx2:=Sx2+sqr(x[i]-Xs);

Sy2:=Sy2+sqr(y[i]-Ys);

END;

k:=Sxy/(Sy2Sx2);

{Вывод результата}

writeln(’Коэффициент линейной корреляции. k=’,k:8:6)

END.

Пример 2.6.3. Составить программу случайного задания массива F(20), определения факториала от числа положительных элементов данного массива, а все отрицательные элементы массива заменить их квадратами.

VAR F:array [1..20] of real;

i, N:integer;

P:real;

B EGIN

{Задание массива F(20) случайными числами из интервала [-10,10].}

randomize; FOR i:=1 TO 20 DO F[i]:=(1-2RANDOM)10;

{Определение количества положительных элементов.}

N:=0;

FOR i:=1 TO 20 DO

IF F[i]>0 THEN N:=N+1;

{Расчет факториала. N!}

P:=1; FOR i:=1 TO N DO P:=Pi;

{Замена отрицательных элементов массива их квадратами.}

FOR i:=1 TO 20 DO

IF F[i]<0 THEN F[i]:= F[i]F[i];

{Вывод результатов}

writeln(’N!=’,P:10);

FOR i:=1 TO 20 DO writeln(’F’,i,’=’,F[i]:7:4);

END.

Пример 2.6.4. Составить программу для расчета функции по формуле Лагранжа.

CONST

{Задание значений массивов в программе в виде типизированных констант.}

n=5;

x:ARRAY[1..n] OF real=(1,3,5,7,9);

y:ARRAY[1..n] OF real=(1.33,2.57,3.44,4.74,5.11);

VAR x0, S, P:real;

i, j:integer;

BEGIN

{Расчет суммы.}

S:=0;

FOR i:=1 TO n DO

BEGIN

{Расчет произведения.}

P:=1;

FOR j:=1 TO n DO

IF i< >j THEN P:=P(x0-x[j])/(x[i]-x[j]);

S:=S+y[i]P

END;

writeln(’f(’,x0:5:2,’)=’,S:12)

END.

Пример 2.6.5. По древней легенде мудрец, придумавший игру шахматы, попросил в награду у султана столько зерен пшеницы, сколько уместиться на шахматной доске, если заполнять ее следующим образом: на первую клетку доски - одно зерно, на вторую - два, на 3-ю - 4, на 4-ю - 8 и т.д. Составить программу для расчета количества зерен.

PROGRAM Chess;

VAR i:integer; k, S:real;

BEGIN

k:=1; S:=0;

FOR i:=1 TO 64 DO

BEGIN

S:=S+k;

k:=2k;

END;

writeln(’S=’,S:12)

END.

Пример 2.6.6.

PROGRAM Xmimax;

VAR x:ARRAY [1..10] of real;

i, n:integer;

xmax, xmin:real;

BEGIN

write('укажите число элементов '); readln(n);

i:=1; xmax:=10.e-37;xmin:=10.e37;

WHILE i<=n DO

BEGIN

write('введи ',i, 'значение'); readln(x[i]);

IF x[i] <= xmin THEN xmin:=x[i];

IF x[i] >= xmax THEN xmax:=x[i];i:=i+1;

END;

writeln('значение xmin',xmin,'xmax',xmax) ;

END.

Пример 2.6.7.

PROGRAM Xsum;

VAR x:ARRAY [1..100] of real;

i, n:integer;

s:real;

BEGIN

write('укажите число элементов '); readln(n);

i:=1;s:=0;

WHILE i<=n DO

BEGIN

write('введи ',i, 'значение'); readln(x[i]);

s:=s+x[i]; i:=i+1;

END;

writeln('значение суммы ',s) ;

END.

Пример 2.6.8.

PROGRAM sum;

VAR i, n:integer;

s:real;

BEGIN

write('укажите число n '); readln(n);

i:=1;s:=0;

WHILE i<=n DO

BEGIN

s:=s+1/i; i:=i+1;

END;

writeln('значение суммы ',s) ;

END.