Boa pessoal, primeiro de tudo, boa noite a todos, meu nome é Eduardo e sou novo no forum.
Hoje na aula de programação da faculdade meu professor passou o seguinte exercício:
Calcule as raízes de um sistema de n <= 20 equações, onde o calculo das raízes é feita da seguinte forma:
exemplo: n = 5
|A11 | * |X1| = |b1|
|A21 A22 | |X2| |b2|
|A31 A32 A33| |X3| |b3|
X1 = b1/A11
x2 = (b2 - A11*X1)/A22
X3 = (b3 - A32*X2)/A33
E assim por diante até o n 20
Eu devo ler a matriz das constantes (a matriz dos 'As') e os coeficientes (o vetor dos 'bs') e a partir da soma descrita acima, encontrar os 'Xs'
resumidamente, eu devo resolver um sistema de no máximo 20 equações, em que a cada linha é adicionado um termo a ele, tornando-o em um sistema cuja matriz das constantes é triangular.
Bom, o meu problema está na função calcula. Eu tentei fazer uma função recursiva mas estou com dúvidas quanto os parâmetro que passei, e com a própria recursiva, pois quando o programa acessa ela, ele da erro fatal e fecha o programa. Como estou no primeiro ano de computação ainda, não manjo muito de ponteiro e meu professor não conseguiu explicar direito isso, então peço que algum de vecês possam me ajudar...
Pergunta
eduardoloco
Boa pessoal, primeiro de tudo, boa noite a todos, meu nome é Eduardo e sou novo no forum.
Hoje na aula de programação da faculdade meu professor passou o seguinte exercício:
Calcule as raízes de um sistema de n <= 20 equações, onde o calculo das raízes é feita da seguinte forma:
exemplo: n = 5
|A11 | * |X1| = |b1|
|A21 A22 | |X2| |b2|
|A31 A32 A33| |X3| |b3|
X1 = b1/A11
x2 = (b2 - A11*X1)/A22
X3 = (b3 - A32*X2)/A33
E assim por diante até o n 20
Eu devo ler a matriz das constantes (a matriz dos 'As') e os coeficientes (o vetor dos 'bs') e a partir da soma descrita acima, encontrar os 'Xs'
resumidamente, eu devo resolver um sistema de no máximo 20 equações, em que a cada linha é adicionado um termo a ele, tornando-o em um sistema cuja matriz das constantes é triangular.
No fim das contas o sistema fica assim:
A11*X1 = b1
A21*X1 + A22*X2 = b2
A31*X1 + A32*X2 + A33*X3 = b3
OBS: deve-se usar ponteiros.
Enfim, após esse longo enunciado, o código:
------------------------------------------------------------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
void leitura();
float calcula();
float calcula(int **constante, int *coeficiente, int n, float *X)
{
if (n == 0)
return(constante[0][0]/coeficiente[0]); //é o calculo do X1, pois ele é o único que pode ser calculado de primeira.
else
{
X[n] = (coeficiente[n] - calcula(&constante[n][n-1], &coeficiente[n-1], n, &X[n]))/constante[n][n]; //recursiva
n--; // o n do X[n] é a respectiva raiz que está sendo calculada. Nesse caso, ele calcula da última raiz até a primeira, atravéz da recursiva.
}
}
void leitura() //função de leitura de todos os itens necessários
{
int n, i, j;
printf("Insira o numero de termos do sistema: ");
scanf("%d", &n);
int constantes[n][n], coeficientes[n];
float X[n];
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
fflush(stdin);
printf("Insira o valor da constante A%d%d: ", i+1, j+1);
scanf("&d", &constantes[j]);
}
}printf("\n");
for (i = 0; i < n; i++)
{
fflush(stdin);
printf("Insira o valor do %do coeficiente: ", i+1);
scanf("%d", &coeficientes);
}
calcula(&constantes[n][n], &coeficientes[n], n, &X[n]); //chamada da função calcula
for(i = 0; i < n; i++)
printf("X%d = %f", i, X[n]);
}
main()
{
leitura();
system("PAUSE");
}
------------------------------------------------------------------------------------------------------------------------
Bom, o meu problema está na função calcula. Eu tentei fazer uma função recursiva mas estou com dúvidas quanto os parâmetro que passei, e com a própria recursiva, pois quando o programa acessa ela, ele da erro fatal e fecha o programa. Como estou no primeiro ano de computação ainda, não manjo muito de ponteiro e meu professor não conseguiu explicar direito isso, então peço que algum de vecês possam me ajudar...
Qualquer outra informação é só perguntar.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.