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 258: Linha 258:
  
 
</ol>
 
</ol>
 +
 +
=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>
 +
  
  
Linha 349: Linha 516:
 
-->
 
-->
  
===Matrizes de caracteres e vetores de string=
+
===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
 +
 
 +
<syntaxhighlight lang=c>
 +
#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]);
 +
}
 +
</syntaxhighlight>
 +
 
 +
Note a forma como é realizada a inicialização da matriz.
  
 
=== Exercícios ===
 
=== Exercícios ===
Linha 1 199: 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 09h56min 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

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
  */
}




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.
  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.