Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекцииС#срп.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
391 Кб
Скачать
☆

Двухмерные массивы Матрица

Ввод n,m

i = 1

j = 1

Ввод a(i,j)

j = j + 1

j ≤ m ?

i = i + 1

i ≤ n ?

В дальнейшем вместо такой блок- схемы будем использовать один блок:

Ввод массива a(n,m)

int n, m, i, j;

string s;

n = int.Parse(Console.ReadLine());

m = int.Parse(Console.ReadLine());

double [,] a = new double[n, m];

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

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

{

s = Console.ReadLine();

a[i, j] = double.Parse(s);

}

Пусть числовая матрица имеет вид:

A =

Набираем числа в следующем порядке:

6

5

-5.2

4

…

9

4.2

и т.д.

-7

Массив будет заполнен данными

-5.2

a[0,0]

4

a[0,1]

…

9

a[0,4]

4.2

a[1,0]

6

a[1,1]

…

6.4

a[1,4]

…

8.1

a[5,0]

51.2

a[5,1]

…

-7

a[5,4]

П ечать матрицы:

i = 1

j = 1

Печать a(i,j)

j = j + 1

j ≤ m ?

i = i + 1

i ≤ n ?

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

Печать

массива

a(n,m)

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

{

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

Console.Write(“ {0:f3} ”, a[i, j]);

Console.WriteLine();

}

1) Вычислить сумму всех элементов матрицы.

Ввод массива a(n,m)

s =0

i = 1

j = 1

Печать a(i,j)

s = s + a(i,j)

j = j + 1

j ≤ m ?

i = i + 1

i ≤ n ?

Печать

массива

a(n,m) и s

int n, m, i, j;

double Sum;

string s;

Console.WriteLine(“Введите число строк и число столбцов матрицы”);

n = int.Parse(Console.ReadLine());

m = int.Parse(Console.ReadLine());

double [,] a = new double[n, m];

Console.WriteLine(“Введите элементы матрицы”);

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

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

{

s = Console.ReadLine();

a[i, j] = double.Parse(s);

}

Sum = 0;

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

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

Sum = Sum + a[i, j];

Console.WriteLine(“Исходная матрица”);

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

{

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

Console.Write(“ {0:f3} ”, a[i, j]);

Console.WriteLine();

}

Console.WriteLine(“ Сумма элементов матрицы {0:f3} ”, Sum);

Console.ReadKey();

2) Вычислить и переслать в одномерный массив сумму элементов каждой строки.

Ввод массива a(n,m)

i =1

s = 0

j = 1

Печать a(i,j)

s = s + a(i,j)

j = j + 1

j ≤ m ?

b(i) = s

i = i + 1

i ≤ n ?

Печать

массива

a(n,m) и b(n)

int n, m, i, j;

double Sum;

string s;

Console.WriteLine(“Введите число строк и число столбцов матрицы”);

n = int.Parse(Console.ReadLine());

m = int.Parse(Console.ReadLine());

double [,] a = new double[n, m];

double [] b = new double [n];

Console.WriteLine(“Введите элементы матрицы”);

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

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

{

s = Console.ReadLine();

a[i, j] = double.Parse(s);

}

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

{

Sum = 0;

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

Sum = Sum + a[i, j];

b[i] = Sum;

}

Console.WriteLine(“Исходная матрица”);

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

{

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

Console.Write(“ {0:f3} ”, a[i, j]);

Console.WriteLine();

}

Console.WriteLine(“ Вектор из сумм элементов строк матрицы ”);

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

Console.Write(“ {0:f3} ”, b[i]);

Console.WriteLine();

Console.ReadKey();

3) Вычислить сумму 2-х матрицы.

int n, m, i, j;

string s;

Console.WriteLine(“Введите число строк и число столбцов матрицы”);

n = int.Parse(Console.ReadLine());

m = int.Parse(Console.ReadLine());

double [,] a = new double[n, m];

double [,] b = new double[n, m];

double [,] c = new double[n, m];

Console.WriteLine(“Введите элементы 1 – ой матрицы”);

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

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

