|
Задача 8.
Условие задачи Алгоритм работы Листинг программы Набор тестов
Условие задачи
Напишите программу вывода элементов заданного двумерного массива так,
чтобы в каждой строке количество выведенных элементов совпадало с соответствующим
числом последовательности Фибоначчи. Последняя строка может иметь меньшее количество элементов.
Условие задачи Алгоритм работы Листинг программы Набор тестов
Алгоритм работы
Сначала случайным образом формируем двумерный массив.
Затем все действия организуем в виде цикла с предусловием.
Работа организована пока переменная i – отвечающая за номер строки в массиве,
не больше заданного количества строк – n. Вводим дополнительный массив f[p] – числовая последовательность Фиббоначи,
и в зависимости от параметра p, присваиваем соответствующее значение по нужному правилу.
Количество элементов в каждой строке нового массива будет равно значению f[p], где p – это
номер строки в новом массиве. Так как по условию задачи, последняя строка может иметь меньшее количество
элементов, то проверяем условие – как только i будет равно n, а j (отвечает за номер столбца) будет равно m
(количество столбцов в исходном массиве), то мы прерываем работу внутреннего цикла и выходим из внешнего.
Организация вывода элементов осуществлена с помощью двух вложенных циклов с параметром.
Условие задачи Алгоритм работы Листинг программы Набор тестов
Листинг программы
-
#include
#include
#include
void main()
{
int i,j,n,m,p,r,z,e,l,k;
int C[20][20],F[40],A[20][20];
cout <<"Vvedite kolichestvo strok: " ; cin >> n;
cout <<"Vvedite kolichestvo stolbcov: " ; cin >> m;
n--;
m--;
/* Vvod elementov*/
randomize();
for (i=0; i<=n; i++)
{
for (j=0; j<=m; j++)
{
A[i][j]=-10+random(21);
cout.width(5); cout << A[i][j];
}
cout << endl;
}
i=0;
j=0;
p=-1;
F[0]=1;
F[1]=1;
while (i<=n)
{
p++;
if (p > 1) F[p]=F[p-1] + F[p-2];
for (z=0; z <= (F[p]-1); z++)
{
if (j < m)
{
C[p][z]=A[i][j];
j++;
}
else
{
if (i < n)
{
C[p][z]=A[i][j];
j=0;
i++;
}
else
{
C[p][z]=A[i][j];
e=z;
goto M1;
}
}
}
}
M1:;
cout << endl;
/* Vivod elementov*/
for (k=0; k<=p; k++)
{
if (k==p) F[k]=e+1;
for (l=0; l<=(F[k]-1); l++)
{
cout.width(5);
cout << C[k][l];
}
cout << endl;
}
}
|
-
#include
#include
#include
#include
int Arr1[20][20];
void VvodArr1(int i, int j, int j1, int n, int m)
{
if (i<=n)
{
if(j<=m)
{
Arr1[i][j]=-10+random(21);
cout.width(5);
cout << Arr1[i][j];
j++;
VvodArr1(i,j,j1,n,m);
}
else
{
j=j1;
i++;
cout << endl;
VvodArr1(i,j,j1,n,m);
}
}
}
void main()
{
int i,j,n,m,p,r,z,e,l,k,j1;
clrscr();
int C[20][20],F[40];
cout <<"Vvedite kolichestvo strok: " ; cin >> n;
cout <<"Vvedite kolichestvo stolbcov: " ; cin >> m;
n--;
m--;
/* Vvod elementov*/
j1=0;
randomize();
VvodArr1(0,0,j1,n,m);
i=0;
j=0;
p=-1;
F[0]=1;
F[1]=1;
while (i<=n)
{
p++;
if (p > 1) F[p]=F[p-1] + F[p-2];
for (z=0; z <= (F[p]-1); z++)
{
if (j < m)
{
C[p][z]=Arr1[i][j];
j++;
}
else
{
if (i < n)
{
C[p][z]=Arr1[i][j];
j=0;
i++;
}
else
{
C[p][z]=Arr1[i][j];
e=z;
goto M1;
}
}
}
}
M1:;
cout << endl;
/* Vivod elementov*/
for (k=0; k<=p; k++)
{
if (k==p) F[k]=e+1;
for (l=0; l<=(F[k]-1); l++)
{
cout.width(5);
cout << C[k][l];
}
cout << endl;
}
}
|
Условие задачи Алгоритм работы Листинг программы Набор тестов
Набор тестов к программе
-
Vvedite kolichestvo strok: 5
Vvedite kolichestvo stolbcov: 6
-1 3 -6 4 0 -6
-6 7 -4 9 -6 -5
-8 -6 -4 -8 1 -4
-1 2 -2 3 -3 -3
-1 -3 -4 -4 4 -2
-1
3
-6 4
0 -6 -6
7 -4 9 -6 -5
-8 -6 -4 -8 1 -4 -1 2
-2 3 -3 -3 -1 -3 -4 -4 4 -2
-
Vvedite kolichestvo strok: 1
Vvedite kolichestvo stolbcov: 1
-7
-7
-
Vvedite kolichestvo strok: 5
Vvedite kolichestvo stolbcov: 4
0 -10 -10 6
-2 0 7 -9
-5 3 -3 -10
9 1 -9 -2
6 4 1 -2
0
-10
-10 6
-2 0 7
-9 -5 3 -3 -10
9 1 -9 -2 6 4 1 -2
Автор решения: Фролова Елена
группа: 121Ми
год: 2008
Автор задачи: Гладков В.П. Курс лабораторных работ по программированию: Учебное пособие для специальностей электротехнического факультета ПГТУ/ Перм.гос.техн.ун-т.-Пермь,1998.-153с.
|