Você está na página 1de 74

VISUAL BASIC

Sebenta Terica (verso 1)

Instituto Superior de Engenharia do Porto Janeiro de 2001

NDICE 1 - CONCEITOS GERAIS


Programao orientada ao objecto Classes e Objectos A linguagem Visual Basic Forms e Controlos Propriedades Mtodos Eventos

1
1 1 1 2 3 4 5

2 - O PRIMEIRO EXEMPLO
Ambiente de desenvolvimento Criar o projecto Desenhar a interface
Como desenhar um controlo no form?

6
6 7 8 8 9 10 11 11

Ajustar as propriedades Escrever o cdigo Correr e testar a aplicao Gravar o trabalho

3 - VARIVEIS E CONSTANTES
Tipos de dados Conceito de varivel Declarao de varivel Outros tipos de dados Operao de atribuio Constantes Operadores

13
13 13 15 16 16 17 17

Comentrios Convenes a seguir na escolha de nomes de objectos

18 19

4 - ESTRUTURAS DE CONTROLO CONDICIONAL


Estruturas de seleco simples Estruturas de seleco embutidas
Estrutura If ... Then ... ElseIf ... Estrutura Select ... Case

20
20 22 22 24

5 - ESTRUTURAS DE CONTROLO REPETITIVO


Ciclo For ... To ... Next Ciclo Do While
Ciclo controlado por contador

26
26 29 29 31 32 33 35

Ciclo Do Until
Ciclos controlados por sentinela

Ciclos imbricados Ciclos com teste no fim

6 - VECTORES E MATRIZES
Vectores
Declarao de vectores Processamento de vectores Pesquisa em vectores Ordenao de vectores

37
37 38 38 40 46 49 49 50 51

Matrizes Arrays bidimensionais


Declarao de matrizes Processamento de matrizes

Vectores de controlos

7 - SUB-ROTINAS
Procedimentos
Passagem de argumentos

52
52 52 54

Funes

ii

8 - FUNES PREDEFINIDAS
Funes matemticas Funes de manipulao de strings Outras funes standard Funo InputBox Funo MsgBox Formatao da sada de dados - Funo Format
Formatao de valores numricos Formatao de cadeias de caracteres (strings)

55
55 56 60 60 61 63 63 64 65

Gerao de nmeros aleatrios - Funes Rnd e Randomize

9 - CONTROLOS
Option Buttons Botes de Opo Check Boxes Caixas de Verificao Frames Quadros List Boxes Caixas de Listagem

67
67 67 68 68

iii

1 - Conceitos Gerais
Programao orientada ao objecto
A programao tradicional baseia-se numa distino clara entre o programa propriamente dito e os dados que esse programa processa. Nesta ptica, um programa entendido como uma sequncia de instrues que manipulam os dados que lhe so fornecidos. Do ponto de vista da programao orientada para objectos, a forma de encarar um programa substancialmente diferente. Um programa passa a ser visto como uma simulao de um ou vrios aspectos do mundo real, pretendendo-se com ele modelizar um conjunto de objectos que interagem com o propsito de alcanar um dado objectivo. Assim sendo, o prprio programa estruturado como um conjunto de objectos que interagem entre si e com o mundo real. Cada objecto do programa uma entidade com caractersticas e capacidades prprias, contendo dentro de si quer os dados a processar quer os mdulos de programa que processam esses dados.

Classes e Objectos
Os objectos so normalmente agrupados em classes. Na vida real, um Fiat Punto ou um BMW podem ser classificados como objectos que pertencem classe automvel. So diferentes, mas no deixam de partilhar as caractersticas que os definem como automveis. Tambm na programao por objectos so utilizados objectos que pertencem a classes. Cada objecto pertencendo a uma mesma classe possui caractersticas comuns a todos os objectos pertencentes a essa classe. Pode-se, assim, definir uma classe como a matriz que descreve quais as caractersticas e capacidades de um dado conjunto de objectos. Em programao, uma classe ser um conjunto de especificaes que regulam a criao de objectos de um dado tipo.

A linguagem Visual Basic


Esta linguagem incorpora os conceitos de objecto e classe. Nela existe uma vasta gama de classes de objectos predefinidas, com base nas quais o programador pode criar os objectos de que necessita no seu programa. Por outro lado, a linguagem permite tambm que o programador crie classes com caractersticas especficas.

A Caixa de Ferramentas (ToolBox)

VISUAL BASIC Sebenta Terica (verso 1)

Conceitos Gerais

O exemplo mais comum de objecto utilizado por aplicaes desenvolvidas em linguagens orientadas para objectos como o Visual Basic o boto de comando que, nesta linguagem, deriva da classe CommandButton. Sempre que o programador necessita de um boto de comando, limita-se a requerer a criao de um novo objecto dessa classe. A criao de objectos standard ou predefinidos um processo to elementar como a escolha numa janela denominada caixa de ferramentas (toolbox) da classe a que pertence o novo objecto a criar, seguida do desenho com o rato dos contornos desse objecto na janela que o vai conter. Em Visual Basic, a criao de um programa um projecto em duas fases: a definio da interface com o utilizador ou seja da forma como o programa se vai apresentar visualmente ao utilizador a especificao do cdigo que permite ao programa executar as aces requeridas

Nas linguagens tradicionais, a criao da interface era responsabilidade do prprio programa, ou seja, o cdigo que gerava a interface estava contido no programa. Em linguagens como o Visual Basic, a interface pode ser criada recorrendo s classes de objectos preexistentes, como botes, barras de menus ou caixas de texto, sem que para isso o programador tenha tido necessidade de escrever uma linha de cdigo.

Forms e Controlos
Uma aplicao informtica, em ambiente Windows, possui sempre uma ou mais janelas, mediante as quais se estabelece a interaco com o utilizador.

Uma form com vrios controlos

VISUAL BASIC Sebenta Terica (verso 1)

Conceitos Gerais

Durante a fase de desenvolvimento dessa aplicao em Visual Basic, o nome dado s janelas Forms. Em cada janela, ou Form, possvel instalar objectos como botes ou caixas de texto a que chamamos Controlos e que permitiro interagir com a interface. ainda possvel alterar as caractersticas (dimensionais ou outras) das Forms bem como configurar os Controlos de forma a adaptar a interface ao objectivo pretendido com o programa. As forms pertencem classe Form. Por seu lado os controlos que tenham sido inseridos nas forms podem ser oriundos de diversas classes. Assim, um boto de comando (commandButton) pertence classe CommandButton, enquanto uma caixa de texto (textBox) pertence classe TextBox.

Propriedades
Como na vida real, cada objecto possui caractersticas prprias ou propriedades, que podem ser quantificadas (por exemplo, as dimenses de um boto de comando ou a cor dum rtulo). Cada form ou objecto tem associada uma lista de propriedades s quais possvel atribuir valores que determinam a sua aparncia, localizao e outros detalhes. Pode-se ento dizer que as propriedades de um objecto definem a forma como ele se apresenta. Diversos objectos podem partilhar a mesma propriedade. Essa propriedade, no entanto, pode afectar esses objectos de forma diferente. Algumas das propriedades mais importantes e que so comuns maior parte dos objectos so as seguintes:

Propriedade Caption Name Left Top Height Width Font Visible

Efeito Define o texto a afixar na barra de ttulo das forms, da legenda (caption) dos botes de comando, ou nos rtulos (label) Define o nome pelo qual o objecto identificado Define o afastamento entre uma form e o limite esquerdo do ecr ou entre um controlo e o limite esquerdo da form Define o afastamento entre uma form e o topo do ecr ou entre um controlo e o topo da form Define a altura do objecto Define a largura do objecto Especifica qual o tipo de letra a usar nos controlos Permite controlar o aparecimento de um dado objecto

VISUAL BASIC Sebenta Terica (verso 1)

Conceitos Gerais

Os valores que tomam as propriedades de um dado objecto podem ser consultados ou modificados mediante a janela de propriedades. Nessa janela aparece a lista de propriedades do objecto que estiver nesse momento seleccionado.

Janela de Propriedades

Mtodos
Um mtodo pode ser visto como uma funo associada a um dado objecto. Essa funo possibilita efectuar uma determinada aco sobre esse objecto. Tais funes esto disponveis partida, bastando, pois, saber como as utilizar para obter o efeito requerido. Dois mtodos comuns maior parte dos objectos e de utilizao frequente so os seguintes: Move Este mtodo tem como resultado a deslocao do objecto ou form, bastando para tal, que lhe seja fornecida a informao de qual a localizao final. A sua sintaxe : Objecto.Move Left, Top, Width, Height Objecto representa o objecto ao qual o mtodo Move vai ser aplicado, enquanto Left, Top, Width e Height so os parmetros a ser fornecidos ao mtodo, ou seja, as informaes acerca de como efectuar a deslocao. De entre todos os parmetros, somente o parmetro Left obrigatrio.

SetFocus Permite definir qual o objecto que est actualmente assinalado. Diz-se, em linguagem tpica do ambiente Windows, que esse objecto possui o focus, querendo com isso dizer que ser esse o objecto a ser accionado pela prxima aco do utilizador. Neste ambiente, ao mesmo tempo, no pode haver mais do que uma janela a possuir o focus e, dentro dela, s um objecto nas mesmas condies. A sintaxe deste mtodo : Objecto.SetFocus Para que o mtodo seja executado, basta associ-lo com Objecto. No h necessidade de qualquer informao (parmetro) adicional. 4

VISUAL BASIC Sebenta Terica (verso 1)

Conceitos Gerais

Um objecto pode ser assinalado (receber o focus) atravs da incluso do comando acima referido num programa, ou mediante um clique do rato sobre o prprio objecto.

Eventos
Por evento entende-se um acontecimento a que um objecto capaz de reagir. A lista de eventos que um objecto pode reconhecer especfica desse objecto. Um evento pode resultar de uma aco do utilizador ou decorrer do funcionamento do prprio programa. Dois dos eventos mais vulgares so o Click (presso simples no objecto com o rato) e o DoubleClick (dupla presso sobre o objecto). Quando ocorre um evento que o objecto capaz de reconhecer, uma resposta pode ser produzida. Essa resposta est exclusivamente dependente de cdigo especificamente escrito para o efeito pelo programa78 Essa96 rck

2 - O primeiro exemplo
Nesta parte comea-se por apresentar o ambiente de desenvolvimento integrado do Visual Basic (menu bar, toolbars, toolbox, project explorer window, properties window, form designer e code editor window). Depois explica-se como se cria um projecto e detalham-se os passos necessrios construo de uma aplicao em VB. So eles: Desenhar a interface Ajustar as propriedades Escrever o cdigo

Por fim mostra-se como se corre uma aplicao e se guarda o trabalho. Tudo isto complementado com um pequeno exemplo cuja implementao vai sendo explicada e que consiste em desenvolver um pequeno programa que efectue a converso entre graus Celsius e graus Farenheit.

Ambiente de desenvolvimento

Ambiente de Desenvolvimento Integrado do Visual Basic

VISUAL BASIC Sebenta Terica (verso 1)

O primeiro exemplo

