Exercícios Resolvidos de Alocação dinâmica de memória

Ver Teoria

Enunciado

Escreva um programa que leia primeiro os 6 números gerados pela loteria e depois os 6 números do seu bilhete. O programa então compara quantos números o jogador acertou. Em seguida, ele aloca espaço para um vetor de tamanho igual a quantidade de números corretos e guarda os números corretos nesse vetor. Finalmente, o programa exibe os números sorteados e os seus números corretos.

Passo 1

Vambora!

A questão quer que a gente receba dois arrays do usuário, e depois aloque um array dinâmico que contenha a os números que pertencem às duas arrays originais. Então a gente vai precisar realizar loops para preencher as arrays, e um loop que vai procurar os números iguais nas duas arrays.

Então vamos começar declarando as variáveis necessárias. Primeiro uma array de inteiros chamada n u m S o r t e a d o s que vai conter os seis números da loteria. Depois uma outra array de inteiros chamada n u m A p o s t a d o s que vai conter os seis números que o usuário escolheu.

Para criar uma array dinâmica, a gente precisa saber quantos números o usuário acertou, então vamos criar uma variável inteira chamada q t d A c e r t o s que vamos usar pra contar a quantidade de acertos do usuário. O endereço de memória do array dinâmico precisa ser armazenado em um ponteiro, que vamos chamar de n u m A c e r t a d o s . E, por último, vamos precisar de duas variáveis i e j que vamos usar para criar os loops!

Passo 2

Primeiro de tudo, vamos perguntar pro usuário quais foram os números sorteados na loteria. Ou seja, vamos pedir pra ele preencher a array n u m S o r t e a d o .

Pra isso vamos criar um loop de seis voltas, que a cada iteração vai pedir pro usuário inserir um número, e armazenar o valor digitado na posição correspondente da array.

E em seguida, vamos fazer o mesmo processo para preencher o array que contém os números que o usuário escolheu:

Passo 3

Certo, agora vamos pra uma parte mais complicadinha da questão. Vamos precisar contabilizar a quantidade de acertos do usuário. Pra isso vai ser necessário um loop aninhado e uma estrutura condicional.

O primeiro loop vai percorrer os seis valores da array n u m A p o s t a d o s , dentro desse loop vamos criar um segundo loop que percorre os seis valores da array n u m S o r t e a d o .

Dentro do loop vamos estabelecer uma condição de que se o número apostado atual, for igual ao número sorteado atual, então a gente aumenta o valor da variável q t d A c e r t o s .

Uma coisa interessante de se lembrar é que numa loteria não é possível que o mesmo número seja sorteado ou apostado duas vezes! Então podemos usar o comando b r e a k para interromper o loop de números sorteados, e partir para o próximo número apostado!

Passo 4

Prontinho! Agora que já temos a quantidade de acertos, podemos criar o nosso array dinâmico com o tamanho adequado!

Vamos usar o operador n e w   [   ] para iniciar um array de inteiros com o tamanho da variável q t d A c e r t o s

Pronto! Agora vamos poder utilizar o ponteiro n u m A c e r t a d o s para acessar os endereços do array alocado dinamicamente!

Passo 5

Agora precisamos preencher o array dinâmico com os números acertados pelo usuário.

Pra isso vamos usar novamente a mesma estrutura de loops aninhados com estrutura condicional.

O primeiro loop vai percorrer os seis valores da array n u m A p o s t a d o s , dentro desse loop vamos criar um segundo loop que percorre os seis valores da array n u m S o r t e a d o .

Só que dessa vez, se o número apostado atual, for igual ao número sorteado atual, então a gente vai armazenar esse valor na posição i do array dinâmico n u m A c e r t a d o s !

Passo 6

Agora só precisamos imprimir os números contidos no array dinâmico!

Pra isso é só a gente criar um loop que vai iniciar em zero e avançar até o número q t d A c e r t o s de um em um. E a cada iteração vai exibir o conteúdo da posição i do array dinâmico.

Passo 7

Estamos quase acabando. Mas antes de finalizar a questão, temos que lembrar que sempre que usamos alocação dinâmica, temos que liberar a memória!

Então vamos utilizar o operador d e l e t e   [   ] para apagar o array alocado dinamicamente

E finalizamos a questão!

Resposta