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

Объяснение кода листинга программы

Код выполняет умножение матриц. Вот список, описывающий действия:

  1. printf(Isxodnaya matritsa\n); - Вывод заголовка Isxodnaya matritsa
  2. for(i=a;i<(a+n);i+=20) - Цикл, который проходит по строкам матрицы a (предполагается, что строки разделены шагом 20)
  3. for(j=i;j<i+m;j++) - Внутри первого цикла, второй цикл, который проходит по столбцам текущей строки матрицы a
  4. *printf(%d,j);** - Вывод значения элемента матрицы a с указанием его номера
  5. printf(\n); - Переход на новую строку
  6. nomer1=1; - Инициализация переменной, которая будет использоваться для отслеживания номера строки
  7. for(vn=1;vn<n+1;vn++) - Цикл, который проходит по всем строкам матрицы a
  8. for(i=a;i<(a+n);i+=20) - Внутри второго цикла, третий цикл, который проходит по столбцам текущей строки матрицы a
  9. for(j=i;j<i+m;j++) - Внутри третьего цикла, четвертый цикл, который проходит по элементам матрицы a
  10. *buf1=j;** - Инициализация временной переменной, которая будет использоваться для хранения значения элемента матрицы a
  11. if(nomer1==vn) - Проверка, является ли номер строки vn равным номеру текущей строки
  12. {nomer1=nomer1+1;printf(%d \n,buf1); break;} - Если условие выполняется, номер строки увеличивается, значение элемента матрицы выводится на экран, и цикл прерывается
  13. Код не завершается действием 13 Пожалуйста, уточните, если вам нужно больше информации.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы