Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 10
1

Создать фиксированную матрицу 3х3, и найти её определитель

30.06.2010, 16:58. Показов 3911. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа должна создавать фиксированную матрицу 3х3, находить её определитель,транспонированную матрицу и обратную. Обязательные элементы:функции,массивы,указатели .....Ошибка: ) expected
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
#include <stdio.h>
 
float a[3][3],  obr[3][3], opred , b[3][3];
void transp_matr();
void vvod_matr();                           // функция заполнения матрицы
float opredelitel_matr();                       // функция нахождения определителя
void obr_matr();                            // функция нахождения обратной матрицы
void vyvod();                               // функция вывода матрицы
 
main()
{
    vvod_matr();
    transp_matr();
    opred = opredelitel_matr();
    obr_matr();
 
    printf("Вывод матрицы:\n");
    vyvod();
 
    printf("Вывод транспанированой матрицы:\n");
    vyvod();
 
    printf("Вывод определителя:\n%f", opred);
 
    printf("Вывод обратной матрицы:\n");
    vyvod();
    return 0;
 
}
 
void vvod_matr()
  {
    // ввод матрицы
    printf("Заполните матрицу\n");
    for (int i = 0; i < 3; i++)
     {
        printf("%d строка:\n", i);
        for (int j = 0; j < 3; j++)
            scanf("%f", &a[i][j]);
     }
  }
 
void transp_matr()
  {
    // транспонирование
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            b[i][j] = a[j][i];
  }
float ad(int i,j)[SIZE="7"]{[/SIZE]     <---вот это красным выделяет //алгебраическое дополнение элемента a[i][j]
    int l[]={0,1},c[]={0,1};
    for (int n=i;n<2;n++)
        l[n]++;
    for (int n=j;n<2;n++)
        c[n]++;
    float res=a[l[0]][c[0]]*a[l[1]][c[1]]- a[l[0]][c[1]]*a[l[1]][c[0]];
    if((i+j)%2==1)
        res*=-1;
    return res;
        }
 
float opredelitel_matr()
{
float s=0;
    // поиск определителя по первой строке
        for (int j=0;j<3;j++)
        s+=a[0][j] * ad(0,j);
    return s;
 
 
 
}
 
 
 
void obr_matr()
{
    // поиск обратной матрицы
    opred= opredelitel_matr();
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            obr[i][j] = 1/opred * ad();
}
 
