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

двухмерный массив доработать и исправить - C++

Восстановить пароль Регистрация
 
Dima249
10 / 10 / 0
Регистрация: 02.10.2011
Сообщений: 69
06.12.2011, 12:30     двухмерный массив доработать и исправить #1
Задание:Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду. Найти количество строк, среднее арифметическое элементов которых меньше заданной величины.
программа почему то не работает для матриц единичных и 2 на 2
0 1
1 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
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
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
using namespace std;
int main(int argc, char *argv[])
{
        const int b=100;
        //Матрица системы
        int  A[b][b];
        double summa[b], A1[b][b], me, summa2[b];
        int l,o,t=0,n,m,i,j,k;
          cout<<"Vvtdite n: ";
        cin>>n;
                 cout<<"Vvtdite m: ";
        cin>>m;
                        for (i=0; i<n; i++){
for (j=0;j<m;j++) {
printf(" A[%i][%i]:",i+1,j+1);
scanf("%i",&A[i][j]);
}}
                         for(i = 0; i < n; ++i) 
        {               summa[i]=0;
                                summa2[i]=0;
                for(j = 0; j < m; ++j) 
                        cout<<A[i][j]<<"\t"; 
                cout<<endl;
        }
 
                         for(i = 0; i < n; ++i) 
        {        for(j = 0; j < m; ++j) 
                                 A1[i][j]=A[i][j];}
                //Число перестановок строк
        int rCnt=0;
        //Ведущий элемент
        double ldn;
        //Номер ведущего элемента
        int index;
                double temp;
 
        //Прямой ход
 
            for(j=0; j<m; ++j)
        {
                //Выбор ведущего элемента столбца
                ldn=A1[j][j];
                index=j;
                for(i=j; i<n; ++i)
                        if(fabs(A1[i][j])>fabs(ldn))
                        {
                                ldn=A1[i][j];
                                index=i;
                        }
                //Если ведущий элемент - не на гл. диагонали
                //меняем строки местами
                if(index!=j)
                {
                        ++rCnt;
                        for(i=0; i<n; ++i)
                        {
                                temp=A1[j][i];
                                A1[j][i]=A1[index][i];
                                A1[index][i]=temp;
                        }
                }
                
                for (i = 0; i<m; i++)
                    A1[j][i] = A1[j][i]/ldn; //делим строку на ведущий элемент
 
                //Обнуление элементов ниже гл. диагонали
                for(i=j+1; i<n; ++i)
                {
                       for(k=0; k<m; ++k)
                                A1[i][k]= fabs (A1[i][k]-A1[j][k]*A1[i][k]);
                }       }
 
        for(i = 0; i < n; ++i)  
        {
                for(j = 0; j < m; ++j) 
                        cout<<A1[i][j]<<"\t"; 
                cout<<endl; 
        }
                                for (i=0; i<n; i++)
                { for (j=0; j<m; j++)
                summa2[i]=summa2[i]+A1[i][j];
                //cout<<summa[i]<<endl;
}
 
                                for (i=0; i<n; ++i)
                                {  summa[i]=summa[i]/m;
                                   summa2[i]=summa2[i]/m;
                                        if (summa2[i]<summa[i]) 
                                        {
                                                t=t+1;
                                        }
                                }
  system("PAUSE");       //для просмотра результата
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2011, 12:30     двухмерный массив доработать и исправить
Посмотрите здесь:

Двухмерный массив C++
C++ Двухмерный массив.
двухмерный массив C++
C++ двухмерный массив
двухмерный массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
 Аватар для co6ak
403 / 496 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
06.12.2011, 12:36     двухмерный массив доработать и исправить #2
почему с плюсовыми кусками сишные вставки?
Dima249
10 / 10 / 0
Регистрация: 02.10.2011
Сообщений: 69
06.12.2011, 12:38  [ТС]     двухмерный массив доработать и исправить #3
помоему тут это не важно, это не изменит работу проги) она всё равно не работает до конца)
fasked
06.12.2011, 12:46
  #4

Не по теме:

Dima249, отформатируйте код: расставьте отступы, выравнивания. Имейте же уважение к людям, у которых просите помощи.

