Форум программистов, компьютерный форум CyberForum.ru

Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
06.01.2013, 17:04     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #1
пункт 1. С клавиатуры задается матрица размером 5 * 5. Найти ее ранг и средние значения по столбцам.

пункт 2. Из найденных закругленных значений создать множество В и найти дополнение к множеству В .

пункт 1 я сделал и закруглил найденные значения, но не знаю как создать множество и найти к нему дополнение...

помогите кто ни будь =)

Добавлено через 6 минут
вот сам код...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <iostream>
#include <iomanip>
#include <conio.h>
 
using namespace std;
 
float rndup(float n)//округление числа с плавающей точкой
{
      float t;
      t=n-floor(n);
      if (t>=0.5)    
      {
              n*=10;// float n
              ceil(n);
              n/=10;
              }
      else 
      {
              n*=10;// float n
              floor(n);
              n/=10;
              }
      return n;
}     
int main()
{
    // srand(time(NULL));
    setlocale(LC_ALL, "ukr");
    //row =u, col = p
    int const u=5, p=5;
 
    int a[u][p];
 
    for(int i=0;i<u;i++)
    for(int j=0;j<p;j++)
 
        // a[i][j]=rand()%20-6;
    
   { 
            cout<<"введите "<<(j+1)<<" елемент "<<(i+1)<<" строки"<<endl;
           cin>>a[i][j];
         } 
 
// вывод матрицы
 
    cout<<endl<<"Матрица : ";
    cout<<endl<<endl;
 
    for(int i=0;i<u;i++)
{
for(int j=0;j<p;j++) 
cout<<setw(4)<<a[i][j]<<"  ";
cout<<endl;
}
    cout<<endl;
 
    // ПРИВЕДЕНИЕ К ступенчатому вид
 
    int count = 0;
    int ser;
int til = 0;
double w[5];
bool key = true;
double i2j = 0;
double mulxmj = 0;
//double mj = 0;
 
if(u <= p)
til = u;
else
til = p;
for (unsigned m = 0; m < til; ++m)
{
    if (a[m][m] == 0.0)
    {
        key = false;
        for (unsigned i1 = m+1; i1<u; ++i1)
        {
            if (a[i1][m] != 0.0)
            
                break;
            
        }
    }
    if (!key)
    break; 
    
    for (unsigned i2 = m+1; i2<u; ++i2)
    {
        double multi = a[i2][m] / a[m][m];
        for (unsigned j = 0; j<p; ++j)
        {
            i2j = a[i2][j];
            i2j = rndup(i2j);
//          mj = cmatrix[m][j];
            mulxmj = (multi * a[m][j]);
            mulxmj = rndup(mulxmj);
            a[i2][j] = i2j - mulxmj;
        }
    }
}
 
//* подщет ранга
 
int rang = 0;
key = true;
 
for (unsigned i=0; i<u; ++i)
{
    key = false;
    for (unsigned j=0; j<p; ++j)
        if (a[i][j] != 0.0)
            key = true;
        if (!key)
            count++;
}
//*/
// вывод ступеньчастой матрицы
 
cout <<"Приведенная к ступенчатому виду матрица:";
    cout <<"\n"<<endl;
    
    for(int i=0;i<u;i++)
    {
        for(int j=0;j<p;j++)
        {
            cout<<setw(4)<< a[i][j]<<"  ";
        }
    cout <<"\n";
    }
cout <<"\n";
 
//  среднее значение по столбцах
 
 
for(int j=0;j<5;j++) {
    int sum=0;
    
        for(int j=0;j<5;j++)
        {
            sum=0;
            for(int i=0;i<5;i++)
            sum+=a[i][j];
 
        w[j]=sum/5.0;
        
}
}
cout<<" средние значения по столбцах : " << endl; 
 double f;
 int o;
 
for(int i=0;i<5;i++) {
    f=w[i];
    if (f>0)
        o=f+0.5;
    else
        o=f-0.5;
    
    cout<<endl<<i+1<<" столбец: "<<setiosflags(ios::fixed)<<setprecision(1)<<setw(4)<<o<<"  ";
}
 
cout<<endl;
 
 
// вывод ранга
    
rang = u - count;
 
cout <<endl<<"Ранг = "<< rang << "\n";
cout <<"\n";
 
//*
 
system("pause");
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2013, 17:04     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код)
Посмотрите здесь:

