Ir ao conteúdo

Problema no cálculo do resultado do algoritmo


MaísaFrancieli

Posts recomendados

Postado

Bom dia,

Estou com problema no seguinte exercício em anexo.

Eu preciso calcular o valor das incógnitas da equação.Exemplo:

se eu tenho:

x=2

x+3y=7

10x+36y+9=17

que forma a matriz

1 0 0

1 3 0

10 36 9 e o vetor

2

7

17

Preciso calcular o valor de x,y e z; o x seu que é 2 e por ai acho os outros, só que preciso de uma "formúla" que calcule equações com até 20 incógnitas do mesmo jeito que calculo x+3y=7 e 10x+36y+9=17. Por isso fiz o código:

//PROBLEMA

soma=soma+(A[j]*resultado[j]); - multiplica a linha da matriz pelo vetor resultado

if(A[j+1]==0){ - se o proximo valor da matriz foz 0 em determinada linha

resultado=(soma*(-1))+B/A[j];//calcula novo valor da incógnita

O código é o seguinte:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int **A,*B,i,j,linha,coluna,cont;
float *resultado,*aux,soma;

cont=0;
soma=0;

printf("*-*-*-*-*-*-*-*-*SISTEMA PARTICULAR DE N EQUACOES E N INCOGNITAS*-*-*-*-*-*-*-*-\n");

printf("\nDigite a quantidade de equacoes (qtd. maxima: 20):\n");
scanf("%d",&linha);

while(linha<=0 || linha>20){
printf("DADO INVALIDO!\n");
printf("Digite a quantidade de equacoes (qtd. maxima: 20):\n");
scanf("%d",&linha);
}

coluna=linha;
A = calloc(linha,sizeof(int));
B = calloc(linha, sizeof(int));
resultado = calloc(linha, sizeof(float));
aux = calloc(linha, sizeof(float));

for(i=0;i<linha;i++){
if(i==linha){
break;
}
A[i] = calloc(coluna,sizeof(int));
}

for(i=0;i<linha;i++){
for(j=0;j<coluna;j++){
if(i==linha){
break;
}

if(i<j){
A[i][j]=0;
}

if(i>=j){
printf("\nDigite os coeficiente das equacoes:\n");
scanf("%d",&A[i][j]);
}
}
}

for (i=0; i<linha; i++) {
for (j=0; j<coluna; j++) {
printf("%d",A[i][j]);
}
printf("\n");
}

for(i=0;i<linha;i++){
if(i==linha){
break;
}

printf("\nDigite os termos independentes:\n");
scanf("%d",&B[i]);
}

for(i=0;i<linha;i++){
for(j=0;j<coluna;j++){
if(i==linha){
break;
}

if(i==0 && j==0){
resultado[i]=(B[i]*1.0)/(A[i][j]*1.0);
}else{
//PROBLEMA
soma=soma+(A[i][j]*resultado[j]);
if(A[i][j+1]==0){
resultado[i]=(soma*(-1))+B[i]/A[i][j];
}
}
}
}

printf("\nRaize(s) do sistema:\n");
for(i=0;i<linha;i++){
if(i==linha){
break;
}
printf("%.2f\n",resultado[i]);
}

free(;
free(resultado);
free(A);
free(aux);

system("pause");
return 0;
}

post-1056726-13884966504944_thumb.jpg

Postado

A fórmula que encontrei foi esta, de certa forma auto-explicativa F5Rua4D.gif:


for(int x = 0; x < Equacoes; x++)
{
Solucao[x] = TermosIndependentes[x];
for(int y = 0; x != 0 && y < x; y++)
{
Solucao[x] -= Coeficientes[x][y] * Solucao[y];
}
Solucao[x] /= Coeficientes[x][x];
}

Para desenvolver tal código, você deveria primeiro pensar em como resolver a primeira equação e converter isso em código GbhmuXl.gif.

Depois, faria o mesmo procedimento com as duas ou três equações seguintes, sempre pensando em qual dado de qual array seria mais adequado para a parte do código que estivesse sendo feita.

Com isso, você deveria ver os seus códigos e pensar em um jeito de generalizar aquilo, reparando no que é mudado, trocado, aumentado, diminuído, etc, de uma equação para outra. Loops costumam ser úteis para generalizações F5Rua4D.gif.

A fim de evitar confusões ao escrever os códigos, dê nomes às suas variáveis de modo que já as identifique quando ver.

Espero ter ajudado GbhmuXl.gif.

  • 2 semanas depois...
  • Moderador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!