O Ambiente de Desenvolvimento do Visual Basic composto pelos seguintes elementos: Menu Bar Apresenta os comandos que se usam para trabalhar com o Visual Basic. Para alm dos habituais menus File, Edit, View, Window e Help, existem outros menus que permitem o acesso a funes especficas da programao tais como Project, Format ou Debug.

Toolbars Possibilitam um acesso rpido aos comandos mais frequentemente usados. Basta clicar uma vez num boto da toolbar para executar a aco associada a esse boto.

Toolbox Fornece um conjunto de ferramentas usadas para inserir controlos nos forms.

Project explorer window Lista os forms e mdulos existentes no projecto actual. Um projecto uma coleco de ficheiros usados para construir uma aplicao.

Properties window Permite modificar a aparncia ou comportamento do form ou controlo seleccionado. As propriedades so caractersticas dos objectos, tais como tamanho, texto ou cor.

Form designer a janela de trabalho que serve para desenhar a interface da aplicao com o utilizador. Inserem-se controlos, grficos e imagens no form para se obter o resultado e aparncia desejados. Cada form da aplicao tem o seu prprio "form designer".

Code editor window Editor onde se escrevem as instrues que iro responder s aces do utilizador: boto premido, movimentos do rato, entrada de dados, etc. Existe um editor separado para cada form da aplicao.

Criar o projecto
No desenvolvimento de qualquer aplicao em VB comea-se por criar um projecto que reunir todas as partes necessrias ao funcionamento da aplicao (forms, mdulos, ...). Para criar um projecto deve-se escolher a opo New Project do menu File e de seguida seleccionar Standard EXE na janela New Project. Nota: Quando se corre o Visual Basic pela primeira vez, a janela New Project surge por defeito. 7

VISUAL BASIC Sebenta Terica (verso 1)

O primeiro exemplo

EXEMPLO Crie ento um projecto da forma indicada.

Desenhar a interface
O primeiro passo no desenvolvimento de uma aplicao consiste em criar o form que ser a base da interface dessa aplicao. De seguida desenham-se os controlos necessrios no form criado. Os controlos so caixas, botes ou texto desenhados no form para receber ou mostrar informao.

Como desenhar um controlo no form? 1. Seleccionar o controlo pretendido na toolbox 2. Mover o apontador do rato para o form - o apontador do rato passa a ser uma cruz 3. Colocar a cruz onde se deseja o canto superior esquerdo do controlo 4. Premir o boto esquerdo do rato e sem largar efectuar um movimento de arrastamento at o controlo ter o tamanho desejado 5. Libertar o boto do rato - o controlo aparece no form

Para mover um controlo basta clicar com o boto esquerdo do rato sobre o controlo a mover e, sem largar, efectuar um movimento de arrastamento at chegar posio pretendida. Para alterar as dimenses selecciona-se o controlo e arrastam-se os handles (8 pequenos quadrados) em seu redor para dar o tamanho desejado.

EXEMPLO (cont.) Neste pequeno exemplo vamos usar 3 tipos de controlos: Controlo Designao Label (etiqueta) Descrio Contm texto e normalmente usado para descrever algo

Text box (caixa de texto) Permite a visualizao e edio de dados Command button (boto de comando) Executa uma aco (previamente associada) quando premido

VISUAL BASIC Sebenta Terica (verso 1)

O primeiro exemplo

Insira os seguintes controlos no form: v 3 labels (etiquetas) v 1 text box (caixa de texto) v 1 command button (boto de comando)

Aps ter inserido estes controlos dever obter algo semelhante ao form a seguir apresentado. O prximo passo ser o de ajustar as propriedades dos controlos e do prprio form.

Ajustar as propriedades
Todos os objectos que constituem a parte visvel de um programa em Visual Basic tm propriedades (o prprio form um objecto e tem propriedades).

Janela das propriedades

As propriedades de um controlo configuram-se na janela das propriedades - Properties Window. Esta janela mostra sempre as propriedades do controlo (eventualmente um form) 9

VISUAL BASIC Sebenta Terica (verso 1)

O primeiro exemplo

seleccionado. Por esta razo, para configurar as propriedades de um objecto necessrio seleccion-lo previamente. Em alguns casos, o valor da propriedade pode ser escolhido de uma lista de opes predefinidas.

EXEMPLO (cont.) Altere ento as seguintes propriedades: Objecto Form Label1 Text1 Propriedade Caption Caption Name Text Label2 Label3 Caption Name Caption Command1 Name Caption Valor Converso Celsius Farenheit Graus Celsius: txtCelsius (vazio) Graus Farenheit: lblFarenheit (vazio) cmdConverter Converter

Escrever o cdigo
O editor de cdigo - Code Editor - do Visual Basic onde se escrevem as instrues de resposta s aces do utilizador. Atravs deste editor pode-se rapidamente ver ou editar o cdigo da aplicao. Para abrir o editor de cdigo basta fazer duplo-clique no controlo ou form para o qual se pretende escrever o cdigo.

Editor de cdigo 10

VISUAL BASIC Sebenta Terica (verso 1)

O primeiro exemplo

O cdigo numa aplicao VB est dividido em pequenos blocos a que se d o nome de procedimentos. Um procedimento de evento - event procedure - contm cdigo que executado quando o evento ocorre como por exemplo quando se prime um boto. Cada objecto possui um conjunto prprio de eventos aos quais reage. O nome de um procedimento de evento sempre composto pelos nomes do objecto e do evento separados por um caracter de underscore (_). Por exemplo, se quisermos que o boto Command1 chame um evento quando premido, usamos o procedimento Command1_Click.

EXEMPLO (cont.) Faa duplo-clique no boto Converter, escolha o evento Click e no espao entre as declaraes "Private Sub cmdConverter_Click()" e "End Sub" escreva a seguinte instruo: lblFarenheit.Caption = 1.8 * txtCelsius.Text +32

Correr e testar a aplicao

EXEMPLO (cont.) Corra a aplicao seleccionando a opo Start que se encontra no menu Run, ou simplesmente premindo a tecla F5. Para testar a aplicao introduza valores na caixa de texto relativa aos graus Celsius, prima o boto Converter e confirme o resultado que aparece na caixa de texto dos graus Farenheit.

Gravar o trabalho
Para guardar o trabalho usa-se a opo Save Project do menu File. O Visual Basic pede ento para indicar os nomes dos forms e do projecto separadamente, bem como o local onde o trabalho ficar guardado. O VB usa as extenses ".frm" para forms e ".vbp" para projectos. Para efectuar alteraes a um programa gravado bastar abrir o ficheiro do projecto, usando para o efeito a opo Open Project do menu File.

EXEMPLO (cont.) Como o nosso pequeno programa tem um nico form, o Visual Basic usar apenas dois ficheiros para o guardar. Por defeito o VB atribuir os nomes "Form1.frm" e "Project1.vbp" ao form e projecto, respectivamente. Estes nomes podem no entanto ser alterados no momento da gravao.

11

VISUAL BASIC Sebenta Terica (verso 1)

O primeiro exemplo

Proceda ento gravao do trabalho. Poder escolher um nome mais apropriado para o projecto, como por exemplo "ConverteGraus".

12

3 - Variveis e Constantes
Tipos de dados
A informao processada por um programa pode ser de diferente natureza e existir em diferentes formatos. Genericamente um programa pode utilizar informao numrica e informao chamada alfanumrica, ou seja texto. A linguagem Visual Basic suporta diversos tipos de dados, entre os quais:

Tipo Integer (inteiro) String (cadeia de caracteres) Boolean (booleano)

Descrio usado para representar inteiros entre -32768 e 32767 usado para representar informao alfanumrica como letras, algarismos e smbolos especiais. usado para representar valores lgicos.

A partir dos tipos de dados preexistentes ainda possvel criar novos tipos de dados especificamente adaptados s necessidades do programador.

Conceito de varivel
Uma varivel uma localizao de memria em que a informao pode ser guardada de modo a ser usada por um programa. Cada varivel caracterizada pelo seu nome e pelo seu tipo, ou seja, o tipo de dados que pode armazenar. O contedo de uma varivel pode mudar durante a execuo do programa. Existem algumas regras governando a escolha do nome duma varivel: Deve obrigatoriamente comear por uma letra No pode conter espaos nem caracteres como vrgulas ou pontos No pode exceder 255 caracteres

VISUAL BASIC Sebenta Terica (verso 1)

Variveis e Constantes

O tipo da varivel especifica qual o tipo de dados que pode conter. Uma varivel de um determinado tipo no est preparada para armazenar dados de um tipo diferente. A razo para este facto que o espao necessrio para armazenar diferentes tipos de dados no o 1 mesmo. Enquanto um inteiro simples pode ser guardado em 2 bytes de memria , para guardar um nmero real pode-se necessitar de 8 bytes (ou mesmo mais, dependendo da preciso requerida).

Noo de varivel

Para armazenar nmeros que podem variar entre -32768 e 32767, ou seja 65536 valores diferentes, h necessidade

de dispor de 16 unidades bsicas de informao (bits), ou seja dois bytes (1 byte = 8 bits). De facto, se cada bit apenas pode representar um valor binrio (0 ou 1), 16 bits podero representar at 216=65536 valores diferentes.

14

VISUAL BASIC Sebenta Terica (verso 1)

Variveis e Constantes

Declarao de varivel
A declarao de variveis o acto pelo qual so criadas. Criar uma varivel envolve dar-lhe um nome e reservar em memria o espao necessrio para que ela possa guardar o tipo de dados para o qual est a ser criada. Nenhuma varivel deve ser utilizada antes de ser criada. A declarao deve, pois, preceder a utilizao. Em Visual Basic, existem duas formas de declarao de variveis: explcita e implcita. A declarao explcita exige (Dimensionar...Como). Por exemplo, Dim Preo As Integer ...cria (declara) uma varivel com o nome Preo e do tipo Integer, ou seja, preparada para receber dados do tipo inteiro simples. Pode-se usar a mesma instruo Dim para declarar mais do que uma varivel de uma s vez desde que se especifique para cada varivel, individualmente, qual o seu tipo. Por exemplo, Dim Preo As Integer, Desconto As Single, IVA As Single ...cria a varivel Preo como sendo do tipo Integer e as variveis Desconto e IVA como sendo do tipo Single. A declarao implcita resume-se a utilizar pela primeira vez uma varivel sem qualquer declarao explcita prvia, dando-lhe um nome e atribuindo-lhe um valor. O Visual Basic cria automaticamente a varivel do tipo correcto. Esta segunda forma de declarar variveis tem, a despeito da sua simplicidade, um problema grave: possvel, por distraco, criar uma varivel nova indesejada, quando o que se pretendia era apenas escrever o nome de uma varivel j existente. Atente-se no exemplo: Suponha que havia criado uma varivel Distancia mediante a instruo Dim Distancia As Integer ...e que adiante no programa, por engano, escrevia Distncia ao referir-se varivel em causa. O Visual Basic no emitir nenhum alerta, j que aceitou tranquilamente Distncia como uma nova varivel. A forma mais prudente de lidar com declaraes de variveis , pois, utilizar apenas declaraes explcitas, e instruir o Visual Basic para no aceitar declaraes implcitas, mediante a seleco da opo "Require Variable Declaration" no sub-menu Options do menu Tools. a utilizao da instruo especfica "Dim ... As"

