Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 300094.doc
Скачиваний:
2
Добавлен:
30.04.2022
Размер:
342.53 Кб
Скачать

3.Применение массивов при решении задач

Необходимость в использовании массивов при решении задач возникает всякий раз, когда приходится иметь дело с большим, но конечным числом однотипных данных. В таком случае все данные можно объединить в каком-то порядке следования в единую структуру, которой дается одно имя. Это позволяет в компактном и единообразном виде записать действия над отдельными данными как над элементами массива (используя обобщенное обозначение элемента массива).

Особенностью алгоритмов обработки массивов является то, что все или большинство (или какое-то число) элементов обрабатываются одинаково (по одному алгоритму). Поэтому, решая задачу, приходится в том или ином порядке просматривать (перебирать) элементы массивов. Чтобы осуществить перебор надо определить правило изменения индекса элементов (для многомерных массивов – индексов). В случае многомерных массивов (если индексы не должны изменяться одновременно) изменение одного индекса должно быть вложено в правило изменения другого. Пример: для матрицы float a [10][5] перебор элементов можно организовать по строкам, столбцам или диагоналям. Если перебор идет по строкам, то первый индекс (индекс строки) изменяется 0 i 9, второй индекс (индекс столбца) изменяется 0 j 4 для каждого значения i.

Схема обработки всех элементов матрицы может быть представлена следующим образом:

i := v0;

while (i  vn )

{S1; j := t0;

while( j  tm )

{ S2; j := j+1 ;}

S3; i := i+1;}

Здесь i принимает последовательно значения v0, v0+1, v0+2, ... , vn. Ее можно использовать в операторах S1, S2, S3 как один из индексов (номер строки или столбца) элемента матрицы. Переменная j принимает последовательно значения t0, t0+1, t0+2, ... , tm и ее можно использовать в операторе S2 как второй индекс (номер столбца или строки).

4.Рекомендации

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

for (v=a; vb; v++) S; (1)

где v – параметр цикла – переменная целого типа; a – начальное значение параметра цикла; b – конечное значение параметра цикла (a и b задаются выражениями, при этом a  b); S – оператор (тело цикла)

или

for (v =a; vb; v-- ) S; (2)

здесь a  b.

Выполнение действий в цикле происходит следующим образом:

в цикле (1):

v = a;

while (v  b) {S; v++;}

в цикле (2):

v= a;

while( v  b) {S; v--;}

Шаг изменения параметра цикла v может быть (по модулю) и больше единицы.

В таких циклах, как правило, параметр цикла v используется в качестве индекса элемента массива.

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

# define n 20

# define m 10

main ( )

{

int p,k,i,j,x[n][m];

printf (“\n введи размер матрицы”);

scanf(“%d%d”, &p,&k);

Тогда ввод значений элементов массива x можно описать:

- по строкам for (i=0; i<p; i++ )

for (j=0; j<k; j++) scanf (“%f”, &x[i][j]);

Во входной строке значения элементов матрицы должны следовать друг за другом через пробел и перечисляться по строкам. После ввода элементов строки удобно с целью разделения строк нажимать ENTER;

  • по столбцам for (i=0; i<k; i++ )

for (j=0; j<p; j++) scanf( “%f”, &x[j][i]);

Во входной строке значения элементов матрицы должны следовать друг за другом через пробел и перечисляться по столбцам. После ввода столбца нажимайте ENTER для разделения столбцов.

Контрольные вопросы

1. Понятие сложного типа данных.

2. Понятие типа массив, задание этого типа и операции над типом.

3. Задание многомерного массива.

4. Обращение к элементам массива.

5. Обращение к элементам массива через указатели.

6. Использование массива при решении задач.