Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Introdução à Computação: Indicador de Passagem e Sua Aplicação, Notas de estudo de Engenharia Civil

A noção de indicador de passagem em computação, um padrão utilizado para identificar a ocorrência de um evento que ajuda no controle de programas. O indicador de passagem é uma variável que inicia com um determinado valor e, caso o evento que ele marca ocorra, seu valor é alterado e não muda mais. O documento inclui exemplos de aplicação e exercícios resolvidos.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 26/09/2009

rafael-bueno-3
rafael-bueno-3 🇧🇷

4

(5)

66 documentos

Pré-visualização parcial do texto

Baixe Introdução à Computação: Indicador de Passagem e Sua Aplicação e outras Notas de estudo em PDF para Engenharia Civil, somente na Docsity! Notas de Aula - Introdução à Computação Departamento de Ciência da Computação – IME-USP Indicador de Passagem Ronaldo F. Hashimoto e Carlos H. Morimoto Introdução Indicador de Passagem é um padrão bastante utilizado em computação para identificar a ocorrência de um evento que ajuda no controle do seu programa. O indicador de passagem é uma variável que inicia com um determinado valor, e caso o evento que ele marca ocorra, seu valor é alterado e não muda mais. 1 indicador = <valor inicial>; 2 3 4 5 while (<condiç~ao da repetiç~ao >) { 6 7 8 9 10 11 i f (<condiç~ao do indicador >) { 12 13 14 15 indicador = <outro valor>; 16 17 } 18 19 20 21 /∗ gera ou l ê um número da s eq ü ê n c ia ∗/ 22 23 24 25 } 26 27 i f ( indicador == <valor inicial>) { 28 /∗ a <cond do in d i cado r> s e manteve f a l s a ∗/ 29 /∗ durante toda a execu ç ão da r e p e t i ç ã o ∗/ 30 } 31 else { 32 /∗ a <cond do in d i cado r> f i c o u v e rdade i r a ∗/ 33 /∗ em algum momento durante o whi l e ∗/ 34 } (V) (3) (F) (V) (1) (2) (F) Figura 1: Padrão Indicador de Passagem Ao final dessa aula você deverá saber: • Descrever o funcionamento de indi- cadores de passagem. • Identificar situações onde indicado- res de passagem podem ser utiliza- dos. • Utilizar indicadores de passagem em seus programas. Conceito de Indicador de Passagem Considere o padrão de programação dado na Fig. 1. Na linha 5, temos uma repetição que trata de gerar ou ler pelo teclado uma seqüência de números. Observo mais uma vez que os exerćıcios que estamos lidando sem- pre há uma seqüência de números. An- tes da repetição, na linha 1, existe uma inicialização de uma variável indicador com um certo valor inicial. Dentro da repetição, na linha 11, existe um comando de seleção simples (if) que testa uma pro- priedade da seqüência de números (por exemplo, seqüência crescente, seqüência com todos números positivos, seqüência com todos números pares, etc...). Se a condição <condiç~ao do indicador> ficar verdadeira em algum momento durante a execução da repetição, então o valor da variável indicador recebe outro valor diferente do valor inicial. No final da repetição, testa-se o conteúdo da variável indicador. Se conteúdo desta variável é o <valor inicial>, então a condição <condiç~ao do indicador> nunca foi satisfeita durante a execução da repetição. Agora, se o conteúdo é <outro valor>, então, em algum momento, durante a execução da repetição, a condição <condiç~ao do indicador> foi satisfeita. Vamos chamar este padrão de programação de padrão indicador de passagem. 1 Exemplo Considere o seguinte programa que lê uma seqüência de dez números inteiros: 1 # include <stdio . h> 2 3 i n t main () { 4 i n t pos , i , x ; 5 6 pos = 0; 7 i = 0; 8 while (i<10) { 9 printf ("Entre com x: " ) ; 10 scanf ("%d" , &x ) ; 11 i f (x > 0) { 12 pos = 1; 13 } 14 i = i + 1; 15 } 16 i f ( pos == 0) 17 printf ("Todos elems menores ou iguais a zero \n" ) ; 18 else 19 printf ("Pelo menos um elem . maior do que zero \n" ) ; 20 21 return 0; 22 } A variável pos é um indicador de passagem. Na linha 8, temos uma repetição que trata de ler pelo teclado uma seqüência de dez números inteiros. Antes da repetição, na linha 6, existe uma inicialização da variável pos com valor inicial igual a um. Dentro da repetição, na linha 11, existe um comando de seleção simples (if) que testa se o número lido é maior do que zero. Se esta condição ficar verdadeira em algum momento durante a execução da repetição, então o valor da variável pos recebe outro valor diferente do valor inicial, que no caso é o valor um. No final da repetição, testa-se o conteúdo da variável pos. Se conteúdo da variável pos é o zero, então a condição x>0 nunca foi satisfeita durante a execução da repetição, indicando que todos os elementos da seqüência são menores ou iguais a zero. Agora, se o conteúdo é um, então, em algum momento durante a execução da repetição, a condição x>0 foi satisfeita, indicando que pelo menos um elemento da seqüência é maior do que zero. É importante notar que o indicador de passagem tenta capturar uma propriedade da seqüência. No exemplo anterior, o indicador de passagem tenta capturar se a seqüência contém algum número positivo. Além disso, note que a propriedade da seqüência que o indicador de passagem tenta capturar sempre coloca uma questão cuja resposta é “sim” (verdadeira) ou “não” (falsa). No exemplo anterior, o indicador tenta responder a questão: a seqüência tem algum número positivo? Uso de Constantes Na aula “Detalhes da Linguagem C” comentamos que é posśıvel definir constantes. Nesta aula, vamos falar um pouco da sua utilidade. Para responder a questão que o indicador de passagem tenta responder, podeŕıamos definir duas constantes: TRUE e FALSE. O indicador de passagem terminaria com valor TRUE se a reposta da questão for “sim” e com valor FALSE caso contrário. Assim, o programa anterior ficaria: 2 Outro Exemplo Considere o seguinte problema: Dado um inteiro n>0, e uma seqüência de n inteiros, calcular a sua soma e verificar se a seqüência é estritamente crescente. Neste exerćıcio, além de calcular a soma, queremos verificar uma propriedade da seqüência lida: se ela é estritamente crescente ou não. Para verificar esta propriedade, vamos usar um indicador de passagem de nome crescente que começaria com valor TRUE. Se em algum momento a seqüência deixar de ser crescente, então esta variável recebe valor FALSE. Usando o padrão indicador de passagem, então temos o seguinte programa: 1 # include <stdio . h> 2 3 # define TRUE 1 4 # define FALSE 0 5 6 i n t main () { 7 i n t cont ; /∗ con tador dos e l emen to s da s equen c ia ∗/ 8 i n t n ; /∗ numero de e l emen to s da s equen c ia ∗/ 9 i n t soma ; 10 i n t num ; /∗ cada e l emento da s equen c ia ∗/ 11 i n t ant ; /∗ e l emento a n t e r i o r ao num ∗/ 12 i n t crescente ; 13 14 printf ("Entre com n>0: " ) ; 15 scanf ("%d" , &n ) ; 16 17 printf ("Entre com um num. inteiro da seq .: " ) ; 18 scanf ("%d" , &num ) ; 19 20 crescente = TRUE ; 21 soma = num ; 22 23 cont = 2; 24 while ( cont <= n ) { 25 26 ant = num ; 27 28 printf ("Entre com um num. inteiro da seq .: " ) ; 29 scanf ("%d" , &num ) ; 30 31 i f ( ant >= num ) 32 crescente = FALSE ; 33 34 soma = soma + num ; 35 36 cont = cont + 1; 37 } 38 39 printf ("soma = %d\n" , soma ) ; 40 41 i f ( crescente == TRUE ) 42 printf ("Sequencia Estritamente Crescente \n" ) ; 43 else 44 printf ("Sequencia Nao Estritamente Crescente \n" ) ; 45 46 return 0; 47 } 5 Repetição Interrompida Condicionada Existem situações em que precisamos verificar uma propriedade de uma seqüência. Para isto, fazemos uso de um indicador de passagem. 1 indicador = <valor inicial>; 2 3 4 5 while (<condiç~ao da repetiç~ao> && 6 indicador == <valor inicial>) { 7 8 9 10 11 12 i f (<condiç~ao do indicador >) { 13 14 15 16 indicador = <outro valor>; 17 18 } 19 20 21 22 /∗ gera ou l ê um número da s eq ü ê n c ia ∗/ 23 24 25 26 } 27 28 i f ( indicador == <valor inicial>) { 29 /∗ a <cond do in d i cado r> s e manteve f a l s a ∗/ 30 /∗ durante a execu ç ão da r e p e t i ç ã o ∗/ 31 } 32 else { 33 /∗ a <cond do in d i cado r> f i c o u v e rdade i r a ∗/ 34 /∗ em algum momento na r e p e t i ç ã o ∗/ 35 } (V) (3) (F) (V) (1) (2) (F) Figura 2: Padrão Repetição Interrompida Condicionada Agora, pode acontecer que, no mo- mento em que o indicador de pas- sagem recebe outro valor (diferente do valor inicial), não é mais ne- cessário testar os outros números da seqüência. Neste caso, podemos in- terromper a repetição. Por exemplo, considere o problema dos d́ıgitos adjacentes. Considere n=12345678990. Lembre-se que a seqüência gerada é composta pelos d́ıgitos de n de trás para frente. A seqüência ge- rada é então: 0, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1. Quando o programa encontrar os d́ıgitos adjacentes 9 e 9, não é mais necessário verificar o restante da seqüência. Nestes casos, podemos utilizar o se- guinte padrão de programação que usa o operador lógico && e o indica- dor de passagem dentro da condição da repetição A primeira condição <condiç~ao da repetiç~ao> garante a geração e/ou leitura da seqüência. A segunda condição indicador == <valor inicial> garante que quando o indicador de passagem trocar de valor, a repetição é interrompida no momento da verificação da condição <condiç~ao da repetiç~ao> && indicador == <valor inicial>, uma vez que estamos usando o operador lógico && e a condição indicador == <valor inicial> é falsa. Exerćıcios Recomendados 1. Dado um inteiro p>1, verificar se p é primo. Use indicador de passagem e o padrão repetição interrompida condicionada. 6
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved