You are on page 1of 194

99575-978-85-6875-94-4-UNIASSELVI_tecnicas_programacao.pdf, page 1 @ Preflight ( 9788568075944_UNIASSELVI_tecnicas_programacao.

indd ) - 04:36:52 - August 22, 2014 - PG-1

UNIASSELVI
Tcnicas de
programao

TCNICAS DE PROGRAMAO

ISBN 978-85-68075-94-4

9788568075944_UNIASSELVI_tecnicas_programacao.indd 1 14/07/2014 14:48:59

C M Y K CL ML LB LLB
99575-978-85-6875-94-4-UNOPAR_tecnicas_programacao.pdf, page 1 @ Preflight ( 9788568075944_UNOPAR_tecnicas_programacao.indd ) - 04:36:54 - August 22, 2014 - PG-1

UNOPAR
Tcnicas de
programao

TCNICAS DE PROGRAMAO

ISBN 978-85-68075-94-4

9788568075944_UNOPAR_tecnicas_programacao.indd 1 14/07/2014 14:47:14

C M Y K CL ML LB LLB
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:41 - August 22, 2014 - PG-1

Tcnicas de
programao

Anderson Emdio de Macedo Gonalves


Veronice de Freitas
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:41 - August 22, 2014 - PG-2

2014 by Editora e Distribuidora Educacional S.A.

Todos os direitos reservados. Nenhuma parte desta publicao poder ser reproduzida
ou transmitida de qualquer modo ou por qualquer outro meio, eletrnico ou mecnico,
incluindo fotocpia, gravao ou qualquer outro tipo de sistema de armazenamento e
transmisso de informao, sem prvia autorizao, por escrito, da Editora
e Distribuidora Educacional S.A.

Diretor editorial e de contedo: Roger Trimer


Gerente de produo editorial: Kelly Tavares
Supervisora de produo editorial: Silvana Afonso
Coordenador de produo editorial: Srgio Nascimento
Editor: Casa de Ideias
Editor assistente: Marcos Guimares
Reviso: Mariana David
Capa: Katia Megumi Higashi, Fernanda Caroline de Queiroz Costa
e Mariana Batista de Souza
Diagramao: Casa de Ideias

Dados Internacionais de Catalogao na Publicao (CIP)

Freitas, Veronice de
F866t Tcnicas de programao / Veronice de Freitas,
Anderson Emdio de Macedo Gonalves. Londrina:
Editora e Distribuidora Educacional S.A., 2014.
192 p.

ISBN 978-85-68075-94-4

1. Lgica. 2. Estrutura. I. Gonalves, Anderson Emdio


de Macedo. II. Ttulo.

CDD 005.133
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-3

Sumrio

Unidade 1 Lgica proposicional.................................1


Seo 1 Proposio.............................................................................4
1.1 Classificao de proposies lgicas.....................................................4
1.2 Tabela verdade .....................................................................................6
1.3 Exemplos de proposies......................................................................7
Seo 2 Conectivos...........................................................................10
2.1 Negao ............................................................................................10
2.2 Conjuno..........................................................................................11
2.3 Disjuno...........................................................................................12
2.4 Disjuno exclusiva............................................................................12
2.5 Implicao ou condicional.................................................................13
2.6 Implicacao bicondicional................................................................13
2.7 Exemplos............................................................................................14
Seo 3 Construo da tabela verdade.............................................19
Seo 4 Equivalncias proposicionais...............................................24
4.1 Tautologia, contradio e contingncia...............................................24
4.2 Tautologias..........................................................................................24
4.3 Contradio .......................................................................................25
4.4 Contingncia......................................................................................25
4.5 Equivalncias lgicas..........................................................................26

Unidade 2 Introduo a algoritmos..........................43


Seo 1 Introduo ao desenvolvimento de algoritmos....................46
1.1 Fases para desenvolvimento de algoritmos..........................................46
1.2 Formas de representao de algoritmos...............................................46
1.3 Variveis e tipo de dado......................................................................54
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-4

iv TCNICAS DE PROGRAMAO

Seo 2 Instrues primitivas ...........................................................62


2.1 Comandos de atribuio.....................................................................62
2.2 Comandos de sada de dados (escreva)...............................................62
2.3 Comando de entrada de dado (leia)....................................................63
Seo 3 Tipos de operadores ............................................................67
3.1 Operadores aritmticos ......................................................................67
3.2 Operadores relacionais ......................................................................68
3.3 Operadores lgicos ............................................................................68
Seo 4 Estrutura sequencial.............................................................72
4.1 Estrutura sequencial exemplo (pseudocdigo e fluxograma)...........72
4.2 Estrutura sequencial exemplo (simulao teste de mesa)............74
4.3 Estrutura sequencial exemplo (resoluo).......................................75

Unidade 3 Estrutura de controle..............................89


Seo 1 Estrutura condicional...........................................................92
1.1 Estrutura condicional simples.........................................................92
1.2 Estrutura condicional composta se-ento-seno.............................93
1.3 Estrutura condicional encadeada........................................................97
Seo 2 Estrutura caso....................................................................102
2.1 Exemplos de algoritmos mltipla escolha.....................................102
Seo 3 Lao enquanto (while) ......................................................105
3.1 Variveis contadoras e acumuladoras................................................105
3.2 Exemplos pseudocdigo simulao.........................................107
3.3 Exemplos enquanto / faa (pseudocdigo)....................................109
Seo 4 Repetio com teste no final.............................................114
4.1 Exemplo repita / at (pseudocdigo / simulao)............................... 114
4.2 Exemplo pseudocdigo................................................................115
Seo 5 Repetio incondicional nmero predefinido
de repeties.....................................................................118
5.1 Exemplos para / fimpara (pseudocdigo / simulao)...................118
5.2 Exemplo para / para (pseudocdigo).............................................120
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-5

S u m r i o v

Unidade 4 Estrutura de dados homognea


e heterognea.......................................137
Seo 1 Matrizes de uma dimenso ou vetores...............................141
1.1 Delarao de matriz unidimencional ...............................................141
1.2 Atribuio de uma matriz do tipo vetor.............................................142
1.3 Leitura de dados de uma matriz do tipo vetor...................................142
1.4 Escrita de dados de uma matriz do tipo vetor....................................143
1.5 Exemplo de algoritmos .....................................................................144
Seo 2 Estrutura de dados homognea (matrizes).........................150
2.1 Representao dos ndices de uma matriz bidimencional.................150
2.2 Delarao de matriz bidimencional .................................................151
2.3 Atribuio de uma matriz de duas dimenses...................................151
2.4 Leitura de dados de uma matriz de duas dimenses..........................152
2.5 Apresentando dados de uma matriz de duas dimenses....................153
2.6 Estrutura homognea em C#.............................................................160
Seo 3 Estrutura de dados heterogneas (registros).......................167
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-6
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-7

Apresentao

Um algoritmo uma sequencia de instrues finita e ordenada de forma lgica


para a resoluo de uma determinada tarefa ou problema. Como exemplo pos-
svel citar os algoritmos das operaes bsicas (adio, multiplicao, diviso e
subtrao). At mesmo as coisas mais simples podem ser descritas por sequncias
lgicas. Por exemplo:
Uma dona de casa: preparar um bolo.
Um motorista: trocar um pneu furado.
Um matemtico: resolver uma equao.
Os algoritmos podem ser representados de vrias formas, como:
Atravs de uma lngua (portugus, ingls, etc.): forma utilizada nos manuais
de instrues, nas receitas culinrias, bulas de medicamentos etc.
Atravs de uma linguagem de programao (Pascal, C, Delphi etc.): esta forma
utilizada por alguns programadores experientes, que pulam a etapa do
projeto do programa (algoritmo) e passam direto para a programao em si;
Atravs de representaes grficas: so indicados para elaborao de algo-
ritmos na fase inicial de programao. considerado de fcil compreenso,
j que so representados em forma de desenho (diagrama, fluxograma).
Cada uma dessas formas de representar um algoritmo tem suas vantagens e
desvantagens, cabe pessoa escolher a forma que melhor lhe convir. Neste livro,
sero apresentadas trs formas de representao de algoritmos, so elas:
Narrativa (forma descritiva);
Fluxograma (diagrama de fluxo);
Portugus Estruturado (Pseudocdigo, Portugol ou Pseudolinguagem).
comum que professores da rea de computao observem a grande dificul-
dade que seus alunos tm em formalizar o raciocnio. Seu aprendizado requer o
aprendizado dos fundamentos da lgica. Por esse motivo, optamos por iniciar o
livro com uma exposio da lgica matemtica, apresentando uma introduo
lgica proposicional.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-8

viii TCNICAS DE PROGRAMAO

Na metodologia adotada, busca-se, por meio da narrativa do livro, introduzir o lei-


tor ao contexto do desenvolvimento de algoritmos de forma que ele v se habituando
a este meio, dominando gradualmente os conceitos que envolvem a complexidade
dessa disciplina.
Com este intuito, na Unidade 1, so abordados conceitos relacionados lgica
matemtica. Essa abordagem contempla o estudo das sentenas declarativas, tam-
bm conhecidas como proposies, e tem o objetivo de elaborar procedimentos que
permitam obter um raciocnio correto na investigao da verdade, distinguindo os
argumentos vlidos daqueles que no o so. Essa lgica tem sido utilizada em todas
as reas das cincias exatas, biolgicas e humanas. Nessa unidade sero abordados
conceitos bsicos de raciocnio lgico: proposies, valores lgicos das proposies,
nmero de linhas da tabela verdade, conectivos, proposies simples e proposies
compostas.
Na Unidade 2, iniciam-se os estudos dos conceitos relacionados programao,
que a arte de fazer com que o computador faa exatamente o que desejamos que
ele faa. Dessa forma, programar criar uma rotina para que, seguindo uma lgica,
possamos alcanar a resoluo de um problema computacional. Nessa unidade so
apresentadas trs formas de representao de algoritmos: narrativa, fluxograma e
pseudocdigo. Alm de conceitos de variveis, tipos de dados, instrues primitivas
e algoritmos sequenciais.
Na Unidade 3 apresentado outro grupo de estrutura: as estruturas de controle
condicional e as estruturas de controle de repetio. A estrutura Condicional possi-
bilita a escolha de um grupo de aes e estruturas a serem executadas quando deter-
minadas condies so ou no satisfeitas. A Estrutura Condicional pode sersimples,
composta ou encadeada. Em relao s estruturas de repetio, o objetivo executar
uma instruo (ou conjunto de instrues) repetidas vezes, enquanto (ou at que)
uma dada condio seja satisfeita. Sero abordados trs tipos de repetio: com teste
condicional no incio, com teste condicional no final e com varivel de controle.
Na Unidade 4, so includas as estruturas de dados homogneas e heterogneas.
At esta unidade foram utilizados tipos de dados bsicos, com variveis simples:
real, inteiro, literal, caractere e lgico. Nessa unidade sero apresentadas situaes
em que os tipos de dados bsicos no so suficientes para resolver os problemas.
As estruturas homogneas podem ser classificadas como vetores (unidimensionais) e
matrizes (bidimensionais). Nesse tipo de estrutura possvel armazenar um conjunto
de informaes de um mesmo tipo em uma nica varivel. Para casos que necessitam
de vrios dados com tipos diferentes dentro de uma mesma estrutura sero utilizadas
as estruturas heterogneas (registros).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-9

Unidade 1
Lgica proposicional
Anderson Emdio de Macedo Gonalves
Veronice de Freitas

Objetivos de aprendizagem: A lgica matemtica (ou lgica simb-


lica) trata do estudo das sentenas declarativas tambm conhecidas
como proposies, as quais devem satisfazer aos dois princpios funda-
mentais seguintes: Princpio do terceiro excludo uma proposio s
pode ser verdadeira ou falsa, no havendo outra alternativa. Princpio
da no contradio uma proposio no pode ser ao mesmo tempo
verdadeira e falsa. O objetivo desta unidade abordar os conceitos
de proposio, proposio simples e composta, conectivos lgicos e
tabelas verdade.

Seo 1: Proposies
Todo conjunto de palavras ou smbolos que exprimem
um pensamento de sentido completo. As proposies
podem ser classificadas em simples ou atmicas e com-
postas ou moleculares. Chama-se proposio simples ou
proposio atmica aquela que no contm nenhuma
outra proposio como parte integrante de si mesma.
As proposies simples so geralmente designadas pe-
las letras latinas minsculas p, q, r, s ..., chamadas letras
proposicionais.As proposio composta ou proposio
molecular aquela formada pela combinao de duas
ou mais proposies. As proposies compostas so ha-
bitualmente designadas pelas letras latinas P, Q, R, S...,
tambm chamadas de letras proposicionais.Estas pro-
posies so unidas por conectivos: e, ou, se ...
ento, se e somente se etc.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-10

Seo 2: Conectivos
Conectivos lgicos so palavras que usamos para
formar novas proposies a partir de outras exis-
tentes. As proposies compostas so formadas
por proposies simples interligadas por conectivo.
Usando conectivos, possvel criar proposies maio-
res (ditas compostas) a partir de menores, de modo
que o valor da proposio obtida dependa apenas do
valor das proposies iniciais. Os principais conectivos
lgicos so: no; e; ou; se ... ento, e se e somente
se, simbolizados respectivamente por: , , , , .

Seo 3: Construo da tabela verdade


Com o emprego das tabelas verdade das operaes
lgicas fundamentais ~p, p ^ q, p v q, p q, p q,
possvel construir a tabela verdade correspondente
a qualquer proposio composta dada. O nmero de
linhas da tabela verdade de uma proposio com-
posta depende do nmero de proposies simples
que a integram. E deve ser calculado utilizando a
potncia: 2n, sendo n o nmero de proposies
simples.

Seo 4: Equivalncias proposicionais


Se duas proposies compostas possuem os mesmos
valores verdade, ento elas so equivalentes. Isso
permite, por exemplo, que se substitua uma propo-
sio composta por outra equivalente na constru-
o de argumentos matemticos. Uma proposio
composta que sempre verdadeira, independente
dos valores verdade de suas proposies, chamada
de tautologia. Uma proposio composta que
sempre falsa, independente dos valores verdade de
suas proposies, chamada de contradio. Uma
proposio composta que no nem tautologia,
nem contradio, chamada de contingncia.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-11

Lgica proposicional 3

Introduo ao estudo
Em lgica e matemtica, umalgica proposicional(ou clculo sentencial) umsis-
tema formalno qual as frmulas representamproposiesque podem ser formadas
pela combinao de proposies atmicas usandoconectivos lgicose um sistema
deregras de derivao, que permite que certas frmulas sejam estabelecidas como
teoremas do sistema formal. As proposies so sentena declarativa com valores
verdadeiro ou falso. Por exemplo: Maria gosta de Joo e de Pedro; Todos os seres
humanos tm uma me; Cinco maior que quatro.
As proposies transmitem pensamentos, isto , afirmam fatos ou exprimem juzos
que formamos a respeito de determinados entes. Exemplos:
O Japo est situado no continente africano.
A lmpada da sala est acesa.
A cidade de Recife a capital de Pernambuco.

Na linguagem natural nos acostumamos com vrios tipos de proposies ou


sentenas (JNIOR, 2013):
a) Declarativas
Mrcio engenheiro.
Todos os homens so mortais.
b) Interrogativas
Ser que o Roberto vai ao cinema hoje?
Quantos alunos faltaram hoje aula de lgica?
O Brasil ganhar a copa do mundo de 2006?
c) Exclamativas
Feliz Natal!
Vencemos!
Passamos no vestibular!
d) Imperativas
No falte as aulas de lgica.
Feche a porta.
Fique calado.
Estudaremos somente as proposies declarativas, pois elas podem ser facilmente
classificadas em verdadeiras ou falsas.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-12

4 TCNICAS DE PROGRAMAO

Seo 1 Proposio
Sentena declarativa afirmativa sobre a qual tenha sentido afirmar que seja
verdadeira ou falsa. Ou seja, conjunto de palavras ou smbolos que exprimem um
pensamento de sentido completo.
Exemplos:
A Lua um satlite da Terra. (V)
A copa do mundo em 2014 ser realizada na Alemanha. (F)
Recife a capital de Pernambuco. (V)
3/5 um nmero inteiro. (F)
3 2 = 9 (V)
Princpios ou axiomas: a lgica matemtica adota, como regras fundamentais do
pensamento, os dois seguintes princpios (GENEROSO, 2013):
Princpio da no negao: uma proposio no pode ser verdadeira ou falsa
ao mesmo tempo.
Princpio do terceiro excludo: toda proposio ou verdadeira ou falsa, isto
, verifica-se sempre um destes casos e nunca um terceiro.
Quando pensamos, efetuamos muitas vezes certas operaes sobre proposies,
chamadas de operaes lgicas. Estas obedecem a regras de um clculo, denominado
CLCULO PROPOSICIONAL. A linguagem de um clculo proposicional consiste em:
um conjunto de smbolos primitivos, definidos comofrmulas atmicas, pro-
posies atmicas, ou variveis; e
um conjunto de operadores, interpretados comooperadores lgicosouconec-
tivos lgicos.

1.1 Classificao de proposies lgicas


As proposies lgicas podem ser classificadas em dois tipos: simples e compostas.

1.1.1 Proposies simples ou atmicas


Proposies simples (unitrias) so aquelas que no esto acompanhadas de
outras proposies.
Exemplos:
Pedro estudante.
A Lua um satlite da Terra.
Aristteles era grego.
O nmero 25 quadrado perfeito.
Eu estudo Lgica.
Lgica no difcil.
Pedro lvares Cabral descobriu o Brasil.
A Beija-Flor foi a escola de samba campe no carnaval do Rio em 2008.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-13

Lgica proposicional 5

Alm das proposies, a Lgica dispe de uma funo, chamada de valor l-


gico, que associa a cada proposio simples um de dois valores lgico, chamado
verdadeiro (representado por V) ou falso (representado por F). Geralmente, o
valor lgico V ou F associado proposio, em consonncia com o significado
da proposio no mundo real, embora isso no seja essencial (PINHO, 1999). Com
esse sentido, podemos dizer que as proposies: A Lua o satlite da Terra, Pedro
lvares Cabral descobriu o Brasil so verdadeiras, isto e, assumem o valor lgico V,
e que as proposies: Dante escreveu Os Lusadas, O Brasil uma monarquia
so claramente falsas e, portanto, assumem o valor lgico F.
As proposies simples so designadas pelas letras latinas minsculas p, q, r, s...,
chamadas letras proposicionais.
Exemplos:
p: Minha casa grande
q: Seus olhos so azuis.
r: Est calor.

1.1.2 Proposies compostas ou moleculares


As proposies compostas so obtidas combinando proposies simples por meio
de certos termos chamados de conectivos. A Lgica dispe de cinco conectivos: e,
ou, no, se ento, e se e somente se. Utilizando esses conectivos podemos
construir as seguintes proposies compostas:
Exemplos:
O nmero 6 par e o nmero 8 cubo perfeito.
Joo magro e Jos alto.
Carlos farmacutico e Pedro estudante.
Mrio foi ao cinema, Joo foi ao teatro e Marcelo ficou em casa.
Maria foi praia ou ao mercado.
O programa bom e a internet lenta.
Mrio foi ao cinema ou Marcelo ficou em casa.

So designadas pelas letras latinas maisculas P, Q, R, S..., chamadas de letras


proposicionais.
Exemplos:
P: Minha casa grande e meu carro azul.
Q: Seus olhos so azuis ou verdes.
R: Se est calor, ento vero.

Tambm so chamadas de frmulas proposicionais ou frmulas.


Notao: P(q, r, s) significa que P uma proposio composta das proposies
atmicas q, r e s.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-14

6 TCNICAS DE PROGRAMAO

Em geral, de acordo com Pinho (1999), as proposies simples so constitudas


por um sujeito, um verbo, e seus complementos. Proposies como se no cho-
ver, vou praia, ou vou aprender a dirigir e comprar um carro so chamadas de
proposies compostas, e so o resultado de operaes sobre proposies simples.

1.2 Tabela verdade


Uma tabela verdade uma tabela que contm as proposies nas colunas, e as
possibilidades de valores verdade nas linhas. comum expressar os resultados de
uma proposio composta por meio de tabelas verdade, que permitem analisar seus
valores verdade.
As proposies podem ser avaliadas como verdadeiras (V) ou falsas (F). Por exemplo:

Quadro 1.1 Avaliando as proposies

Todo chumbo metal (V)


Todo metal corpo (V)
Todo chumbo corpo (V)
Todo corpo um metal (F)
Fonte: Do autor (2014).

A quantidade de linhas de uma tabela verdade determinada por 2n, onde n o n-


mero de proposies simples (termos) que compem a proposio composta (frmula).

Quadro 1.2 Tabela das possveis combinaes das proposies

p: Joo competente. p q
q: Maria bonita. V V
A tabela ao lado representa todas as possveis combina- V F
es entre os valores lgicos (verdadeiros ou falsos) das
proposies p e q. A partir dela, possvel utilizar F V
diversos operadores para unir as duas proposies. F F

Fonte: Do autor (2014).

Na Seo 3, exemplificado o processo para construir a tabela verdade.


99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-15

Lgica proposicional 7

1.3 Exemplos de proposies

Uma proposio uma sentena declarativa que admite um e somente um


dos dois valores lgicos Verdadeiro ou Falso.

Observe alguns exemplos de proposies:


Curitiba a capital do Paran.
uma proposio cujo valor lgico verdadeiro.
Todos os animais so mamferos.
uma proposio cujo valor lgico falso.
Quero mais caf!
Traduz um desejo. Logo, no uma proposio e, portanto, no possvel atribuir
um valor lgico.
5+3=8
uma proposio cujo valor lgico verdadeiro.
4>6
uma proposio cujo valor lgico falso.
83
No uma proposio. No se pode atribuir um valor lgico a sentena.
Y>4
No uma proposio, pois no possvel verificar a veracidade, uma vez que
no se conhece o valor da varivel Y. Trata-se de uma sentena aberta.
Ele mdico.
No uma proposio, pois a palavra ele no esclarece de quem se fala e,
portanto, no se pode atribuir o valor lgico declarao.
Maria fisioterapeuta.
uma proposio, pois declara especificadamente a profisso da Maria.
Voc gosta de melo?
Trata-se de uma sentena interrogativa. Logo, no uma proposio, pois no
pode ser classificada em verdadeira ou falsa.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-16

8 TCNICAS DE PROGRAMAO

Atividades de aprendizagem
1. Quais das sentenas abaixo so proposies?
a) A lua feita de queijo verde.
b) Dois um nmero primo.
c) O jogo vai acabar logo?
d) X 2 4 = 0.
2. Determinar o valor lgico de cada uma das seguintes proposies:
a) Tiradentes morreu afogado.
b) As diagonais de um paralelogramo so iguais.
c) O nmero 125 cubo perfeito.
d) O produto de dois nmeros mpares um nmero mpar.
3. Determinar o valor lgico ( V ou F ) de cada uma das seguintes proposies.
a) Goinia a capital de Tocantins.
b) O nmero 25 quadrado perfeito.
c) Todo nmero divisvel por 5 termina com 5.
4. Determine se as proposies so Simples (S) ou Compostas (C):
a) Maria estuda e trabalha.
b) Mrio feio.
c) 3 um nmero mpar.
d) Mrcia jogadora ou estudante.
e) Paulo rico e feliz.
f) 32 mltiplo de 4.
g) Paris a capital da Frana.
h) Pedro estudioso e Maria bonita.
i) Celso pobre ento infeliz.
j) Joo velho.
k) Ou Carla vai festa ou fica em casa.
l) 13 nmero e primo.
5. Marque as sentenas abaixo que so proposies, simples ou compostas.
Para as sentenas que no so proposies, explique porque no o so:
a) Joo alto.
b) Ela bonita.
c) A casa pequena.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-17

Lgica proposicional 9

d) Quem est batendo porta?


e) Talvez eu v ao teatro.
f) 2 + 2 = 4.
g) x + y = 8.
h) O planeta Marte habitado.
i) Possivelmente chover hoje.

Para saber mais


Introduo lgica matemtica
<http://www.fernandozaidan.com.br/pit-grad/2011/MC/Aulas/Aula%201-%20Logica%20
Matematica.pdf>.
Casa do concurso
<http://concursos.acasadoconcurseiro.com.br/wp-content/uploads/2011/05/Apostila_
Secretaria_da_Saude_Raciocinio_Logico_Edgar_Abreu_2.pdf>.
Mtodo dinmico de ensino
<http://equipe-exclusiva.com.br/downloads/raciocinio_logico.pdf>. Acessos em: 7 jun. 2014.

Questes para reflexo


Toda frase a que voc consiga atribuir um valor lgico preposio, ou seja,
frases que podem ser VERDADEIRAS OU FALSAS.
Por exemplo:
Pedro Feliz.
Carlos Estuda.
Obs.: analise as frases a seguir: elas so proposies?
Que preguia!
Quanto falta para as onze horas?
Independncia ou morte!
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-18

10 TCNICAS DE PROGRAMAO

Seo 2 Conectivos
Em Lgica Simblica, a ao de combinar proposies chamada operao,
e os conectivos so chamados operadores, e so representados por smbolos es-
pecficos; apresentamos a seguir as cinco operaes lgicas, com seus respectivos
conectivos e smbolos:

Quadro 1.3 Conectivos e smbolos

Operao Conectivo Smbolo Exemplo


Conjuno E pq Joo ator e Alagoano.
Disjuno Ou pq Irei ao cinema ou praia.
Ou Tiago mdico ou dentista,
Disjuno exclusiva Xor pq
mas no ambos.
Negao No ou ~ ~p No est chovendo
Condicional se ... ento pq Se chove, ento faz frio.
Bicondicional se e somente se pq Vivo se e somente se sou feliz.
Fonte: Do autor (2014).

Quando a precedncia no estiver explicitada atravs de parnteses, a seguinte


ordem de precedncia deve ser utilizada:

Quadro 1.4 Precedncia / Exemplos

Operador Precedncia Exemplos Interpretao


1 pqr p(qr)
2 pqrz (pq)(rz)
3 pqrz (p(qr))z
4
5
Fonte: Do autor (2014).

Exemplo: A expresso p q r significa p (q r) e no (p q) r.

2.1 Negao
Chama-se de negao de uma proposio p a proposio representada por ~p
(no p) cujo valor lgico verdadeiro (V) quando p falsa e falso (F) quando p
verdadeiro. A negao tambm pode ser representada por : . Simbolicamente:
~ p = no p.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-19

Lgica proposicional 11

Quadro 1.5 Negao (~) e sua tabela da verdade

p ~p
V F
F V
Fonte: Do autor (2014).

Para uma proposio p, podemos formar a sua negao de qualquer um dos se-
guintes modos (JNIOR, 2013):
no verdade que p
falso que p
no em p

Exemplo:
p: Ldia estudiosa.
~p: No verdade que Ldia estudiosa.
~p: falso que Ldia estudiosa.
~p: Ldia no estudiosa.

p: Joo no foi ao cinema.


~p: falso que Joo no foi ao cinema.

p: Matemtica discreta fundamental para Cincia da Computao.


~p: Matemtica discreta no fundamental para Cincia da Computao.

p: Hoje Quarta.
~p: Hoje no Quarta.

2.2 Conjuno
Chama-se conjuno de duas proposies p e q a proposio representada por p e
q cujo valor lgico verdadeiro quando ambas as proposies p e q so verdadeiras
e falsas nos demais casos. Simbolicamente: p q = p e q.

Quadro 1.6 Conjuno () e sua tabela da verdade

p Q pq
V V V
V F F
F V F
F F F
Fonte: Do autor (2014).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:42 - August 22, 2014 - PG-20

12 TCNICAS DE PROGRAMAO

Exemplo 1:
p: Braslia a capital do Brasil.
q: Hoje sexta-feira.
p q: Braslia a capital do Brasil e hoje sexta-feira.
Exemplo 2:
p: Hoje sexta.
q: Est chovendo hoje.
p ^: Hoje sexta e est chovendo hoje.

2.3 Disjuno
Chama-se disjuno de duas proposies p e q a proposio representada por
p ou q cujo valor lgico verdadeiro quando ao menos uma das proposies p e
q verdadeira e falso quando ambas as preposies so falsas. Simbolicamente:
p q = p ou q.

Quadro 1.7 Disjuno () e sua tabela da verdade

p Q pq
V V V
V F V
F V V
F F F
Fonte: Do autor (2014).

Exemplo:
p: Ele cursar Clculo.
q: Ele cursar lgebra linear.
p q: Ele cursar Calculo ou lgebra linear.

Exemplo:
p: Braslia a capital do Brasil.
q: Hoje sexta feira.
p v q: Braslia a capital do Brasil ou hoje sexta-feira.

2.4 Disjuno exclusiva


Chama-se disjuno exclusiva de duas proposies p e q a proposio repre-
sentada por p ou q, mas no ambas, cujo valor lgico verdadeiro (V) quando as
proposies p e q tm valores lgicos diferentes. Simbolicamente: p q = p ou q,
mas no ambos.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-21

Lgica proposicional 13

Quadro 1.8 Disjuno exclusiva (v) e sua tabela da verdade

p Q pvq
V V F
V F V
F V V
F F F
Fonte: Do autor (2014).

Exemplo: O novo aluno nasceu no Brasil ou na Argentina. Note que a sentena


verdadeira somente quando o aluno for brasileiro ou argentino, mas no os dois,
pois no possvel algum nascer em dois pases ao mesmo tempo.

2.5 Implicao ou condicional


Chama-se condicional de duas proposies p e q a proposio cujo valor lgico
falso (F) se a proposio p verdadeira e q falsa, e verdadeira nos demais casos.
Simbolicamente: p q = se p ento q.

Quadro 1.9 Tabela verdade: Condicional ()

p Q pq
V V V
V F F
F V V
F F V
Fonte: Do autor (2014).

Exemplo 7: Se ele for eleito, aumentar o salrio mnimo.


Exemplo:
p: NONONO eleito.
q: NONONO vai reduzir os impostos.
p q: Se NONONO for eleito, ento NONONO vai reduzir os impostos.

2.6 Implicacao bicondicional


Chama-se proposio bicondicional uma proposio cujo valor lgico verda-
deiro (V) quando p e q so ambas verdadeiras ou ambas falsas, e falsa (F) nos demais
casos. Simbolicamente: p q = p se e somente se q.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-22

14 TCNICAS DE PROGRAMAO

Quadro 1.10 Tabela verdade: bicondicional ()

p Q pq
V V V
V F F
F V F
F F V
Fonte: Do autor (2014).

Exemplo: Voc pode entrar na faculdade se e somente se for aprovado no


vestibular.

2.7 Exemplos
O Quadro 1.11 representa vrias formas juntamente com a interpretao e seu
correspondente valor lgico.

Quadro 1.11 Exemplos

Frmula Fatos Interpretao Valor lgico


P P: Chove em Lisboa V V
P P: Chove em Lisboa V F
P: Chove em Lisboa V
PQ V
Q: Faz sol em Coimbra V
P: Chove em Lisboa F
PQ F
Q: Faz sol em Coimbra V
P: Chove em Lisboa F
PQ V
Q: Faz sol em Coimbra V
P: Chove em Lisboa F
PQ F
Q: Faz sol em Coimbra F
P: Choveu V
PQ V
Q: O piso est molhado V
P: Choveu V
PQ F
Q: O piso est molhado F
P: Choveu F
PQ V
Q: O piso est molhado V
P: Choveu F
PQ V
Q: O piso est molhado F
P: Joo irmo de Pedro V
PQ V
Q: Pedro irmo de Joo V
P: Joo irmo de Pedro V
PQ F
Q: Pedro irmo de Joo F
P: Joo irmo de Pedro F
PQ V
Q: Pedro irmo de Joo F
Fonte: Reis (2013).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-23

L g i c a p r o p o s i c i o n a l 15

Para saber mais


Faculdades Pitgoras de Uberlndia Sistemas de Informao
Prof. Walteno Martins Parreira Jnior
Lgica matemtica e computacional
<http://www.waltenomartins.com.br/lmc_apo.pdf>.
Os fundamentos: lgica e demonstraes
<http://www.mat.ufmg.br/~michel/inicmat2010/livros/Rosen1.pdf>. Acessos em: 7 jun. 2014.

Atividades de aprendizagem
1. D a negao das seguintes proposies:
a) O processador rpido, mas a impressora lenta.
b) O processador rpido ou a impressora lenta.
c) Pepinos so verdes e no tm sementes.
d) A comida boa ou o servio excelente.
e) Nem a comida boa nem o servio excelente.
2. D o valor verdade das proposies abaixo:
a) Se a Lua um satlite ento a terra um planeta.
b) Um corpo celeste no um satlite se gira em torno de um planeta.
c) Se Lilo um gato, ento tem quatro patas. (considere que existe um
gato chamado Lilo).
d) Se a Terra uma estrela ento a Lua um planeta.
3. D o valor verdade das seguintes proposies:
a) Amarelo ser preto se, e somente se, vermelho for branco.
b) 3 + 4 = 7 se e somente se 8 x 5 = 50.
c) 1 + 1 = 4 se, e somente se, 7 + 3 = 10.
d) Azul no verde se, e somente se, preto for lils.
e) No verdade que 1 + 1 = 3 se, e somente se, 2 + 2 = 5.
4. Sejam as proposies:
p: Marcos alto e q: Marcos elegante.
Traduzir para a linguagem simblica as proposies abaixo:
a) Marcos alto e elegante.
b) Marcos alto, mas no elegante.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-24

16 TCNICAS DE PROGRAMAO

c) No verdade que Marcos baixo ou elegante.


d) Marcos no nem alto e nem elegante.
e) Marcos alto ou baixo e elegante.
5. Sejam as proposies p e q, traduzir para a linguagem simblica as seguin-
tes proposies:
a) Carlos alto e elegante.
b) Carlos alto, mas no elegante.
c) No verdade que Carlos baixo ou elegante.
d) Carlos no nem alto e nem elegante.
e) Carlos alto ou baixo e elegante.
f) falso que Carlos baixo ou que no elegante.
6. Sejam as proposies p e q, traduzir para a linguagem simblica as seguin-
tes proposies
p: Paula rica e q: Paula feliz.
a) Paula pobre, mas feliz.
b) Paula rica ou infeliz.
c) Paula pobre e infeliz.
d) Paulo pobre ou rica, mas infeliz.
7. Sejam as proposies p e q, traduzir para a linguagem simblica as seguin-
tes proposies:
p: Felipe fala francs e q: Felipe fala ingls e r: Felipe fala alemo.
a) Felipe fala francs ou ingls, mas no fala alemo.
b) Felipe fala francs e ingls, ou no fala francs e alemo.
c) falso que Felipe fala francs, mas que no fala alemo.
d) falso que Felipe fala ingls ou alemo, mas que no fala francs.
8. Sejam as proposies p e q, traduzir para a linguagem corrente as seguintes
proposies:
p: Est frio e q: Est chovendo.

