Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
#1

Можно ли в двумерном массиве двигаться по столбцу? - C++

17.01.2009, 23:47. Просмотров 1188. Ответов 12
Метки нет (Все метки)

c++ можноли в двумерном массиве двигаться по столбцу
Тоесть в одном массиве двиг по строке а вовтором по столбцу
C++
1
2
3
4
5
6
7
8
9
           int p=0,q,w;
    for (i=0,q=0;q<n;q++)
    {
         for (j=0,w=0;j<n;j++)
         {
             p+=a[i][j]*b[q][w];
         } 
    }
    cout<<p;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2009, 23:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли в двумерном массиве двигаться по столбцу? (C++):

Кратчайший путь из одной вершины в другую с условием, что двигаться можно только прямо и вправо - C++
Условие Змей Горыныч оказался в лабиринте и хочет выбраться из него как можно скорее. К сожалению, после вчерашнего употребления кефира,...

Ошибка в двумерном массиве - C++
Делаю игру крестики нолики с использование двумерного массива, и возникла проблема. Программа считает a и a одним значением, и не только...

Динамика в двумерном массиве - C++
Всем привет. Подскажите, пожалуйста, реально ли реализовать такое. Есть заранее найденное n - не константа. Нужно, чтобы массив...

Указатели в двумерном массиве - C++
Например есть массив int** mas=new int*; for(int i=0; i&lt;=str;i++) mas=new int; for (int i=0; i&lt;str; i++ ) for (...

В двумерном массиве подсчитать - C++
Для каждой строки в двумерном массиве подсчитать количество положительных элементов и записать данные в новый массив. Помогите плз, а то в...

Палиндром в двумерном массиве - C++
Задача звучит так :С клавиатуры вводится размерность целочисленной матрицы, затем сама матрица. Найти строку, порядок элементов которой...

12
manfeese
130 / 129 / 16
Регистрация: 04.01.2009
Сообщений: 415
17.01.2009, 23:55 #2
Меняешь параметры строк и столюцов местами и двигаешся как надо!
В твоем случае можно сделать даже так

C++
1
2
3
4
5
6
7
8
int p=0;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
p+=a[i][j]*b[j][i];
} 
}
cout<<p;
0
Splitter
202 / 144 / 5
Регистрация: 13.01.2009
Сообщений: 554
17.01.2009, 23:56 #3
C++
1
2
3
4
5
6
7
int c=5;
int r=3;
 
for (int i=1; i<n; i++)
  for (int j=1; j<m; j++)
      p+=a[c,i]*b[j,r];
cout<<p
как я понял Вам что-то подобное надо, в р суммирубтся произведение колонки с номером с из а и строки с номером r из b. при этом в а - количество элементов в строке - n, а в b - количество строк - m
0
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
18.01.2009, 00:03  [ТС] #4
Цитата Сообщение от Splitter Посмотреть сообщение
C++
1
2
3
4
5
6
7
int c=5;
int r=3;
 
for (int i=1; i<n; i++)
  for (int j=1; j<m; j++)
      p+=a[c,i]*b[j,r];
cout<<p
как я понял Вам что-то подобное надо, в р суммирубтся произведение колонки с номером с из а и строки с номером r из b. при этом в а - количество элементов в строке - n, а в b - количество строк - m



вобще мне нужно перемножить два одинаковых размером двумерных массива
0
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
18.01.2009, 00:10  [ТС] #5
Цитата Сообщение от Splitter Посмотреть сообщение
C++
1
2
3
4
5
6
7
int c=5;
int r=3;
 
for (int i=1; i<n; i++)
  for (int j=1; j<m; j++)
      p+=a[c,i]*b[j,r];
cout<<p
как я понял Вам что-то подобное надо, в р суммирубтся произведение колонки с номером с из а и строки с номером r из b. при этом в а - количество элементов в строке - n, а в b - количество строк - m



вобще мне нужно перемножить два одинаковых размером двумерных массива

Добавлено через 4 минуты 27 секунд
смысл втом что нужно в одном массиве двигаться только по первой строке а вовтором массиве только по первом столбцэ

вобще мне нужно перемножить два одинаковых размером двумерных массива
0
manfeese
130 / 129 / 16
Регистрация: 04.01.2009
Сообщений: 415
18.01.2009, 00:20 #6
ну вобщем гдето так должно быть

C++
1
2
3
4
for (int i = 0; i <= n; i++)
    for (int j = 0; i <= n; j++)
        for (int k = 0; k <= n; k++)
            C[i][j]+=A[j][k]*B[k][j];
Добавлено через 41 секунду
Да, только в условии не i<=n а просто i<n
0
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
18.01.2009, 00:35  [ТС] #7
Цитата Сообщение от manfeese Посмотреть сообщение
ну вобщем гдето так должно быть

C++
1
2
3
4
for (int i = 0; i <= n; i++)
    for (int j = 0; i <= n; j++)
        for (int k = 0; k <= n; k++)
            C[i][j]+=A[j][k]*B[k][j];
