Форум программистов, компьютерный форум CyberForum.ru

Заполнение матрицы - C++

Восстановить пароль Регистрация
 
Kronus250
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 34
11.04.2013, 00:33     Заполнение матрицы #1
Здравствуйте. Задали Домашку 2 задачи про матрицы.
Вторую задачку я решил.А вот с первой возникла проблема. Не могу понять алгоритм движения по матрице.
Помогите с 1 программой, хотя бы алгоритм подскажите.
Задание по программе прикреплено ниже.
Код Решенной второй проги:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
using namespace std;
int main ()
{ int j,i,r=0,k,p=0,q=0,d=0,w=0;
int z;
const int n=9;
int A[n][n];
 k=(n-1)/2;
 q=k-1;
 d=k+1;
 w=k;
 
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   A[i][j]=0;
 for (i=0;i<n;i++)
 { A[0][i]=1;
  A[n-1][i]=1;
 }
 for (i=1;i<=k;i++)
 { p=p+1;
  w=w+1;
  q=q-1;
  d=d+1;
  A[i][p-1]=1;
  A[i][n-i]=1;
  A[w][q]=1;
  A[w][d]=1;
 } 
  for (j=0;j<n;j++)
 {r++;A[0][j]=r;}
  z=A[0][n-1];
for (j=0;j<n;j++)
    {z++;A[j][n-1]=z;}
for (i=0;i<n;i++) {
 for(j=0;j<n;j++) {
  cout<< A[i][j];}
 cout<< endl;
}
cout<<d;
system("pause");
return 0; }
Миниатюры
Заполнение матрицы  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2013, 00:33     Заполнение матрицы
Посмотрите здесь:

Заполнение матрицы C++
Заполнение матрицы C++
Заполнение матрицы C++
C++ Заполнение матрицы
Заполнение матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
11.04.2013, 00:38     Заполнение матрицы #2
там змейкой надо двигатья
v>v>и.т.д.
v^v^
v^v^
v^v^
>^>^
Kronus250
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 34
11.04.2013, 00:43  [ТС]     Заполнение матрицы #3
Ну это понял. Как это записать ?
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
11.04.2013, 00:54     Заполнение матрицы #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main( void )
{
  const UINT n = 7, m = 7;
  UINT M[n][m];
  for (UINT i = 0; i < m; ++i)
    for (UINT j = 0; j < n; ++j)
      M[i][j] = (j & 1) == 0 ? j * n + i + 1 : (j + 1) * n - i;
 
  for (UINT i = 0; i < m; ++i)
  {
    for (UINT j = 0; j < m; ++j)
      cout << M[i][j] << ' ';
    cout << endl;
  }
  return 0;
}
У меня получилось так.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
11.04.2013, 01:00     Заполнение матрицы #5
только там в последнем столбце исключение, записать так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
 
using namespace std;
 
int main()
{
    std::size_t size=7;
    unsigned int A[size][size];
    
    unsigned int counter=0;
    
    for (std::size_t i=0; i!=size-1; ++i)
    for (std::size_t j=0; j!=size; ++j)
    {
      ++counter;
      if (i%2==0) A[j][i]=counter;
      else A[size-j-1][i]=counter;
    }
    for (std::size_t j=0; j!=size; ++j)
    {
        ++counter;
         A[size-j-1][size-1]=counter;
    }
    for (std::size_t i=0;i<size;i++) {
    for(std::size_t j=0;j<size;j++) {
    cout<< A[i][j] <<" ";}
    cout<< endl;
    }
 
    return 0;
}
Добавлено через 1 минуту
хотя подмумал... можно и второй цикл в первый умять

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
 
using namespace std;
 
int main()
{
    std::size_t size=7;
    unsigned int A[size][size];
    
    unsigned int counter=0;
    
    for (std::size_t i=0; i!=size; ++i)
    for (std::size_t j=0; j!=size; ++j)
    {
      ++counter;
      if ((i%2==0)&&(i!=(size-1))) A[j][i]=counter;
      else A[size-j-1][i]=counter;
    }
 
    for (std::size_t i=0;i<size;i++) {
    for(std::size_t j=0;j<size;j++) {
    cout<< A[i][j] <<" ";}
    cout<< endl;
    }
 
    return 0;
}
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
11.04.2013, 01:01     Заполнение матрицы #6
Немного объясню.
У нас матрица n*m.
Расммотрим строки матрицы результата:
0: 1 2n 2n+1 4n 4n+1...
1: 2 2n-1 2n+2 4n-1 4n+2...
2: 3 2n-2 2n+3 4n-2 4n+3...
Сразу видно закономерность. Пусть i пробегает от 0 до n, а j от 0 до m.
Рассмотрим четные столбцы. (1, 2n+1, 4n+1 и т.д.) Видно, что каждый такой элемент - это номер столбца умноженный на высоту матрицы + номер строки + 1. Если рассмотреть все нечетные, то получаем что каждый элемент равен номеру столбца + 1 умноженное на высоту - номер строки.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
11.04.2013, 01:06     Заполнение матрицы #7
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Немного объясню.
У нас матрица n*m.
Расммотрим строки матрицы результата:
0: 1 2n 2n+1 4n 4n+1...
1: 2 2n-1 2n+2 4n-1 4n+2...
2: 3 2n-2 2n+3 4n-2 4n+3...
Сразу видно закономерность. Пусть i пробегает от 0 до n, а j от 0 до m.
Рассмотрим четные столбцы. (1, 2n+1, 4n+1 и т.д.) Видно, что каждый такой элемент - это номер столбца умноженный на высоту матрицы + номер строки + 1. Если рассмотреть все нечетные, то получаем что каждый элемент равен номеру столбца + 1 умноженное на высоту - номер строки.
не совсем, у вас последняя строка не верно формируется, там это правило не работает
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
11.04.2013, 01:09     Заполнение матрицы #8
Цитата Сообщение от abit Посмотреть сообщение
не совсем, у вас последняя строка не верно формируется, там это правило не работает
Спасибо, ты прав.
Kronus250
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 34
11.04.2013, 01:11  [ТС]     Заполнение матрицы #9
Спасибо за помощь.Сейчас буду пробовать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 01:17     Заполнение матрицы
Еще ссылки по теме:

C++ Заполнение матрицы
C++ Заполнение матрицы
С++ заполнение матрицы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
11.04.2013, 01:17     Заполнение матрицы #10
Подправил с учетом последнего замечания:
Почти ничего не изменилось, кроме того, что последний столбей считается отдельно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main( void )
{
  const UINT n = 7, m = 7;
  UINT M[n][m], i, j;
  for (i = 0; i < m; ++i)
  {
    for (j = 0; j < n - 1; ++j)
      M[i][j] = (j & 1) == 0 ? j * n + i + 1 : (j + 1) * n - i;
    M[i][j] = n * (j - 1)  + i + 2;
  }
 
  for (UINT i = 0; i < m; ++i)
  {
    for (UINT j = 0; j < m; ++j)
      cout << setw(2) << M[i][j] << ' ';
    cout << endl;
  }
  return 0;
}
Yandex
Объявления
11.04.2013, 01:17     Заполнение матрицы
Ответ Создать тему
Опции темы

Текущее время: 17:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru