|
Задача 22.
Условие задачи Алгоритм работы Листинг программы Набор тестов
Условие задачи
Напишите программу для заполнения трех двумерных массивов последующего их вывода.
Первый массив, размерностью n на m, заполняется данными, вводимыми с клавиатуры, так что заполнение ведется по диагоналям параллельным главной, начиная с правого верхнего угла.
Второй массив, размерностью n на n, заполняется случайными числами так, что в каждом столбце получается убывающая последовательность элементов.
Третий массив, размерностью n на n, заполняется для произвольного n так же, как для n=5.
В последнем случае необходимо:
1)Описать построение массива для двух разных n;
2)Написать программу;
3)Привести трассировку для n=4.
Условие задачи Алгоритм работы Листинг программы Набор тестов
Алгоритм работы
Первый массив заполняем следующим образом: вводим элементы в двумерный массив, как сказано в условии, при этом предварительно проверяем индекс элемента. Если индекс не попадает в массив, то производим корректировку, например, при вылезании за границы массива вправо, очередным будет элемент в первой строке следующей диагонали и т.п.
Второй массив: для получения убывающей последовательности в столбцах будем заполнять массив таким образом, что каждый вновь задаваемый элемент меньше предыдущего в столбце за счет уменьшения вышестоящего элемента на любое число от 1 до 40.
Третий массив: заполнение ведем по строкам и столбцам, чередуя, при этом после заполнения пары строка-столбец меняем направление заполнения. Одновременно уменьшается и количество недостающих элементов в строках и столбцах.
Например, при n=4, заполнение массива идет так:
- заполняем первую строку (4 числа),
- уменьшаем количество заполняемых элементов (3)
- заполняем последний столбец, начиная со второй строки(3 числа)
- меняем направление
- заполняем последнюю строку, начиная с предпоследнего элемента (3 числа)
- уменьшаем количество заполняемых элементов (2)
- заполняем первый столбец, начиная с предпоследней строки (2 числа)
- меняем направление
- заполняем вторую строку со второго столбца (2 числа)
- уменьшаем количество заполняемых элементов (1)
- заполняем предпоследний столбец с третьей строки (1 число)
- меняем направление
- заполняем третью строку с третьего элемента (1 число)
- массив заполнен
Условие задачи Алгоритм работы Листинг программы Набор тестов
Листинг программы
-
//Первый массив:
void main( void )
{
int N, M, i, x, y, Mas[20][20];;
cout <<"Введите кол-во строк n= ";
cin >>N;
cout <<"Введите кол-во столбцов m= ";
cin >>M;
x = 1;
y = M;
for (i = 1; i <= N * M; i ++)
{
/* Возврат в начало следующей диагонали, если вылезли вниз */
if (x>N)
{ while (y!=1)
{x--;
y--;}
x++;}
/* Возврат в начало следующей диагонали, если вылезли вправо */
if (y>M)
{ while (x!=1)
{ x--;
y--;}
y--;
}
/* Возврат в начало следующей диагонали, если вылезли вверх */
if (x<1)
{ while (x!=1)
{ x++;
y++;}
}
/* Возврат в начало следующей диагонали, если вылезли влево */
if (y<1)
{ while (y!=1)
{ x++;
y++;}
}
/* Вводим значение элемента массива */
cout<<"["<<x<<"]["<<y<<"]= ";
cin>>Mas[x][y];
/* Переходим к следующей */
x ++;
y ++;
}
/* Вывод массива */
for (x = 1; x <= N; x++)
{
for (y = 1; y <= M; y++)
cout<<" "<<Mas[x][y];
cout<<endl;
}
}
//Второй массив:
void main( void )
{
int N, i, x, y, Mas[20][20];;
cout <<"Введите порядок матрицы n= ";
cin >>N;
randomize();
for (x = 1; x<=N ; x++)
{
for (y = 1; y<=N; y++)
{
Mas[x][y]=Mas[x-1][y]-random(40)-1;
}
}
/* Вывод массива */
for (x = 1; x <= N; x++)
{
for (y = 1; y <= N; y++)
cout<<" "<<Mas[x][y];
cout<<endl;
}
}
//Третий массив:
void main ()
{
int result[100][100];
int x,y,d,max,i,j,n;
cout <<"\n n=";
cin>>n;
y = 0;
x = 1;
max = n*n;
i = n;
d = 1;
//заполняем массив
while (i>=1)
{
for (j=1;j<=i;j++)
{y=y+d;
result[x][y] = max;
max--;
}
i--;
for (j=1;j<=i;j++)
{
x=x+d;
result[x][y]=max;
max--;
}
d=d*(-1);
}
//выводим массив
for (i=1;i<=n;i++)
{
cout<<endl;
for (j=1;j<=n;j++)
{ cout.width(2);
cout <<result[i][j] <<" ";}
}
}
|
-
1 массив
void f(int N, int M,int i,int x,int y,int Mas[20][20]);
void main()
{
int N, M, i, x, y, Mas[20][20];;
cout <<"Введите кол-во строк n= ";
cin >>N;
cout <<"Введите кол-во столбцов m= ";
cin >>M;
x = 1;
y = M;
i = 1;
f(N,M,i,x,y,Mas);
/* Вывод массива */
for (x = 1; x <= N; x++)
{
for (y = 1; y <= M; y++)
cout<<" "<<Mas[x][y];
cout<<endl;
}
}
void f(int N,int M,int i,int x,int y,int Mas[20][20])
{
if (i<=N*M)
{
if (x>N)
{ while (y!=1)
{x--;
y--;}
x++;}
/* Возврат в начало следующей диагонали, если вылезли вправо */
if (y>M)
{ while (x!=1)
{ x--;
y--;}
y--;
}
/* Возврат в начало следующей диагонали, если вылезли вверх */
if (x<1)
{ while (x!=1)
{ x++;
y++;}
}
/* Возврат в начало следующей диагонали, если вылезли влево */
if (y<1)
{ while (y!=1)
{ x++;
y++;}
}
/* Вводим значение элемента массива */
cout<<"["<<x<<"]["<<y<<"]= ";
cin>>Mas[x][y];
/* Переходим к следующей */
x ++;
y ++;
f(N,M,i+1,x,y,Mas);
}
}
2 массив
void f(int N,int x,int y,int Mas[20][20]);
void main( )
{
int N, x, y, Mas[20][20];;
cout <<"Введите порядок матрицы n= ";
cin >>N;
x=1;
y=1;
randomize();
f(N, x, y, Mas);
/* Вывод массива */
for (x = 1; x <= N; x++)
{
for (y = 1; y <= N; y++)
cout<<" "<<Mas[x][y];
cout<<endl;
}
}
void f(int N,int x,int y,int Mas[20][20])
{
if(x<=N)
{
for (y = 1; y<=N; y++)
{
Mas[x][y]=Mas[x-1][y]-random(40)-1;
}
f(N, x+1, y, Mas);
}
}
3 массив
void main ()
{
int result[100][100];
int x,y,d,max,i,j,n;
cout <<"\n n=";
cin>>n;
y = 0;
x = 1;
max = n*n;
i = n;
d = 1;
//заполняем массив
while (i>=1)
{
for (j=1;j<=i;j++)
{y=y+d;
result[x][y] = max;
max--;
}
i--;
for (j=1;j<=i;j++)
{
x=x+d;
result[x][y]=max;
max--;
}
d=d*(-1);
}
//выводим массив
for (i=1;i<=n;i++)
{
cout<<endl;
for (j=1;j<=n;j++)
{ cout.width(2);
cout <<result[i][j] <<" ";}
}
}
|
Условие задачи Алгоритм работы Листинг программы Набор тестов
Набор тестов к программе
Тест 1
Введите кол-во строк n=3
Введите кол-во столбцов m=4
[1][4]= 1
[1][3]= 2
[2][4]= 3
[1][2]= 4
[2][3]= 5
[3][4]= 6
[1][1]= 7
[2][2]= 8
[3][3]= 9
[2][1]= 10
[3][2]= 11
[3][1]= 12
7 4 2 1
10 8 5 3
12 11 9 6
Введите порядок матрицы n= 4
27 18 38 20
21 11 35 18
16 7 32 9
9 0 30 1
n=4
16 15 14 13
5 4 3 12
6 1 2 11
7 8 6 10
Тест 2:
Введите кол-во строк n=4
Введите кол-во столбцов m=2
[1][2]= 1
[1][2]= 2
[2][2]= 3
[2][1]= 4
[3][2]= 5
[3][1]= 6
[4][2]= 7
[4][1]= 8
2 1
5 3
6 5
8 7
Введите порядок матрицы n= 3
22 26 19
17 17 14
15 9 11
n=3
9 8 7
2 1 6
3 4 5
Автор решения: Захаров Андрей
группа: 121Ми
год: 2009
Автор задачи: Гладков В.П. Курс лабораторных работ по программированию: Учебное пособие для специальностей электротехнического факультета ПГТУ/ Перм.гос.техн.ун-т.-Пермь,1998.-153с.
|