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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2014, 13:17   #1
vitaliz
Пользователь
 
Регистрация: 14.12.2013
Сообщений: 10
По умолчанию Матрицы

Как ее исправить что б она работала?Да, могут быть грубые ошибки, но я пока их не понимаю((

Задание сложноватое((

Заданные три матрицы (типа int) что содержат отрицательные элементы. Выяснить какая матрица имеет наименьшею суму модулей диагональных элементов тех строк, которые начинаются с отрицательных элементов. Упорядочить строки такой матрицы за увеличением значения ее элементов.

То что я сделал

Код:
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <iomanip>
using namespace std;
typedef  int Matrix[20][20];
Matrix A;
Matrix B;
Matrix C;
int m, n;
void input(Matrix);
void output(Matrix);
void compute(Matrix);
void matrix_transform(Matrix);
void min_matrix();
int main()
{
cout<<"Enter m, n: "; 
cin>>m>>n; 
cout<<"Matrix A:\n "; input(A); output(A);
cout<<"Matrix B:\n ";input(B); output(B);
cout<<"Matrix C:\n ";input(C); output(C);
min_matrix();
system("pause");
}
void input(Matrix mat)
{	
	srand(time(NULL));
	for (int i=0; i<m; i++)
	for (int j=0; j<n; j++)
	mat[i][j]=rand()%20 - 10;  
}
void output(Matrix mat)
{  
	for (int i=0; i<m; i++)
	{ for (int j=0; j<n; j++)
	cout<<setw(5)<<mat[i][j];   
	cout<<endl;}
}
void compute(Matrix mat)
{	
	int sum=0;
	for (int i=0; i<m; i++)
	for (int j=0; j<n; j++)
{
	if(i=j)
	if(mat[i][0]<0)
	{
	sum+=abs(mat[i][j]);
	}
}
}
void min_matrix()
{
	if(compute(A)<compute(B) && compute(A)<compute(C)) {output(A); matrix_transform(A);}
	if(compute(B)<compute(A) && compute(B)<compute(C)) {output(B); matrix_transform(B);}
	if(compute(C)<compute(A) && compute(C)<compute(B)) {output(C); matrix_transform(C);}
}
void matrix_transform(Matrix mat)
{
	for (int i=0;i<m;i++)     
  {  
	for(int j=0;j<n;j++)     
    {    
    for (int k=n-1;k>j;k--)    
    if (mat[i][k]<mat[i][k-1])    
       {    
    int tmp=mat[i][k];    
    mat[i][k]=mat[i][k-1];    
    mat[i][k-1]=tmp;
       }  
	   }
}
output(mat);}

Последний раз редактировалось Stilet; 15.01.2014 в 13:35.
vitaliz вне форума Ответить с цитированием
Старый 15.01.2014, 14:51   #2
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
#include "stdio.h"
#include "time.h"
#include "stdlib.h"

#define M_SIZE 5

int main()
{    
   int m_1[M_SIZE][M_SIZE];
   int m_2[M_SIZE][M_SIZE];
   int m_3[M_SIZE][M_SIZE];

   unsigned long seed = time(NULL);
   srand(seed);
#define fill_print(num)                     \
   for(int i = 0; i < M_SIZE; i++) {        \
      for(int j = 0; j < M_SIZE; j++)       \
      {                                     \
          m_##num[i][j] = rand()%100 - 50;  \
          printf("%4d",m_##num[i][j]);      \
      } printf("\n");}                      \
   printf("\n");
   fill_print(1)
   fill_print(2)
   fill_print(3)
#undef fill_print

#define calc(num)                          \
   int sum_##num = 0;                      \
   for(int i = 0; i < M_SIZE; i++)         \
       if(m_##num[i][0] < 0)               \
           sum_##num += m_##num[i][i];   
   calc(1)
   calc(2)
   calc(3)
#undef calc
   printf("sum_1 = %d sum_2 = %d sum_3 = %d\n",sum_1,sum_2,sum_3);
   int num_min = 1;
   if(sum_2 < sum_1 && sum_2 < sum_3)
       num_min = 2;
   if(sum_3 < sum_1 && sum_3 < sum_2)
       num_min = 3;
   switch(num_min)
   {
#define Case(num)                               \
   case num :                                   \
     for(int s = 0; s < M_SIZE; s++)            \
     {                                          \
       for(int i = 0; i < M_SIZE; i++){         \
         for(int j = 0; j < M_SIZE; j++)        \
         {                                      \
           if(m_##num[s][i] < m_##num[s][j])    \
           {                                    \
             int tmp = m_##num[s][i];           \
             m_##num[s][i] = m_##num[s][j];     \
             m_##num[s][j] = tmp;               \
           }                                    \
         }                                      \
       }                                        \
     }                                          \
     for(int i = 0; i < M_SIZE; i++)            \
     {                                          \
       for(int j = 0; j < M_SIZE; j++)          \
           printf("%4d",m_##num[i][j]);         \
       printf("\n");                            \
     }                                          \
     break;
     Case(1)
     Case(2)
     Case(3)
#undef Case
   }
   return 0;
}
http://ideone.com/nXTrID
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 16.01.2014, 00:57   #3
vitaliz
Пользователь
 
Регистрация: 14.12.2013
Сообщений: 10
По умолчанию

Спасибо большое за помощь
Реально помогли))
vitaliz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ и Pascal. Матрицы. Дана матрица размером n х m. Инвертировать каждую строку матрицы. Summerlight Помощь студентам 0 24.12.2013 00:19
В каждой строке матрицы А(n*n) найти наибольший и наименьший элементы матрицы и поменять их местами saha1994 Паскаль, Turbo Pascal, PascalABC.NET 2 15.05.2012 20:38
Первый элемент - размерность матрицы, остальные образуют строки этой матрицы Anastasiya_Pot Помощь студентам 2 10.04.2012 09:46
С++.три матрицы, упорядочить строки той матрицы у которой больше нулевых строк Ирина1992 Помощь студентам 12 20.11.2011 13:01
На главную диагональ матрицы поместить наибольшие элементы этой матрицы mivel Помощь студентам 2 23.12.2009 21:19