void vyvod(float a[3][3])
{
    float *pe=a[0];
    for (int i = 0; i < 3; i++){
        /*for (int j = 0; j < 3; j++)
            printf("%f ", a[i][j]);
                */
        for (int j = 0; j < 3; j++)
            printf("%f ", *pe++);
        printf("\n");
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2010, 16:58
Ответы с готовыми решениями:

Создать матрицу 3х3 и найти сумму отрицательных
Ребят, всем привет. В общем, надо сделать массив матрицы 3х3 и сумму отрицательных элементов. ...

Создать матрицу, транспонировать её и найти определитель
Создать матрицу А, найти ее определитель и транспонировать ее

Найти определитель матрицы порядка 2х2 и 3х3
найти определитель матрицы порядка 2х2 и 3х3.

Как можно создать матрицу, например 3х3 в коллекции?
Здравствуйте.Возник вопрос.Как можно создать матрицу,например 3х3 в коллекции?

23
35 / 35 / 8
Регистрация: 22.05.2010
Сообщений: 107
30.06.2010, 17:01 2
Pri opredelenii functii ukazyvayutsa tipy kazhdgo parametra:
C++
1
float ad(int i, int j)
1
Light Knight
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
30.06.2010, 17:03 3
по мойму он ругается на скобку...может есть смысл написать ту строку так:
C++
1
float ad(int i, int j){
опоздал)
1
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 10
30.06.2010, 17:06  [ТС] 4
Цитата Сообщение от vladislavchick Посмотреть сообщение
Pri opredelenii functii ukazyvayutsa tipy kazhdgo parametra:
C++
1
float ad(int i, int j)
Ввел
C
1
2
3
4
5
6
7
float a[3][3],  obr[3][3], opred , b[3][3];
float ad(int i, int j);
void transp_matr();
void vvod_matr();                           // функция заполнения матрицы
float opredelitel_matr();                       // функция нахождения определителя
void obr_matr();                            // функция нахождения обратной матрицы
void vyvod();                               // функция вывода матрицы
Тоже самое пишет на том же месте(
0
98 / 94 / 16
Регистрация: 16.05.2010
Сообщений: 310
30.06.2010, 17:09 5
также 50-й строке измени.
И сделай int main
0
Light Knight
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
30.06.2010, 17:10 6
да не там...а в 50 строке в вашем первом коде

опять опоздал т.т
0
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 10
30.06.2010, 17:14  [ТС] 7
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
#include <stdio.h>
 
float a[3][3],  obr[3][3], opred , b[3][3];
float ad(int i, int j);
void transp_matr();
void vvod_matr();                           // функция заполнения матрицы
float opredelitel_matr();                       // функция нахождения определителя
void obr_matr();                            // функция нахождения обратной матрицы
void vyvod();                               // функция вывода матрицы
 
int main()
{
    vvod_matr();
    transp_matr();
    opred = opredelitel_matr();
    obr_matr();
 
    printf("Вывод матрицы:\n");
    vyvod();
 
    printf("Вывод транспанированой матрицы:\n");
    vyvod();
 
    printf("Вывод определителя:\n%f", opred);
 
    printf("Вывод обратной матрицы:\n");
    vyvod();
    return 0;
 
}
 
void vvod_matr()
  {
    // ввод матрицы
    printf("Заполните матрицу\n");
    for (int i = 0; i < 3; i++)
     {
        printf("%d строка:\n", i);
        for (int j = 0; j < 3; j++)
            scanf("%f", &a[i][j]);
     }
  }
 
void transp_matr()
  {
    // транспонирование
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            b[i][j] = a[j][i];
  }
float ad(int i,j){     //алгебраическое дополнение элемента a[i][j]
    int l[]={0,1},c[]={0,1};
    for (int n=i;n<2;n++)
        l[n]++;
    for (int n=j;n<2;n++)
        c[n]++;
    float res=a[l[0]][c[0]]*a[l[1]][c[1]]- a[l[0]][c[1]]*a[l[1]][c[0]];
    if((i+j)%2==1)
        res*=-1;
    return res;
        }
 
float opredelitel_matr()
{
float s=0;
    // поиск определителя по первой строке
        for (int j=0;j<3;j++)
        s+=a[0][j] * ad(0,j);
    return s;
 
 
 
}
 
 
 
void obr_matr()
{
    // поиск обратной матрицы
    opred= opredelitel_matr();
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            obr[i][j] = 1/opred * ad();
}
 
void vyvod(float a[3][3])
{
    float *pe=a[0];
    for (int i = 0; i < 3; i++){
        /*for (int j = 0; j < 3; j++)
            printf("%f ", a[i][j]);
                */
        for (int j = 0; j < 3; j++)
            printf("%f ", *pe++);
        printf("\n");
    }
Всё на месте.... тоже самое
0
Light Knight
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
30.06.2010, 17:16 8
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
#include <stdio.h>
 
float a[3][3],  obr[3][3], opred , b[3][3];
float ad(int i, int j);
void transp_matr();
void vvod_matr();                                                       // функция заполнения матрицы
float opredelitel_matr();                                               // функция нахождения определителя
void obr_matr();                                                        // функция нахождения обратной матрицы
void vyvod();                                                           // функция вывода матрицы
 
int main()
{
        vvod_matr();
        transp_matr();
        opred = opredelitel_matr();
        obr_matr();
 
        printf("Вывод матрицы:\n");
        vyvod();
 
        printf("Вывод транспанированой матрицы:\n");
        vyvod();
 
        printf("Вывод определителя:\n%f", opred);
 
        printf("Вывод обратной матрицы:\n");
        vyvod();
        return 0;
 
}
 
void vvod_matr()
  {
        // ввод матрицы
        printf("Заполните матрицу\n");
        for (int i = 0; i < 3; i++)
         {
                printf("%d строка:\n", i);
                for (int j = 0; j < 3; j++)
                        scanf("%f", &a[i][j]);
         }
  }
 
void transp_matr()
  {
        // транспонирование
        for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                        b[i][j] = a[j][i];
  }
float ad(int i, int j){     //алгебраическое дополнение элемента a[i][j]
        int l[]={0,1},c[]={0,1};
        for (int n=i;n<2;n++)
                l[n]++;
        for (int n=j;n<2;n++)
                c[n]++;
        float res=a[l[0]][c[0]]*a[l[1]][c[1]]- a[l[0]][c[1]]*a[l[1]][c[0]];
        if((i+j)%2==1)
                res*=-1;
        return res;
        }
 
float opredelitel_matr()
{
float s=0;
        // поиск определителя по первой строке
        for (int j=0;j<3;j++)
        s+=a[0][j] * ad(0,j);
        return s;
 
 
 
}
 
 
 
void obr_matr()
{
        // поиск обратной матрицы
        opred= opredelitel_matr();
        for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                        obr[i][j] = 1/opred * ad();
}
 
void vyvod(float a[3][3])
{
        float *pe=a[0];
        for (int i = 0; i < 3; i++){
                /*for (int j = 0; j < 3; j++)
                        printf("%f ", a[i][j]);
                */
                for (int j = 0; j < 3; j++)
                        printf("%f ", *pe++);
                printf("\n");
        }
}
как то так....не компилил
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,169
30.06.2010, 17:24 9
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
C
1
obr[i][j] = 1/opred * ad();
А аргументы функции где?
0
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 10
30.06.2010, 17:25  [ТС] 10
2 Ошибки:
multiple declaration for 'n'
Too few parameters in call to 'ad(int,int)'
0
Light Knight
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
30.06.2010, 17:26 11
C++
1
obr[i][j] = 1/opred * ad(i, j);
тогда по идее так?
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,169
30.06.2010, 17:28 12
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
тогда по идее так?
Это надо у автора спрашивать.
0
98 / 94 / 16
Регистрация: 16.05.2010
Сообщений: 310
30.06.2010, 17:29 13
multiple declaration for 'n'
в строке 54 не обьявляйте второй раз переменную 'n'.
ежели так хочется обьявить используйте скобки в форе {}, правда смотря какой компилятор.
и указывайте пожалуйста строки в которых ошибки.
0
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 10
30.06.2010, 17:29  [ТС] 14
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
C++
1
obr[i][j] = 1/opred * ad(i, j);
тогда по идее так?
Опять: ) expected
0
Light Knight
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
30.06.2010, 17:31 15
тогда

C++
1
obr[i][j] = 1/opred * ad(int i, int j);
0
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 10
30.06.2010, 17:35  [ТС] 16
Таже ошибка строка 50, выделяет {
0
Light Knight
106 / 29 / 5
Регистрация: 03.06.2010
Сообщений: 361
30.06.2010, 17:37 17
тогда хз...подождем более опытных
0
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 10
30.06.2010, 17:48  [ТС] 18
попробуй скомпелировать....может что в голову придёт?
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,169
30.06.2010, 17:59 19
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Переписывать не стал, только убрал ошибки.
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
#include <stdio.h>
#include <stdlib.h>
 
float a[3][3],  obr[3][3], opred , b[3][3];
float ad(int i, int j);
void transp_matr();
void vvod_matr();                                                       // функция заполнения матрицы
float opredelitel_matr();                                               // функция нахождения определителя
void obr_matr();                                                        // функция нахождения обратной матрицы
void vyvod(float [3][3]);                                                           // функция вывода матрицы
 
int main()
{
        system("chcp 1251");
        vvod_matr();
        transp_matr();
        opred = opredelitel_matr();
        obr_matr();
 
        printf("Вывод матрицы:\n");
        vyvod(a);
 
        printf("Вывод транспанированой матрицы:\n");
        vyvod(b);
 
        printf("Вывод определителя:\n%f", opred);
 
        printf("Вывод обратной матрицы:\n");
        vyvod(obr);
        system("pause");
        return 0;
 
}
 
void vvod_matr()
  {
        // ввод матрицы
        printf("Заполните матрицу\n");
        for (int i = 0; i < 3; i++)
         {
                printf("%d строка:\n", i);
                for (int j = 0; j < 3; j++)
                        scanf("%f", &a[i][j]);
         }
  }
 
void transp_matr()
  {
        // транспонирование
        for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                        b[i][j] = a[j][i];
  }
float ad(int i, int j){     //алгебраическое дополнение элемента a[i][j]
        int l[]={0,1},c[]={0,1};
        for (int n=i;n<2;n++)
                l[n]++;
        for (int n=j;n<2;n++)
                c[n]++;
        float res=a[l[0]][c[0]]*a[l[1]][c[1]]- a[l[0]][c[1]]*a[l[1]][c[0]];
        if((i+j)%2==1)
                res*=-1;
        return res;
        }
 
float opredelitel_matr()
{
float s=0;
        // поиск определителя по первой строке
        for (int j=0;j<3;j++)
        s+=a[0][j] * ad(0,j);
        return s;
 
 
 
}
 
 
 
void obr_matr()
{
        // поиск обратной матрицы
        opred= opredelitel_matr();
        for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                        obr[i][j] = 1/opred * ad(j,i);
}
 
void vyvod(float mas[3][3])
{
        float *pe=mas[0];
        for (int i = 0; i < 3; i++){
                /*for (int j = 0; j < 3; j++)
                        printf("%f ", a[i][j]);
                */
                for (int j = 0; j < 3; j++)
                        printf("%f ", *pe++);
                printf("\n");
        }
}
Добавлено через 55 секунд
Точность вычисления обратной матрицы тоже не проверял.
0
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 10
30.06.2010, 18:07  [ТС] 20
Объясни плиз..... И что за новый массив масс?
C
1
2
3
4
system("chcp 1251");
  system("pause");
void vyvod(float mas[3][3])
mass[0]
0
30.06.2010, 18:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2010, 18:07
Помогаю со студенческими работами здесь

Как создать матрицу 3х3 для дальнейшего ее умножения
Я дико извиняюсь за довольно глупый вопрос, но как создать матрицу 3х3 для дальнейшего ее...

Создать текстовый(е) файл(ы), содержащий(е) матрицу 3х3 целых чисел
Создать текстовый(е) файл(ы), содержащий(е): матрицу 3х3 целых чисел. Вывести в файл суммы...

Создать квадратную матрицу и посчитать определитель
Добрый день, помогите с задачей! Создать квадратную матрицу и посчитать определитель Причём если...

Вычислить определитель матрицы 3х3
Дана матрица 3х3 нужно вычислить определитель матрицы 1 2 3 4 5 6 7 8 9 Заранее спасибо


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru