Você está na página 1de 53

http://rogerioaraujo.wordpress.

com

Srie Desenvolvimento de Sistemas

Lgica de
Programao
e Estruturas
de Dados
Rogrio Arajo
http://rogerioaraujo.wordpress.com

Srie Desenvolvimento de Sistemas

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

Nasci em Braslia/DF, porm, ainda pequeno, meus pais se mudaram para


Teresina/PI, onde cresci com muito sol na moleira. Passei no concurso do
Ministrio Pblico da Unio (MPU) e fui, em janeiro de 2005, lotado inicialmente
na Procuradoria da Repblica do Estado Par em Belm/PA, terra essa que
quando no chove todo dia, chove o dia todo. Essa cidade me acolheu muito
bem e fiz inmeros amigos para levar para a vida toda e, alm disso, ganhei
vrias mes por tabela. Atualmente, estou lotado na Procuradoria da Repblica
Federal (PGR), em Braslia/DF. Resido hoje nessa capital e conquistei novos
grandes amigos tanto conhecidos no novo local de trabalho quanto nessa vida
de concurseiro.
Sou especialista em Governana em TI pela Unieuro (www.unieuro.edu.br) e especialista em
Desenvolvimento de Sistemas Baseados em Software Livre pela UNAMA (Universidade da
Amaznia) (www.unama.br), graduado no curso de Bacharelado em Cincia da Computao pela
UESPI (Universidade Estadual do Piau) (www.uespi.br) e conclui o Curso Tcnico de Processamento
de Dados pela ETEPI (Escola Tcnica Estadual do Piau). No ramo de certificaes, possuo a COBIT
4.1 Foundation Certified e a SCJA (Sun Certified Associate for J2SE).
Mantenho o blog http://rogerioaraujo.wordpress.com. Escrevo posts sobre dicas e assuntos
para os concursos de TI e sou autor de artigos no site do professor Walter Cunha
(www.waltercunha.com).

Abraos e vamos nessa!

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 1


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Sumrio
O nico lugar onde o sucesso vem antes do trabalho no dicionrio.
Albert Einstein

Prefcio ........................................................................................................................... 4

PARTE I LGICA DE PROGRAMAO


Captulo 1 Introduo .......................................................................................................... 7
1.1 Para comear ............................................................................................... 7
1.1.1 Algoritmos, resoluo de problemas e lgica .................................... 8
1.2 Algoritmos ................................................................................................. 10
1.3 Caractersticas de um algoritmo ................................................................ 11
1.4 Fases de um algoritmo .............................................................................. 12
1.5 Mtodo para construo de um algoritmo ................................................. 12
1.6 Regras bsicas para construo de um algoritmo ...................................... 13
1.7 Estruturas que formam um algoritmo ........................................................ 13
1.8 Representaes de um algoritmo ............................................................... 15
1.9 Forma geral de um algoritmo (pseudocdigo) ........................................... 16
1.10 Itens importantes para um algoritmo (pseudocdigo) ............................. 17
1.10.1 Atribuies importantes ................................................................ 17
1.11 Variveis e constantes ............................................................................. 18
1.11.1 Analogia de variveis e constantes com garagens de carros .......... 18
1.11.2 Declarao de variveis e constantes ............................................. 19
1.11.3 Regras para nomes de variveis e constantes ................................ 19
1.12 Algoritmo 1 Encontrar o maior nmero de dois inteiros ....................... 20
1.13 Entrada e sada de dados ......................................................................... 23
1.13.1 Entrada .......................................................................................... 23
1.13.2 Algoritmo 2 Ler um nmero inteiro ............................................. 23
1.13.3 Sada .............................................................................................. 24
1.13.4 Algoritmo 3 Ler um nmero inteiro (modificado) ........................ 24
1.14 Teste de mesa ou teste chins ................................................................. 25
1.14.1 Algoritmo 4 Calcular salrio a receber ........................................ 25
1.15 Questes do captulo ............................................................................... 27
1.16 Respostas das questes do captulo ........................................................ 29
1.17 Questes de concursos............................................................................. 36
1. 18 Gabarito comentado das questes de concursos .................................... 39

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 2


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Captulo 2 Tipos de dados ......................................................................................................


2.1 Simples ...........................................................................................................
2.2 Compostos .....................................................................................................
Captulo 3 O que mais necessrio saber ...............................................................................
3.1 Avaliao de expresses .................................................................................
3.2 Operadores e expresses ...............................................................................
3.3 Estruturas de controle de fluxo........................................................................
3.3.1 Seleo .................................................................................................
3.3.2 Repetio ..............................................................................................
3.4 Mdulos ..........................................................................................................
3.5 Recursividade .................................................................................................
Captulo 5 Algoritmos .............................................................................................................
5.1 Busca ..............................................................................................................
5.2 Pesquisa .........................................................................................................
5.3 Ordenao ......................................................................................................
Captulo 6 Referncias ............................................................................................................

PARTE II ESTRUTURAS DE DADOS


Captulo 1 Pilhas .....................................................................................................................
Captulo 2 Filas ........................................................................................................................
Captulo 3 Listas lineares ........................................................................................................
Captulo 4 rvores ..................................................................................................................
Captulo 5 Grafos ....................................................................................................................
Captulo 6 Referncias ............................................................................................................

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 3


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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:

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 4


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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.

Exemplos dos quadros de exemplos:

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.

Exemplos dos quadros de observaes:

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!!!

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 5


Curso de Lgica de Programao e Estruturas de Dados para Concursos

PARTE I
LGICA DE PROGRAMAO

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 6


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Captulo 1

