Avaliação de Algoritmo e Lógica de Programação – Curso de Engenharia – Anhanguera (com respostas comentadas)

Questão 1

“A tarefa mais difícil ao se construir um programa de computador é a identificação de todos os pequenos problemas que compõem o problema grande que você está tentando solucionar. Justamente porque os computadores são absolutamente burros, você deve informar-lhes em detalhes tudo o que devem fazer. Se você fornece instruções incompletas ou ambíguas, o computador para de executar o programa, aguardando que você seja mais claro e mais preciso em suas instruções”.

Observe algumas das instruções encontradas em uma receita de bolo:

  1. Adicione dois ovos.
  2. Adicione um pouco de farinha.

III. Misture em uma batedeira durante cinco minutos.

  1. Adicione maisena até que a massa fique consistente.

Assinale a alternativa que contém apenas instruções precisas e não ambíguas:

  1. A) I e II, apenas.
  2. B) I e III, apenas.
  3. C) I e IV, apenas.
  4. D) II e IV, apenas.

Resposta: Alternativa B.

Comentário: Levando-se em consideração tratar-se de uma receita de bolo, todas as alternativas são coerentes, porém, pede-se no enunciado assinalar somente instruções precisas e não ambíguas, tomando como base instruções para programa de computador. Com isso em mente, a única instrução precisa seria a primeira, que diz qual ação deve ser executada, com o que executá-la e em qual quantidade:

Instrução I – “Ação: Adicionar. O que: ovos. Quantos: dois”.

Todas as demais podem ser consideradas ambíguas ou não precisas:

Instrução II – “Ação: Adicionar. O que: farinha. Quanto: um pouco (impreciso)”.
Instrução III – “Ação: Misturar. O que: (não especifica). Quanto tempo (para a ação de misturar): cinco minutos”.
Instrução IV – “Ação: Adicionar. O que: Maisena. Quanto: até que fique consistente (impreciso).

Como não existe alternativa somente com a instrução I, o mais coerente é assumir que se saiba o que misturar, por causa do contexto da receita.

Questão 2

Um shopping center está com uma exposição que ensina a lógica de programação aos visitantes. A exposição é dividida em circuitos e, de acordo com este, o seu nível de dificuldade: fácil, médio ou difícil, respectivamente, sendo que, a medida em que o usuário elabora de forma coerente um algoritmo, ele pode passar para o próximo nível. Um dos desafios propostos em um primeiro nível do circuito é para que o usuário entenda e aprenda a apresentar informações na tela. Além disso, ele também deverá realizar um cálculo da idade. A partir desse problema o usuário precisa identificar as variáveis e o seu tipo de dado correspondente.

Dentre as alternativas apresentadas na sequência, assinale a que representa as variáveis e os seus respectivos tipos de dados correspondentes:

  1. A) dia, mes, ano, anoAtual, idade, nome: caractere.
  2. B) dia, mes, ano, anoAtual, idade: real.
  3. C) dia, mes, ano, idade, nome: logico.
  4. D) dia, mes, ano, anoAtual, idade: inteiro nome: caractere.

Resposta: Alternativa D.

Comentário: Não se comenta no enunciado a necessidade de informar “nome” para calcular a idade, mas também não existe outra alternativa que se encaixe no tipo de variável a ser utilizado. O programa até funcionaria com variáveis declarada como na alternativa B, mas não é correto usar tipo Real (com casas decimais) para números inteiros, como dia, mes, ano, idade…

Questão 3

O comando “if” executará uma vez uma única instrução ou um grupo de instruções entre chaves se a condição a ser testada for verdadeira. Não fará nada se a condição a ser testada for falsa. O comando “else”, quando associado ao comando “if”, executará uma única vez uma instrução ou um grupo de instruções entre chaves, se a condição de teste do comando “if” for falsa.

Observe o trecho de código a seguir

int Valor1, Valor2;   printf(“Insira um valor para Valor1:”); scanf(“%d”, & Valor1);
printf(“Insira um valor para Valor2:”); scanf(“%d”, & Valor2); if (Valor1 != Valor2) {
printf(“Valor1 não é igual a Valor2.”);} else if (var1 >var2)     {       printf(“Valor1 é maior que Valor2.”);    }    else if (var2 > var1)    {     printf(“Valor1 é menor que Valor2.”);    }
else     {      printf(“Valor1 é igual a Valor2.”);        }

