Aula 00 Tecnologia da Informação (Parte 2) p/ Analista do BACEN - Análise e Desenvolvimento de Sistemas Professor: Diego Carvalho 00000000000 - DEMO Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 AULA 00 SUMÁRIO PÁGINA 01 13 35 72 81 100 Apresentação - Lógica de Programação - Estruturas de Dados - Pesquisa de Dados Lista de Exercícios Comentados Gabarito E aí, querem mais teoria? Mais exercícios? Tem muito mais! Essa é apenas a aula demonstrativa para que vocês conheçam o método e a escrita! Espero que vocês venham comigo... grande abraço ;) 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 1 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 VIII DESENVOLVIMENTO: 1 Fundamentos: lógica de programação; Operadores e expressões, Estruturas de controle, seleção, repetição e desvio. Estruturas de dados; métodos de ordenação, pesquisa e hashing, estrutura de arquivos; IV ENGENHARIA DE SOFTWARE: 1 Conceitos gerais e disciplinas de engenharia de software. 2 Ciclo de vida de software. 8 Processos de desenvolvimento de software. 8.1 Processo interativo e incremental. 8.2 Processos e práticas ágeis de desenvolvimento de software. 8.3 Extreme Programming (XP). 2 SCRUM. 9 Técnicas para planejamento e priorização incremental de escopo em projetos ágeis. 10 Domain-driven Design (DDD). Paradigmas de programação; programação orientada a objetos. 3 Análise e projeto orientado a objetos com UML. 5 Modelagem orientada a objetos. 6 Padrões de projeto. 4 Análise de requisitos funcionais e não-funcionais. 11 Qualidade de software. 11.1 Norma ISO12207. 11.2 Métricas de qualidade: coesão e acoplamento. 5 Arquiteturas para desenvolvimento de aplicativos em dispositivos móveis. III MÉTRICAS DE TAMANHO DE SOFTWARE: 1 Medição e estimativas de software em pontos de função (IFPUG/CPM 4.3 e NESMA). 2 Linguagens e ambientes de programação: Java. 7.2 JSE 7. 7 Arquitetura Java. 7.1 JEE 6. 8.2 Hibernate 3. 8.3 Spring Framework 3. 1.7. 11 Análise estática de código e métricas 11.3 Complexidade ciclomática. 11.4 Ferramenta Sonar. 12 Ferramenta de build: Maven 3. 13 IDE. 13.1 Eclipse 3.7. 14 Ferramentas de gerência de configuração. 15 Práticas ágeis. 15.1 Integração Contínua. 15.2 Test-driven Development (TDD). 15.3 Acceptance Test-driven Development (ATDD) e Especificação por Exemplo. 15.4 Refactoring. 15.5 Entrega contínua. 16 Subversion (SVN). 17 Jenkins. 3 Desenvolvimento de sistemas web: HTML/HTML5, CSS3, Javascript, XML/XSD, JSON. 4 Testes. 4.1 Conceitos: verificação e validação, tipos de teste (unidade, integração, sistema/funcional, aceitação, carga, desempenho, vulnerabilidade, usabilidade). 4.3 Testes de unidade em Java com JUnit 4 e mocking de classes. 4.4 Automatização de testes funcionais com Selenium 2. 4.5 Testes de carga com JMeter 2.9. 3 Arquitetura em três camadas, modelo MVC. 4 Soluções de integração: ServiceOriented Architecture (SOA), web services e REST. IX PORTAIS CORPORATIVOS: 1 Conceitos básicos: colaboração, personalização, gestão do conhecimento, gestão de conteúdo, taxonomia, single signon, integração de sistemas, funcionalidades de web 2.0. VI ACESSIBILIDADE E ENGENHARIA DE USABILIDADE: 1 Engenharia de usabilidade. 1.1 Conceitos básicos. 1.2 Critérios, recomendações e guias de estilo, utilização de Folhas de Estilo (CSS). 1.3 Análise de requisitos de usabilidade. 1.4 Concepção, projeto e implementação de interfaces. 2 Acessibilidade: recomendações de acessibilidade para construção e adaptação de conteúdos do governo brasileiro na internet. 3 Usabilidade para aplicativos em dispositivos móveis 2 Noções de sistemas de busca e indexação de conteúdo, noções de análise das estatísticas de site C# e ASP.NET. 4.2 Concordion 1.4.3. 5 Gestão de defeitos (Bugtracking). 5.1 Mantis. 11.1 PMD, Findbugs e Checkstyle. 11.2 Cobertura. 13.2 Visual Studio 2012. 18 Application Lifecycle Management (ALM). 18.1 Team Foundation Server (TFS) 2012. . 3 Plataforma Sharepoint 2010. 8 Programação Java. 8.1 Wicket 1.4 e Wicket 6 (Ministrado pela Prof. Mayara Rosa). 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 2 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 APRESENTAÇÃO Olá, pessoal. Sejam bem-vindos! Pensem no (talvez) órgão mais sinistro em termos de Tecnologia da Informação. Pois é, nós tivemos concurso em 2013 e provavelmente teremos outro em 2016/2017. Vocês já viram o tamanho do último edital? Pois é, é absurdamente gigantesco – é impossível começar a estudar depois de sair o edital! Se esse é seu sonho, comece a matar o edital imediatamente! DÚVIDAS DOS ALUNOS TOP 5 1. Peço encarecidamente que leiam as instruções dessa primeira aula. Eu sei que é chato, mas assim nós alinhamos nossas expectativas a respeito do curso. 2. Essa é a Aula Demonstrativa (está disponível para todos na internet) – o restante do conteúdo estará disponível na Aula 01 (apenas para aqueles que adquirirem o curso). 00000000000 3. Esse curso não possui vídeo-aulas! Estamos trabalhando para disponibilizá-las em breve, nesse primeiro semestre – talvez ainda não seja possível disponibilizá-las para esse curso. 4. Esse curso contempla somente aquilo que está em seu cronograma. Ele não contempla todo edital de tecnologia da informação, nem outras disciplinas, nem discursivas, estudos de caso, etc. 5. Existem questões de Múltipla Escolha (A, B, C, D, E) e existem questões de Certo/Errado (C, E). Quando não há itens para escolha na questão, é porque a questão é da Modalidade Certo/Errado. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 3 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 O PROFESSOR Uma breve apresentação: meu nome é Diego Carvalho, bacharel em Ciência da Computação pela Universidade de Brasília, pós-graduado em Gestão de Tecnologia da Informação na Administração Pública e Analista de Finanças e Controle da Secretaria do Tesouro Nacional. Já passei por esses perrengues de concurseiro e sei de duas coisas: a estrada é difícil, mas o prêmio compensa! E muito! www.facebook.com/professordiegocarvalho ÁREA ÓRGÃOS PARA OS QUAIS JÁ MINISTREI CURSOS Agência ANCINE ANTAQ ANATEL Jurídica TRT/2 CNMP TRT/3 MP/PB TRT/4 TRT/15 TCE/SP TCM/SP ISS/BA TCE/CE TCM/GO Fiscal TRT/1 TJ/BA CÂMARA DOS DEPUTADOS TCE/RS TCU ISS/SP Outros CEF DATAPREV DEPEN INMETRO Legislativa Auditoria 00000000000 Neste curso, contaremos também com a Professora Mayara Rosa! Ela também é bacharel em Ciência da Computação na Universidade de Brasília (UnB), pósgraduada em Engenharia de Sistemas e recentemente tomou posse como Auditora Federal de Controle Externo no Tribunal de Contas da União (TCU). Ela é a nova professora do Estratégia Concursos! Galera, lá no site, nós – professores – temos algumas métricas para medir se o nosso desempenho nos cursos está bacana! Os alunos podem avaliar com notas e, inclusive, escrever anonimamente o que acharam do professor e do curso. Apresento abaixo o resultado de alguns cursos ministrados recentemente. Portanto, confiem em mim... vocês vão aprender muito com esse curso! Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 4 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 5 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 6 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 7 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 O CONCURSO Concurso do Banco Central do Brasil (BACEN) – 2016/2017 Analista do BACEN – Análise e Desenvolvimento de Sistema (Parte II) 00000000000 REMUNERAÇÃO VAGAS (PROVAVELMENTE) R$ 15.003,70 - EDITAL/AUTORIZAÇÃO: NÃO DISPONÍVEL Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 8 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 O CURSO... Antes de começar o curso, vamos alinhar algumas expectativas! O curso que eu proponho abrangerá todo o conteúdo do meu cronograma, entretanto é impossível e inviável esgotar cada ponto do edital em uma aula escrita. Como se ministra Java em uma aula? Teríamos uma aula de 800 páginas e não chegaríamos nem perto de matar todo conteúdo! Imaginem agora cada ponto do Edital. Portanto, vou direcioná-los pelo conteúdo da melhor maneira possível. O nosso foco é ter uma visão geral, mas objetiva do que de fato cai em prova e, não, elucubrações sobre cada tema. Meu foco aqui é te fazer passar! Eu sei como é complicado ler muita coisa (ainda mais de TI) e vocês têm outras disciplinas para estudar. Logo, vou ser simples e objetivo! Tranquilo? ;) Além disso, o cronograma será seguido com a maior fidelidade possível, mas ele não é estático e poderá haver alterações no decorrer do curso. Eventualmente, posso tirar o conteúdo de uma aula e colocar em outra de forma que o estudo de vocês fique mais lógico, coeso e fácil de acompanhar; posso também inverter a ordem das aulas (adiantar uma aula e atrasar outra) – sem prejudicá-los. Além disso, vamos usar questões de diversas bancas. Enfim, confiem em mim: o curso vai ajudar bastante! Qualquer dúvida, é só me chamar! Caso haja alguma reclamação, problema, sugestão, comentários, erros de digitação, etc, podem enviar para o nosso fórum que eu tento responder da maneira mais tempestiva possível. Ainda duvidam que PDF não dá certo com Concursos de TI? Veja abaixo: 6º Lugar – ISS/Salvador https://www.youtube.com/watch?v=b1w4H3l6mC4#t=1678 00000000000 1º Lugar – TRT/RJ https://www.facebook.com/video.php?v=790616534367672 2º Lugar – ISS/Salvador https://www.youtube.com/watch?v=vmU1n1J-aqQ 1º Lugar – Dataprev http://www.estrategiaconcursos.com.br/blog/entrevista-andre-furtado-aprovado-em-1o-lugarno-concurso-dataprev-para-o-cargo-de-analistaarea-de-tecnologia-da-informacao/ Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 9 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 CRONOGRAM Aula 00 Data 01/02 Tópicos do Edital 01 07/02 VIII DESENVOLVIMENTO: 1 Fundamentos: lógica de programação; Operadores e expressões, Estruturas de controle, seleção, repetição e desvio. Estruturas de dados; métodos de ordenação, pesquisa e hashing, estrutura de arquivos; 02 14/02 IV ENGENHARIA DE SOFTWARE: 1 Conceitos gerais e disciplinas de engenharia de software. 2 Ciclo de vida de software. 8 Processos de desenvolvimento de software. 8.1 Processo interativo e incremental. 8.2 Processos e práticas ágeis de desenvolvimento de software. 8.3 Extreme Programming (XP). 2 SCRUM. 9 Técnicas para planejamento e priorização incremental de escopo em projetos ágeis. 10 Domain-driven Design (DDD). 03 21/02 Paradigmas de programação; programação orientada a objetos. 04 28/02 3 Análise e projeto orientado a objetos com UML. 5 Modelagem orientada a objetos. Aula Demonstrativa 00000000000 05 07/03 6 Padrões de projeto. 06 14/03 4 Análise de requisitos funcionais e não-funcionais. 11 Qualidade de software. 11.1 Norma ISO12207. 11.2 Métricas de qualidade: coesão e acoplamento. 5 Arquiteturas para desenvolvimento de aplicativos em dispositivos móveis. 07 21/03 III MÉTRICAS DE TAMANHO DE SOFTWARE: 1 Medição e estimativas de software em pontos de função (IFPUG/CPM 4.3 e NESMA). Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 10 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 08 20/03 2 Linguagens e ambientes de programação: Java. 7.2 JSE 7. 09 28/03 7 Arquitetura Java. 7.1 JEE 6. 8.2 Hibernate 3. 8.3 Spring Framework 3. 1.7. 11 Análise estática de código e métricas 11.3 Complexidade ciclomática. 11.4 Ferramenta Sonar. 12 Ferramenta de build: Maven 3. 13 IDE. 13.1 Eclipse 3.7. 14 Ferramentas de gerência de configuração. 15 Práticas ágeis. 15.1 Integração Contínua. 15.2 Test-driven Development (TDD). 15.3 Acceptance Test-driven Development (ATDD) e Especificação por Exemplo. 15.4 Refactoring. 15.5 Entrega contínua. 16 Subversion (SVN). 17 Jenkins. 10 14/04 3 Desenvolvimento de sistemas web: HTML/HTML5, CSS3, Javascript, XML/XSD, JSON. 11 21/04 4 Testes. 4.1 Conceitos: verificação e validação, tipos de teste (unidade, integração, sistema/funcional, aceitação, carga, desempenho, vulnerabilidade, usabilidade). 4.3 Testes de unidade em Java com JUnit 4 e mocking de classes. 4.4 Automatização de testes funcionais com Selenium 2. 4.5 Testes de carga com JMeter 2.9. 12 28/04 3 Arquitetura em três camadas, modelo MVC. 4 Soluções de integração: ServiceOriented Architecture (SOA), web services e REST. IX PORTAIS CORPORATIVOS: 1 Conceitos básicos: colaboração, personalização, gestão do conhecimento, gestão de conteúdo, taxonomia, single signon, integração de sistemas, funcionalidades de web 2.0. 00000000000 13 07/05 VI ACESSIBILIDADE E ENGENHARIA DE USABILIDADE: 1 Engenharia de usabilidade. 1.1 Conceitos básicos. 1.2 Critérios, recomendações e guias de estilo, utilização de Folhas de Estilo (CSS). 1.3 Análise de requisitos de usabilidade. 1.4 Concepção, projeto e implementação de interfaces. 2 Acessibilidade: recomendações de acessibilidade para construção e adaptação de conteúdos do governo brasileiro na internet. 3 Usabilidade para aplicativos em dispositivos móveis 14 14/05 2 Noções de sistemas de busca e indexação de conteúdo, noções de análise das estatísticas de site C# e ASP.NET. 4.2 Concordion 1.4.3. 5 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 11 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Gestão de defeitos (Bugtracking). 5.1 Mantis. 11.1 PMD, Findbugs e Checkstyle. 11.2 Cobertura. 13.2 Visual Studio 2012. 18 Application Lifecycle Management (ALM). 18.1 Team Foundation Server (TFS) 2012. . 3 Plataforma Sharepoint 2010. 8 Programação Java. 8.1 Wicket 1.4 e Wicket 6 (Ministrado pela Prof. Mayara Rosa). 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 12 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 AS AULAS E AS DICAS 1 – Parágrafos pequenos: observem que os parágrafos têm, no máximo, cinco linhas. Isso serve para que a leitura não fique cansativa e para que vocês não desanimem no meio do material! Para tal, eu tento dividir as disciplinas de maneira que as aulas fiquem objetivas e pequenas (em termos de teoria), mas extensa (em termos de exercícios). 3 – Destaques em vermelho: quase todos os parágrafos possuem alguma palavra ou frase destacada em negrito e em vermelho. Isso ocorre por suas razões: primeiro, para enfatizar alguma informação importante; segundo, para facilitar a leitura vertical, i.e., após uma primeira leitura, a segunda pode ser passando apenas pelos pontos em destaque. 5 – Linguagem natural: essa é uma aula para ser lida, o que por si só já pode ser cansativo. Tentarei colocar a linguagem mais coloquial possível, simulando uma conversa. Portanto, caso virem frases ou palavras em itálico, ou é uma palavra estrangeira ou é a simulação de uma conversa com vocês. Pode dar um exemplo, professor? Acabei de dar! :-) 7 – Diversas figuras: essas aulas estarão em constante evolução, sempre à procura de explicar as matérias de maneira mais compreensível e com novas informações/questões. Para tal, na minha opinião, é fundamental a utilização de figuras, gráficos, painéis, etc. Em minha experiência, é bem mais fácil memorizar a partir de imagens. 9 – Fazer Exercícios: muitos exercícios é o meio pelo qual vocês se situarão. Como assim, professor? É na hora de fazer os exercícios que vocês descobrirão se estão bem ou mal e avaliarão se precisam estudar mais ou menos. Para tal, há um quadrinho ao final de cada bloco de exercícios para vocês anotarem a quantidade de questões respondidas corretamente ou incorretamente. 00000000000 2 – Visão Geral: não se atenham a detalhes antes de entender o básico. Por que? Ora, não há nada mais irritante do que ir para uma prova que vai cair, por exemplo, RUP, saber vários detalhes, mas não saber as fases e disciplinas. Portanto, caso estejam iniciando os estudos sobre uma matéria, foquem em saber o básico para depois se especializarem. 4 – Façam muitos exercícios: ler várias bibliografias é muito trabalhoso e, geralmente, não vale o custobenefício. Acredito que o que funciona mesmo é entender o básico, depois fazer muitos exercícios e, eventualmente, caso encontrarem algo que não souberem, pesquisem-no separadamente. Além disso, você vai pegando as “manhas” da banca. 6 – Façam resumos: essa dica somente serve caso vocês tenham disponibilidade. Caso haja pouco tempo para estudar ou pouco tempo até a prova, não compensa! Se não, façam resumos organizados, pois eles economizarão um bom tempo de estudo em suas próximas provas e sempre que descobrirem novas informações, insiram-nas no resumo. 8 – Revisem antes da prova: não adianta querer estudar coisas novas até o último minuto antes da prova e não revisar o que estudou há um mês. Vocês irão esquecer e irão se irritar na hora da prova por não lembrarem de conceitos simples. Tirem uma semana para revisar seus resumos, decorarem algumas coisas e, certamente, irão mais confiantes para a prova. 10 – Simulado Final: ora, fazer um bloco de questões depois de estudar a teoria é tranquilo. No entanto, lembrem-se que a memória de vocês não é infinita e vocês têm um milhão de outras coisas para estudar e decorar. Portanto, se possível, ao fim do curso faremos um simulado com questões escolhidas que foram comentadas dentro das aulas. Bem, pessoal! É isso... sejam bem-vindos! Espero que vocês curtam e tenham uma leitura leve e despojada da aula, mas com muito foco, atenção e dedicação. Qualquer dúvida, podem entrar em contato comigo – ficarei feliz em ajudá-los. Bons estudos, estou torcendo por vocês! Fiquem agora com algumas mensagens de incentivo para animá-los ;-) Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 13 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 R$15.003,70 R$15.003,70 R$15.003,70 R$15.003,70 R$15.003,70 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 14 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 LÓGICA DE PROGRAMAÇÃO Vamos falar sobre Lógica de Programação! Em primeiro lugar, por que chamamos de lógica? Porque é necessário utilizar a lógica para resolver um problema computacional. Como assim? Precisamos de um encadeamento ou uma sequência de pensamentos para alcançar um determinado objetivo. Nós podemos descrever esses pensamentos como uma sequência de instruções ou passos. Professor, o que seria uma instrução? É um conjunto de regras ou normas definidas para a realização ou emprego de algo, indicando ao computador uma ação elementar a ser executada. Bem, esses conceitos são muito básicos e vocês já devem estar bastante acostumados, por isso vamos ver rapidamente. Um conjunto de instruções formam um algoritmo: Algoritmo: conjunto predeterminado e bem definido de passos destinados à solução de um problema, com um número finito de etapas. 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 15 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Professor, você pode dar um exemplo? Sim, o exemplo mais comum da bibliografia é mostrado acima: uma receita de bolo. Observem que para fazer um bolo (solucionar um problema), é necessário seguir uma sequência de passos finitos e predeterminados. No fim das contas, grosso modo, um software nada mais é do que a representação de um algoritmo. Professor, todos os programas que eu utilizo no meu computador são representações de algoritmos? Sim! Inclusive o joguinho de Paciência que eu curto? Sim! Mas até mesmo os apps que eu utilizo no celular? Eles também! Todos os softwares (de desktop, notebook, smartphone, tablet, geladeira, relógio, entre outros) são representações de algoritmos. Então, basta que eu escreva um conjunto de passos em qualquer língua que o meu computador realiza a tarefa que eu quiser? Claro que não! Computadores não entendem, por exemplo, português – eles entendem 0 e 1 (na verdade, eles necessário entendem presença ou ausência de tensão elétrica), portanto representar esses algoritmos por meio de uma linguagem de programação. Como assim, professor? Pessoal, um computador é uma grande calculadora. No entanto, ele é “burro”, ele só calcula o que mandam-no calcular. linguagens de programação surgem como uma solução para abstrair a comunicação entre seres humanos e computadores. Na imagem ao lado, a ordem do programador era: “Computador, escreva na tela: Hello World!”. Bem, acho que todo mundo já ouviu falar alguma vez na vida em Código-Fonte. Todo software possui um código-fonte, que é um conjunto de palavras organizado de acordo com regras específicas, formando um ou mais algoritmos. Essas palavras que formam o algoritmo são escritas utilizando uma linguagem de programação. Esse código-fonte é traduzido e posteriormente executado pelo usuário. 00000000000 Pessoal... se eu não souber uma linguagem de programação, eu posso escrever um algoritmo utilizando um pseudocódigo! O que é isso, professor? É uma forma genérica de escrever um algoritmo, utilizando uma linguagem simples sem necessidade de conhecer a sintaxe de nenhuma linguagem de programação. Tratase de um pseudo-código, logo não pode ser executado em um sistema real. Um tipo de pseudocódigo é o Portugol (ou Português Estruturado)! Trata-se de uma simplificação extrema da língua portuguesa, limitada a pouquíssimas palavras e Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 16 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 estruturas que têm significado pré-definido, na medida em que deve seguir um padrão. Emprega uma linguagem intermediária entre a linguagem natural e a linguagem de programação para descrever os algoritmos. Embora o Portugol seja uma linguagem bastante simplificada, possui todos os elementos básicos e uma estrutura semelhante à de uma linguagem de programação de computadores. Portanto resolver problemas com português estruturado pode ser uma tarefa tão complexa quanto a de escrever um programa em uma linguagem de programação qualquer. início <instruções> se <teste> então <instruções> senão <instruções> fim_se fim Além do português estruturado, é possível representar um algoritmo também por meio de um Fluxograma! O que é isso, professor? É uma espécie de diagrama utilizado para documentar processos, ajudando o leitor a visualizá-los, compreendê-los mais facilmente e encontrar falhas ou problemas de eficiência, como mostra a imagem abaixo. 00000000000 Os principais símbolos de um Fluxograma são: Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 17 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Bem, nós vimos então que podemos representar algoritmos por meio de Linguagens de Programação, Pseudocódigo ou Fluxogramas! Em geral, os fluxogramas são mais utilizados para leigos; pseudocódigo para usuários um pouco mais avançados; e linguagens de programação para os avançados. Agora vamos falar de conceitos mais específicos: constantes, variáveis e atribuições! Constantes são dados que simplesmente não variam com o tempo, i.e., possuem sempre um valor fixo invariável. Por exemplo: a constante matemática é (sempre foi e sempre será) igual a 3.141592 – esse valor não mudará! Professor, e o que seria uma variável? São espaços na memória do computador reservados para guardar informações ou dados! Em geral, variáveis são associadas a posições na Memória RAM, armazenando diversos tipos de dados que veremos com detalhes à frente! Ela possui um nome identificador que abstrai o nome do endereço na memória que ela ocupa. Observem a imagem abaixo: existe uma variável (espaço em memória) chamada numeroDaConta em que se armazena o valor 4823. 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 18 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 O conteúdo de uma variável pode ser alterado, consultado ou apagado diversas vezes durante a execução de um algoritmo, porém o valor apagado é perdido. Bacana, mas e a atribuição? Bem, trata-se de uma notação para associar um valor a uma variável, i.e., armazenar o conteúdo no endereço de memória específico. Cada linguagem de programação adotará uma maneira de representá-la. Aqui, não iremos nos prender a uma linguagem de programação, vamos adotar o Português Estruturado! A notação de atribuição é representada por uma seta apontando para a esquerda do valor para o identificador, podendo ser: Variável Variável Variável Constante: Variável: Expressão: dataDeNascimento 1988 endereço cidade idade (anoAtual anoDeNascimento) Vamos falar agora sobre tipos de dados! Em geral, eles se dividem em dois grupos: Dados Elementares e Dados Estruturados. Só uma informação antes de começar: os dados elementares também podem ser chamados de simples, básicos, nativos ou primitivos. Já os dados estruturados também podem ser chamados de compostos. Bacana? Vamos para as definições! Tipos Elementares: são aqueles que não podem ser decompostos. Ora, se eu disser que o Pedrinho tem 10 anos, é possível decompor esse valor de idade? Não, logo é um tipo elementar. Há diversos tipos elementares, dependendo da linguagem de programação utilizada. No entanto, os principais são: o Inteiro: também conhecido como Integer, são similares aos números inteiros da matemática, i.e., sem parte fracionária. Podem ser positivos, negativos ou nulos. Ex: -2% de crescimento do PIB; 174 km de distância; 0 ºC de Temperatura; etc. 00000000000 o Real: também conhecido como Float (Ponto Flutuante), são similares aos números reais da matemática, i.e., possuem parte fracionária. Ex: 3,141592 é a constante de PI; 9,81 m/s² de Aceleração Gravitacional; raiz quadrada de 7; etc. o Caractere: também conhecido como Literal ou Char, são representações de letras, dígitos e símbolos. Quando colocadas em conjunto, formam um tipo estruturado chamado String ou Cadeia de Caracteres. Ex: ‘a’, ‘$’, ‘5’, ‘D’, etc. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 19 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 o Lógico: também conhecido como Boolean, são representações de valores lógicos – verdadeiro/falso, ligado/desligado, sim/não, etc. São extremamente importantes na programação, principalmente na verificação de condições. Tipos Estruturados: são aqueles que podem ser decompostos. Ora, se eu disser que o nome da bola da copa é Brazuca, é possível decompor esse nome? Sim, basta dividi-lo em caracteres: ‘B’, ‘r’, ‘a’, ‘z’, ‘u’, ‘c’, ‘a’. Há infinitos tipos estruturados1, pois eles são a combinação de vários outros, o mais comum é: o Cadeia de Caracteres: também conhecido como String, são representações de sequências de caracteres, incluindo ou não símbolos. Pode ser uma palavra, frase, código, etc, por exemplo: “O rato roeu a roupa do rei de Roma”. Pessoal, quase todas as linguagens de programação possuem instruções para Leitura e Escrita de dados. A Escrita é uma Saída de Dados (Output) que busca mostrar informações ao usuário na tela do computador (Ex: Escrever (idade)). A Leitura é uma Entrada de Dados (Input) que busca ler dados do usuário por meio teclado (Ex: Ler (idade)). Para manipular dados, utilizamos operadores: Operadores Aritméticos: são utilizados para obter resultados numéricos, preocupando-se com a priorização2. Operador Multiplicação Divisão Adição Subtração Exponenciação 00000000000 Símbolo * / + ^ Prioridade 2º 2º 3º 3º 1º Operadores Relacionais: são utilizados para comparar números e literais, retornando valores lógicos. Operador Igual a Símbolo = 1 Uma música em .mp3, um texto em .pdf, uma imagem em jpg são todos tipos estruturados. Em operadores que possuem a mesma prioridade, o que aparecer primeiro deve ser priorizado! Além disso, parênteses possuem sempre a maior prioridade! 2 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 20 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Diferente de Maior que Menor que Maior ou igual a Menor ou igual a <> ou != > < >= <= Operadores Lógicos: servem para combinar resultados de expressões, retornando valores lógicos (verdadeiro ou falso). Operador/Símbolo E/And Ou/Or Não/Not Bacana! Com isso, já podemos falar sobre Estruturas de Decisão e Repetição! Galera, as Estruturas de Decisão (também chamadas de Estruturas de Seleção) permitem interferir na sequência de instruções executadas dependendo de uma condição de teste, i.e., o algoritmo terá caminhos diferentes para decisões diferentes. A melhor maneira de se visualizar isso é com fluxogramas: Caso 1: Se (Média >= 5.0) Então Aluno = Aprovado 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 21 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Caso 2: Se (Média >= 5.0) Então Aluno = Aprovado Senão Aluno = Reprovado Caso 3: Se (Média >= 5.0) Então Se (Média >= 7.0) Então Aluno = Aprovado Senão Aluno = Recuperação Senão Aluno = Reprovado 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 22 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Caso 4: Selecione (Número) Caso 13: Presidente Caso 20: Presidente Caso 28: Presidente Caso 43: Presidente Caso 45: Presidente Caso 50: Presidente Caso Outro: Presidente Fim Selecione Dilma Pastor Everaldo Levy Fidelix Eduardo Jorge Aécio Neves Luciana Genro Nulo 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 23 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Portanto vimos quatro casos de Estrutura de Decisão: Se-Então, Se-Então-Senão, -Então (Aninhados) e Caso-Selecione. Agora veremos Estruturas de Repetição! Elas são utilizadas quando se deseja que um determinado conjunto de instruções ou comandos sejam executados por uma quantidade definida ou indefinida de vezes, ou enquanto um estado se mantenha ou seja alcançado. Vejamos: Caso 1: Repetição Pré-Testada (Testa-se antes de processar!) Enquanto (Votos < 1.000) Faça Votos = Votos + 1 Fim-Enquanto 00000000000 Caso 2: Repetição com Variável de Controle Para Votos de 1 até 1000 Faça Votos = Votos + 1 Fim-Enquanto Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 24 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Caso 3: Repetição Pós-Testada (Testa-se depois de processar!) Faça Votos = Votos + 1 Enquanto (Votos < 1.000) 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 25 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Por fim, vamos falar sobre recursividade! O que é isso, professor? Formalmente, é uma maneira de solucionar um problema por meio da instanciação de instâncias menores do mesmo problema. Grosso modo, a recursão é uma técnica em que uma função chama a si mesma. Eu gosto de pensar em recursividade por meio de imagens como as apresentadas abaixo. Nós dissemos que se trata de uma função que chama a si mesma e, daí, temos o nosso primeiro problema. Se ela chama a si mesma sempre, não entra em um loop infinito? Sim, por isso é necessário um caso-base (solução trivial), i.e., um caso mais simples em que é utilizada uma condição de parada, que resolve o problema. Toda recursividade é composta por um caso base e pelas chamadas recursivas. Vantagens da recursividade: torna a escrita do código mais simples, elegante e, muitas vezes, menor. Desvantagens da recursividade: quando o loop recursivo é muito grande, é consumida muita memória nas chamadas a diversos níveis de recursão, tendo em vista que cada chamada recursiva aloca memória para os parâmetros, variáveis locais e de controle. 00000000000 Em muitos casos, uma solução iterativa gasta menos memória e torna-se mais eficiente em termos de performance do que usar recursão. Galera, vocês se lembram que estudaram fatorial na escola? Pois é, fatorial é uma operação matemática em que um número natural (representado por n!) é o produto de todos os inteiros positivos menores ou iguais a n. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 26 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Professor, facilita aí. Já saí da escola há muito tempo. Ok! Fatorial(5) = 5x4x3x2x1; uma maneira diferente de escrever isso é: Fatorial(5) = 5 x Fatorial(4), que é o mesmo que dizer 5 x (4 x Fatorial(3)), que é o mesmo que 5 x (4 x (3 x Fatorial(2))), que é o mesmo que 5 x (4 x (3 x (2 x Fatorial(1)))). E agora, professor? Agora é a vez do caso-base! No caso do fatorial, o caso-base é: Fatorial(1) = 1. Todas essas instâncias ficaram em memória aguardando a chegada do caso-base e agora retornamos com os resultados. Dado o casobase, temos que: 5 x (4 x (3 x (2 x Fatorial(1)))), logo 5 x (4 x (3 x (2 x 1))) = 120. Vejam ao lado a imagem da a execução de um código representando o fatorial. Por fim, gostaria de mencionar que existem dois tipos de recursividade: direta e indireta. De modo bem simples, a recursividade direta é aquela tradicional em que uma função chama a si mesma (Ex: Função A chama a Função A); a recursividade indireta é aquela alternativa em que uma função chama outra função que chama a primeira (Ex: Função A chama a Função B, que chama a Função A). 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 27 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (FCC - 2010 -SP - Agente de Defensoria - Analista de Sistemas É utilizada para avaliar uma determinada expressão e definir se um bloco de código deve ou não ser executado. Essa é a definição da estrutura condicional: a) For b) If...Then...Else c) While d) Do...While e) Next Comentários: Pessoal... falou em estrutura condicional, trata-se de decisão! Logo, é o If-Then-Else. Gabarito: B (FCC 0 – TRT/SE - Analista de Sistemas Objeto que se constitui parcialmente ou é definido em termos de si próprio. Nesse contexto, um tipo especial de procedimento (algoritmo) será utilizado, algumas vezes, para a solução de alguns problemas. Esse procedimento é denominado: a) Recursividade. b) Rotatividade. c) Repetição. d) Interligação. e) Condicionalidade. 00000000000 Comentários: Por fim, vamos falar sobre recursividade! O que é isso, professor? Formalmente, é uma maneira de solucionar um problema por meio da instanciação de instâncias menores do mesmo problema. Grosso modo, a recursão é uma técnica em que uma função chama a si mes . Eu gosto de pensar em recursividade por meio de imagens como as apresentadas abaixo. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 28 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Conforme vimos em aula, trata-se da recursividade. Gabarito: A (FCC – TJ/SE - Analista de Sistemas A recursividade na programação de computadores envolve a definição de uma função que: a) apresenta outra função como resultado. b) aponta para um objeto. c) aponta para uma variável. d) chama uma outra função. e) pode chamar a si mesma. Comentários: Por fim, vamos falar sobre recursividade! O que é isso, professor? Formalmente, é uma maneira de solucionar um problema por meio da instanciação de instâncias menores do mesmo problema. Grosso modo, a recursão é uma técnica em que uma função chama a si mes . Eu gosto de pensar em recursividade por meio de imagens como as apresentadas abaixo. Conforme vimos em aula, ela pode chamar a si mesma. Gabarito: E (CESPE - 2011 - -ES - Técnico de Informática - Específicos Uma estrutura de repetição possibilita executar um bloco de comando, repetidas vezes, até que seja encontrada uma dada condição que conclua a repetição. 00000000000 Comentários: Essa é uma definição perfeita da Estrutura de Repetição. Gabarito: C (CESPE - 2010 - MPU - Analista de Informática - Desenvolvimento de Sistemas Se um trecho de algoritmo tiver de ser executado repetidamente e o número de repetições for indefinido, então é correto o uso, no início desse trecho, da estrutura de repetição Enquanto. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 29 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Comentários: Perfeito! Lembram-se que nós temos três estruturas de repetição? Pois é, o Enquanto-Faça serve para esse propósito! Gabarito: C (CESPE - 2013 - CNJ - Programador de computador) No fluxograma abaixo, se A = 4, B = 4 e C = 8, o resultado que será computado para Área é igual a 32. Comentários: 00000000000 Vamos lá: P = (4+4+8)/2 Lembrem-se que parênteses sempre têm prioridade: P = (16)/2 = 8 Seguimos para S = P*(P-A)*(P-B)*(P-C): S = 8*(8-4)*(8-4)*(8-8) Simplificando: S = 8*4*4*0 = 0 S <= 0, logo: Não é Triângulo! Gabarito: E Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 30 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (CESPE - 2011 - -ES - Analista Judiciário - Análise de Banco de Dados Específicos Em uma estrutura de repetição com variável de controle, ou estrutura PARA, a verificação da condição é realizada antes da execução do corpo da sentença, o que impede a reescrita desse tipo de estrutura por meio de estrutura de repetição pós-testada. Comentários: Nós temos três tipos de estruturas de repetição com variável de controle: While/Enquanto, For/Para e Do-While/Faça-Enquanto - as duas primeiras prétestadas e a última pós-testada. De fato, a estrutura For/Para é pré-testada. No entanto, é possível reescrevê-la como uma Estrutura de Repetição Pós-Testada (DoWhile/Faça-Enquanto), de forma que elas sejam equivalentes. Gabarito: E (CESPE 0 – DETRAN/ES - Analista de Sistemas O método de recursividade deve ser utilizado para avaliar uma expressão aritmética na qual um procedimento pode chamar a si mesmo, ou seja, a recursividade consiste em um método que, para que possa ser aplicado a uma estrutura, aplica a si mesmo para as subestruturas componentes. Comentários: Por fim, vamos falar sobre recursividade! O que é isso, professor? Formalmente, é uma maneira de solucionar um problema por meio da instanciação de instâncias menores do mesmo problema. Grosso modo, a recursão é uma técnica em que uma função chama a si mesma. Eu gosto de pensar em recursividade por meio de imagens como as apresentadas abaixo. 00000000000 Conforme vimos em aula, está perfeito. Gabarito: C (CESPE - 2013 – CPRM - Analista de Sistemas Na implementação de recursividade, uma das soluções para que se evite o fenômeno de terminação do programa – que possibilita a ocorrência de um looping infinito – é definir uma função ou condição de terminação das repetições. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 31 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Comentários: Nós dissemos que se trata de uma função que chama a si mesma e, daí, temos o nosso primeiro problema. Se ela chama a si mesma sempre, não entra em um loop infinito? Sim, por isso é necessário um caso-base (solução trivial), i.e., um caso mais simples em que é utilizada uma condição de parada, que resolve o problema. Toda recursividade é composta por um caso base e pelas chamadas recursivas. Conforme vimos em aula, está perfeito novamente. Gabarito: C 10. (CESPE 4 – ANATEL - Analista de Sistemas A recursividade é uma técnica que pode ser utilizada na implementação de sistemas de lógica complexa, com a finalidade de minimizar riscos de ocorrência de defeitos no software. Comentários: Por fim, vamos falar sobre recursividade! O que é isso, professor? Formalmente, é uma maneira de solucionar um problema por meio da instanciação de instâncias menores do mesmo problema. Grosso modo, a recursão é uma técnica em que uma função chama a si mesma. Eu gosto de pensar em recursividade por meio de imagens como as apresentadas abaixo. Conforme vimos em aula, definitivamente essa não é uma finalidade da recursividade. Gabarito: E 00000000000 11. (CESPE 1 – TJ/ES - Analista de Sistemas Tanto a recursividade direta quanto a indireta necessitam de uma condição de saída ou de encerramento. Comentários: Por fim, gostaria de mencionar que existem dois tipos de recursividade: direta e indireta. De modo bem simples, a recursividade direta é aquela tradicional em que uma função chama a si mesma (Ex: Função A chama a Função A); a recursividade indireta é aquela alternativa em que uma função chama outra função que chama a primeira (Ex: Função A chama a Função B, que chama a Função A). Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 32 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Conforme vimos em aula, existe recursividade direta e indireta, mas ambas precisam de um caso-base, que é uma condição de saída, para não ficar em loop infinito. Gabarito: C 12. (CONSULPLAN - 2012 - TSE - Programador de computador Observe o trecho de pseudocódigo. A estrutura será executada até que X seja igual ao seguinte valor a) – 1 b) – 3 Comentários: Vamos lá: X = 13 No laço, ele afirma: X = X-2 X = 13-2 = 11 Segue esse loop novamente: X = 11-2 = 9 X = 9-2 = 7 X = 7-2 = 5 X = 5-2 = 3 X = 3-2 = 1 X = 1-2 = -1 X = -1-2 = -3 < -1, logo saímos do loop! 00000000000 Portanto, a estrutura é executada até X = -3. Gabarito: B 13. (CONSULPLAN - 2012 - TSE - Programador de computador Observe o trecho de pseudocódigo, que mostra o emprego da estrutura de controle enquanto ... faça ... Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 33 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 A opção que utiliza a estrutura para ... faça ... correspondente, que gera o mesmo resultado, é: a) Para n de 0 até 6 faça imprimir(n); b) Para n de 0 até 7 faça imprimir(n); Comentários: Vejamos: N = 0 e irá até N < 7, logo N de 0 a 6. Gabarito: A 14. (FEPESE - 2010 - SEFAZ-SC - Auditor Fiscal da Receita Estadual - Parte III Tecnologia da Informação Assinale a alternativa correta a respeito das variáveis e constantes, utilizadas em diversas linguagens de programação. a) O número de constantes deve ser menor ou igual ao número de variáveis em um programa. b) O número de constantes deve ser menor ou igual ao número de procedimentos em um programa. c) O número de constantes deve ser igual ao número de variáveis em um programa. d) O número de constantes independe da quantidade de variáveis em um programa. e) O número de constantes deve ser igual ao número de procedimentos em um programa. 00000000000 Comentários: Galera, não há essa relação! O número de constantes e variáveis são independentes. Gabarito: D Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 34 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 15. (NUCEPE 5 – SEDUC/PI - Analista de Sistemas O código abaixo é usado para calcular o fatorial de números. Assinale a alternativa CORRETA sobre esse código: função fatorial(n) { se (n <= 1) retorne 1; senão retorne n * fatorial(n-1); } a) Este é um exemplo de procedimento. b) O comando retorne pode ser retirado do código e a função terá o mesmo efeito. c) Exemplo clássico de recursividade. d) Não é possível chamar a função fatorial dentro dela mesma. e) O resultado da função sempre retornará um valor elevado a ele mesmo (valor ^ valor). Comentários: Em muitos casos, uma solução iterativa gasta menos memória e torna-se mais eficiente em termos de performance do que usar recursão. Galera, vocês se lembram que estudaram fatorial na escola? Pois é, fatorial é uma operação matemática em que um número natural (representado por n!) é o produto de todos os inteiros positivos menores ou iguais a n. 00000000000 Conforme vimos em aula, trata-se de um exemplo clássico de recursividade. Gabarito: C ACERTEI Prof. Diego Carvalho ERREI www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 35 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 ESTRUTURAS DE DADOS Pessoal, um programa pode ser visto como uma especificação formal da solução de um problema. Wirth expressa esse conceito por meio de uma equação: PROGRAMA = ALGORITMO + ESTRUTURA DE DADOS Nosso foco aqui é em Estruturas de Dados! Na evolução do mundo computacional, um fator extremamente importante trata da forma de armazenar informações. De nada adianta o enorme desenvolvimento de hardware e software se a forma de armazenamento e tratamento de dados não evoluir harmonicamente. E é por isso que as estruturas de dados são tão fundamentais. As estruturas de dados, na maioria dos casos, baseiam-se nos tipos de armazenamento vistos dia a dia, i.e., nada mais são do que a transformação de uma forma de armazenamento já conhecida e utilizada no mundo real adaptada para o mundo computacional. Por isso, cada tipo de estrutura de dados possui vantagens e desvantagens e cada uma tem sua área de atuação otimizada. Bem, não vou enrolar muito explicando o que é uma Estrutura de Dados! A melhor forma de saber é vendo exemplos. Antes disso, eu só gostaria de falar sobre um conceito importante: Dados Homogêneos e Heterogêneos. Os primeiros são aqueles que possuem só um tipo básico de dados (Ex: Inteiros); os segundos são aqueles que possuem mais de um tipo básico de dados (Ex: Inteiros + Caracteres). 00000000000 Entenderam? Existem estruturas de dados que tratam de dados homogêneos, i.e., todos os dados são apenas de um tipo básico, tais como Vetores! Ora, em um vetor, todos os elementos são do mesmo tipo. Existem estruturas de dados que tratam de dados heterogêneos, i.e., os dados são de tipos básicos diferentes, tais como Listas! Ora, em uma lista, todos os elementos são, em geral, de tipos básicos diferentes. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 36 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 VETORES E MATRIZES Um Vetor é uma estrutura de dados linear que necessita de somente um índice para que seus elementos sejam indexados. É uma estrutura homogênea, portanto armazena somente uma lista de valores do mesmo tipo. Ele possui alocação estática, com dados armazenados em posições contíguas de memória e permite o acesso direto ou aleatório a seus elementos. Observem que, diferentemente das listas, filas e pilhas, ele vem praticamente embutido em qualquer linguagem de programação. E a Matriz, professor? Não muda muita coisa! Trata-se de um arranjo bidimensional ou multidimensional de alocação estática e sequencial. Ela necessita de um índice para referenciar a linha e outro para referenciar a coluna para que seus elementos sejam endereçados. Da mesma forma que um vetor, uma matriz é definida com um tamanho fixo, todos os elementos são do mesmo tipo, cada célula contém somente um valor e os tamanhos dos valores são os mesmos. Os elementos ocupam posições contíguas na memória. A alocação dos elementos pode ser feita colocando os elementos linha-por-linha ou coluna-por-coluna. 00000000000 MATRIZ 2X7 E VETOR (7 POSIÇÕES) Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 37 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (FCC - 2009 - -PA - Analista Judiciário - Tecnologia da Informação Considere uma estrutura de dados do tipo vetor. Com respeito a tal estrutura, é correto que seus componentes são, característicamente, a) heterogêneos e com acesso FIFO. b) heterogêneos e com acesso LIFO. c) heterogêneos e com acesso indexado-sequencial. d) homogêneos e acesso não indexado. e) homogêneos e de acesso aleatório por intermédio de índices. Comentários: Vetores possuem componentes homogêneos, i.e., todos os dados são de apenas um único tipo básico de dados. Ademais, seu acesso é aleatório por meio de índices! Bem, seria mais correto dizer que seu acesso é direto. Gabarito: E (CETAP - 2010 - - - Analista de Sistemas Matrizes são estruturas de dados de n-dimensões. Por simplicidade, chamaremos de matrizes as matrizes bidimensionais numéricas (que armazenam números inteiros). Sendo assim, marque a alternativa INCORRETA. 00000000000 a) Uma matriz de m linhas e n colunas contêm (m * n) dados. b) Uma matriz pode ser representada utilizando listas ligadas. c) A soma dos elementos de uma matriz pode ser calculada fazendo dois laços aninhados, um sobre as linhas e o outro sobre as colunas. d) A soma de duas matrizes de m linhas e n colunas resulta em uma matriz de 2*m linhas e 2*n colunas. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 38 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 e) O produto de duas matrizes de n linhas e n colunas resulta em uma matriz de n linhas e n colunas. Comentários: (a) Perfeito, são M x N colunas; (b) Perfeito, podem ser utilizadas listas ligadas; (c) Perfeito, um laço para as linhas e outro para as colunas; (d) Não, a soma de uma Matriz 3x5 com outra Matriz 3x5 resulta em uma Matriz 3x5; (e) Perfeito, uma Matriz 2x2 multiplicada por outra Matriz 2x2 resulta em uma Matriz 2x2. Gabarito: D (CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da Informação - Arquitetura de Tecnologia Os dados armazenados em uma estrutura do tipo matriz não podem ser acessados de maneira aleatória. Portanto, usa-se normalmente uma matriz quando o volume de inserção e remoção de dados é maior que o volume de leitura dos elementos armazenados. Comentários: Podem, sim, ser acessados de maneira aleatória ou direta, por meio de seus índices. Ademais, usa-se normalmente uma matriz quando o volume de leitura de elementos armazenados é maior que o volume de inserção e remoção de dados. Ora, é possível fazer acesso direto, logo é eficiente mesmo com alto volume de leitura. Gabarito: E (CESPE - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da Informação Entre alguns tipos de estrutura de dados, podem ser citados os vetores, as pilhas e as filas. 00000000000 Comentários: Perfeito! Questão extremamente simples. Gabarito: C Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 39 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (CESPE - 2011 - EBC - Analista - Engenharia de Software Vetores são utilizados quando estruturas indexadas necessitam de mais que um índice para identificar um de seus elementos. Comentários: Não! Se são necessários mais de um índice, utilizam-se Matrizes! Vetores necessitam apenas de um índice. Gabarito: E (CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Vetores podem ser considerados como listas de informações armazenadas em posição contígua na memória. Comentários: Perfeito! Vetores podem ser considerados como listas de informações? Sim! As informações (dados) são armazenadas em posição contígua na memória? Sim, em geral são armazenados de forma contígua. Gabarito: C (CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas Uma posição específica de um vetor pode ser acessada diretamente por meio de seu índice. Comentários: Perfeito! Observem que vetores são diferentes de listas, nesse sentido. Eu posso acessar qualquer elemento diretamente por meio de seu índice. 00000000000 Gabarito: C ACERTEI Prof. Diego Carvalho ERREI www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 40 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 LISTA ENCADEADA Também conhecida como Lista Encadeada Linear, Lista Ligada Linear ou Linked List, trata-se de uma estrutura de dados dinâmica formada por uma sequência encadeada de elementos chamados nós, que contêm dois campos: campo de informação e campo de endereço. O primeiro armazena o real elemento da lista e o segundo contém o endereço do próximo nó da lista. Esse endereço, que é usado para acessar determinado nó, é conhecido como ponteiro. A lista ligada inteira é acessada a partir de um ponteiro externo que aponta para o primeiro nó na lista, i.e., contém o endereço do primeiro nó 3. Por ponteiro "externo", entendemos aquele que não está incluído dentro de um nó. Em vez disso, seu valor pode ser acessado diretamente, por referência a uma variável. O campo do próximo endereço do último nó na lista contém um valor especial, conhecido como NULL, que não é um endereço válido. Esse ponteiro nulo é usado para indicar o final de uma lista. Uma lista é chamada Lista Vazia ou Lista Nula caso não tenha nós ou tenha apenas um nó sentinela. O valor do ponteiro externo para esta lista é o ponteiro nulo. Uma lista pode ser inicializada com uma lista vazia. 00000000000 Suponha que seja feita uma mudança na estrutura de uma lista linear, de modo que o campo próximo no último nó contenha um ponteiro de volta para o primeiro nó, em vez de um ponteiro nulo. Esse tipo de lista é chamado Lista Circular (ou 3 O endereço do primeiro nó pode ser encapsulado para facilitar possíveis futuras operações sobre a lista sem a necessidade de se conhecer sua estrutura interna. O primeiro elemento e o último nós são muitas vezes chamados de Sentinela. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 41 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Fechada4), i.e., a partir de qualquer ponto, é possível atingir qualquer outro ponto da lista. Certinho, até agora? Observe que uma Lista Circular não tem um primeiro ou último nó natural. Precisamos, portanto, estabelecer um primeiro e um último nó por convenção. Uma convenção útil é permitir que o ponteiro externo para a lista circular aponte para o último nó, e que o nó seguinte se torne o primeiro nó. Assim podemos incluir ou remover um elemento convenientemente a partir do início ou do final de uma lista. 00000000000 Embora uma lista circularmente ligada tenha vantagens sobre uma lista linear, ela ainda apresenta várias deficiências. Não se pode atravessar uma lista desse tipo no sentido contrário nem um nó pode ser eliminado de uma lista circularmente ligada sem se ter um ponteiro para o nó antecessor. Nos casos em que tais recursos são necessários, a estrutura de dados adequada é uma lista duplamente ligada. 4 Se Listas Circulares são conhecidas como Listas Fechadas, as Listas Abertas são todas aquelas que são NãoCirculares. Por fim: da mesma forma que há Listas Circulares Simples, há também Listas Circulares Duplas. Nesse caso, o ponteiro anterior do primeiro elemento aponta para o último elemento e o ponteiro posterior do último elemento aponta para o primeiro elemento. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 42 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Cada nó numa lista desse tipo contém dois ponteiros, um para seu predecessor e outro para seu sucessor. Na realidade, no contexto de listas duplamente ligadas, os termos predecessor e sucessor não fazem sentido porque a lista é totalmente simétrica. As listas duplamente ligadas podem ser lineares ou circulares e podem conter ou não um nó de cabeçalho. Podemos considerar os nós numa lista duplamente ligada como consistindo em três campos: um campo info que contém as informações armazenadas no nó, e os campos left e right, que contêm ponteiros para os nós em ambos os lados. Dado um ponteiro para um elemento, pode-se acessar os elementos adjacentes e, dado um ponteiro para o último elemento, pode-se percorrer a lista em ordem inversa. Existem cinco operações básicas sobre uma lista encadeada: Criação, em que se cria a lista na memória; Busca, em que se pesquisa nós na lista; Inclusão, em que se insere novos nós na lista em uma determinada posição; Remoção, em que se elimina um elemento da lista; e, por fim, Destruição, em que se destrói a lista junto com todos os seus nós. IMPORTANTE Pilhas e Filas são subespécies de Listas. No entanto, cuidado na hora de responder questões! De maneira genérica, Pilhas e Filas podem ser implementadas como Listas. No entanto, elas possuem características particulares de uma lista genérica. Ok? Precisamos falar um pouco sobre Fragmentação! O que é isso, professor? Galera, falou em fragmentação, lembrem-se de desperdício de espaço disponível de memória. O fenômeno no qual existem vários blocos disponíveis pequenos e nãocontíguos é chamado fragmentação externa porque o espaço disponível é desperdiçado fora dos blocos alocados. 00000000000 Esse fenômeno é o oposto da fragmentação interna, no qual o espaço disponível é desperdiçado dentro dos blocos alocados, como apresenta a imagem abaixo. Sistemas Operacionais possuem uma estrutura de dados que armazena informações sobre áreas ou blocos livres (geralmente uma lista ou tabela). Uma lista encadeada elimina o problema da fragmentação extern Por que? Porque mantém os arquivos, cada um, como uma lista encadeada de blocos de disco. Dessa forma, uma parte de cada bloco é usada como ponteiro para o próximo Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 43 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 bloco e o restante do bloco é usado para dados. Uma vantagem desse tipo de alocação é que o tamanho do arquivo não precisa ser conhecido antes de sua criação, já que cada bloco terá um ponteiro para o próximo bloco. Galera... e o acesso a uma lista? Lista é uma estrutura de acesso sequencial, i.e., é por nó para acessar um dado específico. Logo, é proporcional preciso percorrer ao número de elementos – Acesso O(n). E os Vetores? Eles são uma estrutura de acesso direto, i.e., pode-se acessar um elemento diretamente. Portanto, não precisa percorrer elemento por elemento (Acesso O(1))5. 00000000000 5 No Acesso Sequencial: quanto mais ao fim, maior o tempo para acessar; no Acesso Direto: todos os elementos são acessados no mesmo tempo. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 44 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) O tempo de busca de um elemento em uma lista duplamente encadeada é igual à metade do tempo da busca de um elemento em uma lista simplesmente encadeada. Comentários: Não! Apesar de permitir que se percorra a lista em ambas as direções, em média ambas possuem o mesmo tempo de busca de um elemento. Gabarito: E (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) Em algumas implementações, uma lista vazia pode ter um único nó, chamado de sentinela, nó cabeça ou header. Entre suas possíveis funções, incluise simplificar a implementação de algumas operações realizadas sobre a lista, como inserir novos dados, recuperar o tamanho da lista, entre outras. Comentários: Perfeito! Ele simplifica a implementação de algumas operações porque se guarda o endereço do primeiro e do último elemento de uma estrutura de dados de modo que o programador não precisa conhecer a estrutura de implementação da lista para realizar suas operações. 00000000000 Gabarito: C (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) Estruturas ligadas como listas encadeadas superam a limitação das matrizes que não podem alterar seu tamanho inicial. Comentários: Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 45 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Perfeito! Listas Encadeadas admitem alocação dinâmica, em contraste com as matrizes. Gabarito: C (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) As listas duplamente encadeadas diferenciam-se das listas simplesmente encadeadas pelo fato de, na primeira, os nós da lista formarem um anel com o último elemento ligado ao primeiro da lista. Comentários: Não, a diferença é que Listas Duplamente Encadeadas possuem dois ponteiros, que apontam para o nó sucessor e para o nó predecessor e Listas Simplesmente Encadeadas possuem apenas um ponteiro, que aponta para o nó sucessor. Gabarito: E (FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas - E) Numa lista singularmente encadeada, para acessar o último nodo é necessário partir do primeiro e ir seguindo os campos de ligação até chegar ao final da lista. Comentários: Perfeito. Se é uma lista singularmente encadeada, é necessário percorrer cada elemento um-a-um até chegar ao final da lista. Gabarito: C 00000000000 (CESPE - 2011 - EBC - Analista - Engenharia de Software) Uma lista é uma coleção de elementos do mesmo tipo dispostos linearmente, que podem ou não seguir determinada organização. As listas podem ser dos seguintes tipos: de encadeamento simples, duplamente encadeadas e ordenadas. Comentários: Uma lista é, por natureza, heterogênea, i.e., seus elementos são compostos por tipos de dados primitivos diferentes. A questão afirmou que a lista é uma coleção de elementos do mesmo tipo. E ela está certa, veja só o peguinha da questão: Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 46 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Eu crio um tipo composto por dois tipos de dados diferentes: tipoEstrategia = {curso: caractere; duracao: inteiro}. Observe que o tipo tipoEstrategia é composto por tipos de dados primitivos diferentes (caractere e inteiro). Agora eu crio uma lista ListaEstrategia: tipoEstrategia. Veja que todos os elementos dessa lista terão o mesmo tipo (tipoEstrategia). Em outras palavras: a Lista Heterogênea é composta por elementos do mesmo tipo que, em geral, são compostos por mais de um tipo primitivo. Além disso, as listas podem ser simplesmente encadeadas, duplamente encadeadas e ordenadas. E ainda podem ser circulares. Observem que alguns autores consideram Listas Ordenadas como um tipo de lista! Como, professor? Ela é uma lista em que seus elementos são ordenados (crescente ou decrescente). Gabarito: C (CESPE - ANAC - Técnico Administrativo - Informática) Em uma lista circular duplamente encadeada, cada nó aponta para dois outros nós da lista, um anterior e um posterior. Comentários: Perfeito! Há dois ponteiros: uma para o nó anterior e um para o nó posterior. Gabarito: C (CESPE - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da Informação) A principal característica de uma lista encadeada é o fato de o último elemento da lista apontar para o elemento imediatamente anterior. Comentários: 00000000000 Não, o último elemento da lista não aponta para nenhum outro nó em uma lista não-circular. Gabarito: E (CESPE - TCE-AC - Analista de Controle Externo - Processamentos de Dados) Uma lista encadeada é uma coleção de nodos que, juntos, formam uma ordem linear. Se é possível os nodos se deslocarem em ambas as direções na lista, diz-se que se trata de uma lista simplesmente encadeada. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 47 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Comentários: Se é possível os nodos se deslocarem em ambas as direções na lista, diz-se que se trata de uma lista duplamente encadeada. Gabarito: E 10. (CESPE - 2008 – HEMOBRÁS – Técnico de Informática) Uma estrutura do tipo lista, em que é desejável percorrer o seu conteúdo nas duas direções indiferentemente, é denominado lista duplamente encadeada. Comentários: Perfeito, é exatamente isso! Gabarito: C 11. (CESPE - 2010 – TRE/MT – Analista de Sistemas – C) Uma lista duplamente encadeada é uma lista em que o seu último elemento referencia o primeiro. Comentários: Não, isso se trata de uma Lista Circular! Gabarito: E 12. (CESPE - 2006 – SGA/AC – Analista de Sistemas) O principal problema da alocação por lista encadeada é a fragmentação. 00000000000 Comentários: Não! Em geral, a alocação por lista encadeada elimina a fragmentação. Gabarito: E 13. (CESPE – MCT – Analista de Sistemas) O armazenamento de arquivos em disco pode ser feito por meio de uma lista encadeada, em que os blocos de disco são ligados por ponteiros. A utilização de lista encadeada elimina completamente o problema de fragmentação interna. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 48 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Comentários: Não, ela elimina a fragmentação externa! Gabarito: E 14. (CESPE – FINEP – Analista de Sistemas) Uma lista encadeada é uma representação de objetos na memória do computador que consiste de uma sequência de células em que: a) cada célula contém apenas o endereço da célula seguinte. b) cada célula contém um objeto e o tipo de dados da célula seguinte. c) o último elemento da sequência aponta para o próximo objeto que normalmente possui o endereço físico como not null. d) cada célula contém um objeto de algum tipo e o endereço da célula seguinte. e) a primeira célula contém o endereço da última célula. Comentários: Cada célula contém um objeto de algum tipo e o endereço da célula seguinte! Gabarito: D 15. (CESPE - 2010 – BASA – Analista de Sistemas) Em uma lista encadeada, o tempo de acesso a qualquer um de seus elementos é constante e independente do tamanho da estrutura de dados. 00000000000 Comentários: Claro que não! Em uma busca sequencial, o tempo de acesso é proporcional ao tamanho da estrutura de dados, i.e., quanto mais ao final da lista, maior o tempo de acesso! Por que, professor? Porque a lista é acessada sequencialmente (ou seja, é preciso percorrer elemento por elemento) e, não, diretamente (ou seja, pode-se acessar de modo direto). Um vetor tem acesso direto, portanto seu tempo de acesso é igual independentemente do tamanho da estrutura. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 49 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Gabarito: E 16. (CESPE - 2010 – INMETRO – Analista de Sistemas – C) Considere que Roberto tenha feito uso de uma lista encadeada simples para programar o armazenamento e o posterior acesso aos dados acerca dos equipamentos instalados em sua empresa. Considere, ainda, que, após realizar uma consulta acerca do equipamento X, Roberto precisou acessar outro equipamento Y que se encontrava, nessa lista, em posição anterior ao equipamento X. Nessa situação, pela forma como os ponteiros são implementados em uma lista encadeada simples, o algoritmo usado por Roberto realizou a consulta ao equipamento Y sem reiniciar a pesquisa do começo da lista. Comentários: Não! Infelizmente, ele teve que reiniciar a pesquisa a partir do primeiro elemento da lista, na medida em que ele não pode voltar. Por que, professor? Porque se trata de uma lista encadeada simples e, não, dupla. Portanto, a lista só é percorrida em uma única direção. Gabarito: E 17. (FCC – TRE/AM – Analista de Sistemas) Os dados contidos em uma lista encadeada estão: a) b) c) d) e) ordenados seqüencialmente. sem ordem lógica ou física alguma. em ordem física e não, necessariamente, em ordem lógica. em ordem lógica e, necessariamente, em ordem física. em ordem lógica e não, necessariamente, em ordem física. 00000000000 Comentários: A Ordem Física é sua disposição na memória do computador e a Ordem Lógica é como ela pode ser lida e entendida. Ora, a ordem em que ela se encontra na memória pouco importa, visto que cada sistema operacional e cada sistema de arquivos tem sua maneira. Portanto, trata-se da ordem lógica e, não, necessariamente física. Gabarito: E Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 50 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 18. (FCC - 2010 – DPE/SP – Analista de Sistemas) Uma estrutura de dados que possui três campos: dois ponteiros e campo de informação denomina-se: a) b) c) d) e) lista encadeada dupla. Lista encadeada simples. pilha. fila. vetor. Comentários: Trata-se da Lista Encadeada Dupla: dois ponteiros (Ant e Prox) e um campo de informação. Gabarito: A 19. (CESPE - 2010 – TRE/MT – Analista de Sistemas) O algoritmo para inclusão de elementos em uma pilha é usado sem nenhuma alteração para incluir elementos em uma lista. Comentários: Galera... uma pilha pode ser implementada por meio de uma lista! Ademais, o algoritmo para inclusão de elementos de ambas necessita do primeiro elemento (ou topo). Portanto, questão correta! Gabarito: C ACERTEI Prof. Diego Carvalho 00000000000 www.estrategiaconcursos.com.br 00000000000 - DEMO ERREI Pág. 51 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 PILHAS A Pilha é um conjunto ordenado de itens no qual novos itens podem ser inseridos e eliminados em uma extremidade chamada topo. Novos itens podem ser colocados no topo da pilha (tornando-se o novo primeiro elemento) ou os itens que estiverem no topo da pilha poderão ser removidos (tornando-se o elemento mais abaixo o novo primeiro elemento). Também conhecida como Lista LIFO (Last In First Out), basta lembrar de uma pilha de pratos esperando para serem lavados, i.e., o último a entrar é o primeiro a sair. A ordem em que os pratos são retirados da pilha é o oposto da ordem em que eles são colocados sobre a pilha e, como consequência, apenas o prato do topo da pilha está acessível. 00000000000 As Pilhas oferecem três operações básicas: push, que insere um novo elemento no topo da pilha; pop, que remove um elemento do topo da pilha; e top (também conhecida como check), que acessa e consulta o elemento do topo da pilha. Pilhas podem ser implementadas por meio de Vetores (Pilha Sequencial - Alocação Estática de Memória) ou Listas (Pilha Encadeada - Alocação Dinâmica de Memória). Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 52 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (CESPE - 2011 - FUB - Analista de Tecnologia da Informação - Específicos) As pilhas são listas encadeadas cujos elementos são retirados e acrescentados sempre ao final, enquanto as filas são listas encadeadas cujos elementos são retirados e acrescentados sempre no início. Comentários: Bem... o que é o final de uma Pilha? Pois é, não se sabe! O que existe é o Topo da Pilha, de onde sempre são retirados e acrescentados elementos. Em Filas, elementos são retirados do início e acrescentados no final. Gabarito: E (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e Manutenção de Sistemas) Na estrutura de dados do tipo lista, todo elemento novo que é introduzido na pilha torna-se o elemento do topo. Comentários: Galera... filas e pilhas são considerados espécies de lista. Como a questão não especificou sobre qual tipo de lista ela está se referindo, não se pode afirmar que todo elemento novo que é introduzido na pilha torna-se o elemento do topo. Questão extremamente mal escrita e que causou a alteração de gabarito de verdadeiro para falso. 00000000000 Gabarito: E (CESPE - 2012 - -RO - Analista Judiciário - Analista de Sistemas Suporte – E) Visitas a sítios armazenadas em um navegador na ordem last-in-first-out é um exemplo de lista. Comentários: Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 53 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Não! Last-In-First-Out (LIFO) é um exemplo de Pilha! Cuidado, pilhas podem ser implementadas como listas, mas esse não é o foco da questão. Gabarito: E (ESAF - 2013 - DNIT - Analista Administrativo - Tecnologia da Informação) Assinale a opção correta relativa às operações básicas suportadas por pilhas. a) Push: insere um novo elemento no final da pilha. b) Pop: adiciona elementos ao topo da pilha. c) Pull: insere um novo elemento no interior da pilha. d) Top: transfere o último elemento para o topo da pilha. e) Top: acessa o elemento posicionado no topo da pilha. Comentários: (a) Não, é no topo; (b) Não, remove do topo; (c) Não, não existe; (d) Não, simplesmente acessa e consulta o elemento do topo; (e) Perfeito! Gabarito: E (FCC - 2012 – TST - Analista de Sistemas – C) As pilhas e as filas são estruturas de dados essenciais para os sistemas computacionais. É correto afirmar que a pilha é conhecida como lista FIFO - First In First Out. Comentários: Não! Pilha é LIFO e Fila é FIFO. 00000000000 Gabarito: E (FCC - 2012 – TRE/CE - Analista de Sistemas) Sobre pilhas é correto afirmar: a) Uma lista LIFO (Last-In/First-Out) é uma estrutura estática, ou seja, é uma coleção que não pode aumentar e diminuir durante sua existência. b) Os elementos na pilha são sempre removidos na mesma ordem em que foram inseridos. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 54 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 c) Uma pilha suporta apenas duas operações básicas, tradicionalmente denominadas push (insere um novo elemento no topo da pilha) e pop (remove um elemento do topo da pilha). d) Cada vez que um novo elemento deve ser inserido na pilha, ele é colocado no seu topo e, em qualquer momento, apenas aquele posicionado no topo da pilha pode ser removido. e) Sendo P uma pilha e x um elemento qualquer, a operação Push(P,x) diminui o tamanho da pilha P, removendo o elemento x do seu topo. Comentários: (a) Não, é uma estrutura dinâmica; (b) Não, é na ordem inversa (último a entrar é o primeiro a sair); (c) Não, há também Top ou Check, que acessar e consulta o elemento do topo; (d) Perfeito, é exatamente isso; (e) Push é a operação de inserção de novos elementos na pilha, portanto aumenta seu tamanho adicionando o elemento x no topo. Gabarito: D (CESPE - 2011 - EBC - Analista - Engenharia de Software) As pilhas, também conhecidas como listas LIFO ou PEPS, são listas lineares em que todas as operações de inserção e remoção de elementos são feitas por um único extremo da lista, denominado topo. Comentários: Não! LIFO é similar a UEPS (Último a Entrar, Primeiro a Sair). PEPS refere-se a Primeiro a Entrar, Primeiro a Sair, ou seja, FIFO. 00000000000 Gabarito: E (VUNESP - 2011 - TJM- - Analista de Sistemas - Judiciário) Lista do tipo LIFO (Last in, First Out) e lista do tipo FIFO (Firstin,First Out) são, respectivamente, características das estruturas de dados denominadas: a) Fila e Pilha. b) Pilha e Fila. c) Grafo e Árvore. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 55 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 d) Árvore e Grafo. e) Árvore Binária e Árvore Ternária. Comentários: E aí, já está automático para responder? Tem que ser automática: Pilha (LIFO) e Fila (FIFO). Gabarito: B (CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da Informação - Arquitetura de Tecnologia) A definição da estrutura pilha permite a inserção e a eliminação de itens, de modo que uma pilha é um objeto dinâmico, cujo tamanho pode variar constantemente. Comentários: Essa questão é polêmica, porque é inevitável pensar em Pilhas Sequenciais (implementadas por vetores estáticos)! No entanto, é comum que as bancas tratem por padrão Pilha como Pilha Encadeada (implementadas por listas dinâmicas). Dessa forma, a questão está perfeita! Gabarito: C 10. (CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da Informação - Administração de Dados) Na representação física de uma pilha sequencial, é necessário uso de uma variável ponteiro externa que indique a extremidade da lista linear onde ocorrem as operações de inserção e retirada de nós. 00000000000 Comentários: As Pilhas oferecem três operações básicas: push, que insere um novo elemento no topo da pilha; pop, que remove um elemento do topo da pilha; e top (também conhecida como check), que acessa e consulta o elemento do topo da pilha. Pilhas podem ser implementadas por meio de Vetores (Pilha Sequencial - Alocação Estática de Memória) ou Listas (Pilha Encadeada - Alocação Dinâmica de Memória). Conforme vimos em aula, a questão trata de uma Pilha Sequencial (i.e., implementada por meio de Vetores). Dessa forma, não é necessário o uso de Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 56 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 ponteiros – esse seria o caso de uma Pilha Encadeada. Eu posso realmente dizer que é suficiente, mas não posso afirmar que é necessária a utilização de um ponteiro externo. Eu até poderia dizer que é necessário o uso de um indicador, mas ele também não necessariamente será um ponteiro. Logo, discordo do gabarito! Gabarito: C 11. (CESPE - ANAC - Técnico Administrativo - Informática) As operações de inserir e retirar sempre afetam a base de uma pilha. Comentários: Não, sempre afetam o topo da pilha! Gabarito: E 12. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da Informação) Pilha é uma estrutura de dados: a) cujo acesso aos seus elementos segue tanto a lógica LIFO quanto a FIFO. b) cujo acesso aos seus elementos ocorre de forma aleatória. c) que pode ser implementada somente por meio de vetores. d) que pode ser implementada somente por meio de listas. e) cujo acesso aos seus elementos segue a lógica LIFO, apenas. Comentários: (a) Não, somente LIFO; (b) Não, somente pelo Topo; (c) Não, pode ser por listas; (d) Não, pode ser por vetores; (e) Perfeito, é exatamente isso. 00000000000 Gabarito: E 13. (CESPE - 04 – STJ – Analista de Sistemas Em geral, em uma pilha só se admite ter acesso ao elemento localizado em seu topo. Isso se adapta perfeitamente à característica das seqüências em que só o primeiro componente é diretamente acessível. Comentários: Perfeito, é exatamente isso – muda-se apenas a perspectiva! Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 57 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Gabarito: C 14. (CESPE - 2004 – STJ – Analista de Sistemas) A seguir, está representada corretamente uma operação de desempilhamento em uma pilha de nome p. se p.topo = 0 então nada {pilha vazia} senão p.topo p.topo-1 Comentários: Perfeito! Se não tem topo, é porque a pilha está vazia. Se tiver topo, então o topo será o elemento anterior ao topo. O que ocorreu? Eu desempilhei a pilha! Gabarito: C 15. (CESPE - 2010 – TRE/MT - Analista de Sistemas – A) O tipo nó é inadequado para implementar estruturas de dados do tipo pilha. Comentários: Não! Uma pilha pode ser implementada por meio de um vetor ou de uma lista. Nesse último caso, temos tipos nós! Gabarito: E ACERTEI ERREI 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 58 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 FILAS Uma fila é um conjunto ordenado de itens a partir do qual podem-se eliminar itens numa extremidade (chamada início da fila) e no qual podem-se inserir itens na outra extremidade (chamada final da fila). Também conhecida como Lista FIFO (First In First Out), basta lembrar de uma fila de pessoas esperando para serem atendidas em um banco, i.e., o primeiro a entrar é o primeiro a sair. Quando um elemento é colocado na fila, ele ocupa seu lugar no fim da fila, como um aluno recém-chegado que ocupa o final da fileira. O elemento retirado da fila é sempre aquele que está no início da fila, como o aluno que se encontra no começo da fileira e que esperou mais tempo. As operações básicas são Enqueue (Enfileirar) e Dequeue (Desenfileirar). As Filas possuem início (ou cabeça) e fim (ou cauda). 00000000000 É bom salientar outro conceito importante: Deque (Double Ended Queue)! É também conhecida como Filas Duplamente Encadeadas e permite a eliminação e inserção de itens em ambas as extremidades. Ademais, elas permitem algum tipo de priorização, visto que é possível inserir elementos de ambos os lados. Assim sendo, é comum em sistemas distribuídos! Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 59 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da Informação - Análise de Sistemas) Em um programa existe a necessidade de guardar todas as alterações feitas em determinado dado para que seja possível desfazer alterações feitas ao longo de toda a sua existência. Nessa situação, a estrutura de dados mais adequada para o armazenamento de todas as alterações citadas seria uma fila. Comentários: Não! Pensem comigo: eu faço uma atividade, depois outra, depois mais uma e, por fim, mais outra. Se eu desejo desfazer a última atividade realizada para retornar a um estado anterior, eu preciso de uma pilha. Dessa forma, resgata-se o último estado válido e, não, o primeiro. Gabarito: E (CESPE - 2012 – TST – Analista de Sistemas – A) As pilhas e as filas são estruturas de dados essenciais para os sistemas computacionais. É correto afirmar que a fila é conhecida como lista LIFO - Last In First Out. Comentários: Não, Fila é FIFO! 00000000000 Gabarito: E (CESPE - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) As filas são estruturas com base no princípio LIFO (last in, first out), no qual os dados que forem inseridos primeiro na fila serão os últimos a serem removidos. Existem duas funções que se aplicam a todas as filas: PUSH, que insere um dado no topo da fila, e POP, que remove o item no topo da fila. Comentários: Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 60 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Não, isso é uma Pilha (LIFO). Gabarito: E (FCC - 2012 - MPE-AP – Analista de Sistemas - A) Nas estruturas de dados, devido às características das operações da fila, o primeiro elemento a ser inserido será o último a ser retirado. Estruturas desse tipo são conhecidas como LIFO. Comentários: Não, será o primeiro a ser retirado – são do tipo FIFO! Gabarito: E (FCC - 2012 - MPE-AP – Analista de Sistemas - C) Nas estruturas de dados, a fila é uma lista linear na qual as operações de inserção e retirada ocorrem apenas no início da lista. Comentários: Não, isso é a definição de Pilha! Gabarito: E (FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas – D) Pela definição de fila, se os elementos são inseridos por um extremo da lista linear, eles só podem ser removidos pelo outro. Comentários: 00000000000 Perfeito, é exatamente isso! Gabarito: C (FCC - 2011 - TRT - 19ª Região (AL) - Analista Judiciário - Tecnologia da Informação) FIFO refere-se a estruturas de dados do tipo: a) fila. b) árvore binária. c) pilha. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 61 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 d) matriz quadrada. e) cubo. Comentários: Trata-se da Fila! Gabarito: A (ESAF - 2010 - CVM - Analista de Sistemas - prova 2) Uma fila é um tipo de lista linear em que: a) as inserções são realizadas em um extremo e as remoções no outro extremo. b) as inserções e remoções são realizadas em um mesmo extremo. c) podem ser realizadas apenas inserções. d) a inserção de um elemento requer a remoção de outro elemento. e) a ordem de saída não corresponde à ordem de entrada dos elementos. Comentários: As inserções são realizadas em um extremo e as remoções são realizadas no outro extremo, por isso é FIFO! Gabarito: A (CESPE - 2010 - DETRAN-ES - Analista de Sistemas) No armazenamento de dados pelo método FIFO (first in - first out), a estrutura de dados é representada por uma fila, em cuja posição final ocorrem inserções e, na inicial, retiradas. 00000000000 Comentários: Perfeito, é exatamente isso! Gabarito: C 10. (CESPE - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da Informação) Entre alguns tipos de estrutura de dados, podem ser citados os vetores, as pilhas e as filas. Comentários: Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 62 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Perfeito, são todos exemplos de estruturas de dados! Gabarito: C 11. (CESPE - 2004 – SES/PA – Analista de Sistemas) Uma estrutura mais geral que as pilhas e filas é o deque, em que as inserções, retiradas e acessos são permitidos em ambas as extremidades. Comentários: Perfeito, deques permitem todas essas operações! Gabarito: C 12. (CESPE – TCE/AC – Analista de Sistemas – D) Um deque (double ended queue) requer inserção e remoção no topo de uma lista e permite a implementação de filas com algum tipo de prioridade. A implementação de um deque, geralmente é realizada com a utilização de uma lista simplesmente encadeada. Comentários: Não, pode ser do início ou fim da lista! De fato, permite a implementação de filas com algum tipo de prioridade, mas geralmente é realizada com a utilização de filas duplamente encadeadas. Gabarito: E 00000000000 13. (FCC - 2007 – TRT/23 – Analista de Sistemas) Uma estrutura de dados com vocação de FIFO de duplo fim e que admite a rápida inserção e remoção em ambos os extremos é: a) b) c) d) e) uma pilha. uma splay tree. um deque. uma lista linear. uma árvore AVL. Comentários: Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 63 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Trata-se de um Deque – fila duplamente encadeada! Gabarito: C 14. (CESPE - 2004 – PBV/RR - Analista de Sistemas) As filas com prioridade são listas lineares nas quais os elementos são pares da forma (qi, pi), em que q é o elemento do tipo base e p é uma prioridade. Elas possuem uma política de fila do tipo FIFO (first in first out) entre os elementos de mesma prioridade. Comentários: Perfeito! É assim que funciona a prioridade em conjunto com filas. Gabarito: C 15. (CESPE - 2004 – STJ – Analista de Sistemas) A seguir, está representada corretamente uma operação de retirada em uma fila de nome f. se f.começo = nil então erro {fila vazia} senão j f.começo.info Comentários: Não, o correto seria: se f.começo = nil então erro {fila vazia} senão f.começo f.começo - 1 00000000000 Gabarito: E ACERTEI Prof. Diego Carvalho ERREI www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 64 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 ÁRVORES Uma árvore é uma estrutura de dados hierárquica (não-linear) composta por um conjunto finito de elementos com um único elemento raiz, com zero ou mais subárvores ligadas a esse elemento raiz. Como mostra a imagem abaixo, há uma única raiz, em amarelo. Há também nós folhas, em vermelho e seus pais, em verde. Observem ainda os conceitos de Altura, Grau e Nível de uma árvore. 00000000000 O Grau informa a quantidade de filhos de um determinado nó! A Raiz tem Nível 0 (excepcionalmente, alguns autores consideram que tem Nível 1) e o nível de qualquer outro nó na árvore é um nível a mais que o nível de seu pai. Por fim, a Altura equivale ao nível máximo de seus nós. Dessas informações, podemos concluir que toda folha tem Grau 0. Existe um tipo particular de árvore chamado: Árvore Binária! O que é isso? É uma estrutura de dados hierárquica em que todos os nós têm grau 0, 1 ou 2. Já uma Árvore Estritamente Binária é aquela em que todos os nós têm grau 0 ou 2. E uma Árvore Binária Completa é aquela em que todas as folhas estão no mesmo nível, como mostram as imagens abaixo. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 65 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 66 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Uma Árvore Binária Completa com x folhas conterá sempre (2x – 1) nós. Observem a imagem acima e façam as contas: 2*8 – 1 = 15 nós! Uma árvore binária completa de altura h e nível n contém (2h-1) ou n -1) nós e usa-se (2n para calcular a quantidade de nós em determinado nível. Na imagem acima, há uma árvore de h = 4 e n = 3; logo, existem 23+1 -1 = 15 nós no total; e no Nível 3, existe 23 = 8 nós. 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 67 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) As operações de busca em uma árvore binária não a alteram, enquanto operações de inserção e remoção de nós provocam mudanças sistemáticas na árvore. Comentários: Perfeito! Operações de Busca não alteram nenhuma estrutura de dados. Já Operações de Inserção e Remoção podem provocar diversas mudanças estruturais. Gabarito: C (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) O tipo de dados árvore representa organizações hierárquicas entre dados. Comentários: Perfeito, observem que alguns autores tratam Tipos de Dados como sinônimo de Estruturas de Dados. Gabarito: C 00000000000 (CESPE - 2010 - DETRAN-ES - Analista de Sistemas) Denomina-se árvore binária a que possui apenas dois nós. Comentários: Não, árvore binária é aquela em que cada nó tem, no máximo, dois filhos! Gabarito: E Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 68 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (FCC - 2012 - MPE-AP - Analista Ministerial - Tecnologia da Informação – A) A árvore é uma estrutura linear que permite representar uma relação de hierarquia. Ela possui um nó raiz e subárvores não vazias. Comentários: Árvore é uma estrutura linear? Não, hierárquica! Gabarito: E (FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da Informação) Em uma árvore binária, todos os nós têm grau: a) 2. b) 0, 1 ou 2. c) divisível por 2. d) maior ou igual a 2. e) 0 ou 1. Comentários: Olha a pegadinha! Todos os nós têm grau 0 (Folha), 1 (Único filho) ou 2 (Dois filhos). Gabarito: B (CETAP - 2010 - - - Analista de Sistemas - A) Uma árvore binária é aquela que tem como conteúdo somente valores binários. Comentários: 00000000000 Não! Uma árvore binária é aquela que tem, no máximo, grau 2! Gabarito: E (CETAP - 2010 - - - Analista de Sistemas - B) Uma árvore é composta por duas raízes, sendo uma principal e a outra secundária. Comentários: Não, uma árvore possui somente um nó raíz! Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 69 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Gabarito: E (CESPE - ANAC - Especialista em Regulação - Economia) Considerandose uma árvore binária completa até o nível 5, então a quantidade de folhas nesse nível será 24. Comentários: Não! A quantidade de folhas em um determinado nível – considerando a raiz como nível 0 –, é dada pela fórmula 2d, portanto 25. Gabarito: E (FUNCAB - 2010 - SEJUS-RO - Analista de Sistemas - II) Árvores são estruturas de dados estáticas com sua raiz representada no nível um. Comentários: Não! Árvores são estruturas dinâmicas e sua raiz, em geral, é representada no nível 0 (mas depende de autor para autor). Gabarito: E 10. (CESPE – ANAC - Analista de Sistemas) Uma árvore binária completa até o nível 10 tem 2.047 nós. Comentários: 00000000000 Se possui 10 níveis, possui (2d+1 -1): 2047 nós! Gabarito: C 11. (CESPE - 2010 – TRE/MT – Analista de Sistemas – B) As listas, pilhas, filas e árvores são estruturas de dados que têm como principal característica a sequencialidade dos seus elementos. Comentários: Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 70 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Não! Árvores ntêm como principal característica a sequencialidade dos seus elementos. Gabarito: E 12. (CESPE - 2010 – TRE/MT - Analista de Sistemas – E) O uso de recursividade é totalmente inadequado na implementação de operações para manipular elementos de uma estrutura de dados do tipo árvore. Comentários: Pelo contrário, é fundamental para implementação de operações. Gabarito: E 13. (CESPE - 2011 – STM – Analista de Sistemas) Enquanto uma lista encadeada somente pode ser percorrida de um único modo, uma árvore binária pode ser percorrida de muitas maneiras diferentes. Comentários: Galera, pense em uma árvore bem simples com um pai (raiz) e dois filhos. O Modo Pré-fixado vai ler primeiro a raíz, depois a sub-árvore da esquerda e depois a subárvore da direita. O Modo In-fixado vai ler primeiro a sub-árvore da esquerda, depois a raiz e depois a sub-árvore da direita. O Modo Pós-fixado vai ler primeiro a sub-árvore da esquerda, depois a sub-árvore da direita e depois a raiz. Vamos resumir: o modo de percorrimento de uma árvore pode obedecer três regras de acordo com a posição da raiz (pai): pré-fixado (raiz, esquerda, direita); in-fixado (esquerda, raiz, direita); e pós-fixada (esquerda, direita, raiz). Vamos agora ver uma árvore de exemplo: 00000000000 X / Y \ Z - Percorrimento Pré-fixado: X Y Z - Percorrimento In-fixado: Y X Z - Percorrimento Pós-fixado: Y Z X Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 71 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Logo, uma árvore pode ser percorrida de modo pré-fixado, in-fixado e pós-fixado. Gabarito: C ACERTEI ERREI 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 72 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 PESQUISA DE DADOS Uma das tarefas de maior importância na computação é a pesquisa de informações contidas em coleções de dados. Em geral, desejamos que essa tarefa seja executada sem que haja a necessidade de inspecionar toda a coleção de dados. Existem algumas maneiras de realizar pesquisas, tais como: Pesquisa Sequencial, Pesquisa Binária, Tabelas de Dispersão (Hashing), Árvores AVL, Árvores B e Árvores B+. BUSCA SEQUENCIAL Galera, imaginem que eu estou à procura de um valor X em um vetor L[ ]! Para tal, posso inspecionar as posições sequenciais de L[ ] a partir da primeira posição: se eu encontrar X, minha busca tem êxito; se eu alcanço a última posição e não encontro X, concluímos que esse valor não ocorre no vetor L[ ]. Como é chamada essa busca em que eu inspeciono uma estrutura posição por posição? Sequencial ou Linear. Considerando que o vetor L[ ] contém N elementos, ordenados ou não, é fácil verificar que a busca sequencial requer tempo linearmente proporcional ao tamanho do vetor, i.e., da ordem O(n). Por conta disso, é comum dizer que a busca sequencial é uma Busca Linear. Entenderam? Quanto maior o vetor, maior o tempo em média para buscar um elemento! Quanto mais ao final, mais demorado. A Busca Sequencial é muito lenta para grandes quantidades de dados, mas aceitável para listas pequenas e que mudam constantemente. Observa-se que no Melhor Caso, X está na primeira posição, logo necessita apenas de uma comparação; no Pior Caso, X está na última posição, logo necessita de N comparações; e no Caso Médio, X é encontrado após (n+1)/2 comparações. 00000000000 A seguir, encontram-se dois algoritmos para realização de uma Busca Sequencial: o primeiro ocorre de forma simples e o segundo ocorre de forma recursiva. Galera, para vetores de médio ou grande porte, o tempo de busca sequencial é considerado completamente inaceitável, dado que existem técnicas mais eficientes! Professor, me dá um exemplo? Claro, veremos adiante: Busca Binária! Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 73 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 BUSCA BINÁRIA 00000000000 A Busca Binária é um algoritmo de busca em vetores que segue o paradigma de divisão-e-conquista. Parte-se do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca, comparando o elemento chave com o elemento do meio do vetor. Possui complexidade da ordem de O(log2 n), em que N é o tamanho do vetor de busca. Quando o Vetor L[ ] estiver em ordem crescente, podemos determinar se X ocorre em L[ ] de forma mais rápida da seguinte forma: inspeciona-se a posição central do vetor! Se essa posição já contiver X, a busca para! Por que, professor? Porque nós já encontramos X! Se X for menor que esse elemento central, passamos a procurar X recursivamente, no intervalo de L[ ] que se encontra à esquerda da posição central. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 74 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Se X for maior do que o elemento central, continuamos a procurar X, recursivamente, no intervalo de L que está à direita da posição central. Se o intervalo se tornar vazio, a busca para, tendo sido mal sucedida. Esse procedimento é conhecido como Busca Binária e, facilmente, pode-se adaptar a busca em ordem decrescente. Segue abaixo um possível algoritmo: Na imagem abaixo, estamos à procura do valor 23! Em vermelho, encontra-se o elemento inicial L[0] = 2 e, em amarelo, encontra-se o elemento final L[N-1] = 57. Procuramos, então, o elemento central! Como? Ele é o elemento de índice [0 + (N1)]/2 = 7/2 = 3,5 = 3 (Arredonda-se para baixo). Ora, L[3] = 19! Encontramos? Não, 23>19! Sendo assim, L[0] = 19 e L[4] = 57. Procuramos, então, o elemento central! Como? Ele é o elemento de índice [0 + (N1)]/2 = 4/2 = 2. Ora, L[2] = 51! Encontramos? Não, 23<51! Sendo assim, L[0] = 19 e L[2] = 51. Procuramos, então, o elemento central! Como? Ele é o elemento de índice [0+ (N-1)]/2 = 2/2 = 1. Ora, L[1] = 23! Encontramos? Sim! Então, nossa busca obteve êxito e encontramos o que buscávamos. 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 75 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 76 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (CESPE - 2013 – TRT/ – Analista de Sistemas) Considerando que se deseje efetuar uma pesquisa de um valor sobre a chave primária de uma tabela de um banco de dados com uma chave primária com um tipo de campo que receba um valor inteiro e que se possa fazer essa pesquisa utilizando-se a busca sequencial ou a busca binária, assinale a opção correta. a) O método de busca binária requer, no máximo, ln(n) comparações para determinar o elemento pesquisado, em que n é o número de registros. b) O método de busca binária será sempre mais rápido que o método de busca sequencial, independentemente de a tabela estar ordenada com base no elemento pesquisado. c) O método de busca sequencial requererá, no máximo, n² comparações para determinar o elemento pesquisado, em que n será o número de registros. d) O método de busca binária sempre efetuará menos comparações que o método de pesquisa sequencial. e) O método de busca sequencial efetuará menos comparações para encontrar o elemento pesquisado quando a tabela estiver ordenada em comparação à situação quando a tabela estiver desordenada. 00000000000 Comentários: A Busca Binária é um algoritmo de busca em vetores que segue o paradigma de divisão-e-conquista. Parte-se do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca, comparando o elemento chave com o elemento do meio do vetor. Possui complexidade da ordem de O(log2 n), em que N é o tamanho do vetor de busca. a) Conforme vimos em aula, não é logaritmo neperiano (na verdade, é Base 2), mas a banca considerou correto mesmo assim. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 77 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 A Busca Sequencial é muito lenta para grandes quantidades de dados, mas aceitável para listas pequenas e que mudam constantemente. Observa-se que no Melhor Caso, X está na primeira posição, logo necessita apenas de uma comparação; no Pior Caso, X está na última posição, logo necessita de N comparações; e no Caso Médio, X é encontrado após (n+1)/2 comparações. b) Conforme vimos em aula, isso não ocorre sempre! Se compararmos o Melhor Caso da Busca Sequencial com o Pior Caso da Busca Binária, a primeira será mais rápida. Considerando que o vetor L[ ] contém N elementos, ordenados ou não, é fácil verificar que a busca sequencial requer tempo linearmente proporcional ao tamanho do vetor, i.e., da ordem O(n). Por conta disso, é comum dizer que a busca sequencial é uma Busca Linear. Entenderam? Quanto maior o vetor, maior o tempo em média para buscar um elemento! Quanto mais ao final, mais demorado. c) Conforme vimos em aula, ele possui complexidade da ordem de O(n). A Busca Sequencial é muito lenta para grandes quantidades de dados, mas aceitável para listas pequenas e que mudam constantemente. Observa-se que no Melhor Caso, X está na primeira posição, logo necessita apenas de uma comparação; no Pior Caso, X está na última posição, logo necessita de N comparações; e no Caso Médio, X é encontrado após (n+1)/2 comparações. d) Conforme vimos em aula, isso não ocorre sempre! Se compararmos o Melhor Caso da Busca Sequencial com o Pior Caso da Busca Binária, a primeira será mais rápida. Considerando que o vetor L[ ] contém N elementos, ordenados ou não, é fácil verificar que a busca sequencial requer tempo linearmente proporcional ao tamanho do vetor, i.e., da ordem O(n). Por conta disso, é comum dizer que a busca sequencial é uma Busca Linear. Entenderam? Quanto maior o vetor, maior o tempo em média para buscar um elemento! Quanto mais ao final, mais demorado. 00000000000 e) Conforme vimos em aula, não é necessário que a lista esteja ordenada. Logo, isso não fará diferença. Gabarito: A Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 78 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (ESAF - 2001 – BACEN – Analista de Sistemas Na pior hipótese, o número de comparações necessárias para pesquisar um elemento em um array de 2048 elementos pelo método de pesquisa binária será: a) 8 b) 9 c) 10 d) 11 e) 12 Comentários: A Busca Binária é um algoritmo de busca em vetores que segue o paradigma de divisão-e-conquista. Parte-se do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca, comparando o elemento chave com o elemento do meio do vetor. Possui complexidade da ordem de O(log2 n), em que N é o tamanho do vetor de busca. Conforme vimos em aula, a complexidade da Busca Binária é O(log2 n), em que N é o tamanho do vetor de busca – no nosso caso, 2048! Quanto é log2 2048? 11! Por que, professor? Porque 211 = 2048! Gabarito: D (CESPE - 2013 – TCE/RO – Analista de Sistemas Considere uma tabela de um banco de dados com chave primária e tipo de campo que receba um valor inteiro. Ao se efetuar uma pesquisa de um valor sobre a chave primária dessa tabela, o método de busca binária requer, no máximo, lg(n) comparações para localizar o elemento pesquisado, em que n é o número de registros. 00000000000 Comentários: A Busca Binária é um algoritmo de busca em vetores que segue o paradigma de divisão-e-conquista. Parte-se do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca, comparando o elemento chave com o elemento do meio do vetor. Possui complexidade da ordem de O(log2 n), em que N é o tamanho do vetor de busca. Conforme vimos em aula, de fato a complexidade da Busca Binária é O(log2 n). Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 79 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 Gabarito: C ACERTEI ERREI 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 80 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) LÓGICA DE PROGRAMAÇÃO (FCC - 2010 -SP - Agente de Defensoria - Analista de Sistemas É utilizada para avaliar uma determinada expressão e definir se um bloco de código deve ou não ser executado. Essa é a definição da estrutura condicional: a) For b) If...Then...Else c) While d) Do...While e) Next (FCC 0 – TRT/SE - Analista de Sistemas Objeto que se constitui parcialmente ou é definido em termos de si próprio. Nesse contexto, um tipo especial de procedimento (algoritmo) será utilizado, algumas vezes, para a solução de alguns problemas. Esse procedimento é denominado: a) Recursividade. b) Rotatividade. c) Repetição. d) Interligação. e) Condicionalidade. (FCC – TJ/SE - Analista de Sistemas A recursividade na programação de computadores envolve a definição de uma função que: 00000000000 a) apresenta outra função como resultado. b) aponta para um objeto. c) aponta para uma variável. d) chama uma outra função. e) pode chamar a si mesma. (CESPE - 2011 - -ES - Técnico de Informática - Específicos Uma estrutura de repetição possibilita executar um bloco de comando, repetidas vezes, até que seja encontrada uma dada condição que conclua a repetição. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 81 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (CESPE - 2010 - MPU - Analista de Informática - Desenvolvimento de Sistemas Se um trecho de algoritmo tiver de ser executado repetidamente e o número de repetições for indefinido, então é correto o uso, no início desse trecho, da estrutura de repetição Enquanto. (CESPE - 2013 - CNJ - Programador de computador) No fluxograma abaixo, se A = 4, B = 4 e C = 8, o resultado que será computado para Área é igual a 32. (CESPE - 2011 - -ES - Analista Judiciário - Análise de Banco de Dados Específicos Em uma estrutura de repetição com variável de controle, ou estrutura PARA, a verificação da condição é realizada antes da execução do corpo da sentença, o que impede a reescrita desse tipo de estrutura por meio de estrutura de repetição pós-testada. 00000000000 (CESPE 0 – DETRAN/ES - Analista de Sistemas O método de recursividade deve ser utilizado para avaliar uma expressão aritmética na qual um procedimento pode chamar a si mesmo, ou seja, a recursividade consiste em um método que, para que possa ser aplicado a uma estrutura, aplica a si mesmo para as subestruturas componentes. (CESPE - 2013 – CPRM - Analista de Sistemas Na implementação de recursividade, uma das soluções para que se evite o fenômeno de terminação do programa – que possibilita a ocorrência de um looping infinito – é definir uma função ou condição de terminação das repetições. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 82 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 10. (CESPE 4 – ANATEL - Analista de Sistemas A recursividade é uma técnica que pode ser utilizada na implementação de sistemas de lógica complexa, com a finalidade de minimizar riscos de ocorrência de defeitos no software. 11. (CESPE 1 – TJ/ES - Analista de Sistemas Tanto a recursividade direta quanto a indireta necessitam de uma condição de saída ou de encerramento. 12. (CONSULPLAN - 2012 - TSE - Programador de computador Observe o trecho de pseudocódigo. A estrutura será executada até que X seja igual ao seguinte valor a) – 1 b) – 3 13. (CONSULPLAN - 2012 - TSE - Programador de computador Observe o trecho de pseudocódigo, que mostra o emprego da estrutura de controle enquanto ... faça ... A opção que utiliza a estrutura para ... faça ... correspondente, que gera o mesmo resultado, é: 00000000000 c) Para n de 0 até 6 faça imprimir(n); d) Para n de 0 até 7 faça imprimir(n); 14. (FEPESE - 2010 - SEFAZ-SC - Auditor Fiscal da Receita Estadual - Parte III Tecnologia da Informação Assinale a alternativa correta a respeito das variáveis e constantes, utilizadas em diversas linguagens de programação. a) O número de constantes deve ser menor ou igual ao número de variáveis em um programa. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 83 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 b) O número de constantes deve ser menor ou igual ao número de procedimentos em um programa. c) O número de constantes deve ser igual ao número de variáveis em um programa. d) O número de constantes independe da quantidade de variáveis em um programa. e) O número de constantes deve ser igual ao número de procedimentos em um programa. 15. (NUCEPE 5 – SEDUC/PI - Analista de Sistemas O código abaixo é usado para calcular o fatorial de números. Assinale a alternativa CORRETA sobre esse código: função fatorial(n) { se (n <= 1) retorne 1; senão retorne n * fatorial(n-1); } a) Este é um exemplo de procedimento. b) O comando retorne pode ser retirado do código e a função terá o mesmo efeito. c) Exemplo clássico de recursividade. d) Não é possível chamar a função fatorial dentro dela mesma. e) O resultado da função sempre retornará um valor elevado a ele mesmo (valor ^ valor). 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 84 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) VETORES E MATRIZES (FCC - 2009 - -PA - Analista Judiciário - Tecnologia da Informação Considere uma estrutura de dados do tipo vetor. Com respeito a tal estrutura, é correto que seus componentes são, característicamente, a) heterogêneos e com acesso FIFO. b) heterogêneos e com acesso LIFO. c) heterogêneos e com acesso indexado-sequencial. d) homogêneos e acesso não indexado. e) homogêneos e de acesso aleatório por intermédio de índices. (CETAP - 2010 - - - Analista de Sistemas Matrizes são estruturas de dados de n-dimensões. Por simplicidade, chamaremos de matrizes as matrizes bidimensionais numéricas (que armazenam números inteiros). Sendo assim, marque a alternativa INCORRETA. a) Uma matriz de m linhas e n colunas contêm (m * n) dados. b) Uma matriz pode ser representada utilizando listas ligadas. c) A soma dos elementos de uma matriz pode ser calculada fazendo dois laços aninhados, um sobre as linhas e o outro sobre as colunas. d) A soma de duas matrizes de m linhas e n colunas resulta em uma matriz de 2*m linhas e 2*n colunas. 00000000000 e) O produto de duas matrizes de n linhas e n colunas resulta em uma matriz de n linhas e n colunas. (CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da Informação - Arquitetura de Tecnologia Os dados armazenados em uma estrutura do tipo matriz não podem ser acessados de maneira aleatória. Portanto, usa-se normalmente uma matriz quando o volume de inserção e remoção de dados é maior que o volume de leitura dos elementos armazenados. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 85 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (CESPE - TRT - 5ª Região (BA) - Técnico Judiciári - Tecnologia da Informação Entre alguns tipos de estrutura de dados, podem ser citados os vetores, as pilhas e as filas. (CESPE - 2011 - EBC - Analista - Engenharia de Software Vetores são utilizados quando estruturas indexadas necessitam de mais que um índice para identificar um de seus elementos. (CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Vetores podem ser considerados como listas de informações armazenadas em posição contígua na memória. (CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas Uma posição específica de um vetor pode ser acessada diretamente por meio de seu índice. 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 86 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) LISTA ENCADEADA (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) O tempo de busca de um elemento em uma lista duplamente encadeada é igual à metade do tempo da busca de um elemento em uma lista simplesmente encadeada. (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) Em algumas implementações, uma lista vazia pode ter um único nó, chamado de sentinela, nó cabeça ou header. Entre suas possíveis funções, incluise simplificar a implementação de algumas operações realizadas sobre a lista, como inserir novos dados, recuperar o tamanho da lista, entre outras. (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) Estruturas ligadas como listas encadeadas superam a limitação das matrizes que não podem alterar seu tamanho inicial. (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) As listas duplamente encadeadas diferenciam-se das listas simplesmente encadeadas pelo fato de, na primeira, os nós da lista formarem um anel com o último elemento ligado ao primeiro da lista. (FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas - E) Numa lista singularmente encadeada, para acessar o último nodo é necessário partir do primeiro e ir seguindo os campos de ligação até chegar ao final da lista. 00000000000 (CESPE - 2011 - EBC - Analista - Engenharia de Software) Uma lista é uma coleção de elementos do mesmo tipo dispostos linearmente, que podem ou não seguir determinada organização. As listas podem ser dos seguintes tipos: de encadeamento simples, duplamente encadeadas e ordenadas. (CESPE - ANAC - Técnico Administrativo - Informática) Em uma lista circular duplamente encadeada, cada nó aponta para dois outros nós da lista, um anterior e um posterior. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 87 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (CESPE - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da Informação) A principal característica de uma lista encadeada é o fato de o último elemento da lista apontar para o elemento imediatamente anterior. (CESPE - TCE-AC - Analista de Controle Externo - Processamentos de Dados) Uma lista encadeada é uma coleção de nodos que, juntos, formam uma ordem linear. Se é possível os nodos se deslocarem em ambas as direções na lista, diz-se que se trata de uma lista simplesmente encadeada. 10. (CESPE - 2008 – HEMOBRÁS – Técnico de Informática) Uma estrutura do tipo lista, em que é desejável percorrer o seu conteúdo nas duas direções indiferentemente, é denominado lista duplamente encadeada. 11. (CESPE - 2010 – TRE/MT – Analista de Sistemas – C) Uma lista duplamente encadeada é uma lista em que o seu último elemento referencia o primeiro. 12. (CESPE - 2006 – SGA/AC – Analista de Sistemas) O principal problema da alocação por lista encadeada é a fragmentação. 13. (CESPE – MCT – Analista de Sistemas) O armazenamento de arquivos em disco pode ser feito por meio de uma lista encadeada, em que os blocos de disco são ligados por ponteiros. A utilização de lista encadeada elimina completamente o problema de fragmentação interna. 14. (CESPE – FINEP – Analista de Sistemas) Uma lista encadeada é uma representação de objetos na memória do computador que consiste de uma sequência de células em que: a) cada célula contém apenas o endereço da célula seguinte. 00000000000 b) cada célula contém um objeto e o tipo de dados da célula seguinte. c) o último elemento da sequência aponta para o próximo objeto que normalmente possui o endereço físico como not null. d) cada célula contém um objeto de algum tipo e o endereço da célula seguinte. e) a primeira célula contém o endereço da última célula. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 88 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 15. (CESPE - 2010 – BASA – Analista de Sistemas) Em uma lista encadeada, o tempo de acesso a qualquer um de seus elementos é constante e independente do tamanho da estrutura de dados. 16. (CESPE - 2010 – ETRO – Analista de Sistemas – C) Considere que Roberto tenha feito uso de uma lista encadeada simples para programar o armazenamento e o posterior acesso aos dados acerca dos equipamentos instalados em sua empresa. Considere, ainda, que, após realizar uma consulta acerca do equipamento X, Roberto precisou acessar outro equipamento Y que se encontrava, nessa lista, em posição anterior ao equipamento X. Nessa situação, pela forma como os ponteiros são implementados em uma lista encadeada simples, o algoritmo usado por Roberto realizou a consulta ao equipamento Y sem reiniciar a pesquisa do começo da lista. 17. (FCC – TRE/AM – Analista de Sistemas) Os dados contidos em uma lista encadeada estão: a) b) c) d) e) ordenados seqüencialmente. sem ordem lógica ou física alguma. em ordem física e não, necessariamente, em ordem lógica. em ordem lógica e, necessariamente, em ordem física. em ordem lógica e não, necessariamente, em ordem física. 18. (FCC - 2010 – DPE/SP – Analista de Sistemas) Uma estrutura de dados que possui três campos: dois ponteiros e campo de informação denomina-se: a) b) c) d) e) lista encadeada dupla. Lista encadeada simples. pilha. fila. vetor. 00000000000 19. (CESPE - 2010 – TRE/MT – Analista de Sistemas) O algoritmo para inclusão de elementos em uma pilha é usado sem nenhuma alteração para incluir elementos em uma lista. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 89 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) PILHAS (CESPE - 2011 - FUB - Analista de Tecnologia da Informação - Específicos) As pilhas são listas encadeadas cujos elementos são retirados e acrescentados sempre ao final, enquanto as filas são listas encadeadas cujos elementos são retirados e acrescentados sempre no início. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e Manutenção de Sistemas) Na estrutura de dados do tipo lista, todo elemento novo que é introduzido na pilha torna-se o elemento do topo. (CESPE - 2012 - -RO - Analista Judiciário - Analista de Sistemas Suporte – E) Visitas a sítios armazenadas em um navegador na ordem last-in-first-out é um exemplo de lista. (ESAF - 2013 - DNIT - Analista Administrativo - Tecnologia da Informação) Assinale a opção correta relativa às operações básicas suportadas por pilhas. a) Push: insere um novo elemento no final da pilha. b) Pop: adiciona elementos ao topo da pilha. c) Pull: insere um novo elemento no interior da pilha. d) Top: transfere o último elemento para o topo da pilha. e) Top: acessa o elemento posicionado no topo da pilha. (FCC - 2012 – TST - Analista de Sistemas – C) As pilhas e as filas são estruturas de dados essenciais para os sistemas computacionais. É correto afirmar que a pilha é conhecida como lista FIFO - First In First Out. 00000000000 (FCC - 2012 – TRE/CE - Analista de Sistemas) Sobre pilhas é correto afirmar: a) Uma lista LIFO (Last-In/First-Out) é uma estrutura estática, ou seja, é uma coleção que não pode aumentar e diminuir durante sua existência. b) Os elementos na pilha são sempre removidos na mesma ordem em que foram inseridos. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 90 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 c) Uma pilha suporta apenas duas operações básicas, tradicionalmente denominadas push (insere um novo elemento no topo da pilha) e pop (remove um elemento do topo da pilha). d) Cada vez que um novo elemento deve ser inserido na pilha, ele é colocado no seu topo e, em qualquer momento, apenas aquele posicionado no topo da pilha pode ser removido. e) Sendo P uma pilha e x um elemento qualquer, a operação Push(P,x) diminui o tamanho da pilha P, removendo o elemento x do seu topo. (CESPE - 2011 - EBC - Analista - Engenharia de Software) As pilhas, também conhecidas como listas LIFO ou PEPS, são listas lineares em que todas as operações de inserção e remoção de elementos são feitas por um único extremo da lista, denominado topo. (VUNESP - 2011 - TJM- - Analista de Sistemas - Judiciário) Lista do tipo LIFO (Last in, First Out) e lista do tipo FIFO (Firstin,First Out) são, respectivamente, características das estruturas de dados denominadas: a) Fila e Pilha. b) Pilha e Fila. c) Grafo e Árvore. d) Árvore e Grafo. e) Árvore Binária e Árvore Ternária. (CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da Informação - Arquitetura de Tecnologia) A definição da estrutura pilha permite a inserção e a eliminação de itens, de modo que uma pilha é um objeto dinâmico, cujo tamanho pode variar constantemente. 00000000000 10. (CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da Informação - Administração de Dados) Na representação física de uma pilha sequencial, é necessário uso de uma variável ponteiro externa que indique a extremidade da lista linear onde ocorrem as operações de inserção e retirada de nós. 11. (CESPE - ANAC - Técnico Administrativo - Informática) As operações de inserir e retirar sempre afetam a base de uma pilha. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 91 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 12. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da Informação) Pilha é uma estrutura de dados: a) cujo acesso aos seus elementos segue tanto a lógica LIFO quanto a FIFO. b) cujo acesso aos seus elementos ocorre de forma aleatória. c) que pode ser implementada somente por meio de vetores. d) que pode ser implementada somente por meio de listas. e) cujo acesso aos seus elementos segue a lógica LIFO, apenas. 13. (CESPE - 04 – STJ – Analista de Sistemas Em geral, em uma pilha só se admite ter acesso ao elemento localizado em seu topo. Isso se adapta perfeitamente à característica das seqüências em que só o primeiro componente é diretamente acessível. 14. (CESPE - 2004 – STJ – Analista de Sistemas) A seguir, está representada corretamente uma operação de desempilhamento em uma pilha de nome p. se p.topo = 0 então nada {pilha vazia} senão p.topo p.topo-1 15. (CESPE - 2010 – TRE/MT - Analista de Sistemas – A) O tipo nó é inadequado para implementar estruturas de dados do tipo pilha. 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 92 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) FILAS (CESPE - 2010 - Banco da Amazônia - Técnico Científico - Tecnologia da Informação - Análise de Sistemas) Em um programa existe a necessidade de guardar todas as alterações feitas em determinado dado para que seja possível desfazer alterações feitas ao longo de toda a sua existência. Nessa situação, a estrutura de dados mais adequada para o armazenamento de todas as alterações citadas seria uma fila. (CESPE - 2012 – TST – Analista de Sistemas – A) As pilhas e as filas são estruturas de dados essenciais para os sistemas computacionais. É correto afirmar que a fila é conhecida como lista LIFO - Last In First Out. (CESPE - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) As filas são estruturas com base no princípio LIFO (last in, first out), no qual os dados que forem inseridos primeiro na fila serão os últimos a serem removidos. Existem duas funções que se aplicam a todas as filas: PUSH, que insere um dado no topo da fila, e POP, que remove o item no topo da fila. (FCC - 2012 - MPE-AP – Analista de Sistemas - A) Nas estruturas de dados, devido às características das operações da fila, o primeiro elemento a ser inserido será o último a ser retirado. Estruturas desse tipo são conhecidas como LIFO. (FCC - 2012 - MPE-A – Analista de Sistemas - C) Nas estruturas de dados, a fila é uma lista linear na qual as operações de inserção e retirada ocorrem apenas no início da lista. 00000000000 (FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas – D) Pela definição de fila, se os elementos são inseridos por um extremo da lista linear, eles só podem ser removidos pelo outro. (FCC - 2011 - TRT - 19ª Região (AL) - Analista Judiciário - Tecnologia da Informação) FIFO refere-se a estruturas de dados do tipo: a) fila. b) árvore binária. c) pilha. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 93 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 d) matriz quadrada. e) cubo. (ESAF - 2010 - CVM - Analista de Sistemas - prova 2) Uma fila é um tipo de lista linear em que: a) as inserções são realizadas em um extremo e as remoções no outro extremo. b) as inserções e remoções são realizadas em um mesmo extremo. c) podem ser realizadas apenas inserções. d) a inserção de um elemento requer a remoção de outro elemento. e) a ordem de saída não corresponde à ordem de entrada dos elementos. (CESPE - 2010 - DETRAN-ES - Analista de Sistemas) No armazenamento de dados pelo método FIFO (first in - first out), a estrutura de dados é representada por uma fila, em cuja posição final ocorrem inserções e, na inicial, retiradas. 10. (CESPE - TRT - 5ª Região (BA) - Técnico Judiciário - Tecnologia da Informação) Entre alguns tipos de estrutura de dados, podem ser citados os vetores, as pilhas e as filas. 11. (CESPE - 2004 – SES/PA – Analista de Sistemas) Uma estrutura mais geral que as pilhas e filas é o deque, em que as inserções, retiradas e acessos são permitidos em ambas as extremidades. 12. (CESPE – TCE/AC – Analista de Sistemas – D) Um deque (double ended queue) requer inserção e remoção no topo de uma lista e permite a implementação de filas com algum tipo de prioridade. A implementação de um deque, geralmente é realizada com a utilização de uma lista simplesmente encadeada. 00000000000 13. (FCC - 2007 – TRT/23 – Analista de Sistemas) Uma estrutura de dados com vocação de FIFO de duplo fim e que admite a rápida inserção e remoção em ambos os extremos é: a) b) c) d) e) uma pilha. uma splay tree. um deque. uma lista linear. uma árvore AVL. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 94 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 14. (CESPE - 2004 – PBV/RR - Analista de Sistemas) As filas com prioridade são listas lineares nas quais os elementos são pares da forma (qi, pi), em que q é o elemento do tipo base e p é uma prioridade. Elas possuem uma política de fila do tipo FIFO (first in first out) entre os elementos de mesma prioridade. 15. (CESPE - 2004 – STJ – Analista de Sistemas) A seguir, está representada corretamente uma operação de retirada em uma fila de nome f. se f.começo = nil então erro {fila vazia} senão j f.começo.info 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 95 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) ÁRVORES (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) As operações de busca em uma árvore binária não a alteram, enquanto operações de inserção e remoção de nós provocam mudanças sistemáticas na árvore. (CESPE - 2012 - Banco da Amazônia - Técnico Científico - Administração de Dados) O tipo de dados árvore representa organizações hierárquicas entre dados. (CESPE - 2010 - DETRAN-ES - Analista de Sistemas) Denomina-se árvore binária a que possui apenas dois nós. (FCC - 2012 - MPE-AP - Analista Ministerial - Tecnologia da Informação – A) A árvore é uma estrutura linear que permite representar uma relação de hierarquia. Ela possui um nó raiz e subárvores não vazias. (FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da Informação) Em uma árvore binária, todos os nós têm grau: a) 2. b) 0, 1 ou 2. c) divisível por 2. d) maior ou igual a 2. e) 0 ou 1. 00000000000 (CETAP - 2010 - - - Analista de Sistemas - A) Uma árvore binária é aquela que tem como conteúdo somente valores binários. (CETAP - 2010 - - - Analista de Sistemas - B) Uma árvore é composta por duas raízes, sendo uma principal e a outra secundária. (CESPE - ANAC - Especialista em Regulação - Economia) Considerandose uma árvore binária completa até o nível 5, então a quantidade de folhas nesse nível será 24. Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 96 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 (FUNCAB - 2010 - SEJUS-RO - Analista de Sistemas - II) Árvores são estruturas de dados estáticas com sua raiz representada no nível um. 10. (CESPE – ANAC - Analista de Sistemas) Uma árvore binária completa até o nível 10 tem 2.047 nós. 11. (CESPE - 2010 – TRE/MT – Analista de Sistemas – B) As listas, pilhas, filas e árvores são estruturas de dados que têm como principal característica a sequencialidade dos seus elementos. 12. (CESPE - 2010 – TRE/MT - Analista de Sistemas – E) O uso de recursividade é totalmente inadequado na implementação de operações para manipular elementos de uma estrutura de dados do tipo árvore. 13. (CESPE - 2011 – STM – Analista de Sistemas) Enquanto uma lista encadeada somente pode ser percorrida de um único modo, uma árvore binária pode ser percorrida de muitas maneiras diferentes. 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 97 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) PESQUISA DE DADOS (CESPE - 2013 – TRT/ – Analista de Sistemas) Considerando que se deseje efetuar uma pesquisa de um valor sobre a chave primária de uma tabela de um banco de dados com uma chave primária com um tipo de campo que receba um valor inteiro e que se possa fazer essa pesquisa utilizando-se a busca sequencial ou a busca binária, assinale a opção correta. a) O método de busca binária requer, no máximo, ln(n) comparações para determinar o elemento pesquisado, em que n é o número de registros. b) O método de busca binária será sempre mais rápido que o método de busca sequencial, independentemente de a tabela estar ordenada com base no elemento pesquisado. c) O método de busca sequencial requererá, no máximo, n² comparações para determinar o elemento pesquisado, em que n será o número de registros. d) O método de busca binária sempre efetuará menos comparações que o método de pesquisa sequencial. e) O método de busca sequencial efetuará menos comparações para encontrar o elemento pesquisado quando a tabela estiver ordenada em comparação à situação quando a tabela estiver desordenada. (ESAF - 2001 – BACEN – Analista de Sistemas Na pior hipótese, o número de comparações necessárias para pesquisar um elemento em um array de 2048 elementos pelo método de pesquisa binária será: 00000000000 a) 8 b) 9 c) 10 d) 11 e) 12 (CESPE - 2013 – TCE/RO – Analista de Sistemas Considere uma tabela de um banco de dados com chave primária e tipo de campo que receba um valor Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 98 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 inteiro. Ao se efetuar uma pesquisa de um valor sobre a chave primária dessa tabela, o método de busca binária requer, no máximo, lg(n) comparações para localizar o elemento pesquisado, em que n é o número de registros. 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 99 de 101 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) LÓGICA DE PROGRAMAÇÃO 1 B 11 C 2 A 12 B 3 E 13 A 4 C 14 D 5 C 15 C 6 E 16 7 E 17 8 C 18 9 C 19 10 E 20 GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) VETORES E MATRIZES 1 E 2 D 3 E 4 C 5 E 6 C 7 C 8 9 10 GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) LISTA ENCADEADA 1 E 11 E 2 C 12 E 3 C 13 E 4 E 14 D 5 C 15 E 6 C 16 E 7 C 17 E 8 E 18 A 9 E 19 C 10 C 20 00000000000 GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) PILHAS 1 E 11 E 2 E 12 E 3 E 13 C Prof. Diego Carvalho 4 E 14 C 5 E 15 E 6 D 16 7 E 17 www.estrategiaconcursos.com.br 00000000000 - DEMO 8 B 18 9 C 19 Pág. 100 de 101 10 C 20 Tecnologia da Informação p/ Analista do Banco Central (Parte II) Desenvolvimento de Software - Teoria e Exercícios - BACEN/2016 Prof. Diego Carvalho – Aula 00 GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) FILAS 1 E 11 C 2 E 12 E 3 E 13 C 4 E 14 C 5 E 15 E 6 C 16 7 A 17 8 A 18 9 C 19 10 C 20 GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) ÁRVORES 1 C 11 E 2 C 12 E 3 E 13 C 4 E 14 5 B 15 6 E 16 7 E 17 8 E 18 9 E 19 10 C 20 GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) PESQUISA DE DADOS 1 A 2 D 3 C 4 5 6 7 8 9 00000000000 Prof. Diego Carvalho www.estrategiaconcursos.com.br 00000000000 - DEMO Pág. 101 de 101 10