Baixe o app para aproveitar ainda mais
Prévia do material em texto
Aula 00 Curso: Informática – Teoria e Questões comentadas p/ TRF Professor: Gustavo Cavalcante Aula 00 – Aula Demonstrativa Curso: Tecnologia da Informação Professor: Yuri do Carmo Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 2 de 95 www.exponencialconcursos.com.br Olá, futuros servidores do TRF 3º Região. É com grande satisfação que inicio mais este trabalho aqui na equipe do Exponencial Concursos. Meu nome é Yuri do Carmo e sou servidor da Justiça Federal no Ceará (JFCE), atuando como Analista Judiciário (Especialidade Informática/Desenvolvimento), mas já estou aguardando a nomeação para o cargo de Auditor Fiscal da Receita Estadual – Tecnologia da Informação da SEFAZ-SC, no qual tive a felicidade de ser aprovado em 1º lugar! Antes de iniciarmos a aula, gostaria de contar um pouco da minha trajetória. Sou de Itapipoca, no interior do Ceará, onde fiz meu ensino fundamental. Em 2006, vim morar em Fortaleza, capital do Ceará, para fazer meu ensino médio no Instituto Federal do Ceará (IFCE), onde também concluí meu curso de Técnico em Informática. Em 2010, iniciei minha graduação em Ciência da Computação na Universidade Federal do Ceará (UFC), a qual eu concluí em 2014. Iniciei minha trajetória no mundo dos concursos em 2013, quando prestei a prova para o cargo de Técnico em TI da Universidade Federal do Ceará. Apesar de ser minha primeira prova, dediquei-me bastante aos estudos e consegui ser aprovado em 1º lugar. Assumi lá em 2014 e fiquei aproximadamente um ano e meio no cargo. Continuei estudando para cargos de nível superior e, em 2014, fiz as provas para o Cargo de Analista de Tecnologia da Informação da EBSERH e da DATAPREV, sendo aprovado em ambos em 2º lugar. Assumi na DATAPREV em 2015 e fiquei 10 meses lá. Em 2015, fiz provas para o Tribunal de Contas do Estado do Ceará (TCE-CE), para os cargos de Técnico de Controle Externo (Auditoria de TI) e Analista de Controle Externo (Auditoria de TI). Fiquei em 1º lugar no cargo de Técnico e exerci durante três anos. Fiquei em 4º no cargo de Analista, mas infelizmente só convocaram até a 3º posição. Atualmente exerço o cargo de Analista Judiciário (Especialidade Informática/Desenvolvimento) na Justiça Federal do Ceará (JFCE). Em 2017 e 2018 também prestei várias provas para cargos de TI, as quais listo abaixo com a respectiva colocação: TRT 7º região (5º lugar) TRF 5º região (1º lugar) STM (4º lugar) TST (1º lugar) CLDF (1º lugar) SEF/SC (1º lugar) APRESENTAÇÃO Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 3 de 95 www.exponencialconcursos.com.br Desde essas aprovações, resolvi aposentar a caneta das provas de concurso e iniciei um novo projeto: ajudar você a conseguir aprovações! Por meio de aulas como essa, no Exponencial Concursos, e nos serviços de coaching para concursos que ofereço, quero ajudar você a conquistar seus sonhos de aprovação! Agora que vocês já me conhecem, temos a missão de oferecer para vocês este curso. Seguindo a didática do Exponencial Concursos, estudaremos os principais pontos da teoria, sempre tentando trazer o conteúdo de forma esquematizada para que você ganhe tempo na sua preparação para aprovação. Contem comigo nessa jornada! Estarei à disposição no Fórum tira- dúvidas e por meio dos contatos disponíveis no perfil do professor http://bit.ly/profyuridocarmo. Para dicas sobre concursos, acesse: Exponencial Concursos https://www.youtube.com/channel/UCr9rg5WOPmXvZgOfBl-HEuw @exponencial_concursos https://www.instagram.com/exponencial_concursos/?hl=pt-br http://bit.ly/profyuridocarmo https://www.youtube.com/channel/UCr9rg5WOPmXvZgOfBl-HEuw https://www.instagram.com/exponencial_concursos/?hl=pt-br https://www.youtube.com/channel/UCr9rg5WOPmXvZgOfBl-HEuw https://www.instagram.com/exponencial_concursos/?hl=pt-br https://www.youtube.com/channel/UCr9rg5WOPmXvZgOfBl-HEuw https://www.instagram.com/exponencial_concursos/?hl=pt-br Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 4 de 95 www.exponencialconcursos.com.br Os temas deste curso foram selecionados com base no último edital do TRF 3º Região para o cargo de Analista Judiciário – Especialidade Informática. Aula Conteúdo 00 Fundamentos da linguagem: Sintaxe básica. Palavras- chave. Estrutura e construções básicas de um programa. Tipos primitivos de dados. Declaração e inicialização de variáveis. Categorias de operadores e precedência. Controle de fluxo de programas e repetição. 01 Fundamentos da linguagem: Compilação e execução de programas. Utilização de literais e strings. Definição de classes, métodos e variáveis. Utilização de encapsulamento. Utilização de packages. Sobrecarga de métodos. Utilização e implementação de bibliotecas e componentes. Administração de exceções. Acesso a banco de dados. 02 PHP. 03 HTML, Desenvolvimento de aplicações HTML. 04 XML, Conceitos, definição, utilização e escrita XML - criação e declaração, definições de elementos e atributos. 05 JAVA com orientação a objetos. 06 JSP, JSF. 07 Hibernate. 08 Arcabouços de desenvolvimento .Net 09 ASP .Net 10 C# 11 Noções básicas do protocolo http. Aplicação e utilização de servidores Web. *Confira o cronograma de liberação das aulas no site do Exponencial, na página do curso. Caros alunos, iremos focar as questões comentadas na banca FCC, já que ela foi a última a realizar esse certame, mas também usaremos outras bancas para complementar o estudo, se necessário. Sugiro o seguinte roteiro para você aproveitar melhor esse curso e potencializar suas chances de aprovação: Primeiro dia o Leia o PDF da Aula 00. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 5 de 95 www.exponencialconcursos.com.br o Não resolva todos os exercícios propostos, resolva apenas os que estão no corpo da aula e talvez mais uns 5 ou 10 do final. Uma semana depois o Resolva os demais exercícios da Aula 00. o Revise a Aula 00 através dos nossos esquemas (Risco Exponencial). o Leia o PDF da Aula 01. Duas semanas depois o Resolva alguns exercícios (10 a 20) do caderno da Aula 00. o Resolva os demais exercícios da Aula 01. o Revise a Aula 01 através dos nossos esquemas (Risco Exponencial). o Leia o PDF da Aula 02. Três semanas depois o Resolva alguns exercícios (10) do caderno da Aula 00. o Resolva alguns exercícios (10 a 20) do caderno da Aula 01. o Resolva os demais exercícios da Aula 02. o Revise a Aula 02 através dos nossos esquemas (Risco Exponencial). o Leia o PDF da Aula 03. E assim sucessivamente. Logicamente, isto é um roteiro básico que pode ser adaptado. Se você estuda de outra forma ou mesmo possui um programa de Coaching (recomendo http://bit.ly/coachingconcursos), fique tranquilo, pois irá aproveitar bastante as nossas aulas. Vamos buscar esses pontos rumo à aprovação! Bons estudos! Professor Yuri do Carmo http://bit.ly/coachingconcursos Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 6 de 95 www.exponencialconcursos.com.br ASSUNTOS PÁGINA 1. LÓGICA DE PROGRAMAÇÃO ............................................................. 7 1.1 Introdução ..................................................................................... 7 1.2 Variáveis e Constantes .................................................................. 13 1.3 Operadores .................................................................................. 16 1.4 Estruturas de Controle ..................................................................19 1.5 Procedimentos e Funções .............................................................. 30 1.6 Recursividade .............................................................................. 33 1.7 Vetores ....................................................................................... 36 2. QUESTÕES COMENTADAS ............................................................. 40 3. RISCO EXPONENCIAL .................................................................... 66 4. LISTAS DE EXERCÍCIOS ................................................................ 76 5. GABARITO ................................................................................... 95 6. REFERÊNCIAS .............................................................................. 95 Para facilitar sua referência, abaixo listamos as esquematizações desta aula: Esquema 1 - Conceitos introdutórios de Lógica de Programação ........................................... 9 Esquema 2 - Os 3 componentes fundamentais dos algoritmos ............................................. 10 Esquema 3 - Símbolos do Diagrama de Blocos ................................................................... 11 Esquema 4 - Variáveis, constantes e seus tipos ................................................................. 15 Esquema 5 - Operadores aritméticos ................................................................................ 16 Esquema 6 - Operadores relacionais ................................................................................. 16 Esquema 7 - Operadores lógicos ...................................................................................... 17 Esquema 8 - Operadores e seus tipos ............................................................................... 18 Esquema 9 - Sintaxe da estrutura "Se...Então..." ............................................................... 19 Esquema 10 - Sintaxe da estrutura "Se...Então...Senão..." ................................................. 19 Esquema 11 - Sintaxe da estrutura “Selecione...Caso...”..................................................... 23 Esquema 12 - Sintaxe da estrutura "Enquanto...Faça..." ..................................................... 27 Esquema 13 - Sintaxe da estrutura "Repita...Até... " .......................................................... 27 Esquema 14 - Sintaxe da estrutura "Para...Faça..." ............................................................ 27 Esquema 15 - Funções e procedimentos ........................................................................... 32 Esquema 16 - Funções Fatorial e Fibonacci implementadas com recursividade ....................... 33 Esquema 17 - Exemplo de um vetor de inteiros, de nome x, com 7 posições e índices de 0 a 636 Esquema 18 - Sintaxe de declaração de vetores e um exemplo ........................................... 36 Aula 00 – Lógica de Programação. file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350885 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350886 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350887 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350888 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350892 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350893 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350894 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350895 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350896 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350897 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350898 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350900 file:///C:/Users/Yuri%20do%20Carmo/Documents/Exponencial/Cursos/Curso%20SEFAZ-BA%20(FCC)/Aula%20-%20TI%20FCC%20-%20Lógica%20de%20Programação%20-%20passar%20conteudo%20do%20pdf%20p%20cá.docx%23_Toc7350902 Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 7 de 95 www.exponencialconcursos.com.br 1. LÓGICA DE PROGRAMAÇÃO 1.1 Introdução Primeiramente, precisamos entender o que é lógica. Ela está presente no nosso dia-a-dia (quando pensamos, falamos e escrevemos), pois para realizar essas ações necessitamos que os pensamentos estejam ordenados de modo a alcançar o resultado esperado. A lógica consiste na organização e explicação de um pensamento. Já a Lógica de Programação é a técnica de encadear instruções em uma sequência organizada para atingir determinado objetivo. Esses pensamentos podem ser descritos como uma sequência de instruções, as quais devem ser seguidas para se atingir o objetivo. Na lógica de programação, instrução é a informação que indica a um computador uma ação elementar a executar. Utilizamos a lógica de programação para construirmos algoritmos que resolvem problemas. Um algoritmo é formalmente uma sequência finita de passos que levam a execução de uma tarefa. Uma receita culinária é um algoritmo, já que define uma sequência de instruções que objetiva uma meta específica, no caso, o preparo de um prato. Pode haver mais de um algoritmo para resolver um problema. Assim como os humanos usam uma linguagem (português, inglês, etc) para se comunicarem, também usamos uma linguagem (de programação) para nos comunicarmos com os computadores. Os programas/softwares de computador nada mais são do que representações de algoritmos escritos numa linguagem de programação (C, C++, Java, C#, Python, Ruby, etc) e que são interpretados e executados por uma máquina, o computador. Algoritmos devem ser fáceis de interpretar e de escrever/codificar, sendo um intermediário entre a linguagem falada e a linguagem de programação. Para isso, eles podem ser descritos em uma linguagem chamada pseudocódigo, para abstrair os detalhes de sintaxe das linguagens de programação e serem independentes delas. Utilizando pseudocódigo, não existe um formalismo rígido de como deve ser escrito o algoritmo, ao contrário de uma linguagem de programação. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 8 de 95 www.exponencialconcursos.com.br EXEMPLO Abaixo temos um exemplo de um algoritmo em pseudocódigoque recebe dois números inteiros como entrada e retorna o resultado da multiplicação deles. Nas próximas seções veremos os componentes de um algoritmo (variáveis, estruturas de controle, etc). O símbolo representa a atribuição de um valor a uma variável. Algoritmo Multiplicação de números positivos Declaração de variáveis numero1, numero2, resultado, contador: Inteiro Início leia(numero1) leia(numero2) resultado 0 contador 0 Enquanto contador < numero2 Faça resultado resultado + numero1 contador contador + 1 Fim-Enquanto escreva(resultado) Fim Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 9 de 95 www.exponencialconcursos.com.br Lógica •Pensamentos ordenados de modo a alcançar um resultado esperado •Organização e explicação de um pensamento Lógica de Programação •Técnica de encadear instruções em uma sequência organizada para atingir determinado objetivo •Instrução indica uma ação elementar para o computador executar Linguagem de programação •Linguagem usada para os humanos se comunicarem com o computador Algoritmos •Sequencia finita de passos que levam a execução de uma tarefa •Intermediário entre a linguagem falada e a linguagem de programação Pseudocódigo •Forma de descrever algoritmos •Abstrai detalhes de sintaxe das linguagens de programação •Baixo formalismo Esquema 1 - Conceitos introdutórios de Lógica de Programação Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 10 de 95 www.exponencialconcursos.com.br Um algoritmo possui três componentes fundamentais e sequenciais: ENTRADA PROCESSAMENTO SAÍDA. A ENTRADA são os dados que devem ser lidos ou fornecidos pelo usuário. O PROCESSAMENTO são os procedimentos utilizados para chegar ao resultado final, os cálculos em si, o que inclui a manipulação dos dados de entrada a fim de se gerar uma resposta (um resultado). A SAÍDA são os dados já processados, os resultados do processamento. No exemplo acima, temos: ENTRADA: numero1 e numero2 PROCESSAMENTO: instruções entre Início e Fim SAÍDA: resultado Entrada •Dados lidos ou fornecidos pelo usuário Processamento •Procedimentos utilizados para chegar ao resultado; cálculos; manipulaçao de dados Saída •Resultados do processamento Esquema 2 - Os 3 componentes fundamentais dos algoritmos Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 11 de 95 www.exponencialconcursos.com.br Os algoritmos também podem ser representados por meio de um diagrama de bloco (ou fluxograma), o qual é uma forma gráfica padronizada e eficaz para representar os passos lógicos de um determinado processamento. Com esse diagrama, podemos definir uma sequência de símbolos, com significado bem definido. Sua principal função é a de facilitar a visualização dos passos de um processamento. Existem diversos símbolos em um diagrama de bloco. Vejamos alguns deles: Esquema 3 - Símbolos do Diagrama de Blocos Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 12 de 95 www.exponencialconcursos.com.br EXEMPLO Abaixo temos um exemplo de um algoritmo representado por meio de um diagrama de blocos. Esse algoritmo recebe quatro números como entrada, calcula a média aritmética deles e retorna o resultado. Nas próximas seções veremos os principais conceitos que podem compor um algoritmo: variáveis, operadores, estruturas de controle, procedimentos, funções e vetores. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 13 de 95 www.exponencialconcursos.com.br 1.2 Variáveis e Constantes Variáveis e constantes são os elementos básicos que um algoritmo/programa manipula. Na prática, durante a execução de um programa, uma variável representa um espaço reservado na memória do computador para armazenar um tipo de dado determinado. Variáveis devem receber nomes para poderem ser referenciadas e modificadas quando necessário, sendo que elas só podem armazenar um valor a cada instante. Um programa deve conter declarações que especificam de que tipo são as variáveis que ele utilizará e, às vezes, um valor inicial. Assim, em cada instante, cada variável possui seu tipo, seu nome e seu conteúdo. Os dados de entrada e saída de um algoritmo são armazenados em variáveis e, durante a fase de processamento, expressões combinam variáveis e constantes para calcular novos valores. Constante é um determinado valor fixo que não se modifica ao longo do tempo, durante a execução de um programa. O valor de uma variável pode ser alterado ao longo de seu algoritmo, mas os valores das constantes não se alteram. As variáveis e as constantes podem ser basicamente dos seguintes tipos: Tipo Numérico: armazenam números, que posteriormente poderão ser utilizados para cálculos. São subclassificadas como Inteiras ou Reais (valores com ponto decimal). Ex: se precisarmos de uma variável para armazenar o número de filhos de um funcionário, o tipo ideal para essa variável seria Inteiro. Já para armazenar o salário de funcionários, o tipo ideal seria Real; Tipo Caractere: armazenam um único caractere, que pode ser uma letra ou um símbolo. Ex: para identificar o sexo do indivíduo, armazenaremos apenas o caractere „F‟ ou „M‟); Tipo Cadeia (caracteres ou texto): armazenam uma sequência de caracteres, ou seja, uma palavra, uma mensagem, um nome. Ex: para armazenar o nome de uma pessoa, esse seria o tipo ideal; Tipo Lógico: armazenam somente dados lógicos, os quais podem ser Verdadeiro ou Falso. Ex: armazenar o status de ligado de um sensor: se ligado, armazenar o valor Verdadeiro. Se não, Falso. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 14 de 95 www.exponencialconcursos.com.br EXEMPLO No algoritmo abaixo, temos inicialmente a declaração de quatro variáveis, cada uma de um tipo diferente. Em seguida, atribui-se um valor do tipo apropriado para cada variável e, após isso, imprime cada um dos valores das variáveis. Algoritmo "Teste de Variável" Declaração das variáveis nome : Texto idade : Inteiro sexo : Caractere salario : Real Início nome “João” idade 27 sexo ‘M’ salario 6300.50 imprimir(nome, idade, sexo, salario) Fim Resultado (saída): João 27 M 6300.50 Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 15 de 95 www.exponencialconcursos.com.br • Espaço reservado na memória do computador; possui tipo, nome e conteúdo (valor); podem mudar o valor durante execução do programa. Variáveis • Valor fixo, não se modifica ao longo da execução do programa. Constantes • Armazena números; utilizadas para cálculos; • Inteiro ou Real. Tipo Numérico • Armazena um único caractere; • Letra ou símbolo. Tipo Caractere • Armazena uma sequência de caracteres; • Palavra; mensagem; nome. Tipo Cadeia (texto) • Armazena somente dados lógicos; Verdadeiro ou Falso; • Uma variável desse tipo também é chamada de variável booleana. Tipo Lógico Esquema 4 - Variáveis, constantes e seus tipos Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 16 de 95 www.exponencialconcursos.com.br 1.3 Operadores Os operadores são símbolos que representam operações para fazer cálculos, incrementos, comparaçõese avaliações dentro do computador. A representação simbólica de alguns operadores muda de acordo com a linguagem, mas a essência é a mesma. Todas as linguagens de programação usam operadores. Eles dividem-se em operadores Aritméticos, Relacionais e Lógicos. Os operadores aritméticos são os utilizados para obter resultados numéricos, representando as operações básicas da matemática. Os símbolos para os operadores aritméticos são: Operador Símbolo Exemplo Resultado Soma/Adição + 2 + 2 4 Subtração - 4 - 1 3 Multiplicação * 2 * 3 6 Divisão / 5 / 2 2.5 Módulo1 % ou mod 5 mod 2 1 Quociente2 div 5 div 2 2 Exponenciação ^ ou ** 5^2 25 Incremento ++ 5++ 6 Decremento -- 5-- 4 Esquema 5 - Operadores aritméticos Os operadores relacionais são utilizados para comparar dois valores de um mesmo tipo. Os valores a serem comparados podem ser variáveis ou constantes. Estes operadores sempre retornam valores lógicos (verdadeiro ou falso). Os símbolos para os operadores relacionais são: Operador Símbolo Exemplo Resultado Igual = ou == 2 = 1 Falso Maior que > 2 > 1 Verdadeiro Menor que < 2 < 1 Falso Maior ou igual a >= 2 >= 1 Verdadeiro Menor ou igual a <= 2 <= 1 Falso Diferente != ou <> 2 != 1 Verdadeiro Esquema 6 - Operadores relacionais 1 Resto da divisão inteira, ou seja, divisão sem casas decimais 2 Quociente/resultado da divisão inteira Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 17 de 95 www.exponencialconcursos.com.br Os operadores lógicos servem para combinar resultados de expressões, retornando se o resultado final é verdadeiro ou falso. Os principais operadores lógicos são: Uma expressão AND (E) é verdadeira se todas as condições forem verdadeiras. Já uma expressão OR (OU) é verdadeira se pelo menos uma condição for verdadeira. Uma expressão NOT (NÃO) inverte o valor da expressão ou condição, se verdadeira inverte para falsa e vice-versa. Operador Símbolo Exemplo Resultado E lógico E ou AND 2>1 E 2<3 Verdadeiro OU lógico OU ou OR 2=1 OU 2<1 Falso Negação NÃO, NOT ou ~ Não Falso Verdadeiro Esquema 7 - Operadores lógicos Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 18 de 95 www.exponencialconcursos.com.br •Símbolos que representam operações •Cálculos, incrementos, comparações e avaliações •Tipos: Aritméticos, Relacionais e Lógicos Operadores •Utilizados para obter resultados numéricos •Operações básicas da matemática Operadores Aritméticos •Utilizados para comparar dois valores de um mesmo tipo •Retornam valores lógicos (verdadeiro ou falso) Operadores Relacionais •Utilizados para combinar resultados de expressões, retornando se o resultado final é verdadeiro ou falso •E (AND): verdadeiro se todos os operandos forem verdadeiros •OU (OR): verdadeiro se pelo menos um operando for verdadeiro •NÃO (NOT): inverte o valor lógico da expressão/condição Operadores Lógicos Esquema 8 - Operadores e seus tipos Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 19 de 95 www.exponencialconcursos.com.br 1.4 Estruturas de Controle Durante o andamento de um algoritmo, frequentemente precisamos tomar decisões que alteram a ordem sequencial de execução do algoritmo. Essas decisões interferem diretamente no andamento do programa. Para fazer isso, utilizamos as estruturas de controle. Elas se dividem em basicamente dois tipos: estruturas de Decisão (ou Seleção ou Desvio) e estruturas de Repetição. Estruturas de Seleção/Decisão/Desvio Os comandos de seleção são técnicas de programação que conduzem a estruturas de programas que não são totalmente sequenciais. Elas permitem a escolha de um grupo de ações a ser executado quando determinadas condições, representadas por expressões lógicas, são ou não satisfeitas. Com elas, pode-se fazer com que o programa proceda de uma ou outra maneira, de acordo com as decisões lógicas tomadas em função dos dados ou resultados anteriores. As principais estruturas de decisão são: “Se Então”, “Se Então Senão” e “Selecione...Caso...”. Os seus equivalentes em inglês são, respectivamente: “IF...THEN...”, “IF...THEN...ELSE...” e “SELECT...CASE...”. A sintaxe3 da estrutura “Se Então” é exibida a seguir: SE <expressão lógica> ENTÃO <bloco de instruções verdade> FIM SE; A sintaxe da estrutura “Se Então Senão” é bem semelhante a anterior, porém adiciona-se o bloco “Senão”: SE <expressão lógica> ENTÃO <bloco de instruções verdade> SENÃO <bloco de instruções falso> FIM SE; 3 Essas sintaxes não são rígidas, então dependendo da banca, elas podem ser apresentadas ligeiramente diferentes ou, por exemplo, em inglês, mas a ideia é sempre a mesma. Esquema 9 - Sintaxe da estrutura "Se...Então..." Esquema 10 - Sintaxe da estrutura "Se...Então...Senão..." Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 20 de 95 www.exponencialconcursos.com.br A estrutura de decisão “Se Então” vem acompanhada de um comando, ou seja, se determinada condição for satisfeita pelo comando “Se”, então será executado determinado (bloco de) comando (uma ou mais instruções). A estrutura de decisão “Se Então Senão” funciona exatamente como a estrutura “Se”, com apenas uma diferença: na “Se Então” somente podemos executar comandos caso a condição seja verdadeira, já com a “Se Então Senão” um (bloco de) comando será executado independente da condição, pois caso a condição seja “verdadeira” o comando da condição será executado, caso contrário o comando da condição “falsa” (bloco “Senão”) será executado. Além disso, essas estruturas de decisão/seleção também podem estar aninhadas uma dentro da outra. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 21 de 95 www.exponencialconcursos.com.br EXEMPLO Vejamos abaixo um trecho de algoritmo que, a partir da nota média de um aluno, informa se ele foi aprovado, reprovado ou se precisa fazer outra avaliação. Inicialmente é apresentado o diagrama de blocos do algoritmo, em seguida é mostrado o código desse algoritmo com as estruturas de controle “Se Então Senão” aninhadas. ... SE MEDIA >= 5 ENTÃO SE MEDIA >= 7.0 ENTÃO Imprime(“Aluno APROVADO”) SENÃO Imprime(“Aluno Necessita fazer outra Avaliação) FIM SE SENÃO Imprime(“Aluno REPROVADO”) FIM SE ... Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 22 de 95 www.exponencialconcursos.com.br 1- (FCC - 2018 - SABESP - Analista de Gestão - Sistemas) De acordo com dados da SABESP, um pequeno buraco de 2 milímetros no encanamento desperdiça 3,2 mil litros de água em um dia. Um Analista escreveu o algoritmo em pseudocódigo abaixo para calcular o desperdício de água em função de buracos em encanamentos. O comando que preenche corretamente a lacuna a) I é: (largburaco > 0 ou dias > 0) b) I é: (largburaco > 0 e desperdicio > 0) c) II é: desperdicio ← (largburaco/2.0) * 3.2 * dias d) II é: desperdicio ← desperdicio + (largburaco/2.0) * 3.2 e) II é: desperdicio ← (largburaco/3.2) * 2.0 * dias Resolução: Questão aparentemente simples, mas que exige atenção do candidato para que não caia em pegadinhas. O melhor a fazer é eliminar alternativas com segurança. Note que a lacuna I deve conter a condição do comando “se”, o que é confirmado quando notamos as respostas das alternativas (a) e (b), as quais trazem expressõescondicionais que devem resultar em verdadeiro ou falso. Como o comando “senão” associado ao “se” imprime “Dados inválidos”, então devemos supor que o comando “se” está testando se os dados de entrada são válidos. Os dados de entrada são “largburaco” e “dias”. Assim, já podemos eliminar a letra (b), pois a variável “desperdicio” é um dado de saída, que deve ser calculado dentro do “se”. O item (a) estaria certo se, em vez de um “ou”, tivesse o operador lógico “e”. Assim, restam-nos as letras (c), (d) e (e), as quais representam o cálculo do valor do desperdício de água. Aqui, basicamente devemos fazer uma regra de três composta para deduzirmos qual a fórmula correta. Vejamos: Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 23 de 95 www.exponencialconcursos.com.br Desperdício(mil litros) Largura do Buraco Dias(quantidade) 3,2 mil L 2mm 1 desperdicio largburaco dias As grandezas são diretamente proporcionais (aumentando a largura do buraco, aumenta-se o desperdício; e aumentando a quantidade de dias, aumenta-se o desperdício também). Então ficamos com a equação: 3,2 = 2 * 1 desperdício largburaco dias Obtemos, portanto, a seguinte fórmula para o desperdício: desperdicio (3,2 * largburaco * dias) / 2 Gabarito: Letra C. A estrutura de decisão “Selecione...Caso...” (ou “Escolha...Caso...”) é utilizada para testar, na condição, uma expressão ou variável, comparando-se, então, o resultado obtido no teste com os valores fornecidos em cada cláusula “Caso”. A sintaxe dessa estrutura é: SELECIONE ( <variável> ) CASO <primeiro valor> FAÇA <comando caso a variável seja igual ao primeiro valor> CASO <segundo valor> FAÇA <comando caso a variável seja igual ao segundo valor> ... [SENÃO FAÇA] <comando caso a variável não seja igual a nenhum dos valores anteriores> FIM SELECIONE Esquema 11 - Sintaxe da estrutura “Selecione...Caso...” Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 24 de 95 www.exponencialconcursos.com.br EXEMPLO Vejamos abaixo um trecho de código utilizando a estrutura “Selecione...Caso...”. Ele simula uma calculadora simples, na qual o usuário digita os dois operandos e o símbolo da operação (+, -, * ou /) e o algoritmo imprime o resultado. algoritmo "CalculadoraBasica " numero1 : REAL numero2 : REAL operacao : CARACTERE resultado : REAL inicio ESCREVA ("Digite o primeiro número: ") LEIA (numero1) ESCREVA ("Digite a operação: ") LEIA (operacao) ESCREVA ("Digite o segundo número: ") LEIA (numero2) SELECIONE ( operação ) CASO ‘+’ FAÇA resultado numero1 + numero2 CASO ‘-‘ FAÇA resultado numero1 - numero2 CASO ‘*’ FAÇA resultado numero1 * numero2 CASO ‘/’ FAÇA resultado numero1 / numero2 FIM_SELECIONE ESCREVA ("Resultado: ", resultado) fimalgoritmo Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 25 de 95 www.exponencialconcursos.com.br 2- (FCC - 2015 - DPE-SP - Programador) Considere o algoritmo em pseudocódigo no qual DIV calcula o quociente da divisão inteira e MOD o resto da divisão inteira: O algoritmo em pseudocódigo acima a) garante que o valor de entrada seja maior ou igual a 8 para que seja possível dividir a taxa por 5 e por 3. b) para o valor inicial da taxa = 22 finaliza com cinco= 2 e tres=4. c) determina o maior número de 5 e de 3 unidades cuja soma dá o valor da taxa. d) para o valor inicial da taxa = 17 finaliza com cinco= 3 e tres=2. e) sempre finaliza com valores da variável cinco maiores ou igual a 1, mas a variável tres pode ter valor 0. Resolução: Vamos analisar cada uma das alternativas. Para algumas delas, precisamos “executar” o algoritmo mentalmente. Em alguns casos, é aconselhável fazer uma tabela na qual cada coluna representa uma variável do algoritmo e vamos preenchendo com os valores da variável conforme “executamos” mentalmente o algoritmo. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 26 de 95 www.exponencialconcursos.com.br a) Incorreto: repare que o algoritmo, no primeiro comando imprime realmente solicita que o valor a ser digitado seja maior ou igual a 8, porém ele não garante isso, pois não há, por exemplo, nenhuma validação com o comando “se então” para confirmar que o usuário digitou um valor válido e, se não for o caso, solicitar que digite novamente. Para haver essa garantia, poderia ser acrescentado o seguinte trecho após o comando leia(taxa): se taxa < 8 então imprima (“valor inválido”) b) Correto: montando a tabela com os valores de cada variável após executar o algoritmo mentalmente, temos: Descrição taxa quociente resto cinco tres Após leia(taxa) 22 Após DIV e MOD e antes do “caso” 22 4 2 0 0 Dentro do ‘caso’ será executado o bloco para resto ‘2’ 22 4 2 2 4 c) Incorreto: uma forma de deduzir o que o algoritmo está fazendo é “executá-lo” mentalmente e guardar os valores numa tabela e, após isso, tentar deduzir a lógica. Vejamos como ficaria essa tabela para os valores de entrada 8, 9, 10, 11 e 12: taxa quociente resto cinco tres 8 1 3 1 1 9 1 4 0 3 10 2 0 2 0 11 2 1 1 2 12 2 2 0 4 Analisando a relação das colunas taxa, cinco e tres podemos notar a seguinte fórmula: taxa = 5*cinco + 3*tres. Ou seja, o algoritmo diz quantos 5’s e quantos 3’s “cabem” exatamente dentro do número de entrada taxa. d) Incorreto: montando a tabela com os valores de cada variável após executar o algoritmo mentalmente, temos: Descrição taxa quociente resto cinco tres Após leia(taxa) 17 Após DIV e MOD e antes do “caso” 17 3 2 0 0 Dentro do ‘caso’ será executado o bloco para resto ‘2’ 17 3 2 1 2 e) Incorreto: sempre finaliza com valores da variável cinco maiores ou igual a 1, mas a variável tres pode ter valor 0. Conforme vimos no item (c), a variável cinco também pode finalizar com o valor 0. Gabarito: Letra B. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 27 de 95 www.exponencialconcursos.com.br Estruturas de Repetição Utilizamos os comandos de repetição quando desejamos que um determinado conjunto de instruções (bloco de comandos) seja executado um número definido (ou indefinido) de vezes, ou enquanto um determinado estado for válido. Eles também são chamados de laços (loops) e os principais são: “Enquanto...Faça...”, “Repita...Até...” e “Para...Faça...”. A estrutura “Enquanto...Faça...” (“While...Do...”) possui a seguinte sintaxe. É chamada de LOOP pré-testado, pois a expressão lógica é avaliada antes do bloco de comandos: ENQUANTO <expressão lógica> FAÇA <instruções a serem executadas enquanto a expressão booleana resultar em VERDADEIRO> FIM-ENQUANTO A estrutura “Repita...Até...” (“Repeat...Until...”) possui a sintaxe a seguir. Ela é bem semelhante à estrutura “Enquanto...Faça”, mas ela garante que o bloco de comandos seja executado, pelo menos, uma vez. É chamada de LOOP pós-testado, pois a expressão lógica é avaliada depois do bloco de comandos: REPITA <instruções a serem executadas repetidamente até a expressão booleana retornar VERDADEIRO> ATÉ <expressão lógica> A estrutura “Para...Faça...” (“For...Do...”) possui a seguinte sintaxe. É comumente usado quando já sabemos a quantidade de vezes que o laço deve executar: PARA <contador> DE <valor inicial> ATE <valor final> FAÇA <instruções a serem executadas repetidamente até a <contador> atingir o valor final> FIM-PARA Esquema 12 - Sintaxe da estrutura "Enquanto...Faça..."Esquema 13 - Sintaxe da estrutura "Repita...Até... " Esquema 14 - Sintaxe da estrutura "Para...Faça..." Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 28 de 95 www.exponencialconcursos.com.br EXEMPLO Vejamos agora como implementar a soma dos números de 1 a 100 utilizando as estruturas de repetição “Enquanto” e “Para”. Repare que são estruturas intercambiáveis, ou seja, o que pode ser feito com uma pode ser adaptado para ter o mesmo resultado usando a outra. Algoritmo "Soma1A100ComEnquanto" contador : INTEIRO soma : INTEIRO Inicio contador 1 soma 0 ENQUANTO contador <= 100 FAÇA soma soma + contador contador contador + 1 FIM-ENQUANTO ESCREVA("A soma de 1 a 100 é: ", soma) FimAlgoritmo Algoritmo "Soma1A100ComPara" contador : INTEIRO soma : INTEIRO Inicio soma 0 PARA contador DE 1 ATÉ 100 FAÇA soma soma + contador FIM-PARA ESCREVA("A soma de 1 a 100 é: ", soma) FimAlgoritmo Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 29 de 95 www.exponencialconcursos.com.br 3- (FCC - 2017 - TRT - 24ª REGIÃO (MS) - Técnico Judiciário - Tecnologia da Informação) Considere o algoritmo em pseudocódigo abaixo. Se forem lidos para as variáveis v1, v2 e v3, respectivamente, os valores 3, 3 e 4, o último valor exibido será a) 729 b) 243 c) 27 d) 81 e) 128 Resolução: Boa parte das questões de lógica de programação envolvem um pseudocódigo que você deve “executá-lo” mentalmente e descobrir qual a saída do algoritmo. Para fazer essa execução mental, é importante utilizar o chamado “teste de mesa”, que nada mais é do que ir anotando o valor das variáveis, conforme elas forem sendo inicializadas e alteradas, numa tabela. Vejamos: Descrição V1 V2 V3 Após comando leia 3 3 4 Após 1º laço “enquanto” 9 3 3 Após 2º laço “enquanto” 27 3 2 Após 3º laço “enquanto” 81 3 1 Como v3 agora é igual a 1, não executa mais o laço. Então o último valor impresso de v1 foi 81. Gabarito: Letra D. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 30 de 95 www.exponencialconcursos.com.br 1.5 Procedimentos e Funções Você deve ter notado que quanto maior e mais complexo é o algoritmo, mais difícil é para se compreender seu funcionamento. Assim, para tentar reduzir essa complexidade, surgiu a ideia de modularização. Ela tem como objetivo principal dividir um algoritmo grande e complexo em vários algoritmos menores e mais simples. A maneira mais simples de modularizar nossos algoritmos/programas é por meio da sua divisão em funções ou em procedimentos. Definimos função como uma unidade de código de programa autônoma desenvolvida para cumprir uma determinada tarefa em particular. A única diferença entre uma função e um procedimento é que a função retorna um valor e o procedimento não retorna nada. Em outras palavras, funções e procedimentos são "subalgoritmos" que podem ser chamados dentro de outros algoritmos. Os benefícios do uso de funções e procedimentos são: reaproveitar código, melhorar a leitura dos algoritmos e criar códigos mais limpos e legíveis. Pode-se tanto utilizar funções/procedimentos já criados por outros programadores ou criar suas próprias funções. Funções e procedimentos podem ou não receber parâmetros (também chamados de argumentos). Parâmetros são os valores que passamos como entrada para as funções e procedimentos. Por exemplo, no procedimento IMPRIMA que já usamos nos exemplos, precisamos passar um texto como parâmetro para que ele seja impresso na tela no momento da execução. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 31 de 95 www.exponencialconcursos.com.br EXEMPLO No algoritmo abaixo temos um exemplo de uso de função. Foi criada uma função chamada calculaFatorial, a qual recebe um inteiro como entrada e retorna outro inteiro que é o fatorial4 do número passado como parâmetro. Já no corpo do algoritmo, solicitamos um número ao usuário e passamos ele como argumento para a função calculaFatorial que foi definida no início do algoritmo, o que permitiu deixar o código mais legível. algoritmo "Cacula Fatorial" var numeroParaFatorial: inteiro funcao calculaFatorial(numero: inteiro): inteiro var fatorial: inteiro var contador: inteiro inicio fatorial 1 ENQUANTO numero > 1 FACA fatorial fatorial * numero numero numero - 1 FIMENQUANTO retorne fatorial fimfuncao inicio ESCREVA("Informe o número para o cálculo do Fatorial: ") LEIA(numeroParaFatorial) ESCREVA("O fatorial de é: ", calculaFatorial(numeroParaFatorial)) fimalgoritmo 4 Na matemática, o fatorial de um número é o resultado da multiplicação dele pelos demais números naturais menores que ele. Por exemplo, fatorial de 5 é 5*4*3*2*1 que é 120. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 32 de 95 www.exponencialconcursos.com.br Esquema 15 - Funções e procedimentos Funções e Procedimentos Principal forma de modularizar algoritmos Diminui complexidade a aumenta legibilidade Definidos como unidade de código autônoma que cumpre uma tarefa particular Função retorna um valor, procedimento não Podem ou não receber parâmetros/argu mentos de entrada Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 33 de 95 www.exponencialconcursos.com.br 1.6 Recursividade Recursividade é um mecanismo que permite que funções contenham em seu corpo chamadas para si próprias. Ou seja, uma função f é dita recursiva se no corpo dessa função há chamadas à própria função f. Há vários problemas que são resolvidos mais facilmente usando esse mecanismo. Quando uma função é chamada recursivamente, cria-se um ambiente local para cada chamada. As variáveis locais de chamadas recursivas são independentes entre si, como se estivéssemos chamando funções diferentes. EXEMPLO O fatorial de um número e os termos da série de Fibonacci não bastante conhecidos na matemática e são de fácil implementação usando a recursividade. Por definição, o fatorial5 de um número é ele multiplicado pelo fatorial do seu antecessor, ou seja, n! = n*(n-1)!. Além disso, o fatorial de 1 é 1. Por definição, o n-ésimo termo da série de Fibonacci é igual à soma dos dois termos antecessores, ou seja, Fib(n) = Fib(n-1) + Fin(n-2). Além disso, o primeiro e o segundo termos da série de Fibonacci são o número 1. Vejamos como ficaria a implementação dessas funções usando recursividade. Função fatorial (n : inteiro) Se n = 1 Então retorne 1 Senão retorne n * fatorial(n-1) Fim-função Função fibonacci (n : inteiro) Se n = 1 Ou n = 2 Então retorne 1 Senão retorne fibonacci(n-1) + fibonacci(n-2) Fim-função 5 A notação n! (lê-se “n fatorial ) representa o fatorial do número n. Esquema 16 - Funções Fatorial e Fibonacci implementadas com recursividade Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 34 de 95 www.exponencialconcursos.com.br 4- (FCC - 2017 - ARTESP - Especialista em Regulação de Transporte I – Tecnologia da Informação) Considere o algoritmo em pseudocódigo abaixo. Considerando que o operador / realiza a divisão inteira,ao executar o algoritmo acima será impresso: Para 654321 o resultado da função digitos = a) 21 b) 123456 c) 654321 d) 100000 e) 6 Resolução: A primeira coisa a se notar é que a função digitos(n) é recursiva, pois ela chama a si mesma. Se você tiver uma perspicácia já avançada, conseguirá notar que essa função retorna o número de dígitos do número n passado como parâmetro. Assim, para o número 654321, ela retornaria 6. Caso não tenha notado isso, não se preocupe, você irá adquirir isso com a prática. Bem, a maneira normal de se resolver essas questões é fazendo o “teste de mesa”, ou seja, a tabela com os valores da “execução mental” do algoritmo e, em seguida, fazer as contas de forma inversa. Vejamos: Descrição n digitos (n) Na primeira chamada da função6 654321 1+digitos(65432) Na primeira chamada recursiva da função 65432 1+digitos(6543) Na segunda chamada recursiva da função 6543 1+digitos(654) Na terceira chamada recursiva da função 654 1+digitos(65) Na quarta chamada recursiva da função 65 1+digitos(6) Na quinta chamada recursiva da função temos o chamado “caso base” 6 1 Fazendo os cálculos de forma inversa: digitos(65) = digitos (6) + 1 = 1+1 = 2 digitos(654) = digitos (65) + 1 =2+1 = 3 6 A questão falou que a divisão é inteira, então na recursão dividimos por 10 e desprezamos a casa decimal Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 35 de 95 www.exponencialconcursos.com.br digitos(6543) = digitos (654) + 1 = 3+1 = 4 digitos(65432) = digitos (6543) + 1 = 4+1 = 5 digitos(654321) = digitos (65432) + 1 = 5+1 = 6 Gabarito: Letra E. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 36 de 95 www.exponencialconcursos.com.br 1.7 Vetores Vetores são estruturas de dados bastante simples que podem nos ajudar muito quando temos um grande número de variáveis do mesmo tipo em um algoritmo. Um vetor nada mais é do que um agrupamento de variáveis do mesmo tipo. Imagine que você precisa criar um algoritmo que lê a matrícula e 3 notas de 30 alunos, e calcula a média de cada aluno. Seriam necessárias 30 variáveis para armazenar as matrículas dos alunos, 90 variáveis para armazenar as notas (3 * 30) e mais 30 variáveis para armazenar as 30 médias. Além disso, ficaria um código extremamente grande, tornando um algoritmo como esse praticamente inviável. Os vetores auxiliam justamente na resolução desse tipo de problema, pois podemos utilizá-los para armazenar e manipular todos esse valores de maneira mais simples. Vetor é uma variável que armazena várias variáveis do mesmo tipo. No problema apresentado anteriormente, nós podemos utilizar um vetor de 30 posições para armazenar os nomes dos 30 alunos. Cada item do vetor é acessado por um número chamado de índice (ou index, em inglês). Um vetor, na prática, é um conjunto de posições sequenciais na memória do computador, onde cada posição armazena um valor do mesmo tipo. Cada posição é acessada por meio do seu índice. Na figura abaixo temos um exemplo de um vetor chamado “x” com 7 posições, valores do tipo “inteiro” e índices de 0 a 6. Esquema 17 - Exemplo de um vetor de inteiros, de nome x, com 7 posições e índices de 0 a 6 A sintaxe de declaração de vetores e um exemplo: <nome_da_variável> vetor [1..<tamanho>] de <tipo_de_dado> matriculaAlunos vetor [1..30] de inteiros Uma coisa importante a se observar é que os vetores são de tamanho fixo, ou seja, eles “nascem” e “morrem” com o mesmo tamanho. Os vetores também são conhecidos por variáveis indexadas. Eles são uma das estruturas de dados mais simples que existe e uma das mais Esquema 18 - Sintaxe de declaração de vetores e um exemplo Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 37 de 95 www.exponencialconcursos.com.br utilizadas também. Praticamente todas as linguagens de programação têm vetores. Os índices dos vetores podem mudar dependendo da linguagem, mas o comum é os índices do vetor começarem na posição 0, mas algumas linguagens começam com 1. Nos pseudocódigos, vetores comumente começam no índice 0 e o último elemento recebe o índice <tamanho_do_array> – 1. Assim, um vetor de 5 posições possui índices de 0 a 4. EXEMPLO Vejamos o exemplo de um algoritmo que lê e, em seguida, imprime o nome de 5 alunos. Repare na inicialização do vetor e como seus valores são armazenados e acessados/lidos. algoritmo "NomeAlunos" nomes: vetor [1..5] de caractere contador: inteiro inicio PARA contador DE 1 ATE 5 FACA ESCREVA("Digite o nome do aluno(a) número ", contador) LEIA(nomes[contador]) FIMPARA PARA contador DE 1 ATE 5 FACA ESCREVA(“Nome do aluno ”, contador, “ é ”, nomes*contador]) FIMPARA fimalgoritmo Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 38 de 95 www.exponencialconcursos.com.br 5- (FCC - 2013 - MPE-AM - Agente de Apoio - Programador) Considere o programa em pseudocódigo abaixo: É correto afirmar: a) Como o programa utiliza o comando enquanto ao invés do comando para, não seria necessário incrementar a variável de controle indice dentro do bloco, uma vez que esta é incrementada de 1 automaticamente. b) O resultado do cálculo da comissão do vendedor é atribuído à variável comissao e corresponde a 1% do valor da venda realizada por ele. c) O valor da variável vendas é atribuído ao vetor comissao na posição do vetor correspondente ao valor do indice relacionado ao vendedor. d) O segundo comando enquanto percorre novamente os vetores, começando do indice 1, incrementando a variável indice e mostrando os dados dos vendedores: nome e comissão. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 39 de 95 www.exponencialconcursos.com.br e) O primeiro comando enquanto faz com que o fluxo do programa seja repetido até que a variável indice fique menor que 10, ou seja, esse bloco de comandos vai ser repetido 10 vezes. Resolução: Questão assusta pelo tamanho, mas se analisarmos com calma, veremos que não é difícil. Antes de analisarmos as alternativas, vamos dar uma visão geral no algoritmo: Os vetores começam na posição 1 em vez de 0 No primeiro enquanto, o algoritmo lê o nome de cada vendedor e armazena no vetor e lê também o valor das vendas e guarda a comissão (10%, já que divide o valor das vendar por 10) em outro vetor O segundo enquanto basicamente imprime o nome de cada vendedor com sua respectiva comissão de vendas Vamos analisar cada uma das alternativas. a) Incorreto: a assertiva inverteu os conceitos. É o comando para que incrementa automaticamente a variável de controle, não o comando enquanto. b) Incorreto: repare que comissão venda/10. Assim, a comissão é 10% do valor das vendas. Para ser 1% deveria dividir por 100. c) Incorreto: não existe vetor comissao no algoritmo. comissao é uma variável inteira, não um vetor. Essa variável é atribuída ao vetor vendas na posição do vetor correspondente ao valor do indice relacionado ao vendedor. d) Correto: conforme explanado no início do comentário. e) Incorreto: O primeiro comando enquanto faz com que o fluxo do programa seja repetido até que a variável indice fique menor maior que 10, ou seja, esse bloco de comandos vai ser repetido 10 vezes. Gabarito: Letra D. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 40 de 95 www.exponencialconcursos.com.br 2. QUESTÕES COMENTADASLógica de Programação 6- (FCC - 2018 - Prefeitura de São Luís - MA - Auditor Fiscal de Tributos I - Tecnologia da Informação (TI)) Considere a função abaixo na forma de pseudocódigo. Se a função teste receber o valor 9 para x, 8 para n e o vetor [7, 10, 42, 88, 100, 123, 401, 502] para p, o retorno da função será a) 3 b) 6 c) 8 d) 2 e) −1 Resolução: Nas questões de pseudocódigo, a FCC costuma colocar algoritmos conhecidos, como é o caso dessa questão. Esse algoritmo é uma das implementações interativas da chamada “pesquisa binária”, a qual recebe um valor chamado chave (na questão, é o x) e um vetor ordenado7 e retorna o índice da chave dentro do vetor, caso ela se encontre lá, ou retorna -1, caso a chave não esteja no vetor. O valor de n representa o tamanho do vetor. Sabendo disso, a questão fica fácil, pois no vetor [7, 10, 42, 88, 100, 123, 401, 502] não há a chave x = 9, o que faz com que o algoritmo retorne -1. Caso você não saiba disso, você poderia resolver da seguinte forma: repare que só há dois momentos que o algoritmo retorna um valor: ou quando p[j] = x (retornando a variável j) ou no final, retornando -1. x é 9 e p[j] é algum elemento do vetor. Com isso, você nota que nenhum elemento do vetor p é igual a 9, restando ao algoritmo retornar ao final o -1. Para exemplificar mais: 7 Na pesquisa binária, obrigatoriamente o vetor deve estar ordenado Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 41 de 95 www.exponencialconcursos.com.br Se x fosse 7, o algoritmo retornaria 0, pois esse é o índice da posição do valor 7 no vetor Se x fosse 10, o algoritmo retornaria 1, pois esse é o índice da posição do valor 10 no vetor Se x fosse 401, o algoritmo retornaria 6, pois esse é o índice da posição do valor 401 no vetor Gabarito: Letra E. 7- (FCC - 2013 - AL-RN - Técnico Legislativo - Programador) Considere o algoritmo na forma de pseudocódigo a seguir: O pseudocódigo acima a) está incorreto, pois a estrutura de seleção se necessita da cláusula então para o caso da condição ser verdadeira e da cláusula senão para caso da condição ser falsa. b) está correto, e seu objetivo é classificar em ordem crescente, o conteúdo de um vetor que recebe 4 valores inteiros lidos. c) está correto, e seu objetivo é ler 4 elementos e procurar um elemento informado no vetor utilizando busca binária. d) está incorreto, pois em todas as linguagens de programação a primeira posição do vetor é 1 e não 0 como mostra o algoritmo. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 42 de 95 www.exponencialconcursos.com.br e) está correto, e se forem lidos os valores 4, 7, 1, 9 e 3, nesta ordem, serão exibidos os valores 9, 7, 4, 3 e 1, nesta ordem. Resolução: Nas questões de pseudocódigo, a FCC costuma colocar algoritmos conhecidos, como é o caso dessa questão. Esse algoritmo é uma das implementações interativas de ordenação de vetores, a qual recebe um vetor com valores aleatórios e retorna o mesmo vetor, mas com os valores ordenados, geralmente em ordem crescente, como é o caso da questão. Porém, mesmo sem saber disso, poderíamos eliminar três alternativas (a, c e d) com nossos conhecimentos básicos. Um indicativo de que um algoritmo é de ordenação é quando ele possui duas estruturas de repetição aninhadas (no caso, um enquanto dentro de outro enquanto) e quando possui o seguinte trecho de código, que realiza a troca de valores no vetor: se vetor[pos] > vetor[pos+1] aux vetor[pos] vetor[pos] vetor[pos+1] vetor[pos+1] aux Vamos analisar cada uma das alternativas: a) Incorreto: está incorreto, pois a estrutura de seleção se necessita da cláusula então para o caso da condição ser verdadeira e da cláusula senão para caso da condição ser falsa. A estrutura se não precisa necessariamente da cláusula senão. b) Correto c) Incorreto: está correto, e seu objetivo é ler 4 elementos e procurar um elemento informado no vetor utilizando busca binária. Não há indicativo no código de busca dentro do vetor. Vemos apenas troca de elementos do vetor dentro do bloco se vetor[pos] > vetor[pos+1], a qual é feita com o seguinte artifício, que simplesmente troca de posição os valores de vetor[pos] e vetor[pos+1]: aux vetor[pos] vetor[pos] vetor[pos+1] vetor[pos+1] aux d) Incorreto: está incorreto, pois em todas as linguagens de programação a primeira posição do vetor é 1 e não 0 como mostra o algoritmo. Há linguagens que começam o vetor no índice 0 (mais comum) e outras no índice 1. e) Incorreto: está correto, e se forem lidos os valores 4, 7, 1, 9 e 3, nesta ordem, serão exibidos os valores 9, 7, 4, 3 e 1 1, 3, 4, 7 e 9, nesta ordem. O algoritmo ordena em ordem crescente. Para ser decrescente, o sinal de comparação dentro do se deveria ser < (menor que) em vez de > (maior que). Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 43 de 95 www.exponencialconcursos.com.br Gabarito: Letra B. 8- (FCC - 2013 - MPE-MA - Técnico Ministerial - Tecnologia da Informação) Atenção: Para responder à questão, considere o fragmento de pseudocódigo abaixo. Considere ainda que: − as variáveis numeroLido, pri, ult e metade são do tipo inteiro. − a variável achou é do tipo lógico. − vet é um vetor de inteiros que contém os seguintes valores 3, 5, 60, 80 e 98, nessa ordem. − a primeira posição do vetor vet é zero (0). Sobre o fragmento de pseudocódigo apresentado é correto afirmar que a) executa uma pesquisa sequencial, que mostra a posição em que o número lido se encontra no vetor. b) falha, pois se o valor 98 for lido, será feita a busca em uma posição inexistente do vetor. c) executa uma pesquisa binária que funciona se os valores do vetor estiverem em ordem crescente. d) mesmo que os valores estejam em ordem decrescente, mostrará a posição em que o número lido se encontra. e) sempre exibirá a mensagem que informa que o valor não foi encontrado. Resolução: Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 44 de 95 www.exponencialconcursos.com.br Nas questões de pseudocódigo, a FCC costuma colocar algoritmos conhecidos, como é o caso dessa questão. Esse algoritmo é uma das implementações interativas da chamada “pesquisa binária”, a qual recebe um valor chamado chave (na questão, é o numeroLido) e um vetor ordenado8 e retorna o índice da chave dentro do vetor, caso ela se encontre lá no vetor. Ao contrário da pesquisa sequencial (a qual consiste em percorrer sequencialmente do início ao fim cada posição do vetor até encontrar a chave), a pesquisa binária se aproveita do fato do vetor estar ordenado e otimiza a busca pesquisando em apenas metade do vetor sucessivamente. Inicialmente, é verificado se a chave está na posição central do vetor ((pri + ult) / 2). Caso esteja, retorna essa posição. Caso contrário, ele compara se a posição central é maior ou menor que a chave. Se a chave for maior, indica que ela só pode estar na metade superior do vetor, já que ele está ordenado. Se for menor, só pode estar na metade inferior. Assim, ao fazer uma nova iteração no laço, fará apenas em uma dessas metades e assim sucessivamente. Vamos analisar cada uma das alternativas: a) Incorreto: executa uma pesquisa sequencial binária, que mostra a posição em que o número lido se encontra no vetor. b) Incorreto: falha, pois se o valor 98 for lido, será feita a busca em uma posição inexistente na posição 4 do vetor. Como a questão disse que o vetor começa da posição 0, o número 98 encontra-se na posição 4 de vet e a pesquisa binária irá corretamente encontrá-lonessa posição. c) Correto: obrigatoriamente os valores do vetor na pesquisa binária devem estar ordenados. d) Incorreto: conforme item anterior. Ou seja, se estiver em ordem decrescente, não funcionaria corretamente. e) Incorreto: caso numeroLido esteja contido no vetor vet, a pesquisa binária irá imprimir corretamente a posição dele no vetor. Gabarito: Letra C. 9- (FCC - 2018 - DPE-AM - Assistente Técnico de Defensoria - Programador) Considere o algoritmo em pseudocódigo abaixo. 8 Na pesquisa binária, obrigatoriamente o vetor deve estar ordenado Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 45 de 95 www.exponencialconcursos.com.br Analisando a lógica do programa acima, é correto afirmar que a) ao ser digitado 2018 para o ano, o programa finalizará. b) a lacuna I deve ser preenchida com ano >= 2000 e ano < anobase c) há erro de lógica, pois o comando enquanto não avalia nenhuma condição. d) a lacuna III deve ser preenchida com ano <= 0 e) a lacuna II deve ser preenchida com ano >= 1000 e ano <= 2000 Resolução: Primeiramente, temos que notar dois pontos importantes ao fazer a primeira análise no algoritmo: Dentro do primeiro se, é usada uma estrutura de controle chamada vá_para <label> a qual representa uma mudança incondicional do fluxo do programa para o ponto onde estiver a referência a <label>, que no caso é o label ENCERRA no final do algoritmo. As lacunas I, II e III são as condições dos respectivos se, os quais podem ser deduzidos com a análise das mensagens que são impressas. Vamos analisar cada uma das alternativas: a) Incorreto: no primeiro se, o ano digitado deve ser maior que o anobase para que a instrução vá_para ENCERRA seja executada. Como o ano é 2018 e anobase é 2018 também, então a condição será falsa e, consequentemente, a instrução dentro do se não será executada. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 46 de 95 www.exponencialconcursos.com.br b) Incorreto: a lacuna I deve ser preenchida com ano >= 2000 2001 e ano < <= anobase. Repare que o bloco verdade da instrução se imprimirá a mensagem “O ano pertence ao século XXI”. O século XXI começa em 2001 e a entrada da variável ano do usuário também pode ser igual ao anobase. c) Incorreto: há erro de lógica, pois o comando enquanto não avalia nenhuma condição. Não há problemas na condição do enquanto ser sempre verdadeira (poderia ter escrito 1=1 em vez de verdadeiro, por exemplo), esse é o chamado loop infinito. Para o usuário sair do loop, basta ele digitar um ano maior que 2018 que o programa executará a instrução vá_para ENCERRA. d) Incorreto: a lacuna III deve ser preenchida com ano <= 0 ano <= 999 (ou ano < 1000). e) Correto: os anos com quatro dígitos que não são do século XXI vão de 1000 a 2000, então a condição desse se deve realmente ser ano >= 1000 e ano <= 2000. Gabarito: Letra E. 10- (FCC - 2017 - ARTESP - Agente de Fiscalização à Regulação de Transporte - Tecnologia de Informação) Considere o algoritmo em pseudocódigo abaixo. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 47 de 95 www.exponencialconcursos.com.br Este algoritmo a) não poderia usar a categoria 0 no comando escolha, nem atribuir zero ao valor do pedágio. b) apresenta erro de lógica na condição do comando condicional se. c) teria que usar uma condição no comando enquanto (verdadeiro) faça, pois este não pode avaliar apenas o valor lógico verdadeiro. d) tem erro de sintaxe, pois o comando escolha deveria estar dentro da cláusula senão do comando condicional se. e) tem erro de sintaxe, pois o comando escolha deveria ter a cláusula senão, que é obrigatória. Resolução: Vamos analisar cada uma das alternativas: a) Incorreto: não poderia poderia usar a categoria 0 no comando escolha, nem e atribuir zero ao valor do pedágio. O comando escolha pode receber qualquer tipo primitivo. b) Correto: repare que a condição do se testa se a categoria é menor que 0 e é maior que 8 (categoria < 0 e categoria > 8). Porém, nenhum número pode satisfazer ambas as condições, o que faria com que essa expressão fosse avaliada sempre como falso, independentemente do valor da categoria. Assim, sempre finalizaria o programa. Para tornar a lógica do programa correta, a condição testada deveria ser (categoria < 0 ou categoria > 8). c) Incorreto: não há problemas na condição do enquanto ser sempre verdadeira (poderia ter escrito 1=1 em vez de verdadeiro, por exemplo), esse é o chamado loop infinito. d) Incorreto: tem não tem erro de sintaxe, pois o comando escolha deveria poderia estar dentro da cláusula senão do comando condicional se. As estruturas “Se...Então” e “Se...Então...Senão” existem e as duas poderiam ser usadas nesse caso sem alterar a lógica do algoritmo. e) Incorreto: tem não tem erro de sintaxe, pois o comando escolha deveria poderia ter a cláusula senão, que é não é obrigatória. Gabarito: Letra B. 11- (FCC - 2016 - Prefeitura de Teresina - PI - Analista Tecnológico - Analista de Sistemas) Considere o algoritmo em pseudocódigo abaixo. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 48 de 95 www.exponencialconcursos.com.br Em relação ao algoritmo, é correto afirmar que a) o vetor C impresso é: 3 5 7 4 6 10 18 20. b) a variável cont conta o número total de elementos do vetor C resultante, ou seja, 9. c) a variável cont conta o número total de comparações para gerar o vetor C, ou seja, 3. d) o vetor C resultante intercala os elementos dos vetores A e B, ordenando- os. e) caso os elementos dos vetores A e B estivessem fora de ordem, o vetor C resultante conteria os elementos ordenados em ordem decrescente. Resolução: Nesse tipo de questão, temos que captar o objetivo geral do algoritmo mentalmente. Infelizmente fazer um “teste de mesa” em algoritmos com vetores geralmente é inviável, pois demoraria muito e não temos tempo sobrando durante a prova. O máximo que daria para fazer seria só testar o início do algoritmo e/ou fazer um exemplo com vetores menores para deduzir o que o algoritmo faz. Nesse algoritmo, você tem que notar que o vetor C é do tamanho da soma dos dois anteriores e que, a cada iteração do enquanto, o vetor C recebe um valor que vem do vetor A ou do B. Como a condição do se é (A[Ia] <= B[Ib]), então esse valor é sempre o menor9 dos dois, comparando 2 a 9 Se os valores forem iguais, pega-se o do vetor A Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 49 de 95 www.exponencialconcursos.com.br 2 os elementos de A e B a partir do início. Assim, faz com que o vetor C seja a “soma” dos vetores A e B, ordenando crescentemente os elementos. Vamos analisar cada uma das alternativas: a) Incorreto: o vetor C impresso é: 3 5 7 4 6 10 18 20 3 4 5 6 7 10 18 20. O vetor C é a junção do A e B, com os números em ordem crescente. b) Incorreto: a variável cont conta o número total de elementos do vetor C resultante, ou seja, 9 8. O vetor A tem 3 elementos e o B, 5 elementos. Como o vetor C é a junção dos outros dois, ele terá 3+5=8 elementos. c) Incorreto: a variável cont conta o número total de comparações para gerar o vetor C, ou seja, 3 8. Idem ao item (b). O total de comparações e o total de elementos de C são iguais, ambos 8. d) Correto: o vetor C resultante intercala os elementos dos vetores A e B, ordenando-os. Como a condição da comparação é (A[Ia] <= B[Ib]), então a ordem é crescente. e) Incorreto: caso os elementos dos vetores Ae B estivessem fora de ordem, o vetor C resultante conteria os elementos ordenados em ordem decrescente. A condição dos vetores A e B já estarem ordenados de forma crescente é essencial para que o vetor C também esteja ordenado de forma crescente. Por isso os dois erros desse item (e): A e B não podem estar fora de ordem; o vetor C resultando não é decrescente, é crescente. Para resultar numa ordenação decrescente, A e B deveriam ser decrescentes e a condição do se deveria ser (A[Ia] > B[Ib]) em vez de (A[Ia] <= B[Ib]). Gabarito: Letra D. 12- (FCC - 2018 - DPE-AM - Assistente Técnico de Defensoria - Programador) Considere que há 3 categorias para pagantes de pensões alimentícias: a primeira engloba os que pagam até 1 valor base (R$ 900.00), a segunda os que pagam de 2 até 4 valores base e a terceira os que pagam acima de 4 valores base. Um programador apresentou o trecho em pseudocódigo abaixo como solução para identificar os pagantes destas 3 categorias. Um Técnico Programador, ao analisar o trecho acima, afirma corretamente que Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 50 de 95 www.exponencialconcursos.com.br a) não há erro de lógica nem de sintaxe. b) o comando escolha deve ser substituído por um conjunto de comandos condicionais (se) aninhados que trate os valores da variável valor (do tipo real) como solicitado. c) o comando escolha é o mais adequado para a solução, pois os valores das pensões são múltiplos de 900.00. d) embora haja erro de sintaxe no comando escolha, a lógica da solução atende de forma correta o que foi solicitado no problema. e) para que a lógica da solução fique correta, basta trocar o tipo da variável valor para inteiro e retirar os .00 dos valores de cada caso do comando escolha. Resolução: No pseudocódigo apresentado, a variável valor pode ser qualquer valor monetário acima de R$ 0,00. Porém, como foi utilizada a estrutura “escolha...caso...”, esse valor será comparado com relação à igualdade com cada valor dentro de cada “caso”. Assim, valores menores que 900, por exemplo, entrariam erroneamente no “senão”, consequentemente sendo categorizados como da 3º categoria, o que está errado. Ou seja, qualquer valor diferente de 900, 1800, 2700 e 3600 imprimiria “Categoria 3”, o que vai de encontro ao que a questão pede. Assim, esse código está incorreto quanto à lógica, apesar de não ter nenhum erro de sintaxe. O correto seria substituir o “escolha...caso...” por algo como o trecho abaixo: se valor <= 900.00 então imprima("Categoria 1") senão se valor <= 3600.00 então imprima("Categoria 2") senão imprima("Categoria 3") fim_se fim_se Assim, qualquer valor menor ou igual a 900 seria da categoria 1. Valores maiores que 900 e menores ou iguais a 3600 (4 valores base) seria categoria 2 e, por fim, valores maiores que 3600 seria categoria 3. Vamos analisar cada uma das alternativas: a) Incorreto: não há há erro de lógica nem, mas não de sintaxe. Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 51 de 95 www.exponencialconcursos.com.br b) Correto: o comando escolha deve ser substituído por um conjunto de comandos condicionais (se) aninhados que trate os valores da variável valor (do tipo real) como solicitado. c) Incorreto: o comando escolha é não é o mais adequado para a solução, pois os valores das pensões são não são múltiplos de 900.00. A variável valor poderia ser qualquer número acima de 0. d) Incorreto: embora haja não haja erro de sintaxe no comando escolha, a lógica da solução atende não atende de forma correta o que foi solicitado no problema. e) Incorreto: para que a lógica da solução fique correta, basta trocar o tipo da variável valor para inteiro e retirar os .00 dos valores de cada caso do comando escolha. A solução correta envolve substituir o escolha por comandos se então aninhados. Gabarito: Letra B. 13- (FGV - 2010 - CODESP-SP - Técnico em Informática - Tipo 1) Observe o trecho de pseudocódigo abaixo, referente a um programa, que utiliza a estrutura de controle repetir ... até que ... Utilizando a estrutura de controle repetir ... até que ... e que produz o mesmo resultado, um pseudocódigo equivalente está indicado na opção: a) b) Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 52 de 95 www.exponencialconcursos.com.br c) d) e) Resolução: Primeiramente devemos saber o que é impresso no trecho da questão e de cada um dos itens para depois comparar qual imprime a mesma coisa. Como as estruturas de controle de repetição são intercambiáveis, ou seja, pode-se transformar uma na outra, é possível transformar uma estrutura “repita...até...” em um “enquanto”. Porém, essas estruturas tem duas diferenças principais. Primeiramente, o “repita...até...” é um loop pós-testado, isto é, o teste para verificar se o bloco será executado novamente acontece no final do bloco, garantindo que o bloco é executado pelo menos uma vez, já o “enquanto” é pré-testado. Em segundo lugar, na estrutura “repita...até...”, as instruções do bloco são executadas repetidamente enquanto a expressão lógica resultar em FALSO, ou seja, a partir do momento que a expressão resultar em VERDADEIRO, o fluxo do algoritmo sairá do laço; já no “enquanto”, o bloco é executado enquanto a expressão lógica for VERDADEIRO. Dito isso, podemos ver que o pseudocódigo do comando da questão imprime: 0 1 2 3 4 5 6 7. O -1 não é impresso, pois o X é incrementado antes da impressão. O 8 não é impresso, pois quando X=7 já sai do laço. Vamos analisar cada uma das alternativas: a) Incorreto: é impresso -1 0 1 2 3 4 5 6 7 b) Incorreto: é impresso -1 0 1 2 3 4 5 6 c) Incorreto: não é impresso nada d) Incorreto não é impresso nada Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 53 de 95 www.exponencialconcursos.com.br e) Correto: também é impresso 0 1 2 3 4 5 6 7 igual ao do “repita...até...”. Gabarito: Letra E. 14- (FGV - 2016 - COMPESA - Analista de Gestão - Administrador de Banco de Dados) Considere a série a seguir. 1+1/4+1/9+1/16+1/25.... Assinale a opção que indica o pseudocódigo que calcula e exibe corretamente o somatório dos dez primeiros termos dessa série. a) b) c) d) Curso: Tecnologia da Informação Teoria e Questões comentadas Prof. Yuri do Carmo Prof. Yuri do Carmo 54 de 95 www.exponencialconcursos.com.br e) Resolução: Primeiramente, precisamos entender a lei de formação da série. Repare que o denominador das frações são quadrados perfeitos. Assim, cada fração é da forma 1/i2, sendo que o i inicia em 1 e, como são dez termos, termina no 10. Nas alternativas, em vez da letra i, usaram a letra k. A variável s representa o acumulado da soma e a variável t representa o k-ésimo termo da série. Vamos analisar cada uma das alternativas: a) Incorreto: o único erro é a instrução t := 1.0/k*k. Do jeito que ela está escrita, sem usar parênteses, calculará erroneamente os termos da sequência. Note, por exemplo, que para k=2, teríamos 1.0/2*2 e, como não há precedência entre os operadores de divisão e multiplicação, a execução seria da esquerda para direita. Ou seja, seria feito o cálculo (1.0/2)*2, o qual resultaria em 1.0, diferente do 1/4 = 0.25 esperado. A instrução correta é t := 1.0/(k*k). b) Correto: conforme explicação anterior. c) Incorreto: o primeiro termo da sequencia deveria ser 1.0/(1*1) = 1, mas como o k inicia com 1 e é incrementado logo no início do while, o primeiro termo calculado foi erroneamente 1.0/(2*2) = 0.25. d) Incorreto: com o k iniciando com 0, o while executa
Compartilhar