Introduo
A persistncia o menor caminho do xito.
Charles Chaplin

1.1 Para comear


No nosso dia a dia, nos deparamos com vrias situaes onde precisamos chegar a um
objetivo especfico aplicando um conjunto finito de passos. Por exemplo, para trocar uma lmpada
queimada, precisamos comprar uma lmpada nova, desligar a chave geral (quem vai querer pegar
um choque?), pegar uma escada, tirar a queimada, colocar a nova, ligar a chave geral e ligar o
interruptor da lmpada. Vejam que o objetivo era trocar uma lmpada e para isso traamos passos
para chegar ao resultado final. Bom, temos vrios outros exemplos em nossas vidas, como chegar
ao nosso trabalho pegando um melhor caminho, fazer um bolo, fazer uma faxina, organizar os
livros, etc. Resumindo, o homem um solucionador de pepinos (figura 1.1).

Figura 1.1: Solucionando problemas.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 7


Curso de Lgica de Programao e Estruturas de Dados para Concursos

1.1.1 Algoritmos, resoluo de problemas e lgica

Essa capacidade de resoluo de problemas tambm transportada para a construo de


programas de computador (nota 1.1).

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.

Nota 1.1: Construo de programas de computador e resoluo de problemas.

Para construirmos nossos programas de computador, precisamos entender a importncia do


conceito de algoritmos. Quero frisar que quando falamos de capacidade de resoluo de
problemas, estamos falando de algoritmos.

Quando falamos de capacidade de resoluo de problemas, estamos falando de algoritmos.

Nota 1.2: Algoritmos e resoluo de problemas.

O conceito de algoritmo no de exclusividade da rea da computao e, mais ainda, 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.
Como citado bem no incio, nos deparamos com vrios problemas que exigem solues e
podemos usar algoritmos para resolv-los.

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.

Nota 1.3: Algoritmos, rea da computao e programas de computador.

Figura 1.2: Problema, algoritmo e programa de computador.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 8


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Quando temos um problema para ser traduzido em programa de computador, um passo


importante resolver o problema na forma de algoritmo. A partir disso, j podemos implementar
o algoritmo em alguma linguagem de programao (figura 1.2).
Bom, falamos um pouco de algoritmo e a capacidade de resoluo de problemas, mas como
encaixamos o conceito de lgica junto aos itens citados? O conceito de lgica nos dar justamente
o poder de raciocnio de como resolver uma tarefa ou problema. Na nota 1.4, temos alguns
conceitos sobre lgica e lgica especfica de programao.

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).

Nota 1.4: Conceitos de lgica e lgica de programao.

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.

Figura 1.3: Algoritmo, resoluo de problemas e lgica.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 9


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Figura 1.4: Algoritmo, resoluo de problemas, lgica de programao e programa de


computador.

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).

Nota 1.5: Mais conceitos de algoritmo.

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

O problema solucionado por algoritmo deve ser:


Claro; e
Bem definido.

Nota 1.6: Tipo de problema solucionado por algoritmo.

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?

1.3 Caractersticas de um algoritmo


Todo algoritmo precisa possuir as seguintes caractersticas (figura 1.5):
Entrada: zero ou mais valores de entrada;
Sada: pelo menos um valor produzido;
Clareza ou Definio: cada passo/instruo/etapa de um algoritmo deve ser claro e no
ambguo;
Efetividade: cada passo/instruo/etapa de um algoritmo deve ser executvel; e
Finitude: o algoritmo deve ter um conjunto finito de passos.

Figura 1.5: Caractersticas de um algoritmo.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 11


Curso de Lgica de Programao e Estruturas de Dados para Concursos

1.4 Fases de um algoritmo


Na construo de um algoritmo, estes passa por trs fases fundamentais (figura 1.6):
Entrada: sos os dados que sero processados pelo algoritmo;
Processamento: representa os procedimentos necessrios para se chegar ao resultado
final; e
Sada: so os dados gerados depois do processamento.

Figura 1.6: Fases de um algoritmo.

Fazendo um paralelo com algo corriqueiro, um macarrozinho instantneo seria o dado de


entrada para que seja processado (fervura em 3 minutos e, aps isso, adicionado o tempero),
resultando (sada) em um delicioso prato! Deu at fome!

1.5 Mtodo para construo de um algoritmo


Um mtodo simples para construo de um algoritmo consiste de:
Compreendermos o problema a ser resolvido;
 Por exemplo, o nosso problema pode ser somarmos dois nmeros inteiros;
Identificarmos e definirmos dos dados de entrada;
 Para somarmos dois nmeros inteiros, ns precisaremos (adivinhem ) um primeiro
nmero inteiro 1 (num1) e outro nmero inteiro 2 (num2);
Descrevermos detalhadamente os passos para processar ou transformar os dados de
entrada para chegar ao objetivo do problema;
 Depois da identificao dos dados de entrada, agora traarmos como sero os
passos do processamento que somar num1 com num2;
Identificarmos e definirmos os dados de sada (objetivo do problema)
Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 12
Curso de Lgica de Programao e Estruturas de Dados para Concursos

 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.

1.6 Regras bsicas para construo de um algoritmo


Algumas regras precisam ser seguidas para que possamos desenvolver nosso algoritmo:
Usar somente um verbo por passo/instruo/etapa;
Escrever de uma forma simples para que possa ser entendido facilmente;
 At por pessoas que no trabalham na rea;
Usar frases:
 Curtas; e
 Simples;
Ser objetivo; e
Procurar usar palavras que no tenham sentido dbio.
No decorrer do curso, veremos vrios exemplos de algoritmos e poderemos ver as regras
serem respeitadas. Assim as entenderemos melhor.