C++ Исправьте программу. Дана матрица 3×5. Найти сумму по столбцам матрицы.
C++ Дана матрица. В каждой строке исключить наибольший и наименьший элементы, а среди остальных найти средние арифметические значения и записать их в масс
C++ Дописать код о удаление строк и столбцов с матрицы
В двумерном массиве, по столбцам найти отрицательные значения и написать их в вектор C++
C++ Найти средние арифметические значения элементов каждой строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
08.01.2013, 01:10     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #21
и у моего и у твоего проблемы с последними строками...
но не совсем проблемы! если применять для решения системы уравнений, то решения будут правильные! там коэффициенты строк (последних) умножены на одно и тоже число.
да, еще у меня нужно что бы а(1;1) было не нулевое!
ранг матрицы, - это число ступенек. с ним не интересно возиться)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
08.01.2013, 01:19  [ТС]     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #22
Цитата Сообщение от zybrzybr Посмотреть сообщение
и у моего и у твоего проблемы с последними строками...
но не совсем проблемы! если применять для решения системы уравнений, то решения будут правильные! там коэффициенты строк (последних) умножены на одно и тоже число.
да, еще у меня нужно что бы а(1;1) было не нулевое!
ранг матрицы, - это число ступенек. с ним не интересно возиться)
ну мой уже нормально сводит, испытал с помощю функции rand 15 раз подрят, а у тебя в послендей строке очень большие числа получаются...
Но не в том суть. Если можеш доработай мой код чтобы создавало еще множество и дополнение =)
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
08.01.2013, 01:23     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #23
Цитата Сообщение от TheVlad Посмотреть сообщение
чтобы создавало еще множество и дополнение =)
тут нужно конкретизировать задачу! дополнение до какого множества?
множество состоящее из всех элементов первой матрицы или может просто разность между соответствующими элементами? приведи пример. или дай ссылку на курс/раздел по которому тебе это задали.
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
08.01.2013, 01:33  [ТС]     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #24
Вот задание... точнее это 2 задания

2. С клавиатуры задается матрица размером 5 * 5. Найти ее ранг и средние значения по столбцам. Из найденных закругленных значений создать множество В.
3. Найти дополнения к множеству В.

это задали с курса который не имеет отношения к множествам и тд, просто задание таково...
множесвта, дополнения и тд относятся к курсу дискретной математики " множества".
http://ru.wikipedia.org/wiki/%D0%A0%...81%D1%82%D0%B2
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
08.01.2013, 01:39     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #25
это понятно!
тут такое дело, что множество В это будет вектор, но будет ли он универсальным множеством? что есть универсальное множество для этого вектора?

a a a a a
c c c c c
---------
b b b b b вектор средних D
---------

доп = max{B} - b(i) - также вектор (множестов)
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
08.01.2013, 01:45  [ТС]     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #26
Цитата Сообщение от zybrzybr Посмотреть сообщение
это понятно!
тут такое дело, что множество В это будет вектор, но будет ли он универсальным множеством? что есть универсальное множество для этого вектора?
ну либо множество всех целых чисел N
либо одна с матриц исходная или ступенчатая
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
08.01.2013, 01:51     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #27
Цитата Сообщение от TheVlad Посмотреть сообщение
ну либо множество всех целых чисел N
и как ты себе это представляешь?)))

Цитата Сообщение от TheVlad Посмотреть сообщение
либо одна с матриц исходная или ступенчатая
там сказано дополнение к множ В, а оно из средних по столбцам..

Добавлено через 3 минуты
а ты когда сможешь спросить у препода?? реально интересно!
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
08.01.2013, 01:53  [ТС]     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #28
одна из проблем в том что я сам не могу это понять, но есть мысли что универсальным может быть множество из сум елементов каждого столбца, ну то есть как средние только без деления на количество строк...
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
08.01.2013, 01:54     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #29
а может

a1 a2 a3
c1 c2 c3
----------
b1 b2 b3 -среднее

