Você está na página 1de 61

PROGRAMAÇÃO E ALGORITMO

PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA


CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

1 Introdução à Lógica de Programação

Lógica
A lógica de programação é necessária para pessoas que desejam trabalhar com
desenvolvimento de sistemas e programas, ela permite definir a seqüência lógica para o
desenvolvimento.

Então o que é lógica?


Lógica de programação é a técnica de encadear pensamentos para atingir
determinado objetivo.

Seqüência Lógica
Estes pensamentos, podem ser descritos como uma seqüência de instruções, que devem ser
seguidas para se cumprir uma determinada tarefa.
Seqüência Lógica: são passos executados até atingir um objetivo ou solução de um
problema.

Instruções
Na linguagem comum, entende-se por instruções “um conjunto de regras ou normas
definidas para a realização ou emprego de algo”.

Em informática, porém, instrução é a informação que indica a um computador uma ação


elementar a executar. Convém ressaltar que uma ordem isolada não permite realizar o
processo completo, para isso é necessário um conjunto de instruções colocadas em ordem
seqüencial lógica.
Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prática
uma série de instruções: descascar as batatas, bater os ovos, fritar as batatas, etc...

É evidente que essas instruções tem que ser executadas em uma ordem adequada – não se
pode descascar as batatas depois de fritá-las.
Dessa maneira, uma instrução tomada em separado não tem muito sentido; para obtermos
o resultado, precisamos colocar em prática o conjunto de todas as instruções, na ordem
correta.

Instruções são um conjunto de regras ou normas definidas para a realização ou


emprego de algo. Em informática, é o que indica a um computador uma ação
elementar a executar.

1
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Resolva os exercícios propostos:

Desafio 1
Na loja de conveniência, um crime foi cometido antes das 08h da manhã. Os
suspeitos eram os cinco funcionários que costumavam chegar antes do horário.
Alberto - usa roupas e acessórios caríssimos, cuidadoso, não esquece detalhe
algum
Bruno - fumante e nervoso, diz ter perdido seu relógio é o único canhoto
Carla - foi vista às 7h35min a 2 km da loja
Daniel - distraído e explosivo, geralmente não gasta dinheiro em roupas e
acessórios
Ernesta - agressiva e mal-humorada, jamais fumou

A polícia descobriu que:


1. O criminoso fuma e não é canhoto
2. No momento do crime, caiu um relógio barato no chão, que parou às
7h42min
3. Uma pessoa caminhando depressa faz cerca de 1 km a cada 8 min.

Desafio 2
Sabendo que somente um dos rótulos diz a verdade, deduza em que caixa está o
doce.

Laranja Amarelo Verde


O doce está na O doce não está O doce está aqui
caixa verde aqui

Desafio 3
As pessoas A,B,C e D vão jogar um torneio de pingue-pongue. Antes de começar, elas
fazem previsões:

2
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
A diz: Serei o 2º colocado
B diz: Ficarei depois de A
C diz: D que será o 3º colocado
D diz: Ficarei em 4º colocado
Sabendo que todos erraram suas previsões, exceto o 1º colocado, faça o que se pede:
a) Prove que C foi o 1º colocado.
b) Apresente a classificação de todos os participantes.

Desafio 4
O vaqueiro está tocando as vacas numa estrada. Uma delas anda na frente de duas outras,
uma anda entre duas e uma anda atrás de duas Quantas eram as vacas?

Desafio 5
Quando uma senhora saiu com um carrinho levando uma criança a fim de tomar o sol das
primeiras horas da manhã, encontrou-se com uma velha conhecida que há muito tempo não
via, que, a cumprimentá-la, indagou: “Qual é seu parentesco com esta linda criança?” A
resposta veio logo em seguida: “Sua mãe é a filha única de minha mãe.” Qual é, então, seu
verdadeiro parentesco?

Desafio 6
A mãe de Takada tem cinco filhos: Tanaco, Taneco, Tânico, Tanoco. Qual é o quinto filho?

Desafio 7

“Em primeiro lugar, haverá pessoas em sua volta que tomam decisões erradas. Tentar
ensina-las a acertar é perda de tempo, energia e dinheiro. Livrar-se dessas más aquisições é
quase sempre um exercício desgastante, demorado e caro. Pior que tudo, pessoas erradas
atraem outras pessoas errada e, quando você percebe, sua empresa está tomada por
incompetentes”.
O texto acima refere-se a:
a) Errar ao contrair empréstimos e cair na mão de credores.
b) Errar ao contratar uma empresa de consultoria.
c) Errar ao contratar um executivos que irão trabalhar em sua empresa.
d) Errar ao contratar uma empresa de assessoria.
e) Errar ao contratar uma empresa de auditoria.

3
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Desafio 8
Os ovos de galinha são mais baratos do que os de perua. Não tenho dinheiro suficiente para
comprar duas dúzias de ovos de galinha. Logo existe apenas uma verdadeira qual seria?
a) Tenho dinheiro para comprar duas dúzias de ovos de perua;
b) Não tenho dinheiro suficiente para comprar uma dúzia de ovos de galinha;
c) Não tenho dinheiro suficiente para comprar meia dúzia de ovos de perua;
d) Não tenho dinheiro suficiente para comprar duas dúzias de ovos de perua;
e) Tenho dinheiro para comprar duas dúzias de ovos de galinha e duas dúzias de ovos
de perua;

Desafio 9

Onde está a estrela?

4
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

ÀS VEZES, A SOLUÇÃO PARA UM PROBLEMA ESTÁ BEM A NOSSA FRENTE,


MAS É DIFÍCIL ENCONTRÁ-LA.

SEJA BEM VINDO !

2 Algoritmo
Um algoritmo é formalmente uma seqüência finita de passos que levam a execução de uma
tarefa. Podemos pensar em algoritmo como uma receita, uma seqüência de instruções que
dão cabo de uma meta específica. Estas tarefas não podem ser redundantes nem subjetivas
na sua definição, devem ser claras e precisas.
Como exemplos de algoritmos podemos citar os algoritmos das operações básicas (adição,
multiplicação, divisão e subtração) de números reais decimais. Outros exemplos seriam os
manuais de aparelhos eletrônicos, como um videocassete, que explicam passo-a-passo
como, por exemplo, gravar um evento.
Até mesmo as coisas mais simples, podem ser descritas por seqüências lógicas. Por
exemplo:
Para chupar uma bala.
Devo pegar a bala;
Devo tirar o papel da bala;
Colocar na boca;
E jogar o papel fora;

Programas
Os programas de computadores nada mais são do que algoritmos escritos numa linguagem
de computador (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que são
interpretados e executados por uma máquina, no caso um computador. Notem que dada esta
interpretação rigorosa, um programa é por natureza muito específico e rígido em relação
aos algoritmos da vida real.

5
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Primeira Lista de exercícios.

1) Crie uma seqüência lógica para tomar banho:


2) Faça um algoritmo para somar dois números e multiplicar o resultado pelo primeiro
número
3) Descreva com detalhes a seqüência lógica para Trocar um pneu de um carro.
4) Faça um algoritmo para trocar uma lâmpada. Descreva com detalhes.

3 Desenvolvendo algoritmos

Pseudocódigo
Os algoritmos são descritos em uma linguagem chamada pseudocódigo. Este nome é uma
alusão à posterior implementação em uma linguagem de programação, ou seja, quando
formos programar em uma linguagem, por exemplo linguagem C , estaremos gerando
código em linguagem C. Por isso os algoritmos são independentes das linguagens de
programação. Ao contrário de uma linguagem de programação não existe um formalismo
rígido de como deve ser escrito o algoritmo.

O algoritmo deve ser fácil de se interpretar e fácil de codificar. Ou seja, ele deve ser o
intermediário entre a linguagem falada e a linguagem de programação.

Regras para construção do Algoritmo


Para escrever um algoritmo precisamos descrever a seqüência de instruções, de maneira
simples e objetiva. Para isso utilizaremos algumas técnicas:
Usar somente um verbo por frase
Imaginar que você está desenvolvendo um algoritmo para pessoas que não trabalham
com informática
Usar frases curtas e simples
Ser objetivo
Procurar usar palavras que não tenham sentido dúbio

Fases
No capítulo anterior vimos que ALGORITMO é uma seqüência lógica de instruções que
podem ser executadas.
É importante ressaltar que qualquer tarefa que siga determinado padrão pode ser descrita
por um algoritmo, como por exemplo:
COMO FAZER ARROZ DOCE ou então CALCULAR O SALDO FINANCEIRO DE
UM ESTOQUE.
Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema apresentado
em três fases fundamentais.

6
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
ENTRADA: São os dados de entrada do algoritmo
PROCESSAMENTO: São os procedimentos utilizados para chegar ao resultado final
SAÍDA: São os dados já processados

Analogia com o homem


Exemplo de Algoritmo
Imagine o seguinte problema: Calcular a média final dos alunos da 3ª Série. Os alunos
realizarão quatro provas: P1, P2, P3 e P4.

Para montar o algoritmo proposto, faremos três perguntas:


a) Quais são os dados de entrada?
R: Os dados de entrada são P1, P2, P3 e P4.
b) Qual será o processamento a ser utilizado?
R: O procedimento será somar todos os dados de entrada e dividi-los por 4 (quatro)
c) Quais serão os dados de saída?
R: O dado de saída será a média final

Algoritmo
Receba a nota da prova1
Receba a nota de prova2
Receba a nota de prova3
Receba a nota da prova4
Some todas as notas e divida o resultado por 4

Mostre o resultado da divisão

Teste de Mesa
Após desenvolver um algoritmo ele deverá sempre ser testado. Este teste é chamado de
TESTE DE MESA, que significa, seguir as instruções do algoritmo de maneira precisa para
verificar se o procedimento utilizado está correto ou não.

Veja o exemplo:
Nota da Prova 1
Nota da Prova 2
Nota da Prova 3
Nota da Prova 4
Média
Faça a tabela para o teste de mesa.

7
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

SEGUNDA LISTA DE EXERCÍCIOS

1) Identifique os dados de entrada, processamento e saída no algoritmo abaixo


Receba código da peça
Receba valor da peça
Receba Quantidade de peças
Calcule o valor total da peça (Quantidade * Valor da peça)
Mostre o código da peça e seu valor total
2) Faça um algoritmo para “Calcular o estoque médio de uma peça”, sendo que
ESTOQUEMÉDIO = (QUANTIDADE MÍNIMA + QUANTIDADE MÁXIMA) /2
3) Teste o algoritmo anterior com dados definidos por você.

4 Fluxograma

O que é um fluxograma?
O fluxograma é uma forma padronizada e eficaz para representar os passos lógicos de um
determinado processamento.
Com o diagrama podemos definir uma seqüência de símbolos, com significado bem
definido, portanto, sua principal função é a de facilitar a visualização dos passos de um
processamento.

Simbologia
Existem diversos símbolos em um diagrama de bloco. No decorrer do curso apresentaremos
os mais utilizados.

Veja no quadro abaixo alguns dos símbolos que iremos utilizar:

Símbolo Representação Figura


Terminal Ponto de início, interrupção ou término
de um fluxograma.

Entrada ou saída de Entrada ou saída de dados por um


dados periférico externo.

8
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Display de vídeo Monitor de vídeo que vai exibir o
resultado dos dados processados.

Documento impresso Saída de dados por uma impressora.

Tambor magnético Acesso a um arquivo em disco ou


indexado.

Fita magnética Entrada e saída de dados por fita


magnética ou acesso a um arquivo
seqüencial.

Fita de papel Entrada e saída de dados por papel ou


plástico perfurado.

Cartão perfurado Entrada ou saída de dados por cartão


perfurado.

Conector simples Indica desvios na seqüência lógica do


programa.

Conector de folhas Indica mudanças de páginas.

Símbolo Representação Figura


Processamento Qualquer função de processamento; por
exemplo, atribuições, operações

9
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
aritméticas.

Decisão Estrutura de decisão ou condicional.

Entrada manual Entrada de dados por teclado.

Indicadores de Determinam a direção do fluxograma.


direção do fluxo

Comentários Descrição dos comentários no


fluxograma.

Preparação Preparação de instruções para


processamento ou alteração causado
pelo programa.

Intercalação Combinação ordenada de vários


arquivos.

Símbolo
Representação Figura

10
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Modificação de Modificação em partes do programa.


programa

Armazenamento Armazenamento em dispositivos auxiliares.

Memória Leitura e gravação em núcleo de memória.

Processamento Determina procedimentos ou funções na


seqüência do programa (chamada a um
procedimento ou a uma função).

Linha de comunicação Transmissão de informações entre locais


diferentes. Transmissão de dados via
telecomunicação.
Classificação Classificar um arquivo.

Extração Retirar partes de um arquivo e enviá-las para


outro.

Disco magnético Entrada e saída de dados por disco


magnético ou acesso a um arquivo indexado.

11
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Símbolo Representação Figura


Fita transmissora Fita ou documento sem vinculação
direta com o processamento.

Operação auxiliar Operação com equipamentos sob


controle do computador.

Transação em Transação de dados em arquivos.


arquivos

5 Constantes, Variáveis e Tipos de Dados


Variáveis e constantes são os elementos básicos que um programa manipula. Uma variável
é um espaço reservado na memória do computador para armazenar um tipo de dado
determinado.
Variáveis devem receber nomes para poderem ser referenciadas e modificadas quando
necessário. Um programa deve conter declarações que especificam de que tipo são as
variáveis que ele utilizará e às vezes um valor inicial. Tipos podem ser por exemplo:
inteiros, reais, caracteres, etc. As expressões combinam variáveis e constantes para calcular
novos valores.
Constantes
Constante é um determinado valor fixo que não se modifica ao longo do tempo, durante a
execução de um programa. Conforme o seu tipo, a constante é classificada como sendo
numérica, lógica e literal.
Exemplo de constantes:

N1+N2+ N3

12
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

3 constante

Variáveis
Variável é a representação simbólica dos elementos de um certo conjunto. Cada variável
corresponde a uma posição de memória, cujo conteúdo pode se alterado ao longo do tempo
durante a execução de um programa. Embora uma variável possa assumir diferentes
valores, ela só pode armazenar um valor a cada instante
Exemplos de variáveis:
Soma de dois valores:
N1= em determinado momento terá um valor
N2 = em determinado momento terá um valor
S = terá a soma dos valores anteriores atribuídos

Tipos de Variáveis
As variáveis e as constantes podem ser basicamente de quatro tipos: Numéricas, caracteres,
alfanuméricas ou lógicas.

Numéricas: específicas para armazenamento de números, que posteriormente poderão ser


utilizados para cálculos. Podem ser ainda classificadas como Inteiras ou Reais.
As variáveis do tipo inteiro são para armazenamento de números inteiros e as Reais são
para o armazenamento de números que possuam casas decimais.

Caracteres: específicas para armazenamento de conjunto de caracteres que não contenham


números (literais). Ex: nomes.

Alfanuméricas: específicas para dados que contenham letras e/ou números. Pode em
determinados momentos conter somente dados numéricos ou somente literais. Se usado
somente para armazenamento de números, não poderá ser utilizada para operações
matemáticas.

Lógicas: armazenam somente dados lógicos que podem ser Verdadeiro ou Falso.

Declaração de Variáveis
As variáveis só podem armazenar valores de um mesmo tipo, de maneira que também são
classificadas como sendo numéricas, lógicas e literais.

13
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
O nome de uma variável é utilizado para sua identificação e posterior uso dentro de um
programa. Desta forma, é necessário estabelecer algumas regras para a devida utilização
das variáveis dentro de um programa.
 Nomes de variáveis podem ser atribuídos com um ou mais caracteres;
 O primeiro caractere do nome de uma variável não pode ser, em hipótese alguma, um
número; sempre deve ser uma letra;
 O nome de uma variável não pode possuir espaços em branco. Caso necessite separar
segmentos, utilize símbolo “_” (underscore ou underline);
 Não pode ser nome de uma variável uma palavra a uma instrução da linguagem de
codificação de um programa;
 Não podem ser utilizados nas formações de nomes de variáveis outros caracteres a não
ser letras, números e o símbolo underline (ou undescore).
 Não podem ser utilizados palavras reservadas como escreva, leia e etc.

EXERCÍCIOS
1) O que é uma constante? Dê dois exemplos.
2) O que é uma variável? Dê dois exemplos.

6 Operadores
Os operadores são meios pelo qual incrementamos, decrementamos, comparamos e
avaliamos dados dentro do computador.
Temos três tipos de operadores:
Operadores Aritméticos
Operadores Relacionais
Operadores Lógicos

Operadores Aritméticos
Os operadores aritméticos são os utilizados para obter resultados numéricos. Além da
adição, subtração, multiplicação e divisão, podem utilizar também o operador para
exponenciação.

Os símbolos para os operadores aritméticos são:


OPERAÇÃO SÍMBOLO
Adição +
Subtração -
Multiplicação *
Divisão /
Exponenciação ** OU ^

14
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Hierarquia das Operações Aritméticas


1º ( ) Parênteses
2º Exponenciação
3º Multiplicação, divisão (o que aparecer primeiro)
4º + ou – (o que aparecer primeiro)

Exemplo: 1 + 7 * 2 ** 2 –1 = 1+ 7* 4 -1 = 1+28 -1 =28


3 * (1 – 2) + 4 * 2 = 5

Operadores Relacionais

Os operadores relacionais são utilizados para comparar String de caracteres e números. Os


valores a serem comparados podem ser caracteres ou variáveis.
Estes operadores sempre retornam valores lógicos (verdadeiro ou falso/ True ou False).
Para estabelecer prioridades no que diz respeito a qual operação executar primeiro, utilize
os parênteses.

Os operadores relacionais são:

Descrição Símbolo
Igual a =
Diferente de <> ou #
Maior que >
Menor que <
Maior ou igual a >=
Menor ou igual a <=

Exemplo:
Tendo duas variáveis A = 5 e B = 3
Os resultados das expressões seriam:

Expressão Resultado
A=B Falso
A <> B Verdadeiro
A>B Verdadeiro
A<B Falso
A >= B Verdadeiro
A <= B Falso

15
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Operadores Lógicos
Os operadores lógicos servem para combinar resultados de expressões, retornando se o
resultado final é verdadeiro ou falso.
Os operadores lógicos, sendo os mais comuns:.e. (operador de conjunto), .ou. (operador de
disjunção) e. não. (operador de negação). Em alguns casos, o uso de operadores lógicos
evita a utilização de decisões encadeadas.

O operador lógico do tipo.e. é utilizado quando duas ou mais condições necessitam ser
verdadeiras. Desta forma, cria-se o conceito de conjunção entre as condições, ou seja,
apesar de existir mais de uma condição, o resultado lógico somente será verdadeiro quando
todas as condições também o forem.

Imagine como exemplo a possibilidade de um aluno poder sair da sala de aula somente
após concluir o exercício dois e o exercício três. Observe que ambos os exercícios precisam
ser realizados para que ele possa sair. A seguir, veja a tabela de decisão para o operador
lógico.

Exercício 1 Exercício 2 Sair da Sala de Aula


Falsa Falsa Falso
Verdadeira Falsa Falso
Falsa Verdadeira Falso
Verdadeira Verdadeira Verdadeiro

O operador do tipo .ou. é utilizado pelo menos umas das condições necessita ser
verdadeiro. Desta forma, cria-se o conceito de disjunção entre as condições, ou seja, apesar
de existir mais de uma condição, o resultado lógico somente será verdadeiro quando pelo
menos uma das condições for verdadeira.

Imagine como exemplo a possibilidade de um aluno poder sair da sala de aula somente
após concluir o exercício dois ou exercício três. Observe que basta ao aluno resolver um
dos exercícios para que ele possa sair. A seguir, observe a tabela de decisão para o operador
lógico .ou., bem como um exemplo da forma de uso no fluxograma e em português
estruturado.

Exercício 2 Exercício 3 Sair da Sala de Aula


Falsa Falsa Falso
Verdadeira Falsa Verdadeiro
Falsa Verdadeira Verdadeiro

16
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Verdadeira Verdadeira Verdadeiro

Logo posso concluir que:

E AND Uma expressão AND (E) é verdadeira se todas as condições forem


verdadeiras
OR OU Uma expressão OR (OU) é verdadeira se pelo menos uma condição for
verdadeira
NOT Um expressão NOT (NÃO) inverte o valor da expressão ou condição, se
verdadeira inverte para falsa e vice-versa.

Exercícios Propostos:

Suponha que temos três variáveis A = 5, B = 8 e C =1


Os resultados das expressões seriam:

A = B AND B > C
A <> B OR B < C
A>B
A < B AND B > C
A >= B OR B = C
A <= B

Obs: As variáveis só podem armazenar valores de um mesmo tipo, de maneira que também
são
classificadas como sendo numéricas, lógicas e literais.

1) Tendo duas variáveis A = 5 e B = 3 os resultados das expressões seriam: (responda com


V para verdadeiro e F para falso)
a) A = B ( )
b) A <> B ( )
c) A > B ( )
d) A < B ( )
e) A >= B ( )
f) A <= B ( )

17
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

2) Suponha que temos três variáveis A = 5, B = 8 e C =1 os resultados das expressões


seriam:
Os resultado só poderão ser Verdadeiro ou Falso.
A = B .e. B > C ____________
A <> B .ou. B < C __________
A > B ____________________
A < B .e. B> C _____________
A >= B .ou. B = C ___________
A < B .ou. A =C_____________

3) Sabendo que A=3, B=7 e C=4, informe se as expressões abaixo são verdadeiras ou
falsas.
a) (A+C) > B ( )
b) B > (A + 2) ( )
c) C = (B – A) ( )
d) (B + A) <= C ( )
e) (C+A) > B ( )

4) Sabendo que A=5, B=4 e C=3 e D=6, informe se as expressões abaixo são verdadeiras
ou
falsas:

a) (A > C) .e. (C < D) ( )


b) (A+B) > 10 .ou. (A+B) = (C+D) ( )
c) (A>C) .e. (D > C) ( )

5) Usando os Operadores Matemáticos resolva:

Expressão Resultado
1+2
5.0 - 1
2 * 1.5

18
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
5/2
5 DIV 2
5 MOD 2

Observações: Lembre-se que na matemática existem algumas prioridades.

Prioridade Operadores
1ª * / DIV MOD
2ª + -

Obs: OPERADORES RELACIONAIS

São usados na comparação de duas expressões de qualquer tipo, retornando um valor lógico
(TRUE ou FALSE) como resultado da operação.

Operador Operação
= igual
> maior
< menor
>= maior ou igual
<= menor ou igual
<> diferente

Obs: as operações lógicas só podem ser efetuadas com relação a valores do mesmo tipo.

6) Resolva seguindo a observação: diga se com esses operadores relacionais as expressões


são True ou False

Expressão Resultado
1=2
'A' = 'a'
5>2
3 <= 3
2 + 3 <> 5

Observação referente a Tabela Verdade

19
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
São usados para combinar expressões lógicas.

Operador Operação
not não (negação)
and e (conjunção)
or ou (disjunção)

A tabela verdade (abaixo) apresenta o resultado de cada operador lógico, com os valores
dados para as expressões lógicas A e B:

A B A and B A or B not A not B


TRUE TRUE TRUE TRUE FALSE FALSE
TRUE FALSE FALSE TRUE FALSE TRUE
FALSE TRUE FALSE TRUE TRUE FALSE
FALSE FALSE FALSE FALSE TRUE TRUE

Obs: PRIORIDADE
Em uma expressão lógica, a ordem de avaliação dos operadores segue a tabela abaixo:

Prioridade Operadores
1ª NOT / não
2ª AND/ e
3ª OR/ou
4ª = > < >= <= <>

Exercício de fixação: preencha a Tabela Verdade abaixo:

A B A and B A or B not A not B


TRUE TRUE
TRUE FALSE
FALSE TRUE
FALSE FALSE

20
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

7) Qual o resultado das expressões lógicas abaixo, sabendo-se que os valores de A e B são,
respectivamente, TRUE e FALSE ?
a) not A and B or A and not B_________________
b) not (not (A or B) and (A or B))_____________
c) A or B and not A or not B __________________
d) (A or B) and (not A or not B)_______________

8) Sabendo que A=3, B=7 e C=4, informe se as expressões abaixo são verdadeiras ou
falsas.
a) (A+C) > B ( )
b) B >= (A + 2) ( )
c) C = (B –A) ( )
d) (B + A) <= C ( )
e) (C+A) > B ( )

9) Sabendo que A=5, B=4 e C=3 e D=6, informe se as expressões abaixo são verdadeiras
ou
falsas.
a) (A > C) AND (C <= D) ( )
b) (A+B) > 10 OR (A+B) = (C+D) ( )
c) (A>=C) AND (D >= C) ( )

Lista de exercícios
Fazer o algoritmo, fluxograma e teste de mesa em todos os exercícios:

1) Elabore um programa que calcule a média de três números.

2) Elabore um programa que multiplique dois valores.

3) Efetuar o cálculo da quantidade de litros por combustível gasta em uma viagem,


utilizando um automóvel que faz 12Km por litro. Para obter o cálculo, o usuário
deve fornecer o tempo gasto na viagem e a velocidade média. Desta forma, será
possível obter a distância percorrida com a fórmula Distância = tempo * velocidade.
Tendo o valor da distância basta calcular a quantidade de litros de combustível

21
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
utilizada na viagem com fórmula: litros_usados = distância/12. O programa deve
apresentar os valores da velocidade média, tempo gasto, a distância percorrida e a
quantidade de litros utilizada na viagem. Dica trabalhe com valores reais.

4) Elabore um programa que calcule o preço total de um produto. Levar em


consideração quantidade e preço_unitário.

5) Desenvolver em linguagem C um programa que efetue o cálculo do salário líquido


de um profissional que trabalhe por hora. São dados básicos, valor da hora de
trabalho, número de horas trabalhadas no mês e o percentual de desconto do INSS.

6) Ler uma temperatura em graus Celsius e apresenta-la convertida em graus


Fahrenheit. A fórmula de conversão de temperatura a ser utilizada é F= (9*C
+160)/5, em que a variável F representa é a temperatura em graus Fahrenheit e a
variável C representa é a temperatura em graus Celsius.

7) Ler uma temperatura em graus Fahrenheit e apresenta-la convertida em graus


Celsius.
A fórmula de conversão de temperatura a ser utilizada é C = (F –32)*5/9, em que a
variável F é a temperatura em graus Fahrenheit e a variável C é a temperatura em
graus Celsius.

