Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMACAO_ORIENTADA_A_OBJETOS_I_QUESTIONARIO_UNIDADE_IV
PROGRAMACAO_ORIENTADA_A_OBJETOS_I_QUESTIONARIO_UNIDADE_IV
Analise o seguinte trecho de código em C# que utiliza uma expressão lambda. Determine qual
será o comportamento do programa ao ser executado e qual é o principal benefício de utilizar
uma expressão lambda neste contexto específico.
Resposta c.
Selecionada: O programa imprimirá os números 2, 4, 6, 8, 10, demonstrando a
aplicação eficiente de operações em coleções.
Respostas: a.
O programa imprimirá os números de 1 a 5, pois a expressão lambda
duplica cada elemento da lista.
b.
O programa resultará em um erro de compilação, pois as expressões
lambda não podem ser usadas com listas.
c.
O programa imprimirá os números 2, 4, 6, 8, 10, demonstrando a
aplicação eficiente de operações em coleções.
d.
O programa causará uma exceção em tempo de execução, pois a
expressão lambda está malformada.
e.
O programa não imprimirá nada, pois as expressões lambda não têm
efeito em operações de listas.
Considere o seguinte código C# que utiliza LINQ para filtrar dados em uma coleção.
Determine qual será o resultado da execução do programa e qual é a principal característica
do LINQ demonstrada neste exemplo.
Resposta b.
Selecionada: O programa imprimirá apenas os números pares da lista,
demonstrando a capacidade de filtragem do LINQ.
Respostas: a.
O programa imprimirá todos os números de 1 a 10, pois o LINQ não
afeta a coleção original.
b.
O programa imprimirá apenas os números pares da lista,
demonstrando a capacidade de filtragem do LINQ.
c.
Resultará em um erro de compilação, pois a sintaxe do LINQ está
incorreta.
e.
Nenhuma saída será produzida, pois a expressão LINQ é avaliada
apenas quando acessada.
Comentário Resposta: B.
da resposta:
Comentário: O código utiliza o método Where do LINQ para filtrar os
números pares da lista números. A expressão lambda n => n % 2 == 0 serve
como critério de filtragem, retornando apenas os números que são
divisíveis por 2. Portanto, o programa imprimirá os números pares da lista,
evidenciando a funcionalidade de filtragem do LINQ.
Avalie o código C# abaixo que usa LINQ para transformar uma coleção de objetos. Qual é o
resultado esperado da execução deste código e que aspecto do LINQ ele exemplifica?
Resposta c.
Selecionada: O programa imprimirá os nomes "ALICE", "BOB", "CHARLIE",
demonstrando a transformação de dados com LINQ.
Respostas: a.
O programa imprimirá os nomes na ordem original sem alterações, pois
o LINQ não modifica os elementos da coleção.
c.
O programa imprimirá os nomes "ALICE", "BOB", "CHARLIE",
demonstrando a transformação de dados com LINQ.
e.
Nenhuma saída será produzida, pois a consulta LINQ não é executada.
Considerando o processo de Garbage Collection (Coleta de Lixo) em C#, como ele difere da
gestão de memória em linguagens sem um sistema de GC, como C++, e qual é o seu impacto
na estabilidade das aplicações?
Resposta c.
Selecionada: O GC automatiza a liberação de memória em C#, reduzindo erros como
vazamentos de memória.
Respostas: a.
O GC em C# diminui a estabilidade das aplicações ao liberar memória
de forma aleatória.
b.
Em C#, o GC aumenta a complexidade do código, pois exige a liberação
manual de memória.
c.
O GC automatiza a liberação de memória em C#, reduzindo erros como
vazamentos de memória.
d.
O GC em C# e a gestão de memória em C++ são funcionalmente
idênticos.
e.
Em C#, o GC impede totalmente a ocorrência de vazamentos de
memória.
Comentário da Resposta: C.
resposta:
Comentário: O Garbage Collection em C# automatiza o processo de
liberação de memória, identificando e liberando a memória que não é mais
necessária. Isso contrasta com linguagens como C++, onde a gestão de
memória é manual e pode levar a erros como vazamentos de memória.
Resposta c.
Selecionada: A instrução using garante que o método Dispose seja chamado
automaticamente.
b.
Ela permite a criação de múltiplas instâncias de objetos
simultaneamente.
c.
A instrução using garante que o método Dispose seja chamado
automaticamente.
d.
Aumenta o desempenho da aplicação ao reduzir o uso de memória.
e.
A instrução using é utilizada para melhorar a interface gráfica da
aplicação.
Comentário da Resposta: C.
resposta:
Comentário: A instrução using em C# é projetada para garantir que o
método Dispose seja chamado automaticamente ao final do escopo do
objeto, permitindo a liberação eficiente de recursos não gerenciados, como
conexões de banco de dados ou handles de arquivos.
Resposta c.
Selecionada: Debugging permite a execução passo a passo do código, enquanto
tracing foca no registro contínuo da execução.
b.
Tracing é utilizado para corrigir erros, enquanto debugging é usado para
monitoramento.
c.
Debugging permite a execução passo a passo do código, enquanto
tracing foca no registro contínuo da execução.
d.
Debugging é apenas usado em ambientes de produção, ao contrário do
tracing.
Comentário Resposta: C.
da resposta:
Comentário: No contexto do desenvolvimento de software em C#,
debugging (depuração) refere-se ao processo de identificar e corrigir erros
no código-fonte, geralmente permitindo a execução passo a passo e a
inspeção de variáveis. Tracing (rastreamento), por outro lado, envolve o
registro contínuo da execução do programa, como através de logs, sem
Examine o seguinte trecho de código C# que utiliza threads e tasks para executar operações
em paralelo. Identifique qual será o resultado da execução do programa e qual é a principal
diferença entre a utilização de threads e tasks neste contexto.
Resposta c.
Selecionada: A task e a thread executam em paralelo, mas a task fornece melhor
gerenciamento e eficiência de recursos.
Respostas: a.
Ambas, thread e task, executam simultaneamente, mas a thread não
garante a ordenação na execução.
b.
Apenas a thread será executada, pois a task é bloqueada pelo método
Wait.
c.
A task e a thread executam em paralelo, mas a task fornece melhor
gerenciamento e eficiência de recursos.
d.
O programa resultará em um deadlock devido ao uso simultâneo de
thread e task.
e.
O programa executará primeiro a task e depois a thread, demonstrando
a prioridade das tasks sobre threads.
Comentário Resposta: C.
da resposta:
Comentário: No código fornecido, tanto a thread quanto a task são iniciadas
para executar operações em paralelo. A principal diferença reside no fato de
que as tasks, ao contrário das threads, são abstrações de alto nível sobre
threads e oferecem melhor gerenciamento e eficiência de recursos. Elas são
mais leves e permitem um controle mais fácil do fluxo de trabalho
assíncrono, além de integração com outras funcionalidades do .NET, como a
espera assíncrona com await. A utilização de task.Wait() bloqueia a execução
do programa até que a task seja concluída, enquanto a thread é executada
independentemente.
Baseado no uso prático de diferentes estruturas de dados, qual das seguintes opções melhor
descreve um cenário adequado para a aplicação da estrutura de dados “Heap”, e por quê?
Resposta b.
Selecionada: Gerenciamento de tarefas em um sistema operacional, para priorizar
processos.
Respostas: a.
Ordenação de uma lista de livros em uma biblioteca, devido à sua
natureza hierárquica.
b.
Gerenciamento de tarefas em um sistema operacional, para priorizar
processos.
c.
Armazenamento de informações de músicas em um serviço de
streaming, por ser uma estrutura auto balanceada.
d.
Representação de uma rede social, para visualizar relações entre
usuários.
e.
Implementação de um sistema de navegação GPS, devido à sua
capacidade de armazenar caminhos.
Comentário Resposta: B.
da resposta:
Comentário: Heaps, especialmente max-heaps e min-heaps, são eficazes
para priorizar elementos, onde o elemento de maior ou menor prioridade é
sempre acessível na raiz da heap. No gerenciamento de tarefas de um
sistema operacional, os heaps permitem priorizar processos de forma
eficiente, garantindo que tarefas críticas sejam atendidas primeiro. Esta
aplicação aproveita a eficiência dos heaps em operações como inserção e
remoção do elemento de maior ou menor prioridade.
Considere os algoritmos de ordenação (Selection Sort, Insertion Sort, Bubble Sort e Quick
Sort) e suas características. Qual dos seguintes algoritmos apresenta, em média, a melhor
complexidade de tempo em cenários de grandes volumes de dados, e por que essa
complexidade o torna mais eficiente nesses casos?
Resposta d.
Selecionada: Quick Sort, por sua abordagem de divisão e conquista e complexidade
média de O(n log n).
Respostas: a.
Selection Sort, pois seleciona sempre o menor elemento para a posição
correta.
b.
Insertion Sort, devido à sua eficiência com listas parcialmente
ordenadas.
c.
Bubble Sort, porque compara e troca pares de elementos adjacentes.
d.
Quick Sort, por sua abordagem de divisão e conquista e complexidade
média de O(n log n).
Comentário Resposta: D.
da resposta:
Comentário: O Quick Sort é mais eficiente em grandes volumes de dados
devido à sua abordagem de divisão e conquista, que permite dividir o
problema em subproblemas menores, tratando-os independentemente.
Sua complexidade de tempo média é de O(n log n), o que é
significativamente mais rápido do que os algoritmos de ordenação
quadrática como Selection Sort, Insertion Sort e Bubble Sort, cuja
complexidade é de O(n²) para a maioria dos casos.
Considerando os algoritmos de grafos (Kruskal, Prim e Dijkstra), qual é o mais adequado para
encontrar o caminho mais curto em uma rede de transporte público e por quê?
Resposta c.
Selecionada: Algoritmo de Dijkstra, pois é especializado em encontrar o caminho
mais curto entre dois pontos.
Respostas: a.
Algoritmo de Kruskal, pois encontra a Árvore Geradora Mínima em um
grafo.
b.
Algoritmo de Prim, por sua eficiência em conectar todos os vértices
com o menor custo total.
c.
Algoritmo de Dijkstra, pois é especializado em encontrar o caminho
mais curto entre dois pontos.
d.
Todos são igualmente adequados para encontrar caminhos em redes
de transporte público.
Comentário Resposta: C.
da resposta:
Comentário: O algoritmo de Dijkstra é o mais apropriado para encontrar o
caminho mais curto em uma rede de transporte público, pois é projetado
especificamente para esse propósito. Ele calcula o caminho mais curto de
um ponto a outro em um grafo ponderado, considerando as distâncias ou
custos associados a cada aresta. Este algoritmo é ideal para otimizar rotas
em redes de transporte, onde é essencial determinar o trajeto mais eficiente.