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

Int main()

{

int n,m,i,j;

int a[5][10];

cout<<"Input size of matrix (max 5X10):";

cin>>n>>m;

if((n<1)||(m<1)||(n>5)||(m>10)) {cout<<"Error"; return 1;}

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

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

cin>>a[i][j];

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

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

if((i*j)%2==1) a[i][j]*=2;

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

{

for(j=0;j<m;j++) cout<<a[i][j]<<" ";

cout<<endl;

}

return 0;

}

Задача: Дана квадратная целочисленная матрица размерностью максимум 10х10. Организовать заполнение матрицы случайными числами. В каждой строке матрицы найти максимальный элемент и поменять его местами с элементом главной диагонали в этой строке. Исходную и полученную матрицу вывести на экран.

#include <iostream>

#include <stdlib.h>

#include <time.h>

using namespace std;

Int main()

{

int n,i,j,max,p;

int a[10][10];

//Вод данных

cout<<"Input size of matrix (max 10):";

cin>>n;

if ((n<1)||(n>10)) {cout<<"Error"; return 1;}

srand(time(NULL));

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

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

{

a[i][j]=rand()%10;

cout<<"A["<<i<<"]["<<j<<"]="<<a[i][j]<<" ";

if (j==n-1) cout<<endl;

}

//Решение задачи

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

{

max = a[i][0]; p=0;

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

if(max<a[i][j]) {max=a[i][j];p=j;}

if(i!=p){ a[i][p]=a[i][i]; a[i][i]=max;}

}

//Вывод результатов

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

{

for(j=0;j<n;j++) cout<<a[i][j]<<" ";

cout<<endl;

}

return 0;

}

Задача: Дана матрица размером NxM (5х10). Организовать ее ввод. Поменять местами два столбца. Номера столбцов запросить у пользователя. Полученную матрицу вывести на экран.

#include <iostream>

using namespace std;

Int main()

{

int n,m,i,j,j1,j2,r;

int a[5][10];

cout<<"Input size of matrix (max 5X10):";

cin>>n>>m;

if((n<1)||(m<1)||(n>5)||(m>10)) {cout<<"Error"; return 1;}

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

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

cin>>a[i][j];

//Вывод исходного массива

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

{

for(j=0;j<m;j++) cout<<a[i][j]<<" ";

cout<<endl;

}

//Решение задачи

cout<<"Input nums:";cin>>j1>>j2;

if((j1<0)||(j1>=m)||(j2<0)||(j2>=m)) {cout<<"Error!";return 1;}

if(j1!=j2)

{

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

{

r = a[i][j1];

a[i][j1]=a[i][j2];

a[i][j2]=r;

}

}

//Вывод результатов

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

{

for(j=0;j<m;j++) cout<<a[i][j]<<" ";

cout<<endl;

}

return 0;

}

Задача: Задана матрица A[n x n] целых чисел. Написать программу транспортирования этой матрицы.

#include <iostream>

#include <stdlib.h>

#include <time.h>

using namespace std;

Int main()

{

int n,i,j,max,p;

int a[10][10];

//Вод данных

cout<<"Input size of matrix (max 10):";

cin>>n;

if ((n<1)||(n>10)) {cout<<"Error"; return 1;}

srand(time(NULL));

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

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

{

a[i][j]=rand()%10;

cout<<"A["<<i<<"]["<<j<<"]="<<a[i][j]<<" ";

if (j==n-1) cout<<endl;

}

//Решение задачи

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

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

{

p = a[i][j];

a[i][j] = a[j][i];

a[j][i] = p;

}

//Вывод результатов

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

{

for(j=0;j<n;j++) cout<<a[i][j]<<" ";

cout<<endl;

}

return 0;

}

В языке Си допускается использовать не только двумерные, но и трехмерные, четырехмерные и т. д. массивы. Их использование ничем принципиально не отличается от использования двумерных массивов, однако на практике они применяются значительно реже.

Сортировка массивов

Алгоритмы сортировки:

Квадратичные и субквадратичные алгоритмы:

    • сортировка выбором ( SelectSort );

    • сортировка пузырьком (BubbleSort ) и ее улучшения;

    • сортировка простыми вставками ( InsertSort );

    • сортировка Шелла ( ShellSort ).

Логарифмические и линейные алгоритмы :

    • Пирамидальная сортировка ( HeapSort );

    • Быстрая сортировка ( QuickSort );

    • Поразрядная сортировка ( Radix sort );

При проведении сравнительного анализа эффективности использования различных методов сортировки в качестве критерия выбираются следующие параметры: время сортировки, память, устойчивость и т.д. Мы не будем останавливаться на сравнительном анализе различных алгоритмов. Желающие могут познакомиться более детально с первоисточниками по адресу http://algolist.manual.ru/.

Рассмотрим сортировку выбором.

Идея метода состоит в том, чтобы создавать отсортированную последовательность путем присоединения к ней одного элемента за другим в правильном порядке. Будем строить готовую последовательность, начиная с левого конца массива. Алгоритм состоит из n последовательных шагов, начиная от нулевого и заканчивая (n-1)-м. На i-м шаге выбираем наименьший из элементов A[i] ... A[n] и меняем его местами с A[i]. Последовательность шагов при n=5 изображена на рисунке ниже.

Вне зависимости от номера текущего шага i, последовательность A[0]...A[i] (выделена курсивом) является упорядоченной. Таким образом, на (n-1)-м шаге вся последовательность, кроме A[n] оказывается отсортированной, а A[n] стоит на последнем месте по праву: все меньшие элементы уже ушли влево.

#include <iostream>

using namespace std;