Baixe o app para aproveitar ainda mais
Prévia do material em texto
QUESTÕES ABERTAS: Como é a lógica do LIFO? Na lógica LIFO (Last In First Out) o último elemento a entrar é o primeiro a sair. Esse conceito está aplicado na estrutura Pilha, no qual o último elemento que foi inserido na pilha será o primeiro a sair. Como é a lógica do FIFO? First in, first out. O primeiro a entrar na fila é o primeiro a sair. Considere duas listas simplesmente encadeadas circulares e não vazias de inteiros e o tipo. no *insere_frente(no *p, int valo r) { no *q; q = new no; q ->dado = val or; q->li nk = p; return q; } no *inter(no *x, no *y) { no *t, *r, *q; t = x; q = NULL; do { r = y; do { if (t ->dado == r->dado) q = insere_frente(q,t->dad o); r = r->li nk; } while (r ! = y); t = t->li nk; } whil e (t != x); return q; } Considere uma lista não ordenada de códigos espiões usados por Sherlock Silva. Ajude-o a encontrar um determinado código c, realizando uma busca de acordo com o seguinte rotótipo: int pesquisar(int v[], int c, int n); Note: v é o vetor de códigos, c é o código a ser procurado e n é a quantidade de códigos existentes em v. int pesquisar(int v[], int c, int n) { for (i=0; i<n; i++) if (v[i] ==c) cout <<achou... esse é o código”; } else {cout <<”código não encontrado”;} } Considere uma lista simplesmente encadeada não circular de inteiros e o tipo: no *i nverter ( no *ini) // i ni é um ponteiro para o iníci o da li sta { no *a , *b, * c; a = i ni; b = NULL; while (a ! = NULL) { c = b; b = a; a = a ->l ink; b-> link = c; } ini = b; return(i ni); } /* fi m da função */ Const int TAMMAX = 100; struct Tipo Lista{ int qtde; // descritor que representa a quantidade de elementos na lista int elemt[TAMMAX]; }; Fundamento no tipo de dado (registro) acima que representa uma implementação de uma lista linear sequencial. Construa um procedimento para adicionar um dado no final da lista. A lista e o dado serão passados por parâmetro. Usar o mecanismo de passagem por referência se for necessário. Void addFinalLista ( TipoLista &lista, int dado ){ If(lista.qtde == TAMMAX){cout << “Lista Cheia”; } Else{ lista.elemt[lista.qtde] = dado; Lista.qtde++; Cout << “Dado adicionado com sucesso”; }} Os agentes Leo e Lia receberam sequências de números de seus contatos. Para saberem qual o próximo passo da missão, precisam descobrir que números se repetem nas sequencias recebidas por cada um. Faça uma função que receba dois vetores v e w de inteiros como parâmetros e gere um vetor z, resultante da intersecção entre v e w. Protótipo da função: bool intersecao(int v[ ], Int w[ ], int z [ ], int nv, int nw, int &n); onde nv: quantidade de elementos em v, nw: quantidade de elementos em w e n: quantidade de elementos no vetor z. Note: inicialmente n vale zero; deverá ser retornado true (sucesso na interseção) ou false (fracasso na interseção). bool intersecao(int v[ ], int w[ ], int inter [ ], int nv, int nw, int &n) { bool achou = false; for (int i = 0; i < nv; i++) for (int j = 0; j <nw; j++) if (v[i] == w[j]) { achou = true; n++; } return achou; } Qual a diferença entre pilha e fila? Pilha se caracteriza por ser uma estrutura de dados que são inseridos e retirados numa sequência semelhante as anilhas de alteres, isto é, usa a lógica LIFO. Já uma fila se caracteriza por ser uma estrutura semelhante a fila de banco, isto é, os dados vão chegando e sendo processados e retirados da estrutura. Essa lógica é chamada de FIFO. QUESTÕES MÚLTIPLA ESCOLHA: __________________________ é uma biblioteca de boas práticas, de domínio público, desenvolvida pelo governo do Reino Unido. O conjunto de livros busca promover a gestão com foco no cliente e na qualidade dos serviços de tecnologia da informação (TI). ITIL. A adoção da ITIL se dá no momento em que: satisfazer e atingir as suas metas corporativas, o que leva a uma crescente demanda por alta qualidade dos serviços de TI. A armazenagem de dados pode ocorrer temporariamente em uma variável, um vetor ou em uma estrutura chamada Struct na linguagem C e C++. Como se procede a atribuição de valor a um determinado campo de uma estrutura do tipo Struct? Nome da estrutura ponto nome do campo. A estrutura de dados linear que obedece o seguinte critério: o último elemento inserido será o primeiro elemento a ser retirado (LIFO) é: pilha. A que estrutura pertence a definição: " Uma estrutura não linear que é um conjunto de nós e suas conexões entre eles e não há limitação de vértices. Muito utilizada para representação de percursos em mapas." Grafos. A SLM - Service Level Management ou Gestão de Níveis de Serviço é essencial para as empresas na medida em que: I. Tem a ver com o nível de serviço de tecnologias de informação que é necessário para suportar o negócio e que deve ser determinado e colocado sob a forma de um contrato entre o cliente e o prestador de serviços. II. Deve ser efetuado um acompanhamento informal para verificar se os níveis de serviço estão sendo cumpridos, sem a necessidade de criação de relatórios gerenciais. III. É a base para a gestão contínua da qualidade de serviços de tecnologias de Informação. IV. O cumprimento desse contrato terá como consequência a satisfação do cliente. Somente I, III e IV corretas. A técnica LIFO (last in first out), utilizada em programação estruturada, é fundamentada no conceito de: pilha Alguns indicadores são usados na medição de resultados dos processos de TI. Quanto ao processo "Gerenciar desempenho e capacidade", podemos afirmar que os indicadores de desempenho para "Número de processos finais de negócio que sofreram paradas causadas por desempenho e capacidade inadequada de TI" é: Fonte: Fernandes, Agnaldo Aragon. Governança de TI. Brasport, 2010, p.62. Número de processos críticos de negócios não cobertos por um plano formal de disponibilidade de serviços. Alguns indicadores são usados na medição de resultados dos processos de TI. Quanto ao processo "Identificar e alocar recursos", podemos afirmar que os indicadores de desempenho para "Custo benefício atual de TI" é: Fonte: Fernandes, Agnaldo Aragon. Governança de TI. Brasport, 2010, p.62. Percentual de variação entre o orçamento realizado e o planejado. Analisando a seqüência do código abaixo, pode se afirmar que se trata da: for (int i = topo-1; i>=0; i--) cout << “ “ << v[i] <<” “ <. Exibição de todos os elementos armazenados em uma Fila na ordem inversa da entrada. Analisando o trecho do algoritmo abaixo SE TOPO < MAXIMO ENTAO INÍCIO TOPO <- TOPO +1 PILHA(TOPO) <- VALOR SUCESSO <- VERDADEIRO FIM. Pode-se afirmar que se trata de uma operação de: inserção de um elemento em uma estrutura LIFO. Analise as afirmativas abaixo e selecione a alternativa correta. I. Algumas aplicações da estrutura de dados grafo são: Diagrama de Entidade Relacionamento e Redes de computadores. II. Arvore e lista duplamente encadeada são estruturas não lineares. III. A Fila é uma estrutura não linear e a inserção de um elemento acontece ao final. IV. A lista é uma das estruturas de dados mais simples, mas não se pode ordená-la. V. O uso de ponteiros é fundamental para construção de listas encadeadas. I e V são verdadeiras. Analise as seguintes afirmações: I. Na passagem por referência, o parâmetro que vai ser passado na chamada da função deve ser uma variável, de tal forma que uma alteração de valor neste parâmetro também altera a variável correspondente. II. Uma recursão consiste em uma função chamar ela mesma com argumentos sempre do mesmo valor. III. Considerando-se o escopo das variáveis, é correto afirmar que uma variável é dita global quando a sua passagem no momento da chamada de uma função se dá tanto por valor quanto por referência. Uma variável é dita local quando esta passagem se dá apenas por valor. Indique a opção que contenha todas as afirmações verdadeiras: somentea alternativa I. Analise as sentenças abaixo sobre as Responsabilidades do Gerente de Nível de Serviço e, em seguida, assinale a alternativa correta. Um Acordo de Nível de Serviço (SLA, do inglês Service Level Agreement) é a parte de contato de serviços entre duas ou mais entidades no qual o nível da prestação de serviço é definido formalmente. Na prática, o termo é usado no contexto de tempo de entregas de um serviço ou de um desempenho específico. Responsabilidades do Gerente de Nível de Serviço são: I. Realizar revisões de técnicas com a equipe de desenvolvimento. II. Negociar, documentar e divulgar os Acordos de Nível de Serviço e Acordos de Nível Operacional. III. Identificar, entender e documentar os Requisitos de Nível de Serviço atuais e futuros. IV. Medir, registrar e analisar a satisfação dos clientes com os serviços entregues. Apenas as sentenças II, III e IV estão corretas. Analise o seguinte trecho de algoritmo de ordenação de dados, cujos elementos estão dispostos em um vetor de nome v com n elementos. ... { int i, j aux; for (j=1; j<n;j++) for (i=j; i>0 && v[i-1]> v[i]; i--){ aux=v[i-1]; v[i-1]=v[i]; v[i]=aux; } } ... Assinale o método ao qual o trecho de algoritmo pertence. Inserção. Ao definirmos uma função, podemos afirmar: I. Toda função tem parâmetros; II. Quando nada retorna, o tipo é void. III. Quando todos os parâmetros são do mesmo tipo, é suficiente usar o tipo uma vez e separar os nomes dos parâmetros por vírgulas. IV. Na passagem por valor, o endereço da variável da função chamadora é passado para a função chamada. Após uma análise das afirmativas acima, escolha a opção correta. Somente II está correta. As estruturas de dados em programação são muito utilizadas para tornar o acesso aos dados mais eficiente e organizado. A estrutura de dados considerada mais simples e tem como característica apresentar apenas uma dimensão é: vetor. As estruturas de dados permitem o uso de certos algoritmos para a ordenação dos elementos de forma a facilitar a consulta de determinado elemento. Existem vários tipos de algoritmos para realizar a ordenação dos elementos, onde um algoritmo de ordenação deve rearranjar o vetor de forma a estabelecer uma ordem entre os elementos. O trecho de código abaixo descreve o algoritmo chamado: algoritmo ordena (int a[], int n){ Para i da primeira posição até a penúltima faca mínimo = i para j da posição seguinte a i até a ultima posição faça se (a[j] < a[mínimo]) mínimo =j; fim para fim para troca(a[mínimo],a[i]); fim algoritmo. Seleção As estruturas de dados podem ser caracterizadas como sendo uma forma organizada de armazenar dados ou informações na memória, de modo a otimizar o acesso a estes. Muitas vezes existem algoritmos de manipulação de dados associados a estas estruturas. Verifique as seguintes sentenças: I-Filas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados. II-As Pilhas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados. III-As Pilhas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados. IV-As Filas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados. Marque a alternativa CORRETA: As alternativas I e II estão corretas. As estruturas de dados são importantes para a programação porque facilitam a pesquisa, pois permitem a ordenação dos dados de forma crescente ou decrescente. Dessa forma, assinale a alternativa correta que define um tipo de dado estruturado. Permitem agregar mais do que um valor em uma variável, existindo uma relação estrutural entre seus elementos. As funções em programação permitem que se possa realizar a modularização do código diminuindo assim sua complexidade. Analise a função abaixo e assinale alternativa que descreve corretamente o tipo de função: int funcao (int x){ if (x = = 0) return 0; else função(x-1); }. Recursiva. As listas encadeadas podem ser elaboradas de duas formas utilizando uma técnica de encadeamento simplesmente ou encadeamento duplo. O que difere uma lista simplesmente encadeada de uma lista duplamente encadeada? Em uma lista simplesmente encadeada cada nó aponta para um único nó enquanto a lista duplamente encadeada aponta para mais de um nó. As pilhas sequenciais são estruturas que guardam a ordem reversa dos dados nelas armazenados, e isto em muitas ocasiões é muito vantajoso. A operação usada para inserir um elemento X numa pilha é conhecida na literatura como PUSH (x). Para remover um elemento de uma pilha a operação é o POP ( ). Assim estas duas funções devem implementar o algoritmo LIFO (Last in – first out) ou o ultimo a entrar é o primeiro a sair. Sendo assim se aplicarmos as seguintes operações em uma PILHA vazia: PUSH(10), PUSH(5), POP(), PUSH(7), POP(), PUSH(2), POP(), POP(). Quais valores restarão na pilha? Nenhum, a pilha estará vazia. As variáveis em programação são utilizadas para armazenar um valor de determinado tipo em um espaço reservado na memória. Em algumas linguagens de programação podemos declarar, ou seja, reservar um espaço na memória, fora do escopo da função principal, e fora do escopo de qualquer outra função. Ao fazer a declaração desta forma estamos declarando uma variável do tipo: global. Assinale a alternativa que apresenta duas formas de passagem de parâmetros para uma rotina ou função: por valor e por referência. Assinale a opção certa. Quando não se escreve o protótipo de uma função... é preciso definir a função antes do programa principal. Blocos únicos de códigos que realizam diversas tarefas distintas são de difícil manutenção. Portanto, utiliza-se a técnica da modularização de programas, a fim de facilitar a implementação e a manutenção dos programas. Esta técnica, também chamada de modularização, tem como principal elemento: As funções. Com a utilização das estruturas de dados e seus tipos, em algumas situações é imprescindível a criação de funções que façam determinada verificação ou ação nestas estruturas. Dessa forma, analise a função abaixo e marque corretamente a alternativa que descreve as funcionalidades desta. int funcao(float v[], float vl, int n) { for (int i = 0; i < n; i++) if (v[i] == vl) return i; return -1; }. Retorna a posição de v se o valor vl foi encontrado. Com relação à struct, é correto afirmar que: cada elemento da struct é denominado membro ou campo, sendo que a struct pode armazenar elementos de tipos diferentes ou não. Com relação as listas lineares sequenciais: I - Uma lista linear sequencial é um vetor em linguagens estruturadas, também chamado de array. II - Um elemento de uma lista linear sequencial pode ser acessado diretamente através de um índice. III - Uma lista linear sequencial pode ter elementos de um mesmo tipo, ou de tipos diferentes. Apenas as afirmações I e II estão corretas. Considerando a estrutura de fila circular vista em sala, que define as seguintes operações com uma fila: int enfileirar(int v[], int valor, int *fim) - insere um elemento na fila indicada por v. int desenfileirar(int v[], int *inicio, int fim, float &valor) - remove um elemento da fila indicada por v. Supondo que foram realizadas as seguintes operações numa fila circular (implementada em uma estrutura linear sequencial) de números inteiros de tamanho 5, que inicialmente se encontrava vazia: enfileirar (minhaFila[], 10, fim); enfileirar (minhaFila[], 20, fim); desenfileirar (minhaFila[], inicio, fim, valor); enfileirar (minhaFila[], 30, fim); desenfileirar (minhaFila[], inicio, fim, valor); enfileirar (minhaFila[], 40, fim); enfileirar (minhaFila[], 50, fim); enfileirar (minhaFila[], 60, fim); desenfileirar (minhaFila[], inicio, fim, valor); enfileirar (minhaFila[], 70, fim); Qual a posição, dentro da estrutura linear sequencial (vetor - que representaa fila), que se encontra o último elemento inserido na fila? 1. Considere: I - Os algoritmos de busca binária e de busca seqüencial executam processamento repetitivo. II - Os algoritmos de busca binária e de busca seqüencial utilizam a técnica de recursão. III - A busca seqüencial executa cada fase de repetição na forma de uma subtarefa da fase anterior. IV - A busca binária trabalha com uma forma circular de repetição. Está correto o que consta em: (A) I, apenas. Considere o trecho de um programa em C++. Int numero = 20; void mistério(int &v) { int aux = 111; aux = aux – 11; v = v-aux; numero=aux-numero; cout<<”auxiliar=”<<aux; } int main() { int valor = 1000; mistério(valor); cout << ”Numero1 = ” << valor << “Numero2=” << numero << endl; }. Marque a opção correta que mostra o que é impresso na tela. Auxiliar = 100 Numero1 = 900 Numero 2 = 80. Considere uma estrutura de dados do tipo vetor. Com respeito a tal estrutura, é correto que seus componentes são caracteristicamente: homogêneos e de acesso aleatório por intermédio de índices. Considere uma estrutura de dados, representada pela variável P, com procedimentos de inclusão, exclusão e consulta do próximo elemento (e) disponível na estrutura, obedecendo às seguintes propriedades: 1) exclui (inclui (e, P))=P 2) próximo (inclui (e, P))=e. Pode-se concluir, então, que P corresponde à seguinte estrutura de dados? PILHA. Considere uma lista com n livros, em que cada livro é modelado pela struct: struct Livro { string titulo, editora, autor; float preco; }; A função X abaixo void X (livrov[], int &n, Livro L) { v(n)=L; n++; cout<<”operação realizada com sucesso”; } implementa a operação de: inserção. Considere uma lista sequencial L com n fichas de alunos, onde cada ficha de aluno é caracterizada pela struct: struct aluno { int matricula; char nome[30]; }; e a lista L é assim declarada: aluno L[n];. Assinale o trecho que corretamente exibe todas as matrículas e nomes de todos os n alunos de L. for (int i = 0; i <n; i++) cout << L[i].matricula << “ “ << L[i].nome << endl; Dentre os vários processos que constituem a ITIL, podemos definir a Gestão de Nível de Serviço como o processo de planejar, coordenar, acordar, monitorizar e reportar os SLA (Acordos de Nível de Serviço), que deve: I. executar projetos usando ferramentas de modelagem. II. assegurar a revisão contínua dos resultados dos serviços. III. Deve garantir que o custo necessário e justificável da qualidade de serviço se mantém e é progressivamente melhorado. Somente as opções I e II estão corretas. Dado o seguinte código, escrito em C++, qual a saída do programa? #include using namespace std; void func1 (float x) { cout << "X: "<< x << endl; x = 3.5; cout << "X: "<< x << endl; } int main () { float y=1.5; cout << y << endl; func1(y); cout << y << endl; return 0; }. 1.5 1.5 3.5 1.5 Diferentes tipos de estrutura de dados são adequadas a diferentes tipos de aplicação e algumas são altamente especializadas, destinando-se a algumas tarefas específicas. Dessa forma a definição de Estrutura de Dados está expressa na alternativa: é um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados de modo eficiente. Diga, para o programa abaixo, qual a opção que melhor representa a saída em tela. (Considere que o programa será compilado sem erros, e irá executar também sem problemas). #include using namespace std; void FuncX( int x, int *y ) { int tmp; tmp = *y; *y = x * 2; x = tmp+1; } int main() { int a = 13, b = 10; FuncX( a-3, &b ); cout<<"Valores: "<< a<<"\t"<< b< system("pause"); } . Valores 13, 20. É correto afirmar sobre o funcionamento da busca sequencial. Os elementos são pesquisados de acordo com o índice. Pior caso: o elemento está no último índice do meu vetor. É um método de pesquisa ou busca, cujo algoritmo parte do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca, comparando o elemento buscado (chave) com o elemento no meio do vetor. Se o elemento do meio do vetor for a chave, a busca termina com sucesso. Caso contrário, se o elemento do meio vier antes do elemento buscado, então a busca continua na metade posterior do vetor. E finalmente, se o elemento do meio vier depois da chave, a busca continua na metade anterior do vetor. A descrição apresentada trata-se do método denominado busca ...... binária. Em programação podemos utilizar um recurso que modulariza o programa chamado função. As funções precisam ser ativadas para que possam ser executadas. Para isso, é necessário chamar a função pelo seu nome e enviar, quando necessário, os valores respectivos para os parâmetros de entrada. Ao enviar os valores para os parâmetros de entrada, o programa pode fazer uma cópia deste valor ou trabalhar em um endereço enviado. Quando se envia o endereço estamos ativando a função por meio de: ponteiros. Em relação à classificação do método de ordenação, assinale abaixo aquele que, durante o processo de ordenação, só usa a memória principal: ordenação interna. Em relação às estruturas de dados, é correto afirmar: Guardar endereço de memória em "nós", normalmente identificados por previous ou next, é uma característica presente nas listas duplamente encadeadas. Em um ambiente de desenvolvimento de sistemas de informação, os acordos de níveis de serviço (SLA) geralmente são estabelecidos para: I. Serviços de desenvolvimento, implantação e manutenção de sistemas. II. Serviços de Segurança da informação. III. Serviços de suporte ao usuário. IV. Serviços gerais. Somente I, II e III corretas. Em um container do tipo Pilha: utiliza-se a ordenação Last In First Out (LIFO). Em uma lista linear simplesmente encadeada. Cada nó possui um só ponteiro que referencia o próximo nó da lista. Entre os diversos algoritmos de pesquisa existentes, certamente os mais famosos são os da pesquisa sequencial e o da pesquisa binária. A busca ou pesquisa sequencial pode ser aplicada em vetores independente destes estarem ordenados, entretanto a busca binária só se aplica em vetores ordenados. Seja o vetor A={10,35,41,55,69,70,98}, suponha que o número 70 foi pesquisado pelo algoritmo da busca sequencial e também pelo algoritmo da busca binária, ambos algoritmos realizam testes nos elementos do vetor até achar o que procuram ou definirem que o elemento não se encontra no vetor. Sendo assim marque a alternativa que expressa o numero de testes realizados pela busca sequencial e o numero de testes realizados pela busca binária, respectivamente, até encontrarem o 70. 6 e 2. Existem vários algoritmos de busca em estruturas de dados, um destes realiza a busca em vetores, e requer acesso aleatório aos elementos desta estrutura e parte do pressuposto de que os dados do vetor estejam ordenados e utiliza a técnica de divisão e conquista comparando o elemento desejado com o elemento do meio do vetor. Esta técnica ainda verifica se o elemento do meio do vetor for o desejado, a busca termina. Caso contrário, se o elemento do meio vier antes do elemento buscado, então a busca continua na metade posterior do vetor. E se o elemento do meio vier depois da chave, a busca continua na metade anterior do vetor. O algoritmo que utiliza esta metodologia é: pesquisa binária. Existem vários tipos de algoritmos para realizar a ordenação dos elementos, onde um algoritmo de ordenação deve rearranjar o vetor de forma a estabelecer uma ordem entre os elementos. Marque a alternativa correta que cita o algoritmo cuja descrição é: "considera cada elemento uma vez inserindo-o em seu lugar correto entre os elementos que já estão em ordem". E o seu passo a passo pode ser descrito como: "o elemento é inserido entre os ordenados movendo-se os elementos maiores que ele uma posiçãopara a direita e posteriormente inserindo-o na posição vaga". Inserção. Funções são instrumentos de modularização de programas, que tem como finalidade tornar o código mais legível, isto é mais fácil de entender, evita replicação de instruções e permite o reuso das funções em outros programas. Então considere o seguinte código: #include <iostream> using namespace std; int main () { float a = 10.0; float b=4.0; cout << media (a,b); return 0; } float media (float x, float y) {return (x+y)/2;}. Marque a alternativa CORRETA: o código não compila, pois há a necessidade de se declarar float media (float, float) como protótipo da função float media (float x, float y) antes da função principal. Geralmente em algumas situações é necessário fazer a desalocação do espaço utilizado na memória. Porém, isso depende de como a reserva de uma quantidade de espaço de memória é feita, pois em alguns casos, o próprio compilador faz a desalocação. Quando o compilador não faz esta desalocação a memória foi reservada utilizando ___________. Alocação dinâmica de memória. Imagine a seguinte estrutura em C/C++, para descrever um produto: struct Produto { int codigo; char descricao[40]; float preco; }; Considere a função que atribui o preço ao produto void atribui (struct Produto *pProd) { /* atribuição do preço */ ... } A forma correta para atribuir 2.99 ao campo preco dentro de função atribui é: pProd -> preco=2.99; Leia com atenção as afirmativas abaixo e assinale a resposta correta. I A estrutura de dados que melhor representa os diretórios ou pastas de arquivos do computador é a árvore. II A estrutura de dados FILA é não linear assim como o Grafo. III O termo folha em uma estrutura de dados é usado para um nó sem filhos e que tem grau 0. IV O grau de uma árvore é definido pelo número de subárvores de um nó. V O grafo é uma estrutura de dados que tem limitação para o número de vértices. VI Uma das aplicações da estrutura de dados grafo é a Computação Gráfica. I, III, IV e VI são afirmativas verdadeiras. Marque a afirmativa correta para a “Busca ou pesquisa binária”. Consiste em fazer uma busca em um vetor já ordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou antes do meio ou depois do meio. Marque a afirmativa correta para a "Inserção em lista linear sequencial ordenada". Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. Marque a afirmativa correta para a “inserção incremental”. Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. Marque a afirmativa correta para a “Ordenação em Listas Lineares Sequenciais”. É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente. Marque a opção correta, considerando struct Livro { int código; float preco; } liv liv.preco=30.70; Marque a opção que representa uma característica CORRETA a respeito da estrutura de dados pilha. O último item inserido é o primeiro item a ser retirado. Na área de estrutura de dados, em determinados casos, é necessário utilizar um tipo de dado onde seu valor serve como referência direta a outro valor alocado em outro espaço de memória. Este tipo de dado se chama: ponteiro. Na maioria dos sistemas operacionais, os arquivos são organizados hierarquicamente em um esquema de diretórios (pastas) e sub-diretórios. Qual a estrutura mais adequada para representar este problema? Árvore. No programa abaixo, diga em que área de memória serão alocados os elementos de dados y e r, respectivamente. #include using namespace std; int x, y; float media( float a, float b ) { float tmp; tmp = (a + b ) / 2.0; return ( tmp ); } int main() { float r; cout<<"Informe 2 valores: "; cin>>x>> y; r = media( x, y ); cout<<"\nMedia = "<< r<<"\n"; system ("pause"); } ( ) área de dados globais / área de pilha O espaço necessário para a representação dos dados pode ser alocado à medida que se torne necessário, através da alocação dinâmica. Uma estrutura armazenada através de encadeamento apresenta seus nodos alocados em posições aleatórias na memória, e não lado a lado. Dessa forma, existem várias vantagens no uso de representar os dados por encadeamento. Marque a alternativa correta que apresenta estas vantagens. Compartilhamento de memória, maleabilidade e facilidade para inserção e remoção de componentes. O método de ordenação que compara pares de chaves de ordenação, trocando os elementos correspondentes caso estejam fora de ordem é o método: bolha. O processo do SLA (Acordo de Nível de Serviço) pode ir de uma simples administração de redes de comunicações até à gestão completa dos sistemas e tecnologias de informação e comunicação (TIC) de uma organização. Como exemplo, podemos citar alguns pontos que têm a ver com um SLA para um Serviço de Help Desk que vai apoiar os usuários de TI na sua operação diária: I. Uma situação pode ser reportada por telefone, telegrama ou fax, não havendo a necessidade de implantar um modelo padrão de atendimento. II. As chamadas durante os três primeiros meses de uma nova release são gratuitas, a partir desse período terão um determinado custo por minuto. III. O Help Desk está disponível 7 dias / semana e 24 horas por dia. Assegura-se que o tempo de espera de cada chamada será, em 95% dos casos, inferior a um minuto. Somente as opções II e III estão corretas. O que acontece ao se inserir uma informação quando já usamos toda a área disponível do vetor (topo=fim)? Overflow. O que acontece quando tentamos retirar um elemento de uma pilha que já está vazia? Underflow. O registro de ativação de uma sub-rotina é o conjunto das informações que devem/precisam ser alocadas em memória. Assinale abaixo a única opção que representa a composição destas informações. ( ) endereço de retorno / variáveis locais / parâmetros passados O resultado de um concurso foi armazenado por um programador em um vetor, onde cada elemento (descrito pela struct Candidato) possui a informação da matrícula e nota de cada candidato, conforme descrito a seguir. Deseja-se que o vetor com os resultados fique ordenado em ordem decrescente pela nota. O programador pretende usar o algoritmo de busca descrito a seguir, porém precisa de ajuda no trecho contendo ********. Indique a opção que contém a solução que completa as linhas 1, 3 e 7 do algoritmo. ... struct Candidato { char mat[10]; float nota; }; ... 1.void ordenaSelecao (******** v[], int n) { 2. int i, j, maior; 3. ******** aux; 4. for (j = 0; j < n-1; j++) { 5. maior = j; 6. for (i = j+1; i < n; i++) 7. if (********) 8. maior = i; 9. aux = v[j]; 10. v[j] = v[maior]; 11. v[maior] = aux; 12. } 13. }. 1. Struct Candidato 3. Struct Candidato 7. V[i].nota > v[maior].nota O resultado do concurso para o cargo de uma empresa que está armazenado em um vetor, que contém em cada um de seus elementos o nome e a nota obtida pelo candidato. Deseja-se que este vetor seja ordenado pela nota, em ordem decrescente. Sendo o vetor pequeno (poucos elementos), o programador responsável por desenvolver este algoritmo, escolheu um método de ordenação que executa os seguintes passos: Selecione candidato com maior nota entre todos e troque-o com o candidato que está na primeira posição do vetor; Selecione o segundo maior e troque-o com o candidato que está na segunda posição; Os passos descritos anteriormente são seguidos para a terceira nota, quarta nota e assim por diante até que reste apenas um candidato. O algoritmo utilizado pelo programador trata-se do método de ordenação denominado: Seleção. O resultado do concurso para o cargo de uma empresa que está armazenado em um vetor, que contém em cada um de seus elementos o número de inscrição, o nome e a nota obtida pelo candidato. Este vetor está ordenado pelo número deinscrição. Para realização de uma consulta que, dado um número de inscrição, apresenta o nome e nota do candidato, um programador utilizou um algoritmo de busca que realiza sucessivas divisões no vetor, comparando o número de inscrição procurado com o número de inscrição do candidato posicionado no meio do vetor. Se o candidato posicionado no meio do vetor tiver o número de inscrição igual ao número de inscrição procurado, a busca termina com sucesso. Caso contrário, se candidato posicionado do meio do vetor tiver número de inscrição menor que o procurado, então a busca continua na metade posterior do vetor. E finalmente, se o candidato posicionado do meio do vetor tiver número de inscrição maior que o procurado, a busca continua na metade anterior do vetor. O algoritmo utilizado pelo programador trata-se do método denominado busca: binária. Observe a função que manipula uma pilha e assuma que TAM é uma constante definida com valor 5. Saiba que o nome da função já explicita a finalidade dela. Void empilha(int vetor[], &topo, int valor) { if(topo = = TAM) cout<< “\nCHEIA\n”; else { //O que entra aqui? Vetor[topo]=valor; } }. Considere a chamada da função conforme linha abaixo, sabendo-se que vet é um vetor de tamanho 5 e que não tem nenhum valor ainda: empilha(vet, -1, 23);. Analise as afirmativas abaixo que sugerem correções, ou não, na definição na função e assinale a opção que contém as afirmativas corretas. I. Faltou & antes da variável vetor e irá acusar erro. II. A variável topo está sem tipo. III. O teste está correto porque o índice do primeiro elemento do vetor em C++ é 1, obrigatoriamente. IV. Na linha comentada deveria estar presente um comando de atribuição que decrementaria a variável topo. V. A linha vetor[topo]=valor; está correta. II e V estão corretas. Observe o algoritmo a seguir, onde ocorre a passagem de parâmetro por valor e por referência, respectivamente, de ITALIA para FIAT e de FRANCA para HONDA. Início-algoritmo variáveis numérico: ITALIA; lógica: FRANCA; procedimento BADESC(lógica : HONDA; var numérico FIAT); início-procedimento repetir se ((FIAT for par) OU HONDA) então atribuir 25 a FIAT senão início atribuir (NÃO HONDA) a HONDA atribuir 85 a FIAT; fim; até que HONDA; fim-procedimento {inicio do corpo-do-algoritmo} atribuir 97 a ITALIA; atribuir FALSO a FRANCA; BADESC(FRANCA, ITALIA); imprimir (ITALIA, FRANCA) fim-algoritmo. Ao final do processamento, as variáveis ITALIA e FRANCA terão, respectivamente, os seguintes valores: 85 e VERDADEIRO. Observe o trecho de código em C/C++ a seguir. O laço for preenche os dados dos candidatos no vetor de selecionados. (adaptado para C/C++). 1.struct Candidato { 2. char nome[15]; 3. double nota; 4. }; 5. 6.int main(){ 7. struct Candidato selecionados[5]; 8. int i; 9. for (i=0; i<5; i++){ 10. cout << "Nome: "; 11. cin.get();cin.get(***********,15); 12. cout << "Nota: "; 13. cin >> ***********; 14. } 15. ... 16.} Observe que o código no interior dos comandos das linhas 11 e 13 foi substituido por ***********. Para que este programa compile e execute sem erros, os asteriscos nas linhas 11 e 13 devem ser substituídos respectivamente por: selecionados[i].nome selecionados[i].nota Observe o trecho do programa em C++ abaixo e, após, entrar com os valores sugeridos para sua execução assinale a alternativa que representa a resposta final. Cin>>a; Cin>>b; Cin>>c; Cin>>d; Cout<<a; Cout<<b; Cout<<c; Cout<<d; Cout<<d; Cout<<c; Cout<<b; Cout<<a. Após a impressão dos valores pela ordem teremos uma fila e uma pilha. Ordene a coluna direita de acordo com a da esquerda, associando as características de implementação de cada: (Podem existir mais de uma opção à direita para alguma da esquerda). a) lista ligada desordenada b) array ordenada c) método (bubble sort) ( ) inserção e remoção em tempo constante. ( ) consulta por busca binária em tempo O(log n). ( ) consulta atravessa a lista toda. ( ) consiste na troca de valores entre posições consecutivas. ( ) é o processo mais simples de entender, mais fácil de implementar. ( ) inserção e remoção levam tempo linear. Indique a alternativa correta: a – b – a – c – c- b. Os irmãos Silva irão viajar por vários países da Europa e por isso, traçaram no mapa o percurso que farão, de cidade a cidade. Qual a estrutura de dados mais adequada para modelar este problema? Grafo. Os métodos de ordenação são muito utilizados em estruturas de dados para facilitar a busca e a recuperação posterior de itens de conjuntos ordenados. Existem vários métodos de ordenação, por este motivo, marque corretamente a alternativa que apresenta o código do método de seleção. void ordena(int v[], int n){ int i, j, menor, aux; for (j = 0; j < n-1; j++) { for (i = j+1; i < n; i++) { if (v[i] < v[j]) { aux = v[j]; v[j] = v[i]; v[i] = aux; } } } } Os métodos de ordenação são muito utilizados para facilitar a recuperação posterior de itens ordenados. Existem vários métodos de ordenação, por esse motivo, assinale corretamente a alternativa que mostra o nome do método que utiliza a estratégia de ordenação por trocas de vizinhos e é considerado o método mais simples. Bolha. Os sistemas e tecnologias de informação e comunicação (TIC) têm nas empresas um papel cada vez mais importante na prestação de serviços com maior grau de exigência. Atendendo a esta realidade foi desenvolvida na Inglaterra a ITIL - Information Technology Infrastructure Library, que se baseia nas especificações do ________________. SLM – Service Level Management ou Gestão de Níveis de Serviço. Para a criação de uma Fila seqüencial basta iniciar as variáveis de início e final, ou seja, apontá-las para as posições iniciais do vetor. O que alteraria na rotina de inserir se a variável final fosse inicializada com o valor -1 (menos um): Antes da inserção deve-se fazer o incremento da variável final Para consultarmos uma estrutura de dados, normalmente, empregamos um tipo de pesquisa de dados. O trecho de programa a seguir refere-se a uma pesquisa por um elemento único (sua primeira ocorrência), em um conjunto de elementos de dados armazenado em uma estrutura de acesso indexado e aleatório. Selecione a opção correspondente ao algoritmo utilizado, no programa, para a referida pesquisa: int busca(float v[], float valor, int n) { int ini = 0, fim = n -1, meio; while (ini <= fim) { meio = (ini + fim)/2; if (v[meio] == valor) return meio; if (valor < v[meio]) fim = meio -1; else ini = meio+1; } return -1; }. Pesquisa binária. Pilha é uma estrutura de dados: cujo acesso aos seus elementos segue a lógica FIFO. Pilhas são estruturas de dados que se utilizam do algoritmo LIFO, last in first out, ou melhor, o último a entrar é o primeiro a sair. Desta forma pode-se abstrair que existe apenas um local para a saída e a entrada de dados, ou seja, o topo da pilha. Supondo que uma pilha seja implementada por um vetor de inteiros de tamanho 10 e que exista uma variável global chamada topo para indexar esta posição de entrada e saída de dados e ainda quando esta variável assume o valor -1 indica que a pilha está vazia. Marque a opção que melhor ilustra a função de exclusão de um dado do vetor pilha, supondo ainda que o vetor tenha sido declarado inicialmente de forma global. Void pop(){ if(topo!=-1) topo--;} Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float nota; };. Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [100]. Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiroelemento deste vetor. Vet[10].nota=5.7 Podemos dizer que estrutura de dados é: O meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações. Podemos dizer que um container é: O que permite o armazenamento e a recuperação de dados independentemente de seu conteúdo. Preciso cadastrar todos os interessados em meu novo curso de programação. Qual a estrutura de dados mais adequada para modelar este problema, visto que não há qualquer preocupação com ordem de chegada ou saída de aluno da turma? Lista. Qual a importância de se entender a "ordenação" de dados? A ordenação é a base na qual, muitos algoritmos são construídos. Entendendo a ordenação, tem-se conhecimento para resolver outros problemas. Qual das alternativas a seguir pode definir uma estrutura de pilha? Entrada e saída de dados pelo final. Qual das seguintes estruturas de dados é classificada como heterogênea? Registro. Qual estrutura de dados não linear que é utilizada na implementação de Redes de Computadores, na Computação Gráfica, em modelagem de circuitos digitais e etc. E que se caracteriza por apresentar um conjunto de nós e conexões entre eles. Grafos. Qual o valor da variável a ao final da execução do trecho de programa a seguir? Int main() { int a, b, *p; a=4; b=2; p=&a; a++; *p=a+b; (*p)++; (*p)+=a; cout << “\n a= “ <<a<<endl; return(0); }. 16 Qual o valor de a após a execução do trecho abaixo? int a = 10; int *x; x = &a; *x = 55. 55 Quando as inserções e as remoções ocorrem sempre no mesmo lado da lista, trata-se de uma estrutura de dados denominada. Pilha. Sabe-se que Push() coloca um elemento na pilha, Pop() remove um elemento da pilha e Top() exibe o elemento que se encontra no topo. Assinale a opção que indica o número que aparecerá após a execução das funções abaixo. Sequencia: Push()/ Push()/ Pop()/ Push()/ Pop()/ Top() Números que deverão ser empilhados nessa ordem: 8/15/23/13/18. 8 Sabe-se que um protótipo de uma função é o cabeçalho da função com ;(ponto e vírgula) ao final. E que nas funções a passagem de parâmetros se dá por valor ou referência. Para o protótipo: void troca (float&,float&); pode-se dizer que: é um protótipo de função que recebe dois argumentos que são endereços que armazenam números reais, por passagem por referência. E a função não retorna nada para função chamadora. Se a e b são variáveis inteiras (int) e p1 e p2 ponteiros para int, quais das seguintes expressões de atribuição está errada? *p2 = &b; Seja a seguinte função de ordenação: void ordena (int n, int v[]) { int i, j, x; for (j=1; j<n; ++j) { x=v[j]; for (i=j-1; i>=0 && v[i] > x; --i) v[i+1]=v[i]; v[i+1]=x; } } Pode-se dizer que é uma função de ordenação: que utiliza o método inserção e realiza uma ordenação crescente nos elementos do vetor v. Seja Q uma estrutura de dados do tipo fila, em que ENQUEUE(X) significa a adição do elemento X à Q e que DEQUEUE(), a retirada de um elemento. Q está inicialmente vazia e sofre a seguinte sequência de operações: ENQUEUE(1) ENQUEUE(2) DEQUEUE() ENQUEUE(3) ENQUEUE(4) DEQUEUE() DEQUEUE() ENQUEUE(5). Ao final da sequência, a soma dos elementos de que (Q) será? 9 Sistemas operacionais utilizam filas para gerenciar, tarefas, processos e recursos. Qual é a ordenação dos elementos armazenados aleatoriamente em uma lista do tipo LIFO? Ordem de entrada. Sobre estrutura de dados, identifique o que está correto afirmar. I. Pilha é uma estrutura de dados com acesso restrito aos seus elementos, uma vez que eles são colocados e retirados por um único lado e são ordenados pelo princípio LIFO (last in first out). Assim, sempre que um elemento é adicionado ou retirado seu topo é alterado. II. Pilha é o tipo de estrutura usada, por exemplo, na avaliação de expressões numéricas, na recursividade e pelos compiladores, na passagem de parâmetros para as funções. III. Registro é uma estrutura básica que permite guardar coleções de dados de diferentes tipos, sendo normalmente utilizado quando um objeto tem diferentes atributos, isto é, contém campos de diferentes tipos. IV. Lista pode conter um número qualquer de elementos, expandindo-se ou contraindo-se conforme os elementos são inseridos ou retirados. Nesse tipo de estrutura, os acessos tanto podem ser feitos sequencialmente como diretamente. V. Fila, assim como a pilha, é uma versão especial de lista, e como tal, seus elementos são ordenados pelo princípio LIFO (last in first out). I, II e III. Sobre o funcionamento da busca binária, é incorreto afirmar que dividindo seu vetor em duas metades. Se o item for igual ao item que está na metade do vetor, o item não foi encontrado. Suponha uma listagem, contendo número de inscrição e pontuação (ordenada pelo número de inscrição) dos candidatos para o cargo de Analista de Sistemas de uma grande empresa pública. São 1024 candidatos inscritos e o sistema implementado para consulta do resultado, permite busca binária ou busca sequencial pelo número de inscrição. O número máximo de comparações executadas se fosse utilizada a busca binária e se fosse utilizada busca sequencial, respectivamente, seria de: 10 e 1024. Tanto a operação TOP (acessa topo), quanto à operação POP (remover), permite acessar o último elemento armazenado em uma Pilha. Quanto à diferença entre ambas as operações em relação ao estado da Pilha é correto afirmar: somente a operação POP altera o estado da Pilha. Tei Ping, estudante de computação, precisou implementar parte de um jogo que trabalhava com cartas especiais. Cada carta possui um numero e uma letra. Alguns jogadores teriam que jogar as cartas na mesa, enquanto outros deveriam devolver as cartas na sequencia inversa à jogada. Tei Ping estudou o mecanismo do jogo e decidiu usar a melhor estrutura de dados na sua implementação. Qual a estrutura escolhida? Pilha. Um órgão público adotou dois sistemas de senhas para atender os cidadãos na ordem de chegada. O sistema I atende os não idosos. O sistema II atende os idosos. Nessa situação: tanto o sistema I, quanto o II, adotam o esquema FIFO de organização de dados. Uma fila duplamente terminada, isto é, uma estrutura linear que permite inserir e remover de ambos os extremos é chamada de: deque. Uma função possui um valor de retorno inteiro, recebe por valor um inteiro como primeiro parâmetro e por referência um inteiro como segundo parâmetro. Qual das respostas abaixo poderia representar o protótipo dessa função: int func (int a, int&b); Uma lista ligada é uma estrutura que corresponde a uma sequência lógica de entradas ou nós. Cada nó armazena a localização do próximo elemento na sequência, ou seja, de seu nó sucessor. Nessa estrutura: o armazenamento de uma lista não requer uma área contígua de memória. Como listas são estruturas dinâmicas, normalmente são definidos procedimentos que permitem criar e remover nós na memória.
Compartilhar