Algoritmos de pesquisa 1 Algoritmos de pesquisa 1. Escreva um programa que permita efectuar a pesquisa sequencial nos dados que se encontram no ficheiro “dados2.txt”. Os dados contidos neste ficheiro devem ser guardados num vetor em que cada componente é uma estrutura com 4 campos: NumCC, Nome, Altura e Peso. Use para chave o campo NumCC. 2. Escreva uma função recursiva para a pesquisa binária e use-a para fazer pesquisa de dados no ficheiro “dados2.txt”. Use para chave o campo NumCC. 3. Construa os seguintes subprogramas: - LerVector (para inserir o tamanho de um vector de inteiros e depois construi-lo), - OrdenarDecrescente (ordena decrescentemente um vector), e - PesquisarElemento (determina o índice/posição de um elemento x num vector V -- se existirem vários valores iguais a x, devolve o de menor índice/posição). Usando estes três subprogramas, implementar um programa em C que: a) leia/construa o vector V; b) determine a quantidade de valores de V iguais ao menor valor de V; c) mostre o resultado obtido. 4. Os números de Fibonacci são os inteiros positivos dados pelas seguintes expressões: Fib(0) = 1; Fib(1) = 1; Fib(a) = Fib(j-1) + Fib(j-2), j ≥ 2 Usando estes números pode ser implementado um método de pesquisa: a pesquisa de Fibonacci. Dado um vector X com N elementos ordenados pela chave, este algoritmo permite pesquisar o vector pelo elemento com chave k. O elemento na posição X[0] é ignorado. Assume-se que N + 1 = Fib(j+1) (é um número de Fibonacci). Algoritmo: P1: [Inicialização] Fazer i = Fib(j); p = Fib(j-1) e q = Fib(j-2). (neste algoritmo p e q serão sempre números de Fibonacci consecutivos). P2: [Comparação] Se k < ki ir para P3. Se k > ki ir para P4. Se k = ki termina com sucesso (resultado = i). P3: [Diminuir i] Se q = 0 o algoritmo termina sem sucesso (resultado = -1). Senão fazer i = i − q, aux = p, p = q e q = aux − q. Voltar a P2. P4: [Aumentar i] Se p = 1 o algoritmo termina sem sucesso (resultado = -1). Senão fazer i = i + q, p = p − q e q = q − p. Voltar a P2. Implemente este método de pesquisa e teste-o com um dos ficheiros disponíveis. 5. Implemente uma agenda electrónica para manter os contactos dos seus amigos. Ofereça serviços de ordenação dos registos por nome, por data de nascimento, por operador de serviço telefónico (indicativo da região para números da rede fixa) e por endereço de e-mail (nome de utilizador ou designação do domínio). Permita que o utilizador pesquise a agenda por nome do contacto e por número de telefone. Algoritmos e Estruturas de Dados Algoritmos de pesquisa 2 6. Considere o seguinte algoritmo correspondente a um método de ordenação (para um vetor V de tamanho N): Para i desde 1 até N fazer Para j desde (i+1) até N-1 fazer Se (V[i] > V[j]) então temp ← V[i]; V[i] ← V[j] V[j] ← temp a) Simule as duas primerias iterações do algoritmo para o seguinte exemplo: V 9 7 2 8 10 3 V 1ª iteração V 2ª iteração b) Construa uma função em C que traduza este algoritmo. Algoritmos e Estruturas de Dados