#c
#c
Вопрос:
Операция # между матрицами может быть определена следующим образом:
Матрица A: размерность m x n, матрица B: размерность p x q, матрица A # B: размерность mp x nq.
Это результат, который я получил.
0
0
0
0
Мои коды.
#include <stdio.h>
#include <conio.h>
int multiply(int s);
int row[2][2]={1,-3,-5,-7};
int row2[3][2]={0,2,4,6,8,0};
int main(void) {
int result,i,j;
for(i=0;i<2;i ){
for(j=0;j<2;j ){
result=multiply(row[i][j]);
printf("%dn",result);
}
}
return 0;
}
int multiply(int number){
int result,i,j;
for(i=0;i<3;i ){
for(j=0;j<2;j ){
result=row2[i][j]*(number);
return resu<
}
}
}
Комментарии:
1. В
multiply
, вы возвращаетесь безоговорочно из самого внутреннего цикла. Вероятно, это не то, что вы хотите. Кроме того, разве вам не нужнаint result[6][4]
метрикс где-нибудь?2. Почему вы используете глобальные переменные?
3. Если мне удастся получить результаты от программы, я могу сделать то, что вы говорите. Теперь я получаю только 0 выходных данных из программы. @M Oehm
4.
row2[0][0]
есть0
. Выmultiply
ведете себя так, как если бы это былоint multiply(int number){ return 0 * number; }
так. Вы должны решить, хотите ли вы просто распечатать результирующие значения или использоватьmultiply
для их хранения в большей матрице, а затем распечатать ее. В любом случае вам необходимо существенно изменить обаmain
иmultiply
.5. Я хочу создать новую большую матрицу, но как мне это сделать, я до сих пор не понял. @Bob__
Ответ №1:
Исходный код, который вы опубликовали, имеет несколько проблем:
- функция multiply() не возвращает значение для всех путей.
- Вы преждевременно завершаете умножение в тот момент, когда завершаете первый проход внутреннего цикла, вместо того, чтобы ждать всех результатов.
- Вы не накапливаете «результат» в своих циклах
- Вы не инициализируете «число», прежде чем пытаться его использовать; и при этом не передаете «число» в качестве параметра в «multiple()».
- Согласно вашему последнему обновлению, вам даже не нужен int «результат»… вам нужна матрица :
int[6][4] results
.
Вместо этого рассмотрим что-то вроде этого:
void multiply(int ma[2][2], int mb[3][2], int result[6][4]){
int i, j, k;
//
for(i=0;i<...;i ){
...
for(j=0;j<...;j ){
...
for(k=0;k<...;k ){
...
}
}
}
}
int main (int argc, char *argv{}) {
int row[2][2]={1,-3,-5,-7};
int row2[3][2]={0,2,4,6,8,0};
int results[6][4] = {
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}
};
...
multiply(row, row2, results);
...
}
ПРИМЕЧАНИЕ: этот код не является «полным». Это вам предстоит выяснить. В немалой степени, путем ознакомления с вашим отладчиком (gdb? ) и пошагового выполнения кода.
Я просто пытаюсь указать вам правильное направление.
Надеюсь, это поможет… хотя бы немного.
Комментарии:
1. Разве этот код не дает мне ни одной распечатки? Я хочу, чтобы все результаты были такими, как в последней матрице. @paulsm4
2. Мы не собираемся писать ваш код за вас. Ваша функция вернула один результат, ваша переменная может содержать только одно значение, поэтому я попытался показать вам, что вы делали неправильно до сих пор. Если вы хотите получить результаты в матрице … тогда вам нужно объявить матрицу! Я обновил свой ответ. Пожалуйста, отправьте ответ, если у вас есть какие-либо вопросы. Пожалуйста, опубликуйте любые внесенные вами изменения в коде. И, ПОЖАЛУЙСТА , подтвердите, что вам удобно использовать отладчик по мере необходимости.