programacao2010 2011 jose neves

140
(c) jacn10/11 1 Programação ISVOUGA Instituto Superior entre Douro e Vouga LEPI Licenciatura Engenharia de Produção Industrial 2010/2011 J.A. Campos Neves [email protected]

Upload: blackxr3i

Post on 25-Jun-2015

401 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 1

Programação

ISVOUGAInstituto Superior entre Douro e Vouga

LEPI – Licenciatura Engenharia de Produção Industrial

2010/2011

J.A. Campos Neves

[email protected]

Page 2: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 2

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

Page 3: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 3

Introdução à algoritmia

• Um programa corresponde à tradução de um raciocínio na forma decomandos numa linguagem máquina.

• Um algoritmo é uma sequência de instruções que, uma vezexecutado 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.

Page 4: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 4

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.

Page 5: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 5

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.

Page 6: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 6

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.

• Pseudo-código: código que se assemelha ( ou não) ao código máquina a usar e que descreve o algoritmo de forma textual, e que pode ser próprio do utilizador, desde que compreensível a terceiros.

N

vezes X 17 X > 10Não

Sim

Input(x) Output(x)

Page 7: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 7

Introdução à algoritmia

• Variáveis:– Um programa informático armazena sempre dados, venham

eles do teclado, do disco, de uma carta de aquisição ou de outra fonte.

– Os dados podem ser de vários tipos (texto, inteiros, reais, complexos, etc...), e são armazenados em posições memória da máquina sendo designados por literais (com algum significado...!).Assim uma variável é uma “caixa” na memória da máquina com uma etiqueta (nome da variável).

– As variáveis tem que ser (sempre) declaradas antes da sua utilização. Assim declarar uma variável é reservar o seu espaço memória necessário e atribuir-lhe um nome (etiqueta).

– Os tipos mais usuais são:

• Byte

• Inteiro simples ou Longo

• Real simples ou duplo

Mas há mais tipos e valores

slide seguinte para os tipos mais

em VB

Page 8: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 8

Variáveis• Existem ainda mais tipos numéricos, a saber:

– Tipo monetário ( com 2 algarismos após a virgula)

– Tipo data (dia/mês/ano, na seguinte forma DD/MM/AAAA)

– Tipo alfanumérico• Também designado por tipo caractere, tipo string ou cadeia de

caracteres.

• É usado para representar letras, espaços, ou algarismos na sua representação não numérica.

• O tipo string, ou cadeia de caracteres, é a representação de um conjunto de literais.

• Em pseudo-código uma cadeia de caracteres é sempre representada entre aspas => “ Olá, bom dia ... ! “

– Existem também os tipos compostos como vector, tabela a várias dimensões

– e conjugados de vários tipos e objectos (classes) (ver mais tarde)

Page 9: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 9

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:

• X 10ou

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

• Se à esquerda do sinal de afectação temos a variável, à sua direita temos o valor ou a expressão.

• A expressão corresponde a um conjunto de valores ligados por operadores.

10X

Conteúdo de X na memória do PC

Page 10: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 10

Variáveis e memória

Memória do computador (RAM)

10

3.1415925

„V‟

„O‟ „L‟ „A‟

j

Pi

abc

str

Inteiro

Real

Char

String

TipoNome

Page 11: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 11

Afectação 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"

Identificadores de tipos de variáveis

Afectação de variáveis:

Corresponde a colocar/ modificar um valor, contido numa variável.

X= 10

A = 0.2351

Str= “Olá Bom Dia”

abc= „A‟

Ou ainda:

X= X+1: Y = Y+X

A = 0.2351* B + X

Str= “Olá Bom Dia”

Str1 = Str

Page 12: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 12

Introdução à algoritmia

Tipo

Descrição

Banda de valores

Integer inteiro de 2 bytes -32.768 até 32.767

Long inteiro de 4 bytes -2.147.483.648 até 2.147.483.647

Single ponto flutuante de 4 bytes -3,402823E38 até -1,401298E-45 (val. Negativos) 1,401298E-45 até 3,402823E38 (val. Positivos)

Double ponto flutuante de 8 bytes -1,79769313486232D308 até -4,94065645841247D-324 (neg) 4,94065645841247D-324 até 1.79769313486232D308 (pos)

Currency número de 8 bytes com parte decimal fixa

-922337203685477,5808 até 922334203685477,5808

String cadeia de caracteres 0 até aprox. 65.500 caracteres

Boolean valores lógicos True ou False

Variant Data/Tempo, ponto flutuante ou string

Data: 1 janeiro de 0000 até 31 dezembro de 9999; valore numéricos iguais ao Double; strings igual ao tipo String.

Exemplo VB6

Page 13: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 13

Introdução à algoritmia

• Exemplo C

– short

– int

– float

– double

– long

– char e tabela de char como string

Page 14: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 14

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:

• + adição

• - subtracção

• * multiplicação

• / divisão

• ^ potenciação

• Etc...

– 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

NB: em matemática uma variável é umaincógnita numa equação, mas eminformática uma variável (caixa+ etiqueta= nome) possui um e um só valor emcada passo de execução do programa.

Tratamos, assim, com valores fixos, e nãocom conceitos abstractos.

Page 15: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 15

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

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

A op B

Page 16: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 16

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

Page 17: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 17

Introdução à algoritmia• Condições compostas: são as que se obtém

com a conjunção de operadores lógicos:

Condição1 AND Condição2

Condição1 OR Condição2

Condição1 XOR Condição2

NOT(Condição1)

• Nota 1 : usar as tabelas de verdade das funções lógicas para se ver o resultado que se pode obter.

• Nota 2 : os testes podem ser imbricados uns nos outros de forma a permitir patamares diferentes de decisão.

Page 18: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 18

Introdução à algoritmia

• Operadores lógicos (ou booleanos):

– Tratam-se dos operadores AND, OR e NOT, e mais raramente

do XOR (ou exclusivo).

– Estes são usados em inúmeras formas, mas particularmente na

concatenação de conjunções ou testes de comparação:

• Se A > 10 Then ...

• Se A > 10 AND A < 20 Then ...

• Se (A > 1 AND B < 20 OR C = True ) Then ...

• Se A*B > C*D Then ...

Page 19: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 19

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

Se booleano Então Se booleano Então

Instruções 1 Instruções

Senão Fim Senão

Instructions 2

Fim Se

Onde booleano representa o resultado de um teste específico,

que corresponde a uma expressão cujo valor é TRUE ou

FALSE. Esta obtém-se à custa de uma variável boolena, ou de

uma expressão condicional. Os testes podem ser encadeados

para se obterem resultados diversos.

Page 20: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 20

Introdução à algoritmia

• O conceito de teste imbricado pode ser descrito pelos

esquemas seguintes:Instruções 1

Instruções 2

Instruções 1

Instruções 2

Instruções 3

Se Fim Se

Fim SeSe

Se Fim Se

SIM

NÃO

SIM

SIMNÃO

NÃO

Page 21: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 21

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.

– Os ciclos podem ser, executados:• Um numero determinado de vezes

• Um numero infinito de vezes, ISTO É DESCONHECIDO…!• Apenas uma vez

– O processo de execução repetitiva PODE OBRIGAR à existência de uma variável adicional de controlo de ciclo.

– A estrutura de um ciclo é:

Enquanto que < condição >

instrução...

instrução...

instrução...

...

Fim Enquanto

Page 22: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 22

Introdução à algoritmia

• É necessário ter alguma atenção quando se escrevem

ciclos pois se o controlo de paragem não for bem feito, o ciclo pode nunca parar, levando à necessidade de termos que bloquear o programa de forma externa.

• Em termos de programa/linguagem os ciclos podem

assumir várias formas. As mais usuais são:

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

Page 23: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 23

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

Page 24: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 24

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

Page 25: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 25

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

Page 26: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 26

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

1

2

3

4

5

...

...

i

...

...

n-1

Para i = 0 até n-1

tabela(i) = 2*i

I Seguinte

Para i = 0 até n-1

imprime_ecran(tabela(i))

I Seguinte

Page 27: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 27

Introdução à algoritmiaFunçõ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.

Page 28: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 28

Introdução à algoritmia

• Ficheiros sequenciais:

– Os dados são armazenados de forma permanente em disco na forma

de ficheiros, entre operações de programas.

– Organização de ficheiros texto:

• Há limitadores de campos nos ficheiros de texto que são usados :

– limitadores por caracteres (mais económica em memória)

– Limitadores por comprimento fixo do campo (menos económica)

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

Page 29: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 29

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

Page 30: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 30

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.

• Em modo Escrita, após a abertura do ficheiro vamos escrever

com auxílio de instruções específicas, e no formato que

pretendermos, o conteúdo do ficheiro.

• Em modo Acrescento é igual (ao modo escrita), mas o modo de

abertura é diferente tendo um caractere que o diferencia da

escrita no momento da sua abertura.

Page 31: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 31

Introdução à algoritmia

Procedimentos e Funções

• Quando um programa é longo no numero de linhas que possui é

grande e quando há instruções, ou blocos de instruções, que são

usados muitas vezes, ou de forma repetitiva.

• Há hipótese de simplificar/racionalizar o seu conteúdo pela

escrita de pequenos blocos/grupos de instruções que sejam

chamadas, repetidamente, durante a execução.