1.7 Estruturas de controle de fluxo


Um algoritmo, para chegar a um objetivo, compe-se de uma sequncia finita de passos.
Para que haja a execuo correta desse algoritmo, como organizaremos os seus passos? a que
entra o conceito de controle de fluxo: ele diz respeito a fato de como vamos montar a lgica do
algoritmo utilizando certas estruturas. Fazendo uma analogia, a lgica de controle de fluxo seria
como um orquestrador e as estruturas utilizadas seriam os orquestrados, tudo isso para que o
objetivo almejado seja alcanado pelo resultado final do algoritmo.
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
Estrutura de repetio (ou de iterao ou de loop): um bloco de comandos executado
repetidas vezes at que uma condio seja alcanada, encerrando-o e ento o fluxo de
execuo dar continuidade ao restante das aes.
Em qualquer algoritmo, podemos ter as trs estruturas. Elas sero vistas com detalhes mais
na frente, neste material.
Vamos usar o exemplo 1.1 para entendermos os conceitos vistos agora.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 13


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Algoritmo preparar macarro instantneo;


var
macarro: instantneo;
incio
Coloque o macarro em uma panela com gua;

Enquanto no der 3 minutos de durao faa:


Deixe o macarro fervendo na gua;
Verifique tempo;
Fim do Enquanto

Adicione o tempero que vem junto com o macarro;

Se o tempero no for o suficiente ento:


Adicione ingredientes a mais como legumes, verduras ou queijo;
Fim do Se

Coloque em um prato;
Sirva;
fim

Exemplo 1.1: Algoritmo para preparar macarro instantneo.

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;

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 14


Curso de Lgica de Programao e Estruturas de Dados para Concursos

 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.

Nota 1.7: Estrutura dentro da outra.

No nosso curso, vamos detalhar mais as estruturas que constituem um algoritmo.

Observao 1.1: Detalhes das estruturas que constituem um algoritmo.

1.8 Representaes de um algoritmo


Existem algumas formas de representao de algoritmos. Dentre elas, destaco:
Descrio narrativa:
 Os algoritmos so expressos em uma linguagem natural, podendo dar margem a ms
interpretaes, ambiguidades ou imprecises;
 Linguagem mais informal;
Fluxograma:
 Os algoritmos so expressos graficamente utilizando-se formas geomtricas
padronizadas, cada uma com um significado especfico;
Linguagem algortmica:
 Tambm chamada de pseudocdigo, portugol ou pseudolinguagem;
 Os algoritmos so expressos em uma linguagem intermediria entre a linguagem
natural e uma linguagem de programao.
A descrio narrativa no a melhor opo para representao de algoritmos porque ela
pode gerar ms interpretaes, ambiguidades ou imprecises. Por exemplo, vejamos a frase:
- Samara est estudando para o Senado.
A partir da frase acima, podemos chegar, pelo menos, a duas concluses:
A Samara est estudando para ser uma poltica e concorrer para ser senadora; ou
A Samara est estudando para o concurso do Senado.
A segunda concluso no nosso contexto, no , galera?
Bom, com apenas essa descrio bem informal, no temos certeza nenhuma do que ela quer
dizer se no estivermos no mesmo contexto de quem a descreveu.
Os fluxogramas nada mais so do que representaes grficas de um pseudocdigo.
Visualmente, aps um entendimento do que cada forma geomtrica significa, fica fcil entender o
que prope o algoritmo representado por um fluxograma, porm d um trabalho para mant-lo
porque uma nica correo pode requerer uma reorganizao de muitas instrues. Alguns dos
principais smbolos utilizados em um fluxograma esto listados na tabela 1.1.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 15


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Smbolo Descrio

Incio ou fim do algoritmo

Indica o sentido do fluxo de execuo do algoritmo. Conecta os


objetos grficos

Representa a entrada de dados

Indica clculos e atribuies de valores (processamento)

Indica desvios ou tomadas de decises (Por exemplo: SE isso,


ENTO aquilo)

Representa a sada de dados

Tabela 1.1: Smbolos utilizados em um fluxograma.

A linguagem algortmica, tambm chamada de pseudocdigo, portugol ou


pseudolinguagem, a mais utilizada por ser mais formal do que a descrio narrativa e mais fcil
de manter do que um fluxograma. Alm disso, essa linguagem menos rgida do que uma
linguagem de programao, dando assim liberdade ao programador para rascunhar seus futuros
programas sem ficar engessado na rigidez da linguagem de programao escolhida por ele.

No nosso curso, vamos focar na linguagem algortmica, pois representao mais utilizada
nos concursos.

Observao 1.2: Escolha da linguagem algortmica para nosso curso.

1.9 Forma geral de um algoritmo (pseudocdigo)


Para pseudocdigo, os algoritmos seguem a forma descrita no exemplo 1.2.

Algoritmo <nome do algoritmo>;


const
<identificador> = <valor>;
var
<identificador>: <tipo>;
incio
<lista de comandos ou instrues>;
fim

Exemplo 1.2: Forma geral de um algoritmo (pseudocdigo).

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 16


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Na definio de uma constante, igualamos ela a algum valor usando =. J na definio de


uma varivel, dizemos qual o seu tipo com :.

Nota 1.8: Diferena nas definies de constantes e variveis.

A rea de declarao de constantes e variveis como se fosse o cabealho de um algoritmo


onde definimos os dados de entrada. O corpo de um algoritmo, tambm chamado de bloco de
instrues, contm o processamento onde os dados de entrada podero gerar os dados de sada.

