
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;