Mudanças entre as edições de "Programação 1 - Engenharia - Arrays Multidimensionais"
Linha 912: | Linha 912: | ||
#define NUM_JOGOS 10 | #define NUM_JOGOS 10 | ||
− | #define NUMS_MEGA 6 | + | # define NUMS_MEGA 6 |
int matriz_jogos[NUM_JOGOS][NUMS_MEGA]; | int matriz_jogos[NUM_JOGOS][NUMS_MEGA]; | ||
− | int gerar_num_al() | + | int gerar_num_al() { |
− | { | + | return (rand() % 60 + 1); |
− | return (rand()%60 + 1); | ||
} | } | ||
− | int testar_num(int numero, int vetor[NUMS_MEGA], int limite)//testa o numero a ser colocado no vetor do jogo | + | int testar_num(int numero, int vetor[NUMS_MEGA], int limite) //testa o numero a ser colocado no vetor do jogo |
{ | { | ||
− | int i=0; | + | int i = 0; |
− | for (i=0;i<limite;i++) { | + | for (i = 0; i < limite; i++) { |
− | + | if (vetor[i] == numero) //testa se o numero anterior é igual ao proximo sorteado, se sim, retorna 1 se nao retorna 0 | |
− | + | return 1; | |
} | } | ||
return 0; | return 0; | ||
} | } | ||
− | void ordenar_vetor(int vetor[NUMS_MEGA])// ordena o vetor do jogo em ordem crescente | + | void ordenar_vetor(int vetor[NUMS_MEGA]) // ordena o vetor do jogo em ordem crescente |
{ | { | ||
− | int i,j; | + | int i, j; |
− | int aux=0; | + | int aux = 0; |
− | for(i=0;i<NUMS_MEGA;i++){ | + | for (i = 0; i < NUMS_MEGA; i++) { |
− | + | for (j = 0; j < NUMS_MEGA; j++) { | |
− | + | if (vetor[i] < vetor[j]) { | |
− | + | aux = vetor[i]; | |
− | + | vetor[i] = vetor[j]; | |
− | + | vetor[j] = aux; | |
− | + | } | |
− | + | } | |
− | } | + | } |
− | |||
} | } | ||
− | void imprimir_matriz()//imprime a matriz dos jogos | + | void imprimir_matriz() //imprime a matriz dos jogos |
{ | { | ||
− | int i,j; | + | int i, j; |
− | + | ||
− | for(i=0;i<NUM_JOGOS;i++) { | + | for (i = 0; i < NUM_JOGOS; i++) { |
− | + | for (j = 0; j < NUMS_MEGA; j++) | |
− | + | printf("%d ", matriz_jogos[i][j]); | |
− | + | printf("\n"); | |
} | } | ||
− | + | ||
} | } | ||
− | int gerar_jogo(int num_jogo)//gera o jogo numero por numero | + | int gerar_jogo(int num_jogo) //gera o jogo numero por numero |
{ | { | ||
int i, num_al; | int i, num_al; | ||
− | + | ||
matriz_jogos[num_jogo][0] = gerar_num_al(); | matriz_jogos[num_jogo][0] = gerar_num_al(); | ||
− | for(i=1;i<6;i++) { | + | for (i = 1; i < 6; i++) { |
− | + | do { | |
− | + | num_al = gerar_num_al(); | |
− | + | } while (testar_num(num_al, matriz_jogos[num_jogo], i)); //faz o teste se retorna 1 continua o sorteio ate aparecer um numero diferente do anterior | |
− | + | matriz_jogos[num_jogo][i] = num_al; | |
− | + | ||
} | } | ||
− | + | ||
} | } | ||
− | main() | + | main() { |
− | { | ||
int i; | int i; | ||
− | + | ||
− | srand ( time(NULL) );//pega o numero randomico usando como seed o relogio | + | srand(time(NULL)); //pega o numero randomico usando como seed o relogio |
− | + | ||
− | for (i=0;i<NUM_JOGOS;i++){ | + | for (i = 0; i < NUM_JOGOS; i++) { |
− | + | gerar_jogo(i); | |
− | + | ordenar_vetor(matriz_jogos[i]); | |
} | } | ||
imprimir_matriz(); | imprimir_matriz(); | ||
Linha 1 012: | Linha 1 009: | ||
int matriz_jogos[NUM_JOGOS][NUMS_MEGA]; | int matriz_jogos[NUM_JOGOS][NUMS_MEGA]; | ||
− | int gerar_num_al() | + | int gerar_num_al() { |
− | { | + | return (rand() % 60 + 1); |
− | return (rand()%60 + 1); | ||
} | } | ||
− | int testar_num(int numero, int vetor[NUMS_MEGA], int limite)//testa o numero a ser colocado no vetor do jogo | + | int testar_num(int numero, int vetor[NUMS_MEGA], int limite) //testa o numero a ser colocado no vetor do jogo |
{ | { | ||
− | int i=0; | + | int i = 0; |
− | for (i=0;i<limite;i++) { | + | for (i = 0; i < limite; i++) { |
− | + | if (vetor[i] == numero || (vetor[i] / 10) == (numero / 10)) //testa se o numero anterior é igual ou existe dezena igual ao proximo sorteado, se sim, retorna 1 se nao retorna 0 | |
− | + | return 1; | |
} | } | ||
return 0; | return 0; | ||
} | } | ||
− | void ordenar_vetor(int vetor[NUMS_MEGA])// ordena o vetor do jogo em ordem crescente | + | void ordenar_vetor(int vetor[NUMS_MEGA]) // ordena o vetor do jogo em ordem crescente |
{ | { | ||
− | int i,j; | + | int i, j; |
− | int aux=0; | + | int aux = 0; |
− | for(i=0;i<NUMS_MEGA;i++){ | + | for (i = 0; i < NUMS_MEGA; i++) { |
− | + | for (j = 0; j < NUMS_MEGA; j++) { | |
− | + | if (vetor[i] < vetor[j]) { | |
− | + | aux = vetor[i]; | |
− | + | vetor[i] = vetor[j]; | |
− | + | vetor[j] = aux; | |
− | + | } | |
− | + | } | |
− | } | + | } |
− | |||
} | } | ||
− | void imprimir_matriz()//imprime a matriz dos jogos | + | void imprimir_matriz() //imprime a matriz dos jogos |
{ | { | ||
− | int i,j; | + | int i, j; |
− | + | ||
− | for(i=0;i<NUM_JOGOS;i++) { | + | for (i = 0; i < NUM_JOGOS; i++) { |
− | + | for (j = 0; j < NUMS_MEGA; j++) | |
− | + | printf("%d ", matriz_jogos[i][j]); | |
− | + | printf("\n"); | |
} | } | ||
− | + | ||
} | } | ||
− | int gerar_jogo(int num_jogo)//gera o jogo numero por numero | + | int gerar_jogo(int num_jogo) //gera o jogo numero por numero |
{ | { | ||
int i, num_al; | int i, num_al; | ||
− | + | ||
matriz_jogos[num_jogo][0] = gerar_num_al(); | matriz_jogos[num_jogo][0] = gerar_num_al(); | ||
− | for(i=1;i<6;i++) { | + | for (i = 1; i < 6; i++) { |
− | + | do { | |
− | + | num_al = gerar_num_al(); | |
− | + | } while (testar_num(num_al, matriz_jogos[num_jogo], i)); //faz o teste se retorna 1 continua o sorteio ate aparecer um numero diferente do anterior | |
− | + | matriz_jogos[num_jogo][i] = num_al; | |
− | + | ||
} | } | ||
− | + | ||
} | } | ||
− | main() | + | main() { |
− | { | ||
int i; | int i; | ||
− | + | ||
− | srand ( time(NULL) );//pega o numero randomico usando como seed o relogio | + | srand(time(NULL)); //pega o numero randomico usando como seed o relogio |
− | + | ||
− | for (i=0;i<NUM_JOGOS;i++){ | + | for (i = 0; i < NUM_JOGOS; i++) { |
− | + | gerar_jogo(i); | |
− | + | ordenar_vetor(matriz_jogos[i]); | |
} | } | ||
imprimir_matriz(); | imprimir_matriz(); | ||
} | } | ||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
{{collapse bottom}} | {{collapse bottom}} |
Edição das 15h11min de 14 de março de 2019
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 #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].
solução #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í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. Assumir dimensões de matA e matB de 2x3 e 3x4 respectivamente.
Solução - Exercicio 03 #include <stdio.h> #define DIM_1 2 #define DIM_2 3 #define DIM_3 4 main() { int matA[DIM_1][DIM_2]={{2,5,7}, {4,7,5} }, matB[DIM_2][DIM_3]={{7,5,6,4}, {4,6,4,3}, {9,2,2,1} }, matR[DIM_1][DIM_3] ={ {0,0,0,0}, {0,0,0,0} }, i,j,k; for (i=0;i<DIM_1;i++) for (j=0;j<DIM_3;j++) { for (k=0;k<DIM_2;k++) matR[i][j]=matR[i][j]+matA[i][k]*matB[k][j]; printf("MatR[%d][%d] => %d \n", i, j, matR[i][j]); } }
-
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.
#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("| %2d ",ZonaDeGuerra[linha][j]); } printf("|\n"); printf(" +----+----+----+----+----+----+----+----+----+----+\n"); } void ImprimeLinhaEscondida(int linha) { int j; printf(" "); for(j=0;j<TAM_MAT;j++) { if (ZonaDeGuerra[linha][j]>=0 && ZonaDeGuerra[linha][j]<=3) printf("| -- "); else printf("| %2d ",ZonaDeGuerra[linha][j]); } printf("|\n"); printf(" +----+----+----+----+----+----+----+----+----+----+\n"); } void ImprimeMatrizTudo() { int i; printf(" +----+----+----+----+----+----+----+----+----+----+\n"); for(i=0;i<TAM_MAT;i++) ImprimeLinha(i); } void ImprimeMatrizEscondida() { int i; printf(" +----+----+----+----+----+----+----+----+----+----+\n"); for(i=0;i<TAM_MAT;i++) ImprimeLinhaEscondida(i); } int Tiro() { /* usar um switch */ } main() { int situacao; ZerarMatriz(); PosicionarNavios(); ImprimeMatrizEscondida(); do { situacao = Tiro(); } while (situacao==0); }
Matrizes de caracteres e vetores de strings
Um 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
1. Implementar um programa para "abrir uma porta" para um usuário que se encontra na tabela acima.Solução - Exercicio 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"); }
Solução - Exercicio 02 #include <stdio.h> char tabelaUsuarios[4][10] = { "joao", "maria", "josefina", "lara", }; char tabelaSenhas[4][10] = { "joao123", "maria123", "josef123", "lara123", }; 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]; char senha[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 { /* inserir código aqui !!! */ printf("Entre com a senha de %s\n", nome); scanf("%s", senha); if (str_cmp(senha,&tabelaSenhas[i][0])==0) { printf("abrir a porta\n"); } else printf("Senha de %s incorreta\n", nome); } }
3. Implementar uma modificação do exercício anterior que permite ao programa ficar em loop até que se entre com userID igual a "fim".
Solução - Exercicio 03 //Autor : Victor Cesconetto De Pieri #include <stdio.h> char tabelaUsuarios[4][10] = { "joao", "maria", "josefina", "lara", }; char tabelaSenhas[4][10] = { "joao123", "maria123", "josef123", "lara123", }; 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]; char senha[10]; for (;;) { //'for' ou loop infinito printf("Entre com seu USERID\n"); scanf("%s", nome); if (str_cmp(nome, "fim") == 0) { //verifica se digitou "fim" no userID printf("\nVoce digitou 'fim', adeus!!\n"); break; //sai do loop infinito e encerra o programa } 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("Entre com a senha de %s\n", nome); scanf("%s", senha); if (str_cmp(senha, & tabelaSenhas[i][0]) == 0) { printf("abrir a porta\n"); } else printf("Senha de %s incorreta\n", nome); } } }
4. 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).
Solução - Exercício 04 //Autor: Victor Cesconetto De Pieri #include <stdio.h> char tabelaUsuarios[4][10] = { "joao", "maria", "josefina", "lara", }; char tabelaSenhas[4][10] = { "joao123", "maria123", "josef123", "lara123", }; char tabelaContadores[4][1] = { 0, 0, 0, 0 }; 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]; char senha[10]; for (;;) { //'for' ou loop infinito printf("Entre com seu USERID\n"); scanf("%s", nome); if (str_cmp(nome, "fim") == 0) { //verifica se digitou "fim" no userID printf("\nVoce digitou 'fim', adeus!!\n"); break; //sai do loop infinito e encerra o programa } for (i = 0; i < 4; i++) { if (str_cmp(nome, & tabelaUsuarios[i][0]) == 0) { break; } } if (i == 4) //verifica se o usuario ja excedeu as 3 tentativas printf("Usuário não existente\n"); else { printf("Entre com a senha de %s\n", nome); scanf("%s", senha); if (str_cmp(senha, & tabelaSenhas[i][0]) == 0 && tabelaContadores[i][0] < 3) { //verifica se o usuario não esta bloqueado e a senha esta correta printf("abrir a porta\n"); } else if (tabelaContadores[i][0] < 3) { //se o usuario nao está bloqueado mas a senha esta incorreta acrescenta 1 nos contadores tabelaContadores[i][0]++; printf("Contagem: %d\n", tabelaContadores[i][0]); printf("Senha de %s incorreta\n", nome); } else { //se esgotaram as tentativas do usuario printf("Usuario Bloqueado!!\n"); } } } }
5. No exercício anterior, acrecente 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 desbloquado e o sistema volta a perguntar por um userID.
Solução - Exercicio 05 //Autor: Victor Cesconetto De Pieri #include <stdio.h> char tabelaUsuarios[4][10] = { "joao", "maria", "josefina", "lara", }; char tabelaSenhas[4][10] = { "joao123", "maria123", "josef123", "lara123", }; char tabelaContadores[4][1] = { 0, 0, 0, 0 }; 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]; char senha[10]; for (;;) { //'for' ou loop infinito printf("Entre com seu USERID\n"); scanf("%s", nome); if (str_cmp(nome, "fim") == 0) { //verifica se digitou "fim" no userID printf("\nVoce digitou 'fim', adeus!!\n"); break; //sai do loop infinito e encerra o programa } else if (str_cmp(nome, "admin") == 0) { //verifica se o tratamento de usuario será para admin ou usuario //tratamento para admin abaixo printf("Entre com a senha do administrador:\n"); scanf("%s", senha); if (str_cmp(senha, "12345") == 0) { printf("Entre com o nome do usuario a ser desbloqueado\n"); scanf("%s", nome); for (i = 0; i < 4; i++) { if (str_cmp(nome, & tabelaUsuarios[i][0]) == 0) { break; } } if (i == 4) //verifica se o usuario ja excedeu as 3 tentativas printf("Usuário não existente\n"); else { tabelaContadores[i][0] = 0;//reseta a tabela de contagem do usuario solicitado printf("Usuario %s desbloqueado\n", nome); } } else { printf("Senha incorreta!\n"); } } else { //tratamento para usuario abaixo for (i = 0; i < 4; i++) { if (str_cmp(nome, & tabelaUsuarios[i][0]) == 0) { break; } } if (i == 4) //verifica se o usuario ja excedeu as 3 tentativas printf("Usuário não existente\n"); else { printf("Entre com a senha de %s\n", nome); scanf("%s", senha); if (str_cmp(senha, & tabelaSenhas[i][0]) == 0 && tabelaContadores[i][0] < 3) { printf("abrir a porta\n"); } else if (tabelaContadores[i][0] < 3) { tabelaContadores[i][0]++; printf("Contagem: %d\n", tabelaContadores[i][0]); printf("Senha de %s incorreta\n", nome); } else { printf("Usuario Bloqueado!!\n"); } } } } }
int matriz_megasena[10][6];
Solução - Exercicio 06 //Autor:Victor Cesconetto De Pieri #include <stdio.h> #include <stdlib.h> #include <time.h> #define NUM_JOGOS 10 # define NUMS_MEGA 6 int matriz_jogos[NUM_JOGOS][NUMS_MEGA]; int gerar_num_al() { return (rand() % 60 + 1); } int testar_num(int numero, int vetor[NUMS_MEGA], int limite) //testa o numero a ser colocado no vetor do jogo { int i = 0; for (i = 0; i < limite; i++) { if (vetor[i] == numero) //testa se o numero anterior é igual ao proximo sorteado, se sim, retorna 1 se nao retorna 0 return 1; } return 0; } void ordenar_vetor(int vetor[NUMS_MEGA]) // ordena o vetor do jogo em ordem crescente { int i, j; int aux = 0; for (i = 0; i < NUMS_MEGA; i++) { for (j = 0; j < NUMS_MEGA; j++) { if (vetor[i] < vetor[j]) { aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; } } } } void imprimir_matriz() //imprime a matriz dos jogos { int i, j; for (i = 0; i < NUM_JOGOS; i++) { for (j = 0; j < NUMS_MEGA; j++) printf("%d ", matriz_jogos[i][j]); printf("\n"); } } int gerar_jogo(int num_jogo) //gera o jogo numero por numero { int i, num_al; matriz_jogos[num_jogo][0] = gerar_num_al(); for (i = 1; i < 6; i++) { do { num_al = gerar_num_al(); } while (testar_num(num_al, matriz_jogos[num_jogo], i)); //faz o teste se retorna 1 continua o sorteio ate aparecer um numero diferente do anterior matriz_jogos[num_jogo][i] = num_al; } } main() { int i; srand(time(NULL)); //pega o numero randomico usando como seed o relogio for (i = 0; i < NUM_JOGOS; i++) { gerar_jogo(i); ordenar_vetor(matriz_jogos[i]); } imprimir_matriz(); }
7. Melhorar o exercício anterior para evitar que dois jogos sejam iguais.
Solução - Exercicio 07 8. Melhorar o exercício anterior para evitar que uma aposta tenha dois números na mesma dezena.
Solução - Exercicio 08 //Autor: Victor Cesconetto De Pieri #include <stdio.h> #include <stdlib.h> #include <time.h> #define NUM_JOGOS 10 #define NUMS_MEGA 6 int matriz_jogos[NUM_JOGOS][NUMS_MEGA]; int gerar_num_al() { return (rand() % 60 + 1); } int testar_num(int numero, int vetor[NUMS_MEGA], int limite) //testa o numero a ser colocado no vetor do jogo { int i = 0; for (i = 0; i < limite; i++) { if (vetor[i] == numero || (vetor[i] / 10) == (numero / 10)) //testa se o numero anterior é igual ou existe dezena igual ao proximo sorteado, se sim, retorna 1 se nao retorna 0 return 1; } return 0; } void ordenar_vetor(int vetor[NUMS_MEGA]) // ordena o vetor do jogo em ordem crescente { int i, j; int aux = 0; for (i = 0; i < NUMS_MEGA; i++) { for (j = 0; j < NUMS_MEGA; j++) { if (vetor[i] < vetor[j]) { aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; } } } } void imprimir_matriz() //imprime a matriz dos jogos { int i, j; for (i = 0; i < NUM_JOGOS; i++) { for (j = 0; j < NUMS_MEGA; j++) printf("%d ", matriz_jogos[i][j]); printf("\n"); } } int gerar_jogo(int num_jogo) //gera o jogo numero por numero { int i, num_al; matriz_jogos[num_jogo][0] = gerar_num_al(); for (i = 1; i < 6; i++) { do { num_al = gerar_num_al(); } while (testar_num(num_al, matriz_jogos[num_jogo], i)); //faz o teste se retorna 1 continua o sorteio ate aparecer um numero diferente do anterior matriz_jogos[num_jogo][i] = num_al; } } main() { int i; srand(time(NULL)); //pega o numero randomico usando como seed o relogio for (i = 0; i < NUM_JOGOS; i++) { gerar_jogo(i); ordenar_vetor(matriz_jogos[i]); } imprimir_matriz(); }
9. Melhorar o exercício anterior para evitar que uma mesma aposta tenha números consecutivos.
Solução - Exercicio 09 10. Melhorar o exercício anterior colocando um switch para o usuário colocar as opções acima.
Solução - Exercicio 10
Solução - Exercicio 01 |
---|
//Autor: Victor Cesconetto De Pieri
#include <stdio.h>
#define DIM_1 2
#define DIM_2 3
void main()
{
int mA[DIM_1][DIM_2]={ 10,20,30,
30,20,10},
mB[DIM_1][DIM_2]={1,2,3,
3,2,1},
mSoma[DIM_1][DIM_2];
int i,j, soma=0;
float media;
for(i=0;i<DIM_1;i++){
for(j=0;j<DIM_2;j++) {
mSoma[i][j] = mA[i][j] + mB[i][j];
soma = soma + mSoma[i][j];
}
}
media = soma/(DIM_1 * DIM_2);
printf("Media : %f\n",media);
}
|
Solução - Exercicio 02 |
---|
//Autor: Victor Cesconetto De Pieri
#include <stdio.h>
#define DIM_1 3
#define DIM_2 3
void main()
{
float mA[DIM_1][DIM_2];
int i,j;
float detA,diagPrin,diagSec;
for(i=0;i<DIM_1;i++){
for(j=0;j<DIM_2;j++){
printf("Digite o valor mA[%d][%d] da matriz: \n",i,j);
scanf("%f",&mA[i][j]);
}
}
//formula para calcular o determinante 3x3
diagPrin = (mA[0][0]*mA[1][1]*mA[2][2]) + (mA[0][1]*mA[1][2]*mA[2][0]) + (mA[0][2]*mA[1][0]*mA[2][1]);
diagSec = (mA[2][0]*mA[1][1]*mA[0][2]) + (mA[2][1]*mA[1][2]*mA[0][0]) + (mA[2][2]*mA[1][0]*mA[0][1]);
detA = diagPrin - diagSec;
printf("Determinante : %f\n",detA);
}
|