Escolar Documentos
Profissional Documentos
Cultura Documentos
com
Lgica de
Programao
e Estruturas
de Dados
Rogrio Arajo
http://rogerioaraujo.wordpress.com
Lgica de
Programao
e Estruturas
de Dados
Rogrio Arajo
Curso de Lgica de Programao e Estruturas de Dados para Concursos
O Autor
O homem aquilo que ele prprio faz.
Andr Malraux
Sumrio
O nico lugar onde o sucesso vem antes do trabalho no dicionrio.
Albert Einstein
Prefcio ........................................................................................................................... 4
Prefcio
A melhor maneira de melhorar o padro de vida est em melhorar o padro de pensamento.
U. S. Andersen
Objetivo
Este material visa ser mais um item auxiliador na luta de vocs por uma vaga no concurso
do seu sonho. Vou me esforar para isso!
Quero trazer uma linguagem informal e bem humorada para que os assuntos abordados
sejam mais bem assimilados e que voc no possa se cansar em l-lo e sim ter o prazer em l-lo.
O foco deste material tentar ensinar como responder questes que abordem Lgica de
Programao e Estruturas de Dados. No vamos aprender a desenvolver algoritmos. Entretanto,
teremos vrios exemplos para nos familiarizarmos com algoritmos e estruturas de dados.
Pblico-alvo
Este material endereado a todos queles que precisam se preparar para concursos que
exijam conhecimentos em Lgica de Programao e Estruturas de Dados.
Organizao geral
Dividi o material em duas partes:
Parte I: Lgica de Programao; e
Parte II: Estruturas de Dados.
Utilizei editais de algumas bancas para trazer os itens de assuntos mencionados acima. Os
itens sero organizados em captulos dentro de sua respectiva parte.
Ao final de cada captulo, teremos questes de minha autoria para reviso do que acabamos
de ver e questes de concursos para sabermos como as bancas esto cobrando e como podemos
resolv-las.
Informaes de apoio
Para nos ajudar no entendimento das explicaes, trago quadros explicativos dos tipos:
Quadros de notas importantes (quadros de cor verde): para notas importantes que
precisam de um destaque melhor;
Quadros de exemplos (quadros de cor azul): para exemplos que enriquecero o
entendimento dos assuntos; e
Quadros de observaes (quadros de cor amarela): para observaes gerais para
explicaes diversas sobre o curso.
Exemplos dos quadros de notas importantes:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque consequat placerat
nibh, eu pulvinar lacus lacinia ut. Donec ultricies eleifend luctus. Mauris luctus bibendum sapien.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque consequat placerat
nibh, eu pulvinar lacus lacinia ut. Donec ultricies eleifend luctus. Mauris luctus bibendum sapien.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque consequat placerat
nibh, eu pulvinar lacus lacinia ut. Donec ultricies eleifend luctus. Mauris luctus bibendum sapien.
Concluso
Quero esclarecer que este material no concorrente de outros que conhecemos na
comunidade concurseira de TI. Ele pode e deve ser visto com um recurso disponvel para ser
usado em conjunto com os outros de mesma natureza.
No substitua os livros conceituados por qualquer material como este no mercado, em
hiptese alguma, ou seja, se for para decidir em comprar livros ou guias como este, compre livros!
Oriento a vocs que vejam as referncias aqui citadas para possa adquirir livros e acessar os sites.
Galera, espero que possa mais uma vez ajud-los como venho tentando fazer com auxlio
de meu blog. Minha maior recompensa ser uma opo de qualidade para nossos estudos do dia
a dia.
Por favor, aproveite este material e consiga seus objetivos!
Simbora!!!
PARTE I
LGICA DE PROGRAMAO
Captulo 1
Introduo
A persistncia o menor caminho do xito.
Charles Chaplin
Lgica pode ser definida como sendo o estudo das leis do raciocnio e do modo de aplic-
las corretamente na demonstrao da verdade (VENANCIO, 1997).
A utilizao da lgica na vida do indivduo constante, visto que ela quem possibilita a
ordenao do pensamento humano (FORBELLONE, 1993).
A lgica de programao consiste em aprender a pensar na mesma sequncia de execuo
dos programas de computador (ESMIN, 2000).
Para finalizarmos, uma revisozinha dos conceitos vistos acima (figuras 1.3 e 1.4):
Quando falamos de capacidade de resoluo de problemas, estamos falando de
algoritmos;
A lgica nos dar o poder de raciocnio de como resolver uma tarefa ou problema;
No caso de construo de um programa de computador, a lgica de programao
consiste em aprender a pensar na mesma sequncia de execuo desse tipo de programa;
e
Um algoritmo no representa, necessariamente, um programa de computador, e sim os
passos necessrios para realizar uma tarefa ou solucionar um problema.
1.2 Algoritmos
Depois do que vimos at agora, o que realmente um algoritmo? Podemos nos focar nos
seguintes conceitos:
um conjunto finito de passos formalmente definidos para resoluo de um problema ou
tarefa;
uma sequncia lgica que pode ter um conjunto de valores de entrada para produzir
um conjunto de valores de sada; e
Corresponde a uma descrio de um padro de comportamento expresso em termos de
um conjunto finito de aes.
Algoritmo a descrio de uma sequncia de passos que deve ser seguida para a realizao
de uma tarefa (ASCENCIO, 1999).
Um algoritmo consiste simplesmente em uma sequncia finita de regras ou instrues que
especificam como determinadas operaes bsicas, executveis mecanicamente, devem ser
combinadas para realizao de uma tarefa desejada (CAMARO, 2003).
Lembram da nota 1.3? Pois ! Por todos os conceitos citados sobre algoritmos, nenhum
deles relaciona diretamente questo de programas de computador. Beleza?
Para que possamos solucionar um problema atravs de um algoritmo, aquele precisa ser:
Claro; e
Bem definido.
Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 10
Curso de Lgica de Programao e Estruturas de Dados para Concursos
Mas por que isso? Porque um dos pontos principais quando criamos um algoritmo a
finitude de seus passos. Como podemos definir um conjunto finito de passos se no sabemos
aonde queremos realmente chegar?
Aps o processamento, teremos que ter o resultado de sada que o total da soma de
num1 com num2;
Construirmos o algoritmo que representa a descrio dos passos;
Aqui praticamente transcrevermos o algoritmo para representar a soluo do
problema;
Testarmos o algoritmo para possveis correes que possam vir a ser necessrias na
lgica proposta;
Finalmente, depois do algoritmo pronto, realizamos testes para ver se a lgica saiu
como deveria ser.
Coloque em um prato;
Sirva;
fim
Pelo exemplo acima, a lgica de controle de fluxo foi feita para prepararmos um macarro
instantneo e, para isso, utilizamos os trs tipos de estruturas vistos nesta seo. Vamos
identificar essas estruturas de controle de fluxo usadas no exemplo 1.1?
Estruturas sequenciais:
Coloque o macarro em uma panela com gua;
Deixe o macarro fervendo na gua;
Verifique tempo;
Adicione o tempero que vem junto com o macarro;
Adicione ingredientes a mais como legumes, verduras ou queijo;
Coloque em um prato;
Sirva;
Estrutura condicional:
Se o tempero no for o suficiente ento:
Adicione ingredientes a mais como legumes, verduras ou queijo;
Fim do Se
Estrutura de repetio:
Enquanto no der 3 minutos de durao faa:
Deixe o macarro fervendo na gua;
Verifique tempo;
Fim do Enquanto
Podemos observar que algumas estruturas sequenciais aparecem tanto na estrutura
condicional quanto na estrutura de repetio (nota 1.7).
Em qualquer algoritmo, podemos ter as trs estruturas. Elas podem aparecer uma dentro da
outra.
Smbolo Descrio
No nosso curso, vamos focar na linguagem algortmica, pois representao mais utilizada
nos concursos.
Para o item atribuio, trago alguns exemplos para entendermos seu uso (tabela 1.3).
Atribuio Exemplo
varivel := expresso ou varivel expresso total := num1 + num2 ou total num1 + num2
A diferena entre variveis e constantes que as informaes contidas nas variveis podem
ser modificadas no decorrer de um algoritmo e as informaes relacionadas a constantes so
declaradas no incio do algoritmo e no podem ser mais modificadas.
Entre algumas semelhanas comuns entre variveis e constantes, est o fato delas serem
identificadas por algum nome.
Imaginem garagens identificadas por alguma numerao. Cada uma recebe apenas um
modelo de carro. Por exemplo, h uma garagem apenas para modelos fusca, outra apenas para
modelos Civic e assim por diante.
Imaginem tambm que h dois tipos de garagens. O primeiro tipo possui rotatividade de
carros, onde, em determinado momento, uma garagem recebe um carro de um modelo e, em
outro momento, pode receber outro carro tambm do mesmo modelo. O segundo tipo so
garagens de pessoas que colecionam carros e que em cada uma h um carro de um modelo,
porm, esse carro nunca sair da sua vaga.
Ento, resumindo a analogia, ns temos:
Informao: carro;
Tipo da informao: modelo do carro;
Variveis: garagem numerada com rotatividade de carros de mesmo modelo;
Constantes: garagem numerada de um colecionador onde ele estaciona um carro de
coleo.
var
<identificador1>[, <identificador2>, ...]: <tipo1>;
<identificador3>[, <identificador4>, ...]: <tipo2>;
const
<identificador1> = <valor1>;
<identificador2> = <valor2>;
<identificadorN> = <valorN>;
Notem que na declarao de variveis, usamos : seguido do tipo (tabela 1.3). Na declarao
de constantes, usamos = seguido de um valor e o que define o tipo de uma constante o tipo
desse valor atribudo a ela.
var
nota1, nota2, nota3: inteiro;
peso: real;
_nome123: caractere;
const
PI = 3,14;
Algoritmo maiorDeDoisNumerosInteiros;
var
num1, num2, maior: inteiro;
incio
escreva(Digite o valor do nmero 1: );
leia(num1); {recebe o primeiro valor de entrada}
escreva(Digite o valor do nmero 2: );
leia(num2); {recebe o segundo valor de entrada}
algoritmo "maiorDeDoisNumerosInteiros"
var
num1 : inteiro
num2 : inteiro
maior : inteiro
inicio
escreva ("Digite o valor do nmero 1: ")
leia (num1)
escreva ("Digite o valor da nmero 2: ")
leia (num2)
entrada.close();
1.13.1 Entrada
Muitas vezes, um algoritmo, para que possa trabalhar, precisa de dados de entrada
informados pelo usurio. Digo muitas vezes porque nem sempre necessrio ter esse tipo de
dados, porm, pelo menos um dado de sada gerado (vejam novamente a seo 1.3
Caractersticas de um algoritmo).
A entrada de dados feita pelo comando leia. Vejam o exemplo 1.7.
Algoritmo lerNumeroInteiro;
var
num: inteiro;
incio
escreva(Digite um nmero: );
leia(num);
escreva(O nmero digitado foi , num);
fim
algoritmo "lerNumeroInteiro"
var
num : inteiro
inicio
escreva ("Digite um nmero: ")
leia (num)
escreva ("O maior nmero : ", maior)
fimalgoritmo
entrada.close();
1.13.3 Sada
Algoritmo lerNumeroInteiro;
var
num: inteiro;
incio
escreva(Digite um nmero: );
leia(num);
escreva(O nmero digitado foi , num);
escreva(O nmero , num, foi digitado);
fim
Vamos utilizar exemplo 1.11 para colocarmos em prtica a tcnica. Para isso, vamos
numerar as linhas do algoritmo. O nosso problema ser calcular o salrio a receber seguindo os
seguintes itens:
Informar o salrio-base;
Haver uma gratificao que 5% do valor do salrio-base;
Haver um imposto que 3% do valor do salrio-base; e
O salrio a receber a soma do salrio-base com a gratificao descontado o imposto.
Algoritmo calcularSalarioReceber;
var
salarioBase, gratificacao, imposto, salarioReceber: real;
incio
1 escreva(Informe o salrio-base: );
2 leia(salarioBase);
3 gratificacao := salarioBase * 5 / 100;
4 imposto := salarioBase * 3 / 100;
5 salarioReceber := salarioBase + gratificacao imposto;
6 escreva(O salrio a receber , salarioReceber);
fim
Para facilitar nossa inspeo do algoritmo linha linha, utilizamos uma tabela onde
preenchemos com os valores de cada varivel em um determinado passo do algoritmo. Para nosso
teste, o salrio-base ser de R$ 1.000,00.
1 - - - -
2 1000 - - -
3 1000 50 - -
4 1000 50 30 -
5 1000 50 30 1020
6 1000 50 30 1020
Para um algoritmo, podemos fazer vrios testes de mesa, informando vrias entradas
diferentes para saber se o algoritmo trabalha de forma consistente para qualquer entrada.
algoritmo "calcularSalarioReceber"
var
salarioBase, gratificacao, imposto, salarioReceber : real
inicio
escreva ("Informe o salrio-base: ")
leia (salarioBase)
gratificacao := salarioBase * 5 / 100
imposto := salarioBase * 3 / 100
salarioReceber := salarioBase + gratificacao - imposto
escreva ("O salrio a receber ", salarioReceber)
fimalgoritmo
entrada.close();
Smbolo Descrio
Dois pontos :
Igualdade =
Atribuio := ou
Ponto e vrgula ;
Chaves {}
Palavras em
negrito
3 Quando se fala em algoritmo, podemos dizer que um programa de computador feito para
resolver computacionalmente um problema especfico (CERTO/ERRADO).
Gabarito: ERRADO.
O conceito de algoritmo no de exclusividade da rea da computao. Um algoritmo
tambm no representa, necessariamente, um programa de computador e sim os passos
necessrios para realizar uma tarefa ou solucionar um problema, seja de que rea for.
7 O problema solucionado por algoritmo deve ser claro e bem definido (CERTO/ERRADO).
Gabarito: CERTO.
Um dos pontos principais quando criamos um algoritmo a finitude de seus passos. Como
podemos definir um conjunto finito de passos se no sabemos aonde queremos realmente chegar?
Smbolo Descrio
var
nota1, nota2, nota3: inteiro;
peso: real;
_nome123: caractere;
const
PI = 3,14;
CESPE 2010 ABIN Cargo 17: Oficial Tcnico de Inteligncia rea de Suporte a
Rede de Dados
FEPESE 2010 SEFAZ/SC Auditor Fiscal da Receita Estadual - Parte III - Tecnologia
da Informao
correto afirmar:
A) Somente Alg1 tem consistncia em sua representao e chega a um resultado.
B) Ambos os algoritmos abordam o mesmo problema e chegam ao mesmo resultado.
C) Somente Alg2 tem consistncia em sua representao e chega a um resultado.
D) O resultado da soluo apresentada por Alg2 maior do que a de Alg1.
E) O resultado da soluo apresentada por Alg2 menor do que a de Alg1.
Aps a execuo, a varivel STR ser impressa uma quantidade de vezes igual a:
A) 0
B) 1
C) 2
D) 3
E) 4
1.var n: inteiro
2.escreva (Digite um nmero inteiro:)
3.leia(n)
4.n<-n+5
5.escreva(n)
Considerando-se que o programa recebeu, como entrada, o valor 10, qual o resultado na tela da
execuo?
A) 0
B) 5
C) 10
D) 15
E) 20
Comentrio da questo
Praticamente, o item acima fez um resumo do captulo. Relembrando, a construo de
programas de computador exige, entre outras habilidades, a capacidade de resolver problemas
atravs da identificao de um conjunto ordenado e finito de etapas e/ou instrues que levam a
sua resoluo.
Tambm podemos utilizar a imagem abaixo para visualizar o que o item citou.
Gabarito: CERTO.
CESPE 2010 ABIN Cargo 17: Oficial Tcnico de Inteligncia rea de Suporte a
Rede de Dados
Comentrio da questo
Vimos que um algoritmo pode ser constitudo por trs tipos de estruturas de controle de
fluxo:
Estrutura sequencial: um bloco de comandos onde cada um deles executado passo a
passo, um aps o outro;
Estrutura condicional (ou de seleo ou de deciso): um bloco de comandos que
executado ou no dependendo de uma determinada condio ser verdadeira ou falsa; e
Gabarito: ERRADO.
FEPESE 2010 SEFAZ/SC Auditor Fiscal da Receita Estadual - Parte III - Tecnologia
da Informao
Comentrio da questo
Quando criamos um algoritmo, o nmero de variveis independe do nmero de constantes.
No h relao de forma alguma entre variveis e constantes.
Gabarito: letra D.
correto afirmar:
A) Somente Alg1 tem consistncia em sua representao e chega a um resultado.
B) Ambos os algoritmos abordam o mesmo problema e chegam ao mesmo resultado.
C) Somente Alg2 tem consistncia em sua representao e chega a um resultado.
D) O resultado da soluo apresentada por Alg2 maior do que a de Alg1.
E) O resultado da soluo apresentada por Alg2 menor do que a de Alg1.
Comentrio da questo
Para essa questo, vamos utilizar a tcnica de teste de mesa ou teste chins para sabermos
o resultado de cada algoritmo. Para ambos algoritmos, o salrio-base ser de R$ 1.000,00. Vamos
nessa?
Teste de mesa para o algoritmo 1:
Leia(salBase) 1000 - - -
Percebam que na linha SalReceber salBase + grat Imp, a varivel Imp no foi inicializada,
ento encaramos o seu valor como 0 (zero).
Vamos ao teste de mesa do algoritmo 2:
Leia(salBase) 1000 - -
Vejam que o algoritmo 2 no possui a varivel Grat como no algoritmo 1, porm, o clculo
do salrio a receber acabou ficando a mesma coisa, ou seja, os dois algoritmos chegam ao mesmo
resultado.
Gabarito: letra B.
Comentrio da questo
A letra B citou uma srie de passos para analisar um problema, exceto por ...program-lo e
test-lo. Essa parte da programao seria a segunda fase de acordo com a imagem acima:
Primeiro, concentramos-nos em analisar e solucionar o problema na forma de algoritmo.
Estaria o texto correto se no houvesse o seguinte trecho: ...program-lo e test-lo. Com isso, a
letra B est errada.
Apenas para fechar, vamos recapitular nosso mtodo simples para construo de um
algoritmo:
Compreendermos o problema a ser resolvido;
Identificarmos e definirmos dos dados de entrada;
Descrevermos detalhadamente os passos para processar ou transformar os dados de
entrada para chegar ao objetivo do problema;
Identificarmos e definirmos os dados de sada (objetivo do problema)
Construirmos o algoritmo que representa a descrio dos passos;
Testarmos o algoritmo para possveis correes que possam vir a ser necessrias na
lgica proposta.
Gabarito: ERRADO.
Comentrio da questo
Mesmo que no tenhamos visto ainda os conceitos de estruturas de seleo compostas ou
encadeadas, saibam que preciso verificar condies para que blocos de comandos sejam
executados.
Gabarito: CERTO.
Aps a execuo, a varivel STR ser impressa uma quantidade de vezes igual a:
A) 0
B) 1
C) 2
D) 3
E) 4
Comentrio da questo
Vamos fazer nosso teste de mesa?
Quantidade
Linha STR GAMA BETA de impresso
de STR
BRASIL
atribuir BRASIL COPA 2014 a STR - - 0
COPA 2014
BRASIL
atribuir 35 a GAMA 35 - 0
COPA 2014
BRASIL
atribuir 0 a BETA 35 0 0
COPA 2014
BRASIL
repetir 35 0 0
COPA 2014
se (resto da diviso de GAMA por 2 BRASIL
35 0 0
igual a 1) COPA 2014
BRASIL
imprimir STR 35 0 1
COPA 2014
BRASIL
atribuir GAMA - 7 a GAMA 28 0 1
COPA 2014
BRASIL
se GAMA = 7 ento atribuir 1 a BETA 28 0 1
COPA 2014
BRASIL
at que BETA = 1 28 0 1
COPA 2014
BRASIL
repetir 28 0 1
COPA 2014
se (resto da diviso de GAMA por 2 BRASIL
28 0 1
igual a 1) COPA 2014
BRASIL
atribuir GAMA - 7 a GAMA 21 0 1
COPA 2014
BRASIL
se GAMA = 7 ento atribuir 1 a BETA 21 0 1
COPA 2014
BRASIL
at que BETA = 1 21 0 1
COPA 2014
BRASIL
repetir 21 0 1
COPA 2014
se (resto da diviso de GAMA por 2 BRASIL
21 0 1
igual a 1) COPA 2014
BRASIL
imprimir STR 21 0 2
COPA 2014
BRASIL
atribuir GAMA - 7 a GAMA 14 0 2
COPA 2014
BRASIL
se GAMA = 7 ento atribuir 1 a BETA 14 0 2
COPA 2014
BRASIL
at que BETA = 1 14 0 2
COPA 2014
BRASIL
repetir 14 0 2
COPA 2014
se (resto da diviso de GAMA por 2 BRASIL
14 0 2
igual a 1) COPA 2014
BRASIL
atribuir GAMA - 7 a GAMA 7 0 2
COPA 2014
BRASIL
se GAMA = 7 ento atribuir 1 a BETA 7 1 2
COPA 2014
BRASIL
at que BETA = 1 7 1 2
COPA 2014
Galera, a questo trouxe uma estrutura de repetio e outra de seleo e, por isso, algumas
linhas foram repetidas e outras omitidas por condies no serem alcanadas. Para facilitar nossa
visualizao do teste de mesa, eu destaquei as repeties mpares com fundo cinza.
Podemos concluir, com nosso teste de mesa, que toda vez que o valor de GAMA for igual a
um nmero mpar, dentre 35 a 14, decrescendo em 7, a varivel STR ser impressa. Quando GAMA
chegar ao valor 7, BETA ser incrementado em 1. Como a condio de sada da estrutura de
repetio que BETA seja 1, ento o fluxo sair da estrutura. Dessa forma, a varivel STR
impressa duas vezes.
Gabarito: letra C.
1.var n: inteiro
2.escreva (Digite um nmero inteiro:)
3.leia(n)
4.n<-n+5
5.escreva(n)
Considerando-se que o programa recebeu, como entrada, o valor 10, qual o resultado na tela da
execuo?
A) 0
B) 5
C) 10
D) 15
Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 46
Curso de Lgica de Programao e Estruturas de Dados para Concursos
E) 20
Comentrio da questo
Linha n
1 -
2 -
3 10
4 15
5 15
Uma observao que fao que na linha 4, a varivel n recebeu o valor anterior dela (10)
acrescido de 5.
Gabarito: letra D.
Comentrio da questo
Linha J X
J=1 1 -
X=2 1 2
X=X+1 1 3
J=J+2 3 3
X=X+1 3 4
J=J+2 5 4
X=X+1 5 5
J=J+2 7 5
X=X+1 7 6
J=J+2 9 6
X=X+1 9 7
J=J+2 11 7
FIM ENQUANTO 11 7
IMPRIMA X 11 7
IMPRIMA J 11 7
Enquanto o valor de J for menor que 10, as instrues contidas dentro da estrutura iro se
repetirem, fazendo que as variveis X e J acumulem valores.
Gabarito: letra A.
Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 48
Curso de Lgica de Programao e Estruturas de Dados para Concursos
Comentrio da questo
Linha A B C D
A=10 10 - - -
B=5 10 5 - -
C=0 10 5 0 -
D=0 10 5 0 0
ENQUANTO A 10 FAA 10 5 0 0
C= A + B 10 5 15 0
D= B - A 10 5 15 -5
A= A-1 9 5 15 -5
FIM ENQUANTO 9 5 15 -5
IMPRIMA A 9 5 15 -5
IMPRIMA B 9 5 15 -5
IMPRIMA C 9 5 15 -5
IMPRIMA D 9 5 15 -5
Enquanto o valor de A for maior que ou igual a 10, as instrues contidas dentro da
estrutura iro se repetirem, fazendo que as variveis C e D acumulem valores e a varivel A tenha
o seu valor subtrado de 1.
Gabarito: letra A.