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
(22 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 23: Linha 23:
 
'''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 */
+
* parcela /* valor de um dos N números a serem inseridos - é o termo a_i da fórmula*/
  
 
'''DADOS DE SAÌDA''':  
 
'''DADOS DE SAÌDA''':  
Linha 29: Linha 29:
  
 
<blockquote style="background: pink; border: 1px solid black; padding: 1em;">
 
<blockquote style="background: pink; border: 1px solid black; padding: 1em;">
ATENÇÂO: a_i é o nome de uma variável. O caracter 'i' faz parte do nome e NÃO é um índice que poderá
+
ATENÇÃO 1: parcela é o nome de uma variável.
variar ao longo do programa. FUTURAMENTE vamos ver como construir arranjos que poderão ser indexados.
+
 
Enquanto não temos estes ARRANJOS  não teremos como armazenar os N números, mas somente a soma deles a medida que forem lidos.
+
ATENÇÃO 2: em alguns momentos são OMITIDAS as mensagens para AJUDAR a pessoa (ou sistema) que está entrando com dados.
 
</blockquote>
 
</blockquote>
  
  
[[imagem:FluxogramaSomatoria.jpg|border|450px]]
+
[[imagem:FluxogramaSomatoriaV1.jpg|border|450px]]
  
 
<blockquote style="background: pink; border: 1px solid black; padding: 1em;">
 
<blockquote style="background: pink; border: 1px solid black; padding: 1em;">
Linha 42: Linha 42:
  
 
<blockquote style="background: pink; border: 1px solid black; padding: 1em;">
 
<blockquote style="background: pink; border: 1px solid black; padding: 1em;">
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'''.
+
NOTAR que usamos a variável '''parcela''' 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
 
Desta forma podemos REAPROVEITAR a mesma
 
variável para cada elemento lido.
 
variável para cada elemento lido.
Linha 56: Linha 56:
 
ALGORITMO
 
ALGORITMO
 
   N: inteiro
 
   N: inteiro
   a_i: inteiro
+
   parcela: inteiro
 
   i: inteiro
 
   i: inteiro
 
   S: inteiro
 
   S: inteiro
Linha 63: Linha 63:
 
   i = 0
 
   i = 0
 
   S = 0
 
   S = 0
   ENQUANTO I<N FAÇA
+
   ENQUANTO i<N FAÇA
       LER a_i
+
       LER parcela
       S = S + a_i
+
       S = S + parcela
 
       i=i+1
 
       i=i+1
 
   FIM_ENQUANTO
 
   FIM_ENQUANTO
Linha 82: Linha 82:
 
! style="text-align: center; background-color:#ffffc7; color:#333333;" | i
 
! style="text-align: center; background-color:#ffffc7; color:#333333;" | i
 
! style="text-align: center; background-color:#ffffc7; color:#333333;" | S
 
! style="text-align: center; background-color:#ffffc7; color:#333333;" | S
! style="text-align: center; background-color:#ffffc7;" | a_i
+
! style="text-align: center; background-color:#ffffc7;" | parcela
 
! style="text-align: center; background-color:#ffffc7;" | i<N
 
! style="text-align: center; background-color:#ffffc7;" | i<N
 
|-
 
|-
Linha 184: Linha 184:
 
OBS: Existe uma solução mais eficiente que a mostrada abaixo. Testar se é par ou ímpar antes do loop...
 
OBS: Existe uma solução mais eficiente que a mostrada abaixo. Testar se é par ou ímpar antes do loop...
  
[[imagem:FluxogramaRepeticaoImprimePar.jpg|border|450px]]
+
[[imagem:FluxogramaRepeticaoImprimeParV2.jpg|border|450px]]
  
 
====Exercício====
 
====Exercício====
Linha 209: Linha 209:
  
 
:<math>n!=\prod_{i=1}^n i\qquad\forall n\in\mathbb{N}</math>
 
:<math>n!=\prod_{i=1}^n i\qquad\forall n\in\mathbb{N}</math>
 +
 +
OBS: Existem OUTRAS soluções possíveis!!!
  
 
[[imagem:FluxogramaFatorialNum.jpg|border|390px]]
 
[[imagem:FluxogramaFatorialNum.jpg|border|390px]]
Linha 217: Linha 219:
  
 
{{collapse top | Solução Exercício 1}}
 
{{collapse top | Solução Exercício 1}}
[[imagem:FatN1.jpg|border|400px]]
+
[[imagem:FatN1v2.jpg|border|400px]]
 
{{collapse bottom}}
 
{{collapse bottom}}
  
Linha 325: Linha 327:
  
 
==Para Praticar==
 
==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 1:''' Fazer um algoritmo (em fluxograma) que receba a nota de 4 avaliações (usar uma única variável) e calcule a média. Usar um '''loop''' controlado pela quantidade 4 (de avaliações). Imprimir aprovado, caso a média seja superior ou igual a 6.0, reprovado caso contrário.
  
 
{{collapse top | Solução Ex. 1}}
 
{{collapse top | Solução Ex. 1}}
Linha 331: Linha 333:
 
{{collapse bottom}}
 
{{collapse bottom}}
  
'''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.
+
'''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. Supor que NUNCA será fornecido número negativo.
  
 
{{collapse top | Solução Ex. 2}}
 
{{collapse top | Solução Ex. 2}}
Linha 349: Linha 351:
  
 
{{collapse top|Solução - Exercício 01}}
 
{{collapse top|Solução - Exercício 01}}
[[imagem:Aula03_Exercicio01.jpg|2500px]]
+
[[imagem:Aula03_Exercicio01-BAK.jpg|2500px]]
 
{{collapse bottom}}
 
{{collapse bottom}}
  
Linha 361: Linha 363:
 
:<math>a_n=a_1.q^{n-1}\,\!</math>
 
:<math>a_n=a_1.q^{n-1}\,\!</math>
  
{{collapse top|Solução - Exercicio 02}}
+
 
[[imagem:Aula03_Exercicio02_(1).jpg|800px]]
 
{{collapse bottom}}
 
 
{{collapse top|Solução - Exercício 02}}
 
{{collapse top|Solução - Exercício 02}}
<code>
+
<syntaxhighlight>
 
ALGORITMO
 
ALGORITMO
 
   S: real;
 
   S: real;
Linha 387: Linha 387:
 
'''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.
 
'''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.
 
{{collapse top|Solução - Exercício 03}}
 
{{collapse top|Solução - Exercício 03}}
[[imagem:Aula03_Exercicio03.jpg|800px]]
+
[[imagem:Aula03_Exercicio03-BAK.jpg|800px]]
 
{{collapse bottom}}
 
{{collapse bottom}}
  
Linha 396: Linha 396:
  
 
{{collapse top|Solução - Exercício 04}}
 
{{collapse top|Solução - Exercício 04}}
[[imagem:Aula03_Exercicio04.jpg|1200px]]
+
[[imagem:Aula03_Exercicio04-BAK.jpg|1200px]]
 
{{collapse bottom}}
 
{{collapse bottom}}
  
='''EXERCÍCIO 6:'''=
+
'''EXERCÍCIO 6:''': Implementar um algoritmo na forma de fluxograma que permite implementar uma calculadora especial que tem 3 funções:
 
+
#Calcular o número de Fibonacci ''Fₙ'' para um número ''n'' ≥ 0 (ver https://en.wikipedia.org/wiki/Fibonacci_number)
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 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'  (ver 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.
 
#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 10h00min de 6 de novembro de 2021

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 o somatório de N valores a serem fornecidos pelo teclado.

DADOS DE ENTRADA:

  • N /* número de valores */,
  • parcela /* valor de um dos N números a serem inseridos - é o termo a_i da fórmula*/

DADOS DE SAÌDA:

  • S /* somatório */

ATENÇÃO 1: parcela é o nome de uma variável.

ATENÇÃO 2: em alguns momentos são OMITIDAS as mensagens para AJUDAR a pessoa (ou sistema) que está entrando com dados.


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

EXERCÍCIO

Considere o exercício do somatório acima usando FLUXOGRAMA. 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 parcela 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

OBS: Existe uma solução mais eficiente que a mostrada abaixo. Testar se é par ou ímpar antes do loop...

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

OBS: Existem OUTRAS soluções possíveis!!!

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 voltar a perguntar por N. FAÇA um teste de mesa considerando N=4.

Solução Exercício 1

FatN1v2.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. Usar um loop controlado pela quantidade 4 (de avaliações). 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. Supor que NUNCA será fornecido número negativo.

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

2500px

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

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

800px

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

1200px

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 Fₙ para um número n ≥ 0 (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.