• Nenhum resultado encontrado

‘ Array unidimensional c/ 8 células, com valores inteiros

Dim V(1 To 8) As Integer

‘ Array unidimensional c/ 8 células, com valores inteiros

V(1)

1 2 3 4 5 6 7 8

V(8)

- Leitura - Escrita

- Máximo e mínimo e respectiva posição - Soma de todos os elementos

- Média aritmética dos elementos - Troca de dois elementos

- Inversão

- Permutação circular - Remoção dum elemento

- Inserção dum novo elemento - Pesquisa dum elemento

- Número de elementos repetidos - Ordenação : Bubble Sort

Microsoft VBA

PROGRAMAÇÃO

3.5.2.1. Leitura dum vector

3.5.2.1. Leitura dum vector

V

V

V

1 2 3 4 5 N-2 N-1 N

? ? ? ? ? …………. ? ? ?

Descrição Algorítmica Codificação VBA

Para índice Desde 1 Até N Faz

ESCREVER (“Insira o elemento” &índice &”do vector”)

LER(v(índice))

Fim do Para

...

Para índice Desde 1 Até N Faz

ESCREVER (“Insira o elemento” &índice &”do vector”)

LER (v(índice))

Fim do Para

...

Sub Ler_Vector(v()As Integer, ByVal N As Integer) Dim i As Integer

For i=1 To N

v(i)=CInt (InputBox(“Insira o elemento”&i)) Next i

End Sub

Sub Ler_Vector(v()As Integer, ByVal N As Integer)

Dim i As Integer For i=1 To N

v(i)=CInt (InputBox(“Insira o elemento”&i))

Next i

Microsoft VBA

PROGRAMAÇÃO

3.5.2.2. Escrita dum vector

3.5.2.2. Escrita dum vector

V

V

V

1 2 3 4 5 N-2 N-1 N

5 7 4 5 1 …………. 9 5 3

Descrição Algorítmica Codificação VBA

Para índice Desde 1 Até N Faz

ESCREVER (“v(” &índice &”)=“ &v(índice) &mdl)

Fim do Para

...

Para índice Desde 1 Até N Faz

ESCREVER (“v(” &índice &”)=“ &v(índice) &mdl)

Fim do Para

...

Sub Escrever_Vector(v()As Integer, ByVal N As Integer) Dim i As Integer

For i=1 To N

MsgBox “v(“ &i &”)=“ &v(i) &Chr(13) Next i

End Sub

Sub Escrever_Vector(v()As Integer, ByVal N As Integer)

Dim i As Integer For i=1 To N

MsgBox “v(“ &i &”)=“ &v(i) &Chr(13)

Next i

Microsoft VBA

PROGRAMAÇÃO

Caso opção Tome

valor = “Máximo”: Faz Aux← v(1)

Pos_aux← 1

Para índice Desde 2 Até N Faz

Se v(índice)>Aux Então Aux← v(índice) Pos_Aux←índice Fim do Para Máximo ← Aux Pos_Max← Pos_aux

Caso opção Tome

valor = “Mínimo”: Faz Aux← v(1)

Pos_aux← 1

Para índice Desde 2 Até N Faz

Se v(índice)<Aux Então Aux← v(índice) Pos_Aux←índice Fim do Para Máximo ← Aux Pos_Max← Pos_aux Fim do Caso

Caso opção Tome

valor = “Máximo”: Faz

Aux← v(1) Pos_aux← 1

Para índice Desde 2 Até N Faz Se v(índice)>Aux Então Aux← v(índice) Pos_Aux←índice Fim do Para Máximo ← Aux Pos_Max← Pos_aux

Caso opção Tome valor = “Mínimo”: Faz

Aux← v(1) Pos_aux← 1

Para índice Desde 2 Até N Faz Se v(índice)<Aux Então Aux← v(índice) Pos_Aux←índice Fim do Para Máximo ← Aux Pos_Max← Pos_aux Fim do Caso

3.5.2.3. Máximo e mínimo dum vector e respectiva posição

3.5.2.3. Máximo e mínimo dum vector e respectiva posição

V

V

V

