Mudanças entre as edições de "Programação 1 - Engenharia - Arrays Multidimensionais"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 259: Linha 259:
 
</ol>
 
</ol>
  
=Batalha Naval - Uma aplicação de arranjo bidimensional=
+
 
 +
 
 +
 
 +
<!--
 +
{{collapse top | Solução - Função Tiro()}}
 +
<syntaxhighlight lang=c>
 +
//Autor: Victor Cesconetto De Pieri
 +
 
 +
int Tiro() {
 +
  int linha, nao, coluna;
 +
  int i, j;
 +
  for (;;) {
 +
    if (NumeroNavios <= 0) {
 +
      printf("Não existem navios para acertar !\n");
 +
      return 1;
 +
      break;
 +
    } else {
 +
      printf("ATENÇÃO : linhas e colunas vao de 0 a 9\n");
 +
      printf("Entre com a linha: ");
 +
      scanf("%d", & linha);
 +
      printf("Entre com a coluna: ");
 +
      scanf("%d", & coluna);
 +
      if (ZonaDeGuerra[linha][coluna] == 9) { //verifica se ja foi atirado na coordenada passada pelo teclado
 +
        printf("Ja foi atirado nessa coordenada, tente novamente!\n");
 +
      } else {
 +
        if (ContadorTiros < 30) { //verifica se o jogador ja atirou o numero maximo de vezes
 +
          ContadorTiros++;
 +
        } else {
 +
          return 2;
 +
          break;
 +
        }
 +
        if (ZonaDeGuerra[linha][coluna] == 0) {
 +
          ZonaDeGuerra[linha][coluna] = 9; //coloca-se um numero para informar que ja foi atirado nessa posicao
 +
          printf("Não há navios nessa posicao ou ja foram derrubados, voce errou !\n");
 +
        } else {
 +
          switch (ZonaDeGuerra[linha][coluna]) {
 +
          case 1:
 +
            printf("Voce acertou !\n", nome);
 +
            ZonaDeGuerra[linha][coluna] = 9; //coloca-se um numero para informar que ja foi atirado nessa posicao
 +
            PontuacaoFinal = PontuacaoFinal + 10;
 +
            NumeroNavios--;
 +
            break;
 +
          case 2:
 +
            printf("Voce acertou !\n", nome);
 +
            ZonaDeGuerra[linha][coluna] = 9; //coloca-se um numero para informar que ja foi atirado nessa posicao
 +
            PontuacaoFinal = PontuacaoFinal + 3;
 +
            NumeroNavios--;
 +
            break;
 +
          case 3:
 +
            printf("Voce acertou !\n", nome);
 +
            ZonaDeGuerra[linha][coluna] = 9; //coloca-se um numero para informar que ja foi atirado nessa posicao
 +
            PontuacaoFinal = PontuacaoFinal + 5;
 +
            NumeroNavios--;
 +
            break;
 +
          }
 +
        }
 +
      }
 +
    }
 +
  }
 +
}
 +
 
 +
main() {
 +
  int situacao;
 +
 
 +
  printf("Digite seu nome:\n");
 +
  scanf("%s", & nome);
 +
  ZerarMatriz();
 +
  PosicionarNavios();
 +
  ImprimeMatrizEscondida();
 +
 
 +
  situacao = Tiro();//aqui executa a funcao tiro e retorna o valor que corresponde as açoes no switch case abaixo
 +
 
 +
 
 +
  switch (situacao) {
 +
  case 1:
 +
    printf("%s: Você acertou todos os navios\n", nome);
 +
    printf("Sua pontuação é %d\n", PontuacaoFinal);
 +
    break;
 +
  case 2:
 +
    printf("%s: Você atingiu o limite máximo de tiros\n", nome);
 +
    break;
 +
  default:
 +
    printf("Algo deu errado", PontuacaoFinal);
 +
    break;
 +
  }
 +
}
 +
</syntaxhighlight>
 +
{{collapse bottom}}
 +
-->
 +
 
 +
===Matrizes de caracteres e vetores de string=Batalha Naval - Uma aplicação de arranjo bidimensional=
  
  
Linha 426: Linha 516:
  
  
 
+
s===
 
 
 
 
<!--
 
{{collapse top | Solução - Função Tiro()}}
 
<syntaxhighlight lang=c>
 
//Autor: Victor Cesconetto De Pieri
 
 
 
