Member 13465205 Ответов: 2

Теперь я улучшаю свой код, но ....


я делаю умножение матрицы 4x4, оно работает отлично. теперь я пытаюсь добавить операцию сложения, но получаю следующее " [ошибка] недопустимые типы 'int[int]' для индекса массива""
что плохого в этом?

Что я уже пробовал:

#include<iostream>
#include<conio.h>
using namespace std;

class result {
	public:
		int mlt[4][4];
		int i,j;
		int add[4][4];		
	void multipication_matrices(int a[4][4],int b[4][4])
{
 	int i,j,k,mult;

	for(i = 0; i < 4; ++i)
	{
		 for(j = 0; j < 4; ++j)
        {
        	 for(k = 0; k < 4; ++k)
            {
                mlt[i][j] += a[i][k] * b[k][j];
            }
		}          
		
	}
	        /* YAZDIRMA İŞLEMİ */ 
  	for(i = 0; i < 4;i++)
	{
	   for(j = 0; j < 4;j++) 
	     {
			 cout << " " << mlt[i][j];
			  if(j == 4-1)
		       cout << endl;
		  }
	}

}

	void addition_matrices(int a[4][4],int b[4][4])
	{
		int i,j,add;
		
		for(i=0; i<4; i++){
		
        for(j=0; j<4; j++)
		{
	   
       		add[i][j] = a[i][j] + b[i][j]; // mistake  [Error] invalid types 'int[int]' for array subscript
        }}
		for(i=0; i<4; i++)
       {
       for(j=0; j<4; j++)
       cout<<add[i][j]<<"\t";  // mistake  [Error] invalid types 'int[int]' for array subscript
       cout<<" ";52	19		 
      }
       cout<<" ";
	}

}r;


int main()
{
 	int i,j,k,mult;
 	int array1[4][4],array2[4][4],mlt[4][4] = {0};
	
	
		cout << "Enter elements of matrix 1:" << endl;
       for(i = 0; i < 4; ++i)
        for(j = 0; j < 4; ++j)
        {
            cout << "Enter element a" << i + 1 << j + 1 << " : ";
            cin >> array1[i][j];
        }

    // Storing elements of second matrix.
    cout << "Enter elements of matrix 2:" << endl;
    for(i = 0; i < 4; ++i)
        for(j = 0; j < 4; ++j)
        {
            cout << "Enter element b" << i + 1 << j + 1 << " : ";
            cin >> array2[i][j];
        }
        
        
    r.multipication_matrices(array1,array2);
	r.addition_matrices(array1,array2);
        
	return 0;
}

Patrice T

Можете ли вы попытаться составить предложения ?
и объясните, в чем проблема.

[no name]

Взгляните сюда еще раз, решение 2, и возьмите его за основу:Почему выходные данные программы таковы в C++?[^]

Member 13465205

я стараюсь делать фукцию в классе .

[no name]

Я знаю об этом. Тем не менее, пример там отличный, и это не должно быть большой вещью, чтобы переместить его в свой класс

Member 13465205

я не знаю, что делаю. я делаю другую форму, но я пытаюсь преобразовать функцию в классе. это трудно для меня :/

Richard MacCutchan

Вчера я дал вам предложенный класс, который вы могли бы легко адаптировать, чтобы включить сложение. Почему вы все еще пытаетесь сделать это таким трудным способом? Особенно смотреть в вашем коде:

void addition_matrices(int a[4][4],int b[4][4])
{
int i,j,add;

Почему вы определили одно целое число с тем же именем, что и Ваш массив?

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
код просто берет в память первую строку и двоеточие. таким образом, выход всегда будет одинаковым числом.
"1.строка X 1. двоеточие" другие строки и двоеточия не вычисляются.

Ваш код выводит последнюю строку, последний столбец умножения, потому что это то, что вы просили. и вы многократно вычисляете то же самое, что и выход.
Используйте отладчик, чтобы увидеть, что делает ваш код.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
12

CPallini

Цитата:
int добавлять[4][4];
У вас есть этот член класса для того, чтобы сохранить результат сложения.

Однако вы заявляете
Цитата:
int i,j,добавлять;
внутри метода сложения. Локальное (к счастью, неправильное) объявление скрывает внешнее.


Member 13465205

спасибо за помощь :)

CPallini

Добро пожаловать.

[no name]

5 (маленький, потому что я новичок) за ваше терпение и помощь

CPallini

Большое спасибо.