a) ~p d) q p g) ~p ^ ~q
b) p ^ q e) p ~q h) p ~q
c) p v q f) p v ~q i) p ^ ~q p
9. Sejam as proposies p e q, traduzir para a linguagem corrente as seguintes
proposies:
p: Eduardo rico e q: Murilo feliz.
a) q p c) q ~p e) ~p ^ q p
b) p v ~q d) ~p q
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-25

L g i c a p r o p o s i c i o n a l 17

10. Sejam as proposies p e q, traduzir para a linguagem corrente as seguintes


proposies:
p: Roberto fala ingls e q: Roberto fala alemo.
a) q v p c) p ^ ~q e) ~(~p ^ ~q)
b) p ^ q d) ~p ^ ~q
11. Sejam as proposies p e q, traduzir para a linguagem corrente as seguintes
proposies:
p: Matheus gacho e q: Thiago paulista.
a) ~(~p ^ ~q) c) p ~q
b) ~(~p v ~q) d) ~p ~q
12. Sejam as seguintes proposies simples:
p: Tiradentes morreu afogado e q: Jaime gacho.
Traduzir para linguagem natural, as seguintes proposies compostas:
a) p q
b) p q
c) ~p q
13. Sejam as proposies:
p: Joo joga futebol. q: Pedro joga tnis.
Traduzir as frmulas lgicas para o portugus.
a) p q c) p ~q e) ~p ~q
b) p q d) p ~q f) ~p ~q
14. Sejam as proposies:
p: A bola vermelha. q: O bambol amarelo.
Traduzir as frmulas lgicas para o portugus.
a) p q c) p ~q e) ~p ~q
b) p q d) ~p ~q
15. Considere as proposies:
p: Est frio e q: Est chovendo.
Traduza para a linguagem corrente as seguintes proposies apresentadas
na linguagem simblica:
a) ~p d) q p g) ~p ~q
b) p q e) p ~q h) p ~q
c) p v q f) p v ~q
16. Considere as proposies p: Est frio e q: Est chovendo. Traduza para a
linguagem corrente as seguintes proposies:
a) p v ~q c) ~p ^ ~q e) (p v ~q) (q
b) p q d) p ~q ^~p)
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-26

18 TCNICAS DE PROGRAMAO

Questes para reflexo


Como exemplificado nesta seo, os conectivos lgicos so muito utilizados
nas sentenas matemticas. Qual o seu relacionamento com linguagens de
programao de computadores?
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-27

L g i c a p r o p o s i c i o n a l 19

Seo 3 Construo da tabela verdade


Teorema: A tabela verdade de uma proposio composta com n proposies
simples componentes contm 2 n linhas.
Para determinar unicamente a tabela verdade, podemos estabelecer certas con-
venes para sua construo:
a) Para as colunas:
1. Dispor as proposies componentes em ordem alfabtica.
2. Dispor as operaes na ordem de precedncia determinada pelo Algoritmo
Ordem de Precedncia (com parnteses, se for o caso).
b) Para as linhas:
1. Alternar V e F para a coluna do ltimo componente.
2. Alternar V V e F F para a coluna do penltimo componente.
3. Alternar V V V V e F F F F para a coluna do antepenltimo componente.
4. Prosseguir dessa forma, se houver mais componentes, sempre dobrando o
numero de Vs e Fs para cada coluna esquerda.

Exemplo: criando a tabela para duas; trs e quatro proposies.

Exemplo: 3 proposies
p q r
Exemplo: 2 proposies V V V
p q V V F
V V V F V
V F V F F
F V F V V
F F F V F
F F V
F F F

2 proposies 3 proposies
22 = 4 combinaes 23 = 8 combinaes
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-28

20 TCNICAS DE PROGRAMAO

Exemplo: 4 proposies
9 r s t
V V V V
V V V F
V V F V
V V F F
V F V V
V F V F
V F F V
V F F F
F V V V
F V V F
F V F V
F V F F
F F V V
F F V F
F F F V
F F F F

4 proposies
24 = 16 combinaes

Exemplo 1: P(p, q) = ~(p ~q)


Montando a tabela da verdade:
p q ~p p ~q ~(p ~q)
V V
V F
F V
F F

Resoluo:
p q ~p p ~q ~(p ~q)
V V F F V
V F V V F
F V F F V
F F V F V
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-29

L g i c a p r o p o s i c i o n a l 21

Exemplo 1: Para exemplificar, considere a expresso proposicional


(p q) ~ ((p r) ~ r)
A precedncia das operaes dada por:
(p q) ~ ((p r) ~ r)
1 6 5 2 4 3
Montando a tabela da verdade:
p q r pq pr ~r (pr) ~r ~((p r) ~r) (p q) ~ ((p r) ~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

Resoluo:
p q r pq pr ~r (pr) ~r ~ ((p r) ~r) (p q) ~ ((p r) ~r)
V V V V V F F V V
V V F V F V V F V
V F V F V F F V V
V F F F F V V F F
F V V V F F V F V
F V F V V V V F V
F F V V F F V F V
F F F V V V V F V

Para saber mais


Calculadora tabela verdade:
Monte qualquer tabela verdade automaticamente com esta prtica calculadora
<http://www.calculadoraonline.com.br/tabela verdade>.
Mtodo dinmico de ensino
<http://equipe-exclusiva.com.br/downloads/raciocinio_logico.pdf>.
Construo da tabela verdade
<http://www.fernandozaidan.com.br/pit-grad/2011/MC/Aulas/Aula%202-%20tabelas%20
verdade.pdf>. Acessos em: 7 jun. 2014.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-30

22 TCNICAS DE PROGRAMAO

Atividades de aprendizagem
1. Construa a tabela verdade para as proposies a seguir:
a) p ~q

p q ~q p ~q

b) ~p v q

p q ~p ~p v q

c) (p ^ q) ~(p v q)

p q p^q pvq ~(p v q) (p ^ q) ~(p v q)

d) (p ^ q) (p v r)

p q r p^q pvr (p ^ q) (p v r)
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-31

L g i c a p r o p o s i c i o n a l 23

2. Construa a tabela verdade de cada uma das seguintes proposies:


a) p q p c) p ~q e) p (~p ~q)
b) p q p d) ~p ~q f) ~p q ~q p
3. Construir as tabelas verdade das seguintes proposies:
a) ~ p r q ~ r c) p r q ~ r
b) p (p ~ r) q r d) (p q r) (~ p q ~ r)

Questes para reflexo


Qual a regra para criar a tabela verdade?
Para qual finalidade utilizada?
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-32

24 TCNICAS DE PROGRAMAO

Seo 4 Equivalncias proposicionais


Se duas proposies compostas possuem os mesmos valores verdade, ento elas
so equivalentes. Isso permite, por exemplo, que se substitua uma proposio com-
posta por outra equivalente na construo de argumentos matemticos.

4.1 Tautologia, contradio e contingncia


Uma proposio composta que sempre verdadeira, independente dos valores
verdade de suas proposies, chamada de tautologia. Uma proposio composta
que sempre falsa, independente dos valores verdade de suas proposies, cha-
mada de contradio. Uma proposio composta que no e nem tautologia nem
contradio chamada de contingncia.
As frmulas proposicionais so classificadas quanto aos valores lgicos, em pro-
posies tautolgicas, proposies contravlidas e proposies contingentes, que
so assim definidas.

4.2 Tautologias
Chama-se tautologia toda proposio composta cuja ltima coluna da sua tabela
verdade seja totalmente verdadeira, ou seja, toda proposio composta que assume
somente o valor V para todas as combinaes possveis de suas proposies simples.
As tautologias so tambm denominadas proposies tautolgicas ou proposies
logicamente verdadeiras.
Exemplos:
a) p v ~p: Hoje vai chover ou hoje no vai chover. Neste caso, a proposio
apresentada tem que ser sempre verdadeira, j que uma ou outra das duas
coisas tem que acontecer ( o chamado princpio do terceiro excludo).
p ~p p v ~p
V F V
F V V

b) ~(p ^ ~p) tautolgica ( o chamado princpio da no contradio):


p ~p p ~p ~(p ~p)
V F F V
F V F V
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-33

L g i c a p r o p o s i c i o n a l 25

c) pv (q ~ q) p
p q ~q q ~ q pv (q ~ q) p v (q ~ q) p
V V F F V V
V F V F V V
F V F F F V
F F V F F V

Portanto, dizer que uma proposio ou verdadeira ou falsa sempre verdadeiro.

4.3 Contradio
chamada de contradio toda proposio composta cuja ltima coluna da sua
tabela verdade contenha somente a letra F (falsidade), ou seja, toda proposio
composta que assume somente o valor F para todas as combinaes possveis de suas
proposies simples.
As contradies so tambm denominadas proposies contravlidas ou propo-
sies logicamente falsas.
Exemplos:
a) p ^ ~p: hoje sbado e hoje no sbado
p ~p p ~p
V F F
F V F

b) p ~p
p ~p p ~p
V F F
F V F

c) ~ p (p ~ q)
p q ~q p ~ q ~p ~ p (p ~ q)
V V F F F F
V F V V F F
F V F F V F
F F V F V F

Portanto, dizer que uma proposio pode ser simultaneamente verdadeira e falsa
sempre falso.

4.4 Contingncia
Chama-se contingncia toda proposio composta em que em sua tabela ver-
dade, na ltima coluna, aparecem as letras V e F, pelo menos uma vez cada uma, ou
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-34

26 TCNICAS DE PROGRAMAO

seja, contingncia toda proposio composta que no pode ser classificada como
tautologia nem como contradio.
As contingncias so tambm denominadas proposies contingentes ou propo-
sies indeterminadas.
Exemplos:
a) p ~p
p ~p p ~p
V F F
F V V
b) p v q p
p q pvq pvqp
V V V V
V F V V
F V V F
F F F V

4.5 Equivalncias lgicas


As proposies compostas p e q so chamadas logicamente equivalentes se p
q uma tautologia. A notao p q indica que as proposies p e q so logicamente
equivalentes.
Uma das formas de vericar se duas proposies p e q so equivalentes consiste
em usar a tabela verdade. Elas sero equivalentes se as colunas que fornecem seus
valores verdade forem idnticas.
(Teorema): P (p, q, r, ...) Q (p, q, r, ...) se e somente se a bicondicional P (p,
q, r, ...) Q (p, q, r, ...) foi tautolgica.
importante lembrar que os smbolos e so distintos, pois, o bicondicio-
nal o resultado de uma operao lgica, enquanto a equivalncia estabelece uma
relao. Por exemplo, que a condicional p q tautologia.
Exemplo:
1. Demonstre, mediante o teorema acima descrito, que a proposio bicondicional
(p ~ q c) (p q) uma equivalncia; onde V(c) = F.
Resoluo:
Para provarmos que (p ~ q c) (p q) representa (p ~ q c) (p q)
deve-se mostrar que (p ~ q c) (p q) tautolgica. Da tabela verdade tm-se:

p q c ~q p ~ q p ~ q c pq (p ~ q c) (p q)
V V F F F V V V
V F F V V F F V
F V F F F V V V
F F F V F V V V
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-35

L g i c a p r o p o s i c i o n a l 27

Assim, pelo teorema tem-se que (p ~ q c) (p q).


2. Considerando as seguintes proposies verifique a equivalncia mediante a
tabela verdade:

a) ~~ p p
Resoluo: a tabela verdade para a proposio dada como:
p ~p ~p
V F V
F V F

idnticas

b) ~ p p p
Resoluo: a tabela verdade para a proposio dada como:
p ~p ~ p p
V F V
F V F

idnticas

c) p q ~ p v q
Resoluo: a tabela verdade para a proposio dada como:
p q ~p ~pvq pq
V V F V V
V F F F F
F V V V V
F F V V V

idnticas
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-36

28 TCNICAS DE PROGRAMAO

d) p q (p q) (q p)
Resoluo: a tabela verdade para a proposio dada como:
p q p q ~pvq (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

idnticas

e) Sejam as proposies p q e q p. Mostre, pela tabela verdade, que


estas proposies so logicamente equivalentes.
Resoluo: tabela verdade para as proposies (p q e q p)
p q p q (p q) (q p) (p q) (q p)
V V F F V V V
V F F V F F V
F V V F V V V
F F V V V V V

Assim, a proposio condicional (p q) e sua contrapositiva (q p) so


equivalentes.

Para saber mais


Faculdades Pitgoras de Uberlndia Sistemas de Informao
Prof. Walteno Martins Parreira Jnior
Lgica matemtica e computacional
<http://www.waltenomartins.com.br/lmc_apo.pdf>.
Raciocnio lgico tautologia e contradio (aula 8 1/2) Vdeo
<https://www.youtube.com/watch?v=Gz50NFYS0vc>.
Noes Lgica 2 conectivos e tabela verdade Vdeo
<https://www.youtube.com/watch?v=3aMT_rygF18>. Acessos em: 7 jun. 2014.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-37

L g i c a p r o p o s i c i o n a l 29

Atividades de aprendizagem
1. Exerccios Tautologia:
Preencha as tabelas a seguir:
a) P(p) = ~(p ~p)
Tabela verdade:

p ~q p ~p ~(p ~p)
V
F

b) P(p, q) = p ~(p q)
Tabela verdade:

p q pq ~(p q) p ~(p q)
V V
V F
F V
F F

2. Exerccios Contradio:
Preencha as tabelas a seguir:
a) P(p) = p ~p
Tabela verdade:

p ~p p ~p
V
F

b) P(p, q) = ~p (p ~q)
Tabela verdade:

p q ~p ~q p ~q ~p (p ~q)
V V
V F
F V
F F
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-38

30 TCNICAS DE PROGRAMAO

3. Exerccios Contingncia:
Preencha as tabelas abaixo:
a) P(p) = p ~p
Tabela verdade:

p ~p p ~p
V
F

b) P(p, q) = p q p

p q pq pqp
V V
V F
F V
F F

4. Definir as proposies abaixo como Tautologias, Contradies ou


Contingncias:
a) (p q) p q
b) p q p q
c) (p q) (p r q)
5. Mostre que as equivalncias so verdadeiras
a) (p q r) (p (q r)) : _____________________________

p q r pq pqr qr p(q r) (p q r) (p (q r))

b) p q (p q) v (~ p ~ q) : ____________________________

p q p q pq ~p ~q ~ p ~ q (p q) v (~ p ~ q)
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-39

L g i c a p r o p o s i c i o n a l 31

6. Quais das proposies abaixo so tautologias (verdadeiras), quais so


contradies (logicamente falsas) e quais no so nem tautologias nem
contradies?
a) (p q) v (~ p ~ q)
b) ~(p ~ q)
c) p (p q)
d) (p v q) ((p ~q) v (~p q))

Questes para reflexo


As frmulas proposicionais so classificadas quanto aos valores lgicos, em
proposies tautolgicas, proposies contravlidas e proposies contin-
gentes. Qual a particularidade de cada uma?

Fique ligado!
A lgica matemtica (ou lgica simblica) trata do estudo das sentenas de-
clarativas, tambm conhecidas como proposies, que devem satisfazer aos
dois princpios fundamentais seguintes: Princpio do terceiro excludo, uma
proposio s pode ser verdadeira ou falsa, no havendo outra alternativa.
Princpio da no contradio, uma proposio no pode ser ao mesmo tempo
verdadeira e falsa.
Diz-se ento que uma proposio verdadeira possui valor lgico V (verdade)
e uma proposio falsa possui valor lgico F (falso). Os valores lgicos tambm
costumam ser representados por 0 (zero) para proposies falsas (0 ou F) e 1
(um) para proposies verdadeiras (1 ou V).
As proposies podem se classificadas como simples ou compostas. A pro-
posio simples aquela que no contm nenhuma outra proposio como
parte integrante de si mesma. A proposio composta formada pela combi-
nao de duas ou mais proposies simples atravs de um elemento de ligao
denominado conectivo.
Exemplos de proposies simples e proposies compostas:
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-40

32 TCNICAS DE PROGRAMAO

Proposio simples Proposies compostas


p: Carlos careca P: Carlos careca e Pedro estudante
q: Pedro estudante Q: Carlos careca ou Pedro estudante
r: O nmero 25 quadrado perfeito R: Se Carlos careca, ento infeliz

Os conectivos so expresses utilizadas para compor novas proposies.


Exemplos:
P: O nmero 6 par e o nmero 8 cubo perfeito.
Q: No est chovendo.
R: O tringulo retngulo ou issceles.
S: O tringulo equiltero se e somente se equingulo.
T: Se Jorge engenheiro, ento sabe clculo.
Assim, na lgica, destacam-se os conectivos usuais representados na tabela
a seguir:

Ao Conectivo Estrutura Lgica Exemplos


Maria no est usando
Negao ~ No p
tnis preto.
Murilo mdicoe
Conjuno ^ Peq
Ricardo Engenheiro
Murilo mdicoou
Disjuno Inclusiva v P ou q
Ricardo Engenheiro
OuMurilo Mdicoou
Disjuno Exclusiva v Ou p ou q
Ricardo Engenheiro
SeMurilo Mdico
Condicional Se p ento q entoRicardo
Engenheiro
Murilo mdicose e
Bicondicional P se e somente se q somente seRicardo
Mdico

A tabela a seguir representa a tabela verdade dos principais conectivos:

Conectivo Tabela Verdade

p q p^q
V V V
CONJUNO: p e q V F F
F V F
F F F

continua
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-41

L g i c a p r o p o s i c i o n a l 33
continuao

p q pvq
V V V
DISJUNO: p ou q V F V
F V V
F F F

p q pq
V V V
DISJUNO EXCLUSIVA:
V F F
ou p ou q, mas no ambos
F V V
F F V

p q pvq
V V F
CONDICIONAL: Se p, ento q V F V
F V V
F F F

p q pq
V V V
BICONDICIONAL: p se e
V F F
somente se q
F V F
F F V

Para determinar o valor lgico de uma proposio composta, recorre-se quase


sempre a um dispositivo denominado TABELA VERDADE. Na tabela verdade fi-
guram todos os possveis valores lgicos da proposio, correspondentes a todas
as possveis atribuies de valores lgicos s proposies simples componentes.
Assim, por exemplo, uma proposio composta cujas proposies simples com-
ponentes so p e q pode ter as possveis atribuies:

p q
1 V V
2 V F
3 F V
4 F F

Neste caso, as combinaes entre os elementos so: VV, VF, FV e FF. As tabelas
verdade so construdas como arranjos dos elementos componentes, e como um
elemento pode receber somente os valores V ou F, o tamanho de uma tabela
dado pela quantidade de elementos combinados. No caso de uma proposio
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-42

34 TCNICAS DE PROGRAMAO

composta com 3 elementos, teramos 8 combinaes possveis: VVV, VVF, VFV,


VFF, FVV, FVF, FFV, FFF.

p q r
1 V V V
2 V V F
3 V F V
4 V F F
5 F V V
6 F V F
7 F F V
8 F F F

H certas proposies compostas, chamadas de tautologias, que assumem


valores lgicos V em todos os casos possveis. E tambm ocorre o oposto:certas
proposies compostas, chamadas de contradies, assumem valores lgicos F
em todos os casos. O meio termo entre os dois casos anteriores so chamadas
contingncias.
Tautologia uma proposio cujo valor lgico sempre verdadeiro inde-
pendentemente dos valores lgicos das proposies simples que as compem.
Para verificar se uma proposio uma tautologia basta fazer a tabela verdade
da proposio composta.
Exemplo: a proposio (p ~p) uma contradio, pois sempre falsa para
qualquer valor lgico da proposio p.

p ~p p ~p
V F V
F V V

Contradio uma proposio cujo valor lgico sempre falso indepen-


dentemente dos valores lgicos das proposies simples que as compem. Para
verificar se uma proposio uma contradio, basta fazer a tabela verdade da
proposio composta.
Exemplo: a proposio (p ~p) uma contradio, pois sempre falsa para
qualquer valor lgico da proposio p.

p ~p (p ~p)
V F F
F V F
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-43

L g i c a p r o p o s i c i o n a l 35

So as proposies compostas em que os valores lgicos dependem dos


valores das proposies simples. Para verificar se uma proposio uma contin-
gncia basta fazer a tabela verdade da proposio. Se na tabela verdade alguns
valores lgicos forem verdadeiros e outros falsos, teremos uma contingncia.
Exemplo: a proposio (p ~q) uma contingncia, pois a proposio pode
ser verdadeira ou falsa dependendo dos valores lgicos de p e q.

p q ~q p ~q
V V F F
V F V V
F V F F
F F V F

Para concluir o estudo da unidade


Caro aluno,
Esta seo contm alguns exerccios (ARAMAM, 2011) que contemplam os
contedos desta unidade.
A tabela a seguir contm a tabela verdade da negao; conjuno; disjuno;
disjuno exclusiva; condicional e bicondicional. Essas tabelas visam revisar
as tabelas utilizadas nesta unidade.

Tabela 1.1 Tabela verdade

NEGAO CONJUNO

p q pq
p ~p V V V
V F V F F
F V F V F
F F F

DISJUNO DISJUNO EXCLUSIVA

p q pq p q pq
V V V V V F
V F V V F V
F V V F V V
F F F F F F

continua
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-44

36 TCNICAS DE PROGRAMAO

continuao
CONDICIONAL BICONDICIONAL

p q pq p q pq
V V V V V V
V F F V F F
F V V F V F
F F V F F V

Fonte: Do Autor (2014).

Bloco 1:
1. Extraia a concluso dos raciocnios a seguir:
a) Se Carlos estudar, ento no ir ao jogo. Se Carlos no for ao jogo, seu
time ficar desfalcado. Como o time de Carlos no ficou desfalcado,
conclui-se que...
b) Se Raquel viajar nas frias, ento sua conta no banco ficar descoberta.
Como Raquel viajou nas frias, conclui-se que...
c) Se os eclipses so previsveis, ento a rbita dos planetas exata. Se
a rbita dos planetas exata, ento o sistema solar funciona como um
relgio. Ora, os eclipses no so previsveis, portanto...
d) Se meu time for campeo, darei uma festa. Se der uma festa, gastarei
muito dinheiro agora. Se gastar muito dinheiro agora, terei dificuldades
para viajar. Meu time no foi campeo, logo...
2. Indicar a estrutura dos seguintes enunciados usando a linguagem lgica:
a) Meu gato amarelo ou meu gato preto, mas o gato de Maria branco.
b) Eu no irei festa, mas Pedro ir ou Antnio ir.
c) V com a famlia ou v s; e divirta-se.
d) Costumo ir ao cinema ou visitar os amigos, mas hoje no irei ao cinema.
e) No verdade que Pedro no tenha ido ver a famlia.
3. Verificar se os raciocnios so vlidos ou no vlidos.
Se Maria casar com Jos, Vilma ficar contente. Se Vilma ficar contente,
Marcos poder descansar. Como Marcos no pode descansar, Maria no
casou com Jos.
Se Paulo comear a trabalhar na feira, Vilma ficar em casa. Se Vilma
ficar em casa, Zezinho no ir escola. Ora, Zezinho continua indo
escola, portanto Paulo comeou a trabalhar na feira.
4. Traduzir para a linguagem corrente as seguintes proposies:
p: Pel atacante.
q: Dida goleiro.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:43 - August 22, 2014 - PG-45

Lgica proposicional 37

Bloco 2:
Analise as proposies abaixo:
As seguintes proposies so verdadeiras:
O time do Bahia perdeu o jogo no domingo.
O time do Remo ganhou o jogo no domingo.
Marcos gosta de cantar peras.
Jlia no come beterraba.

As seguintes proposies so falsas:


Carlos perdeu seu par de chinelos.
Maria possui um par de sandlias douradas.
Jlia come batata frita.
O time do Bahia dirigido por Zagalo.

Com base nas informaes acima, resolva as questes de 1 a 3:


1. Determinar a veracidade das seguintes conjunes:
a) O time do Bahia perdeu o jogo domingo e o time do Remo ganhou o jogo
domingo.
b) O time do Bahia perdeu o jogo domingo e o time do Remo perdeu o jogo
domingo.
c) Maria possui um par de sandlias douradas e Marcos gosta de cantar
peras.
d) O time do Bahia perdeu o jogo no domingo e Zagalo dirige o time do
Bahia.
2. Determinar a veracidade das seguintes disjunes:
a) O time do Bahia perdeu o jogo domingo ou o time do Remo ganhou
o jogo domingo.
b) Jlia come beterraba ou batata frita.
c) Carlos perdeu seu par de chinelos ou Marcos gosta de cantar peras.
d) O time do Bahia ganhou o jogo domingo ou dirigido por Zagalo.
3. Determinar a veracidade das seguintes disjunes exclusivas:
a) Ou o time do Bahia perdeu o jogo domingo ou o time do Remo ganhou
o jogo domingo.
b) Ou Maria possui um par de sandlias douradas ou Marcos gosta de
cantar peras.
c) Ou Jlia come beterraba ou come batata frita.
d) Ou Carlos perdeu seu par de chinelos ou Marcos gosta de cantar peras.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-46

38 TCNICAS DE PROGRAMAO

4. Construa a tabela verdade para cada proposio composta:


a) P (p, q): ~ p v q p
p q ~p ~pvq ~pvqp
V V
V F
F V
F F

b) P (p, q): ( p ~ q) v (~ p q)
p q ~p ~q ( p ~ q) (~ p q) ( p ~ q) v (~ p q)
V V
V F
F V
F F

c) P (p,q): p v ( p q) p
p q ( p q) p v ( p q) p v ( p q) p
V V
V F
F V
F F

Bloco 3:

1. Construa a tabela verdade para as proposies compostas:


a) P (p, q, r): ~ p (q v ~ r)
p q r ~p ~r (q v ~ r) ~ p (q v ~ 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

b) P (p, q, r): (p v q r) q v ~ r
p q r ~r pvq pvqr qv~r (p v q r) q v ~ r
V V V

continua
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-47

Lgica proposicional 39
continuao

V V F
V F V
V F F
F V V
F V F
F F V
F F F

2. Resolva o seguinte problema por meio da construo de tabelas verdade:


Trs amigos resolveram ir ao cinema ver um filme, mas naquele horrio s
tinha a opo Tudo uma questo de lgica. Ento, surgiu uma discusso,
pois alguns afirmavam j ter assistido ao filme:
Tuca: Se Joca no assistiu, ento Kika tambm no assistiu.
Joca: Tuca no assistiu ao filme, mas Kika assistiu.
Kika: Eu assisti ao filme ou no assisti.

Sejam as proposies:
p: Tuca assistiu ao filme.
q: Joca assistiu ao filme.
r: Kika assistiu ao filme.

Usando a tabela verdade, responda as seguintes questes:


a) Se todos assistiram ao filme, quem est mentindo?
b) Se todos esto dizendo a verdade, quem no assistiu ao filme?

Atividades de aprendizagem da unidade


1. Sejam as proposies p: Marcos alto e q: Marcos elegante. Traduzir
para a linguagem simblica as seguintes proposies:
a) Marcos alto e elegante.
b) Marcos alto, mas no elegante.
c) No verdade que Marcos baixo e elegante.
d) Marcos alto ou baixo e elegante.
e) Marcos no nem alto e nem elegante.
f) falso que Marcos baixo ou que no elegante.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-48

40 TCNICAS DE PROGRAMAO

2. Dadas s proposies:
P Adriana bonita
Q Adriana inteligente
Escrever na linguagem simblica as seguintes proposies:
a) Adriana bonita e inteligente.
b) Adriana bonita, mas no inteligente.
c) No verdade que Adriana no bonita ou inteligente.
d) Adriana no bonita nem inteligente.
e) Adriana bonita ou no bonita e inteligente.
f) falso que Adriana no bonita ou que no inteligente.
3. Sejam as proposies p: est frio e q: est chovendo. Traduzir para a lin-
guagem corrente as seguintes proposies:
a) ~ p
b) p q
c) p v q
d) q p
e) ~ p ~ q
f) p ~ q
g) p ~q
h) p v ~ q
i) p ~ q p
4. Sejam as proposies p: Jorge rico e q: Carlos feliz. Traduzir para lin-
guagem corrente as seguintes proposies:
a) p v q
b) p q
c) p ~ q
d) ~ p ~q
5. Verificar se as proposies a seguir so tautologias:
a) p v ~(p ^ q)
b) p ^ q (p q)
c) p v (q ^ ~q) p
d) p ^ r ~q v r
6. Determine quais proposies so tautologias, contradies ou contingncias:
a) (p p) v (p ~p)
b) (p q) ^ p q
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-49

L g i c a p r o p o s i c i o n a l 41

c) p (q (q p))
d) ~p v q (p q)
e) p (p q ^ ~q)
f) (p ^ q r) (p (q r))
7. Determinar o valor lgico de P em cada um dos casos abaixo, considerando
a informao fornecida.
a) Q falsa e P ^ Q falsa.
b) Q falsa e P v Q falsa.
c) Q falsa e P Q falsa.
d) Q falsa e P Q verdadeira.
e) Q falsa e P Q verdadeira.
f) Q verdadeira e P Q falsa.
8. Construir a tabela verdade para as seguintes proposies:
a) p q p q
b) ~p (q p)
c) (p ~q) q p
9. Determinar P(VV, VF, FV, FF) em cada um dos seguintes casos:
a) P(p,q) = ~(~p q)
b) P(p,q) = (p q) ~(p q)
c) P(p,q) = ~((p q) (~p ~q))
10. Determinar P(VFV) em cada um dos seguintes casos:
a) P(p,q,r) = p ~q ~q
b) P(p,q,r) = ~p (q ~r)
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-50

42 TCNICAS DE PROGRAMAO

Referncias
ARAMAM, Eliana MariaOliveira. Matemtica discreta. Curso de Graduao Unopar
Virtual,2011.
JNIOR, Walteno Martins Parreira. Lgica matemtica e computacional. 2013. Disponvel
em: <http://www.waltenomartins.com.br/lmc_apo.pdf>. Acesso em: 25 mar. 2014.
PINHO, Antonio A. Introduo lgica matemtica. 1999. Disponvel em: <ftp://ftp.
cefetes.br/cursos/Matematica/Oscar/introducao_logica/Apostila%20de%20Logica.pdf>.
Acesso em: 29 mar. 2014.
REIS, Joaquim. Introduo lgica simblica. 2013. Disponvel em: <http://iscte.pt/~luis/
aulas/ia/IA-LogicaSimbolica.pdf>. Acesso em: 29 mar. 2014.
GENEROSO. Ruy Alexandre. Clculo proposicional. 2013. Disponvel em: <http://
ruyalexandre.zzl.org/arquivos/lmintrologica.pdf>. Acesso em: 29 mar. 2014.
Leitura complementar
DIDTICA dos Concursos. Raciocnio lgico. Disponvel em: <http://www.
guiadoconcursopublico.com.br/apostilas/24_81.pdf>. Acesso em: 29 mar. 2014.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-51

Unidade 2
Introduo a
algoritmos
Veronice de Freitas

Objetivos de aprendizagem: Esta unidade aborda conceitos introdu-


trios para o desenvolvimento de algoritmos: formas de representao
de algoritmo (narrativa, fluxograma, pseudocdigo), tipos de dados,
variveis, instrues primitivas (entrada, sada, atribuio).

Seo 1: Introduo ao desenvolvimento de


algoritmos
Dentre as principais formas de representao de al-
goritmos, destacam-se: a descrio narrativa, o fluxo-
grama convencional e o pseudocdigo (ou linguagem
estruturada).

Seo 2: Instrues primitivas


As instrues primitivas so os comandos bsicos
que efetuam tarefas essenciais para a operao dos
computadores, como entrada e sada de dados (co-
municao com o usurio e com dispositivos perif-
ricos), e sua movimentao na memria.

Seo 3: Tipos de operadores


Operadores so sinais utilizados nos algoritmos para
indicar a realizao de operaes que podem ser de
trs tipos: aritmtico, relacionais e lgico.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-52

Seo 4: Estrutura sequencial


No algoritmo sequencial, os comandos de um algo-
ritmo so executados em uma sequncia preestabe-
lecida. Cada comando executado somente aps o
trmino do comando anterior.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-53

I n t r o d u o a a l g o r i t m o s 45

Introduo ao estudo
Um algoritmo formalmente uma sequncia finita de passos que levam execu-
o de uma tarefa. Essas tarefas no podem ser redundantes nem subjetivas na sua
definio, devem ser claras e precisas. So exemplos de algoritmos: instrues de
montagem, receitas, manuais de uso etc.
At mesmo as coisas mais simples podem ser descritas por sequncias lgicas.
Por exemplo:
Algoritmo 1 Chupar uma bala.
Pegar a bala.
Retirar o papel.
Chupar a bala.
Jogar o papel no lixo.
Algoritmo 2 "Troca de pneu do carro".
Desligar o carro.
Pegar as ferramentas (chave e macaco).
Pegar o estepe.
Suspender o carro com o macaco.
Desenroscar os 4 parafusos do pneu furado.
Colocar o estepe.
Enroscar os 4 parafusos.
Baixar o carro com o macaco.
Guardar as ferramentas.

Os programas de computadores so algoritmos escritos em uma linguagem de


computador (C, Pascal, Cobol, entre outras).
Para armazenar um algoritmo na memria de um computador e para que ele possa,
em seguida, comandar as operaes a serem executadas, necessrio que ele seja
transcrito para uma linguagem que o computador possa entender. A escolha da
linguagem de programao depende, antes de tudo, da existncia de um programa
compilador (que traduza o algoritmo escrito na linguagem escolhida para a lingua-
gem de mquina) ou de um programa interpretador (que interprete cada comando
do programa e execute uma srie de instrues que a ele correspondem).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-54

46 TCNICAS DE PROGRAMAO

Seo 1 Introduo ao desenvolvimento


de algoritmos
Os algoritmos so independentes das linguagens de programao. Ao contrrio
de uma linguagem de programao, no existe um formalismo rgido de como deve
ser escrito o algoritmo.

1.1 Fases para desenvolvimento de algoritmos


Para desenvolver um algoritmo, precisamos primeiro dividir o problema em trs
fases fundamentais.