• Esses grupos são as funções, ou procedimentos, sendo o

programa principal designado por Procedimento Principal e as

funções os Sub Procedimentos.

Page 32: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 32

Funções predefinidas

Functions

• Uma função é constituída por 3 partes :

Function <nome> ( […,<byref ou byval parametroi>,…]), as <Tipo>

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/parametros que são passados à função por referencia (Byref) ou por valor (Byval) [slide mais à frente]

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

Page 33: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 33

Tipos de variáveis em VB 2005/8/10 (1)Visual Basic

type Common language runtime type structure

Nominal storage allocation

Value range

Boolean Boolean Depends on implementing platform

True or False

Byte Byte 1 byte 0 through 255 (unsigned)

Char (single

character)

Char 2 bytes 0 through 65535 (unsigned)

Date DateTime 8 bytes 0:00:00 (midnight) on January 1, 0001 through 11:59:59 PM on December 31, 9999

Decimal Decimal 16 bytes 0 through +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) † with no decimal point; 0 through +/-7.9228162514264337593543950335 with 28 places to the right of the decimal;

smallest nonzero number is +/-0.0000000000000000000000000001 (+/-1E-28) †

Page 34: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 34

Tipos de variáveis em VB 2008 (2)Double

(double-

precision

floating-

point)

Double 8 bytes -1.79769313486231570E+308 through -4.94065645841246544E-324 † for negative values;

4.94065645841246544E-324 through 1.79769313486231570E+308 † for positive values

Integer Int32 4 bytes -2,147,483,648 through 2,147,483,647 (signed)

Long (long

integer)

Int64 8 bytes -9,223,372,036,854,775,808 through 9,223,372,036,854,775,807 (9.2...E+18 †) (signed)

Object Object (class) 4 bytes on 32-bit platform

Any type can be stored in a variable of type Object

8 bytes on 64-bit platform

SByte SByte 1 byte -128 through 127 (signed)

Short (short

integer)

Int16 2 bytes -32,768 through 32,767 (signed)

Page 35: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 35

Tipos de variáveis em VB 2005 (3)Single (single-

precision

floating-

point)

Single 4 bytes -3.4028235E+38 through -1.401298E-45 † for negative values;

1.401298E-45 through 3.4028235E+38 † for positive values

String

(variable-

length)

String (class) Depends on implementing platform

0 to approximately 2 billion Unicodecharacters (ver: www.unicode.org)

UInteger UInt32 4 bytes 0 through 4,294,967,295 (unsigned)

ULong UInt64 8 bytes 0 through 18,446,744,073,709,551,615 (1.8...E+19 †) (unsigned)

User-Defined

(structure)

(inherits from

ValueType) Depends on implementing

platform Each member of the structure has a range

determined by its data type and independent of the ranges of the other members

UShort UInt16 2 bytes 0 through 65,535 (unsigned)

† In scientific notation, "E" refers to a power of 10.

So 3.56E+2 signifies 3.56 x 102 or 356, and 3.56E-2 signifies 3.56 / 102 or 0.0356.

Page 36: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 36

VB -Testes e comparações• Operadores de teste

• Booleano: expressão cujo resultado é True ou False, e que se

realiza com ajuda de uma condição.

• Uma Condição é uma Comparação, e compõe-se de :

– Variaveis ( A (operador de comparação) B),

– Um operador de comparação (= (igual), <> (diferente), <, >, >=, <=)

– Ex: Se X < 10 Então

• caso X = 5 então é True,

• caso X= 20 então é False.

–Se (booleano) então

•Instrução 1

–Senão

•Instrução 2

•Fim Se

–Se (booleano) então

•Instruções

–Fim Se

Page 37: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 37

Ciclos• São estruturas de programação que permitem a repetição de um

conjunto de instruções um determinado numero de vezes (1, n ou infinito). São executados enquanto que uma determinada condição lógica não muda de valor (True/False).

No VB temos:

• While...End While

• Do Loops

• For...Next

• For Each Loops

Page 38: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 38

VB – Ciclos: While• Ciclos são estruturas repetitivas de execução de

instruções.

• São o ponto mais fácil de errar, sobretudo quando os

problemas se complicam, i.é, quando os algoritmos são

complexos.

• Os ciclos mais usados são:

– Enquanto (booleano)

...

Instruções

...

– Fim enquanto

While( condição)

....

instruções

...

EndWhile

While condition

[ statements ]

[ Exit While ]

[ statements ]

End While

Page 39: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 39

VB – Ciclos: For…Next• Os ciclos For…Next tem a seguinte sintaxe:

For counter [ As datatype ] = start To end [ Step step ]

[ statements ]

[ Exit For ]

[ statements ]

Next [ counter ]

• 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

Page 40: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 40

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

