CURSO TÉCNICO EM INFORMÁTICA - SUBSEQUENTE – TIS
LINGUAGEM DE PROGRAMAÇÃO
Lógica
CAPÍTULO 1
César Aparecido Alves.
Professor: Gilson Barbosa Pereira
E-Mail : vinigus@[Link]
2
Jaguariaíva - 2010
SUMÁRIO
1. NOÇÕES DE LÓGICA 3
1.1 Conceito de Lógica 3
1.2 Lógica no dia-a-dia 3
1.3 Proposição 3
1.3.1 Declarativa 4
1.3.2 Imperativa 4
1.3.3 Interrogativa 4
1.3.4 Exclamativa 4
1.3.5 Proposições simples ou compostas 4
[Link] Proposição simples 4
[Link] Proposição composta ou fórmula 5
1.4 Conectivos Lógicos 5
1.5 Valor Lógico 5
1.6 Princípios Fundamentais da Lógica 6
1.6.1 Princípio da Não-Contradição 6
1.6.2 Princípio do Terceiro Excluído 6
1.7 Tabela - Verdade 6
1.8 Operações Lógicas sobre Proposições 7
1.8.1 Operação Negação (~) 7
1.8.2 Operação Conjunção () 8
1.8.3 Operação Disjunção (V) 9
1.8.4 Operação Condicional ( ) 10
1.8.5 Operação Bicondicional ( ) 11
1.8.6 Tabela verdade resumo dos conectivos 12
1.9 Prioridade dos conectivos 12
1.10 Tautologia, Contradição e Contingência 13
1.10.1 Tautologia 13
1.10.2 Contradição 13
1.10.3 Contingência 14
1.11 Implicação Lógica ou Conseqüência Lógica ( 14
1.12 Equivalência Lógica ( 15
2. REFERÊNCIAS BIBLIOGRÁFICAS 17
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
3
1. NOÇÕES DE LÓGICA
1.1 Conceito de Lógica
Lógica, na redução da expressão grega, logiké tékhne, significa "arte de
raciocinar", correção do pensamento/ordem do pensamento. Lógica é a arte de
pensar corretamente.
Alguns outros autores definem lógica como sendo a “Ciência das leis
do pensamento”, e neste caso existem divergências com essa definição, pois
o pensamento é matéria estudada na Psicologia, que é uma ciência distinta da
lógica (ciência). Segundo Irving Copi, uma definição mais adequada é: “A
lógica é uma ciência do raciocínio”, pois a sua idéia está ligada ao processo
de raciocínio correto e incorreto que depende da estrutura dos argumentos
envolvidos nele. Assim concluímos que a lógica estuda as formas ou estruturas
do pensamento, isto é, seu propósito é estudar e estabelecer propriedades das
relações formais entre as proposições.
Veremos mais adiante a definição de proposição, bem como o seu
cálculo proposicional antes de chegarmos ao nosso objetivo maior que é
estudar as estruturas dos argumentos, que serão conjuntos de proposições
denominadas premissas ou conclusões.
1.2 Lógica no dia-a-dia
Quando Falamos, estamos pensando. Quando Escrevemos, estamos
pensando. Quando pensamos, a lógica nos acompanha. A lógica é importante
nas nossas vidas, pois quando queremos pensar, falar, escrever corretamente,
precisamos colocar “Ordem no Pensamento”, ou seja, utilizar lógica.
1.3 Proposição
Chamaremos de proposição ou sentença, a todo conjunto de palavras
ou símbolos que exprimem um pensamento de sentido completo. Sendo assim,
vejamos os exemplos:
Exemplo 1: Exemplo 2:
Todo mamífero é animal. Cabrobó é uma cidade do estado de
Todo cavalo é mamífero. Pernambuco.
Portanto, todo cavalo é animal. Francisco Lima nasceu em Cabrobó.
Portanto, Francisco Lima é
Pernambucano.
Exemplo 3: Exemplo 4:
O guarda-roupa está fechado. O professor Francisco Antonio é mais
O terno está dentro do guarda-roupa. velho do que o professor Jorge
Preciso primeiro abrir o guarda-roupa, Henrique.
para depois pegar o terno. O professor Jorge Henrique é mais
velho do que o professor João Paulo.
Portanto, o professor Francisco
Antonio é mais velho do que o
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
4
professor João Paulo.
Exemplo 5: Exemplo 5:
Eu moro com Luísa e Antonio. O curso Pré-Fiscal fica em São Paulo.
Nenhum deles dois quebrou o copo.
Quem quebrou o copo?
Exemplo 7: Exemplo 8:
O Brasil é um País da América do Sul. A Receita Federal pertence ao poder
judiciário.
Evidente que você já percebeu que as proposições podem assumir os
valores falsos ou verdadeiros, pois elas expressam a descrição de uma
realidade, e também observamos que uma proposição representa uma
informação enunciada por uma oração, e, portanto pode ser expressa por
distintas orações, tais como: “Pedro é maior que Carlos”, ou podemos
expressar também por “Carlos é menor que Pedro”.
As orações (sentenças) podem ser de vários tipos:
1.3.1 Declarativa: “O Sol é uma estrela.”
1.3.2 Imperativa: “Não faça isto!”
1.3.3 Interrogativa: “Onde você mora?”
1.3.4 Exclamativa : “Parabéns!”
A linguagem natural nem sempre é clara e precisa, sendo muito comum
a ocorrência de ambigüidades que geram dúvidas sobre o significado do que
se está falando.
Por isso, um dos objetivos da lógica é estabelecer uma linguagem
formal, onde se pode expressar com clareza, precisão e emitir juízo de
verdadeiro ou falso para determinadas frases.
Portanto, proposição é uma frase declarativa (com sujeito e predicado), à qual
pode ser atribuído, sem ambigüidade, um dos valores lógicos: verdadeiro (V) ou falso
(F).
Exemplos:
1) São proposições:
a) O Japão fica na África.
b) O Brasil é banhado pelo Oceano Atlântico.
c) 3 + 4 = 7
d) 5 > 8
2) Não são proposições:
a) 3 + 4 - Não tem predicado
b) Onde você vai? - Sentença interrogativa.
c) Os estudantes jogam vôlei. - O sujeito não está claramente
especificado e a sentença não pode ser classificada em V ou F.
1.3.5 Proposições simples ou compostas
[Link] Proposição simples é única, ou seja, não contem nenhuma
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
5
outra proposição como parte integrante. Indicaremos tais proposições por
letras minúsculas de nosso alfabeto.
Exemplos:
p: O México fica na América do Norte.
Q: O número 16 é quadrado perfeito.
[Link] Proposição composta ou fórmula é formada por duas ou mais
proposições relacionadas pelo conectivos lógicos. Serão indicadas por letras
maiúsculas de nosso alfabeto.
Notação:
P (p,q,r,...) indica que a proposição composta P é formada pelas proposições
simples p, q, r, ...
As proposições que fazem parte de uma proposição composta
podem ser, elas mesmas, proposições compostas.
Exemplos:
P: 1 + 2 = 3 e 2 1
Q: 1 + 2 = 3 ou 2 1
R: Se 1 + 2 = 3, então 2 1
1.4 Conectivos Lógicos
Conectivos lógicos (ou operadores lógicos) são palavras ou expressões
usadas para formar novas proposições a partir de proposições. Os conectivos
lógicos são:
·não
·e
·ou
·se ..., então ...
·... se, e somente se ...
1.5 Valor Lógico
O valor de uma proposição é chamado valor lógico. Os valores lógicos
possíveis são: verdade (V) e falsidade (F).
Notação:
V (p) indica o valor lógico da proposição p. Assim, se a proposição p for
verdadeira, V(p) = V; se a proposição p for falsa, V(p) = F.
O valor lógico de uma proposição composta depende exclusivamente
dos valores lógicos das suas proposições componentes e dos conectivos
lógicos que as ligam.
Exemplos:
a) p: O Sol é verde. V(p) = F
b) q: Um hexágono tem seis lados. V(q) = V
c) r: 2 é raiz da equação x2 + 3x - 4 = 0 V(r) = F
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
6
1.6 Princípios Fundamentais da Lógica
1.6.1 Princípio da Não-Contradição
Uma proposição não pode ser simultaneamente verdadeira e falsa.
1.6.2 Princípio do Terceiro Excluído
Toda proposição ou é só verdadeira ou é só falsa, nunca ocorrendo um
terceiro caso. Logo, toda proposição admite um e um só dos valores V ou F.
1.7 Tabela - Verdade
Tabela-verdade é uma maneira prática de dispor organizadamente os
valores lógicos envolvidos em uma proposição composta. Para a proposição
simples p, temos:
Tabela-Verdade de p
p
V
F
Para proposições compostas, veremos que o número dos componentes
simples determina o número de linhas das tabelas-verdade. A princípio, vamos
construir as tabelas-verdade dispondo, apenas, todas as possibilidades de
valores lógicos das proposições componentes; os possíveis valores lógicos das
proposições compostas estudados mais adiante.
Proposição composta por 2 proposições simples - P(p,q):
Tabela-Verdade
P q
V F
V V
F F
F V
Proposição Composta por 3 Proposições Simples - P(p,q,r):
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
7
Tabela-Verdade
p q r
V V V
V V F
V F V
V F F
F V V
F V F
F F V
F F F
Teorema:
O número de linhas distintas de uma tabela-verdade é dado por 2n,
onde n é número de proposições simples componentes e 2 representa o
número de valores lógicos possíveis (V ou F).
1.8 Operações Lógicas sobre Proposições
1.8.1 Operação Negação (~)
Se p é uma proposição, a negação da proposição p é denotada por ~ p
(lê-se não p).
·Se V(p) = V, então V(~ p) = F
·Se V(p) = F, então V(~ p) = V
Logo, a negação de uma proposição apresenta valor lógico oposto ao
da proposição dada. A tabela-verdade da operação negação é:
P ~p
V F
F V
Exemplos:
1) Dada a proposição:
p: O Sol é um planeta.
A sua negação é:
~ p: O Sol não é um planeta.
2) Dada a proposição:
q: 2 + 3 = 5
a sua negação é:
~ q: 2 + 3 5
3) Dada a proposição:
r: Rio de Janeiro é um país.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
8
A sua negação é:
~ r: Rio de Janeiro não é um país.
A negação pode, ainda, ser expressa de outras maneiras, como: ~ r: Não é
verdade que Rio de Janeiro é um país.
~ r: É falso que Rio de Janeiro é um país.
Negar uma proposição p não é apenas afirmar algo diferente do que
p afirma, ou algo com valor lógico diferente.
Exemplo:
A proposição “O Sol é uma estrela”, que é verdadeira, não é
negação da proposição “O Sol é um planeta”, que é falsa.
1.8.2 Operação Conjunção ()
Duas proposições p e q podem ser combinadas pelo conectivo e para
formar uma proposição composta denominada conjunção das proposições
originais.
Notação: p q (lê-se: p e q)
Exemplos:
1) Dada as proposições:
p: Carlos estuda Matemática.
Q: Carlos joga xadrez.
A conjunção é:
p q: Carlos estuda Matemática e joga xadrez.
2) Dadas as proposições:
p: 2 > 0
q: 2 1
A conjunção é:
p q: 2 > 0 e 2 1
O símbolo pode ser usado, também, para definir a intersecção de dois
conjuntos.
A B = {x / x A x B}
A conjunção de duas proposições (p q) é verdadeira se, e somente
se, cada componente for verdadeiro.
A tabela-verdade da operação conjunção é:
P q pq
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
9
V V V
V F F
F V F
F F F
OU
P ^ q
V V V
V F F
F F F
F F F
1.8.3 Operação Disjunção (V)
Duas proposições p e q podem ser combinadas pelo conectivo ou (com
sentido de e/ou) para formar uma proposição composta denominada disjunção
das proposições originais.
Notação: p q (lê-se: p ou q)
Na linguagem natural, o conectivo ou pode traduzir tanto a idéia de
hipóteses mutuamente exclusivas (ou ocorre isto ou ocorre aquilo)
quanto a de que pelo menos uma das hipóteses ocorre.
Exemplos:
1) A sentença “chove ou faz frio” é verdadeira nos seguintes casos: só chove;
·só faz frio;
·chove e faz frio.
2) O mesmo não acontece com a sentença “Pedro passará nos exames ou
repetirá de ano”, que só é verdadeira nos seguintes casos:
·Pedro passará nos exames;
·Pedro repetirá de ano.
Mas é falsa a hipótese:
·Pedro passará nos exames e repetirá de ano.
No primeiro exemplo, a disjunção é inclusiva e, no segundo, a disjunção
é exclusiva. Em nosso estudo, vamos nos preocupar apenas com a disjunção
inclusiva.
Exemplos:
1) Dadas as proposições:
p: João é estudante.
Q: João é mecânico.
A disjunção é: p q: João é estudante ou mecânico.
2) Dadas as proposições:
p: 10 é número primo
q: 10 é número composto
a disjunção é: p q: 10 é número primo ou número composto.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
10
O símbolo pode ser usado, também, para definir a união de dois
conjuntos: A B = {x / x A x B}
A disjunção inclusiva de duas proposições (p q) é falsa se, e
somente se, todas as componentes forem falsas. A tabela-verdade da
operação disjunção é:
p q pq
V V V
V F V
F V V
F F F
Exemplos:
1) Determinar o valor lógico da proposição composta P dada a seguir: P: 3 <
ou 2 não é número primo.
Resolução:
“3 < ” é uma proposição verdadeira.
“2 não é número primo” é uma proposição falsa.
Com as proposições simples dadas estão ligadas pelo conectivo ou,
então: V(P) = V
2)Sejam as proposições:
p: Maurício é jogador de vôlei.
Q: Maurício é bonito.
Escrever em linguagem natural as seguintes proposições:
a) p q b) p ~q
Resolução:
a) Maurício é jogador de vôlei e Maurício é bonito.
b) Maurício é jogador de vôlei ou Maurício não é bonito.
3) Construir a tabela-verdade para a proposição p ~ q.
Resolução:
P q ~q p ~q
V V F V
V F V V
F V F F
F F V V
1.8.4 Operação Condicional ( )
Duas proposições p e q podem ser combinadas pelo conectivo
lógico “se ..., então ...” para formar uma nova proposição denominada
condicional.
Notação: p q (lê-se: se p, então q).
Outras maneiras de se ler o condicional p q:
·q, se p.
·p é condição suficiente para q.
·q é condição necessária para p.
Exemplo:
A proposição condicional “Se chove, então a rua fica molhada”,
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
11
também pode ser lida das seguintes formas:
Chover é uma condição suficiente para a rua ficar molhada.
A rua ficar molhada é uma condição necessária quando chove.
No condicional p q, a proposição p é chamada antecedente e a
proposição q é conseqüente.
Exemplos:
1) Dadas as proposições:
p: 1 litro = 1 dm3
q: 1 ml = 1 cm3
a condicional é: p q: Se 1 l = 1 dm3, então 1 ml = 1 cm3.
2) Dadas as proposições:
p: Chove
q: Faz frio
a condicional é:
p q: Se chove, então faz frio.
3) Dadas as proposições:
p: 5 < 2
q: 2 Z
a condicional é: p q: Se 5 < 2, então 2 Z.
Obs.: O símbolo Z representa o conjunto dos número inteiros.
A proposição condicional p q só é falsa quando p é verdadeira e q é
falsa. Caso isto não ocorra, a proposição condicional será verdadeira.
A tabela-verdade da operação condicional é:
P q pq
V V V
V F F
F V V
F F V
1.8.5 Operação Bicondicional ( )
Duas proposições p e q podem ser combinadas pelo conectivo lógico
“... se, e somente se ...´ para formar uma nova proposição denominada
bicondicional.
Notação: p q (lê-se: p se, e somente se q)
Outras maneiras de se ler o bicondicional p q:
·p é condição necessária e suficiente para q.
·q é condição necessária e suficiente para p.
Exemplos:
1) Dadas as proposições:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
12
p: Perereca se transforma em sapo.
Q: Sapo se transforma em príncipe.
A bicondicional é:
p q: Perereca se transforma em sapo se, e somente se, sapo se transforma
em príncipe.
2) Dadas as proposições:
p: João é homem.
Q: João tem a voz grave.
A bicondicional é:
p q: João é homem se, e somente se, João tem a voz grave.
A proposição bicondicional p q só é verdadeira quando V(p) = V(q),
caso contrário é falsa.
A tabela-verdade da operação bicondicional é:
p q pq
V V V
V F F
F V F
F F V
1.8.6 Tabela verdade resumo dos conectivos
p q p^q pvq ~p pq p <-> q
V V V V F V V
V F F V F F F
F V F V V V F
F F F F F V V
1.9 Prioridade dos conectivos
a) Parênteses
Usar parênteses em todas as fórmulas indicando assim a prioridade das
subfórmulas.
((( ~p ) v q) ((r ^ ~q) <-> p))
Quando o significado for claro podemos simplificar o uso de parênteses.
b) Tabela abaixo
(~) > (^) > ( v) > () > (<->)
Exercícios
Dadas as proposições a seguir, monte a expressão e a tabela verdade
correspondente:
1.a) Está chovendo
2.b) Está frio
2.a) João vai viajar
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
13
3.b) Maria vai viajar
4.c) Se Maria viajar ao lado de João, João ficará feliz
3.a)João vai viajar se Maria for
4.b)Maria vai viajar se Mario for
5.c)Mario vai viajar se Carlos ou Maria for
[Link] as expressões abaixo, monte as tabelas verdade
5.a) p ^ (q r) (p q)
6.b) (p q) ^ (r q) (p ^ r)
1.c) ((p ~p) ^ ~(q r)) (~q ^ r) s
1.10 Tautologia, Contradição e Contingência
1.10.1 Tautologia
Uma proposição composta é uma tautologia quando o seu valor lógico
é sempre verdade (V), quaisquer que sejam os valores lógicos das
proposições componentes.
Exemplos:
p: Chove
~p: Não chove
(p ~p)
A tabela-verdade é:
p ~p p ~p
V F V
F V V
Logo, (p ~p) é uma tautologia.
1.10.2 Contradição
Uma proposição composta é uma contradição quando o seu valor
lógico é sempre a falsidade (F), quaisquer que sejam os valores lógicos das
proposições componentes.
Exemplo:
p: Chove
~p: Não chove
(p ~ p)
A tabela-verdade é:
p ~p p ~p
V F F
F V F
Logo, (p ~p) é uma tautologia.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
14
1.10.3 Contingência
Uma proposição é contingente (ou uma indeterminação) quando não é uma
tautologia e não é uma contradição.
Exercícios
Dadas as proposições abaixo, diga se ela é uma Tautologia, Contradição ou
Contingência
1.(p ^ ~p) ^ p
2.(p ^ ~q) ^ p
3.(p ^ ~p) q
4.(q ^ ~p) ^ r
5.p ^ (q r) (p q)
1.11 Implicação Lógica ou Conseqüência Lógica (
Dadas as proposições compostas P e Q, diz-se que ocorre uma
implicação lógica (ou relação de implicação) entre P e Q quando a
proposição condicional P Q é uma tautologia.
OU
Uma fórmula A é consequência lógica de uma fórmula B, se e somente
se para qualquer interpretação em que B é verdadeira A também é verdadeira.
Assim B implica logicamente em A se B A é uma tautologia, e B ^ ~A
é uma contradição.
Notação: P Q (lê-se: “P implica Q”).
·Os símbolos e têm significados diferentes:
·O símbolo realiza uma operação entre proposições, dando origem a uma
nova proposição p q cuja tabela-verdade pode conter tanto V quanto F.
·O símbolo entre duas proposições dadas indica uma relação, isto é, que a
proposição condicional associada é uma tautologia.
Exemplo:
Mostrar que (p q) p.
p q pq (p q) p
V V V V
V F F V
F V F V
F F F V
Como (p q) p é uma tautologia, então (p q) p, isto é, ocorre a
implicação lógica.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
15
1.12 Equivalência Lógica (
Dadas as proposições compostas P e Q, diz-se que ocorre uma
equivalência lógica entre P e Q quando suas tabelas-verdade forem
idênticas.
OU
Uma fórmula A é equivalência lógica de uma fórmula B (A é logicamente
equivalente a B) se A é implicação lógica de B e B é implicação lógica de A.
Assim A é equivalência lógica de B se A <-> B é uma tautologia.
Notação: P Q ou P Q (lê-se: “P é equivalente a Q”) Intuitivamente,
proposições logicamente equivalentes transmitem a mesma informação, a
mesma idéia, a partir das mesmas proposições componentes.
Exemplo:
Mostrar que (p q) (q p) e p q são equivalentes.
p q pq qp (p q) (q p) pq
V V V V V V
V F F V F F
F V V F F F
F F V V V V
Logo, (p q) (q p) p q.
·O bicondicional não é uma operação lógica básica, mas a conjunção de
proposições condicionais.
Exemplo:
Mostrar que (p q) ~ ( ~ p ~q).
Analisemos a tabela-verdade envolvendo as seguintes proposições:
A B ~B
p q pq ~ p ~ q ~p ~q ~ (~ p ~ q) A ~ B
V V V F F F V V
V F F F V V F V
F V F V F V F V
F F F V V V F V
Como (pq) ~ (~ p~ q) é uma tautologia, então (p q) ~ (~p ~ q),
isto é, ocorre a equivalência lógica.
Exercícios
Verifique se os pares de fórmulas abaixo são equivalências lógicas ou
implicações lógicas.
a) (p ^ q) e q
b) ~(p ^ q) e ( ~p v ~q)
c) (~p v q) e (p q)
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
16
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
17
CURSO TÉCNICO EM INFORMÁTICA - SUBSEQUENTE – TIS
LINGUAGEM DE PROGRAMAÇÃO
Algoritmo
CAPÍTULO 2
Professor: Gilson Barbosa Pereira
E-Mail : vinigus@[Link]
Jaguariaíva - 2010
SUMÁRIO
2 ALGORITMOS 3
2.1 Conceito de algoritmo 3
2.2 Por que precisamos de algoritmos? 4
2.3 Características 5
2.4 Estratégias na Construção de Algoritmos 5
2.5 Como Construir Algoritmos? 5
2.6 Formas de representação 7
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
18
2.6.1 Descrição narrativa 7
2.6.2 Fluxograma 7
2.6.3 Linguagem algorítmica 8
2.7 Um ambiente para escrever algoritmos 8
2.7.1 Funcionamento do nosso computador 9
2.7.2 Resolvendo um problema 9
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
19
2 ALGORITMOS
2.1 Conceito de algoritmo
A palavra algoritmo, à primeira vista, parece-nos estranha. Embora
possua designação desconhecida, fazemos uso constantemente de algoritmos
em nosso cotidiano: a maneira como uma pessoa toma banho é um algoritmo.
Outros algoritmos freqüentemente encontrados são:
instruções para se utilizar um aparelho eletrodoméstico;
uma receita para preparo de algum prato;
guia de preenchimento para declaração do imposto de renda;
a regra para determinação de máximos e mínimos de funções por
derivadas sucessivas;
a maneira como as contas de água, luz e telefone são calculadas
mensalmente; etc.
O exemplo demonstrado abaixo, apresenta um Algoritmo para Lavar a
Cabeça:
ALGORITMO para Lavar a Cabeça
1 – Início
2 – Molhe o cabelo
3 – Coloque Shampoo
4 – Faça Massagem
5 – Enxágüe
6 – Repita o Processo
7 – Fim
Observações do Algoritmo apresentado acima:
1) É a descrição de um procedimento rotineiro;
2) Tem um INÍCIO e um FIM claros;
3) A descrição é feita passo a passo, de maneira bem definida;
4) Há imperfeições:
4.1) Não especifica a quantidade de shampoo;
4.2) Não especifica quantas vezes o processo deve ser repetido;
4.3)Não especifica qual o processo ou qual passo que deve ser repetido.
Conclusão: Com isso, verificamos que enquanto houverem imperfeições e
dúvidas, o Algoritmo deve ser MELHORADO.
Melhorando o Algoritmo para Lavar a Cabeça:
ALGORITMO para Lavar a Cabeça
1– Início
2 – Molhe o Cabelo
3 – Repita 2 (duas) vezes:
3.1 – Coloque a quantidade
correspondente a uma tampa de shampoo
3.2 – Faça massagem durante 1 minuto
3.3 – Enxágüe
4 – Fim
São vários os conceitos para algoritmo. Escolhemos alguns para serem
apresentados aqui:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
20
“Um conjunto finito de regras que provê uma seqüência de operações para resolver um tipo de
problema específico”.[KNUTH]
“Seqüência ordenada, e não ambígua, de passos que levam à solução de um dado problema”.
[TREMBLAY]
“Processo de cálculo, ou de resolução de um grupo de problemas semelhantes, em que se
estipulam, com generalidade e sem restrições, as regras formais para a obtenção do resultado
ou da solução do problema”. [AURÉLIO]
2.2 Por que precisamos de algoritmos?
Vejamos o que algumas pessoas importantes, para a Ciência da
Computação, disseram a respeito de algoritmo:
“A noção de algoritmo é básica para toda a programação de computadores”.
[KNUTH - Professor da Universidade de Stanford, autor da coleção “The art of
computer programming”].
“O conceito central da programação e da ciência da computação é o conceito de algoritmo”.
[WIRTH - Professor da Universidade de Zurique, autor de diversos livros na área e responsável
pela criação de linguagens de programação como ALGOL, PASCAL e MODULA-2]
A importância do algoritmo está no fato de termos que especificar uma
seqüência de passos lógicos para que o computador possa executar uma
tarefa qualquer, pois o mesmo por si só não tem vontade própria, faz apenas o
que mandamos.
Com uma ferramenta algorítmica, podemos conceber uma solução para
um dado problema, independendo de uma linguagem específica e até mesmo
do próprio computador.
Em resumo: Servem para a elaboração do programa fonte. Serve para
sairmos do problema e chegarmos ao programa.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
21
2.3 Características
Todo algoritmo deve apresentar algumas características básicas:
Ter fim;
Não dar margem à dupla interpretação (não ambíguo);
Capacidade de receber dado(s) de entrada do mundo exterior;
Poder gerar informações de saída para o mundo externo ao do ambiente
do algoritmo;
Ser efetivo (todas as etapas especificadas no algoritmo devem ser
alcançáveis em um tempo finito).
2.4 Estratégias na Construção de Algoritmos
Especifique o problema claramente e entenda-o completamente;
Explicite todos os detalhes supérfluos;
Entre no problema (envolva-se totalmente com o problema);
Use todas as informações disponíveis;
Decomponha o problema (Top-Down);
Use o sentido inverso, se necessário (Bottom-Up).
2.5 Como Construir Algoritmos?
- Análise Preliminar: Entenda o problema com a maior precisão possível, identifique
os dados; identifique os resultados desejados.
- Solução: Desenvolva um algoritmo para resolver o problema.
- Teste de Qualidade: Execute o algoritmo desenvolvido com dados para os quais o
resultado seja conhecido. O ideal é que o universo dos dados tenha todas as
combinações possíveis.
Note que a qualidade de um algoritmo pode ser limitada por fatores
como tempo para a sua confecção e recursos disponíveis.
- Alteração: Se o resultado do teste de qualidade não for satisfatório, altere o algoritmo
e submeta-o a um novo teste de qualidade.
- Produto Final: O algoritmo concluído e testado, pronto para ser aplicado.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
22
Exercícios
[Link] homem precisa atravessar um rio com um barco que possui capacidade
de carregar apenas ele mesmo e mais uma de suas três cargas, que são:
um lobo, um bode e um maço de alfafa. O que o homem deve fazer para
conseguir atravessar o rio sem perder suas cargas?
[Link] que você possua um robô e queira fazê-lo trocar uma lâmpada,
sendo que o mesmo foi programado para obedecer aos seguintes
comandos:
·pegue <objeto>
·pressione <objeto>
·gire garras 180 no sentido horário
·gire garras 180 no sentido anti-horário
·mova <objeto> para <lugar>
·desloque-se para <lugar>
e ainda é capaz de:
·perceber quando algum comando não pode mais ser executado
·sentir alguma fonte de calor
Que ordens você daria para que seu robô trocasse a lâmpada?
[Link] um algoritmo que mostre todos os passos que você segue para
escolher o tipo de roupa com que vai sair, após levantar, levando em
consideração apenas o tempo (bom, nublado, chuvoso) e a temperatura
(quente, moderado, frio).
[Link] um algoritmo que mova três discos de uma Torre de Hanói, que
consiste em três hastes (a - b - c), uma das quais serve de suporte para três
discos diferentes (1 - 2 - 3), os menores sobre os maiores. Pode-se mover
um disco de cada vez para qualquer haste, contanto que nunca seja
colocado um disco maior sobre um menor. O objetivo é transferir os três
discos para outra haste.
[Link]ês jesuítas e três canibais precisam atravessar um rio; para tal, dispõem de
um barco com capacidade para duas pessoas. Por medidas de segurança
não se permite que em alguma margem a quantidade de jesuítas seja
inferior à de canibais. Qual a seqüência de passos que permitiria a travessia
com segurança?
[Link] determinada noite, acontece uma queda de energia. Você sabia que
poderia encontrar uma vela na gaveta da cozinha, um lampião embaixo da
cama, fusíveis de reserva no armário da sala e fósforos na estante da
cozinha. Descreva a seqüência de passos que poderia ser utilizada para
diagnosticar e resolver o problema, que pode ser previsto em duas
possibilidades:
a) o fusível queimou;
b) a queda é na estação da companhia elétrica.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
23
2.6 Formas de representação
Algoritmos podem ser representados, dentre outras maneiras, por:
2.6.1 Descrição narrativa
Faz-se uso do português para descrever algoritmos.
EXEMPLO: Receita de Bolo:
Providencie manteiga, ovos, 2 Kg de massa, etc.
Misture os ingredientes
Despeje a mistura na fôrma de bolo
Leve a fôrma ao forno
Espere 20 minutos
Retire a fôrma do forno
Deixe esfriar
Prove
VANTAGENS:
· O português é bastante conhecido por nós;
DESVANTAGENS:
· imprecisão;
· pouca confiabilidade (a imprecisão acarreta a desconfiança);
· extensão (normalmente, escreve-se muito para dizer pouca coisa).
2.6.2 Fluxograma
Utilização de símbolos gráficos para representar algoritmos. No
fluxograma existem símbolos padronizados para início, entrada de dados,
cálculos, saída de dados, fim, etc.
Cálculo Decisão Entrada Saída Início/Fim
EXEMPLO EXPLICAÇÃO
VANTAGENS:
· Uma das ferramentas mais conhecidas;
· Figuras dizem muito mais que palavras;
· Padrão mundial
DESVANTAGENS:
· Faz com que a solução do problema já esteja amarrada a dispositivos físicos;
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
24
· Pouca atenção aos dados, não oferecendo recursos para descrevê-los ou
representá-los;
· Complica-se à medida que o algoritmo cresce.
2.6.3 Linguagem algorítmica
Consiste na definição de uma pseudolinguagem de programação, cujos
comandos são em português, para representar algoritmos.
EXEMPLO: Algoritmo CALCULA_DOBRO
início
Leia NUM
DOBRO _ 2 * NUM
Escreva DOBRO
fim
VANTAGENS:
· Independência física da solução (solução lógica apenas);
· Usa o português como base;
· Pode-se definir quais e como os dados vão estar estruturados;
· Passagem quase imediata do algoritmo para uma linguagem de programação
qualquer.
DESVANTAGENS:
· Exige a definição de uma linguagem não real para trabalho;
· Não padronizado.
2.7 Um ambiente para escrever algoritmos
Descreveremos uma máquina hipotética para a qual escreveremos
nossos algoritmos. O nosso computador hipotético apresentará a seguinte
organização:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
25
Cada uma das partes constituintes da figura acima tem os seguintes
significados:
Dispositivo de entrada (o teclado): É o meio pelo qual os dados que
serão trabalhados pelo algoritmo vão ser introduzidos em nosso
computador hipotético;
(2) Unidade Lógica e Aritmética (ULA): Parte responsável pelas
operações matemáticas e avaliações lógicas;
(3) Unidade de Controle: Exerce controle sobre as demais partes do
osso computador. É uma verdadeira gerente que distribui tarefas às
outras unidades;
(4) Memória: Guarda o algoritmo a ser executado e os dados a serem
utilizados pelo mesmo. Todo dado fornecido ao computador e o
resultado de suas operações ficam guardados na memória;
(5) Dispositivo de Saída (vídeo e impressora): É o meio que se dispõe
para apresentação dos resultados obtidos.
2.7.1 Funcionamento do nosso computador
Todos os computadores, independentemente dos seus tamanhos, são
conceitualmente semelhantes ao esquema da figura anterior (há algumas
diferenças, mas não trataremos aqui dos casos especiais).
Resumidamente, podemos afirmar que existem 4 (quatro) operações
básicas que qualquer computador pode executar:
a) operações de entrada e saída: ler dados do teclado e escrever dados na
tela são exemplos destas operações. Elas servem para introduzir dados na
memória do nosso computador e exibir dados que já estejam lá armazenados;
b) operações aritméticas: são utilizadas na realização de operações
matemáticas (adição, subtração, multiplicação e divisão);
c) operações lógicas e relacionais: têm aplicabilidade em comparações,
testes de condições lógicas (2 > 6 ? X = Y ?);
d) movimentação de dados entre os vários componentes: as operações
aritméticas são executadas na Unidade Lógica e Aritmética, necessitando da
transferência dos dados para essa unidade e da volta do resultado final para
ser guardado na memória.
2.7.2 Resolvendo um problema
Suponha que queiramos resolver o seguinte problema: a partir de dois
números que serão informados, calcular a adição dos mesmos. Se você fosse
encarregado de efetuar essa tarefa, seria bem provável que utilizasse os
passos a seguir:
a) saber quais são os números;
b) calcular a soma dos números;
c) responder à questão com o valor do resultado.
Vejamos como seria resolvido esse mesmo problema em termos das
operações básicas citadas anteriormente:
a) operação de entrada de dados dos números;
b1) movimento do valor dos números entre a memória e a ULA;
b2) operação aritmética de somar os 2 números;
b3) movimentação do resultado da ULA para guardar na memória;
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
26
c) operação de saída do resultado, que está guardado na memória, para o
dispositivo de saída desejado.
Deve-se salientar que os passos b1 e b3, normalmente, ficam embutidos
na operação matemática, não sendo explicitados.
Em resumo, pode-se dizer que escrever algoritmos ou, em última
análise, programar, consiste em dividir qualquer problema em muitos pequenos
passos, usando uma ou mais das quatro operações básicas citadas.
Esses passos que compõem o algoritmo são denominados de
comandos. Os comandos de uma linguagem de programação podem estar
mais próximos da máquina (linguagens de baixo nível) ou serem mais
facilmente entendidos pelo homem (linguagens de alto nível). A seqüência de
operações básicas, dada anteriormente, para resolver o problema de adicionar
dois números, está em uma linguagem de baixo nível para o nosso computador
hipotético.
Em uma linguagem de alto nível teríamos um resultado assim:
Leia X,Y
SOMA X + Y
Escreva SOMA
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
27
CURSO TÉCNICO EM INFORMÁTICA - SUBSEQUENTE – TIS
LINGUAGEM DE PROGRAMAÇÃO
TIPOS DE DADOS PRIMITIVOS
CAPÍTULO 4
Professor: Gilson Barbosa Pereira
E-Mail : vinigus@[Link]
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
28
Jaguariaíva - 2010
SUMÁRIO
4 TIPOS DE DADOS PRIMITIVOS 3
4.1 Dados Numéricos 3
4.2 Dados Literais ou Alfanuméricos 3
4.3 Dados Lógicos 4
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
29
4 TIPOS DE DADOS PRIMITIVOS
Os algoritmos irão manipular dados, que normalmente são fornecidos
pelos usuários, e entregar resultados para estes usuários. Uma pergunta
importante neste momento é: que tipo de dados poderemos manipular? As
linguagens de programação normalmente estabelecem regras precisas para
definir que tipos de dados elas irão manipular. A pseudo-linguagem que iremos
empregar também estabelece, ainda que informalmente, algumas regras que
reduzem o conjunto de dados existentes na natureza a um conjunto mais
simples e somente este conjunto poderá ser manipulado pelos algoritmos.
Porém, computadores têm limitações quanto aos tipos de dados
numéricos que podem manipular, mas que também podem manipular outros
tipos de dados não numéricos com facilidade.
Podemos dividir três tipos primitivos de dados que iremos manipular nos
algoritmos que iremos criar:
Dados numéricos: Inteiro, Real.
Dados literais ou alfanuméricos: Caractere.
Dados lógicos.
Cada um destes tipos de dados será detalhado em seguida:
4.1 Dados Numéricos
Inteiro: toda e qualquer informação numérica que pertença ao conjunto
dos números inteiros relativos (negativa, nula ou positiva). Valores de -32,768
até +32,768
Exemplo:
- Ele tem 15 irmãos.
- A temperatura desta noite será de -2 graus.
- Outros exemplos: idade, número_dependentes, número_de_filhos.
Real: toda e qualquer informação numérica que pertença ao conjunto
dos números reais (negativa, nula ou positiva). Valores com vírgulas, negativos
ou positivos com grande abrangência.
Exemplo:
- Ela tem 1,73 metros de altura.
- Meu saldo bancário é de R$ 120,96
- Outros exemplos: altura, peso, comprimento.
4.2 Dados Literais ou Alfanuméricos
Caractere: toda e qualquer informação composta por um conjunto de
caracteres alfanuméricos (0..9) e o/ou especiais.
Dados literais servem para tratamento de textos. Por exemplo, um
algoritmo pode necessitar de imprimir um aviso para os usuários, ou um
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
30
comentário junto com um resultado numérico. Outra possibilidade é a
necessidade de ler dados tais como nomes, letras, etc.
Este tipo de dados pode ser composto por um único caracter ou por um
conjunto de pelo menos um destes elementos. Conjuntos são conhecidos como
cadeias de caracteres, tradução da expressão em inglês, "character string".
Um ponto importante que deve ser abordado agora é o que se entende
por caractere. Caracteres são basicamente as letras minúsculas, maiúsculas,
algarismos, sinais de pontuação, etc. Em computação caracteres são
representados por códigos binários e o mais disseminado de todos é o código
ASCII. Este padrão foi definido nos Estados Unidos e é empregado pela quase
totalidade dos fabricantes de computadores e programas. O apêndice mostra a
tabela ASCII com estes códigos.
Os caracteres que normalmente são empregados nos algoritmos são os
seguintes:
Letras maiúsculas:
A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
Letras minúsculas:
a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Algarismos:
0|1|2|3|4|5|6|7|8|9
Caracteres de pontuação:
;|:|!|?|*|(|)|\|/|+|-|=|<|>
Exemplo: #, $, %, &, *
- Outros exemplos: e-mail, data_nascimento, telefone, cidade.
Observações:
a) Não confundir os valores numéricos com os literais ou entre os literais.
Vejamos os casos a seguir.
Caso 1. 42 (inteiro) é diferente de “42” (literal) – Os tipos são diferentes, logo,
seus valores em memórias são diferentes;
Caso 2. “01”(literal) é diferente de “1” (literal) – Os tipos são iguais, mas a
representação em memória é diferente.
4.3 Dados Lógicos
Toda e qualquer informação que pode assumir apenas duas situações.
Exemplo:
- verdadeiro ou falso
- ligado ou desligado
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
31
Exercícios
1) Classifique os dados de acordo com o seu tipo, sendo:
(I = inteiro, R = real, C = caracter, L = lógico).
( ) 0 ( ) + 36 ( ) “+3257 ( )F
( ) 1 ( ) + 32 ( ) “+3257” ( ) 'F'
( ) 0,0 ( ) - 0,001 ( ) “-0,0” ( ) “.V.”
( ) 0 ( ) + 0,05 ( ) “.V.” ( )F
( ) -1 ( ) + 3257 ( )V ( ) -32
( ) “a” ( ) “abc” ( ) -1,9E123 ( ) '0'
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
32
CURSO TÉCNICO EM INFORMÁTICA - SUBSEQUENTE – TIS
LINGUAGEM DE PROGRAMAÇÃO
INSTRUÇÕES PRIMITIVAS
CAPÍTULO 5
Professor: Gilson Barbosa Pereira
E-Mail : vinigus@[Link]
Jaguariaíva - 2010
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
33
SUMÁRIO
5 INSTRUÇÕES PRIMITIVAS 3
5.1 Instrução Primitiva de Atribuição 3
5.2 Instrução Primitiva de Saída de Dados 4
5.3 Instrução Primitiva de Entrada de Dados 6
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
34
5 INSTRUÇÕES PRIMITIVAS
São os comandos básicos que efetuam tarefas essenciais para a
operação dos computadores.
Possibilitam a comunicação com o usuário e com os dispositivos
periféricos, através das entradas e saídas de dados, bem como a
movimentação dos dados na memória.
Um programa que não utiliza nenhuma instrução primitiva é incapaz de
se comunicar com o mundo exterior.
Os comandos ou instruções possuem uma sintaxe e uma semântica.
Sintaxe – é a forma como os comandos devem ser escritos para que
possam ser entendidos pelo tradutor de programas.
Semântica – é o conjunto de ações que serão executadas pelo
computador durante a execução do referido comando.
5.1 Instrução Primitiva de Atribuição
Atribuição é a principal maneira de se armazenar uma informação numa
variável.
Sintaxe:
<nome_da_variável> ß <expressão>
Em fluxogramas os comandos de atribuição são representados assim:
Semântica: avalia a expressão e armazena o valor resultante na
posição de memória correspondente à variável que aparecer à esquerda do
comando.
O tipo de dado da variável tem que ser compatível com o tipo de dado
do valor resultante da avaliação da expressão.
Exemplo de aplicação de comandos de atribuição:
Construa um algoritmo onde os valores 5.0 e 10 são atribuídos às
variáveis PRECO_UNIT e QUANT, respectivamente; posteriormente, o
resultado do produto entre as duas variáveis anteriores será armazenado na
variável PRECO_TOT.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
35
Fluxograma:
Pseudocódigo:
Algoritmo EXEMPLO_ATR
Var PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Início
PRECO_UNIT ß 5.0
QUANT ß 10
PRECO_TOT ß PRECO_UNIT * QUANT
Fim
5.2 Instrução Primitiva de Saída de Dados
Meio pelo qual as informações contidas na memória do computador são
colocadas nos dispositivos de saída.
Sintaxe:
Escreva <lista_de_variáveis>
ou
Escreva <literal>
Em fluxogramas os comandos de saída de dados são representados
assim:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
36
Semântica: os argumentos do comando são enviados para o dispositivo de
saída.
Exemplo de aplicação de instrução primitiva de saída de dados:
Construa um algoritmo onde os valores 5.0 e 10 são atribuídos às
variáveis PRECO_UNIT e QUANT, respectivamente; posteriormente, o
resultado do produto entre as duas variáveis anteriores será armazenado na
variável PRECO_TOT. Mostre o conteúdo da variável PRECO_TOT.
Fluxograma:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
37
Pseudocódigo:
Algoritmo EXEMPLO_SAIDA
Var PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Início
PRECO_UNIT ß 5.0
QUANT ß 10
PRECO_TOT ß PRECO_UNIT * QUANT
Escreva PRECO_TOT
Fim
5.3 Instrução Primitiva de Entrada de Dados
Meio pelo qual as informações são obtidas nos dispositivos de entrada e
armazenadas na memória do computador.
Sintaxe:
Leia <lista_de_variáveis>
Em fluxogramas os comandos de entrada de dados são representados
assim:
Semântica: os dados são fornecidos ao computador por meio de um
dispositivo de entrada e armazenados nas posições de memória das variáveis
cujos nomes aparecem na lista de variáveis.
Exemplo de aplicação de instrução primitiva de entrada de dados:
Construa um algoritmo onde os valores atribuídos às variáveis
PRECO_UNIT e QUANT sejam lidos no dispositivo de entrada; posteriormente,
o resultado do produto entre as duas variáveis anteriores será armazenado na
variável PRECO_TOT. Mostre o conteúdo da variável PRECO_TOT.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
38
Fluxograma:
Pseudocódigo:
Algoritmo EXEMPLO_ENTRADA
Var PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Início
Leia PRECO_UNIT, QUANT
PRECO_TOT ß PRECO_UNIT * QUANT
Escreva PRECO_TOT
Fim
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
39
Exemplo anterior melhorado:
Fluxograma:
Pseudocódigo:
Algoritmo EXEMPLO_MELHOR
Var PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Início
Escreva “Digite o Preço Unitário”
Leia PRECO_UNIT
Escreva “Digite a Quantidade”
Leia QUANT
PRECO_TOT ß PRECO_UNIT * QUANT
Escreva “Preço Total : ”, PRECO_TOT
Fim
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
40
CURSO TÉCNICO EM INFORMÁTICA - SUBSEQUENTE – TIS
LINGUAGEM DE PROGRAMAÇÃO
CONSTANTES E VARIÁVEIS
CAPÍTULO 6
Professor: Gilson Barbosa Pereira
E-Mail : vinigus@[Link]
Jaguariaíva - 2010
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
41
SUMÁRIO
6 CONSTANTES E VARIÁVEIS 3
6.1 Constantes 3
6.2 Variáveis 3
6.2.1 Uso das Variáveis no Algoritmo 4
6.2.2 Formação de Identificadores – Regras básicas 4
6.2.3 Tamanho das Variáveis 5
6.2.4. Declaração de variáveis 5
6.3 Declaração de constantes 6
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
42
6 CONSTANTES E VARIÁVEIS
6.1 Constantes
Entendemos que uma informação é constante quando não sofrem
nenhuma variação no decorrer do tempo.
Ex:
3,1416
Salário mínimo
6.2. Variáveis
É o local de memória onde serão armazenados os dados de forma
temporária. Em nossos algoritmos não nos preocuparemos com o endereço
real dessas variáveis, pois a maioria das linguagens de programação, tornam
estes endereços transparentes ao programador. Uma informação é classificada
como variável quando tem a probabilidade de ser alterada em algum instante
no de correr do tempo.
Ex:
temperatura, peso.
Para exemplificarmos a diferença
entre dados (constantes) e variáveis, bem
como entender melhor o endereçamento de
variáveis, podemos citar o exemplo de uma
estante de prateleiras, onde estão
guardados livros ou quaisquer outros
objetos (veja figura).
Os livros e objetos podem ser chamados de dados, conteúdo das
variáveis. Para nos referenciarmos à variável é necessário darmos um nome à
mesma, pois não trabalharemos com endereço de memória propriamente dito,
e sim com identificadores.
É aconselhável que o nome da variável expresse o que vai ser
armazenado dentro dela, p.e. nomeAluno, quantidade_alunos.
As variáveis podem ainda ser simples ou compostas. As variáveis
simples são aquelas que recebem um único dado por vez, enquanto que as
compostas podem armazenar vários dados de uma só vez, porém, esta última
não é objeto de nossa apostila.
Quando declaramos uma variável, temos que associar a ela algumas
características:
· NOME ou IDENTIFICADOR
· TIPO do dado
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
43
Como dissemos anteriormente, o endereço físico da variável não precisa
ser declarado, a menos que estejamos programando em alguma linguagem de
baixo nível, como o ASSEMBLER. As linguagens de alto nível procuram
espaços livres na memória do computador para associarem bytes à variável
declarada.
6.2.1 Uso das Variáveis no Algoritmo
O nome a ser associado à variável (ex.: X, Y, KTI34), não é importante
para o computador, pois este servirá apenas como uma mera referência.
Entretanto para outros programadores que possam vir a analisar os seus
programas, ou até para você mesmo após algum tempo, é necessário que
esses nomes sejam expressivos, simples e objetivos.
6.2.2 Formação de Identificadores – Regras básicas
Devem começar por um caractere alfabético;
Podem ser seguidos por mais caracteres alfabéticos e/ou numéricos;
Não é permitido o uso de caracteres especiais;
O pascal não é sensitive, não faz diferença entre maiúsculo e minúsculo;
Exemplos:
Vejamos agora alguns exemplos de identificadores:
SALARIO Um bom nome para variável que irá armazenar
um valor salarial;
CONT Um bom nome para variável que irá registrar uma
contagem;
TOTAL Um bom nome para variáveis acumuladoras de
somas;
DATANASC Um bom nome para variáveis usadas para
armazenar uma data de nascimento.
Devemos evitar nomes do tipo: X, K, C1, ABC, etc... a menos que
eles expressem algo real.
Nomes de variável, na maioria das linguagens, NÃO devem:
Iniciar por números: 1C2, 9ANOS, 100, 4CANTOS, etc...
Ser descontínuos: DATA NASC, FONE COMERC, etc...
Outros requisitos podem aparecer dependendo de cada linguagem. O
COBOL por exemplo permite nomes longos para variáveis, já o CLIPPER, com
apenas 10 bytes. O COBOL permite separadores como hífens, barras, entre
outros. Linguagens derivadas do DBASE permitem apenas o UnderLine
(Nome_Aluno) como caracter separador. A maioria das linguagens apresenta
certas restrições à livre escolha dos nomes das variáveis. A mais evidente é a
impossibilidade da utilização de palavras reservadas da própria linguagem.
Por exemplo, a palavra MOVE representa um comando para o COBOL. Não é
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
44
possível utilizarmos este nome como identificador de qualquer variável nesta
linguagem. Já para o CLIPPER, o MOVE pode ser um identificador.
Outras vezes, a linguagem traz consigo algumas variáveis reservadas.
Tratam-se de algumas variáveis que são automaticamente declaradas pela
linguagem. Normalmente elas registram a data e a hora do sistema
operacional, ou algumas informações internas como códigos de periféricos,
endereços de memória para buffers, etc.
6.2.3 Tamanho das Variáveis
Quando declaramos uma variável não precisamos delimitar o byte inicial e final
que esta irá ocupar na memória do computador, entretanto é imprescindível
entendermos que elas ocupam um espaço na memória e que os tipos de
dados trazem definições sobre as variáveis, inclusive o que pode armazenar e
os seus limites.
Outros tipos de variáveis também são tratados por novas linguagens, tais
como: HORA, MEMORANDO, OBJETO. Entretanto aqui só trataremos os
tipos mencionados anteriormente, ou seja: Literal, Inteiro, Real e Lógico..
6.2.4. Declaração de variáveis
No ambiente computacional as informações variáveis são gravadas em
dispositivos eletrônicos analogicamente chamados de memória.
Memória = armário
Variáveis = gavetas
Portanto precisamos definir nomes para determinadas gavetas
especificando qual o “material dos objetos“ que lá podem ser armazenados.
Regra sintática:
Exemplos:
X: inteiro;
Nome, endereço, data: caractere;
ABC, peso, dólar: real;
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
45
TODAS as variáveis que o programa vier a utilizar têm que existir antes
de serem referenciadas. Por esse motivo, necessitamos declarar estas. Como
fazer isso? Através do comando DECLARE.
Comando DECLARE
DECLARE <Nome da variável>[,<Nome da variável>]:
<tipo>;
<Nome da variável> Nome ou identificador da variável
<Tipo> Tipo da variável definida: Literal, Inteiro, Real e
Lógico.
Exemplos: DECLARE NOME : Literal;
DECLARE IDADE : Inteiro;
DECLARE ALTURA: Real;
DECLARE DEPENDENTE: LOGICO;
Podemos declarar diversas variáveis utilizando apenas um comando
DECLARE.
Exemplos: DECLARE NOME : Literal;
IDADE : Inteiro;
ALTURA: Real;
DEPENDENTE, LOGICO;
Ou ainda, em uma mesma linha, desde que sejam do mesmo tipo de dados.
Exemplo:
DECLARE IDADE, CONTADOR:inteiro;
(obs.: tipo e tamanho iguais}
Observação: As vezes substituímos o comando Declare por
Var ou Defina, dependendo da linguagem que estamos
querendo nos aproximar. Outros comandos poderão sofrer
variações. Cabendo ao professor da disciplina fazer os ajustes
baseados no direcionamento que queira dar à disciplina.
6.3 Declaração de constantes
Serve para associarmos nomes às constantes utilizadas no programa.
Possui o seguinte formato:
CONST <identificador>=<valor>;...;<identificador>=<valor>;
EXEMPLO:
CONST BRANCO = ' ' ; PI = 3.1416 ; MAX = 10 ; OK = TRUE;
Exercício
Assinale os identificadores válidos:
1 - abc 2 - AB/C 3 - “João” 4 - [x]
5 - 123a 6 - 080 7-1a3 8 - (x)
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
46
9 - #55 10 - AH! 11 - Etc... 12 - ...a
BAC 14 - xyz 15 - Porta_mala 16 - A_B-C
17 - U2 18 - p{0} 19 - A123 20 - A.
CURSO TÉCNICO EM INFORMÁTICA - SUBSEQUENTE – TIS
LINGUAGEM DE PROGRAMAÇÃO
OPERADORES
CAPÍTULO 7
Professor: Gilson Barbosa Pereira
E-Mail : vinigus@[Link]
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
47
Jaguariaíva - 2010
SUMÁRIO
7. OPERADORES 3
7.1 Operadores matemáticos 3
7.2 Operadores relacionais 4
7.3 Operadores Lógicos 4
7.4 Funções Matemáticas 6
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
48
7 OPERADORES
Podemos atribuir a uma variável o resultado de uma expressão
numérica. Atribuir é uma ação que as linguagens possuem e que representa o
ato de preencher o espaço da variável com um conteúdo, conforme o tipo de
dado (veremos mais detalhadamente em tópico específico). Entendemos por
expressão numérica um conjunto de operações aritméticas combinadas entre
operandos e operadores. Mas além das expressões numéricas, existem
expressões que exigem tratamentos particulares, como veremos a seguir.
Prioridade das Operações (Relembrando um pouco a matemática
elementar)
Se vários operadores aparecerem em uma expressão, a ordem de
execução das operações será dada segundo os critérios abaixo:
Pelo emprego explícito de parênteses;
Pela ordem de precedência existente entre os operadores;
Se existirem operadores de mesma ordem de precedência, a avaliação
será feita da esquerda para a direita.
Vejamos a ordem de precedência dos operadores (da maior para a menor):
7.1 Operadores matemáticos
Conjunto de símbolos que representa as operações básicas da
matemática.
Usaremos outras operações matemáticas não convencionais cujos
nomes dos
operadores são:
Mod – resto da divisão
Div – quociente da divisão inteira
Estes operadores só podem ser aplicados com números inteiros.
Ex: 9 mod 4 = 1
9 div 4 = 2
Exercícios
Utilizando os operadores especiais MOD e DIV resolva as expressões
abaixo:
11 div 4 9 div 4
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
49
11 mod 4 10 mod 2,5
10 div 3 15 mod 6
9 mod 4 19 mod 6
2,5 mod 2 3,5999 div 2
7.2 Operadores relacionais
Conjunto de símbolos que representa as operações básicas da
matemática.
Exemplos:
Dados A = 3, B = 2, C = ‘Jose’ , D = ‘Jose’, NOME = ‘JOSE’
A>B Retorna V
C=D Retorna V
NOME = "JOSE" Retorna V (Está sendo comparado o conteúdo
da variável NOME com a string “JOSE”.
NOME = D Retorna F (estão sendo comparados os
conteúdos das variáveis NOME e D).
Os operadores relacionais incidem sobre dados e variáveis numéricas e
caracteres. Assim sendo, podemos comparar não apenas números, mas
também palavras. Neste sentido, a comparação respeitará a ordem alfabética
das iniciais de cada uma.
Exemplos:
"MARIA" > "ANA" Retorna V
"MARIA" < "MARIO" Retorna V
Observação: as comparações só podem ser feitas com elementos dos
mesmos tipos.
7.3 Operadores Lógicos
Estes elementos são necessários quando você deseja realizar
comparações entre resultados lógicos obtendo como resposta outro valor
lógico. Estranho, não? Mas é exatamente isso que ocorre. Por exemplo: se
você ler um anuncio sobre emprego que tenham as seguintes solicitações:
“Precisa-se de pessoas do sexo feminino e com idade
máxima 40 anos”.
O que você consegue extrair deste anuncio? A resposta seria: duas
exigências, a saber, o SEXO da pessoa deve ser igual a feminino (“F”) e a
IDADE deve ser menor ou igual a 40 anos. Logo, estamos diante de duas
sentenças, que, dependendo do que seja colocado como dados na
comparação, poderemos ter a possibilidade do resultado ser falso ou
verdadeiro. Se o SEXO for igual a “M” (masculino), a primeira sentença será
falsa. Para você poder ocupar a vaga oferecida, necessário que sejas do sexo
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
50
feminino e sua idade esteja na faixa etária solicitada. Para o programa, o
raciocínio é exatamente igual.
Para que gerenciarmos esta etapa da lógica, utilizaremos os operadores
a seguir:
Operador Detalhamento Prioridade
de execução
OU A sentença que contiver este operador será verdadeira se pelo 3º
(Opcionalidade) menos uma das expressões nela contida retornar valor verdadeiro.
E A sentença que contiver este operador será verdadeira se as 2º
(Simultaneidade) expressões nela contida resultarem valores verdadeiros.
NÃO Quando queremos inverter (negar) o resultado de uma condição ou 1º
(Negação) expressão lógica.
OU = OR
E = AND
NÃO = NOT
Observação: caso sejam colocados os parênteses na sentença, a
prioridade de execução será alterada iniciando-se pelos elementos contidos
dentro destes. Caso exista mais de uma sentença nesta condição, observar-se-
á, além do exposto acima, a execução dos comandos da esquerda para a
direita da expressão.
Vejamos a “TABELA VERDADE” a seguir para entendermos melhor.
E OU
V V V V V V
F V F F V V
V F F V F V
F F F F F F
Exemplos:
X = 90 E Z = 100
A >= 67 OU A <= 200
NOME <> "ANA" E NAO (NOME = "MARIA")
(NOME <> "ANA") E (NAO (NOME="MARIA") OU
(NOME="PEDRO"))
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
51
7.4 Funções Matemáticas
Além das operações aritméticas básicas anteriormente citadas, podemos
usar nas expressões aritméticas algumas funcões da matemática:
sen(x) - seno de x;
cos(x) - coseno de x;
tg(x) - tangente de x;
arctg(x) - arco cuja tangente é x;
arccos(x) - arco cujo coseno é x;
arcsen(x) - arco cujo seno é x;
abs(x) - valor absoluto (módulo) de x;
int(x) - a parte inteira de um número fracionário;
frac(x) - a parte fracionária de x;
ard(x) - transforma por arredondamento, um número
fracionário em inteiro;
sinal(x) - fornece o valor -1, +1 ou 0 conforme o valor de x
seja negativo, positivo ou nulo;
rnd(x) - valor randômico de x;
Onde x pode ser um número, variável, expressão aritmética ou também
outra função matemática.
Prioridades
A hierarquia das expressões e funções aritméticas é a seguinte:
( ) parênteses mais internos
funções matemáticas
**
//
*
/
div
mod
+
-
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
52
CURSO TÉCNICO EM INFORMÁTICA - SUBSEQUENTE – TIS
LINGUAGEM DE PROGRAMAÇÃO
COMANDOS BÁSICOS
CAPÍTULO 8
Professor: Gilson Barbosa Pereira
E-Mail : vinigus@[Link]
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
53
Jaguariaíva - 2010
SUMÁRIO
8 COMANDOS BÁSICOS 3
8.1 Comando de Atribuição ( ou :=) 3
8.2 Comando de Leitura (leia) 3
8.3 Comando de Impressão (escreva) 4
8.4 Detalhamento das Regras 4
8.5 Comandos Entrada e Saída de Dados 5
8.5.1 Entrada de Dados 5
8.5.2 Saída de Dados 6
8.6 Blocos 7
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
54
8 COMANDOS BÁSICOS
8.1 Comando de Atribuição ( ou :=)
Um comando de atribuição permite-nos fornecer um valor a uma certa
variável, onde o tipo dessa informação deve ser compatível com o tipo da
variável, isto é, somente podemos atribuir um valor lógico a uma variável capaz
de comportá-lo, ou seja, uma variável declarada do tipo lógico.
O comando de atribuição é uma seta apontando para a variável ou dois
pontos e o sinal de igual.
Ou seja, a instrução de ATRIBUIÇÃO permite que o conteúdo de uma
variável seja alterado.
Sintaxe:
Nome valor
Onde: Um valor ou o resultado de uma expressão será armazenado sob um
nome simbólico que está a esquerda do sinal de atribuição.
Exemplo:
variáveis
A, B : lógico;
X : inteiro;
A := V;
X := 8 + 13 div 5;
B := 5 = 3;
Tal expressão poderá ser um simples valor atribuído à uma constante ou
variável,ou ainda poderá ser uma expressão aritmética, envolvendo outras variáveis
previamente definidas. Contudo, o tipo do valor do resultado obtido através do cálculo
da expressão, deve ser do mesmo tipo da variável que irá receber este valor.
8.2 Comando de Leitura (leia)
Transporta informações de um periférico de entrada para a memória principal do
computador.
As informações são lidas de um dispositivo de entrada, geralmente do teclado.
Sintaxe:
leia (lista-de-variáveis)
Exemplos:
Sintaxe:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
55
leia (NOME, TELEFONE)
leia (DIA, MES, ANO)
leia (NUMERO)
leia (PRODUTO, PRECO)
8.3 Comando de Impressão (escreva)
]Transporta informações da memória principal do computador para um
periférico de saída.
As informações são exibidas em um dispositivo de saída, geralmente em
impressora ou vídeo.
Sintaxe:
Escreva (lista-de-variáveis/constantes ou “texto”)
Onde: A execução da instrução de impressão pressupõe que os dados estejam
armazenados na memória e serão colocados disponíveis no meio externo
(dispositivo de saída – impressora ou vídeo) através dos nomes simbólicos
atribuídos às variáveis ou às constantes.
A opção “texto” prevista no formato da instrução permite também que
sejam explicitados textos para exibição de mensagens.
Exemplos:
8.4 Detalhamento das Regras
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
56
Exemplo de Algoritmo usando a Estrutura de Controle Condicional
Composto (Se-Então-Senão), com aplicação da Metodologia de
Desenvolvimento de Algoritmos:
ALGORITMO exemplo do Se-Então-Senão
1 [Início]
2 [Declaração de Variáveis]
IDADE: inteiro
3 [Leitura da Idade]
escreva (“entre com a Idade: ”)
leia(IDADE)
4 [Verificação da idade]
se idade ≥ 18
então escreva (“Maior de Idade !”)
senão escreva (“Menor de Idade !”)
fim-se
5 [Impressão da idade lida]
escreva (“A idade lida foi: “,IDADE)
6 [Fim]
8.5 Comandos Entrada e Saída de Dados
8.5.1 Entrada de Dados
Até aqui nós vimos como atribuir um valor a uma variável dentro de um
programa. Mas este valor foi atribuído pelo próprio programa, não é? Mas
como fazer com que um programa, em um dado momento, receba um valor
digitado pelo usuário? Como receber este dado através do teclado? Como
exibir o resultado de uma operação qualquer no monitor?
Para que nossos algoritmos funcionem, em quase todos os casos
precisaremos de informações que serão fornecidas somente após o algoritmo
pronto, e que sempre estarão mudando de valores, para que nossos algoritmos
recebem estas informações, devemos então construir entradas de dados, pelas
quais o usuário (pessoa que utilizar o programa) poderá fornecer todos os
dados necessários.
A sintaxe do comando de entrada de dados é a seguinte:
leia (variável);
leia ("Entre com o valor de var1 e var 2: ", var1, var2);
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
57
Existem nas linguagens de programação, comandos de entrada e saída
de dados. No caso do algoritmo, estes comandos são os seguintes: Leia
(entrada), Escreva (saída - tela).
Comando LEIA
Leia <variável>;
Ou
Leia (<variável>);
<variável> - Variável que receberá os dados digitados pelo
usuário.
Algoritmo
Declare wnome:literal;
Widade:Inteiro;
Inicio
Leia wnome;
Leia widade;
<seqüência de comandos>;
Fim
A execução do comando LEIA provoca uma pausa na execução do
programa. O programa fica em estado de espera, aguardando a digitação de
algo que deva ser atribuído às variáveis especificadas na sintaxe do comando.
É bom deixar claro que o LEIA, permite um preenchimento por vez. Se
você desejar digitar várias informações referente a mesma variável, terá
que utilizar uma estrutura de repetição (veremos mais adiante) e fazer
com que o fluxo do programa passe pelo mesmo local onde o LEIA está
posicionado
No exemplo acima, veja que o computador aguarda que o usuário digite
dois valores distintos através do teclado. Estes dois valores irão ocupar,
respectivamente, as variáveis NOME e IDADE.
8.5.2 Saída de Dados
Da mesma forma que nosso algoritmo precisa de informações, o usuário
precisa de respostas as suas perguntas, para darmos estas respostas usamos
um comando de saída de dados para informar a resposta.
A sintaxe do comando de saída de dados é a seguinte:
escreva (variável);
escreva (‘cadeia de caracteres’ );
escreva (‘cadeia’, variável);
escreva (número, ‘cadeia’, variável);
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
58
Comando ESCREVA (lista informações no vídeo)
Escreva <string>[, <variável>][, <operação>];
Ou
Escreva (<string>[, <variável>][, <operação>] );
Importante! Pelo menos um dos parâmetros deve ser
informado quando da utilização deste comando.
<string> - Texto que está sendo encaminhado para tela.
<variável> - Qualquer variável utilizada no programa.
<operação> - Algum cálculo executado durante a exibição.
Neste caso o processador realiza a operação de
cálculo e depois libera o resultado para a exibição
na tela.
Por dentro dos termos: string = conjunto de caracteres
dentro de uma mesma variável.
Exemplo:
Algoritmo exemplo;
Declare wnome:Literal;
INICIO
ESCREVA “ NOME ..:”;
LEIA wnome;
ESCREVA "Seu nome é ", NOME;
FIM;
Quando estudamos lógica algorítmica não nos preocupamos em que
coordenada ou posição a informação será exibida, mas sim com o fato de que
deve ser dado o comando de saída dos dados.
No exemplo acima, teremos o conteúdo da variável NOME exibido no
vídeo logo após a mensagem “Seu nome é...”, como mostra a ilustração
abaixo.
NOME ..: Karla Silva
Seu nome é Karla Silva
8.6 Blocos
Delimitam um conjunto de ações com uma função definida; neste caso, um
algoritmo pode ser definido como um bloco.
Exemplo:
início início do algoritmo
seqüência de ações
fim. Fim do bloco (algoritmo)
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
59
CURSO TÉCNICO EM INFORMÁTICA - SUBSEQUENTE – TIS
LINGUAGEM DE PROGRAMAÇÃO
ESTRUTURAS CHAVES DE CONTROLE
CAPÍTULO 9
Professor: Gilson Barbosa Pereira
E-Mail : vinigus@[Link]
Jaguariaíva - 2010
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
60
SUMÁRIO
9 ESTRUTURAS CHAVES DE CONTROLE 3
9.1 Estrutura Seqüencial 3
9.1.1 Exercícios 4
9.2 Estruturas de Decisão e Repetição 4
9.2.1 Decisão Simples 5
[Link] Exercícios 6
9.2.2 Decisão Composta 5
[Link] Exercícios 8
9.2.3 Seleção Múltipla 8
[Link] Exercícios 11
9.3 Estruturas de Repetição ou Iteração 13
9.3.1 Repita ... Até - Estrutura com teste no final 14
[Link] Exercício 15
9.3.2 Enquanto .. Faça - Estrutura com teste no Início 15
[Link] Exercício 16
9.3.3 Para .. Passo - Estrutura com variável de Controle 16
9.3.4 Exercícios 17
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
61
9 ESTRUTURAS CHAVES DE CONTROLE
Existem 3 estruturas básicas de controle nas quais se baseiam os
algoritmos: sequenciação, decisão e repetição. Detalharemos cada uma delas:
9.1 Estrutura Seqüencial
É o conjunto de ações primitivas que serão executadas numa seqüência
linear de cima para baixo e da esquerda para direita, isto é, na mesma ordem
em que foram escritas. Como podemos perceber, todas as ações devem ser
seguidas por um ponto-e-vírgula (;), que objetiva separar uma ação de outra.
Variáveis;
(declaração de variáveis);
início
comando 1;
comando 2;
comando 3;
fim.
Tem-se uma sequenciação de n comandos na qual os comandos serão
executados na ordem em que aparecem, isto é, o comando de ordem i+1 só
será executado após a execução do de ordem i (o 3o só será executado após o
2o).
Todo algoritmo é uma seqüência. A sequenciação é aplicada quando a
solução do problema pode ser decomposta em passos individuais.
Exemplo:
Construa um algoritmo que calcule a média aritmética entre quatro notas
quaisquer fornecidas pelo usuário. Resolvendo através do Método de
Construção de Algoritmos, temos:
[Link] de entrada: quatro notas bimestrais (N1, N2, N3, N4);
[Link] de saída: média aritmética annual;
3.O que devemos fazer para transformar quatro notas bimestrais em uma
média anual?
[Link]: utilizar média aritmética.
5.O que é média aritmética?
[Link]: a soma dos elementos divididos pela quantidade deles. Em nosso
caso particular: (N1 + N2 + N3 + N4)/4;
[Link] o algoritmo:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
62
variáveis (declaração das variáveis)
N1, N2, N3, N4, MA : real;
início (começo do algoritmo)
conheça (N1, N2, N3, N4); {entrada de dados}
Ma := (N1 + N2 + N3 + N4) / 4; {processamento}
escreva (‘A média annual e: ’, MA); {saída de dados}
fim.
9.1.1 Exercícios
[Link] dois números inteiros, achar a média aritmética entre eles.
[Link] dois números inteiros, trocar o conteúdo desses números.
[Link] três notas inteiras e seus pesos, encontrar a média ponderada entre
elas.
[Link] a área de um triângulo reto.
[Link] um algoritmo que tenha como entrada nome, endereço, sexo,
salário. Informe-os.
[Link] um algoritmo que calcule: C = ( A + B ) * B.
[Link]ça um algoritmo que calcule o valor a ser pago em uma residência, que
consumiu uma quantidade X de energia elétrica.
[Link]ça um algoritmo para calcular e imprimir a tabuada.
[Link] a transformação de um valor em dólar, para a moeda corrente do
Brasil.
9.2 Estruturas de Decisão e Repetição
Essa estrutura também é conhecida por estrutura condicional. Há a
subordinação da execução de um ou mais comandos à veracidade de uma
condição, ou seja, uma estrutura de decisão permite a escolha de um grupo de
ações e estruturas a ser executado quando determinadas condições,
representadas por expressões lógicas, são ou não satisfeitas.
Se <condição>
então <seq. de comandos-1>
senão <seq. de comandos-2>
Se a <condição> for verdadeira será executado a <seq. de comandos-1>
e, em caso contrário, teremos a execução da <seq. de comandos-2>.
A decisão deve ser sempre usada quando há a necessidade de testar
alguma condição e em função da mesma tomar uma atitude. Em nosso dia-a-
dia, estamos sempre tomando decisões, vejamos um exemplo:
Se tiver dinheiro suficiente, então vou almoçar em um bom restaurante.
Caso contrário (senão), vou comer um sanduíche na lanchonete da esquina.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
63
9.2.1 Decisão Simples
Se <condição> então
início {bloco verdade}
C; {comando único (ação primitiva)}
fim {bloco}
<condição> é uma expressão lógica, que, quando inspecionada, pode gerar
um resultado falso ou verdadeiro.
Se V, a ação primitiva sob a cláusula será executada; caso contrário,
encerra o comando, neste caso, sem executar nenhum comando.
Exemplo
variáveis
altura1, altura2 : real
início
leia (altura1, altura2);
se altura1 > altura2 então
início
escreva(‘Altura 1 maior’);
fim {se}
fim. {algoritmo}
Outro exemplo:
Imagine um algoritmo que determinado aluno somente estará aprovado
se sua média for maior ou igual a 5.0, veja no exemplo de algoritmo como
ficaria.
SE MEDIA >= 5.0 ENTÃO ALUNO APROVADO
Em diagrama de blocos ficaria assim:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
64
Em Visual Basic:
IF MEDIA >= 5 Then
Text1 = “APROVADO”
ENDIF
[Link] Exercícios
[Link]ça um algoritmo que conheça as quatro notas bimestrais e, informe a
média do aluno e se ele passou; média para aprovação = 6.
[Link]ça três números inteiros, e informe qual é o maior.
[Link] o dobro de um número se este for par, se ímpar encontrar o triplo.
9.2.2 Decisão Composta
A estrutura de decisão “SE/ENTÃO/SENÃO”, funciona exatamente como
a estrutura “SE”, com apenas uma diferença, em “SE” somente podemos
executar comandos caso a condição seja verdadeira, diferente de “SE/SENÃO”
pois sempre um comando será executado independente da condição, ou seja,
caso a condição seja “verdadeira” o comando da condição será executado,
caso contrário o comando da condição “falsa” será executado.
Se <condição> então
início
C;
B;
fim;
senão
início
A;
fim;
Notamos agora que se a condição for satisfeita (Verdadeira), os
comandos C e B serão executados, mas se a condição for falsa, também
podem ser executados comandos, neste caso o comando A entrando no
senão.
Outro exemplo:
Em algoritmo ficaria assim:
SE MÉDIA >= 5.0 ENTÃO
ALUNO APROVADO
SENÃO
ALUNO REPROVADO
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
65
Em diagrama:
Em Visual Basic
IF MEDIA >= 5 Then
Text1 = “APROVADO”
ELSE
Text1 = “REPROVADO”
ENDIF
No exemplo acima está sendo executada uma condição que, se for
verdadeira, executa o comando “APROVADO”, caso contrário executa o
segundo comando “REPROVADO”. Podemos também dentro de uma mesma
condição testar outras condições. Como no exemplo abaixo:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
66
Em Visual Basic:
IF MEDIA >= 5 Then
IF MEDIA >= 7.0 then
Text1 = “Aluno APROVADO”
ELSE
Text1 = “Aluno Necessita fazer outra Avaliação”
ENDIF
ELSE
Text1 = “Aluno REPROVADO”
ENDIF
[Link] Exercícios
[Link] um algoritmo que verifique a validade de uma senha fornecida pelo
usuário. A senha valida deve ser igual a ‘LÓGICA’.
[Link]-se três números, encontrar o maior.
[Link] três números inteiros, colocá-los em ordem crescente.
9.2.3 Seleção Múltipla
A estrutura de decisão CASO/SELECIONE é utilizada para testar, na
condição, uma única expressão, que produz um resultado, ou, então, o valor de
uma variável, em que está armazenado um determinado conteúdo. Compara-
se, então, o resultado obtido no teste com os valores fornecidos em cada
cláusula “Caso”.
Escolha variável
caso valor1 : comando1;
caso valor2 : comando2;
caso valor3 : comando3;
caso valor4 : comando4;
caso contrário comando_F
fimescolha;
Esta estrutura evita que façamos muitos blocos se, quando o teste será
sempre em cima da mesma variável.
Exemplo:
se X = V1 então início
C1;
fim
senão início
se X = V2 então início
C2;
fim;
senão início
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
67
se X = V3 então início
C2;
fim
senão início
se X = V4 então início
C3;
fim
senão início
C4;
fim;
fim;
fim;
fim;
Com a estrutura de escolha múltipla, o algoritmo ficaria da seguinte
maneira:
escolha X
caso V1 : C1;
caso V2 : C2;
caso V3 : C2;
caso V4 : C3;
senão C4;
fimescolha;
No exemplo do diagrama de blocos abaixo, é recebido uma variável “Op”
e testado seu conteúdo, caso uma das condições seja satisfeita, é atribuído
para a variável Titulo a String “Opção X”, caso contrário é atribuído a string
“Opção Errada”:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
68
Em Visual Basic utilizamos a seguinte seqüência de comandos para
representar o diagrama anterior.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
69
TITULO = “”
OP = INPUTBOX(“DIGITE A OPÇÃO”)
SELECT CASE OP
CASE 1
TITULO = “OPÇÃO 1”
CASE 2
TITULO = “OPÇÃO 2”
CASE 3
TITULO = “OPÇÃO 3”
CASE 4
TITULO = “OPÇÃO 4”
CASE 5
TITULO = “OPÇÃO 5”
CASE ELSE
TITULO = “OPÇÃO ERRADA”
END SELECT
[Link] = TITULO
[Link] Exercícios:
[Link] festinha de fim de curso, foi feito um sorteio para distribuir o dinheiro
restante em caixa. Dez pessoas foram sorteadas com direito a tentar a sorte
mais uma vez, da seguinte forma: Deveriam apanhar uma bola numerada de
0 a 9 e conforme o algarismo sorteado o prêmio seria:
Número da Bola Prêmio (% do valor do caixa)
0 05
1 25
2 10
3 07
4 08
5 05
6 15
7 12
8 03
9 10
Faça um algoritmo que calcule o prêmio recebido individualmente por
pessoa.
[Link] dados 3 números positivos, verificar a natureza do triângulo formado,
quanto aos seus ângulos, com estes números como medida dos lados.
[Link] três notas inteiras, encontrar a média aritmética simples entre
as que correspondem a números pares.
[Link] 4 números, colocá-los em ordem crescente.
[Link] o nome e a idade de três pessoas, informar quem é o mais velho e
quem é o mais novo.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
70
[Link] duas medidas, informar a figura geométrica que se forma, sendo que
cada medida corresponde ao tamanho de dois lados paralelos.
[Link] a hora (apenas a hora, sem minutos ou segundos), informar qual a
direção do sol.
[Link] conhecidos os valores de Z e W encontrar:
y = (7x2 - 3x - 8t) / 5(x + 1)
sabendo-se que os valores de x são assim definidos:
se w > 0 ou z < 7
x = (5w + 1) / 3;
t = (5z + 2);
caso contrário
x = (5z + 2);
t = (5w + 1) / 3;
[Link]ão Papo-de-Pescador, homem de bem, comprou um microcomputador
para controlar o rendimento diário de seu trabalho. Toda vez que ele traz um
peso de peixes maior que o estabelecido pelo regulamento de pesca do
estado de São Paulo (50 quilos) deve pagar um multa de R$ 4,00 por quilo
excedente. João precisa que você faça um diagrama de blocos que leia a
variável P (peso de peixes) e verifique se há excesso. Se houver, gravar na
variável E (Excesso) e na variável M o valor da multa que João deverá
pagar. Caso contrário mostrar tais variáveis com o conteúdo ZERO.
[Link] um diagrama de bloco que leia as variáveis C e N, respectivamente
código e número de horas trabalhadas de um operário. E calcule o salário
sabendo-se que ele ganha R$ 10,00 por hora. Quando o número de horas
exceder a 50 calcule o excesso de pagamento armazenando-o na variável E,
caso contrário zerar tal variável. A hora excedente de trabalho vale R$
20,00. No final do processamento imprimir o salário total e o salário
excedente.
[Link] um diagrama que:
Leia 4 (quatro) números;
Calcule o quadrado de cada um;
Se o valor resultante do quadrado do terceiro for >= 1000, imprima-o e
finalize;
Caso contrário, imprima os valores lidos e seus respectivos quadrados.
[Link]ça um diagrama de bloco que leia um número inteiro e mostre uma
mensagem indicando se este número é par ou ímpar, e se é positivo ou
negativo.
13. A Secretaria de Meio Ambiente que controla o índice de poluição mantém 3
grupos de indústrias que são altamente poluentes do meio ambiente. O
índice de poluição aceitável varia de 0,05 até 0,25. Se o índice sobe para 0,3
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
71
as indústrias do 1º grupo são intimadas a suspenderem suas atividades, se
o índice crescer para 0,4 as industrias do 1º e 2º grupo são intimadas a
suspenderem suas atividades, se o índice atingir 0,5 todos os grupos devem
ser notificados a paralisarem suas atividades. Faça um diagrama de bloco
que leia o índice de poluição medido e emita a notificação adequada aos
diferentes grupos de empresas.
[Link] um algoritmo que dada a idade de um nadador classifique-o em
uma dasseguintes categorias:
Infantil A = 5 a 7 anos
Infantil B = 8 a 11 anos
Juvenil A = 12 a 13 anos
Juvenil B = 14 a 17 anos
Adultos = Maiores de 18 anos
[Link] um algoritmo que gera e escreve os números ímpares dos números
lidos entre 100 e 200.
[Link] um algoritmo que leia 500 valores inteiros e positivos e:
Encontre o maior valor
Encontre o menor valor
Calcule a média dos números lidos
9.3 Estruturas de Repetição ou Iteração
Essa estrutura também é conhecida por “looping” ou laço. A repetição
permite que tarefas individuais sejam repetidas um número determinado de
vezes ou tantas vezes quantas uma condição lógica permita. Vejamos alguns
exemplos:
a) vou atirar pedras na vidraça até quebrá-la;
b) baterei cinco pênaltis;
c) enquanto tiver saúde e dinheiro, vou desfrutar a vida.
No exemplo (a), vai-se repetir a ação de atirar pedras na janela até que
seja satisfeita a condição de quebrar a janela.
No exemplo (b), haverá a repetição da atitude de bater um pênalti um
número determinado de vezes (cinco).
No exemplo (c), a condição que me permitirá continuar desfrutando a
vida é ter dinheiro e saúde.
A utilização combinada dessas 3 estruturas descritas vai permitir
expressar, usando qualquer que seja a ferramenta, a solução para uma gama
muito grande de problemas. Todas as linguagens de programação oferecem
representantes dessas estruturas.
Estas estruturas possibilitam que nosso algoritmo seja muito mais
enxuto e fácil de se programar.
Imagine um algoritmo de fatorial de 8:
variáveis
fat : real;
início
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
72
fat := 8 * 7;
fat := fat * 6 ;
fat := fat * 5;
fat := fat * 4;
fat := fat * 3;
fat := fat * 2;
escreva(fat);
fim.
O resultado será o fatorial com certeza mas, imagine se fosse o fatorial
de 250. Ou ainda, o usuário deseja fornecer o número e o algoritmo deve
retornar o fatorial, qual número será digitado? Quantas linhas deverão ser
escritas?
Para isso servem as estruturas de repetição, elas permitem que um
determinado bloco de comandos seja repetido várias vezes, até que uma
condição determinada seja satisfeita. Trabalharemos com modelos de
comandos de repetição:
Enquanto x, processar (Do While ...Loop);
Até que x, processar ... (Do Until ... Loop);
Processar ..., Enquanto x (Do ... Loop While);
Processar ..., Até que x (Do ... Loop Until);
Para ... Até ... Seguinte (For ... To ... Next).
9.3.1 Repita ... Até - Estrutura com teste no final
Esta estrutura faz seu teste de parada após o bloco de comandos, isto é,
o bloco de comandos será repetido, até que a condição seja V. Os comandos
de uma estrutura repita .. até sempre serão executados pelo menos uma vez.
Repita
comando1;
comando2;
comando3;
até <condição>;
Exemplo:
Em diagrama de bloco
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
73
Em Visual Basic
Nr = 0
Do Until Nr = 100
Nr = Nr + 1
Loop
[Link] = Nr
[Link] Exercício
[Link] o algoritmo de cálculo do fatorial com a estrutura Repita .. Até.
9.3.2 Enquanto .. Faça - Estrutura com teste no Início
Esta estrutura faz seu teste de parada antes do bloco de comandos, isto
é, o bloco de comandos será repetido, até que a condição seja F. Os
comandos de uma estrutura enquanto .. faça poderão ser executados uma
vez, várias vezes ou nenhuma vez.
Enquanto < condição > Faça
início
< bloco de comandos >;
fim;
Neste caso, o bloco de operações será executado enquanto a condição
x for verdadeira. O teste da condição será sempre realizado antes de qualquer
operação. Enquanto a condição for verdadeira o processo se repete. Podemos
utilizar essa estrutura para trabalharmos com contadores.
Em diagrama de bloco a estrutura é a seguinte:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
74
Em Visual Basic:
Nr = 0
Do While Nr <= 100
Nr = Nr + 1
Loop
[Link] Exercício
[Link] o algoritmo de cálculo do fatorial com a estrutura Enquanto .. Faça.
9.3.3 Para .. Passo - Estrutura com variável de Controle
Nas estruturas de repetição vistas até agora, acorrem casos em que se
torna difícil determinar quantas vezes o bloco será executado. Sabemos que
ele será executado enquanto uma condição for satisfeita - enquanto..faça, ou
até que uma condição seja satisfeita - repita...até. A estrutura para .. passo
repete a execução do bloco um número definido de vezes, pois ela possui
limites fixos:
Para <variável> := <valor> até <valor> passo N faça
início
< bloco de comandos >;
fim;
9.3.4 Exercícios
[Link] o algoritmo de cálculo do fatorial com a estrutura Para .. Passo.
[Link] o desempenho dos três algoritmos de fatorial feitos e responda qual a
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
75
melhor estrutura a se usar.
[Link] um conjunto de números inteiros, obter a soma e a quantidade de
elementos.
[Link] os N primeiros termos de uma progressão geométrica, onde o
primeiro termo e a razão são conhecidos.
[Link] ao exercício 1, calculando também a soma dos números negativos,
positivos, pares e ímpares.
[Link] o menor entre um conjunto de números inteiros fornecidos um de
cada vez.
7.A conversão de graus Fahrenheit para centígrados é obtida pela fórmula C =
5/9 (F-32). Escreva um algoritmo que calcule e escreva uma tabela de graus
centígrados em função de graus Fahrenheit que variem de 50 a 150 de 1 em
1.
[Link] rainha requisitou os serviços de um monge e disse-lhe que pagaria
qualquer preço. O monge, necessitando de alimentos, indagou à rainha
sobre o pagamento, se poderia ser feito com grãos de trigo dispostos em um
tabuleiro de xadrez, de tal forma que o primeiro quadro deveria conter
apenas um grão e os quadros subseqüentes, o dobro do quadro anterior. A
rainha achou o trabalho barato e pediu que o serviço fosse executado, sem
se dar conta de que seria impossível efetuar o pagamento. Faça um
algoritmo para calcular o número de grão que o monge esperava receber.
[Link] um algoritmo que calcule o valor de H, sendo que ele é determinado
pela série. H = 1/1 + 3/2 + 5/3 + 7/4 + ... + 99/50.
[Link] um algoritmo que determine o valor de S, onde: S = 1/1 - 2/4 + 3/9 -
4/16 + 5/25 - 6/36 ... - 10/100
[Link] uma algoritmo que calcule e escreva a soma dos dez primeiros
termos da seguinte série: 2/500 - 5/450 + 2/400 - 5/350 + ...
[Link] um algoritmo que calcule o valor aproximado de PI utilizando a
fórmula: PI = 3//(H*32), onde: H = 1/1**3 - 1/3**3 + 1/5**3 - 1/7**3 + 1/9**3
- ...
[Link] tem 1,50 metro e cresce 2 cm pôr ano, enquanto Ciclano tem 1,10
metro e cresce 3 cm por ano. Construa um algoritmo que calcule e imprima
quantos anos serão para que Ciclano seja maior que Fulano.
[Link] uma eleição presidencial, existem quatro candidatos. Os votos são i
[Link] através de código. Os dados utilizados para a escrutinagem
obedecem à seguinte codificação:
·1, 2, 3, 4 = voto para os respectivos candidatos;
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
76
·5 = voto nulo;
·6 = voto em branco;
Elabore um algoritmo que calcule e escreva: total de votos para cada
candidato;
·total de votos nulos;
·total de votos em branco;
·percentual dos votos em branco e nulos sobre o total;
·situação do candidato vencedor sobre os outros três, no caso, se ele
obteve ou não mais votos que os outros somados;
Como finalizador do conjunto de votos, tem-se o valor 0.
[Link] o imposto de renda de um grupo de contribuintes considerando que
os dados de cada contribuinte, número do CPF, número de dependentes e
renda mensal são valores fornecidos pelo usuário. Para cada contribuinte
será feito um desconto de 5% de salário mínimo por dependente.
Os valores da alíquota para cálculo do imposto são:
Renda Líquida Alíquota
Até 2 salários mínimos isento
2..3 salários mínimos 5%
3..5 salários mínimos 10%
5..7 salários mínimos 15%
acima de 7 salários mínimos 20%
O último valor, que não será considerado, terá o CPF igual a zero. Deve
ser fornecido o valor atual do salário mínimo.
17 Realizou-se uma pesquisa para determinar o índice de mortalidade infantil
em um certo período. Construa um algoritmo que leia o número de crianças
nascidas no período e, depois, num número indeterminado de vezes, o sexo de
uma criança morta (masculino, feminino) e o número de meses da vida da
criança.
Como finalizador, teremos a palavra “fim” no lugar do sexo da criança.
Determine e imprima:
·a porcentagem de crianças mortas no período;
·a porcentagem de crianças do sexo masculino mortas no período;
·a porcentagem de crianças que viveram dois anos ou menos no período.
18. Suponha que exista um prédio sem limites de andares, ou seja, um prédio
infinito, onde existam três elevadores, denominados A, B e C. Para otimizar
o sistema de controle dos elevadores, foi realizado um levantamento no qual
cada usuário respondia:
o elevador que utilizava com maior freqüencia;
·o andar ao qual se dirigia;
·o período que utilizava o elevador, entre:
·M = matutino;
·V = vespertino;
·N = noturno.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
77
Construa um algoritmo que calcule e imprima:
·qual é o andar mais alto a ser utilizado;
·qual é o elevador mais freqüentado e em que horário se encontra seu maior
fluxo;
·qual o horário mais usado de todos e a que elevador pertence;
·qual a diferença percentual entre o mais usado dos horários e o menos
usado (especificando qual o menos usado);
·qual a percentagem sobre o total de serviços prestados do elevador de
média utilização.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
78
CURSO TÉCNICO EM INFORMÁTICA - SUBSEQUENTE – TIS
LINGUAGEM DE PROGRAMAÇÃO
REFINAMENTOS SUCESSIVOS
CAPÍTULO 10
Professor: Gilson Barbosa Pereira
E-Mail : vinigus@[Link]
Jaguariaíva - 2010
SUMÁRIO
10 REFINAMENTOS SUCESSIVOS 3
10.1Técnicas de Refinamentos Sucessivos (Refinamento “Top-Down”) 3
10.2 Modularização 4
10.2.1 Ferramentas para Modularização 5
10.2.2 Vinculação entre Módulos (Passagem de Parâmetros) 5
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
79
10.2.3 Sintaxe a ser Utilizada na Descrição de Módulos 6
10.3 Recursividade 6
10 REFINAMENTOS SUCESSIVOS
Existem várias técnicas para o desenvolvimento de algoritmos. Dentre
elas, destaca-se a programação estrutura. A Programação Estruturada é um
conjunto de metodologias para o desenvolvimento organizado de software,
buscando obter produtos confiáveis, legíveis, portáveis e flexíveis, de forma a
garantir fácil manutenção. A programação estruturada não elimina a
necessidade de reflexão e entendimento do problema.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
80
As idéias básicas associadas ao desenvolvimento estruturado podem ser
resumidas como segue:
1. Utilização de um número limitado de estruturas de controle (seqüencial,
condicional e de repetição), e;
2. Desenvolvimento de algoritmos utilizando a técnica de refinamentos
sucessivos;
3. Transformação de alguns refinamentos em módulos.
O primeiro item corresponde ao uso das estruturas de controle já
discutidas anteriormente. Pode ser provado que qualquer problema pode ser
resolvido com a aplicação das estruturas seqüencial, condicional e de
repetição. Os demais itens são discutidos nas duas subseções a seguir.
10.1 Técnicas de Refinamentos Sucessivos (Refinamento “Top-Down”)
O segundo item está relacionado ao processo criativo de
desenvolvimento da solução de um problema a partir da decomposição de um
problema em problemas menores e mais simples de serem resolvidos do que o
inicial. A decomposição dos subproblemas deve ser feita até que as soluções
estejam expressas por um conjunto de ações (instruções, operações e
funções) elementares, como as citadas anteriormente.
Os refinamentos sucessivos possibilitam ao desenvolvedor a
preocupação com detalhes conforme o nível do processo de refinamento. Com
este procedimento, o volume de noções a serem manipuladas e entendidas a
cada instante é mantido sob controle, o que facilita o entendimento necessário
para se formular, completa e corretamente, a solução do problema a ser
resolvido. O processo de refinamento sucessivo leva à modularização da
solução.
Um algoritmo é considerado completo se os seus comandos forem do
entendimento do seu destinatário.
Estudos em psicologia mostraram que o ser humano é capaz de resolver
problemas que envolvam 7± 2 variáveis simultaneamente. Então como tratar
problemas com mais que 9 variáveis?
- Regra “áurea” de Dijkstra: dividir para reinar, ou seja, decompor um problema
grande numa série de subproblemas mais simples até chegar a um nível que
pode-se tentar uma solução. Refinamentos sucessivos permitem a redução da
complexidade dos problemas.
Num algoritmo, um comando que não for do entendimento do
destinatário terá que ser desdobrado em novos comandos, que constituirão um
refinamento do comando inicial, e assim sucessivamente, até que os
comandos sejam entendidos pelo destinatário. Por exemplo, o algoritmo para
calcular a média aritmética de dois números pode ser escrito da seguinte
forma:
Algoritmo CALCULA_MÉDIA
Início
Receba os dois números
Calcule a média dos dois números
Exiba o resultado
Fim
Podemos desdobrar o comando “Calcule a média dos dois números” em:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
81
Soma os dois números
Divida o resultado por 2
Após esse refinamento, o algoritmo pode ser considerado completo, a
menos que o destinatário não saiba fazer as operações de adição e divisão, ou
não seja capaz de entender diretamente algum comando.
O algoritmo estando completo podemos reescrevê-lo, inserindo o
refinamento na posição do comando que foi refinado. Assim sendo, obtém-se:
Algoritmo CALCULA_MÉDIA
Início
Receba os dois números
Soma os dois números
Divida o resultado por 2
Exiba o resultado
Fim
Reescrever um algoritmo completo, com os refinamentos sucessivos
inseridos nos seus devidos lugares, permite ter uma visão global de como o
algoritmo deve ser executado.
À medida que o algoritmo passa a ser maior e mais complexo, esta visão
global torna-se menos clara e, neste caso, um algoritmo apresentado com os
refinamentos sucessivos separados oferece uma melhor abordagem para
quem precisar entendê-lo.
10.2 Modularização
O último item está associado à construção de módulos isolados com
funções bem definidas. Um módulo é um grupo de instruções (comandos) que
se constitui em uma função bem definida e o mais independente possível em
relação ao restante do algoritmo. Este método permite que a solução do
problema possa ser desenvolvida por vários programadores de uma equipe, já
que um módulo é “independente” dos demais.
Este procedimento também concorre para o desenvolvimento de um
conjunto de módulos que podem ser reutilizados, já que sua função é
independente do problema original mas contribui para a solução.
A geração de módulos tem por objetivos:
1. Evitar a duplicação de código, ou seja, que uma determinada seqüência
de comandos necessária em vários locais do algoritmo seja repetida em
cada um desses locais;
2. Dividir e estruturar um algoritmo em partes fechadas e logicamente
coerentes;
3. Aumentar a legibilidade do código;
4. Facilitar a documentação do algoritmo.
Em geral, os módulos devem ter um tamanho limitado. Além disso, uma
das características interessantes de módulos é a possibilidade de se definir
estruturas de dados próprias do módulo, necessárias e suficientes para que
estes executem suas tarefas. O uso de dados locais (definidos no escopo do
módulo) que não têm nenhum significado fora do módulo é fator importante
para a reutilização de um módulo criado para resolver um determinado
problema na solução de outros problemas, além de simplificar a manutenção
de softwares.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
82
Sem o uso de dados globais é necessário um mecanismo para o
compartilhamento de informações entre módulos.
A descrição estrutural da modularização pode ser feita por meio de
diagramas hierárquicos. Na Figura 2 são representados seis módulos. O
módulo A aciona os módulos B e C. O módulo B aciona os módulos D, E e F e
o módulo C também aciona o módulo F.
10.2.1 Ferramentas para Modularização
Praticamente todas as linguagens modernas de programação dispõem e
ferramentas básicas de modularização, ou seja, permitem criar e manipular
módulos. Dentre as principais ferramentas pode-se citar as sub-rotinas e as
funções, que serão estudadas no próximo semestre.
10.2.2 Vinculação entre Módulos (Passagem de Parâmetros)
Visto que os módulos correspondem a um conjunto de comandos com
um significado lógico e o mais independente possível dos detalhes do problema
que se deseja resolver é necessário informar a ele com base em que dados a
computação deve ser realizada. Isso pode ser feito transferindo os dados
necessários por meio de passagem de parâmetros, os quais acabam por
vincular os módulos que concorrem para resolver o problema. Os principais
modos de transferência de dados são:
Passagem de parâmetros por valor (parâmetros de entrada): As
alterações efetuadas nos parâmetros formais (veja seção 2.2.3) no
módulo chamado não são propagados para os parâmetros atuais no
módulo que faz a chamada.
Passagem de parâmetros por resultado (parâmetros de saida):
Permite retornar um valor calculado num módulo para o módulo que fez
a chamada.
Passagem de parâmetros por referência (parâmetros de entrada e
saída): Toda alteração dos parâmetros formais passados por referência
para o módulo chamado se reflete nos parâmetros atuais do módulo que
fez a chamada.
10.2.3 Sintaxe a ser Utilizada na Descrição de Módulos
A sintaxe de definição de módulos utilizada nesta disciplina é
apresentada a seguir:
Identificador_módulo(lista de parâmetros formais) : tipo_retorno
inicio
bloco de instruções do módulo
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
83
fim_módulo
Onde:
- Identificador_módulo: nome (identificação) do módulo
- tipo_retorno: indica o tipo do parâmetro de resultado. Se nenhum tipo de
retorno é indicado significa que o módulo não apresenta parâmetro de
resultado.
- Lista de parâmetros formais: parâmetros que permitem a vinculação de
módulos.
Algoritmo 1:
Módulo para o cálculo da média dos elementos de um vetor:
Neste exemplo, A e N são parâmetros (N é passado por valor e o vetor é
passado por referência). O módulo calcula e retorna um valor por meio da
instrução retorna.
10.3 Recursividade
É uma das principais técnicas de projeto de algoritmos. Um
procedimento é recursivo se chama a si mesmo, direta ou indiretamente.
Em geral, o uso da recursividade permite uma descrição mais clara e
concisa de algoritmos, principalmente quando o problema a ser resolvido é
recursivo por natureza ou permite a utilização de estruturas recursivas, tais
como árvores.
Todo processo recursivo deve implementar uma condição de
TERMINAÇÃO. A chamada recursiva a um procedimento P deve estar sujeita a
uma condição B, a qual se torna não satisfeita em algum momento da
computação. Conforme definido por Wirth (1976): (Procedimento será estudado
no próximo semestre)
Onde: C é uma composição de comandos Si (outras instruções) e P(chamada
ao procedimento recursivo).
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
84
Técnica Básica: Definir f(x) tal que:
f(x) <= 0 corresponde à condição de terminação;
f(x) é decrementada a cada iteração,
Onde: x é um conjunto de variáveis do programa.
Simplificação: Associar um parâmetro n para P (por valor) e chamar P
recursivamente com (n-1). Nestas condições a B é substituída por N > 0 :
Algoritmo 2 :
Cálculo do Fatorial:
Algoritmo 3 :
Árvore binária de pesquisa:
Seja a árvore apresentada na figura a seguir. A estrutura de dados pode
ser representada por:
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
85
O seguinte algoritmo permite a realização de pesquisa central na árvore
utilizando um procedimento recursivo. A não indicação do tipo de retorno indica
que este módulo nada retorna.
Para a implementação de um procedimento recursivo o nível mais
profundo deve ser finito e pequeno, pois cada ativação recursiva utiliza uma
parcela de memória para acumular variáveis a cada chamada. Por outro lado,
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
86
para que um procedimento recursivo seja eficiente é importante que se
considere um algoritmo balanceado (o balanceamento também é uma técnica
básica para um bom projeto de algoritmos).
Há situações nas quais, mesmo que o algoritmo seja naturalmente
recursivo, não vale a pena utilizar recursividade. Estas situações ocorrem por
exemplo no caso de recursividade de cauda (procedimentos recursivos com
chamadas ao final do algoritmo), representada como:
Problemas com essa característica podem ser transformados facilmente
em versões não recursivas:
O caso do cálculo do fatorial é um exemplo de recursividade de cauda. A
versão não –recursiva é mais eficiente do que a apresentada anteriormente. O
mesmo vale para o algoritmo para o cálculo da seqüência de Fibonacci.
Algoritmos 4 e 5:
Números de Fibonacci
Os números de Fibonacci têm grande aplicação em Matemática, Teoria
dos Jogos e Ciência da Computação. Sua primeira apresentação se deu por
volta do século XII em um estudo da velocidade de reprodução de coelhos
realizado pelo matemático Fibonacci (Itália). Os números de Fibonacci são
dados pela série:{ 0,1,1,2,3,5,8,13,21,34,55,89, ....}, a qual é representada pela
relação de recorrência:
f0 = 0,
f1 = 1
fn = fn-1 + fn-2 para n ³ 2
O algoritmo recursivo (Algoritmo 4) é apresentado a seguir:
Este algoritmo é ineficiente devido à repetição de cálculos. Isto pode ser
avaliado realizando um acompanhamento do comportamento dinâmico das
chamadas recursivas, por exemplo, para N = 5.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
87
Uma implementação não recursiva é apresentada a seguir (Algoritmo 5).
Note que a legibilidade é menor, mas o algoritmo é muito mais eficiente.
Em geral, evita-se o uso de recursividade quando existe uma solução
óbvia por iteração.
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira
88
2.0 REFERÊNCIAS BIBLIOGRÁFICAS
Lógica de Programação – A Construção de Algoritmos e Estruturas de Dados –
São Paulo: Forbellone, André Luiz Villar - MAKRON, 1993.
Sites na Web: [Link]
SILVA, Joselias Santos da, “Raciocínio Lógico - Para Concursos Públicos”, R & A
Editora, 1999.
Jr, Ademir Mazer, Apostila de Técnicas de Programação I - SENAI - SERVIÇO NACIONAL DE APRENDIZAGEM
INDUSTRIAL , Pota Grossa
CURSO TÉCNICO EM INFORMÁTICA SUBSEQUENTE
Professor: Gilson Barbosa Pereira