8) Calcular e apresentar o valor do volume de um lata de óleo, utilizando a fórmula:


V= 3.14459* R*R*A, em que as variáveis: V, R e A representam respectivamente o
volume, o raio e altura.

9) Efetuar o cálculo e apresentação do valor de uma prestação em atraso, utilizando a


fórmula: Prestação = Valor + (Valor * (Taxa/100) * Tempo).

10) Elaborar um programa que calcule e apresente o volume de uma caixa retangular,
por meio da fórmula: Volume = comprimento * largura * altura.

11) Elaborar um programa que efetue a apresentação do valor da conversão em real


(R$) de um valor lido em dólar (US$). O programa deverá solicitar o valor da
cotação do dólar e também a quantidade de dólares disponível com o usuário.

22
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
12) Elabore um programa que efetue a leitura de três valores (A, B e C) e apresente
como resultado final a soma dos quadrados dos três valores lidos.

13) Ler dois valores inteiros para variáveis A e B, efetuar a troca dos valores de modo
que a variável A passe a possuir o valor da variável B, e a variável B passe a possuir
o valor da variável A Apresentar os valores trocados.

7 Estrutura de Decisão
Conceito

O conceito de tomada de decisão em um computador é um dos procedimentos mais


importantes. Este conceito está baseado na característica que um computador possui para
tomar decisões um nível controlado por condição.

Para que seja necessário tomar uma decisão em um computador, é preciso ter uma
condição. Esta condição pode retornar uma de duas respostas: sim ou não, verdadeira ou
falsa.

O fato de uma condição ser verdadeira ou falsa permite ao programa executar ações
distintas existentes na mesma estrutura lógica. Imagine, por exemplo, um programa que
seja usado para calcular a cobrança de um título.

Ao verificar a data de vencimento, esse programa pode ou não efetuar a cobrança de juros
sobre o valor do título, caso esteja sendo pago após o vencimento (decisão simples), ou
pode também proporcionar a aplicação de um desconto, caso o título esteja sendo pago
antes do vencimento (decisão composta).

A seguir, apresenta-se o formato de aplicação dos conceitos de decisão simples e composta,


além de apresentar também o conceito da utilização de decisão encadeada, quando for este
o caso.

23
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Decisão simples

Adesão do tipo simples caracteriza-se por prover uma ação lógica quando a condição é
verdadeira. Se a condição for falsa, não será executado absolutamente nada.

Fluxograma Português Estruturado

se (<condição>) então
<instruções para condição verdadeira>
fim_se

<instruções para condição falsa ou após ser


verdadeira>

Decisão Composta

A decisão do tipo composta caracteriza-se por prever uma ação lógica quando a condição é
verdadeira ou uma outra ação lógica quando a condição é falsa.

24
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Fluxograma Português Estruturado

se (< condição>) então


<instruções para condição verdadeira>
senão
<instrução para condição falsa>
fim_se

<instruções comuns para condição falsa ou


verdadeira>

Decisão Encadeada

A decisão do tipo encadeada caracteriza-se por prever uma ação lógica quando ocorre a
necessidade de estabelecer uma verificação lógica em uma seqüência de condições
sucessivas. Desta forma, uma determinada ação pode ser executada se um conjunto anterior
de instruções ou condições for satisfeito. Este tipo de estrutura pode possuir alguns níveis
de condição (aconselha-se no máximo quinze níveis), sendo chamados de aninhamentos ou
encadeamentos.

Fluxograma Português Estruturado

25
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

se (< condução 1 >) então


< instruções para condição 1 verdadeira >
senão
se (< condição 2 >) então
< instruções para condição 2 verdadeira, porém
condição 1 falsa >
senão
< instruções para condição 1 e condição 2
falsas >
fim_se

fim_se
<instruções comuns após verificação das condições>

Uso de Condições

Como apresentado anteriormente, o conceito de tomada de decisão está moldado no fato de


existir pelo menos uma condição que necessita ser avaliada. A condição sob avaliação pode
gerar uma de duas respostas (sim ou não, verdadeiro ou falso).

Para definir uma condição, é necessária a avaliação de no mínimo dois elementos que
podem ser representados por variáveis e/ou valores. Desta forma, podem ser criadas as
seguintes relações lógicas: variável com variável e variável com valor. Dificilmente

26
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

existirão relações lógicas do tipo valor com variável, e não serão utilizadas relações do tipo
valor com valor.

Uma condição mínima é formada por dois elementos em conjunto com algum operador
relacional, ou mesmo com o uso de operadores lógicos.

Operadores Relacionais

Para que seja definida uma condição, é necessário utilizar os operadores relacionais, além
dos elementos descritos anteriormente, para que assim seja possível verificar o estado
lógico de uma determinada condição quanto á possibilidade de ser verdadeira ou falsa. Os
operadores relacionais válidos em relação lógica são os seguintes:

Símbolo Significado
= Igual a
<> Diferente de
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a

Operadores Lógicos

Foi comentado anteriormente que para ocorrer a tomada de decisão é necessário uso de no
mínimo uma condição. Mas haverá situações em que se torna necessário o uso de mais de
uma condição para que uma única decisão seja tomada sem o uso do conceito de decisões
encadeadas.

Para estes casos é preciso trabalhar com os operadores lógicos, sendo os mais comuns: .e.
(operador de conjunto), .ou. (operador de disjunção) e .não. (operador de negação). Em
alguns casos, o uso de operadores lógicos evita a utilização de decisões encadeadas.

O operador lógico do tipo .e. é utilizado quando duas ou mais condições necessitam ser
verdadeiras. Desta forma, cria-se o conceito de conjunção entre as condições, ou seja,
apesar de existir mais de uma condição, o resultado lógico somente será verdadeiro quando
todas as condições também o forem.

27
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Imagine como exemplo a possibilidade de um aluno poder sair da sala de aula somente
após concluir o exercício dois e o exercício três. Observe que ambos os exercícios precisam

ser realizados para que ele possa sair. A seguir, veja a tabela de decisão para o operador
lógico.

Exercício 1 Exercício 2 Sair da Sala de Aula


Falsa Falsa Falso
Verdadeira Falsa Falso
Falsa Verdadeira Falso
Verdadeira Verdadeira Verdadeiro

28
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Fluxograma Português Estruturado

Se (<condição1>) .e. (<condição2>) então


< instruções executadas se condição 1 e
condição2 forem verdadeiras >
fim_se

<instruções comuns após verificação das condições>

O operador do tipo .ou. é utilizado pelo menos umas das condições necessita ser
verdadeiro. Desta forma, cria-se o conceito de disjunção entre as condições, ou seja, apesar

de existir mais de uma condição, o resultado lógico somente será verdadeiro quando pelo
menos uma das condições for verdadeira.

Imagine como exemplo a possibilidade de um aluno poder sair da sala de aula somente
após concluir o exercício dois ou exercício três. Observe que basta ao aluno resolver um

29
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
dos exercícios para que ele possa sair. A seguir, observe a tabela de decisão para o operador
lógico .ou., bem como um exemplo da forma de uso no fluxograma e em português
estruturado.

Exercício 2 Exercício 3 Sair da Sala de Aula


Falsa Falsa Falso
Verdadeira Falsa Verdadeiro
Falsa Verdadeira Verdadeiro
Verdadeira Verdadeira Verdadeiro

Lista de exercícios de IF

1) Escrever um prg em ling. C que faça a leitura de dois valores numéricos, e efetuar a
adição. Caso o valor somado seja maior ou igual a 10, deve ser apresentado
somando a ele mais 5. Caso o valor somado não seja maior ou igual a 10, deve ser
apresentado subtraindo dele 7.

2) Escrever um prg em ling. C que faça a leitura de quatro valores numéricos


referentes a quatro notas bimestrais de um aluno, efetuar o cálculo da média
apresenta-lo junto com uma das seguintes mensagens: caso o valor da média seja
igual ou maior que 5, apresentar “aluno aprovado”; caso contrário apresentar
“aluno reprovado”.

3) Desenvolver em ling.C um programa que aceite valores numéricos inteiros entre 0


(zero) e 9 (nove). Se o valor estiver dentro da faixa, o programa deve apresentar a
mensagem “valor válido”. Caso o valor esteja fora da faixa, o programa deve
apresentar a mensagem “ valor inválido”.

4) Escrever um programa em ling. C que efetue a leitura de um valor inteiro referente


aos códigos: 1,2 ou 3. Qualquer outro valor deve apresentar a mensagem “código
inválido”. Se o valor estiver correto, apresentar o valor do código escrito por
extenso.”

30
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
5) Ler dois valores numéricos e apresentar a diferença do maior e pelo menor.

6) Efetuar a leitura de um valor inteiro positivo ou negativo e apresentar o número lido


como sendo um valor positivo, ou seja, o programa deverá apresentar o módulo de
um número fornecido. Lembre-se de verificar se o número fornecido é menor ou
maior que zero, sendo, multiplique-o por –1.