Page 41: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 41

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

Page 42: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 42

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.

Page 43: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 43

VB – If…Then…Else (2)

• SintaxeIf condition [ Then ]

[ statements ]

[ ElseIf elseifcondition [ Then ]

[ elseifstatements ] ]

[ Else [ elsestatements ] ]

End If

Ou

If condition Then [ statements ] [ Else [ elsestatements ] ]

(NB: neste ultimo caso escreve-se numa só linha)

If condition [ Then ]

[ statements ]

[ Else

[ elsestatements ] ]

End If

Page 44: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 44

VB – If…Then…Else (3) partes• condition

– Required. Expression. Must evaluate to True or False, or to a data type that is implicitly convertible to Boolean.

• Then– Required in the single-line form, optional in the multiple-line form.

• statements– Optional. One or more statements following If...Then that are executed if

condition evaluates to True.

• elseifcondition– Required if ElseIf is present. Expression. Must evaluate to True or False, or

to a data type that is implicitly convertible to Boolean.

• elseifstatements– Optional. One or more statements following ElseIf...Then that are executed

if elseifcondition evaluates to True.

• elsestatements– Optional. One or more statements that are executed if no previous

condition or elseifcondition expression evaluates to True.

• End If– Terminates the If...Then...Else block.

Page 45: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 45

VB – If…Then…Else (4) exemplos

• Exemplos:

If A > 10 Then

A = A + 1

B = B + A

C = C + B

End if

If A > 10 Then

A = A + 1

B = B + A

C = C + B

Else

A = A + 2

C = C - B

End if

• Ou (neste caso usamos o separador : de instruções)

If A > 10 Then A = A + 1 : B = B + A : C = C + B

Exemplos

diferentes !

Page 46: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 46

VB – If…Then…Else (5) exemplo

• Ou ainda:

Dim number, digits As Integer

Dim myString As String number = 53

If number < 10 Then

digits = 1

ElseIf number < 100 Then

digits = 2

Else digits = 3

End If

If digits = 1 Then myString = "One" Else myString = "More than one"

Page 47: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 47

VB – Select...Case (1) Select [ Case ] testexpression [ Case

expressionlist [ statements ] ]

[ Case Else [ elsestatements ] ]

End Select • testexpression

– Required. Expression.

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

Page 48: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 48

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

Page 49: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 49

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.

Page 50: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 50

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

– 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 leva a que sejam preferidas à Públicas/Globais.

Page 51: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 51

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.

Page 52: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 52

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.

• O conceito de evento é todo aquele que pode ser

desencadeado de forma directa ou indirecta pela

acção objectiva, ou indirecta do utilizador.

• As estruturas de decisão e os ciclos actuam sobre os

objectos e sobre as variáveis que existem num

programa em VB.

Page 53: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 53

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>

Page 54: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 54

O que aparece… (1)• Quando se lança o VB surge o écran seguinte:

Onde se

concentra a

nossa atenção

Page 55: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 55

O que aparece… (2)

• Se vamos criar um novo

programa devemos

escolher:– Create: Project…

• Senão, então é porque vamos abrir um programa

que já existe, pelo que se deve escolher:

– Open: Project…

Page 56: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 56

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.

Depois clicar

em OK

1

23

•Por

ordem:

•1

•2

•3

Page 57: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 57

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:

Page 58: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 58

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.

Page 59: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 59

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

Page 60: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 60

O IDE - 4

Barra de

comandos

(Toolbox)

Janela da Form

Explorador

da Solução

Janela de

propriedades

dos objectos

Page 61: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 61

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.

AddHandler AddressOf Alias And

AndAlso As Boolean ByRef

Byte ByVal Call Case

Catch CBool CByte CChar

CDate CDec CDbl Char

CInt Class CLng CObj

Const Continue CSByte CShort

CSng CStr CType CUInt

CULng CUShort Date Decimal

Declare Default Delegate Dim

DirectCast Do Double Each

Else ElseIf End EndIf

Enum Erase Error Event

Exit False Finally For

Friend Function Get GetType

GetXMLNamespace Global GoSub GoTo

Handles If If() Implements

Imports (.NET Namespace and Type) Imports (XML Namespace) In Inherits

Integer Interface Is IsNot

Let Lib Like Long

Loop Me Mod Module

Page 62: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 62

O IDE - 2

MustInherit MustOverride MyBase MyClass Namespace Narrowing New Next Not Nothing NotInheritable NotOverridable Object Of On Operator Option Optional Or OrElse Overloads Overridable Overrides ParamArray Partial Private Property Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume Return SByte Select Set Shadows Shared Short Single Static Step Stop String Structure Sub SyncLock Then Throw To True Try TryCast TypeOf Variant Wend UInteger ULong UShort Using When While Widening With WithEvents WriteOnly Xor #Const #Else #ElseIf #End #If = & &= * *= / /= \ \= ^ ^= + += - -= >> Operator (Visual Basic) >>= Operator (Visual Basic)