Добавлено через 41 секунду
Да, только в условии не i<=n а просто i<n
чето не хочет выводить на экран массив c[i][j]
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
18.01.2009, 00:38 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
#include <stdio.h>
 
/* перемножает два двумерных массива одинакового размера,
   строки на столбцы, вычисляя сумму */
main()
{
    int m[2][2] = {
        1, 2,
        3, 4
    };
    int n[2][2] = {
        5, 6,
        7, 8
    };
    int i, j, res;
    
    for (res = i = 0; i < 2; i++)
        for (j = 0; j < 2; j++)
            res += m[i][j]*n[j][i];
    printf("%d\n", res);
    return 0;
}
0
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
18.01.2009, 00:51  [ТС] #9
фишка вот в чем
"Матрица — это двумерный массив чисел. Мы будем рассматривать квадратные матрицы, т.е. такие, в которых количество чисел по горизонтали и вертикали совпадает. Если у нас есть две матрицы A и B одинакового размера, то, умножив одну на другую, мы получим матрицу C того же размера. Любой элемент матрицы С, стоящий на пересечении строки с номером i и столбца с номером j, вычисляется как сумма всех произведений элементов строки i матрицы A на элементы столбца j матрицы B. Другими словами, С[i][j] = A[i][0].B[0][j] + A[i][1].B[1][j] + A[i][2].B[2][j] + ... и т.д."
0
manfeese
130 / 129 / 16
Регистрация: 04.01.2009
Сообщений: 415
18.01.2009, 01:16 #10
Программа подходит для любого размера матриц, для этого надо изменить их размерность n,m,k.

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
#include <conio.h>
#include <iostream.h>
int main()
{
    const n=2;
    const m=n;
    const k=n;
 
    int A[n][m]={
                1,2,
                3,4};
    int B[m][k]={
                5,6,
                7,8};
    int C[n][k]={0};
 
for (int i=0; i<n; i++) {
    for (int l=0; l<k; l++)  {
        for (int j=0; j<m; j++)
            C[i][l]+=A[i][j]*B[j][l];
        cout<<C[i][l]<<" ";   }
    cout<<"\n"; }
 
getch();
return 0;
}
Добавлено через 1 минуту 28 секунд
Цитата Сообщение от manfeese Посмотреть сообщение
Простой видКопироватьПечать
for (int i = 0; i <= n; i++)
for (int j = 0; i <= n; j++)
for (int k = 0; k <= n; k++)
C[i][j]+=A[j][k]*B[k][j];
Походу я тут напутал с переменными ))
0
demanxxx
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
18.01.2009, 01:59  [ТС] #11
в массивах 1 2 1 2 выдает 3 6
1 2 1 2 3 6
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
18.01.2009, 03:06 #12
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
 
#include <stdio.h>
 
/* умножает матрицы размерности 2 x 2 */
main()
{
    int m[2][2] = {
        1, 2,
        3, 4
    };
    int n[2][2] = {
        5, 6,
        7, 8
    };
    int r[2][2] = {
        0, 0,
        0, 0
    };
    int i, j, k;
    
    for (i = 0; i < 2; i++)
        for (j = 0; j < 2; j++)
            for (k = 0; k < 2; k++)
                r[i][j] += m[i][k]*n[k][j];
    printf(" %d %d\n %d %d\n",
        r[0][0], r[0][1], r[1][0], r[1][1]);
    return 0;
}
индексы не используются, только циклы
(то есть может возникнуть ощущение, что i j это индексы строки и столбца матрицы, это не так, здесь они просто для циклов)
0
manfeese
130 / 129 / 16
Регистрация: 04.01.2009
Сообщений: 415
18.01.2009, 12:12 #13
Цитата Сообщение от demanxxx Посмотреть сообщение
в массивах 1 2 1 2 выдает 3 6
У меня все работает!

Добавлено через 6 минут 7 секунд
|1 2| * |1 2| = |(1*1+2*1) (1*2+2*2)| = |3 6|
|1 2| |1 2| |(1*1+2*1) (1*2+2*2)| |3 6|
0
18.01.2009, 12:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2009, 12:12
Привет! Вот еще темы с ответами:

Потерялся в двумерном массиве - C++
#include &lt;iostream&gt; using namespace std; int main() { setlocale (LC_ALL, &quot;Russian&quot;); const int m=6, n=4; int a; int x...

Функции в двумерном массиве - C++
Ввести двумерные массивы X1,X2. В этих массивах найти минимальные элементы. Преобразовать каждую матрицу, увеличив её отрицательные...

Строки в двумерном массиве - C++
Здравствуйте! Хочу прояснить некоторые моменты по работе с двумерным массивом. Достичь хочу следующего: есть строки с фразами string...

Звёздочки в двумерном массиве - C++
Дано нечетное число n, не превосходящее 15. Создайте двумерный массив из n×n элементов, заполнив его символами &quot;.&quot; (каждый элемент массива...


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

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

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