Enunciado:
Fazer um programa que leia uma matriz A(4,2) de elementos inteiros, calcule e depois mostre a soma das linhas pares da matriz.
Screenshot:
O código está abundantemente comentado, portanto não iremos entrar em mais detalhes aqui.
Bom divertimento!
Em tempo: ao final desta página há um "Anexo" que você pode usar para fazer download do fonte, em lugar de copiar e colar!
Código-Fonte:
#include <cstdlib>
#include <iostream>
using namespace std;
// Fazer um programa que leia uma matriz A(4,2) de elementos inteiros,
// calcule e depois mostre a soma das linhas pares da matriz.
//
// Como este algoritmo é bastante fácil e já fizemos vários exercícios semelhantes,
// vamos "enriquecer" um pouco a solução, usando alguns recursos da linguagem:
// a) Vamos usar funções. Graças a isto , a função "main" será pequena e fácil de entender,
// pois constará básicamente de chamadas a estas funções.
// Note que as funções receberão como "parâmetro por referência" o nosso "vetor principal".
// b) Já que estamos usando um vetor como parâmetro,
// e em C o nome de um vetor retorna um pointeiro (passamos implícitamente um ponteiro)
// vamos usar também um "ponteiro explícito" ao chamar a função "scanf".
//
// Espero que gostem e se divirtam!
// Nosso truque já velho conhecido:
// as dimensões da matriz são especificadas através de constantes
const int cstNroLinhas = 4;
const int cstNroColunas = 2;
// E como os indexadores vão ser usados em várias funções, vou declará-los aqui, também
int iLinha;
int iColuna;
// -----------------------------------------------------------------------------------------------------
// Funções auxiliares
void LeMatriz(int Matriz[cstNroLinhas][cstNroColunas])
{
// Nesta função vou usar uma "firula":
// Em lugar de usar &Variavel no "scanf", vou definir e preencher uma variável ponteiro
// e passar esta variável
// Para mais detalhes, veja http://www.augustcouncil.com/~tgibson/tutorial/ptr.html
int * ptrItemMatriz;
for (iLinha =0; iLinha<cstNroLinhas; iLinha++)
{
for (iColuna=0; iColuna<cstNroColunas; iColuna++)
{
printf("Digite o valor do item da matriz para a linha %i, coluna %i: ", iLinha+1, iColuna+1);
// Aqui preencho o ponteiro
ptrItemMatriz = &Matriz[iLinha][iColuna];
// E aqui passo ao "scanf" o ponteiro preenchido
scanf("%i",ptrItemMatriz);
}
}
}
int SomaLinhasPares(int Matriz[cstNroLinhas][cstNroColunas])
{
int Soma = 0;
for (iLinha=0; iLinha<cstNroLinhas; iLinha++)
{
if ( (iLinha + 1) % 2 == 0)
{
for (iColuna=0; iColuna<cstNroColunas; iColuna++)
Soma += Matriz[iLinha][iColuna];
}
}
return Soma;
}
// -----------------------------------------------------------------------------------------------------
// Função Principal
int main(int argc, char *argv[])
{
// Definindo a matriz
int A[cstNroLinhas][cstNroColunas];
// Chamando a subrotina LeMatriz passando a matriz"A" como parametro
// Lembre-se: em C, quando usamos o nome de um vetor ou matriz, estamos obtendo um ponteiro, não o conteúdo
// e portanto esta chamada trabalhará com a Matriz A "por referência" (ou seja, podendo alterar seu conteúdo)
// Se quiser mais detalhes, veja http://www.augustcouncil.com/~tgibson/tutorial/arr.html
LeMatriz(A);
// Agora, vamos mostrar a "soma das linhas pares da matriz"
// Vamos considerar como "linhas pares" as que tem "o módulo 2 de (índice + 1) = 0"
// Não ficou claro? Vamos exemplificar! A linha de índice 1 será considerada "linha par",
// pois 1 + 1 % 2 = 0. OK?
// E para continuar o nosso método de usar funções,
// faremos a soma através de uma função! ;-)
int Soma = SomaLinhasPares(A);
// Agora basta imprimir o resultado:
printf("\nSoma dos elementos das linhas pares: %i \n", Soma);
system("PAUSE");
return EXIT_SUCCESS;
}
// -----------------------------------------------------------------------------------------------------