Объявления двумерного массива выполняется аналогично одномерному вместе с объявлением всех переменных программы. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объявления двумерного массива выполняется аналогично одномерному вместе с объявлением всех переменных программы.



<тип> name [n][m];

где: n – количество строк в массиве, целое число.

m – количество элементов в строке массива, целое число.

Например

int b[5][6], q[10][15];

float y[7][5];

 

Обращение к элементу матрицы выполняется через индексы элементов.

a[0][0] a[1][2] a[i][j] a[9][3]

y[0][0] y[0][1]... y[5][7]

В памяти многомерные массивы располагаются линейно так, что в первую очередь меняется крайний правый индекс, затем индекс слева и т.д.

Начальные индексы у элементов многомерных массивов равны 0.

Индексы для элементов массива d[3][4]:

       

d[0][0] d[0][1] d[0][2] d[0][3]

d[1][0] d[1][1] d[1][2] d[1][3]

d[2][0] d[2][1] d[2][2] d[2][3]

 

 

4.4.2 Инициализация многомерных массивов:

 

int t[3][4] = { {2, 7, -1, -10},   

            {5, 12, 18, -3},     

            {11, -8, 25, 4} };

                            

Для работы с многомерными массивами чаще всего используются сложные циклы for. Количество операторов цикла for равна размерности массива. Параметрами этих циклов является индексы элементов массива.

 

4.4.3 Ввод значений элементов матрицы

 

С помощью клавиатуры

for(i=0; i<n; i++)

for(j=0; j<m; j++)

   scanf(“%d”, &a[i][j]);

 

 

С помощью датчика случайных чисел

for(i=0; i<n; i++)

for(j=0; j<m; j++)

   a[i][j]= 10+0.001*rand();

 

 

4.4.4 Вывод элементов матрицы  на печать

 

for(i=0; i<n; i++)

{

printf(“\n”);

for(j=0; j<m; j++)

printf(“ %6.2f ”, a[i][j]);

}

 

Пример 4.4. Задана матрица действительных чисел, размером 10х9. Найти сумму всех отрицательных элементов. Результат – простая переменная

 

 

 

 

Int main()

{

float a[10][9], s;

int i,j;

for (i=0;i<10;i++)

{

printf("\n");

for (j=0; j<9; j++)

{

 a[i][j]=-5+0.001*rand();

 printf("%6.1f",a[i][j]);

}

}

s=0;

for (i=0; i<10; i++)

for(j=0; j<9; j++)

if(a[i][j]<0) s=s+a[i][j];

printf("\n сумма= %6.2f",s);

return 0;

 }

 

Пример 4.5. Задан массив A размером 10х9. Найти суммы положительных элементов в каждой строке. Результат - одномерный массив.

 

Текст програми

void main()

{

float a[10][9], s[10];

int i,j;

 for (i=0;i<10;i++)

 {

 printf("\n");

 for (j=0; j<9; j++)

 {

a[i][j]=-5+0.001*rand();

printf("%6.1f",a[i][j]);

}

}

printf("\n");

printf("\n");

for (i=0; i<10; i++)

{

s[i]=0;

for(j=0; j<9; j++)

if(a[i][j]>0) s[i]=s[i]+a[i][j];

}

for(i=0; i<10; i++)

printf(" %5.0f",s[i]);

  }

 

Приклад 4.6. В матрице размером 8х8 найти значение и положение максимального элемента, лежащего выше главной диагонали

 

 

 

 


 Текст програми

void main()

{

float a[8][8],max;

int i,j,nstr,nstb;

 for (i=0;i<10;i++)

 {

 printf("\n");

 for (j=0; j<9; j++)

 {

a[i][j]=-5+0.001*rand();

printf("%6.1f",a[i][j]);

}

}

printf("\n");

max=-1000;

for (i=0; i<10; i++)

{

for(j=i+1; j<9; j++)

if(a[i][j]>max){max=a[i][j];nstr=i; nstb=j;}

}

  

printf("%d %d %5.1f",nstr, nstb, max);

  }

 

Контрольные вопросы для самопроверки

1. Как осуществляется описание двумерных массивов?

2.  Как осуществляется запись элементов двумерных массивов?

3.  Запишите фрагмент программы, который одновременно формирует матрицу с помощью функций формирования случайных чисел и выводит ее значение на экран для ввода элементов массива.

4.  Запишите фрагмент программы, который вычисляет сумму элементов матрицы.

5.  Запишите фрагмент программы, который находит минимальный элемент в матрице.

6. Запишите фрагмент программы, который находит минимальный элемент в каждой строке двумерного массива.


МЕТОДЫ СОРТИРОВОК

Упорядоченным (отсортированным) называется массив, значения элементов которого отвечают следующему условию:

a 1 ≤ a 2 ≤ a 3... ≤ ai ≤ ai +1... ≤ an -1 ≤ an      (по возрастанию)

или

a 1 ≥ a 2 ≥ a 3... ≥ ai ≥ ai +1... ≥ an -1 ≥ an           (по убыванию)

Существует целый ряд методов, позволяющих отсортировать имеющийся массив.

Сортировка выбором.

Найти элемент массива, имеющий наименьшее значение в исходном массиве. Переставить его с первым элементом.

Затем проделать то же самое, начав со второго элемента, затем с третьего  и т.д.

5 23 7 12 3 56 2 15 34 9

min =2  

 

5 23 17 12 3 56 2 15 34 9

2 23 17 12 3 56 5 15 34 9

 


2 23 17 12 3 56 5 15 34 9

min =3  

 

2 23 17 12 3 56 5 15 34 9

2 3 17 12 23 56 5 15 34 9

2 3 17 12 23 56 5 15 34 9

min =5  

 

2 3 17 12 23 56 5 15 34 9

2 3 5 12 23 56 17 15 34 9

2 3 5 12 23 56 17 15 34 9

min =9  

 

2 3 5 12 23 56 17 15 34 9

2 3 5 9 23 56 17 15 34 12

 

Алгоритм выглядит следующим образом

 

 


Сортировка обменами.

Последовательно сравниваются два соседних элемента. Если а ii +1. никаких действий не предпринимается. Если а ii +1. меняются местами а i и а i +1. В результате одного прохода вдоль массива самый большой элемент окажется на последнем месте. Возобновляется просмотр с начала уменьшая на единицу количество просматриваемых элементов.

Так до тех пор, когда элементы будут упорядочены

5 23 7 12 3 56 2 15

5 7 23 12 3 56 2 15
5 7 12 23 3 56 2 15

5 7 12 3 23 56 2 15

5 7 12 3 23 2 56 15
5 7 12 3 23 2 15 56

Алгоритм выглядит следующим образом

 

Текст программы

Void main ()

{

float a[30],dop;

int n,i,k, f=1;

 

n=10;

printf("\n исходный массив\n ");

 

for (i=0;i<n;i++)

{

a[i]=0.001*rand();

printf("%5.1f",a[i]);

}

while(f==1)

{

f=0;

for (i=0;i<n-1;i++)

if (a[i]>a[i+1]) {dop=a[i];

            a[i]=a[i+1];

            a[i+1]=dop;

            f=1;

                }

 

}

printf("\n отсортированный массив\n ");

   

for (i=0;i<n;i++)

 printf("%5.1f",a[i]);

}



Поделиться:


Последнее изменение этой страницы: 2021-04-04; просмотров: 51; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.187.233 (0.015 с.)