Objetivos
- Definindo matrizes no C
- Operações com matrizes e passagem de parâmetros tipo matriz
- Matrizes com caracteres
- Exercícios
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>
#define MAX_LIN 2
#define MAX_COL 3
void main()
{
int mA[MAX_LIN][MAX_COL]={ 11,12,13,
21,22,23},
mB[MAX_LIN][MAX_COL]={1,2,3,
1,2,3},
mC[MAX_LIN][MAX_COL];
int i,j;
for(i=0;i<MAX_LIN;i++){
for(j=0;j<MAX_COL;j++) {
mC[i][j] = mA[i][j] + mB[i][j];
}
}
}
Exercício
-
Implementar um programa para calcular a média de todos elementos da matriz C do exemplo acima.
solução média
|
#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);
printf("O valor da media eh: %.2f\n", media);
}
|
-
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].
solução preenchimento Matriz
|
#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>
#define TAM_LIN 2
#define TAM_COL 3
void somar_mat(int aA[TAM_LIN][TAM_COL],int aB[TAM_LIN][TAM_COL], int cC[TAM_LIN][TAM_COL])
{
int i,j;
for(i=0;i<TAM_LIN;i++){
for(j=0;j<TAM_COL;j++) {
cC[i][j] = aA[i][j] + aB[i][j];
}
}
}
void main()
{
int mA[TAM_LIN][TAM_COL]={ 11,12,13,
21,22,23},
mB[TAM_LIN][TAM_COL]={1,2,3,
1,2,3},
mC[TAM_LIN][TAM_COL];
somar_mat(mA,mB,mC);
}
OBSERVE que matrizes são sempre passadas como referência.
Exercícios
-
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. Assumir dimensões de matA e matB de 2x3 e 3x4 respectivamente.
==Matrizes de caracteres e vetores de string
Exercícios
-
Implementar um programa para "abrir uma porta" para um usuário que se encontra na tabela acima.
Solução - Exercício 01
|
#include <stdio.h>
char tabelaUsuarios[4][10] = {
"joao",
"maria",
"josefina",
"lara",
};
int str_cmp(char str1[],char str2[])
{
int i=0;
while(str1[i]!=0 && str2[i]!=0) {
if (str1[i]!=str2[i])
break;
i++;
}
if(str1[i]==0 && str2[i]==0)
return 0;
else
return 1;
}
main()
{
int i;
char nome[10];
printf("Entre com seu USERID\n");
scanf("%s", nome);
for (i=0;i<4;i++) {
if (str_cmp(nome,&tabelaUsuarios[i][0])==0) {
break;
}
}
if (i==4)
printf("Usuário não existente!\n");
else
printf("abrir a porta\n");
}
|
-
Implementar uma tabela adicional com senhas dos usuários. O acesso deve ser concedido somente se o usuário for validado e a senha. Defina as tabelas como variáveis globais.
- Implementar uma modificação do exercício anterior que permite ao programa ficar em loop até que se entre com userID igual a "fim".
- No exercício anterior, acrescente uma tabela de contadores que permite armazenar o número de tentativas seguidas de um usuário, no caso de erro de senha. Se o número de tentativas for maior que 3 a porta não deverá mais ser aberta para o usuário (usuário bloqueado).
- No exercício anterior, acrescente a figura do administrador (armazenado separadamente como user "admin" e senha "12345". Ao logar o administrador será questionado por um usuário a ser desbloqueado. O administrador entra com o usuário a ser desbloquedo e o sistema volta a perguntar por um userID.
6. Implementar um gerador de apostas para megasena. O programa deve armazenar 10 sugestões de jogos a serem armazenados em uma matriz.
Os números devem ser armazenados em ordem crescente. Sugestão: criar uma matriz global:
int matriz_megasena[10][6];
7. Melhorar o exercício anterior para evitar que dois jogos sejam iguais.
8. Melhorar o exercício anterior para evitar que uma aposta tenha dois números na mesma dezena.
9. Melhorar o exercício anterior para evitar que uma mesma aposta tenha números consecutivos.
10. Melhorar o exercício anterior colocando um switch para o usuário colocar as opções acima.