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

9.9.3. Операции с массивами

В Паскале есть лишь одна операция, которую можно делать с массивом целиком – это операция присваивания. Но для этого массивы должны быть совершенно одинаковы, то есть описаны в одной строке VAR или TYPE.

Все остальные операции производятся только с отдельными элементами массива. С элементами массива можно делать все операции, которые разрешены для базового типа массива: если массив числовой, то математические, если символьный или строковый, то, соответственно, операции с символьными или строковыми переменными.

Пример 23.

Требуется найти максимальный и минимальный элементы одномерного массива вещественного типа. Алгоритм поиска минимума: вводим переменную MIN, в которую записываем 1-ый элемент массива. Затем в цикле сравниваем каждый последующий элемент с MIN. Если число, хранящееся в текущем элементе, меньше хранящегося в MIN, то число из текущего элемента записываем в MIN. Аналогичен алгоритм поиска максимума, только вместо «меньше» ставим «больше». Написать программу.

program PR23;

var

z: array[1..100] of real;

n,k: integer;

max, min: real;

Begin

Writeln(‘ввести количество элементов массива n’);

readln (n);

for k:=1 to n do

readln (z[k]);

max:=z[1];min:=z[1];

for k:=1 to n do

if z[k]>max then max:=z[k]

else if z[k]<min then min:=z[k];

writeln(’max=’, max:8:3, ’ min=’, min :8:3);

end.

Пример 24.

Для двумерного массива состоящего из N строк и N столбцов:

а) найти сумму элементов M-столбца;

б) найти произведение элементов K-строки.

Значения К и M вводить с клавиатуры

program PR24;

type

mas=array[ 1.. 10, 1..10] of integer;

var

a:mas;

s, p, i, j, n, k, m :integer;

begin

writeln(’ввести количество строк и столбцов n’);

readln(n);

for i := l to n do

for j := l to n do

begin

writeln(’ввести элемент массива a[’,i ,’, ’,j ,’]= ’);

read (a[i, j]); {ввод элемента массива}

writeln(a[i, j]); {вывод элемента массива}

end;

writeln (’ввести номер строки-k и столбца-m’);

read (k, m);

s:=0; p:=1;

for i:=1 to n do

s:=s+a[i, m]; {сумма элементов столбца m}

for j:=1 to N do

p:=p*a[k, j]; { произведение элементов строки k}

writeln(’s=’,s, ’p=’,p));

end.

При выполнении операций с фиксированной строкой первый индекс не меняется, при суммировании по столбцу второй индекс не меняется.

Пример 25.

Сформировать одномерный массив, каждый k-й элемент которого равен произведению элементов соответствующей k-й строки двумерного массива.

program PR25;

var

A: array[1..10,1..10] of integer;

B: array[1..10] of integer;

N, M, k, j: integer;

begin

writeln(’введите количество строк N, столбцов M’);

readln (N,M);

for k:=1 to N do

for j:=1 to M do

begin

writeln(’ввести элемент массива A[‘, k , ‘,’, j ,’ ]’);

readln (A[k,j]);

end;

for k:=l to N do

begin

В[k]:=1;

for j:=1 to M do

В[k]:=В[k]*A[k,j];

end;

for k:=l to N do

write(B[k]);

end.

Пояснение к программе:

После ввода массива в следующем цикле накапливается произведение элементов каждой строки во внутреннем цикле оператором: B[k]:=B[k]*A[k,j];. Но перед этим необходимо во внешнем цикле задать начальное значение элемента нового массива оператором B[k]:=1;.

9.10. Вопросы для самоконтроля по теме «Программирование»

1. Укажите правильно записанный оператор присваивания на Паскале:

a) z:= cos(x) + ln(y);

b) cos(x): = z+ ln(y);

c) z =cos(x)+log(y);

d) a+b:=c+d.

2. Укажите правильно записанный оператор присваивания на Паскале:

a) x+z:= sin(x)+ln(y);

b) z+ ln(y):=w;

c) w :=sin(x)+sqr(g);

