Консультация № 171803
01.09.2009, 18:48
0.00 руб.
0 6 2
Здраствуйте Уважаемые эксперты. Не могу решить задачу. То числа какие то больше 2800... появляются в матрице то еще чтото. Сейчас вообще не выводится матрица. В общем такая задача. Необходимо заполнить матрицу числами в линейном порядке. от правого верхнего угла по диагонали вправо вниз. Тоесть пример:
37 29 22 16 11 _7 _4 2 1
46 38 30 23 17 12 _8 5 3
53 47 39 31 24 18 13 9 6
И так далее.
Черточки только для того чтобы было нагляднее. Свой код написал в приложении. Раньше все цикли были for, зачем изменил не знаю. Но так даже матрицу не выводит.
Помогите пожалуйста. Заранее благодарен.
(Консольное приложение С++)

Приложение:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int ar[9][9] ;
short l,r,i,k,j;
k=0;
i=9;
while (i==0)
{
l=1;
r=i;
while (r==10)
{
l++;
ar[l][r]=k;
k++;
r--;
}
i--;
}
l=1; while (l==10) {
r=1; while (r==10)
{
cout << " " <<ar[l][r] << " ";r++;
}
cout << "\n";
l++;
}
getchar();
}

Обсуждение

Неизвестный
01.09.2009, 20:17
общий
это ответ
Здравствуйте, Dimon4ik.
Программа:
Код:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
// Размерности
const size_t ROWS=3,COLS=5;
// Матрица
unsigned int matrix[ROWS][COLS];

// Счетчик
unsigned int counter=0;
// Заполняем матрицу
size_t start_row=0,start_col=COLS-1;
while(start_row<ROWS)
{
size_t i=start_row,j=start_col;
while(i<ROWS && j<COLS)
{
matrix[i++][j++]=++counter;
}
if(start_col>0)
{
--start_col;
}
else
{
++start_row;
}
}
// Выводим матрицу
for(size_t i=0;i<ROWS;++i)
{
for(size_t j=0;j<COLS;++j)
{
cout<<setw(3)<<matrix[i][j]<<' ';
}
cout<<endl;
}
system("PAUSE");
return 0;
}

Вывод:
Код:

10 7 4 2 1
13 11 8 5 3
15 14 12 9 6
5
Спасибо. Исправил, отлично!
Неизвестный
01.09.2009, 21:23
общий
Micren:
У меня стоит borland C++ version 3,1. Я пытался переделать под него.
Вот код, как я переделал. Матрица 9х9 (переделал насколько понял)
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <iomanip.h>
void main()
{
clrscr();
unsigned int ar[9][9] ;
int k=0;
short l,r,i,j;
l=0;r=8;
while(l<9)
{
i=l;
j=r;
while(i<9 && j<9)
{
ar[i++][j++]=++k;
}
if(j>0)
{
--r;
}
else
{
++l;
}
}
for(i=0;i<9;++i)
{
for(j=0;j<9;++j)
{
cout << setw(3) <<ar[i][j] << " ";
}
cout <<endl;
}
getchar();
}

Только проблема.
Вот что на выходе получается. Не могу понять в чем проблема.
127 119 110 101 92 83 74 65 56
135 128 120 111 102 93 84 75 66
142 136 129 121 112 103 94 85 76
148 143 137 130 122 113 104 95 86
153 149 144 138 131 123 114 105 96
157 154 150 145 139 132 124 115 106
160 158 155 151 146 140 133 125 116
162 161 159 156 152 147 141 134 126
117 108 99 90 81 72 63 54 45
Неизвестный
01.09.2009, 21:39
общий
это ответ
Здравствуйте, Dimon4ik!
Вы не могли бы уточнить, откуда заполнить матрицу? вручную? из файла?
Естественно, что у вас ничего не делается, так как после проверки условий ни один из циклов не выполняется:
i=9;
while (i==0)
...
l=1; while (l==10)

Зачем вы выделяли массив размерностью 9 на 9 для хранения 3 на 9 чисел?
Уточните задание пожалуйста и я вам помогу написать программу
Неизвестный
01.09.2009, 21:42
общий
Dimon4ik:
А слабо скачать MS Visual Studio? Хотя бы Express Edition. http://www.microsoft.com/express/download/

Этот Borland 3.1 из каменного века не соответствует стандарту ISO/IEC 14882.

Вместо
Код:

if(j>0)
{
--j;
}
else
{
++i;
}

надо
Код:

if(r>0)
{
--r;
}
else
{
++l;
}
Неизвестный
01.09.2009, 21:43
общий
Veder:
Ответ по программированию должен включать решение. Для вопросов есть мини-форум.
Неизвестный
01.09.2009, 21:54
общий
Veder:
Извиняюсь, я в вопросе данные задачи забыл написать. Массив должен был быть 9х9. Но уже программа готова. Все работает.
Форма ответа