ENTRADA PROCESSAMENTO SADA

Onde temos:
ENTRADA: so os dados de entrada do algoritmo, os valores que ele vai usar
no processamento para chegar soluo do problema. So fornecidos pelo
usurio, fazendo uso de algum dispositivo de entrada de dados, tal como um
teclado, um mouse ou um leitor de cdigo de barras.
PROCESSAMENTO: so os procedimentos utilizados para chegar ao resultado
final, para alcanar a resoluo do problema. Esses procedimentos so execu-
tados no processador do computador e os valores parciais so armazenados
na memria (memria RAM).
SADA: So os dados j processados. o resultado do processamento. Estes
dados de sada so apresentados em algum dispositivo de sada. Por exemplo,
a tela de um monitor.

Para se criar um programa que seja executvel dentro de um computador, deve ter
em mente trs pontos de trabalho: a entrada de dados, o seu processamento e a sada
dos mesmos. Sendo assim, todo programa estar trabalhando com esses trs conceitos.

1.2 Formas de representao de algoritmos


Dentre as formas de representao de algoritmos, as mais conhecidas so:
Descrio Narrativa;
Fluxograma Convencional;
Pseudocdigo, tambm conhecido como Linguagem Estruturada ou Portugol.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-55

I n t r o d u o a a l g o r i t m o s 47

1.2.1 Descrio narrativa


Nesta forma de representao, os algoritmos so expressos diretamente em lin-
guagem natural. O algoritmo pode ser escrito de forma mais abstrata (exemplo 01
verso 01) ou com um nvel maior de detalhamento (exemplo 01 verso 02).
Exemplo 1: algoritmo para troca de um pneu furado verso 1:

Obs.: um algoritmo com um nvel de abstrao maior que descreve as principais


tarefas para trocar o pneu furado.

1. Pegar o pneu reserva.


2. Afrouxar ligeiramente as porcas.
3. Suspender o carro.
4. Retirar as porcas e o pneu.
5. Colocar o pneu reserva.
6. Apertar as porcas.
7. Abaixar o carro.
8. Dar o aperto final nas porcas.

Exemplo 1: algoritmo para troca de um pneu furado verso 2:

Obs.: um algoritmo com um nvel maior de detalhamento que descreve as


tarefas para trocar o pneu furado.

1. Estacionar o carro no acostamento.


2. Desligar o carro.
3. Ligar o pisca alerta.
4. Retirar o cinto de segurana.
5. Abrir a porta.
6. Sair do veculo.
7. Abrir o porta-malas.
8. Pegar o tringulo de sinalizao.
9. Montar o tringulo.
10. Colocar o tringulo no asfalto para fazer a sinalizao.
11. Retirar o macaco do porta-malas.
12. Colocar o macaco ao lado do carro.
13. Retirar o estepe do porta-malas.
14. Colocar o estepe ao lado do carro.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-56

48 TCNICAS DE PROGRAMAO

15. Colocar o macaco sob o carro.


16. Girar a manivela para levantar o carro.
17. Pegar a chave.
18. Retirar os parafusos.
19. Retirar os pneus.
20. Colocar o estepe.
21. Parafusar o estepe.
22. Girar a manivela do macaco ao contrrio.
23. Colocar o pneu no porta-malas.
24. Colocar o macaco no porta-malas.
25. Guardar o tringulo.
26. Fechar o porta-malas.
27. Abrir a porta do carro.
28. Entrar no carro.
29. Colocar o cinto de segurana.
30. Ligar o carro.
31. Continuar a viagem.

Questes para reflexo


possvel alterar o algoritmo para trocar o pneu furado e criar uma terceira
verso, levando em considerao a falta de algum item?

Exemplo 2: algoritmo para fazer um sanduche:

Obs.: o algoritmo tambm pode ser escrito de vrias formas, dependendo da


resoluo do problema. O exemplo do algoritmo para fazer um sanduche
descrito em duas formas. Na verso 1 o algoritmo escrito na forma sequencial
e na verso 2 apresenta condies como, por exemplo, se no gostar de maio-
nese a instruo Passar a maionese no po no ser executada. E tambm a
estrutura de repetio que ir repetir a instruo Colocar alface e tomate no
po enquanto a quantidade de salada for insuficiente.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-57

I n t r o d u o a a l g o r i t m o s 49

Fazer um sanduche verso 1 Fazer um sanduche verso 2


1. Pegar o po. 1. Pegar o po.
2. Cortar o po ao meio. 2. Cortar o po ao meio.
3. Passar a maionese no po. 3. Se gostar de maionese ento.
4. Pegar e cortar alface e tomate. 4. Passar a maionese no po.
5. Colocar alface e tomate no po. 5. Se gostar de salada ento.
6. Pegar o Hambrguer. 6. Pegar e cortar alface e tomate.
7. Fritar o Hambrguer. 7. Enquanto qtde insuficiente ento.
8. Colocar o Hambrguer no po. 8. Colocar alface e tomate no po.
9. Pegar o Hambrguer.
10. Fritar o Hambrguer.
11. Colocar o Hambrguer no po.

Exemplo 3: receita de bolo

Obs.: no algoritmo receita de bolo verso 1: o algoritmo est na forma se-


quencial (todas as instrues so executadas) na verso 2: faz uso da estrutura
condicional para verificar se existe coco ralado e a estrutura de repetio para
verificar se o bolo est corado para depois retirar do forno.

Receita de bolo verso 1 Receita de bolo verso 2


1. Misturar os ingredientes. 1. Misturar os ingredientes.
2. Untar a forma com manteiga. 2. Untar a forma com manteiga.
3. Despejar a mistura na forma. 3. Despejar a mistura na forma.
4. Despejar o coco ralado sobre a mistura. 4. Se houver coco ralado ento
5. Levar a forma para o forno. despejar sobre a mistura.
6. Deixar o bolo 30 minutos no forno. 5. Levar a forma para o forno.
7. Retirar a forma do forno. 6. Enquanto no corar.
8. Deixar esfriar. 7. Deixar a forma no forno.
8. Retirar a forma do forno.
9. Deixar esfriar.

Exemplo 4: sacar dinheiro em caixa eletrnico

No exemplo do saque eletrnico verso 1 utilizada a estrutura condicio-


nal (se ... seno ... ) para testar se o saldo suficiente para efetuar o saque. Na
verso2, existe a estrutura de repetio para validar a senha (enquanto senha
incorreta repete a leitura da senha).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-58

50 TCNICAS DE PROGRAMAO

Sacar dinheiro verso 1 Sacar dinheiro verso 2


1. Ir at um caixa eletrnico. 1. Ir at um caixa eletrnico.
2. Colocar o carto. 2. Colocar o carto.
3. Digitar a senha. 3. Digitar a senha.
4. Solicitar a quantia desejada. 4. Enquanto senha incorreta ento
5. Se o saldo for maior ou igual quantia apresentar a mensagem de senha invlida e
desejada, sacar o dinheiro. seno, mostrar digitar a senha.
mensagem de impossibilidade de saque. 5. Solicitar a quantia desejada.
6. Retirar carto. 6. Se o saldo for maior ou igual quantia dese-
7. Sair da agncia. jada, sacar o dinheiro; caso contrrio, mostrar
mensagem de impossibilidade de saque.
7. Retirar carto.
8. Sair da agncia.

Esta representao pouco usada na prtica porque o uso de linguagem natural


muitas vezes d oportunidade a ms interpretaes, ambiguidades e imprecises.
Por exemplo, a instruo afrouxar ligeiramente as porcas, no algoritmo da troca de
pneus, est sujeita a interpretaes diferentes por pessoas distintas. Uma instruo
mais precisa seria: afrouxar a porca, girando-a de 30 no sentido anti-horrio.
A descrio narrativa pode ser usada como apoio s outras formas de represen-
tao de algoritmos (fluxograma, pseudocdigo, etc.) para estabelecer a lgica que
ir utilizar para resoluo do problema.
VANTAGENS:
O portugus bastante conhecido por ns.

DESVANTAGENS:
Impreciso: pode ser interpretado de forma diferente exemplo: afrouxar a
porca na troca do pneu.

1.2.2 Fluxograma convencional


uma representao grfica de um algoritmo por meio de smbolos. Cada smbolo
tem uma forma geomtrica que define sua funo genrica e no seu interior haver
uma descrio do passo do algoritmo. Os smbolos so ligados por flechas que indicam
o fluxo. Os principais smbolos de fluxograma esto representados no Quadro 2.1:

Quadro 2.1 principais formas geomtricas utilizadas em fluxograma

Smbolo Funo

Indica o incio ou fim de um processamento. Exemplo:


Incio do algoritmo.
TERMINAL
continua
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-59

I n t r o d u o a a l g o r i t m o s 51
continuao

Processamento em geral. Exemplo: x 7+4

PROCESSAMENTO

Indica entrada de dados pelo usurio via teclado.


Exemplo: Digite a nota 01.

ENTRADA MANUAL DE DADO

Sada: informaes exibidas no vdeo.

SADA

Setas: indica o sentido do processamento.

SETAS

Conector: utilizado quando precioso particionar o


diagrama.
CONECTOR
Fonte: Do autor (2014).

Exemplo 1 Fluxograma: efetua a leitura de duas notas, calcula a mdia e apre-


senta uma mensagem aprovado ou reprovado dependendo do valor da MDIA.
Incio
INICIO

N1, N2 Entrada das notas

MEDIA <- (N1 + N2) / 2 Clculo da MDIA

no sim Condio para verificar se


MEDIA >= 7
O aluno foi APROVADO ou REPROVADO

REPROVADO APROVADO Impresso de acordo com o valor da MDIA

FIM Final
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-60

52 TCNICAS DE PROGRAMAO

A principal vantagem de se utilizar fluxogramas para construir algoritmos que


mais fcil entender um contedo descrito de forma grfica do que um descrito
textualmente.
J as desvantagens so: os dados no so suficientemente detalhados, dificultando,
assim, a transcrio do algoritmo para o programa a ser desenvolvido; necessrio
aprender a simbologia dos fluxogramas; e, para algoritmos mais extensos, a constru-
o do fluxograma pode se tornar mais invivel devido dificuldade para alterao.

Questes para reflexo


No fluxograma do exemplo 5, um aluno com MDIA menor que SETE obtm o
conceito REPROVADO. O que poderia ser alterado no fluxograma para algoritmo
solicitar uma nota de EXAME e efetuar novos testes (NOVA_MDIA maior ou igual
a 5, APROVADO EM EXAME, caso contrrio, REPROVADO EM EXAME)?

1.2.3 Linguagem algoritma pseudocdigo


Esta forma de representao de algoritmos, tambm conhecida como portugus
estruturado ou portugol, rica em detalhes e, por assemelhar-se forma em que os
programas so escritos, a mais utilizada.

Quadro 2.2 Estrutura pseudocdigo

Algoritmo uma palavra que indica o incio


da definio de um algoritmo em forma de
Algoritmo <nome_do_algoritmo> pseudocdigo.
<nome_do_algoritmo> um nome simblico dado
ao algoritmo.
<declarao_de_variveis> consiste na seo
<declarao_de_variveis> onde so declaradas as variveis globais usadas no
algoritmo.
<subalgoritmos> consiste nas sees opcionais do
<subalgoritmos>
pseudocdigo onde so definidos os subalgoritmos.
Incio a palavra que delimitam o incio do
incio
conjunto de instrues do corpo do algoritmo.
<corpo do algoritmo> So as instrues.
Fim a palavra que delimitam o final do conjunto
fimalgoritmo
de instrues do corpo do algoritmo.
Fonte: Do autor (2014).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-61

Introduo a algoritmos 53

Exemplo 1: pseudocdigo Calcula a mdia aritmtica de um aluno

algoritmo "Calcula-mdia
var
N1, N2, N3, N4, MDIA, SOMA: real
incio
// ---------- ENTRADA DE DADOS---------
leia(N1,N2,N3,N4)

// ------------ PROCESSAMENTO-----------
SOMA <- N1 + N2 + N3 + N4
MDIA <- SOMA / 4

// --------------- SADA--------------
escreva("Mdia Final: ", MDIA)

fim Algoritmo

Exemplo 2: determinar se uma pessoa maior ou menor de idade

Algoritmo Maioridade
var
idade: inteiro
incio

// ---------- ENTRADA DE DADOS---------


escreva(Digite a idade (maior do que zero): )
leia(idade)

// --------------- SADA--------------
se (idade > 0) ento

se ( idade >= 18 ) ento


escreva ( Maior de idade. )
seno
escreva( Menor de idade. )
fimse

seno
Escreva ( Idade incorreta. )
Fimse

fimalgoritmo

VANTAGENS:
Independncia fsica da soluo (soluo lgica apenas).
Usa o portugus como base.
Pode-se definir quais e como os dados vo estar estruturados.
Passagem quase imediata do algoritmo para uma linguagem de programao.

DESVANTAGENS:
Exige a definio de uma linguagem no real para trabalho.
No padronizado.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-62

54 TCNICAS DE PROGRAMAO

Para saber mais


Conceitos sobre formas de representao de algoritmos:
SALIBA (1992). Captulo 02 Formas de representao de algoritmos (SALIBA, 1992).

1.3 Variveis e tipo de dado


Uma varivel um local com um nome dentro da memria do computador que
armazena um tipo especfico de contedo.
Uma analogia muito comum imaginar uma varivel como uma caixinha den-
tro da memria do computador. Esta caixa tem a capacidade de guardar um dado
de certo tipo; e o nome da varivel como uma etiqueta colada na frente da caixa
exemplificado na Figura 2.1:

Figura 2.1 Uma representao abstrata das variveis na memria do computador

Rafael
Rafael a informao
NOME a varivel do tipo caractere
NOME

55
55 a idade
IDADE a varivel do tipo inteiro
IDADE

1250,55 1250,55 o salrio


SALRIO a varivel do tipo real
SALRIO (pode conter casas decimais)

Memria

Fonte: Do autor (2014).

Os dados so representados pelas informaes a serem processadas por um com-


putador. Um tipo de dado especifica as caractersticas, ou seja, os valores e operaes
possveis de serem utilizados com um dado desse tipo.
As variveis existem na memria durante a execuo do algoritmo. Quando ele
termina a execuo, todos os dados so apagados, e as caixas destrudas.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-63

Introduo a algoritmos 55

1.3.1 Tipos de dados


Os tipos de dados mais bsicos (tambm conhecidos como tipos primitivos) esto
representados no Quadro 2.3:

Quadro 2.3 Tipos primitivos de dados

Tipo Descrio
Representa valores inteiros.
INTEIRO
Exemplos: 15, 25, -15, -25
Representa valores reais (com a parte decimal).
REAL
Exemplos: 20.555, 40.4, -13.58
Representa uma sequncia de um ou mais caracteres.
CARACTERE Exemplos: Esse um exemplo de caractere, A, 2540, Unopar
OBS: sempre colocamos os caracteres entre (aspas duplas)
Representa valores lgicos, os quais possuem apenas 2 estados:
LGICO
VERDADEIRO (true) ou FALSO (false)
Fonte: Do autor (2014).

Para saber mais


Apostila de Linguagem C (Conceitos Bsicos):
<http://www.facom.ufu.br/~gustavo/ED1/Apostila_Linguagem_C.pdf>.
Captulo I Introduo ao Turbo Pascal:
<http://w3.impa.br/~zang/uerj/ipd/material/apostila-pascal.pdf>. Acessos em: 7 jun. 2014.

1.3.2 Definio de variveis em algoritmos


Todas as variveis utilizadas em algoritmos devem ser definidas antes de serem
utilizadas. Isto se faz necessrio para permitir que o compilador reserve um espao
na memria para as mesmas.
Sintaxe:
<varivel 1>, <varivel 2>, ... : tipo de dados
Exemplos de definio de variveis:
VAR
NOME: caractere
IDADE: inteiro
SALRIO: real

No exemplo anterior foram declaradas trs variveis:


A varivel NOME, capaz de armazenar dados caracteres.
A varivel IDADE, capaz de armazenar um nmero inteiro.
A varivel SALRIO, capaz de armazenar um nmero real.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-64

56 TCNICAS DE PROGRAMAO

Questes para reflexo


Qual a relao entre tipos de dados e variveis?
Qual o valor mximo que pode ser atribudo a uma varivel do tipo inteiro
levando em considerao que esse tipo ocupa dois bytes de memria?

Para saber mais


Conceitos sobre variveis e tipos de dados:
Parte II Tcnicas Bsicas de Programao Captulo 3 (MANZANO, 2008).

1.3.3 Operao de atribuio


A operao de atribuio permite fornecer um valor a uma varivel. Se for atribuda
uma expresso varivel, ser armazenado o resultado da expresso.
Sintaxe:
varivel expresso
Exemplos:
Inteiro Carcter Real
A <- 2 NOME <- Veronice X <- 2.5
B <- A + 5 SENHA <- X3Y9 SALRIO <- 1500.50
C <- B + A DPTO <- FINANCEIRO NOTA <- 8.5
D <- 6 / 3 CURSO <- ADS PRECO <- 25.30

Exemplos: algoritmo em pseudocdigo para calcular a mdia aritmtica de trs


notas do tipo real.

Algoritmo Exemplo Atribuio Reservar 3 espaos de memria do tipo


var real para as trs variveis com nome.
N1,N2, N3: real
incio
N1 <- 8.5 Atribuio de valores iniciais s variveis
N2 <- 7.5
N3 <- 9.5

MDIA <- (N1 + N2 + N3) /3 Calcula a MDIA


aritmtica das trs notas
Escreva(MDIA)

Fimalgoritmo
Imprime a MDIA
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-65

Introduo a algoritmos 57

1.3.4 Memria x varivel


Cada varivel definida no programa usa um local da memria, que acessada por
meio do nome da varivel. O espao de memria ocupado pelo contedo da varivel
depende do tamanho destes tipos de dados, que pode variar dependendo da lingua-
gem de programao. Como referncia inicial (em algoritmo) para este estudo sobre
variveis, pode-se considerar o seguinte:
Tipo Inteiro ocupa 2 bytes de memria.
Tipo real ocupa 4 bytes de memria.
Tipo caractere com 1 byte para cada caractere.

Como exemplo, pode-se representar a memria como uma matriz, como a Figura
2.2, onde cada clula possui tamanho de 1 byte (8 bits):

Figura 2.2 Representao da memria

Fonte: Do autor (2014).

Exemplo:
Var
NUMDEP: INTEIRO // ir utilizar dois bytes
SALRIO: REAL // ir utilizar quatro bytes

NUMDEP SALRIO
2 BYTES 4 BYTES

Exemplos: algoritmo em portugol para somar dois valores inteiros (20 + 10).

Algoritmo Exemplo Variveis Reservar 3 espaos de memria do tipo inteiro


var para trs variveis com nome: A, B e C.
A,B,C: inteiro
incio Atribuio de valores iniciais s variveis
A <- 20
B <- 10
C <- A + B O resultado da soma de A + B ser armazenado
Fimalgoritmo
no espao de memria C
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-66

58 TCNICAS DE PROGRAMAO

Representao das clulas de memria ocupadas pelas trs variveis considerando


que o endereo inicial zero.

0 1 2 3 4 6 6 7 8 ..
A B C
20 10 30
Endereos representados no
sistema decimal para facilitar
a anlise.

Considerando que a representao da memria se inicia na posio 0, as variveis


representam:
a) inicia no endereo 0 (ocupa 2 bytes) e contm o valor 20.
b) inicia no endereo 2 (ocupa 2 bytes) e contm o valor 10.
c) inicia no endereo 4 (ocupa 2 bytes) e contm o valor 30.

1.3.5 Formao de variveis


As variveis e as constantes tm um nome (rtulo) que as identificam dentro do
cdigo/pseudocdigo. Esse nome definido conforme as regras:
a) O primeiro caractere deve ser SEMPRE uma letra.
b) Os nomes devem ser formados por caracteres pertencentes s letras do al-
fabeto e aos nmeros. Se o identificador for mais de uma palavra, podemos
separ-los com o underline _.
c) Nomes de variveis longos dificultaro a codificao (verificar tamanho de-
pendendo da linguagem que for programar).
d) No deve utilizar acentuao ou cedilha.
e) No pode haver espaos em branco entre os caracteres do identificados.
f) Os nomes escolhidos devem ser explicativos do seu contedo.
g) Os nomes dados s variveis no podem ser os mesmos nomes das palavras
reservadas da linguagem que ser utilizada.

Exemplos de nomes de variveis:


SALRIO correto.
1ANO errado (no comeou uma letra).
ANO1 correto.
A CASA errado (contm o caractere branco).
SAL/HORA errado (contm o caractere /).
SAL_HORA correto.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-67

I n t r o d u o a a l g o r i t m o s 59

Para saber mais


Conceitos sobre variveis e tipos de dados:
Parte II Tcnicas Bsicas de Programao Captulo 03 (MANZANO, 2008).
Captulo 03 Tipos de Dados, Captulo 04 Variveis (SALIBA, 1992).

Atividades de aprendizagem
1. Escreva um algoritmo na forma narrativa para fazer uma salada de frutas.
2. A tabela abaixo contm algumas instrues que tm por objetivo calcular
o total de uma venda. Na coluna tipo, identifique os dados de entrada (E),
processamento (P) e sada (S). Na coluna sequncia lgica, estabelea a
sequncia numrica das instrues (ordem para serem executadas).

Algoritmo venda
Instruo (Identifique a ordem correta) Tipo Sequncia lgica
Calcular o valor total da pea (Quantidade * Valor da pea)
Mostrar o cdigo da pea e seu valor total
Receber valor da pea
Receber quantidade de peas

3. Crie o fluxograma do algoritmo abaixo:


algoritmo exemplo

var
PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Incio
escreva(Digite o preo unitrio: )
leia (PRECO_UNIT)

escreva (Digite a quantidade: )


leia(QUANT)

PRECO_TOT PRECO_UNIT * QUANT

escreva(Preo total: , PRECO_TOT)


fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-68

60 TCNICAS DE PROGRAMAO

4. Diferencie tipo de dados e variveis.


5. Identifique o tipo dos dados:

a) inteiro; b) real; c) lgico; d) cadeia ou literal.

() Verdadeiro () Maria
() c*d () -23
() Falso () 35.23
() 1 2 3 4 () -18.589
() aula () 345
() 897 () 0.342

6. Quais so as regras bsicas para criar nomes (identificadores) das variveis?


7. Marque com X os identificadores vlidos:
() A () 5B
() NOTA () DATA
() PROGRAMA () PROGRAM
() NOTA[1] () A32B
() X5 () E(13)
() MATRICULA () A:B
() F1GH78 () B*D
() AX_DATA () X -Y
() VALOR () NOTA
() AH! () KM/H
() NOTA*DO*ALUNO () NOMEDAEMPRESA
() ANO () MDIA
() MDIA SALARIAL () AI!
() A15B34 () AULA
() NOME_ALUNO () 1DEPARTAMENTO

8. Sendo SOMA, NUM e X variveis numricas (inteiro ou real); NOME, COR


e DIA variveis literais (caractere); TESTE, COD e TUDO variveis lgicas,
assinalar os comandos de atribuio considerados invlidos:
() NOME <- 5
() SOMA <- NUM = 2* X
() TESTE <- COD
() TUDO <- SOMA
() COR <- PRETO
() X <- X + 1
() NUM <- ABC
() DIA <- SEGUNDA
() COD <- VERDADEIRO
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-69

I n t r o d u o a a l g o r i t m o s 61

9. Encontre os erros dos comandos de atribuio a seguir:


Algoritmo exerccio 01
var
lgico: A
real: B, C
inteiro: D
incio
A B + C
D B
C A + D
Fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-70

62 TCNICAS DE PROGRAMAO

Seo 2 Instrues primitivas


Como o prprio nome diz, instrues primitivas so os comandos bsicos que
efetuam tarefas essenciais para a operao dos computadores, como entrada e sada
de dados (comunicao com o usurio e com dispositivos perifricos), e movimen-
tao dos mesmos na memria. Esses tipos de instrues esto presentes na maioria
das linguagens de programao.

2.1 Comandos de atribuio


O comando de atribuio ou simplesmente atribuio, uma das formas para
armazenar uma informao em uma varivel. O algoritmo a seguir apresenta exem-
plos de comandos de atribuio:

algoritmo exemploAtriuicao
var INICIO

PRECO_UNITRIO, TOTAL : real


QTDE : inteiro
PRECO_UNITARIO 10
incio

// ------ PROCESSAMENTO ---


PRECO_UNITRIO <- 10 QTDE 5

QTDE <- 5
TOTAL <- PRECO_UNITRIO * QTDE
TOTAL QTDE * PRECO_UNITARIO
fimAlgoritmo

FIM

- nesse exemplo no ser impresso


nenhum valor (o processamento interno)

2.2 Comandos de sada de dados (escreva)


O comando de sada de dados o meio pelo qual informaes contidas na me-
mria dos computadores so colocadas nos dispositivos de sada, para que os usu-
rios possam visualiz-las. A seguir temos um exemplo de um algoritmo utilizando o
comando de sada de dados:
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-71

I n t r o d u o a a l g o r i t m o s 63

algoritmo exemploSaida
var INICIO

PRECO_UNITRIO, TOTAL : real


QTDE : inteiro
PRECO_UNITARIO 10

incio

// ------ PROCESSAMENTO ---


QTDE 5
PRECO_UNITRIO <- 10
QTDE <- 5
TOTAL <- PRECO_UNITRIO * QTDE
TOTAL QTDE * PRECO_UNITARIO

//------ SADA ---


escreva(TOTAL)
TOTAL
fimAlgoritmo

FIM

2.3 Comando de entrada de dado (leia)


Comando de entrada de dado o meio pelo qual as informaes dos usurios so
transferidas para a memria dos computadores, para que possam ser usadas nos programas.
A seguir, temos um exemplo de um algoritmo utilizando o comando de entrada de dados:

algoritmo exemploEntradaSaida
var INICIO

PRECO_UNITRIO, TOTAL : real


QTDE : inteiro
PRECO_UNITARIO
incio

// ------ ENTRADA -------


QTDE
leia(PRECO_UNITRIO)
leia(QTDE)

// ------ PROCESSAMENTO ------- TOTAL QTDE * PRECO_UNITARIO

TOTAL <- PRECO_UNITRIO * QTDE

// ------ SADA -------


escreva(TOTAL) TOTAL

fimAlgoritmo

FIM
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-72

64 TCNICAS DE PROGRAMAO

Atividades de aprendizagem
1. Analise os algoritmos abaixo e diga o que ser impresso na tela ao serem
executados:
Algoritmo Simulao
algoritmo "teste01"
a) var
A , B: inteiro Memria Vdeo
incio
A <-10
B <- 20
escreva(B)
B <- 5
Escreva( A, B)

fimalgoritmo

b) algoritmo "teste02"
var
A , B,C: inteiro Memria Vdeo
Incio

A <- 30
B <- 20
C <- A + B
escreva(C)
B <- 10
escreva( B, C)
C <- A + B
escreva(A, B, C)
fimalgoritmo
c) algoritmo "teste03"
var
X: inteiro Memria Vdeo
Z, Y: real
incio
X <- 30
Y <- 40
Z <- Y X * 2
Escreva(Z)
X <- 10
Y <- X + Z /2
escreva(X, Y, Z)
fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:44 - August 22, 2014 - PG-73

I n t r o d u o a a l g o r i t m o s 65

2. Identifique ENTRADA(S), PROCESSAMENTO e SADA(S) no algoritmo


abaixo:
algoritmo exemplo02

var
PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Incio
escreva(Digite o preo unitrio: )
leia (PRECO_UNIT)

escreva (Digite a quantidade: )


leia(QUANT)

PRECO_TOT PRECO_UNIT * QUANT

escreva(Preo total: , PRECO_TOT)


fimalgoritmo

3. O que ser atribudo s variveis A, X e B?


Algoritmo exemplo03
logico: A, B
inteiro: X
incio
X 8 + 6 * 2
B 5 + 3
A B
fimalgoritmo

4. Dadas as declaraes abaixo, assinale os comandos de atribuio invlidos:


var
NUM: inteiro
SOMA, X: real
SIMBOLO, NOME, COR, DIA: caractere
COD, TESTE, TUDO: lgico

() SIMBOLO 8 () SOMA NUM + 3 * X


() TESTE COR () TUDO SOMA
() COR VERMELHO; () X X + 1
() NUM 1234 () DIA QUARTA
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-74

66 TCNICAS DE PROGRAMAO

Para saber mais


Unidade 3 Instrues Primitivas
<http://www.inf.unioeste.br/~andre/capitulo3.pdf>.
Apostila da Disciplina de Lgica de Programao
<http://prograd.unifesp.br/images/uni/apostila-logica-110210.pdf>. Acessos em: 7 junho 2014.

Questes para reflexo


possvel criar um algoritmo para calcular a mdia aritmtica (4 notas) e
verificar se esse aluno foi aprovado ou reprovado usando apenas as
instrues bsicas apresentadas nessa unidade?
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-75

Introduo a algoritmos 67

Seo 3 Tipos de operadores


Operadores so elementos funcionais que atuam sobre operandos e produzem
um determinado resultado. Por exemplo, a expresso 5 + 3 relaciona dois operandos
(os nmeros 5 e 3) por meio do operador (+) que representa a operao de adio.
De acordo com o nmero de operandos sobre os quais os operadores atuam, estes
podem ser classificados em:
binrios, quando atuam sobre dois operandos. Ex.: os operadores das operaes
aritmticas bsicas (soma, subtrao, multiplicao e diviso);
unrios, quando atuam sobre um nico operando. Ex.: o sinal de (-) na frente
de um nmero, cuja funo inverter seu sinal.

3.1 Operadores aritmticos


Os operadores aritmticos se relacionam s operaes aritmticas bsicas, con-
forme a tabela a seguir:

Quadro 2.4 Prioridade dos operadores

Operador Tipo Operao Prioridade


+ Binrio Adio 4
- Binrio Subtrao 4
* Binrio Multiplicao 3
/ Binrio Diviso 3
MOD Binrio Resto da diviso 3
DIV Binrio Diviso Inteira 3
** ou ^ Binrio Exponenciao 2
+ Unria Manuteno do sinal 1
- Unria Inverso do sinal 1
Fonte: Do autor (2014).

Durante a execuo de uma expresso que envolve vrios operadores, necessrio


a existncia de prioridades, caso contrrio, poder obter valores que no representam
o resultado esperado. A maioria das linguagens de programao utiliza as seguintes
prioridades de operadores:
1 Efetuar operaes embutidas em parnteses mais internos.
2 Efetuar funes.
3 Efetuar multiplicao e/ou diviso.
4 Efetuar adio e/ou subtrao.
5 Operadores relacionais.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-76

68 TCNICAS DE PROGRAMAO

3.2 Operadores relacionais


Os operadores relacionais so operadores binrios que devolvem os valores l-
gicos (verdadeiro e falso).

Operador Comparao
> Maior que
< Menor que
>= Maior ou igual
<= Menor ou igual
= Igual
<> Diferente

Os operadores relacionais so utilizados quando se deseja efetuar comparaes


entre objetos de mesma natureza, isto varivel do mesmo tipo de dado. O resultado
de uma comparao sempre um valor lgico.
Por exemplo, digamos que a varivel inteira escolha contenha o valor 7. A primeira
das expresses a seguir fornece um valor falso, e a segunda um valor verdadeiro:
escolha <= 5
escolha > 5

3.3 Operadores lgicos


Os operadores lgicos ou booleanos so usados para combinar expresses re-
lacionais. Tambm devolvem como resultado valores lgicos verdadeiro ou falso. A
tabela a seguir apresenta os tipos de operadores lgicos.

Operao Operador
Negao No
Conjuno E
Disjuno (no exclusiva) Ou
Disjuno (exclusiva) Xou

A tabela anterior apresenta os operadores lgicos j ordenados de acordo com


suas prioridades, ou seja, se na mesma expresso for utilizado o operador ou e o
operador no, por exemplo, primeiro ir executar o no e depois o ou.
De uma forma geral, os resultados possveis para os operadores lgicos esto
representados na tabela abaixo, conhecida como tabela verdade.

A B AeB A ou B No A A xou B
F F F F V F
F V F V V V
V F F V F V
V V V V F F
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-77

I n t r o d u o a a l g o r i t m o s 69

Exemplos de expresses utilizando operadores lgicos:


Para A = V, B = F e C = F , as expresses abaixo fornecem os seguintes resultados:

Expresso Resultado
a) No A No V = F
b) A e B VeF=F
c) A ou B V ou F = V
d) No (B ou C) No (F ou F) = No F = V

Para saber mais


Conceitos sobre tipos de operadores:
Captulo 4 Estruturas de controle A tomada de deciso (MANZANO, 2008).
Captulo 5 Expresses (SALIBA, 1992).

Atividades de aprendizagem
1. Os pares de instrues abaixo produzem o mesmo resultado?
(4 / 2) + (2 / 4) e 4/2+2/4
4 / (2 + 2) / 4 e 4/2+2/4
(4+2)*2-4 e 4+2*2-4

2. Dadas as informaes abaixo, informe qual o valor das relaes (verda-


deiro ou falso):
a) a = 9.0, b = 2.0, nome = Beatriz, profisso = advogado
a + b = 11 ( )
nome <> Carlos ( )
profissao = professor ( )
b) a = 8 b = 12 nome = Veronice, profisso =professor
a+5=b-3 ( )
nome <> ana ( )
profissao = dentista ( )
c) x = 3, y = 4, z = 10, nome = Carlos, R = verdadeiro
( x + y > z ) e (nome = Carlos) ( )
(R) ou ( y > = x ) ( )
(not R) e ( z div y + 1 = x ) ( )
(nome = jos) e ( x + y + z < ( y * y )) ( )
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-78

70 TCNICAS DE PROGRAMAO

3. Determine os valores finais de A, B e C aps a execuo do trecho do


algoritmo abaixo:
Atribuies Simulao
A <-0
B <- 1 Memria Vdeo
C <- A + B
A <- A + 1
B <- A + B + C

4. Sabendo que A=3, B=8 e C=4, informe se as expresses abaixo so verda-


deiras ou falsas.
Expresso Verdadeiro Falso
a) (A+C) > B ( ) ( )
b) B >= (A + 3) ( ) ( )
c) C = (B A) ( ) ( )
d) (B + A) >= C ( ) ( )
e) (C+A) > B ( ) ( )

5. Sabendo que A=5, B=4 e C=3 e D=6, informe se as expresses abaixo so