7) Uma empresa decide dar um aumento de 30% aos funcionários cujo o salário é
inferior a 5000. Efetue o cálculo do salário reajustado.

8) Uma empresa decide dar um reajuste a seus funcionários de acordo com os critérios:
50% para aqueles que ganham menos de 3000.
20% para aqueles quee ganham entre 3000 e 10000(inclusive); e
15% para os demais.

9) Ler dois valores referentes a duas notas escolares de um aluno e imprimir uma
mensagem dizendo que o aluno foi aprovado, se o valor da média escolar for maior
ou igual a 7. Se o valor for menor que 7, solicitar a nota do exame, somar com o
valor da média e e obter a nova média. Se a nova média for maior ou igual a 5
apresentar uma nova mensagem informando a condição. Apresentar com as
mensagens o valor da média para qualquer condição.

10) Elaborar um programa e efetuar a leitura de um número inteiro e apresntar uma


mensagem informando se o número é par ou ímpar.

11) Elaborar um programa que efetue a leitura de um determinado valor, e apresenta-lo


caso não seja maior que três.

12) fetuar a leitura de três valores (variáveis A, B, C) para efetuar o cálculo da equação
de segundo grau. Lembre-se que somente será uma equação de segundo grau se o
valor da variável A for diferente de zero. Outro detalhe a ser considerado é que
somente existirá o cálculo das raízes se o valor de delta for diferente de zero. É
necessário considerar também o fato de o valor de delta ser igual a zero. Se isto
ocorrer, existirá apenas o cálculo de uma raiz. Dica utilize a biblioteca
math.h(#include <math.h>) antes da função “main ()”.

31
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

13) Escrever um programa em ling. C que efetue a leitura de três valores referentes às
medidas dos lados de um triângulo, considerando lados como: A, B e C. Verificar se
os lados fornecidos formam realmente um triângulo. Se for esta condição
verdadeira, deve ser indicado qual tipo de triângulo foi formado: isósceles, escaleno
ou equilátero.
OBS: Perceba que isto é uma regra matemática (uma condição) e deve ser
considerada. É um triângulo quando A<B+C, quando B<A+C e quando C<A+B.
Um triângulo é isósceles quando possuir dois lados iguais e um diferente, sendo
A==B ou A==C ou B==C; é escaleno quando possui todos lados diferentes, sendo
A!=B e B!=C; é equilátero quando possui todos lados iguais, sendo A==B e B ==C.

Lista de revisão

(1,0pt) 1. Suponha que temos três variáveis A = 7, B = 3 e C =5 os resultados das


expressões seriam:
Os resultado só poderão ser Verdadeiro ou Falso.
a) A = B .e. B > C ____________
b) A <> B .ou. B < C __________
c) A < B .e. B> C _____________
d) A >= B .ou. B = C ___________

(2,0pt) 2. Determine o resultado lógico das expressões mencionadas, assinalando se são verdadeiras ou falsas.
Considere para as respostas os seguintes valores: X=5, A = 7,B = 10,C = 4 e D =2.

a) (X < 1) .e. .não. (B > D)


verdadeiro ( ) Falso ( )

b) .não. (D < 0) .e. (C > 5)


verdadeiro ( ) Falso ( )

c) .não. (X > 3) .ou. (C < 7)


verdadeiro ( ) Falso ( )

d) (A > B) .ou. (C > B)


verdadeiro ( ) Falso ( )

e) (X=1) .e. (B = D)
verdadeiro ( ) Falso ( )

f) (D < 0) .ou. (C > 5)

32
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
verdadeiro ( ) Falso ( )

g) .não. (D > 3) .ou. .não. (B < 7)


verdadeiro ( ) Falso ( )

h) (A > B) .ou. .não. (C > B)


verdadeiro ( ) Falso ( )

(1,0pt) 3.Indique a saída dos trechos de programa em português estruturado, mostrados em


seguida. Para as saídas considere os seguintes valores: A=10, B=2, C=9 e D =4. Calcule o
valor de X.
a) se (A=B) .e. (A/B)então
X C+D
Senão
X A*D
fim-se
Escreva X
Resposta __________________

b) se (D>2) .ou. (C=20)


X C*(D+C)
Senão
X (A*D)*10
fim-se
Escreva X
Resposta _______________

(1,0pt) 4. Analise o módulo do programa abaixo e responda. Considere que H=4 e G=5.
X6
se (X=H) então
XG
senão
XH
fim_se
escreva X

Qual o valor da variável X, ao finalizar este módulo de programa?


a) 5 b) 6 c) 4 d) .V. e) 4.0

33
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
(1,0pt) 5. Analise o módulo do programa abaixo e responda. Considerando que A=2, B=2 e
C=1.

se (A=B) .ou. (A=C) .ou. (C=B) então


escreva (“O triângulo é isósceles”)
senão
escreva (“O triângulo e um qualquer)
fim_se
Qual a resposta que será mostrada para o usuário_________________________________

Início

(1,0pt) 6. Analise o algoritmo ao lado e responda:


Y = 0
Ao iniciar o fluxograma, qual o valor de Y?
a) 1
Y< F
b) 0 10
Fim
c) 10 V
d) 3 Y = Y + 1
e) 2

(1,0pt) 7. A expressão (.não..F..e..F..ou..F.), resultará:


a) .não..F. b) .V. c) A e B estão certas d) .F. e) n.d.a

8 ESTRUTURA DE REPETIÇÃO
Laços Contados (pode ser utilizado somente com variável numérica)

Sintaxe

Pseudicódigo
.
.

34
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
para <var> de <ini > até <fim> incr de <inc> faça
instruções
fim_para
.
.

Fluxograma

Var =
ini, fim,
inc

instruções

Exemplo: Tabuada 2

Contador ( i )
início
2* 1 = 2
2* 2 = 4
. 10 entradas
. escreva / leia / ←
2 * 10 = 20
fim

Programa tab2
var
i,R : inteiro
inicio
Para i de 1 até 10 incr de 1 faça

35
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
R ← 2*i
escreva (“2 *”, i, “ = “, R)
fim_para
fim

Obs.: Não precisa especificar pois ele assume 1

Teste de Mesa

i R
1 2 2*1=2
2 4 2*2=4
3 6 2*3=6
.
.
10 20 2 * 10 = 20
11

Fluxograma

Início
A

i = 1, 10,
1
“2 *”, i, “=”, R

R← 2 * i

Fim

36
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Laços Condicionais (pode ser utilizado com variáveis literal e numérica)


Sintaxe
Pseudicódigo
.
.
enquanto <condição .V.> faça
instruções
fim_enquanto.
.
Fluxograma

condição

Instruções
executadas

37
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Exemplo:
Programa tabuada
var
i, N, R: inteiro
cont: literal
inicio
cont ← “SIM”
enquanto (cont = “SIM”) faça
escreva (“Digite um número”)
leia (N)
i ← 1
enquanto (i <= 10) faça
R ← N*i
escreva (N, “*”, i, “=”, R)
i ← i+1
fim_enquanto
escreva (“Deseja continuar (S/N)?”)
leia (cont)
fim_enquanto
fim

38
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Fluxograma
Início B A C

cont ← “SIM” “Deseja


continuar?”

Cont =
cont
“SIM”

“Digite um
número”
Fim

i ← 1

i <= 10

R←N*i

39
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

N, “*”, i, “=”, R

i←i+1

B A C

Laços Condicionais (continuação / = enquanto)

Sintaxe

Pseudicódigo
.
repita
<instruções>
até que (condição)
.

Fluxograma

Instruções

N
condiçã
o

40
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Exemplo:
Programa tab3
var
i, R: inteiro
inicio
i ← 1
repita
R ← 3*i
escreva (“3 *”, i, “=”, R)
i ← i+1
até que (i > 10)
fim

Fluxograma

Teste de Mesa
Início
R i
3 1
6 2
i←1 9 3
12 4
. .
. .
R←3*i . .
. .
30 10
41
11
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

“3 *”, i, “=”, R

i←i+1

N
i > 10

Fim

Exercícios
Fazer pseudocódigo, fluxograma e teste de mesa. (Para, Enquanto e Repita)

1)Elaborar um programa que apresente os resultados de uma tabuada de um número


qualquer.

2) Elaborar um programa que calcule a somatória de 10 números quaisquer informados


pelo usuário.

3) Elaborar um programa que calcule a somatória dos números ímpares de 0 a 200.

4)Apresentar os números divisíveis por 4 que sejam menores que 200.

5) Ler 10 valores e apresentar a somatória e a média dos valores lidos

6) Elabore um prg que calcule o fatorial de um número qualquer digitado pelo usuários.

7) Elaborar um prg que durante 30 dias do mês de outubro foram tomadas as temperaturas
médias diárias de SP. Determinar o número de dias desse mês com temperaturas abaixo de
10ºC.

42
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

9 Estruturas de Dados Homogêneas

É uma técnica de programação que permitirá trabalhar com o agrupamento de várias