15

VISUAL BASIC Sebenta Terica (verso 1)

Variveis e Constantes

Outros tipos de dados


A linguagem Visual Basic inclui, entre outros, os seguintes tipos de dados adicionais:

Tipo Long

Descrio inteiro longo, ou seja, compreendido entre -2.147.483.648 e 2.147.483.647 real representado com preciso simples, com valores negativos compreendidos entre cerca de -3,4E38 e -1,4E-45 e valores positivos entre cerca de 1,4E-45 e 3,4E38 real representado com preciso dupla uma varivel deste tipo pode armazenar datas e horas

Single

Double Date

Operao de atribuio
A operao de Atribuio permite guardar um dado numa varivel, ou seja, atribuir-lhe um valor. A sintaxe utilizada por esta operao a seguinte: Varivel = Valor

O resultado da operao ser, portanto, o de guardar Valor em Varivel. Valor pode ser um valor constante ou o contedo de outra varivel. Neste caso, a atribuio consistir na cpia do contedo de uma varivel para outra do mesmo tipo. Conforme veremos mais frente, pode ainda ser atribudo a Varivel o resultado de uma expresso ou o valor devolvido por uma funo. Trata-se de uma operao destrutiva. Se a varivel contiver j um valor, uma operao subsequente de atribuio sobre essa varivel, substituir o valor nela contido pelo novo valor. H ainda que ter em ateno o facto de que no normalmente aconselhvel atribuir um valor de um dado tipo a uma varivel de tipo diferente. Os resultados podem ser a perda de informao ou o mau funcionamento do programa.

16

VISUAL BASIC Sebenta Terica (verso 1)

Variveis e Constantes

Constantes
Uma constante consiste num nome que dado a um valor numrico ou a uma cadeia de caracteres, e que pode ser usado dentro do programa na vez desses valores. Funciona como uma espcie de sinnimo. A utilizao de constantes em substituio dos valores que representa justifica-se pelo seguinte facto: se um dado valor constante for utilizado muitas vezes ao longo dum programa, caso ocorra a necessidade de o modificar, haver necessidade de corrigir manualmente todas as ocorrncias desse valor, correndo, alm disso, o risco de se enganar. Se, ao invs, for definida uma constante com esse valor, bastar modificar essa definio inicial para que tal mudana automaticamente se repercuta em todas as ocorrncias dessa constante no decurso do programa. A sintaxe da definio de constantes a seguinte: Const nome As tipo = expresso

Por expresso entende-se um valor numrico, uma cadeia de caracteres, ou uma expresso cujo resultado seja um destes tipos de valores. Aqui ficam alguns exemplos de declaraes de constantes: Const Pi As Double = 3.14159265358979 Const Raio As Single = 12.5 Const Permetro As Double = 2 * Pi * Raio

Operadores
A linguagem Visual Basic prev os seguintes operadores, utilizveis em expresses:

Operadores Aritmticos + * \ / MOD ^ adio subtraco multiplicao diviso inteira diviso real resto da diviso inteira exponenciao

Operadores Relacionais = igualdade 17

VISUAL BASIC Sebenta Terica (verso 1) <> < > <= >= desigualdade menor que maior que menor ou igual a maior ou igual a

Variveis e Constantes

Operadores Lgicos AND OR NOT conjuno (e) disjuno (ou) negao (no)

Aqui ficam as tabelas de verdade dos operadores lgicos apresentados.

A 0 0 1 1

B 0 1 0 1

A AND B 0 0 0 1

A 0 0 1 1

B 0 1 0 1

A OR B 0 1 1 1

A 0 1

NOT A 1 0

Existe ainda um operador usado para concatenao de strings. Esse operador o &.

Comentrios
Comentrios ao cdigo do programa podem ser inseridos mediante a utilizao da "plica". Assim, todo o texto escrito a seguir a uma plica, ser considerado como um comentrio e no como pertencendo a uma instruo.

Exemplo: ' isto um comentrio

de toda a convenincia a utilizao de comentrios para documentar o programa, o seu objectivo, as funcionalidades dos seus mdulos, as tcnicas particulares utilizadas, o significado de algumas variveis mais importantes, e outros detalhes cujo significado no seja bvio. Tal informao ser preciosa quando futuramente se pretender corrigir ou modificar o programa.

18

VISUAL BASIC Sebenta Terica (verso 1)

Variveis e Constantes

Convenes a seguir na escolha de nomes de objectos


Se bem que no seja obrigatrio, o seu uso , no entanto, conveniente, para permitir identificar com facilidade o tipo de objecto a que um dado nome se refere.

Classe de Objecto Form CommandButton Frame Horizontal ScrollBar Image Label List Box Menu Option Button Picture Box Text Box Vertical SrcrollBar

Nome comea por Frm Cmd Fra Hsb Img Lbl Lst Mnu Opt Pic Txt Vsb

19

4 - Estruturas de controlo condicional


Muitos problemas requerem que diferentes cursos de aco sejam escolhidos em funo do estado de uma determinada condio. As estruturas de controlo permitem condicionar o fluxo do programa, ou seja, a sequncia pela qual as instrues so executadas.

Estruturas de seleco simples


Uma estrutura de controlo fundamental a estrutura condicional, ou de seleco. Usando esta estrutura, as instrues podem ser executadas condicionalmente. Se uma dada condio for verdadeira, ser executada uma dada sequncia de instrues. Se for falsa, uma sequncia diferente ser escolhida. A estrutura If ... Then efectua o teste de uma condio. Se tal condio for verdadeira, desencadear a execuo das instrues representadas por Aco1. Em caso contrrio, ser executada a Aco2.

Sintaxe:

If condio Then Aco1 Else Aco2 End If


ACO_2

NO
TESTE da Condio

SIM

ACO_1

IF condio THEN aco_1 ELSE aco_2

A condio pode consistir numa comparao, ou em qualquer expresso de que resulte um valor numrico: um valor no nulo ser interpretado como Verdadeiro, enquanto um valor nulo ser considerado como Falso. A condio , portanto, uma expresso booleana (lgica). Uma expresso booleana representa um valor booleano, TRUE (verdadeiro) ou FALSE (falso) e pode ser constituda por uma varivel, uma funo ou uma combinao destas entidades atravs de operaes.

Exemplos de condies: X >= 100

VISUAL BASIC Sebenta Terica (verso 1) Saldo > limite_credito (Nota > 0) And (Nota < 20) (X >= 100) And ((Y=20) Or (Y=40)) sqr(X) <= 1000 Not encontrado

Estruturas de controlo condicional

possvel combinar vrios operadores lgicos na mesma condio

H casos em que desejvel executar uma sequncia de instrues caso uma dada condio se verificar, e nada no caso contrrio. Nessa situao deve ser utilizada a seguinte variante da estrutura de controlo condicional:

Sintaxe:

If condio Then Aco

TESTE da Condio

SIM

NO

End If

ACO

IF condio THEN aco

Nota: Caso a instruo If...Then seja escrita numa s linha, dispensado o uso do delimitador End If.

Exemplos de utilizao: 1) If nota > 10 Then Positivas = Positivas + 1 End If

2)

If NotaTeste >= 10 Then lblResultado.Caption = Passado Else lblResultado.Caption = Reprovado End If 21

VISUAL BASIC Sebenta Terica (verso 1)

Estruturas de controlo condicional

Estruturas de seleco embutidas


Estrutura If ... Then ... ElseIf ... possvel imbricar estruturas condicionais dentro de outras estruturas condicionais, permitindo, assim, a construo de estruturas de controlo mais complexas. Para inserir uma estrutura condicional dentro de outra, utilizada a palavra reservada ElseIf.

A sintaxe a seguinte: If condio1 Then Aco1 ElseIf condio2 Then Aco2 ElseIf condio3 Then ... Else AcoN End If

instruco 1

Verdadeira (V) Condio_1 V instruco 2A

Falsa (F)

Condio_2 V instruco 2B

Condio_3

IFs

instruco 2C

instruco 2D

instruco 3

Esta estrutura condicional permite a seleco de uma entre vrias alternativas mutuamente exclusivas. As instrues que se seguem palavra reservada Else (aqui representadas por "AcoN") sero executadas apenas se nenhuma das condies se tiver verificado.

22

VISUAL BASIC Sebenta Terica (verso 1)

Estruturas de controlo condicional

possvel imbricar um qualquer nmero de blocos ElseIf dentro de uma dada estrutura condicional.

Exemplo: Private Sub cmdGo_Click() Dim nota As Single nota = txtNotas.Text If (nota < 0) Or (nota > 20) Then lblSaida.Caption = "Nota Invlida!" ElseIf nota < 6 Then lblSaida.Caption = "Mau" ElseIf nota < 10 Then lblSaida.Caption = "Medocre" ElseIf nota < 14 Then lblSaida.Caption = "Suficiente" ElseIf nota < 17 Then lblSaida.Caption = "Bom" Else lblSaida.Caption = "Muito Bom" End If End Sub

23

VISUAL BASIC Sebenta Terica (verso 1) Estrutura Select ... Case

Estruturas de controlo condicional

A estrutura de seleco Select ... Case muito semelhante estrutura If ... Then ... ElseIf, no entanto, a sua utilizao apenas pode ser feita nas situaes em que a condio a testar depende do valor de uma nica varivel.

Sintaxe da estrutura Select ... Case: Select Case varivel Case valor1 Aco1 Case valor2 Aco2 Case valor3 Case Else AcoN End Select

Pode ser includo um nmero qualquer de clusulas Case numa estrutura Select ... Case e pode-se indicar mais do que um valor numa clusula Case, desde que separados por vrgulas. tambm possvel utilizar operadores de comparao (operadores relacionais) para indicar gamas de valores nas clusulas Case. Para utilizar esses operadores temos que recorrer s palavras reservadas Is ou To de forma a identificar o tipo de comparao.

Exemplos de clusulas Case: Case 3.5 Case 1, 2 Case Is <= 500 Case 10 To 20 ...se a varivel tiver o valor 3.5 ...se a varivel tiver o valor 1 ou 2 ...se a varivel tiver um valor menor ou igual a 500 ...se a varivel tiver um valor entre 10 e 20, inclusive

Tal como na estrutura If Then ElseIf, a seleco da aco a tomar feita de entre vrias alternativas mutuamente exclusivas. A aco relativa clusula Case Else ser executada apenas se o valor da varivel a testar no encaixar em nenhuma clusula anterior.

24

VISUAL BASIC Sebenta Terica (verso 1) Exemplo:

Estruturas de controlo condicional

A substituio da estrutura If ... Then ... ElseIf, usada no exemplo atrs apresentado, pela estrutura Select ... Case poderia ser feita da seguinte forma: Private Sub cmdGo_Click() Dim nota As Single nota = txtNotas.Text Select Case nota Case Is < 0 lblSaida.Caption = "Nota Invlida!" Case Is < 6 lblSaida.Caption = "Mau" Case Is < 10 lblSaida.Caption = "Medocre" Case Is < 14 lblSaida.Caption = "Suficiente" Case Is < 17 lblSaida.Caption = "Bom" Case 17 To 20 lblSaida.Caption = "Muito Bom" Case Else lblSaida.Caption = "Nota Invlida!" End Select End Sub

