Mudanças entre as edições de "Lógica de Programação 1 - Estruturas de Repetição"
Linha 321: | Linha 321: | ||
'''EXERCÍCIO 2:''' Faça um algoritmo que determine o maior entre N números. A condição de parada é a entrada de um valor 0, ou seja, o algoritmo deve ficar calculando o maior até que a entrada seja igual a 0 (ZERO). | '''EXERCÍCIO 2:''' Faça um algoritmo que determine o maior entre N números. A condição de parada é a entrada de um valor 0, ou seja, o algoritmo deve ficar calculando o maior até que a entrada seja igual a 0 (ZERO). | ||
+ | |||
+ | {{collapse top | Solução Ex. 2}} | ||
+ | [[imagem:maior_valor.jpg|border|650px]] | ||
+ | {{collapse bottom}} | ||
'''EXERCÍCIO 3:''' Faça um algoritmo que conte de 1 a 100 e a cada múltiplo de 10 emita uma mensagem: “Múltiplo de 10”. | '''EXERCÍCIO 3:''' Faça um algoritmo que conte de 1 a 100 e a cada múltiplo de 10 emita uma mensagem: “Múltiplo de 10”. |
Edição das 20h03min de 13 de agosto de 2019
Objetivos
O aluno deverá ser capaz de:
- construir fluxogramas usando estruturas de repetição;
- compreender o aninhamento de estruturas de controle de fluxo
Estruturas de repetição
No exemplo de controle de acesso da aula passada já construímos uma estrutura de repetição (um loop infinito). Vamos elaborar um pouco mais estas estruturas de repetição.
Uma das grandes vantagens de um sistema computacional é a capacidade de repetir um conjunto de instruções possivelmente sobre dados diferentes, a uma velocidade muito grande.
Exemplo de Problema com Repetição
PROBLEMA: Calcular a somatório de N valores a serem fornecidos pelo teclado.
DADOS DE ENTRADA:
- N /* número de valores */,
- a_i /* valor de um dos N números a serem inseridos */
DADOS DE SAÌDA:
- S /* somatório */
Observe que a estrutura de repetição utilizada é caracterizada por um teste (decisão) de uma expressão que deverá resultar em verdadeiro enquanto houver número a ser lido (dentro da quantidade N de números), um contador de itens lidos "i" e um bloco de repeticão terminado em um arco que conduz o fluxo de execução ao início da decisão.
NOTAR que usamos a variável a_i para ler cada valor a ser usado na soma acumulada. A medida que a leitura é realizada, a soma já é computada e ARMAZENADA em S. Desta forma podemos REAPROVEITAR a mesma variável para cada elemento lido. ENTRETANTO, em outros problemas isto poderia ser um problema. Os vetores auxiliarão neste processo...
ou
ALGORITMO
N: inteiro
A_i: inteiro
I: inteiro
SOMA: inteiro
INICIO
LER N
i = 0
SOMA = 0
ENQUANTO I<N FAÇA
LER A_i
SOMA = SOMA + A_i
I=I+1
FIM_ENQUANTO
IMPRIMIR "SOMATORIA = ", SOMA
FIM
</syntaxhighlight>
EXERCÍCIO
Considere o exercício do somatório acima. Fazer um teste de mesa (realização) para N=3 e os valores 7, 3 e 5. Na tabela do teste de mesa considere sempre os valores das variáveis (ou expressões) APÓS a execução da instrução. Segue tabela de apoio:
Instrução
executada
N
i
S
a_i
i<N
1
?
?
?
?
?
2
?
?
?
?
?
3
3
?
?
?
?
4
3
0
?
?
V
5
3
0
0
?
V
6
3
0
0
?
V
7
3
0
0
5
V
8
3
0
5
5
V
9
3
1
5
5
V
6
3
1
5
5
V
:
:
:
:
:
:
EXERCÍCIO
Construir um fluxograma para ler um número inteiro de referência para uma variável denominada REF. Na sequência devem ser lidos N números inteiros e o programa deve contar a quantidade de números maior que REF. Não usar vetores.
SUGESTÕES:
- tente usar o mesmo padrão de leitura do exercício anterior
- identifique claramente O QUE será entrada de dados e O QUE será saída
- antes de começar, "projete" quais variáveis serão necessárias
Exemplos Adicionais
Exemplo 1
PROBLEMA: Elaborar um fluxograma para imprimir os números pares em ordem decrescente (até atingir 0 inclusive) a partir de um número N fornecido como entrada.
DADOS DE ENTRADA: N (variável inteira)
DADOS DE SAÌDA: números pares impressos
Exercício
Elabore um teste de mesa para o problema acima.
Exercício
Modificar o exercício anterior para que ALÉM de imprimir os números pares, também seja impresso no FINAL do algoritmo a SOMA de todos os números ímpares abaixo de N.
Exemplo 2
PROBLEMA: Elaborar um programa para computação do fatorial de um número conforme definição abaixo:
DADOS DE ENTRADA:número N (numero inteiro)
DADOS DE SAÌDA: FATORIAL computado
O fatorial é definido por:
Exercício 1
Faça uma versão do Fluxograma do Fatorial em que a variável i começa com o valor 1. Teste também se o número N fornecido é maior ou igual a ZERO. Caso não seja (caso seja negativo) o algoritmo deve emitir uma mensagem e se encerrar. FAÇA um teste de mesa considerando N=4
Exercício 2
Observe os exemplos acima e elabore um algoritmo que computa todos os fatoriais de números entre 1 e N, onde N é um número fornecido.
DADOS DE ENTRADA: N (inteiro)
DADOS DE SAÌDA: fatoriais entre 1 e N
Exemplo 3
PROBLEMA: Aprimorar o exemplo do controle de acesso para que, no caso de 3 tentativas de acesso seguidas, com senha errada, o sistema seja bloqueado.
- DADOS DE ENTRADA: SENHA /* variável que armazena a senha entrada pelo usuário ou administrador */
- DADOS DE SAÍDA: mensagem de abertura da porta / usuário bloqueado*/
- VARIÁVEIS INTERMEDIÁRIAS: CONT_ACESSO /* valor inicial zero - incrementada a cada senha inválida */
Note que a variável CONT_ACESSO é iniciada com zero e
incrementada a cada erro no fornecimento da senha. A
atribuição CONT_ACESSO = CONT_+ACESSO + 1 deve ser
interpretada da forma: acesse o valor de CONT_ACESSO e some 1
a este valor. Coloque o resultado novamente em CONT_ACESSO
(o conteúdo anterior é sobrescrito!)
EXERCÍCIOS
Para Praticar
EXERCÍCIO 1: Fazer um algoritmo (em fluxograma) que receba a nota de 4 avaliações (usar uma única variável) e calcule a média. Imprimir aprovado, caso a média seja superior ou igual a 6.0, reprovado caso contrário.
EXERCÍCIO 2: Faça um algoritmo que determine o maior entre N números. A condição de parada é a entrada de um valor 0, ou seja, o algoritmo deve ficar calculando o maior até que a entrada seja igual a 0 (ZERO).
EXERCÍCIO 3: Faça um algoritmo que conte de 1 a 100 e a cada múltiplo de 10 emita uma mensagem: “Múltiplo de 10”.
Desafios
EXERCÍCIO 1: Modificar o sistema de controle de acesso para incluir dois usuários com user_id e senha. Prever a existência de dois usuários (armazenados nas variáveis USERID_1, USERID_2, SENHA_1, SENHA_2 com valores iniciais user "alfa", senha "alfa" e user "beta" com senha "beta"). O admin poderá ser identificado por "admin" e senha fixa "admin123". Prever bloqueio por usuário (duas variáveis contadores).
Sugestão: criar funcões separadas para tratamento de cada usuário. Em breve veremos como podemos contornar esta duplicação através da parametrização de funções/subprogramas.
Solução - Exercicio 01
EXERCÍCIO 2: Escrever um algoritmo que leia como dados de entrada dois números inteiros positivos para as variáveis S e Q. O
programa deve computar os N primeiros números da PG (progressão geométrica), onde o valor inicial de S é o número inicial e o valor em Q a razão de uma progressão geométrica. O número N também será fornecido como entrada.
Obs: Para PG tem-se:
- ou
Solução - Exercicio 02
ALGORITMO
S: real;
Q: real
N: inteiro
I: inteiro
INICIO
I=1;
LER N //número de repetições
LER Q //Ler a razão
LER S //valor de a_1
ENQUANTO i<=N FAÇA
IMPRIMIR "TERMO" I "TEM VALOR" S
S=S*Q
I=I+1
FIM_ENQUANTO
FIM
</syntaxhighlight>
EXERCÍCIO 3: Implementar um algoritmo que permita computar a somatória dos N primeiros termos de uma PG, cujos valores de "s" e "q" são também fornecidos como dados de entrada.
Solução - Exercicio 03
EXERCÍCIO 4:: Implementar um algoritmo através de um fluxograma que permita ler N números inteiros. O algoritmo deve computar o fatorial da SOMATÓRIA destes números.
Exemplo: O usuário fornece 5 números: 2,9,13,21 e 55. O algoritmo computará o fatorial de 2+9+13+21+55, ou seja, o fatorial de 100.