Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический обзор по теме Одномерные массивы.pdf
Скачиваний:
16
Добавлен:
30.03.2015
Размер:
266.52 Кб
Скачать

Close (f);

{Вывод массива на экран} For i:=1 To n Do

Write (А[i], ‘ ‘);

End.

Если требуется считать определенное количество элементов из файла или количество заранее известно, то в этом случае используется цикл с параметром:

Значение переменной n (количество элементов) можно также ввести из файла. Значение n должно находиться в пределах, которые установлены типом индекса массива

(или наоборот – тип индекса определяется известными ограничениями).

...

Assign (f,'arr.dat'); Reset (f);

Read (f,n); {чтение количества элементов массива} For i:=1 To n Do

Read (f,А[i]); {заполнение массива из n элементов значениями} Close (f);

...

Пример 1.9. Что выполняет следующий фрагмент программы:

Program M;

Const N=50;

Var A : Array [1..N] Of Integer; I : Integer;

Begin

For I:=1 To N Do A[I]:=I*I

End.

Ответ: Заполняет массив таким образом, что значение каждого элемента равняется квадрату его индекса.

Решение задач с использованием одномерных массивов

Пример 1.10. Переставить элементы массива в обратном порядке.

Const N=25;

Var A: Array[1..N] Of Integer; i,B:Integer; Begin

{Ввод элементов массива с клавиатуры. N –количество элементов}

For i:=1 To N Do Begin

Write (‘A[‘,i,']= '); Readln (А[i]);

End;

{Перестановка элементов массива} For i:=1 To N div 2 Do Begin

B:=A[i]; A[i]:=A[N-i+1]; A[N-i+1]:=B; End;

For i:=1 To N Do {вывод массива} Write(A[i]:6)

End.

Пример 1.11. Найти сумму четных элементов массива.

Const N=25;

Type Tarray=Array[1..N] Of Integer;

Var A:Tarray; i,S:Integer;

Begin

{Ввод элементов массива с клавиатуры. N – количество элементов} For i:=1 To N Do Begin

Write (‘A[‘,i,']= '); Readln (А[i]);

End;

{Сумма элементов массива} S:=0;

For i:=1 To N Do

If А[i] mod 2 = 0 Then {или not odd (А[i])} S:= S + А[i];

WriteLn ('S=', S);

End.

Пример 1.12. Найти первый максимальный элемент массива и его индекс.

Фрагмент программы (считаем, что все переменные описаны правильно):

...

zmax:=А[1];

{Значение максимального элемента}

imax:=1;

{Индекс максимального элемента}

For i:=2 To n Do

If А[i] > zmax Then Begin

zmax := А [i];

imax := i;

End;

или другой вариант:

...

imax:=1;

For i:=2 To n Do

If A[i] > A[imax] Then imax := i;

zmax:= m[imax];

Пример 1.13. Найти количество положительных и отрицательных элементов массива. Выбрать наиболее эффективный фрагмент.

Фрагмент программы 1:

Var i,k1,k2,n:Integer; A:Array[1..30] Of Integer; Begin

...

k1:=0; {k1 – количество положительных элементов} k2:=0; {k2 – количество отрицательных элементов} For i:=1 To n Do

If A[i] > 0 Then Inc (k1)

Else If A[i] < 0 Then Inc (k2);

...

Фрагмент программы 2:

Var i,k1,k2,n:Integer; A:Array[1..30] Of Integer; Begin

...

k1:=0; {k1 – количество положительных элементов} k2:=0; {k2 – количество отрицательных элементов} For i:=1 To n Do Begin

K1:= k1 + ord( A[i] > 0); K2:= k2 + ord( A[i] < 0);

End;

...

Фрагмент программы 3:

Var i,n:Integer; A:Array[1..30] Of Integer; Flags:array[Boolean] of byte;

Begin

...

Flags[False]:=0; {количество положительных элементов}

Flags[true]:=0; {количество отрицательных элементов}

For i:=1 To n Do

Flags[A[i] <= 0]:=Flags[A[i] <= 0]+1–ord(A[i]=0);

Пример 1.14. Дан линейный массив целых чисел. Подсчитать, сколько в нем

различных чисел.

Идея решения: заводим вспомогательный массив, элементами которого являются логические величины (False – если элемент уже встречался ранее, True

иначе).

Var I, N, K, Kol:Integer;

A:Array [1..50] Of Integer; {исходный массив} L:Array [1..50] Of Boolean; {вспомогательный массив}

Begin

Write('Введите количество элементов массива: '); ReadLn(N);

For I := 1 To N Do Begin

Write('A[', I, ']='); ReadLn (A[I]);

L[I] := True; {Заполняем вспомогательный массив значениями True} End;

Kol := 0; {переменная, в которой будет храниться значение количества различных чисел}

For I := 1 To N Do IF L[I] Then

Begin

Kol := Kol + 1;

FOR K := I+1 TO N DO

{Во вспомогательный массив заносим значение False, если число уже встречалось ранее или совпадает с текущим элементом A[I]}

L[K] := (A[K] <> A[I]) And L[K]; End;

WriteLn('Количество различных чисел: ', Kol) End.

Задание. Реализовать другой алгоритм для подсчета различных чисел в массиве, в котором для каждого элемента во вспомогательном массиве подсчитать их количество.