|
Задача 7.
Условие задачи Алгоритм работы Листинг программы Набор тестов
Условие задачи
Напишите программу для выполнения трех двумерных массивов и последующего их вывода.
Первый массив, размерностью n x m, заполняется данными, вводимыми с клавиатуры, так
что заполнение ведется по строкам от последних элементов строки к первым.
Второй массив, размерностью n x n, заполняется так: элементы, лежащие ниже главной
диагонали, являются случайными числами из интервала [-17;36], а лежащие на главной диагонали и
выше, являются случайными числами из интервала [100;10000].
Третий массив, размерностью n x n, заполняется для произвольного n также, как для n=5.
В последнем случае необходимо:
-
описать словами построение массива для двух разных n;
- написать программу;
- привести трассировку для n=4.
Условие задачи Алгоритм работы Листинг программы Набор тестов
Алгоритм работы
1 способ. Заполнения массива организовано с помощью двух вложенных циклов с параметром.
Так как заполнение массива ведется по строкам от последних элементов строки к первым,
то начальному значению внутреннего цикла присваивается m – количество столбцов массива.
Работа цикла продолжается до тех пор, пока начальное значение не будет равно единице.
При этом каждый раз при обращении к циклу начальное значение уменьшается на единицу.
2 способ. При заполнении массива организуем два вложенных цикла с параметром.
В теле внутреннего цикла проверяем условие, в зависимости от которого, элементы присваивается конкретное значение.
3 способ. Заполнение массива начинаем с первого элемента последней строки.
Элементы последней строки вводятся по принципу <предыдущий элемент> + <порядковый номер столбца>.
Первому элемент равен единице (1). Все последующие элемент, начиная с (n-1) строчки, где n – порядок матрицы,
вычисляются по принципу: если элемент лежит выше главной диагонали, то присваиваем значение ноль (0),
иначе A[i][j]=A[i+1][j+1]-1, где i – номер текущей строки массива А, j – номер текущего столбца массива A.
Условие задачи Алгоритм работы Листинг программы Набор тестов
Листинг программы
- 1 способ
-
#include
void main()
{
int i,j,n,m,A[20][20];
cout <<"Vvedite kolichestvo strok massiva: " ; cin >> n;
cout <<"Vvedite kolichestvo stolbcov massiva: " ; cin >> m;
/* Vvod elenentov*/
for (i=1; i<=n; i++)
{
for (j=m; j>=1; j--)
{
cout << "Vvedite A[" << i << "," << j << "] "; cin >> A[i][j];
}
cout << endl;
}
/* Vivod elementov*/
for (i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
cout.width(5); cout << A[i][j];
}
cout << endl;
}
cout << endl;
}
|
-
#include
#include
int Arr1[20][20];
void VvodArr1(int i, int m1, int j, int n, int m)
{
if (i<n)
{
if (m1>j)
{
cout << "Vvedite Arr1[" << i+1 << "," << m1 << "] ";
cin >> Arr1[i][m1];
m1=m1--;
VvodArr1(i,m1,j,n,m);
}
else
{
m1=m;
i=i++;
VvodArr1(i,m1,j,n,m);
}
}
}
void main()
{
int i,j,n,m,m1;
clrscr();
cout <<"Vvedite kolichestvo strok massiva: " ; cin >> n;
cout <<"Vvedite kolichestvo stolbcov massiva: " ; cin >> m;
m1=m;
/* Vvod elenentov*/
VvodArr1(0,m1,0,n,m);
/* Vivod elementov*/
for (i=0; i<n; i++)
{
for(j=1; j<=m; j++)
{
cout.width(5); cout << Arr1[i][j];
}
cout << endl;
}
}
|
- 2 способ
-
#include
#include
#include
void main()
{
int i,j,n,A[20][20];
cout <<"Vvedite poryadok matrici: " ; cin >> n;
cout << endl;
/* Vvod elenentov i vivod elementov*/
randomize();
for (i=1; i<=n; i++)
{
for (j=1; j<=n; j++)
{
if (i==j || j>i)
A[i][j]=100+random(9901);
else A[i][j]=-17+random(54);
cout.width(7); cout << A[i][j];
}
cout << endl;
}
cout << endl;
}
|
-
#include
#include
#include
#include
int Arr1[20][20];
void VvodArr1(int i,int j1, int j, int n)
{
if (i<n)
{
if (j1<n)
{
if (i==j1 || j1>i) Arr1[i][j1]=100+random(9991);
else Arr1[i][j1]=-17+random(54);
cout.width(7); cout << Arr1[i][j1];
j1=j1++;
VvodArr1(i,j1,j,n);
}
else
{
i=i++;
j1=j;
cout << endl;
VvodArr1(i,j1,j,n);
}
}
}
void main()
{
int i,j,n,m,A[20][20];
clrscr();
cout <<"Vvedite poryadok matrici: "; cin >> n;
cout << endl;
/* Vvod elenentov i vivod elementov*/
randomize();
VvodArr1(0,0,0,n);
}
|
- 3 способ
-
void main()
{
int i,j,n,A[20][20];
cout <<"Vvedite poryadok matrici: " ; cin >> n;
cout << endl;
/* Vvod elenentov */
for (i=n; i>=1; i--)
for (j=1; j<=n; j++)
{
if (j>i) A[i][j]=0;
else
{
if (i==n)
{
if (j==1) A[i][j]=1;
else A[i][j]=A[i][j-1]+j;
}
else A[i][j]=A[i+1][j+1]-1;
}
}
/*Vivod elementov*/
for (i=1; i<=n; i++)
{
for (j=1; j<=n; j++)
{
cout.width(5); cout << A[i][j];
}
cout << endl;
}
cout << endl;
}
|
-
#include
#include
int Arr1[20][20];
void VvodArr1(int i1,int j, int i, int j1, int n)
{
if (i1>=i)
{
if(j<=n)
{
if(j>i1) Arr1[i1][j]=0;
else
{
if (i1==n)
{
if (j==0) Arr1[i1][j]=1;
else Arr1[i1][j]=Arr1[i1][j-1]+(j+1);
}
else Arr1[i1][j]=Arr1[i1+1][j+1]-1;
}
j++;
VvodArr1(i1,j,i,j1,n);
}
else
{
j=j1;
i1--;
VvodArr1(i1,j,i,j1,n);
}
}
}
void main()
{
int i,j,n,i1,j1;
clrscr();
cout <<"Vvedite poryadok matrici: " ; cin >> n;
cout << endl;
/* Vvod elenentov*/
i1=(n-1);
j1=0;
n=n-1;
VvodArr1(i1,0,0,j1,n);
/*Vivod elementov*/
for (i=0; i<=n; i++)
{
for (j=0; j<=n; j++)
{
cout.width(5); cout << Arr1[i][j];
}
cout << endl;
}
}
|
Условие задачи Алгоритм работы Листинг программы Набор тестов
Набор тестов к программе
- 1 способ
-
Vvedite kolichestvo strok massiva: 4
Vvedite kolichestvo stolbcov massiva: 5
Vvedite A[1,5] 1
Vvedite A[1,4] 2
Vvedite A[1,3] 3
Vvedite A[1,2] 4
Vvedite A[1,1] 5
Vvedite A[2,5] 6
Vvedite A[2,4] 4
Vvedite A[2,3] 0
Vvedite A[2,2] -4
Vvedite A[2,1] 5
Vvedite A[3,5] 6
Vvedite A[3,4] 0
Vvedite A[3,3] -12
Vvedite A[3,2] 4
Vvedite A[3,1] 5
Vvedite A[4,5] 5
Vvedite A[4,4] 4
Vvedite A[4,3] -5
Vvedite A[4,2] 6
Vvedite A[4,1] -8
5 4 3 2 1
5 -4 0 4 6
5 4 -12 0 6
-8 6 -5 4 5
-
Vvedite kolichestvo strok massiva: 3
Vvedite kolichestvo stolbcov massiva: 4
Vvedite A[1,4] 1
Vvedite A[1,3] 2
Vvedite A[1,2] 0
Vvedite A[1,1] -3
Vvedite A[2,4] 4
Vvedite A[2,3] 5
Vvedite A[2,2] 7
Vvedite A[2,1] 4
Vvedite A[3,4] -8
Vvedite A[3,3] 6
Vvedite A[3,2] -1
Vvedite A[3,1] 11
-3 0 2 1
4 7 5 4
11 -1 6 -8
- 2 способ
-
Vvedite poryadok matrici: 4
5557 303 5254 8196
-4 7337 9264 3054
8 14 1746 3180
5 -1 12 6838
-
Vvedite poryadok matrici: 5
6297 9843 8437 7065 6299
10 1646 9171 2425 5990
-1 1 2691 5880 8790
-17 0 4 6962 652
-9 3 16 -16 8102
- 3 способ
-
Vvedite poryadok matrici: 4
7 0 0 0
4 8 0 0
2 5 9 0
1 3 6 10
-
Vvedite poryadok matrici: 5
11 0 0 0 0
7 12 0 0 0
4 8 13 0 0
2 5 9 14 0
1 3 6 10 15
Автор решения: Фролова Елена
группа: 121Ми
год: 2008
Автор задачи: Гладков В.П. Курс лабораторных работ по программированию: Учебное пособие для специальностей электротехнического факультета ПГТУ/ Перм.гос.техн.ун-т.-Пермь,1998.-153с.
|