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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 18.01.2010, 03:56   #1
Farsait
Новичок
Джуниор
 
Регистрация: 14.01.2010
Сообщений: 2
По умолчанию C++ работа с матрицами.

Для данных 2х матриц А и В проверить соотношение А*В=Е. (посути матрицы квадратные)
Е - единичная матрица, тобиш матрица у которой на главной диагонали единицы (1) а в остальных ячейках нули (0).

Прога тупа нехотит выполнять последний цикл... также я несовсем уверен в правильности умножения матриц) вобщем приму любые замечания по програмному коду)

Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>

void main (void){
	clrscr ();      //очистка экрана
	printf("\t\t\t\tЛабораторная работа #2\nТема: Работа с матрицами.\nЗадание: Написать программу на языке С, проверка на соотношение А*В=Е Е - единичная матрица. \nВыполнил: ст.гр. ПО-09В.\n\t  Пыжов А.А. \n\nНажмите любую клавишу для продолжения.");  //вывод реквкзитов
	getch();        //ожидание нажатия клавиши
	clrscr();       //очистка экрана
	int i=100,j=100,k=100;
	int a[100][100], b[100][100], c[100][100];
	int n=2;
	int flag=0;
	char *str;

do{
	printf("vvedite razmer ot 1 do 100\nn=");
	scanf("%s",str);
	n=atof(str);
	}while(n>=100||n<=1);

for (i=0;i<n;i++)
{
	for (j=0;j<n;j++)
	{
printf("vvedite a[%d][%d] ", i, j);
scanf("%g", &a[i][j]);
printf("vvedite b[%d][%d] ", i, j);
scanf("%g", &b[i][j]);
	}
}
for (i=0;i<n;i++)
{
	for (j=0;j<n;j++)
	{
for (k=0;k<n;k++)
{
	c[i][j]+=(a[i][k]*b[k][j]);
}
	}
}
for (i=0;i<n;i++)
{
	for (j=0;j<n;i++)
	{
if (i==j && c[i][j]!=1)
flag=1;
if (i!=j && c[i][j]!=0)
flag=1;
}
	}
if (flag)
printf("Massiv b ne obratnui");
else
printf("Massiv b obratnui");
getch ();
}

Последний раз редактировалось Stilet; 18.01.2010 в 11:47.
Farsait вне форума
Старый 18.01.2010, 10:41   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

1.
Цитата:
Сообщение от Farsait Посмотреть сообщение
scanf("%s",str);
n=atof(str);
Всё, конечно, формально правильно, но вот так
scanf( "%d", &n);
без паразитной строки, не пробовали?

2.
Код:
for (i=0;i<n;i++) {
   for (j=0;j<n;j++) {
      c[i][j] = 0;
      for (k=0;k<n;k++) {
         c[i][j]+=(a[i][k]*b[k][j]);
      }
   }
}
Сумматор инициализировать перед циклом нужно.

3 (самое главное).
Цитата:
Сообщение от Farsait Посмотреть сообщение
for (i=0;i<n;i++)
{
for (j=0;j<n;i++) // j должно быть
{
if (i==j && c[i][j]!=1)
flag=1;
if (i!=j && c[i][j]!=0)
flag=1;
}
}
Здесь просто описка, но из-за неё-то и проблемы возникли.
Vago вне форума
Старый 19.01.2010, 02:57   #3
Farsait
Новичок
Джуниор
 
Регистрация: 14.01.2010
Сообщений: 2
По умолчанию

быть может и так)) вчера после того как ерор не обнаружил тупа заного написал побырику и заработало))
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

void main (void){
	clrscr ();      //очистка экрана
	printf("\t\t\t\tЛабораторная работа #2\nТема: Работа с матрицами.\nЗадание: Написать программу на языке С, проверка на соотношение А*В=Е Е - единичная матрица. \nВыполнил: ст.гр. ПО-09В.\n\t  Пыжов А.А. \n\nНажмите любую клавишу для продолжения.");  //вывод реквкзитов
	getch();        //ожидание нажатия клавиши
	clrscr();       //очистка экрана

	int n;
	char *str;
do{			    //начало цикла ввода размера матрицы
	printf("Введите размер матрицы от 1 до 100\nn=");
	scanf("%s",str);
	n=atof(str);
	}while(n>=100||n<=1);
      int i=0,j=0,k=0; //назначение переменных
	int a[100][100], b[100][100], c[100][100]; //задание членов матрицы, основываясь на максимальном значении n

for (i=0;i<n;i++)    //начало цикла ввода членов массива а
{
	for (j=0;j<n;j++)
	{
printf("Введите a[%d][%d] ", i+1, j+1);
scanf("%i", &a[i][j]);
a[i][j]=atof(str);
}
	}
for (i=0;i<n;i++)    //ввод массива b
{
	for (j=0;j<n;j++)
	{
printf("Введите b[%d][%d] ", i+1, j+1);
scanf("%i", &b[i][j]);
b[i][j]=atof(str);
}
	}

for (i=0; i<n; i++)
   {
      for (j=0; j<n; j++)
      {
	 for (k=0; k<n; k++)
	 {
	    c[i][j] += (a[i][k]*b[k][j]); //вычисление произведения а на b
	 }
      }
   }
   int flag=0; //флаг
   for (i=0; i<n; i++)
   {
      for (j =0; j<n; j++)
      {
	 if (i == j && c[i][j] != 1) //проверка основной диагонали
	    flag = 1;
	 if (i != j && c[i][j] != 0) //проверка остальных членов
	    flag = 1;
      }
   }
   if (flag!=0)
      printf("Массив b не обратный a\n");
   else
      printf("Массив b обратный a\n");
   getch();
}
но сёравно спасибо))

Последний раз редактировалось MaTBeu; 19.01.2010 в 15:00.
Farsait вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами Rikki-Tikki Помощь студентам 11 19.12.2010 14:58
Работа с матрицами на Си artem7213 Общие вопросы C/C++ 5 21.04.2009 14:37
Работа с матрицами (Delphi) Вета Помощь студентам 0 15.04.2009 15:37
help!!! работа с матрицами Zagran Паскаль, Turbo Pascal, PascalABC.NET 4 08.01.2007 15:54