Você está na página 1de 7

Agrupamento de Escolas da Batalha

160301

Curso: TPGSI Disciplina: PSI

Ano: 2 Mdulo: 10

Ano Letivo: 2013/2014 Data: ___ /___ /___

FICHA DE AVALIAO PRTICA #1


Objetivos: Manuseamento de vetores e matrizes.

Enunciado:
Elabora um programa que simule um sorteio do Euromilhes. O apostador dever indicar a sua aposta (cinco nmeros compreendidos entre 1 e 50 e duas estrelas constitudas por nmeros entre 1 e 9). O programa dever permitir receber at 10 apostas. Este programa dever ainda efetuar o sorteio da chave vencedora e, de seguida, indicar os nmeros premiados do boletim do apostador.

Proposta de interface:

-1-

Agrupamento de Escolas da Batalha

160301

Dicas para implementao: Utilizar objetos DataGridView para apresentar os nmeros e estrelas da aposta, os nmeros do boletim e os nmeros da chave. A configurao dos objetos DataGridView devem ser realizados no procedimento Form_Load. As propriedades que permitam o utilizador alterar cada DataGridView devem estar preenchidas com o valor False. A propriedade Columns em cada DataGridView deve ter uma largura (Width) igual a 30 e o tamanho de letra (Font) igual a 14pts. A aposta do jogador faz-se clicando sobre o nmero e estrela pretendida. Para isso deves usar o mtodo CellContent_Click do objeto DataGridView. Ao pressionar um nmero e estrela a respetiva clula dever mudar o fundo, permitindo assim visualizar melhor o que foi seleccionado. Usa o mtodo CurrentCell.Style.BackColor para o efeito. Deve ser apresentado uma mensagem sempre que o nmero presssionado j tiver sido escolhido, assim como no caso da estrela. Quando o jogador pressionar no boto Apostar este deve verificar se foram selecionados 5 nmeros e 2 estrelas e se existem linhas livres no boletim. S aps esta verificao que os nmeros devem ser armazenados na matriz e escritas no boletim. Para ordenar um vetor ou matriz usa a classe Array.Sort. Exemplo: Array.Sort(vetor) A simulao da chave deve ser feita usando um processo aleatrio. Por exemplo, para gerar nmero aleatrios at 50:
Randomize() numero = Int((50 * Rnd()) + 1)

Cria um procedimento para limpar as clulas selecionadas aps ter sido submetida uma aposta.

-2-

Agrupamento de Escolas da Batalha

160301

RESOLUO
Public Class Form1 'variveis globais para controlar a quantidade de numeros inseridos, 'numero de estrelas inseridos e apostas inseridas Dim ctdNumero As Integer Dim ctdEstrela As Integer Dim linhaBoletim As Integer 'Declarao de estruturas de dados para armazenar os dados inseridos 'e gerados pelo sistema Dim boletim(6, 9) As Integer Dim sorteioNumeros(4) As Integer Dim sorteioEstrelas(1) As Integer Dim aposta(4) As Integer Dim estrelas(1) As Integer

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles _ Me.Load Dim numero As Integer 'configurao dos objetos DataGridView: numero de linhas GrelhaNumeros.Rows.Add(10) GrelhaEstrelas.Rows.Add(3) GrelhaBoletim.Rows.Add(10) GrelhaSorteio.Rows.Add(1)

'configurao do objeto GrelhaNumeros com a insero em cada 'uma das clulas de um numero sequencial entre 1 e 50 For linha = 0 To 9 For coluna = 0 To 4 numero += 1 GrelhaNumeros.Item(coluna, linha).Value = numero GrelhaNumeros.Item(coluna, linha).Selected = False Next Next numero = 0 'configurao do objeto GrelhaEstrelas com a insero em cada 'uma das clulas de um numero sequencial entre 1 e 9 For linha = 0 To 2 For coluna = 0 To 2 numero += 1 GrelhaEstrelas.Item(coluna, linha).Value = numero GrelhaEstrelas.Item(coluna, linha).Selected = False Next Next End Sub Private Sub GrelhaNumeros_CellContentClick(ByVal sender As System.Object, ByVal e As _ System.Windows.Forms.DataGridViewCellEventArgs) Handles GrelhaNumeros.CellContentClick 'verificar se a clula j foi selecionada atravs da cor de fundo If GrelhaNumeros.CurrentCell.Style.BackColor <> Color.ForestGreen Then If ctdNumero <= 4 Then