Dima249
10 / 10 / 0
Регистрация: 02.10.2011
Сообщений: 69
06.12.2011, 12:59  [ТС]     двухмерный массив доработать и исправить #5
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
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
using namespace std;
int main(int argc, char *argv[])
{
        const int b=100;
        //Матрица системы
        int  A[b][b];
        double summa[b], A1[b][b], me, summa2[b];
        int l,o,t=0,n,m,i,j,k;
          cout<<"Vvtdite n: ";
        cin>>n;
                 cout<<"Vvtdite m: ";
        cin>>m;
          for (i=0; i<n; i++)
                    {
                            for (j=0;j<m;j++) 
                                {
                                    printf(" A[%i][%i]:",i+1,j+1);
                                            scanf("%i",&A[i][j]);
                                }
                    }
          for(i = 0; i < n; ++i) 
                    {
                        summa[i]=0;
                        summa2[i]=0;
                        for(j = 0; j < m; ++j) cout<<A[i][j]<<"\t"; 
                cout<<endl;
        }
 
                         for(i = 0; i < n; ++i) 
                            {     
                                    for(j = 0; j < m; ++j) 
                                     A1[i][j]=A[i][j];}
                         //Число перестановок строк
                        int rCnt=0;
                        //Ведущий элемент
                        double ldn;
                        //Номер ведущего элемента
                        int index;
                        double temp;
 
                         //Прямой ход
 
                        for(j=0; j<m; j++)
                                        {
                                                //Выбор ведущего элемента столбца
                                                ldn=A1[j][j];
                                               index=j;
                                                for(i=j; i<n; i++)
                                                    if(fabs(A1[i][j])>fabs(ldn))
                                                                            {
                                                                                ldn=A1[i][j];
                                                                                    index=i;
                                                                            }
                        //Если ведущий элемент - не на гл. диагонали
                        //меняем строки местами
                                            if(index!=j)
                                                {
                                                                    ++rCnt;
                                                                for(i=0; i<n; i++)
                                                                    {
                                                                                temp=A1[j][i];
                                                                                A1[j][i]=A1[index][i];
                                                                                           A1[index][i]=temp;   
                                                                    }
                                                }
                
                             for (i = 0; i<m; i++)
                            A1[j][i] = A1[j][i]/ldn; //делим строку на ведущий элемент
 
                        //Обнуление элементов ниже гл. диагонали
                        for(i=j+1; i<n; ++i)
                                {
                                    for(k=0; k<m; k++)
                                        A1[i][k]= fabs (A1[i][k]-A1[j][k]*A1[i][k]);
                                }       
                        }
 
        for(i = 0; i < n; i++)  
            {
                for(j = 0; j < m; j++) 
                        cout<<A1[i][j]<<"\t"; 
                cout<<endl; 
            }
                     for (i=0; i<n; i++)
                        { 
                        for (j=0; j<m; j++)
                summa2[i]=summa2[i]+A1[i][j];
                //cout<<summa[i]<<endl;
                        }
 
                                for (i=0; i<n; i++)
                                {  summa[i]=summa[i]/m;
                                   summa2[i]=summa2[i]/m;
                                        if (summa2[i]<summa[i]) 
                                        {
                                                t=t+1;
                                        }
                                }
  system("PAUSE");       //для просмотра результата
  return 0;
}
fasked
06.12.2011, 13:00
  #6

Не по теме:

Спасибо, так стало гораздо лучше

Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
06.12.2011, 13:18     двухмерный массив доработать и исправить #7
Dima249, можешь не благодарить. Вот так должен выглядеть нормально выравненный код:
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
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
using namespace std;
int main(int argc, char *argv[])
{
    const int b=100;
    //Матрица системы
    int  A[b][b];
    double summa[b], A1[b][b], me, summa2[b];
    int l,o,t=0,n,m,i,j,k;
    cout<<"Vvtdite n: ";
    cin>>n;
    cout<<"Vvtdite m: ";
    cin>>m;
    for (i=0; i<n; i++)
    {
    for (j=0;j<m;j++) 
    {
        printf(" A[%i][%i]:",i+1,j+1);
        scanf("%i",&A[i][j]);
    }
    }
    for(i = 0; i < n; ++i) 
    {
    summa[i]=0;
    summa2[i]=0;
    for(j = 0; j < m; ++j) cout<<A[i][j]<<"\t"; 
    cout<<endl;
    }
 
    for(i = 0; i < n; ++i) 
    {     
    for(j = 0; j < m; ++j) 
        A1[i][j]=A[i][j];}
    //Число перестановок строк
    int rCnt=0;
    //Ведущий элемент
    double ldn;
    //Номер ведущего элемента
    int index;
    double temp;
 
    //Прямой ход
 
    for(j=0; j<m; j++)
    {
    //Выбор ведущего элемента столбца
    ldn=A1[j][j];
    index=j;
    for(i=j; i<n; i++)
        if(fabs(A1[i][j])>fabs(ldn))
        {
        ldn=A1[i][j];
        index=i;
        }
    //Если ведущий элемент - не на гл. диагонали
    //меняем строки местами
    if(index!=j)
    {
        ++rCnt;
        for(i=0; i<n; i++)
        {
        temp=A1[j][i];
        A1[j][i]=A1[index][i];
        A1[index][i]=temp;   
        }
    }
                
    for (i = 0; i<m; i++)
        A1[j][i] = A1[j][i]/ldn; //делим строку на ведущий элемент
 
    //Обнуление элементов ниже гл. диагонали
    for(i=j+1; i<n; ++i)
    {
        for(k=0; k<m; k++)
        A1[i][k]= fabs (A1[i][k]-A1[j][k]*A1[i][k]);
    }       
    }
 
    for(i = 0; i < n; i++)  
    {
    for(j = 0; j < m; j++) 
        cout<<A1[i][j]<<"\t"; 
    cout<<endl; 
    }
    for (i=0; i<n; i++)
    { 
    for (j=0; j<m; j++)
        summa2[i]=summa2[i]+A1[i][j];
    //cout<<summa[i]<<endl;
    }
 
    for (i=0; i<n; i++)
    {
    summa[i]=summa[i]/m;
    summa2[i]=summa2[i]/m;
    if (summa2[i]<summa[i]) 
    {
        t=t+1;
    }
    }
    system("PAUSE");       //для просмотра результата
    return 0;
}
PS. Программу не менял, просто отформатировал
PPS. Автоматическое выравнивание кода рулит
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2011, 07:40     двухмерный массив доработать и исправить
Еще ссылки по теме:

