Умножение матриц: найти ошибку в вычислениях - C (СИ)
Формулировка задачи:
Не понимаю в чем ошибка. учусь на указателях,поэтому обязательное выполнение задачи на них.
#include<stdio.h> main() {int a[20][20],b[20][20],c[20][20],f,d,*i1,*j1,vn,nomer1,nomer2,buf1,buf2,*u,*i,*j,n,m,s,*k; printf("Vvedite razmern. massiva A \n"); scanf("%d%d",&n,&m); for(i=*a;i<*(a+n);i+=20) for(j=i;j<i+m;j++) scanf("%d",j); printf("Vvedite razmern. massiva B \n"); scanf("%d%d",&f,&d); for(i=*a;i<*(a+n);i+=20) for(j=i;j<i+m;j++) scanf("%d",j); if (m==f) { for(i1=*c;i1<*(c+n);i1+=20) for(j1=i1;j1<i1+d;j1++) {s=0; nomer1=1; nomer2=1; for(vn=1;vn<n+1;vn++) {for(i=*a;i<*(a+n);i+=20) {for(j=i;j<i+m;j++) {buf1=*j; if(nomer1==vn) {nomer1=nomer1+1; break;} } break; } for(u=*b;u<*b+d;u++) {for(k=u;k<u+10*f;k+=20) {buf2=*k; if(nomer2==vn) {nomer2=nomer2+1; break;} } break; } s=s+buf1*buf2; } *j1=s; } printf("Novaya matritsa C \n"); for(i=*c;i<*(c+n);i+=20) {for(j=i;j<i+d;j++) printf("%d ",*j); printf("\n"); } } else printf("Kol-vo stolb mas A ne sovpadaet c kol-vom ctrok mas B"); }
Решение задачи: «Умножение матриц: найти ошибку в вычислениях»
textual
Листинг программы
printf("Isxodnaya matritsa\n"); for(i=*a;i<*(a+n);i+=20) {for(j=i;j<i+m;j++) printf("%d ",*j); printf("\n"); } nomer1=1; for(vn=1;vn<n+1;vn++) for(i=*a;i<*(a+n);i+=20) for(j=i;j<i+m;j++) {buf1=*j; if(nomer1==vn) {nomer1=nomer1+1;printf("%d \n",buf1); break;} }
Объяснение кода листинга программы
Код выполняет умножение матриц. Вот список, описывающий действия:
- printf(
Isxodnaya matritsa\n
); - Вывод заголовкаIsxodnaya matritsa
- for(i=a;i<(a+n);i+=20) - Цикл, который проходит по строкам матрицы a (предполагается, что строки разделены шагом 20)
- for(j=i;j<i+m;j++) - Внутри первого цикла, второй цикл, который проходит по столбцам текущей строки матрицы a
- *printf(
%d
,j);** - Вывод значения элемента матрицы a с указанием его номера - printf(
\n
); - Переход на новую строку - nomer1=1; - Инициализация переменной, которая будет использоваться для отслеживания номера строки
- for(vn=1;vn<n+1;vn++) - Цикл, который проходит по всем строкам матрицы a
- for(i=a;i<(a+n);i+=20) - Внутри второго цикла, третий цикл, который проходит по столбцам текущей строки матрицы a
- for(j=i;j<i+m;j++) - Внутри третьего цикла, четвертый цикл, который проходит по элементам матрицы a
- *buf1=j;** - Инициализация временной переменной, которая будет использоваться для хранения значения элемента матрицы a
- if(nomer1==vn) - Проверка, является ли номер строки vn равным номеру текущей строки
- {nomer1=nomer1+1;printf(
%d \n
,buf1); break;} - Если условие выполняется, номер строки увеличивается, значение элемента матрицы выводится на экран, и цикл прерывается - Код не завершается действием 13 Пожалуйста, уточните, если вам нужно больше информации.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д