25

5 - Estruturas de controlo repetitivo


Enquanto as estruturas de controlo condicional permitem alterar o fluxo do programa mas sem deixar de executar de forma linear uma dada sequncia de instrues, as estruturas de controlo repetitiva (tambm conhecidas por ciclos) permitem repetir um dado conjunto de instrues o nmero de vezes que for necessrio. Existem diversas variantes de ciclos, diferindo umas das outras pela forma como controlada a execuo das instrues contidas no corpo do ciclo. Genericamente, pode-se dizer que uma estrutura de controlo repetitiva (ou ciclo) assegura a execuo repetida de um dado conjunto de instrues dependendo do resultado do teste de uma determinada condio de funcionamento.

Diagrama de fluxo possvel de um ciclo

Ciclo For ... To ... Next


Este ciclo permite repetir um dado conjunto de instrues um nmero predeterminado de vezes. Nem sempre possvel saber partida quantas vezes as instrues contidas no corpo do ciclo devem ser repetidas. Nesse caso, devero ser utilizadas outras estruturas de controlo repetitivo que no o ciclo For ... To ... Next.

VISUAL BASIC Sebenta Terica (verso 1) A sintaxe desta estrutura de controlo repetitiva : For varivel = incio To fim Step passo Instruo1 Instruo2 InstruoN Next varivel

Estruturas de controlo repetitivo

Funcionamento do ciclo For To Next

Esta estrutura baseia-se na existncia dum contador que incrementa automaticamente o contedo de varivel, chamada varivel de controlo do ciclo, cada vez que o ciclo funciona, isto , cada vez que as instrues contidas no corpo do ciclo so executadas. O valor inicial dessa varivel incio.

27

VISUAL BASIC Sebenta Terica (verso 1)

Estruturas de controlo repetitivo

A inicializao da varivel contadora, o seu incremento/decremento e a verificao da condio de funcionamento do ciclo (varivel <= fim) da responsabilidade da prpria estrutura de controlo. O programador deve, apenas, especificar qual o valor de incio e de fim (ou, por outras palavras, o nmero de vezes que o ciclo vai funcionar) e quais as instrues que o ciclo vai repetir (o corpo do ciclo). O contedo da varivel de controlo do ciclo pode ser utilizado por instrues contidas no corpo do ciclo, mas no deve, sob pretexto algum, ser modificado por estas instrues, sob pena de se perder o controlo do funcionamento do ciclo. A estrutura de controlo verifica no incio de cada iterao (repetio) do ciclo se a condio de funcionamento do ciclo ainda verdadeira. Caso seja falsa, o ciclo terminar, e o programa passar a executar as instrues que se seguem. A incluso de Step opcional: caso se pretenda que o contedo da varivel contadora seja incrementada uma unidade de cada vez, desnecessrio especificar passo, caso contrrio, passo permitir incrementar o valor de varivel de um valor diferente da unidade (positivo ou negativo). Caso o valor de passo seja positivo a varivel contadora ser incrementada. Se pretendermos, no entanto, efectuar um decremento, dever ser utilizado um valor negativo para passo. Obviamente, nesse caso, a condio de funcionamento do ciclo passar a ser varivel >= fim.

Exemplos: 1) o ciclo abaixo calcula o factorial de Numero Factorial = 1 For num = 1 To Numero Factorial = Factorial * num Next num

2)

verso utilizando decremento da varivel de controlo (num) Factorial = 1 For num = Numero To 1 Step -1 Factorial = Factorial * num Next num

3)

determinao do maior divisor de um dado nmero inteiro (sem ser o prprio nmero) MaxDivisor = 1 For CandidatoADivisor = 2 To Numero \ 2 If Numero Mod CandidatoADivisor = 0 Then MaxDivisor = CandidatoADivisor Next CandidatoADivisor

28

VISUAL BASIC Sebenta Terica (verso 1) If MaxDivisor = 1 Then MaxDivisor = Numero

Estruturas de controlo repetitivo

lblSaida.Caption = Str(Numero) & " nmero primo" Else lblSaida.Caption = MaxDivisor End If

Ciclo Do While
A estrutura For ... To ... Next permite realizar um ciclo controlado por um varivel contadora que incrementada ou decrementada at atingir um valor final pr-fixado. possvel obter este efeito usando estruturas de controlo alternativas, como seja a estrutura Do While.

Sintaxe:

Do While condio [Corpo do Ciclo] Loop

Ciclo controlado por contador Um ciclo controlado por contador baseado na estrutura Do While pode assumir a seguinte forma genrica:

contador = valor_inicial Do While contador <= valor_final ' Corpo do Ciclo contador = contador + 1 Loop

29

VISUAL BASIC Sebenta Terica (verso 1)

Estruturas de controlo repetitivo

Ciclo controlado por contador

Exemplo: Factorial = 1 contador = 1 Do While contador <= Numero Factorial = Factorial * contador contador = contador + 1 Loop

30

VISUAL BASIC Sebenta Terica (verso 1)

Estruturas de controlo repetitivo

Questes a ter em conta na construo de um ciclo Do While controlado por contador: Especificar a condio de funcionamento do ciclo Inicializar a varivel contadora Incluir no corpo do ciclo uma instruo que incremente ou decremente a varivel contadora

Estas aces encontram-se asseguradas de forma automtica no caso da estrutura For ... To ... Next. Em todas as outras formas de ciclos, como seja o ciclo Do While, da responsabilidade do utilizador assegurar-se de que tais aces so correctamente executadas.

Ciclo Do Until

Sintaxe:

Do Until condio [Corpo do Ciclo] Loop

Neste caso a condio especificada a condio de termo do ciclo. O ciclo ser executado at que ("until") a condio de termo seja verdadeira. possvel, assim, transformar um ciclo Do While em Do Until negando a condio de funcionamento.

Exemplo: Factorial = 1 contador = 1 Do Until contador > Numero Factorial = Factorial * contador contador = contador + 1 Loop

31

VISUAL BASIC Sebenta Terica (verso 1) Ciclos controlados por sentinela

Estruturas de controlo repetitivo

Nem sempre possvel conhecer partida o nmero de vezes que o ciclo vai ser executado, ou seja, quantas vezes as instrues contidas no corpo do ciclo vo ser repetidas. Nesses casos, no vivel a utilizao de ciclos controlados por contador, devendo-se usar uma tcnica diferente: ciclos controlados por sentinela. Por sentinela deve entender-se um valor limite que assinala o fim de uma dada sequncia de valores, mas que no esteja includo nesse conjunto de valores. Por exemplo, se o utilizador estiver a introduzir os dados referentes a um conjunto de alunos identificados pelos seus nmeros de matrcula, a introduo de um nmero com menos de 6 dgitos (no caso do ISEP) como por exemplo o valor 1, permitir indicar ao programa que a presente sequncia de introduo de dados deve terminar. A seleco do valor sentinela da responsabilidade do programador, devendo ser escolhido fora do intervalo possvel de valores a introduzir, podendo ainda, ter-se em ateno a possvel ocorrncia de valores fora desse intervalo que possam resultar de algum eventual erro de digitao. O valor sentinela escolhido no deve pois ser passvel de facilmente ocorrer por mero acidente.

Exemplos: 1) Dim Numero As Long Do While Numero <> 1 Numero = InputBox ("Digite o numero de identificao", "ISEP - Entrada de dados de alunos") If Numero <> 1 Then lstbox1.AddItem Numero Loop

Nota: Neste exemplo, a varivel numero no foi inicializada pelo programador. Quando esta tarefa no realizada antes da utilizao da varivel, o prprio Visual Basic se encarrega de a inicializar a zero.

2)

num = InputBox("Introduza um nmero positivo no nulo.", "Clculo de factoriais") Do Until num < 0 ' calculo e apresentao do factorial de num num = InputBox("Introduza um numero positivo no nulo.", "Clculo de factoriais") Loop

32

VISUAL BASIC Sebenta Terica (verso 1)

Estruturas de controlo repetitivo

Ciclos imbricados
Foi dito anteriormente que o corpo de um ciclo era constitudo pelo conjunto de instrues que o ciclo ir executar repetidamente. Foi tambm dito que nesse conjunto de instrues se poderiam incluir qualquer tipo de instrues, mesmo constituindo outras estruturas de controlo repetitivo. Prosseguindo com os exemplos apresentados na seco anterior, abaixo se pode ver um exemplo de uma utilizao de um ciclo dentro de outro. Destes ciclos se diz que se encontram imbricados um dentro do outro.

Ilustrao grfica dos dois ciclos imbricados do exemplo seguinte

33

VISUAL BASIC Sebenta Terica (verso 1) Exemplos: 1) Leitura do 1 nmero cujo factorial vai ser calculado

Estruturas de controlo repetitivo

num = InputBox("Introduza um numero positivo no nulo", "Calculo de factoriais") Do Until num < 0 'calculo do factorial de num factorial = 1 contador = 1 Do Until contador > num factorial = factorial * contador contador = contador +1 Loop Leitura do nmero seguinte num = InputBox("Introduza um nmero positivo no nulo", "Clculo de factoriais") Loop

Este exemplo utiliza apenas ciclos controlados por sentinela. Quando se usa um ciclo controlado por contador imbricado num outro ciclo controlado por contador, h que ter o cuidado de criar e utilizar diferentes variveis de controlo para cada ciclo.

2)

... For i = 1 To Njornadas For j = 1 To Nequipas Corpo do ciclo interior Next j Next i ...

Neste exemplo, para cada valor da varivel de controlo i (do ciclo exterior), o ciclo interior executado Nequipas vezes. As instrues contidas no corpo do ciclo interior sero assim efectuadas um total de Njornadas x Nequipas vezes.

34

VISUAL BASIC Sebenta Terica (verso 1)

Estruturas de controlo repetitivo

Ciclos com teste no fim


Nas estruturas Do While e Do Until, o teste da condio de funcionamento (ou de termo) efectuada no incio, isto , antes da execuo das instrues contidas no corpo do ciclo. Esto disponveis, no entanto, variantes das estruturas referidas, em que esse teste efectuado aps a execuo do corpo do ciclo. O resultado bvio desta particularidade o facto de as instrues constantes do corpo do ciclo serem obrigatoriamente executadas pelo menos uma vez. Efectivamente, mesmo que a condio de funcionamento seja partida falsa (ou a condio de termo seja partida verdadeira) o corpo do ciclo ser executado, pois a verificao dessas condies ser efectuada num momento posterior. Essas variantes so as estruturas de controlo repetitivo Do ... Loop While e Do Loop Until.

Sintaxe Do Loop While:

Do [Corpo do Ciclo] Loop While condio

Exemplo: Do ref = Val(InputBox(Nova referncia:, Programa de Stock)) If ref > 0 Then lstLista.AddItem ref End If Loop While ref > 0

O ciclo do exemplo anterior controlado por sentinela (qualquer valor negativo). Mesmo que um valor negativo seja introduzido em primeiro lugar, o corpo do ciclo ser executado, pelo que

35

VISUAL BASIC Sebenta Terica (verso 1)

Estruturas de controlo repetitivo

ser necessrio prever um teste adicional do valor ref lido para evitar que um valor sentinela seja adicionado lista.

Sintaxe Do Loop Until:

Do [Corpo do Ciclo] Loop Until condio

Exemplo: Num = Val(InputBox(Digite um n positivo ou 0 p/ acabar, Entrada de dados)) Do Soma = soma + num Num = Val(InputBox(Digite um n positivo ou 0 p/ acabar, Entrada de dados)) Loop Until num < 0

Caso o primeiro nmero a ser lido seja um nmero negativo, a condio de termo ser de imediato verdadeira, mas como o seu teste s ser feito aps a execuo do corpo do ciclo, a instruo soma = soma + num ser executada uma vez. Nesse caso, seria talvez mais aconselhvel utilizar uma estrutura com teste no incio, ou adicionar um teste suplementar ao corpo do ciclo, como no primeiro exemplo.

36

6 - Vectores e Matrizes
Vectores
At agora, temos trabalhado essencialmente com variveis que podemos classificar como individuais, isto , cada varivel podendo conter ao mesmo tempo apenas um s valor. Como essas variveis no podem conter simultaneamente mais que um dado, a atribuio de um novo valor a essa varivel implica a destruio do valor anteriormente nela contido. Mediante a utilizao de um novo tipo de variveis, as variveis do tipo Array (Vector), passa a ser possvel armazenar na mesma varivel mltiplos valores desde que sejam do mesmo tipo. Estamos, portanto, a utilizar agora variveis que se podem classificar como variveis mltiplas.

var_Simples

12

var_Multipla ndice

13 0

5 1

37 2

132 3

90 4

19 5

286 6

44 7

Uma varivel simples var_Simples e um vector var_Mltipla com 8 elementos

Um vector uma lista ordenada de variveis simples do mesmo tipo. Pode tambm ser visto como um conjunto de variveis simples agrupadas. Todos as variveis membros desse vector partilham o mesmo nome (o nome do vector). So identificadas individualmente mediante o valor dum ndice, que determina qual a sua posio dentro do vector. Os valores do ndice devem obrigatoriamente ser do tipo Integer. O primeiro valor do ndice zero. Um elemento de um vector identificado utilizando o nome do vector seguido do valor do ndice dentro de parntesis: nome_vector ( ndice )

Exemplos: var_Multipla(3) var_Multipla(7) notas(14) nomes(0) 4 elemento do vector var_Multipla 8 e ltimo elemento do vector var_Multipla 15 elemento do vector notas 1 elemento do vector nomes

VISUAL BASIC Sebenta Terica (verso 1) Declarao de vectores

Vectores e Matrizes

Como qualquer outra varivel, uma varivel do tipo Array deve tambm ser declarada (criada) antes de poder ser usada. Para tal, deve ser usada a instruo Dim, que reserva espao em 2 memria suficiente para armazenar o nmero previsto de elementos do vector . Uma das formas de utilizar a instruo Dim para declarar vectores a seguinte: Dim nome_vector(num_elementos) As Tipo

Exemplos: Dim var_Multipla(8) As Integer Dim notas(30) As Single Dim nomes(100) As String

Nota: num_elementos no se refere ao valor mximo que a varivel ndice pode assumir (7, no caso do vector var_Multipla) mas sim ao nmero de elementos do vector (8, neste caso).

Usando esta forma na declarao de vectores, o processo de indicar o limite inferior faz-se de forma implcita: por defeito assume-se como limite inferior do ndice o valor zero (ou 1 se tal for especificado mediante a instruo Option Base 1). Uma forma alternativa de utilizar a instruo Dim para declarar vectores implica a utilizao da palavra reservada To, permitindo especificar o menor e o maior valor que o ndice pode assumir: Dim nome_vector(menorndice To maiorndice) As Tipo

Exemplos: Dim numeros(100 To 200) As Integer Dim valores(-100 To 100) As Single

Processamento de vectores Sendo um vector uma varivel mltipla composta por elementos do mesmo tipo agrupados na mesma estrutura, a forma mais adequada de executar uma mesma aco sobre parte ou a totalidade dos seus elementos utilizando uma estrutura de controlo repetitivo ou ciclo.

Adicionalmente, a instruo Dim atribui valores iniciais a todos os elementos do vector (zeros no caso de vectores

numricos e strings nulas no caso de vectores alfa-numricos)

38

VISUAL BASIC Sebenta Terica (verso 1) Exemplos: 1) Private Sub cmdGo_Click() Dim vectorSqr(100) As Double Dim Maior as Integer Dim i As Integer Dim res As Single lstTabela.Clear Maior = Val(txtMaior.Text) For i = 0 To Maior res = Sqr(i) vectorSqr(i) = res lstTabela.AddItem Format(res, "0.000") Next i End Sub varivel ndice

Vectores e Matrizes

Este programa permite calcular e apresentar sob a forma de uma tabela as razes quadradas de todos os nmeros inteiros compreendidos entre 0 e um dado limite superior a especificar pelo utilizador na TextBox txtMaior (a largura do intervalo no deve exceder 100). Os valores calculados so armazenados num vector para eventual futura utilizao.

2) Private Sub cmdGo_Click() Dim vector(100) As Double Dim Menor As Integer Dim Maior As Integer Dim i As Integer Dim indice As Integer Dim res As Single Dim linha As String lstTabela.Clear Menor = Val(txtMenor.Text) Maior = Val(txtMaior.Text) indice = 0 39

VISUAL BASIC Sebenta Terica (verso 1) For i = Menor To Maior res = Sqr(i) vector(indice) = res

Vectores e Matrizes

linha = Format(Str(i), "##0") & " - " & Format(vector(indice), "000.000") lstTabela.AddItem linha indice = indice + 1 Next i End Sub

Nesta variante possvel especificar tambm o limite inferior do intervalo, para alm de se demonstrar algumas tcnicas de formatao da sada de dados. De notar que na primeira verso do programa (exemplo 1) se usou a mesma varivel i para controlar o ciclo For e para armazenar os valores nos ndices do vector. Tal aconteceu porque foi possvel estabelecer naquele caso uma correspondncia directa entre os valores da varivel de controlo do ciclo i e os valores do ndice que controla as posies dos elementos do vector. Nesta segunda verso tal no era possvel, visto que a varivel de controlo do ciclo iria conter valores (desde o limite inferior ao limite superior do intervalo) que poderiam no corresponder s posies do vector em que os resultados iriam ser armazenados. Em qualquer das variantes apresentadas, o processamento dos elementos do vector consistiu em operaes de escrita (de atribuio) que modificaram o seu contedo. igualmente possvel efectuar operaes de leitura sobre todos ou parte dos elementos dum vector. Nesse caso, como bvio, a varivel do tipo Array dever encontra-se do lado direito da operao de atribuio: var = vector(ndice)

Pesquisa em vectores Vrios mtodos podem ser seguidos para procurar informao armazenada em vectores. O mtodo mais simples o da pesquisa linear (ou sequencial). Tal mtodo consiste em posicionarmo-nos no primeiro elemento do vector e comparar o contedo desse elemento com o valor a procurar. Caso sejam iguais a busca termina e no caso de no serem iguais, efectua-se a mesma comparao em relao ao contedo do elemento seguinte e assim sucessivamente at que a busca obtenha sucesso, ou at que o ltimo elemento do vector seja alcanado.

40

VISUAL BASIC Sebenta Terica (verso 1)

Vectores e Matrizes

vec ndice

49 0

13 1

5 2

37 3

132 4

90 5

19 6

286 7

44 8

num

19

Exemplo: Para verificar se o valor contido na varivel num se encontra armazenado no vector vec, podemos usar o programa que a seguir se apresenta. Este programa encontra-se dividido em dois procedimentos, um associado ao boto de comando Go e o outro ao boto Pesquisa. O primeiro serve para encher o vector vec com valores que possam posteriormente ser pesquisados. O segundo destina-se a pesquisar dentro de vec a existncia de um dado nmero inteiro a indicar pelo utilizador. Repare-se nas duas declaraes iniciais colocadas fora de qualquer procedimento. Diz-se que estas declaraes so globais j que, pelo facto de se encontrarem na seco General do programa em vez de inseridas num dado procedimento, so reconhecidas por todos os procedimentos do programa, e portanto, acessveis de dentro de qualquer deles.

41

VISUAL BASIC Sebenta Terica (verso 1) Const N As Integer = 9 Dim vec(N) As Integer

Vectores e Matrizes

Private Sub cmdGo_Click() Dim i As Integer Dim texto As String lstVector.Clear For i = 0 To N - 1 texto = "Vec(" + str(i) + "):" vec(i) = Val(InputBox(texto, "Entrada de Dados")) lstVector.AddItem vec(i) Next i End Sub

Private Sub cmdPesquisa_Click() Dim i As Integer Dim num As Integer num = Val(InputBox("Valor a pesquisar:", "Pesquisa em Vector")) i=0 Do Until (num = vec(i)) Or (i > N - 1) i=i+1 Loop If i < N Then lblBusca.Caption = "Encontrado na posio" + str(i + 1) Else lblBusca.Caption = "No encontrado" End If End Sub

42

VISUAL BASIC Sebenta Terica (verso 1)

Vectores e Matrizes

Outro mtodo bastante usado para procurar informao armazenada em vectores o mtodo da pesquisa binria. Trata-se de uma alternativa mais rpida procura sequencial mas exige que os elementos do vector estejam ordenados (por ordem ascendente ou descendente). Este mtodo consiste em pesquisar sucessivamente os elementos a meio de subintervalos do vector, subintervalos esses que vo sendo reduzidos a metade. Comea-se ento por verificar o elemento a meio do vector. Se no for o valor procurado, ento este s pode estar na metade inferior ou superior do vector, uma vez que suposto o vector estar ordenado. Assim, a segunda pesquisa incide apenas sobre metade do vector. Este processo repete-se at se encontrar o elemento desejado (sucesso) ou determinar que no se encontra no vector (insucesso). Repare-se que o nmero de elementos a pesquisar vai sendo reduzido sucessivamente a metade. Da a designao de pesquisa binria e a razo pela qual mais rpida que a sequencial.

Exemplo 1: Para verificar se o valor contido na varivel num se encontra armazenado no vector vec (considerando que este vector se encontra ordenado de forma ascendente) podemos usar o procedimento seguinte:

Private Sub cmdPesquisa_Click() Dim num As Integer, inf As Integer, sup As Integer, med As Integer Dim encontrado As Boolean num = Val(InputBox("Valor a pesquisar:", "Pesquisa em Vector")) encontrado = False inf = 0 sup = N - 1 Do While inf <= sup And Not encontrado med = (inf + sup) \ 2 If num > vec(med) Then inf = med + 1 ElseIf num < vec(med) Then sup = med 1 Else encontrado = True End If Loop

43

VISUAL BASIC Sebenta Terica (verso 1) If encontrado = True Then lblBusca.Caption = "Encontrado na posio" + str(i + 1) Else lblBusca.Caption = "No encontrado" End If End Sub

