Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2013, 22:53   #1
Matfej
 
Регистрация: 31.12.2012
Сообщений: 9
По умолчанию Матрица

Помогите пожалуйста!Нужно заполнить матрицу по спирали.Что-то проработал,но прога не хочет работать.Что я делаю не так?



#include <iostream>
#include <windows.h>
#include <math.h>
using namespace std;
void main()
{
SetConsoleOutputCP(1251);
const int Max=100;
int ar[Max][Max];
int N,M;
int k=1;
do{
cout<<"Введите колличество строк:\n";
cin>>N;
}
while(N<1||N>Max);
do{
cout<<"Введите колличество столбцов:\n";
cin>>M;}
while(M<1||M>Max);
int t=0,r=M-1,l=0,b=N-1,v=0;
for(int i=0;i<N;i++)
for(int j=0;j<M;j++)
while(l<=r&&t<=b)
{
switch(v)
{
case 1:for(int i=l;l<=r;i++,k++)
{ ar[t][i]=k;
t++;break;}
case 2:for(int i=t;i<=b;i++,k++)
{ ar[i][r]=k;
r--;break;}
case 3:for(int i=r;i>=l;i--,k++)
{ ar[b][i]=k;
b--;break;}
case 4:for(int i=b;i>=t;i--,k++)
{ ar[i][l]=k;
l++;break;}
}
v=(v+1)%4;}
for(int i=0;i<N;i++)
{for(int j=0;j<M;j++)
cout<<ar[i][j]<<' ';
cout<<endl;
}
}
Matfej вне форума Ответить с цитированием
Старый 06.02.2013, 23:05   #2
interacia
Пользователь
 
Аватар для interacia
 
Регистрация: 24.01.2013
Сообщений: 67
По умолчанию

Много непонятного.
Полностью переделанная программа.
Код:
#include <iostream.h>
void main()
{
int ar[100][100];
int N,M; 
int i,j,k;
int Num; 
int Min; 
cout<<"Введите колличество строк:\n";
cin>>N;
cout<<"Введите колличество столбцов:\n";
cin>>M;
Num=1; 

if (M<N) {Min=((M/2)+(M%2));}
else {Min=((N/2)+(N%2));}

for (k=0;k<Min;k++)
    {
for (i=k;i<M-k;i++){ ar[k][i]=Num;  Num++;} 
for (j=(k+1);j<N-k;j++){ ar[j][M-(k+1)]=Num;  Num++;} 

for (i=M-(k+2);i>=k;i--){ar[N-(k+1)][i]=Num; Num++;}
for (j=N-(k+2);j>k;j--){ar[j][k]=Num; Num++;} 
    }

for(int i=0;i<N;i++)
{for(int j=0;j<M;j++) cout<<ar[i][j]<<' ';
cout<<endl;
}
system("PAUSE"); 
}
Ссылка на код с комментарием
interacia вне форума Ответить с цитированием
Старый 07.02.2013, 00:53   #3
Matfej
 
Регистрация: 31.12.2012
Сообщений: 9
По умолчанию

Спасибо!
Теперь буду дерзать против часовой стрелки.
Matfej вне форума Ответить с цитированием
Старый 11.02.2013, 23:24   #4
Matfej
 
Регистрация: 31.12.2012
Сообщений: 9
По умолчанию

Еще один небольшой вопросик!
Как в матрице,закрученной по спирали,против часовой стрелки,осуществить выбор угла пользователем,с которого начнется спираль?
Matfej вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Матрица NxN -> текстовый файл -> Матрица NxN - найти max по диагоналям -> типизированный файл Лунатик13 Помощь студентам 1 20.02.2012 15:54
Матрица viktor 24 Visual C++ 2 26.05.2011 19:19
матрица vidok_ Visual C++ 1 10.05.2011 19:50
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11