Page 63: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 63

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.

Page 64: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 64

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) A B

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

Page 65: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 65

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)

b)

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.

212

2

12 yyxxdist

1212 yyxxdist

Page 66: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 66

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.

16. Programa de conversão de temperaturas.

As temperaturas exprimem-se geralmente em graus Celsius, Fahrenheit ou

Kelvin, sendo as formulas de conversão as abaixo assinaladas. Escreva um

programa que leia um valor numa das escalas referidas (ºC, ºF ou ºK) e que

por meio de um comando converta nas outras escalas.

a

cabbx

.2

..42

1,0

Page 67: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 67

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.

18. Escreva um programa que determina se um dado numero N

inteiro e maior que 1, lido ao teclado é primo.

19. Escreva um programa para gerar os números primos entre 2 e

10.000 a partir dos critérios usados na questão anterior.

20. Faça um programa para jogar no Euromilhões, gerando uma

chave e os dois algarismos associados. (Nota: este é dificil…!)

Page 68: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 68

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

Page 69: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 69

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

Page 70: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 70

Vectores 3• O conceito de tabela pode ser considerada como:

– Dim V(10) as Integer

indice Nome: V(N)

N : numero de

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

Page 71: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 71

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

Page 72: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 72

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.

Page 73: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 73

Tabelas - 1

• As tabelas começam sempre no índice 0, e acabam no índice N-1, tendo N posições disponíveis.

• O tipo dos valores na tabela é o da sua declaração:

• Dim V(10) as Double

Dim XX(10) as Integer

indice tabela(N)

0

1

2

3

4

5

...

...

i

...

...

n-1

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 V(2) contém 2 V( i= 2 )

3 7 V(3) contém 7 V( i= 3 )

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 )

9 21 V(9) contém 21 V( i= 9 )

Nesta caso temos 10 valores

Logo V(10)

Page 74: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 74

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

Escrever “Média = “, Media

Page 75: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 75

Tabelas dinâmicas• Por vezes trabalhamos com tabelas cuja dimensão, ou

seja o numero de elementos que possuem, é a priori, indeterminado. Tal obriga-nos a redimensiona-la sempre que necessário, e existem meios para se dimensionar uma tabela nestas condições. Instrução :

• Redim V() ex: Redim V(100)– Apaga os valores contidos ao redimensionar.

• Redim Preserve V() ex: Redim Preserve V(50)– Preserva os valores contidos ao redimensionar.

Dim Notas() As Integer

Dim nb As Integer

Escrever “Quantos valores temos na tabela ?“

Ler nb

Redim Notas(nb-1)

Page 76: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 76

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

Page 77: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 77

Propriedades associados a tabelas

• IsFixedSize: indica se o array tem um tamanho fixo.

• IsReadOnly: indica se o array é só de leitura (read-only)

• IsSynchronized: indica se o acesso ao array é

sincronizado (thread-safe)

• Length: fornece o cardinal de elementos em todas as

dimensões do array.

• Rank: fornece o número de dimensões do array.

• SyncRoot: fornece um objecto que pode ser usado

para sincronizar o acesso ao array.

Page 78: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 78

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.

Page 79: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 79

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.

Page 80: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 80

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

n

nnu

uu2

3

11

Page 81: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 81

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:

f(i) = e = , para 1/i! < 10 -10

i

i i0 !

1

Page 82: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 82

Problemas – 2ª série (c)

• Escreva um programa para calcular π

usando o processo proposto por Euler:

• Ou seja:

• NOTA : há outros métodos mais interessantes…!

44444

4

4444

4

...4

1

3

1

2

1

1

190...

4

1

3

1

2

1

1

1

90

4

14

4 190

N

i i

Page 83: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 83

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.

Page 84: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 84

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)

Page 85: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 85

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”

Page 86: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 86

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

Private Sub Button1_Click(-----------) Handles Button1.Click

Dim i As Integer

ListBox1.Items.Clear()

For i = 32 To 255

ListBox1.Items.Add("Codigo(" & i & ") = " & vbTab &

Chr(i))

Next

End Sub

Page 87: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 87

Strings -5 Exemplos de

códigos ASCIICódigo(48) = 0

Código(49) = 1

Código(50) = 2

Código(51) = 3

Código(52) = 4

Código(53) = 5

Código(54) = 6

Código(55) = 7

Código(56) = 8

Código(57) = 9

Código(58) = :

Código(59) = ;

Código(60) = <

Código(61) = =

Código(62) = >

Código(63) = ?

