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
 
(50 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 6: Linha 6:
 
<!-- *dividir problemas em subproblemas e utilizar subrotinas para organizar a solução. -->
 
<!-- *dividir problemas em subproblemas e utilizar subrotinas para organizar a solução. -->
  
===Estruturas de repetição===
+
===Estruturas de repetição com decisão no início===
  
 
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.
 
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.
Linha 22: Linha 22:
  
 
'''DADOS DE ENTRADA''':  
 
'''DADOS DE ENTRADA''':  
* N /* número de valores */,  
+
* a ser armazenado em N /* número de valores */,  
* parcela /* valor de um dos N números a serem inseridos - é o termo a_i da fórmula*/
+
* a ser armazenado em 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 54: Linha 54:
  
 
<syntaxhighlight lang="C">
 
<syntaxhighlight lang="C">
ALGORITMO
+
ALGORITMO soma_n_numeros()
 +
VARIAVEIS
 
   N: inteiro
 
   N: inteiro
 
   parcela: inteiro
 
   parcela: inteiro
Linha 65: Linha 66:
 
   ENQUANTO i<N FAÇA
 
   ENQUANTO i<N FAÇA
 
       LER parcela
 
       LER parcela
       S = S + parcela
+
       S <- S + parcela
       i=i+1
+
       i <- i+1
 
   FIM_ENQUANTO
 
   FIM_ENQUANTO
 
   IMPRIMIR "SOMATORIA = ", S
 
   IMPRIMIR "SOMATORIA = ", S
Linha 171: Linha 172:
 
*identifique claramente O QUE será entrada de dados e O QUE será saída
 
*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
 
*antes de começar, "projete" quais variáveis serão necessárias
 +
 +
==Comando DO-ENQUANTO: repetição com decisão no final do loop==
 +
 +
Em várias situações pode ser mais conveniente construir um "loop" com teste no final. Por exemplo, uma possível validação de dados de entrada:
 +
 +
<span style="font-size:70%">
 +
{| class="wikitable"
 +
! comando DO-ENQUANTO!! comando ENQUANTO
 +
|-
 +
|<syntaxhighlight lang="C">
 +
ALGORITMO  rejeita_entrada()
 +
VARIAVEIS
 +
  X: inteiro;
 +
INICIO
 +
  mostrar "Entre com o valor de X. Deve ser maior que zero!"
 +
  FAÇA
 +
    mostrar "Entre com o valor de X. Deve ser maior que zero!"
 +
    LER X
 +
  ENQUANTO x <= 0;
 +
  mostrar X;
 +
FIM </syntaxhighlight> || <syntaxhighlight lang="C">
 +
ALGORITMO  rejeita_entrada()
 +
VARIAVEIS
 +
  X: inteiro;
 +
INICIO
 +
  mostrar "Entre com o valor de X. Deve ser maior que zero!"
 +
  LER X;
 +
  ENQUANTO X <= 0 FAÇA
 +
    mostrar "Entre com o valor de X. Deve ser maior que zero!"
 +
    LER X
 +
  FIM_ENQUANTO;
 +
  mostrar X;
 +
FIM </syntaxhighlight>
 +
|-
 +
|[[imagem:FluxogramaComandoDo-Para.png|border|250px]] ||
 +
|-
 +
|}
 +
 +
</span>
 +
 +
==Comando PARA: organizando a repetição de forma estruturada==
 +
 +
Uma forma de organizar a execução de um "loop" de maneira clara é usando um comando
 +
que mostra claramente as condições iniciais de execução do loop, a condição de execução (ou parada) e a expressão de modificação  da condição de parada. Trata-se do comando PARA-FIM_PARA. Este comando permite colocar claramente a situação de repetição. Vamos ver como ficaria o algoritmo de soma acumulada com este comando:
 +
 +
{| class="wikitable"
 +
! Pseudocódigo com comando PARA!! Pseudocódigo com ENQUANTO
 +
|-
 +
|<syntaxhighlight lang="C">
 +
ALGORITMO  soma_n_numeros()
 +
VARIAVEIS
 +
  N: inteiro;
 +
  parcela: inteiro;
 +
  i: inteiro;
 +
  S: inteiro;
 +
INICIO
 +
  LER N;
 +
  S ← 0;
 +
  PARA i DE 0 ATÉ N-1 PASSO 1 FAÇA
 +
      LER parcela;
 +
      S ← S + parcela;
 +
  FIM_PARA
 +
  IMPRIMIR "SOMATORIA = ", S;
 +
FIM
 +
</syntaxhighlight> || <syntaxhighlight lang="C">
 +
ALGORITMO  soma_n_numeros()
 +
VARIAVEIS
 +
  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 </syntaxhighlight>
 +
|-
 +
|}
 +
 +
Observe que na versão do comando PARA, a variável i assume valores de 0 a N-1, sendo a cada laço incrementada conforme o PASSO, neste caso 1. È desnecessário inicializar o i antes do comando (ver a versão com o comando ENQUANTO).
 +
 +
Um fluxograma para a versão com comando PARA seria:
 +
 +
[[imagem:FluxogramaComandoPara.png|border|250px]]
 +
 +
Observe a caixa utilizada para a repetição estruturada. Não existe rótulos de verdadeiro ou falso pois o número de repetições já está explicitado.
  
 
==Exemplos Adicionais==
 
==Exemplos Adicionais==
Linha 178: Linha 271:
 
'''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.
 
'''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 ENTRADA''': N (a ser colocado em uma variável inteira)
  
'''DADOS DE SAÌDA''': números pares impressos
+
'''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...
 
OBS: Existe uma solução mais eficiente que a mostrada abaixo. Testar se é par ou ímpar antes do loop...
Linha 193: Linha 286:
  
 
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.
 
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.
 +
Faça na forma de FLUXOGRAMA e em PSEUDOCÓDIGO.
  
 
{{collapse top | solução}}
 
{{collapse top | solução}}
Linha 202: Linha 296:
 
'''PROBLEMA''': Elaborar um fluxograma para computação do fatorial de um número conforme definição abaixo:
 
'''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 ENTRADA''':número cujo fatorial deve ser computado, a ser armazenado em N (numero inteiro)
  
 
'''DADOS DE SAÌDA''': FATORIAL computado
 
'''DADOS DE SAÌDA''': FATORIAL computado
Linha 215: Linha 309:
  
 
====Exercício 1====
 
====Exercício 1====
 +
 +
Faça uma versão do algoritmo acima na forma de pseudocódigo.
 +
 +
====Exercício 2====
  
 
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.
 
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.
Linha 238: Linha 336:
 
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.
 
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 ENTRADA''': senha inserida pelo usuário na variável 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*/
 
*'''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 */  
 
*'''VARIÁVEIS INTERMEDIÁRIAS''': CONT_ACESSO /* valor inicial zero - incrementada a cada senha inválida */  
Linha 255: Linha 353:
 
</blockquote>
 
</blockquote>
  
 
<!--
 
===Quebrando um problema em subproblemas: SUBPROGRAMAS===
 
 
Neste procedimento pode ser observado que:
 
*começa a aparecer uma certa complexidade no fluxograma;
 
*Além disto, não ficou uma abordagem muito interessante, pois se for o administrador que erra a senha, ele pode bloquear o usuário. Mudando a ordem de teste pode-se  contornar este problema.
 
*não existe forma de desbloquear a senha (zerar o contador), a não ser mudando a senha.
 
 
Em síntese, existem subproblemas adicionais a serem resolvidos que adicionam complexidade ao sistema. Como podemos resolvê-los sem deixar um fluxograma complexo?
 
 
Usaremos a caixa de processos pré-definidos que usaremos para invocar funções que resolvem determinado subproblema.
 
 
Inicialmente, vamos construir três subprogramas:
 
* Iniciar_Sistema(): inicia variáveis do sistema, colocando o sistema em um estado inicial conhecido;
 
* Tratar_Admin(): é o código que trata a funcionalidade associada ao administrador;
 
* Tratar_User(): é a funcionalidade que trata o usuário (procedimento de abrir porta, bloquear etc).
 
 
[[imagem:FluxogramaControleAcessoComSubprograma.jpg|850px]]
 
 
OBS: Note que foi usada uma variável auxiliar AUX que permite ajustar o valor
 
de número de acessos a ser mostrado no display. Note também que na caixa DISPLAY foi usado
 
uma string a ser impressa e a variável AUX cujo conteúdo deve ser impresso. Ambos separados
 
por vírgula.
 
 
* ANINHAMENTO DE DECISÔES
 
 
A função Tratar_User() se utiliza de aninhamento de decisões. Em um primeiro momento é testado se a senha confere com a senha do usuário. SE ela conferir ENTÂO é testado se o contador de bloqueios está dentro do aceitável.
 
 
-->
 
 
<!--
 
 
===PARÂMETROS E RETORNO DE VALORES EM SUBPROGRAMAS===
 
 
Para tornar ainda mais interessante o uso de subprogramas, vamos ver o conceito de passagem de parâmetros e retorno de valores.
 
 
Quando chamamos (invocamos) um subprograma podemos passar valores (dados de entrada) para este subprograma.
 
Estes valores são passados através de variáveis especiais que chamamos de parâmetros.
 
 
Parâmetros podem ser passados por valor e por referência. Por valor é quando os dados a serem passados na invocação
 
do subprograma são copiados para uma variável do subprograma.
 
 
Os parâmetros são passados por referência quando o que é passado para o subprograma é simplesmente o endereço da variável
 
repassada na invocação do subprograma.
 
 
Não existe uma forma explícita de definir os parâmetros em um fluxograma. Deve-se realizar um comentário antes ou ao lado do mesmo especificando o tipo e como será tratado o parâmetro.
 
 
EXEMPLO: Seja elaborar um fluxograma correspondente a uma subprograma que deve calcular o fatorial de um número inteiro passado como parâmetro. O subprograma deve retornar o valor calculado.
 
 
A função fatorial é definida por:
 
 
:<math>n!=\prod_{k=1}^n k\qquad\forall n\in\mathbb{N}</math>
 
 
[[imagem:FluxogramaFatorial.jpg|border|650px]]
 
 
Neste fluxograma, o subprograma denominado ''CalcFatorial'' recebe um valor no parâmetro N (implicitamente inteiro) e retorna o valor calculado do fatorial.
 
 
O fluxograma principal invoca duas vezes o subrograma. O retorno é armazenado nas variáveis NUM1 e NUm3.
 
 
Quando um subprograma retorna um valor, ele é chamado de função. Para manter coerência com o C chamaremos
 
qualquer subrprograma de função (independente de retornar valor).
 
 
EXERCÍCIO: Implementar a solução acima usando pseudocódigo.
 
 
EXERCÍCIO: Implementar uma função (subpŕograma), usando fluxograma, que recebe dois números inteiros como parâmetro. A função retorna 1 se os números forem iguais, 0 se o primeiro número maior que o segundo e -1 se o segundo for maior que o primeiro.
 
 
-->
 
  
 
===EXERCÍCIOS===
 
===EXERCÍCIOS===
  
 
==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 333: Linha 363:
 
{{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 396: Linha 426:
  
 
{{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}}
  

Edição atual tal como às 09h13min de 17 de agosto de 2023

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 com decisão no início

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:

  • a ser armazenado em N /* número de valores */,
  • a ser armazenado em 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  soma_n_numeros()
VARIAVEIS
  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

Comando DO-ENQUANTO: repetição com decisão no final do loop

Em várias situações pode ser mais conveniente construir um "loop" com teste no final. Por exemplo, uma possível validação de dados de entrada:

comando DO-ENQUANTO comando ENQUANTO
ALGORITMO  rejeita_entrada()
VARIAVEIS
  X: inteiro;
INICIO
  mostrar "Entre com o valor de X. Deve ser maior que zero!"
  FAÇA
     mostrar "Entre com o valor de X. Deve ser maior que zero!"
     LER X
  ENQUANTO x <= 0;
  mostrar X;
FIM
ALGORITMO  rejeita_entrada()
VARIAVEIS
  X: inteiro;
INICIO
  mostrar "Entre com o valor de X. Deve ser maior que zero!"
  LER X;
  ENQUANTO X <= 0 FAÇA
     mostrar "Entre com o valor de X. Deve ser maior que zero!"
     LER X
  FIM_ENQUANTO;
  mostrar X;
FIM
FluxogramaComandoDo-Para.png

Comando PARA: organizando a repetição de forma estruturada

Uma forma de organizar a execução de um "loop" de maneira clara é usando um comando que mostra claramente as condições iniciais de execução do loop, a condição de execução (ou parada) e a expressão de modificação da condição de parada. Trata-se do comando PARA-FIM_PARA. Este comando permite colocar claramente a situação de repetição. Vamos ver como ficaria o algoritmo de soma acumulada com este comando:

Pseudocódigo com comando PARA Pseudocódigo com ENQUANTO
ALGORITMO  soma_n_numeros()
VARIAVEIS
  N: inteiro;
  parcela: inteiro;
  i: inteiro;
  S: inteiro;
INICIO
  LER N;
  S  0;
  PARA i DE 0 ATÉ N-1 PASSO 1 FAÇA
      LER parcela;
      S  S + parcela;
  FIM_PARA
  IMPRIMIR "SOMATORIA = ", S;
FIM
ALGORITMO  soma_n_numeros()
VARIAVEIS
  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

Observe que na versão do comando PARA, a variável i assume valores de 0 a N-1, sendo a cada laço incrementada conforme o PASSO, neste caso 1. È desnecessário inicializar o i antes do comando (ver a versão com o comando ENQUANTO).

Um fluxograma para a versão com comando PARA seria:

FluxogramaComandoPara.png

Observe a caixa utilizada para a repetição estruturada. Não existe rótulos de verdadeiro ou falso pois o número de repetições já está explicitado.

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 (a ser colocado em uma 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. Faça na forma de FLUXOGRAMA e em PSEUDOCÓDIGO.

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 cujo fatorial deve ser computado, a ser armazenado em 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 algoritmo acima na forma de pseudocódigo.

Exercício 2

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 inserida pelo usuário na variável 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.