Qual é o resultado deste trecho de código se inserirmos o valor 12 para Valor1 e o valor 10 para o Valor2?

  1. A) Valor1 não é igual a Valor2.
  2. B) Valor1 não é igual a Valor2. Valor1 é maior que Valor2.
  3. C) Valor1 não é igual a Valor2. Valor1 é menor que Valor2.
  4. D) Valor1 não é igual a Valor2. Valor1 é igual a Valor2.

Resposta: Alternativa A.

Comentário: Analisando o código, linha a linha:

Falta a instrução de include para reconhecimento dos comandos #include <stdio.h>

int Valor1, Valor2;   Declaração das variáveis do tipo Inteiro

Falta um int Main() neste ponto

printf(“Insira um valor para Valor1:”);   Imprime a frase entre aspas na tela

scanf(“%d”, & Valor1);   Aguarda a entrada de um valor pelo usuário e armazena na variável Valor1

printf(“Insira um valor para Valor2:”);   Imprime a frase entre aspas na tela

scanf(“%d”, & Valor2);   Aguarda a entrada de um valor pelo usuário e armazena na variável Valor2

if (Valor1 != Valor2)   Verifica se o conteúdo de Valor1 é diferente de Valor2
{
printf(“Valor1 não é igual a Valor2.”);   Imprime a frase entre aspas na tela
}
else if (var1 >var2)    neste ponto o compilador mostraria erro, já que as variáveis var1 e var2 não foram declaradas, e enceraria antes mesmo da execução.

{
printf(“Valor1 é maior que Valor2.”);
}
else if (var2 > var1)
{
printf(“Valor1 é menor que Valor2.”);
}
else
{
printf(“Valor1 é igual a Valor2.”);
}

Portanto, a resposta correta seria “O programa não será executado por falta de parâmetros essenciais necessários ou erro de código”. Como não existe essa opção, deixando de lado esses “detalhes”, e mesmo que considerássemos que todos os IFs comparassem Valor1 e Valor2, ao invés de var1 e var2, a execução não passaria pelos IFs seguintes após a comparação da primeira condição (Valor1 != Valor2), pois essa é verdadeira e o else só seria acionado caso a comparação fosse falsa. Todos os outros IFs estão dentro do primeiro else.

Questão 4

O desenvolvimento de algoritmos leva a uma preparação da lógica de programação requerida para que se transcrevam as situações empresariais, por exemplo, as regras de negócio, para uma linguagem de programação. Em função da sintaxe ser diferente, é preciso adaptar-se e aprender sobre o ambiente de programação que se pretende trabalhar o projeto. No entanto, de acordo com cada paradigma de programação, estruturada ou orientada a objetos, é preciso seguir a sequência lógica em que o programa deverá executar e processar as informações. Neste contexto, o que se sugere é que a partir de uma linguagem simples você possa desenvolver a habilidades requeridas. O segredo para ser um bom analista ou desenvolvedor de software é a prática!

Assinale a alternativa que descreve corretamente os significados, respectivamente, de “printf” e “%d”.

  1. A) O comando printf e a expressão %d representam, respectivamente, a leitura de um dado e o seu tipo de dado como float, que é equivalente à real na sintaxe do VisuAlg.
  2. B) O comando printf representa apenas a leitura de dados e o “%d” apresenta a exibição e chama o valor da variável tipo inteiro.
  3. C) O comando printf representa o tipo de dado inteiro e o “%d” representa a exibição do dado na tela.
  4. D) O comando printf indica a exibição do dado na tela, é um comando de saída. Já o “%d” indica que será exibido o valor contido em uma variável do tipo inteiro, precedido do respectivo nome da variável no comando.

Resposta: Alternativa D.

Comentário: Printf mostra o texto que estiver entre aspas na tela e %d determina o local onde será exibido o valor da variável do tipo inteiro, porém, nunca “precedido” do nome da variável, uma vez que precedido significa “vir antes de” e a variável sempre é informada após o texto onde se encontra o %d. A alternativa D é a única que se encaixa nos significados dos comandos, porém ignorando-se o complemento da resposta que está completamente equivocado de acordo com a sintaxe correta do comando printf(“Texto a ser exibido: %d”, variavel).

Questão 5

“A grosso modo, um algoritmo é um procedimento determinístico que pode ser aplicado a vários tipos de problemas simbólicos resultando, eventualmente, em uma solução. Um algoritmo pode ser definido como sendo um conjunto de instruções de tamanho finito. Qualquer algoritmo para resolução de problemas clássicos de matemática, por exemplo, pode ser descrito em um número finito de palavras em linguagem humana”

