com
Lgica de Programao
e Estruturas de Dados
Rogrio Arajo
http://rogerioaraujo.wordpress.com
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
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
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
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
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque consequat placerat nibh, eu pulvinar lacus lacinia ut. Donec ultricies eleifend luctus. Mauris luctus bibendum sapien.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque consequat placerat nibh, eu pulvinar lacus lacinia ut. Donec ultricies eleifend luctus. Mauris luctus bibendum sapien.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque consequat placerat nibh, eu pulvinar lacus lacinia ut. Donec ultricies eleifend luctus. Mauris luctus bibendum sapien.
Concluso
Quero esclarecer que este material no concorrente de outros que conhecemos na comunidade concurseira de TI. Ele pode e deve ser visto com um recurso disponvel para ser usado em conjunto com os outros de mesma natureza. No substitua os livros conceituados por qualquer material como este no mercado, em hiptese alguma, ou seja, se for para decidir em comprar livros ou guias como este, compre livros! Oriento a vocs que vejam as referncias aqui citadas para possa adquirir livros e acessar os sites. Galera, espero que possa mais uma vez ajud-los como venho tentando fazer com auxlio de meu blog. Minha maior recompensa ser uma opo de qualidade para nossos estudos do dia a dia. Por favor, aproveite este material e consiga seus objetivos! Simbora!!!
Rogrio Arajo
PARTE I
LGICA DE PROGRAMAO
Rogrio Arajo
Captulo 1
Introduo
A persistncia o menor caminho do xito. Charles Chaplin
Rogrio Arajo
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.
Rogrio Arajo
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.
Rogrio Arajo
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
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?
Rogrio Arajo
11
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!
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.
Rogrio Arajo
13
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
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
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.
Rogrio Arajo
15
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.
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
16
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.
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.
Rogrio Arajo
17
varivel := operao que retorna valor ou num1 := fatorial(5) ou num1 fatorial(5) varivel operao que retorna valor Tabela 1.3: Atribuies importantes.
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.
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.
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.
Rogrio Arajo
19
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.
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
20
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.
Rogrio Arajo
21
algoritmo "maiorDeDoisNumerosInteiros"
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 static void main(String[] args) { int num1; int num2; int maior; Scanner entrada = new Scanner(System.in);
entrada.close();
Rogrio Arajo
22
System.out.println("O maior nmero " + maior); } } Exemplo 1.6: Algoritmo do problema 1 na linguagem Java.
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
public static void main(String[] args) { int num; Scanner entrada = new Scanner(System.in);
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).
Rogrio Arajo
24
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).
Um algoritmo apenas correto se produzir o resultado esperado para qualquer entrada informada. Nota 1.14: Algoritmo correto.
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
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
gratificacao 50 50 50 50
imposto 30 30 30
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 static void main(String[] args) { int salarioBase, gratificacao, imposto, salarioReceber;
Rogrio Arajo rogerioaraujo.wordpress.com - twitter: @rgildoaraujo 26
entrada.close();
gratificacao = salarioBase * 5 / 100; imposto = salarioBase * 3 / 100; salarioReceber = salarioBase + gratificacao - imposto;
receber
"
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
27
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
28
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.
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).
Rogrio Arajo
29
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.
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
30
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
31
Rogrio Arajo
32
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
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
Rogrio Arajo
34
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.
var nota1, nota2, nota3: inteiro; peso: real; _nome123: caractere; const PI = 3,14;
CESPE 2010 ABIN Cargo 17: Oficial Tcnico de Inteligncia rea de Suporte a Rede de Dados
Julgue os itens seguintes, relativos a programao bsica.
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
36
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.
FGV 2009 MEC Arquiteto de Sistemas 41 Analise o trecho de algoritmo a seguir, em pseudocdigo:
Rogrio Arajo
37
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
38
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.
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.
Rogrio Arajo
40
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
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
grat 50 50 50 50
Rogrio Arajo
42
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
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
43
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.
FGV 2009 MEC Arquiteto de Sistemas 41 Analise o trecho de algoritmo a seguir, em pseudocdigo:
Rogrio Arajo
44
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
45
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
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.
Rogrio Arajo
47
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
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
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
50
http://rogerioaraujo.wordpress.com