C++ двухмерный массив
C++ Двухмерный массив
C++ Дан двухмерный целочисленный массив . Составить одномерный массив В номеров строк этого массива

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

Или воспользуйтесь поиском по форуму:
Dima249
10 / 10 / 0
Регистрация: 02.10.2011
Сообщений: 69
19.12.2011, 07:40  [ТС]     двухмерный массив доработать и исправить #8
помогите избавится от деления на 0)

Добавлено через 20 минут
при вводе матрицы
0 1
1 1
получается
1 1
-1.#IND -1.#IND

Добавлено через 6 часов 54 минуты
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 <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
using namespace std;
int main(int argc, char *argv[])
{
    const int b=100;
    //Матрица системы
    int  A[b][b];
    double summa[b], A1[b][b], me, summa2[b];
    int l,o,t=0,n,m,i,j,k;
    cout<<"Vvtdite n: ";
    cin>>n;
    cout<<"Vvtdite m: ";
    cin>>m;
    for (i=0; i<n; i++)
    {
        for (j=0;j<m;j++) 
        {
            printf(" A[%i][%i]:",i+1,j+1);
            scanf("%i",&A[i][j]);
        }
    }
    for(i = 0; i < n; ++i) 
    {
        summa[i]=0;
        summa2[i]=0;
        for(j = 0; j < m; ++j) cout<<A[i][j]<<"\t"; 
        cout<<endl;
    }
 
    for(i = 0; i < n; ++i) 
    {     
        for(j = 0; j < m; ++j) 
            A1[i][j]=A[i][j];}
    //Число перестановок строк
    int rCnt=0;
    //Ведущий элемент
    double ldn;
    //Номер ведущего элемента
    int index;
    double temp;
 
    //Прямой ход
 
    for(j=0; j<m; j++)
    {
        //Выбор ведущего элемента столбца
        ldn=A1[j][j];
        index=j;
        for(i=j; i<n; i++)
            if(fabs(A1[i][j])>fabs(ldn))
            {
                ldn=A1[i][j];
                index=i;
            }
        //Если ведущий элемент - не на гл. диагонали
        //меняем строки местами
        if(index!=j)
        {
            ++rCnt;
            for(i=0; i<n; i++)
            {
                temp=A1[j][i];
                A1[j][i]=A1[index][i];
                A1[index][i]=temp;   
            }
        }
                
        for (i = 0; i<m; i++)
        {   if (ldn==0)   break;
            A1[j][i] = A1[j][i]/ldn;
 
                //делим строку на ведущий элемент
                    }
        //Обнуление элементов ниже гл. диагонали
        for(i=j+1; i<n; ++i)
        {
            for(k=0; k<m; k++)
                A1[i][k]= fabs (A1[i][k]-A1[j][k]*A1[i][k]);
        }       
    }
 
    for(i = 0; i < n; i++)  
    {
        for(j = 0; j < m; j++) 
            cout<<A1[i][j]<<"\t"; 
        cout<<endl; 
    }
    for (i=0; i<n; i++)
    { 
        for (j=0; j<m; j++)
            summa2[i]=summa2[i]+A1[i][j];
        //cout<<summa[i]<<endl;
    }
 
    for (i=0; i<n; i++)
    {
        summa[i]=summa[i]/m;
        summa2[i]=summa2[i]/m;
        if (summa2[i]<summa[i]) 
        {
            t=t+1;
        }
    }
    system("PAUSE");       //для просмотра результата
    return 0;
}
я доработал, но всёравно не так
ответ выходит
1 1
0 0
а надо
1 1
0 1

Добавлено через 55 секунд
изменять вроде надо в цикле 71 строки
Yandex
Объявления
19.12.2011, 07:40     двухмерный массив доработать и исправить
Ответ Создать тему
Опции темы

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