int Tiro() {
 
  int linha, nao, coluna;
 
  int i, j;
 
  for (;;) {
 
    if (NumeroNavios <= 0) {
 
      printf("Não existem navios para acertar !\n");
 
      return 1;
 
      break;
 
    } else {
 
      printf("ATENÇÃO : linhas e colunas vao de 0 a 9\n");
 
      printf("Entre com a linha: ");
 
      scanf("%d", & linha);
 
      printf("Entre com a coluna: ");
 
      scanf("%d", & coluna);
 
      if (ZonaDeGuerra[linha][coluna] == 9) { //verifica se ja foi atirado na coordenada passada pelo teclado
 
        printf("Ja foi atirado nessa coordenada, tente novamente!\n");
 
      } else {
 
        if (ContadorTiros < 30) { //verifica se o jogador ja atirou o numero maximo de vezes
 
          ContadorTiros++;
 
        } else {
 
          return 2;
 
          break;
 
        }
 
        if (ZonaDeGuerra[linha][coluna] == 0) {
 
          ZonaDeGuerra[linha][coluna] = 9; //coloca-se um numero para informar que ja foi atirado nessa posicao
 
          printf("Não há navios nessa posicao ou ja foram derrubados, voce errou !\n");
 
        } else {
 
          switch (ZonaDeGuerra[linha][coluna]) {
 
          case 1:
 
            printf("Voce acertou !\n", nome);
 
            ZonaDeGuerra[linha][coluna] = 9; //coloca-se um numero para informar que ja foi atirado nessa posicao
 
            PontuacaoFinal = PontuacaoFinal + 10;
 
            NumeroNavios--;
 
            break;
 
          case 2:
 
            printf("Voce acertou !\n", nome);
 
            ZonaDeGuerra[linha][coluna] = 9; //coloca-se um numero para informar que ja foi atirado nessa posicao
 
            PontuacaoFinal = PontuacaoFinal + 3;
 
            NumeroNavios--;
 
            break;
 
          case 3:
 
            printf("Voce acertou !\n", nome);
 
            ZonaDeGuerra[linha][coluna] = 9; //coloca-se um numero para informar que ja foi atirado nessa posicao
 
            PontuacaoFinal = PontuacaoFinal + 5;
 
            NumeroNavios--;
 
            break;
 
          }
 
        }
 
      }
 
    }
 
  }
 
}
 
 
 
main() {
 
  int situacao;
 
 
 
  printf("Digite seu nome:\n");
 
  scanf("%s", & nome);
 
  ZerarMatriz();
 
  PosicionarNavios();
 
  ImprimeMatrizEscondida();
 
 
 
  situacao = Tiro();//aqui executa a funcao tiro e retorna o valor que corresponde as açoes no switch case abaixo
 
 
 
 
 
  switch (situacao) {
 
  case 1:
 
    printf("%s: Você acertou todos os navios\n", nome);
 
    printf("Sua pontuação é %d\n", PontuacaoFinal);
 
    break;
 
  case 2:
 
    printf("%s: Você atingiu o limite máximo de tiros\n", nome);
 
    break;
 
  default:
 
    printf("Algo deu errado", PontuacaoFinal);
 
    break;
 
  }
 
}
 
</syntaxhighlight>
 
{{collapse bottom}}
 
-->
 
 
 
===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
 
Um vetor de strings pode ser construído usando matrizes de ''char''. Cada string será armazenada em uma linha do vetor. Exemplo
Linha 1 388: Linha 1 388:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
{{collapse bottom}}
 
{{collapse bottom}}
 +
 +
=Batalha Naval - Uma aplicação de arranjo bidimensional=
 +
 +
 +
[[imagem:PRG29002-BatalhaNaval.jpg|border|750px]]
 +
 +
 +
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úmero de tiros dados e a pontuação obtida.
 +
 +
Veja um possível ESQUELETO DO PROGRAMA:
 +
 +
<syntaxhighlight lang=c>
 +
#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);
 +
  /*
 +
    Implementar aqui o tratamento final da variável situação
 +
  */
 +
}
 +
</syntaxhighlight>

Edição das 09h40min de 10 de outubro 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

  1. 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);
    }
    
  2. 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

  1. 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.
  2. Solução - Exercício 01
  3. Implementar uma programa para calcular o determinante de uma matriz 3x3 (de reais) a ser fornecida pelo teclado.
  4. Solução - Exercício 02
  5. 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 - Exercício 03



==Matrizes de caracteres e vetores de string=Batalha Naval - Uma aplicação de arranjo bidimensional

PRG29002-BatalhaNaval.jpg


Vamos implementar um jogo similar a batalha naval da seguinte forma.

  1. 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.
  2. Crie um contador global de tiros iniciado com 0.
  3. 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).
  4. Ao final do jogo é mostrado o nome do jogador, o número de tiros dados e a pontuação obtida.

Veja um possível ESQUELETO DO PROGRAMA:

#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);
  /*
    Implementar aqui o tratamento final da variável situação
  */
}


s===

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.
  2. 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");   
    }
    
  3. 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.
  4. Solução - Exercício 02
  5. Implementar uma modificação do exercício anterior que permite ao programa ficar em loop até que se entre com userID igual a "fim".
  6. Solução - Exercício 03
  7. 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).
  8. Solução - Exercício 04
  9. 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.
  10. Solução - Exercício 05

    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];
    
    Solução - Exercício 06

    7. Melhorar o exercício anterior para evitar que dois jogos sejam iguais.

    Solução - Exercício 07

    8. Melhorar o exercício anterior para evitar que uma aposta tenha dois números na mesma dezena.

    Solução - Exercício 08

    9. Melhorar o exercício anterior para evitar que uma mesma aposta tenha números consecutivos.

    Solução - Exercício 09

    10. Melhorar o exercício anterior colocando um switch para o usuário colocar as opções acima.