[Índice Acima]

Controlo de fluxo

O ciclo iterativo for..next

O ciclo iterativo for..next (para... valor seguinte), na sua forma simples, tem o significado seguinte:

Para variável de valor inicial dado e valor final dado
	executar isto
e recomeçar incrementando a variável de 1 (até ultrapassar o valor final)

Em pseudocódigo, poderia ser:

	for Variavel=Inicial to Final
		execute f(Variavel)
	next Variavel value

O ciclo executaria para todos os valores inteiros de 0 a N. Sendo conhecidos os valores inicial, final, e o incremento, o número de execuções do ciclo é conhecido.

Exemplo

' Four 18:28 30-04-2008
' Exemplo de ciclo iterativo for...next

' Criação e inicialização de variáveis
Contador=0
Saida="As easy as"

' Ciclo
for Contador=1 to 3
	Saida = Saida & " " & Contador
next

' Saída
msgbox Saida

Mudar o incremento

Se se deseja que o incremento seja diferente de +1, deve ser especificado; nomeadamente, deve sê-lo se se pretende percorrer os valores em ordem decrescente (de 0 a -35, por exemplo), como no código abaixo:

' Four2.vbs 18:39 30-04-2008

Contador=0
ValorInicial=0
ValorFinal=1
Incremento=0.25


for Contador=ValorInicial to ValorFinal step Incremento
	msgbox "O valor actual é " & Contador
next


msgbox "Novo ciclo!"

ValorInicial=0
ValorFinal=-3
Incremento=-1

for Contador=ValorInicial to ValorFinal step Incremento
	msgbox "O valor actual é " & Contador
next

msgbox "Voilà!"

Exercícios

Factorial

O factorial de um número é o produto de todos os números inteiros até esse número inclusivé. P. Ex., o factorial de 4 = 1*2*3*4. É um número inteiro. O factorial de 0 é 1.

Escreva um programa que calcule o factorial de um número. Haverá várias coisas a ter em conta; por exemplo, o valor inicial do contador, da variável a conter o resultado, e o tipo destas.

É muito fácil ultrapassar a capacidade numérica dos formatos inteiros com este programa. Isso conduz ou a um erro, ou à mudança de tipo para um dos tipos reais.

Melhore o programa por forma a impedir entradas inválidas.

Primos

Primo é o número que só pode ser dividido por ele próprio e por um. Escreva um programa que diga se um número é primo ou não.

Para testar a divisibilidade de um número eventualmente primo, basta dividi-lo pelo números primos entre 2 e a raiz quadrada do número. Isso implica guardar uma lsiat de números primos no código, o que ainda não sabe fazer; no entanto, se tentar a divisão por todos os números até à raiz do número, não precisa de guardar uma lista.

O operador mod devolve o resto de uma divisão de inteiros. Assim 5 mod 3 devolve 2; 6 mod 3 devolve 0, 7 mod 3 devolve 1.

O operador para raiz quadrada é sqr. Assim, sqr(16) devolve 4.

Exemplo de solução inicial

' A depuração deste código não está garantida!

' Declarações e inicializações
dim I, Numero, Raiz
Eprimo=1

' Aquisição
Numero= inputbox ("Numero a testar?")
Raiz= cint(sqr(Numero))

' Cálculos
if Numero > 2 then
	for I=2 to Raiz
		if (Numero mod I) = 0 then Eprimo =0
		' A linha abaixo provoca a saida 
		' forçada do ciclo for..next
		' e não é politicamente correcta
		exit for
	next
end if

' Resultados
if Eprimo=1 then
	msgbox Numero & " é primo"
else
	msgbox Numero & " não é primo"
end if

Mais um

A série de Fibonacci foi uma das coisas que O Código Da Vinci popularizou. O primeiro termo é zero, o segundo, 1; o terceiro e os seguintes são a soma dos dois anteriores: 0, 1, 1, 2, 3, 5, 8... Escreva um programa que diga, de um número entre 0 e 30,000 se este pertence ou não à série de Fibonacci, e quais são os dois mais próximos.

 

Índice | Comente


Início: 25/4/2008

Última modificação: 18:43 06-05-2008