Lógica de Programação 1 - Estruturas de Repetição

De MediaWiki do Campus São José
Revisão de 17h45min de 12 de agosto de 2019 por 127.0.0.1 (discussão) (→‎Exercício)
Ir para navegação Ir para pesquisar

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


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

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 de N.

solução

Paresomaimpar.jpg

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:

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

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

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


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 uma função (subprograma), usando fluxograma, para computar o valor da PG, dados como parâmetros s e q.