Anda di halaman 1dari 53

http://rogerioaraujo.wordpress.

com

rie Dese!"o#"ime!to de istemas

Lgica de Programao

e Estruturas de Dados
Rogrio Arajo

http://rogerioaraujo.wordpress.com

rie Dese!"o#"ime!to de istemas

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

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

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

Curso de Lgica de Programao e Estruturas de Dados para Concursos

PARTE I
LGICA DE PROGRAMAO

Rogrio Arajo

rogerioaraujo.wordpress.com - twitter: @rgildoaraujo

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

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

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

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 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. formas geomtricas

Rogrio Arajo

rogerioaraujo.wordpress.com - twitter: @rgildoaraujo

15

Curso de Lgica de Programao e Estruturas de Dados para Concursos

Smbolo Incio ou fim do algoritmo

Descrio

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 Dois pontos Igualdade Atribuio Ponto e vrgula Chaves Palavras em negrito

Smbolo : = := ou ; {}

Descrio Declara o tipo de uma varivel no momento de sua criao Atribui um valor a uma constante no momento de sua criao Atribui a uma varivel um valor constante, um valor de outra varivel ou resultado de alguma operao que retorna valor Indica a finalizao de uma linha de instruo

Traz comentrios explicativos do algoritmo e no so considerados no processo de execuo So palavras reservadas que possuem objetivos especficos e no podem ser utilizadas como identificadores para variveis ou 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 varivel := valor ou varivel valor varivel := varivel ou varivel varivel

Exemplo num1 := 15 ou num1 15 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 2 3 4 5 6 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); 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 1 2 3 4 5 6

salarioBase 1000 1000 1000 1000 1000

gratificacao 50 50 50 50

imposto 30 30 30

salarioReceber 1020 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 formato.format(salarioReceber)); } }

receber

"

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 Dois pontos Igualdade Atribuio Ponto e vrgula Chaves Palavras em negrito

Smbolo : = := ou ; {}

Descrio

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 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. formas geomtricas

13 Preencha a tabela abaixo:

Smbolo Incio ou fim do algoritmo

Descrio

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 Dois pontos Igualdade Atribuio Ponto e vrgula Chaves Palavras em negrito

Smbolo : = := ou ; {}

Descrio Declara o tipo de uma varivel no momento de sua criao Atribui um valor a uma constante no momento de sua criao Atribui a uma varivel um valor constante, um valor de outra varivel ou resultado de alguma operao que retorna valor Indica a finalizao de uma linha de instruo Traz comentrios explicativos do algoritmo e no so considerados no processo de execuo So palavras reservadas que possuem objetivos especficos e no podem ser utilizadas como identificadores para variveis ou 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 Leia(salBase) Grat salBase * 5/100 SalReceber salBase + grat Imp Imp SalReceber * 7/100 SalReceber SalReceber imp

salBase 1000 1000 1000 1000 1000

grat 50 50 50 50

imp 73,5 73,5

salReceber 1050 1050 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 Leia(salBase) SalReceber salBase + (salBase * 5/100) Imp SalReceber * 7/100 SalReceber SalReceber imp

salBase 1000 1000 1000 1000

Imp 73,5 73,5

salReceber 1050 1050 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 de impresso de STR 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1

Linha atribuir BRASIL COPA 2014 a STR atribuir 35 a GAMA atribuir 0 a BETA repetir se (resto da diviso de GAMA por 2 igual a 1) imprimir STR atribuir GAMA - 7 a GAMA se GAMA = 7 ento atribuir 1 a BETA at que BETA = 1 repetir se (resto da diviso de GAMA por 2 igual a 1) atribuir GAMA - 7 a GAMA se GAMA = 7 ento atribuir 1 a BETA at que BETA = 1 repetir se (resto da diviso de GAMA por 2 igual a 1)

STR BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014

GAMA 35 35 35 35 35 28 28 28 28 28 21 21 21 21 21

BETA 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Rogrio Arajo

rogerioaraujo.wordpress.com - twitter: @rgildoaraujo

45

Curso de Lgica de Programao e Estruturas de Dados para Concursos

imprimir STR atribuir GAMA - 7 a GAMA se GAMA = 7 ento atribuir 1 a BETA at que BETA = 1 repetir se (resto da diviso de GAMA por 2 igual a 1) atribuir GAMA - 7 a GAMA se GAMA = 7 ento atribuir 1 a BETA at que BETA = 1

BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014 BRASIL COPA 2014

21 14 14 14 14 14 7 7 7

0 0 0 0 0 0 0 1 1

2 2 2 2 2 2 2 2 2

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 1 2 3 4 5

n 10 15 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=1 X=2 ENQUANTO J<10 FAA X=X+1 J=J+2 ENQUANTO J<10 FAA X=X+1 J=J+2 ENQUANTO J<10 FAA X=X+1 J=J+2 ENQUANTO J<10 FAA X=X+1 J=J+2 ENQUANTO J<10 FAA X=X+1 J=J+2 FIM ENQUANTO IMPRIMA X IMPRIMA J

J 1 1 1 1 3 3 3 5 5 5 7 7 7 9 9 9 11 11 11 11

X 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 7 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=10 B=5 C=0 D=0 ENQUANTO A 10 FAA C= A + B D= B - A A= A-1 FIM ENQUANTO
Rogrio Arajo

A 10 10 10 10 10 10 10 9 9

B 5 5 5 5 5 5 5 5

C 0 0 0 15 15 15 15

D 0 0 0 -5 -5 -5
49

rogerioaraujo.wordpress.com - twitter: @rgildoaraujo

Curso de Lgica de Programao e Estruturas de Dados para Concursos

IMPRIMA A IMPRIMA B IMPRIMA C IMPRIMA D

9 9 9 9

5 5 5 5

15 15 15 15

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

Anda mungkin juga menyukai