De acordo com as definições acima, qual das alternativas a seguir contém apenas aplicações de algoritmos para resolver problemas?

Assinale a alternativa correta.

  1. A) I, II, III e IV.
  2. B) I, II e III apenas.
  3. C) I, II e IV apenas.
  4. D) I, III e IV, apenas.

Resposta: Alternativa C.

Comentário: A única alternativa que não é possível resolver com um algoritmo é a III. Isso porque o algoritmo, além de preencher o bilhete (o que seria completamente possível), não conseguiria fazê-lo garantindo o acerto dos 6 números) (Ah! Se fosse possível…)

Questão 6

Um shopping center está com uma exposição que ensina a lógica de programação aos visitantes. A exposição é dividida em circuitos e, de acordo com este, o seu nível de dificuldade: fácil, médio ou difícil, respectivamente, sendo que, a medida em que o usuário elabora de forma coerente um algoritmo, ele pode passar para o próximo nível. Um dos desafios propostos em um primeiro nível do circuito é para que o usuário entenda e aprenda a apresentar informações na tela. Além disso, ele também deverá realizar um cálculo da idade. A partir desse problema o usuário precisa identificar as variáveis e o seu tipo de dado correspondente.

Assinale a expressão que representa a sintaxe correta para realizar o cálculo da idade utilizando o VisuAlg.

  1. A) idade <- anoAtual – ano.
  2. B) idade == anoAtual – ano.
  3. C) idade =! anoAtual – ano.
  4. D) idade && anoAtual = ano.

Resposta: Alternativa A.

Comentário: Fora a alternativa A, todas as demais não pertencem ao VisuAlg e/ou não são sintaxe corretas de comandos.

Questão 7

“A parte mais difícil para quem está começando a programar é pensar, antecipadamente, quais dados irá utilizar durante a execução de seu programa e quais poderiam ser as possíveis soluções resultantes desta execução. Isso tudo após, é claro, pensar na sequência dos passos que resolverão o problema em questão. Quando pensar em dados a serem processados pelo programa ou algoritmo, você deve pensar na forma e no tamanho que eles poderão ter”.

Observe os dados a seguir:

  1. 1699;
  2. 3,141592;

III. Verdadeiro;

  1. “Dulcídio Vanderley Boschilla”;
  2. “A”.

Escolha a alternativa que classifica adequadamente (sob o ponto de vista de estruturas de dados para programação) os dados acima:

  1. A) I-Número; II-Número; III-Palavra; IV-Nome; V-Letra.
  2. B) I-1699; II-3,141592; III-Verdadeiro; IV-“Dulcídio Vanderley Boschilla”; V-“A”.
  3. C) I-dado; II-dados; III-dado; IV-dados; V-dado.
  4. D) I-Inteiro; II-Real; III-Lógico; IV-Sequência (ou vetor) de caracteres; V-Caracter.

Resposta: Alternativa D.

Comentário: 1699 – valor inteiro (int em algumas linguagens de programação)
3,141592 – valor decimal (real em algumas linguagens de programação)
Verdadeiro – Expressão Lógica (true em algumas linguagens de programação)
“Dulcídio Vanderley Boschilla” – Cadeia de caracteres (string em algumas linguagens, no C++ precisa ser formada por um vetor de caracteres do tipo char, que comporta um caractere cada)
“A” – Caracter (char em algumas linguagens de programação)

Questão 8

“Em programa existem comandos que, a partir de uma condição, permitem que o programa siga por um caminho ou siga por outro. Da mesma forma que acontece em situações do cotidiano, por exemplo, se chover vou à escola de ônibus, senão vou à escola caminhando. Nesse caso a condição contida na frase é estar chovendo ou não (se chover), e a partir desta condição, é feita a escolha por uma das duas ações”.

Observe o trecho de pseudocódigo a seguir, representando uma estrutura simples de decisão:

Se (Condição)
Então
Ação 1
Senão

Ação 2
FimSe

Agora leia as assertações a seguir:

  1. “Condição” é uma expressão lógica, cujo resultado deve ser “verdadeiro” ou “falso”.
  2. “Ação 1” não será executada a menos que “Condição 1” seja falso.

III. A ordem de execução será: teste de veracidade de “Condição”, depois “Ação 1”, depois “Ação 2”.

  1. Nunca teremos a execução de “Ação 1” e “Ação 2” em uma única passagem por este trecho de código.