O corpo de um algoritmo onde acontece o processamento chamado de bloco de


instrues.

Nota 1.9: Bloco de instrues.

1.10 Itens importantes para um algoritmo


No decorrer da criao de um algoritmo, notamos alguns smbolos que precisam ser
explicados para serem entendidos (tabela 1.2).

Item Smbolo Descrio

Dois pontos : Declara o tipo de uma varivel no momento de sua criao

Igualdade = Atribui um valor a uma constante no momento de sua criao

Atribui a uma varivel um valor constante, um valor de outra


Atribuio := ou
varivel ou resultado de alguma operao que retorna valor

Ponto e vrgula ; Indica a finalizao de uma linha de instruo

Traz comentrios explicativos do algoritmo e no so


Chaves {}
considerados no processo de execuo
So palavras reservadas que possuem objetivos especficos e
Palavras em
no podem ser utilizadas como identificadores para variveis ou
negrito
constantes
Tabela 1.2: Itens importantes para um algoritmo.

1.10.1 Atribuies importantes

Para o item atribuio, trago alguns exemplos para entendermos seu uso (tabela 1.3).

Atribuio Exemplo

varivel := valor ou varivel valor num1 := 15 ou num1 15

varivel := varivel ou varivel varivel num1 := num2 ou num1 num2

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 17


Curso de Lgica de Programao e Estruturas de Dados para Concursos

varivel := expresso ou varivel expresso total := num1 + num2 ou total num1 + num2

varivel := operao que retorna valor ou


num1 := fatorial(5) ou num1 fatorial(5)
varivel operao que retorna valor
Tabela 1.3: Atribuies importantes.

1.11 Variveis e constantes


Variveis e constantes so recipientes que armazenam informaes de um determinado
tipo. Entende-se recipiente como um endereo de memria onde ser armazenado um valor.

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.

Nota 1.10: Diferena entre variveis e constantes.

Entre algumas semelhanas comuns entre variveis e constantes, est o fato delas serem
identificadas por algum nome.

1.11.1 Analogia de variveis e constantes com garagens de carros

Para podermos entender mais facilmente os conceitos de variveis e constantes, vamos


utilizar uma analogia com garagens de carros (figura 1.7).

Figura 1.7: Variveis e constantes x garagens de carros.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 18


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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.

1.11.2 Declarao de variveis e constantes

A declarao de variveis feita seguinte forma:

var
<identificador1>[, <identificador2>, ...]: <tipo1>;
<identificador3>[, <identificador4>, ...]: <tipo2>;

Os elementos entre [] so opcionais.


J a declarao de constantes difere um pouco:

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.

O que define o tipo de uma constante o tipo do valor atribudo a ela.

Nota 1.11: Tipo de constantes.

1.11.3 Regras para nomes de variveis e constantes

Para identificarmos variveis e constantes, precisamos seguir algumas regras:


No podem:

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 19


Curso de Lgica de Programao e Estruturas de Dados para Concursos

 Ter nomes de palavras reservadas (comandos de uma linguagem de programao


especfica);
 Possuir espaos em branco;
Devem iniciar com:
 Letra; e
 Sublinhado (_);
Podem ter como demais caracteres:
 Letras;
 Nmeros; e
 Sublinhado.

Destaco dois pontos importantes:


Para identificao de constantes, por conveno, usa-se letras maisculas; e
Para algoritmos, a escolha de letras maisculas ou minsculas para nomes de variveis
indiferente.

Nota 1.12: Pontos importantes para identificao de variveis e constantes.

var
nota1, nota2, nota3: inteiro;
peso: real;
_nome123: caractere;
const
PI = 3,14;

Exemplo 1.3: Nomes de variveis e constantes.

1.12 Algoritmo 1 Encontrar o maior nmero de dois inteiros


Vamos colocar em prtica o que vimos at agora. Afinal, na prtica que realmente
aprendemos.
Para nosso primeiro problema, temos que fazer um algoritmo que possa receber dois
nmeros inteiros para encontrar o maior deles. Veremos a soluo em quatro formas diferentes:
Em portugol (nosso principal objetivo);
Em fluxograma (apenas para vermos como seria um);
Em portugol no VisualAlg; e
Na linguagem Java (uma das linguagens mais cobradas em concursos).

No nosso curso, os demais algoritmos para os problemas propostos sero vistos em


portugol, portugol no VisualAlg e na linguagem Java.

Observao 1.3: Representaes de algoritmos nos problemas propostos.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 20


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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}

se (num1 > num1) ento


maior := num1; {define para a varivel maior o valor da varivel num1}
seno
maior := num2; {define para a varivel maior o valor da varivel num2}
fim do se

escreva(O maior nmero , maior);


fim

Exemplo 1.4: Algoritmo do problema 1 em portugol.

Figura 1.7: Fluxograma do problema 1.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 21


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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)

se (num1 > num2) entao


maior <- num1
senao
maior <- num2
fimse

escreva ("O maior nmero : ", maior)


fimalgoritmo

Exemplo 1.5: Algoritmo do problema 1 em portugol no VisualAlg.

public class MaiorDeDoisNumerosInteiros {

public static void main(String[] args) {


int num1;
int num2;
int maior;
Scanner entrada = new Scanner(System.in);

System.out.print("Digite o valor do nmero 1: ");


num1 = entrada.nextInt();

System.out.print("Digite o valor do nmero 2: ");


num2 = entrada.nextInt();

entrada.close();

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 22


Curso de Lgica de Programao e Estruturas de Dados para Concursos

if (num1 > num2)


maior = num1;
else
maior = num2;

System.out.println("O maior nmero " + maior);


}
}