1 2 3 4 5 N-2 N-1 N

5 7 4 5 1 …………. 9 5 3

Descrição Algorítmica Codificação VBA

Sub Max_Min_Pos(v()As Integer, ByVal N As Integer, Max As Integer, Min As Integer,

Pos_Max As Integer, Pos_Min As Integer) Dim Aux As Integer, Pos As Integer

Dim i As Integer, opcao As String

opcao = InputBox(“Qual a opcao: Máximo ou Mínimo”) Select Case opcao

Case “Máximo” Aux=v(1) Pos=1 For i=2 To N If v(i)>Aux Then Aux=v(i) Pos=i End If Next i Max=Aux Pos_Max=Pos Case “Mínimo” Aux=v(1) Pos=1 For i=2 To N If v(i)<Aux Then Aux=v(i) Pos=i End If Next i Max=Aux Pos_Max=Pos End Select End Sub

Sub Max_Min_Pos(v()As Integer, ByVal N As Integer,

Max As Integer, Min As Integer,

Pos_Max As Integer, Pos_Min As Integer)

Dim Aux As Integer, Pos As Integer Dim i As Integer, opcao As String

opcao = InputBox(“Qual a opcao: Máximo ou Mínimo”)

Select Case opcao

Case “Máximo” Aux=v(1) Pos=1 For i=2 To N If v(i)>Aux Then Aux=v(i) Pos=i End If Next i Max=Aux Pos_Max=Pos Case “Mínimo” Aux=v(1) Pos=1 For i=2 To N If v(i)<Aux Then Aux=v(i) Pos=i End If Next i Max=Aux Pos_Max=Pos End Select End Sub

Microsoft VBA

PROGRAMAÇÃO

3.5.2.4. Soma de todos os elementos dum vector

3.5.2.4. Soma de todos os elementos dum vector

V

V

V

1 2 3 4 5 N-2 N-1 N

5 7 4 5 1 …………. 9 5 3

Descrição Algorítmica Codificação VBA

5 + 7 + 4 + 5 + 1 + …………. + 9 + 5 + 3

s ← 0

Para índice Desde 1 Até N Faz s ← s + v(índice)

Fim do Para

...

s ← 0

Para índice Desde 1 Até N Faz

s ← s + v(índice)

Fim do Para

...

Function Soma_elem_vector(v()As Integer, ByVal N As Integer)As Long Dim i As Integer, S As Long

S=0 For i=1 To N S=S+v(i) Next i Soma_elem_vector=S End Function

Function Soma_elem_vector(v()As Integer, ByVal N As Integer)As Long Dim i As Integer, S As Long

S=0 For i=1 To N S=S+v(i) Next i Soma_elem_vector=S End Function

Microsoft VBA

PROGRAMAÇÃO

3.5.2.5. Média aritmética de todos os elementos dum vector

3.5.2.5. Média aritmética de todos os elementos dum vector

V

V

V

1 2 3 4 5 N-2 N-1 N

5 7 4 5 1 …………. 9 5 3

Descrição Algorítmica Codificação VBA

5 7 4 5 1 …………. 9 5 3

N

i

V

V

N i

=

=

1

)

