Pular para o conteúdo

Ola galera! Estou no 2° semestre sistema de informação e estou com muita dificuldade em c/c++ , tenh

Responder tópico
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
  • Denunciar
  • Indicar

1. Ola galera! Estou no 2° semestre sistema de informação e estou com muita dificuldade em c/c++ , tenh

Enviado em 19/06/2009 - 12:25h

DESENVOLVER UM PROGRAMA EM C PARA REALIZAR OPERAÇOES DE ALGEBRA LINEAR, A SABER:
1. PRODUTO ESCALAR
a. Somatória do Produto entre os elementos de 2 vetores de mesmo tamanho:
EX: va=[2 4], vb=[3 5], o produto escalar vale: 2x3 + 4x5 = 6 + 20 = 26

2. SOMA DE MATRIZES
a. É necessário que as matrizes sejam de mesma ordem. Assim, o resultado também será uma matriz obtida com a soma dos elementos de cada matriz tomados na mesma posição: Cij = Aij + Bij, onde i e j são os índices da matriz.

3. MULTIPLICAÇÃO DE MATRIZES
a. É necessário que o número de colunas da matriz B seja igual ao número de linhas da matriz A. Assim, o resultado também será uma matriz obtida pela somatória do produto dos elementos de cada linha de A por cada coluna de B: Cij = Cij + Aik * Bkj, onde i, j e k são número de linhas de A, número de colunas de B e número de colunas de A, respectivamente.

4. CALCULO DE DETERMINANTE
a. Somente para matrizes 2x2 e 3x3

5. TRANSPOSTA DE MATRIZ
6. INVERSÃO DE MATRIZ
a. Somente para matriz 2x2

ESTE PROGRAMA DEVE TER AS SEGUINTES FUNÇÕES DE USUÁRIOS

1. FUNÇÃO PARA LEITURA DE VETORES: void ler_vet(int ne)
2. FUNÇÃO PARA LEITURA DE MATRIZES: void ler_mat(int nl, int nc)
3. FUNÇÃO PARA CALCULAR O PRODUTO ESCALAR: float prodesc(int ne)
4. FUNÇÃO PARA CALCULAR A SOMA DE 2 MATRIZES: void soma_mat(int nl, int nc)
5. FUNÇÃO PARA CALCULAR A MULTIPLICAÇÃO DE 2 MATRIZES: void mult_mat(int nla, int ncb, int nca)
6. FUNÇÃO PARA IMPRESSÃO DE MATRIZ: void imprime_mat(int nl, int nc)
7. FUNÇÃO PARA CALCULAR DETERMINANTE: float calc_det(int ordem)
8. FUNÇÃO PARA CALCULAR INVERSA DE UMA MATRIZ: void inv_mat(int nl, int nc, float det)
9. FUNÇÃO PARA CALCULAR A TRANSPOSTA DE UMA MATRIZ: void mat_trans(int nl, int nc)




PASSOS PARA ESCREVER O CÓDIGO

1. CABEÇALHO
a. Incluir todas as bibliotecas necessárias;
b. Defina a constante simbólica para o tamanho dos vetores e matrizes. Esta constante é TAM e vale 10, logo, nenhum vetor poderá ter mais de 10 elementos e nenhuma matriz deverá ter ordem maior do que 10x10;
c. Declare os seguintes vetores e matrizes:
i. Vet_Aux[TAM] – vetor auxiliar utilizado para leitura e impressão de vetores;
ii. Vet_A[TAM] – utilizado para guardar os elementos do vetor A (este vetor recebe os elementos de Vet_Aux[TAM]);
iii. Vet_B[TAM] – utilizado para guardar os elementos do vetor B (este vetor recebe os elementos de Vet_Aux[TAM]);
iv. Mat_Aux[TAM][TAM] – matriz auxiliar utilizada para leitura e impressão de matrizes;
v. Mat_A[TAM][TAM] – utilizada para guardar os elementos da matriz A (esta matriz recebe os elementos de Mat_Aux[TAM][ TAM]);
vi. Mat_B[TAM][TAM] – utilizada para guardar os elementos da matriz B (esta matriz recebe os elementos de Mat_Aux[TAM][ TAM]).
d. Declare todas as funções de usuário