Vectores e Matrizes

Exemplo 2: Sucesso na pesquisa do valor 6


Passo 1: inf 1 -3 2 -1 3 1 med 4 2 =? 6 Passo 2: pesquisar subintervalo superior inf 1 -3 2 -1 3 1 4 2 5 6 med 6 10 =? 6 Passo 3: pesquisar subintervalo inferior med inf sup 1 -3 2 -1 3 1 4 2 5 6 =? inf sup Limite inferior do subintervalo Limite superior do subintervalo SUCESSO 6 6 10 6 = med 7 13 8 25 7 13 6 < med sup 8 25 5 6 6 > med 6 10 7 13 sup 8 25

med Ponto mdio = ( inf + sup ) \ 2

44

Passo 1: inf 1 -3 2 -1 3 1 med 4 2 =? 4 Passo 2: pesquisar subintervalo superior inf 1 -3 2 -1 3 1 4 2 5 6 med 6 10 =? 4 Passo 3: pesquisar subintervalo inferior med inf sup 7 13 4 < med sup 8 25 5 6 4 > med 6 10 7 13 sup 8 25

1 -3

2 -1

3 1

4 2

5 6 =? 4

6 10 4 < med

7 13

8 25

Passo 4: pesquisar subintervalo inferior sup inf

1 -3

2 -1

3 1

5 6

6 10

7 13

8 25

Limite inferior > Limite superior

INSUCESSO

VISUAL BASIC Sebenta Terica (verso 1) Ordenao de vectores

Vectores e Matrizes

Existem vrios mtodos para ordenar vectores e essa ordenao pode sempre ser feita de forma ascendente (do menor valor para o maior) ou descendente (do maior para o menor valor). Um dos mtodos mais simples o da ordenao por seleco. Este mtodo consiste em posicionarmo-nos no primeiro elemento do vector e comparar o seu contedo com todos os outros elementos. Sempre que se encontrar um elemento cujo valor seja menor que o da primeira posio ento os valores so trocados entre si. Quando a comparao do primeiro elemento do vector com todos os outros termina temos a garantia de que o valor do primeiro elemento j o menor de todos. Nesta altura avana-se para o segundo elemento e compara-se o seu contedo com todos os elementos que lhe seguem no vector (terceiro, quarto, ...) trocando os valores sempre que se encontre um elemento de menor valor. Este processo repete-se at se chegar ao fim do vector, altura em que se conclui a ordenao do vector.

Vector desordenado:

vec ndice

49 0

13 1

5 2

37 3

132 4

90 5

19 6

286 7

44 8

Vector ordenado de forma ascendente:

vec ndice

5 0

13 1

19 2

37 3

44 4

49 5

90 6

132 7

286 8

Exemplo1: O programa que a seguir se apresenta faz a ordenao do vector de forma ascendente, tal como se mostrou na figura anterior. O programa encontra-se dividido em dois procedimentos, o primeiro associado ao boto de comando Go que serve para encher o vector e o segundo ao boto Ordenar que efectua a ordenao ascendente dos valores introduzidos e que ficaram guardados no vector vec.

46

VISUAL BASIC Sebenta Terica (verso 1) Const N As Integer = 9 Dim vec(N) As Integer

Vectores e Matrizes

Private Sub cmdGo_Click() Dim i As Integer Dim texto As String lstVector.Clear lstVectorOrdenado.Clear For i = 0 To N - 1 texto = "Vec(" + str(i) + "):" vec(i) = Val(InputBox(texto, "Entrada de Dados")) lstVector.AddItem vec(i) Next i End Sub

Private Sub cmdOrdenar_Click() Dim i As Integer Dim j As Integer Dim temp As Integer For i = 0 To N - 2 For j = i + 1 To N - 1 If vec(j) < vec(i) Then temp = vec(i) vec(i) = vec(j) vec(j) = temp End If Next j Next i For i = 0 To N - 1 lstVectorOrdenado.AddItem vec(i) Next End Sub

47

VISUAL BASIC Sebenta Terica (verso 1) Exemplo 2: Ordenao do vector de forma crescente
Passo 1: ordenar 1 elemento 1 2 3 10 5 1 5 Menor que 10 ?

Vectores e Matrizes

4 7

Sim Troca

1 5

2 10

3 1

4 7

1 5

2 10

3 1 1 Menor que 5 ?

4 7

Sim Troca

1 1

2 10

3 5

4 7

1 1

2 10

3 5

4 7 7 Menor que 1 ?

Passo 2: ordenar 2 elemento 1 2 3 1 10 5 5 Menor que 10 ? 1 1 2 5 3 10

4 7

Sim Troca

1 1

2 5

3 10

4 7

4 7 7 Menor que 5 ?

Passo 3: ordenar 3 elemento 1 2 3 1 5 10

4 7 Sim 7 Menor que 10 ? Troca 1 1 2 5 3 7 4 10

48

VISUAL BASIC Sebenta Terica (verso 1)

Vectores e Matrizes

Matrizes Arrays bidimensionais


Por vezes torna-se necessrio guardar informao que de alguma forma se encontra relacionada entre si. Por exemplo, quando estamos a trabalhar com sistemas de coordenadas a trs dimenses, cada ponto referenciado atravs das suas coordenadas X, Y e Z. Se pretendssemos guardar 10 pontos desse sistema de coordenadas poderamos usar um array bidimensional, tal como se mostra a seguir.

X 0 0 1 Pontos 2 3 4

Y 1

Z 2 ndice_coluna

ndice_linha

Exemplo de uma matriz 5 x 3 (5 linhas e 3 colunas)

Os elementos de uma matriz so identificados utilizando o nome da matriz seguido dos ndices, linha e coluna, entre parntesis: nome_matriz (ndice_linha, ndice_coluna)

Exemplos: Coord(2, 0) notas(1, 3) nomes(0, 0) coordenada X do 3 ponto elemento que se encontra na 2 linha e 4 coluna da matriz notas 1 elemento da matriz nomes encontra-se na 1 linha e 1 coluna

Declarao de matrizes Tal como na declarao de vectores, a declarao de matrizes pode ser feita indicando apenas o nmero de elementos de cada dimenso (nmero de linhas e colunas), ou usando a palavra reservada To, permitindo especificar o menor e o maior valor que os ndices de cada dimenso podero assumir.

49

VISUAL BASIC Sebenta Terica (verso 1) Exemplos: Dim Coord(5, 3) As Single Dim Coord(1 To 5, 1 To 3) As Single

Vectores e Matrizes

Processamento de matrizes Nas matrizes, tal como nos vectores, a forma mais adequada de executar uma mesma aco sobre parte ou a totalidade dos seus elementos utilizando duas estruturas de controlo repetitivo: uma para processar as linhas e outra para as colunas da matriz.

Exemplo: Private Sub cmdCriarMatriz_Click() Dim Matriz(100, 100) As Integer Dim Linhas As Integer Dim Colunas As Integer Dim i As Integer Dim j As Integer Dim Texto As String lstTabela.Clear Linhas = Val(txtLinhas.Text) Colunas = Val(txtColunas.Text) For i = 0 To Linhas - 1 Texto = "" For j = 0 To Colunas - 1 Matriz(i, j) = i + j Texto = Texto & Format(Matriz(i, j), "@@ ") Next j lstTabela.AddItem Texto Next i End Sub

Este programa apresenta uma matriz em que cada elemento achado somando os ndices que o identificam. As dimenses da matriz a ser criada so especificadas pelo utilizador e os valores calculados so armazenados numa matriz para eventual futura utilizao. 50

VISUAL BASIC Sebenta Terica (verso 1)

Vectores e Matrizes

De notar que neste programa se usaram duas variveis: i e j, para controlar os ciclos de repetio e armazenar os valores achados na respectiva matriz. A varivel i percorre todas as linhas e para cada linha usada a varivel j para percorrer as colunas.

Vectores de controlos
possvel criar Arrays de Controlos, isto , conjuntos de objectos de controlo do mesmo tipo, agrupados sob o mesmo nome e identificveis atravs do valor de um ndice (contido na propriedade Index de cada elemento do vector de controlos). Usando estes vectores, torna-se possvel dar a um programa a capacidade de criar de forma dinmica um dado conjunto de objectos do mesmo tipo, sem ter que especificar previamente o seu nmero, ou de modificar em bloco propriedades desses controlos durante a execuo do programa. Os elementos desses Arrays de Controlo podem ser introduzidos manualmente, por exemplo, duplicando um controlo preexistente, mediante a sequncia de cpia e insero (Ctrl-C + Ctrl-V), ou usando a instruo Load durante a execuo do programa. No exemplo seguinte, o objecto txtBox original foi criado manualmente e foi dado o valor de zero sua propriedade Index. O programa encarregou-se de criar os restantes elementos do vector de controlos, no nmero especificado pelo utilizador.

Exemplo: Private Sub cmdGo_Click() Dim n As Integer Dim i As Integer n = Val(txtInput.Text) txtBox(0).Visible = True txtBox(0).Text = "TxtBox 0" For i = 1 To n - 1 Load txtBox(i) txtBox(i).Top = 1000 + i * 500 txtBox(i).Visible = True txtBox(i).Text = "TxtBox" & Str(i) Next i End Sub

51

7 - Sub-rotinas
Procedimentos
No Visual Basic existem procedimentos que so executados em resposta s aces do utilizador, como por exemplo quando o utilizador prime um boto (Click). Esses procedimentos so conhecidos por "event procedures" - procedimentos de evento. No entanto, existem outros procedimentos que no esto directamente associados a qualquer evento e que para serem executados tm que ser explicitamente invocados. Estes so procedimentos mais gerais - general procedures. A principal razo para se usar este tipo de procedimentos tem a ver com o facto de, por vezes, diferentes procedimentos de evento necessitarem de executar o mesmo conjunto de aces (instrues). Nestas situaes o ideal colocar esse conjunto de aces num procedimento para evitar a duplicao de cdigo e tornar a aplicao mais fcil de manter. A sintaxe para declarar um procedimento a seguinte: Sub NomeProcedimento (ListaArgumentos) Instrues End Sub

A lista de argumentos o conjunto de variveis s quais so passados valores no momento da chamada do procedimento, valores esses que sero usados pelo procedimento durante as suas operaes. Para cada argumento deve ser indicado o seu tipo e no caso de haver mais do que um argumento devem ser separados por vrgulas. De cada vez que o procedimento chamado, as instrues entre Sub e End Sub so executadas.

Passagem de argumentos Nos procedimentos, os argumentos podem ser passados de duas maneiras: por referncia ou por valor. Quando uma varivel passada por referncia quaisquer alteraes feitas ao contedo dessa varivel dentro do procedimento far-se-o reflectir na varivel usada na chamada ao procedimento. Quando no se pretende que uma determinada varivel seja devolvida alterada esta ter de ser passada ao procedimento por valor. Para isso necessrio usar a palavra ByVal na lista de argumentos quando o procedimento for declarado.

