O pensamento computacional pode ser aplicado em diversas áreas do conhecimento e da prática profissional. Na educação, ele é utilizado para ensinar lógica e resolução de problemas, preparando os alunos para enfrentar desafios complexos de forma estruturada. Na ciência de dados, auxilia na criação de algoritmos que analisam grandes volumes de informações, identificando padrões e insights valiosos. Além disso, em áreas como a engenharia e a medicina, o pensamento computacional é essencial para o desenvolvimento de simulações, modelagens e soluções tecnológicas inovadoras.Sobre as diretrizes básicas do pensamento computacional, é correto apontar que:
O pensamento computacional é uma habilidade essencial para a resolução de problemas complexos, especialmente na área de ciência da computação. Ele envolve a capacidade de compreender e formular problemas de maneira que possam ser resolvidos por meio de processos computacionais. O pensamento computacional não se restringe apenas à programação de computadores, mas abrange uma série de habilidades mentais que são aplicáveis a diversos campos.Dito isto, em relação aos pilares que sustentam o pensamento computacional, observe as sentenças a seguir:I - O pensamento computacional é baseado em Algoritmo e Decomposição.II - O pensamento computacional é baseado em Abstração e Identificação de Padrões.III - O pensamento computacional é baseado em Composição e Programação.Está correto o que se afirma em:
Operadores lógicos são usados para construir proposições complexas a partir de proposições simples. Eles incluem AND, OR, NOT, e IF-THEN, permitindo avaliar a verdade ou falsidade de uma afirmação composta com base nas partes individuais. Estes operadores são essenciais em diversas áreas, como matemática, ciência da computação e filosofia, para realizar análises e desenvolver algoritmos lógicos.Com base no texto, sobre o operador lógico AND na lógica, assinale a alternativa correta.
A evolução da computação representa uma das áreas mais dinâmicas e transformadoras da ciência e tecnologia. Desde os primórdios com o ábaco e as máquinas mecânicas de cálculo, passando pelo desenvolvimento dos primeiros computadores eletrônicos na década de 1940, até os avanços modernos em inteligência artificial e computação quântica, a computação tem revolucionado a forma como interagimos com o mundo.Com base no apresentado, onde observamos um pouco sobre a evolução da computação, analise as alternativas a seguir e assinale a correta.
A implementação de uma pilha utilizando uma lista encadeada que requer a criação de uma estrutura de nó onde é informado os próximos elementos da pilha e funções para realizar operações de inserção (push) um novo elemento na pilha e remoção (pop) de um elemento da pilha já existente.Complete o código em C++ para implementar as operações básicas (push e pop) de uma pilha utilizando uma lista encadeada. Preencha os espaços em branco indicados por /* ... */ para que o código funcione corretamente.#include <iostream>// Estrutura do nóstruct Node {int data;Node* next;};// Classe Pilha com Lista Encadeadaclass Stack {private:Node* top;public:Stack() {top = nullptr;}void push(int value) {Node* newNode = new Node();newNode->data = value;newNode->next = /* ... */;top = newNode;}void pop() {if (top == nullptr) {std::cout << "Stack Underflow" << std::endl;return;}Node* temp = top;top = /* ... */;delete temp;}}O preenchimento correto se afirma em:
Na implementação de uma fila utilizando lista encadeada, os métodos de inserção e remoção são fundamentais para o funcionamento correto da estrutura. Essa organização garante a propriedade FIFO (First In, First Out), essencial para diversas aplicações como gerenciamento de tarefas em sistemas operacionais e processamento de dados em buffers. Complete as lacunas na seguinte descrição sobre os métodos de inserção e remoção em uma fila utilizando lista encadeada.O método [preencher 1] adiciona um novo nó ao [preencher 2] da fila, atualizando o ponteiro [preencher 3] para apontar para este novo nó.Os termos [preencher 1], [preencher 2] e [preencher 3] são corretamente substituídos por:
Uma pilha é uma estrutura de dados onde a inserção e a remoção de elementos ocorrem sempre no topo. Ao criar um algoritmo que implementa esta estrutura de dados em uma listas encadeadas, algumas operações básicas são utilizadas para manipular seus elementos na estrutura a ser desenvolvida.Complete as lacunas abaixo com as palavras corretas que representam as operações básicas de uma pilha.A operação de inserção de um novo elemento no topo da pilha é chamada de [preencher 1], enquanto a operação de remoção do elemento no topo é chamada de [preencher 2]. A operação que permite visualizar o elemento no topo da pilha sem removê-lo é chamada de [preencher 3] .Os termos [preencher 1], [preencher 2] e [preencher 3] são corretamente substituídos por:
Imagine que você está organizando uma pilha de pratos em uma cozinha. Sempre que um novo prato é lavado, ele é colocado no topo da pilha. Da mesma forma, quando alguém precisa de um prato, ele é retirado do topo da pilha. Isso garante que o prato mais recentemente lavado seja o primeiro a ser utilizado, enquanto os pratos lavados anteriormente permanecem embaixo. Essa organização é eficiente e permite fácil acesso ao prato mais limpo.Qual das seguintes afirmações interpreta corretamente a operação de inserção (push) em uma pilha implementada com listas encadeadas, considerando as particularidades de gerenciamento de memória e desempenho?
As listas encadeadas são estruturas de dados fundamentais que oferecem uma maneira flexível de armazenar e organizar dados na memória. Diferente das listas sequenciais, as listas encadeadas permitem a inserção e remoção de elementos de forma mais eficiente em termos de alocação de memória.Considerando a definição e as características de uma lista encadeada, qual das opções abaixo identifica corretamente uma vantagem de usar listas encadeadas em vez de listas sequenciais?
Listas circularmente encadeadas são uma variação das listas encadeadas em que o último nó aponta para o primeiro nó, formando um ciclo. Essa estrutura possui algumas vantagens sobre as demais listas quando estamos falando de acesso rápido ao final da lista e para percorrer a uma lista de modo inverso (de trás para frente) se for necessário.Com relação a este contexto e sobre o conteúdo estudado, avalie as asserções a seguir e a relação proposta entre elas:I. Listas circularmente encadeadas são úteis para implementar estruturas que requerem iteração contínua sobre os elementos.PORQUEII. Em uma lista circularmente encadeada, o último nó aponta para o primeiro nó, permitindo um acesso contínuo aos elementos sem a necessidade de redefinir o ponto inicial após atingir o final da lista.A respeito dessas asserções assinale a alternativa correta:
Uma lista encadeada é uma estrutura de dados composta por nós, onde cada nó contém informações sobre a sequência de nós a ser percorrida. Ao contrário de arrays, listas encadeadas não armazenam elementos em posições contíguas na memória, mas sim as posições de apontamentos para os demais nós.Com base no contexto apresentado e nos materiais de estudos, identifique a alternativa correta que define a principal característica das listas encadeadas.
Uma das vantagens em se trabalhar com listas encadeadas é sua versatilidade em poder incluir e remover elementos da lista a qualquer momento. Remover um nó de uma lista encadeada envolve atualizar as referências para garantir a continuidade da lista. O processo de remoção pode variar dependendo da posição do nó a ser removido.Assinale a alternativa que identifica corretamente o procedimento para remover um nó do meio de uma lista encadeada.
Imagine que você está organizando uma fila de atendimento em uma loja. Cada cliente na fila é representado por um cartão, e cada cartão possui uma indicação de quem é o próximo cliente. Esse sistema permite que você facilmente adicione novos clientes ao final da fila ou remova o primeiro cliente após ser atendido.Qual das seguintes opções compreende a vantagem desse sistema de organização em comparação a um sistema onde todos os cartões estão alinhados em uma única linha e você precisa deslocar todos os cartões ao adicionar ou remover um cliente?
Na criação da classe Time, a definição de seus atributos é crucial para representar as características de um objeto de tempo. Dentro do arquivo de cabeçalho (.h), os atributos são definidos na seção privada, enquanto os métodos que permitem acessar e modificar esses atributos são definidos na seção pública.Diante disso, assinale a alternativa que apresenta um atributo típico definido na seção privada da classe Time.
Quando a fila é implementada com um vetor, o espaço para alocar os elementos é adjacente. Isso significa que os elementos são adicionados no fim e removidos do início da fila, e para que isso aconteça é preciso conhecê-la identificando a presença de elementos.Avalie as alternativas e assinale a que representa as respectivas operações para uma fila, ao ser implementada.
A pilha é uma das estruturas de dados mais simples que existe, ela permite o acesso aos seus elementos somente a partir do topo, ou seja, quando o elemento entra na pilha, ele passa a ser o canal para manipulação dos dados por ser o único acesso. Isso significa que a retirada de elementos acontece inversamente à forma de como foram colocados, ou seja, o primeiro a sair é o último elemento que entrou na pilha.Em relação ao que foi citado no enunciado, assinale a alternativa que demonstra a parte do código responsável pela impressão.
No desenvolvimento de software, um dos conceitos fundamentais na programação orientada a objetos é a modularização do código. Este processo envolve a separação da visão lógica de uma estrutura de dados da sua implementação concreta. Para alcançar essa modularização, é essencial isolar a implementação da interface pública, permitindo que a complexidade interna seja escondida dos usuários da classe. Esta prática não apenas melhora a manutenção do código, mas também promove a reutilização de componentes.Neste sentido, assinale a alternativa que identifique o termo que representa a ação de ocultamento citada no enunciado:
Para ser implementada, a pilha requer um vetor e uma variável que indique seu tamanho máximo e esta variável pode levar o nome de tam, por exemplo. Ao definir este limite, a pilha só pode contemplar a quantidade de elementos informada nesta variável e para saber quando excede o limite, é necessário saber a quantidade de elementos em dado momento.Observe as alternativas e escolha a que identifica quantos elementos estão na pilha.
Em C++, os ponteiros e as referências são conceitos essenciais na manipulação de endereços de memória. Ponteiros são variáveis que armazenam o endereço de outra variável, permitindo a manipulação direta dos dados em diferentes locais de memória. Referências, por outro lado, são aliases para variáveis existentes e devem ser inicializadas no momento da declaração.Diante disso, assinale a alternativa que descreve a diferença entre ponteiros e referências em C++.
Os vetores são estruturas de dados fundamentais em C++, amplamente utilizadas para armazenar coleções de elementos do mesmo tipo em uma sequência contínua de memória. A definição de um vetor envolve a especificação de seu tamanho e tipo de dados dos elementos que ele irá armazenar. Uma das principais vantagens dos vetores é a capacidade de acessar diretamente qualquer elemento utilizando um índice, o que permite operações rápidas e eficientes.Com base no contexto apresentado, veja o trecho de código a seguir:#include <iostream>using namespace std;int main() {int vetor[5] = {10, 20, 30, 40, 50};int soma = 0;for(int i = 0; i < 5; i++) {soma += vetor[i];}cout << "A soma dos elementos do vetor é: " << soma << endl;return 0;}Diante do código apresentado, assinale a alternativa que apresenta qual será a saída do programa acima quando executado.
Leia o trecho a seguir:Vetores (ou arrays) são uma das estruturas de dados mais fundamentais na programação em C++. Eles permitem armazenar múltiplos valores em uma única variável, usando um índice para acessar cada valor individualmente. A posição de cada elemento no vetor é indicada por um índice numérico, começando do zero. Vetores são particularmente úteis quando você precisa armazenar uma coleção de dados e acessar esses dados de forma eficiente através de um índice. Dessa forma, os vetores são estruturas de dados [preencher 1].Os termos [preencher 1] é corretamente substituído por:
Os ponteiros são elementos fundamentais na linguagem C, conferindo-lhe uma notável flexibilidade e poder. Eles funcionam como variáveis especiais tendo a propriedade especial de "apontar" para uma variável. Essa capacidade de apontar para diferentes tipos de variáveis, como inteiros, pontos flutuantes, duplos, entre outros, confere aos ponteiros uma versatilidade excepcional.Com base em nossos estudos, assinale a alternativa que apresenta a função do operador de referência (&) em estruturas de dados utilizando ponteiros em linguagem C.
Em linguagens de programação podemos contar com operadores relacionais e lógicos, estes que são essenciais para comparar valores, facilitando a tomada de decisões baseadas em condições específicas. Eles verificam a relação entre dois operandos e resultam em um valor booleano (true ou false). Esses operadores são comumente usados em estruturas de controle de fluxo, como condicionais if e laços for e while, para guiar a execução do programa de acordo com as condições avaliadas.Compreender o uso correto dos operadores relacionais é essencial para desenvolver algoritmos eficazes e garantir que as comparações lógicas sejam realizadas com precisão, sendo assim, assinale a alternativa que apresenta o operador lógico sobre MAIOR ou IGUAL.
Ponteiros desempenham um papel crucial quando uma variável precisa ser acessada em diferentes partes de um programa. Nesse contexto, é comum encontrar diversos ponteiros distribuídos por várias seções do código, cada um apontando para a variável que contém os dados necessários. Uma vantagem significativa dessa abordagem é que, se esses dados forem alterados, não há preocupação, pois todos os ponteiros no programa estão direcionados para o endereço onde os dados atualizados residem. Essa flexibilidade oferecida pelos ponteiros é fundamental para garantir a eficiência e a consistência na manipulação de dados em diferentes partes do código.Considerando o uso de ponteiros em estruturas de dados, analise o seguinte código em C:#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};int *ptr = arr;printf("%d\n", *ptr + 2);printf("%d\n", *(ptr + 2));printf("%d\n", ptr[2]);printf("%d\n", *ptr++);printf("%d\n", (*ptr)++);return 0;}Diante da análise realizada, assinale a alternativa que apresenta a saída impressa ao executar este código.
Os frameworks são ferramentas essenciais na engenharia de software moderna, proporcionando uma estrutura organizada e reutilizável para o desenvolvimento de aplicações. Eles incorporam padrões de projeto que promovem a extensibilidade e a manutenibilidade do código.Com relação a este contexto e do conteúdo estudado sobre implementação de frameworks, analise as asserções a seguir e a relação proposta entre elas:I. Um framework MVC inclui padrões de projeto como Observer, Strategy e Composite, o que permite a extensibilidade e a reutilização do código.PORQUEII. A natureza genérica dos padrões de projeto e seu uso de classes abstratas e concretas são fundamentais para a funcionalidade dos frameworks, permitindo a adaptação a diferentes aplicações.A respeito dessas asserções assinale a alternativa correta:
Componentes de software desempenham um papel essencial no desenvolvimento de sistemas modulares, onde grandes sistemas são divididos em partes menores, cada uma responsável por uma funcionalidade específica. Esses componentes interagem entre si através de interfaces bem definidas, o que permite sua reutilização em diferentes contextos.Com base nos assuntos estudados sobre componentes de software, leia as afirmativas a seguir:I. Componentes de software são agrupamentos de objetos inter-relacionados que expõem apenas as interfaces necessárias para interação com outros sistemas.II. As interfaces dos componentes de software garantem a modularidade e independência, permitindo que sejam reutilizados em diferentes contextos sem a necessidade de modificação.III. A reutilização de componentes de software em novos contextos pode ser comprometida se as interfaces não forem bem definidas e padronizadas.IV. Componentes de software devem ser projetados para funcionar exclusivamente dentro de um único sistema, limitando sua aplicabilidade em outros contextos.É correto o que se afirma em:
Os padrões de projeto são fundamentais para resolver problemas de design de software de maneira estruturada e previsível. Compreendendo elementos como nome, problema, solução e consequências, esses padrões ajudam no desenvolvimento eficiente e eficaz de soluções de software, orientando o desenvolvedor sobre como e quando aplicar cada padrão.Com base no apresentado, observe as afirmativas a seguir:I. O nome de um padrão de projeto serve como um identificador sem relação com seu conteúdo ou aplicação.II. A descrição do problema em um padrão de projeto inclui o contexto e os requisitos específicos que tornam esse problema relevante.III. A solução proposta em um padrão de projeto é abstrata e pode ser aplicada a diferentes contextos específicos de desenvolvimento.IV. As consequências de aplicar um padrão de projeto não incluem considerações sobre os trade-offs envolvidos em sua utilização.Está correto o que se afirma em:
No desenvolvimento de software, frequentemente surgem problemas de incompatibilidade de interfaces entre classes, que dificultam a integração e reutilização de código. Para resolver esses problemas de maneira eficaz e promover a reutilização de componentes existentes, padrões de projeto específicos são utilizados. Esses padrões fornecem soluções estruturadas para adaptar e integrar classes com interfaces diferentes, evitando a necessidade de criar soluções improvisadas.Com relação a este contexto e sobre o conteúdo estudado, avalie as asserções a seguir e a relação proposta entre elas:I. O padrão Adapter permite que classes com interfaces incompatíveis colaborem sem a necessidade de modificar diretamente as classes existentes. PORQUEII. A principal motivação para usar o padrão Adapter é evitar a criação de soluções caseiras e ad-hoc para problemas de incompatibilidade de interface.A respeito dessas asserções, assinale a alternativa correta:
O reúso de software é uma estratégia essencial na engenharia de software para aumentar a eficiência, reduzir custos e melhorar a qualidade dos sistemas. Utilizando componentes, padrões e práticas já desenvolvidos, os engenheiros podem acelerar o processo de desenvolvimento e garantir soluções mais robustas.Diante disso, assinale a alternativa que apresenta a característica dos padrões arquiteturais.
Engenharia de software baseada em componentes foca na construção de sistemas de software a partir de componentes pré-fabricados. Este paradigma depende de várias bases fundamentais que facilitam a interoperabilidade e reutilização de componentes, tornando o desenvolvimento mais eficiente e flexível.Diante disso, assinale a alternativa que apresenta os conceitos da engenharia de software baseada em componentes.