Hercles Posted September 8, 2013 at 07:39 PM Report #523845 Posted September 8, 2013 at 07:39 PM Alguém poderia definir qual a finalidade de TRY e EXCEPT e se possível fazer um exemplo?
thoga31 Posted September 8, 2013 at 07:50 PM Report #523847 Posted September 8, 2013 at 07:50 PM (edited) Já leste acerca do assunto? Uma pesquisa simples devolve imensos tutoriais muito aceitáveis acerca disto. Existem duas estruturas de tentativa que são o try-except e o try-finally. O objectivo destas estruturas é visível pelo nome: tentar fazer alguma coisa, e caso não resulte fazer outra acção. Porquê except? Porque a um erro de execução denomina-se excepção. Portanto, quando existe, por exemplo, uma divisão por zero, ocorre uma excepção com a mensagem Division by zero. O bloco except só é executado caso ocorra uma excepção. Por outro lado, o bloco finally é sempre executado, quer haja excepção quer não haja. Caso ocorra uma excepção, o programa salta para o finally. Caso não haja, todo o código é executado e de seguida também executa o finally. Exemplo onde uso as estruturas encadeadas: try try write('Num? '); readln(num); write(5/num:0:3); writeln(' <- resultado'); except writeln('Ocorreu uma excepcao'); end; finally writeln('Fim dos blocos try.'); end; I/O: Num? 10 0.500 <- resultado Fim dos blocos try. Num? 0 Ocorreu uma excepcao. Fim dos blocos try. Podemos apanhar a excepção e tratá-la: try try write('Num? '); readln(num); write(5/num:0:3); writeln(' <- resultado'); except on ex:exception do writeln('Ocorreu uma excepcao: ', ex.message); end; finally writeln('Fim dos blocos try.'); end; I/O: Num? 0 Ocorreu uma excepcao: Division by zero. Fim dos blocos try. Agora que já te introduzi ao assunto, pesquisa acerca de excepções e seu tratamento. Edited September 8, 2013 at 07:51 PM by thoga31 Knowledge is free!
Hercles Posted September 8, 2013 at 08:10 PM Author Report #523848 Posted September 8, 2013 at 08:10 PM (edited) minha duvida começou quando eu fui entender este código. procedure TRSAcript .MDCButtonclick ( Sender : TObject ) ; var x , y : Integer ; begin Try x := St rToInt ( Edi t1 . capt ion ) ; y := St rToInt ( Edi t2 . capt ion ) ; Except On EConvertError do begin Form1 . show; e x i t ; end ; end ; i f ( ( x > 0) and ( y > 0) ) then gcdLabel . capt ion := (’MDC(’ + IntToSt r ( x ) + ’, ’ + IntToSt r ( y ) + ’) = ’ + IntToSt r (MDC( x , y ) ) ) else showmessage (’Os valores de entrada devem ser positivos.’) ; end ; Edited September 8, 2013 at 08:21 PM by thoga31 GeSHi
thoga31 Posted September 8, 2013 at 08:24 PM Report #523849 Posted September 8, 2013 at 08:24 PM A tua dúvida está aqui, imagino: On EConvertError do. É uma forma de tratar as excepções. Em vez de receberes numa variável a excepção ocorrida, fazes um tratamento diferenciado para cada classe de excepção. Neste caso, quando uma converão é impossível, ocorre uma excepção da classe EConvertError. Knowledge is free!
Hercles Posted September 8, 2013 at 08:35 PM Author Report #523851 Posted September 8, 2013 at 08:35 PM Este "EConvertError", é uma mensagem padrão que é informado pelo programa? Eu sei que no final é informado em caso de um numero ser negativo a mensagem " showmessage (’Os valores de entrada devem ser positivos.’) ;" Tive uma explicação na faculdade sobre o caso de ser uma letra o programa não aceitar seria o caso?
thoga31 Posted September 8, 2013 at 09:04 PM Report #523853 Posted September 8, 2013 at 09:04 PM Um input inválido não gera uma excepção da classe EConvertError. Como este nome indica, é uma excepção que ocorre nas conversões. EConvertError não é uma mensagem, é uma classe de excepção. Cada classe de excepção pode ocorrer por diversos motivos, e esse motivo é indicado numa mensagem. Knowledge is free!
Hercles Posted September 8, 2013 at 09:57 PM Author Report #523857 Posted September 8, 2013 at 09:57 PM Como eu faria se fosse digitado uma letra.... Eu quero que abra uma mensagem que informe: 'Neste campo só é permitido números positivos você digitou uma string' e no caso de digitar um numero negativo informar: ''Neste campo só é permitido números positivos você digitou um numero menor que zero '.
thoga31 Posted September 8, 2013 at 10:10 PM Report #523860 Posted September 8, 2013 at 10:10 PM Podes lidar com esses casos sem recorrer a uma estrutura de tentativa. Estas estruturas não devem ser massivamente utilizadas pois baixam, em geral, a eficiência do programa. Knowledge is free!
armizimm Posted September 15, 2013 at 12:17 PM Report #524623 Posted September 15, 2013 at 12:17 PM (edited) Usa o evento onkeypress do TEdit, ficaria assim: procedure TEdit.keypress; Const Numeros = ['0','1','2','3','4','5','6','7','8','9','.']; begin If Not (Key in Numeros) Then Begin Key := #0; // Anula o caracter digitado. ShowMessage(' Este campo aceita apenas números positivos'); end; end; Edited September 15, 2013 at 01:27 PM by pwseo syntax highlight.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now