Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul RESPOSTA AO RECURSO NÚMERO DA VAGA: 32 QUESTÃO: 17 MOTIVO ALEGADO PELO CANDIDATO: A questão de número de 17, para a vaga de número 32 (Informática: Programação/Programação WEB) deve ser anulada. A opção 'E' também está incorreta (além da opção 'B'). "O código descrito na opção E, quando n=1, leva ao cálculo de retorno da função 1/2 + 1 = 1,5 Essa função seria baseada na truncagem do número 1,5 para retornar 1, não sendo uma boa prática de programação (inclçusive os compiladores levantam um warning em cima do método por conta dessa truncagem). Sendo assim a questão deveria ser anulada." A opção E também está incorreta, segue complemento da minha fundamentação enviada em formulário anterior." "Complementando meu recurso anterior, na verdade o compilador não aceita essa construção proposta na letra 'E' public int fatorial (int n) { if (n<=2) return (n/2 + 1); } O erro apresentado é o seguinte... THIS METHOD MUST RETURN A RESULT OF TYPE INT." Complementando, o compilador não aceita essa construção proposta na letra 'E' public int fatorial (int n) { if (n<=2) return (n/2 + 1); } O erro apresentado é o seguinte... THIS METHOD MUST RETURN A RESULT OF TYPE INT. RESPOSTA: ( ) DEFERIDO ( X ) INDEFERIDO Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul FUNDAMENTAÇÃO: Divisão de números inteiros em linguagem C resulta em número inteiro. De acordo com "The C Standard", subcláusula 6.5.5 [ISO/IEC 9899:2011]: "When integers are divided, the result of the / operator is the algebraic quotient with any fractional part discarded. If the quotient a/b is representable, the expression (a/b)*b + a%b shall equal a." Isso significa que, em uma divisão de números inteiros, a parte fracionária é descartada, o que resulta em um número inteiro. Considere o seguinte programa (Figura 1) escrito em linguagem C: Figura 1. Exemplo de divisão de números inteiros. O programa cria 3 variáveis do tipo inteiro. À variável a é atribuído o valor 5 e à variável b é atribuído o valor 4. A variável c recebe o valor da divisão de a por b. Caso o resultado da divisão fosse fracionário (1.25), ocorreria um erro de tipo incompatível em c = a / b;, contudo, o programa compila e executa corretamente e exibe o valor 1 (inteiro) como resultado exibido pelo comando printf("%d\n", c);, o que pode ser observado na figura abaixo. Figura 2. Compilação e execução do exemplo da Figura 1. Considerando a operação descrita pelo candidato: 1/2 + 1 = 1,5. Quando essa operação é atribuída a um valor inteiro, o resultado é inteiro. O código de um programa que testa isso é apresentado na Figura 3 e o resultado obtido é apresentado na Figura 4. Figura 3. Código-fonte com exemplo do cálculo sugerido pelo candidato Figura 4. Execução do programa apresentado na Figura 3. A implementação da função da questão 17 da prova 32, utilizando o opção E, é apresentada na Figura 5. Juntamente com ela está implementado um exemplo de utilização da função, mostrado no método main. Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul Figura 5. Implementação da questão 17 da prova 32 utilizando a opção E. A compilação e execução desse programa é correta e não exibe nenhum erro, conforme apresentado na Figura 6, abaixo. Figura 6. Compilação e execução do programa da questão 17 (prova 32) utilizando a opção E O compilador utilizado foi o gcc 4.4.3, conforme apresentado na figura abaixo. Figura 7. Descrição do compilador utilizado Referência: [ISO/IEC 9899:2011] ISO/IEC. Programming Languages—C, 3rd ed (ISO/IEC 9899:2011). Geneva, Switzerland: International Organization for Standardization, 2011, página 92. Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul RESPOSTA AO RECURSO NÚMERO DA VAGA: 32 QUESTÃO: 17 MOTIVO ALEGADO PELO CANDIDATO: Solicito a anulação da questão 17 pelos motivos expostos na fundamentação. "De acordo com o gabarito divulgado, a opção correta a ser marcada nesta questão seria a letra B, indicando que o comando que tornaria incorreta a função apresentada no enunciado seria o seguinte: if (n == 1) return 1; Entretanto, se considerarmos que este comando torna a função incorreta, então outras duas opções apresentadas (C e D) também estariam erradas. Para que este comando apresentado acima seja executado, o valor de n deve, obrigatoriamente, ser 1. Caso o valor de n passado como parâmetro ao método seja 1, os comandos apresentados nas letras C e D também retornariam 1 como resultado da função. Analisando (com n = 1): Letra B: if (n == 1) return 1; Como o n é igual a 1, o resultado retornado seria 1. Letra C: if (n <= 1) return 1; Como o n é igual a 1 e a condição abrange valores menores ou iguais a 1, o resultado retornado seria 1. Letra D: if (n < 2) return 1; Como o n é igual a 1 e a consulta abrange qualquer valor menor que 2, o resultado retornado seria 1. Em resumo, se considerarmos que a letra B torna incorreta a função apresentada na questão, então as letras C e D também gerariam o mesmo efeito." RESPOSTA: ( ) DEFERIDO ( X ) INDEFERIDO FUNDAMENTAÇÃO: O conceito de fatorial é bem conhecido na programação. É o exemplo mais comum utilizado no ensinamento de recursão em programação. Mesmo assim, abaixo segue a definição: Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul "Ao produto dos números naturais começando em n e decrescendo até 1 denominamos de fatorial de n e representamos por n!. Segundo tal definição, o fatorial de 5 é representado por 5! e lê-se 5 fatorial. 5! é igual a 5 . 4 . 3 . 2 . 1 que é igual a 120, assim como 4! é igual a 4 . 3 . 2 . 1 que é igual a 24, como 3! é igual a 3 . 2 . 1 que é igual a 6 e que 2! é igual a 2 . 1 que é igual a 2. Por definição tanto 0!, quanto 1! são iguais a 1." (Matemática Didática) A Tabela 1 a seguir mostra o fatorial de alguns números a partir de zero: Tabela 1. Lista de alguns fatoriais (Math is Fun) n n! 0 1 1 1 2 2 3 6 4 24 5 120 6 720 Na questão 17, são apresentadas alternativas para o preenchimento de uma função fatorial e pede-se para indicar qual das alternativas é incorreta. Dado isso, analizarei as 3 alternativas indicadas pelo candidado. Alternativa B: Caso fosse escolhida a alternativa B, o código resultante seria o seguinte: int fatorial(int n) { if (n == 1) return 1; return (n * fatorial(n-1)); } Essa função funciona para valores maiores ou iguais à 1. Caso o valor seja maior que um, a função chamará ela mesmo, recursivamente, diminuindo o valor passado por parâmetro até que atinja a condição de parada de n igual a 1. Caso o valor passado seja 1. A função simplesmente retornará 1 como resposta, o que, segunda a Tabela 1, está correto. Contudo, caso o valor passado seja 0, a função chamará ela mesmo indefinidamente, onde o valor de n, passado por parâmetro será menor que zero e continuará a diminuir, nunca atingindo a condição de parada. Portanto, essa alternativa está incorreta, conforme o gabarito. Alternativa C: Caso fosse escolhida a alternativa C, o código resultante seria o seguinte: int fatorial(int n) { if (n <= 1) return 1; return (n * fatorial(n-1)); } Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul Essa função é correta, pois ela funciona para valores maiores que 1, chamando ela mesma recursivamente até atingir a condição de parada. E também funciona para os valores 0 e 1, pois esses valores são verdadeiros na condição de parada (menor ou igual à 1) e seu resultado está de acordo com o apresentado na Tabela 1. Alternativa D: Caso fosse escolhida a alternativa D, o código resultante seria o seguinte: int fatorial(int n) { if (n < 2) return 1; return (n * fatorial(n-1)); } O mesmo dito sobre a alternativa C pode ser dito aqui, a diferença está na condição de parada. Enquanto na alternativa C a condição é "menor ou igual à 1", na alternativa D a condição de parada é "menor que 2". Como somente são utilizados valores inteiros, as duas condições são equivalentes. Ainda resalto que valores negativos não precisam ser considerados na questão, como citado na própria: "Considerando que somente valores maiores ou iguais a zero serão passados à função e sabendo que o fatorial de zero é um e o fatorial de um número inteiro positivo é a multiplicação dele com todos os números inteiros menores que ele e maiores que zero, indique a opção que, ao ser colocada no lugar da linha tracejada, torna essa função incorreta." Referências: Matemática Didática, http://www.matematicadidatica.com.br/Fatorial.aspx, acessado em 17/12/2013; Math is fun, http://www.mathsisfun.com/numbers/factorial.html, acessado em 17/12/2013. Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul RESPOSTA AO RECURSO NÚMERO DA VAGA: 32 QUESTÃO: 24 MOTIVO ALEGADO PELO CANDIDATO: O candidato solicita anulação da questão por alegar que as quatro alternativas da questão 24 funcionam perfeitamente, “exibindo no navegador uma caixa de texto habilitada para que o usuário informe qualquer valor”. RESPOSTA: ( ) DEFERIDO ( X ) INDEFERIDO FUNDAMENTAÇÃO: Conforme “OLIVIERO, Carlos A. J. Faça um site orientado por objetos – PHP 5.2 com MySQL 5.0” e “SILVA, MAURÍCIO SAMY. Construindo sites com CSS E (X)HTML – Editora Novatec”, existem elementos obrigatórios para a criação de caixas de texto. Eles são: NAME e TYPE. Esse último, sempre com “text” entre aspas. As demais alternativas sequer tinham o TYPE. Solicitação indeferida. Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul RESPOSTA AO RECURSO NÚMERO DA VAGA: 32 QUESTÃO: 28 MOTIVO ALEGADO PELO CANDIDATO: Solicito a anulação da questão 28, pois existe um erro no primeiro comando SQL apresentado. Estando este comando errado, não existe nenhuma opção F-F-V-F disponível para marcação no gabarito, motivo pela qual solicito a anulação. A subconsulta existente no primeiro comando SQL apresentado pela questão 28 está realizando uma filtragem dos departamentos para buscar o código apenas daquele cujo nome é Dep1. Entretanto, no comando SQL impresso na prova para esta filtragem consta apenas a abertura das aspas simples, sem o seu fechamento, o que ocasionará erro na execução. O comando disponibilizado na prova é o seguinte: SELECT Nome, Salario FROM Funcionario WHERE Cod_depto in (SELECT Codigo FROM Departamento WHERE Nome = 'Dep1); Veja que não se trata de um erro de impressão, pois o comando foi finalizado corretamente com o fechamento do parêntese e o ponto e vírgula. O comando correto deveria ser o seguinte: SELECT Nome, Salario FROM Funcionario WHERE Cod_depto in (SELECT Codigo FROM Departamento WHERE Nome = 'Dep1'); Ou seja, o parâmetro passado ao filtro da subconsulta deveria estar entre aspas simples (abertura e fechamento), e não apenas com a abertura das aspas simples conforme está no caderno de provas. RESPOSTA: ( X ) DEFERIDO ( ) INDEFERIDO FUNDAMENTAÇÃO: O candidato alega que há um erro em uma das alternativas mencionadas como correta, pois, não há o fechamento de aspas simples em: SELECT Nome, Salario FROM Funcionario WHERE Cod_depto in (SELECT Codigo FROM Departamento WHERE Nome = 'Dep1); Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul O que causa erro na execução do comando. O candidato solicita anulação da questão. Realmente existe a falta das aspas simples no final do comando, o que faz com que a consulta não seja executada, tornando a alternativa falsa. Não há alternativa que possa ser utilizada para alteração de gabarito, devendo a questão ser anulada.