Умножение матриц: найти ошибку в вычислениях - 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 Пожалуйста, уточните, если вам нужно больше информации.