Introdu ção a Algoritmos –Parte 04 -...

Post on 10-Dec-2018

224 views 0 download

Transcript of Introdu ção a Algoritmos –Parte 04 -...

1

Universidade Federal do Vale do São FranciscoCurso de Engenharia de Computação

Prof. Jorge Cavalcantijorge.cavalcanti@univasf.edu.br

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