Código(64) = @

Código(65) = A

Código(66) = B

Código(67) = C

Código(68) = D

Código(69) = E

Código(70) = F

Código(71) = G

Código(72) = H

Código(73) = I

Código(74) = J

Código(75) = K

Código(76) = L

Código(77) = M

Código(78) = N

Código(79) = O

Código(80) = P

Código(81) = Q

Código(82) = R

Código(83) = S

Código(84) = T

Código(85) = U

Código(86) = V

Código(87) = W

Código(88) = X

Código(89) = Y

Código(90) = Z

Código(91) = [

Código(92) = \

Código(93) = ]

Código(94) = ^

Código(95) = _

Código(96) = `

Código(97) = a

Código(98) = b

Código(99) = c

Código(100) = d

Código(101) = e

Código(102) = f

Código(103) = g

Código(104) = h

Código(105) = i

Código(106) = j

Código(107) = k

Código(108) = l

Código(109) = m

Código(110) = n

Código(111) = o

Código(112) = p

Código(113) = q

Código(114) = r

Código(115) = s

Código(116) = t

Código(117) = u

Código(118) = v

Código(119) = w

Código(120) = x

Código(121) = y

Código(122) = z

Page 88: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 88

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

Page 89: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 89

Strings -7 • O operador Like:

– Existe uma outra forma de comparar strings, usando o operador Like, com a seguinte sintaxe:

• resultado = string Like modelo

– Sendo que :• Resultado : é variável booleana (True / False)

• string : string de comparação

• modelo: pode ser uma expressão string conforme o a convenção definida.

– Para o modelo são adoptadas as seguintes convenções de alias:• ? Qualquer caractere simples

• * Nenhum ou mais de um caractere

• # Qualquer digito simples ( "0", ..."9")

• [charlist] Qualquer caractere simples da lista de caracteres

• [!charlist] Qualquer caractere simples não presentes na lista de caracteres

– Ex: resultado = “A” Like “?” sempre True

– resultado = “ABC5078” Like “ABC???” também sempre True

– resultado = “ABC78” Like “ABC*” também sempre True

Page 90: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 90

Strings -8

• Funções pré definidas sobre strings do VB– Str(numero) : converte <numero> (valor numérico) em string.

– Len(string ) : determina o número de caracteres da string, ou seja o seu comprimento.

– Chr$(código) : retorna uma string associada ao código.

– Asc(string) : retorna um valor inteiro que representa o código do primeiro caractere da string.

– Space(numero) - Retorna uma string contendo <numero> de espaços.

– String$(Tamanho,String) - Cria uma string com comprimento igual a Tamanho e que contém o primeiro caractere da String. Se String tiver mais que um caractere somente o primeiro será usado.

– Trim$(string) - Remove os espaços existentes de ambos os lados de string

– RTrim$(string) - Remove os espaços à direita da string

– LTrim$(string) - Remove os espaços à esquerda da string

– LCase$(string) - Converte todos os caracteres alfanuméricos na stringpara minúsculas.

Page 91: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 91

Strings -9 • Funções básicas de manipulação de strings (cont.):

– UCase$(string) - Converte os caracteres alfanuméricos na string para maiúsculas.

• Substrings: substrings são pedaços/partes de uma string.Existem funções para trabalhar com substrings e que são:

– Left$(String , Tamanho) : retorna uma string contendo o número de caracteres definido em Tamanho do lado esquerdo da String.

– Right$(String, Tamanho) : retorna uma string contendo o número de caracteres definido em Tamanho do lado direito da String.

– Mid$(String, Inicio,[Tamanho]) : como função retorna uma substring da String dada , começando no primeiro caractere de Inicio com comprimento definido em Tamanho. Se Tamanho for omitido ou for menor que o comprimento da string todos os caracteres a partir de inicio serão retornados.

Page 92: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 92

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

Page 93: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 93

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.

Page 94: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 94

Strings -12 Private Sub Command2_Click()

Dim i, conta As Integer

Dim in_str As String

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

Programa que determina o

numero de ocorrências de uma

letra dada pelo utilizador

Page 95: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 95

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.

Page 96: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 96

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.

Page 97: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 97

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

Page 98: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 98

GDI – 1GDI= 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.

Page 99: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 99

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)

Page 100: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 100

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.

Page 101: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 101

GDI - 4• PictureBox (cont)

• Uma imagem pode ser colocada numa PictureBox, usando a propriedade Image.

• Antes de se usar esta propriedade, devemos colocar a Image property, no SizeMode de forma a podermos vê-la. Tal é particularmente util quand a imagemé maior que a PictureBox (i.e. tem mais pixeis que a picturebox).

• Também há a questão do:– AutoSize que permite redimensionara imagem para

caber naPictureBox.

– E do StretchImage que faz o resize da imagem para a picturebox.

Page 102: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 102

GDI - 5

• PictureBox (cont)

– Podemos ainda carregar directamente uma

imagem para a PictureBox com:

• picBox.Image = Image.FromFile(filespec)

– Podemos ainda usar a propriedade

SizeMode para alterar (durante a execução

do programa) a dimensão da imagem para

que esta caiba na PictureBox

• picBox.SizeMode = PictureBoxSizeMode.AutoSize

Page 103: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 103

GDI - 6

• Coordenadas em imagem

– Há sempre m referencial ligado a qualquer imagem,

para se colocar os pixeis, ou para se aceder a estes

numa imagem.

– O canto superior esquerdo é sempre o (0,0) do

referencial

Eixo dos X

Eixo dos

Y

(0,0)

(x0,y0)

x0

y0

mais a cor

Page 104: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 104

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.

h

wx

y

Page 105: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 105

GDI – 8• Para desenhar uma elipse, ou uma circunferência a

primitiva é a mesma. Apenas mudam D0 e D1:

– Circulo (azul) de diâmetro d:

• picBox.CreateGraphics.DrawEllipse(Pens.Blue, x, y, d0, d1)

– Os valores x e y são as coordenadas do canto superior

esquerdo do rectângulo que o inscreve.– EX: picBox.CreateGraphics.DrawEllipse(Pens.Red, 35, 35, 70, 70)

d

dxy

Page 106: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 106

GDI – 9

• Objectos gráficos:

– Primitivas: pixels, linhas, rectângulos,

círculos, sectores.

– Objectos de aplicação: pie charts, barras, etc.

– Objectos de aplicação gráfica são feitos por

primitivas.

Page 107: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 107

GDI – 10• Com o que aprendeu, faça um programa de

display de funções matemáticas:

Nota: Para cada função há que previamente calcular o seu domínio e

respectiva imagem para se definir a zona de impressão. Ou seja os

limites da função e os valores que esta vai gerar.

1. F(x) = cos(x)

2. F(x) = sin(x)

3. F(x) = tang(x)

4. F(x) = 1/x

5. F(x)= x1/2

6. F(x) = log(x)

7. F(x) = x1/2/(1-x)

8. F(x) = x + 1/x2

1. F(x) = x3-3x2+1

2. F(x) = x.ex

3. F(x) = log(x)/x

4. F(x) = e-x. sin(x)

5. F(x)= x1/3

6. F(x) = xn

7. F(x) = x3 /(x2-x)

Page 108: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 108

GDI - 11

• Introdução de strings em modo gráfico:

– O VB permite que se faça o display de texto, contido

em strings, em modo gráfico, recorrendo ao

comando DRAWSTRING, cuja sintaxe pode ser vista

no exemplo seguinte, onde se desenha a função f(x)=

sin(x)

– A sintaxe desta função é:

• gr.DrawString( string, Font, Brush, x_posição, y_posição)

• Exemplo:

– Dim gr as Graphics= PictureBox1.CreateGraphics

– Dim str as String = “Olá mundo!”

– Gr.DrawString( str, Me.Font,Brushes.Blue,200,100)

Page 109: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 109

GDI - 12Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles Button2.ClickDim gr As Graphics= PictureBox1.CreateGraphicsDim x, i, fx, fx0, i0, aa, ll, toto As SingleDim str As String

aa = PictureBox1.Height: ll = PictureBox1.Width: toto = 0gr.DrawString("Função f(x) = sin(x)", Me.Font, Brushes.Blue, 100, 1)

For i = 0 To llfx = 10 + aa / 2 + 0.3 * aa * Math.Sin(i * Math.PI / 180)If i > 0 Then gr.DrawLine(Pens.Brown, i, fx, i0, fx0)

fx0 = fx: i0 = i: toto = toto + 1If toto >= 50 Then ‘de 50 em 50 pontos faz o display da string com o valor de f(x) no

ponto.str = "f(" & i & "º)= " & Math.Round(fx, 1) ‘constrói a stirng strgr.DrawString(str, Me.Font, Brushes.DarkRed, i, fx) ‘ display da string strtoto = 0

End If

NextEnd Sub

Page 110: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 110

GDI - 13

• A saída gráfica desta

função é:

Display da

string str, com o

valor de f(x) no

ponto...

Display gráfico

de f(x)= sin(x)

Page 111: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 111

GDI – 14

• Outras funções gráficas:

– DrawRectangle (Pens.Color, x , y , w , h )

– Fill.Rectangle(Brushes.Color,x,y,w,h)

– DrawEllipse( Pens.Color, x, y , d ,d ) caso circulo

– DrawEllipse( Pens.Color, x, y , d1 ,d2 ) caso elipse

– FillEllipse( Brushes.Color, x , y , w, h )

• Nota: no uso da Ellipse, o x, y correspondem ao canto

superior esquerdo do rectângulo que a limita, sendo w e h a

largura e o comprimento do mesmo x

yw

h

Page 112: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 112

GDI - 15

• Outras funções gráficas (cont)

– DrawLine( Pens.Color, X0,y0, x1, y1)

– FillPie(Brushes.Color, a-r,b-r,2*r,2*r,

Angulo_inicio, Angulo_Varrido)

• Esta função desenha uma pie (tarte) de centro

(a,b), raio r, com a cor Brushes.Color, e tendo

um ângulo inicial e um ângulo de varrimento.

• Nos slides seguinte podemos ver o código

respectivo e o resultado gráfico.

Page 113: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 113

GDI - 16Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Button8.Click

'Desenha PieDim gr As Graphics = PictureBox1.CreateGraphicsDim r As Single = 100Dim ini_ang, tot_ang As Singleini_ang = 0tot_ang = 135

gr.DrawPie(Pens.Black, 200 - r, 200 - r, 2 * r, 2 * r, ini_ang, tot_ang) ‘(1)gr.FillPie(Brushes.Salmon, 400 - r, 200 - r, 2 * r, 2 * r, ini_ang, tot_ang)

‘(2)

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

Page 114: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 114

GDI - 17

„(3)

„(1) „(2)

Page 115: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 115

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.

Page 116: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 116

Implemente um programa do Jogo da Vida• Regras do Jogo da Vida

– Conway escolheu suas regras cuidadosamente, após um longo período de experimentos, para satisfazer três critérios:

• Não deve haver nenhuma imagem inicial para a qual haja uma prova imediata ou trivial de que a população pode crescer sem limite.

• Deve haver imagens iniciais que aparentemente cresçam sem limite.

• Deve haver imagens iniciais simples que cresçam e mudem por um período de tempo considerável antes de chegar a um fim das possíveis formas:

– Sumindo completamente (por superpopulação ou por ficarem muito distantes)

– Estacionando em uma configuração estável que se mantem imutável para sempre, ou entrando em uma fase de oscilação na qual são repetidos ciclos infinitos de dois ou mais períodos.

– Por outras palavras, as regras deviam tornar o comportamento das populaçõesao mesmo tempo interessante e imprevisível.

– As regras são simples e elegantes:• Qualquer célula viva com menos de dois vizinhos vivos morre de solidão.

• Qualquer célula viva com mais de três vizinhos vivos morre de superpopulação.

• Qualquer célula com exatamente três vizinhos vivos se torna uma célula viva.

• Qualquer célula com dois vizinhos vivos continua no mesmo estado para a próxima geração.

– É importante entender que todos os nascimentos e mortes ocorrem simultaneamente. Juntos eles constituem uma geração ou, como podemos chamá-los, um "instante" na história da vida completa da configuração inicial.

Page 117: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 117

Rato – 1

• O rato é um poderoso instrumento em inúmeros programas, e que permite uma dimensão adicional de interface com o código.

• O seu uso primário consiste em desencadear eventos (agindo sobre os controlos) e que desencadeiam a execução do código que lhes corresponde.

• Mas há outra forma de usar o rato, e que consiste em aceder directamente aos eventos que este pode gerar e que são:– Posição (x,y)

– Premir algum dos seus botões

– Etc…

Page 118: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 118

Rato – 2

• O rato é sempre usado sobre um objecto

(Form1, PictureBox,…) e é necessário

incluir no programa o código

correspondente ao seu uso.

Page 119: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 119

Ficheiros - 1

Page 120: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 120

Ficheiros – 2

Page 121: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 121

Ficheiros – 3

Page 122: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 122

Ficheiros – 4

Page 123: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 123

Ficheiros – 5

Page 124: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 124

Ficheiros – 6

Page 125: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 125

Ficheiros – 7

Page 126: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 126

Ficheiros – 8

Page 127: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 127

Ficheiros – 9

Page 128: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 128

Ficheiros – 10

Page 129: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 129

Ficheiros – 11

Page 130: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 130

Ficheiros – 12

Page 131: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 131

Ficheiros – 13

Page 132: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 132

Ficheiros – 14

Page 133: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 133

Ficheiros – 15

Page 134: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 134

Ficheiros – 16

Page 135: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 135

Ficheiros – 17

Page 136: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 136

Ficheiros – 18

Page 137: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 137

Ficheiros – 19

Page 138: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 138

Ficheiros – 20

Page 139: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 139

Ficheiros – 21

Page 140: Programacao2010 2011 JOSE NEVES

(c) jacn10/11 140

Ficheiros – 22