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

Функиции в С. - C++

Восстановить пароль Регистрация
 
Criceto
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 21
25.11.2011, 17:05     Функиции в С. #1
Ребята, помогите, нужно написать функцию дано три матрици А, В и С, третьего порядка, и число Р.Найти АВС в степени Р.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
25.11.2011, 17:48     Функиции в С. #2
Ну вот детерминант двух матриц
Подбейте под себя и используйте pow(); для возведения в степень.
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
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#include <stdlib.h>
int det(int** a, int n);
int **reduce_matrix(int **matrix,int n,int position);
int main(void)
{
 int n = 0, i, j;
        int** a;
        printf("Enter size of matrix - >");
        scanf("%d",&n);
        printf("\n");
        a = (int**)malloc(n*sizeof(int*));
            for (i = 0; i < n; i++)
                a[i] = (int*)malloc(n*sizeof(int));
                printf("Enter elements of matrix - >\n");
            for (i = 0; i < n; i++)
                for (j = 0; j < n; j++)
                        scanf("%d",&(a[i][j]));
        printf("%d",det(a,n));
        free(a);
}
int **reduce_matrix(int **a,int n,int position)
{
    int i,j;
    int **ret = (int**)malloc(sizeof(int*)*(n-1));
    for(i = 0;i < n;i++)
        ret[i] = (int*)malloc((n-1)*sizeof(int));
    for(i = 0;i < n - 1;i++)
    {
        if(position != 0)
        for (j = 0; j < position; j++)
            ret[i][j] = a[i + 1][j];
                for (j = position; j < n - 1; j++)
                        ret[i][j] = a[i + 1][j + 1];
    }
    return ret;
}
int det(int** a, int n)
{
        int sum = 0, i;
        if (n == 1)
                return a[0][0];
        for (i = 0; i < n; i++)
                sum += a[0][i] * pow(-1, i) * det(reduce_matrix(a,n,i),n - 1);
        return sum;
}
Правда код не ахти,писал давно его я очень..
ну как первый толчок подойдет

Стойте,не то кинул)Это не то
Сейчас найду и кину нормальный код

Добавлено через 12 минут
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
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
 
int **matrix_create(int ,int );
int matrix_delete(int **,int );
int **matrix_enter(int **,int );
int matrix_print(int **,int );
int ** mmultiply(int **,int **,int );
 
int main(void)
{
    int n;
    int **res1,**res2,**res3;
    printf("Enter the size of matrix\n");
    printf(" - > ");
 
    scanf("%d",&n);
 
    res1 = matrix_create(n,n);
 
    res1 = matrix_enter(res1,n);
 
    res2 = matrix_create(n,n);
 
    res2 = matrix_enter(res2,n);
 
    res3 = mmultiply(res1,res2,n);
 
    matrix_print(res2,n);
    printf("\n");
    matrix_print(res1,n);
 
    matrix_print(res3,n);
 
    matrix_delete(res1,n);
 
    matrix_delete(res2,n);
 
    matrix_delete(res3,n);
}
 