informações dentro de uma mesma variável, obedecendo sempre ao mesmo tipo de dado.
Este tipo de estrutura também é conhecido como: variáveis indexadas, arranjos,
vetores, matrizes, tabelas em memória ou arrays.

Matrizes de uma dimensão ou vetores

Os vetores também são chamados de matrizes unidimensionais por alguns


profissionais. Caracteriza-se por ser definida uma única variável dimensionada com um
determinado tamanho.

Operações Básicas com Matrizes do tipo Vetor

O vetor será representado por seu nome e seu tamanho (dimensão) entre colchetes.
Exemplo: MD[1..8] MD é o nome da variável, possuindo um tamanho de 1 a 8,
ou seja, poderão ser armazenados em MD até 8 elementos.
Deve-se considerar que com relação à manipulação dos elementos de uma matriz,
eles ocorrerão de forma individualizada, pois não é possível efetuar a manipulação de todos
os elementos do conjunto ao mesmo tempo.

Exemplo: Criar uma lista de chamada.


Nome_aluno[ 0 ] = “Ana Paula”
Nome_aluno[ 1 ] = “Anderson”
Nome_aluno[ 2 ] = “Angela”, e assim por diante.

43
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Observe que o nome da variável é um só nome_aluno, o que muda é a informação
indicada dentro dos colchetes. A esta informação dá-se o nome de índice, sendo este o
endereço em que o elemento está armazenado. É necessário que fique bem claro que
elemento é o conteúdo da matriz.

Declaração de variáveis

Nome_variável : conjunto [dimensão] de tipo_de_dado

Real, literal, inteiro, lógico


Valores inicial e final do tamanho do vetor.
Instrução que indicará a utilização de uma matriz.

Exemplo: nome_aluno : conjunto [1..30] de literal. A variável nome_aluno poderá


armazenar 30 nomes.

Atribuição Leitura Escrita


Variável[ i ] valor Leia ( variável [ i ] ) Escreva ( variável [ i ] )
nome[ 0 ] “Ana Paula” Leia ( nome [ 1 ] ) Escreva ( nome [ 0 ] )

Fluxograma
Nome [ 0 ]
Nome[ 0 ] “Ana Paula” Nome [ 1 ]

44
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Exemplo:
Programa notas
Var nome: conjunto [1 .. 5 ] de literal
media: conjunto [1 .. 5 ] de literal
nota, soma : real
i, x : inteiro

Início
Para i de 0 ate 4 faça
Escreva (“Informe o nome do aluno”)
Leia (nome [ i ])
soma 0
Para x de 1 até 3 faça
Escreva (“Informe a ”,x, “ nota do aluno”)
Leia (nota)
soma soma + nota
fim_para
media [ i ] soma / 3
fim_para
Para x de 0 até 4 faça
Escreva (nome [ x ], “ sua média foi: “, media[ x ])
Fim_para
Fim.

MATRIZ BIDIMENSIONAL (ou +)


Matriz com mais de uma dimensão

1 2
Nome Telefone agenda: conjunto de [1 .. 5, 1 .. 5] de literal