Exemplo 1.6: Algoritmo do problema 1 na linguagem Java.

1.13 Entrada e sada de dados

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.

1.13.2 Algoritmo 2 Ler um nmero inteiro

Algoritmo lerNumeroInteiro;
var
num: inteiro;
incio
escreva(Digite um nmero: );
leia(num);
escreva(O nmero digitado foi , num);
fim

Exemplo 1.7: Algoritmo que l um nmero inteiro.

algoritmo "lerNumeroInteiro"

var
num : inteiro
inicio
escreva ("Digite um nmero: ")
leia (num)
escreva ("O maior nmero : ", maior)

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 23


Curso de Lgica de Programao e Estruturas de Dados para Concursos

fimalgoritmo

Exemplo 1.8: Algoritmo que l um nmero inteiro no VisualAlg.

public class LerNumeroInteiro {

public static void main(String[] args) {


int num;
Scanner entrada = new Scanner(System.in);

System.out.print("Digite um nmero: ");


num = entrada.nextInt();

entrada.close();

System.out.println("O nmero digitado foi " + num);


}
}

Exemplo 1.9: Algoritmo que l um nmero inteiro na linguagem Java.

Necessariamente, para a leitura de entrada de dados, precisamos usar variveis. Vocs


lembram da nossa analogia da sesso 1.11.1 (Analogia de variveis e constantes com garagens de
carros)? Pois ! Quando entramos com um dado (veculo de um modelo), indicamos qual varivel
(garagem) vai receb-lo.

Necessariamente, para a leitura de entrada de dados, precisamos usar variveis.

Nota 1.13: Necessidade de uso de variveis para entrada de dados.

1.13.3 Sada

Para mostrarmos o resultado do processamento do algoritmo, usamos o comando escreva.


O comando recebe um texto e podemos intercal-lo com variveis e constantes, usando vrgulas
(exemplo 1.10).

1.13.4 Algoritmo 3 Ler um nmero inteiro (modificado)

Algoritmo lerNumeroInteiro;
var
num: inteiro;
incio
escreva(Digite um nmero: );

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 24


Curso de Lgica de Programao e Estruturas de Dados para Concursos

leia(num);
escreva(O nmero digitado foi , num);
escreva(O nmero , num, foi digitado);
fim

Exemplo 1.10: Algoritmo que l um nmero inteiro (modificao do exemplo 1.9).

1.14 Teste de mesa ou teste chins


Uma forma para testarmos nossos algoritmos utilizando uma tcnica chamada teste de
mesa ou teste chins. Essa tcnica consiste de acompanharmos passo a passo um algoritmo, de
forma a procurarmos falhas na lgica utilizada para resolver um determinado problema.
Um algoritmo apenas correto se produzir o resultado esperado para qualquer entrada
informada. Pode ocorrer que para certas entradas o resultado seja como o esperado e para outras
entradas, no seja. A aplicao do teste de mesa pode mostrar onde podemos consertar a lgica.

Um algoritmo apenas correto se produzir o resultado esperado para qualquer entrada


informada.

Nota 1.14: Algoritmo correto.

1.14.1 Algoritmo 4 Calcular salrio a receber

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

Exemplo 1.11: Algoritmo que calcula salrio a receber.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 25


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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.

Linha salarioBase gratificacao imposto salarioReceber

1 - - - -

2 1000 - - -

3 1000 50 - -

4 1000 50 30 -

5 1000 50 30 1020

6 1000 50 30 1020

Tabela 1.3: Teste de mesa do exemplo 1.9.

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

Exemplo 1.12: Algoritmo que calcula salrio a receber no VisualAlg.

public class CalcularSalarioReceber {

public static void main(String[] args) {


int salarioBase, gratificacao, imposto, salarioReceber;

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 26


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Scanner entrada = new Scanner(System.in);


DecimalFormat formato = new DecimalFormat("0.00");

System.out.print("Informe o salrio-base: ");


salarioBase = entrada.nextInt();

entrada.close();

gratificacao = salarioBase * 5 / 100;


imposto = salarioBase * 3 / 100;
salarioReceber = salarioBase + gratificacao - imposto;

System.out.println("O salrio a receber " +


formato.format(salarioReceber));
}
}

Exemplo 1.13: Algoritmo que calcula salrio a receber na linguagem Java.

1.15 Questes do captulo


1 Entre outras habilidades, o que exige a construo de programas de computador?
2 Quando falamos de capacidade de resoluo de problemas, estamos falando de algoritmos
(CERTO/ERRADO).
3 Quando se fala em algoritmo, podemos dizer que um programa de computador feito para
resolver computacionalmente um problema especfico (CERTO/ERRADO).
4 Preencha a imagem de acordo com o que foi visto no captulo:

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 27


Curso de Lgica de Programao e Estruturas de Dados para Concursos

5 Preencha a imagem de acordo com o que foi visto no captulo:

6 Algoritmo um conjunto infinito de passos formalmente definidos para resoluo de um


problema ou tarefa (CERTO/ERRADO).
7 O problema solucionado por algoritmo deve ser claro e bem definido (CERTO/ERRADO).
8 Quais so as caractersticas de um algoritmo?
9 Quais so as fases de um algoritmo?
10 Em um algoritmo, podemos usar mais de um verbo por passo/instruo/etapa
(CERTO/ERRADO).
11 Quais so as estruturas de controle de fluxo que constituem um algoritmo?
12 Quais so as representaes de um algoritmo?
13 Preencha a tabela abaixo:

Smbolo Descrio

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 28