{

s = Console.ReadLine();

a[i, j] = double.Parse(s);

}

Console.WriteLine(“Введите элементы 2 – ой матрицы”);

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

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

{

s = Console.ReadLine();

b[i, j] = double.Parse(s);

}

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

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

c[i, j] = a[i, j] + b[i, j];

Console.WriteLine(“Сумма 2 - х матриц”);

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

{

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

Console.Write(“ {0:f3} ”, с[i, j]);

Console.WriteLine();

}

Console.ReadKey();

4) Найти максимальный элемент и его индексы среди всех элементов матрицы.

max = a(1,1)

k = 1 p = 1

i = 1

j = 1

max = a(i,j) k = i p = j

a(i,j)>max ?

j = j + 1

j ≤ m ?

i = i + 1

i ≤ n ?

int n, m, i, j, k, p;

double max;

string s;

Console.WriteLine(“Введите число строк и число столбцов матрицы”);

n = int.Parse(Console.ReadLine());

m = int.Parse(Console.ReadLine());

double [,] a = new double[n, m];

Console.WriteLine(“Введите элементы матрицы”);

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

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

{

s = Console.ReadLine();

a[i, j] = double.Parse(s);

}

max = a[0, 0]; k = 0; p = 0;

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

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

if(a[i, j] > max)

{

max = a[i,j]; k = i; p = j;

};

Console.WriteLine(“Исходная матрица”);

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

{

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

Console.Write(“ {0:f3} ”, a[i, j]);

Console.WriteLine();

}

Console.WriteLine(“ Максимальный элемент {0:f3} Индексы: {1:d} {2:d}”, max, k, p);

Console.ReadKey();

5) Найти максимальный элемент и его индекс в каждой строке матрицы и переслать их в одномерные массивы.

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

{

max = a[i, 0]; k = i;

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

if(a[i, j] > max)

{

max = a[i,j]; k = j;

}

Maxa[i] = max;

Ind[i] = k;

}

Console.WriteLine(“ Вектор из максимальных элементов строк матрицы ”);

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

Console.Write(“ {0:f3} ”, Maxa[i]);

Console.WriteLine();

Console.WriteLine(“ Вектор из индексов максимальных элементов строк матрицы”);

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

Console.Write(“ {0:f3} ”, Ind[i]);

Console.WriteLine();

6) Переслать в одномерный массив отрицательные элементы матрицы.

k = 0;

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

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

if(a[i, j] < 0)

{

b[k] = a[i,j]; k = k + 1;

};

Console.WriteLine(“ Вектор из отрицательных элементов матрицы ”);

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

Console.Write(“ {0:f3} ”, b[i]);

Console.WriteLine();

7) Найти максимальный элемент в каждой строке матрицы и поменять его с первым отрицательным элементом в этой же строке матрицы.

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

{

// Нахождение максимального элемента в строке

max = a[i, 0]; k = i;

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

if(a[i, j] > max)

{

max = a[i,j]; k = j;

}

// Нахождение первого отрицательного элемента в строке

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

if(a[i, j] < 0)

{

p = j; break;

}

// Обмен первого отрицательного элемента и максимального в строке

s = a[i, k];

a[i, k] = a[i, p];

a[i, p] = s;

}

8) Продублировать максимальный элемент в каждом столбце матрицы.

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

{

// Нахождение максимального элемента в столбце

max = a[0, j]; k = 0;

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

if(a[i, j] > max)

{

max = a[i,j]; k = i;

}

// Сдвиг всех элементов столбца вниз, начиная с индекса максимального

for(i=n; i>=k; i=i-1)

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

}

  1. Включить заданный вектор в качестве строки, в которой находится максимальный элемент матрицы.

// Максимальный элемент матрицы

max = a[0, 0]; k = 0;

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

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

if(a[i, j] > max)

{

max = a[i,j]; k = i;

}

// Сдвиг элементов матрицы на одну строку, начиная с последней

// и до строки, в которой находится максимальный элемент матрицы

