Mudanças entre as edições de "Lógica de Programação 1 - Estruturas de Repetição"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 394: Linha 394:
  
 
Implementar um algoritmo na forma de fluxograma que permite implementar uma calculadora especial que tem 3 funções:
 
Implementar um algoritmo na forma de fluxograma que permite implementar uma calculadora especial que tem 3 funções:
#Calcular o número de Fibonacci <math>F_N</math> para um número <math>N>=0</math> - ver https://en.wikipedia.org/wiki/Fibonacci_number
+
#Calcular o número de Fibonacci <math>F_N</math> para um número <math>N>=0</math> (ver https://en.wikipedia.org/wiki/Fibonacci_number)
#Calcular o Fatorial de um número N - ver https://pt.wikipedia.org/wiki/Fatorial]
+
#Calcular o Fatorial de um número N (ver https://pt.wikipedia.org/wiki/Fatorial)
#Calcular a combinação simples de N "elementos organizados 'r' a 'r'  - vbeer https://pt.wikipedia.org/wiki/Combinat%C3%B3ria#Combina%C3%A7%C3%A3o_simples
+
#Calcular a combinação simples de N "elementos organizados 'r' a 'r'  (ver https://pt.wikipedia.org/wiki/Combinat%C3%B3ria#Combina%C3%A7%C3%A3o_simples)
 +
#Uma opção da sua escolha que envolva repetição, tal como nos problemas acima.
 
Para cada um destes itens deixar claro o que é entrada e o que é saída de dados.
 
Para cada um destes itens deixar claro o que é entrada e o que é saída de dados.

Edição das 19h08min de 19 de novembro de 2020

Objetivos

O aluno deverá ser capaz de:

  • construir fluxogramas e pseudocódigo 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 */


FluxogramaSomatoria.jpg

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
  S: inteiro
INICIO
  LER N
  i = 0
  S = 0
  ENQUANTO I<N FAÇA
      LER a_i
      S = S + a_i
      i=i+1
  FIM_ENQUANTO
  IMPRIMIR "SOMATORIA = ", S
FIM

EXERCÍCIO

Considere o exercício do somatório acima. Fazer um teste de mesa (realização) para N=3 e os valores 5, 3 e 7. 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

FluxogramaRepeticaoImprimePar.jpg

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 ou iguais a N.

solução

Exemplo 2

PROBLEMA: Elaborar um fluxograma 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:

FluxogramaFatorialNum.jpg

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.

Solução Exercício 1

FatN1.jpg

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

Solução Exercício 2

FluxogramaFatorialdeNumeros.jpg

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. O administrador desbloqueia redefinindo a senha.

  • 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 */

FluxogramaControleAcessoComContador.jpg

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!)

Esta solução não é perfeita e poderia ser aprimorada. Se o administrador erra, ele pode vir a bloquear o usuário.



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.

Solução Ex. 1

Media aprova reprova.jpg

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). Supor que pelo menos um número é sempre fornecido.

Solução Ex. 2

Maior valor.jpg

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”.

Solução Ex. 3

Aula03 ExercicioFluxogramaContagemDe0A100.jpg

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 - Exercício 01

Aula03 Exercicio01.jpg

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

Aula03 Exercicio02 (1).jpg

Solução - Exercício 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 - Exercício 03

Aula03 Exercicio03.jpg

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.

EXERCÍCIO 5: Implementar uma função (subprograma), usando fluxograma, para computar o valor da PG, dados como parâmetros s e q.

Solução - Exercício 04

Aula03 Exercicio04.jpg

=EXERCÍCIO 6:

Implementar um algoritmo na forma de fluxograma que permite implementar uma calculadora especial que tem 3 funções:

  1. Calcular o número de Fibonacci para um número (ver https://en.wikipedia.org/wiki/Fibonacci_number)
  2. Calcular o Fatorial de um número N (ver https://pt.wikipedia.org/wiki/Fatorial)
  3. Calcular a combinação simples de N "elementos organizados 'r' a 'r' (ver https://pt.wikipedia.org/wiki/Combinat%C3%B3ria#Combina%C3%A7%C3%A3o_simples)
  4. Uma opção da sua escolha que envolva repetição, tal como nos problemas acima.

Para cada um destes itens deixar claro o que é entrada e o que é saída de dados.