2. MAIN()
a. Declare todas as variáveis locais necessárias;
b. Gere o MENU de opções (1 a 6) ;
c. Crie a estrutura SWITCH para as opções do usuário (6 casos)

3. IMPLEMENTAÇÃO DAS FUNÇÕES DE USUÁRIO

a. Função para leitura de vetores
void ler_vet(int ne)
{
int i;
for(i=0;i<ne;i++)
{
Vet_Aux[i]=0.0;
printf(“Elemento %d : “,i+1);
scanf(“%f”,&Vet_Aux[i]);
}
}

b. Função para cálculo do produto escalar
float prodesc(int ne)
{
int i;
float soma=0.0;
for(i=0;i<ne;i++)
{
soma=soma+Vet_A[i]*Vet_B[i];
}
return(soma);
}

c. Função para leitura das matrizes
void ler_mat(int nl, int nc)
{
int i, j;
for(i=0;i<nl;i++)
{
for(j=0;j<nc;j++)
{
Mat_Aux[i][j]=0.0;
printf(“Elemento[%d][%d]: “,i,j);
scanf(“%f”,& Mat_Aux[i][j]);
}
}
}

d. Função para cálculo da soma das matrizes
void soma_mat(int nl, int nc)
{
int i, j;
for(i=0;i<nl;i++)
{
for(j=0;j<nc;j++)
{
Mat_Aux[i][j]=0.0;
Mat_Aux[i][j]=Mat_A[i][j]+Mat_B[i][j];
}
}
}

e. Função para imprimir matriz resultante
void imprime_mat(int nl, int nc)
{
int i, j;
for(i=0;i<nl;i++)
{
for(j=0;j<nc;j++)
{
printf(“%f “,Mat_Aux[i][j]);
}
printf(“\n”)
}
}

f. Função para cálculo da multiplicação das matrizes
void mult_mat(int nla, int ncb, int nca)
{
int i, j, k;
for(i=0;i<nla;i++)
{
for(j=0;j<ncb;j++)
{
Mat_Aux[i][j]=0.0;
for(k=0;k<nca;k++)
{
Mat_Aux[i][j]= Mat_Aux[i][j]+ Mat_A[i][k]* Mat_B[k][j];
}
}
}
}

g. Função para cálculo do determinante
float calc_det(int ordem)
{
float det;
if(ordem==2)
{
det =Mat_Aux[0][0]* Mat_Aux[1][1]-( Mat_Aux[0][1]* Mat_Aux[1][0]);
}
if(ordem==3)
{
det =Mat_Aux[0][0]* Mat_Aux[1][1]*Mat_Aux[2][2]
+Mat_Aux[0][1]* Mat_Aux[1][2]*Mat_Aux[2][0]
+Mat_Aux[1][0]* Mat_Aux[2][1]* Mat_Aux[0][2]
-(Mat_Aux[0][2]* Mat_Aux[1][1]* Mat_Aux[2][0]
+Mat_Aux[0][1]* Mat_Aux[1][0]* Mat_Aux[2][2]
+Mat_Aux[1][2]* Mat_Aux[2][1]* Mat_Aux[0][0]));
}
return(det);
}

h. Função para realizar a transposta de uma matriz
void mat_trans(int nl, int nc)
{
int i, j;
for(i=0;i<nl;i++)
{
for(j=0;j<nc;j++)
{
Mat_Aux[i][j]=Mat_Aux[j][i];
}
}
}

i. Função para realizar a inversa de uma matriz 2x2
void inv_mat(int nl, int nc, float det)
{
float a11, a12, a21, a22;
a11=Mat_Aux[0][0]/det;
a12=Mat_Aux[0][1]/det;
a21=Mat_Aux[1][0]/det;
a22=Mat_Aux[1][1]/det;
Mat_Aux[0][0]=a22;
Mat_Aux[0][1]=-a12;
Mat_Aux[1][0]=-a21;
Mat_Aux[1][1]=a11;
}

4. COMENTÁRIOS

Esquema para o Programa

//1)CABEÇALHO
//#include
//#define
//declare os vetores e matrizes globais aqui
//declare as funções de usuários aqui

