1
Universidade Federal do Vale do São FranciscoCurso de Engenharia de Computação
Prof. Jorge [email protected]
www.univasf.edu.br/~jorge.cavalcanti
www.twitter.com/jorgecav
IntroduIntroduçção a Algoritmos ão a Algoritmos –– Parte 04Parte 04
2
� Estruturas de controle de fluxo� Em alguns algoritmos, é necessário executar uma
mesma tarefa por um número determinado ou indeterminado de vezes.
Exemplos:
� Calcular a raiz quadrada dos números 1 à 100. Observe que para cada número, o mesmo cálculo será realizado. Neste caso, o cálculo é repetido 100 vezes.
� Calcular a raiz quadrada de um número sempre que este número for menor que 15.
� Este fato gerou a criação das estruturas de repetição as quais veremos a seguir.
Introdução a Algoritmos
3
� Estrutura de Repetição – Enquanto� Neste caso, uma dada tarefa será repetida enquanto
uma determinada condição for verdadeira.
Sintaxe:enquanto (<expressão lógica ou relacional>)
faca<sequência de comandos>Fimenquanto
� Obs: <expressão lógica ou relacional> é avaliada antes de cada repetição do laço. Quando seu resultado for VERDADEIRO, <sequência-de-comandos> é executada.
Introdução a Algoritmos
� O fato da avaliação da expressão lógica encontrar-se no início do laço faz com que a sequência de comandos só venha a ser executada se ao menos uma vez a avaliação da expressão resultar em verdadeiro.
4
algoritmo "Exemplo 1 - enquanto"
varr: realinicioescreval ("Digite um numero")leia (r)enquanto (r<100) facar <- (r^(1/2))escreval (r)leia (r)
fimenquantofimalgoritmo
Introdução a Algoritmos
5
Introdução a Algoritmos
6
Estrutura ou laço de repetição – enquanto (continuação)
Exemplo 2:
O pseudocódigo e os fluxogramas a seguir escrevem na saída padrão os números inteiros contidos no intervalo [1, 10].
Introdução a Algoritmos
7
algoritmo "exemplo 2 laço enquanto"varvalor: inteiro
iniciovalor <- 1enquanto (valor <= 10) facaescreval (valor)valor <- valor+1
fimenquantofimalgoritmo
Introdução a Algoritmos
8
Fim
Inicio
valor: inteiro
verdadeiro
falso
Valor <- 1
Valor <- valor+1
valor, “ ”
Fim
Inicio
valor: inteiro
verdadeiro
falso
Valor <- 10
Valor <- valor-1
valor<=10 Valor>0
10-valor, “ ”
Introdução a Algoritmos
9
E se a condiE se a condiçção do exemplo 1 for 50 < r < 100?ão do exemplo 1 for 50 < r < 100?
algoritmo "Exemplo 1m enquanto"Varr: real
InicioEscreval (“Digite um número maior que 50 e menor que 100”)
leia (r)enquanto (r > 50) e (r < 100) facar <- r^(1/2)escreval (r)leia (r)
fimenquantofimalgoritmo
Introdução a Algoritmos
10
Introdução a Algoritmos
11
� Estrutura de Repetição – Repita ... Até
Sintaxe:repita
<seqüência de comandos>ate (<expressão lógica ou relacional>)
<seqüência de comandos> é executada ao menos uma vez, visto que a avaliação da <expressão lógica ou relacional> encontra-se no final da estrutura de repetição.
<seqüência de comandos> seráexecutada sempre que o resultado da <expressão lógica ou relacional>resultar em FALSO.
Introdução a Algoritmos
Obs.: As instruções contidas no repita serão executadas enquanto o resultado da avaliação da expressão lógica resultar em falso. O fato da avaliação da expressão lógica encontrar-se no final do laço faz com que, mesmo no caso da expressão lógica nunca resultar em falso, a sequência de comandos seja executada ao menos uma vez.
12
algoritmo "Repita...ate"
vara: inteiro
inicioescreval("Digite um numero inteiro menor que
10")leia(a)repita
a<- a+1escreval (a)
ate (a=10)fimalgoritmo
Sempre que a condição a=10 for FALSA, a seqüência de comandos será executada.
Introdução a Algoritmos
13
Estruturas de Controle de Fluxo
Fim
Inicio
valor: inteiro
verdadeirofalso
Valor <- 0
Valor <- valor+1
valor, “ ”
valor=10 Fim
Inicio
valor: inteiro
verdadeirofalso
Valor <- 9
10-valor, “ ”
Valor=-1
Valor <- valor-1
14
Estruturas de Controle de Fluxo
Exercício:
Faça um algoritmo que recebe números naturais fornecidos pelo usuário, quando o usuário quiser parar a execução do algoritmo, o mesmo fornecerá um número negativo. O algoritmo deve retornar, ao final de seu processamento, a quantidade de números naturais fornecida pelo usuário. Fazer dois algoritmos utilizando em cada um, uma das estruturas de repetição vistas. Os algoritmos desenvolvidos devem ser representados através de um pseudocódigo e de um fluxograma.
15
Estruturas de Controle de Fluxo
algoritmo "exercício laço de repetição (a) "var num, contador: inteiroiniciocontador <- 0repitaescreva ("Entre com um número natural (entre com um inteiro negativo para sair): ")leia (num)se (num>=0) entao
contador <- contador + 1 fimse
ate (num<0)escreva ("Foram fornecidos " ,contador, " números naturais pelo usuário ")
fimalgoritmo
16
Estruturas de Controle de Fluxo
algoritmo " exercício 15 laço de repetição (b)"var num, contador: inteiroiniciocontador <- -1repitaescreva ("Entre com um número natural (entre com um inteiro negativo para sair): ")leia (num)contador <- contador + 1
ate (num<0)escreva ("Foram fornecidos " ,contador, " números naturais pelo usuário ")
fimalgoritmo
17
Fim
Inicio
num, contador: inteiro
verdadeirofalso
contador <- -1
contador <- contador+1
num<0
"Entre com um númeronatural (entre com
um inteironegativo para sair): "
num
"Fora fornecidos " ,contador, " númerosnaturais pelo usuário "
Estruturas de Controle de Fluxo
18
algoritmo "exercício 15 laço de repetição enquanto (a)"var num, contador: inteiroiniciocontador <- 0escreva ("Entre com um número natural (entre com um inteiro negativo para sair): ")
leia (num)enquanto (num>=0) facacontador <- contador + 1escreva ("Entre com um número natural (entre com um inteiro negativo para sair): ")leia (num)
fimenquantoescreva ("Foram fornecidos " ,contador, " números naturais pelo usuário")
fimalgoritmo
Estruturas de Controle de Fluxo
19
Estruturas de Controle de Fluxoalgoritmo " exercício 15 laço de repetição enquanto b"var num, contador: inteiroInicionum <- 1contador <- -1enquanto (num>=0) facacontador <- contador + 1escreva ("Entre com um número natural (entre com um inteiro negativo para sair): ")leia (num)
fimenquantoescreva ("Foram fornecidos " ,contador, " números naturais pelo usuário")
fimalgoritmo
20
Estruturas de Controle de Fluxo
Fim
Inicio
verdadeiro
falsonum>=0
"Entre com um númeronatural (entre com
um inteironegativo para sair): "
num
"Fora fornecidos " ,contador, " númerosnaturais pelo usuário "
contador <- -1
num <- 1
contador <- contador+1
num, contador: inteiro
21
Fluxograma/Exercício – Construa um fluxograma para obter o resultado da divisão entre dois números. OBS.: Caso um dos operandos não seja válido o mesmo deve ser novamente solicitado até um valor válido ser fornecido, ou seja, as entradas devem ser validadas.
Estruturas de Controle de Fluxo
n1
res <- n1 / n2
n1, “/”,n2, “=”,resn1, n2, res: realInicio Fim
n2<>0
“Digite oDividendo:”
n2“Digite oDivisor:”
verdadeiro
falso
Estruturas de Controle de Fluxo
� Estrutura ou laço de repetição
� Ao analisarmos o que ocorre nos laços de repetição enquanto e repita, perceberemos que, normalmente, ocorre uma inicialização de uma variável, envolvida na expressão lógica que controla o número de repetições.
� Dentro do laço ocorre uma atualização no valor da variável mencionada, fazendo com que esta venha a tornar o resultado da avaliação da expressão lógica coerente para a finalização da execução do laço de repetição.
� Com base nesta observação foi criado o laço de repetição para.
23
� Estrutura de Repetição – ParaSintaxe:
para <variável> de <valor-inicial> ate <valor limite> passo<incremento> faca<sequência de comandos>fimpara
Conta o número de repetições (deve ser necessariamente uma variável do tipo inteiro)
Especifica o valor de inicialização da variável contadora.
Especifica o valor máximo que a variável contadora pode alcançar.
Indica o valor do incremento que seráacrescentado à variável contadora em cada repetição do laço. Éopcional.
Quando o programa chega neste ponto, a variável contadora é incrementada e comparada com o valor limite.
Introdução a Algoritmos
24
Estruturas de Controle de Fluxo
<valor-inicial> É uma expressão que especifica o valor de inicialização da variável contadora.<valor-limite> É uma expressão que especifica o valor máximo que a variável contadora pode alcançar.<incremento> É opcional. Quando presente, éprecedido pela palavra-reservada passo. Constitui-se de uma expressão que especifica o valor do incremento que será acrescentado à variável contadora em cada repetição do laço. O valor padrão, assumido por omissão de <incremento> é 1. É possível especificar valores negativos para <incremento>.
25
fimpara Indica o fim da sequência de comandos a serem repetidos. Cada vez que o programa chega neste ponto, é acrescentado à variável contadora o valor de <incremento>, e o valor resultante é comparado a <valor-limite>. Se for menor ou igual (ou maior ou igual, quando <incremento > for negativo), a sequência de comandos será executada mais uma vez; caso contrário, a execução prosseguirá a partir do primeiro comando que esteja após o fimpara.
<valor-inicial>, <valor-limite> e <incremento> são avaliados uma única vez antes da execução da primeira repetição, e não se alteram durante a execução do laço, mesmo que variáveis eventualmente presentes nessas expressões tenham seus valores alterados.
Estruturas de Controle de Fluxo
26
algoritmo "exemplo para"varvalor: inteiro
iniciopara valor de 0 ate 10 faca
escreval (valor)fimpara
fimalgoritmo
Se passo for omitido, o valor default do incremento é 1.
Introdução a Algoritmos
Exemplo 7:
O pseudocódigo e o fluxograma a seguir escrevem na saída padrão os números inteiros contidos no intervalo [0, 10].
27
algoritmo "Exemplo Para modificado"
varn, j:inteiro
Inicioescreval ("Digite um numero inteiro")leia(n)para j de 0 ate 10 passo n faca
escreval (j)fimpara
fimalgoritmo
No programa foi adicionado uma variável de incremento, onde o valor desta é digitada pelo usuário.
Introdução a Algoritmos
Obs:<valor-inicial>, <valor-limite> e <incremento> são avaliados uma única vez antes da execução da primeira repetição, e não se alteram durante a execução do laço, mesmo que variáveis eventualmente presentes nessas expressões tenham seus valores alterados.
Estruturas de Controle de Fluxo
Fim
Inicio
valor: inteiro
verdadeiro
falso
Valor <- 0
Valor <- valor+1
valor, “ ”
valor<=10
29
Introdução a Algoritmos
Ex.: Construa um pseudocódigo para um algoritmo que exiba em um monitor uma contagem decrescente do valor 30 até o valor 1.
algoritmo “decrescendo1"varn: inteiro
iniciopara n de 30 ate 1 passo -1 faca
escreval (n)fimpara
fimalgoritmo
algoritmo “decrescendo2"varn: inteiroinicio
para n de 0 ate 29 facaescreval (30-n)
fimpara
fimalgoritmo
30
Estruturas de Controle de Fluxo
Para finalizarmos nosso estudo das estruturas de controle de fluxo, vamos tratar do teorema que as originou: o Teorema da Programação Estruturada, conhecido como Teorema de Böhm-Jacopini. Enunciado em 1966 por Corrado Böhm e Giuseppe Jacopini, sendo resultado da teoria das linguagens de programação, O qual define que cada rotina computável pode ser descrita por um algoritmo que combine as instruções utilizando apenas três maneiras especificas: 1. Executar uma instrução, depois outra instrução (sequência);2. Executar uma ou duas sequências de instruções de acordo com um valor booleano (condição);3.Executar uma sequências de instruções até que um valor booleano seja verdadeiro (iteração).
31
1)Receba do usuário um número entre 1 e 7, inclusive 1 e 7. Se ele digitar o número 1 mostre “Hoje é Domingo”, se ele digitar o número 2 mostre “Hoje é Segunda”.......
2)Peça uma letra e mostre se ela é vogal ou consoante.
3) Peça três números e mostre o maior entre eles.
Algoritmos e Programação
32
1 - Receba do usuário um número entre 1 e 7, inclusive 1 e 7. Se ele digitar o número 1 mostre “Hoje é Domingo”, se ele digitar o número 2 mostre “Hoje é Segunda”.......
Algoritmos e Programação
32
algoritmo "Dias da Semana seleção múltipla“varnum: inteiro
inicio// Seção de Comandos escreval ("Digite um número de 1 a 7:")leia (num)escolha (num)
caso 1escreval ("Hoje é Domingo")
caso 2escreval ("Hoje é Segunda")
caso 3escreval ("Hoje é Terça")
caso 4escreval ("Hoje é Quarta")
caso 5escreval ("Hoje é Quinta")
caso 6escreval ("Hoje é Sexta")
caso 7escreval ("Hoje pe Sábado")
outrocasoescreval ("Número inválido")
fimescolha
fimalgoritmo
33
2 - Peça uma letra e mostre se ela é vogal ou consoante.
Algoritmos e Programação
algoritmo "Letras do Alfabeto seleção multipla“var
let: caracterinicio// Seção de Comandos escreval ("Digite uma letra do alfabeto:")leia (let)escolha (let)
caso "a", "e", "i", "o", "u"escreval ("É uma vogal")
caso "b", "c", "d", "f", "g", "h", "j","k", "l", "m", "n", "p", "q", "r","s", "t", "v", "x", "w", "y", "z"escreval ("É uma consoante")
outrocasoescreval ("É outro caractere")
fimescolhafimalgoritmo
Tudo na mesma linha do algoritmo
34
3 - Peça três números e mostre o maior entre eles.
Algoritmos e Programação
algoritmo "MAIOR“varn1,n2,n3, maior: inteiroinicio// Seção de Comandos escreval ("Digite três números")leia (n1,n2,n3)
se (n1>n2) e (n1>n3) entaomaior:= n1
senaose (n2>n3) entaomaior:= n2
senaomaior:= n3
fimsefimseescreva (maior)fimalgoritmo
35
Exercícios
Algoritmos e Programação
4. Faça um algoritmo para escrever os números pares de 0 a 100.
5. Faça um algoritmo para escrever a série de Fibonacci = (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...) enquanto o termo a ser impresso for menor que 300.
6. Construa um algoritmo que receba dois números reais e um dos seguintes símbolos: +, -, * ou /, o qual designaráqual operação será aplicada considerando os valores recebidos como seus operandos. O referido algoritmo deve retornar o resultado da operação selecionada com uma precisão de dois dígitos (observar a divisão por 0).
36
Algoritmos e Programação
4. Faça um algoritmo para escrever os números pares de 0 a 100.
algoritmo "par de 0 a 100“
varpar: inteiro
Iniciopara par de 0 ate 100 faca
se(par%2)=0 entaoescreval (par)fimse
fimpara
fimalgoritmo
37
Algoritmos e Programação
5. Faça um algoritmo para escrever a série de Fibonacci = (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...) enquanto o termo a ser impresso for menor que 300.
enquanto (proximo<300) facaescreval (proximo) proximo:= (atual + anterior)anterior:= atualatual:= proximo
fimenquanto
fimalgoritmo
algoritmo “fibonacci“varproximo, atual, anterior: inteiroInicioproximo:= 0atual:= 0anterior:= 1
se proximo = 0 entaoescreval (proximo)
fimse
38
6. Construa um algoritmo que receba dois números reais e um dos seguintes símbolos: +, -, * ou /, o qual designará qual operação será aplicada considerando os valores recebidos como seus operandos. O referido algoritmo deve retornar o resultado da operação selecionada com uma precisão de dois dígitos.
Algoritmos e Programação
39
Ex. 06 - algoritmo “calculadora"var op1, op2: realoperador: caractereinicioescreva ("Entre com o primeiro operando: ")leia (op1)escreva ("Entre com o segundo operando: ")leia (op2)
escreva ("Entre com um dos operadores (+, -, *, /): ")leia (operador)escolha (operador)
caso "+“escreva (op1," ",operador,op2," =",op1+op2:10:2)
caso "-"escreva (op1," ",operador,op2," =",op1-op2:10:2)
Algoritmos e Programação
40
Ex 6. Continuaçãocaso "*"
escreva (op1," ",operador,op2," =", op1*op2:10:2)caso "/"se (op2<>0) entaoescreva (op1," ",operador,op2," =")escreval (op1/op2:10:2)senaoescreva ("Não é possível efetuar a divisão!")
fimseOutrocaso
escreva ("Operação inválida! ")fimescolha
fimalgoritmo
Algoritmos e Programação
41
7. Escreva um programa que requisita dois números e faz a soma deles e depois pergunta se o usuário quer fazer o cálculo novamente.
8. Escreva um programa que recebe um número e conta a partir deste número até 100.
9. Ler 10 números e dizer se cada um é: nulo, positivo ou negativo.
Algoritmos e Programação
42
7. Escreva um programa que requisita dois números e faz a soma deles e depois pergunta se o usuário quer fazer o cálculo novamente.
Algoritmos e Programação
algoritmo “repete soma“varn1, n2, soma: realresp: caracterIniciorepitaescreval ("Digite dois numeros para serem somados:")leia (n1,n2)soma:= n1+n2escreval ("A soma eh:" ,soma)escreval ("Digite algo p/ fazer novo calculo e fim p/ encerrar")leia (resp)ate (resp = “fim")fimalgoritmo
43
8. Escreva um programa que recebe um número e conta a partir deste número até 100.
Algoritmos e Programação
algoritmo “Conta ate 100“var
a: inteiroinicio
escreval("Digite um numero inteiro menor que 100")leia(a)
repitaa<-a+1escreval (a)
ate (a=100)fimalgoritmo
44
9. Ler 10 números e dizer se cada um é: nulo, positivo ou negativo.
Algoritmos e Programação
algoritmo “definir numero“varn1: inteiroIniciopara n1 de 0 ate 10 facaescreval ("Digite um numero:")leia (n1)se (n1=0) entaoescreval ("nulo")
fimsese (n1<0) entaoescreval ("Numero negativo")
fimsese (n1>0) entaoescreval ("Numero positivo")
fimsefimpara
fimalgoritmo
45
10. Escreva um programa que calcula o valor do imposto de renda de uma pessoa física, com as seguintes condições: se o salário >= 3.000, alíquota será 15%. Se 3.000>salário>=1500, alíquota será 7%. Se salário < 1500, isento.
11. Escreva um algoritmo que calcule N!, sendo que N é um inteiro fornecido pelo usuário e que 0! =1, por definição.
12. Elabore um algoritmo para cada estrutura de repetição (enquanto, repita e para) imprimir a tabuada do número 5.
Algoritmos e Programação
46
10. Escreva um programa que calcula o valor do imposto de renda de uma pessoa física, com as seguintes condições: se o salário >= 3.000, alíquota será 15%. Se 3.000>salário>=1500, alíquota será 7%. Se salário < 1500, isento.
Algoritmos e Programação
algoritmo "Imposto de Renda"// Seção de Declaraçõesvarsalario, imposto: realaliquota: caractereinicio// Seção de Comandosescreva(" Informe o valor do salário: ")leia(salario)// definicao da alíquotase (salario >= 3000) entao
aliquota <- "c"senaose (salario < 1500) entao
aliquota <- "a"senao
aliquota <- "b"
fimsefimse
escolha aliquotacaso "a"imposto <- 0caso "b"
imposto <- salario * 0.07caso "c"
imposto <- salario * 0.15fimescolhaescreval(" Valor do imposto de renda:",imposto)fimalgoritmo
47
11. Escreva um algoritmo que calcule N!, sendo que N é um inteiro fornecido pelo usuário e que 0! =1, por definição.
Algoritmos e Programação
algoritmo "Fatorial de N"// Seção de Declaraçõesvar N, F, C: inteiro // entrada, fatorial e controle)inicio// Seção de ComandosEscreva ("Digite um número inteiro: ")leia(N)Se (N = 0)entao
escreva ("Fatorial de ", N, " = 1")senao
F <-1para c de 1 ate n faca
F <- F*Cfimparaescreva ("Fatorial de ", N, " = ", F)
FimseFimalgoritmo
48
12. Elabore um algoritmo para cada estrutura de repetição (enquanto, repita e para) imprimir a tabuada do número 5.
Algoritmos e Programação
algoritmo "Tabuada do 5 usando enquanto"// Seção de Declaraçõesvar cont: inteiroinicio// Seção de Comandoscont <- 1enquanto (cont <=10) faca
escreval (cont, " x 5 = " , cont*5)cont <- cont +1
fimenquanto
fimalgoritmo
algoritmo "Tabuada do 5 usando repita"// Seção de Declaraçõesvar cont: inteiroinicio// Seção de Comandoscont <- 1repita escreval (cont, " x 5 = " , cont*5)cont <- cont +1
ate (cont <10)fimalgoritmo
algoritmo "Tabuada do 5 usando para“var cont: inteiroIniciocont <- 1para cont de 1 ate 10 faca
escreval (cont, " x 5 = " , cont*5)cont <- cont +1
fimpara fimalgoritmo
Top Related