Escolar Documentos
Profissional Documentos
Cultura Documentos
Técnicas de
programação
Todos os direitos reservados. Nenhuma parte desta publicação poderá ser reproduzida
ou transmitida de qualquer modo ou por qualquer outro meio, eletrônico ou mecânico,
incluindo fotocópia, gravação ou qualquer outro tipo de sistema de armazenamento e
transmissão de informação, sem prévia autorização, por escrito, da Editora
e Distribuidora Educacional S.A.
Freitas, Veronice de
F866t Técnicas de programação / Veronice de Freitas,
Anderson Emídio de Macedo Gonçalves. – Londrina:
Editora e Distribuidora Educacional S.A., 2014.
192 p.
ISBN 978-85-68075-94-4
CDD 005.133
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Sumário
iv TÉCNICAS DE PROGRAMAÇÃO
Sumário v
Apresentação
Unidade 1
Lógica proposicional
Anderson Emídio de Macedo Gonçalves
Veronice de Freitas
Seção 1: Proposições
Todo conjunto de palavras ou símbolos que exprimem
um pensamento de sentido completo. As proposições
podem ser classificadas em simples ou atômicas e com-
postas ou moleculares. Chama-se proposição simples ou
proposição atômica aquela que não contém nenhuma
outra proposição como parte integrante de si mesma.
As proposições simples são geralmente designadas pe-
las letras latinas minúsculas p, q, r, s ..., chamadas letras
proposicionais. As proposição composta ou proposição
molecular é aquela formada pela combinação de duas
ou mais proposições. As proposições compostas são ha-
bitualmente designadas pelas letras latinas P, Q, R, S...,
também chamadas de letras proposicionais. Estas pro-
posições são unidas por conectivos: “e”, “ou”, “se ...
então”, “se e somente se” etc.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Seção 2: Conectivos
Conectivos lógicos são palavras que usamos para
formar novas proposições a partir de outras exis-
tentes. As proposições compostas são formadas
por proposições simples interligadas por conectivo.
Usando conectivos, é possível criar proposições maio-
res (ditas compostas) a partir de menores, de modo
que o valor da proposição obtida dependa apenas do
valor das proposições iniciais. Os principais conectivos
lógicos são: não; e; ou; se ... então, e se e somente
se, simbolizados respectivamente por: ¬, ol.
Lógica proposicional 3
Introdução ao estudo
Em lógica e matemática, uma lógica proposicional (ou cálculo sentencial) é um sis-
tema formal no qual as fórmulas representam proposições que podem ser formadas
pela combinação de proposições atômicas usando conectivos lógicos e um sistema
de regras de derivação, que permite que certas fórmulas sejam estabelecidas como
“teoremas“ do sistema formal. As proposições são sentença declarativa com valores
verdadeiro ou falso. Por exemplo: “Maria gosta de João e de Pedro”; “Todos os seres
humanos têm uma mãe”; “Cinco é maior que quatro”.
As proposições transmitem pensamentos, isto é, afirmam fatos ou exprimem juízos
que formamos a respeito de determinados entes. Exemplos:
O Japão está situado no continente africano.
A lâmpada da sala está acesa.
A cidade de Recife é a capital de Pernambuco.
4 TÉCNICAS DE PROGRAMAÇÃO
Seção 1 Proposição
Sentença declarativa afirmativa sobre a qual tenha sentido afirmar que seja
verdadeira ou falsa. Ou seja, conjunto de palavras ou símbolos que exprimem um
pensamento de sentido completo.
Exemplos:
A Lua é um satélite da Terra. (V)
A copa do mundo em 2014 será realizada na Alemanha. (F)
Recife é a capital de Pernambuco. (V)
3/5 é um número inteiro. (F)
3 2 = 9 (V)
Princípios ou axiomas: a lógica matemática adota, como regras fundamentais do
pensamento, os dois seguintes princípios (GENEROSO, 2013):
Princípio da não negação: uma proposição não pode ser verdadeira ou falsa
ao mesmo tempo.
Princípio do terceiro excluído: toda proposição ou é verdadeira ou é falsa, isto
é, verifica-se sempre um destes casos e nunca um terceiro.
Quando pensamos, efetuamos muitas vezes certas operações sobre proposições,
chamadas de operações lógicas. Estas obedecem a regras de um cálculo, denominado
CÁLCULO PROPOSICIONAL. A linguagem de um cálculo proposicional consiste em:
um conjunto de símbolos primitivos, definidos como fórmulas atômicas, pro-
posições atômicas, ou variáveis; e
um conjunto de operadores, interpretados como operadores lógicos ou conec-
tivos lógicos.
Lógica proposicional 5
Além das proposições, a Lógica dispõe de uma função, chamada de “valor ló-
gico”, que associa a cada proposição simples um de dois valores lógico, chamado
“verdadeiro” (representado por V) ou “falso” (representado por F). Geralmente, o
valor lógico V ou F é associado à proposição, em consonância com o significado
da proposição no mundo real, embora isso não seja essencial (PINHO, 1999). Com
esse sentido, podemos dizer que as proposições: “A Lua é o satélite da Terra”, “Pedro
Álvares Cabral descobriu o Brasil” são verdadeiras, isto e, assumem o valor lógico V,
e que as proposições: “Dante escreveu Os Lusíadas”, “O Brasil é uma monarquia”
são claramente falsas e, portanto, assumem o valor lógico F.
As proposições simples são designadas pelas letras latinas minúsculas p, q, r, s...,
chamadas letras proposicionais.
Exemplos:
p: Minha casa é grande
q: Seus olhos são azuis.
r: Está calor.
6 TÉCNICAS DE PROGRAMAÇÃO
A quantidade de linhas de uma tabela verdade é determinada por 2n, onde n é o nú-
mero de proposições simples (termos) que compõem a proposição composta (fórmula).
p: “João é competente.” p q
q: “Maria é bonita.” V V
A tabela ao lado representa todas as possíveis combina- V F
ções entre os valores lógicos (verdadeiros ou falsos) das
proposições “p” e “q”. A partir dela, é possível utilizar F V
diversos operadores para unir as duas proposições. F F
Lógica proposicional 7
8 TÉCNICAS DE PROGRAMAÇÃO
Atividades de aprendizagem
1. Quais das sentenças abaixo são proposições?
a) A lua é feita de queijo verde.
b) Dois é um número primo.
c) O jogo vai acabar logo?
d) X 2 – 4 = 0.
2. Determinar o valor lógico de cada uma das seguintes proposições:
a) Tiradentes morreu afogado.
b) As diagonais de um paralelogramo são iguais.
c) O número 125 é cubo perfeito.
d) O produto de dois números ímpares é um número ímpar.
3. Determinar o valor lógico ( V ou F ) de cada uma das seguintes proposições.
a) Goiânia é a capital de Tocantins.
b) O número 25 é quadrado perfeito.
c) Todo número divisível por 5 termina com 5.
4. Determine se as proposições são Simples (S) ou Compostas (C):
a) Maria estuda e trabalha.
b) Mário é feio.
c) 3 é um número ímpar.
d) Márcia é jogadora ou estudante.
e) Paulo é rico e feliz.
f) 32 é múltiplo de 4.
g) Paris é a capital da França.
h) Pedro é estudioso e Maria é bonita.
i) Celso é pobre então é infeliz.
j) João é velho.
k) Ou Carla vai à festa ou fica em casa.
l) 13 é número e primo.
5. Marque as sentenças abaixo que são proposições, simples ou compostas.
Para as sentenças que não são proposições, explique porque não o são:
a) João é alto.
b) Ela é bonita.
c) A casa é pequena.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 9
10 TÉCNICAS DE PROGRAMAÇÃO
Seção 2 Conectivos
Em Lógica Simbólica, a ação de combinar proposições é chamada “operação”,
e os conectivos são chamados “operadores”, e são representados por símbolos es-
pecíficos; apresentamos a seguir as cinco operações lógicas, com seus respectivos
conectivos e símbolos:
2.1 Negação
Chama-se de negação de uma proposição p a proposição representada por ~p
(não p) cujo valor lógico é verdadeiro (V) quando p é falsa e falso (F) quando p é
verdadeiro. A negação também pode ser representada por : ¬. Simbolicamente:
“ ~ p “ = não p.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 11
p ~p
V F
F V
Fonte: Do autor (2014).
Para uma proposição p, podemos formar a sua negação de qualquer um dos se-
guintes modos (JÚNIOR, 2013):
“não é verdade que p”
“é falso que p”
“não“ em p
Exemplo:
p: Lídia é estudiosa.
~p: Não é verdade que Lídia é estudiosa.
~p: É falso que Lídia é estudiosa.
~p: Lídia não é estudiosa.
p: Hoje é Quarta.
~p: Hoje não é Quarta.
2.2 Conjunção
Chama-se conjunção de duas proposições p e q a proposição representada por p e
q cujo valor lógico é verdadeiro quando ambas as proposições p e q são verdadeiras
e falsas nos demais casos. Simbolicamente: “p q” = p e q.
p Q pq
V V V
V F F
F V F
F F F
Fonte: Do autor (2014).
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
12 TÉCNICAS DE PROGRAMAÇÃO
Exemplo 1:
p: Brasília é a capital do Brasil.
q: Hoje é sexta-feira.
p q: Brasília é 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 Disjunção
Chama-se disjunção de duas proposições p e q a proposição representada por
p ou q cujo valor lógico é verdadeiro quando ao menos uma das proposições p e
q é verdadeira e falso quando ambas as preposições são falsas. Simbolicamente:
“p q” = p ou q.
p Q pq
V V V
V F V
F V V
F F F
Fonte: Do autor (2014).
Exemplo:
p: Ele cursará Cálculo.
q: Ele cursará Álgebra linear.
p q: Ele cursará Calculo ou Álgebra linear.
Exemplo:
p: Brasília é a capital do Brasil.
q: Hoje é sexta feira.
p v q: Brasília é a capital do Brasil ou hoje é sexta-feira.
Lógica proposicional 13
p Q pvq
V V F
V F V
F V V
F F F
Fonte: Do autor (2014).
p Q poq
V V V
V F F
F V V
F F V
Fonte: Do autor (2014).
14 TÉCNICAS DE PROGRAMAÇÃO
p Q plq
V V V
V F F
F V F
F F V
Fonte: Do autor (2014).
2.7 Exemplos
O Quadro 1.11 representa várias formas juntamente com a interpretação e seu
correspondente valor lógico.
Lógica proposicional 15
Atividades de aprendizagem
1. Dê a negação das seguintes proposições:
a) O processador é rápido, mas a impressora é lenta.
b) O processador é rápido ou a impressora é lenta.
c) Pepinos são verdes e não têm sementes.
d) A comida é boa ou o serviço é excelente.
e) Nem a comida é boa nem o serviço é excelente.
2. Dê o valor verdade das proposições abaixo:
a) Se a Lua é um satélite então a terra é um planeta.
b) Um corpo celeste não é um satélite se gira em torno de um planeta.
c) Se Lilo é um gato, então tem quatro patas. (considere que existe um
gato chamado Lilo).
d) Se a Terra é uma estrela então a Lua é um planeta.
3. Dê o valor verdade das seguintes proposições:
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 não é verde se, e somente se, preto for lilás.
e) Não é verdade que 1 + 1 = 3 se, e somente se, 2 + 2 = 5.
4. Sejam as proposições:
p: Marcos é alto e q: Marcos é elegante.
Traduzir para a linguagem simbólica as proposições abaixo:
a) Marcos é alto e elegante.
b) Marcos é alto, mas não é elegante.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
16 TÉCNICAS DE PROGRAMAÇÃO
a) ~p d) q l p g) ~p ^ ~q
b) p ^ q e) p o ~q h) p l ~q
c) p v q f) p v ~q i) p ^ ~q o p
9. Sejam as proposições p e q, traduzir para a linguagem corrente as seguintes
proposições:
p: Eduardo é rico e q: Murilo é feliz.
a) q p c) q l ~p e) ~p ^ q o p
b) p v ~q d) ~p o q
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 17
18 TÉCNICAS DE PROGRAMAÇÃO
Lógica proposicional 19
Exemplo: 3 proposições
p q r
Exemplo: 2 proposições 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 proposições 3 proposições
22 = 4 combinações 23 = 8 combinações
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
20 TÉCNICAS DE PROGRAMAÇÃO
Exemplo: 4 proposições
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 proposições
24 = 16 combinações
Resolução:
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
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 21
Resolução:
p q r poq plr ~r (plr) o~r ~ ((p l r)o ~r) (p o q) ~ ((p l r) o~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
22 TÉCNICAS DE PROGRAMAÇÃO
Atividades de aprendizagem
1. Construa a tabela verdade para as proposições a seguir:
a) pl ~q
p q ~q p l ~q
b) ~p v q
p q ~p ~p v q
c) (p ^ q) o ~(p v q)
d) (p ^ q) l (p v r)
Lógica proposicional 23
24 TÉCNICAS DE PROGRAMAÇÃO
4.2 Tautologias
Chama-se tautologia toda proposição composta cuja última coluna da sua tabela
verdade seja totalmente verdadeira, ou seja, é toda proposição composta que assume
somente o valor V para todas as combinações possíveis de suas proposições simples.
As tautologias são também denominadas proposições tautológicas ou proposições
logicamente verdadeiras.
Exemplos:
a) p v ~p: “Hoje vai chover ou hoje não vai chover”. Neste caso, a proposição
apresentada tem que ser sempre verdadeira, já que uma ou outra das duas
coisas tem que acontecer (é o chamado princípio do terceiro excluído).
p ~p p v ~p
V F V
F V V
Lógica proposicional 25
c) pv (q ~ q) l p
p q ~q q ~ q pv (q ~ q) p v (q ~ q) l 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
4.3 Contradição
É chamada de contradição toda proposição composta cuja última coluna da sua
tabela verdade contenha somente a letra F (falsidade), ou seja, é toda proposição
composta que assume somente o valor F para todas as combinações possíveis de suas
proposições simples.
As contradições são também denominadas proposições contraválidas ou propo-
sições logicamente falsas.
Exemplos:
a) p ^ ~p: “hoje é sábado e hoje não é sábado
p ~p p ~p
V F F
F V F
b) p l ~p
p ~p pl~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 proposição pode ser simultaneamente verdadeira e falsa
é sempre falso.
4.4 Contingência
Chama-se contingência toda proposição composta em que em sua tabela ver-
dade, na última coluna, aparecem as letras V e F, pelo menos uma vez cada uma, ou
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
26 TÉCNICAS DE PROGRAMAÇÃO
seja, contingência é toda proposição composta que não pode ser classificada como
tautologia nem como contradição.
As contingências são também denominadas proposições contingentes ou propo-
sições indeterminadas.
Exemplos:
a) p o ~p
p ~p p o ~p
V F F
F V V
b) p v q o p
p q pvq p v q op
V V V V
V F V V
F V V F
F F F V
p q c ~q p ~ q p ~ q o c po q (p ~ q o c) l (p o 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
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 27
a) ~~ p p
Resolução: a tabela verdade para a proposição é dada como:
p ~p ~p
V F V
F V F
idênticas
b) ~ p o p p
Resolução: a tabela verdade para a proposição é dada como:
p ~p ~ pop
V F V
F V F
idênticas
c) po q ~ p v q
Resolução: a tabela verdade para a proposição é dada como:
p q ~p ~pvq poq
V V F V V
V F F F F
F V V V V
F F V V V
idênticas
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
28 TÉCNICAS DE PROGRAMAÇÃO
d) p l q (p o q ) (q o p)
Resolução: a tabela verdade para a proposição é dada como:
p q poq ~pvq (p o q) (q o p) plq
V V V V V V
V F F V F F
F V V F F F
F F V V V V
idênticas
Lógica proposicional 29
Atividades de aprendizagem
1. Exercícios — 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:
2. Exercícios — Contradição:
Preencha as tabelas a seguir:
a) P(p) = p ~p
Tabela verdade:
p ~p p ~p
V
F
p q ~p ~q p ~q ~p (p ~q)
V V
V F
F V
F F
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
30 TÉCNICAS DE PROGRAMAÇÃO
3. Exercícios — Contingência:
Preencha as tabelas abaixo:
a) P(p) = p o ~p
Tabela verdade:
p ~p p o ~p
V
F
p q pq pqop
V V
V F
F V
F F
b) p lq (p q) v (~ p ~ q) é: ____________________________
p q pl q pq ~p ~q ~ p ~ q (p q) v (~ p ~ q)
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 31
Fique ligado!
A lógica matemática (ou lógica simbólica) trata do estudo das sentenças de-
clarativas, também conhecidas como proposições, que devem satisfazer aos
dois princípios fundamentais seguintes: Princípio do terceiro excluído, uma
proposição só pode ser verdadeira ou falsa, não havendo outra alternativa.
Princípio da não contradição, uma proposição não pode ser ao mesmo tempo
verdadeira e falsa.
Diz-se então que uma proposição verdadeira possui valor lógico V (verdade)
e uma proposição falsa possui valor lógico F (falso). Os valores lógicos também
costumam ser representados por 0 (zero) para proposições falsas (0 ou F) e 1
(um) para proposições verdadeiras (1 ou V).
As proposições podem se classificadas como simples ou compostas. A pro-
posição simples é aquela que não contém nenhuma outra proposição como
parte integrante de si mesma. A proposição composta é formada pela combi-
nação de duas ou mais proposições simples através de um elemento de ligação
denominado conectivo.
Exemplos de proposições simples e proposições compostas:
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
32 TÉCNICAS DE PROGRAMAÇÃO
p q p^q
V V V
CONJUNÇÃO: “p e q” V F F
F V F
F F F
continua
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 33
continuação
p q pvq
V V V
DISJUNÇÃO: “p ou q” V F V
F V V
F F F
p q poq
V V V
DISJUNÇÃO EXCLUSIVA:
V F F
“ou p ou q, mas não ambos”
F V V
F F V
p q pvq
V V F
CONDICIONAL: “Se p, então q” V F V
F V V
F F F
p q plq
V V V
BICONDICIONAL: “p se e
V F F
somente se q”
F V F
F F V
p q
1 V V
2 V F
3 F V
4 F F
Neste caso, as combinações entre os elementos são: VV, VF, FV e FF. As tabelas
verdade são construídas 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 proposição
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
34 TÉCNICAS DE PROGRAMAÇÃO
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
p ~p p ~p
V F V
F V V
p ~p (p ~p)
V F F
F V F
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 35
p q ~q p ~q
V V F F
V F V V
F V F F
F F V F
NEGAÇÃO CONJUNÇÃO
p q pq
p ~p V V V
V F V F F
F V F V F
F F F
p q p q 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
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
36 TÉCNICAS DE PROGRAMAÇÃO
continuação
CONDICIONAL BICONDICIONAL
p q poq p q pl q
V V V V V V
V F F V F F
F V V F V F
F F V F F V
Bloco 1:
1. Extraia a conclusão dos raciocínios a seguir:
a) Se Carlos estudar, então não irá ao jogo. Se Carlos não for ao jogo, seu
time ficará desfalcado. Como o time de Carlos não ficou desfalcado,
conclui-se que...
b) Se Raquel viajar nas férias, então sua conta no banco ficará descoberta.
Como Raquel viajou nas férias, conclui-se que...
c) Se os eclipses são previsíveis, então a órbita dos planetas é exata. Se
a órbita dos planetas é exata, então o sistema solar funciona como um
relógio. Ora, os eclipses não são previsíveis, portanto...
d) Se meu time for campeão, darei uma festa. Se der uma festa, gastarei
muito dinheiro agora. Se gastar muito dinheiro agora, terei dificuldades
para viajar. Meu time não foi campeão, logo...
2. Indicar a estrutura dos seguintes enunciados usando a linguagem lógica:
a) Meu gato é amarelo ou meu gato é preto, mas o gato de Maria é branco.
b) Eu não irei à festa, mas Pedro irá ou Antônio irá.
c) Vá com a família ou vá só; e divirta-se.
d) Costumo ir ao cinema ou visitar os amigos, mas hoje não irei ao cinema.
e) Não é verdade que Pedro não tenha ido ver a família.
3. Verificar se os raciocínios são válidos ou não válidos.
Se Maria casar com José, Vilma ficará contente. Se Vilma ficar contente,
Marcos poderá descansar. Como Marcos não pode descansar, Maria não
casou com José.
Se Paulo começar a trabalhar na feira, Vilma ficará em casa. Se Vilma
ficar em casa, Zezinho não irá à escola. Ora, Zezinho continua indo à
escola, portanto Paulo começou a trabalhar na feira.
4. Traduzir para a linguagem corrente as seguintes proposições:
p: Pelé é atacante.
q: Dida é goleiro.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 37
Bloco 2:
Analise as proposições abaixo:
As seguintes proposições são verdadeiras:
O time do Bahia perdeu o jogo no domingo.
O time do Remo ganhou o jogo no domingo.
Marcos gosta de cantar óperas.
Júlia não come beterraba.
38 TÉCNICAS DE PROGRAMAÇÃO
c) P (p,q): p v ( p / q)l p
p q ( p / q) p v ( p /q) p v ( p/ q) l p
V V
V F
F V
F F
Bloco 3:
b) P (p, q, r): (p v q o r) o q v ~ r
p q r ~r pvq pvqor qv~r (p v q o r)o q v ~ r
V V V
continua
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 39
continuação
V V F
V F V
V F F
F V V
F V F
F F V
F F F
Sejam as proposições:
p: Tuca assistiu ao filme.
q: Joca assistiu ao filme.
r: Kika assistiu ao filme.
40 TÉCNICAS DE PROGRAMAÇÃO
2. Dadas às proposições:
P – Adriana é bonita
Q – Adriana é inteligente
Escrever na linguagem simbólica as seguintes proposições:
a) Adriana é bonita e inteligente.
b) Adriana é bonita, mas não inteligente.
c) Não é verdade que Adriana não é bonita ou inteligente.
d) Adriana não é bonita nem inteligente.
e) Adriana é bonita ou não é bonita e inteligente.
f) É falso que Adriana não é bonita ou que não é inteligente.
3. Sejam as proposições p: está frio e q: está chovendo. Traduzir para a lin-
guagem corrente as seguintes proposições:
a) ~ p
b) p q
c) p v q
d) ql p
e) ~ p ~ q
f) p o ~ q
g) p l ~q
h) p v ~ q
i) p ~ q o p
4. Sejam as proposições p: Jorge é rico e q: Carlos é feliz. Traduzir para lin-
guagem corrente as seguintes proposições:
a) p v q
b) p q
c) p ~ q
d) ~ p ~q
5. Verificar se as proposições a seguir são tautologias:
a) p v ~(p ^ q)
b) p ^ q o (p l q)
c) p v (q ^ ~q) l p
d) p ^ r o ~q v r
6. Determine quais proposições são tautologias, contradições ou contingências:
a) (p o p) v (p o ~p)
b) (p oq) ^ p o q
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Lógica proposicional 41
c) po (q o (q o p))
d) ~p v qo(p o q)
e) p o (p o q ^ ~q)
f) (p ^ q o r) l (p o (q o r))
7. Determinar o valor lógico de P em cada um dos casos abaixo, considerando
a informação fornecida.
a) Q é falsa e P ^ Q é falsa.
b) Q é falsa e P v Q é falsa.
c) Q é falsa e P o Q é falsa.
d) Q é falsa e P o Q é verdadeira.
e) Q é falsa e P l Q é verdadeira.
f) Q é verdadeira e P l Q é falsa.
8. Construir a tabela verdade para as seguintes proposições:
a) p q o p q
b) ~p o (q o p)
c) (p l ~q) l q op
9. Determinar P(VV, VF, FV, FF) em cada um dos seguintes casos:
a) P(p,q) = ~(~p l 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 o ~q
b) P(p,q,r) = ~p (q ~r)
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
42 TÉCNICAS DE PROGRAMAÇÃO
Referências
ARAMAM, Eliana Maria Oliveira. Matemática discreta. Curso de Graduação — Unopar
Virtual, 2011.
JÚNIOR, Walteno Martins Parreira. Lógica matemática e computacional. 2013. Disponível
em: <http://www.waltenomartins.com.br/lmc_apo.pdf>. Acesso em: 25 mar. 2014.
PINHO, Antonio A. Introdução à lógica matemática. 1999. Disponível em: <ftp://ftp.
cefetes.br/cursos/Matematica/Oscar/introducao_logica/Apostila%20de%20Logica.pdf>.
Acesso em: 29 mar. 2014.
REIS, Joaquim. Introdução à lógica simbólica. 2013. Disponível em: <http://iscte.pt/~luis/
aulas/ia/IA-LogicaSimbolica.pdf>. Acesso em: 29 mar. 2014.
GENEROSO. Ruy Alexandre. Cálculo proposicional. 2013. Disponível em: <http://
ruyalexandre.zzl.org/arquivos/lmintrologica.pdf>. Acesso em: 29 mar. 2014.
Leitura complementar
DIDÁTICA dos Concursos. Raciocínio lógico. Disponível em: <http://www.
guiadoconcursopublico.com.br/apostilas/24_81.pdf>. Acesso em: 29 mar. 2014.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Unidade 2
Introdução a
algoritmos
Veronice de Freitas
Introdução a algoritmos 45
Introdução ao estudo
Um algoritmo é formalmente uma sequência finita de passos que levam à execu-
ção de uma tarefa. Essas tarefas não podem ser redundantes nem subjetivas na sua
definição, devem ser claras e precisas. São exemplos de algoritmos: instruções de
montagem, receitas, manuais de uso etc.
Até mesmo as coisas mais simples podem ser descritas por sequências lógicas.
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.
46 TÉCNICAS DE PROGRAMAÇÃO
Onde temos:
ENTRADA: são os dados de entrada do algoritmo, os valores que ele vai usar
no processamento para chegar à solução do problema. São fornecidos pelo
usuário, fazendo uso de algum dispositivo de entrada de dados, tal como um
teclado, um mouse ou um leitor de código de barras.
PROCESSAMENTO: são os procedimentos utilizados para chegar ao resultado
final, para alcançar a resolução do problema. Esses procedimentos são execu-
tados no processador do computador e os valores parciais são armazenados
na memória (memória RAM).
SAÍDA: São os dados já processados. É o resultado do processamento. Estes
dados de saída são apresentados em algum dispositivo de saída. Por exemplo,
a tela de um monitor.
Para se criar um programa que seja executável dentro de um computador, deve ter
em mente três pontos de trabalho: a entrada de dados, o seu processamento e a saída
dos mesmos. Sendo assim, todo programa estará trabalhando com esses três conceitos.
Introdução a algoritmos 47
48 TÉCNICAS DE PROGRAMAÇÃO
Introdução a algoritmos 49
50 TÉCNICAS DE PROGRAMAÇÃO
DESVANTAGENS:
Imprecisão: pode ser interpretado de forma diferente o exemplo: “afrouxar a
porca” na troca do pneu.
Símbolo Função
Introdução a algoritmos 51
continuação
PROCESSAMENTO
SAÍDA
SETAS
FIM Final
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
52 TÉCNICAS DE PROGRAMAÇÃO
Introdução a algoritmos 53
algoritmo "Calcula-média“
var
N1, N2, N3, N4, MÉDIA, SOMA: real
início
// ---------- ENTRADA DE DADOS---------
leia(N1,N2,N3,N4)
// ------------ PROCESSAMENTO-----------
SOMA <- N1 + N2 + N3 + N4
MÉDIA <- SOMA / 4
// --------------- SAÍDA--------------
escreva("Média Final: ", MÉDIA)
fim Algoritmo
Algoritmo “Maioridade”
var
idade: inteiro
início
// --------------- SAÍDA--------------
se (idade > 0) então
senão
Escreva (“ Idade incorreta. “)
Fimse
fimalgoritmo
VANTAGENS:
Independência física da solução (solução lógica apenas).
Usa o português como base.
Pode-se definir quais e como os dados vão estar estruturados.
Passagem quase imediata do algoritmo para uma linguagem de programação.
DESVANTAGENS:
Exige a definição de uma linguagem não real para trabalho.
Não padronizado.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
54 TÉCNICAS DE PROGRAMAÇÃO
Rafael
Rafael é a informação
NOME é a variável do tipo caractere
NOME
55
55 é a idade
IDADE é a variável do tipo inteiro
IDADE
Memória
Introdução a algoritmos 55
Tipo Descrição
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 sequência 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 lógicos, os quais possuem apenas 2 estados:
LÓGICO
VERDADEIRO (true) ou FALSO (false)
Fonte: Do autor (2014).
56 TÉCNICAS DE PROGRAMAÇÃO
Fimalgoritmo
Imprime a MÉDIA
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Introdução a algoritmos 57
Como exemplo, pode-se representar a memória como uma matriz, como a Figura
2.2, onde cada célula possui tamanho de 1 byte (8 bits):
Exemplo:
Var
NUMDEP: INTEIRO // irá utilizar dois bytes
SALÁRIO: REAL // irá utilizar quatro bytes
NUMDEP SALÁRIO
2 BYTES 4 BYTES
Exemplos: algoritmo em portugol para somar dois valores inteiros (20 + 10).
58 TÉCNICAS DE PROGRAMAÇÃO
0 1 2 3 4 6 6 7 8 ..
A B C
20 10 30
Endereços representados no
sistema decimal para facilitar
a análise.
Introdução a algoritmos 59
Atividades de aprendizagem
1. Escreva um algoritmo na forma narrativa para fazer uma salada de frutas.
2. A tabela abaixo contém algumas instruções que têm por objetivo calcular
o total de uma venda. Na coluna tipo, identifique os dados de entrada (E),
processamento (P) e saída (S). Na coluna sequência lógica, estabeleça a
sequência numérica das instruções (ordem para serem executadas).
Algoritmo venda
Instrução (Identifique a ordem correta) Tipo Sequência lógica
Calcular o valor total da peça (Quantidade * Valor da peça)
Mostrar o código da peça e seu valor total
Receber valor da peça
Receber quantidade de peças
var
PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Início
escreva(“Digite o preço unitário: ”)
leia (PRECO_UNIT)
60 TÉCNICAS DE PROGRAMAÇÃO
( ) Verdadeiro ( ) “Maria”
( ) “c*d” ( ) -23
( ) Falso ( ) 35.23
( ) “1 2 3 4“ ( ) -18.589
( ) “aula” ( ) 345
( ) 897 ( ) 0.342
6. Quais são as regras básicas para criar nomes (identificadores) das variáveis?
7. Marque com X os identificadores válidos:
( ) 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 ( ) MÉDIA
( ) MÉDIA SALARIAL ( ) AI!
( ) A15B34 ( ) “AULA“
( ) NOME_ALUNO ( ) 1DEPARTAMENTO
Introdução a algoritmos 61
62 TÉCNICAS DE PROGRAMAÇÃO
algoritmo “exemploAtriuicao”
var INICIO
FIM
Introdução a algoritmos 63
algoritmo “exemploSaida”
var INICIO
início
FIM
algoritmo “exemploEntradaSaida”
INICIO
var
PRECO_UNITÁRIO, TOTAL : real
QTDE : inteiro
PRECO_UNITARIO
início
fimAlgoritmo
FIM
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
64 TÉCNICAS DE PROGRAMAÇÃO
Atividades de aprendizagem
1. Analise os algoritmos abaixo e diga o que será impresso na tela ao serem
executados:
Algoritmo Simulação
algoritmo "teste01"
a) var
A , B: inteiro Memória Vídeo
início
A <-10
B <- 20
escreva(B)
B <- 5
Escreva( A, B)
fimalgoritmo
b) algoritmo "teste02"
var
A , B,C: inteiro Memória Vídeo
Início
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 Memória Vídeo
Z, Y: real
início
X <- 30
Y <- 40
Z <- Y – X * 2
Escreva(Z)
X <- 10
Y <- X + Z /2
escreva(X, Y, Z)
fimalgoritmo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Introdução a algoritmos 65
var
PRECO_UNIT, PRECO_TOT : real
QUANT : inteiro
Início
escreva(“Digite o preço unitário: ”)
leia (PRECO_UNIT)
66 TÉCNICAS DE PROGRAMAÇÃO
Introdução a algoritmos 67
68 TÉCNICAS DE PROGRAMAÇÃO
Operador Comparação
> Maior que
< Menor que
>= Maior ou igual
<= Menor ou igual
= Igual
<> Diferente
Operação Operador
Negação Não
Conjunção E
Disjunção (não — exclusiva) Ou
Disjunção (exclusiva) Xou
Introdução a algoritmos 69
Expressão Resultado
a) Não A Não V = F
b) A e B VeF=F
c) A ou B V ou F = V
d) Não (B ou C) Não (F ou F) = Não F = V
Atividades de aprendizagem
1. Os pares de instruções 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
70 TÉCNICAS DE PROGRAMAÇÃO
4. Sabendo que A=3, B=8 e C=4, informe se as expressões abaixo são verda-
deiras ou falsas.
xpress o erdadeiro also
a) ( +C) > ( ) ( )
b) >= ( + 3) ( ) ( )
) C=( ) ( ) ( )
d) ( + ) >= C ( ) ( )
e) (C+ ) > ( ) ( )
5. Sabendo que A=5, B=4 e C=3 e D=6, informe se as expressões abaixo são
verdadeiras ou falsas.
xpress o erdadeiro also
( > C) e (C >= ) ( ) ( )
( + ) > 1 ou. ( + ) = (C+ ) ( ) ( )
( >=C) e. ( >= C) ( ) ( )
nao ( < ) xo ( = C) ( ) ( )
< xo > ( ) ( )
Introdução a algoritmos 71
72 TÉCNICAS DE PROGRAMAÇÃO
Pseudocódigo Fluxograma
...
<comando 1> COMANDO 1
<comando 2>
<comando n>
COMANDO 2
...
COMANDO N
Pseudocódigo Fluxograma
Obs: antes de desenvolver o pseudocódigo identifique: INICIO
*Quais são as entradas? NUMERO1 e NUMERO2
*Qual o processamento? Calcular a soma
*Qual é a saída? Apresentar a soma “Entre com o 1º
número: “
algoritmo “SomaNúmeros”
var
NUMERO1, NÚMERO2: inteiro NUMERO1
SOMA: inteiro;
Início “Entre com o 2º
// --------- Entrada --------- número: “
escreva(“Entre com o 1º número: “)
leia(NÚMERO1)
NUMERO2
escreva(“Entre com o 2º número: “)
leia(NÚMERO2)
SOMA <- NUMERO1 + NUMERO2
Introdução a algoritmos 73
Pseudocódigo Fluxograma
Dados de entrada:
INICIO
Obter o valor da altura do retângulo.
Obter o valor da largura do retângulo.
“Entre com a
Processamento: altura: “
Calcular a área.
Calcular o perímetro.
ALTURA
Saída:
Mostrar os cálculos realizados.
algoritmo “ÁreaPerímeto” “Entre com a
Var largura “
ÁREA, PERÍMETRO, ALTURA, LARGURA: real
Início
// --------- 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
PERÍMETRO <- 2 * ALTURA + 2 * LARGURA
“O perímetro é: “,
// --------- Saída -------- PERIMETRO
escreva(“A área é: “, AREA)
escreva (“O perímetro é: “, PERÍMETRO)
FIM
fimalgoritmo
Pseudocódigo Fluxograma
Dados de entrada: Saída:
INICIO
Obter o valor do lado. Mostrar o valor da área.
Processamento:
“Informe a media
Calcular a área. do lado:”
algoritmo “ÁreaPerímeto”
Var
LADO, ÁREA: real
Início LADO
// --------- Entrada --------
escreva(“Informe a medida do lado:”)
lEIA(LADO) AREA LADO * LADO
74 TÉCNICAS DE PROGRAMAÇÃO
Algoritmo Simulação
algoritmo "exemplo01"
var
Memória Vídeo
A <- 20 Digite o
A, B, TROCA: inteiro
valor(numérico)
B <- 30
da variável A:
início
TROCA <- 20 20
//========ENTRADA ===========
escreva("Digite o valor(numérico) da A <- 30
Digite o valor
variável A: ")
B <- TROCA (numérico) da
leia(A)
variável A: 30
escreva("Digite o valor(numérico) da
O novo valor de
variável B: ")
A é: 30
leia(B)
O novo valor de
// =====PROCESSAMENTO ========
B é: 20
TROCA <- A
A <- B
B <- TROCA
//==========SAÍDA ============
escreva("O novo valor de A é: ",A)
escreva("O novo valor de B é: ",B)
fimalgoritmo
Exemplo 2: tem por função efetuar a leitura de três números e calcular a média
aritmética.
Pseudocódigo Simulação
algoritmo “MédiaAritmetica”
Var
N1, N2, N3: real
Memória Vídeo
MÉDIA: real Entre com os
Início
// --------- Entrada -------- N1 <- 10 números:
escreva(“Entre com os números: “) N2 <- 20 10
Leia(N1, N2, N3)
N3 <- 30 20
MÉDIA <- (10 + 20 30
// --------- Processamento --------
MÉDIA = (N1 + N2 + N3) / 3 + 30) / 3 A Média é: 20
fimalgoritmo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Introdução a algoritmos 75
algoritmo "exemplo01"
var
custo, venda, percent: real
início
// ===============ENTRADA ==============
escreva("Digite o custo do produto: ")
leia(custo)
// ===============PROCESSAMENTO ==============
percent <- (percent/100) * custo
venda <- custo + percent
// ===============SAÍDA ==============
escreval("O valor de venda é: ",venda)
fimalgoritmo
algoritmo "exemplo2"
var
custoFábrica, custoFinal: real
início
// ===============ENTRADA ==============
escreva("Informe o custo de fábrica do veículo: ")
leia(custoFábrica)
// ===============PROCESSAMENTO ==============
custoFinal <- custoFábrica + (0.28 * custoFábrica) + (0.45 *
custoFábrica)
custoFinal <- custoFinal + (0.45 * custoFinal)
// ===============SAÍDA ==============
escreva("O custo para o consumidor final é de: ",custoFinal)
fimalgoritmo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
76 TÉCNICAS DE PROGRAMAÇÃO
Atividades de aprendizagem
1. Analise os blocos de código dos algoritmos abaixo e represente o que será
impresso ao serem executados:
a)
escreva( B)
B <- 40
!
escreva (A, B)
b)
A <- 20
B <- 45 Memória Vídeo
C <- A + B
escreva ( C )
B <- 30
escreva ( B, C)
C <- A + B
escreva ( A, B, C)
!
c)
A <- 15
B <- A + 1 Memória Vídeo
A <- B + 2
B <- A + 1
escreva ( A )
A <- B + 1
B <- B - 2
escreva ( A ) !
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Introdução a algoritmos 77
d)
A <- 40
B <- 30 Memória Vídeo
C <- A + B
escreva (C)
B <- 10
escreva (B, C)
C <- A + B
B <- A - C
A <- (5 + B) * 2
!
escreva (A, B, C)
78 TÉCNICAS DE PROGRAMAÇÃO
Fique ligado!
Para representar um algoritmo, são utilizadas diversas técnicas e cabe ao progra-
mador adotar aquela que melhor se adapte a suas necessidades (UNISAL, 2014).
As formas mais conhecidas de algoritmos são: a) narrativa: nessa representação
os algoritmos são expressos diretamente em linguagem natural (em português);
b) fluxograma: o algoritmo é representado em formas geométricas diferentes
que representam ações (instruções, comandos); c) pseudocódigo: é a forma de
representação de algoritmos, também conhecida como português estruturado
ou portugol, é bastante rica em detalhes e assemelha-se bastante à forma em
que os programas são escritos.
Operadores são sinais utilizados nos algoritmos para indicar a realização
de operações que podem ser de três categorias:
Operadores aritméticos: Servem para realizar operações com números
inteiros ou reais (exemplo: 5 + 2, 3 - 1, 3 / 2, 4 * 5).
Operadores relacionais: são operadores binários que devolvem os valores
lógicos (verdadeiro / falso). Estes valores são somente usados quando se
deseja efetuar comparações. Comparações só podem ser feitas entre obje-
tos de mesma natureza, isto é, variareis do mesmo tipo de dado (exemplo:
tendo duas variáveis numéricas (N1, N2), respectivamente, os valores 10
e 12, e é possível comparar se o valor de N1 é MAIOR que o valor de N2.
Operadores lógicos ou booleanos: são usados para combinar expressões
relacionais e resultam nos valores lógicos: verdadeiro ou falso. Exemplo:
tendo uma variável MÉDIA contendo o valor 8 e uma variável FALTAS
contendo o valor 12, é possível criar uma expressão para comparar se a
MÉDIA é maior ou igual a 7 e se as FALTAS menores que 12, para que o
aluno seja “APROVADO”.
Introdução a algoritmos 79
Esta é uma operação dita “destrutiva”, pois qualquer valor que a variável
possua antes do processamento da operação de atribuição se perde, sendo
substituído pelo novo valor.
Exemplo:
Algoritmo “atribuição”
var
IDADE: inteiro
NOME: caractere
SALÁRIO: real
início
NOME “Marcela Reis”
IDADE 25
SALÁRIO 2500,30
fimalgoritmo
Algoritmo “entrada_saida”
var
NOME: caractere
SALÁRIO: real
Início
// ----- SOLICITANDO OS DADOS DE ENTRADA -----
escreva(“Entre com seu nome:”)
leia(NOME)
80 TÉCNICAS DE PROGRAMAÇÃO
Linguagem de programação C#
C# (Sharp) é uma linguagem de programação 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 influências
de outras linguagens de programação, 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 aplicações executadas em prompt de comando
(console) e aplicações com interface gráfica para o sistema operacional Win-
dows e para ambiente web. O Visual Studio suporta diferentes linguagens de
programação como as linguagens C, C++,Visual Basic, C#, F#, além de outras,
e possui inúmeros recursos que facilitam o desenvolvimento de aplicações.
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 não estiver aberto no Editor de código, abra-o clicando
com o botão direito em cima do arquivo na Solution Explorer, em se-
guida, clique em Exibir código.
8. Substitua o conteúdo do Program.cs com o código a seguir.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Introdução a algoritmos 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();
}
}
}
Entrada e saída
Programas C# geralmente usam os ser-
viços de entrada/saída fornecidos pela bi-
blioteca de tempo de execução do .NET Para saber mais
Framework. A instrução Console.WriteLine
(“Hello World!”); usa o método WriteLine. C# e .Net guia do desenvolvedores,
Este é um dos métodos de saída da classe de Edwin Lima e Eugênio Reis. Rio de
Console na biblioteca de tempo de execu- Janeiro: Campus, 2002.
ção. Ele exibe sua string de parâmetro no
fluxo de saída padrão seguido por uma nova
linha. Outros métodos Console estão dis-
poníveis para operações de saída e entrada
diferente. Se incluir a diretiva using System, Para saber mais
no início do programa, é possível usar dire- Para obter mais informações sobre os
tamente as classes e métodos de System sem métodos de entrada/saída, 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.
82 TÉCNICAS DE PROGRAMAÇÃO
continuação
Exemplo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace exemploNímero{
class Program{
static void Main(string[] args){
int Número = 2;
int OutroNúmero = 2;
int MaisUmNúmero = Número + OutroNúmero;
Console.WriteLine(MaisUmNúmero);
}
}
}
Introdução a algoritmos 83
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
Exemplos:
84 TÉCNICAS DE PROGRAMAÇÃO
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
Exemplos:
Introdução a algoritmos 85
86 TÉCNICAS DE PROGRAMAÇÃO
Introdução a algoritmos 87
e er ncias
MSDN. Hello World: seu primeiro programa (guia de programação em C#). Disponível em:
<http://msdn.microsoft.com/pt-br/library/k1sx6ed2.aspx>. Acesso em: 31 mar. 2014.
UNISAL. Centro Universitário Salesiano de São Paulo. Algoritmos e fluxogramas: lógica
de programação. Disponível em: <http://galehp.com.br/doc/tecnologia/linguagem_de_
programacao_I/Logica%20_Total.pdf>. Acesso em: 31 mar. 2014.
Leitura complementar
GUIMARÃES, Â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 lógica para
desenvolvimento de programação de computadores. 21. ed. São Paulo: Érica, 2008.
SALIBA, Walter Luiz Caram. Técnicas de programação: uma abordagem estruturada. São
Paulo: Pearson Makron Books, 1992.
JABOUR. Filippe. Algoritmos computacionais com aplicações em C. Disponível em:
<http://www.jabour.com.br/algoritmosJabour.pdf>. Acesso em: 31 mar. 2014.
MOREIRA. Jander. Construção de algoritmos. Disponível 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.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Unidade 3
Estrutura de controle
Veronice de Freitas
Estrutura de controle 91
Introdução ao estudo
As estruturas de seleção, também chamadas de estruturas de decisão, executam
testes por meio dos operados relacionais e lógicos, a fim de decidir qual ação (ou
conjunto de ações) deve ser tomada. Essas estruturas são obtidas por meio dos cha-
mados comandos de desvio condicional para tomar decisões.
Até o momento, os algoritmos apresentados utilizavam apenas instruções pri-
mitivas de atribuição, de entrada e saída de dados. Quaisquer conjuntos de dados
fornecidos a este tipo de algoritmo são executados sempre na mesma sequência.
No entanto, na prática, muitas vezes é necessário executar ações diversas em
função dos dados fornecidos ao algoritmo. Além disso, pode ser necessário executar
um mesmo conjunto de instruções um número repetido de vezes. Em resumo, é neces-
sário controlar o fluxo de execução das instruções (a sequência em que as instruções
são executadas em um algoritmo) em função dos dados fornecidos como entrada.
A classificação das estruturas de decisão é realizada de acordo com o número de
condições que devem ser testadas para que se decida qual o caminho a ser seguido,
podendo ser de quatro tipos:
a) Estrutura de decisão simples (se ... então).
b) Estrutura de decisão composta (se ... então ... senão).
c) Estrutura de decisão encadeada (se... então ... senão) com outros testes con-
dicionais encadeados.
d) Estrutura de decisão múltipla do tipo escolha (escolha ... caso ... senão).
92 E
Pseudocódigo Fluxograma
se <condição> então
<bloco de comandos> comando
fimse
F V
condição
Bloco verdade
Comando
X <- 20
Y <- 10
Se (X > Y) então
escreva(“O valor de X é maior que o valor de Y”)
fimse
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Estrutura de controle 93
Algoritmo “exemplo02”
Var
idade: inteiro
início
//-------------- ENTRADA ---------------
escreva (“digite a sua idade”)
leia(idade)
fimalgoritmo
Atividades de aprendizagem
Indique a saída dos trechos a seguir:
Pseudocódigo Simulação
escreva (X)
b) X <- 10
Y <- 15 Memória Vídeo
se ((X <= 10) e (Y > 13)) então
X <- 3
fimse
escreva (X)
c) X <- 10
Y <- 15 Memória Vídeo
se ((X < 10) e (Y > 13)) então
X <- 3
fimse
escreva (X)
94 E
Sintaxe:
Pseudocódigo Fluxograma
se <condição> então
<bloco de comandos verdade> comando
senão
<bloco de comandos falsidade>
fimse F V
condição
Comando
algoritmo “exemplo01”
var
idade: inteiro
início
//-------------- ENTRADA ---------------
escreva (“digite a sua idade”)
leia(idade)
fimalgoritmo
Estrutura de controle 95
Algoritmo “exemplo02”
var
n1, n2, n3, n4, media : real
início
//-------------- ENTRADA ---------------
escreva(“Digite o valor da primeira nota de 1 a 10: ”)
leia( n1 )
fimalgoritmo
Atividades de aprendizagem
1. Indique a saída dos trechos abaixo, considerando
A <- 2 B <- 3 C <- 5 D <- 9
Pseudocódigo Simulação
a) se (não (D > 5)) então
X <- (A + B) * D Memória Vídeo
senão
X <- (A – B) / C
fimse
escreva (X)
b) se ((A > 2) e (B < 7)) então
X <- (A + 2) * (B – 2) Memória Vídeo
senão
X <- (A + B) / D * (C + D)
fimse
escreva(X)
c) se ((A = 2) ou (B < 7)) então
X <- (A + 2) * (B – 2) Memória Vídeo
senão
X <- (A + B) / D * (C + D)
fimse
escreva(X)
continua
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
96 E
continuação
d) se ((A> 2)ou não (B < 7))então
X <- A + B – 2) Memória Vídeo
senão
X <- A – B
Fimse
escreva(X)
e) se (nao (A > 2) ou não (B <7)) então
X <- A + B Memória Vídeo
senão
X <- A / B
Fimse
escreva (X)
escreva (X)
escreva (X)
escreva (X)
início
A <- 1
B <- 2
se A > B então
A <- 5
senão
A <-10
fimse
fimalgoritmo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Estrutura de controle 97
algoritmo “calcularMédia”
var N1, N2, Média : real Memória Vídeo
início
// ----ENTRADA ----
escreva(“Nota 1:”)
leia(N1)
escreva(“Nota 2:”)
leia(N2)
// ----PROCESSAMENTO ----
Média <- (N1 + N2)/2
// ----SAÍDA ----
se média>=6 então
escreva(“aprovado”)
senão
escreva(“reprovado”)
fimse
fimalgoritmo
98 E
Pseudocódigo
se (<condição_1>) então
se (<condição_2>) então
primeiro bloco de instrução
senão
segundo bloco de instrução
fimse
senao
se (<condição_3>) então
se (<condição_4>) então
terceiro bloco de instrução
fimse
instrução n
senão
se (<condição_5>) então
quarto bloco de instrução
senão
quinto bloco de instrução
fimse
fimse
fimse
algoritmo "Exemplo01"
var
número: inteiro
início
Leia (número)
Se numero = 0 então
escreva ("É zero")
senão
Se número > 0 então
escreva ("É positivo")
senão
escreva ("É negativo")
fimse
fimse
fimalgoritmo
Estrutura de controle 99
algoritmo “SaldoMédio”
Var
Salmédio, Vlrcred: real
Nome : caracter
início
escreva(‘Entre com nome do cliente:’)
leia(Nome)
escreva(‘Entre com saldo médio:’)
leia (Salmédio)
Atividades de aprendizagem
1. Quais os valores das variáveis A, B, C ao executar o algoritmo a seguir:
Pseudocódigo Simulação
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
início
d) A = 10, B=5, C=20
A <- 5
B <- 20
C <- 10 Memória Vídeo
Se (A < B) e (B < C) então
C <- A
Senão
se (B <> C) então
B <- C
Senão
A <- B
Fimse
Fimse
Fimalgoritmo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
100 E
Memória Vídeo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Memória Vídeo
Memória Vídeo
Memória Vídeo
Pseudocódigo Fluxograma
início escolha
inicio escolha
escolha <opção>
Verdadeira
caso <opção 1> opcao 1 Comandos 1
<comandos1> Falsa
<comandos2>
Falsa
caso <opção n>
Verdadeira
opcao n Comandos 2
<comandosn>
Falsa
outrocaso
Comandos
<comandos_padrão> Padrão
fimescolha
inicio
Observações:
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 condição não atender a nenhum dos testes do
Caso.
algoritmo “ExemploMenu”
var
opção:inteiro
início
escreva(“1- Cadastrar”)
escreva(“2- Alterar”)
escreva(“3- Excluir”)
escreva(“4- Imprimir”)
escreva(“5 – 6 – 7 – Em implantação – aguarde !!”)
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
escreva(“Escolha a opção: “)
Leia(opção)
Escolha opção
caso 1
escreva(“Você escolheu a primeira opção!”)
caso 2
escreva(“Você escolheu a segunda opção!”)
Caso 3
escreva(“Você escolheu a terceira opção!”)
caso 4
escreva(“Você escolheu a quarta opção!”)
caso 5,6,7
escreva(“Você escolheu uma opção que não estava disponível”)
outrocaso
escreva(“Opção inválida”)
fimescolha
fimalgoritmo
Exemplo 2: Este algoritmo funciona como uma calculadora simples, em que algu-
mas operações aritméticas podem ser executadas sobre dois números, dependendo
da operação selecionada pelo usuário (adição, subtração, multiplicação, ou divisão).
Caso o usuário tenha digitado um caractere diferente dos tratados pelo algoritmo, o
valor falso será colocado na variável verifica (pois nenhum caso vai corresponder a
expressão e a instrução dentro do senão será executada).
Algoritmo “Calculadora”
var
num1, num2, result : real
operação : caractere
verifica: lógico
início
escreva(“Digite o primeiro número real: ”)
leia(num1)
escolha operação
caso '+'
resultado <- num1 + num2
caso '-'
resultado <- num1 – num2
caso '*'
resultado <- num1 * num2
caso '/'
resultado <- num1 / num2
outrocaso
verifica <- .FALSO.
fimescolha
se verifica então
escreva (“O resultado da operação foi ” + resultado)
senao
escreva (Operação invalida!”)
fimse
fimalgoritmo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Atividades de aprendizagem
1. Escreva um algoritmo que receba o código correspondente ao cargo de
um funcionário de uma escola e seu salário atual e mostre o valor do novo
salário, com aumento, conforme tabela a seguir.
Código do Cargo Cargo Aumento
1 Secretário 45%
2 Professor 35%
3 Tesoureiro 25%
4 Coordenador 15%
5 Diretor Não tem aumento
Seção 3 a oe ua to hile
A estrutura de repetição (enquanto) é utilizada quando um conjunto de comandos
deve ser executado repetidamente, enquanto uma determinada condição (expressão
lógica) permanecer verdadeira. Dependendo do resultado do teste da condição, o con-
junto de comandos poderá não ser executado nem uma vez (se for falsa no primeiro
teste), ou será executado várias vezes (enquanto for verdadeira). Sua sintaxe geral é:
Características:
Testa a condição antes da execução do bloco.
Enquanto a condição for verdadeira, o bloco de comandos é executado.
Assim, o bloco de comandos pode ser executado 0 ou mais vezes.
Finaliza a execução do bloco quando a condição se tornar falsa.
Obs: um contador é uma variável (qualquer) que recebe ela mesma mais um va-
lor (uma constante), no caso do exemplo a seguir, a variável 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
Exemplo — algoritmo:
...
cont <- 0 // inicializa o contador
enquanto (CONT <= 10) faca // início da estrutura de repetição
...
cont <- cont + 1 // contador
...
Fimenquanto // final da estrutura de repetição
Exemplo:
SO A <- SO A + N
Obs: um acumulador (somador) é uma variável (qualquer) que recebe ela mesma
mais uma outra variável, no caso do exemplo anterior, a variável SOMA está rece-
bendo o valor dela mesma mais o valor da variável NUM. A variável NUM representa
o valor a ser somado, acumulado na variável SOMA.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Exemplo — algoritmo:
// -- terceira repetição --
3 <= 5 (VERDADEIRO)
SOMA 15 + 20 (35)
CONT 3 + 1 (4)
// -- quarta repetição --
4 <= 5 (VERDADEIRO)
SOMA 35 + 30 (65)
CONT 4 + 1 (5)
// -- quinta repetição --
5 <= 5 (VERDADEIRO)
SOMA 65 + 10 (75)
CONT 5 + 1 (6)
Observação: a variável de controle nessa versão é por meio da variável RESP, que
contém um valor inicial “S” para tornar a condição do ENQUANTO verdadeira
para entrar no laço) o dentro da estrutura de repetição é solicitado para o usuário
se deseja ler mais um peso (caso seja “N” irá sair da estrutura de repetição) e
imprimir a média dos pesos do total de repetição armazenada na variável CONT).
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Algoritmo “Exemplo2”
var
PESO, SOMA : real
CONT : inteiro
RESP : caracter
início
SOMA <- 0
CONT <- 0
RESP <- “S”
algoritmo "exemplo_temperatura"
var
CONT, TOTAL_N, TOTAL_P: inteiro
TEMPERATURA, SOMA_P: real
início
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
algoritmo “ExemploMédia”
var
nome: caractere
nota_1, nota_2, média, SomaG, MédiaG: real
contador: inteiro
início
médiaG <- 0 // inicializa a variável MédiaG
contador <- 1 // inicializa o contador
escreva(“Segunda nota: “)
leia(nota_2)
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
fimse
fimenquanto
Atividades de aprendizagem
1. Qual a função do algoritmo abaixo?
Pseudocódigo Simulação
Algoritmo “exercício02”
Var Memória Vídeo
NUM, SOMA, I : inteiro
início
SOMA <- 0
I <- 1
enquanto i <= 10 faca
leia(num)
escreva (SOMA)
fimalgoritmo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
escreva (fat)
fimalgoritmo
REPITA
Características:
Testa a condição após a execução do bloco.
A sequência ação 1; ação 2;...; ação n, será realizada uma vez, sendo em
seguida verificada a condição associada à cláusula ATÉ. Se a condição for
falsa, o processo se repete, reiniciando pela ação 1. Se a condição for
verdadeira, a repetição é cancelada;
Repete as instruções enquanto a condição for falsa.
Para a execução do bloco quando a condição se tornar verdadeira
(denominada de condição de parada). o bloco de comandos é executado
pelo menos uma vez.
. em lo seudoc di o
1. Faça um algoritmo com números (positivos) até que o usuário informe o valor
o valor ZERO e obtenha o MAIOR valor.
algoritmo "maiorValor"
var
maior: inteiro
N: inteiro
RESP: caracter
início
MAIOR <- 0 // valor inicial da variável MAIOR
repita
//validação para entrar com nº maior ou igual a zero
repita
escreva("Entre com um número: ")
leia(N)
ate N >= 0
Atividades de aprendizagem
1. Analise e teste o código de programa abaixo e identifique o problema desse
código (faça a correção do algoritmo).
algoritmo "exercício_01"
var
contador: inteiro
início
repita
escreva("Contador: ", contador)
ate contador > 10
fimalgoritmo
somador <- 0
repita
escreva("Digite um número qualquer ou zero para sair: ")
leia(opção)
somador <- somador + opção
escreva("Somador: ", somador)
ate opção = 0
fimalgoritmo
escolha opção
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 (opção = "s") ou (opção = "S")
fimalgoritmo
escreva(“Digite um valor”)
leia (x)
Se (x > 0) então
Escreva (“X > 0”)
Senão
Se (x < 0) Então
Escreva (“X < 0”)
ate (x = 0)
Pseudocódigo Simulação
Algoritmo “Conta_Adultos”
Var
IDADE, QTDE, X : Inteiro Memória Vídeo
QTDE <- 0 Idade? 25
início 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 Então 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 laço)
Fimalgoritmo
Pseudocódigo
Algoritmo “tabuada”
Var
I, NUM : Inteiro
início
escreva(“Entre com o número da tabuada? “)
leia(NUM)
fimalgoritmo
Simulação (TESTE DE MESA)
Memória Vídeo
NUM <- 5 Entre com o número 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
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Pseudocódigo
Algoritmo “fatorial”
Var
I, FAT, NUM : Inteiro
início
escreva(“Entre com o número para calcular o fatorial? “)
leia(NUM)
FAT <- 1
para I de 1 ate NUM passo 1 faca
FAT <- FAT * NUM
Fimpara
Memória Vídeo
NUM <- 6 Entre com o número 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
algoritmo "Temperatura_v2"
var
CONT, CONT_P, CONT_N: inteiro
TEMPERATURA, SOMA_P, SOMA_G: real
Início
// ------ inicializa as variáveis ------------
CONT_N <- 0 // contar as temperaturas negativas
CONT_P <- 0 // contar as temperaturas positivas
SOMA_P <- 0 // somar as temperaturas positivas para
// calcular a média das temperaturas positivas
Atividades de aprendizagem
1. Qual a função do algoritmo baixo?
Pseudocódigo Simulação
algoritmo “exercício01”
Var
SOMA, IMPAR: inteiro Memória Vídeo
início
para IMPAR de 1 ate 18 passo 2 faca
SOMA <- SOMA + IMPAR
Fimpara
//Calculando a área
Área <- Base * altura
Algoritmo “exercício_03”
var
L: Inteiro
NOME: caracter
início
escreva(“entre com um nome :”)
leia(NOME)
FimAlgoritmo
Fique ligado!
Estruturas utilizadas para reger o fluxo de execução de um algoritmo: Estrutura
Sequencial; Estrutura de Seleção; Estrutura de Repetição. A Tabela 3.1 representa
os três tipos de estrutura.
Tabela 3.1 Tipos de estrutura
ESTRUTURA EXEMPLO
Estrutura sequencial: Algoritmo “média_aluno”
Cada comando é executado varnota1,nota2,nota3,media: real
sequencialmente até término do início
algoritmo. leia (nota1,nota2,nota3)
média (nota1+nota2+nota3)/3
fimalgoritmo
Estrutura Condicional: algoritmo “média_aluno”
var
Permite a seleção de um grupo nota1,nota2,nota3,média: real
de ações (bloco) a ser executado início
quando determinadas condições leia (nota1,nota2,nota3)
forem satisfeitas. média (nota1+nota2+nota3)/3
se média >= 7 então
escreva (“Aprovado”)
senão
escreva (“Reprovado”)
fimse
fimalgoritmo
Estrutura de Repetição: Algoritmo “média_turma”
var
Execução de uma sequencia de
nota1,nota2,nota3,média,média_t: real
ações repetidas vezes. cont: inteiro
início
média 0
média_t 0
média (nota1+nota2+nota3)/3
se média >= 7 então
escreva (“Aprovado”)
senão
escreva (“Reprovado”)
fimse
fimpara
Fimalgoritmo
para o aluno que não esteja no intervalo permitido (de 0 até 10). Nesse caso,
seria necessário validar o valor informado para a nota usando outra estrutura
de repetição interna.
Existem situações em que os caminhos para a tomada de uma decisão aca-
bam formando uma espécie de árvore com diversas ramificações, em que cada
caminho é um conjunto de ações. Nesses casos, podemos recorrer à utilização
de várias estruturas se-então-senão 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
Estrutura de seleção em C#
Estruturas condicionais são comuns e necessárias em todos os programas.
Em C# também é possível utilizar estrutura condicional simples (if), composta
(if/else), estrutura condicional encadeada e também uso da estrutura de múltipla
escolha (switch). Essa seção aborda a sintaxe da declaração if...else e também
explora outras construções 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 (<condição>) então if(<condição>){
... ...
senão //Opcional }
... else //Opcional
fimse {
...
}
namespace Exemplo_if_01{
class Program{
static void Main(string[] args){
int A = 5;
int B = 2;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Exemplo_if_02{
class Program{
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# também existe o “if-Inline” que é composto por três operandos se-
parados pelos sinais ? e : e tem o objetivo de atribuir o valor a uma variável de
acordo com o resultado de um teste lógico.
Sintaxe:
teste lógico ? valor se verdadeiro : valor se falso;
Onde:
Teste lógico é qualquer valor ou expressão, que pode ser verdadeiro ou falso.
Valor se verdadeiro é atribuído ao valor true;
Valor se falso é atribuído ao valor false.
Exemplo 1a: exemplo usando a condicional composta.
static void Main(string[] args){
var idade = 26;
Switch/case
A instrução switch permite a execução condicional de instruções de acordo
com os valores de um argumento teste, o qual pode ser uma variável, uma ex-
pressão numérica, uma string ou funções.
Sintaxe:
switch(VARIAVEL){
case VALOR:
//Faz algo se VARIAVEL for igual ao VALOR
break;
default: //(OPCIONAL)
//Faz algo se VARIAVEl não for igual a nenhum CASE
break;
}
VisuALG C#
var int x = 10;
x: inteiro switch(x) {
início 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
Exemplo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Exemplo_switch{
class Program{
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(“Opção inválida”);
break;
}
}
}
}
Estrutura de repetição C#
As estruturas de repetição são muito úteis e empregadas quando se deseja
executar uma, ou um bloco, de instruções diversas vezes.
Estruturas de repetição do C#:
a) while
b) do... while
c) for
d) foreach
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
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 variável chamada contador com seu valor ini-
cial 0. Na CONDIÇÃO do bloco while é testado se a variável contador é menor
que 5, caso verdadeiro, é apresentado na tela o nome “Eduardo dos Santos”
e incrementado em 1 na variável contador. Esse processo se repete até que a
CONDIÇÃO do while seja falsa.
Estrutura de repetição: do while
O comando do/while tem o mesmo funcionamento que o comando while,
tendo como diferença que a condição da estrutura é testada no final e não no
início como acontece no while.
No while, existe a possibilidade do código não ser executado nenhuma vez,
pois está vinculado ao resultado da condição que é testada no início do bloco.
No do/while, o código escrito dentro da estrutura será executado pelo menos
uma vez, isso porque a verificação é realizada apenas no final da estrutura.
Sintaxe:
do
{
// Código
}
while (CONDIÇÃO);
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Exemplo:
Código Teste de Mesa
using System;
class ExemploWhile{ Memória Vídeo
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)
Onde:
int i = 0: (inicialização) o é declarada uma variável do tipo inteiro (int), onde
também é definido o seu valor inicial, que nesse exemplo foi o valor 0 (zero).
i <= 5: (condição) o é definido a condição.
i++: (incremento) o um incremento nada mais é do que adicionar 1 a uma
variável, ou seja, se uma variável 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);
}
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Exemplo 2: decremento de 2
Estrutura: foreach
A estrutura foreach é utilizada para percorrer coleções ou arrays. Sua estru-
tura é formada pelo tipo de dado, o nome da variável e a lista a ser percorrida.
O exemplo a seguir faz uso de array, que será o assunto da próxima unidade.
Sintaxe:
foreach(<tipo de dado> <nome> in <lista>)
{
//Código
}
Exemplo:
class Program{
static void Main(string[] args){
// array de strings = declaração e inicialização do array
string[] nomes = { "Maria", "Ana", "Rita", "Pedro","Carlos"};
Visualg C#
Repita do
// bloco de comandos // bloco de comandos
Ate condição (verdadeira) while condição (verdadeira)
Repete o bloco de comandos até que a Repete o bloco de comandos enquanto
condição seja verdadeira. a condição for verdadeira.
14. Faça um programa para ler o código, número de horas trabalhadas e nú-
mero de dependentes de cada funcionário. Após a leitura, escreva qual o
código, os valores descontados para cada tipo de imposto e finalmente o
salário líquido de cada um dos funcionários.
Tem-se um conjunto de dados contendo a altura e o sexo (M ou F) de 15
pessoas. Faça um Programa que calcule e escreva:
A maior e a menor altura do grupo;
A média de altura das mulheres;
Número de homens
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Referência
CACHO, Nélio Alessandro Azevedo; COELHO, Keivilany Janielle de Lima. Lógica de
programação e algoritmos. Disponível em: <http://www.metropoledigital.ufrn.br/aulas/
disciplinas/logica/aula_10.html>. Acesso em: 15 jul. 2013.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Unidade 4
Estrutura de
dados homogênea
e heterogênea
Veronice de Freitas
nr a e
As estruturas de dados homogêneas permitem agrupar diversas informações dentro
de uma mesma variável. Este agrupamento ocorre obedecendo sempre ao mesmo tipo
de dado, e por esta razão que estas estruturas são chamadas homogêneas.
A utilização deste tipo de estrutura de dados recebe diversos nomes, como: variá-
veis indexadas, variáveis compostas, arranjos, vetores, matrizes, tabelas em memória
ou arrays. Os nomes mais usados e que utilizaremos para estruturas homogêneas
são: matrizes (genérico) e vetores (matriz de uma linha e várias colunas). Quando
possuem um único índice, é chamada de vetor, tendo dois ou mais, chama-se matriz.
A estrutura contém:
O registro do funcionário contém vários tipos de dados: NOME, DIA, MÊS e ANO
DE NASCIMENTO, DEPARTAMENTO, SALÁRIO.
Exemplo – Registro:
REG_FUNCIONARIO = registro
NOME :caractere
DATA_NASC :dt
DEPARTAMENTO :caractere
SALÁRIO:real
Fim
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 vários registros (por exemplo, várias Fichas
Cadastro), utilizaremos vetores (conjuntos) de registros.
Var
// CADASTRO SERÁ UM VETOR – REGISTRO REG_FUNCIONÁRIO
CADASTRO : conjunto [1..20] de REGFUNCIONÁRIO
DATA_NASC
NOME DIA MÊS ANO DEPARTAMENTO SALÁRIO
1
Seção 1 a ri e e a i en
e re
Vetor também é conhecido como variável composta unidimensional. Isto quer
dizer que se trata de um conjunto de variáveis de mesmo tipo, que possuem o mesmo
identificador (nome) e são alocadas sequencialmente na memória. Como as variáveis
têm o mesmo nome, o que as distingue é um índice que referencia sua localização
dentro da estrutura.
e ara e a ri ni i enci na
A sintaxe do comando de definição de vetores é:
Exemplo:
Do mesmo modo que acontece com variáveis simples, também é possível operar
com variáveis indexadas (matrizes). O acesso individual a cada componente de um
vetor é realizado pela especificação de sua posição na mesma por meio do seu índice.
Na declaração VET: vetor [1.10] de inteiros, foi definido uma variável VET capaz de
armazenar 10 números inteiros. Para acessar um elemento deste vetor deve-se fornecer
o nome do mesmo e o índice do componente desejado do vetor (um número de 1 a
10). O exemplo a seguir apresenta o vetor VET com a representação 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 décimo elemento do vetor.
ri i e a a ri i e r
No caso de vetores (variáveis indexadas), além do nome da variável deve-se neces-
sariamente fornecer também o índice do componente do vetor onde será armazenado
o resultado da avaliação da expressão.
Exemplo:
VET[1] <- 10
VET[2] <- 80
VET[5] <- 20
VET[8]<- 30
VET[10]<- 40
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.
ei ra e a e a a ri i e r
A leitura de um vetor é realizada passo a passo, um de seus componentes por vez,
usando a mesma sintaxe da instrução primitiva da entrada de dados, onde, além do
nome da variável, deve ser explicitada a posição do componente lido:
algoritmo "exemplo_leitura1"
var
números : vetor [1..5] de inteiro
i : inteiro
início
para i <- 1 ate 5 faca
escreval ("Insira o ", i, "º elemento do vetor: ")
leia (números[i])
fimpara
fimalgoritmo
Simulação:
MEMÓRIA TELA
I=1 Insira o 1º elemento do vetor: 35
números 35
1 2 3 4 5
I=2 Insira o 2º elemento do vetor: 40
números 35 40
1 2 3 4 5
I=3 Insira o 3º elemento do vetor: 25
números 35 40 25
1 2 3 4 5
I=4 Insira o 4º elemento do vetor: 8
números 35 40 25 8
1 2 3 4 5
I=5 Insira o 5º elemento do vetor: 35
números 35 40 25 8 35
1 2 3 4 5
cri a e a e a a ri i e r
A escrita de um vetor obedece à mesma sintaxe da instrução primitiva de saída
de dados; vale lembrar que, além do nome do vetor, deve-se também especificar o
índice e o componente a ser escrito.
algoritmo "exemplo_leitura_de_vetor"
var
números : vetor [1..10] de inteiro
i : inteiro
início
// -------------- LEITURA ------------------
para i <- 1 ate 10 faca
escreva("Insira o ", i, "elemento do vetor: ")
leia (números[i])
fimpara
fimalgoritmo
e ea ri
Exemplo 1: leitura de um vetor de 7 posições.
Algoritmo “Vetor”
Var
V : vetor [1..7] de inteiro
CONT : inteiro
início
Para CONT de 1 ate 7 passo 1 faca
Escreva(“Elemento”, Cont, “:”)
Leia(V[CONT])
Fimpara
fimalgoritmo
Simulação:
MEMÓRIA VÍDEO
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
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
algoritmo "exemplo_leitura2"
var
números : vetor [1..5] de inteiro
soma, i : inteiro
início
soma <- 0
para i <- 1 ate 5 passo 1 faca
escreva ("Insira o ", i, "elemento do vetor: ")
leia (números[i])
soma <- soma + números[i]
fimpara
Simulação:
MEMÓRIA VÍDEO
soma = 0
A soma dos
elementos é: 138
Algoritmo “MédiaTurma”
var
médias: vetor[1..10] de real
i: inteiro;
soma, média_turma: real
Inicio
soma <- 0
média_turma <- 0
// --------- Entrada de dados no vetor -----
para i de 1 ate 5 passo 1 faca
Simulação:
Memória Vídeo
Soma=0
média_turma = 0
I = 1 médias 9.5 Informe a
Soma=0 + 9.5(9.5) 1 2 3 4 5 média do
média_turma = 0 aluno 1: 9.5
I = 2 médias 9.5 8.3 Informe a
Soma=9.5 + 8.3(17.8) 1 2 3 4 5 média do
média_turma = 0 aluno 2: 8.3
I = 3 médias 9.5 8.3 9.9 Informe a
Soma=17.8 + 9.9(27.7) 1 2 3 4 5 média do
média_turma = 0 aluno 3: 9.9
I = 4 médias 9.5 8.3 9.9 6.0 Informe a
Soma=27.7 + 6.0(33.7) 1 2 3 4 5 média do
média_turma = 0 aluno 4: 6.0
I = 5 médias 9.5 8.3 9.9 6.0 7.1 Informe a
Soma=33.7 + 7.1(40.8) 1 2 3 4 5 média do
média_turma = 0 aluno 4: 7.1
I = 5 (sai do laço) A média da
Soma= 40.8 turma é: 8.16
média_turma=40.8/5
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Atividades de aprendizagem
1. Qual o resultado da MEMÓRIA e do VÍDEO ao executar o algoritmo abaixo?
Informe os valores: 10,5, 8, 20, 35 para efetuar a simulação (complete o teste).
Pseudocódigo Teste de mesa
algoritmo "EXEMPLO01"
var Obs: complete o teste informando os
NÚMEROS: vetor [1..5] de inteiro demais valores.
I : inteiro
Início Memória Vídeo
para I de 1 ate 5 faca I 1
leia(NÚMEROS[i]) ? 10
NÚMEROS[1] 10
fimpara
fimalgoritmo
fimalgoritmo
escreva(media) LACUNA
cont <- 0
Para i de 1 ate 5 passo 1 faca
se (n[i] > média) então
cont <- cont + 1
fimse
fimpara
6. Altere o programa a seguir para que o mesmo faça a soma dos 10 números
lidos e ao final apresente a soma obtida.
Algoritmo "VetoresSoma"
Var
números: vetor[1..10] de inteiro
I: inteiro
Início
// ------ LEITURA 10 NÚMEROS -------------
para I de 1 ate 10 passo 1 faca
escreva("Valor: ")
leia(números[I])
fimpara
fimalgoritmo
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
Pseudocódigo Simulação
Algoritmo “teste“
Var Memória Vídeo
L,C: inteiro L C
Início 1 1 1 - 1
// --------- IMPRESSÃO ----------- 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 vídeo podem representar os índices
5(SAI)
da matriz 4 x 4 exemplificada abaixo:
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:
2EVVLQWD[HXVDGDQRYLVXDOJ
MAT1: vetor [1:3 , 1:3] de inteiro
2EVVLQWD[HXVDGDQRYLVXDOJ
MAT2: vetor [1:4 , 1:5] de inteiro
Algoritmo “exemplo_atribuiçãoo”
var
mat : vetor [1..2,1..3] de real
média, soma : real
início Representação da matriz
início
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
fimalgoritmo
Sintaxe:
Algoritmo “leitura_matriz”
var
mat : vetor[1..2, 1..3] de inteiro
i, j : inteiro
início
// ------ 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
fimpara
fimpara
fimalgoritmo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Memória Vídeo
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 - laço)
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 - laço)
3(sai -
laço)
Algoritmo “leitura_escrita_matriz”
var
mat : vetor[1..2, 1..3] de inteiro
i, j : inteiro
início
// ------ 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
// ------ impressão 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]) // impressão
fimpara
fimpara
fimalgoritmo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Algoritmo “exemplo”
var
MatA: vetor[1..2,1..2] de inteiro
MatB: vetor[1..3,1..2] de inteiro
I,J: inteiro
Início
// ------- 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
// ----impressão 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
// ----impressão 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. .1 E emplos matrizes
Exemplo 1: o algoritmo lê uma matriz 3 X 3 do tipo inteiro e imprime somente
os números ímpares.
1 2 3 Resultado
1 3 8 5 3, 5, 9, 3, 5, 3
2 9 2 3
3 5 3 4
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Algoritmo "matriz"
var Memória Vídeo
MAT: vetor [1..3, 1..3] de inteiro Leitura da matriz ?3
I, J: integer I 1 ?8
início 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 laço impressão
// --IMPRESSÃO ---- 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 divisão para linha 2 3
//de cada valor da matriz por 2 é I 2 5
//igual a 1 (se for o número é J 1 8
//impar) MAT[2,1] 9 3
... 5
se MAT[I,J] MOD 2 = 1 então
3
escreva(MAT[I, J]) // repete o processo
fimse para linha 3
I 3
fimpara J 1
fimpara MAT[3,1] 5
fimalgoritmo ...
1 2 3 Resultado
1 3 8 5 3 2 4
2 9 2 3
3 5 3 4
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
fimalgoritmo J 5
S 17 + 7 (24)
J 6 (sai do laço de J)
para somar a segunda
linha.
Exemplo 4: no exemplo a seguir é utilizado uma matriz de três linhas e duas colu-
nas para armazenar os nomes e endereços de três pessoas (os nomes são armazenados
na primeira coluna da matriz e os endereços na segunda coluna).
Algoritmo “exemplo02”
Var
Dados: vetor[1..3, 1..2] de caractere
I : inteiro
Início
// ---- leitura da matriz dados ----
Para I de 1 ate 3 passo 1 faca
fimpara
Escreva(“Dados da “, I, ”ª pessoa”)
Escreva(“Nome: “, Dados[I,1])
Escreva(“Endereço: “, 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
Algoritmo "MatrizSoma"
Var
MAT : vetor[1..3, 1..3] de inteiro
L,C: inteiro
Início
// --------- LEITURA -----------
para L de 1 ate 3 passo 1 faca
para C de 1 ate 3 passo 1 faca
escreval(“digite uma valor”)
leia(MAT[L,C])
fimpara
fimpara
fimalgoritmo
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
using System;
class Teste
{
public static void Main()
{
string[] vetNome = New string[5];
//atribuição
vetNome[0] = “Maria”;
vetNome[1] = “Pedro”;
vetNome[2] = “Marcio”;
vetNome[3] = “Carlos”;
vetNome[4] = “Roberto”;
Arrays podem ter mais de uma dimensão. Por exemplo, a declaração a seguir cria
uma matriz bidimensional de cinco linhas e cinco colunas:
using System;
class Teste{
public static void Main(){
Além dos arrays multidimensionais é possível criar arrays de arrays. Trata-se de arrays
com múltiplas dimensões de tamanho variável.
Exemplo:
de alunos dos quais necessita armazenar o código. É possível usar uma matriz on-
de as linhas representariam a turma e as colunas representariam os alunos, porém,
nesse caso estaria utilizando um número fixo de alunos, igual para todas as turmas, o
que não atende a nossa necessidade. Aqui entram os jagged arrays, podemos ter um
array que comporte a quantidade de turmas (um número conhecido) e cada elemento
é um vetor, cujo comprimento varia e podemos definir individualmente. Por exemplo:
class TestArraysClass
{
static void Main()
{
// Declarar uma matriz unidimensional
int[] array1 = new int[5];
// sintaxe alternative
int[] array3 = { 1, 2, 3, 4, 5, 6 };
Quando se faz uso de array, é necessário saber seu tamanho, copiar parte dos
elementos, classificar seus valores. Diante dessa necessidade, as linguagens de
programação dispõem de instruções para auxiliar na programação. Seguem alguns
métodos oferecidos pela classe System.Array (MEDEIROS, 2013):
GetLength: retorna o número de elementos da dimensão específica 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 número de dimensões do array.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Outros exemplos:
Exemplo 1: o programa efetua a leitura de 10 salários, calcula a média e imprime
os salários que estão abaixo da média.
int[] salários = new int[10];
decimal soma = 0, meédia = 0;
Salários[i] = int.Parse(Console.ReadLine());
soma += salários[i];
}
Exemplo 4: foreach().
static void Main(string[] args){
string[] nome;
int[] idade = new int[10];
char[] sexo = new char[10];
Essa seção teve como objetivo fazer uma abordagem geral sobre arrays usando
C#, finalizando com alguns exemplos práticos de utilização.
Atividades de aprendizagem
1. Dados os seguintes campos de um registro: nome, telefone, dia e mês de
aniversário, desenvolver um algoritmo que mostre em um dado mês do
ano, quem são as pessoas que fazem aniversário, exibir também o dia.
Considere um conjunto de 40 pessoas.
2. Uma pessoa cadastrou um conjunto de 15 registros contendo o nome da
loja, telefone e preço de um eletrodoméstico. Desenvolver um algoritmo
que permita exibir qual foi a média dos preços cadastrados e uma relação
contendo o nome e o telefone das lojas cujo preço estava abaixo da média.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
struct{
int código;
string nome;
string endereço;
string telefone;
float salário;
int idade;
}vendedor;
Informações do registro
vendedor Nome do registro
Campos do registro
os campos do registro, linha após linha. Cada linha deve conter o tipo e o identifica-
dor do campo do registro. Finalizando, então, as declarações dos campos do registro
com o símbolo “}” e, logo depois, é informado o nome do identificador. A variável
do tipo registro com identificador vendedor declarada acima contém seis campos.
É possível declarar outras variáveis do tipo registro com os mesmos campos da
variável vendedor da seguinte forma:
struct{
int código; Outras variáveis do
string nome; tipo registro
string endereço;
string telefone;
float salário;
int idade;
}vendedor, professor, medico;
vendedor. código = 1;
vendedor.nome=“José”,
vendedor. endereço=“Rua Pará, 33”, Exemplo de atribuição no
vendedor.telefone=“(43)33253345”, registro - vendedor
vendedor. salário=2500;
vendedor.idade=35;
struct { struct {
int código; int código; Os dois registros
string nome; string nome;
char tipo; string endereço; possuem campos código
int qtdmin; int nundependentes; e nome
float preco; float salário;
}produto; }funcionário;
produto.código=55;
funcionário.código = 323; Exemplo de atribuição de informação nos
produto.nome = “Arroz”; campos do registro coleta e registro
funcionário.nome = “Carlos”; certidão
struct {
int código;
string nome; Vetor produto (10 compartimentos de
char tipo; memória com a estrutura do registro)
int qtdmin;
float preço;
}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);
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Exemplo 2: algoritmo.
tipo
RegEnder = registro
Rua : caracter[35];
Número : inteiro;
fim;
RegConta = registro
NumCliente :integer;
NomeCliente :caracter[35];
Endereço :RegEnder;
TipoCliente :caracter[1];
{1 – especial, 2 – normal}
SaldoCliente:real;
fim;
var
Cadastro : conjunto [1..20] de RegConta;
Cont :Inteiro;
Cadastro[Cont].NumCliente Cont;
Escreva('Número:', Cadastro[cont].NumCliente);
Escreva('Nome:');
Leia(Cadastro[Cont].Nomecliente);
Escreva('Rua:');
Leia(Cadastro[Cont].Endereçoo.rua);
Escreva('Número:');
Leia(Cadastro[Cont].Endereco.Número);
Repita
Escreva('Tipo cliente:');
Leia(Cadastro[Cont].Tipocliente);
Escreva('Saldo:');
Leia(Cadastro[Cont].SaldoCliente);
fim para;
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Exemplo 3:
#include <stdio.h>
#include <conio.h>
#include <stdio.h>
#include <conio.h>
typedef struct{
char NOME[30];
float NOTA[4];
} CAD_ALUNO;
#include <stdio.h>
#include <conio.h>
média[I] = soma / 4;
}
getch();
}// final - main()
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Atividades de aprendizagem
1. Criar um algoritmo que leia o nome de um cliente, código e o total em
débito deste cliente. Mostre os dados lidos.
2. Analise a estrutura a seguir:
a) Crie um vetor para armazenar as informações dessa tabela.
b) Cadastre os produtos.
c) Imprima os produtos.
Fique ligado!
As variáveis compostas homogêneas são estruturas de dados que se caracterizam
por um conjunto de variáveis do mesmo tipo. Elas podem ser unidimensionais
ou multidimensionais. Essas estruturas são ditas “homogêneas” porque os valores
que serão armazenados são de um mesmo tipo de dado.
Os índices são as posições que garantem independência a cada um dos
valores armazenados na estrutura. Por meio destes índices, também chama-
dos de posições seus valores (conteúdos), podem ser manipulados de forma
independente.
Exemplos: vetor o SALÁRIO (unidimensional) o matriz NOTAS (bidimensional).
Quatro colunas
SALÁRIO 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 (SALÁRIO[1]) // primeiro e segundo elemento da primeira coluna
Escreva (“Matemática – bimestre 01: “, NOTAS[1,1] )
// terceiro elemento Escreva (“Matemática – bimestre 02: “, NOTAS[2,1] )
Escreva (SALÁRIO[3])
// primeiro e segundo elemento da segunda coluna
Escreva (“Ciências – bimestre 01: “, NOTAS[2,1] )
Escreva (“Ciências – bimestre 02: “, NOTAS[2,1] )
...
SALÁRIO 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 (SALÁRIO[0]) // primeiro e segundo elemento da primeira coluna
Escreva (“Matemática – bimestre 01: “, NOTAS[0,0] )
// terceiro elemento Escreva (“Matemática – bimestre 02: “, NOTAS[1,0] )
Escreva (SALÁRIO[2])
// primeiro e segundo elemento da segunda coluna
Escreva (“Ciências – bimestre 01: “, NOTAS[0,1] )
Escreva (“Ciências – bimestre 02: “, NOTAS[1,1] )
......
Procedimento
Um procedimento (procedure), também chamado de sub-rotina, é um
conjunto de instruções 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 instrução após a linha que fez a chamada
do procedimento.
A sintaxe em português estruturado é:
FIMPROCEDIMENTO
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Algoritmo "CalculaMédia"
Var
N1, N2, M: Real
Funções
Uma função também é um bloco de programa como são os procedimentos,
contendo início e fim e sendo identificado por um nome por meio do qual tam-
bém será referenciada em qualquer parte do programa principal. Uma sub-rotina
de função é, na verdade, muito parecida com uma sub-rotina de procedimento.
A sintaxe em português estruturado será também idêntica ao exemplo anterior.
Observe, a seguir, o código em português estruturado de uma função.
ALGORITMO "FATORIAL"
VAR
NUM:inteiro
retorne FAT
FIMFUNÇÃO
Fimalgoritmo
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace calculadora
{
class Program{
// Obs: nesse exemplo não foi previsto o erro de divisão por zero
static int Dividir(int a, int b){
int divide = a / b;
return divide;
}
int a, b;
Console.Write("Entre com o primeiro valor: ");
a = int.Parse(Console.ReadLine());
switch (Console.Read()) {
case '1': Console.Write("Soma = " + Somar(a,b));
break;
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Escopo
O escopo de uma variável define a área do programa onde esta variável
pode ser referenciada, podendo ser:
Variáveis Globais: são as variáveis declaradas no programa que são co-
nhecidas em todo programa e inclusive nos subprogramas contidos nele.
Exceto naqueles módulos onde for declarada outra variável com o mesmo
nome.
Variáveis Locais: são as variáveis declaradas em um subprograma, que são
conhecidas em todo o subprograma, mas não no programa que contém o
subprograma. Caso um subprograma contenha a definição de outro sub-
programa, as variáveis declaradas no programa e no subprograma serão
visíveis no subprograma, mas o contrário não é verdadeiro. No escopo
do programa, não podemos chamar o subsubprograma, assim como não
podemos acessar as variáveis do subprograma.
Dados 3 8 10 21 125
Posições 0 3 0 8 12
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Matrizes
3 3 6
1 14
2 6
B 3 8
4 7
5 10
4. Faça um programa para ler uma matriz M(5 X 5) e gere três 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. Faça um programa que leia uma matriz M(5 X 10) e realize a seguinte ope-
ração: procure pelo Dado em cada linha da matriz M e, para cada linha,
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Dado 8
1 2 3 4 5
Freq 2 0 3 1 0
Registros
Referências
MEDEIROS. Higor. Trabalhando com arrays. Disponível em: <http://www.devmedia.com.
br/trabalhando-com-arrays/5212>. Acesso em: 21 jul. 2013.
MSDN. Arrays de único dimensional (guia de programação translation from VPE for
Csharp). Disponível em: <http://msdn.microsoft.com/pt-br/library/0a7fscd0(v=vs.90).aspx>.
Acesso em: 21 jul. 2013a.
MSDN. Matrizes (Guia de programação do C#). Disponível em: <http://msdn.microsoft.
com/pt-br/library/9b9dty7d(v=vs.90).aspx>. Acesso em: 21 jul. 2013b.
MSDN. Multidimensional arrays (C# Programming Guide). Disponível em: <http://msdn.
microsoft.com/en-us/library/2yd9wwz4.aspx>. Acesso em: 21 jul. 2013c.
RODRIGUES, Joel. Arrays em C# — teoria e prática. Disponível em: <http://www.linhadecodigo.
com.br/artigo/3444/arrays-em-csharp-teoria-e-pratica.aspx.>. Acesso em: 21 jul. 2013.
7e&1,&$6B'(B352*5$0$d®2BBBSGISDJH#3UHIOLJKW$XJXVW3*
Anotações
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________