verdadeiras ou falsas.
Expresso Verdadeiro Falso
(A > C) .e. (C >= B) ( ) ( )
(A+B) > 10 .ou. (A+B) = (C+D) ( ) ( )
(A>=C) .e. (D >= C) ( ) ( )
nao (A < B) xou (D = C) ( ) ( )
A < B xou B > D ( ) ( )

6. Determine o resultado lgico das expresses abaixo, assinalando se so


verdadeiras ou falsas. Considere os seguintes valores para as variveis:
X = 8, A=7 , B=5 , C=3 , D=6 , NOME=MARIA.

Expresso Verdadeiro falso


(X < 10) .e. (A = 3) ( ) ( )
(X=5) .ou. (B < 4) .ou. (C>6) ( ) ( )
(NOME=MARIA) .e. (A > 5) ( ) ( )
(NOME<>PEDRO) .e. (D > B) ( ) ( )
(A < B) .ou. (D > C) ( ) ( )
(B >= A) .e. (D>C) ( ) ( )
(D<>C) .ou. (X > A) ( ) ( )
(NOME=PEDRO ) .ou. (C <> 5) ( ) ( )
(A = B) .e. (C < D) ( ) ( )
(B > 3 ) .e. (C < 8) ( ) ( )
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-79

I n t r o d u o a a l g o r i t m o s 71

Questes para reflexo


Qual a relao entre as variveis e os tipos de dados?
Qual a restrio para usar os operadores relacionais?
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-80

72 TCNICAS DE PROGRAMAO

Seo 4 Estrutura sequencial


Na estrutura sequencial os comandos de um algoritmo so executados em uma
sequncia preestabelecida. Cada comando executado somente aps o trmino do
comando anterior.

Pseudocdigo Fluxograma

...
<comando 1> COMANDO 1

<comando 2>
<comando n>
... COMANDO 2

COMANDO N

4.1 Estrutura sequencial exemplo (pseudocdigo e


fluxograma)
Exemplo 1: tem por funo efetuar a leitura de dois nmeros, calcular a soma e
apresentar o resultado.

Pseudocdigo Fluxograma
Obs: antes de desenvolver o pseudocdigo identifique: INICIO
Quais so as entradas? NUMERO1 e NUMERO2
Qual o processamento? Calcular a soma
Qual a sada? Apresentar a soma Entre com o 1
nmero:
algoritmo SomaNmeros
var
NUMERO1, NMERO2: inteiro NUMERO1

SOMA: inteiro;
Incio Entre com o 2
// --------- Entrada --------- nmero:
escreva(Entre com o 1 nmero: )
leia(NMERO1)
NUMERO2
escreva(Entre com o 2 nmero: )
leia(NMERO2)
SOMA <- NUMERO1 + NUMERO2

// -------- Processamento -------


SOMA <- NMERO1 + NUMERO2
A soma : ,
// -------- Sada ------- soma

escreva(A soma : , SOMA)


FIM
fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-81

I n t r o d u o a a l g o r i t m o s 73

Exemplo 2: tem por funo calcular a rea e o permetro de um retngulo.

Pseudocdigo Fluxograma
Dados de entrada:
INICIO
Obter o valor da altura do retngulo.
Obter o valor da largura do retngulo.
Entre com a
Processamento: altura:
Calcular a rea.
Calcular o permetro.
ALTURA
Sada:
Mostrar os clculos realizados.
algoritmo reaPermeto Entre com a
Var largura
REA, PERMETRO, ALTURA, LARGURA: real
Incio
// --------- Entrada -------- LARGURA
escreva(Entre com a altura: )
Leia(ALTURA)
AREA <- ALTURA * LARGURA
PERIMETRO <- 2 * ALTURA + 2 * LARGURA
escreva(Entre com a largura: )
leia(LARGURA)
A rea : ,
// --------- Processamento -------- AREA
REA = ALTURA * LARGURA
PERMETRO <- 2 * ALTURA + 2 * LARGURA
O permetro : ,
// --------- Sada -------- PERIMETRO
escreva(A rea : , AREA)
escreva (O permetro : , PERMETRO)
FIM
fimalgoritmo

Exemplo 3: tem por funo determinar a rea de um quadrado a partir da leitura


do seu lado.

Pseudocdigo Fluxograma
Dados de entrada: Sada:
INICIO
Obter o valor do lado. Mostrar o valor da rea.

Processamento:
Informe a media
Calcular a rea. do lado:
algoritmo reaPermeto
Var
LADO, REA: real
Incio LADO
// --------- Entrada --------
escreva(Informe a medida do lado:)
lEIA(LADO) AREA LADO * LADO

// --------- Processamento --------


REA <- LADO * LADO
A rea :, AREA
// --------- Sada --------
escreva (rea =, REA)
FIM
fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-82

74 TCNICAS DE PROGRAMAO

4.2 Estrutura sequencial exemplo (simulao


teste de mesa)
Exemplo 1: Efetuar a leitura de dois valores para as variveis A e B, e efetuar as
trocas dos valores de forma que a varivel A passe a possuir o valor da varivel B
e a varivel B passe a possuir o valor da varivel A. Apresentar os valores trocados.

Algoritmo Simulao
algoritmo "exemplo01"
var
Memria Vdeo
A <- 20 Digite o
A, B, TROCA: inteiro
valor(numrico)
B <- 30
da varivel A:
incio
TROCA <- 20 20
//========ENTRADA ===========
escreva("Digite o valor(numrico) da A <- 30
Digite o valor
varivel A: ")
B <- TROCA (numrico) da
leia(A)
varivel A: 30
escreva("Digite o valor(numrico) da
O novo valor de
varivel B: ")
A : 30
leia(B)
O novo valor de
// =====PROCESSAMENTO ========
B : 20
TROCA <- A
A <- B
B <- TROCA

//==========SADA ============
escreva("O novo valor de A : ",A)
escreva("O novo valor de B : ",B)

fimalgoritmo

Exemplo 2: tem por funo efetuar a leitura de trs nmeros e calcular a mdia
aritmtica.

Pseudocdigo Simulao
algoritmo MdiaAritmetica
Var
N1, N2, N3: real
Memria Vdeo
MDIA: real Entre com os
Incio
// --------- Entrada -------- N1 <- 10 nmeros:
escreva(Entre com os nmeros: ) N2 <- 20 10
Leia(N1, N2, N3)
N3 <- 30 20
MDIA <- (10 + 20 30
// --------- Processamento --------
MDIA = (N1 + N2 + N3) / 3 + 30) / 3 A Mdia : 20

// --------- Sada --------


escreva(A Mdia : , MDIA)

fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-83

I n t r o d u o a a l g o r i t m o s 75

4.3 Estrutura sequencial exemplo (resoluo)


Exemplo 1: Faa um algoritmo que receba o preo de custo de um produto e
mostre o valor de venda. Sabe-se que o preo de custo receber um acrscimo de
acordo com um percentual informado pelo usurio.

algoritmo "exemplo01"
var
custo, venda, percent: real
incio
// ===============ENTRADA ==============
escreva("Digite o custo do produto: ")
leia(custo)

escreva("Digite o percentual para venda: ")


leia(percent)

// ===============PROCESSAMENTO ==============
percent <- (percent/100) * custo
venda <- custo + percent

// ===============SADA ==============
escreval("O valor de venda : ",venda)
fimalgoritmo

Exemplo 2: O custo ao consumidor de um carro novo a soma do custo de


fbrica com a percentagem do distribuidor e dos impostos (aplicados, primeiro, os
impostos sobre o custo de fbrica, e depois a percentagem do distribuidor sobre o
resultado). Suponha que a percentagem do distribuidor seja de 28% e os impostos
45%. Escreva um algoritmo que leia o custo de fbrica de um carro e informe o custo
ao consumidor do mesmo.

algoritmo "exemplo2"
var
custoFbrica, custoFinal: real
incio
// ===============ENTRADA ==============
escreva("Informe o custo de fbrica do veculo: ")
leia(custoFbrica)

// ===============PROCESSAMENTO ==============
custoFinal <- custoFbrica + (0.28 * custoFbrica) + (0.45 *
custoFbrica)
custoFinal <- custoFinal + (0.45 * custoFinal)

// ===============SADA ==============
escreva("O custo para o consumidor final de: ",custoFinal)
fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-84

76 TCNICAS DE PROGRAMAO

Para saber mais


Conceitos sobre instrues primitivas e estrutura sequencial:
Captulo 3 tipos de dados e instrues primitivas (MANZANO, 2008).
Captulo 6 Instrues primitivas (SALIBA, 1992).

Atividades de aprendizagem
1. Analise os blocos de cdigo dos algoritmos abaixo e represente o que ser
impresso ao serem executados:
a)

A <- 15 Memria Vdeo


B <- 30

escreva( B)

B <- 40
!

escreva (A, B)

b)
A <- 20
B <- 45 Memria Vdeo
C <- A + B

escreva ( C )

B <- 30

escreva ( B, C)

C <- A + B

escreva ( A, B, C)
!

c)
A <- 15
B <- A + 1 Memria Vdeo
A <- B + 2
B <- A + 1

escreva ( A )

A <- B + 1
B <- B - 2

escreva ( A ) !
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-85

I n t r o d u o a a l g o r i t m o s 77

d)
A <- 40
B <- 30 Memria Vdeo
C <- A + B

escreva (C)

B <- 10

escreva (B, C)

C <- A + B
B <- A - C
A <- (5 + B) * 2
!

escreva (A, B, C)

2. Qual a funo do algoritmo abaixo?


Algoritmo exerccio02
Var
sal : real
incio
escreva(Digite o valor do salrio: )
leia(sal)

escreva(O salrio com 37% : , sal + (sal * 37 / 100))


fimalgoritmo

3. O algoritmo abaixo dever ler um salrio e calcular 10% de aumento sobre


ele. Para que o algoritmo seja executado corretamente, complete-o com
os comandos que faltam:
Linha 1 - Algoritmo "ReajusteSalarial"
Linha 2 - incio
Linha 3 - var
Linha 4 - SALRIO, SALRIO_NOVO ___________________
Linha 5 - ______________________ (Digite o salrio)
Linha 6 - ______________________ (SALRIO)
Linha 7 - SALRIO_NOVO _________________* 1.10
Linha 8 - __________ (O valor do novo salrio :, _____________)
Linha 9 - fimalgoritmo

4. Identifique os dados de entrada, processamento e sada no algoritmo abaixo:


Receba cdigo da pea__________________________________
Receba valor da pea___________________________________
Receba Quantidade de peas_____________________________
Calcule o valor total da pea
Quantidade * Valor da pea)____________________________
Mostre o cdigo da pea e seu valor
total__________________________________________________
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-86

78 TCNICAS DE PROGRAMAO

Questes para reflexo


O que determina se um algoritmo sequencial?
possvel resolver qualquer tipo de problema usando algoritmos sequenciais?

Fique ligado!
Para representar um algoritmo, so utilizadas diversas tcnicas e cabe ao progra-
mador adotar aquela que melhor se adapte a suas necessidades (UNISAL, 2014).
As formas mais conhecidas de algoritmos so: a) narrativa: nessa representao
os algoritmos so expressos diretamente em linguagem natural (em portugus);
b) fluxograma: o algoritmo representado em formas geomtricas diferentes
que representam aes (instrues, comandos); c) pseudocdigo: a forma de
representao de algoritmos, tambm conhecida como portugus estruturado
ou portugol, bastante rica em detalhes e assemelha-se bastante forma em
que os programas so escritos.
Operadores so sinais utilizados nos algoritmos para indicar a realizao
de operaes que podem ser de trs categorias:
Operadores aritmticos: Servem para realizar operaes com nmeros
inteiros ou reais (exemplo: 5 + 2, 3 - 1, 3 / 2, 4 * 5).
Operadores relacionais: so operadores binrios que devolvem os valores
lgicos (verdadeiro / falso). Estes valores so somente usados quando se
deseja efetuar comparaes. Comparaes s podem ser feitas entre obje-
tos de mesma natureza, isto , variareis do mesmo tipo de dado (exemplo:
tendo duas variveis numricas (N1, N2), respectivamente, os valores 10
e 12, e possvel comparar se o valor de N1 MAIOR que o valor de N2.
Operadores lgicos ou booleanos: so usados para combinar expresses
relacionais e resultam nos valores lgicos: verdadeiro ou falso. Exemplo:
tendo uma varivel MDIA contendo o valor 8 e uma varivel FALTAS
contendo o valor 12, possvel criar uma expresso para comparar se a
MDIA maior ou igual a 7 e se as FALTAS menores que 12, para que o
aluno seja APROVADO.

As instrues primitivas so comandos bsicos que efetuam tarefas essenciais


para a operao dos computadores, como entrada e sada de dados (comuni-
cao com o usurio e com os dispositivos perifricos), e movimentao dos
mesmos na memria. As instrues primitivas abordadas nessa unidade foram:
atribuio, entrada e sada.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-87

I n t r o d u o a a l g o r i t m o s 79

A operao de atribuio uma forma para especificar que a uma varivel


ser dado um valor. A operao de atribuio ser indicada por = e .
Exemplo:
NOME Marcela Reis
IDADE 25
SALRIO 2500,30

Esta uma operao dita destrutiva, pois qualquer valor que a varivel
possua antes do processamento da operao de atribuio se perde, sendo
substitudo pelo novo valor.
Exemplo:

Algoritmo atribuio
var
IDADE: inteiro
NOME: caractere
SALRIO: real
incio
NOME Marcela Reis
IDADE 25
SALRIO 2500,30
fimalgoritmo

No algoritmo, preciso representar a troca de informaes que ocorrer


entre o mundo da mquina e o nosso mundo, para isso, devemos utilizar co-
mandos de entrada e sada.
Exemplo:

Algoritmo entrada_saida
var
NOME: caractere
SALRIO: real
Incio
// ----- SOLICITANDO OS DADOS DE ENTRADA -----
escreva(Entre com seu nome:)
leia(NOME)

escreva(Entre com seu salrio:)


leia(SALRIO)

// ------------- APRESENTANDO OS DADOS -----------


escreva(Seu nome : , NOME)
escreva(Seu salrio : SALRIO)
fimalgoritmo

Os algoritmos representados nessa unidade so denominados algoritmos


sequenciais. Na estruturasequencial, os comandos deum algoritmoso exe-
cutados em uma sequncia preestabelecida de forma linear, de cima para baixo.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-88

80 TCNICAS DE PROGRAMAO

Para concluir o estudo da unidade


Os algoritmos podem ser convertidos e executados em outras linguagens de
programao, podendo citar: Pascal, Linguagem C. A seguir apresentada uma
introduo sobre a linguagem de programao C#.

Linguagem de programao C#
C# (Sharp) uma linguagem de programao orientada a objetos desen-
volvida pela Microsoft como parte da plataforma .Net (l-se DOTNET). A sua
sintaxe orientada a objetos foi baseada no C++ mas inclui muitas influncias
de outras linguagens de programao, Delphi e Java.

Visual Studio
O Visual Studio um ambiente de desenvolvimento integrado (IDE) da
Microsoft, ou seja, um programa para desenvolvimento de software. Pode
ser utilizado para desenvolver aplicaes executadas em prompt de comando
(console) e aplicaes com interface grfica para o sistema operacional Win-
dows e para ambiente web. O Visual Studio suporta diferentes linguagens de
programao como as linguagens C, C++,Visual Basic, C#, F#, alm de outras,
e possui inmeros recursos que facilitam o desenvolvimento de aplicaes.
Criar e executar um aplicativo de console:
Passos:
1. Inicie o Visual Studio;
2. No menu File, aponte para New e clique em Project;
3. Na Categorias de modelos de painel, expanda Visual C# e, em seguida,
clique em Windows;
4. No modelo de painel, clique em Aplicativo de Console;
5. Digite um nome para seu projeto no nome campo;
6. Clique em OK. O Novo projeto aparece no Solution Explorer.
7. Se Program.cs no estiver aberto no Editor de cdigo, abra-o clicando
com o boto direito em cima do arquivo na Solution Explorer, em se-
guida, clique em Exibir cdigo.
8. Substitua o contedo do Program.cs com o cdigo a seguir.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-89

I n t r o d u o a a l g o r i t m o s 81

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace exemploHello{
class Hello {
static void Main(string[] args){
Console.WriteLine("Hello World!");
Console.WriteLine("Pressione qualquer tecla para sair.");
Console.ReadKey();
}
}
}

Fonte: MSDN (2014).

9. Pressione F5 para executar o projeto. Aparecer uma janela de Prompt


de comando que contm a linha Hello World!

Entrada e sada
Programas C# geralmente usam os ser-
vios de entrada/sada fornecidos pela bi-
blioteca de tempo de execuo do .NET Para saber mais
Framework. A instruo Console.WriteLine
(Hello World!); usa o mtodo WriteLine. C# e .Net guia do desenvolvedores,
Este um dos mtodos de sada da classe de Edwin Lima e Eugnio Reis. Rio de
Console na biblioteca de tempo de execu- Janeiro: Campus, 2002.
o. Ele exibe sua string de parmetro no
fluxo de sada padro seguido por uma nova
linha. Outros mtodos Console esto dis-
ponveis para operaes de sada e entrada
diferente. Se incluir a diretiva using System, Para saber mais
no incio do programa, possvel usar dire- Para obter mais informaes sobre os
tamente as classes e mtodos de System sem mtodos de entrada/sada, consulte
qualific-los totalmente. Por exemplo, voc System.IO <http://msdn.microsoft.
pode chamar Console.WriteLine em vez de com/pt-br/library/system.io.aspx>.
System.Console.WriteLine: Acesso em: 07 junho 2014.

Declarao e tipos de variveis


No C# a declarao de variveis obrigatria, assim como a declarao de
seus tipos.
Os tipos de variveis mais utilizados so:

Tipo de dados Tamanho


int Nmero Inteiro de 32-bits
continua
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-90

82 TCNICAS DE PROGRAMAO

continuao

byte Nmero inteiro de 8-bits


double Nmero de ponto-flutuante de 64 bits
bool Valor Booleano, verdadeiro ou falso.
string Texto, nmero ou qualquer carcter.

Exemplo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace exemploNmero{
class Program{
static void Main(string[] args){

int Nmero = 2;
int OutroNmero = 2;
int MaisUmNmero = Nmero + OutroNmero;

Console.WriteLine(MaisUmNmero);
}
}
}

Obs.: Note que na primeira linha do


Links cdigo foi utilizado o comando using para
importar o namespace System; com isso
Para saber mais sobre tipos de no ser necessrio utilizar o System.Con-
dados acesse o endereo: <http:// sole.WriteLine, somente Console.WriteLine,
pt.scribd.com/doc/97707228/ como mostrado na linha Console.Wri-
CSharp-Conceitos-Variaveis-Tipos- teLine (MaisUmNmero).
Operadores-Condicionais-Lacos-
Vetores> (pginas 21 e 22). Acesso Operadores
em: 7 jun. 2014. Um operador um termo ou smbolo
que pode ser usado com uma ou mais ex-
presses, chamadas de operandos. Um operador que possui somente um ope-
rando chamado de operador unrio, e um operador com dois operandos, por
sua vez, chamado de operador binrio.
Operador unrio (++) Operador binrio (*)
Y++; x=10 * 2;
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-91

I n t r o d u o a a l g o r i t m o s 83

Operadores aritmticos
O C# suporta os smbolos aritmticos para as operaes aritmticas bsicas
como adio (+) e subtrao (-), ele utiliza o asterisco (*) para multiplicao e
barra para frente (/) para diviso.
Os operadores aritmticos descritos na tabela:

Operador Aritmtico Descrio


+ Adio
- Subtrao
* Multiplicao
/ Diviso
% Mdulo (resto da diviso)

Exemplos:
int a = 20, b = 10, c = 40, d = 10;
Console.WriteLine(a + b); // resultado = 30
Console.WriteLine(a - d); // resultado = 10
Console.WriteLine(b * d); // resultado = 100
Console.WriteLine(d / b); // resultado = 1
Console.WriteLine(a % b); // resultado = 0

Operadores relacionais
Os operadores relacionais comparam dois valores e retornam um valor booleano
(true ou false).
Os operadores relacionais descritos na tabela:

Operador Relacional Descrio


== Igual a
!= Diferente de
> Maior que
< Menor que
>= Maior do que ou igual a
<= Menor do que ou igual a

Exemplos:

int a = 15, b = 10, c = 40, d = 60;


Console.WriteLine(a == d); // resultado false
Console.WriteLine(b != c); // resultado true
Console.WriteLine(a > b); // resultado true
Console.WriteLine(c < d); // resultado true
Console.WriteLine(d <= b); // resultado false
Console.WriteLine(c >= a); // resultado true
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-92

84 TCNICAS DE PROGRAMAO

Operadores aritmticos de atribuio reduzida


Esses operadores so usados para compor uma operao aritmtica e uma
atribuio, conforme descrito na tabela a seguir:

Operador Aritmtico Descrio


+= mais igual
-= menos igual
*= vezes igual
/= dividido igual
%= mdulo igual

No exemplo a seguir, acrescentado o valor 30 a varivel x:

int x = 30;
x += 10; // a mesma coisa que x = x + 10
Console.WriteLine("Valor do x = " + x); // resultado = 40
x -= 20 // a mesma coisa que x = x 20
Console.WriteLine("Valor do x = " + x); // resultado = 20

Operadores lgicos

Os operadores lgicos trabalham como operandos booleanos e seu resultado


tambm ser booleano (true ou false). Eles so usados somente em expresses
lgicas, e so descritos na tabela a seguir:

Operador Lgico Descrio


&& AND = E
|| OR = Ou
! NOT = No

Exemplos:

int a = 10, b = 15, c = 12, d = 25;


Console.WriteLine(a == 10 && d == 15); // resultado false
Console.WriteLine(c < b || d == 20); // resultado true
Console.WriteLine(! (b > a)); // resultado true
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-93

I n t r o d u o a a l g o r i t m o s 85

Atividades de aprendizagem da unidade


1. Faa um algoritmo que escreva a mensagem Ol, mundo.
2. Leia dois nmeros inteiros e imprima a soma deles.
3. Faa um programa que calcule e mostre a rea de um tringulo. Sabe-se
que: rea = (base * altura) / 2.
4. Faa um algoritmo que leia quatro nmeros informados pelo usurio e que
depois imprima a mdia ponderada, sabendo que os pesos so respecti-
vamente: 1, 2, 3 e 4:
5. Faa um algoritmo para Calcular o estoque mdio de uma pea, sendo que
ESTOQUEMEDIO = (QUANTIDADE_MINIMA + QUANTIDADE+MAXIMA) / 2.
6. Elabore um algoritmo que leia o tamanho do lado de um quadrado e informe
a rea e o permetro do quadrado. (Permetro = 4 * LADO; rea = LADO ^ 2).
7. Faa um programa que calcule e mostre a rea de um crculo. Sabe-se que:
rea = * r2.
8. Faa um programa que receba o salrio de um funcionrio, calcule e mostre
o novo salrio, sabendo-se que este sofreu um aumento de 25%.
9. Faa um programa que receba o salrio base de um funcionrio, calcule
e mostre o seu salrio a receber, sabendo-se que o funcionrio tem grati-
ficao de R$ 50 e paga imposto de 10% sobre o salrio base.
10. Uma revendedora de carros usados paga a seus funcionrios vendedores
um salrio fixo por ms, mais uma comisso, tambm fixa, para cada carro
vendido e mais 5% do valor das vendas por ele efetuadas. Escrever um
algoritmo que leia o nmero de carros por ele vendidos, o valor total de
suas vendas, o salrio fixo e o valor que recebe por carro vendido. Calcule
e escreva o salrio mensal do vendedor.
11. A conta de gua de uma residncia o resultado da soma da tarifa de gua
com tarifa de esgoto. Faa um algoritmo que leia a tarifa de gua, calcule a
tarifa de esgoto (80% da tarifa de gua) e escreva o valor da conta a ser paga.
12. Jos distribui sua renda mensal da seguinte forma: 10% sade, 25% edu-
cao, 30% alimentao, 10% vesturio; 5% lazer, 20% outros. Faa um
algoritmo que leia a renda mensal lquida de Jos, calcule e escreva o valor
aplicado em cada item acima citado.
13. Escreva um algoritmo para ler o nmero total de eleitores de um municpio,
o nmero de votos brancos, nulos e vlidos. Calcular e escrever o percen-
tual que cada um representa em relao ao total de eleitores.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-94

86 TCNICAS DE PROGRAMAO

14. Elabore um algoritmo que leia o nmero de horas trabalhadas e o valor do


salrio mnimo. Calcule e escreva o salrio a receber seguindo as regras
abaixo:
A hora trabalhada vale a metade do salrio mnimo.
O salrio bruto equivale ao nmero de horas trabalhadas multiplicado
pelo valor da hora trabalhada.
O imposto equivale a 3% do salrio bruto.
O salrio a receber equivale ao salrio bruto menos o imposto.
15. Uma pessoa paga de impostos anuais, o seguinte:
IPTU: 1% do valor do imvel.
IPVA: 3% do valor do veculo.
Obs.: Faa um programa que leia o valor do imvel e do veculo. Calcule
o IPTU e o IPVA, o total pago em impostos e mostre os resultados.
16. Faa um algoritmo que receba o ano de nascimento de uma pessoa e o
ano atual, calcule e mostre:
A idade dessa pessoa.
Quantos anos ela ter em 2028.
17. Faa um algoritmo que receba o custo de um espetculo teatral e o preo
do convite esse espetculo. Esse programa deve calcular e mostrar:
A quantidade de convites que devem ser vendidos para que pelo menos
o custo do espetculo seja alcanado.
A quantidade de convites que devem ser vendidos para que se tenha
um lucro de 23%.
18. Considerando uma eleio de apenas 2 candidatos, elabore um algoritmo
que leia do teclado o nmero total de eleitores, o nmero de votos do
primeiro candidato e o nmero de votos do segundo candidato. Em se-
guida, o algoritmo dever apresentar o percentual de votos de cada um
dos candidatos e o percentual de votos nulos.
19. Faa o algoritmo que calcule o valor, em reais, correspondente aos dla-
res que um turista possui no cofre do hotel. O programa deve solicitar os
seguintes dados: Quantidade de dlares guardados no cofre e cotao do
dlar naquele dia.
20. Faa um algoritmo que receba o preo de custo de um produto e mostre o
valor de venda. O preo de custo receber um acrscimo de acordo com
um percentual informado pelo usurio.
21. Faa um programa que receba o salrio-base de um funcionrio, calcule
e mostre o seu salrio a receber, sabendo-se que esse funcionrio tem
gratificao de R$50,00 e paga imposto de 10% sobre o salrio-base.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-95

I n t r o d u o a a l g o r i t m o s 87

Referncias
MSDN. Hello World: seu primeiro programa (guia de programao em C#). Disponvel em:
<http://msdn.microsoft.com/pt-br/library/k1sx6ed2.aspx>. Acesso em: 31 mar. 2014.
UNISAL. Centro Universitrio Salesiano de So Paulo. Algoritmos e fluxogramas: lgica
de programao. Disponvel em: <http://galehp.com.br/doc/tecnologia/linguagem_de_
programacao_I/Logica%20_Total.pdf>. Acesso em: 31 mar. 2014.
Leitura complementar
GUIMARES, ngelo de Moura; LAGES, Newton Alberto de Castilho. Algoritmos e
estruturas de dados. Rio de Janeiro: LTC, 1994.
MANZANO, Jos Augusto N. G.; OLIVEIRA, Jayr Figueiredo de. Algoritmos e lgica para
desenvolvimento de programao de computadores. 21. ed. So Paulo: rica, 2008.
SALIBA, Walter Luiz Caram. Tcnicas de programao: uma abordagem estruturada. So
Paulo: Pearson Makron Books, 1992.
JABOUR. Filippe. Algoritmos computacionais com aplicaes em C. Disponvel em:
<http://www.jabour.com.br/algoritmosJabour.pdf>. Acesso em: 31 mar. 2014.
MOREIRA. Jander. Construo de algoritmos. Disponvel em: <http://livresaber.sead.
ufscar.br:8080/jspui/bitstream/123456789/1008/1/Constru%C3%A7%C3%A3o%20de%20
algoritmos_apostila.pdf>. Acesso em: 31 mar. 2014.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-96
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-97

Unidade 3
Estrutura de controle
Veronice de Freitas

Objetivos de aprendizagem: Na criao de algoritmos, ou linguagens


de programao, necessrio utilizar diversos mecanismos para que
consiga resolver um determinado problema. Essa unidade ir contem-
plar vrios tipos de estruturas para controle.

Seo 1: Estrutura condicional


A estrutura condicional permite a escolha do grupo
de aes e estruturas a ser executado quando deter-
minadas condies so ou no satisfeitas. A estrutura
condicional pode ser apresentada por meio de uma
estrutura simples, composta, encadeada.

Seo 2: Estrutura caso


Este tipo de estrutura uma generalizao da estru-
tura condicional SE, em que a condio avaliada e
dois caminhos podem ser seguidos. Na estrutura de
deciso do tipo ESCOLHA pode haver uma ou mais
condies a serem testadas e comandos diferentes
associados a cada uma destas.

Seo 3: Lao enquanto (while)


A estrutura de repetio enquanto / faa (tam-
bm chamada de repetio pr-testada ou lao con-
dional) a mais difundida estrutura de repetio, e
sua estrutura bsica :
enquanto <condio> faca
<bloco de instrues>
Fimenquanto
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-98

Seo 4: Repetio com teste no final


A estrutura repita / at (tambm chamada repeti-
o ps-testada ou lao condicional) uma variao
da estrutura de repetio enquanto / faa. Nessa
estrutura, a verificao da condio realizada aps
uma execuo do bloco. Sua estrutura bsica :
repita
<bloco de instrues>
ate <condio>

Seo 5: Repetio incondicional nmero


predefinido de repeties
A estrutura de repetio para / fimpara (ou repe-
tio com varivel de controle tambm conhecida
como laos contados) uma estrutura de repetio
que utiliza uma varivel de controle para cada ite-
rao do bloco. Sua estrutura bsica :
para VARIAVEL de VALOR INICIAL ate VALOR FINAL passo N faca
<bloco de instrues>
Fimpara

Onde: N indica a variao do passo de incremento


da VARIVEL (obs.: tambm poder ser utilizada
de forma decrementada com o passo negativo se o
valor inicial for maior que o valor final).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:45 - August 22, 2014 - PG-99

Estrutura de controle 91

Introduo ao estudo
As estruturas de seleo, tambm chamadas de estruturas de deciso, executam
testes por meio dos operados relacionais e lgicos, a fim de decidir qual ao (ou
conjunto de aes) deve ser tomada. Essas estruturas so obtidas por meio dos cha-
mados comandos de desvio condicional para tomar decises.
At o momento, os algoritmos apresentados utilizavam apenas instrues pri-
mitivas de atribuio, de entrada e sada de dados. Quaisquer conjuntos de dados
fornecidos a este tipo de algoritmo so executados sempre na mesma sequncia.
No entanto, na prtica, muitas vezes necessrio executar aes diversas em
funo dos dados fornecidos ao algoritmo. Alm disso, pode ser necessrio executar
um mesmo conjunto de instrues um nmero repetido de vezes. Em resumo, neces-
srio controlar o fluxo de execuo das instrues (a sequncia em que as instrues
so executadas em um algoritmo) em funo dos dados fornecidos como entrada.
A classificao das estruturas de deciso realizada de acordo com o nmero de
condies que devem ser testadas para que se decida qual o caminho a ser seguido,
podendo ser de quatro tipos:
a) Estrutura de deciso simples (se ... ento).
b) Estrutura de deciso composta (se ... ento ... seno).
c) Estrutura de deciso encadeada (se... ento ... seno) com outros testes con-
dicionais encadeados.
d) Estrutura de deciso mltipla do tipo escolha (escolha ... caso ... seno).

A estrutura de repetio laos (loops) um mecanismo importante na repre-


sentao de comportamento de programas corresponde repetio de aes. Em vez
de escrever mltiplas vezes uma mesma sequncia de aes, pode-se escrev-la uma
nica vez com o auxlio das estruturas de repetio, nas quais as condies funcio-
nam como o elemento que determina a continuidade ou a interrupo da execuo
da sequncia de aes especificada.
As estruturas de repetio so teis quando um trecho de cdigo deve ser repe-
tido vrias vezes.
As principais estruturas de repetio so:
enquanto... faa (lao condicional)
repita... At (lao condicional)
para... de... at... passo... faa (lao contado)

Os LAOS CONDICIONAIS so aqueles que no possuem um nmero pre-


determinado de vezes para que a estrutura de comandos seja executada, porm este
nmero estar vinculado a uma determinada condio.
Os LAOS CONTADOS so aqueles em que de forma prvia j se conhece o
nmero de vezes que uma determinada sequncia de comandos ser executada.
Em linguagem de programao, as estruturas de repetio so conhecidas como
laos (loops).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-100

92 TCNICAS DE PROGRAMAO

Seo 1 Estrutura condicional


Neste tipo de estrutura, o fluxo de instrues a ser seguido escolhido em funo do
resultado da avaliao de uma ou mais condies. Uma condio uma expresso lgica.

1.1 Estrutura condicional simples


Descrevem aes que sero executadas somente quando a expresso lgica for
satisfeita.
Sintaxe:

Pseudocdigo Fluxograma

se <condio> ento
<bloco de comandos> comando
fimse
F V
condio

Bloco verdade

Comando

A <condio> uma expresso que dever retornar um valor de verdadeiro (V)


ou de falso (F), e caso o resultado dessa expresso seja verdadeiro, ser executado
o bloco de comandos que est dentro da estrutura. Caso seja falso, a execuo do
programa ignora o bloco de comando e continua na linha seguinte estrutura de
condio.
O <bloco de comandos> uma sequncia de cdigos que ser executado somente
quando o resultado da expresso lgica for verdadeiro.
Exemplo 1: tem por funo comparar se o valor de X maior que o valor de Y.

X <- 20
Y <- 10
Se (X > Y) ento
escreva(O valor de X maior que o valor de Y)
fimse
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-101

E s t r u t u r a d e c o n t r o l e 93

Exemplo 2: Condio: verifica se a idade da pessoa maior ou igual a 18.

Algoritmo exemplo02
Var
idade: inteiro
incio
//-------------- ENTRADA ---------------
escreva (digite a sua idade)
leia(idade)

//-------------- SADA ---------------


