Programação de Computadores - ic.uff.brotton/graduacao/programacao/3_Fluxograma_pseudo... ·...

Preview:

Citation preview

Programação de Computadores

Instituto de Computação UFFDepartamento de Ciência da Computação

Otton Teixeira da Silveira Filho

Conteúdo

● Alguns Conceitos sobre Linguagens

● Conceito de Algoritmo

● Pseudocódigo

● Tipos de Variáveis

● Operadores

● Estruturas de Controle

● Estruturas de Dados

● Subprogramação

Conteúdo

● Fluxograma e pseudocódigo

Elementos de um fluxograma

Pseudocódigo

“O Chinês“

Um exemplo: implementar a Fórmula de Baskara

Estruturas de repetição e exemplos simples

Fluxograma

É uma descrição esquemática de um processo que usa figuras geométricas padronizadas que representam elementos da computação necessária ao processo.

Abaixo temos alguns

Início

Fim

Dados Decisão

ProcessoConector fora

da página

Conector

Pseudocódigo

É a representação em linguagem natural de comandos computacionais

No nosso caso escreveremos o pseudocódigo com palavras em português

Pseudocódigo

É a representação em linguagem natural de comandos computacionais

No nosso caso escreveremos o pseudocódigo com palavras em português

● Os comandos do pseudocódigo serão introduzidos a medida quer forem necessários

Fazendo o “Chinês“

Fazer o Chinês é escrever os resultados de todos os passos de um determinado procedimento

-É uma forma tradicional de detectar erros de lógica de um programa

Fazendo o “Chinês“

Fazer o Chinês é escrever os resultados de todos os passos de um determinado procedimento

-É uma forma tradicional de detectar erros de lógica de um programa

● Obs: Existem ferramentas sofisticadas de depuração de códigos usadas em trabalhos mais complexos

Um exemplo: Baskara

Seja o polinômio , onde . Determine as raízes reais deste polinômio usando a fórmula de Baskara:

● Começaremos a descrição do algoritmo de forma ingênua

a x2+b x+c a ,b , c∈ℜ

x=−b±√b2

−4 ac2a

Baskara

Fluxograma 1 de Baskara

Início

Fim

a ,b , c

x 1, x 2

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

Baskara

OBS!

● Os valores x1, x2, a, b, c são ditas variáveis as quais são atribuídos valores

Baskara

OBS!

● Os valores x1, x2, a, b, c são ditas variáveis as quais são atribuídos valores

● A seta que aparece na expressão

é chamado de operador de atribuição, ou seja, o valor calculado na direita da expressão é atribuído à variável x1.

Temos ainda outros operadores como +, -, *, /, √ e potenciação

x1← (−b+√b2−4∗a∗c ) /2∗a

Baskara

● + operador de soma

● - operador de subtração

● * operador de multiplicação

● / operador de divisão

● √ operador raiz quadrada

Há uma identificação com símbolos que usamos correntemente

Veremos mais operadores

Baskara

Porque este fluxograma está errado?

Há vários erros mas começaremos por dois:

1 – Caso seja zero teremos uma indeterminação

2 – Caso for negativo não teremos resposta compatível com o especificado pelo problema

a

√b2−4 a c

Baskara

Porque este fluxograma está errado?

Há vários erros mas começaremos por dois:

1 – Caso seja zero teremos uma indeterminação

2 – Caso for negativo não teremos resposta compatível com o especificado pelo problema

● Resolveremos um problema por vez

a

√b2−4 a c

Baskara

Antes apresentemos a estrutura de decisão

Baskara

Decisão

s n

● A decisão é avaliada se verdadeira

Caso for verdadeira (S) o processo1 é executado

Caso não for verdadeira (N) o processo2 é executado

Processo2decisãoProcesso1

Baskara

Com esta apresentação poderemos dar continuidade à criação do fluxograma para a fórmula de Baskara

Baskara

Fluxograma 2 de Baskara

n

s

Início

Fim

a ,b , c

duas raizes : x 1, x 2

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

1

1

Se a ≠ 0x←−c /b

a=0.Umaraiz : x

2

2

Baskara

Repare que apresentamos outro tipo de operador: um operador condicional

