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

2 - O PRIMEIRO EXEMPLO

Ambiente de desenvolvimento

Criar o projecto

Desenhar a interface

8
8

Como desenhar um controlo no form?

Ajustar as propriedades

Escrever o cdigo

10

Correr e testar a aplicao

11

Gravar o trabalho

11

3 - VARIVEIS E CONSTANTES

13

Tipos de dados

13

Conceito de varivel

13

Declarao de varivel

15

Outros tipos de dados

16

Operao de atribuio

16

Constantes

17

Operadores

17

Comentrios

18

Convenes a seguir na escolha de nomes de objectos

19

4 - ESTRUTURAS DE CONTROLO CONDICIONAL

20

Estruturas de seleco simples

20

Estruturas de seleco embutidas

22
22
24

Estrutura If ... Then ... ElseIf ...


Estrutura Select ... Case

5 - ESTRUTURAS DE CONTROLO REPETITIVO

26

Ciclo For ... To ... Next

26

Ciclo Do While

29
29

Ciclo controlado por contador

Ciclo Do Until
Ciclos controlados por sentinela

31
32

Ciclos imbricados

33

Ciclos com teste no fim

35

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

Matrizes Arrays bidimensionais


Declarao de matrizes
Processamento de matrizes

Vectores de controlos

7 - SUB-ROTINAS
Procedimentos
Passagem de argumentos

Funes

37
37
38
38
40
46
49
49
50
51

52
52
52
54

ii

8 - FUNES PREDEFINIDAS

55

Funes matemticas

55

Funes de manipulao de strings

56

Outras funes standard

60

Funo InputBox

60

Funo MsgBox

61

Formatao da sada de dados - Funo Format

63
63
64

Formatao de valores numricos


Formatao de cadeias de caracteres (strings)

Gerao de nmeros aleatrios - Funes Rnd e Randomize

9 - CONTROLOS

65

67

Option Buttons Botes de Opo

67

Check Boxes Caixas de Verificao

67

Frames Quadros

68

List Boxes Caixas de Listagem

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

Efeito

Caption

Define o texto a afixar na barra de ttulo das forms, da legenda


(caption) dos botes de comando, ou nos rtulos (label)

Name

Define o nome pelo qual o objecto identificado

Left

Define o afastamento entre uma form e o limite esquerdo do


ecr ou entre um controlo e o limite esquerdo da form

Top

Define o afastamento entre uma form e o topo do ecr ou entre


um controlo e o topo da form

Height

Define a altura do objecto

Width

Define a largura do objecto

Font

Especifica qual o tipo de letra a usar nos controlos

Visible

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

Descrio

Label (etiqueta)

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

Propriedade

Valor

Form

Caption

Converso Celsius Farenheit

Label1

Caption

Graus Celsius:

Text1

Name

txtCelsius

Text

(vazio)

Label2

Caption

Graus Farenheit:

Label3

Name

lblFarenheit

Caption

(vazio)

Name

cmdConverter

Caption

Converter

Command1

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

Descrio

Integer (inteiro)

usado para representar inteiros entre -32768 e 32767

String (cadeia de caracteres)

usado para representar informao alfanumrica como


letras, algarismos e smbolos especiais.

Boolean (booleano)

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

utilizao

da

instruo

especfica

"Dim ... As"

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.

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

Descrio

Long

inteiro longo, ou seja, compreendido entre -2.147.483.648 e 2.147.483.647

Single

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

Double

real representado com preciso dupla

Date

uma varivel deste tipo pode armazenar datas e horas

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
+

adio

subtraco

multiplicao

diviso inteira

diviso real

MOD
^

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

conjuno (e)

OR

disjuno (ou)

NOT

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

Nome comea por

Form

Frm

CommandButton

Cmd

Frame

Fra

Horizontal ScrollBar

Hsb

Image

Img

Label

Lbl

List Box

Lst

Menu

Mnu

Option Button

Opt

Picture Box

Pic

Text Box

Txt

Vertical SrcrollBar

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

If condio Then

SIM
TESTE da
Condio

Aco1
Else

ACO_2

ACO_1

Aco2
End If

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)

Estruturas de controlo condicional

Saldo > limite_credito


(Nota > 0) And (Nota < 20)
(X >= 100) And ((Y=20) Or (Y=40))
sqr(X) <= 1000

possvel combinar vrios operadores


lgicos na mesma condio

Not encontrado

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

TESTE da
Condio

SIM

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

Falsa (F)
Condio_1
V

instruco 2A

Condio_2
V
instruco 2B

instruco 2C

Condio_3

IFs

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)

Estruturas de controlo condicional

Estrutura Select ... Case


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

...se a varivel tiver o valor 3.5

Case 1, 2

...se a varivel tiver o valor 1 ou 2

Case Is <= 500

...se a varivel tiver um valor menor ou igual a 500

Case 10 To 20

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

Estruturas de controlo condicional

Exemplo:
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)

Estruturas de controlo repetitivo

A sintaxe desta estrutura de controlo repetitiva :


For varivel = incio To fim Step passo
Instruo1
Instruo2

InstruoN
Next varivel

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)

Estruturas de controlo repetitivo

If MaxDivisor = 1 Then
MaxDivisor = Numero
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)

Estruturas de controlo repetitivo

Ciclos controlados por sentinela


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)

Estruturas de controlo repetitivo

Exemplos:
1)

Leitura do 1 nmero cujo factorial vai ser calculado


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

13

37

132

90

19

286

44

ndice

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)

4 elemento do vector var_Multipla

var_Multipla(7)

8 e ltimo elemento do vector var_Multipla

notas(14)

15 elemento do vector notas

nomes(0)

1 elemento do vector nomes

VISUAL BASIC Sebenta Terica (verso 1)

Vectores e Matrizes

Declarao de vectores
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)

Vectores e Matrizes

Exemplos:
1) Private Sub cmdGo_Click()
Dim vectorSqr(100) As Double
Dim Maior as Integer
Dim i As Integer

varivel ndice

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

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)

Vectores e Matrizes

For i = Menor To Maior


res = Sqr(i)
vector(indice) = res
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

49

13

37

132

90

19

286

44

ndice

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)

Vectores e Matrizes

Const N As Integer = 9
Dim vec(N) As Integer

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)

Vectores e Matrizes

If encontrado = True Then


lblBusca.Caption = "Encontrado na posio" + str(i + 1)
Else
lblBusca.Caption = "No encontrado"
End If
End Sub

Exemplo 2:
Sucesso na pesquisa do valor 6
Passo 1:
inf

med

sup

-3

-1

10

13

25

=?

6 > med

6
Passo 2: pesquisar subintervalo superior
inf

med

sup

-3

-1

10

13

25

6 < med
=?
6
Passo 3: pesquisar subintervalo inferior
med
inf
sup
1

-3

-1

10

13

25

6 = med
=?
inf
sup

Limite inferior do subintervalo

Limite superior do subintervalo

med Ponto mdio = ( inf + sup ) \ 2

SUCESSO

44

VISUAL BASIC Sebenta Terica (verso 1)

Vectores e Matrizes

Ordenao de vectores
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

49

13

37

132

90

19

286

44

ndice

Vector ordenado de forma ascendente:

vec

13

19

37

44

49

90

132

286

ndice

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)

Vectores e Matrizes

Const N As Integer = 9
Dim vec(N) As Integer

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)

Vectores e Matrizes

Exemplo 2:
Ordenao do vector de forma crescente
Passo 1: ordenar 1 elemento
1
2
3
10
5
1
5
Menor que

4
7

Sim
Troca

10 ?

1
5

2
10

3
1

10

4
7

1
Menor que
5

Sim
Troca

1
1

2
10

3
5

4
7

1
1

2
5

3
10

4
7

10

7
7
Menor que
1

Passo 2: ordenar 2 elemento


1
2
3
1
10
5

4
7

5
Menor que

Sim
Troca

10 ?
1
1

2
5

3
10

4
7
7
Menor que
5

Passo 3: ordenar 3 elemento


1
2
3
1

10

4
7
Sim
7
Menor que
10 ?

Troca
1

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.

ndice_coluna

0
Pontos

1
2
3
4
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)

coordenada X do 3 ponto

notas(1, 3)

elemento que se encontra na 2 linha e 4 coluna da matriz notas

nomes(0, 0)

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)

Vectores e Matrizes

Exemplos:
Dim Coord(5, 3) As Single
Dim Coord(1 To 5, 1 To 3) As Single

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)

Sub-rotinas

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

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

Trim()

Visual Basic 6.0

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

o texto da mensagem a mostrar na janela.

Ttulo

o texto a apresentar na barra de ttulos da janela.

String_de_Defeito

Este parmetro opcional e representa a string que aparece por


defeito na caixa de texto da Input Box.

xpos e ypos

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.

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

o texto da mensagem a mostrar na janela.

Caractersticas

Valor numrico que especifica quais os botes, qual o cone e


qual o boto por defeito (boto com focus) devem aparecer na
janela.

Ttulo

o texto a apresentar na barra de ttulos da janela.


61

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

cone

Boto com focus

0 OK

1 OK, Cancel

16 Mensagem Crtica

256 2 Boto

2 Abort, Retry, Ignore

32 Pergunta

512 3 Boto

3 Yes, No, Cancel

48 Aviso

4 Yes, No

64 Informao

Nenhum

1 Boto

5 Retry, Cancel

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

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

Descrio

General Number

Nmero sem separador dos milhares.

Fixed

Nmero com pelo menos um dgito esquerda e dois dgitos


direita do ponto decimal.

Standard

Nmero com separador dos milhares, pelo menos um dgito


esquerda e dois dgitos direita do ponto decimal.

Percent

Multiplica o valor por 100 e acrescenta o sinal de percentagem.

Scientific

Usa notao cientfica padro.

Currency

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)

Funes predefinidas

Exemplos:

O que pedido

O que mostrado

AMinhaString = Format(3256.3, ###0.00)

3256.30

AMinhaString = Format(3256.3, fixed)

3256.30

AMinhaString = Format(3256.3, #,##0.00)

3,256.30

AMinhaString = Format(3256.3, standard)

3,256.30

AMinhaString = Format(0.125, 0.00)

0.13

AMinhaString = Format(0.125, #.0000)

.1250

AMinhaString = Format(14.312587, 000.0)

014.3

AMinhaString = Format(Ol, >)

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)

Funes predefinidas

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

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)

Controlos

Para alm das j referidas, as propriedades mais usadas so as seguintes:

Propriedade

Descrio

Text

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