Curso de Lgica de Programao e Estruturas de Dados para Concursos

14 Qual a forma geral de um algoritmo?


15 O corpo de um algoritmo, tambm chamado de [...], contm o processamento onde os dados
de entrada podero gerar os dados de sada.
16 Preencha a tabela abaixo:

Item Smbolo Descrio

Dois pontos :

Igualdade =

Atribuio := ou

Ponto e vrgula ;

Chaves {}

Palavras em
negrito

17 Para declarar variveis, fazemos da seguinte forma: <identificador1>[, <identificador2>, ...] =


<tipo1>;. Para constantes, usamos: <identificador1>: <valor1>; (CERTO/ERRADO).
18 O que define o tipo de uma constante?
19 Nomes de variveis e constantes podem comear com letras ou sublinhado (CERTO/ERRADO).
20 Necessariamente, para a leitura de entrada de dados, precisamos usar variveis
(CERTO/ERRADO).
21 O que um algoritmo correto?

1.16 Respostas das questes do captulo


1 Entre outras habilidades, o que exige a construo de programas de computador?
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.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 29


Curso de Lgica de Programao e Estruturas de Dados para Concursos

2 Quando falamos de capacidade de resoluo de problemas, estamos falando de algoritmos


(CERTO/ERRADO).
Gabarito: CERTO.
Para construirmos nossos programas de computador, precisamos entender a importncia do
conceito de algoritmos. Quero frisar que quando falamos de capacidade de resoluo de
problemas, estamos falando de algoritmos.

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.

4 Preencha a imagem de acordo com o que foi visto no captulo:

Quando temos um problema para ser traduzido em programa de computador, um passo


importante resolver o problema na forma de algoritmo. A partir disso, j podemos implementar
o algoritmo em alguma linguagem de programao.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 30


Curso de Lgica de Programao e Estruturas de Dados para Concursos

5 Preencha a imagem de acordo com o que foi visto no captulo:

Reviso dos conceitos:


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.

6 Algoritmo um conjunto infinito de passos formalmente definidos para resoluo de um


problema ou tarefa (CERTO/ERRADO).
Gabarito: ERRADO.
um conjunto finito de passos formalmente definidos para resoluo de um problema ou
tarefa.

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?

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 31


Curso de Lgica de Programao e Estruturas de Dados para Concursos

8 Quais so as caractersticas de um algoritmo?


Entrada: zero ou mais valores de entrada;
Sada: pelo menos um valor produzido;
Clareza ou Definio: cada passo/instruo/etapa de um algoritmo deve ser claro e no
ambguo;
Efetividade: cada passo/instruo/etapa de um algoritmo deve ser executvel; e
Finitude: o algoritmo deve ter um conjunto finito de passos.

9 Quais so as fases de um algoritmo?


Entrada: sos os dados que sero processados pelo algoritmo;
Processamento: representa os procedimentos necessrios para se chegar ao resultado
final; e
Sada: so os dados gerados depois do processamento.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 32


Curso de Lgica de Programao e Estruturas de Dados para Concursos

10 Em um algoritmo, podemos usar mais de um verbo por passo/instruo/etapa


(CERTO/ERRADO).
Gabarito: ERRADO.
Algumas regras precisam ser seguidas para que possamos desenvolver nosso algoritmo:
Usar somente um verbo por passo/instruo/etapa;
Escrever de uma forma simples para que possa ser entendido facilmente;
 At por pessoas que no trabalham na rea;
Usar frases:
 Curtas; e
 Simples;
Ser objetivo; e
Procurar usar palavras que no tenham sentido dbio.
Como visto, devemos usar somente um verbo por passo/instruo/etapa.

11 Quais so as estruturas de controle de fluxo que constituem um algoritmo?


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
Estrutura de repetio (ou de iterao ou de loop): um bloco de comandos executado
repetidas vezes at que uma condio seja alcanada, encerrando-o e ento o fluxo de
execuo dar continuidade ao restante das aes.

12 Quais so as representaes de um algoritmo?


Descrio narrativa:

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 33


Curso de Lgica de Programao e Estruturas de Dados para Concursos

 Os algoritmos so expressos em uma linguagem natural, podendo dar margem a ms


interpretaes, ambiguidades ou imprecises;
 Linguagem mais informal;
Fluxograma:
 Os algoritmos so expressos graficamente utilizando-se formas geomtricas
padronizadas, cada uma com um significado especfico;
Linguagem algortmica:
 Tambm chamada de pseudocdigo, portugol ou pseudolinguagem;
 Os algoritmos so expressos em uma linguagem intermediria entre a linguagem
natural e uma linguagem de programao.

13 Preencha a tabela abaixo:

Smbolo Descrio

Incio ou fim do algoritmo

Indica o sentido do fluxo de execuo do algoritmo. Conecta os


objetos grficos

Representa a entrada de dados

Indica clculos e atribuies de valores (processamento)

Indica desvios ou tomadas de decises (Por exemplo: SE isso,


ENTO aquilo)

Representa a sada de dados

14 Qual a forma geral de um algoritmo?

Algoritmo <nome do algoritmo>;


const
<identificador> = <valor>;
var
<identificador>: <tipo>;
incio
<lista de comandos ou instrues>;
fim

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 34


Curso de Lgica de Programao e Estruturas de Dados para Concursos

15 O corpo de um algoritmo, tambm chamado de bloco de instrues, contm o processamento


onde os dados de entrada podero gerar os dados de sada.

16 Preencha a tabela abaixo:

Item Smbolo Descrio

Dois pontos : Declara o tipo de uma varivel no momento de sua criao

