Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * programa para operações com duas matrizes:
- * - Carga em 2 matrizes quadradas de valores inteiros
- * - Função para obter a soma da diagonal principal
- * - Função para obter a soma da diagonal secundária
- * - Função para realizar a soma das duas matrizes.
- * - Função para verificar se as matrizes são do tipo identidade.
- * - Função para fazer a multiplicação das matrizes
- * - Função para calcular a determinante
- * Autor: Renato Santos de Souza
- * Data: 17/10/2011
- * Programa: matrix.c
- **/
- #include <stdio.h>
- #include <stdlib.h>
- // ----------------------------------------------------------------------------
- int read_number(char *str){
- printf("digite o número %s: ", str);
- int n;
- scanf("%d", &n);
- return n;
- }
- // ----------------------------------------------------------------------------
- double read_numberd(char *str){
- printf("digite o número %s: ", str);
- double n;
- scanf("%lf", &n);
- return n;
- }
- // ----------------------------------------------------------------------------
- int confirm_action(char *str){
- printf("%s: 1/0: ", str);
- char ch = 0;
- scanf("%d1", &ch);
- return (ch == 1);
- }
- // ----------------------------------------------------------------------------
- void input_matrix(double ***matrix, int lines, int cols){
- for (int i = 0; i < lines; i++){
- for (int j = 0; j < cols; j++){
- //char* str;
- //sprintf(str, "matrix[%d][%d] = ?; // linha %d, coluna %d: ", i, j, i+1, j+1);
- *matrix[i][j] = (double)read_numberd((char*)"a");
- }
- }
- }
- // ----------------------------------------------------------------------------
- void show_matrix(double ***matrix, int lines, int cols){
- if (matrix == NULL)
- {
- printf("ERRO: MATRIX NAO CARREGADA\n");
- return;
- }
- printf("--- MATRIX ------------------------------\n");
- for (int i = 0; i < lines; i++){
- printf("| ");
- for (int j = 0; j < cols; j++){
- printf("%.02f, ", (*matrix)[i][j]);
- }
- printf("\n");
- }
- printf("--- LINEAR ------------------------------\n");
- for (int i = 0; i < lines; i++){
- for (int j = 0; j < cols; j++){
- printf("matrix[%d][%d] = %.02f; // linha %d, coluna %d\n", i, j, (*matrix)[i][j], i+1, j+1);
- }
- }
- printf("-----------------------------------------\n");
- }
- // ----------------------------------------------------------------------------
- void new_matrix(double ***matrix, int *linhas, int *colunas){
- *linhas = read_number((char*)"de linhas");
- *colunas = read_number((char*)"de colunas");
- if (*colunas == *linhas)
- printf("matriz quadrada\n");
- else
- printf("matriz não quadrada\n");
- // aloca memoria para as linhas
- *matrix = (double**)malloc(*linhas * sizeof(double*));
- printf("1\n");
- for (int i = 0; i < *linhas; i++) {
- printf("i = %d\n", i);
- // pra cada linha aloca mais memora pra cada coluna
- // fazendo isso, pode-se criar memoria mais segmentadas
- // entao sistemas com pouca memoria livre e sem um kernel inteligente
- // continuam funcionando
- (*matrix)[i] = (double*)malloc(*colunas * sizeof(double));
- // inicializando um por um, mas poderia ser feito com um menset()
- for (int j = 0; j < *colunas; j++){
- printf("4\n");
- (*matrix)[i][j] = .0;
- printf("4.1\n");
- }
- }
- }
- // ----------------------------------------------------------------------------
- int j_colunas_a, i_linhas_a;
- int j_colunas_b, i_linhas_b;
- double **matrix_a = NULL;
- double **matrix_b = NULL;
- // ----------------------------------------------------------------------------
- main(){
- printf("Entre com os dados da Matriz A\n");
- new_matrix(&matrix_a, &i_linhas_a, &j_colunas_a);
- if(confirm_action((char*)"deseja digitar a Matriz A?"))
- // input_matrix(matrix_a, i_linhas_a, j_colunas_a);
- show_matrix(&matrix_a, i_linhas_a, j_colunas_a);
- /*
- printf("Entre com os dados da Matriz B\n");
- new_matrix(matrix_b, &i_linhas_b, &j_colunas_b);
- if (confirm_action((char*)"deseja digitar a Matriz B?"))
- input_matrix(matrix, linhas, colunas);
- */
- }
Add Comment
Please, Sign In to add comment