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 17: Linha 17:
 
====Exemplo de Problema com Repetição====
 
====Exemplo de Problema com Repetição====
  
PROBLEMA: Calcular a somatório de N valores a serem fornecidos pelo teclado.
+
'''PROBLEMA''': Calcular a somatório de N valores a serem fornecidos pelo teclado.
  
 
:<math> S = \sum_{i=0}^{N-1} a_i = a_0 + a_1 + .. + a_{N-1}</math>
 
:<math> S = \sum_{i=0}^{N-1} a_i = a_0 + a_1 + .. + a_{N-1}</math>
  
DADOS DE ENTRADA:  
+
'''DADOS DE ENTRADA''':  
 
* N /* número de valores */,  
 
* N /* número de valores */,  
 
* a_i /* valor de um dos N números a serem inseridos */
 
* a_i /* valor de um dos N números a serem inseridos */
  
DADOS DE SAÌDA = S /* somatório */
+
'''DADOS DE SAÌDA''': = S /* somatório */
  
  

Edição das 07h27min de 8 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 */


FluxogramaSomatoria.jpg

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>


NOTA: 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.

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.

Exemplos Adicionais

Exemplo 1

Elaborar um fluxograma para imprimir os números pares em ordem decrescente (até atingir 0) 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

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

Elaborar um programa para computação do fatorial de um número conforme definição abaixo:

DADOS DE ENTRADA: número N (numero inteiro)

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

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

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.