int **matrix_create(int n,int m)
{
    int **res = (int **)malloc(n*sizeof(int*));
        if(res)
        {
            int i;
                for(i = 0;i < n;i++)
                {
                  res[i] = (int*)malloc(n*sizeof(int));
                    if(!res[i])
                    {
                        for(i--;i >= 0;i--)
                        free(res[i]);
                        return 0;
                    }
        }
return res;
        }else
        {
            return 0;
        }
}
int matrix_delete(int **data,int n)
{
    if(data)
    {
        int i;
        for(i = 0;i < n;i++)
        {
            if(data[i])
            free(data[i]);
        }
        free(data);
    }
    return 0;
}
int **matrix_enter(int **res,int n)
{
    int i,j;
    printf("\n----------------------\nEnter elements\n-> ");
    for(i = 0;i < n;i++)
    for(j = 0;j < n;j++)
    scanf("%d",&res[i][j]);
 
    return res;
}
int matrix_print(int **data,int n)
{
    int i,j;
    for(i = 0;i < n;i++)
    {
        printf("\n");
        for(j = 0;j < n;j++)
        printf("%d ",data[i][j]);
    }
    return 0;
}
int **mmultiply(int **a,int **b,int size)
{
    int **c;
    int k = 0;
    c = matrix_create(size,size);
    int i,j;
    int N = size;
     for(i = 0; i < N; i++)
        for(j = 0; j < N; j++)
        {
            c[i][j] = 0;
            for(k = 0; k < N; k++)
                c[i][j] += a[i][k] *b[k][j];
        }
    return c;
}
Вот перемножение двух матриц,размер задается в программе,как и элементы
Не оптимизировано,но работает)
Использовались функции,вам не много надо будет переделать под вашу задачу
Criceto
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 21
25.11.2011, 17:54  [ТС]     Функиции в С. #3
Спасибо большое за помощь, вот сам уже немного написал, конечно умножение немного не оптимизировано, но нам и так розрешают, не подскажите, где сделал ошибку, почему не запускается?
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
#include <stdio.h>
#include <math.h>
#include<windows.h>
void matrix(float A[3][3], float B[3][3],float C[3][3], int p, float *AB[3][3],float *ABC[3][3])
{ int i,j;
/*Умножение матрици А на матрицу В*/
for (i=0;i<3;i++)
for (j=0;j<3;j++)
{*AB[i][j]=A[i][j]*B[j][i];}
// Умножение матрици АВ на С
for (i=0;i<3;i++)
for (j=0;j<3;j++)
{*ABC[i][j]*=*AB[i][j]*C[j][i];}
//Поднесение АВС в степень Р
for (i=0;i<3;i++)
for (j=0;j<3;j++)
{*ABC[i][j]=pow(*ABC[i][j],p);}
//Вывод полученного результата.
for (i=0;i<3;i++)
{    printf("\n");
for (j=0;j<3;j++)
{    printf("%f ",ABC[i][j]);} }
     }
void main ()
{int n,k,s;
float X[3][3],Y[3][3],Z[3][3];
printf("Vvedite p=");
scanf("%i",&s);
/* Ввод масива X*/
for (n=0;n<3;n++)
for (k=0;k<3;k++)
{ scanf("%f",&X[n][k]);}
/* Ввод масива Y*/
for (n=0;n<3;n++)
for (k=0;k<3;k++)
{ scanf("%f",&Y[n][k]);}
/* Ввод масива Z*/
for (n=0;n<3;n++)
for (k=0;k<3;k++)
{ scanf("%f",&Z[n][k]);}
matrix (X,Y,Z,s);
system("pause"); }
Criceto
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 21
30.11.2011, 18:45  [ТС]     Функиции в С. #4
Приходится отвечать самому на свои же вопросы((((( Вот готовая программа на тему функций в С++ по заданому условию
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
#include <stdio.h>
#include <math.h>
#include<windows.h>
float matrix(float A[3][3], float B[3][3],float C[3][3], int p, float AB[3][3],float ABC[3][3])
{ int i,j;
/*Умножение матрици А на матрицу В*/
for (i=0;i<3;i++)
    for (j=0;j<3;j++){
        AB[i][j]=A[i][j]*B[j][i];
    }
// Умножение матрици АВ на С
for (i=0;i<3;i++)
    for (j=0;j<3;j++) {
        ABC[i][j]=AB[i][j]*C[j][i];
}
//Поднесение АВС в степень Р
for (i=0;i<3;i++)
for (j=0;j<3;j++)
{ABC[i][j]=pow(ABC[i][j],p);}
//Вывод полученного результата.
        for (i=0; i<3; i++) {
            printf("\n");
            for(j=0; j<3; j++) {
                     printf("%f;",ABC[i][j]);
            }
        }
}
main ()
{
     int n,k,s;
float X[3][3],Y[3][3],Z[3][3],L[3][3],T[3][3];
printf("Vvedite p=");
scanf("%i",&s);
/* Ввод масива X*/
printf("Vvedite X=");
for (n=0;n<3;n++)
for (k=0;k<3;k++)
{ scanf("%f",&X[n][k]);}
/* Ввод масива Y*/
printf("Vvedite Y=");
for (n=0;n<3;n++)
for (k=0;k<3;k++)
{ scanf("%f",&Y[n][k]);}
/* Ввод масива Z*/
printf("Vvedite Z=");
for (n=0;n<3;n++)
for (k=0;k<3;k++)
{ scanf("%f",&Z[n][k]);}
matrix (X,Y,Z,s,L,T);
system("pause"); 
}
Yandex
Объявления
30.11.2011, 18:45     Функиции в С.
Ответ Создать тему
Опции темы

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