Igualdade = Atribui um valor a uma constante no momento de sua criao

Atribui a uma varivel um valor constante, um valor de outra


Atribuio := ou
varivel ou resultado de alguma operao que retorna valor

Ponto e vrgula ; Indica a finalizao de uma linha de instruo

Traz comentrios explicativos do algoritmo e no so


Chaves {}
considerados no processo de execuo
So palavras reservadas que possuem objetivos especficos e
Palavras em
no podem ser utilizadas como identificadores para variveis ou
negrito
constantes

17 Para declarar variveis, fazemos da seguinte forma: <identificador1>[, <identificador2>, ...] =


<tipo1>;. Para constantes, usamos: <identificador1>: <valor1>; (CERTO/ERRADO).
Gabarito: ERRADO.
Na definio de uma constante, igualamos ela a algum valor usando =. J na definio de
uma varivel, dizemos qual o seu tipo com :. A questo inverteu os smbolos.

18 O que define o tipo de uma constante?


O que define o tipo de uma constante o tipo do valor atribudo a ela.

19 Nomes de variveis e constantes podem comear com letras ou sublinhado (CERTO/ERRADO).


Gabarito: CERTO.

var
nota1, nota2, nota3: inteiro;
peso: real;
_nome123: caractere;
const
PI = 3,14;

20 Necessariamente, para a leitura de entrada de dados, precisamos usar variveis


(CERTO/ERRADO).
Gabarito: CERTO.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 35


Curso de Lgica de Programao e Estruturas de Dados para Concursos

21 O que um algoritmo correto?


Um algoritmo apenas correto se produzir o resultado esperado para qualquer entrada
informada.

1.17 Questes de concursos

IESES 2010 CRM/DF Assistente de Tecnologia da Informao Adaptada

Em relao lgica de programao, considere os pseudocdigos:


I. Um algoritmo corresponde a uma sequncia ordenada, e sem ambiguidade, de aes que
levam soluo de um problema e, quando codificado em uma linguagem de
programao, corresponde a um programa de computador.

CESPE 2010 ABIN Cargo 17: Oficial Tcnico de Inteligncia rea de Suporte a
Rede de Dados

Julgue os itens seguintes, relativos a programao bsica.


79 As estruturas de controle sequenciais, de seleo (ou de deciso) e de repetio (ou de
iterao ou loop) so unidades bsicas na escrita de algoritmos. Todas essas estruturas possuem
condies a serem testadas; algumas realizam atribuio de variveis, mas somente uma pode
inicializar variveis.

FEPESE 2010 SEFAZ/SC Auditor Fiscal da Receita Estadual - Parte III - Tecnologia
da Informao

Assinale a alternativa correta a respeito das variveis e constantes, utilizadas em diversas


linguagens de programao.
A) O nmero de constantes deve ser menor ou igual ao nmero de variveis em um
programa.
B) O nmero de constantes deve ser menor ou igual ao nmero de procedimentos em um
programa.
C) O nmero de constantes deve ser igual ao nmero de variveis em um programa.
D) O nmero de constantes independe da quantidade de variveis em um programa.
E) O nmero de constantes deve ser igual ao nmero de procedimentos em um programa.

FCC 2008 Metr/SP Analista Trainee Cincias da Computao

39 Em relao lgica de programao, considere os pseudocdigos:

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 36


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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.

ESAF 2006 SUSEP Analista Tcnico - Tecnologia da Informao Adaptada

47 Acerca dos conceitos fundamentais de lgica de programao e algoritmos, incorreto afirmar


que
B) compreender o problema, selecionar um mtodo de soluo, descrever a soluo passo a
passo, validar o algoritmo, program-lo e test-lo, nesta seqncia, uma proposta
vivel para analisar um problema.

CESPE 2011 STM Analista de Sistemas

Com relao a algoritmos e lgica de programao, julgue os itens a seguir.


80 Nas estruturas de controle, tais como as estruturas de seleo simples, compostas ou
encadeadas, necessrio verificar as condies para a realizao de uma instruo ou sequncia
de instrues.

FGV 2009 MEC Arquiteto de Sistemas

41 Analise o trecho de algoritmo a seguir, em pseudocdigo:

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 37


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Aps a execuo, a varivel STR ser impressa uma quantidade de vezes igual a:
A) 0
B) 1
C) 2
D) 3
E) 4

CESGRANRIO 2009 Cada da Moeda Analista de Nvel Superior - Negcios em TI

18 Analise o pseudocdigo a seguir.

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

CESPE 2009 CEHAP/PB - Cargo 16: Programador

25 Considere o trecho de cdigo a seguir.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 38


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Ao final da execuo do trecho de cdigo acima, os valores de


A) 7 e 11
B) 6 e 12
C) 8 e 11
D) 9 e 12

38 Considere o trecho de cdigo a seguir.

Ao final da execuo do trecho de cdigo acima, os valores de A, B, C e D, so iguais,


respectivamente, a
A) 9, 5, 15 e !5.
B) 10, 5, 15 e !5.
C) 10, 5, 0 e 0.
D) 10, 5, 15 e 5.

1.18 Gabarito comentado das questes de concursos

IESES 2010 CRM/DF Assistente de Tecnologia da Informao Adaptada

Em relao lgica de programao, considere os pseudocdigos:


Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 39
Curso de Lgica de Programao e Estruturas de Dados para Concursos

I. Um algoritmo corresponde a uma sequncia ordenada, e sem ambiguidade, de aes que


levam soluo de um problema e, quando codificado em uma linguagem de
programao, corresponde a um programa de computador.

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

Julgue os itens seguintes, relativos a programao bsica.


