Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 10.09.2012
Сообщений: 34
1

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

11.04.2013, 00:33. Просмотров 930. Ответов 9
Метки нет (Все метки)

Здравствуйте. Задали Домашку 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; }
0
Миниатюры
Заполнение матрицы  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2013, 00:33
Ответы с готовыми решениями:

Заполнение матрицы
Существует матрица n*m и отдельная функция для ввода input. В main я написал: float B;...

Заполнение матрицы
Нужна помощь. Заполнить матрицу, от левого нижнего угла по диагонали: слева - вверх. -размерность...

С++ заполнение матрицы
Нужно сформировать такую матрицу : 11 12 13 14 15 10 9 8 7 6 1 2 3 4 5 10 9 8 7 6 11 12 13 14...

Заполнение матрицы
Я совсем еще новичок в программировании, с такими матрицами пока не сталкивалась, думаю, что нужно...

9
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 792
11.04.2013, 00:38 2
там змейкой надо двигатья
v>v>и.т.д.
v^v^
v^v^
v^v^
>^>^
0
0 / 0 / 1
Регистрация: 10.09.2012
Сообщений: 34
11.04.2013, 00:43  [ТС] 3
Ну это понял. Как это записать ?
0
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,744
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;
}
У меня получилось так.
0
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 792
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;
}
0
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,744
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 умноженное на высоту - номер строки.
0
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 792
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 умноженное на высоту - номер строки.
не совсем, у вас последняя строка не верно формируется, там это правило не работает
1
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,744
11.04.2013, 01:09 8
Цитата Сообщение от abit Посмотреть сообщение
не совсем, у вас последняя строка не верно формируется, там это правило не работает
Спасибо, ты прав.
1
0 / 0 / 1
Регистрация: 10.09.2012
Сообщений: 34
11.04.2013, 01:11  [ТС] 9
Спасибо за помощь.Сейчас буду пробовать.
0
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,744
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;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2013, 01:17

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Заполнение матрицы
Матрица содержит четное количество строк и столбцов. Заполнить каждый квадрат матрицы размером 2х2...

Заполнение матрицы
Всем привет. Нужно написать заполнение двумерного динамического массива. Вот как у меня это...

Заполнение матрицы
Добрый вечер всем! Мне нужно сделать, чтобы матрица заполнялась по спирали (с первого элемента по...

Заполнение матрицы
Ребята, добрый вечер. Ломаю голову над заполнением матрицы по следующей картинке (приложено)....

Заполнение матрицы
Есть программа, которая запрашивает у пользователя размер матрицы, а потом заполняет ее случайными...

Заполнение матрицы
Дана Матрица 9х9 нужно заполнить ее числами от 1 до 81 по такой схеме:


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.