≠ Operador diferente de

Podemos ter o análogo

= Operador igual a

Baskara

Porque este fluxograma ainda está errado ao resolver o problema de número 1?

Baskara

Porque este fluxograma ainda está errado ao resolver o problema de número 1?

– Caso seja zero teremos uma indeterminaçãob

Baskara

Fluxograma 3 de Baskara

n

s n

s

Início

Fim

a ,b , c

duas raizes : x 1, x 2

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

1

1

Se a ≠ 0x←−c /b

a=0.Umaraiz : x

2

2

Se b ≠ 0

a=0, b=0. Não há raizes

Baskara

Mas ainda há uma incorreção

– Caso a for nulo, como também b, então se c for nulo teremos uma identidade e temos que prever esta possibilidade

Vamos corrigir...

Baskara

Fluxograma 3b de Baskara

n

s n n

s

s

Início

Fim

a ,b , c

duas raizes : x 1, x 2

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

1

1

Se a ≠ 0x←−c /b

a=0.Umaraiz : x

2

2

Se b ≠ 0

a=0, b=0. Não há raizes

Se c = 0

a, b, c nulos3

3

Baskara

Vamos incluir a análise de

√b2−4 a c

Baskara

Vamos incluir a análise de

Mas primeiro escrevamos um fragmento do fluxograma relativo a esta análise

√b2−4 a c

Baskara

Fragmento do fluxograma 4 de Baskara

n n

sFim

duas raizes : x 1, x 2

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

1

1

Se b2-4*a*c>=0

Não há raizesreais

Baskara

Fluxograma 4 de Baskara

n n

s n

s

s

n n

s

Início

Fim

a ,b , c

duas raizes : x 1, x 2

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

1

1

Se a ≠ 0x←−c /b

a=0.Umaraiz : x

2 2

Se b ≠ 0

a=0, b=0. Não há raizes

Se b2-4*a*c>=0

Não há raizesreais

Se c = 0

a, b, c nulos

Baskara

Repare que temos mais um operador condicional

● >= Operador maior ou igual que

Temos outros análogos a este

● > Operador maior que

● < Operador menor que

● <= Operador menor ou igual que

Baskara

Vamos apresentar os pseudocódigos equivalentes a alguns estes fluxogramas

Baskara

Programa Baskara1

Reais a, b, c, x1, x2

Leia a, b, c

Imprima x1, x2

Fim

Início

Fim

a ,b , c

x 1, x 2

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

Baskara

Repare que fizemos algo de diferente no pseudocódigo

Definimos que as variáveis usadas são de um tipo especial:

Real

Cada linguagem de programação tem seus tipos de variáveis e um tipo comum de se encontrar é um tipo que é uma forma limitada de representar os números reais no computador

Baskara

Programa Baskara1 Início do programa

Reais a, b, c, x1, x2 Declaração de variáveis

Leia a, b, c Leitura de dados

Cálculo e atribuição de valor

Cálculo e atribuição de valor

Imprima x1, x2 Impressão dos resultados

Fim Fim do programa

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

Baskara

Programa Baskara1b Início do programa

Reais a, b, c, x1, x2 Declaração de variáveis

a←3 Atribuição de valores

b←2

c←2

Cálculo e atribuição de valor

Cálculo e atribuição de valor

Imprima x1, x2 Impressão dos resultados

Fim Fim do programa

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

Baskara

Fluxograma 3b de Baskara

n

s n n

s

s

Início

Fim

a ,b , c

duas raizes : x 1, x 2

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

1

1

Se a ≠ 0x←−c /b

a=0.Umaraiz : x

2

2

Se b ≠ 0

a=0, b=0. Não há raizes

Se c = 0

a, b, c nulos3

3

Baskara

Programa Baskara3b

Reais a, b, c, x1, x2

Leia a, b, c

se a ≠ 0

Imprima x1, x2

senão

se b ≠ 0

senão

se c = 0

Imprima “a,b,c nulos”

senão

imprima “a,b nulos. Não há raizes”

fim se

fim se

fim se

Fim Baskara3b

x 1← (−b+√b2−4∗a∗c ) /2∗a

x 2← (−b−√b2−4∗a∗c ) /2∗a