se idade >= 18 ento
escreva (voc maior de idade)
fimse

fimalgoritmo

Atividades de aprendizagem
Indique a sada dos trechos a seguir:
Pseudocdigo Simulao

a) X <- 10 Memria Vdeo


se (X / 5 = 2) ento
X <- 0
fimse

escreva (X)

b) X <- 10
Y <- 15 Memria Vdeo
se ((X <= 10) e (Y > 13)) ento
X <- 3
fimse

escreva (X)
c) X <- 10
Y <- 15 Memria Vdeo
se ((X < 10) e (Y > 13)) ento
X <- 3
fimse

escreva (X)

1.2 Estrutura condicional composta se-ento-seno


Tambm chamado de comando de deciso dupla, determinando dois tipos de
aes, uma para quando o resultado da expresso for verdadeiro (aps ento) e outra
para quando o resultado da expresso for falso (aps seno). O comando formado
pelas palavras reservadas se, ento, seno e fimse.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-102

94 TCNICAS DE PROGRAMAO

Sintaxe:
Pseudocdigo Fluxograma

se <condio> ento
<bloco de comandos verdade> comando
seno
<bloco de comandos falsidade>
fimse F V
condio

Bloco falsidade Bloco verdade

Comando

Na estrutura se-ento-seno, o bloco verdade executado se a condio for


verdadeira e o bloco falsidade executado se a condio for falsa.
Exemplo 1: algoritmo verifica se a pessoa possui idade maior ou igual a 18.

algoritmo exemplo01
var
idade: inteiro
incio
//-------------- ENTRADA ---------------
escreva (digite a sua idade)
leia(idade)

//-------------- SADA ---------------


se idade >= 18 ento
escreva (voc maior de idade)
seno
escreva (_voc menor de idade_)
fimse

fimalgoritmo

Exemplo 2: o algoritmo efetua a leitura de 4 notas de um aluno no intervalo de


1 a 10. Aps calcular a mdia das notas, apresentar a mensagem Aprovado se o
aluno tiver obtido mdia maior ou igual a 6. Caso contrrio, apresentar Reprovado.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-103

E s t r u t u r a d e c o n t r o l e 95

Algoritmo exemplo02
var
n1, n2, n3, n4, media : real
incio
//-------------- ENTRADA ---------------
escreva(Digite o valor da primeira nota de 1 a 10: )
leia( n1 )

escreva( Digite o valor da segunda nota de 1 a 10: )


leia ( n2 )

escreva Digite o valor da terceira nota de 1 a 10: )


leia ( n3 )

escreva( Digite o valor da quarta nota de 1 a 10: )


leia ( n4 )

//-------------- PROCESSAMENTO ---------------


mdia <- (n1 + n2 + n3 + n4) / 4

//-------------- SADA ---------------


se (mdia >= 6) ento
escreva O aluno foi APROVADO!
seno
escreva O aluno foi REPROVADO!
fimse

fimalgoritmo

Atividades de aprendizagem
1. Indique a sada dos trechos abaixo, considerando
A <- 2 B <- 3 C <- 5 D <- 9
Pseudocdigo Simulao
a) se (no (D > 5)) ento
X <- (A + B) * D Memria Vdeo
seno
X <- (A B) / C
fimse

escreva (X)
b) se ((A > 2) e (B < 7)) ento
X <- (A + 2) * (B 2) Memria Vdeo
seno
X <- (A + B) / D * (C + D)
fimse

escreva(X)
c) se ((A = 2) ou (B < 7)) ento
X <- (A + 2) * (B 2) Memria Vdeo
seno
X <- (A + B) / D * (C + D)
fimse

escreva(X)
d) se ((A> 2)ou no (B < 7))ento
continua
X <- A + B 2) Memria Vdeo
seno
X <- A B
Fimse

escreva(X)
e) se (nao (A > 2) ou no (B <7)) ento
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-104

escreva(X)
c) se ((A = 2) ou (B < 7)) ento
X <- (A + 2) * (B 2) Memria Vdeo
96 T C N seno
ICAS DE PROGRAMAO
X <- (A + B) / D * (C + D)
fimse
continuao
escreva(X)
d) se ((A> 2)ou no (B < 7))ento
X <- A + B 2) Memria Vdeo
seno
X <- A B
Fimse

escreva(X)
e) se (nao (A > 2) ou no (B <7)) ento
X <- A + B Memria Vdeo
seno
X <- A / B
Fimse

escreva (X)

f) se (no (A > 3) e no (B < 5)) Memria Vdeo


ento
X <- A + D
seno
X <- D / B
fimse

escreva (X)

g) se ((C >= 2) e (B <= 7)) ento Memria Vdeo


X <- (A + D) / 2
seno
X <- D * C
fimse

escreva (X)

h) se ((A >= 2) ou (C <= 1)) ento Memria Vdeo


X <- (A + D) / 2
seno
X <- D * C
fimse

escreva (X)

2. Qual ser o valor final das variveis A e B depois da execuo do seguinte


algoritmo?
Pseudocdigo Simulao

Algoritmo exercicio02 Memria Vdeo


var
A, B: inteiro

incio
A <- 1
B <- 2

se A > B ento
A <- 5
seno
A <-10
fimse

fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-105

Estrutura de controle 97

3. Qual a funo do algoritmo abaixo?


Pseudocdigo Simulao

algoritmo calcularMdia
var N1, N2, Mdia : real Memria Vdeo
incio
// ----ENTRADA ----
escreva(Nota 1:)
leia(N1)

escreva(Nota 2:)
leia(N2)

// ----PROCESSAMENTO ----
Mdia <- (N1 + N2)/2

// ----SADA ----
se mdia>=6 ento
escreva(aprovado)
seno
escreva(reprovado)
fimse

fimalgoritmo

Questes para reflexo


O conceito de algoritmo no de exclusividade da rea da computao.
Um algoritmo tambm no representa, necessariamente, um programa de
computador e sim os passos necessrios para realizar uma tarefa ou solu-
cionar um problema, seja de que rea for.
Exemplos de algoritmos utilizados no cotidiano:
Fazer um Sanduche.
Fazer um churrasco.
Como fritar um ovo.
Trocar uma lmpada.
Ir para o trabalho.
Tomar banho.
Obs.: em que situaes poderia fazer uso de estrutura condicional?

1.3 Estrutura condicional encadeada


O encadeamento ou aninhamento das instrues de seleo se so possveis e po-
dem conter dentro de seus blocos do ento, quando teste condicional for verdadeiro,
ou do seno, quando teste for falso, todas as instrues possveis na elaborao de
um algoritmo, podendo ser outras instrues de seleo simples ou composta. A esta
possibilidade de uma instruo condicional se estar dentro de outra condicional
que se denomina Seleo Encadeada.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-106

98 TCNICAS DE PROGRAMAO

Pseudocdigo
se (<condio_1>) ento
se (<condio_2>) ento
primeiro bloco de instruo
seno
segundo bloco de instruo
fimse
senao
se (<condio_3>) ento
se (<condio_4>) ento
terceiro bloco de instruo
fimse
instruo n
seno
se (<condio_5>) ento
quarto bloco de instruo
seno
quinto bloco de instruo
fimse
fimse
fimse

Exemplo 1: apresentar se um nmero informado pelo usurio positivo, negativo


ou zero.

algoritmo "Exemplo01"
var
nmero: inteiro
incio
Leia (nmero)
Se numero = 0 ento
escreva (" zero")
seno
Se nmero > 0 ento
escreva (" positivo")
seno
escreva (" negativo")
fimse
fimse
fimalgoritmo

Questes para reflexo


possvel definir a estrutura condicional encadeada sem fazer uso do ope-
rador lgico e?
Obs.: analise o prximo exemplo para conceder crdito para os clientes.

Exemplo 2: Um banco conceder um crdito especial aos seus clientes, varivel


com o saldo mdio no ltimo ano. Faa um algoritmo que leia o saldo mdio de um
cliente e calcule o valor do crdito de acordo com a tabela a seguir. Mostre uma
mensagem informando o saldo mdio e o valor do crdito.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-107

E s t r u t u r a d e c o n t r o l e 99

Saldo mdio Percentual


de 0 a 200 nenhum crdito
de 201 a 400 20% do valor do saldo mdio
de 401 a 600 30% do valor do saldo mdio
acima de 601 40% do valor do saldo mdio

algoritmo SaldoMdio
Var
Salmdio, Vlrcred: real
Nome : caracter
incio
escreva(Entre com nome do cliente:)
leia(Nome)
escreva(Entre com saldo mdio:)
leia (Salmdio)

se Salm~edio <=200 ento


Vlrcred <- (0,00)
seno
Se Salmedio <=400 ento
Vlrcred <- (Salmdio * 20)/100;
seno
se Salmdio <=600 ento
Vlrcred <-(Salmdio * 30)/100;
seno
se Salmdio >600 ento
Vlrcred <- (Salmdio * 40)/100
fimse
fimse
fimse
fimse

escreva(Nome Cliente: Cliente)


escreva(Saldo mdio:Salmdio)
escreva(Valor do Crdito:Vlrcred)
fimalgoritmo

Atividades de aprendizagem
1. Quais os valores das variveis A, B, C ao executar o algoritmo a seguir:
Pseudocdigo Simulao
algoritmo TesteCondicional a) A = 5, B=10, C=10
Var b) A = 5, B=20, C=10
A,B,C : inteiro c) A = 20, B=5, C=10
incio
d) A = 10, B=5, C=20
A <- 5
B <- 20
C <- 10 Memria Vdeo
Se (A < B) e (B < C) ento
C <- A
Seno
se (B <> C) ento
B <- C
Seno
A <- B
Fimse
Fimse
Fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-108

100 TCNICAS DE PROGRAMAO

2. Qual o resultado das variveis A, B, C, D e E ao executar o algoritmo a seguir:


Pseudocdigo Simulao
algoritmo TesteLogico Quais so os valores
var impressos para as variveis
A, B, C, D, E: real A, B, C, D, E ao executar o
incio
algoritmo?
A <- 25
B <- 40
C <- 40 Variveis Valores
D <- 35
E <- 50 A
se (B > C) e (A < B) ento
B <- C - 1 B
E <- A
seno C
se (D < E) ou (B <> C) ento
D
B <- A + 10
D <- C E
E <- D / 2
seno
D <- B Obs: dependendo do software
A <- E *4 que for executar o algoritmo
fimse necessrio alterar a varivel E
fimse devido ao nome do operador
lgico E.
escreva(A, B, C, D, E)
fimalgoritmo

3. Fornea valores para as variveis A, B , C e verifique se eles podem ser valo-


res dos lados de um tringulo (tringulo qualquer, tringulo equiltero
ou tringulo issceles) ou se no so valores vlidos (No tringulo).
Algoritmo TiposTringulo
Var
A, B, C:inteiro
Incio
Leia(A)
leia(B)
leia(C)

se (A < B + C) e (B < A + C) e (C < A + B) ento


se A = B e B = C ento
escreva("Tringulo Equiltero");
senao
se (A = B) ou (A = C) ou (C = B) ento
escreva ("Tringulo Issceles")
senao
escreva("Tringulo Qualquer")
fimse
fimse
seno
escreva("No tringulo")
Fimse
Fim algoritmo

4. D exemplo de valores para A, B, C para que imprima a mensagem


Tringulo Equiltero.

Memria Vdeo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-109

E s t r u t u r a d e c o n t r o l e 101

5. D exemplo de valores para A, B, C para que imprima a mensagem


Tringulo Issceles

Memria Vdeo

6. D exemplo de valores para A, B, C para que imprima a mensagem


Tringulo Qualquer.

Memria Vdeo

7. D exemplo de valores para A, B, C para que imprima a mensagem No


Tringulo.

Memria Vdeo

Para saber mais


Estruturas Condicionais
<http://www.icmc.usp.br/pessoas/andretta/ensino/aulas/sme0230-1-14/aula3.pdf>.
Aula 5 Algoritmos Estruturas de Controle (Estruturas de Seleo)
<http://www.din.uem.br/~teclopes/FCaula5.pdf>.
Lgica de Programao e Estruturas de Dados
<http://rogerioaraujo.files.wordpress.com/2011/11/ebo01_logicaprogramacaoestruturadados_
capitulo01.pdf>. Acessos em: 7 jun. 2014.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-110

102 TCNICAS DE PROGRAMAO

Seo 2 Estrutura caso


Certas aplicaes envolvem um grande nmero de testes lgicos, e para trat-
-los necessrio aninhamento de SE (estrutura condicional encadeada). Existe uma
estrutura que aplicada a certos casos de aninhamento que deixa o algoritmo mais
estruturado. Veja a sintaxe a seguir:

Pseudocdigo Fluxograma
incio escolha
inicio escolha

escolha <opo>
Verdadeira
caso <opo 1> opcao 1 Comandos 1

<comandos1> Falsa

caso <opcao2> Verdadeira


opcao 2 Comandos 2

<comandos2>
Falsa
caso <opo n>
Verdadeira
opcao n Comandos 2
<comandosn>
Falsa
outrocaso
Comandos
<comandos_padro> Padro

fimescolha
inicio

Observaes:
Apenas um Caso ser executado. Ao executar o bloco de comandos associado
ao Caso selecionado, o algoritmo sair da estrutura de Escolha.
O comando Outrocaso opcional. Se for colocado dentro da estrutura de
escolha, ser executado se a condio no atender a nenhum dos testes do
Caso.

2.1 Exemplos de algoritmos mltipla escolha


Exemplo 1: estrutura de menu de opes:

algoritmo ExemploMenu
var
opo:inteiro
incio
escreva(1- Cadastrar)
escreva(2- Alterar)
escreva(3- Excluir)
escreva(4- Imprimir)
escreva(5 6 7 Em implantao aguarde !!)

escreva(Escolha a opo: )
Leia(opo)

Escolha opo
caso 1
escreva(Voc escolheu a primeira opo!)
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-111

escreva(1- Cadastrar)
escreva(2- Alterar)
escreva(3- Excluir)
escreva(4- Imprimir) Estrutura d e c o n t r o l e 103
escreva(5 6 7 Em implantao aguarde !!)

escreva(Escolha a opo: )
Leia(opo)

Escolha opo
caso 1
escreva(Voc escolheu a primeira opo!)
caso 2
escreva(Voc escolheu a segunda opo!)
Caso 3
escreva(Voc escolheu a terceira opo!)
caso 4
escreva(Voc escolheu a quarta opo!)
caso 5,6,7
escreva(Voc escolheu uma opo que no estava disponvel)
outrocaso
escreva(Opo invlida)
fimescolha
fimalgoritmo

Exemplo 2: Este algoritmo funciona como uma calculadora simples, em que algu-
mas operaes aritmticas podem ser executadas sobre dois nmeros, dependendo
da operao selecionada pelo usurio (adio, subtrao, multiplicao, ou diviso).
Caso o usurio tenha digitado um caractere diferente dos tratados pelo algoritmo, o
valor falso ser colocado na varivel verifica (pois nenhum caso vai corresponder a
expresso e a instruo dentro do seno ser executada).

Algoritmo Calculadora
var
num1, num2, result : real
operao : caractere
verifica: lgico
incio
escreva(Digite o primeiro nmero real: )
leia(num1)

escreva(Digite o segundo nmero real: )


leia(num2)

escreva (Digite o smbolo da operao a ser realizada: )


leia (operao)

verifica <- .VERDADEIRO.

escolha operao

caso '+'
resultado <- num1 + num2
caso '-'
resultado <- num1 num2
caso '*'
resultado <- num1 * num2
caso '/'
resultado <- num1 / num2
outrocaso
verifica <- .FALSO.
fimescolha

se verifica ento
escreva (O resultado da operao foi + resultado)
senao
escreva (Operao invalida!)
fimse
fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-112

104 TCNICAS DE PROGRAMAO

Atividades de aprendizagem
1. Escreva um algoritmo que receba o cdigo correspondente ao cargo de
um funcionrio de uma escola e seu salrio atual e mostre o valor do novo
salrio, com aumento, conforme tabela a seguir.
Cdigo do Cargo Cargo Aumento
1 Secretrio 45%
2 Professor 35%
3 Tesoureiro 25%
4 Coordenador 15%
5 Diretor No tem aumento

2. Faa um algoritmo que receba o cdigo correspondente ao cargo de um


funcionrio e seu salrio atual. Depois mostre o cargo, o valor do aumento
e seu novo salrio. Os cargos esto na tabela a seguir.
Cdigo Cargo Percentual
1 Escriturrio 50
2 Secretrio 35
3 Caixa 25
4 Gerente 10
5 Diretor 3

3. Faa um programa que receba dois nmeros e execute as operaes listadas


a seguir de acordo com a escolha do usurio.
Escolha do usurio Escolha do usurio
1 Mdia entre os nmeros digitados
2 Diferena do maior pelo menor
3 Produto entre os nmeros digitados
4 Diviso do primeiro pelo segundo

Para saber mais


Algoritmos e Estrutura de Deciso
<http://www.ifc-camboriu.edu.br/~frozza/2012.1/IA12/IA12-Algoritmos-Aula003-
EstruturasDeDecisao.pdf>. Acesso em: 7 jun. 2014.

Questes para reflexo


Qual a diferena entre usar um estrutura condicional encadeada e uma
estrutura de mltipla escolha? possvel implementar um mesmo algoritmo
usando os dois tipos de estrutura?
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-113

E s t r u t u r a d e c o n t r o l e 105

Seo 3 Lao enquanto (while)


A estrutura de repetio (enquanto) utilizada quando um conjunto de comandos
deve ser executado repetidamente, enquanto uma determinada condio (expresso
lgica) permanecer verdadeira. Dependendo do resultado do teste da condio, o con-
junto de comandos poder no ser executado nem uma vez (se for falsa no primeiro
teste), ou ser executado vrias vezes (enquanto for verdadeira). Sua sintaxe geral :

enquanto condio faca F


Condio
Bloco de comandos
fimenquanto V
Bloco de comandos

Caractersticas:
Testa a condio antes da execuo do bloco.
Enquanto a condio for verdadeira, o bloco de comandos executado.
Assim, o bloco de comandos pode ser executado 0 ou mais vezes.
Finaliza a execuo do bloco quando a condio se tornar falsa.

3.1 Variveis contadoras e acumuladoras


Com a utilizao de estruturas de repetio para a elaborao de algoritmos,
torna-se necessrio o uso de dois tipos de variveis para a resoluo de diversos tipos
de problemas: variveis contadoras e variveis acumuladoras.

3.1.1 Varivel contadora


Uma varivel contadora uma varivel que recebe um valor inicial, geralmente
0 (zero) antes do incio de uma estrutura de repetio, e incrementada no interior
da estrutura de um valor constante, geralmente 1;
Forma geral:

VARIVEL <- VARIVEL + CONSTANTE

Exemplo 1: Contador para contador de 1 em 1


X <- 5 // X recebe 5
X <- X + 1 // X recebe 5 + 1
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-114

106 TCNICAS DE PROGRAMAO

Obs: um contador uma varivel (qualquer) que recebe ela mesma mais um va-
lor (uma constante), no caso do exemplo a seguir, a varivel X est recebendo o
valor dela mesma mais 1. Normalmente a constante que ser somada no contador
o valor 1, para contar de 1 em 1, mas pode ser qualquer valor, como, por exemplo,
2, se quisermos contar de 2 em 2.
Exemplo 2: contador para contador de 2 em 2.

Y <- 0 // Y recebe 0
Y <- Y + 2 // Y recebe 0 + 2

Observaes dos contadores:


1. A varivel (do contador) deve possuir um valor inicial conhecido, isto , ela
deve ser inicializada.
2. Normalmente se inicializa a varivel do contador com zero, ou seja, zera-se
a varivel antes de utiliz-la.
3. Para zerar uma varivel basta atribuir a ela o valor zero: VARIVEL <- 0.
4. A constante (que geralmente contm o valor 1) determina o valor do incre-
mento da varivel (do contador), ou seja, o que ser somado (acrescido) a ela.

Exemplo algoritmo:

...
cont <- 0 // inicializa o contador
enquanto (CONT <= 10) faca // incio da estrutura de repetio
...
cont <- cont + 1 // contador
...
Fimenquanto // final da estrutura de repetio

3.1.2 Varivel acumuladora


Uma varivel acumuladora uma varivel que recebe um valor inicial, geralmente
0 (zero), antes do incio de uma estrutura de repetio, e incrementada no interior
da estrutura de um valor varivel.
Forma geral:
VARIVEL1 <- VARIVEL1 + VARIVEL2

Exemplo:

SOMA <- SOMA + NUM

Obs: um acumulador (somador) uma varivel (qualquer) que recebe ela mesma
mais uma outra varivel, no caso do exemplo anterior, a varivel SOMA est rece-
bendo o valor dela mesma mais o valor da varivel NUM. A varivel NUM representa
o valor a ser somado, acumulado na varivel SOMA.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-115

E s t r u t u r a d e c o n t r o l e 107

Observaes dos acumuladores:


1. A varivel1 (do acumulador) deve possuir um valor inicial conhecido, isto ,
ela deve ser inicializada. Normalmente, inicializa-se a varivel do acumulador
com zero, ou seja, zera-se a varivel.
2. Antes de utiliz-la. Para zerar uma varivel basta atribuir a ela o valor zero:
SOMA <- 0 (geralmente inicializada antes da estrutura de repetio).
3. A NUM indica o valor a ser acumulado, somado e armazenado na SOMA.

Exemplo algoritmo:

cont <- 0 // inicializa o contador


soma <- 0 // inicializa o acumulador

enquanto (CONT <= 10) faca // incio da estrutura de repetio


...
soma <- soma + cont // acumulador
cont <- cont + 1 // contador (controle da repetio)
...
fimenquanto // final da estrutura de repetio

3.2 Exemplos pseudocdigo simulao


A tcnica de simulao importante para analisar se o algoritmo produz o resul-
tado desejado e tambm ajuda a desenvolver a lgica para chegar na soluo correta.
Exemplo 1: Leia 5 pesos e escreva a mdia.

Observao: a varivel CONT utilizada como varivel de controle para a estru-


tura de repetio seu valor inicial 1 e a cada repetio seu valor incremen-
tado de 1 at que a condio CONT <= 5 se torne FALSA. Ao sair da estrutura de
repetio, impresso a mdia dos pesos acumulados na varivel SOMA.
.

cont <- 0 // inicializa o contador


soma <- 0 // inicializa o acumulador

enquanto (CONT <= 10) faca // incio da estrutura de repetio


...
soma <- soma + cont // acumulador
cont <- cont + 1 // contador (controle da repetio)
...
fimenquanto // final da estrutura de repetio
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-116

108 TCNICAS DE PROGRAMAO

Exemplo: simulao (teste de mesa)


Memria Vdeo
SOMA 0 Entre com o peso : 10
CONT 1 Entre com o peso : 5
// -- primeira repetio -- Entre com o peso : 20
1 <= 5 (VERDADEIRO)
SOMA 0 + 10 (10) Entre com o peso : 30
CONT 1 + 1 (2) Entre com o peso : 10
// -- segunda repetio --
2 <= 5 (VERDADEIRO)
SOMA 10 + 5 (15) A mdia : 15
CONT 2 + 1 (3)

// -- terceira repetio --
3 <= 5 (VERDADEIRO)
SOMA 15 + 20 (35)
CONT 3 + 1 (4)
// -- quarta repetio --
4 <= 5 (VERDADEIRO)
SOMA 35 + 30 (65)
CONT 4 + 1 (5)
// -- quinta repetio --
5 <= 5 (VERDADEIRO)
SOMA 65 + 10 (75)
CONT 5 + 1 (6)

6 <= 5(FALSO) = SAI DA ESTRUTURA

Exemplo 2 Leia vrios pesos e escreva a mdia.

Observao: a varivel de controle nessa verso por meio da varivel RESP, que
contm um valor inicial S para tornar a condio do ENQUANTO verdadeira
para entrar no lao) dentro da estrutura de repetio solicitado para o usurio
se deseja ler mais um peso (caso seja N ir sair da estrutura de repetio) e
imprimir a mdia dos pesos do total de repetio armazenada na varivel CONT).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-117

E s t r u t u r a d e c o n t r o l e 109

Algoritmo Exemplo2
var
PESO, SOMA : real
CONT : inteiro
RESP : caracter
incio
SOMA <- 0
CONT <- 0
RESP <- S

enquanto (RESP) = S) ou (RESP =s) faca


escreva(Entre com o peso : )
leia (PESO)

SOMA <- SOMA + PESO


CONT <- CONT + 1

Escreva(Deseja efetuar a leitura de outro peso: (S / N)?)


leia (RESP)
fimenquanto

escreva (Mdia dos Pesos:, SOMA / CONT)


fimalgoritmo

Exemplo: simulao (teste de mesa)


Memria Vdeo
Soma<-0 Entre com o peso : 10
CONT <- 0
Deseja efetuar a leitura de outro
Resp <- S
peso (S / N)? S
// -- primeira repetio --
S = S (VERDADEIRO) Entre com o peso : 5
SOMA <- 0 + 10 (10)
Deseja efetuar a leitura de outro
CONT <- 0 + 1 (1)
peso (S / N)? N
RESP <- S

// -- primeira repetio -- Mdia dos Pesos : 7.5


S = S (VERDADEIRO)
SOMA <- 10 + 5 (15)
CONT <- 1 + 1 (2)
RESP <- N // sai do lao
... Ir repetir at que o usurio
responda que no deseja continuar

3.3 Exemplos enquanto / faa (pseudocdigo)


Exemplo 1: faa um algoritmo que leia 10 temperaturas e ao final da execuo
imprima quantas temperaturas so POSITIVAS e quantas so NEGATIVAS e a MDIA
das temperaturas POSITIVAS.

Observao: faa teste de simulao respondendo os valores : 10, -5, 4, 8, 9, -4,


12, 25, 8, -3 para a temperatura e verifique: qual o total de nmeros positivos e
negativos impressos ao final da execuo?
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-118

110 TCNICAS DE PROGRAMAO

algoritmo "exemplo_temperatura"
var
CONT, TOTAL_N, TOTAL_P: inteiro
TEMPERATURA, SOMA_P: real
incio
CONT <- 0 // contador
TOTAL_N <- 0 // total de temperaturas negativas
TOTAL_P <- 0 // total de temperaturas positivas
SOMA_P <- 0 // acumula a soma das temperaturas positivas
Enquanto CONT < 10 faca

leia (TEMPERATURA) // leitura do valor da temperatura

se TEMPERATURA >=0 ento


TOTAL_P <- TOTAL_P + 1
SOMA_P <- SOMA_P + TEMPERATURA
seno
TOTAL_P <- TOTAL_N + 1
fimse

CONT <- CONT + 1


fimenquanto

Escreval ("Total de temperaturas positivas = ",TOTAL_P)


Escreval ("Mdia das temperaturas positivas = ",SOMA_P / TOTAL_P)
Escreval ("Total de temperaturas = ",TOTAL_P)
Fimalgoritmo

Exemplo 2: o algoritmo calcula a mdia de 30 alunos e a mdia da turma, infor-


mando a sua situao (reprovado, aprovado ou recuperao).

O algoritmo efetua a leitura das notas 1 e 2 de 30 alunos, calcula a mdia e im-


prime uma mensagem de acordo a mdia caculada e tambm calcula e imprime
a mdia da turma. Nesse exemplo, utilizado um contador para controlar a
leitura das notas dos 30 alunos.

algoritmo ExemploMdia
var
nome: caractere
nota_1, nota_2, mdia, SomaG, MdiaG: real
contador: inteiro

incio
mdiaG <- 0 // inicializa a varivel MdiaG
contador <- 1 // inicializa o contador

enquanto (contador<=30) faca

escreva (Nome do aluno: )


leia(nome)

escreva (Primeira nota: )


leia(nota_1)

escreva(Segunda nota: )
leia(nota_2)

// ----- calcula a mdia -----


mdia <- (nota_1 + nota_2)/2

//soma todas as mdias para no final calcular a mdia geral


somaG <- SomaG + mdia
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-119

escreva (Primeira nota: )


leia(nota_1)

escreva(Segunda nota: )
E s t r u t u r a d e c o n t r o l e 111
leia(nota_2)

// ----- calcula a mdia -----


mdia <- (nota_1 + nota_2)/2

//soma todas as mdias para no final calcular a mdia geral


somaG <- SomaG + mdia

//----- imprime a mensagem de acordo com a mdia ------


se (mdia<=3) ento
escreva(nome, mdia, Rep.)
seno
se(mdia>=6) ento
escreva(nome, mdia, Apr.)
seno
escreva(nome, mdia, Rec.)
fimse

fimse

contador <- contador + 1 // contador

fimenquanto

mdiaG <- somaG / 30 // calcula a mdia da turma


escreva(A mdia da turma :, mdiaG)

Atividades de aprendizagem
1. Qual a funo do algoritmo abaixo?
Pseudocdigo Simulao
Algoritmo exerccio02
Var Memria Vdeo
NUM, SOMA, I : inteiro
incio

SOMA <- 0
I <- 1
enquanto i <= 10 faca
leia(num)

SOMA <- SOMA + NUM


I <- I + 1
fimenquanto

escreva (SOMA)

fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-120

112 TCNICAS DE PROGRAMAO

2. Qual a funo do algoritmo abaixo?


Pseudocdigo Simulao

Algoritmo exercicio04 Memria Vdeo


Var
n, fat, i : inteiro
incio
fat <- 1
i <- 1
leia (n)

enquanto i <= n faca


fat <- fat * i
i <- i + 1
fimalgoritmo

escreva (fat)
fimalgoritmo

3. Faa a simulao do algoritmo abaixo de descreva sua funo:


algoritmo "Exerccio05"
var
nota, notaMaior, soma, conta: real
nome, nomeMaior: caracter
incio
conta <- 1
notaMaior <- 0

enquanto (conta < 4) faca


escreva("Informe o nome ", conta, ": ")
leia(nome)

escreva("Informe a nota ", conta, ": ")


leia(nota)

soma <- soma + nota

se (nota > notaMaior) ento


notaMaior <- nota
nomeMaior <- nome
fimse

conta <- conta + 1


fimenquanto

escreva(nomeMaior, " teve a maior nota!")


escreva("A mdia da turma foi: ", soma / 3)
fimalgoritmo

Para saber mais


Acesse <http://www.esj.eti.br/INED/ALP/Exercicios/ALP_Exercicios_04_Respostas.pdf>. Acesso
em: 7 jun. 2014.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-121

E s t r u t u r a d e c o n t r o l e 113

Questes para reflexo


O teste condicional da estrutura ENQUANTO <condio> FAA pode ser
FALSO logo no primeiro teste? O que ir acontecer com as instrues internas?
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-122

114 TCNICAS DE PROGRAMAO

Seo 4 Repetio com teste no final


Essa estrutura de repetio utilizada quando no se sabe o nmero de vezes em
que um trecho do algoritmo deve ser repetido, embora tambm possa ser utilizada
quando sabe esse nmero. A sintaxe geral :

REPITA

ao 1 Bloco de comandos
ao 2
...
ao n F
Condio
AT condio
V

Caractersticas:
Testa a condio aps a execuo do bloco.
A sequncia ao 1; ao 2;...; ao n, ser realizada uma vez, sendo em
seguida verificada a condio associada clusula AT. Se a condio for
falsa, o processo se repete, reiniciando pela ao 1. Se a condio for
verdadeira, a repetio cancelada;
Repete as instrues enquanto a condio for falsa.
Para a execuo do bloco quando a condio se tornar verdadeira
(denominada de condio de parada). o bloco de comandos executado
pelo menos uma vez.

A diferena entre a estrutura ENQUANTO e a estrutura REPITA que na estru-


tura REPITA os comandos sero repetidos pelo menos uma vez, j que a condio
se encontra no final.

4.1 Exemplo repita / at (pseudocdigo / simulao)


Exemplo 1: repita os comandos at a condio se tornar verdadeira.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:46 - August 22, 2014 - PG-123

E s t r u t u r a d e c o n t r o l e 115

Pseudocdigo Valores obtidos durante a execuo


X <-1
Y <- 5 Memria Vdeo
repita X <- 1 3 6
Y <- 5 5 7
X <- X + 2 7 8
Y <- Y + 1 // --- primeira vez --- 9 9
X <- 1 + 2(3)
Escreva(X,Y) Y <- 6 + 1 (6)
X >= Y (falso) repete
ate X >= Y
// --- segunda vez ---
X <- 3 + 2(5)
Y <- 6 + 1 (7)
X >= Y (falso) repete

// --- terceira vez ---


X <- 5 + 2(7)
Y <- 7 + 1(8)
X >= Y (falso) - repete

// --- quarta vez ---


X <- 7 + 2 (9)
Y <- 8 + 1(9)
X >= Y (verdadeiro) - sai

4.2 Exemplo pseudocdigo


1. Faa um algoritmo com nmeros (positivos) at que o usurio informe o valor
o valor ZERO e obtenha o MAIOR valor.

Observao: inicia a varivel MAIOR com o valor ZERO e durante a execuo


do algoritmo o nmero informado comparado com a varivel MAIOR se o
nmero informado for maior que o valor armazenado na varivel MAIOR, seu
valor ser substitudo pelo nmero (no final da execuo a varivel MAIOR ir
conter o nmero com maior valor).

algoritmo "maiorValor"

var
maior: inteiro
N: inteiro
RESP: caracter
incio
MAIOR <- 0 // valor inicial da varivel MAIOR
repita
//validao para entrar com n maior ou igual a zero
repita
escreva("Entre com um nmero: ")
leia(N)
ate N >= 0

//compara o valor digitado com a varivel MAIOR


se N > MAIOR ento
MAIOR <- N
fimse

escreva("deseja entrar com outro nmero (S/N):")


leia(RESP)

ate RESP = "N"


99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-124

ate N >= 0

//compara o valor digitado com a varivel MAIOR


se N > MAIOR ento
116 TCNICAS DE PROGRAMAO
MAIOR <- N
fimse

escreva("deseja entrar com outro nmero (S/N):")


leia(RESP)

ate RESP = "N"

escreva("O maior valor : ", MAIOR)


fimalgoritmo

Atividades de aprendizagem
1. Analise e teste o cdigo de programa abaixo e identifique o problema desse
cdigo (faa a correo do algoritmo).
algoritmo "exerccio_01"
var
contador: inteiro
incio

escreva("Digite um nmero menor que dez: ")


leia(contador)

repita
escreva("Contador: ", contador)
ate contador > 10

fimalgoritmo

2. Qual a funo do cdigo a seguir?


