Matriz n+1×m+1, soma de colunas e soma de linhas

4 respostas
I

Olá pessoal, eu preciso fazer um programa que leia uma matriz n × m de reais e imprima uma matriz n + 1 × m + 1 formada por todos os elementos lidos e, adicionalmente, a última linha contém as somas de cada coluna e a última coluna contém as somas de cada linha.

Já fiz de várias formas e nunca dá certo! O último que fiz está assim:

Scanner sc = new Scanner(System.in);

        int l, c;
        System.out.println("Forneça o número de linhas da matriz");
        l = sc.nextInt();
        System.out.println("Forneça o número de colunas da matriz");
        c = sc.nextInt();

        double A[][] = new double[l][c], B[][] = new double[l + 1][c + 1];

        for (int i = 0; i < l; i++) {
            for (int j = 0; j < c; j++) {
                System.out.println("Forneça o valor de um elemento da matriz");
                A[i][j] = sc.nextDouble();
                B[i][j] = A[i][j];
            }
        }
        double somaj = 0;
        double somai = 0;
        for (int i = 0; i < l; i++) {
            for (int j = 0; j < c; j++) {

                somaj = somaj + A[i][j];
            }
        }
        for (int i=0; i<(c+1);i++) {
            B[l+1][i] = somai;
        }

        for (int i = 0; i < c; i++) {
            for (int j = 0; j < l; j++) {
                somai = somai + A[i][j];                
            }
        }
        for (int i=0; i<(l+1);i++) {
            B[i][c+1] = somai;
        }

        imprime(B, "matriz B= ");
    }

    public static void imprime(double[][] X, String n) {
        System.out.println(n);
        for (int i = 0; i < X.length; i++) {
            System.out.print(" | ");
            for (int j = 0; j < X[i].length; j++) {
                System.out.printf("%9.2f ", X[i][j]);
            }
            System.out.println("  |");
        }
    }

}

Alguém poderia me instruir no que posso fazer?

4 Respostas

S

Ola Isabela.Thobias, qual seria o problema que você está encontrando?

Troque essa linha

double A[][] = new double[l][c], B[][] = new double[l + 1][c + 1];

por

double A[][] = new double[l][c];
double B[][] = new double[l+1][c+1];

Talvez isso ja lhe de uma ajudada.

I

eu alterei e o problema persiste... parece que estão nessas linhas

double somaj = 0;
        double somai = 0;
        for (int i = 0; i < l; i++) {
            for (int j = 0; j < c; j++) {

                somaj = somaj + A[i][j];
            }
        }
        for (int i=0; i<(c+1);i++) {
            B[l+1][i] = somai;
        }

        for (int i = 0; i < c; i++) {
            for (int j = 0; j < l; j++) {
                somai = somai + A[i][j];                
            }
        }
        for (int i=0; i<(l+1);i++) {
            B[i][c+1] = somai;
        }
S
Isabela.Thobias:
eu alterei e o problema persiste... parece que estão nessas linhas
double somaj = 0;
        double somai = 0;
        for (int i = 0; i < l; i++) {
            for (int j = 0; j < c; j++) {

                somaj = somaj + A[i][j];
            }
        }
        for (int i=0; i<(c+1);i++) {
            B[l+1][i] = somai;
        }

        for (int i = 0; i < c; i++) {
            for (int j = 0; j < l; j++) {
                somai = somai + A[i][j];                
            }
        }
        for (int i=0; i<(l+1);i++) {
            B[i][c+1] = somai;
        }

Ola,

Segue código para para o que deseja
import java.util.Scanner;

public class Tabela{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int linhas, colunas = 0;
		double somaLinha = 0;
		double somaColuna = 0;
		
		// Insere tamanho da matriz
		System.out.printf("Digite o numero de linhas: ");
		linhas = sc.nextInt();
		System.out.printf("Digite o numero de colunas: ");
		colunas = sc.nextInt();
		
		double A[][] = new double[linhas][colunas]; // Matriz entrada
		double B[][] = new double[linhas+1][colunas+1]; // Matriz saida
		
		
		// preenche a matriz
		for (int i = 0; i < linhas ; i++) {
			for (int j = 0 ; j < colunas ; j++) {
				System.out.printf("Digite o valor para o elemento [%d][%d] da matriz: ", i+1, j+1);
				A[i][j] = sc.nextDouble();
				B[i][j] = A[i][j];
			}
		}
		
		
		// Imprime na tela informacao de inicio das somas das linhas
		System.out.printf("Iniciando soma das linhas...");
		// Execute a soma das linhas
		for (int i = 0; i < linhas ; i++) {

			// o for vai até o j <= colunas de maneira que quando j == colunas ( coluna das somas ) possamos salvar o valor da soma
			for (int j = 0 ; j <= colunas ; j++) {
				// verifica se é a última coluna ( coluna das somas )
				if (j == colunas) {
					B[i][j] = somaLinha;
					somaLinha = 0;
				} else {
					somaLinha += B[i][j];
				}
			}
		}
		System.out.printf("   PRONTO!!!\n");

		// Imprime na tela informacao de inicio das somas das colunas
		System.out.printf("Iniciando soma das colunas...");
		// Executa a soma das colunas
		for (int j = 0 ; j < colunas ; j++) {
			
			// o for vai até o i <= linhas de maneira que quando i == linhas (linha das somas) possamos salvar o valor da soma
			for (int i = 0 ; i <= linhas ; i++) {
				if (i == linhas) {
					B[i][j] = somaColuna;
					somaColuna = 0;
				} else {
					somaColuna += B[i][j];
				}
			}
		}
		System.out.printf("   PRONTO!!!\n");
		
		// imprime a matriz na tela
		for (int i = 0; i <= linhas ; i++) {
			for (int j = 0; j <= colunas ; j++) {
				System.out.printf("|%5.2f", B[i][j]);
			}
			System.out.printf("|\n");
		}
	}
}

Espero ter ajudado

I

schiefler mto obrigada!!

Criado 31 de agosto de 2014
Ultima resposta 31 de ago. de 2014
Respostas 4
Participantes 2