‘ 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 8V(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 ← 0Para í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 7Aux
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 8Para 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