(

M ← 0

Para índice Desde 1 Até N Faz M ← M + v(índice) Fim do Para M ← M / N ... M ← 0

Para índice Desde 1 Até N Faz

M ← M + v(índice)

Fim do Para

M ← M / N

...

Function Media_Arit_vector(v()As Integer, ByVal N As Integer)As Integer Dim i As Integer, M As Long

M=0 For i=1 To N M=M+v(i) Next i Media_Arit_vector=M/N End Function

Function Media_Arit_vector(v()As Integer, ByVal N As Integer)As Integer Dim i As Integer, M As Long

M=0 For i=1 To N M=M+v(i) Next i Media_Arit_vector=M/N End Function

Microsoft VBA

PROGRAMAÇÃO

3.5.2.6. Troca de dois elementos dum vector

3.5.2.6. Troca de dois elementos dum vector

V

V

V

1 2 I J N 3 5 4 …………. 8 7

Aux

Descrição Algorítmica Codificação VBA

ESCREVER(“Indique o índice do 1.º elemento a trocar i<N”)

LER(i)

ESCREVER(“Indique o índice do 1.º elemento a trocar j<N”)

LER(j) Aux ← v(i) v(I) ← v(j) v(j) ← Aux ...

ESCREVER(“Indique o índice do 1.º elemento a trocar i<N”)

LER (i)

ESCREVER(“Indique o índice do 1.º elemento a trocar j<N”)

LER (j) Aux ← v(i) v(I) ← v(j) v(j) ← Aux

...

Sub Troca2elem_vect(v()As Integer, ByVal N As Integer) Dim i As Integer,j As Integer, Aux As Integer

i=CInt(InputBox(“O índice do 1.º elem. a trocar i<N”)) j=CInt(InputBox(“O índice do 2.º elem. a trocar j<N”)) Aux=v(i)

v(i)=v(j) v(j)=Aux End Sub

Sub Troca2elem_vect(v()As Integer, ByVal N As Integer)

Dim i As Integer,j As Integer, Aux As Integer

i=CInt(InputBox(“O índice do 1.º elem. a trocar i<N”)) j=CInt(InputBox(“O índice do 2.º elem. a trocar j<N”)) Aux=v(i)

v(i)=v(j) v(j)=Aux

Microsoft VBA

PROGRAMAÇÃO

3.5.2.7. Inversão dum vector

3.5.2.7. Inversão dum vector

V

V

V

1 2 3 K 5 N

Descrição Algorítmica Codificação VBA

k ← N \ 2 ‘Divisão inteira

Para índice Desde 1 Até k Faz Aux ← v(índice) v(índice) ← v(N-índice+1) v(N-índice+1) ← Aux Fim do Para ... k ← N \ 2 ‘Divisão inteira

Para índice Desde 1 Até k Faz

Aux ← v(índice)

v(índice) ← v(N-índice+1) v(N-índice+1) ← Aux

Fim do Para

...

Sub Inverte_vect(v()As Integer, ByVal N As Integer) Dim k As Integer, i As Integer

Dim Aux As Integer

k=N\2 ‘Divisão inteira For i=1 To k Aux=v(i) v(i)=v(N-i+1) v(N-i+1)=Aux Next i End Sub

Sub Inverte_vect(v()As Integer, ByVal N As Integer)

Dim k As Integer, i As Integer Dim Aux As Integer

k=N\2 ‘Divisão inteira For i=1 To k Aux=v(i) v(i)=v(N-i+1) v(N-i+1)=Aux Next i End Sub

Microsoft VBA

PROGRAMAÇÃO

3.5.2.8. Permutação circular dum vector

3.5.2.8. Permutação circular dum vector

V

V

V

1 2 3 N-1 N

3 5 4 …………. 8 7

Descrição Algorítmica Codificação VBA

Aux ← v(1)

Para índice Desde 1 Até N-1 Faz v(índice) ← v(índice+1) Fim do Para v(N) ← Aux ... Aux← v(1)

Para índice Desde 1 Até N-1 Faz

v(índice) ← v(índice+1)

Fim do Para

v(N) ← Aux

...

Sub Permut_circ_Vect(v()As Integer, ByVal N As Integer) Dim Aux As Integer, i As Integer

Aux=v(1) For i=1 To N-1 v(i)=v(i+1) Next i v(N)= Aux End Sub

Sub Permut_circ_Vect(v()As Integer, ByVal N As Integer)

Dim Aux As Integer, i As Integer

Aux=v(1) For i=1 To N-1 v(i)=v(i+1) Next i v(N)= Aux End Sub

Microsoft VBA

PROGRAMAÇÃO

3.5.2.9. Remoção dos elementos dum vector

3.5.2.9. Remoção dos elementos dum vector

V

V

V

1 2 K N-1 N

3 5 ……… 4 …………. 8 7

Descrição Algorítmica Codificação VBA

ESCREVER(“Indique o índice do elemento a remover <N”)

LER(k)

Para índice Desde k Até N-1 Faz v(índice) ← v(índice+1)

Fim do Para

N ← N-1

...

ESCREVER(“Indique o índice do elemento a remover <N”)

LER (k)

Para índice Desde k Até N-1 Faz

v(índice) ← v(índice+1)

Fim do Para

N ← N-1

...

Sub Remov_elem_Vect(v()As Integer, N As Integer) Dim k As Integer, i As Integer

k=CInt(InputBox(“O índice do elem. a remover k<N”)) For i=1 To N-1 v(i)=v(i+1) Next i N=N-1 ReDim v(1 To N) End Sub

Sub Remov_elem_Vect(v()As Integer, N As Integer)

Dim k As Integer, i As Integer

k=CInt(InputBox(“O índice do elem. a remover k<N”))

For i=1 To N-1 v(i)=v(i+1) Next i N=N-1 ReDim v(1 To N) End Sub

Microsoft VBA

PROGRAMAÇÃO

3.5.2.10. Inserção dum novo elemento no vector

3.5.2.10. Inserção dum novo elemento no vector

V

V

V

1 2 K N N+1

3 5 ……… 4 …………. 8 7

Descrição Algorítmica Codificação VBA

ESCREVER(“Indique o índice do elemento a inserir <N”)

LER (k)

Para índice Desde N+1 Até k Faz v(índice) ← v(índice-1)

Fim do Para

N ← N+1

...

ESCREVER(“Indique o índice do elemento a inserir <N”)

LER(k)

Para índice Desde N+1 Até k Faz

v(índice) ← v(índice-1)

Fim do Para

N ← N+1

...

Sub Inserir_elem_Vect(v()As Integer, N As Integer) Dim k As Integer, i As Integer

ReDim v(LBound (v()) To UBound (v())+1)

k=CInt(InputBox(“O índice do elem. a adicionar k<N”)) For i=N+1 To k Step -1

v(i)=v(i-1) Next i

N=N+1 End Sub

Sub Inserir_elem_Vect(v()As Integer, N As Integer)

Dim k As Integer, i As Integer

ReDim v(LBound (v()) To UBound (v())+1)

k=CInt(InputBox(“O índice do elem. a adicionar k<N”))

For i=N+1 To k Step -1 v(i)=v(i-1)

Next i N=N+1

Microsoft VBA

PROGRAMAÇÃO

3.5.2.11. Pesquisa dum elemento dum vector

3.5.2.11. Pesquisa dum elemento dum vector

V

V

V

1 2 K N N+1

3 5 ……… ? …………. 8 7

Descrição Algorítmica Codificação VBA

índice ← 1 Achou ← False

Enquanto (Não Achou) e (índice <N) índice ← índice +1

Achou ← (v(índice)=valor)

Fim do Enquanto Se (Achou=True)

Então ESCREVER(“Está na posição” & índice)

Senão ESCREVER(“Não está no vector”)

Fim do Se

...

índice ← 1 Achou ← False

Enquanto (Não Achou) e (índice <N) índice ← índice +1

Achou ← (v(índice)=valor)

Fim do Enquanto Se (Achou=True)

Então ESCREVER(“Está na posição” & índice)

Senão ESCREVER(“Não está no vector”)

Fim do Se

...

Sub Pesq_elem_Vect(v()As Integer, ByVal N As Integer Elem As Integer)

Dim i As Integer, Achou As Boolean i=1

Achou=False

Do While (Not Achou) And (i<N) i=i+1

Achou=(v(i)=Elem) Loop

If (Achou=True)Then MsgBox “Está na posição “&i Else MsgBox “Não está no vector” End If

End Sub

Sub Pesq_elem_Vect(v()As Integer, ByVal N As Integer

Elem As Integer)

Dim i As Integer, Achou As Boolean

i=1

Achou=False

Do While (Not Achou) And (i<N) i=i+1

Achou=(v(i)=Elem)

Loop

If (Achou=True)Then MsgBox “Está na posição “&i

Else MsgBox “Não está no vector”

End If End Sub

Microsoft VBA

PROGRAMAÇÃO

3.5.2.12. Número de elementos repetidos num vector

3.5.2.12. Número de elementos repetidos num vector

V

V

V

1 2 3 4 5 N-2 N-1 N

2 3 2 2 3 …………. 4 2 1

Descrição Algorítmica Codificação VBA

Ex.: 2 e 3 repetido: 2 elementos repetidos.

N_Repetidos ← 0

Para índice desde 1 Até N-1 j ← índice +1 Repetição ← False Repetir Se (v(índice)=v(j)) Então Repetição ← True N_Repetidos ←N_Repetidos+1 Senão j ← j + índice Fim do Se

Até (Repetição =True) ou (j=N+1)

Fim do Para

...

N_Repetidos ← 0

Para índice desde1 AtéN-1 j ← índice +1 Repetição ←False Repetir Se (v(índice)=v(j)) Então Repetição ←True N_Repetidos ←N_Repetidos+1 Senão j ← j + índice Fim do Se

Até (Repetição =True) ou (j=N+1)

Fim do Para

...

Function N_elem_Rep(v()As Integer, ByVal N As Integer)As Integer Dim i As Integer, j As Integer, N_Repetidos As Integer

Dim Repeticao As Boolean N_Repetidos=0 For i=1 To N-1 j=j+1 Repeticao=False Do If v(i)=v(j) Then Repeticao=True N_Repetidos=N_Repetidos+1 Else j=j+1 End If

Loop Until (Repeticao=True)OR (j=N+1) Next i

N_Elem_Rep=N_Repetidos End Function

Function N_elem_Rep(v()As Integer, ByVal N As Integer)As Integer Dim i As Integer, j As Integer, N_Repetidos As Integer

Dim Repeticao As Boolean

N_Repetidos=0 For i=1 To N-1 j=j+1 Repeticao=False Do If v(i)=v(j) Then Repeticao=True N_Repetidos=N_Repetidos+1 Else j=j+1 End If

Loop Until (Repeticao=True)OR (j=N+1)

Next i

N_Elem_Rep=N_Repetidos

Microsoft VBA

PROGRAMAÇÃO

3.5.2.13. Ordenação dum vector: Bubble Sort

3.5.2.13. Ordenação dum vector: Bubble Sort

3 7 5 8 1

V

V

V

3 5 7 1 8 3 5 1 7 8 3 1 5 7 8 1 3 5 7 8

Para a ordenação deste vector de 5 elementos foram necessárias 4 passagens. Por maioria de razão, se o vector tivesse N elementos seriam

necessárias N-1 passagens.

Nota: a troca de valores entre 2 variáveis a e b: Aux=a

a=b b=Aux

Para a ordenação deste vector de 5 elementos foram necessárias 4 passagens. Por maioria de razão, se o vector tivesse N elementos seriam

necessárias N-1 passagens.

Nota: a troca de valores entre 2 variáveis a e b:

Aux=a a=b b=Aux

Codificação VBA

Sub Ordenacao_Bubble(v()As Integer, ByVal N As Integer) Dim i As Integer, limite As Integer

Dim Aux As Integer

For limite=N-1 To 1 Step -1 For i=1 To limite

If v(i)>v(i+1) Then Aux=v(i) v(i)=v(i+1) v(i+1)=Aux End If Next i Next limite End Sub

Sub Ordenacao_Bubble(v()As Integer, ByVal N As Integer)

Dim i As Integer, limite As Integer

Dim Aux As Integer

For limite=N-1 To 1 Step -1

For i=1 To limite

If v(i)>v(i+1) Then Aux=v(i) v(i)=v(i+1) v(i+1)=Aux End If Next i Next limite End Sub Vector inicial Vector inicial 1.ª passagem 1.ª passagem 2.ª passagem 2.ª passagem 3.ª passagem 3.ª passagem 4.ª passagem 4.ª passagem Ordenação p or ordem cre scente Ordenação p or ordem cre scente

Microsoft VBA

PROGRAMAÇÃO

3.5.3. Matrizes: Array Bidimensional

3.5.3. Matrizes: Array Bidimensional

3.5.4. Operações básicas com matrizes

3.5.4. Operações básicas com matrizes

Documentos relacionados