VISUAL BASIC Sebenta Terica (verso 1) Exemplos: 1) Private Sub Command1_Click() Dim Custo As Integer Dim Desconto As Single Custo = 1000 Desconto = 0.2 CalcularDesconto Custo, Desconto Print Custo End Sub Sub CalcularDescontos(C As Integer, D As Single) C = C * (1 - D) Print C End Sub Produz o resultado: 800 800

Sub-rotinas

2) Private Sub Command1_Click() Dim Custo As Integer Dim Desconto As Single Custo = 1000 Desconto = 0.2 CalcularDesconto Custo, Desconto Print Custo End Sub Sub CalcularDescontos(ByVal C As Integer, D As Single) C = C * (1 - D) Print C End Sub Produz o resultado: 800 1000

53

VISUAL BASIC Sebenta Terica (verso 1)

Sub-rotinas

Funes
O Visual Basic tal como qualquer outra linguagem de programao inclui um vasto conjunto de funes predefinidas. Para alm destas funes o VB permite definir outras funes usando para o efeito a sintaxe seguinte: Function NomeFuno (ListaArgumentos) As Tipo Instrues End Function

As funes distinguem-se dos procedimentos porque devolvem um valor. Sendo assim, e tal como nas variveis, as funes tambm tm um tipo de dados que ser o tipo do valor a retornar. O valor, normalmente resultante de algumas operaes e/ou clculos, devolvido por atribuio a uma "varivel" com o mesmo nome da funo.

Exemplo: Function Par(Valor As Integer) As Boolean If Valor Mod 2 = 0 Then Par = True Else Par = False End If End Function

54

8 - Funes predefinidas
Funes matemticas
Abs() Retorna o valor absoluto de um nmero.

Num1 = Abs(13.5) Num2 = Abs(-13.5) Num1 e Num2 contm o mesmo valor, 13.5

Exp()

Retorna um valor do tipo Double representando a potncia de base e elevada ao expoente passado como parmetro.

Num = Exp(1) Num contm o valor 2.71828 (e)

Log()

Retorna um valor do tipo Double representando o logaritmo natural do nmero passado como parmetro.

Sqr()

Retorna um valor do tipo Double representando a raiz quadrada do valor passado como parmetro.

Num = Sqr(25) Num contm o valor 5

Int()

Retorna a parte inteira de um dado nmero real; Se o nmero for negativo, Int retorna o primeiro negativo inteiro menor ou igual ao nmero passado por parmetro.

Num = Int(12.565) Num contm o valor 12

VISUAL BASIC Sebenta Terica (verso 1) Fix()

Funes predefinidas

Retorna a parte inteira de um dado nmero real; Se o nmero for negativo, Int retorna o primeiro negativo inteiro maior ou igual ao nmero passado por parmetro.

Num1 = Int(-9.5) Num2 = Fix(-9.5) Num1 contm o valor 10 enquanto Num2 contm -9.

Cos()

Retorna um valor do tipo Double representando o coseno do nmero passado como parmetro.

Sin()

Retorna um valor do tipo Double representando o coseno do nmero passado como parmetro.

Tan()

Retorna um valor do tipo Double representando o coseno do nmero passado como parmetro.

Funes de manipulao de strings


Val() Retorna como valor numrico um nmero contido dentro duma string.

Num1 = Val(123) Num2 = Val(12 3) Num3 = Val(12 e 3) Num1 e Num2 contm o mesmo valor, 123 Num3 contm o valor 12

Str()

Retorna uma string representando um nmero.

Num1 = Str(123) Num2 = Str(-123) Num1 contm a string 123 e Num2 contm a string -123

56

VISUAL BASIC Sebenta Terica (verso 1) Len()

Funes predefinidas

Retorna um valor do tipo Long representando o nmero de caracteres contido numa string.

Nome = ISEP Comp = Len(Nome) Comp contm o valor 4

InStr()

Retorna um valor do tipo Long representando a posio da primeira ocorrncia de uma string dentro de outra.

Sintaxe: InStr ( IncioPesquisa, String1, String2, Opo ) Em que: IncioPesquisa a posio na String1 em que se inicia a pesquisa. String1 a string onde a pesquisa se efectuar. String2 a string a ser procurada em String1. Opo um valor numrico que especifica se a busca sensvel distino entre maisculas e minsculas: 0 - faz distino entre maisculas e minsculas (valor por defeito); 1 - no faz distino. Nota: IncioPesquisa e Opo so parmetros opcionais, no entanto, IncioPesquisa obrigatrio se Opo tiver sido especificado.

Texto = Visual Basic 6.0 StringAProcurar = basic Pos1 = InStr(1, Texto, StringAProcurar, 1) Pos2 = InStr(Texto, StringAProcurar) Pos1 contm o valor 8 (foi encontrada na posio 8) Pos2 contm o valor 0 (no foi encontrada)

57

VISUAL BASIC Sebenta Terica (verso 1) UCase()

Funes predefinidas

Converte os caracteres de uma string para maisculas.

Texto = UCase(Visual Basic 6.0) Texto contm a string VISUAL BASIC 6.0

LCase()

Converte os caracteres de uma string para minsculas.

Texto = LCase(Visual Basic 6.0) Texto contm a string visual basic 6.0

Left()

Retorna uma string com um nmero especificado de caracteres mais esquerda da string passada como parmetro.

Texto1 = Visual Basic 6.0 Texto2 = Left(Texto1, 6) Texto2 contm a string Visual

Right()

Retorna uma string com um nmero especificado de caracteres mais direita da string passada como parmetro.

Texto1 = Visual Basic 6.0 Texto2 = Right(Texto1, 9) Texto2 contm a string Basic 6.0

Mid()

Retorna uma string com um nmero especificado de caracteres da string passada como parmetro.

Sintaxe: Mid ( String, Incio, Comprimento ) Em que: String representa a string a ser tratada. Incio a posio do primeiro caracter a ser retornado.

58

VISUAL BASIC Sebenta Terica (verso 1)

Funes predefinidas

Comprimento o nmero de caracteres a retornar. Nota: Comprimento um parmetro opcional. Se no for especificado so retornados todos os caracteres desde a posio Incio at ao fim da string.

Texto1 = Visual Basic 6.0 Texto2 = Mid(Texto1, 8, 5) Texto2 contm a string Basic

LTrim()

Remove todos os espaos existentes no incio da string.