São corretas:

  1. A) I e II, apenas.
  2. B) I e III, apenas.
  3. C) I e IV, apenas.
  4. D) II e III, apenas.

Resposta: Alternativa C.

Comentário: As “assertações” I e IV estão corretas, já a II e III não, pois:

“Ação 1” não será executada a menos que “Condição” seja VERDADEIRA.

A ordem de execução será: teste de veracidade de “Condição”, se VERDADEIRA executa “Ação 1”, se FALSA executa “Ação 2”.

Questão 9

“A estrutura ‘para-até-faça’, também conhecida como ‘desde-até-faça’, é um caso particular da estrutura ‘enquanto’. É particular pois implementa uma estrutura que vai repetir os comandos, utilizando-se de um contador que possui um certo valor inicial e que, por meio de incrementos inteiros vai alcançar um valor final pré-definido, O número de repetições a serem executadas será função dos valores iniciais do contador”.

Sob o ponto de vista de lógica de programação, qual é a principal diferença entre “para-até-faça” e as demais estruturas de repetição?

  1. A) Funciona com contadores que sejam inteiros.
  2. B) Executa pelo menos uma vez os comandos do laço de repetição.
  3. C) Testa primeiro a condição antes de executar os comandos do laço de repetição.
  4. D) Facilita a codificação em estruturas que requerem um número finito de repetiçoes.

Resposta: Alternativa D.

Comentário: As alternativas A, B e C são tão verdadeiras quanto a alternativa D, porém, interpretando o enunciado, é solicitada a PRINCIPAL diferença das demais estruturas de repetição. Portanto a alternativa A não é diferença expressiva, já que não existe nenhuma estrutura que trabalhe exclusivamente com contadores fracionais. A alternativa B também acontece em outras estruturas de repetição. E por fim, a alternativa C é o padrão para a maioria das estruturas de repetição, apesar de existirem as que testam a condição no final.

Portanto, mesmo sendo possível utilizar-se de outros tipos de estrutura de repetição para executar um número finito de vezes uma repetição, a maneira mais fácil é mesmo com o “para-até-faça”.

Questão 10

Observe a declaração da matriz de cadeias de caracteres (“strnigs”) a seguir, em que cada posição da matriz 5×8 tem uma string de 20 caracteres cada, ou seja, cada palavra representa um elemento (coluna) da matriz.

var matriz Jaburu[1..5, 1..8] de caractere

Em determinada parte do programa em VisuAlg que utiliza esta matriz, a mesma é preenchida com várias palavras, ficando com a seguinte configuração:

O A Aquele Aquela Um Uma Este Esta homem mulher sapo galinha gambá girafa coelho besouro correu voou nadou termeu caiu girou pulou berrou no na entre por em pelo pela para rio céu rodovia panela escritório shopping mesa fogão

Após o preenchimento, o programa prossegue com o seguinte comando:

escreva(Jaburu[1,1], Jaburu[2,3], Jaburu[3,7], Jaburu[4,2], Jaburu[5,4])

O resultado do comando acima, levando em consideração a matriz preenchida é:

  1. A) A galinha berrou pelo escritório.
  2. B) O sapo pulou na panela.
  3. C) Aquele homem tremeu no shopping.
  4. D) Este gambá caiu no fogão.

Resposta: Alternativa B.

Comentário: Para solucionar esta questão, basta se atentar à primeira referência à matriz, posição [1,1], ou seja, linha 1 e coluna 1. Mesmo se confundindo entre coluna e linha, a posição [1,1] será exatamente a mesma, a letra “O”. E a única alternativa que começa com “O” é a B.
Agora, caso não se iniciasse na posição[1,1], bastaria separar as palavras de 8 em 8 grupos:

  Col 1 Col 2 Col 3 Col 4 Col 5 Col 6 Col 7 Col 8
Lin 1 O A Aquele Aquela Um Uma Este Esta
Lin 2 Homem Mulher Sapo Galinha Gambá Girafa Coelho Besouro
Lin 3 Correu Voou Nadou Tremeu Caiu Girou Pulou berrou
Lin 4 No Na Entre Por Em Pelo Pela Para
Lin 5 Rio Céu Rodovia Panela Escritório Shopping Mesa Fogão

Espero que ajude na correção, entendimento e principalmente no esclarecimento das dúvidas geradas pelas informações não precisas.

Bons estudos!

Prof. Cassio Santos

Anúncios