45
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
1 José
João escreva (agenda [1,1]
Maria leia (agenda [1,2]

Em matrizes de mais de uma dimensão os seus elementos são manipulados de


forma individualizada, sendo a referência feita sempre por meio de dois índices: o
primeiro para indicar a linha e o segundo para indicar a coluna. Desta forma,
TABELA[2,3] indica que está sendo feita uma referência ao elemento armazenado
na linha 2 coluna 3. Pode-se considerar que uma matriz com mais de uma dimensão
é também um vetor, sendo válido para este tipo de matriz tudo o que já foi utilizado
anteriormente para as matrizes de uma dimensão.

Operações básicas com matrizes de duas dimensões

Uma matriz de duas dimensões está sempre fazendo menção a linhas e


colunas e é representada por seu nome e seu tamanho (dimensão) entre colchetes.
Desta forma é uma matriz de duas dimensões TABELA[1..8,1..5], onde seu nome é
TABELA, possuindo um tamanho de 8 linhas (de 1 a 8) e 5 colunas (de 1 a 5), ou
seja, é uma matriz de 8 por 5 (8 x 5). Isto significa que podem ser armazenados em
TABELA até 40 elementos.

Atribuição de uma matriz

Sintaxe:

46
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Variável: conjunto[<dimensão1:dimensão2>] de <tipo de dado>, em que
<dimensão1> e <dimensão2> são a indicação do tamanho da tabela e <tipo de
dado> o tipo da matriz.

Leitura de dados

A leitura de uma matriz de duas dimensões, assim como das matrizes de uma
dimensão é processada passo a passo, um elemento por vez, sendo utilizada a instrução leia
seguida da variável mais o seu índice.

Exemplo – Pseudocódigo Fluxograma

Notas [ I , J] Notas [ I , J]
leia Notas [ I , J] ou

Escrita dos dados de uma matriz

A escrita de uma matriz de duas dimensões também é processada passo a


passo, um elemento por vez, sendo utilizada a instrução escreva seguida da variável
mais o seu índice.

Exemplo – Pseudocódigo Fluxograma

escreva Notas [ I , J] ou Notas [ I , J]


Notas [ I , J]

LISTA DE EXERCÍCIOS DE VETOR

47
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Fazer pseudocódigo, fluxograma, teste de mesa e em linguagem C.

1. Ler uma matriz do tipo vetor A com 15 elementos. Apresentar a matriz A.

2. Ler uma matriz A do tipo vetor com 5 elementos.Construir uma matriz B com as
mesmas características que deverá ser o dobro do vetor A, apresente o vetor B.

3. Ler um vetor A com 5 elementos. Construir o vetor B com mesma dimensão e


características sendo que os elementos do vetor B deverá ser 4 vezes maiores que os
elementos do vetor A. Apresentar o vetor B.

4. Ler um vetor A do tipo matriz com 15 elementos. Construir o vetor B com mesma
dimensão e características sendo que os elementos do vetor B deverá ser o quadrado dos
elementos do vetor A. Apresentar o vetor A e B.

5. Ler 10 elementos de uma matriz A do tipo vetor. Construir uma matriz B de mesmo
tipo, observando a seguinte lei de formação todo elemento do vetor B deve ser o triplo
do elemento de A correspondente. Apresentar o vetor A e B.

6. Ler o vetor A com 20 elementos, ler o vetor B com 30 elementos. Construir o vetor C
que é a junção da matriz A com B. Desta forma, C deverá ter a capacidade de armazenar
50 elementos. Apresentar a matriz C.

7. Ler 15 elementos para uma matriz A de uma dimensão do tipo vetor. Construir uma
matriz B de mesmo tipo e dimensão, observando a seguinte lei de formação: “Todo
elemento da matriz A que possuir índice par deverá ter seu elemento dividido por 2;
caso contrário,o elemento da matriz A deverá ser multiplicado por 1,5”. Apresentar a
matriz B.

8. Ler uma matriz A do tipo vetor com 10 elementos positivos. Construir uma matriz B
de mesmo tipo e dimensão, em que cada elemento da matriz B deverá ser o valor
negativo do elemento correspondente da matriz A Desta forma, sendo em A[1]
estiver armazenado o elemento 8, deverá estar em B[1] o valor –8, e assim por
diante. Apresentar os elementos da matriz B.

9. Ler 20 elementos de uma matriz A do tipo vetor e construir uma matriz B de mesma
dimensão com os mesmos elementos da matriz A, sendo que deverão estar invertidos.
Ou seja, o primeiro elemento A passa a ser o último de B, o segundo elemento de A
passa a ser o penúltimo de B e assim por diante. Apresentar as matrizes A e B

48
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

MODULARIZAÇÃO

A modularização consiste num método para facilitar a construção de grandes


programas, através de sua divisão em pequenas etapas, que são: módulos, rotinas, sub-
rotinas ou sub-programas. Permitindo o reaproveitamento de código, já que podemos
utilizar um módulo quantas vezes for necessário, eliminando assim a necessidade de
escrever o mesmo código em situações repetitivas.

Procedimentos

Um procedimento é um bloco de código precedido de um cabeçalho que contém o


Nome do procedimento e seus parâmetros. Com isto, podemos fazer referência ao bloco de
código de qualquer ponto do algoritmo através do seu nome e passando os seus parâmetros.
Declaração :

Procedimento NomeDoProcedimento [(parâmetros)]


Variáveis
Inicio
Comandos;
Fim;

Onde, parâmetros representam as variáveis que devem ser passadas ao


procedimento. Os parâmetros podem ser de : ENTRADA (passado por valor) ou de
ENTRADA/SAÍDA (passado por referência). Os parâmetros de ENTRADA não podem ser
alterados pelo procedimento, para que isso seja possível o parâmetro deve ser de
ENTRADA/SAÍDA Para indicar que um parâmetro é de ENTRADA/SAÍDA devemos
colocar a palavra VAR antes da sua declaração.

Referência :

49
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
NomeDoProcedimento(variáveis)

OBS: As variáveis passadas aos procedimentos são associadas aos parâmetros do


procedimento de acordo com a ordem das variáveis e da lista de parâmetros.

Funções
Uma função é semelhante a um procedimento, sendo que esta deve retornar,
obrigatoriamente, um valor em seu nome, desta forma, é necessário declarar, no cabeçalho
da função, qual o seu tipo.

Declaração :
Função NomeDaFunção [(parâmetros)] : tipo_da_função
Variáveis
Inicio
Comandos
NomeDaFunção  (expressão de retorno)
Fim;
Referência :
NomeDaFunção(parâmetro)

ALGORÍTMOS DE PESQUISA

A capacidade de armazenar informações foi um passo decisivo na evolução da


ciência da computação e para o nível generalizado de utilização do computador. Com isso,
a capacidade de recuperar informações, para posterior processamento, assume papel de
suma importância na utilização cotidiana do computador, existindo para isto inúmeros
exemplos, como: recuperação de dados de dados de transações bancárias de um cliente
através de um número de conta, no cadastro de cliente/operações de um banco. Portanto,

50
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
algoritmos de pesquisa devem ser projetados de forma a garantir a confiabilidade e
eficiência, exigidas pela importância das aplicações existentes.
A pesquisa de dados pode ser efetuada tanto em unidades de memória secundárias
(disco rígido, disquetes, fita), quanto na memória principal do computador.

PESQUISA SEQUENCIAL

O método mais simples de determinar a presença, ou não, de um elemento numa


seqüência, é percorrê-la a partir do seu início, efetuando comparações, até que o elemento
seja encontrado ou o fim da seqüência seja alcançado. Este método é chamado de pesquisa
seqüencial.

Dados : vetor de n elementos (n conhecido) e elemento a ser pesquisado no vetor.

Resultado:

Se o elemento existe, mostra-se a sua posição ou o total de ocorrências deste no vetor.


Se o elemento não existe, mostra-se uma mensagem de falha.

As considerações que podem ser feitas sobre os dados de entrada (vetor), são do
tipo: o vetor esta ou não ordenado; o elemento ocorre uma única vez (pesquisa única) ou
repetidas vezes no vetor (pesquisa única). Isso acarreta os seguintes tipos de pesquisa:

a. Desordenada Única
b. Desordenação Múltipla
c. Ordenada Única
d. Ordenada Múltipla

Pesquisa Binária

O método de pesquisa seqüencial é fácil de escrever e é razoavelmente eficiente


para seqüências com poucos elementos. Entretanto, para seqüências de tamanho

51
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
considerável, que ocorrem na maioria das aplicações existentes, a utilização do
método torna-se inviável. Uma estratégia interessante e eficiente é utilizada no
método de pesquisa binária.

Descrição Geral do Método:

 Definir intervalo inicial (i, f) de busca


 Determinar a posição média do intervalo(m = (i+f) DIV 2)
 Comparar o elemento da posição média (v[m]) com o elemento E:
 Caso sejam iguais então terminou as pesquisa
 Caso contrário definir o novo intervalo de busca
 Aplicar sucessivamente o passo anterior até encontrar E ou não existir mais o intervalo
de busca

São aspectos fundamentais do método:

 vetor de entrada tem que estar ordenado


 intervalo de busca inicial é (i,f) = (1,n)
 intervalo de busca, considerado a cada iteração, é definido do seguinte modo:
(i,m-1), se (E < v[m])
(m+1,f), se (E > v[m])
tendo a metade do tamanho do intervalo original
 O teste de repetição é (i <= f) e Não Achou

Dados: vetor de n elementos (n conhecido) e elemento a ser pesquisado no vetor.

Resultado

Se o elemento existe, mostra-se a sua posição ou o total de ocorrências deste no vetor.


Se o elemento não existe, mostra-se uma mensagem de falha

ALGORÍTMOS DE ORDENAÇÃO

Os problemas de ordenação são comuns tanto em aplicações comerciais quanto científicas.


Entretanto, raro são os problemas que se resumem à pura ordenação de seqüências de
elementos. Normalmente, os problemas de ordenação são inseridos em problemas de
pesquisa, intercalação e atualização. Isto torna ainda mais importante o projeto e a
construção de algoritmos eficientes e confiáveis para tratar o problema.

O nosso objetivo é analisar os seguintes tipos de ordenação:

52
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

a. Selection Sort
b. Bubble Sort
c. Insertion Sort

a. Selection Sort
Este método é um dos mais simples e intuitivos dentre os métodos existentes. Sua
estratégia básica é selecionar o menor elemento da seqüência considerada e colocá-lo no
início da seqüência. Assim, dada uma seqüência de tamanho n, várias iterações são
efetuadas, sendo que a cada vez que esta estratégia é aplicada, uma nova seqüência é gerada
pela eliminação do menor elemento da seqüência original.

Procedure SelectionSort ( var vet : vetor; n : integer);


{ordenado crescente}
var
i, j, pmin : integer;
begin
for i 1 to (n-1) do
begin
pmin  i;
for j (i+1) to n do
if vet[j] < vet[pmin]
then pmin  j;
trocar (vet[i], vet[pmin] ) ;
end;
end;

b. Bubble Sort
A estratégia utilizada pelo BubbleSort consiste de comparações e trocas entre
elementos consecutivos da seqüência, a fim de "empurrar" o maior elemento para a última
posição. Assim, várias iterações são efetuadas e, para cada seqüência considerada, a
aplicação da estratégia gera uma nova seqüência pela eliminação do maior elemento da
seqüência original.
Além disto, uma variável de controle (lógica) é utilizada para registrar a ocorrência
ou não de troca entre elementos da seqüência. Quando nenhuma troca é efetuada, tem-se
que a seqüência considerada já estava ordenada. Esta particularidade determina, em alguns
casos, um número menor de comparações que o método SelectionSort.

Procedure BubbleSort ( var vet : vetor ; n integer) ;


{ordem crescente}
var

53
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
i, limite : integer;
trocou : boolean;
begin
limite  n;
repeat
trocou  false;
for i 1 to (limite - 1) do
begin
if vet[i] > vet [i+1] then
begin
trocar(vet[i], vet[i+1]);
trocou  true;
end;
end;
limite  limite - 1
until not trocou
end;

c. Insertion Sort
Este método baseia-se no seguinte processo de inserção controlada:

 Com o primeiro elemento da seqüência forma-se uma seqüência de tamanho 1,


ordenada.
 Cada elemento restante da seqüência original é inserido na seqüência, de modo que esta
permaneça ordenada. Isto é feito através de uma pesquisa na seqüência ordenada que
determina a posição que o novo elemento deverá ser inserido.
 Quando um elemento é inserido o frente de outro, este deverá ser deslocado de uma
posição.

CONCEITOS FUNDAMENTAIS
Abstração de dados
Entrada PROCESSO Saída

Até hoje estudamos este tipo de esquema, onde entrada refere-se aos dados colhidos
do mundo real, processo é toda transformação que ocorre com os dados e a saída é o
resultado final do processo.
Quando a entrada usada em um processo é abstrata, isto é, apresenta-se sob a forma
de valores, quantidades ou símbolos então falamos em processamento de dados.

54
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Os dados processados pelo computador representam uma abstração de parte da
realidade, ou seja, representam algumas características selecionadas das entidades do
mundo real, necessárias para a solução de um determinado problema. Devido à grande
importância da abstração para o processamento de dados em computador, enquanto
programadores, a nossa atenção deverá estar voltada a duas questões básicas:
 Como representar a abstração da realidade dentro do computador?
 Como representar o conhecimento necessário para manipular esta abstração?

Tipos de Dados Abstratos

Um tipo de dados abstrato é formado por um conjunto de valores e por uma série de
funções que podem ser aplicadas sobre estes valores. Funções e valores, em conjunto,
constituem um modelo matemático que pode ser empregado para “modelar” e solucionar
problemas do mundo real, servindo para especificar as características relevantes dos objetos
envolvidos no problema, de que forma eles se relacionam e como podem ser manipulados.
Entretanto, sendo o tipo de dados abstrato apenas um modelo matemático, sua
definição não leva em consideração como os valores serão representados na memória do
computador, nem se preocupa com o “tempo” que será gasto para aplicar as funções
(rotinas) sobre tais valores.
Para que possamos realmente aplicar um modelo matemático na resolução de
problemas por computador, é preciso antes transforma-lo num tipo de dados concreto (ou
simplesmente, tipo de dados). Essa transformação é chamada implementação. É durante o
processo de implementação que a estrutura de armazenamento dos valores é especificada, e
que os algoritmos que desempenharão o papel das funções são projetados.

Alocação de memória

Antes de executar um programa, o computador precisa carregar seu código


executável para memória. Neste momento, uma parte da memória disponível no sistema é
reservada para o uso do programa e o restante fica livre.
Da área reservada ao programa, uma parte é usada para armazenar instruções a
serem executadas e a outra é destinada ao armazenamento de dados, quem determina
quanto de memória será usado para instruções é o compilador. Alocar área para
armazenamento de dados é responsabilidade do programador.
A alocação de memória do ponto de vista do programador estará em uma das quatro
categorias apresentadas a seguir.

Seqüencial Encadeada
Estática Estática seqüencial Estática encadeada
Dinâmica Dinâmica seqüencial Dinâmica encadeada

55
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA

Alocação Estática x Dinâmica

Dizemos que as variáveis de um programa têm alocação estática se a quantidade


total de memória utilizada pelos dados é, previamente conhecida e definida de modo
imutável, no próprio código fonte. Durante toda a execução, a quantidade de memória não
varia.
Por outro lado, se o programa é capaz de criar novas variáveis enquanto executa,
isto é, se áreas de memória que não foram declaradas no programa passam a existir durante
sua execução, então dizemos que a alocação é dinâmica.

Alocação Seqüencial

A forma mais natural de armazenar uma lista dentro do computador consiste em


colocar os seus elementos em células de memória consecutivas, um após o outro.

Alocação Encadeada

Os elementos podem ocupar quaisquer células e, para manter a relação de ordem


linear, juntamente com cada elemento é armazenado o endereço do próximo elemento da
lista.
Desta forma, na alocação encadeada, os elementos são armazenados em blocos de
memória denominados nodos, sendo que cada nodo é composto por dois campos: um para
armazenar dados e outro para armazenar endereços.
Dois endereços especiais devem ser destacados:
O endereço do primeiro elemento da lista (L);
O endereço o elemento fictício que segue o último elemento da lista ().

Listas Lineares

Uma das formas mais usadas para se manter dados agrupados é a lista. As listas têm
se mostrado um recurso bastante útil e eficiente no dia-a-dia das pessoas. Em computação,
não tem sido diferente: a lista é uma das estruturas de dados mais empregadas no
desenvolvimento de programas.

Fundamentos

56
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Uma lista linear é uma coleção L:[a 1, a2, ..., an], n  0, cuja propriedade estrutural
baseias-se apenas na posição relativa dos elementos, que são dispostos linearmente. Se n =
0, dizemos que a lista L é vazia, caso contrário, são válidas as seguintes propriedades:
 A1 é o primeiro elemento de L;
 An é o último elemento de L.

A característica fundamental de uma lista linear é o sentido de ordem unidimencional dos


elementos que a compõem. Uma ordem que nos permite dizer com precisão onde a
coleção inicia-se e onde termina, sem possibilidade de dúvida.
Entre diversas operações que podemos realizar sobre listas, temos:

 Acessar um elemento qualquer da lista;


 Inserir ou remover um elemento de uma posição específica;
 Apagar uma lista;
 Determinar o total de elementos na lista, entre outras.

Considerando-se somente as operações de acesso, inserção e remoção, restrita aos


extremos da lista, temos casos especiais que aparecem muito freqüentemente na
modelagem de problemas a serem resolvidos por computador. Tais casos especiais recebem
também nomes especiais: Pilha, fila e fila dupla.

Pilhas

Uma das estruturas de dados mais simples é a pilha. Possivelmente por essa razão, é
a estrutura de dados mais utilizada em programação, sendo inclusive implementada
diretamente pelo hardware da maioria das máquinas modernas. A idéia fundamental da
pilha é que todo o acesso a seus elementos é feito através do seu topo. Assim, quando um
elemento novo é introduzido na pilha, passa a ser o elemento do topo, e o único elemento
que pode ser removido da pilha é o do topo. Isto faz com que os elementos da pilha sejam
retirados na ordem inversa à ordem em que foram introduzidos: o primeiro que sai é o
último que entrou (a sigla LIFO – last in, first out – é usada para descrever esta estratégia).
Para entendermos o funcionamento de uma estrutura de pilha, podemos fazer uma
analogia com uma pilha de pratos. Se quisermos adicionar um prato na pilha, o colocamos
no topo. Para pegar um prato da pilha, retiramos o do topo. Assim, temos que retirar o prato
do topo para ter acesso ao próximo prato. A estrutura de pilha funciona de maneira análoga.

57
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Cada novo elemento é inserido no topo e só temos acesso ao elemento do topo da pilha.
Existem duas operações básicas que devem ser implementadas numa estrutura de pilha: a
operação para empilhar um novo elemento, inserindo-o no topo, e a operação para
desempilhar um elemento, removendo-o do topo. É comum nos referirmos a essas duas
operações pelos termos em inglês push (empilhar) e pop (desempilhar). A Figura abaixo
ilustra o funcionamento conceitual de uma pilha.

Funcionamento da pilha.

O exemplo de utilização de pilha mais próximo é a própria pilha de execução da


linguagem C. As variáveis locais das funções são dispostas numa pilha e uma função só
tem acesso às variáveis que estão no topo (não é possível acessar as variáveis da função
locais às outras funções).
Há várias implementações possíveis de uma pilha, que se distinguem pela natureza dos
seus elementos, pela maneira como os elementos são armazenados e pelas
operações disponíveis para o tratamento da pilha.

Filas

Uma fila é uma lista linear de informação que é acessada na seguinte ordem,
o “primeiro que entra, é o primeiro que sai” (FIFO). Uma fila não permite o
acesso a um elemento que não seja o primeiro.

Aplicação

58
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Normalmente são utilizadas na administração de recursos compartilhados, impondo
uma prioridade por ordem de chegada. Por exemplo, as filas de impressão, onde
cada documento espera sua vez para ser impresso.

As duas operações básicas que uma fila suporta são denominadas como a seguir:
 Enqueue: insere um elemento no final da fila.
 Dequeue: remove um elemento do começo da fila.

Exercícios de fila

a) Enqueue (F,a)
Enqueue (F, b)
Enqueue (F,c)

b) Enqueue (F,a)
Enqueue (F, b)
Dequeue (F)

c) Enqueue (F,a)
Enqueue (F, b)
Enqueue (F,c)
Dequeue (F)

d) Enqueue (F,a)
Enqueue (F, b)
Enqueue (F,c)
Dequeue (F)
Enqueue (F,d)
Enqueue (F, f)

e) Enqueue (F,a)
Enqueue (F, b)
Dequeue (F)
Enqueue (F,c)
Dequeue (F)

59
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
f) Enqueue (F,a)
Enqueue (F, b)
Dequeue (F)
Dequeue (F)

g) Enqueue (F,a)
Enqueue (F, b)
Enqueue (F, c)
Enqueue (F, Dequeue (F))

h) Enqueue (F,a)
Enqueue (F, b)
Enqueue (F, Dequeue (F))

Lista Encadeada

É utilizada como recurso através do qual um conjunto de blocos de memória é


mantido numa ordem lógica, mas não necessariamente física.
Para manter a ordem linear em um conjunto de blocos espalhados por todo o espaço
de memória cada bloco deve armazenar o endereço do bloco seguinte.

L B B B B 
1 2 3 n

Dois endereços merecem atenção especial: o endereço L do bloco inicial (que


permite saber em que parte da memória inicia-se a cadeia) e o endereço  do bloco
“fictício” que vem após o bloco final (indica onde termina a cadeia).

Listas Ordenadas

Uma lista ordenada é uma lista linear tal que, sendo n > 1, temos:
a1  ak, para qualquer 1 < k  n;
ak  an, para qualquer 1  k < n;
a k-1  ak  a k+1, para qualquer 1 < k < n;

60
PROGRAMAÇÃO E ALGORITMO
PROFESSORA: LUCIMARA DE SOUSA TEIXEIRA
CURSO: TÉCNICO EM DESENVOLVIMENTO DE SISTEMA
Se L é uma lista ordenada, podemos garantir que nenhum elemento em L é inferior
a a1 ou superior a na. Além disto, tomando um elemento qualquer no meio da lista, nenhum
elemento a sua esquerda o supera e nenhum elemento a sua direita é inferior a ele.
Entre diversas operações que podem ser realizadas com uma lista ordenada vamos
considerar:
Ins – insere um novo elemento
Rem – Remove
Find – Procura um elemento//
Listas Generalizadas

Uma lista generalizada é uma coleção onde cada elemento é uma partícula indivisível. O
comprimento de uma lista generalizada L é definido como sendo o valor n. Se n = 0,
dizemos que a lista está vazia.

Árvores

Uma árvore é uma coleção finita de n  0 nodos. Se n = 0, dizemos que a árvore é


nula, caso contrário, uma árvore apresenta as seguintes características:
 Existe um nodo especial denominado raiz.
 Os demais são particionados em T1, T2, ... Tk. Estruturas disjuntas de
árvores, denominadas sub-árvores.
O número de sub-árvores de um nodo denomina-se grau. Um nodo que possui grau
0 não possui sub-árvores, denomina-se terminal ou folha.
As raízes das sub-árvores de um nodo denominam-se filhos do nodo, que é o pai
delas.

61

Você também pode gostar