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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2012, 14:12   #1
AlexVI
Пользователь
 
Регистрация: 25.11.2006
Сообщений: 40
По умолчанию приведение к ступенчатому виду в двоичной системе

Как мне преобразовать следующий код, он работает с десятичными значениями матриц мне надо чтоб только с 0 и 1, в двоичной системе:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <cctype>
 
#include <iostream>
#include <vector>
#include <iterator>
#include <iomanip>
 
#include <conio.h>
 
using namespace std;
 
float rndup(float n)//round up a float type and show one decimal place
{
      float t;
      t=n-floor(n);
      if (t>=0.5)    
      {
              n*=10;//where n is the multi-decimal float
              ceil(n);
              n/=10;
              }
      else 
      {
              n*=10;//where n is the multi-decimal float
              floor(n);
              n/=10;
              }
      return n;
}     
 
void main(void)
{
 
        int row = 4;
        int col = 7;
        int i, j, k = 0;
vector <vector <double>> vmatrix(row);
        vector <vector <double>> cmatrix(row);
 
// Создаём исходную матрицу нужного размера и заполняем нулями
for(i=0; i<row; ++i)
{
                vmatrix[i].resize(col);
                cmatrix[i].resize(col);
 
                for(j=0; j<col; ++j)
                {
vmatrix[i][j] = 0;
                cmatrix[i][j] = 0;
}
}
                

//* 4x7 Задаём топорным методом
vmatrix[0][0]= 0 ;vmatrix[0][1]= 0 ;vmatrix[0][2]= 1 ;vmatrix[0][3]= 1 ;vmatrix[0][4]= 1 ;vmatrix[0][5]= 0 ;vmatrix[0][6]= 1 ;
vmatrix[1][0]= 0 ;vmatrix[1][1]= 1 ;vmatrix[1][2]= 1 ;vmatrix[1][3]= 0 ;vmatrix[1][4]= 0 ;vmatrix[1][5]= 0 ;vmatrix[1][6]= 1 ;
vmatrix[2][0]= 1 ;vmatrix[2][1]= 1 ;vmatrix[2][2]= 0 ;vmatrix[2][3]= 0 ;vmatrix[2][4]= 0 ;vmatrix[2][5]= 1 ;vmatrix[2][6]= 0 ;
vmatrix[3][0]= 1 ;vmatrix[3][1]= 0 ;vmatrix[3][2]= 0 ;vmatrix[3][3]= 0 ;vmatrix[3][4]= 1 ;vmatrix[3][5]= 0 ;vmatrix[3][6]= 1 ;
//*/
 
cmatrix = vmatrix; // Копируем значения из той что оставим не тронутой – vmatrix
// в ту, с котрой будем далее работать и производить
// преобразования и подсчёты - cmatrix
 
 
// Печать числа столбцов и числа строк в матрице
cout <<"col = "<< col <<" | row = "<< row <<"\n\n";
 
//*
cout <<"Matrix V:";
        cout <<"\n";
        for(i=0;i<row;i++)
        {
                for(j=0;j<col;j++)
                {
                        cout << vmatrix[i][j] << "  ";
                }
        cout <<"\n";
        }
cout <<"\n";
//*/
 
system("pause");
 
 
// Нахождение РАНГА Матрицы и приведение к ступенчатому виду.
 
//*
// Приведение к ступенчатому виду путём элементарных преобразований
int count = 0;
int til = 0;
bool key = true;
double i2j = 0;
double mulxmj = 0;
//double mj = 0;
 
if(row <= col)
til = row;
else
til = col;
for (unsigned m = 0; m < til; ++m)
{
        if (cmatrix[m][m] == 0.0)
        {
                key = false;
                for (unsigned i1 = m+1; i1<row; ++i1)
                {
                        if (cmatrix[i1][m] != 0.0)
                        {
                                key = true;
                                swap(cmatrix[m], cmatrix[i1]);
                                break;
                        }
                }
        }
        if (!key)
        break; 
        
        for (unsigned i2 = m+1; i2<row; ++i2)
        {
                double multi = cmatrix[i2][m] / cmatrix[m][m];
                for (unsigned j = 0; j<col; ++j)
                {
                        i2j = cmatrix[i2][j];
                        i2j = rndup(i2j);
//                      mj = cmatrix[m][j];
                        mulxmj = (multi * cmatrix[m][j]);
                        mulxmj = rndup(mulxmj);
                        cmatrix[i2][j] = i2j - mulxmj;
                }
        }
}
 
//* ПОДСЧЁТ РАНГА
 
int rang = 0;
key = true;
 
for (unsigned i=0; i<row; ++i)
{
        key = false;
    for (unsigned j=0; j<col; ++j)
                if (cmatrix[i][j] != 0.0)
                        key = true;
                if (!key)
                        count++;
}
//*/
 
rang = row - count;
 
cout <<"rang = "<< rang << "\n";
cout <<"\n";
 
//*
cout <<"Matrix C:";
        cout <<"\n";
        for(i=0;i<row;i++)
        {
                for(j=0;j<col;j++)
                {
                        cout << cmatrix[i][j] << "  ";
                }
        cout <<"\n";
        }
cout <<"\n";
//*/
 
 
system("pause");
 
}

Последний раз редактировалось ACE Valery; 25.03.2012 в 14:39.
AlexVI вне форума Ответить с цитированием
Старый 28.03.2012, 16:57   #2
AlexVI
Пользователь
 
Регистрация: 25.11.2006
Сообщений: 40
По умолчанию

может у кого есть наработки в этой теме
расчет ранга бинарной матрицы
и приведение бинарной матрицы к ступенчатому виду
(матрица имеет только значения 0 и 1) в инете везде работают только с вещественными матрицами
AlexVI вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
приведение числовых данных к единому виду сантехник Microsoft Office Excel 42 20.09.2011 11:27
в двоичной системе незнайка_на_земле Помощь студентам 22 23.02.2011 08:15
Приведение матрицы к диагональному виду Смородинка Помощь студентам 1 01.10.2010 16:24
работа в двоичной системе Toten Помощь студентам 3 06.03.2009 16:35
Приведение задачи к каноническому виду feniks65 Паскаль, Turbo Pascal, PascalABC.NET 2 26.12.2008 22:53