d) v-b:=w*d.

3. Укажите правильно записанный оператор присваивания на Паскале:

a) v:=e^x+tg(z);

b) v:=exp(x )+sin(x)/cos(x) ;

c) v:=exp(x )+sin/cos(x) ;

d) m/b+s:=w*d- ln(y).

4. Укажите правильно записанный оператор ввода:

a) WRITE ('Введите Х', X);

b) WRITE (X);

c) READ (X);

d) REAL(X).

5. Вывести на экран число, хранящееся в переменной Х:

a) READ (X);

b) WRITE (X);

c) READ ('Выведите Х=', X);

d) REAL(X).

6. Дана функция r=tg x-lnay; которая записана на Паскале.

Выбрать строку без ошибок:

a) r:=tg(x) –ln(y)/a;

b) r:=tan(x) –ln(y)/ln(a);

c) r:=sin(x)/cos(x) - ln(y)/ln(a);

d) r:= cos(x)/sin(x) - ln(a)/ln(y).

7. В строке представлено:

В : ARRAY[1..5,1..5] OF INTEGER;

a) ввод массива;

b) вывод массива;

c) описание одномерного массива;

d) описание двумерного массива.

8. Дана функция f=ctg a + ln x; которая записана на Паскале.

Выбрать строку без ошибок:

a) f:=ctg(a) +ln(x);

b) f:=sin(a)/cos(a) + log(x);

c) f:=ctg(a)+lg(x);

d) f:=cos(a)/sin(a) +ln(x).

9. Выбрать строку, в которой допущена ошибка:

a) c:= z mod x +a*f;

b) c:=arctan(b) - abs(r);

c) c:=sqr(b) + exp(-a*b);

d) c:= log(x) +cos(a)/d.

10. Выбрать строку, в которой допущена ошибка:

a) q:=tan(x) - ln(c)*z;

b) q:=exp(y)+sqr(a)/z;

c) q:=arctan(f) +sqrt(h);

d) q:=int(K) +round(m).

11. Дана функция r=tg x + ln x, которая записана на Паскале. Выбрать строку без ошибок:

a) r:=tg(a) +ln(x);

b) r:=sin(a)/cos(a) + ln(x);

c) r:=tan(a)+lg(x);

d) r:=cos(a)/sin(a) +ln(x).

12. В строке программы на Паскале

IFX<0THENY:=sqr(X)ELSEY:=sqrt(X)

рассматривается оператор:

a) простой короткий условный;

b) простой полный условный;

c) составной условный;

d) присваивания.

13. В строке программы на Паскале

IFX>0THENY:=LN(X);

рассматривается оператор:

a) простой короткий условный;

b) простой полный условный;

c) составной;

d) присваивания.

14. Выбрать правильно записанный оператор условия: если x<0 , тогда y=cos(x):, иначе y=x, x>=0:

a) IF X< 0 THEN Y:=cos(X) ELSE Y:=X;

b) IF X<0 THEN Y:=cos(X) ELSE X;

c) IF Y≤X<0 THEN Y:=X;

d) IF X>0 THEN Y=X ELSE cos(X).

15. Дан оператор на Паскале: FOR k:=3 TO m DO S:=S+k;.

Для выполнения цикла значение m должно быть:

a) m<k; b) m=s; c) m>=k; d) m<=k.

16. Дан оператор на Паскале: FOR k:=1 TO m DO S:=S+k;.

Всего циклов будет выполнено:

a) k; b) s; c) m; d) 1.

17. Дан оператор на Паскале: FOR k:=1 TO m DO s:=s+k;.

Выберите условие выхода из цикла:

a) k = 1 ; b)k = m; c) k  m; d) k >m.

18. Строка на Паскале: while k <=m do; относится к операторам:

a) условия; b) цикла; c) вывода; d) ввода.

19. В строке представлено:

В : ARRAY[1..7] OF INTEGER;

a) ввод массива;

b) вывод массива;

c) описание одномерного массива;

d) описание двумерного массива.