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

Треугольная матрица - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 5.00
Gabberr
 Аватар для Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
16.09.2010, 16:43     Треугольная матрица #1
Здравствуйте форумчане!
Помогите,пожалуйста, разобраться!

вот условие задачи:
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду.
Найти кол-во строк, среднее арифметическое элементов которых меньше заданной величины.

вот мое решение :
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
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
#include <ctime>
int scan(float (*a)[5],int n)
{
    for (int i=0;i<n;i++)
    {
       for (int j=0;j<n+1;j++)
           cin>>a[i][j];
       cout<<endl;
    } 
    return 0;     
}
int print(float (*a)[5],int n)
{
    for(int i=0;i<n;i++)                       
    {
       for(int j=0;j<n+1;j++)
          cout<<setw(5)<<setprecision(1)<<a[i][j];      
       cout<<endl; 
    }    
    return 0;      
}
int gauss(float (*a)[5],int n)
{
    float r;
    for(int k=0;k<n;k++)
    {
        for(int j=k+1;k<n+2;j++)
        {
            r=a[j][k]/a[k][k];
            for (int i=k;i<n+1;i++)
            {
                a[j][i]=a[j][i]-r*a[k][i];
            
            }
        }
    }
    return 0;
}
int main()
{
    int n;
    cout<<"vvedite kol-vo uravnenij: ";
    cin>>n;
    float a[5][5];
    cout<<"vvedite koefficientbl i svobodnble chlenbl"<<endl;;
    scan(a,n);
    cout<<"isxodna9 matrica :"<<endl;
    print(a,n);
    gauss(a,n);
    cout<<"treugol'nbli vid : "<<endl;
    print(a,n);
    getch();
    return 0;
}

Попробуйте запустите,почему-то вылетает,хотя алгоритм вроде бы правильный.Незнаю даже, что не так!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
17.09.2010, 01:14     Треугольная матрица #2
Давай вводные данные и ожидаемый результат.

Добавлено через 5 минут
for(int j=k+1;k<n+2;j++)

Может должно быть
for(int j=k+1;j<n+2;j++)
?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
17.09.2010, 01:15     Треугольная матрица #3
Andrew_Lvov, Все равно падать будет. За пределы выходит сто процентов.

for (int j=0;j<n+1;j++)

Вообще немного не понимаю как такое работает... А если я введу n - 5...

И само вот это убивает: float (*a)[5]
Бред какой-то, откуда 5? Если в main
cout<<"vvedite kol-vo uravnenij: ";
cin>>n;
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
17.09.2010, 01:21     Треугольная матрица #4
Lavroff, ну не знает человек о динамических массивах, чё поделаешь.
Для системы из 2х уравнений с исправлением цикла всё пашет.

Добавлено через 1 минуту
А, да. Автор, исправьте текст на русский. Поддержка кириллицы решена.
Gabberr
 Аватар для Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
17.09.2010, 14:53  [ТС]     Треугольная матрица #5
оо точно!просто опечатка была!Спасибо!
А можно поподробнее про поддержку кирилицы в Devc++?
Про динамические массивы знаю, просто как ещё подавать в функцию аргументом матрицу?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
17.09.2010, 14:59     Треугольная матрица #6
Gabberr, Элементарно.

void foo(int**a, int rows,int cols);

В вашем случае.

void scan(float**a, int n);
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
17.09.2010, 15:00     Треугольная матрица #7
Цитата Сообщение от Gabberr Посмотреть сообщение
как ещё подавать в функцию аргументом матрицу?
C++
1
void fn( float** array );
Цитата Сообщение от Gabberr Посмотреть сообщение
А можно поподробнее про поддержку кирилицы в Devc++?
Русские шрифты в консоли
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
17.09.2010, 15:04     Треугольная матрица #8
А так же:
C++
1
2
std::locale loc("Russian_Russia.1251");
std::locale::global(loc);
Правда все зависит от системы, платформы и т.п. Кодировка может быть другая.
Выяснить можно:

C++
1
2
setlocale(LC_ALL, "Rus");
std::cout<<std::locale().name();
Может кинуть runtime_error.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2010, 14:25     Треугольная матрица
Еще ссылки по теме:

Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) C++
C++ дана квадратичная матрица z[n][n]. составить программу, которая если матрица симметричная(транспонированная матрица равна исходной), сделает ее не сим

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

Или воспользуйтесь поиском по форуму:
Gabberr
 Аватар для Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
30.09.2010, 14:25  [ТС]     Треугольная матрица #9
Помогите плиз нормальную прогу написать.
чтоб меняла строки местами,если первый элемент нулю равен.
Устал уже мучиться ,ниче не выходит!
вот весь код
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
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
#include <ctime>
int scan(float (*a)[5],int n)
{
    for (int i=0;i<n;i++)
    {
       for (int j=0;j<n+1;j++)
           cin>>a[i][j];
       cout<<endl;
    } 
    return 0;     
}
int print(float (*a)[5],int n)
{
    for(int i=0;i<n;i++)                       
    {
       for(int j=0;j<n+1;j++)
          cout<<setw(3)<<setprecision(1)<<a[i][j];      
       cout<<endl; 
    }    
    return 0;      
}
int gauss(float (*a)[5],int n)
{
    float g[n+1];
    float r;
    int t=0;
    int k=0;
    while (k<n)
    {
        if (a[k][k]!=0)
        { 
           q0: 
           if (a[k+1][k]!=0)                  
           for (int j=k+1;j<n+2;j++)
           {
               r=a[j][k]/a[k][k];
               for (int i=k;i<n+1;i++)
               {
                   a[j][i]=a[j][i]-r*a[k][i];
            
               }               
           }  
           else
           {
                   for (int j=k+1;j<n+2;j++)
                   {
                       r=a[j+1][k]/a[k][k];
                       for (int i=k;i<n+1;i++)
                       {
                            a[j+1][i]=a[j+1][i]-r*a[k][i];            
                       }               
                   }  
               
           }
           k++;         
        }
        else
        {
            while(a[t][k]==0)
               t++;          
            for (int f=0;f<n+1;f++)
            {
                g[f]=a[k][f];
                a[k][f]=a[t][f];
                a[t][f]=g[f];
            } 
               goto q0;     
        }
    }
    return 0;
}
int koll(float (*a)[5],int n,int m,int &k)
{
    float s=0;
    for (int i=0;i<n;i++)
    {
       for (int j=0;j<n+1;j++)
          s=s+a[i][j];
       s=s/(n+1);   
       if (s<m)
         k++;   
       s=0;  
    }   
}
int main()
{
    int n,m;
    int k=0;
    cout<<"vvedite kol-vo uravnenij: ";
    cin>>n;
    float a[5][5];
    cout<<"vvedite koefficientbl i svobodnble chlenbl"<<endl;;
    scan(a,n);
    cout<<"isxodna9 matrica :"<<endl;
    print(a,n);
    gauss(a,n);
    cout<<"treugol'nbli vid : "<<endl;
    print(a,n);
    cout<<"vvedite velichinu :";
    cin>>m;
    koll(a,n,m,k);
    cout<<"kol-vo strok, summa kotorblx men'she "<<m<<" : "<<k<<endl;
    getch();
    return 0;
}
Yandex
Объявления
30.09.2010, 14:25     Треугольная матрица
Ответ Создать тему
Опции темы

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