algoritmo "exerccio_02"
var
opo: inteiro
somador: inteiro
incio

somador <- 0
repita
escreva("Digite um nmero qualquer ou zero para sair: ")
leia(opo)
somador <- somador + opo
escreva("Somador: ", somador)
ate opo = 0

fimalgoritmo

3. Qual a funo do cdigo a seguir?


algoritmo "exemplo_03"
var
R: real
X, Y: inteiro
opcao: caracter
incio
repita
escreva("Digite o primeiro valor: ")
leia(X)

escreva("Digite o segundo valor: ")


leia(Y)

escreva("Digite um operador (+, -, * ou /) ou s para sair: ")


leia(opo)

escolha opo
caso "+"
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-125

repita
escreva("Digite o primeiro valor: ")
leia(X)
E s t r u t u r a d e c o n t r o l e 117
escreva("Digite o segundo valor: ")
leia(Y)

escreva("Digite um operador (+, -, * ou /) ou s para sair: ")


leia(opo)

escolha opo
caso "+"
R <- X + Y
escreva(X, " +", Y, " =", R)
caso "-"
R <- X - Y
escreva(X, " -", Y, " =", R)
caso "*"
R <- X * Y
escreva(X, " *", Y, " =", R)
caso "/"
R <- X / Y
escreva(X, " /", Y, " =", R)
fimescolha
ate (opo = "s") ou (opo = "S")

fimalgoritmo

4. Faa o fluxograma do algoritmo abaixo:


Algoritmo exerccio_04
var
X: inteiro
incio
repita

escreva(Digite um valor)
leia (x)

Se (x > 0) ento
Escreva (X > 0)
Seno
Se (x < 0) Ento
Escreva (X < 0)
ate (x = 0)

escreva (X = 0)
fimalgoritmo

Para saber mais


Estrutura de repetio
<http://www.veniciopaulo.com/Aula5.pdf>. Acesso em: 7 jun. 2014.

Questes para reflexo


Qual a principal diferena entre as estruturas de repetio ENQUANTO /
FAA e REPITA / AT?
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-126

118 TCNICAS DE PROGRAMAO

Seo 5 Repetio incondicional


nmero predefinido de repeties
Essa estrutura de repetio utilizada quando se sabe o nmero de vezes em que
um trecho do algoritmo deve ser repetido.
A estrutura de repetio para-at-faa um pouco diferente das outras duas
(repita-at e enquanto-faa), pois possui uma varivel de controle, ou seja, com esta
estrutura possvel executar um conjunto de instrues um nmero determinado de
vezes, ou seja, por meio da varivel de controle, define-se a quantidade de repeties
que o lao ir realizar. A sintaxe geral :

Para varivel de controle = valor inicial at valor final faa


Bloco de comandos
Fim para

Repete o bloco de comandos:


Incrementa automaticamente a varivel de controle cada vez que o bloco
executado (incremento default de 1 at alcanar o valor final)
Se o valor final definido for menor que o valor inicial, o lao de repetio
no executado nenhuma vez.
A varivel de controle deve ser do tipo primitivo inteiro.
A varivel usada como controle da estrutura no deve ser modificada
A repetio comeca de um valor_inicial (numrico) e se encerra quando
supera o valor final.

5.1 Exemplos para / fimpara (pseudocdigo /


simulao)
Exemplo 1: tem por funo efetuar a leitura das idades de 5 pessoas e contar a
quantidade de adultos (idade >= 18).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-127

E s t r u t u r a d e c o n t r o l e 119

Pseudocdigo Simulao
Algoritmo Conta_Adultos
Var
IDADE, QTDE, X : Inteiro Memria Vdeo
QTDE <- 0 Idade? 25
incio X <- 1 Idade? 15
25 >= 18 (verdadeiro)
QTDE <- 0 QTDE <- 0 + 1(0) Idade? 40
X <- 2 Idade? 30
Para X de 1 Ate 5 Faca
15 >= 18 (falso)
Idade? 14
Escreva(Idade ?)
X <- 3
Leia (IDADE)
40 >= 18 (verdadeiro)
QTDE <- 1 + 1(2) Total de
se IDADE >=18 Ento adultos: 3
QTDE QTDE + 1 X <- 4
Fimse 30 >= 18 (verdadeiro)
QTDE <- 2 + 1(3)
Fimpara
X <- 5
Escreva (Total de Adultos 14 >= 18 (falso)
: ,QTDE)
X <- 6 (sai do lao)
Fimalgoritmo

Exemplo 2: efetua a leitura de um nmero e imprime a tabuada do mesmo.

Pseudocdigo
Algoritmo tabuada
Var
I, NUM : Inteiro
incio
escreva(Entre com o nmero da tabuada? )
leia(NUM)

para I de 1 ate 10 passo 1 faca


escreva(NUM, X , I , = , NUM * I)
fimpara

fimalgoritmo
Simulao (TESTE DE MESA)

Memria Vdeo
NUM <- 5 Entre com o nmero da
tabuada? 5
I <- 1 Valor de 5 x 1 = 5
I <- 2 NUM 5 x 2 = 10 NUM * I
I <- 3 5 x 3 = 15
I <- 4 5 x 4 = 20
I <- 5 5 x 5 = 25
I <- 6 5 x 6 = 30
I <- 7 5 x 7 = 35
VALORES
I <- 8 5 x 8 = 40
DE I
I <- 9 5 x 9 = 45
I <- 10 5 x 10 = 50
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-128

120 TCNICAS DE PROGRAMAO

Exemplo 3: efetua a leitura de um nmero e calcula o fatorial.

Pseudocdigo
Algoritmo fatorial
Var
I, FAT, NUM : Inteiro
incio
escreva(Entre com o nmero para calcular o fatorial? )
leia(NUM)

FAT <- 1
para I de 1 ate NUM passo 1 faca
FAT <- FAT * NUM
Fimpara

Escreva(O fatorial de , NUM, : , FAT)


fimalgoritmo

Simulao (TESTE DE MESA)


Obs.: o algoritmo utiliza o tipo inteiro para a varivel FAT o valor do fatorial calculado
est limitado ao tamanho suportado pelo tipo inteiro (dependendo da linguagem poder
utilizar outro tipo de dados por exemplo: long int (linguagem c).

Memria Vdeo
NUM <- 6 Entre com o nmero para calcular o
fatorial? 6
FAT <- 1
I <- 1
FAT <- 1 * 1 (1)
I <- 2
FAT <- 1 * 2 (2)
I <- 3
FAT <- 2 * 3 (6)
I <- 4
FAT <- 6 * 4 (24)
I <- 5
FAT <- 24 * 5 (120)
I <- 6
FAT <- 120 * 6 (720)
O fatorial de 6 720

5.2 Exemplo para / para (pseudocdigo)


Nessa verso do algoritmo, dever efetuar a leitura de 30 temperaturas e imprimir:
a) Quantidade de temperaturas positivas;
b) Mdia das temperaturas positivas;
c) Quantidade de temperaturas negativas.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-129

E s t r u t u r a d e c o n t r o l e 121

algoritmo "Temperatura_v2"
var
CONT, CONT_P, CONT_N: inteiro
TEMPERATURA, SOMA_P, SOMA_G: real
Incio
// ------ inicializa as variveis ------------
CONT_N <- 0 // contar as temperaturas negativas
CONT_P <- 0 // contar as temperaturas positivas
SOMA_P <- 0 // somar as temperaturas positivas para
// calcular a mdia das temperaturas positivas

//-------- LEITURA DAS 30 TEMPERATURAS -------


para CONT de 1 ate 30 passo 1 faca
Escreval("Entre com a temperatura: ")
Leia(TEMPERATURA)

se TEMPERATURA >= 0 ento


CONT_P <- CONT_P + 1
SOMA_P <- SOMA_P + TEMPERATURA
seno
CONT_N <- CONT_N + 1
Fimse
Fimpara

Escreval("Qtde de temperaturas positivas: ", CONT_P)


Escreval("Mdia das temp. positivas: ", SOMA_P / CONT_P)
Escreval("Qtde de temperaturas negativas: ", CONT_N)
fimalgoritmo

Atividades de aprendizagem
1. Qual a funo do algoritmo baixo?
Pseudocdigo Simulao
algoritmo exerccio01
Var
SOMA, IMPAR: inteiro Memria Vdeo
incio
para IMPAR de 1 ate 18 passo 2 faca
SOMA <- SOMA + IMPAR
Fimpara

escreva(a soma :, SOMA)


fimalgoritmo

2. Qual a funo do algoritmo abaixo?


Algoritmo exerccio_02
var
r, n1, cont: inteiro
incio
escreva(Entre com um nmero de 1 at 20 :
leia(n1)

Para cont de 1 ate 10 faca


r cont * n1;
escreva (n1, x ,cont, = ,r)
fimpara
fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-130

122 TCNICAS DE PROGRAMAO

3. O algoritmo abaixo tem por funo calcular a rea de um retngulo. Inclua


a estrutura de repetio para / fimpara para permitir que o usurio calcule
a rea de 10 retngulos.
Algoritmo exerccio_03
var
Base, Altura, rea: real
incio
//Obtendo os dados do usurio
Escreva('Digite o valor da base do retngulo: ')
Leia(Base)

Escreva('Digite o valor da altura do retngulo: ')


Leia(Altura)

//Calculando a rea
rea <- Base * altura

Escreva('A rea : ',rea)


FimAlgoritmo

4. Qual a funo do algoritmo abaixo?

Algoritmo exerccio_03
var
L: Inteiro
NOME: caracter
incio
escreva(entre com um nome :)
leia(NOME)

Para cont de 1 ate 10 faca


escreva(NOME)
fimpara

FimAlgoritmo

Para saber mais


Estruturas de Repetio
<http://www.esj.eti.br/INED/ALP/Exercicios/ALP_Exercicios_04_Respostas.pdf>. Acesso em: 7 jun. 2014.

Questes para reflexo


Um problema que faz uso da estrutura de repetio PARA / FIMPARA pode ser
reescrito usando as estruturas de repetio ENQUANTO / FAA ou REPITA / AT?
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-131

E s t r u t u r a d e c o n t r o l e 123

Fique ligado!
Estruturas utilizadas para reger o fluxo de execuo de um algoritmo: Estrutura
Sequencial; Estrutura de Seleo; Estrutura de Repetio. A Tabela 3.1 representa
os trs tipos de estrutura.
Tabela 3.1 Tipos de estrutura
ESTRUTURA EXEMPLO
Estrutura sequencial: Algoritmo mdia_aluno
Cada comando executado varnota1,nota2,nota3,media: real
sequencialmente at trmino do incio
algoritmo. leia (nota1,nota2,nota3)
mdia (nota1+nota2+nota3)/3
fimalgoritmo
Estrutura Condicional: algoritmo mdia_aluno
var
Permite a seleo de um grupo nota1,nota2,nota3,mdia: real
de aes (bloco) a ser executado incio
quando determinadas condies leia (nota1,nota2,nota3)
forem satisfeitas. mdia (nota1+nota2+nota3)/3
se mdia >= 7 ento
escreva (Aprovado)
seno
escreva (Reprovado)
fimse
fimalgoritmo
Estrutura de Repetio: Algoritmo mdia_turma
var
Execuo de uma sequencia de nota1,nota2,nota3,mdia,mdia_t: real
aes repetidas vezes. cont: inteiro
incio
mdia 0
mdia_t 0

para cont de 1 ate 10 passo 1 faca


leia (nota1,nota2,nota3)

mdia (nota1+nota2+nota3)/3
se mdia >= 7 ento
escreva (Aprovado)
seno
escreva (Reprovado)
fimse
fimpara

escreva(Media da turma:, mdia_t / 10);

Fimalgoritmo

Fonte: Do autor (2014).

Na Tabela 3.1, o primeiro algoritmo representa a estrutura sequencial que


efetua a leitura de trs notas, calcula e apresenta a mdia do aluno. No segundo
exemplo, faz uso da estrutura condicional para apresentar uma mensagem apro-
vado ou reprovado, dependendo do valor da mdia. No terceiro exemplo,
o algoritmo alterado para repetir o clculo da mdia para uma turma de 10
alunos e informar a mdia da turma.
Durante a programao, pode necessitar incluir outras instrues para
melhorar a integridade do algoritmo. Imagine se o usurio fornecer uma nota
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-132

124 TCNICAS DE PROGRAMAO

para o aluno que no esteja no intervalo permitido (de 0 at 10). Nesse caso,
seria necessrio validar o valor informado para a nota usando outra estrutura
de repetio interna.
Existem situaes em que os caminhos para a tomada de uma deciso aca-
bam formando uma espcie de rvore com diversas ramificaes, em que cada
caminho um conjunto de aes. Nesses casos, podemos recorrer utilizao
de vrias estruturas se-ento-seno embutidas umas dentro das outras, comu-
mente chamadas de ninhos. Como exemplificado na Tabela 3.2, tem que ficar
atento para o fechamento adequado dessas estruturas.
Tabela 3.2: encadeando diversas estruturas

Fonte: Do autor (2014).

O if aninhado simplesmente um if dentro da declarao de um outro if


externo. necessrio saber exatamente a qual if um determinado else est li-
gado, para no ocasionar erro na lgica do programa (CACHO; COELHO, 2013).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-133

E s t r u t u r a d e c o n t r o l e 125

Para concluir o estudo da unidade


Nessa seo, os algoritmos so representados na linguagem de programao C#.

Estrutura de seleo em C#
Estruturas condicionais so comuns e necessrias em todos os programas.
Em C# tambm possvel utilizar estrutura condicional simples (if), composta
(if/else), estrutura condicional encadeada e tambm uso da estrutura de mltipla
escolha (switch). Essa seo aborda a sintaxe da declarao if...else e tambm
explora outras construes condicionais presentes no C#.
Estrutura condicional if/else
A estrutura utilizada no C# semelhante com a estrutura representada nos
algoritmos condicionais.
Sintaxe:
VisuAlg C#
se (<condio>) ento if(<condio>){
... ...
seno //Opcional }
... else //Opcional
fimse {
...
}

Exemplo 1: condicional simples.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exemplo_if_01{
class Program{
static void Main(string[] args){
int A = 5;
int B = 2;

if(A > B){


Console.WriteLine("O valor de A Maior.");
}
}
}
}
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-134

126 TCNICAS DE PROGRAMAO

Exemplo 2: condicional composta.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exemplo_if_02{

class Program{

static void Main(string[] args){


int A = 4;
int B = 6;

if (A > B)
{
Console.WriteLine("O valor de A Maior.");
}
else
{
Console.WriteLine("O valor de B Maior.");
}

}
}
}

Obs.: Se dentro de um if/else tiver somente uma linha, o uso das { } opcional.
if-Inline
No C# tambm existe o if-Inline que composto por trs operandos se-
parados pelos sinais ? e : e tem o objetivo de atribuir o valor a uma varivel de
acordo com o resultado de um teste lgico.
Sintaxe:
teste lgico ? valor se verdadeiro : valor se falso;

Onde:
Teste lgico qualquer valor ou expresso, que pode ser verdadeiro ou falso.
Valor se verdadeiro atribudo ao valor true;
Valor se falso atribudo ao valor false.
Exemplo 1a: exemplo usando a condicional composta.
static void Main(string[] args){
var idade = 26;

if (idade >= 16)


Console.WriteLine("Pode votar!");
else
Console.WriteLine("No pode votar!");
}
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-135

Estrutura de controle 127

Exemplo 1b: exemplo usando a IF-INLINE.

static void Main(string[] args{


var idade = 26;

Console.WriteLine(idade >= 16 ? "Pode votar!" : "No pode votar!");


}

Switch/case
A instruo switch permite a execuo condicional de instrues de acordo
com os valores de um argumento teste, o qual pode ser uma varivel, uma ex-
presso numrica, uma string ou funes.
Sintaxe:
switch(VARIAVEL){
case VALOR:
//Faz algo se VARIAVEL for igual ao VALOR
break;

default: //(OPCIONAL)
//Faz algo se VARIAVEl no for igual a nenhum CASE
break;
}

VisuALG C#
var int x = 10;
x: inteiro switch(x) {
incio case 1:
x <- 10 Console.Write(Um);
escolha (x) break;
caso 1: case 2:
escreva(Um) Console.Write(Dois);
caso 2: break;
escreva(Dois) default:
outrocaso: Console.Write(Desconhecido);
escreva(Desconhecido) break;
fimescolha }

fimalgoritmo

O funcionamento ocorre da seguinte forma: a expresso obtida no switch


e para cada Case existe uma condio a ser validada. Caso o Case seja verda-
deiro, ento a linha ou o bloco de cdigo executado. Se nenhum dos Cases for
vlido, ento default executado. O default opcional e voc pode ter quantos
Cases for necessrio.
Observaes:
No switch voc pode ter quantos cases voc quiser.
A cada Case preciso declarar o break, seno o programa continua ava-
liando todos os Cases.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-136

128 TCNICAS DE PROGRAMAO

Exemplo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exemplo_switch{

class Program{

static void Main(string[] args){

int Numero = 2;

switch(Numero){
case 1:
Console.WriteLine("Numero igual a 1");
break;
case 2:
Console.WriteLine("Numero igual a 2");
break;
case 3:
Console.WriteLine("Numero igual a 3");
break;
default:
Console.Write(Opo invlida);
break;
}
}
}
}

Para saber mais


Estruturas Condicionais no C#
<http://www.linhadecodigo.com.br/artigo/2286/estruturas-condicionais-no-csharp.aspx>.
Linguagem de Programao I (linguagem C#)
<http://www.alcidesmaya.com.br/apostilas/linguagem_c.pdf>.

Estrutura de repetio C#
As estruturas de repetio so muito teis e empregadas quando se deseja
executar uma, ou um bloco, de instrues diversas vezes.
Estruturas de repetio do C#:
a) while
b) do... while
c) for
d) foreach
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-137

E s t r u t u r a d e c o n t r o l e 129

Estrutura de repetio while


A estrutura while executada sempre associada a uma condio, ou seja, a
cada passagem pelo looping a condio avaliada.
A condio expressa na estrutura while uma expresso booliana, ou seja,
sempre retorna falso ou verdadeiro e as instrues dentro do bloco de cdigo
s sero executadas enquanto essa expresso retornar verdadeiro.
Sintaxe:
while (CONDIO){
//Cdigo
}

Exemplo:
class Program{
static void Main(string[] args){
int contador = 0;
while (contador < 5){
Console.WriteLine("Anderson Macedo");
contador++;
}

Console.ReadKey();
}
}

No exemplo acima, tem uma varivel chamada contador com seu valor ini-
cial 0. Na CONDIO do bloco while testado se a varivel contador menor
que 5, caso verdadeiro, apresentado na tela o nome Eduardo dos Santos
e incrementado em 1 na varivel contador. Esse processo se repete at que a
CONDIO do while seja falsa.
Estrutura de repetio: do while
O comando do/while tem o mesmo funcionamento que o comando while,
tendo como diferena que a condio da estrutura testada no final e no no
incio como acontece no while.
No while, existe a possibilidade do cdigo no ser executado nenhuma vez,
pois est vinculado ao resultado da condio que testada no incio do bloco.
No do/while, o cdigo escrito dentro da estrutura ser executado pelo menos
uma vez, isso porque a verificao realizada apenas no final da estrutura.
Sintaxe:
do
{
// Cdigo
}
while (CONDIO);
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-138

130 TCNICAS DE PROGRAMAO

Exemplo:
Cdigo Teste de Mesa
using System;
class ExemploWhile{ Memria Vdeo
public static void Main(){ cont=0 Numero: 1
int cont = 0; cont 0 < 5 (v) Numero: 2
while (cont <= 5){ cont <- 0 + 1 Numero: 3
console.write(Numero: , numero); (1) Numero: 4
cont++; Numero: 5
} cont 1 <= 5 (v)
Console.WriteLine(); cont <- 1 + 1
} (2)
}
cont 2 <= 5 (v)
cont <- 2 + 1
(3)

cont 3 <= 5 (v)


cont <- 3 + 1
(4)

cont 4 <= 5 (v)


cont <- 3 + 1
(4)

cont 5 <= 5 (v)


cont <- 5 + 1
(5)

cont 6 <= 5 (f)


(sai do lao)

Estrutura de repetio: for


A estrutura for constituda de uma varivel de inicializao, uma condio
e o incremento. O lao for trabalha checando uma condio para executar um
bloco de cdigo at que essa condio seja verdadeira.
Sintaxe:
for (int i = 0; i <= 5; i++)
{
//Cdigo Incremento
}

Onde:
int i = 0: (inicializao) declarada uma varivel do tipo inteiro (int), onde
tambm definido o seu valor inicial, que nesse exemplo foi o valor 0 (zero).
i <= 5: (condio) definido a condio.
i++: (incremento) um incremento nada mais do que adicionar 1 a uma
varivel, ou seja, se uma varivel vale 0 (zero) e passa por um incremento, vale
1 e, se passa mais uma vez, vale 2, e assim por diante.
Exemplo 1: incremento de 1.
for (i = 1; i <= 10; i++){
Console.WriteLine("{0}", i);
}
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-139

Estrutura de controle 131

Exemplo 2: decremento de 2

for (i = 10; i >= 0; -=2){


Console.WriteLine("{0}", i);
}

Estrutura: foreach
A estrutura foreach utilizada para percorrer colees ou arrays. Sua estru-
tura formada pelo tipo de dado, o nome da varivel e a lista a ser percorrida.
O exemplo a seguir faz uso de array, que ser o assunto da prxima unidade.
Sintaxe:
foreach(<tipo de dado> <nome> in <lista>)
{
//Cdigo
}

Exemplo:
class Program{
static void Main(string[] args){
// array de strings = declarao e inicializao do array
string[] nomes = { "Maria", "Ana", "Rita", "Pedro","Carlos"};

foreach (string pessoa in nomes) {


Console.WriteLine(pessoa);
}
Console.ReadKey();
}
}

Atividades de aprendizagem da unidade


Atividades estrutura condicional
1. Faa um algoritmo para ler: a descrio do produto (nome), a quantida-
de adquirida e o preo unitrio. Calcular e escrever o total (total = quan-
tidade adquirida * preo unitrio), o desconto e o total a pagar (total a
pagar = total desconto), sabendo que:
Se quantidade <= 5 o desconto ser de 2%.
Se quantidade > 5 e quantidade <=10 o desconto ser de 3%.
Se quantidade > 10 o desconto ser de 5%.
2. Um posto est vendendo combustveis com a seguinte tabela de descontos:
at 20 litros, desconto de 3% por litro
lcool
acima de 20 litros, desconto de 5% por litro
at 20 litros, desconto de 4% por litro
Gasolina
acima de 20 litros, desconto de 6% por litro
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-140

132 TCNICAS DE PROGRAMAO

Escreva um algoritmo que leia o nmero de litros vendidos e o tipo de


combustvel (codificado da seguinte forma: A-lcool, G-gasolina), calcule
e imprima o valor a ser pago pelo cliente sabendo-se que o preo do litro
da gasolina R$ 3,30 e o preo do litro do lcool R$ 2,90.
Observao: embora seja possvel desenvolver as atividades a seguir usando
qualquer uma das estruturas de repetio apresentadas nessa unidade, os
exerccios foram agrupados para usar os trs tipos de estruturas. Desenvolva
inicialmente usando a estrutura sugerida e depois tente adaptar para as
outras estruturas de repetio.

Atividades estrutura de repetio ENQUANTO / FAA


3. Faa um algoritmo que imprima os nmeros de 1 at 10.
Exemplo de sada: 1,2,3,4,5,6,7,8,9,10
4. Faa um algoritmo que imprima os nmeros pares de 20 at 30.
Exemplo de sada: 20,22,24,26,28,30
5. Faa um programa que receba vrios nmeros positivos ou negativos,
terminados por zero. O programa deve fornecer como sada a soma dos
nmeros positivos. Exemplo:

Entre com um nmero: 26


Entre com um nmero: 40
Entre com um nmero: -5
Entre com um nmero: 10
Entre com um nmero: 0 (sai do lao)

6. Ler, um nmero no determinado de vezes, um valor do teclado e escrever


o valor da soma de todos os nmeros digitados at o momento, at que
seja digitado um nmero negativo. Exemplo:

Entre com um nmero: 10


Entre com um nmero: 15
Entre com um nmero: 5
Entre com um nmero: -3
A soma : 30
Obs: no considere o valor negativo na soma.

Observao: analise as estruturas de repetio a seguir antes de desenvolver


as atividades.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:47 - August 22, 2014 - PG-141

Estrutura de controle 133

Visualg C#
Repita do
// bloco de comandos // bloco de comandos
Ate condio (verdadeira) while condio (verdadeira)
Repete o bloco de comandos at que a Repete o bloco de comandos enquanto
condio seja verdadeira. a condio for verdadeira.

Atividades estrutura de repetio REPITA/AT


7. Uma empresa decidiu fazer um levantamento em relao aos candida-
tos que se apresentarem para preenchimento de vagas no seu quadro de
funcionrios. Supondo que voc seja o programador dessa empresa, faa
um programa que leia, para cada candidato, a idade, o sexo (M ou F) e a
experincia no servio (S ou N). Para encerrar a entrada de dados, digite
zero para a idade. Calcule e escreva:
Nmero de candidatos do sexo feminino.
Nmero de candidatos do sexo masculino.
A idade mdia dos homens que j tm experincia no servio.
A porcentagem dos homens com mais de 45 anos entre o total dos
homens.
Nmero de mulheres com idade inferior a 35 anos e com experincia no
servio.
A menor idade entre as mulheres que j tm experincia no servio.
Obs: para continuar o levantamento, solicite ao usurio se deseja continuar
(S SIM ou N NO).

Atividades estrutura de repetio PARA/FAA


8. Faa um algoritmo para imprimir 10 vezes o nome: Disciplina de Introdu-
o Programao.
9. Faa um algoritmo que apresente o total da soma dos cem primeiros nmeros
inteiros ( 1 + 2 + 3 + 4 + 5 + 6 + 7 + ... 97 + 98 + 99 + 100).
10. Leia 5 idades e calcule a mdia entre as idades.
11. Escreva um programa que receba a idade de 10 pessoas, calcule e imprima
a quantidade de pessoas maiores de idade (idade >= 18 anos).
12. Dados: Sexo e idade dos alunos. Construa um algoritmo para verificar em
uma classe com 50 alunos quantos so do sexo feminino e masculino e
quantos da classe toda so maiores que 18 anos. Ao final, apresente no
vdeo os totais.
13. Faa um algoritmo que calcule o fatorial de um nmero informado pelo usurio.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-142

134 TCNICAS DE PROGRAMAO

14. Faa um programa para ler o cdigo, nmero de horas trabalhadas e n-


mero de dependentes de cada funcionrio. Aps a leitura, escreva qual o
cdigo, os valores descontados para cada tipo de imposto e finalmente o
salrio lquido de cada um dos funcionrios.
Tem-se um conjunto de dados contendo a altura e o sexo (M ou F) de 15
pessoas. Faa um Programa que calcule e escreva:
A maior e a menor altura do grupo;
A mdia de altura das mulheres;
Nmero de homens
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-143

E s t r u t u r a d e c o n t r o l e 135

Referncia
CACHO, Nlio Alessandro Azevedo; COELHO, Keivilany Janielle de Lima. Lgica de
programao e algoritmos. Disponvel em: <http://www.metropoledigital.ufrn.br/aulas/
disciplinas/logica/aula_10.html>. Acesso em: 15 jul. 2013.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-144
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-145

Unidade 4
Estrutura de
dados homognea
e heterognea
Veronice de Freitas

Objetivos de aprendizagem: Geralmente, os algoritmos so elabo-


rados para manipulao de dados. Quando estes dados esto organi-
zados (dispostos) de forma coerente, caracterizam uma forma, uma
estrutura de dados. A organizao dos dados chamada de estrutura
composta de dados que se divide em duas formas fundamentais: ho-
mogneas (vetores e matrizes) e heterogneas (registros).

Seo 1: Matrizes de uma dimenso ou vetores


Vetores (array unidimensional) so variveis compos-
tas que podem armazenar um conjunto de valores.
Esse tipo de estrutura permite criar uma varivel com
n posies, recebendo dados do mesmo tipo. Cada
elemento referenciado pelo nome do vetor e sua
posio, dessa forma possvel armazenar e recuperar
os elementos do vetor.

Seo 2: Estrutura de dados homognea (matrizes)


Estruturas de dados homogneas bidimensionais,
tambm conhecidas como matrizes, so referencia-
das por dois ndices: um para indicar a linha e outro
para indicar a coluna da matriz onde se encontra o
dado. A mais comum a matriz bidimensional, por
se relacionar diretamente com a utilizao de tabelas.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-146

As matrizes com mais de duas dimenses tambm


podem ser utilizadas com facilidade aps ter domnio
na utilizao de uma matriz bidimensional.

Seo 3: Estrutura de dados heterognea (registros)


uma estrutura composta por um conjunto de
variveis de tipos diferentes que esto logicamente
relacionados (por exemplo: informaes de um
cliente) e que podem ser referenciados por um
mesmo nome (identificador do tipo registro).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-147

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 139

Introduo ao estudo
As estruturas de dados homogneas permitem agrupar diversas informaes dentro
de uma mesma varivel. Este agrupamento ocorre obedecendo sempre ao mesmo tipo
de dado, e por esta razo que estas estruturas so chamadas homogneas.
A utilizao deste tipo de estrutura de dados recebe diversos nomes, como: vari-
veis indexadas, variveis compostas, arranjos, vetores, matrizes, tabelas em memria
ou arrays. Os nomes mais usados e que utilizaremos para estruturas homogneas
so: matrizes (genrico) e vetores (matriz de uma linha e vrias colunas). Quando
possuem um nico ndice, chamada de vetor, tendo dois ou mais, chama-se matriz.
A estrutura contm:

Valor numrico inteiro e positivo que corresponde ao endereo de alocao de


ndice
uma unidade do vetor e da matriz
Contedo armazenado em um determinado endereo. Pode ser de um nico tipo
Elemento
de dado (inteiro, real, caractere ou lgico).

Dimenso Nmero de ndices da estrutura, ou seja, o seu tamanho.

Vetor (uma dimenso) Matriz (duas dimenses)

ndice Contedo ndice: coluna 1 2 3


1 5 linha
2 10 1 3 4 2
3 8 2 9 6 10
4 15 3 8 5 12
5 21 4 15 5 4
5 21 17 22
Contedo

Na representao anterior foi exemplificada a estrutura de dados homognea


(vetor e matriz), em que todos os elementos pertencem ao mesmo tipo de dados. Em
alguns casos necessrio armazenar estruturas que contm diferentes tipos de dados
(como por exemplo: informaes de um funcionrio).
Uma estrutura de dados chamada de heterognea quando envolve a utilizao de
mais de um tipo bsico de dado (inteiro ou caractere, por exemplo) para representar
uma estrutura de dados. Normalmente, este tipo de dado chamado de registro. Um
exemplo de uma estrutura de registro apresentado na Figura 4.1.
Figura 4.1 Reg_funcionrio
Roberto da Silva
15 05 1970
Vendas
2500,00
Fonte: Do autor (2014).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-148

140 TCNICAS DE PROGRAMAO

O registro do funcionrio contm vrios tipos de dados: NOME, DIA, MS e ANO


DE NASCIMENTO, DEPARTAMENTO, SALRIO.
Exemplo Registro:

// -------------- TIPO DE DADOS -----------


Tipo
dt = registro
ano: inteiro
ms: inteiro
dia: inteiro
fim

REG_FUNCIONARIO = registro
NOME :caractere
DATA_NASC :dt
DEPARTAMENTO :caractere
SALRIO:real
Fim

// -------------- VARIVEIS -----------


Var
// varivel para armazenar um funcionrio
FUNCIONRIO : REG_FUNCIONRIO

Registros e vetores podem ser compostos a fim de resolver problemas mais com-
plexos. Considerando que um vetor um conjunto de elementos do mesmo tipo,
natural que, quando precisarmos agrupar vrios registros (por exemplo, vrias Fichas
Cadastro), utilizaremos vetores (conjuntos) de registros.

Var
// CADASTRO SER UM VETOR REGISTRO REG_FUNCIONRIO
CADASTRO : conjunto [1..20] de REGFUNCIONRIO

DATA_NASC
NOME DIA MS ANO DEPARTAMENTO SALRIO
1

Roberto da Silva 15 05 1970 Vendas 2500


!
2
3 REG_FUNCIONARIO
4
... ...
... ... VETOR VET_FUNC = para
20 armazenar 20 registros
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-149

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 141

Para leitura dados do vetor de registro:

para X de 1 at 20 faa
leia(CADASTRO[X].NOME)
leia(CADASTRO[X].DATA_NASC.DIA)
leia(CADASTRO[X].DATA_NASC.MS)
leia(CADASTRO[X].DATA_NASC.ANO)
leia(CADASTRO[X].DEPARTAMENTO)
leia(CADASTRO[X].SALRIO)
fim para

Para impresso dados do vetor de registro:

para X de 1 at 20 faa
escreva(CADASTRO[X].NOME)
escreva (CADASTRO[X].DATA_NASC.DIA)
escreva (CADASTRO[X].DATA_NASC.MS)
escreva (CADASTRO[X].DATA_NASC.ANO)
escreva (CADASTRO[X].DEPARTAMENTO)
escreva (CADASTRO[X].SALRIO)
fim para

Seo 1 Matrizes de uma dimenso ou


vetores
Vetor tambm conhecido como varivel composta unidimensional. Isto quer
dizer que se trata de um conjunto de variveis de mesmo tipo, que possuem o mesmo
identificador (nome) e so alocadas sequencialmente na memria. Como as variveis
tm o mesmo nome, o que as distingue um ndice que referencia sua localizao
dentro da estrutura.

1.1 Delarao de matriz unidimencional


A sintaxe do comando de definio de vetores :

<nome_varivel>: vetor [posInicial..posFinal] de <tipo>

Exemplo:

VET : vetor [1..10] de inteiros


IDADE : vetor [1..5] de inteiros
VALOR : vetor [1..20] de real
SALRIO: vetor[1..20] de real
NOME: vetor [1..100] de caractere
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-150

142 TCNICAS DE PROGRAMAO