-3-

Agrupamento de Escolas da Batalha

160301

'guardar o nmero no array e colocar a clula como selecionada, 'caso o jogador ainda no tenha indica os cinco nmeros aposta(ctdNumero) = GrelhaNumeros.CurrentCell.Value ctdNumero += 1 GrelhaNumeros.CurrentCell.Selected = False GrelhaNumeros.CurrentCell.Style.BackColor = Color.ForestGreen 'aps a indicao dos cinco nmeros, o objeto fica 'inativo e o array com os nmeros ordenado If ctdNumero = 5 Then GrelhaNumeros.Enabled = False Array.Sort(aposta) End If End If Else 'mensagem a alertar que o nmero j foi selecionado MsgBox("Este nmero j foi seleccionado", MsgBoxStyle.OkOnly + _ MsgBoxStyle.Information, "Aviso") End If End Sub Private Sub GrelhaEstrelas_CellContentClick(ByVal sender As System.Object, ByVal e As _ System.Windows.Forms.DataGridViewCellEventArgs) Handles GrelhaEstrelas.CellContentClick If GrelhaEstrelas.CurrentCell.Style.BackColor <> Color.ForestGreen Then If ctdEstrela <= 1 Then 'guardar o nmero no array e colocar a clula como selecionada, 'caso o jogador ainda no tenha indica as duas estrelas estrelas(ctdEstrela) = GrelhaEstrelas.CurrentCell.Value ctdEstrela += 1 GrelhaEstrelas.CurrentCell.Selected = False GrelhaEstrelas.CurrentCell.Style.BackColor = Color.ForestGreen 'aps a indicao das duas estrelas, o objeto fica 'inativo e o array com os nmeros ordenado If ctdEstrela = 2 Then GrelhaEstrelas.Enabled = False Array.Sort(estrelas) End If End If Else 'mensagem a alertar que o nmero estrela j foi selecionado MsgBox("Esta estrela j foi seleccionada", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "Aviso") End If End Sub Private Sub btnLancar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnLancar.Click 'verificar se a chave est completa, atravs do contedo das variveis If ctdNumero = 5 And ctdEstrela = 2 Then 'verificar se possvel acrescentar mais uma aposta ao boletim If linhaBoletim <= 9 Then 'formatar as clulas da grelhaBoletim e escrever os nmeros no GrelhaNumeros 'no final sao guardados no array multidimensional os dados desta aposta For coluna = 0 To 4 GrelhaBoletim.Item(coluna, linhaBoletim).Selected = False GrelhaBoletim.Item(coluna, linhaBoletim).Style.BackColor = _ Color.WhiteSmoke GrelhaBoletim.Item(coluna, linhaBoletim).Value = aposta(coluna)

-4-

Agrupamento de Escolas da Batalha

160301