Texto = LTrim(

Visual Basic 6.0

Texto contm a string Visual Basic 6.0

RTrim()

Remove todos os espaos existentes no fim da string.

Texto = RTrim(

Visual Basic 6.0

Texto contm a string

Visual Basic 6.0

Trim()

Remove todos os espaos existentes quer no incio quer no fim da string.

Texto = Trim(

Visual Basic 6.0

Texto contm a string Visual Basic 6.0

Chr()

Retorna uma string com o caracter associado ao cdigo passado como parmetro.

Texto = Chr(65) Texto contm a string A

59

VISUAL BASIC Sebenta Terica (verso 1) Asc()

Funes predefinidas

Retorna um Integer representando o cdigo do primeiro caracter da string passada como parmetro.

Num1 = Asc(A) Num2 = Asc(Amarelo) Num1 e Num2 contm o valor, 65

Outras funes standard


IsNumeric() Retorna um valor booleano traduzindo o facto de uma dada expresso ter ou no um resultado numrico.

Verif1 = IsNumeric(4475) Verif2 = IsNumeric(4479 Codex) Verif1 contm o valor True Verif2 contm o valor False

Date

Retorna um valor representando a data do sistema.

Time

Retorna um valor representando a hora do sistema.

Timer

Retorna um valor do tipo Single representando o nmero de segundos que j passaram desde a meia-noite.

Funo InputBox
Esta funo permite apresentar uma mensagem ao utilizador, recolhendo ao mesmo tempo uma string contendo a sua resposta. Assim, ao contrrio da funo MsgBox (ver a seguir), esta funo produz um resultado do tipo String e no do tipo Integer.

Exemplo de uma Input Box 60

VISUAL BASIC Sebenta Terica (verso 1)

Funes predefinidas

Esta funo cria um objecto composto, uma Input Box, que consiste numa caixa de texto e num label dentro de uma pequena janela. A sintaxe da funo InputBox a seguinte: Varivel = InputBox ( Mensagem, Ttulo, String_de_Defeito, xpos, ypos ) ...em que: Mensagem Ttulo String_de_Defeito o texto da mensagem a mostrar na janela. o texto a apresentar na barra de ttulos da janela. Este parmetro opcional e representa a string que aparece por defeito na caixa de texto da Input Box. So parmetros opcionais que indicam a localizao horizontal e vertical, respectivamente, da Input Box no ecr. Se no forem indicados a janela aparece no centro do ecr.

xpos e ypos

Funo MsgBox
A funo MsgBox permite criar caixas de dilogo temporrio vulgarmente designadas por Caixas de Mensagem, contendo um pedao de texto, um ou mais botes de comando e, opcionalmente, um cone ilustrativo da finalidade da caixa de mensagem. Como o prprio nome indica, a utilidade destas caixas de mensagem consiste em permitir que o programa transmita alguma informao ao utilizador de forma sucinta.

Exemplos de Message Boxes

A sintaxe da funo MsgBox a seguinte: Varivel = MsgBox ( Mensagem, Caractersticas, Ttulo ) ...em que: Mensagem Caractersticas o texto da mensagem a mostrar na janela. Valor numrico que especifica quais os botes, qual o cone e qual o boto por defeito (boto com focus) devem aparecer na janela. o texto a apresentar na barra de ttulos da janela. 61

Ttulo

VISUAL BASIC Sebenta Terica (verso 1)

Funes predefinidas

O valor para o parmetro Caractersticas obtm-se pela soma de cada um dos seguintes componentes:

Botes 0 OK 1 OK, Cancel 2 Abort, Retry, Ignore 3 Yes, No, Cancel 4 Yes, No 5 Retry, Cancel

cone 0 Nenhum

Boto com focus 0 1 Boto

16 Mensagem Crtica 32 Pergunta 48 Aviso 64 Informao

256 2 Boto 512 3 Boto

Exemplo: Para obter as caixas de mensagem apresentadas atrs, os valores a utilizar para o parmetro Caractersticas seriam os seguintes: Caixa de mensagem da esquerda: 1 + 16 + 0 = 17 Caixa de mensagem da direita: 0 + 64 + 0 = 64

A funo MsgBox devolve um valor que ser guardado em Varivel, indicando qual o boto premido, segundo a tabela:

Valor 1 2 3 4 5 6 7

Boto Premido OK Cancel Abort Retry Ignore Yes No

Nota: O valor 2 ser devolvido caso o boto Cancel seja premido ou caso a tecla Escape seja carregada

62

VISUAL BASIC Sebenta Terica (verso 1)

Funes predefinidas

Formatao da sada de dados - Funo Format


A funo Format permite formatar o resultado de uma expresso de acordo com as instrues contidas numa string de formatao, de modo a poder ser convenientemente visualizadas.

A sintaxe desta funo a seguinte: Format ( Expresso, String_De_Formatao )

Formatao de valores numricos A string de formatao pode ser constituda por smbolos ou nomes de formatos padro. Os formatos padro produzem sadas que so baseadas nas definies regionais do sistema operativo do utilizador. Os smbolos mais utilizados so:

Localizador de dgitos Permite mostrar um dgito ou zero. Caso o valor a afixar tenha um dgito na posio em que (0) aparece na string de formatao, esse dgito ser mostrado; caso contrrio, ser mostrado um zero. Se o nmero contiver menos dgitos (para um ou outro lado do separador decimal) do que o nmero de zeros na string de formatao, os zeros a que no correspondam dgitos sero mostrados. Se o nmero tiver mais casas decimais que zeros na string de formatao direita do separador decimal, ocorrer ento um arredondamento. Quando tal se passa esquerda do separador decimal, no ocorre qualquer modificao.

Localizador de dgitos Permite mostrar um dgito ou no mostrar nada. Se o valor numrico a afixar tiver um dgito na posio em que (#) aparece na string de formatao, esse dgito ser mostrado; caso contrrio, nada ser apresentado nessa posio. Funciona como o caracter (0) exceptuando o facto de que zeros em excesso esquerda e direita no so mostrados caso o nmero tenha tantos ou menos dgitos que a string de formatao.

. , %

Separador decimal (h a possibilidade de configurar o sistema para usar o caracter vrgula - ,) Separador dos milhares (h a possibilidade de configurar o sistema para usar o caracter ponto - .) Localizador de percentagem O resultado da expresso ser multiplicado por 100, sendo o caracter (%) inserido na posio especificada na string de formatao.

63

VISUAL BASIC Sebenta Terica (verso 1)

Funes predefinidas

Os formatos padro so especificados atravs dos seus nomes sempre dentro de aspas. Os formatos padro que podem ser utilizados so:

Nome do Formato General Number Fixed Standard Percent Scientific Currency

Descrio Nmero sem separador dos milhares. Nmero com pelo menos um dgito esquerda e dois dgitos direita do ponto decimal. Nmero com separador dos milhares, pelo menos um dgito esquerda e dois dgitos direita do ponto decimal. Multiplica o valor por 100 e acrescenta o sinal de percentagem. Usa notao cientfica padro. utilizado para formato monetrio. A formatao depende das definies regionais do sistema operativo.

Formatao de cadeias de caracteres (strings) A string de formatao poder incluir os seguintes caracteres:

Localizador de caracteres Permite mostrar um caracter ou um espao. Caso a string a tratar tenha um caracter na posio em que (@) aparece na string de formatao, esse caracter ser mostrado; caso contrrio, ser mostrado um espao. Localizador de caracteres Permite mostrar um caracter ou no mostrar nada. Se a string a tratar tiver um caracter na posio em que (@) aparece na string de formatao, esse caracter ser mostrado; caso contrrio, nada ser mostrado nessa posio. Passa todos os caracteres para minsculas. Passa todos os caracteres para maisculas. Fora o tratamento da string inicial da esquerda para a direita. Por defeito as strings so tratadas da direita para a esquerda.

&

< > !

64

VISUAL BASIC Sebenta Terica (verso 1) Exemplos:

Funes predefinidas

O que pedido AMinhaString = Format(3256.3, ###0.00) AMinhaString = Format(3256.3, fixed) AMinhaString = Format(3256.3, #,##0.00) AMinhaString = Format(3256.3, standard) AMinhaString = Format(0.125, 0.00) AMinhaString = Format(0.125, #.0000) AMinhaString = Format(14.312587, 000.0) AMinhaString = Format(Ol, >)

O que mostrado 3256.30 3256.30 3,256.30 3,256.30 0.13 .1250 014.3 OL

Gerao de nmeros aleatrios - Funes Rnd e Randomize


Em Visual Basic possvel gerar nmeros aleatrios mediante a utilizao da funo Rnd e da instruo Randomize. A funo Rnd utiliza uma sequncia pseudo-aleatria para gerar nmeros entre 0 e 1. Essa sequncia deve ser previamente inicializada mediante a instruo Randomize. Esta instruo deve ser executada apenas uma vez, enquanto que a funo Rnd pode ser chamada quantas vezes forem necessrias no decorrer dum programa. Como a funo Rnd produz nmeros aleatrios entre 0 e 1, caso se pretenda obter valores dentro de um intervalo mais alargado, haver que introduzir um factor de escala: Rnd * (LarguraDoIntervalo) + LimiteInferior

A instruo Randomize dever receber um parmetro numrico que determinar o ponto de inicializao da sequncia pseudo-aleatria. Para reforar o caracter aleatrio deste processo conveniente utilizar valores imprevisveis como, por exemplo, os resultantes da chamada da funo Timer (que devolve o nmero de segundos passados desde a meia-noite): Randomize Timer

Os nmeros produzidos pela funo Rnd so valores reais. Caso se pretenda obter valores inteiros, haver que usar uma das seguintes tcnicas: Atribuir o resultado da expresso contendo Rnd a uma varivel do tipo Integer, provocando a truncagem do valor real produzido; Usar a funo Int para converter o valor real obtido no seu equivalente inteiro, eliminando a parte decimal.

65

VISUAL BASIC Sebenta Terica (verso 1) Exemplo: Private Sub cmdDado_Click() Dim al As Single Randomize Timer al = Rnd * 6 + 1 Label6.Caption = Int(al) End Sub

Funes predefinidas

66

9 - Controlos
Option Buttons Botes de Opo
Estes objectos permitem ao utilizador efectuar escolhas entre diversas alternativas. So compostos pelo boto propriamente dito (de forma circular) e um pequeno texto que o acompanha, especificado pela propriedade Caption do objecto.

Objectos da classe OptionButton reunidos numa frame

Os botes de opo so geralmente agrupados em conjuntos de dois ou mais, estando relacionados entre si. So normalmente inseridos em frames (quadros), objectos que servem para agrupar controlos. Para alm da propriedade Caption, outra propriedade importante dos botes de opo a propriedade Value, que pode assumir o valor True ou False, conforme o boto se encontrar ou no seleccionado. Ao mesmo tempo, s possvel existir um boto seleccionado dentro do mesmo grupo de botes de opo.

Check Boxes Caixas de Verificao


Estes objectos comportam-se de forma semelhante dos botes de opo mas, neste caso, possvel encontrar vrios controlos deste tipo activados simultaneamente, j que tais objectos funcionam de forma independente (isto , no se encontram relacionados entre si).

Objectos da classe CheckBox reunidos numa frame

VISUAL BASIC Sebenta Terica (verso 1)

Controlos

Possuem tambm uma propriedade Value que, neste caso, pode apresentar os seguintes valores: 0 - no activada 1 - activada 2 - no disponvel

O texto a inserir junto de cada caixa de verificao deve ser especificado mediante a propriedade Caption.

Frames Quadros
Tais objectos destinam-se a agrupar outros objectos (controlos). So usados muitas vezes para organizar um dado conjunto de botes de opo (Option Buttons), tornandoos independentes de outros botes de opo eventualmente existentes na mesma form. Sem as Frames isto no era possvel porque se os Option Buttons fossem todos colocados sobre o Form ento s teramos um grupo de opes de excluso mtua. importante criar o quadro antes de a inserir os controlos. Se o controlo for criado antes do quadro, no possvel apenas desloc-lo para dentro do quadro uma vez este criado. Quando se insere um objecto dentro do quadro, esse quadro passa a constituir o contentor do objecto. Quer isto dizer que a sua localizao passa a ser definida no em relao form mas em relao ao quadro que o contem.

Uma Frame agrupando trs botes de comando

Outra utilidade dos quadros servir de moldura a um dado conjunto de controlos, de modo a melhorar a aparncia e a organizao da form em que esto inseridos, agrupando os diversos controlos de acordo com as suas funcionalidades.

List Boxes Caixas de Listagem


Este controlo mostra uma lista de opes passveis de escolha, indicando com uma barra escura a seleco actual. Por defeito, as opes so apresentadas numa nica coluna vertical, podendo-se no entanto definir vrias colunas. Se o nmero de opes exceder a quantidade de elementos que pode ser visto ao mesmo tempo na List Box surgem barras de deslocamento verticais e/ou horizontais.

68

VISUAL BASIC Sebenta Terica (verso 1)

Controlos

Uma List Box com vrias opes

A introduo dos elementos na lista pode ser feita enquanto se desenham os controlos na form, usando para o efeito a propriedade List, ou durante a execuo do programa. Os elementos da lista esto guardados numa estrutura de dados acessvel atravs da propriedade List(n) que simula um array de strings. Assim, o primeiro elemento encontra-se em List(0), o segundo elemento em List(1) e assim sucessivamente.

Inserir um elemento na lista A insero de elementos na lista durante a execuo do programa deve ser feita usando o mtodo AddItem, cuja sintaxe : listbox.AddItem elemento, posio

O parmetro elemento representa a nova opo (novo elemento) a acrescentar lista. O parmetro posio opcional. Se for especificado, o elemento inserido no local indicado, seno inserido no fim da lista. A primeira posio da lista a posio 0.

Remover um elemento da lista O mtodo usado na eliminao de um item da lista o RemoveItem e a sintaxe a seguinte: listbox.RemoveItem posio

Aqui, posio representa o ndice do elemento a eliminar. A posio do elemento seleccionado dada pela propriedade ListIndex que apenas se encontra disponvel durante a execuo do programa. O valor desta propriedade 0 se estiver seleccionado o primeiro elemento da lista, 1 se o elemento seleccionado for o seguinte, e assim por diante. ListIndex tem o valor -1 se nenhum elemento est seleccionado. Para remover todos os elementos da lista pode-se fazer: listbox.Clear

69

VISUAL BASIC Sebenta Terica (verso 1) Para alm das j referidas, as propriedades mais usadas so as seguintes:

Controlos

Propriedade Text

Descrio Permite obter o elemento actualmente seleccionado.

ListCount

Permite conhecer a qualquer momento o nmero de elementos contidos na lista.

Sorted

Permite especificar se os elementos da lista devem aparecer por ordem alfabtica.

Columns

Permite indicar se a lista de elementos deve aparecer numa nica coluna (Columns = 0) ou em duas (Columns = 2), trs (Columns = 3), ... colunas.

MultiSelect

Permite controlar a forma de seleco de elementos dentro da lista. Pode ter um dos seguintes valores: 0 - s possvel seleccionar um elemento 1 - possvel seleccionar vrios pressionando cada elemento elementos simultaneamente,

2 - possvel seleccionar vrios elementos simultaneamente, usando as tecla Shift e Control

Selected

Se a propriedade MultiSelect tiver o valor 1 ou o valor 2, a seleco mltipla est autorizada. Nesse caso, as propriedades Text e ListIndex referem-se apenas ao ltimo elemento seleccionado. Assim, para conhecer quais os elementos seleccionados haver que utilizar a propriedade Selected da forma: Selected (ndice) avaliando para cada elemento (ndice) o valor da propriedade Selected. Esta propriedade apresenta o valor True caso o elemento esteja seleccionado e False caso contrrio.

SelCount

Permite conhecer a qualquer momento o nmero de elementos seleccionados. Esta propriedade particularmente til nas situaes em que a listbox permite mltiplas seleces.

70

Você também pode gostar