for(i=n; i>=k; i=i-1)

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

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

// Включение заданного массива в качестве строки

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

a[k, j] = b[j];

10) Удалить строку и столбец, которые содержат максимальный элемент матрицы.

// Максимальный элемент матрицы

max = a[0, 0]; k = 0; p = 0;

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

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

if(a[i, j] > max)

{

max = a[i,j]; k = i; p = j;

}

// Удаление строки матрицы, где расположен максимальный элемент

n = n-1;

for(i=k; i<n; i=i+1)

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

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

// Удаление столбца матрицы, где расположен максимальный элемент

m = m-1;

for(j=p; j<m; j=j+1)

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

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

11) Упорядочить элементы одномерного массива b(n) в убывающем порядке.

Алгоритм упорядочения массива заключается в выполнении n-1 проходов:

В первом проходе в массиве b находим максимальный элемент и меняем его с первым элементом массива b,

во втором проходе снова находим максимальный элемент, начиная со второго элемента массива b и меняя его со вторым элементом,

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

в n-1 проходе остается два элемента, их и располагаем в возрастающем порядке.

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

{

max=b[i]; k=I;

// Нахождение максимального

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

if(b[j]>max

{

max=b[j]; k=j;

}

// Обмен текущего элемента с максимальным

p = b[i]; b[i] = b[k]; b[k] = p;

}

  1. Упорядочить элементы каждой строки матрицы в убывающем порядке.

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

{

// Проходы

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

{

max = a[k,i]; p=i;

// Нахождение максимального

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

if(a[k,j]>max)

{

max = a[k,j]; p=j;

}

}

// Обмен текущего элемента строки с максимальным элементом строки

t = a[k,i]; a[k,i] = a[k,p]; a[k,p] = t;

}

13) Переставить строки и столбцы матрицы таким образом, чтобы максимальный элемент матрицы оказался на главной диагонали с заданным индексом p.

Алгоритм решения задачи:

  1. Находим максимальный элемент матрицы, его индексы k и q.

  2. Для перемещения столбца на пересечение с главной диагональю, проверяем q с p?. Если q<p, то обмениваем соседние столбцы с номерами q, q+1, …, p (прямой обмен). Если q>p, то обмениваем соседние столбцы с номерами q, q-1, …, p (обратный обмен). В результате столбец, в котором найден максимальный элемент, переместится на нужное место.

  3. Для перемещения строки на пересечение с главной диагональю, проверяем k с p?. Если k<p, то обмениваем соседние строки с номерами k, k+1, …, p (прямой обмен). Если k>p, то обмениваем соседние строки с номерами k, k-1, …, p (обратный обмен). В результате строка, в которой найден максимальный элемент, переместится на нужное место.

Ввод n,m,p

Ввод

массива

a(n,m)

max = a(1,1)

k = 1 q = 1

i = 1

j = 1

max = a(i,j) k = i q = j

a(i,j)>max ?

j = j + 1

j ≤ m ?

i = i + 1

i ≤ n ?

q < p ?

h =1

h = -1

i = 1

j = l

Меняем a(i,j) с a(i,j+h)

j = j + 1

j ≤ p-h?

i = i + 1

i ≤ n ?

k < p ?

h =1

h = -1

i = k

j = 1

Меняем a(i,j) с a(i+h,j)

j = j + 1

j ≤ m ?

i = i + 1

i ≤ p-h ?

Печать

массива

a(n,m)

// Максимальный элемент матрицы

max = a[0,0]; k=0; q=0;

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

{

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

if(a[i,j]>max

{

max = a[i,j]; k = i; q = j;

}

}

// Перестановка столбцов

if(q<p) h = 1; else h = -1;

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

for(j=0; j<p-h; j=j+h)

{

t = a[i,j]; a[i,j] = a[i,j+h]; a[i,j+h] = t;

}

// Перестановка строк

if(k<p) h = 1; else h = -1;

for(i=k; i<p-h; i=i+h)

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

{

t = a[i,j]; a[i,j] = a[i+h,j]; a[i+h,j] = t;

}