BLOg de apoio a aulas de linguagens de ProGRAMAÇÃO
22 novembro 2005
EXERCÍCIO PARA RESOLVER (1)
Este exercício foi distribuído, por mail, no dia 21/10/2005 - 2ª feira. Pretende-se que os alunos o resolvam individualmente e que enviem, para aqui, as suas soluções. As respostas devem estar devidamente identificadas (nome, nº e turma). Data de entrega: até 26 Nov (sábado).
Private Sub Inserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Inserir1.Click Dim Idade As Byte Try Idade = CByte(txtIdade.Text) If (Idade <= 100) And (Idade >= 1) Then Insere1(Idade) Else Throw New ApplicationException("Idade com valor fora do intervalo admitido") End If Catch ex As ApplicationException MsgBox(ex.Message, 64, "Erro na introducao de idade") Catch ex As Exception MsgBox("Não foi introduzida uma idade valida!", 64, "Erro na introducao de idade") End Try End Sub
Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click Dim frase As String Try
For idx As Integer = LBound(Idades) To UBound(Idades) frase += CStr(Idades(idx)) & "," Next Catch ex As Exception MsgBox("Problemas no acesso ao array das idades.", 64, "Erro") End Try MsgBox(frase, 64, "Listagem") End Sub
Private Sub btnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar2.Click Try Dim pos As Integer = txtIdade.Text MsgBox("Idades(" & CStr(pos) & ") = " & CStr(Idades(pos)), 64, "Consulta") Catch ex As System.OverflowException MsgBox("Numero demasiado grande!", 64, "Erro!") Catch ex As System.IndexOutOfRangeException MsgBox("O indice nao existe no vector", 64, "Erro!") Catch ex As Exception MsgBox("Erro inesperado!", 64, "Erro") End End Try End Sub
Module Funcoes Public Idades(1) As Integer Dim NENHUMA As Integer = -1
Sub Insere1(ByVal idd As Byte) Try If (Array.IndexOf(Idades, 0) = NENHUMA) Then If (UBound(Idades) = 3) Then Throw New ApplicationException("Memoria insuficiente") Else ReDim Preserve Idades(UBound(Idades) + 2) End If End If Idades(Array.IndexOf(Idades, 0)) = idd Catch ex As ApplicationException MsgBox(ex.Message, 64, "Erro") Catch ex As Exception MsgBox("Erro inesperado!", 64, "Erro") End Try End Sub End Module
Private Sub Inserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Inserir1.Click Dim idade As Integer Try idade = CInt(TxtIdade.Text) Insere1(idade) Catch ErroDeCast As InvalidCastException MsgBox("1-Idade com dados errados.", , "Erro") Catch ErroIdadeImpossivel As OverflowException MsgBox("2-Valor para a idade não aceite.", , "Erro") Catch ErroDeIdade As ApplicationException When ErroDeIdade.Message = "Idade com valor fora do intervalo admitido." MsgBox("3-" & ErroDeIdade.Message, , "Erro") Finally TxtIdade.Text = "" TxtIdade.Focus() End Try
End Sub
Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click Dim frase As String Try For I As Byte = LBound(Idades) To UBound(Idades) frase = frase & Idades(I).ToString & "," Next MsgBox(frase, MsgBoxStyle.OKOnly, "Listagem") Catch MsgBox("Problemas no acesso ao array das idades.", MsgBoxStyle.OKOnly, "Erro") Finally TxtIdade.Text = "" TxtIdade.Focus() End Try End Sub
Private Sub btnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar2.Click Dim Indice As Byte Dim i As Integer
Try Indice = CByte(TxtIdade.Text) MsgBox("Idades(" + CStr(Indice) + ") =" + CStr(Idades(Indice)), MsgBoxStyle.OKOnly, "Consultar") Catch ex As InvalidCastException MsgBox("Índice inválido.", , "Erro") Catch ex As OverflowException MsgBox("Índice inválido.", , "Erro") Catch ex As IndexOutOfRangeException MsgBox("Índice inválido.", , "Erro") Finally TxtIdade.Text = "" TxtIdade.Focus() End Try End Sub End Class
Module Module1 Public Idades(1) As Integer Sub Insere1(ByVal i As Byte) Dim PosicaoLivre As Byte Dim idx As Integer Try PosicaoLivre = Array.IndexOf(Idades, 0) Idades(PosicaoLivre) = i
Catch ex As OverflowException When UBound(Idades) < 2 ReDim Preserve Idades(UBound(Idades) + 2) PosicaoLivre = UBound(Idades) - 1 Idades(PosicaoLivre) = i Catch ex As OverflowException When UBound(Idades) >= 2 MsgBox("Memoria Insuficiente", , "Erro") End Try End Sub End Module
Private Sub Inserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Inserir1.Click
Dim Idade As Byte
Try Idade = CByte(txtIdade.Text) If Idade < 1 Or Idade > 100 Then _ Throw New ApplicationException("Idade com valor fora do intervalo admitido.") Insere1(Idade) Catch ex1 As InvalidCastException 'no caso de o utilizador por exemplo inserir uma letra MsgBox("1) Idade com dados errados.", , "Erro") Catch ex2 As OverflowException 'no caso de o utilizador inserir um nº negativo MsgBox("2) Valor para a idade não aceite.", , "Erro") Catch ex3 As ApplicationException When ex3.Message = "Idade com valor fora do intervalo admitido." MsgBox("3) " & ex3.Message, , "Erro") Finally txtIdade.Text = "" End Try
End Sub ----------------------------------- Private Sub btnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar2.Click
Dim Indice As Byte
Try Indice = CByte(txtIdade.Text) MsgBox("Idades(" & txtIdade.Text & ") = " & Idades(Indice)) Catch ex As InvalidCastException 'indice não valido por exemplo uma letre MsgBox("1) Índice inválido.", , "Erro") Catch ex As OverflowException 'indice não valido por exemplo -1 MsgBox("2) Índice inválido.", , "Erro") Catch ex As IndexOutOfRangeException 'indice fora do intervalo [o,1] MsgBox("3) Índice inválido.", , "Erro") Finally txtIdade.Text = "" End Try
End Sub ----------------------------------- Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click
Dim Frase As String = "Idades: "
Try If LBound(Idades) <> 0 Then For I As Byte = LBound(Idades) To UBound(Idades) Frase = Frase & Idades(I).ToString & "#" Next MsgBox(Frase) Else MsgBox("Insira 1º as Idades") end if Catch 'como 1 byte só pode armazenar números entre 0 e 255 pode acontecer uma excepção MsgBox("Problemas no acesso ao array das idades.", , "Erro") Finally txtIdade.Text = "" End Try
End Sub
----------------------------------- Module Module1 Public Idades(1) As Integer
Sub Insere1(ByVal n As Byte)
Dim PosiçãoLivre As Byte
Try PosiçãoLivre = Array.IndexOf(Idades, 0) 'posiciona-se no 1º indice livre Idades(PosiçãoLivre) = n Catch ex As OverflowException When UBound(Idades) < 2 ReDim Preserve Idades(UBound(Idades) + 2) PosiçãoLivre = UBound(Idades) - 1 Idades(PosiçãoLivre) = n Catch ex As OverflowException When UBound(Idades) >= 2 MsgBox("Memoria Insuficiente", , "Erro") End Try
Private Sub btnInserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir1.Click Dim Idade As Byte Try Idade = CInt(TextBox1.Text) If Idade < 1 Or Idade > 100 Then MsgBox("Insira uma idade entre 1 e 100.", MsgBoxStyle.Information, "Erro")
End If Insere1(Idade)
Catch Erro As OverflowException MsgBox(" Idade não aceite.", MsgBoxStyle.OKOnly, "Erro")
End Try End Sub
Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click Dim numeros As String Try For x As Byte = LBound(Idades) To UBound(Idades) numeros = numeros & Idades(x).ToString & "," Next MsgBox(numeros, MsgBoxStyle.OKOnly, "Listagem") Catch MsgBox("Problemas no acesso ao array das idades.", MsgBoxStyle.OKOnly, "Erro") End Try End Sub
Private Sub btnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar2.Click Dim indice As Byte Try indice = CByte(TextBox1.Text) MsgBox("Idades(" + CStr(indice) + ") =" + CStr(Idades(indice)), MsgBoxStyle.OKOnly, "Exercício OnError1") Catch MsgBox("Índice inválido.", MsgBoxStyle.OKOnly, "Erro") End Try End Sub End Class
Module Module1 Public Idades(1) As Integer Sub Insere1(ByVal i As Byte) Dim PosicaoLivre As Byte
Try PosicaoLivre = Array.IndexOf(Idades, 0) Idades(PosicaoLivre) = i
Catch When UBound(Idades) < 2 ReDim Preserve Idades(UBound(Idades) + 2) PosicaoLivre = UBound(Idades) - 1 Idades(PosicaoLivre) = i Catch When UBound(Idades) >= 2 MsgBox("Memoria Insuficiente", MsgBoxStyle.OKOnly, "Erro") End Try End Sub End Module
Private Const Limite_Inferior_Idade As Byte = 1 Private Const Limite_Superior_Idade As Byte = 100
#Region "Load_Form" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load btnConsultar.Enabled = False btnListar.Enabled = False End Sub #End Region
#Region "Botão_Inserir" Private Sub btnInserir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir.Click Dim Idade As Byte Try Try Idade = CByte(Txt1.Text) If (Idade < Limite_Inferior_Idade Or Idade > Limite_Superior_Idade) Then _ Throw New Exception("Idade com valor fora do intervalo admitido") Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OKOnly, "Inserir(Form)") Configura_TextBox() Exit Sub End Try Insere1(Idade) Configura_TextBox() btnConsultar.Enabled = True btnListar.Enabled = True Catch f As Exception MsgBox(f.Message, MsgBoxStyle.Critical + MsgBoxStyle.OKOnly, "Inserir(Modulo)") Configura_TextBox() End Try End Sub #End Region
#Region "Botão_Consultar" Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click Dim Indice As Byte Dim Frase As String Try Indice = CByte(Txt1.Text) Frase = "Idades(" & Indice.ToString & ")=" & Idades(Indice).ToString MsgBox(Frase, MsgBoxStyle.Information + MsgBoxStyle.OKOnly, "Consultar Indice") Configura_TextBox() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OKOnly, "Consultar Indice") Configura_TextBox() End Try End Sub #End Region
#Region "Botão_Listar" Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click Dim Frase As String Try For Each i As Byte In Idades Frase = Frase & i & "," Next i MsgBox(Frase, MsgBoxStyle.Information + MsgBoxStyle.OKOnly, "Listagem") Catch ex As Exception MsgBox("Problemas no acesso ao array das idades", MsgBoxStyle.Critical + MsgBoxStyle.OKOnly, "Erro") End Try End Sub #End Region
#Region "Auxiliar" Private Sub Configura_TextBox() Txt1.Text = "" Txt1.Focus() End Sub #End Region
--> Módulo
Module Auxiliar
Public Idades(1) As Integer Private Restrição As Boolean = False Private Const Num_Elementos_Vector As Integer = 4 Private Const Posições_Acrescentar As Integer = 2
#Region "Insere1" Friend Sub Insere1(ByVal i As Byte) Dim PosiçãoLivre As Byte Dim aux As Integer If (Restrição = False) Then PosiçãoLivre = CByte(Array.IndexOf(Idades, 0)) aux = CInt(UBound(Idades)) If (Idades.Length = PosiçãoLivre + 1 And _ Idades.Length <> Num_Elementos_Vector) Then ReDim Preserve Idades(aux + Posições_Acrescentar) PosiçãoLivre = CByte(Array.IndexOf(Idades, 0)) Idades(PosiçãoLivre) = CInt(i) ElseIf (Idades.Length = PosiçãoLivre + 1 And Idades.Length = Num_Elementos_Vector) Then PosiçãoLivre = CByte(Array.IndexOf(Idades, 0)) Idades(PosiçãoLivre) = CInt(i) Restrição = True Else PosiçãoLivre = CByte(Array.IndexOf(Idades, 0)) Idades(PosiçãoLivre) = CInt(i) End If Else Throw New Exception("Memória insuficiente") Exit Sub End If End Sub #End Region
Catch ex As Exception MsgBox("Problemas no acesso ao array das idades.", MsgBoxStyle.Critical, "Erro")
End Try
End Sub
Private Sub Consultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Consultar2.Click Dim Indice As Byte Indice = UBound(Idades)
End Sub ------------------------------------------------------------
Module Module1 Public Idades(1) As Integer
Sub Insere1(ByVal i As Byte) Dim PosiçãoLivre As Byte
If Idades(PosiçãoLivre) <= 2 Then For PosiçãoLivre = 0 To UBound(Idades) Idades(PosiçãoLivre) = i Next Else Try ReDim Preserve Idades(3) Catch ex As Exception MsgBox("Memória Insuficiente") End Try
End If Array.IndexOf(Idades, 0)
End Sub
Public Function VectorVazio(ByVal v() As Integer) As Boolean Dim x As Integer
On Error GoTo TRATAMENTO x = UBound(v) VectorVazio = False Exit Function TRATAMENTO: VectorVazio = True
End Function
Public Function EscreverListagem(ByVal idades() As Integer) As String Dim idx As Byte, ret As String
ret = " " If Not VectorVazio(idades) Then For idx = LBound(idades) To UBound(idades) If (idx = 0) Then ret = CStr(idades(idx)) Else ret = ret + " , " + CStr(idades(idx))
End If Next End If EscreverListagem = ret
End Function
Public Function EscreverUltimoNumero(ByVal idades() As Integer) As String Dim idx As Byte, ret As String
ret = " " If Not VectorVazio(idades) Then For idx = LBound(idades) To UBound(idades) If (idx = 0) Then ret = CStr(idades(idx)) Else ret = CStr(idades(idx))
Public Class Form1 Inherits System.Windows.Forms.Form
Private Sub btnInserir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir.Click Dim Idade As Byte
Try Idade = CByte(txtIdade.Text) If Idade < 1 Or Idade > 100 Then Throw New ApplicationException("Idade com valor fora do intervalo admitido.") End If Insere1(Idade) Catch Erro1 As OverflowException MsgBox("2 Valor impossivel.", , "Erro") Catch Erro2 As InvalidCastException MsgBox("1 Valor não numérico.", , "Erro") Catch Erro3 As ApplicationException When Erro3.Message = "Idade com valor fora do intervalo admitido." MsgBox("3 " & Erro3.Message, , "Erro") End Try
End Sub
Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click Dim Indice As Byte
Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click Dim Lista As String
Try For I As Byte = LBound(Idades) To UBound(Idades) Lista = Lista & " " & Idades(I).ToString & "," Next MsgBox(Lista) Catch MsgBox("Problemas no acesso ao array das idades.", , "Erro") End Try
End Sub End Class
Module Module1 Public Idades(1) As Integer
Sub Insere1(ByVal i As Byte) Dim PosiçãoLivre As Byte
Try PosiçãoLivre = Array.IndexOf(Idades, 0) Idades(PosiçãoLivre) = i Catch erro As OverflowException When UBound(Idades) < 2 ReDim Preserve Idades(UBound(Idades) + 2)
PosiçãoLivre = UBound(Idades) - 1 Idades(PosiçãoLivre) = i Catch erro As OverflowException When UBound(Idades) >= 2
Public Class Form1 Inherits System.Windows.Forms.Form
Private Sub btnInserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir1.Click Dim idade As Byte Try idade = CByte(txtidade.Text) If idade < 1 Or idade > 100 Then Err.Raise(1000, , "Idade com valor fora do intervalo admitido.") End If Insere1(idade) txtidade.Text = "" : txtidade.Focus() Exit Sub Catch ex1 As InvalidCastException MsgBox(ex1.Message) Catch ex2 As Exception MsgBox(ex2.Message) Finally txtidade.Text = "" : txtidade.Focus() End Try End Sub
Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click Dim A As String = "" Try For I As Byte = LBound(Idades) To UBound(Idades) A = A & Idades(I).ToString & "," Next MsgBox(A) Exit Sub Catch ex1 As Exception MsgBox(ex1.Message) End Try End Sub
Private Sub btnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar2.Click Dim Indice As Byte On Error GoTo TrataErro Indice = CByte(txtidade.Text) MsgBox("Idades(" & txtidade.Text & ") = " & Idades(Indice)) txtidade.Text = "" : txtidade.Focus() Exit Sub TrataErro: If TypeOf Err.GetException Is IndexOutOfRangeException Then Err.Description = "Índice fora dos limites do array" ElseIf TypeOf Err.GetException Is InvalidCastException Then Err.Description = "Índice inválido." End If MsgBox(Err.Description) txtidade.Text = "" : txtidade.Focus() End Sub End Class
Private Sub Inserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Inserir1.Click Dim Idade As Byte Try ' Esta Sub deve: ' 1 - Obter em Idade o valor colocado na TextBox Idade = CType(Text1.Text, Byte) ' 2 - Se essa idade não pertencer a [1,100], produzir um erro com a mensagem "Idade com valor fora do intervalo admitido." If Idade > 100 Or Idade < 1 Then Throw New OverflowException("Idade com valor fora do intervalo admitido.") End If ' - se pertencer, invoca Insere1(Idade) (uma função a criar num Módulo) Module1.Insere1(Idade) ' 3 - Estas operações devem estar protegidas contra erros de runtime, sinalizados com mensagens adequadas
Catch ex As InvalidCastException MsgBox("Só são admitidos números inteiros entre 1 e 100 inclusivé!") Text1.Text = "" Catch ex As OverflowException MsgBox("Idade com valor fora do intervalo admitido.") Text1.Text = "" Catch ex As Exception MsgBox(ex.Message) End Try End Sub
Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click ' Sub que lista os elementos do vector Idades, ' com suporte de tratamento de erros contra excepções genéricas: ' ..... se acontecer um erro, fazer aparecer caixa com a mensagem "Problemas no acesso ao array das idades." e o título "Erro" vá ao Help ver a sintaxe do comando MsgBox) Try Dim mensagem As String Dim IndiceLivre As Integer IndiceLivre = Array.IndexOf(Idades, 0) If IndiceLivre = 0 Then Throw New OverflowException("O Vector não tem elementos!") End If IndiceLivre = UBound(Idades) If IndiceLivre = Array.IndexOf(Idades, 0) Then IndiceLivre = IndiceLivre - 1 End If For c As Integer = 0 To IndiceLivre mensagem = mensagem + CStr(Idades(c)) + "," Next c MsgBox(mensagem) Catch ex As OverflowException MsgBox(ex.Message) Text1.Text = "" Catch ex As Exception MsgBox("Problemas no acesso ao array das idades.", MsgBoxStyle.OKOnly, "Erro") Text1.Text = "" End Try End Sub
Private Sub BtnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConsultar2.Click ' Esta Sub obtém em Indice o valor da TextBox ' e depois mostra, numa caixa de mensagem, o valor da idade do elemento indicado. ' Estas instruções devem estar protegidas contra erros de runtime. Try Dim Indice As Byte Indice = CType(Text1.Text, Byte) MsgBox(CStr("Idades(" & CStr(Indice) & ")=" & Idades(Indice))) Catch ex As IndexOutOfRangeException MsgBox("O indice que introduziu não é válido! O Indice deverá ser um número inteiro entre 0 e 3 inclusivé!", MsgBoxStyle.OKOnly, "ERRO") Catch ex As InvalidCastException MsgBox("O Indice deverá ser um número inteiro entre 0 e 3 inclusivé!", MsgBoxStyle.OKOnly, "ERRO") Catch ex As Exception MsgBox(ex.Message) End Try ' Etc End Sub
(Módulo) Sub Insere1(ByVal i As Byte) Dim PosiçãoLivre As Byte ' para se saber a 1ª posição livre do array Try If decisao < 0 Then Throw New OverflowException("Memória insuficiente.") End If Try PosiçãoLivre = CType(Array.IndexOf(Idades, 0), Byte) Catch ex As OverflowException ReDim Preserve Idades((UBound(Idades)) + 2) PosiçãoLivre = Array.IndexOf(Idades, 0) End Try Idades(PosiçãoLivre) = CType(i, Integer) If CInt(PosiçãoLivre) >= 3 Then Idades(PosiçãoLivre) = CType(i, Integer) decisao = -1 End If Catch ex As OverflowException MsgBox(ex.Message) End Try ' Etc
Public Class Form1 Inherits System.Windows.Forms.Form
Private Sub BtnInserir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnInserir.Click Dim Idade As Byte
Try Idade = CByte(TxtInsere.Text)
If Idade < 1 Or Idade > 100 Then Throw New ApplicationException("Idade com valor fora do intervalo admitido.") Insere(Idade)
Catch ex1 As InvalidCastException MsgBox("Idade com dados errados", MsgBoxStyle.Exclamation, "Erro") Catch ex2 As OverflowException MsgBox("Valor para idade não é válido", MsgBoxStyle.Exclamation, "Erro") Catch ex3 As ApplicationException When ex3.Message = "Idade com valor fora do intervalo admitido." MsgBox(ex3.Message, MsgBoxStyle.Exclamation, "Erro") Catch ex4 As ApplicationException When ex4.Message = "Memória insuficiente." MsgBox(ex4.Message, MsgBoxStyle.Exclamation, "Erro") Finally TxtInsere.Text = "" End Try
End Sub
Private Sub BtnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConsultar.Click Dim Indice As Byte
Try Indice = CByte(TxtInsere.Text) MsgBox("Idades (" & TxtInsere.Text & ") =" & Idades(Indice)) Catch ex1 As InvalidCastException MsgBox("Índice introduzido não é válido", , "Erro") Catch ex2 As OverflowException MsgBox("O Índice introduzido não está entre o intervalo definido", , "Erro") Catch ex3 As IndexOutOfRangeException MsgBox("Índice fora dos limites do Array", , "Erro") Finally TxtInsere.Text = "" End Try
End Sub
Private Sub BtnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnListar.Click Dim Resultado As String
Try For I As Byte = LBound(Idades) To UBound(Idades) Resultado = Resultado & Idades(I).ToString & "," Next MsgBox(Resultado) Catch MsgBox("Problemas no acesso ao Array", MsgBoxStyle.Exclamation, "Erro")
End Try End Sub End Class
Module Module1
Public Idades(1) As Integer
Sub Insere(ByVal i As Byte) Dim PosicaoLivre As Byte
Try PosicaoLivre = Array.IndexOf(Idades, 0) Idades(PosicaoLivre) = i
Catch ex1 As OverflowException When UBound(Idades) < 2 ReDim Preserve Idades(UBound(Idades) + 2) PosicaoLivre = UBound(Idades) - 1 Idades(PosicaoLivre) = i Catch ex2 As OverflowException When UBound(Idades) >= 2 Throw New ApplicationException("Memória insuficiente.")
Module Module1 Public Idades(1) As Integer Public maximo As Integer
Public Sub Insere1(ByVal i As Byte) Dim PosicaoLivre As Byte Try If maximo < 0 Then Throw New OverflowException("Vector cheio") End If Try PosicaoLivre = CType(Array.IndexOf(Idades, 0), Byte) Catch ex As OverflowException ReDim Preserve Idades((UBound(Idades)) + 2) PosicaoLivre = Array.IndexOf(Idades, 0) End Try Idades(PosicaoLivre) = CType(i, Integer) If CInt(PosicaoLivre) >= 3 Then Idades(PosicaoLivre) = CType(i, Integer) maximo = -1 End If Catch ex As OverflowException MsgBox(ex.Message) End Try End Sub
Public Function listar(ByVal v() As Integer) As String Dim s As String Try For idx As Integer = 0 To 3 s = s + " " + CStr(v(idx)) Next listar = s Catch ex As Exception MsgBox("Erro: " & ex.Message) End Try End Function Public Function consultar(ByVal v() As Integer, ByVal pos As Integer) As String Dim s As String Try s = "Idades[" & pos + 1 & "] = " & Idades(pos) consultar = s Catch ex As Exception MsgBox("Erro: " & ex.Message) End Try End Function
End Module
'-------------Form----------------
#Region "inserir" Private Sub btnInserir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir.Click Dim Idade As Byte Try Idade = CType(txtNum.Text, Byte) If Idade > 100 Or Idade < 1 Then Throw New OverflowException("Idade com valor fora do intervalo admitido.") Insere1(Idade) Catch ex As OverflowException MsgBox("erro: " & ex.Message) Catch ex As InvalidCastException MsgBox("Erro: " & ex.Message) End Try End Sub #End Region
#Region "Listar" Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click Try MsgBox(CStr(listar(Idades))) Catch ex As System.IndexOutOfRangeException MsgBox("erro: " & ex.Message) End Try End Sub #End Region
#Region "Consultar" Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click Try MsgBox(consultar(Idades, 1)) Catch ex As Exception MsgBox("Erro: " & ex.Message) End Try End Sub #End Region
11 Comments:
Private Sub Inserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Inserir1.Click
Dim Idade As Byte
Try
Idade = CByte(txtIdade.Text)
If (Idade <= 100) And (Idade >= 1) Then
Insere1(Idade)
Else
Throw New ApplicationException("Idade com valor fora do intervalo admitido")
End If
Catch ex As ApplicationException
MsgBox(ex.Message, 64, "Erro na introducao de idade")
Catch ex As Exception
MsgBox("Não foi introduzida uma idade valida!", 64, "Erro na introducao de idade")
End Try
End Sub
Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click
Dim frase As String
Try
For idx As Integer = LBound(Idades) To UBound(Idades)
frase += CStr(Idades(idx)) & ","
Next
Catch ex As Exception
MsgBox("Problemas no acesso ao array das idades.", 64, "Erro")
End Try
MsgBox(frase, 64, "Listagem")
End Sub
Private Sub btnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar2.Click
Try
Dim pos As Integer = txtIdade.Text
MsgBox("Idades(" & CStr(pos) & ") = " & CStr(Idades(pos)), 64, "Consulta")
Catch ex As System.OverflowException
MsgBox("Numero demasiado grande!", 64, "Erro!")
Catch ex As System.IndexOutOfRangeException
MsgBox("O indice nao existe no vector", 64, "Erro!")
Catch ex As Exception
MsgBox("Erro inesperado!", 64, "Erro")
End
End Try
End Sub
Module Funcoes
Public Idades(1) As Integer
Dim NENHUMA As Integer = -1
Sub Insere1(ByVal idd As Byte)
Try
If (Array.IndexOf(Idades, 0) = NENHUMA) Then
If (UBound(Idades) = 3) Then
Throw New ApplicationException("Memoria insuficiente")
Else
ReDim Preserve Idades(UBound(Idades) + 2)
End If
End If
Idades(Array.IndexOf(Idades, 0)) = idd
Catch ex As ApplicationException
MsgBox(ex.Message, 64, "Erro")
Catch ex As Exception
MsgBox("Erro inesperado!", 64, "Erro")
End Try
End Sub
End Module
'NOME:JOAO ANTONIO LALANDA PEREIRA
'NUMERO:4507
Private Sub Inserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Inserir1.Click
Dim idade As Integer
Try
idade = CInt(TxtIdade.Text)
Insere1(idade)
Catch ErroDeCast As InvalidCastException
MsgBox("1-Idade com dados errados.", , "Erro")
Catch ErroIdadeImpossivel As OverflowException
MsgBox("2-Valor para a idade não aceite.", , "Erro")
Catch ErroDeIdade As ApplicationException When ErroDeIdade.Message = "Idade com valor fora do intervalo admitido."
MsgBox("3-" & ErroDeIdade.Message, , "Erro")
Finally
TxtIdade.Text = ""
TxtIdade.Focus()
End Try
End Sub
Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click
Dim frase As String
Try
For I As Byte = LBound(Idades) To UBound(Idades)
frase = frase & Idades(I).ToString & ","
Next
MsgBox(frase, MsgBoxStyle.OKOnly, "Listagem")
Catch
MsgBox("Problemas no acesso ao array das idades.", MsgBoxStyle.OKOnly, "Erro")
Finally
TxtIdade.Text = ""
TxtIdade.Focus()
End Try
End Sub
Private Sub btnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar2.Click
Dim Indice As Byte
Dim i As Integer
Try
Indice = CByte(TxtIdade.Text)
MsgBox("Idades(" + CStr(Indice) + ") =" + CStr(Idades(Indice)), MsgBoxStyle.OKOnly, "Consultar")
Catch ex As InvalidCastException
MsgBox("Índice inválido.", , "Erro")
Catch ex As OverflowException
MsgBox("Índice inválido.", , "Erro")
Catch ex As IndexOutOfRangeException
MsgBox("Índice inválido.", , "Erro")
Finally
TxtIdade.Text = ""
TxtIdade.Focus()
End Try
End Sub
End Class
Module Module1
Public Idades(1) As Integer
Sub Insere1(ByVal i As Byte)
Dim PosicaoLivre As Byte
Dim idx As Integer
Try
PosicaoLivre = Array.IndexOf(Idades, 0)
Idades(PosicaoLivre) = i
Catch ex As OverflowException When UBound(Idades) < 2
ReDim Preserve Idades(UBound(Idades) + 2)
PosicaoLivre = UBound(Idades) - 1
Idades(PosicaoLivre) = i
Catch ex As OverflowException When UBound(Idades) >= 2
MsgBox("Memoria Insuficiente", , "Erro")
End Try
End Sub
End Module
Private Sub Inserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Inserir1.Click
Dim Idade As Byte
Try
Idade = CByte(txtIdade.Text)
If Idade < 1 Or Idade > 100 Then _
Throw New ApplicationException("Idade com valor fora do intervalo admitido.")
Insere1(Idade)
Catch ex1 As InvalidCastException 'no caso de o utilizador por exemplo inserir uma letra
MsgBox("1) Idade com dados errados.", , "Erro")
Catch ex2 As OverflowException 'no caso de o utilizador inserir um nº negativo
MsgBox("2) Valor para a idade não aceite.", , "Erro")
Catch ex3 As ApplicationException When ex3.Message = "Idade com valor fora do intervalo admitido."
MsgBox("3) " & ex3.Message, , "Erro")
Finally
txtIdade.Text = ""
End Try
End Sub
-----------------------------------
Private Sub btnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar2.Click
Dim Indice As Byte
Try
Indice = CByte(txtIdade.Text)
MsgBox("Idades(" & txtIdade.Text & ") = " & Idades(Indice))
Catch ex As InvalidCastException 'indice não valido por exemplo uma letre
MsgBox("1) Índice inválido.", , "Erro")
Catch ex As OverflowException 'indice não valido por exemplo -1
MsgBox("2) Índice inválido.", , "Erro")
Catch ex As IndexOutOfRangeException 'indice fora do intervalo [o,1]
MsgBox("3) Índice inválido.", , "Erro")
Finally
txtIdade.Text = ""
End Try
End Sub
-----------------------------------
Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click
Dim Frase As String = "Idades: "
Try
If LBound(Idades) <> 0 Then
For I As Byte = LBound(Idades) To UBound(Idades)
Frase = Frase & Idades(I).ToString & "#"
Next
MsgBox(Frase)
Else
MsgBox("Insira 1º as Idades")
end if
Catch 'como 1 byte só pode armazenar números entre 0 e 255 pode acontecer uma excepção
MsgBox("Problemas no acesso ao array das idades.", , "Erro")
Finally
txtIdade.Text = ""
End Try
End Sub
-----------------------------------
Module Module1
Public Idades(1) As Integer
Sub Insere1(ByVal n As Byte)
Dim PosiçãoLivre As Byte
Try
PosiçãoLivre = Array.IndexOf(Idades, 0) 'posiciona-se no 1º indice livre
Idades(PosiçãoLivre) = n
Catch ex As OverflowException When UBound(Idades) < 2
ReDim Preserve Idades(UBound(Idades) + 2)
PosiçãoLivre = UBound(Idades) - 1
Idades(PosiçãoLivre) = n
Catch ex As OverflowException When UBound(Idades) >= 2
MsgBox("Memoria Insuficiente", , "Erro")
End Try
End Sub
End Module
´Carlos Lotra Nº4600 TA
Private Sub btnInserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir1.Click
Dim Idade As Byte
Try
Idade = CInt(TextBox1.Text)
If Idade < 1 Or Idade > 100 Then
MsgBox("Insira uma idade entre 1 e 100.", MsgBoxStyle.Information, "Erro")
End If
Insere1(Idade)
Catch Erro As OverflowException
MsgBox(" Idade não aceite.", MsgBoxStyle.OKOnly, "Erro")
End Try
End Sub
Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click
Dim numeros As String
Try
For x As Byte = LBound(Idades) To UBound(Idades)
numeros = numeros & Idades(x).ToString & ","
Next
MsgBox(numeros, MsgBoxStyle.OKOnly, "Listagem")
Catch
MsgBox("Problemas no acesso ao array das idades.", MsgBoxStyle.OKOnly, "Erro")
End Try
End Sub
Private Sub btnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar2.Click
Dim indice As Byte
Try
indice = CByte(TextBox1.Text)
MsgBox("Idades(" + CStr(indice) + ") =" + CStr(Idades(indice)), MsgBoxStyle.OKOnly, "Exercício OnError1")
Catch
MsgBox("Índice inválido.", MsgBoxStyle.OKOnly, "Erro")
End Try
End Sub
End Class
Module Module1
Public Idades(1) As Integer
Sub Insere1(ByVal i As Byte)
Dim PosicaoLivre As Byte
Try
PosicaoLivre = Array.IndexOf(Idades, 0)
Idades(PosicaoLivre) = i
Catch When UBound(Idades) < 2
ReDim Preserve Idades(UBound(Idades) + 2)
PosicaoLivre = UBound(Idades) - 1
Idades(PosicaoLivre) = i
Catch When UBound(Idades) >= 2
MsgBox("Memoria Insuficiente", MsgBoxStyle.OKOnly, "Erro")
End Try
End Sub
End Module
--> Form
Private Const Limite_Inferior_Idade As Byte = 1
Private Const Limite_Superior_Idade As Byte = 100
#Region "Load_Form"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
btnConsultar.Enabled = False
btnListar.Enabled = False
End Sub
#End Region
#Region "Botão_Inserir"
Private Sub btnInserir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir.Click
Dim Idade As Byte
Try
Try
Idade = CByte(Txt1.Text)
If (Idade < Limite_Inferior_Idade Or Idade > Limite_Superior_Idade) Then _
Throw New Exception("Idade com valor fora do intervalo admitido")
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OKOnly, "Inserir(Form)")
Configura_TextBox()
Exit Sub
End Try
Insere1(Idade)
Configura_TextBox()
btnConsultar.Enabled = True
btnListar.Enabled = True
Catch f As Exception
MsgBox(f.Message, MsgBoxStyle.Critical + MsgBoxStyle.OKOnly, "Inserir(Modulo)")
Configura_TextBox()
End Try
End Sub
#End Region
#Region "Botão_Consultar"
Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click
Dim Indice As Byte
Dim Frase As String
Try
Indice = CByte(Txt1.Text)
Frase = "Idades(" & Indice.ToString & ")=" & Idades(Indice).ToString
MsgBox(Frase, MsgBoxStyle.Information + MsgBoxStyle.OKOnly, "Consultar Indice")
Configura_TextBox()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OKOnly, "Consultar Indice")
Configura_TextBox()
End Try
End Sub
#End Region
#Region "Botão_Listar"
Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click
Dim Frase As String
Try
For Each i As Byte In Idades
Frase = Frase & i & ","
Next i
MsgBox(Frase, MsgBoxStyle.Information + MsgBoxStyle.OKOnly, "Listagem")
Catch ex As Exception
MsgBox("Problemas no acesso ao array das idades", MsgBoxStyle.Critical + MsgBoxStyle.OKOnly, "Erro")
End Try
End Sub
#End Region
#Region "Auxiliar"
Private Sub Configura_TextBox()
Txt1.Text = ""
Txt1.Focus()
End Sub
#End Region
--> Módulo
Module Auxiliar
Public Idades(1) As Integer
Private Restrição As Boolean = False
Private Const Num_Elementos_Vector As Integer = 4
Private Const Posições_Acrescentar As Integer = 2
#Region "Insere1"
Friend Sub Insere1(ByVal i As Byte)
Dim PosiçãoLivre As Byte
Dim aux As Integer
If (Restrição = False) Then
PosiçãoLivre = CByte(Array.IndexOf(Idades, 0))
aux = CInt(UBound(Idades))
If (Idades.Length = PosiçãoLivre + 1 And _
Idades.Length <> Num_Elementos_Vector) Then
ReDim Preserve Idades(aux + Posições_Acrescentar)
PosiçãoLivre = CByte(Array.IndexOf(Idades, 0))
Idades(PosiçãoLivre) = CInt(i)
ElseIf (Idades.Length = PosiçãoLivre + 1 And Idades.Length = Num_Elementos_Vector) Then
PosiçãoLivre = CByte(Array.IndexOf(Idades, 0))
Idades(PosiçãoLivre) = CInt(i)
Restrição = True
Else
PosiçãoLivre = CByte(Array.IndexOf(Idades, 0))
Idades(PosiçãoLivre) = CInt(i)
End If
Else
Throw New Exception("Memória insuficiente")
Exit Sub
End If
End Sub
#End Region
End Module
Resolução do exercício
----------------------------------------------------------------------
Dim idade As Byte
Private Sub Inserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Inserir1.Click
Try
idade = CInt(txtN.Text)
If idade >= 1 And idade <= 100 Then
Insere1(idade)
Else
MsgBox(" Idade com valor fora do intervalo.", MsgBoxStyle.Critical, "ERRO")
End If
Catch ex As InvalidCastException
MsgBox("Só se admite números em idades")
Catch ex As OverflowException
MsgBox("Idade não permitida")
End Try
Console.ReadLine()
End Sub
Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click
Try
MsgBox("As idades são:" & EscreverListagem(Idades), MsgBoxStyle.Information, "Listagem")
Catch ex As Exception
MsgBox("Problemas no acesso ao array das idades.", MsgBoxStyle.Critical, "Erro")
End Try
End Sub
Private Sub Consultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Consultar2.Click
Dim Indice As Byte
Indice = UBound(Idades)
MsgBox("Idades ( " & Indice & " ) = " & EscreverUltimoNumero(Idades))
End Sub
------------------------------------------------------------
Module Module1
Public Idades(1) As Integer
Sub Insere1(ByVal i As Byte)
Dim PosiçãoLivre As Byte
If Idades(PosiçãoLivre) <= 2 Then
For PosiçãoLivre = 0 To UBound(Idades)
Idades(PosiçãoLivre) = i
Next
Else
Try
ReDim Preserve Idades(3)
Catch ex As Exception
MsgBox("Memória Insuficiente")
End Try
End If
Array.IndexOf(Idades, 0)
End Sub
Public Function VectorVazio(ByVal v() As Integer) As Boolean
Dim x As Integer
On Error GoTo TRATAMENTO
x = UBound(v)
VectorVazio = False
Exit Function
TRATAMENTO:
VectorVazio = True
End Function
Public Function EscreverListagem(ByVal idades() As Integer) As String
Dim idx As Byte, ret As String
ret = " "
If Not VectorVazio(idades) Then
For idx = LBound(idades) To UBound(idades)
If (idx = 0) Then
ret = CStr(idades(idx))
Else
ret = ret + " , " + CStr(idades(idx))
End If
Next
End If
EscreverListagem = ret
End Function
Public Function EscreverUltimoNumero(ByVal idades() As Integer) As String
Dim idx As Byte, ret As String
ret = " "
If Not VectorVazio(idades) Then
For idx = LBound(idades) To UBound(idades)
If (idx = 0) Then
ret = CStr(idades(idx))
Else
ret = CStr(idades(idx))
End If
Next
End If
EscreverUltimoNumero = ret
End Function
End Module
Realizado por: Graça Maria Simão Cardoso nº 4603
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub btnInserir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir.Click
Dim Idade As Byte
Try
Idade = CByte(txtIdade.Text)
If Idade < 1 Or Idade > 100 Then
Throw New ApplicationException("Idade com valor fora do intervalo admitido.")
End If
Insere1(Idade)
Catch Erro1 As OverflowException
MsgBox("2 Valor impossivel.", , "Erro")
Catch Erro2 As InvalidCastException
MsgBox("1 Valor não numérico.", , "Erro")
Catch Erro3 As ApplicationException When Erro3.Message = "Idade com valor fora do intervalo admitido."
MsgBox("3 " & Erro3.Message, , "Erro")
End Try
End Sub
Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click
Dim Indice As Byte
Try
Indice = CByte(txtIdade.Text)
MsgBox("Idades(" & txtIdade.Text & ") = " & Idades(Indice))
Catch erro1 As InvalidCastException
MsgBox("1 Índice inválido.", , "Erro")
Catch erro2 As OverflowException
MsgBox("2 Índice inválido.", , "Erro")
Catch erro3 As IndexOutOfRangeException
MsgBox("3 Índice inválido.", , "Erro")
End Try
End Sub
Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click
Dim Lista As String
Try
For I As Byte = LBound(Idades) To UBound(Idades)
Lista = Lista & " " & Idades(I).ToString & ","
Next
MsgBox(Lista)
Catch
MsgBox("Problemas no acesso ao array das idades.", , "Erro")
End Try
End Sub
End Class
Module Module1
Public Idades(1) As Integer
Sub Insere1(ByVal i As Byte)
Dim PosiçãoLivre As Byte
Try
PosiçãoLivre = Array.IndexOf(Idades, 0)
Idades(PosiçãoLivre) = i
Catch erro As OverflowException When UBound(Idades) < 2
ReDim Preserve Idades(UBound(Idades) + 2)
PosiçãoLivre = UBound(Idades) - 1
Idades(PosiçãoLivre) = i
Catch erro As OverflowException When UBound(Idades) >= 2
MsgBox("Memoria Insuficiente", , "Erro")
End Try
End Sub
End Module
Anabela Corga Nº3852 Turma:A
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub btnInserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir1.Click
Dim idade As Byte
Try
idade = CByte(txtidade.Text)
If idade < 1 Or idade > 100 Then
Err.Raise(1000, , "Idade com valor fora do intervalo admitido.")
End If
Insere1(idade)
txtidade.Text = "" : txtidade.Focus()
Exit Sub
Catch ex1 As InvalidCastException
MsgBox(ex1.Message)
Catch ex2 As Exception
MsgBox(ex2.Message)
Finally
txtidade.Text = "" : txtidade.Focus()
End Try
End Sub
Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click
Dim A As String = ""
Try
For I As Byte = LBound(Idades) To UBound(Idades)
A = A & Idades(I).ToString & ","
Next
MsgBox(A)
Exit Sub
Catch ex1 As Exception
MsgBox(ex1.Message)
End Try
End Sub
Private Sub btnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar2.Click
Dim Indice As Byte
On Error GoTo TrataErro
Indice = CByte(txtidade.Text)
MsgBox("Idades(" & txtidade.Text & ") = " & Idades(Indice))
txtidade.Text = "" : txtidade.Focus()
Exit Sub
TrataErro:
If TypeOf Err.GetException Is IndexOutOfRangeException Then
Err.Description = "Índice fora dos limites do array"
ElseIf TypeOf Err.GetException Is InvalidCastException Then
Err.Description = "Índice inválido."
End If
MsgBox(Err.Description)
txtidade.Text = "" : txtidade.Focus()
End Sub
End Class
Ana Gaspar N.º 3979 Turma A
Private Sub Inserir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Inserir1.Click
Dim Idade As Byte
Try
' Esta Sub deve:
' 1 - Obter em Idade o valor colocado na TextBox
Idade = CType(Text1.Text, Byte)
' 2 - Se essa idade não pertencer a [1,100], produzir um erro com a mensagem "Idade com valor fora do intervalo admitido."
If Idade > 100 Or Idade < 1 Then
Throw New OverflowException("Idade com valor fora do intervalo admitido.")
End If
' - se pertencer, invoca Insere1(Idade) (uma função a criar num Módulo)
Module1.Insere1(Idade)
' 3 - Estas operações devem estar protegidas contra erros de runtime, sinalizados com mensagens adequadas
Catch ex As InvalidCastException
MsgBox("Só são admitidos números inteiros entre 1 e 100 inclusivé!")
Text1.Text = ""
Catch ex As OverflowException
MsgBox("Idade com valor fora do intervalo admitido.")
Text1.Text = ""
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub Listar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Listar.Click
' Sub que lista os elementos do vector Idades,
' com suporte de tratamento de erros contra excepções genéricas:
' ..... se acontecer um erro, fazer aparecer caixa com a mensagem "Problemas no acesso ao array das idades." e o título "Erro" vá ao Help ver a sintaxe do comando MsgBox)
Try
Dim mensagem As String
Dim IndiceLivre As Integer
IndiceLivre = Array.IndexOf(Idades, 0)
If IndiceLivre = 0 Then
Throw New OverflowException("O Vector não tem elementos!")
End If
IndiceLivre = UBound(Idades)
If IndiceLivre = Array.IndexOf(Idades, 0) Then
IndiceLivre = IndiceLivre - 1
End If
For c As Integer = 0 To IndiceLivre
mensagem = mensagem + CStr(Idades(c)) + ","
Next c
MsgBox(mensagem)
Catch ex As OverflowException
MsgBox(ex.Message)
Text1.Text = ""
Catch ex As Exception
MsgBox("Problemas no acesso ao array das idades.", MsgBoxStyle.OKOnly, "Erro")
Text1.Text = ""
End Try
End Sub
Private Sub BtnConsultar2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConsultar2.Click
' Esta Sub obtém em Indice o valor da TextBox
' e depois mostra, numa caixa de mensagem, o valor da idade do elemento indicado.
' Estas instruções devem estar protegidas contra erros de runtime.
Try
Dim Indice As Byte
Indice = CType(Text1.Text, Byte)
MsgBox(CStr("Idades(" & CStr(Indice) & ")=" & Idades(Indice)))
Catch ex As IndexOutOfRangeException
MsgBox("O indice que introduziu não é válido! O Indice deverá ser um número inteiro entre 0 e 3 inclusivé!", MsgBoxStyle.OKOnly, "ERRO")
Catch ex As InvalidCastException
MsgBox("O Indice deverá ser um número inteiro entre 0 e 3 inclusivé!", MsgBoxStyle.OKOnly, "ERRO")
Catch ex As Exception
MsgBox(ex.Message)
End Try
' Etc
End Sub
(Módulo)
Sub Insere1(ByVal i As Byte)
Dim PosiçãoLivre As Byte ' para se saber a 1ª posição livre do array
Try
If decisao < 0 Then
Throw New OverflowException("Memória insuficiente.")
End If
Try
PosiçãoLivre = CType(Array.IndexOf(Idades, 0), Byte)
Catch ex As OverflowException
ReDim Preserve Idades((UBound(Idades)) + 2)
PosiçãoLivre = Array.IndexOf(Idades, 0)
End Try
Idades(PosiçãoLivre) = CType(i, Integer)
If CInt(PosiçãoLivre) >= 3 Then
Idades(PosiçãoLivre) = CType(i, Integer)
decisao = -1
End If
Catch ex As OverflowException
MsgBox(ex.Message)
End Try
' Etc
End Sub
Mário Duarte
Nº4511 2ºAno Turma B
Esta é a minha resolução do exercício:
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub BtnInserir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnInserir.Click
Dim Idade As Byte
Try
Idade = CByte(TxtInsere.Text)
If Idade < 1 Or Idade > 100 Then Throw New ApplicationException("Idade com valor fora do intervalo admitido.")
Insere(Idade)
Catch ex1 As InvalidCastException
MsgBox("Idade com dados errados", MsgBoxStyle.Exclamation, "Erro")
Catch ex2 As OverflowException
MsgBox("Valor para idade não é válido", MsgBoxStyle.Exclamation, "Erro")
Catch ex3 As ApplicationException When ex3.Message = "Idade com valor fora do intervalo admitido."
MsgBox(ex3.Message, MsgBoxStyle.Exclamation, "Erro")
Catch ex4 As ApplicationException When ex4.Message = "Memória insuficiente."
MsgBox(ex4.Message, MsgBoxStyle.Exclamation, "Erro")
Finally
TxtInsere.Text = ""
End Try
End Sub
Private Sub BtnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConsultar.Click
Dim Indice As Byte
Try
Indice = CByte(TxtInsere.Text)
MsgBox("Idades (" & TxtInsere.Text & ") =" & Idades(Indice))
Catch ex1 As InvalidCastException
MsgBox("Índice introduzido não é válido", , "Erro")
Catch ex2 As OverflowException
MsgBox("O Índice introduzido não está entre o intervalo definido", , "Erro")
Catch ex3 As IndexOutOfRangeException
MsgBox("Índice fora dos limites do Array", , "Erro")
Finally
TxtInsere.Text = ""
End Try
End Sub
Private Sub BtnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnListar.Click
Dim Resultado As String
Try
For I As Byte = LBound(Idades) To UBound(Idades)
Resultado = Resultado & Idades(I).ToString & ","
Next
MsgBox(Resultado)
Catch
MsgBox("Problemas no acesso ao Array", MsgBoxStyle.Exclamation, "Erro")
End Try
End Sub
End Class
Module Module1
Public Idades(1) As Integer
Sub Insere(ByVal i As Byte)
Dim PosicaoLivre As Byte
Try
PosicaoLivre = Array.IndexOf(Idades, 0)
Idades(PosicaoLivre) = i
Catch ex1 As OverflowException When UBound(Idades) < 2
ReDim Preserve Idades(UBound(Idades) + 2)
PosicaoLivre = UBound(Idades) - 1
Idades(PosicaoLivre) = i
Catch ex2 As OverflowException When UBound(Idades) >= 2
Throw New ApplicationException("Memória insuficiente.")
End Try
End Sub
End Module
Manuel Caneira
2ºAno Turma B
'--------------Modulo-------------
Module Module1
Public Idades(1) As Integer
Public maximo As Integer
Public Sub Insere1(ByVal i As Byte)
Dim PosicaoLivre As Byte
Try
If maximo < 0 Then
Throw New OverflowException("Vector cheio")
End If
Try
PosicaoLivre = CType(Array.IndexOf(Idades, 0), Byte)
Catch ex As OverflowException
ReDim Preserve Idades((UBound(Idades)) + 2)
PosicaoLivre = Array.IndexOf(Idades, 0)
End Try
Idades(PosicaoLivre) = CType(i, Integer)
If CInt(PosicaoLivre) >= 3 Then
Idades(PosicaoLivre) = CType(i, Integer)
maximo = -1
End If
Catch ex As OverflowException
MsgBox(ex.Message)
End Try
End Sub
Public Function listar(ByVal v() As Integer) As String
Dim s As String
Try
For idx As Integer = 0 To 3
s = s + " " + CStr(v(idx))
Next
listar = s
Catch ex As Exception
MsgBox("Erro: " & ex.Message)
End Try
End Function
Public Function consultar(ByVal v() As Integer, ByVal pos As Integer) As String
Dim s As String
Try
s = "Idades[" & pos + 1 & "] = " & Idades(pos)
consultar = s
Catch ex As Exception
MsgBox("Erro: " & ex.Message)
End Try
End Function
End Module
'-------------Form----------------
#Region "inserir"
Private Sub btnInserir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir.Click
Dim Idade As Byte
Try
Idade = CType(txtNum.Text, Byte)
If Idade > 100 Or Idade < 1 Then Throw New OverflowException("Idade com valor fora do intervalo admitido.")
Insere1(Idade)
Catch ex As OverflowException
MsgBox("erro: " & ex.Message)
Catch ex As InvalidCastException
MsgBox("Erro: " & ex.Message)
End Try
End Sub
#End Region
#Region "Listar"
Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click
Try
MsgBox(CStr(listar(Idades)))
Catch ex As System.IndexOutOfRangeException
MsgBox("erro: " & ex.Message)
End Try
End Sub
#End Region
#Region "Consultar"
Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click
Try
MsgBox(consultar(Idades, 1))
Catch ex As Exception
MsgBox("Erro: " & ex.Message)
End Try
End Sub
#End Region
Enviar um comentário
<< Home