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

11 Comments:

Anonymous Anónimo said...

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

6:25 da tarde  
Anonymous Anónimo said...

'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

11:36 da tarde  
Anonymous Anónimo said...

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

3:09 da manhã  
Anonymous Anónimo said...

´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

9:09 da tarde  
Anonymous Anónimo said...

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

7:10 da tarde  
Anonymous Anónimo said...

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

11:54 da tarde  
Anonymous Anónimo said...

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

12:51 da tarde  
Anonymous Anónimo said...

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

1:03 da tarde  
Anonymous Anónimo said...

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

9:48 da tarde  
Anonymous Anónimo said...

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

4:41 da tarde  
Anonymous Anónimo said...

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

6:58 da tarde  

Enviar um comentário

<< Home