boletim(coluna, linhaBoletim) = aposta(coluna) Next 'formatar clulas da grelhaBoletim e escrever as estrelas no GrelhaEstrelas 'no final sao guardados no array multidimensional (ltimas duas colunas) 'os dados desta aposta For coluna = 0 To 1 GrelhaBoletim.Item(coluna + 5, linhaBoletim).Style.BackColor = _ Color.Yellow GrelhaBoletim.Item(coluna + 5, linhaBoletim).Value = estrelas(coluna) boletim(coluna + 5, linhaBoletim) = estrelas(coluna) Next End If limparGrelhas() linhaBoletim += 1 Else ' apresentada uma mensagem de erro caso o utilizador tente lanar uma aposta incompleta MsgBox("A chave encontra-se incompleta", MsgBoxStyle.OkOnly + _ MsgBoxStyle.Information, "Aviso") End If End Sub Private Sub btnAnular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnAnular.Click ' chamado o procedimento limparGrelhas responsvel por preparar o 'ambiente para receber uma nova aposta limparGrelhas() End Sub Private Sub btnSimular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnSimular.Click Dim numero, estrela As Integer Dim numeroCerto, estrelaCerta As Boolean 'este conjunto de instrues permite gerar cinco nmeros aleatrios 'diferentes compreendidos entre 1 e 50 For ctd = 0 To 4 Randomize() Do numeroCerto = True numero = Int((50 * Rnd()) + 1) For ctd2 = 0 To 4 If numero = sorteioNumeros(ctd2) Then numeroCerto = False End If Next Loop Until numeroCerto = True sorteioNumeros(ctd) = numero Next

'este conjunto de instrues permite gerar cinco nmeros estrelas aleatrios 'diferentes compreendidos entre 1 e 9 For ctd = 0 To 1 Randomize() Do estrelaCerta = True

-5-

Agrupamento de Escolas da Batalha

160301

estrela = Int((9 * Rnd()) + 1) For ctd2 = 0 To 1 If estrela = sorteioEstrelas(ctd2) Then estrelaCerta = False End If Next Loop Until estrelaCerta = True sorteioEstrelas(ctd) = estrela Next 'so ordenados os nmeros e estrelas gerados Array.Sort(sorteioNumeros) Array.Sort(sorteioEstrelas) 'este ciclo permite escrever os numeros gerados na GrelhaSorteio For ctd = 0 To 4 GrelhaSorteio.Item(ctd, 0).Style.BackColor = Color.WhiteSmoke GrelhaSorteio.Item(ctd, 0).Value = sorteioNumeros(ctd) GrelhaSorteio.Item(ctd, 0).Selected = False Next 'este ciclo permite escrever For ctd = 0 To 1 GrelhaSorteio.Item(ctd + GrelhaSorteio.Item(ctd + GrelhaSorteio.Item(ctd + Next as estrelas geradas na GrelhaSorteio 5, 0).Style.BackColor = Color.Yellow 5, 0).Value = sorteioEstrelas(ctd) 5, 0).Selected = False

'este conjunto de instrues dentro destes ciclos de repetio permite percorrer 'a GrelhaBoletim e verificar se existe algum nmero gerado anteriormente. 'caso exista, evidenciado com uma cor de fundo For numero = 0 To 4 For linha = 0 To 9 For coluna = 0 To 4 If sorteioNumeros(numero) = boletim(coluna, linha) Then GrelhaBoletim.Item(coluna, linha).Style.BackColor = Color.DeepPink End If Next Next Next 'verifica as duas ultimas colunas para ver se existe uma estrela igual ao gerado no sorteio For numero = 0 To 1 For linha = 0 To 9 For coluna = 5 To 6 If sorteioNumeros(numero) = boletim(coluna, linha) Then GrelhaBoletim.Item(coluna, linha).Style.BackColor = Color.DeepPink End If Next Next Next End Sub Public Sub limparGrelhas() For linha = 0 To 9 For coluna = 0 To 4 GrelhaNumeros.Item(coluna, linha).Style.BackColor = Color.WhiteSmoke GrelhaNumeros.Item(coluna, linha).Selected = False Next

-6-

Agrupamento de Escolas da Batalha

160301

Next For linha = 0 To 2 For coluna = 0 To 2 GrelhaEstrelas.Item(coluna, linha).Style.BackColor = Color.WhiteSmoke GrelhaEstrelas.Item(coluna, linha).Selected = False Next Next GrelhaNumeros.Enabled = True GrelhaEstrelas.Enabled = True ctdNumero = 0 ctdEstrela = 0 End Sub End Class

-7-