//2) função principal
void main( )
{
//declare as variáveis locais aqui
int op;//exemplo
//gere o menu de opções aqui
//exemplo de MENU
//[1]..................Produto Escalar
//[2]..................Soma de Matrizes
//...
//[6]..................Inversão de Matriz 2x2
//[0]..................Sair do Programa
//Opção &#61672; [ ]
//crie a estrutura switch aqui
//exemplo
switch(op)
{
case 1:
//leia o tamanho do vetor e não se esqueça de verificar se o mesmo tem //menos de 10 elementos. Se atendido, continue abaixo:
//chame a função ler_vet( ) duas vezes, dentro de um for, para leitura dos //elementos do vetor. Na primeira vez atribua Vet_Aux[ ] ao Vet_A[ ], na segunda vez //atribua Vet_Aux[ ] ao Vet_B[ ].
//chame a função prodesc( ) para o cálculo do produto escalar
//imprima o resultado

case 2:
//leia o tamanho das matrizes (linha e coluna) e não se esqueça de //verificar se o mesmo é menor do que 10x10. Alem disso, verifique se ambas , A e B, //são de mesmo tamanho ou ordem, pois a soma só pode acontecer se elas forem de //mesma ordem. Se atendido, continue abaixo:
//chame a função ler_mat( ) duas vezes, dentro de um for, para leitura dos //elementos da matriz. Na primeira vez atribua Mat_Aux[ ][ ] a Mat_A[ ][ ], na segunda vez //atribua Mat_Aux[ ][ ] a Mat_B[ ][ ].
//chame a função soma_mat( ) para o cálculo da soma das matrizes
//chame a função imprime_mat( ) para impressão do resultado

case 3:
//leia o tamanho das matrizes (linha e coluna) e não se esqueça de //verificar se o mesmo é menor do que 10x10. Alem disso, verifique se o número de //colunas de A é igual ao número de linhas de B para que seja possível a multiplicação //acontecer. Se atendido, continue abaixo:
//igual ao caso 2
//chame a função mult_mat( ) para o cálculo da multiplicação das //matrizes
//chame a função imprime_mat( ) para impressão do resultado

case 4:
//leia o tamanho da matriz e não se esqueça de verificar se a ordem é 2x2 //ou 3x3, pois o programa só vai calcular determinante de matriz com essas ordens. Se //atendido, continue abaixo:
//chame a função ler_mat( ) apenas uma vez. A matriz ficará guardada //em Mat_Aux[ ][ ].
//chame a função calc_det( ) para calcular o determinante.
//imprima o resultado

case 5:
//leia o tamanho da matriz (linha e coluna) e não se esqueça de verificar //se o mesmo é menor do que 10x10. Se atendido, continue abaixo:
// chame a função ler_mat( ) apenas uma vez. A matriz ficará guardada //em Mat_Aux[ ][ ].
//chame a função mat_trans( ) para realizar a transposta
//chame a função imprime_mat( ) para impressão do resultado

case 6:
//leia o tamanho da matriz (linha e coluna) e não se esqueça de verificar //se o mesmo é de ordem 2x2. Se atendido, continue abaixo:
// chame a função ler_mat( ) apenas uma vez. A matriz ficará guardada //em Mat_Aux[ ][ ].
//chame a função calc_det( ) para calcular o determinante. Se o determinante for diferente de zero (0), continue abaixo:
//chame a função inv_mat( ) para realizar a inversa da matriz
//chame a função imprime_mat( ) para impressão do resultado
}
}

muito obrigado

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

2. Re: Ola galera! Estou no 2° semestre sistema de informação e estou com muita dificuldade em c/c++ , tenh

Enviado em 19/06/2009 - 14:24h

Qual a sua dificuldade mesmo?

Abraços

3. Re: Ola galera! Estou no 2° semestre sistema de informação e estou com muita dificuldade em c/c++ , tenh

Enviado em 19/06/2009 - 16:01h

Tente ser mais objetivo.

4. obrigado

Enviado em 19/06/2009 - 17:24h

como vcs podem ver já tem a estrutura do trabalho so q eu nao consigo finalizar.

5. Re: Ola galera! Estou no 2° semestre sistema de informação e estou com muita dificuldade em c/c++ , tenh

Enviado em 19/06/2009 - 22:00h

Seria melhor postar o código inteiro com as bibliotecas e tudo mais...

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Responder tópico

Entre na sua conta para responder.

Fazer login para responder