Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2010, 02:19   #1
sanela
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 19
По умолчанию доказательство, что произведение матриц А и В не коммутативно. Язык С

Написал программу. Работала, хотел вставить проверку на символы, каждый раз когда необходимо ввести данные (чтобы вводились только цифры). Потом выдала ошибки, я копии исходника не делал и решил убрать изменения вручную, перестала вообще работать. Она не компилируется из-за ошибок, я не знаю даже что они обозначают.
Задание:"Написать программу (язык С) доказательство, что произведение матриц А и В не коммутативно. Если изменится алгоритм то желательно и блок-схемку покажите. Заранее-Спасибо!

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<alloc.h>
void man(void)
{clrscr();
printf("\t\tLaboratornaja rabota 2\n\n\t\tpo Predmetu: Osnovy progrmmirovanija\n\n\t\tTtema: Rabota s massivami");
getch ();
clrscr();
int m,n,k,i,j,S1,S2,F;
do //Vvod razmernosti matritsy
{printf("Vvod razmera matritsy n i m. Vvedite n:\t")
scanf("%d",&n);}
while (n<0);
do
{printf("Vvedite m:\t")
scanf("%d",&m);}
while (m<0);
int**A,**B,**AB,**BA;
{if(n==m)
{A=(int**)maiioc(n*sizeof(int*));//Vydelenie pamjati
B=(int**)malloc(n*sizeof(int*));
AB=(int**)malloc(n*sizeof(int*));
BA=(int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++)
{A[i]=(int*)malloc(m*sizeof(int*));
B[i]=(int*)malloc(m*sizeof(int*));
AB[i]=(int*)malloc(m*sizeof(int*));
BA[i]=(int*)malloc(m*sizeof(int*));}
printf("Vvedite elementy pervoj matritsy:");
for (i=0;i<n;i++
{for(j=0;j<n;j++);
{scanf("%d",&A[i][j]);}}
printf("Vvedite element vtoroj matritsy:");
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{scanf("%d",&B[i][j]);}}
for(i=0;i<n;i++)//Umnozhenie matrits
{for(j=0;j<n;++);
{S1=0; S2=0;
{for(k=0;k<n;k++)
{S1=S1+A[i][k]*B[k][j];
S2=S2+B[i][k]*A[k][i];}}
AB[i][j]=S1;
BA[i][j]=S2;}}
f=0;i=0;j=0;
do//Proverka proizvedenie matrits na nekommutotivnost
{do
if(AB[i][j]==BA[i][j])
i=i+1;
else f=1;
while((i<n)&&(f==0));
j=j+1;}
while((j<n)&&(f==0));
printf("Matritsa AB:");//Vvyvod matritsy na ekran
{for(i=0;<i<n;i++)
{for(j=0;j<n;j++)
printf("\t%d",AB[i][j];}}
printf("Matritsa BA:");
{for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("\t%d",BA[i][j];}}
if(f==1)
{"Umnozhenie matrits nerommutativno");
getch();}
else
printf("Chastnyj sluchaj");
getch():}
else
printf("Umnozhenie matritsnekommutativno");
getch();}
for(i=);i,n;i++)//Ochistka ispol'zuemoj pamjati pod massivy
{fre(A[i]);
{fre(A);
{fre(B[i]);
{fre(B);
{fre(AB[i]);
{fre(AB);
{fre(BA[i]);}
{fre(BA);}
Вложения
Тип файла: rar Исходник.rar (910 байт, 12 просмотров)
sanela вне форума Ответить с цитированием
Старый 14.01.2010, 10:50   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

При оформлении программ используйте тег CODE для чего выделите текст программы и нажмите на значок # в окне сообщения.
Код:
int**A,**B,**AB,**BA;
{if(n==m)
{A=(int**)maiioc(n*sizeof(int*));//Vydelenie pamjati
наверное
Код:
int**A,**B,**AB,**BA;
{if(n==m)
{A=(int**)malloc(n*sizeof(int*));//Vydelenie pamjati
и вообще ошибок немерянно. Если Вы писали программу сами, то я Вам рекомендую
1)Делать программы более читабельными, для чего писать их типа
Код:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<alloc.h>
void main(void)
{
int m,n,k,i,j,S1,S2,F;
int**A,**B,**AB,**BA;
clrscr();
printf("\t\tLaboratornaja rabota 2\n\n\t\tpo Predmetu: Osnovy progrmmirovanija\n\n\t\tTtema: Rabota s massivami");
getch ();
clrscr();
do //Vvod razmernosti matritsy
{
printf("Vvod razmera matritsy n i m. Vvedite n:\t"); //Ошибка нет;
scanf("%d",&n);
}
while (n<0);
do
{
printf("Vvedite m:\t");
scanf("%d",&m);
}
while (m<0);
{
if(n==m)
{
A=(int**)malloc(n*sizeof(int*));//Vydelenie pamjati
B=(int**)malloc(n*sizeof(int*));
AB=(int**)malloc(n*sizeof(int*));
BA=(int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++)
{
A[i]=(int*)malloc(m*sizeof(int*));
B[i]=(int*)malloc(m*sizeof(int*));
AB[i]=(int*)malloc(m*sizeof(int*));
BA[i]=(int*)malloc(m*sizeof(int*));
}
printf("Vvedite elementy pervoj matritsy:");
for (i=0;i<n;i++)
{
for(j=0;j<n;j++);//Ошибка лишнее;
{
scanf("%d",&A[i][j]);
}
}
printf("Vvedite element vtoroj matritsy:");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&B[i][j]);
}
}
for(i=0;i<n;i++)//Umnozhenie matrits
{
for(j=0;j<n;++)//; Ошибка
{
S1=0;
S2=0;
{
for(k=0;k<n;k++)
{
S1=S1+A[i][k]*B[k][j];
S2=S2+B[i][k]*A[k][i];
}
}
тогда Вы будете видеть все составные операторы и сможете просчитать их правильность установки.
2) Использовать Help Вашего IDE. Все стандартные функции библиотек в нем есть с примерами, что позволит избежать множества ошибок.
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 14.01.2010 в 11:23.
Sweta вне форума Ответить с цитированием
Старый 26.01.2010, 02:11   #3
sanela
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 19
По умолчанию

Спасибо за помощь!
Теперь хочу выложить код программы который работает, но нет мелочей (типа проверки для памяти и много нюансов). К коду есть отчёт (постановка задачи. математическая модель.... схема).Если кто-то не въехал в суть программы, пишите постараюсь помочь
Код:
Листинг
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
void main(void)
 {
  //Типизирование данных
  int m,n,k,l,h,i,j,f;
  int C,A[100][100],B[100][100],AB[100][100],BA[100][100];
  char *str;
  clrscr();
  //Вступление
  printf("\t\tЛабороторная работа 2\n\t\tПо предмету: Основы программирования \n\t\tTema: Работа с массивами");
  //Ввод размеров матриц
  do
   {
    printf("\nВвод размер матрицы A.\n\n Введите m:\t");
    scanf("%s",str);
    m=atof(str);
   }
   while (m<0);
  do
   {
    printf("\n Введите n:\t");
    scanf("%s",str);
    n=atof(str);
   }
   while (n<0);
  do
   {
    printf("\nВвод размер матрицы B.\n\n Введите k:\t");
    scanf("%s",str);
    k=atof(str);
   }
   while (k<0);
  do
   {
    printf("\n Введите l:\t");
    scanf("%s",str);
    l=atof(str);
   }
   while (l<0);
  //Проверка на взаимосогласованость
  if(m!=l)
   {
    printf("\nНайти произведение матриц А и В не возможно. Они не взаимосогласованны.");
    getch();
   }
   else
    {
     if(n!=k)
      {
       printf("\nНайти произведение матриц А и В не возможно. Они не взаимосогласованны.");
       getch();
      }
      else
       {
	printf("\nВведите элементы матрицы А:\n\n");
	for(i=0;i<m;i++)
	 {
	  for(j=0;j<n;j++)
	  {
	   scanf("%s",str);
	   A[i][j]=atof(str);
	  }
	 }
	printf("\nВведите элементы матрицы В:\n\n");
	for(i=0;i<k;i++)
	 {
	  for(j=0;j<l;j++)
	   {
	    scanf("%s",str);
	    B[i][j]=atof(str);
	   }
	 }
	//Умножение матриц
	for(i=0;i<m;i++)
	 {
	  for(j=0;j<m;j++)
	   {
	    C=0;
	    for(h=0;h<n;h++)
	     {
	      C=C+A[i][h]*B[h][j];
	     }
	    AB[i][j]=C;
	   }
	 }
	for(i=0;i<k;i++)
	 {
	  for(j=0;j<k;j++)
	   {
	    C=0;
	    for(h=0;h<l;h++)
	     {
	      C=C+B[i][h]*A[h][j];
	     }
	    BA[i][j]=C;
	   }
	 }
	//Ввывод матриц
	printf("\nМатрица АВ:\n\n");
	for(i=0;i<m;i++)
	 {
	  for(j=0;j<m;j++)
	  printf("\t%d",AB[i][j]);
	  printf("\n\n");
	 }
	printf("\nМатрица ВА:\n\n");
	for(i=0;i<k;i++)
	 {
	  for(j=0;j<k;j++)
	   {
	    printf("\t%d",BA[i][j]);
	   }
	   printf("\n\n");
	 }
	if(m!=n)
	 {
	  printf("\n Произведение матриц не коммутативно." );
	 }
	 else
	  {
	   f=0;
	   i=0;
	   j=0;
	   for(i=0;i<m;i++)
	    {
	     for(j=0;j<m;j++)
	      {
	       if(AB[i][j]!=BA[i][j])
		{
		 f=1;
		}
		else
		 {
		 }
	      }
	    }
	 if(f!=0)
	  {
	   printf("\n Произведение матриц не коммутативно.");
	  }
	  else
	   {
	    printf("\n Произведение матриц коммутативно.");
	   }
       }
     }
    }
   getch();
 }
sanela вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Произведение определителей матриц. Паскаль Nyuta555 Помощь студентам 10 07.10.2009 16:43
Паскаль. Делфи(Консоль). Произведение матриц Doublefaced Помощь студентам 8 28.06.2009 00:51
произведение матриц Lampard Помощь студентам 3 30.03.2009 19:00
Вычислить произведение P кубов трех чисел a, b и c, если их сумма меньше нуля, произведение P модулей NoUserName Помощь студентам 3 01.03.2009 18:10
Произведение двух матриц 010 Паскаль, Turbo Pascal, PascalABC.NET 5 03.06.2008 11:33