Do mesmo modo que acontece com variveis simples, tambm possvel operar
com variveis indexadas (matrizes). O acesso individual a cada componente de um
vetor realizado pela especificao de sua posio na mesma por meio do seu ndice.
Na declarao VET: vetor [1.10] de inteiros, foi definido uma varivel VET capaz de
armazenar 10 nmeros inteiros. Para acessar um elemento deste vetor deve-se fornecer
o nome do mesmo e o ndice do componente desejado do vetor (um nmero de 1 a
10). O exemplo a seguir apresenta o vetor VET com a representao dos 10 valores.

VET 10 9 80 75 80 89 41 35 87 55
INDICE 1 2 3 4 5 6 7 8 9 10

Por exemplo, vet [1] indica o primeiro elemento do vetor, vet [2] indica o segundo
elemento do vetor e vet [10] indica o dcimo elemento do vetor.

1.2 Atribuio de uma matriz do tipo vetor


No caso de vetores (variveis indexadas), alm do nome da varivel deve-se neces-
sariamente fornecer tambm o ndice do componente do vetor onde ser armazenado
o resultado da avaliao da expresso.
Exemplo:

VET[1] <- 10
VET[2] <- 80
VET[5] <- 20
VET[8]<- 30
VET[10]<- 40

Com as atribuies anteriores o vetor VET passar a ter os valores a seguir:

VET 10 80 80 75 20 89 41 30 87 40
INDICE 1 2 3 4 5 6 7 8 9 10

Para acessar cada valor correspondente ao vetor VET, no exemplo acima, deve-se
utilizar um ndice, cujo valor varia de 1 at o tamanho do vetor.

1.3 Leitura de dados de uma matriz do tipo vetor


A leitura de um vetor realizada passo a passo, um de seus componentes por vez,
usando a mesma sintaxe da instruo primitiva da entrada de dados, onde, alm do
nome da varivel, deve ser explicitada a posio do componente lido:

leia (<nome_da_varivel> [ <ndice> ] )


99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-151

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 143

Exemplo: leitura do vetor

algoritmo "exemplo_leitura1"
var
nmeros : vetor [1..5] de inteiro
i : inteiro
incio
para i <- 1 ate 5 faca
escreval ("Insira o ", i, " elemento do vetor: ")
leia (nmeros[i])
fimpara

fimalgoritmo

Simulao:

MEMRIA TELA
I=1 Insira o 1 elemento do vetor: 35
nmeros 35
1 2 3 4 5
I=2 Insira o 2 elemento do vetor: 40
nmeros 35 40
1 2 3 4 5
I=3 Insira o 3 elemento do vetor: 25
nmeros 35 40 25
1 2 3 4 5
I=4 Insira o 4 elemento do vetor: 8
nmeros 35 40 25 8
1 2 3 4 5
I=5 Insira o 5 elemento do vetor: 35
nmeros 35 40 25 8 35
1 2 3 4 5

1.4 Escrita de dados de uma matriz do tipo vetor


A escrita de um vetor obedece mesma sintaxe da instruo primitiva de sada
de dados; vale lembrar que, alm do nome do vetor, deve-se tambm especificar o
ndice e o componente a ser escrito.

escreva ( <nome_da_varivel> [ <ndice> ] )


99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-152

144 TCNICAS DE PROGRAMAO

O algoritmo a seguir exemplifica a operao de leitura e escrita de um vetor.


Exemplo: leitura e escrita (impresso) do vetor.

algoritmo "exemplo_leitura_de_vetor"
var
nmeros : vetor [1..10] de inteiro
i : inteiro
incio
// -------------- LEITURA ------------------
para i <- 1 ate 10 faca
escreva("Insira o ", i, "elemento do vetor: ")
leia (nmeros[i])
fimpara

// --------- IMPRESSO (ESCRITA)-------------


para i <- 1 ate 10 faca
escreva("elemento do vetor: ", nmeros[i])
fimpara

fimalgoritmo

1.5 Exemplo de algoritmos


Exemplo 1: leitura de um vetor de 7 posies.

Algoritmo Vetor
Var
V : vetor [1..7] de inteiro
CONT : inteiro
incio
Para CONT de 1 ate 7 passo 1 faca
Escreva(Elemento, Cont, :)
Leia(V[CONT])
Fimpara

fimalgoritmo

Simulao:

MEMRIA VDEO
CONT = 1 Elemento 1: 24
V 24
1 2 3 4 5 6 7
CONT = 2 Elemento 2: 16
V 24 16
1 2 3 4 5 6 7
CONT = 3 Elemento 3: 5
V 24 16 5
1 2 3 4 5 6 7
CONT = 4 Elemento 4: 42
V 24 16 5 42
1 2 3 4 5 6 7
CONT = 5 Elemento 5: 18
V 24 16 5 42 18
1 2 3 4 5 6 7
CONT = 6 Elemento 6: 1
V 24 16 5 42 18 1
1 2 3 4 5 6 7
CONT = 7 Elemento 7: 3
V 24 16 5 42 18 1 3
1 2 3 4 5 6 7
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-153

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 145

Exemplo 2: algoritmo que efetua a leitura de 5 elementos de um vetor e calcule


a soma dos mesmos.

algoritmo "exemplo_leitura2"
var
nmeros : vetor [1..5] de inteiro
soma, i : inteiro
incio
soma <- 0
para i <- 1 ate 5 passo 1 faca
escreva ("Insira o ", i, "elemento do vetor: ")
leia (nmeros[i])
soma <- soma + nmeros[i]
fimpara

escreva("A soma dos elementos : ", soma)


fimalgoritmo

Simulao:

MEMRIA VDEO
soma = 0

I=1 soma = 0 + 35 (35) Insira o 1


nmeros 35 elemento do
1 2 3 4 5 vetor: 35
I=2 soma = 35 + 40 (75) Insira o 2
nmeros 35 40 elemento do
1 2 3 4 5 vetor: 40
I=3 soma = 75 + 25 (100) Insira o 3
nmeros 35 40 25 elemento do
1 2 3 4 5 vetor: 25
I=4 soma = 100 + 8 (108) Insira o 4
nmeros 35 40 25 8 elemento do
1 2 3 4 5 vetor: 8
I=5 soma = 108 + 30(138) Insira o 5
nmeros 35 40 25 8 30 elemento do
1 2 3 4 5 vetor: 30

A soma dos
elementos : 138

Exemplo 3: O algoritmo efetua a leitura da mdia final de cinco alunos e imprime


a mensagem aprovado para alunos com a mdia final maior ou igual a sete e re-
provado para mdia final menor que sete. O algoritmo tambm acumula a soma de
todas as mdias para calcular a mdia da turma.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-154

146 TCNICAS DE PROGRAMAO

Algoritmo MdiaTurma
var
mdias: vetor[1..10] de real
i: inteiro;
soma, mdia_turma: real
Inicio
soma <- 0
mdia_turma <- 0
// --------- Entrada de dados no vetor -----
para i de 1 ate 5 passo 1 faca

escreva(Informe a mdia do aluno , i, :)


leia mdias[i]

//-- verifica se o aluno foi aprovado ou reprovado --


se meia[i] >= 7 ento
escreva(aprovado)
seno
escreva(reprovado)
fimse

// soma a mdia de todos os alunos


soma <- soma + medias[i]
fimpara

media_turma <- soma/5

escreva(A media da turma : , mdia_turma)


Fim algoritmo

Obs.: exemplo de valores para o vetor mdias.

mdias 9.5 8.3 9.9 6.0 7.1


1 2 3 4 5

Simulao:

Memria Vdeo
Soma=0
mdia_turma = 0
I = 1 mdias 9.5 Informe a
Soma=0 + 9.5(9.5) 1 2 3 4 5 mdia do
mdia_turma = 0 aluno 1: 9.5
I = 2 mdias 9.5 8.3 Informe a
Soma=9.5 + 8.3(17.8) 1 2 3 4 5 mdia do
mdia_turma = 0 aluno 2: 8.3
I = 3 mdias 9.5 8.3 9.9 Informe a
Soma=17.8 + 9.9(27.7) 1 2 3 4 5 mdia do
mdia_turma = 0 aluno 3: 9.9
I = 4 mdias 9.5 8.3 9.9 6.0 Informe a
Soma=27.7 + 6.0(33.7) 1 2 3 4 5 mdia do
mdia_turma = 0 aluno 4: 6.0
I = 5 mdias 9.5 8.3 9.9 6.0 7.1 Informe a
Soma=33.7 + 7.1(40.8) 1 2 3 4 5 mdia do
mdia_turma = 0 aluno 4: 7.1
I = 5 (sai do lao) A mdia da
Soma= 40.8 turma : 8.16

mdia_turma=40.8/5
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-155

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 147

Atividades de aprendizagem
1. Qual o resultado da MEMRIA e do VDEO ao executar o algoritmo abaixo?
Informe os valores: 10,5, 8, 20, 35 para efetuar a simulao (complete o teste).
Pseudocdigo Teste de mesa
algoritmo "EXEMPLO01"
var Obs: complete o teste informando os
NMEROS: vetor [1..5] de inteiro demais valores.
I : inteiro
Incio Memria Vdeo
para I de 1 ate 5 faca I 1
leia(NMEROS[i]) ? 10
NMEROS[1] 10
fimpara

fimalgoritmo

2. Qual o resultado da MEMRIA e do VDEO ao executar o algoritmo abaixo?


Pseudocdigo
algoritmo "EXERCCIO02"
var
SALRIO : vetor [1..10] de REAL
SOMA, cont : inteiro
incio
SOMA <- 0
para cont <- 1 ate 10 faca

escreva("Insira o ", cont, "elemento do vetor: ")


leia (SALRIO [cont])

SOMA <- SOMA + SALRIO[cont]


fimpara

escreva("A soma dos elementos : ", SOMA)


fimalgoritmo

3. Considerando o vetor V abaixo:


V 15 12 9 10 8 7 41 22 12 8
1 2 3 4 5 6 7 8 9 10

Quais seriam os valores impressos considerando os valores das variveis


para acesso aos ndices que tivessem os valores X=2 e Y=4? Escreva o valor
correspondente para cada exemplo:
a) escreva ( V[X + 1] ) e) escreva ( V[X + Y] ) i) escreva ( V[X + 1 + Y * 2]
b) escreva ( V[X + 2] ) f) escreva ( V[X - Y] ) j) escreva ( V[X + Y] )
c) escreva ( V[Y + 5] ) g) escreva ( V[X * 3] ) k) escreva ( V[6 - V[10] ])
d) escreva ( V[Y + 2] ) h) escreva ( V[ V[3] ] )
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-156

148 TCNICAS DE PROGRAMAO

4. Considere o algoritmo a seguir:


algoritmo "EXERCCIO04"
var
VET1 : vetor [1..20] de inteiro a) Represente os valores gerados
VET2 : vetor [1..20] de inteiro para os vetores VET1 e VET2.
VET3 : vetor [1..20] de inteiro b) Qual ser o valor armazenado
I: inteiro em:
Incio Vet3[3]
para i de 1 ate 20 passo 1 faca Vet3[6]
VET1[i] <- i Vet3[9]
VET2[i] <- 20 i Vet3[12]
fim para
Vet3[15]
para i de 1 ate 20 passo 1 faca
VET3[i] <- VET1[i] + VET2[i]
Escreva(VET3[i])
Fimpara

fimalgoritmo

5. Analise o programa abaixo e descreva sua funo e preencha o texto da lacuna:


Algoritmo "matriz"
var
n: vetor [1..5] de inteiro
i,cont : inteiro
mdia : real
incio
mdia <- 0
Para i de 1 ate 5 passo 1 faca
leia(n[i])
mdia <- media + n[i]
fimpara

mdia <- mdia/5

escreva(media) LACUNA
cont <- 0
Para i de 1 ate 5 passo 1 faca
se (n[i] > mdia) ento
cont <- cont + 1
fimse
fimpara

escreval("______________________: ", cont)


fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-157

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 149

6. Altere o programa a seguir para que o mesmo faa a soma dos 10 nmeros
lidos e ao final apresente a soma obtida.
Algoritmo "VetoresSoma"
Var
nmeros: vetor[1..10] de inteiro
I: inteiro
Incio
// ------ LEITURA 10 NMEROS -------------
para I de 1 ate 10 passo 1 faca
escreva("Valor: ")
leia(nmeros[I])
fimpara

// -------- IMPRESSO 10 NMEROS----------


para I de 1 ate 10 passo 1 faca
escreva(nmeros[I])
fimpara

fimalgoritmo

Para saber mais


EDUCANDUS Apostila de Algoritmos
<http://www.educandusweb.com.br/ewce/portal/formularios/apoio/arquivos/apoio966_apostila_
algoritmos_educandus_final.pdf>. Acesso em: 7 jun. 2014.

Questes para reflexo


Nesse tipo de estrutura, os dados so chamados homogneos por qual
motivo utilizado esse termo para esse tipo de estrutura?
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-158

150 TCNICAS DE PROGRAMAO

Seo 2 Estrutura de dados homognea


(matrizes)
So conhecidas como estruturas de dados homogneas multidimensionais. Em
determinados problemas so utilizados estruturas de matrizes com mais de duas
dimenses. O mais comum a matriz de duas dimenses por se relacionar com a
utilizao de tabelas.
Uma matriz bidimensional composta por linhas e colunas. As linhas podem ser
consideradas como a primeira dimenso e as colunas a segunda dimenso. preciso
definir o tamanho de cada uma dessas dimenses, ou seja, o nmero de linhas e o
nmero de colunas que esta matriz dever possuir. O exemplo a seguir representa
uma matriz bidimensional 4 x 4 (4 linhas e 4 colunas), nela possvel referenciar
cada elemento atravs de seu ndice, por exemplo: a posio 1,3 contm o valor 24,
a posio 2,2 contm o valor 4.

Matriz Mat
1 2 3 4
1 18 15 24 9
2 7 4 3 10 ndice das
3 12 37 1 6 colunas
ndice das
linhas 4 5 13 21 42

As posies da matriz so formadas por:

Mat[1,1] contm 18 Mat[2,1] contm 15 Mat[3,1] contm 24 Mat[4,1] contm 9


Mat[1,2] contm 7 Mat[2,2] contm 4 Mat[3,2] contm 3 Mat[4,2] contm 10
Mat[1,3] contm 12 Mat[2,3] contm 37 Mat[3,3] contm 1 Mat[4,3] contm 6
Mat[1,4] contm 5 Mat[2,4] contm 13 Mat[3,4] contm 21 Mat[4,4] contm 42

Uma matriz uma coleo de dados de um mesmo tipo, referenciada por um


nome comum. Um elemento especfico de uma matriz acessado atravs de um
ndice. Todos os elementos ocupam posies contguas na memria.

2.1 Representao dos ndices de uma matriz


bidimencional
Um algoritmo muito utilizado para gerar o ndice de determinada matriz (exemplo:
4 linhas x 4 colunas) apresentado a seguir:
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-159

Estrutura de dados homognea e heterognea 151

Pseudocdigo Simulao
Algoritmo teste
Var Memria Vdeo
L,C: inteiro L C
Incio 1 1 1 - 1
// --------- IMPRESSO ----------- 1 2 1 - 2
para L de 1 ate 4 passo 1 faca 1 3 1 - 3
para C de 1 ate 4 passo 1 faca 1 4 1 - 4
escreval(L , " - " , C) 5(SAI)
fimpara 2 1 2 - 1
fimpara 2 2 2 - 2
Fimalgoritmo
2 3 2 - 3
2 4 2 - 4
Valores impressos no vdeo podem representar os ndices
5(SAI)
da matriz 4 x 4 exemplificada abaixo:

1,1 2,1 3,1 4,1 3 1 3 - 1


1,2 2,2 3,2 4,2 3 2 3 - 2
3 3 3 - 3
1,3 2,3 3,3 4,3
1,4 2,4 3,4 4,4 3 4 3 - 4
5(SAI)
4 1 4 - 1
4 2 4 - 2
4 3 4 - 3
4 4 4 - 4
5(SAI)
5 SAI

2.2 Delarao de matriz bidimencional


A sintaxe do comando de definio de matrizes de duas dimenses a seguinte:

<nome_varivel>: vetor [li..lf, ci..cf] de <tipo>

Onde:
li e lf representam respectivamente o ndice inicial e final das linhas;
ci e cf representam respectivamente o ndice inicial e final das colunas.
Exemplos:

Obs: sintaxe usada no visualg

MAT1: vetor [1:3 , 1:3] de inteiro

Obs: sintaxe usada no visualg

MAT2: vetor [1:4 , 1:5] de inteiro

2.3 Atribuio de uma matriz de duas dimenses


Na atribuio de matrizes, da mesma forma que nos vetores, alm do nome da
varivel deve-se necessariamente fornecer tambm o ndice do componente da ma-
triz. No caso de ter duas dimenses, o primeiro nmero se refere linha e o segundo
nmero se refere coluna da matriz em que se encontra a informao.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-160

152 TCNICAS DE PROGRAMAO

Algoritmo exemplo_atribuioo
var
mat : vetor [1..2,1..3] de real
mdia, soma : real
incio Representao da matriz
incio
mat[1,1] <- 9.0 Colunas
mat[1,2] <- 8.0
mat[1,3] <- 7.0
1 2 3
mat[2,1] <- 6.5 1 9.0 8.0 7.0
Linhas
mat[2,2] <- 9.0 2 6.5 9.0 8.5
mat[2,3] <- 8.5

soma <- mat[1,1] + mat[1,2] + mat[1,3]


mdia <- soma / 3
escreval ( A mdia dos elementos da 1 linha : , mdia)

soma <- mat[2,1] + mat[2,2] + mat[2,3]


mdia <- soma / 3
escreval ( A mdia dos elementos da 2 linha : , mdia)

fimalgoritmo

2.4 Leitura de dados de uma matriz de duas dimenses


Da mesma forma que se realiza a leitura dos dados primitivos, tambm possvel
efetuar a leitura de uma matriz. O que difere na leitura a posio de seus ndices.

Sintaxe:

leia( <nome_da_varivel> [ <ndice_1>, ... , ndice_n> ])

Exemplo: leitura de uma matriz de duas linhas por trs colunas.

Algoritmo leitura_matriz

var
mat : vetor[1..2, 1..3] de inteiro
i, j : inteiro
incio
// ------ leitura da matriz de 2 linhas por 3 colunas -----
para i de 1 ate 2 faca // estrutura para indexar as linhas
para J de 1 ate 3 faca // estrutura para indexar as colunas

escreva(Digite o valor do elemento , i , -, :)


leia(mat[i,j] // leitura do elemento i,j

fimpara
fimpara

fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-161

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 153

A tabela a seguir representa a leitura e armazenamento da matriz de duas linhas


por trs colunas.

Memria Vdeo
i J mat
1 2 mat[1,1] <- 9.0 Digite o valor do
elemento 1 1 : 9
1 2 mat[1,2] <- 8.0 Digite o valor do
elemento 1 2 : 8
1 3 mat[1,3] <- 7.0 Digite o valor do
elemento 1 3 : 7
4(sai - lao)
2 1 mat[2,1] <- 6.5 Digite o valor do
elemento 2 1 : 6.5
2 2 mat[2,2] <- 9.0 Digite o valor do
elemento 2 2 : 9
2 3 mat[2,3] <- 8.5 Digite o valor do
elemento 2 3 : 8.5
4(sai - lao)
3(sai -
lao)

2.5 Apresentando dados de uma matriz de duas


dimenses
Na apresentao dos dados da matriz tambm necessria a especificao de seus
ndices.
Sintaxe:

Escreva( <nome_da_varivel> [ <ndice_1>, ... , ndice_n> ])

Exemplo 1: exemplo de leitura e impresso de uma matriz de duas linhas por


trs colunas.

Algoritmo leitura_escrita_matriz
var
mat : vetor[1..2, 1..3] de inteiro
i, j : inteiro
incio
// ------ leitura da matriz de 2 linhas por 3 colunas -----
para i de 1 ate 2 faca // estrutura para indexar as linhas
para J de 1 ate 3 faca // estrutura para indexar as colunas
escreva(Digite o valor do elemento , i , -, :)
leia(mat[i,j] // leitura do elemento i,j
fimpara
fimpara
// ------ impresso da matriz de 2 linhas por 3 colunas -----
para i de 1 ate 2 faca // estrutura para indexar as linhas
para J de 1 ate 3 faca // estrutura para indexar as colunas
escreva(Valor: ,mat[i,j]) // impresso
fimpara
fimpara
fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-162

154 TCNICAS DE PROGRAMAO

Exemplo 2: o algoritmo efetua a leitura e impresso de duas matrizes MatA e


MatB. A matriz MatA com 2 linhas e 2 colunas e a Matriz MatB com 3 linhas e 2
colunas (as tabelas a seguir exemplifica valores que podero ser informados para as
matrizes MatA e MatB).

Exemplo: MatA Exemplo: MatB


5 3 4 2
2 9 3 1
8 6

Algoritmo exemplo
var
MatA: vetor[1..2,1..2] de inteiro
MatB: vetor[1..3,1..2] de inteiro
I,J: inteiro
Incio
// ------- leitura da matriz MatA --------
Escreva(preenchendo a matriz a)
Para I de 1 ate 2 faca
Para J de 1 ate 2 faca
Leia(MatA[I, J])
Fimpara
Fimpara
// ----impresso da matriz MatA ----
Escreva(Imprimindo a matriz a)
Para I de 1 ate 2 faca
Para J de 1 ate 2 faca
escreva(MatA[I, J])
Fimpara
Fimpara
// ------- leitura da matriz MatB --------
Escreva(preenchendo a matriz B)
Para I de 1 ate 3 faca
Para J de 1 ate 2 faca
Leia(MatA[I, J])
Fimpara
Fimpara
// ----impresso da matriz MatB ----
Escreva(Imprimindo a matriz B)
Para I de 1 ate 3 faca
Para J de 1 ate 2 faca
escreva(MatA[I, J])
Fimpara
Fimpara
Fimalgoritmo

2.5.1 Exemplos matrizes


Exemplo 1: o algoritmo l uma matriz 3 X 3 do tipo inteiro e imprime somente
os nmeros mpares.
1 2 3 Resultado
1 3 8 5 3, 5, 9, 3, 5, 3
2 9 2 3
3 5 3 4
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-163

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 155

Algoritmo "matriz"
var Memria Vdeo
MAT: vetor [1..3, 1..3] de inteiro Leitura da matriz ?3
I, J: integer I 1 ?8
incio J 1 ?5
// --LEITURA ---- MAT [1,1] 3 ?9
para I de 1 ate 3 faca I 1 ?2
para J de 1 ate 3 faca J 2 ?3
leia(MAT[I, J]) MAT[1,2] 8 ?5
I 1 ?3
fimpara
J 3 ?4
fimpara MAT[1,3] 5 //
J 4 (sai do lao impresso
// --IMPRESSO ---- interno) dos
para I de 1 ate 3 faca valores
para J de 1 ate 3 faca // repete o processo impares
//compara se o resto da diviso para linha 2 3
//de cada valor da matriz por 2 I 2 5
//igual a 1 (se for o nmero J 1 8
//impar) MAT[2,1] 9 3
... 5
se MAT[I,J] MOD 2 = 1 ento
3
escreva(MAT[I, J]) // repete o processo
fimse para linha 3
I 3
fimpara J 1
fimpara MAT[3,1] 5
fimalgoritmo ...

Exemplos do operador MOD (utilizado para obter o resto da diviso)


MOD retorna o resto da diviso entre dois nmeros inteiros
DIV retorna o valor inteiro que resulta da diviso entre 2 nmeros inteiros
Exemplo:
5 DIV 2 = 2
5 2 5 MOD 2 = 1
MOD 1 2 DIV

Exemplo 2: o algoritmo l uma matriz 3 X 3 do tipo inteiro e imprime somente


os elementos da diagonal principal.

1 2 3 Resultado
1 3 8 5 3 2 4
2 9 2 3
3 5 3 4
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-164

156 TCNICAS DE PROGRAMAO

Pseudocdigo Teste de mesa


Algoritmo "matriz"
var Memria Vdeo
MAT: vetor [1..3, 1..3] de inteiro Leitura da matriz ?3
I, J: integer I 1 ?8
inicio J 1 ?5
// --LEITURA ---- MAT [1,1] 3 ?9
para I de 1 ate 5 faca I 1 ?2
para J de 1 ate 5 faca J 2 ?3
leia(MAT[I, J]) MAT[1,2~ 8 ?5
fimpara I 1 ?3
fimpara J 3 ?4
MAT[1,3] 5 // impresso dos
// --IMPRESSAO ---- J 4 (sai do lao valores da
para I de 1 ate 5 faca interno) diagonal
para J de 1 ate 5 faca principal
// repete o processo para 3
//se for diagonal principal linha 2 2
se I = J entao I 2 4
escreva(MAT[I, J])
J 1
fimse
MAT[2,1] 9
...
fimpara
fimpara
fimalgoritmo

Exemplo 3: o algoritmo l uma matriz 5 X 5 do tipo inteiro e soma cada linha


da matriz.

Obs.: dependendo da linguagem de


programao possvel criar uma frmula
para leitura da matriz em forma de tabela.
Obs.: o vetor foi impresso aps a ltima
coluna da matriz.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-165

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 157

Pseudocdigo Teste de mesa


Algoritmo "matrizVetor"
VAR Memria Vdeo
MAT:vetor [1..5, 1..5] de inteiro I 1 ?2
VET:vetor [1..5] de inteiro J 1 // MAT[1,1] 3 ?5
I, J, S: integer J 2 // MAT[1,2] 5 ?4
incio J 3 // MAT[1,3] 4 ?6
// ---leitura da matriz --- J 4 // MAT[1,4] 6 ?7
para I de 1 ate 5 faca J 5 // MAT[1,5] 7 ...
para J de 1 ate 5 faca
leia(MAT[I, J]) Continua at efetuar a --- vetor / soma ---
fimpara leitura das 5 linhas
fimpara 24
---- soma ---- 15
// -- soma as linhas -- I 1 31
para I de 1 ate 5 faca S 0 62
s := 0; 40
para J de 1 ate 5 faca J 1
S := S + MAT[I,J]
S 0 + 2 (2)
fimpara
J 2
VET[I] := S
S 2 + 5 (7)
fimpara
J 3
S 7 + 4 (11)
// ---- impresso do vetor ----
para I ate 1 ate 5 faca
J 4
escreva(VET[I])
fimpara S 11 + 6 (17)

fimalgoritmo J 5
S 17 + 7 (24)

J 6 (sai do lao de J)
para somar a segunda
linha.

Exemplo 4: no exemplo a seguir utilizado uma matriz de trs linhas e duas colu-
nas para armazenar os nomes e endereos de trs pessoas (os nomes so armazenados
na primeira coluna da matriz e os endereos na segunda coluna).

Exemplo: ndices da matriz dados


1,1 2,1
1,2 2,2
1,3 2,3

Exemplo: valores da matriz dados


Jos Luis dos Santos Rua Santa Caratina, 35
Marcos da Silva Rua Gois, 745
Carlos Henrique Pereira Rua Manaus, 255
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-166

158 TCNICAS DE PROGRAMAO

Algoritmo exemplo02
Var
Dados: vetor[1..3, 1..2] de caractere
I : inteiro
Incio
// ---- leitura da matriz dados ----
Para I de 1 ate 3 passo 1 faca

Escreva(Digite o nome da , i, pessoa)


Leia(Dados[I, 1)

Escreva(Digite a rua da , i, pessoa)


Leia(Dados[I, 2)

fimpara

// ---- imprimindo a matriz dados ----


Para I de 1 ate 3 passo 1 faca

Escreva(Dados da , I, pessoa)
Escreva(Nome: , Dados[I,1])
Escreva(Endereo: , Dados[I,2])

Fimpara

fimalgoritmo

Atividades de aprendizagem
1. Considere a matriz M a seguir:
Colunas
1 2 3 4 6
1 2 8 3 7 4
Linhas 2 5 2 1 9 16
3 2 12 7 8 10
4 4 5 3 8 5
5 14 11 5 3 6

E as variveis X=2 e Y=3. Escreva o valor correspondente solicitao (se


os valores de indicao de linha forem maiores que 5 (fora da faixa) e o
valor da coluna forma maior que 6 (fora da faixa):
a) M[X, Y]
b) M[Y, X]
c) M[X + 1, Y 1]
d) M[X + 1, Y 1 * 2] // analise primeiro o resultado da multiplicao
e) M[Y X, Y + X]
f) M[Y + 1, X]
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-167

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 159

2. Considerando os valores da matriz M representada:


1 2 3 4 6
1 2 8 3 7 4
2 5 2 1 9 16
3 2 12 7 8 10
4 4 5 3 8 5
5 14 11 5 3 6

a) Identifique quais so os valores que esto na diagonal principal.


b) Identifique quais so os valores que esto na diagonal secundria.
3. Desenhe a matriz resultante do algoritmo abaixo (obs: valor atribudo para
a mesma posio ir substituir o valor anteiror):
Algoritmo matriz
Var
matriz: vetor [1..3, 1..3] de caractere;
incio
mat[1,2] <- 'F';
mat[2,3] <- 'E';
mat[3,1] <- 'L';
mat[3,2] <- 'I';
mat[2,3] <- 'P';
mat[3,3] <- 'E';
fimalgoritmo

4. Quais so os valores impressos pelo algoritmo abaixo?


Matriz MAT
Matriz MAT
55 44 33
88 77 88
99 33 66
Algoritmo "MatrizSoma"
Algoritmo "MatrizSoma"
Var
Var
MAT :: vetor[1..3,
MAT vetor[1..3, 1..3]
1..3] de
de inteiro
inteiro

L,C: inteiro
L,C: inteiro
Incio
Incio
// ---------
// --------- LEITURA
LEITURA -----------
-----------
para LL de
para de 11 ate
ate 33 passo
passo 11 faca
faca
para CC de
para de 11 ate
ate 33 passo
passo 11 faca
faca
escreval(digite uma
escreval(digite uma valor)
valor)
leia(MAT[L,C])
leia(MAT[L,C])
fimpara
fimpara
fimpara
fimpara
// ---------
// --------- IMPRESSAO
IMPRESSAO -----------
-----------
para LL de
para de 11 ate
ate 33 passo
passo 11 faca
faca
para CC de
para de 11 ate
ate 33 passo
passo 11 faca
faca
se LL == CC entao
se entao
escreval(MAT[L,C])
escreval(MAT[L,C])
fimse
fimse
fimpara
fimpara
fimpara
fimpara
fimalgoritmo
fimalgoritmo
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:48 - August 22, 2014 - PG-168

160 TCNICAS DE PROGRAMAO

Para saber mais


Mais informaes e exerccios podero ser encontrados em:
ASCENCIO, Ana F. G.; CAMPOS, Edilene A. V. de. Fundamentos da programao de com-
putadores: Algoritmos, Pascal e C/C++. So Paulo: Pearson, 2002. p. 131-201. (Vetores e
Matrizes)
ASCENCIO, Ana F. G.; CAMPOS, Edilene A. V. de. Fundamentos da programao de com-
putadores: Algoritmos, Pascal, C/C++ e Java. 2. ed. So Paulo: Pearson, 2007. p. 145-229.
(Vetores e Matrizes)

Questes para reflexo


possvel representar dados em uma matriz com mais de duas dimenses.
Para qual finalidade poderia ser utilizado esse tipo de matriz?

2.6 Estrutura homognea em C#


Trabalhar com vetores em C# a maioria das linguagens de programao. Na
sintaxe para a declarao de um array, coloca-se o tipo desejado e em seguida os
colchetes abrindo e fechando o nome da varivel e a alocao de tamanho do vetor.
O exemplo a seguir declara um array de string unidimensional com 5 posies.

using System;
class Teste
{
public static void Main()
{
string[] vetNome = New string[5];
//atribuio
vetNome[0] = Maria;
vetNome[1] = Pedro;
vetNome[2] = Marcio;
vetNome[3] = Carlos;
vetNome[4] = Roberto;

// ------------- impresso ------------------


for(int x=0; x <= 4; x++)
{
Console.WriteLine(Nome = + vetNome[x]);
}
}
}
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-169

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 161

possvel inicializar uma matriz na declarao, neste caso, no necessrio


especificar a quantidade de elementos, pois ela j fornecida automaticamente
medida que os elementos so inseridos na matriz (MSDN, 2013a). Por exemplo:

int[] Idades = new int[] {25,36,25,40,28,12 }; // inteiro

string[] Animais = {"Cachorro", "Gato", "Cavalo", "Gato"}; // caracter

Tambm possvel declarar uma varivel de matriz sem inicializao (MSDN,


2013a). Nesse caso, deve usar o new operador quando voc atribui uma matriz para
essa varivel Por exemplo:

Arrays podem ter mais de uma dimenso. Por exemplo, a declarao a seguir cria
uma matriz bidimensional de cinco linhas e cinco colunas:

int[,] MAT = new int[5, 5];

Exemplo de leitura da matriz 5 x 5 do tipo inteiro:

using System;
class Teste{
public static void Main(){

int[,] MAT = new int[5,5];

for (int i = 0; i < 5; i++ ){


for (int j = 0; j < 5; j++){
Console.WriteLine(String.Format("Valor..: " + i + j));
MAT[i, j] = int.Parse(Console.ReadLine());
} // for j
} // for i
}
}

Alm dos arrays multidimensionais possvel criar arrays de arrays. Trata-se de arrays
com mltiplas dimenses de tamanho varivel.
Exemplo:

Int[][] VALORES = new int[4][];


Vals[0] = new int[2];
Vals[1] = new int[3];
Vals[2] = new int[4];
Vals[3] = new int[6];

Rodrigues (2013) exemplifica o uso de jagged arrays. Supondo que temos um


array que armazena as turmas de uma escola e, para cada turma, um nmero diferente
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-170

162 TCNICAS DE PROGRAMAO

de alunos dos quais necessita armazenar o cdigo. possvel usar uma matriz on-
de as linhas representariam a turma e as colunas representariam os alunos, porm,
nesse caso estaria utilizando um nmero fixo de alunos, igual para todas as turmas, o
que no atende a nossa necessidade. Aqui entram os jagged arrays, podemos ter um
array que comporte a quantidade de turmas (um nmero conhecido) e cada elemento
um vetor, cujo comprimento varia e podemos definir individualmente. Por exemplo:

int [][] TURMA = new int[3][];


Nums[0] = new int[] {1000,1001,1002};
Nums[1] = new int[] {2000,2010,2015,2016,2021,2025};
Nums[2] = new int[] {3000,3002,3003,3004,3006,3007,3015,3016};

Os exemplos a seguir criam simples-dimensionais, multidimensionais e matrizes


irregulares (MSDN, 2013b):