79 As estruturas de controle sequenciais, de seleo (ou de deciso) e de repetio (ou de
iterao ou loop) so unidades bsicas na escrita de algoritmos. Todas essas estruturas possuem
condies a serem testadas; algumas realizam atribuio de variveis, mas somente uma pode
inicializar variveis.

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

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 40


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Estrutura de repetio (ou de iterao ou de loop): um bloco de comandos executado


repetidas vezes at que uma condio seja alcanada, encerrando-o e ento o fluxo de
execuo dar continuidade ao restante das aes.
O seguinte trecho da questo est certo: As estruturas de controle sequenciais, de seleo
(ou de deciso) e de repetio (ou de iterao ou loop) so unidades bsicas na escrita de
algoritmos.
Vamos analisa o restante:
Todas essas estruturas possuem condies a serem testadas: errado porque, como
vimos na citao acima, a estrutura sequencial no precisa testar condies;
algumas realizam atribuio de variveis: errado, pois todas as estruturas podem
realizar atribuio de variveis, ou seja, podem informar um valor para variveis; e
somente uma pode inicializar variveis: certo, pelo fato que apenas a estrutura de
repetio pode inicializar variveis para serem utilizadas dentro da iterao da esturura.
A questo ficaria correta dessa forma:
As estruturas de controle sequenciais, de seleo (ou de deciso) e de repetio (ou de
iterao ou loop) so unidades bsicas na escrita de algoritmos. Uma dessas estruturas no possui
condies a serem testadas; todas realizam atribuio de variveis e apenas uma pode inicializar
variveis.
No se preocupem que vamos destrinchar esse assunto com mais calma. Por enquanto,
fiquem com essas informaes.

Gabarito: ERRADO.

FEPESE 2010 SEFAZ/SC Auditor Fiscal da Receita Estadual - Parte III - Tecnologia
da Informao

Assinale a alternativa correta a respeito das variveis e constantes, utilizadas em diversas


linguagens de programao.
A) O nmero de constantes deve ser menor ou igual ao nmero de variveis em um
programa.
B) O nmero de constantes deve ser menor ou igual ao nmero de procedimentos em um
programa.
C) O nmero de constantes deve ser igual ao nmero de variveis em um programa.
D) O nmero de constantes independe da quantidade de variveis em um programa.
E) O nmero de constantes deve ser igual ao nmero de procedimentos em um programa.

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.

FCC 2008 Metr/SP Analista Trainee Cincias da Computao

39 Em relao lgica de programao, considere os pseudocdigos:

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 41


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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:

Linha salBase grat imp salReceber

Leia(salBase) 1000 - - -

Grat salBase * 5/100 1000 50 - -

SalReceber salBase + grat Imp 1000 50 - 1050

Imp SalReceber * 7/100 1000 50 73,5 1050

SalReceber SalReceber imp 1000 50 73,5 976,5

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 42


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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:

Linha salBase Imp salReceber

Leia(salBase) 1000 - -

SalReceber salBase + (salBase * 5/100) 1000 - 1050

Imp SalReceber * 7/100 1000 73,5 1050

SalReceber SalReceber imp 1000 73,5 976,5

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.

ESAF 2006 SUSEP Analista Tcnico - Tecnologia da Informao Adaptada

47 Acerca dos conceitos fundamentais de lgica de programao e algoritmos, incorreto afirmar


que
B) compreender o problema, selecionar um mtodo de soluo, descrever a soluo passo a
passo, validar o algoritmo, program-lo e test-lo, nesta seqncia, uma proposta
vivel para analisar um problema.

Comentrio da questo

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 43


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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.

CESPE 2011 STM Analista de Sistemas

Com relao a algoritmos e lgica de programao, julgue os itens a seguir.


80 Nas estruturas de controle, tais como as estruturas de seleo simples, compostas ou
encadeadas, necessrio verificar as condies para a realizao de uma instruo ou sequncia
de instrues.

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.

FGV 2009 MEC Arquiteto de Sistemas

41 Analise o trecho de algoritmo a seguir, em pseudocdigo:

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 44


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 45


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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.

CESGRANRIO 2009 Cada da Moeda Analista de Nvel Superior - Negcios em TI

18 Analise o pseudocdigo a seguir.

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.

CESPE 2009 CEHAP/PB - Cargo 16: Programador

25 Considere o trecho de cdigo a seguir.

Ao final da execuo do trecho de cdigo acima, os valores de


A) 7 e 11
B) 6 e 12
C) 8 e 11
D) 9 e 12

Comentrio da questo

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 47


Curso de Lgica de Programao e Estruturas de Dados para Concursos

Linha J X

J=1 1 -

X=2 1 2

ENQUANTO J<10 FAA 1 2

X=X+1 1 3

J=J+2 3 3

ENQUANTO J<10 FAA 3 3

X=X+1 3 4

J=J+2 5 4

ENQUANTO J<10 FAA 5 4

X=X+1 5 5

J=J+2 7 5

ENQUANTO J<10 FAA 7 5

X=X+1 7 6

J=J+2 9 6

ENQUANTO J<10 FAA 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

38 Considere o trecho de cdigo a seguir.

Ao final da execuo do trecho de cdigo acima, os valores de A, B, C e D, so iguais,


respectivamente, a
A) 9, 5, 15 e !5.
B) 10, 5, 15 e !5.
C) 10, 5, 0 e 0.
D) 10, 5, 15 e 5.

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

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 49


Curso de Lgica de Programao e Estruturas de Dados para Concursos

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.

Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 50


http://rogerioaraujo.wordpress.com

Você também pode gostar