a1*=b1-a1 ..
c1*=b1-c1 ..

?
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
08.01.2013, 01:55  [ТС]     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #30
Цитата Сообщение от zybrzybr Посмотреть сообщение
и как ты себе это представляешь?)))


там сказано дополнение к множ В, а оно из средних по столбцам..

Добавлено через 3 минуты
а ты когда сможешь спросить у препода?? реально интересно!
скорее всего смогу спросить в среду... но надо сделать хоть как то, если что скажу что так задание понял...
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
08.01.2013, 02:05     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #31
сумма навряятли!
а = 1
б = 2

a = {1, 2} но ни как не 3!
ХОТЯ .. смотря для какой задачи... все от условия задачи завиит!

Добавлено через 2 минуты
Цитата Сообщение от TheVlad Посмотреть сообщение
скорее всего смогу спросить в среду... но надо сделать хоть как то, если что скажу что так задание понял...
делай лучше тогда так, но это только мое предположение!

доп(i) = {max(сред) минус среднее(i)}

Добавлено через 6 минут
хотя есть еще ортогональное дополнение.. тогда тебе придется указывать но их походу будет бесконечное множество!
ну как минимум потому что можно менять только одну координату и притом он все одно будет ортогонален походу.
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
08.01.2013, 02:07  [ТС]     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #32
Цитата Сообщение от zybrzybr Посмотреть сообщение
сумма навряятли!
а = 1
б = 2

a = {1, 2} но ни как не 3!
ХОТЯ .. смотря для какой задачи... все от условия задачи завиит!

Добавлено через 2 минуты


делай лучше тогда так, но это только мое предположение!

доп(i) = {max(сред) минус среднее(i)}
вполне возможно что так и надо сделать, там в принципе результат не очень важен, главное чтобы до множества средних было найдено дополнение, ну или чтобы алгоритм поиска был правильным, а что было взято за универсальное множество не важно ибо предмет не тот, что бы докапывались до этого...
но сегодня у меня уже голова не работает ... =)
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
08.01.2013, 02:22     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #33
отпиши как узнаешь!)

Добавлено через 14 минут
скорее всего все неправильно а вот тут будет ответ!

http://alexandr4784.narod.ru/schilov/sch_gl5_2.pdf
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2013, 20:25     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код)
Еще ссылки по теме:

Найти средние арифметические значения элементов каждой строки матрицы C++
C++ Определитель матрицы, ранг матрицы, обратная матрица
Помогите дописать код: Перевернуть все нечетные строки матрицы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
10.01.2013, 20:25  [ТС]     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код) #34
Цитата Сообщение от zybrzybr Посмотреть сообщение
отпиши как узнаешь!)

Добавлено через 14 минут
скорее всего все неправильно а вот тут будет ответ!

http://alexandr4784.narod.ru/schilov/sch_gl5_2.pdf
Кароче... препод сам не знает как будет правильно, говорит взять за универсальное множество ступенчатую матрицу.... знаю только что еще обязательное условие это в множестве использовать битовые маски...

вот методичка, могут быть ошибки, переводил в гугл переводчике( вручную долго писать)...
(Стандартные операции над множествами и выражения, соответствующие им при работе с масками.
 Объединение множеств: A | B
 Пересечение множеств: A & B
 Разница множеств: A & ~ B
Дополнение множества: ALL_BITS ^ A (здесь ALL_BITS - маска, в которой все биты, соответствующие элементам домена установлены в 1)
 Добавление и-того элемента в множество (установление и-го бита): A | = 1 << i
 Удаление и-того элемента: A & = ~ (1 << i)
 Проверка, и-тый элемент принадлежит множеству (A & (1 << и))! = 0

в спойлере больше=))

Кликните здесь для просмотра всего текста

