Programação 1 - Engenharia - Arrays Multidimensionais
Revisão de 06h45min de 24 de setembro de 2014 por 186.222.16.125 (discussão) (Criou página com '===Objetivos=== *Definindo matrizes no C *Operações com matrizes e passagem de parâmetros tipo matriz ===Como definir e operar com matrizes no C=== De forma similar ao veto...')
Objetivos
- Definindo matrizes no C
- Operações com matrizes e passagem de parâmetros tipo matriz
Como definir e operar com matrizes no C
De forma similar ao vetor, basta definir a matriz usando colchetes para indicar a dimensão da variável.
Exemplo: Definir duas matrizes 2x3 já inicializadas e computar a soma das mesmas:
#include <stdio.h>
void main()
{
int mA[2][3]={ 11,12,13,
21,22,23},
mB[2][3]={1,2,3,
1,2,3},
mC[2][3];
int i,j;
for(i=0;i<2;i++){
for(j=0;j<3;j++) {
mC[i][j] = mA[i][j] + mB[i][j];
}
}
}
Exercício
- Modificar este exercício para que a função receba um parâmetro adicional do tipo inteiro. A função deve retornar a média de todos os valores da matriz soma que estão acima do valor passado como parâmetro.
- implementar um programa para calcular a média de todos elementos da matriz C do exemplo acima.
#include <stdio.h> void main() { int mA[2][3]={ 11,12,13, 21,22,23}, mB[2][3]={1,2,3, 1,2,3}, mC[2][3]; int i,j, soma_ac=0; float media; for(i=0;i<2;i++){ for(j=0;j<3;j++) { mC[i][j] = mA[i][j] + mB[i][j]; soma_ac = soma_ac + mC[i][j]; } } media = soma_ac/6.0; }
- Implementar um programa para ler uma matriz quadrada NxN pelo teclado e armazená-la em uma matriz matA. Defina matA com um tamanho máximo matA[N_MAX][N_MAX].
#include <stdio.h> #define N_MAX 50 void main() { int mA[N_MAX][N_MAX]; int i,j,dimN; /* Entrada da dimensão */ printf("Entre com a dimensao\n"); scanf ("%d",&dimN); /* Entrada de dados */ for (i=0;i<dimN;i++) { for (j=0;j<dimN;j++) { printf("Entre com mA[%d][%d]\n",i,j); scanf("%d",&mA[i][j]); } } /* impressao dos dados lidos */ for (i=0;i<dimN;i++) { for (j=0;j<dimN;j++) { printf("=> mA[%d][%d] => %d\n",i,j,mA[i][j]); } } }
Passando matrizes como parâmetro
#include <stdio.h>
void somar_mat(int aA[][3],int aB[][3], int cC[][3])
{
int i,j;
for(i=0;i<2;i++){
for(j=0;j<3;j++) {
cC[i][j] = aA[i][j] + aB[i][j];
}
}
}
void main()
{
int mA[2][3]={ 11,12,13,
21,22,23},
mB[2][3]={1,2,3,
1,2,3},
mC[2][3];
somar_mat(mA,mB,mC);
}
OBSERVE que matrizes são sempre passadas como referência.
Exercício
- Fazer uma função que recebe duas matrizes 2x3 como parâmetros e retorna a média entre todos elementos da matriz soma destas matrizes.
- Implementar uma programa para calcular o determinante de uma matriz 3x3 (de reais) a ser fornecida pelo teclado.
- Implementar um programa para ler duas matrizes (matA e matB) e multiplicá-las, colocando o resultado em uma matriz matC.
- Vamos implementar um jogo similar a batalha naval da seguinte forma.
- Crie uma matriz de inteiros global chamada ZonaDeGuerra com 10x10 posições (iniciada com 0). Construa uma função para gerar randomicamente a posição de 1 porta-aviões (colocando 1 na sua posição), 5 fragatas (número 2) e 5 submarinos (número 3). Assuma que a cada casa onde o inimigo alvejar será somado 10 ao número da casa.
- Crie um contador global de tiros iniciado com 0.
- Crie uma função de tiro. Esta função deve ler a posição de tiro, verificar se a casa ainda não foi alvejada. Se alvejada pergunta novamente a posição. Se a posição for válida e tiver um navio então o usuário ganha pontos da seguinte forma: 10 para o porta aviões, 5 para o submarino e 3 para fragata. A função deve retornar 0 se o jogo continua, 1 se o usuário atingiu todos os navios ou 2 se o usuário teve um número máximo de tiros ultrapassado (assumir 30 tiros).
- Ao final do jogo é mostrado o nome do jogador, o númerode tiros dados e a pontuação obtida.
/*
Batalha Naval
Versão Turma PRG2014-1-IFSC
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/**********************************/
/***** DEFINIÇÕES DESTE MÓDULO ****/
/**********************************/
#define TAM_MAT 10
#define MAX_TIROS 30
#define MAX_NOME 30
/**********************************/
/***** VARIÁVEIS GLOBAIS **********/
/**********************************/
int ZonaDeGuerra[TAM_MAT][TAM_MAT];/* Matriz do espaço de batalha */
int ContadorTiros=0;
int PontuacaoFinal; /* acumula a pontuação do jogador */
char nome[MAX_NOME];
int x_sorteado;
int y_sorteado;
/***********************************/
/**** FUNÇÕES DESTE MÓDULO ********/
/***********************************/
/***** FUNÇÕES DE INICIALIZAÇÃO ****/
void ZerarMatriz()
{
int i,j;
for (i=0;i<TAM_MAT;i++)
for(j=0;j<TAM_MAT;j++)
ZonaDeGuerra[i][j]=0;
}
void SortearCasa()
{
do {
/* generate secret number: */
x_sorteado = rand() % TAM_MAT;
y_sorteado = rand() % TAM_MAT;
} while (ZonaDeGuerra[x_sorteado][y_sorteado]!=0);
}
PosicionarFragatas()
{
int i;
for(i=0;i<5;i++){
SortearCasa();
ZonaDeGuerra[x_sorteado][y_sorteado]=2;
}
}
PosicionarSubmarinos()
{
int i;
for(i=0;i<5;i++){
SortearCasa();
ZonaDeGuerra[x_sorteado][y_sorteado]=3;
}
}
void PosicionarPortaAvioes()
{
SortearCasa();
ZonaDeGuerra[x_sorteado][y_sorteado]=1;
}
void PosicionarNavios()
{
/* initialize random seed: */
srand ( time(NULL) );
PosicionarPortaAvioes();
PosicionarFragatas();
PosicionarSubmarinos();
}
/*** FUNÇÕES DE IMPRESSÃO NA TELA **/
void ImprimeLinha(int linha)
{
int j;
printf(" ");
for(j=0;j<TAM_MAT;j++) {
printf("| %d ",ZonaDeGuerra[linha][j]);
}
printf("|\n");
printf(" +---+---+---+---+---+---+---+---+---+---+\n");
}
void ImprimeMatriz()
{
int i;
printf(" +---+---+---+---+---+---+---+---+---+---+\n");
for(i=0;i<TAM_MAT;i++)
ImprimeLinha(i);
}
int Tiro()
{
}
main()
{
ZerarMatriz();
PosicionarNavios();
ImprimeMatriz();
do {
situacao = Tiro();
while (situacao!=0);
}
|}
AULA DIA 17/04/2014 |
---|
Objetivos
Matrizes de caracteres e vetores de stringsUm vetor de strings pode ser construído usando matrizes de char. Cada string será armazenada em uma linha do vetor. Exemplo #include <stdio.h>
main()
{
char TabelaUsuarios[4][10] = {
"joao",
"maria",
"jose",
"lara",
};
int i;
for (i=0;i<4;i++)
printf("%s\n",&TabelaUsuarios[i][0]);
}
Note a forma como é realizada a inicialização da matriz. Exercícios
|