class TestArraysClass
{
static void Main()
{
// Declarar uma matriz unidimensional
int[] array1 = new int[5];

// Declarar e define os valores dos elementos da matriz


int[] array2 = new int[] { 1, 3, 5, 7, 9 };

// sintaxe alternative
int[] array3 = { 1, 2, 3, 4, 5, 6 };

// Declarar uma matriz bidimensional


int[,] multiDimensionalArray1 = new int[2, 3];

// Declarar e define os valores dos elementos da matriz


int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };

// Declara uma matriz jagged


int[][] jaggedArray = new int[6][];

//Define os valores da primeira posio da matriz jaggedArray


//vetor de 4 elementos
jaggedArray[0] = new int[4] { 1, 2, 3, 4 };
}
}&

Quando se faz uso de array, necessrio saber seu tamanho, copiar parte dos
elementos, classificar seus valores. Diante dessa necessidade, as linguagens de
programao dispem de instrues para auxiliar na programao. Seguem alguns
mtodos oferecidos pela classe System.Array (MEDEIROS, 2013):
GetLength: retorna o nmero de elementos da dimenso especfica do array.
Length: Retorna o total de elementos do array.
Sort: Ordena os elementos de um array.
CopyTo: Copia os elementos de um array para outro.
Clone: Cria um novo array que uma copia superficial do array de origem.
Rank: Retorna o nmero de dimenses do array.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-171

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 163

Para saber mais


Trabalhando com Arrays
<http://www.devmedia.com.br/trabalhando-com-arrays/5212>.
Arrays em C# Teoria e prtica
<http://www.linhadecodigo.com.br/artigo/3444/arrays-em-csharp-teoria-e-pratica.aspx>.
Guia de Programao C#
<http://msdn.microsoft.com/pt-br/library/67ef8sbd(v=vs.90).aspx>. Acesso em: 7 jun. 2014.

Outros exemplos:
Exemplo 1: o programa efetua a leitura de 10 salrios, calcula a mdia e imprime
os salrios que esto abaixo da mdia.
int[] salrios = new int[10];
decimal soma = 0, media = 0;

for (int i = 0; i < 10; i++){


Console.WriteLine(String.Format("Informe o salrio {0}:", i));

Salrios[i] = int.Parse(Console.ReadLine());

soma += salrios[i];
}

mdia = soma / 10;

for (int i = 0; i < 10; i++)


{
if(salrios[i] < mdia)
Console.WriteLine(String.Format("O elemento de ndice {0}, cujo valor
{1}, est abaixo da mdia." + i + salrios[i]));
}

Exemplo 2: o programa efetua a leitura e a impresso de 20 temperaturas.


static void Main(string[] args){
int[] temperatura = new int[20];

// ------------leitura das temperaturas -------


for (int i = 0; i < 20; i++){
Console.Write("Digite a temperatura {0}: ",i);
temperatura[i] = Int32.Parse(Console.ReadLine());
}

// -------------- impresso do vetor ---------


for (int i = 0; i < 20; i++){
Console.Write(temperatura[i]);
}
}
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-172

164 TCNICAS DE PROGRAMAO

Exemplo 3: vetores para armazenar dados de 10 alunos.


static void Main(string[] args){
string[] nome;
int[] idade = new int[10];
char[] sexo = new char[10];

// ------------ leitura dos vetores -----------


for (int i = 0; i < 10; i++){
Console.Write("Digite o seu nome: ");
nome[i] = Console.ReadLine();

Console.Write("Digite a sua idade: ");


idade[i] = Int32.Parse(Console.ReadLine());
Console.Write("Digite o seu sexo: ");
sexo[i] = char.Parse(Console.ReadLine());
}

// ------------ impresso dos vetores -----------


for (int i = 0; i < 10; i++){
Console.Write("O seu nome : {0} ", nome[i]);
Console.Write("O seu idade : {0} ", idade[i]);
Console.Write("O seu sexo : {0} ", sexo[i]);
}
}

Exemplo 4: foreach().
static void Main(string[] args){
string[] nome;
int[] idade = new int[10];
char[] sexo = new char[10];

// ------------ leitura dos vetores -----------


for (int i = 0; i < 10; i++){
Console.Write("Digite o seu nome: ");
nome[i] = Console.ReadLine();

Console.Write("Digite a sua idade: ");


idade[i] = Int32.Parse(Console.ReadLine());
Console.Write("Digite o seu sexo: ");
sexo[i] = char.Parse(Console.ReadLine());
}

// ------------ impresso dos vetores -----------


for (int i = 0; i < 10; i++){
Console.Write("O seu nome : {0} ", nome[i]);
Console.Write("O seu idade : {0} ", idade[i]);
Console.Write("O seu sexo : {0} ", sexo[i]);
}
}
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-173

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 165

Exemplo 5: array jagged.


Console.WriteLine("Informe o nmero de turmas: ");
int num_turmas = int.Parse(Console.ReadLine());

string[][] turmas = new string[num_turmas][];

for (int i = 0; i < num_turmas; i++ )


{
Console.WriteLine("Informe a quantidade de alunos da turma {0}:", i);
int num_alunos = int.Parse(Console.ReadLine());

turmas[i] = new string[num_alunos];


for (int j = 0; j < num_alunos;j++ )
{
Console.WriteLine("Informe o nome do aluno {0}:", j);
turmas[i][j] = Console.ReadLine();
}
}

Para saber mais


Guia de Programao C#
<http://msdn.microsoft.com/pt-br/library/67ef8sbd(v=vs.90).aspx>.
C# Multidimensional Array
<http://www.dotnetperls.com/multidimensional-array>.
C# Essencial
<https://woc.ipca.pt/est/course/INFSAUD/2008-2009/Csharp_Tutorial_All.pdf>.
C# 2D Array
<http://www.dotnetperls.com/2d-array>. Acessos em: 7 jun. 2014.

Essa seo teve como objetivo fazer uma abordagem geral sobre arrays usando
C#, finalizando com alguns exemplos prticos de utilizao.

Atividades de aprendizagem
1. Dados os seguintes campos de um registro: nome, telefone, dia e ms de
aniversrio, desenvolver um algoritmo que mostre em um dado ms do
ano, quem so as pessoas que fazem aniversrio, exibir tambm o dia.
Considere um conjunto de 40 pessoas.
2. Uma pessoa cadastrou um conjunto de 15 registros contendo o nome da
loja, telefone e preo de um eletrodomstico. Desenvolver um algoritmo
que permita exibir qual foi a mdia dos preos cadastrados e uma relao
contendo o nome e o telefone das lojas cujo preo estava abaixo da mdia.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-174

166 TCNICAS DE PROGRAMAO

3. O registro dos alunos realizado atravs dos seguintes dados:


Nome do aluno.
Nota obtida ao longo do semestre.
Nota obtida na avaliao especial.
Construir um programa que permita o registro de dois alunos. Em seguida
exibir na tela os seguintes dados de cada aluno:
Nome do aluno.
Nota obtida ao longo do semestre.
Nota obtida na avaliao especial.
Nota final, sabendo que a nota final corresponde mdia entre as outras
duas notas.
Mdia das notas finais obtidas pelos dois alunos.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-175

Estrutura de dados homognea e heterognea 167

Seo 3 Estrutura de dados heterogneas


(registros)
Uma varivel composta heterognea ou registro uma estrutura onde podemos
armazenar valores de tipos diferentes sob uma mesma entidade lgica. Cada um
desses possveis valores armazenado em um compartimento do registro denomi-
nado campo do registro, ou simplesmente campo. Um registro composto pelo seu
identificador e pelos seus campos.
Exemplo: ficha de um cadastro de cliente
Cdigo: int Ficha
Cdigo: _____
Nome: string
Nome: ______
Endereo: string Endereo: ___ Registro
Campo
Telefone: string Telefone: ___
Salrio: _____
Salrio: float Idade: ______
Idade: int
Suponha que queremos trabalhar com um agrupamento de valores que represen-
tam uma determinada mercadoria de uma loja, cujas informaes relevantes so o
cdigo do produto e seu valor. Na linguagem C, podemos declarar um registro com
identificador produto da seguinte forma:

struct{
int cdigo;
string nome;
string endereo;
string telefone;
float salrio;
int idade;
}vendedor;

A Figura 4.2 a seguir mostra a disposio do registro vendedor e de seus campos


na memria do computador.

Figura 4.2 Exemplo registro / Vendedor

Informaes do registro
vendedor Nome do registro

Memria 1 Jos Rua Para, (43)33253345 2500 35


33
cdigo nome endereo telefone salrio idade

Campos do registro

A declarao de um registro sempre inicia com a palavra reservada struct. Em se-


guida, um bloco de declaraes iniciado com o smbolo {, depois, so declarados
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-176

168 TCNICAS DE PROGRAMAO

os campos do registro, linha aps linha. Cada linha deve conter o tipo e o identifica-
dor do campo do registro. Finalizando, ento, as declaraes dos campos do registro
com o smbolo } e, logo depois, informado o nome do identificador. A varivel
do tipo registro com identificador vendedor declarada acima contm seis campos.
possvel declarar outras variveis do tipo registro com os mesmos campos da
varivel vendedor da seguinte forma:

struct{
int cdigo; Outras variveis do
string nome; tipo registro
string endereo;
string telefone;
float salrio;
int idade;
}vendedor, professor, medico;

Diferentemente da atribuio de um valor a uma varivel ou a um compartimento


de uma varivel composta homognea, a atribuio de um valor a um campo de uma
varivel do tipo registro realizada atravs do acesso a esse campo, especificando
o identificador do registro, um ponto e o identificador do campo.
Por exemplo, para atribuir os valores 1, Jos, Rua Par, 33, (43)33253345,
2500 e 35 aos campos cdigo, nome, endereo, telefone, salrio, idade, respecti-
vamente, da varivel do tipo registro vendedor declarada anteriormente, devemos
fazer como abaixo:

vendedor. cdigo = 1;
vendedor.nome=Jos,
vendedor. endereo=Rua Par, 33, Exemplo de atribuio no
vendedor.telefone=(43)33253345, registro - vendedor
vendedor. salrio=2500;
vendedor.idade=35;

Observe acima que, quando referenciamos um campo de uma varivel do tipo


registro, no so permitidos espaos entre o identificador do registro, o ponto e o
identificador do campo.
Tambm possvel usar o valor de um campo de um registro em quaisquer ex-
presses. Por exemplo, a expresso relacional abaixo correta:

se (vendedor. salrio > 3000)


Printf(Esse ms seu salrio foi excelente!\n;

Declaraes de registros diferentes podem conter campos com mesmo identifi-


cador. Por exemplo:
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-177

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 169

struct { struct {
int cdigo; int cdigo; Os dois registros
string nome; string nome;
char tipo; string endereo; possuem campos cdigo
int qtdmin; int nundependentes; e nome
float preco; float salrio;
}produto; }funcionrio;

So declaraes vlidas na linguagem C. O acesso aos campos dessas variveis se


diferencia justamente pelo identificador dos registros. Isto , a partir das declaraes
dos registros produto e funcionrio, as atribuies abaixo esto corretas:

produto.cdigo=55;
funcionrio.cdigo = 323; Exemplo de atribuio de informao nos
produto.nome = Arroz; campos do registro coleta e registro
funcionrio.nome = Carlos; certido

Vetores de registros
Podemos declarar variveis compostas homogneas a partir de qualquer tipo b-
sico ou ainda de um tipo definido pelo(a) programador(a). Ou seja, podemos decla-
rar, por exemplo, um vetor do tipo inteiro, uma matriz do tipo ponto flutuante, uma
varivel composta homognea de k dimenses do tipo caracter e etc. Por exemplo,
podemos declarar um vetor com identificador produto como mostrado a seguir:

struct {
int cdigo;
string nome; Vetor produto (10 compartimentos de
char tipo; memria com a estrutura do registro)
int qtdmin;
float preo;
}produto[10];

Exemplo 1: algoritmo.

tipo
RegConta=retistro
NumCliente :inteiro;
NomeCliente :caracter[35];
TipoCliente :caracter[1];
SaldoCliente:real;
fim;

var
Cliente : RegConta;

// ------------Entrada ------------
leia(Cliente.NumCliente);
leia(Cliente.NomeCliente);
leia(Cliente.TipoCliente);
leia(Cliente.SaldoCliente);

// ------------ Saida------------
escreva(Cliente.NumCliente);
escreva(Cliente.NomeCliente);
escreva(Cliente.TipoCliente);
escreva(Cliente.SaldoCliente);
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-178

170 TCNICAS DE PROGRAMAO

Exemplo 2: algoritmo.

tipo
RegEnder = registro
Rua : caracter[35];
Nmero : inteiro;
fim;

RegConta = registro
NumCliente :integer;
NomeCliente :caracter[35];
Endereo :RegEnder;
TipoCliente :caracter[1];
{1 especial, 2 normal}
SaldoCliente:real;
fim;

var
Cadastro : conjunto [1..20] de RegConta;
Cont :Inteiro;

// ------------- Entrada (leitura) --------------------


Para Cont de 1 at 20 faa

Cadastro[Cont].NumCliente Cont;
Escreva('Nmero:', Cadastro[cont].NumCliente);

Escreva('Nome:');
Leia(Cadastro[Cont].Nomecliente);

Escreva('Rua:');
Leia(Cadastro[Cont].Endereoo.rua);

Escreva('Nmero:');
Leia(Cadastro[Cont].Endereco.Nmero);

Repita
Escreva('Tipo cliente:');
Leia(Cadastro[Cont].Tipocliente);

Se (Cadastro[Cont].Tipocliente <> '1' .e.


Cadastro[Cont].Tipocliente <> '2')
Escreva(Tipo invlido);
Fim se;

At (Cadastro[Cont].Tipocliente = '1' .ou.


Cadastro[Cont].Tipocliente = '2')

Escreva('Saldo:');
Leia(Cadastro[Cont].SaldoCliente);

fim para;
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-179

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 171

Exemplo 3:

#include <stdio.h>
#include <conio.h>

typedef struct{ typedef permite criar novos tipos


char NOME[30];
float NOTA1;
float NOTA2;
float NOTA3;
float NOTA4;
Cria uma varivel com nome CAD_ALUNO
} CAD_ALUNO;
contendo a estrutura definida no typedef
void main (void){
CAD_ALUNO ALUNO;
double mdia;
printf("Entre com as informaes do aluno: ");
scanf("%s",&ALUNO.NOME);
scanf("%f",&ALUNO.NOTA1); Leitura apenas de dados de um
aluno
scanf("%f",&ALUNO.NOTA2);
scanf("%f",&ALUNO.NOTA3);
scanf("%f",&ALUNO.NOTA4);
mdia = (ALUNO.NOTA1 + ALUNO.NOTA2 + ALUNO.NOTA3 + ALUNO.NOTA4)/4;
printf("A mdia do aluno eh: %f", media);
getch();
}

Exemplo 4: vetor para notas linguagem C.

#include <stdio.h>
#include <conio.h>

typedef struct{
char NOME[30];
float NOTA[4];
} CAD_ALUNO;

void main (void){


CAD_ALUNO ALUNO;
double mdia, soma=0;
int I;

printf("Entre com as informaes do aluno: ");


scanf("%s",&ALUNO.NOME);

printf("Entre com as notas do aluno: ");


for(I=0; I<4; I++){
scanf("%f",&ALUNO.NOTA[I]);
}

for(I=0; I<4; I++){


soma = soma + ALUNO.NOTA[I];
}
mdia = soma / 4;
printf("A mdia do aluno eh: %f", mdia);
getch();
}

Exemplo 03: vetor para armazenar o registro de oito alunos.

#include <stdio.h>
#include <conio.h>
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-180

}
mdia = soma / 4;
printf("A mdia do aluno eh: %f", mdia);
172getch();
TCNICAS DE PROGRAMAO
}

Exemplo 03: vetor para armazenar o registro de oito alunos.

#include <stdio.h>
#include <conio.h>

typedef struct{ Cria o tipo CAD_ALUNO


char NOME[30];
float NOTA[4];
} CAD_ALUNO;
Cria o vetor ALUNO com a estrutura do tipo
void main (void){ CAD_ALUNO
CAD_ALUNO ALUNO[8];
double mdia[8], soma=0;
int I,J;

// -----leitura de nome e notas de 8 alunos -----


for(I=0; I < 8; I++){
printf("Entre com o nome do aluno: ");
scanf("%s",&ALUNO[I].NOME);
printf("Entre com as notas do aluno: ");
// ------------ leitura das notas -----------
for(J=0; J < 4; J++){
scanf("%f",&ALUNO[I].NOTA[J]);
}
}

// soma as notas, calcula a mdia de 8 alunos e armazena no vetor mdia


for(I=0; I < 8; I++){
soma = 0;

for(J=0; J < 4; J++){


soma = soma + ALUNO[I].NOTA[J];
}

mdia[I] = soma / 4;
}

// -------------- imprime os alunos com suas mdias --------------


for(I=0; I < 8; I++){
printf("\n\nMdia do aluno: %s", ALUNO[I].NOME );
printf(" : %f",mdia[I]);
}

getch();
}// final - main()
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-181

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 173

Atividades de aprendizagem
1. Criar um algoritmo que leia o nome de um cliente, cdigo e o total em
dbito deste cliente. Mostre os dados lidos.
2. Analise a estrutura a seguir:
a) Crie um vetor para armazenar as informaes dessa tabela.
b) Cadastre os produtos.
c) Imprima os produtos.

Cdigo Produto Preo (R$)


A Refrigerante 0,60
B Casquinha simples 1,00
C Casquinha dupla 1,20
D Sundae 1,50
E Banana split 2,00

3. Uma pessoa cadastrou um conjunto de 15 registros contendo o nome da


loja, telefone e preo de um eletrodomstico. Desenvolver um algoritmo
que permita exibir qual foi a mdia dos preos cadastrados e uma relao
contendo o nome e o telefone das lojas cujo preo estava a seguir da mdia.

Questes para reflexo


As estruturas de dados heterognea visa atender qual(is) necessidade(s) da
programao?

Para saber mais


Registro Comando TYPE e RECORD
<http://osorio.wait4.org/oldsite/prog1/prog1-a10.pdf>.
Unidade 5 Estrutura de dados Variveis Compostas Homogneas
<http://www.inf.unioeste.br/~andre/capitulo5.pdf>. Acessos em: 7 jun. 2014.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-182

174 TCNICAS DE PROGRAMAO

Fique ligado!
As variveis compostas homogneas so estruturas de dados que se caracterizam
por um conjunto de variveis do mesmo tipo. Elas podem ser unidimensionais
ou multidimensionais. Essas estruturas so ditas homogneas porque os valores
que sero armazenados so de um mesmo tipo de dado.
Os ndices so as posies que garantem independncia a cada um dos
valores armazenados na estrutura. Por meio destes ndices, tambm chama-
dos de posies seus valores (contedos), podem ser manipulados de forma
independente.
Exemplos: vetor SALRIO (unidimensional) matriz NOTAS (bidimensional).

Quatro colunas
SALRIO NOTAS
que
1 1000 1 2 3 4 Correspondem
as notas dos
2 1500 1 5 10 8 7 quatro
bimestres
3 500 2 6 7 9 10
4 3000 3 7 9 10 10
5 1200 4 9 8 5 9
5 8 10 9 10
Exemplos:
// primeiro elemento Exemplos:
Escreva (SALRIO[1]) // primeiro e segundo elemento da primeira coluna
Escreva (Matemtica bimestre 01: , NOTAS[1,1] )
// terceiro elemento Escreva (Matemtica bimestre 02: , NOTAS[2,1] )
Escreva (SALRIO[3])
// primeiro e segundo elemento da segunda coluna
Escreva (Cincias bimestre 01: , NOTAS[2,1] )
Escreva (Cincias bimestre 02: , NOTAS[2,1] )
...

O acesso s estruturas heterogneas pode mudar dependendo da linguagem


de programao. Dependendo da linguagem, os ndices do array pode comear
em 1 e em outras com 0. Isso o que geralmente difere as linguagens. Nas
linguagens em que comeam os arrays com o ndice 0, o ltimo elemento do
array recebe o ndice (<tamanho do array> 1).
Exemplos: vetor SALRIO (unidimensional) matriz NOTAS (bidimensional).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-183

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 175

SALRIO NOTAS
Quatro colunas
0 1000 0 1 2 3 que
Correspondem
1 1500 0 5 10 8 7 as notas dos
quatro
2 500 1 6 7 9 10
bimestres
3 3000 2 7 9 10 10
4 1200 3 9 8 5 9
4 8 10 9 10
Exemplos:
Exemplos:
// primeiro elemento
Escreva (SALRIO[0]) // primeiro e segundo elemento da primeira coluna
Escreva (Matemtica bimestre 01: , NOTAS[0,0] )
// terceiro elemento Escreva (Matemtica bimestre 02: , NOTAS[1,0] )
Escreva (SALRIO[2])
// primeiro e segundo elemento da segunda coluna
Escreva (Cincias bimestre 01: , NOTAS[0,1] )
Escreva (Cincias bimestre 02: , NOTAS[1,1] )
......

A matriz mais comum a de duas dimenses (linha e coluna), por se relacio-


nar diretamente com a utilizao de tabelas. No entanto, pode ser necessrio,
em algum momento, matrizes de 3 ou mais dimenses.
Exemplos: C# (MSDN, 2013c).
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-184

176 TCNICAS DE PROGRAMAO

Para concluir o estudo da unidade


Programao modular
Programao modular um paradigma de programao no qual o desenvol-
vimento das rotinas de programao feito por meio de mdulos, que so
interligados entre si atravs de uma interface comum.
Vantagens:
Permitem o reaproveitamento de cdigo j construdo.
Evitam que um trecho de cdigo que seja repetido vrias vezes dentro de
um mesmo programa.
Facilitam a leitura do programa-fonte.
Decompem o programa em partes (blocos) que possam ser logicamente
compreendidos de forma isolada.

possvel encontrar subprogramas de dois tipos: as funes e os procedi-


mentos. Qualquer um deles uma pea importante para o desenvolvimento de
programas de computador, especialmente quando esses programas se destinam
resoluo de problemas complexos.

Procedimento
Um procedimento (procedure), tambm chamado de sub-rotina, um
conjunto de instrues que realiza uma determinada tarefa. identificado por
um nome, por meio do qual referenciado em qualquer parte do programa
que o chamou. Quando um procedimento chamado por um programa, ele
executado e, quando termina, o controle do processamento retorna automa-
ticamente para a primeira linha de instruo aps a linha que fez a chamada
do procedimento.
A sintaxe em portugus estruturado :

PROCEDIMENTO <identificador> (lista de parmetros)


VAR
<declarao das variveis locais do procedimento>
INCIO
<cdigo do procedimento>

FIMPROCEDIMENTO
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-185

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 177

Algoritmo "CalculaMdia"
Var
N1, N2, M: Real

// ------- funo para calcular a mdia -----------


Funo Calcula_Mdia (Nota1, Nota2: Real): Real
Var
Mdia : Real
Incio
Mdia <- (Nota1 + Nota2)/2
Retorne Mdia
FimFuno

//------------- programa principal --------------


Incio
Escreva ("Digite a Nota 1:")
Leia (N1)
Escreva ("Digite a Nota 2:")
Leia (N2)

M <- Calcula_Mdia (N1, N2)

Escreva ("A mdia : ", M)


FimAlgoritmo

Funes
Uma funo tambm um bloco de programa como so os procedimentos,
contendo incio e fim e sendo identificado por um nome por meio do qual tam-
bm ser referenciada em qualquer parte do programa principal. Uma sub-rotina
de funo , na verdade, muito parecida com uma sub-rotina de procedimento.
A sintaxe em portugus estruturado ser tambm idntica ao exemplo anterior.
Observe, a seguir, o cdigo em portugus estruturado de uma funo.

FUNCAO <identificador> (<parmetros>):<tipo>


VAR
<declarao das variveis locais>
INCIO
<lista dos comandos>

RETORNE <varivel p/ retorno>

Exemplo: funo para calcular o fatorial.

ALGORITMO "FATORIAL"
VAR
NUM:inteiro

// -------------- FUNO TIPO_TRINGULO -------------


FUNO FATORIAL(N: inteiro): inteiro
VAR
FAT, CONT : inteiro
INICIO
FAT <- 1

para CONT <- 1 ate N faca


FAT <- FAT * CONT
fimpara

retorne FAT
FIMFUNO

// -------------- PROGRAMA PRINCIPAL -------------


99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-186

// -------------- FUNO TIPO_TRINGULO -------------


FUNO FATORIAL(N: inteiro): inteiro
VAR
FAT, CONT : inteiro
178 INICIO
TCNICAS DE PROGRAMAO
FAT <- 1

para CONT <- 1 ate N faca


FAT <- FAT * CONT
fimpara

retorne FAT
FIMFUNO

// -------------- PROGRAMA PRINCIPAL -------------


INCIO
escreval("Entre com o nmero que deseja calcular o fatorial:")
leia(NUM)

escreval(FATORIAL(NUM)) // chamada da funo

Fimalgoritmo

Exemplo: calculadora com C#.

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace calculadora
{
class Program{

static int Somar(int a, int b){


int soma = a + b;
return soma;
}

static int Subtrair(int a, int b){


int subtrai = a - b;
return subtrai;
}

static int Multiplicar(int a, int b){


int mult = a * b;
return mult;
}

// Obs: nesse exemplo no foi previsto o erro de diviso por zero


static int Dividir(int a, int b){
int divide = a / b;
return divide;
}

static void Main(string[] args){

int a, b;
Console.Write("Entre com o primeiro valor: ");
a = int.Parse(Console.ReadLine());

Console.Write("Entre com o segundo valor: ");


b = int.Parse(Console.ReadLine());

Console.Write("1 - Somar \n");


Console.Write("2 - Subtrair \n");
Console.Write("3 - Multiplicar \n");
Console.Write("4 - Dividir \n");

Console.Write("Entre com uma opo: ");

switch (Console.Read()) {
case '1': Console.Write("Soma = " + Somar(a,b));
break;

case '2': Console.Write("Subtrao = " + Subtrair(a,b));


break;

case '3': Console.Write("Multiplicao = "+ Multiplicar(a,b));


break;
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-187

Console.Write("Entre com uma opo: ");

E s t r u t u r a d e{ d a d o s h o m o g n e a e h e t e r o g n e a
switch (Console.Read()) 179
case '1': Console.Write("Soma = " + Somar(a,b));
break;

case '2': Console.Write("Subtrao = " + Subtrair(a,b));


break;

case '3': Console.Write("Multiplicao = "+ Multiplicar(a,b));


break;

case '4': Console.Write("Diviso = " + Dividir(a,b));


break;
}
Console.ReadKey();
}
}
}

Na orientao a objetos, os subprogramas so chamados de mtodos, onde


procedimentos so mtodos que tem o tipo de retorno void e funes so m-
todos que tem um tipo de retorno diferente de void.

Escopo
O escopo de uma varivel define a rea do programa onde esta varivel
pode ser referenciada, podendo ser:
Variveis Globais: so as variveis declaradas no programa que so co-
nhecidas em todo programa e inclusive nos subprogramas contidos nele.
Exceto naqueles mdulos onde for declarada outra varivel com o mesmo
nome.
Variveis Locais: so as variveis declaradas em um subprograma, que so
conhecidas em todo o subprograma, mas no no programa que contm o
subprograma. Caso um subprograma contenha a definio de outro sub-
programa, as variveis declaradas no programa e no subprograma sero
visveis no subprograma, mas o contrrio no verdadeiro. No escopo
do programa, no podemos chamar o subsubprograma, assim como no
podemos acessar as variveis do subprograma.

Atividades de aprendizagem da unidade


Vetores

1. Faa um programa que leia um conjunto de 50 elementos inteiros e os


imprima em ordem contrria da que foi lida (DICA: use um vetor).
Ex. conjunto lido:
VET 55 80 45 38 13 24 ... 12
1 2 3 4 5 6 7 8
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-188

180 TCNICAS DE PROGRAMAO

2. Faa um programa que calcule e escreva o somatrio dos valores arma-


zenados numa varivel unidimensional A de 100 elementos numricos a
serem lidos do teclado.
VET 55 80 45 38 13 24 ... 12
1 2 3 4 5 6 7 8
Exemplo:
SOMA = 55 + 80 + 45 + 38 + 13 + 24 ... + 12 = 75.5

3. Faa um algoritmo que leia o vetor A e calcule o fatorial de cada valor


de A e armazene em outro vetor B de tamanho 10 de inteiros. Ao final,
imprima o vetor B.
A 4 1 0 3 ...
B 24 1 1 6 ...
4. Faa um programa que leia um vetor A de 15 valores do tipo inteiro e
calcule o somatrio de cada valor de A e armazene no vetor B. Ao final,
imprima o vetor B.
A 4 1 0 5 ...
B 10 1 0 15 ...
5. Faa um programa que leia um vetor A de 15 valores do tipo inteiro e
calcule o somatrio de cada valor de A e armazene no vetor B. Ao final,
imprima o vetor B.
6. Faa um programa que leia e mostre um vetor de 20 nmeros. A seguir,
conte quantos valores pares existem no vetor.
a) Ler um vetor de 14 elementos e armazenar no vetor V.
b) Ler o vetor DADOS contendo 5 elementos.
c) Para cada elemento do vetor dado, deve-se verificar se o mesmo existe no
vetor V. Caso existir, ao encontrar o primeiro elemento, deve-se armazenar
sua posio no vetor POSIES e cancelar a busca do elemento encontrado.
(Note que o elemento 3 que est na posio um do vetor DADOS no existe
no vetor V. Neste caso, a posio 1 do vetor POSIES ir conter zero);
d) Ao final do programa deve mostrar os trs vetores.
Observao: o programa dever conter a lgica completa
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
V 2 6 8 8 9 9 15 21 56 101 125 125 125 200

Dados 3 8 10 21 125

Posies 0 3 0 8 12
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-189

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 181

Matrizes

1. Faa um programa para ler uma MATRIZ 5 x 5 e em seguida invert-la em


relao a sua diagonal principal.
a) Leitura da matriz
b) Inverter a matriz
c) Imprimir a mariz invertida
Exemplo: MATRIZ A Exemplo: MATRIZ A aps a execuo do algortimo.
1 2 3 4 5 1 6 11 16 21
6 7 8 9 10 2 7 12 17 22
11 12 13 14 15 3 8 13 18 23
16 17 18 19 20 4 9 14 19 24
21 22 23 24 25 5 10 15 20 25

2. Faa um programa para transpor as matrizes abaixo.


1 2
1 2 3 1 1 4
Matriz A 1 1 2 3
2 4 5 6 = 2 2 5

3 3 6

3. Faa um programa para ler a matriz A abaixo e criar um vetor B contendo


a soma das colunas da matriz A.
1 2 3 4 5
1 1 0 2 -1 3
A
2 4 3 2 1 0
3 1 -2 3 4 5
4 8 5 1 3 2

1 14
2 6
B 3 8
4 7
5 10

4. Faa um programa para ler uma matriz M(5 X 5) e gere trs vetores (A, B e C),
onde o vetor:
a) Ir armazenar os elementos acima da diagonal principal.
b) Ir armazenar os elementos da diagonal principal.
c) Ir armazenar os elementos abaixo da diagonal principal.

1 2 3 4 5 Vetor A 2 3 4 5 8 9 10 14 15 20
6 7 8 9 10 Vetor B 1 7 13 19 25
11 12 13 14 15 Vetor C 6 11 12 16 17 18 21 22 23 24
16 17 18 19 20
21 22 23 24 25

5. Faa um programa que leia uma matriz M(5 X 10) e realize a seguinte ope-
rao: procure pelo Dado em cada linha da matriz M e, para cada linha,
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-190

182 TCNICAS DE PROGRAMAO

armazene no Vetor Freq a quantidades de vezes que o dado foi encontrado


na respectiva linha. Observe que cada linha da matriz esta ordenada.
1 2 3 4 5 6 7 8 9 10
1 2 6 8 8 10 11 15 21 56 101
2 3 4 5 6 7 9 10 11 13 16
M 3 1 4 6 7 8 8 8 23 56 34
4 0 2 3 4 5 6 7 8 9 10
5 1 3 7 21 34 78 234 456 789 987

Dado 8

1 2 3 4 5
Freq 2 0 3 1 0

Registros

1. Crie um algoritmo para ler o cdigo, o sexo (M masculino; F feminino)


e o nmero de horas/aula ministradas pelos professores de uma escola du-
rante um ms. Sabe-se que um professor ganha R$ 20,50 hora/aula e que
a escola possui 10 professores. Aps a leitura, o programa dever mostrar:
Uma listagem contendo o cdigo, o salrio bruto, o desconto e o salrio
lquido de todos os professores.
A mdia aritmtica dos salrios brutos dos professores do sexo feminino.
A mdia aritmtica dos salrios brutos dos professores do sexo feminino.
Os descontos devem ser assim calculados:
Sexo At 70 horas/aula no ms Mais que 70 horas/aula no ms
Masculino 10% 8%
Feminino 7% 5%
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-191

E s t r u t u r a d e d a d o s h o m o g n e a e h e t e r o g n e a 183

Referncias
MEDEIROS. Higor. Trabalhando com arrays. Disponvel em: <http://www.devmedia.com.
br/trabalhando-com-arrays/5212>. Acesso em: 21 jul. 2013.
MSDN. Arrays de nico dimensional (guia de programao translation from VPE for
Csharp). Disponvel em: <http://msdn.microsoft.com/pt-br/library/0a7fscd0(v=vs.90).aspx>.
Acesso em: 21 jul. 2013a.
MSDN. Matrizes (Guia de programao do C#). Disponvel em: <http://msdn.microsoft.
com/pt-br/library/9b9dty7d(v=vs.90).aspx>. Acesso em: 21 jul. 2013b.
MSDN. Multidimensional arrays (C# Programming Guide). Disponvel em: <http://msdn.
microsoft.com/en-us/library/2yd9wwz4.aspx>. Acesso em: 21 jul. 2013c.
RODRIGUES, Joel. Arrays em C# teoria e prtica. Disponvel em: <http://www.linhadecodigo.
com.br/artigo/3444/arrays-em-csharp-teoria-e-pratica.aspx.>. Acesso em: 21 jul. 2013.
99575-978-85-6875-94-4-TCNICAS_DE_PROGRAMAO_28_07_2014.pdf, page 1 @ Preflight - 04:36:49 - August 22, 2014 - PG-192

Anotaes
____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

You might also like