/* Main-Funktion */ int main(int argc, char *argv[]) { // Zufallszahlengenerator initialisieren srand(time(NULL)); matrix a = initMatrixRand(5,5); matrix b = initMatrixRand(5,5); printf("a =\n"); prettyPrint(a); printf("\nb =\n"); prettyPrint(b); matrix c = addMatrix(a, b); printf("\na + b =\n"); prettyPrint(c); freeMatrix(c); c = subMatrix(a, b); printf("\na - b =\n"); prettyPrint(c); freeMatrix(c); c = multMatrix(a, b); printf("\na * b =\n"); prettyPrint(c); freeMatrix(c); c = transposeMatrix(a); printf("\na^T =\n"); prettyPrint(c); freeMatrix(c); printf("\ndet(a) = %.2f\n", determinante(a)); printf("detQuick(a) = %.2f\n\n", detQuick(a)); printf("\ndet(b) = %.2f\n", determinante(b)); printf("detQuick(b) = %.2f\n\n", detQuick(b)); freeMatrix(a); freeMatrix(b); return 0; }
matriz *inversao(matriz *m) { matriz *inversa,*m1,*m2; inversa=alocaMatriz(m->linhas,m->colunas); inversa->linhas=m->linhas; inversa->colunas=m->colunas; if(((m->colunas)!= (m->linhas)) || (determinante(m)==0)) { m->colunas=0; m->linhas=0; return m; } m1=cofator(m); m2=transpor(m1); inversa=(divideEscalar(m2,determinante(m))); desalocaMatriz(m1); desalocaMatriz(m2); return inversa; }
int main(){ Matrix *A, *b, *x, *E; Matrix *S, *L, *U, *I; A = new_M_from_string(2,2, "1 1 2 3"); printf("detA = %.3lf \n", determinante(A)); kill_M(&A); EndProgram(); return(0); }
int det(matriz **m) { int indice; float det; printf("Qual o indice da matriz que sera calculado o determinante: "); scanf("%d",&indice); if(indice>numeroMatrizes-1) { printf("Matriz inexistente.\n"); return 1; } det=determinante(m[indice]); printf("%f\n",det); return 0;
void server(void *x){ int sa = (int) x; determinante(sa); close(sa); printf("\nConnessione terminata (Server socket accepted: %d).\n\n", sa); pthread_mutex_lock(&mutex); count--; pthread_cond_broadcast(&full); pthread_mutex_unlock(&mutex); pthread_exit(0); }
float determinante(matriz *m) { int lin,sinal; float det; matriz* m1; if((m->linhas)==1) return (m->valores[0][0]); sinal =-1; det=0; for(lin=0;lin<(m->linhas);lin++) { m1=semicof(m,lin,0); sinal = sinal * -1; det = det + (m->valores[lin][0] * determinante(m1) * sinal); desalocaMatriz(m1); } return det; }
int main () { int numLinhas, numColunas; printf ("Escolha o tamanho da matriz esparsa (MxN) > "); scanf ("%d %d", &numLinhas, &numColunas); if (numLinhas <= 0 || numColunas <= 0) { fprintf (stderr, "Matriz não pode ter dimensão menor que 1\n"); return -1; } matrizEsparsa *mat = criaMatrizEsparsa (numLinhas, numColunas); int opcao, y, x, ret; double valor; double det; do { menu (); scanf ("%d", &opcao); switch (opcao) { case 1: printf ("Escolha a posição da matriz a ser consultada (MxN) > "); scanf ("%d %d", &y, &x); ret = consultaValor (mat, y, x); if (ret != ERRO) { printf ("Matriz[%d][%d] = %d\n", y, x, ret); } break; case 2: printf ("Escolha o valor a ser inserido > "); scanf ("%lf", &valor); printf ("Escolha em que posição da matriz o valor será inserido (MxN) > "); scanf ("%d %d", &y, &x); if (insereValor (mat, y, x, valor) != ERRO) { printf ("Valor %6.3lf inserido em %dx%d\n", valor, y, x); } break; case 3: printf ("Escolha a linha a ser somada > "); scanf ("%d", &y); ret = somaLinha (mat, y); if (ret != ERRO) { printf ("Soma da linha %d = %d\n", y, ret); } break; case 4: printf ("Escolha a coluna a ser somada > "); scanf ("%d", &x); ret = somaColuna (mat, x); if (ret != ERRO) { printf ("Soma da coluna %d = %d\n", x, ret); } break; case 5: printMatriz (mat); break; case 6: det = determinante (mat); if (det != ERRO) { printf ("Determinante da matriz = %f", det); } break; case 7: gaussSeidel (mat); break; } puts (""); } while (opcao != 0); apagaMatrizEsparsa (mat); return 0; }
matriz *cofator(matriz *m) { matriz *cof,*m1; int i,j; cof=alocaMatriz(m->linhas,m->colunas); if(cof==NULL) { return NULL; } cof->linhas=m->linhas; cof->colunas=m->colunas; if((cof->linhas)==1 && (cof->colunas)==1) return m; for(i=0;i<(cof->linhas);i++) { for(j=0;j<(cof->colunas);j++) { m1=semicof(m,i,j); if((i+j)%2==0) cof->valores[i][j]=determinante(m1); else cof->valores[i][j]=-determinante(m1); } desalocaMatriz(m1); } return cof; }
*/ void menu(matriz **m,matriz *deposito) { int escolha,indice; while(escolha!=15) { printf("\t╔══════════════════════════════════════════════════════════╗\n"); printf("\t║1)Lista de Matrizes da memoria ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║2)Multiplicar por Escalar ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║3)Dividir por escalar ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║4)Multiplicar duas matrizes ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║5)Verificar se a matriz é quadrada ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║6)Verificar se a matriz é nula ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║7)Calcular o determinante ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║8)Calcular a transposta de uma matriz ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║9)Calcular a matriz dos cofatores de uma matriz ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║10)Calcular a matriz adjunta de uma matriz quadrada ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║11)Verificar se uma matriz é inversível ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║12)Calcular inversa ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║13)Adicionar Matriz ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║14)Imprime no arquivo ║\n"); printf("\t╠══════════════════════════════════════════════════════════╣\n"); printf("\t║15)Sair ║\n"); printf("\t╚══════════════════════════════════════════════════════════╝\n"); printf("O que deseja fazer: "); scanf("%d",&escolha); switch(escolha) { case 1: listaMatrizes(m); break; case 2: deposito=multiplicaE(m); if(deposito==NULL) printf("Erro!!!Matriz inexistente.\n"); else m=salvarMatriz(m,deposito); break; case 3: deposito=divideE(m); if(deposito==NULL) printf("Erro!!!Matriz inexistente.\n"); else m=salvarMatriz(m,deposito); break; case 4: deposito=multiplicaM(m); if(deposito==NULL) printf("Nao foi possivel multiplicar.\n"); else m=salvarMatriz(m,deposito); break; case 5: printf("Qual o indice da matriz que deseja verificar: "); scanf("%d",&indice); if(indice>numeroMatrizes-1) { printf("Matriz inexistente.\n"); break; } if(verificaQuadrada(m,indice)==1) printf("É quadrada.\n"); else printf("Não é quadrada.\n"); break; case 6: printf("Qual o indice da matriz que deseja verificar: "); scanf("%d",&indice); if(verificaNula(m,indice)==2) { printf("Matriz inexistente.\n"); break; } if(verificaNula(m,indice)==0) printf("Matriz nula.\n"); else printf("Matriz nao nula.\n"); break; case 7: det(m); break; case 8: deposito=transpondo(m); if(deposito==NULL) { printf("Matriz inexistente.\n"); break; } m=salvarMatriz(m,deposito); break; case 9: deposito=cof(m); if(deposito==NULL) { printf("Matriz inexistente.\n"); break; } m=salvarMatriz(m,deposito); break; case 10: deposito=adj(m); if(deposito==NULL) { printf("Matriz inexistente.\n"); break; } m=salvarMatriz(m,deposito); break; case 11: printf("Qual o indice da matriz que deseja verificar: "); scanf("%d",&indice); if(indice>numeroMatrizes-1) { printf("Matriz inexistente.\n"); break; } if(verificaQuadrada(m,indice)==1 && determinante(m[indice])!=0) printf("É inversivel.\n"); else printf("Não é iversivel.\n"); break; case 12: deposito=inv(m); if(deposito==NULL) { printf("Matriz inexistente.\n"); break; } m=salvarMatriz(m,deposito); break; case 13: m=adicionaMatriz(m); break; case 14: imprimeResultado(m); break; case 15: break; default: printf("Escolha nao consta no menu\n"); break; } }