x←−c /b

Baskara

Observe o recurso gráfico que usamos para deixar claro o limite de ação de cada decisão.

. . .

se a ≠ 0

Imprima x1, x2

senão . . .

Chamamos este recurso de indentação.

x 2← (−b−√b2−4∗a∗c ) /2∗a

x 1← (−b+√b2−4∗a∗c ) /2∗a

Baskara

Fluxograma 4 de Baskara

n n

s n

s

s

n n

s

Início

Fim

a ,b , c

duas raizes : x 1, x 2

x 1←(−b+√b2−4∗a∗c )/2∗a

x 2← (−b−√b2−4∗a∗c )/2∗a

1

1

Se a ≠ 0x←−c /b

a=0.Umaraiz : x

2 2

Se b ≠ 0

a=0, b=0. Não há raizes

Se b2-4*a*c>=0

Não há raizesreais

Se c = 0

a, b, c nulos

BaskaraPrograma Baskara4

Reais a, b, c, x1, x2

Leia a, b, c

se a ≠ 0

se

Imprima x1, x2

senão

imprima ”não há raízes reais“

fim se

senão

se b ≠ 0

senão

se c = 0

imprima “a,b,c nulos”

senão

imprima “a,b nulos. Não há raizes”

fim se

fim se

fim se

Fim Baskara4

x1← (−b+√b2−4∗a∗c )/2∗a

x2← (−b−√b2−4∗a∗c )/2∗a

x←−c /b

√b2−4∗a∗c≥0

Baskara

A indetentação facilita o entendimento do pseudocódigo pois sem ela teríamos menor legibilidade

BaskaraPrograma Baskara4 sem identação

Reais a, b, c, x1, x2

Leia a, b, c

se a ≠ 0

se

Imprima x1, x2

senão

imprima ”não há raízes reais“

fim se

senão

se b ≠ 0

senão

se c = 0

imprima “a,b,c nulos”

senão

imprima “a,b nulos. Não há raizes”

fim se

fim se

fim se

Fim Baskara4

x 1← (−b+√b2−4∗a∗c )/2∗a

x2← (−b−√b2−4∗a∗c )/2∗a

x←−c /b

√b2−4∗a∗c≥0

Baskara

Observe que aqui pegamos como exemplo um problema que você provavelmente acha muito fácil

Baskara

Observe que aqui pegamos como exemplo um problema que você provavelmente acha muito fácil

Mas observe o número de decisões e alternativas que você tem no processo de usar a fórmula de Baskara

Baskara

Observe que aqui pegamos como exemplo um problema que você provavelmente acha muito fácil

Mas observe o número de decisões e alternativas que você tem no processo de usar a fórmula de Baskara

Programar nos exige ficar conscientes de cada passo do algoritmo.

Observação

Usaremos de agora em diante algoritmos mais simples para compreendermos o funcionamento de cada funcionalidade que temos no fluxograma e em pseudocódigo

Fluxograma

Mas antes acrescentemos mais uma estrutura importante

Repetições

Repetição condicionalRepetição condicional RRepetição contável

Valor inicialValor final

Incremento

Processo

Processo

Decisão

Processo

ProcessoProcesso

Um exemplo com repetição

Obtenha a soma dos números inteiros de 1 a 10. Imprima o resultado.

Um exemplo com repetição

i ← 1até 10

s ← s + i

início

s←0

s

fim

Um exemplo com repetição

A variável s é convencionalmente chamada de acumulador enquanto a variável i é chamada de contador.

Um exemplo com repetição

Programa soma

Inteiro s, i

s ←0

para i ← 1 até 10 passo 1

s ←s + i

fim parafim para

imprima simprima s

fimfim

i← 1até 10

s ← s + i

início

s←0

s

fim

Um outro exemplo com repetição

É comum em muitas linguagens uma versão simplificada da estrutura de repetição apresentada

Um exemplo com repetição

Programa soma

Inteiro s, i

s ←0

para i ← 1 até 10

s ←s + i

fim parafim para

imprima simprima s

fimfim

i ← 1até 10

s ← s + i

início

s←0

s

fim

Um outro exemplo com repetição

Aqui apresentamos mais um tipo de variável comum de se encontrar em linguagens de computação:

Inteiro

Assim como Real apresentado antes é uma representação limitada dos números reais, Inteiro é uma representação limitada dos números inteiros

Um outro exemplo com repetição

Obtenha o fatorial de um número inteiro não negativo n. Leia n e imprima o fatorial.

Um outro exemplo com repetição

programa fatorial

inteiro fat, i, n

leia n

fat ←1

para i ← 1 até n

fat ←fat * i

fim parafim para

imprima fatimprima fat

fimfim

i ← 1até n

fat ← fat * i

início

fat←1

fat

fim

n

Um outro exemplo com repetição

Observe que este exemplo tem um erro claro. O usuário pode entrar com um número negativo ou nulo.

É necessária uma crítica dos dados de entrada, como fizemos com o algoritmo de Baskara, para que não haja inconsistências no que é gerado.

E mais outro exemplo com repetição

Calcule o valor da função exponencial no ponto x=1 usando a série de Taylor truncada em n termos que é dada por

Leia n e imprima o resultado.

e x=1+

x1!

+x2

2!+

x3

3 !+⋯+

xn

n!

E mais outro exemplo com repetição

Aproveitaremos o pseudocódigo que fizemos para o fatorial

Um outro exemplo com repetição

Programa exponencial Real exp Inteiro fat, i, j, n

leia n

exp ← 1

para i ← 1 até n fat ←1

para j ← 1 até i fat ←fat * j fim para

exp ← exp + 1/fat fim para

imprima exp

fim

Um outro tipo de repetição

Além da repetição contável encontramos nas linguagens de programação a repetição condicional.

Em pseudocódigo podemos representar esta repetição como

.

.

enquanto <condição> faça . .

fim enquanto . .

Um outro tipo de repetição

O fragmento de pseudocódigo

i ←1

enquanto (i <= n) faça fat ←fat * i i ← i + 1 fim enquanto

é equivalente ao fragmento

para i ←1 até n fat ←fat * i fim para

Um exemplo com repetição condicional

Dados dos valores a e b inteiros distintos, sendo que a < b. Faça o somatório dos valores compreendidos entre a e b inclusive. Imprima o resultado.

Um exemplo com repetição condicional

Programa soma

inteiros a, b, s, i

leia a, b

s ←a

i ←a

enquanto (i < b) faça

i ←i + 1

s ←s + i

fim enquanto

imprima “A soma de“, a, “ate “, b, “=“, s

fim

Um exemplo com repetição condicional

Dados dos valores a e b inteiros distintos, sendo que a < b. Faça o somatório dos valores compreendidos entre a e b inclusive até que a soma seja maior que 30. Imprima o resultado.

Um exemplo com repetição condicional

Programa soma

inteiros a, b, s, i

leia a, b

s ←a

i ←a

enquanto ((i < b) E (s < 30)) faça

i ←i + 1

s ←s + i

fim enquanto

imprima “A soma de“, a, “ate “, b, “=“, s

fim

Um exemplo com repetição condicional

Observe que novamente seria necessária uma crítica dos valores de entrada para não gerarmos inconsistências.

Um exemplo com repetição condicional

Mais um operador de tipo especial: Um operador lógico

● E E lógico

Operador lógico

Mais um operador de tipo especial: Um operador lógico

● E E lógico

que tem o seguinte comportamento dado dois operandos:

Verdadeiro E Verdadeiro resulta em Verdadeiro

Verdadeiro E Falso resulta em Falso

Falso E Verdadeiro resulta em Falso

Falso E Falso resulta em Falso

Operador lógico

Um operador análogo é o OU lógico

● OU Ou lógico

que tem o seguinte comportamento dado dois operandos:

Verdadeiro OU Verdadeiro resulta em Verdadeiro

Verdadeiro OU Falso resulta em Verdadeiro

Falso OU Verdadeiro resulta em Verdadeiro

Falso OU Falso resulta em Falso

Pseudocódigo

Há outros operadores, sejam eles aritméticos, relacionais ou lógicos

Pseudocódigo

Foram apresentados informalmente uma série de tipos de variáveis e operadores.

Agora partiremos para uma apresentação mais rigorosa destes dois elementos.