Для представления множества, которая может содержать до 32 различных элементов от 0 до 31, можно использовать целое число стандартного 32-разрядного целого типа данных. Можно использовать 64-разрядный тип, тогда допустимое количество элементов возрастает до 64 (от 0 до 63, соответственно). В том числе, если и-тый бит равен 1, то и-тый элемент содержится в множестве, если же и-тый бит равен 0, то и-тый элемент в множестве отсутствует. Целое число, каким представляется множество, называют битовой маской
Стандартные операции над множествами и выражения, соответствующие им при работе с масками.
 Объединение множеств: A | B
 Пересечение множеств: A & B
 Разница множеств: A & ~ B
 Дополнение множества: ALL_BITS ^ A (здесь ALL_BITS - маска, в которой все биты, соответствующие элементам домена установлены в 1)
 Добавление и-того элемента в множество (установление и-го бита): A | = 1 << i
 Удаление и-того элемента: A & = ~ (1 << i)
 Проверка, и-тый элемент принадлежит множеству (A & (1 << и))! = 0
Пусть требуется представить числом множество, разница между максимальным и минимальным элементами которой составляет не более 32 (или 64). Тогда, вообще говоря, каждый элемент множества можно представить как сумму некоторого "опорного" элемента и "смещения", причем все "смещения" представляем числом как отдельную множество, а "опорный" элемент - отдельным числом. Например, множество {41,56,67} можно представить как сумму {41 +0,41 +14,41 +26}, причем множество "смещений" ({0,14,26}) можно представить как 32-разрядное число, а "опорное" числе 41 представить как отдельное число типа char. Очевидно, что такой подход можно развить и представлять множество целых чисел различными подмножествами, каждую из подмножеств сохраняя как число.
Пример кода для добавления и удаления элементов множества чисел от 0 до 31.
# Include <iostream>
# Include <conio.h>
using namespace std;
int main () {
/ * Число А, собственно, и представлять множество * /
long int A = 0;
char action; / * эта переменная сохранять желаемое действие, которое необходимо выполнить над множеством * /
int item;
cout << "size of int:" << sizeof (A) << endl; / * проверяем размер числа А в байтах * /
char goon = 'y'; / * переменная, служит признаком продолжения работы с множеством * /
while (goon == 'y') {
cout << "Enter new item, please \ t";
cin >> item;
cout << "Add? (a) Delete? (d) \ t";
/ * Пользователь должен нажать клавишу a или d; ответ будет записана в переменную action * /
cin >> action;
switch (action) {
case 'a': if (item <= 8 * sizeof (A)) A | = 1 << (item-1);
/ * Если заданное пользователем число превышает индекс старшего разряда маски, об этом выводим соответствующее сообщение * /
else cout << "Item cannot be included in the set A" << endl; break;
case 'd': if (item <= 8 * sizeof (A)) A & = ~ (1 << (item-1));
else cout << "Item was not in the set A"; break;
default: break;
}
/ / Выводим все элементы множества на экран
cout << "Current set: \ t";
for (int i = 1; i <= 8 * sizeof (A); i + +) / * умножая количество байт на 8, получаем количество бит, которыми представляется число А, то есть, число элементов в множестве * /
{/ * Сдвигаем 1 на 0, 1, 2, (8 * sizeof (A) -1) бит влево, получая при этом числа, в которых бит с индексом (и-1) установлен в 1, а остальные битов - в 0 . Если в множестве А присутствует элемент с индексом (и-1), то результат побитового "И" будет ненулевым, и в этом случае элемент с индексом (и-1) выводим на экран * /
if ((A & (1 << (i-1)))! = 0) cout << i << ",";
}
cout << endl;
cout << "Are we handling our set? y | n \ t";
/ * Если пользователь нажмет клавишу y, обработки множества продолжится, если клавишу n - прекратится * /
cin >> goon;
}
_getch ();
return 0;
}

Пример работы программы показан на рис. 1.
Рис. 1 Пример работы программы добавления / удаления элементов множества чисел от 0 до 31.

В приведенном коде не предусмотрено обработку ситуации, когда пользователь задает некорректные данные. Кроме того, предусматривается ввод отрицательных элементов множества и элементов, отличающихся между собой более чем на 64 единицы. При выполнении контрольной работы следует обеспечить возможность целесообразного представления множества несколькими подмножествами, в том числе и содержащими отрицательные числа.
Yandex
Объявления
10.01.2013, 20:25     Матрицы. Найти ее ранг и средние значения по столбцам (дописать код)
Ответ Создать тему
Опции темы

Текущее время: 22:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru