Beruflich Dokumente
Kultur Dokumente
ISVOUGA
Instituto Superior entre Douro e Vouga
j.neves@doc.isvouga.pt
(c) jacn10/11 1
Conteúdo programático
• Introdução à Algoritmia
– - Algoritmos, programas, linguagens de programação
– - Desenho de programas: fluxogramas e pseudo-código
– - Estruturas de controlo: sequenciais, decisão e repetição
• A Linguagem de Programação VB.Net e VBA para Excel
– - Ambiente de Trabalho do Editor VB
– - Tipos de Variáveis
– - Tipos de Operadores
– - Estrutura de decisão IF…THEN…ELSE
– - Estrutura de decisão SELECT…CASE
– - Estrutura de repetição WHILE…WEND
– - Estrutura de repetição DO…LOOP UNTIL
– - Estrutura de repetição FOR…NEXT, FOR EACH e outras
– - Utilização e manipulação de Strings
– - Utilização e manipulação de Vectores mono e multidimensionais
– - Introdução as Classes de objectos
(c) jacn10/11 2
Introdução à algoritmia
• Um programa corresponde à tradução de um raciocínio na forma de
comandos numa linguagem máquina.
• Um algoritmo é uma sequência de instruções que, uma vez
executado conduz a um resultado específico.
• Para funcionar, um algoritmo deve conter unicamente instruções
compreensíveis para quem o vai executar. Quem o executa pode
ser máquina ou pessoa. Exemplos um trajecto descrito por um
mapa, uma receita de cozinha, uma sequência de instruções de
uma máquina, etc.
• Quem desenvolve algoritmos deve possuir alguma intuição, de
forma a conseguir, a priori, saber que instruções devem ser usadas
e como deve abordar o problema e a sua fragmentação.
(c) jacn10/11 3
Introdução à algoritmia
• Quando se elabora um algoritmo para ser executado por
uma máquina, é importante que :
– Se seja metódico e rigoroso
– Cada passo que se considera no programa seja visto na óptica
da máquina de forma a verificar que o resultado é o correcto.
• Um programa de computador é um algoritmo escrito na
linguagem máquina que estamos a utilizar (Fortran,
Basic, Visual Basic, Pascal, C/C++, Java, Perl, Lisp,
Cobol, etc...).
• Cada linguagem tem as suas próprias especificidades,
ou seja as suas características funcionais e de escrita,
que em alguns casos podem apresentar similitudes, mas
noutros não.
(c) jacn10/11 4
Introdução à algoritmia
• Os computadores são, essencialmente capazes de
efectuar quatro operações lógicas (fora as operações
de cálculo matemático e lógico) e que são:
– Afectação de variáveis atribuição de valores a posições memória
– Leitura e escrita entrada e saída de dados
– Testes base das condições
– Ciclos base das repetições
• Um programa informático não é mais que a combinação
destes tijolos de base conceptuais, e que são
organizados de uma forma mais ou menos estruturada.
• A complexidade de cada caso é que parametriza os
limites do algoritmo.Um algoritmo é a estrutura lógica de
um programa informático, escrito com uma conjunto
base de instruções de uma dada linguagem.
(c) jacn10/11 5
Introdução à algoritmia
• Convenções de escrita de algoritmos:
– Há várias convenções, mas deve ser o utilizador que escolhe o seu
método de representação da ideia/algoritmo, de forma a melhor
representar o seu raciocínio na linguagem que escolheu.
– As técnicas mais conhecidas:
• Organigramas : diagramas de blocos, em que cada bloco corresponde
a uma dada instrução, ou a um dos 4 “tijolos” anteriormente
analisados.
Não
N
vezes X 17 X > 10 Input(x) Output(x)
Sim
(c) jacn10/11 8
Instruções de afectação
• Afectar um valor a uma variável consiste em colocar na caixa designada
pela etiqueta um valor. Em pseudo-código usam-se os símbolos ou =.
– EX: Conteúdo de X na memória do PC
• X 10
X
ou 10
• X = 10
• (coloca o valor 10 na memória referenciada por X)
• As operações de afectação são sempre da direita para a esquerda.
• Dado existir uma ordem de execução de programas, existe uma ordem
de afectação de valores a variáveis,e uma ordem de sequenciamento de
instruções. Os raciocínios da matemática não podem ser extrapolados
para a informática com alguma ligeireza.
(c) jacn10/11 9
Variáveis e memória Nome Tipo
Memória do computador (RAM)
j Inteiro
10
Pi Real
3.1415925
abc Char
„V‟
(c) jacn10/11 10
Afectação de variáveis
Identificadores de tipos de variáveis
Identifier type character Data type Example
% Integer Dim L%
& Long Dim M&
@ Decimal Const W@ = 37.5
! Single Dim Q!
# Double Dim X#
$ String Dim V$ = "Secret"
Afectação de variáveis:
Ou ainda:
Corresponde a colocar/ modificar um
valor, contido numa variável. X= X+1: Y = Y+X
X= 10
A = 0.2351* B + X
A = 0.2351
Str= “Olá Bom Dia”
Str= “Olá Bom Dia”
abc= „A‟ Str1 = Str
(c) jacn10/11 11
Introdução à algoritmia
Exemplo VB6
(c) jacn10/11 13
Operadores
• As variáveis podem ser operadas entre si, recorrendo a
operadores.
• Assim: a = x (op) y
• Existem vários tipos de operadores, a saber:
– Operadores numéricos: NB: em matemática uma variável é uma
• + adição incógnita numa equação, mas em
• - subtracção informática uma variável (caixa+ etiqueta
• * multiplicação = nome) possui um e um só valor em
• / divisão cada passo de execução do programa.
• ^ potenciação Tratamos, assim, com valores fixos, e não
• Etc... com conceitos abstractos.
– Operadores alfanuméricos
• & concatenação de strings
– Operadores lógicos : o resultado é TRUE ou FALSE
• AND E lógico
• OR OU lógico
• NOT Negação lógica
• XOR (pouco usado) OU exclusivo lógico
(c) jacn10/11 14
Introdução à algoritmia
• Condições
• Uma condição é uma comparação. Tal significa quem
uma condição é composta de 3 elementos:
– Um valor A
– Um operador de comparação op A op B
– Um segundo valor B
• Os valores podem ser de qualquer um dos tipos
admitidos pela linguagem (numéricos,
caracteres, ...), mas se queremos que a
comparação tenha significado, os valores
devem ser do mesmo tipo.
(c) jacn10/11 15
Introdução à algoritmia
• Operadores de comparação:
•= igual a ...
• <> diferente de
•< estritamente menor que ...
•> estritamente maior que ...
• =< menor ou igual a ...
• >= maior ou igual a...
(c) jacn10/11 16
Introdução à algoritmia
• Condições compostas: são as que se obtém
com a conjunção de operadores lógicos:
(c) jacn10/11
• Se A*B > C*D Then ...
18
Introdução à algoritmia
• Testes ou estruturas opcionais
– Uma estrutura de teste assume uma das seguintes formas:
– A forma da esquerda é a forma completa, enquanto que a forma
da direita é a forma simples
Instruções 1
(c) jacn10/11 20
Introdução à algoritmia
• Ciclos
– São estruturas repetitivas ou iterativas.
• O conceito de repetição está ligado à execução DE UM GRUPO DE
INSTRUÇÕES, um determinado numero de vezes.
Enquanto < condição> Para <variável= inicio> até <valor fim> [ Passo xx ]
instrução instrução
instrução instrução
... ...
Fim Enquanto Valor variável Seguinte
(c) jacn10/11 22
Introdução à algoritmia
• Ciclos imbricados
– Os ciclos podem ser, em qualquer circunstância
imbricados uns nos outros, de forma a executar
determinadas tarefas. O seu formato é :
Declara x, y as Integer
Para y = 1 até 15
Escrever “O programa passou por aqui“
Para x = 1 até 6
Escrever “O programa vai passar por aqui “
x Seguinte
y Seguinte
(c) jacn10/11 23
Introdução à algoritmia
• O programa anterior é diferente de :
Declara y, x as Integer
Para y = 1 até 15
Escrever “O programa passa por aqui“
Escrever “ y = “ y
y Seguinte
Para x = 1 até 6
Escrever “O programa passa também por aqui “
Escrever “ x = “ x
x Seguinte
(c) jacn10/11 24
Introdução à algoritmia
• Tabelas:
– As tabelas são utilizadas quando se tem necessidade de ter um
mesmo tipo de dados guardado numa estrutura com vários
valores de um mesmo tipo.
– Nestes casos usamos tabelas, ou arrays que são definidos
como uma variável de um certo tipo, a que se agrega um
contador ou índice. Uma tabela tem que ter sempre um NOME
(v, tata, ….) que é definido pelo utilizador.
– Ex: Dim v(10) as Integer
• tabela de nome v, com 10 posições, do tipo integer!
– Ex: Dim tata(100) as Double
Tabela de 100 posições do tipo double
(c) jacn10/11 25
Introdução à algoritmia
• As tabelas (C/VB/Java/…) começam sempre no índice 0, e acabem
no índice N-1, tendo N posições disponíveis. Há linguagens quem
que começam em 1 e não em 0.
• O tipo dos valores na tabela é o da sua declaração
indice tabela(N)
0 Para i = 0 até n-1
1 tabela(i) = 2*i
2
3 I Seguinte
4
5
...
...
Para i = 0 até n-1
i
... imprime_ecran(tabela(i))
...
I Seguinte
n-1
(c) jacn10/11 26
Introdução à algoritmia
Funções predefinidas:
• Todas as linguagens possuem funções predefinidas de forma a
poderem ser chamadas de dentro de um programa e que
produzem determinados resultados.
• Uma função é constituída por 3 partes :
1. O nome da função , propriamente dito.Este nome deve ser
inventado, ter algum significado e não fazer parte do leque de
funções do sistema.
2. Deve também ter dois parêntesis ( abertura e fecho)
3. Uma lista de valores que são passados à função e que se
chamam os argumentos ou parâmetros da função.
– Exemplo: a sin(x) ou a = sin(x)
– Em qualquer linguagem há que estudar as funções que esta
possui para que se possam utilizar.
(c) jacn10/11 27
Introdução à algoritmia
• Ficheiros sequenciais:
– Os dados são armazenados de forma permanente em disco na forma
de ficheiros, entre operações de programas.
– Tipos de acesso:
• Acesso sequencial
– Acedemos ao registo seguinte ao que acabamos de visitar
• Acesso aleatório
– Acedemos aos registos de forma aleatória, ou seja acesso ao registo que
queremos sem nos preocuparmos com uma ordem específica de acesso.
(c) jacn10/11 28
Introdução à algoritmia
• Instruções com ficheiros
– Se queremos trabalhar sobre um ficheiro a primeira coisa a
fazer é abri-lo.Os elementos de um ficheiro são os registos.
– Tal faz-se atribuindo ao ficheiro um numero de canal. Só se
pode abrir um ficheiro por canal, mas dispomos de vários
canais para tal efeito.
– Quando abrimos o canal há que saber o que vamos fazer: ler
(Read), escrever (Write) ou acrescentar (Append).
• Ler: acedemos ao ficheiro em modo leitura, sem alterarmos o
seu conteúdo.
• Escrever : acesso ao ficheiro em modo escrita permite escrever
tudo o que se quiser, mas todos os dados que poderiam existir
são apagados, sendo substituidos pelos que vamos escrever.
• Acrescentar: neste modo não podemos ler (em alguns casos
sim) nem apagar o que ele contém, mas apenas acrescentar
dados aos que o ficheiro já continha.
– Ex.: OPEN “Exemplo.txt” no canal 4 para LEITURA
(c) jacn10/11 29
Introdução à algoritmia
• Em termos de programação, ler um ficheiro sequencial é usar-se
um ciclo que termina quando se encontra o fim do ficheiro,
definido pelo caracter especial EOF (End Of File).
• O ciclo vai ler os registos, no formato que estes possuem, e pára
quando encontra o EOF. Durante a leitura transfere o seu
conteúdo para estruturas de dados no programa, que serão
utilizadas durante a execução.
(c) jacn10/11 31
Funções predefinidas
Functions
(c) jacn10/11 32
Tipos de variáveis em VB
Visual Basic
type 2005/8/10 (1)
Common
language
runtime type
Nominal storage
allocation
Value range
structure
(c) jacn10/11 33
Tipos de variáveis em VB 2008 (2)
Double Double 8 bytes -1.79769313486231570E+308
(double- through -4.94065645841246544E-
precision 324 † for negative values;
floating-
4.94065645841246544E-324 through
point)
1.79769313486231570E+308 † for
positive values
Object Object (class) 4 bytes on 32-bit Any type can be stored in a variable
platform of type Object
8 bytes on 64-bit
platform
SByte SByte 1 byte -128 through 127 (signed)
Short (short Int16 2 bytes -32,768 through 32,767 (signed)
(c) jacn10/11 34
integer)
Tipos de variáveis em VB 2005 (3)
Single (single- Single 4 bytes -3.4028235E+38 through -1.401298E-45 †
precision for negative values;
floating-
point) 1.401298E-45 through 3.4028235E+38 †
for positive values
User-Defined (inherits from Depends on implementing Each member of the structure has a range
(structure) ValueType) platform determined by its data type and
independent of the ranges of the other
members
No VB temos:
• While...End While
• Do Loops
• For...Next
• counter: Required in the For statement. Numeric variable. The control variable for the loop.
• Datatype: Required if counter is not already declared. Data type of counter.
• start : Required. Numeric expression. The initial value of counter.
• end : Required. Numeric expression. The final value of counter.
• step : Optional. Numeric expression. The amount by which counter is incremented each time through
the loop.
• statements :Optional. One or more statements between For and Next that run the specified number
of times.
• Exit For : Optional. Transfers control out of the For loop.
• Next : Required. Terminates the definition of the For loop
(c) jacn10/11 39
VB – Ciclos 4: For…Next
• Para i =valor inicial até Valor Final Step (passo de incremento de i)
– Instruções
• Fim Para [ Incrementa variável i ]
• Há que ter em atenção o ciclo.!
• NB: valor de Step
– Se positivo ou zero executa até counter <= end
– Se negativo então executa até counter >= end
Em geral são os mais utilizados para percorrer estruturas cujo numero
de elementos, ou ciclos é previamente conhecido. Ex:
N = 100 „Realiza o ciclo 100 (valor de N)
For i= 0 to N
x=i*2 „Coloca em X o dobro do valor de I, ou seja 0,2,4,6,…
Next i
(c) jacn10/11 40
VB – Ciclos 4: For…Each
For Each element [ As datatype ] In group
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
element : Required in the For Each statement. Optional in the Next statement.
Variable. Used to iterate through the elements of the collection.
datatype : Required if element is not already declared. Data type of element.
group : Required. Object variable. Refers to the collection over which the
statements are to be repeated.
statements : Optional. One or more statements between For Each and Next
that run on each item in group.
Exit For : Optional. Transfers control out of the For Each loop.
Next : Required. Terminates the definition of the For Each loop
(c) jacn10/11 41
VB – If…Then…Else (1)
• Estrutura de controlo de testes. Tem uma sintaxe base a
partir da qual se podem derivar outras formas de escrita
do mesmo código.
• Executa conjuntos de instruções em função dos
resultados dos testes realizados.
• Os testes podem ser simples ou compostos, em função
do caso a analisar.
• No caso de testes compostos complexos, podem-se fazer
externamente ao If… colocando-os numa variável
auxiliar que é a que será avaliada.
(c) jacn10/11 42
VB – If…Then…Else (2)
• Sintaxe
If condition [ Then ] If condition [ Then ]
[ statements ] [ statements ]
[ ElseIf elseifcondition [ Then ] [ Else
[ elseifstatements ] ] [ elsestatements ] ]
[ Else [ elsestatements ] ] End If
End If
Ou
(c) jacn10/11 44
VB – If…Then…Else (4) exemplos
If A > 10 Then
• Exemplos:
A=A+1
If A > 10 Then B=B+A
A=A+1 C=C+B
B=B+A Exemplos Else
C=C+B diferentes !
A=A+2
End if C=C-B
End if
(c) jacn10/11 45
VB – If…Then…Else (5) exemplo
• Ou ainda:
(c) jacn10/11 46
VB – Select...Case (1)
Select [ Case ] testexpression [ Case
expressionlist [ statements ] ]
• testexpression [ Case Else [ elsestatements ] ]
– Required. Expression. End Select
• expressionlist
– Required in a Case statement. List of expression clauses representing match values for
testexpression. Multiple expression clauses are separated by commas. Each clause can
take one of the following forms:
• expression1 To expression2
• [ Is ] comparisonoperator expression
• expression
• statements
– Optional. One or more statements following Case that run if testexpression matches any
clause in expressionlist.
• elsestatements
– Optional. One or more statements following Case Else that run if testexpression does not
match any clause in the expressionlist of any of the Case statements.
• End Select
– Terminates the definition of the Select...Case construction.
(c) jacn10/11 47
VB – Select...Case (2)
• Exemplo:
Dim nota As Integer = 8
Select Case nota
Case 1 To 5
Debug.WriteLine(“Nota entre 1 e 5, inclusive")
Case 6, 7, 8
Debug.WriteLine(“Entre 6 e 8, inclusive")
Case 9 To 10
Debug.WriteLine(“Igual 9 ou 10")
Case Else
Debug.WriteLine(“Não está entre 1 e 10, inclusive")
End Select
(c) jacn10/11 48
Passagem de dados
• Passagem de dados
– As funções podem ter elementos (dados) de entrada (parâmetros
de entrada), e que serão usados durante a execução desta, e
podem produzir dados de saída (parâmetros de saída ou de
retorno).
– Por vezes os parâmetros de entrada são modificados (ou não) e
são retornados na saída, também como parâmetros.
– Aos parâmetros de entrada que são modificados na função,
dizemos que há passagem de parâmetro por referencia.
– Aos parâmetros de entrada que não modificados na função,mas
que são por ela usados, dizemos que há passagem de parâmetro
por valor.
– Funções personalizadas são aquelas que só devolvem um
parâmetro na saída, respondendo, assim a um desenvolvimento
específico no programa.
(c) jacn10/11 49
Variáveis PUBLICAS e PRIVADAS
– A funções, ou procedimentos, usam variáveis internas, que, no
contexto do programa, se declaram no início do Procedimento e
extinguem no fim deste (i.é quando a sua execução termina).
– Logo as variáveis de um programa tem zonas de declaração (ou
de existência) e de actuação específicas tem um alcance
definido.
– Como tal as variáveis podem ser usadas em todo o programa ou
em partes deste, o que faz surgir designações sobre o seu
alcance: uma variável pode ser:
• Pública ou Global : tal significa que a variável é declarada e pode
ser usada em qualquer parte do programa sob a sua “jurisdição”, ou
seja o seu conteúdo é conservado para lá das chamadas a funções
onde pode ser usada PUBLIC ou GLOBAL. São as que mais
consomem a memória dado ocuparem de forma fixa a memória,
independentemente de serem usadas ou não.
• Privada ou Local: é a opção mais usada (90% das vezes) e
significa que a variável declarada cessa a sua existência quando
deixa de ser usada, como é o caso dos Procedimentos PRIVATE
ou LOCAL. São que permitem um uso mais racional da memória que
(c) jacn10/11 leva a que sejam preferidas à Públicas/Globais. 50
Visual Basic – Introdução 1
• A forma mais antiga de escrita de programas consistia em definir um
conjunto de instruções sequenciais, utilizando uma sintaxe própria da
linguagem com que se trabalhava e com a qual o problema algorítmico era
resolvido.
• Posteriormente apareceu a programação modular e a programação
estruturada que consistia em dividir o problema em subproblemas menores,
usando módulos, que de forma integrada, traduziriam o algoritmo.
• A Programação Orientada para Objectos (OOP – Objecto Oriented
Programming) é a evolução natural da programação por módulos, onde
estes passam de simples funções (identificadas com os subproblemas) para
objectos com características próprias em termos de estruturas de dados e
de funções que lhes possam/devam ser associadas. Logo os objectos
passam a ter características próprias (propriedades) e a capacidade de
realizarem certas funções (métodos).
• Para cada objecto existe uma lista de possíveis eventos, sendo nesses
eventos que se inscrevem as instruções para a acção de programação.
(c) jacn10/11 51
Visual Basic – Introdução 2
• O Visual Basic (VB) serve-se de estruturas de
objectos ao que alia uma linguagem dirigida por
eventos (event driven) onde as sequências de acções
surgem como resposta a eventos ligados a objectos.
(c) jacn10/11 52
Visual Basic – Introdução 3
• O VB possui :
– um interface gráfico composto por objectos – formas e controlos.
– cada objecto possui propriedades sendo possível modificá-las alterando
os seus atributos
– pode-se actuar sobre os objectos ou determinar actuações dos mesmos
atribuindo eventos a esses objectos através de códigos.
• Ambiente de trabalho (IDE)
– O VB possui um ambiente de trabalho onde pode desenvolver as suas
aplicações usando o IDE (Integrated Development Environment)
Ambiente de Desenvolvimento Integrado.
– Para se lançar o IDE devemos efectuar a seguinte lista de
comandos no ambiente Windows do computador ou a partir deum
atalho colocado no ambiente de trabalho.
1) <Iniciar>
2) <Todos os Programs>
3) <Microsoft VB2005 (ou VB2008) Express>
(c) jacn10/11 53
O que aparece… (1)
• Quando se lança o VB surge o écran seguinte:
Onde se
concentra a
nossa atenção
(c) jacn10/11 54
O que aparece… (2)
• Se vamos criar um novo
programa devemos
escolher:
– Create: Project…
(c) jacn10/11 55
Create Project….
• Quando se escolhe criar um novo projecto, aparece o ecran
seguinte. Aqui, seleccionamos com o rato (parte superior)
Windows Application , e depois, devemos especificar o
nome do mesmo. Por exemplo Programa1.
•Por
ordem:
•1 1
Depois clicar
em OK
•2
•3
2
(c) jacn10/11
3 56
O IDE - 1
• Tendo criado um novo projecto, ou aberto um antigo, acedemos ao
IDE (Integrated Development Environment) que corresponde ao
ambiente que vamos usar para desenvolver os nossos programas /
projectos. Este tem o aspecto seguinte:
(c) jacn10/11 57
O IDE - 2
• Componentes do IDE:
– Um projecto vai ter um interface com o utilizador que pode ser em linha de comando ou
via uma janela de comunicação chamada Form (forma…!?).
– Partindo do principio que vamos usar sempre uma janela de interface (um Form) este
é, então, um dos elementos essenciais do nosso ambiente de trabalho.
– A Form serve de base para se colocarem objectos sobre os quais vamos agir, ou com
os quais o programa vai interactuar, e que constituem o interface com o utilizador, ou
seja, a zona de dialogo entre o programa e o utilizador.
– Assim é importante definir correctamente que interface devemos/queremos ter, para a
aplicação em desenvolvimento.
– A definição do interface está ligada ao algoritmo, ou seja, as entradas e saídas do
programa. Estas devem ser devidamente analisadas e escolhidas de maneira a
obtermos os resultados pretendidos.
– A escolha está sempre associada a entradas e saídas de dados do programa, e podem
ser na forma de texto ou gráficas.
– NB: todas na entradas/saídas são na forma de strings.
– Há uma lista de objectos que podemos usar para implementar as entradas e as saídas
e que estão disponíveis na barra vertical da esquerda os Comandos.
(c) jacn10/11 58
O IDE - 3
• Assim temos uma barra de comandos com vários objectos sensíveis a acções
do utilizador e que podemos arrastar para a Form, de maneira a definir
interfaces.
• Existem outras zonas que constituem o IDE a saber:
– Barra de comandos (Toolbox) que contém várias opções
– Solution Explorer (Explorador da Solução que contém os elementos do programa).
– Properties: janela que contém as propriedades dos objectos do programa, seja das
FORMS (podemos ter mais que uma), seja de qualquer outro objecto que tenhamos
incluido no programa (Comandos da Toolbox)
– Por cima da janela da Form temos abas (separadores) que nos permitem aceder a
janelas utilitárias como a do código, a da pagina inicial (Start Page), a da lista de
erros (Error List), e outras que podem ser chamadas ao longo da evolução da
implementação do projecto.
– Na parte superior (na horizontal) temos ainda uma barra de menus e de shortcuts
para estes.
• File – Edit – View – Project – Build – Debug – Data – Format – Tools – Windows ….
• ou
(c) jacn10/11 59
O IDE - 4
Explorador
da Solução
Janela da Form
Barra de Janela de
comandos propriedades
(Toolbox) dos objectos
(c) jacn10/11 60
O IDE - 2
• Antes de se começar a usar, com a escrita de um primeiro
programa teste, há que conhecer mais alguns termos do VB que
são as suas palavras reservadas, que não podem ser usadas como
expressões de código base num programa.
(c) jacn10/11 62
Programas - 1
• Primeiro programa teste:
– Olá MUNDO….! O programa clássico!
• Exercícios:
1. Faça um programa que leia a largura e o comprimento de um
campo rectangular e que faça o display da sua área e perímetro.
2. Escreva um programa que leia 5 valores do teclado e que faça o
display da sua média, usando apenas 2 variáveis.
3. Escreva um programa que leia 2 valores A e B, e que faça o
display de A+B, A-B, A*B e A/B.
4. Escreva um programa que peça ao utilizador o preço sem
impostos de um produto e que faça o display do preço com o IVA,
considerando que este é prefixado.
5. Escreva um programa que peça ao utilizador para descobrir um
numero secreto, entre 0 e 100, aleatoriamente gerado, a partir de
um valor lido ao teclado, e que apenas diga dê como respostas
« Acima », « Abaixo » e « Acertou », se, respectivamente, os
valores introduzidos forem superiores, inferiores ou o certo.
(c) jacn10/11 63
Programas - 2
• Exercícios (continuação)
6. Escrever um programa que faça o display dos primeiros 50 números
impares:
a) Recorrendo a um FOR
b) Recorrendo a um WHILE
7. Escrever um programa que leia 10 valores ao teclado, e faça o display
do maior valor lido.
8. O mesmo que a questão anterior com o menor valor lido.
9. Escreva uma função que leia um ângulo expresso em graus, do
teclado e que faça o display do seu co-seno, do seno e tangente.
10. Faça um programa que construa as tabelas de verdade de:
a) A AND B
b) A OR B
c) A XOR B
d) AB
e) A B
f) Not(A) AND (B Or Not(C) )
g) Demonstre que A B é igual a Not(A) Or B, usando a tabela de verdade
(c) jacn10/11 64
Programas - 3
• Exercícios (continuação)
11. Escreva um programa para converter dólares em euros e vice-versa.
12. Escreva um programa que calcule a distancia entre dois pontos P1 e
P2, definidos P1( x1, y1) e P2 (x2, y2), usando as formulas da
distancia:
a) dist x2 x1 2 y2 y1 2
b) dist x2 x1 y2 y1
c) Compare os resultados subtraindo-os.
13. Escreva um programa que dado o seu raio, pelo utilizador, determine
o perímetro e a área.
14. Determinar triângulo valido. Para tal, ler três pontos e determinar se
formam um triângulo. Pode ser utilizada a fórmula da distância entre
dois pontos para calcular as medidas dos lados do triângulo. Sendo
que um triângulo é sempre válido se a medida de cada um dos seus
lados é menor que a soma dos outros lados.
(c) jacn10/11 65
Programas - 4
• Exercícios (continuação)
15. Dado um polinómio do segundo grau na forma Ax2 + Bx+ C =0 calcule as
suas raízes e escreva-o na forma (x-x0) *(x-x1) = 0, se for possível.
b b 2 4.a.c
x0,1
2.a
(c) jacn10/11 66
Programas - 5
• Exercícios (continuação)
17. Calcular a somatório dos números existentes num intervalo
definido pelos seus limites inferior e superior (n1 e n2 ) dados
pelo utilizador ao teclado, introduzidos na ordem que entender.
Assim os intervalos [5-10] e [10-5] são igualmente válidos.
(c) jacn10/11 67
Vectores 1
• Frequentemente temos a necessidade de trabalhar com
estruturas de dados que devem guardar vários
elementos do mesmo tipo, sob uma mesma designação
e com valores diferentes.
• Por exemplo guardar as temperaturas de uma cidade ao
longo do dia, com medidas de hora a hora. Neste caso
iríamos necessitar 24 registos, o que se pode fazer:
– Declarando 24 variáveis com nomes diferentes para guardar os
valores das temperaturas lidas (Não….!)
– Declarar uma tabela com um único nome e 24 posições para
registo. (SIM….!)
(c) jacn10/11 68
Vectores 2
• Um array (tabela ou matriz) é uma lista de valores onde todos os
valores do grupo são referenciados pelo nome e o índice do valor
específico.
• Um valor individual de um array é chamado elemento.
• Os arrays são criados na memória do computador permitindo um
bom desempenho no seu uso (leitura/escrita de dados).
• Cada elemento possui um número relacionado que é utilizado como
índice. A referência usa o nome da matriz e o número entre
parênteses. Assim: NomedoVector(NúmeroDoElemento)
– Ex: Vetor(1) - refere-se ao elemento que possui o índice 1.
• Em VB.NET todos os arrays são indexados a partir de zero. Logo
temos :
– Quantidade(0) - refere-se ao primeiro elemento
– Quantidade(3) - refere-se ao quarto elemento
(c) jacn10/11 69
Vectores 3
• O conceito de tabela pode ser considerada como:
– Dim V(10) as Integer
N : numero de
indice Nome: V(N) elementos
N = 10
i V(i)
0 4 V(0) contém o valor 4
1 6 V(1) contém o valor 6
2 12 V(2) contém o valor 12
3 34 V(3) contém o valor 34
4 78 V(4) contém o valor 78
5 12 V(5) contém o valor 12
6 5 V(6) contém o valor 5
7 6 V(7) contém o valor 6
8 78 V(8) contém o valor 78
9 5 V(9) contém o valor 5
(c) jacn10/11 70
Vectores 4
• Arrays sem dimensão especificada
– Por vezes não conseguimos saber a priori quantos elementos temos
que guardar no array, pelo que:
• Ou sobredimensionamos (O QUE NÃO SE DEVE FAZER….!)
• Ou dimensionamos a medida que formos necessitando mais elementos
– Neste caso podemos usar uma instrução que nos permite trabalhar com
arrays de dimensão variável:
• Dim Vector() as Integer
• Dim N as Integer „ N vai conter o numero de elementos ao longo do
programa
• …
• N = 50
• Redim Vector(N) „ Neste ponto redimensionamos Vector() para N elementos
50
• …
• N = 150
• Redim Vector(N) „ Aqui redimensionamos Vector() para N elementos 150
(c) jacn10/11 71
Vectores 5
• Arrays sem dimensão especificada (2º parte)
– Há duas formas de redimensionar arrays:
• Redim Vector(N)
– Neste caso os valores que o array continha são perdidos, ou seja
apagados
– É util quando queremos re-iniciar a variável a meio do programa
• Ou
• Redim Preserve Vector(N)
– Neste caso os valores que o array contém são preservados.
– Há a considerar duas situações:
» Caso o N seja maior que o numero de elementos anterior, por exemplo
se o numero de elementos passar de 50 para 100, os novos serão
colocados depois dos já existentes, e com o valor 0.
» Caso o N seja menor que o numero de elementos anteriores, então
perdem-se os elementos que estariam acima de N. Assim se tivesse
(antes) um array com 100 elementos e se redimensionasse para 50,
ficaríamos apenas com os 50 primeiros.
(c) jacn10/11 72
Tabelas - 1
• As tabelas começam sempre no índice 0, e indice tabela(N)
acabam no índice N-1, tendo N posições 0
disponíveis. 1
• O tipo dos valores na tabela é o da sua 2
declaração: 3
• Dim V(10) as Double 4
Dim XX(10) as Integer 5
indice i V(N) ...
0 4 V(0) contém 4 V( i= 0 )
1 5 V(1) contém 5 V( i= 1 ) ...
2 2
3 7
V(2)
V(3)
contém
contém
2
7
V(
V(
i=
i=
2
3
)
)
i
4 8 V(4) contém 8 V( i= 4 ) ...
5 12 V(5) contém 12 V( i= 5 )
6 15 V(6) contém 15 V( i= 6 ) ...
7 1 V(7) contém 1 V( i= 7 )
8 67 V(8) contém 67 V( i= 8 )
n-1
9 21 V(9) contém 21 V( i= 9 )
(c) jacn10/11 73
Tabelas -2
– As tabelas são utilizadas quando é necessario ter um mesmo tipo de dados
guardado numa estrutura com vários valores. Ex: registo de temperaturas.
– Nestes casos usamos tabelas, ou arrays que são definidos por:
– Dim tab(200) As Integer
– Exemplo Calculo da média dos valores contidos numa tabela
DIM Nota(54) as Integer
Dim i, Soma as Integer
Dim Media as Double
For i = 0 To 53
Escrever “Input nota n°” & i
Ler Nota(i)
Next i
Soma = 0
For i = 0 To 53
Soma = Soma + Nota(i)
Next i
Media = Soma / 54
(c) jacn10/11 75
Tabelas multidimensionais
– Por vezes temos que usar tabelas a várias dimensões para guardar
valores. Estas são declaradas por Dim <nome> (dim1, dim2, …, dim) as..
<Tipo>
Dim Tab( 100 , 100 ) as Integer exemplo de tabela para conter uma imagem.
– Nestes casos para percorrer toda a tabela necessitamos de imbricar 2 ciclos
com variáveis diferentes:
Dim Tab(100 , 100) as Integer
For i = 0 To 100
For j = 0 To 100
Ler x
Tab( i , j ) )= x
Next j
Next i
• Nota : podemos ter tabelas de várias dimensões.
• Ex: Dim Tab(100,100,20,30,15) as Integer tabela a 5 dimensões
(c) jacn10/11 76
Propriedades associados a tabelas
(c) jacn10/11 77
Métodos associados a tabelas - 1
• Clear: define o intervalo dos elementos de um array para, zero, false ou
null
• Clone: cria copia do array.
• Copy: copia a secção de um array para outro e faz o casting e o boxing.
• CopyTo: copia todos os elementos de array de uma dimensão para outro.
• Create Instance: inicializa uma nova instância da classe array.
• Equals (herdado de Object): determina se duas instâncias de objectos
são iguais.
• GetLength: determina o numero de elementos de uma dada dimensão de
um array.
• GetLowerBound: obtém o menor índice inferior da dimensão especificada
num array.
(c) jacn10/11 78
Métodos associados a tabelas - 2
• GetType (herdado de Object): obtém o tipo da instância actual.
• GetUpperBound: obtém o índice superior da dimensão especificada num array.
• GetValue: obtém o valor de um elemento definido no array.
• IndexOf: retorna o índice da primeira ocorrência de um valor num array de uma
dimensão.
• Initialize: inicia cada elemento de um array chamando o construtor padrão.
• Reverse: inverte a ordem dos elementos num array a uma dimensão.
• SetValue: define o elemento especificado num array para um valor definido.
• Sort: ordena os elementos de um array monodimensional.
• ToString (inherited from Object): retorna uma string que representa o objecto
actual.
(c) jacn10/11 79
Problemas – 2ª série (a)
1. Escreva um programa que calcule a soma de um conjunto de valores dados
ao teclado. Note que se desconhece o número de elementos a somar.
2. Escreva um programa que calcule o máximo e o mínimo de um conjunto de
valores reais dados ao teclado.
3. Escreva um programa que calcule os n primeiros da função seguinte e
visualize os resultados obtidos usando numa listbox, calculando a sua média.
f(x) = e-(x.sin(2.PI.x))
4. Escreva um programa que determine os n primeiros termos da seguinte série:
x(t) = (x(t-1) + x(t-2))
5. Escreva um programa que determine os n primeiros termos da seguinte série:
Q[n] = Q[n-Q[n-1]] + Q[n-Q[n-2]] . . . para n > 2 Q[n] = 1 . . . para n = 1 ou n =
2
N.B.: designa-se esta série por série "Q" de Hofstadter , e cujos primeiros 50
elementos são:
1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6, 8, 8, 8, 10, 9, 10, 11, 11, 12, 12,12, 12, 16, 14, 14, 16, 16, 16, 16, 20,
17, 17, 20, 21, 19, 20, 22, 21, 22, 23, 23, 24, 24, 24, 24, 24, 32, 24, 25, ....
6. Escreva um programa que determine os n primeiros termos da seguinte série:
com u1= 0.5
1 2
u n 1 u n
3 un
(c) jacn10/11 80
Problemas – 2ª série (b)
7. Escreva um programa que calcule os n primeiros termos da
seguinte série: f(n) = 1+ 1/(k*(k+1))
8. Escreva um programa que calcule os n primeiros termos da
seguinte série: f(n) = 1+ 1/(k2)
9. Considere dois pontos de um espaço bidimensional, definidos por
Pi: (xi,yi). Escreva um programa que lhe permita introduzir esses
pontos e que calcule o ponto médio entre eles.
10. Considere ainda os pontos da questão anterior, e verifique se
definem uma recta. Se sim, calcule o declive dessa recta, e a
equação da recta que lhe é perpendicular e que passe pelo ponto
médio entre eles.
11. Escreva um programa que converta um numero lido ao teclado
(de valor entre 1 e 3000) em notação romana.
12. Escreva um programa que calcule e (2,718281..., Numero de
Neper) sabendo que:
i
1
f(i) = e = , para 1/i! < 10 -10
i 0 i!
(c) jacn10/11 81
Problemas – 2ª série (c)
• Escreva um programa para calcular π
usando o processo proposto por Euler:
4 1 1 1 1 1 1 1 1
4 4 4 4 ... 90 4 4 4 4 ...
4 4
90 1 2 3 4 1 2 3 4
N
• Ou seja: 1
90 4 4
4
i 1 i
(c) jacn10/11 82
Strings -1
• A representação de texto nos computadores é
feita usando caracteres (char) isolados ou em
cadeia. As cadeias de caracteres são as strings.
• Todas as entradas e saídas de dados de, e para,
o teclado/ecran, usam strings. Estes servem-se
de códigos base que atribui a cada valor (do
código) uma correspondência em termos de
letras, algarismos e símbolos especiais. Os
códigos mais usuais são:
– ASCII - American Standard Code for Information Interchange.
– EBCDIC - Extended Binary Coded Decimal Interchange Code.
(c) jacn10/11 83
Strings -2
• ASCII
– É um código (inicial) de 7 bits (logo 27 = 128
símbolos) agrupados em: (hoje tem 256 símbolos)
• 52 letras do alfabeto, desde as minúsculas as maiúsculas,
ou seja a,b,c,……,z, A,B,C,D,…..Z;
• 10 algarismos: 0,1,2,3,4,5,6,7,8,9
• 33 caracteres especiais: +-*/><!”#$%&/()=?»«[] {},…..etc..
• 33 caracteres de controlo, como o CR<Return>, o LF<Line
Feed>, BS<BackSpace>, HT<Horizontal Tab>,…
– Este código está hoje especificado no Unicode, que é
uma entidade que define os standards de códigos a
nível mundial (www.unicode.org)
(c) jacn10/11 84
Strings -3
• Em VB uma string é um vector de caracteres, que
suporta o correspondente ao código ASCII, logo contém
caracteres que são letras, algarismos e símbolos
usados. As strings são um tipo de variável do VB.
• As strings são sempre declaradas entre aspas (ex:
“toto”), e os caracteres entre plicas (Ex: „A‟, ou „2‟).
Dim abc as String
Dim aaa as char
abc = “Olá Bom dia”
aaa= „A‟
• Podemos sempre iniciar as variáveis quando as
declaramos, senão nada contém.
Dim abc as String = “toto tata tete”
(c) jacn10/11 85
Strings -4
• As strings são compostas por caracteres representados em código
ASCII, cujo valor varia de 0 a 255. A cada código corresponde um
char diferente. Assim a letra „a‟ é diferente de ‟A‟ e diferente de „á‟
pois tem códigos ASCII diferentes. Esta é a base de comparação de
strings.
• O programa seguinte, tendo criado uma ListBox e um botão,
permite ver os códigos ASCII
(c) jacn10/11 86
Exemplos de
Strings -5
Código(65) = A Código(97) = a
códigos ASCII Código(66) = B Código(98) = b
Código(48) = 0 Código(67) = C Código(99) = c
Código(49) = 1 Código(68) = D Código(100) = d
Código(69) = E Código(101) = e
Código(50) = 2 Código(70) = F Código(102) = f
Código(51) = 3 Código(71) = G Código(103) = g
Código(91) = [ Código(72) = H Código(104) = h
Código(52) = 4
Código(92) = \ Código(73) = I Código(105) = i
Código(93) = ] Código(53) = 5 Código(74) = J Código(106) = j
Código(54) = 6 Código(75) = K Código(107) = k
Código(94) = ^
Código(76) = L Código(108) = l
Código(95) = _ Código(55) = 7 Código(77) = M Código(109) = m
Código(96) = ` Código(56) = 8 Código(78) = N Código(110) = n
Código(79) = O Código(111) = o
Código(57) = 9
Código(80) = P Código(112) = p
Código(58) = : Código(81) = Q Código(113) = q
Código(59) = ; Código(82) = R Código(114) = r
Código(83) = S Código(115) = s
Código(60) = < Código(84) = T Código(116) = t
Código(61) = = Código(85) = U Código(117) = u
Código(86) = V v
Código(62) = > Código(118) =
Código(87) = W Código(119) = w
Código(63) = ? Código(88) = X Código(120) = x
Código(64) = @ Código(89) = Y Código(121) = y
Código(90) = Z Código(122) = z
(c) jacn10/11 87
Strings -6
• Declaração de strings
– Em VB as strings declaram-se :
• Dim abc as String
• Dim aString As String = "This is a string"
– Comparação de strings
• Podemos usar os operadores de comparação normais para
comparar strings, em função da sequência dos seus códigos
ASCII:
< Menor que <= Menor que ou igual a
<>diferente de ou não igual = igual a
>= Maior que ou igual a > Maior que
(c) jacn10/11 88
Strings -7
• O operador Like:
(c) jacn10/11 91
Strings -10
– Instr$(Inicio,string1,string2,[Compare]) : determina a posição da
primeira ocorrência de uma substring contida em uma string. Retorna
um Long.
– Split(string,delimiter,count,compare_mode) : divide uma string e retorna
as substrings como um array de strings.
– Join(List,Delimiter) : concatena as substrings contidas em List numa
única string, sendo :
• List um array de uma dimensão contendo as strings a serem concatenadas,
• Delimiter o caractere usado para separar as substrings na string retornada.
Se omisso o caractere (" ") será usado. Se for uma string vazia ("") , todos
os itens da lista serão concatenados sem delimitadores.
– Filter(Varlist, Value, Include, Compare) : procura em VarList pelas
strings definidas em Value e retorna o resultado num array, onde:
• VarList: contém um array de strings que a função irá filtrar
• Value: é a string de caracteres usada para identificar qual elemento será
incluída no novo array.
• Include : boleano que indica se os elementos contendo o valor coincidente
será incluído ou não na string . O valor padrão é True.
• Compare: indica como será busca de Value efectuada
(c) jacn10/11 92
Strings -11
– StrReverse(string) : retorna uma string com os
caracteres invertidos.
– Replace(string, strProcura, strSubstPor, Inicio,
Contador, Compare)
• Onde:
– String : é a string a ser alterada
– strProcura : é a string a procurar em <String>
– strSubstPor : é a string usada para substituir a string
<strProcura>
– Inicio - indica o inicio da busca por <strProcura>. (Opcional)
– Contador - indica o número máximo de vezes que
<strProcura> será substituída
– Compare - o modo de comparação a ser efectuada.
(c) jacn10/11 93
Strings -12
Private Sub Command2_Click() Programa que determina o
Dim i, conta As Integer numero de ocorrências de uma
Dim in_str As String letra dada pelo utilizador
Dim abc As String * 1
conta = 0
in_str = InputBox("Introduza o texto :")
Label1.Caption = in_str
abc = InputBox("Introduza a letra :")
Label2.Caption = " Letra a procurar:" + abc_
'MsgBox (" o comprimento da string é :" +
Str(Len(in_str)))
For i = 1 To Len(in_str)
If abc = Mid(in_str, i, 1) Then conta = conta + 1
Next i
Label3.Caption = ("n. de ocorrências de " + abc + " é :
" + Str(conta))
End Sub
(c) jacn10/11 94
Strings -13
Exercício sobre strings
Escreva, um programa em VB que leia texto
de uma Textbox e que:
a) Conte o numero de ocorrências de uma
determinada letra ou caractere definida,
dada, pelo utilizador, via teclado.
b) Procure uma ocorrência de uma palavra
dadas pelo utilizador ao teclado.
(c) jacn10/11 95
Strings -14
• Problemas:
– 1) Faça um programa que leia uma string e
que inverta a ordem dos caracteres
– 2) Escreva um programa que determine
a) o numero de espaços contidos na string
b) o numero de caracteres numéricos (algarismos)
que esta contém.
c) o numero de ocorrências de uma dada letra
definida pelo utilizador.
d) o numero de vezes que uma dada palavra
aparece no texto.
(c) jacn10/11 96
Strings -15
• Mais problemas
– 3) Escreva um programa que transforme um
texto em maiúsculas.
– 4) Escreva um programa que substitua uma
dada palavra no texto por outra palavra dada
pelo utilizador
– 5) Faça um programa que implemente o
código de distancia, sendo a distancia
definida pelo utilizador
(c) jacn10/11 97
GDI – 1
GDI= Graphic Device Interface.
• A computação gráfica é a parte das ciências da
computação que trata com o desenho de
gráficos e formas no computador.
• O computador tem um sistema de gestão da
parte gráfica que nos permite o interface com o
programa, e consequentemente com o
utilizador.
• As imagens são formadas por pixels (do inglês
Picture Element), e estão organizadas em linhas
e colunas.
• Um pixel é referenciado pela sua posição no
écran, e pela sua cor.
(c) jacn10/11 98
GDI - 2
• Os gráficos são feitos sobre objectos, sendo o
primeiro a própria Form.
• Em termos de cor, o sistema usa a codificação
RGB, respectivamente R:Reed, B:Blue e
G:Green, onde para cada um destes parâmetros
se pode escolher um valor entre 0-255.
• A outros processos de codificar a cor, mas que
não são aqui referidos.
• Podemos ainda introduzir uma componente
adicional de transparência sobre a imagem
anterior, dando uma aparência desta (factor
alfa)
(c) jacn10/11 99
GDI - 3
• PictureBox
– Picture box é um controlo usado como suporte para desenhos e
imagens, mas podemos fazer o mesmo directamente sobre a
Form.
– No entanto a PictureBox trabalha em “cima” da Form dado ser
um objecto que adicionamos ao programa.
– A PictureBox exprime-se em termos do seu comprimento e da
sua largura (width and height). O mesmo ocorre para as
imagens que são medidas em numero de pixeis em X e Y, ao
que corresponde a sua resolução:
– pixels. Resolution = width * height
– As unidades que usamos em ambos os casos são os pixeis.
(c) jacn10/11
Eixo dos 103
Y
GDI - 7
• Existe um sem numero de primitivas de desenho,
que nos permitem desenhar elementos sobre o
objecto gráfico em uso (Form ou PictureBox).
• São disso exemplo:
– picBox.CreateGraphics.DrawRectangle(Pens.Blue, x, y, w, h)
• Desenha um rectângulo, de cor azul, a partir do ponto x,y e com o
comprimento w e a largura h.
• Neste caso usamos uma das pen (Pens.Blue) com cor predefinida.
x
w
y
h
y x d
For i = 0 To ll
fx = 10 + aa / 2 + 0.3 * aa * Math.Sin(i * Math.PI / 180)
If i > 0 Then gr.DrawLine(Pens.Brown, i, fx, i0, fx0)
Next
End(c)Sub
jacn10/11 109
GDI - 13
Display gráfico
de f(x)= sin(x)
• A saída gráfica desta
função é:
Display da
string str, com o
valor de f(x) no
ponto...
'Desenha Pie
Dim gr As Graphics = PictureBox1.CreateGraphics
Dim r As Single = 100
Dim ini_ang, tot_ang As Single
ini_ang = 0
tot_ang = 135
‘(3)
gr.FillPie(Brushes.Tomato, 300 - r, 50 - r, 2 * r, 2 * r, ini_ang, tot_ang)
gr.DrawPie(Pens.Blue, 300 - r, 50 - r, 2 * r, 2 * r, ini_ang, tot_ang)
End Sub
(c) jacn10/11 113
GDI - 17
„(3)
(c) jacn10/11
„(1) „(2)
114
GDI - 18
• Para além das funções estudadas, existem muitos
outros métodos que nos permitem:
– Trabalhar com cores
– Trabalhar com polígonos (mínimo de 3 pontos)
– Usar matrizes de transformação (rotação, scalling,
espelhamento, …)
– Usar padrões de preenchimento, texturas e gradientes
– Incluir formas para terminar linhas (setas,…)
– Desenhar arcos, curvas (abertas e fechadas) e curvas de
Béziers
– Fazer a combinação de formas (intersecção, reunião, exclusão,
complemento, ou exclusivo, etc)
– Trabalhar com imagens.