Você está na página 1de 3

1

Trabalho

O trabalho consiste em duas etapas: a) entrega da resoluo dos exerc ca cios e b) defesa do trabalho no laboratrio. o O trabalho individual e dever ser entregue at o dia 28 de julho de 2008, atravs do e-mail e a e e tiagodemelo@gmail.com. A defesa do trabalho ocorrer no dia 30 de julho de 2008, no horrio da a a aula. O trabalho entregue consiste num arquivo texto com as respostas e demais arquivos com as implementaes. co Existem dois tipos de trabalho: A e B. O sorteio do trabalho acontecer em sala de aula, no a dia 14 de julho de 2008. Cada aluno car responsvel por um unico tipo de trabalho. O valor a a de cada questo descrito no prprio enunciado. a e o Para cada dia de atraso no envio do trabalho acarretar no desconto de um ponto da nota nal a do aluno. As dvidas, em tempo hbil, podero ser sanadas com o professor. u a a

Tipo A
1. Dado um vetor com n elementos do tipo: [valor 2,0] typedef struct Cliente { char *nome; float saldo; } Cliente; Escreva uma funo em C que ordene este vetor em ordem ascendente pelo campo saldo, de ca tal forma que a lista de clientes com o mesmo saldo que em ordem alfabtica ascendente. e Utilize a lgica do algoritmo da Bolha, fazendo as modicaes que julgar necessrias. o co a 2. Muitas vezes o vetor j est ordenado antes da execuo do nmero total de passos de a a ca u ordenao. Se o vetor j estiver ordenado, no h necessidade de continuar executando ca a a a o algoritmo. Crie um programa em C que implemente o mtodo Seleo Direta com estas e ca condies, ou seja, o programa deve parar de executar assim que o vetor estiver ordenado. Se co o vetor j estiver ordenado, no in da execuo, no deve ser realizada nenhuma operao a cio ca a ca de troca de elementos, ou seja, no necessrio executar o mtodo de ordenao Seleo a e a e ca ca Direta. [valor 2,0] 3. Suponha que voc deseja implementar um programa que realiza diversas tarefas dentre as e quais a ordenao de vrios itens de dados que contm diversas informaes. Cada item ca a e co ocupa cerca de 1kbyte de memria. Considerando cada uma das situaes abaixo, indique o co (e justique) qual o mtodo de ordenao mais indicado em cada situao: [valor 1,0] e ca ca Se Se Se Se os dados na entrada j esto quase ordenados. a a o objetivo minimizar a quantidade de movimentos de itens. e o objetivo otimizar o tempo necessrio para se ordenar os itens. e a a posio original dos itens no pode ser alterada. ca a

4. No caso do algoritmo Shell Sort, suponha que este algoritmo foi modicado de modo que os valores do incremento h sejam tais que o ultimo valor utilizado seja h = 2. Neste caso, o algoritmo produz o resultado correto? Justique a sua resposta. [valor 1,0] 5. Modique o programa Quicksort apresentado em sala de aula de modo que, se um subvetor for pequeno, a classicao pelo mtodo Bolha seja empregada. Determine, usando execues ca e co reais de programas de computador, quo pequeno o subvetor deve ser para que essa estratgia a e cominada seja mais eciente do que a implementao comum do Quicksort. [valor 2,0] ca 6. Considere uma seqncia com um milho de elementos dispostos de forma ordenada, inverue a tida e desordenada. Preencha a tabela a seguir com os tempos gastos pelas implementaes co dos diferentes algoritmos de ordenao para estabelecer uma ordem ascendente para elemenca tos daquela seqncia. [valor 2,0] ue 1

Tempo gasto quando Invertida Desordenada Ordenada Bolha Insero ca Seleo ca ShellSort QuickSort HeapSort O trecho de cdigo a seguir sugere como o tempo gasto por cada implementao pode ser o ca calculado. Utilize as implementaes dos mtodos de ordenao apresentados em sala de co e ca aula. #include "time.h" time_t tempo0, tempo1; time(&tempo0); /*obtem o tempo antes do inicio da fun~o */ ca ChamadaDaFuncao(); time(&tempo1); /*obtem o tempo antes do final da fun~o */ ca tempoDecorridoEmSegundo = difftime(tempo1, tempo0);

Tipo B
1. Dado um vetor com n elementos do tipo: [valor 2,0] typedef struct Cliente { char *nome; float saldo; } Cliente; Elabore um programa que apresente um menu ao usurio oferecendo a possibilidade de a ordenar um vetor pelo nome ou pelo saldo do cliente, utilizando a estrutura Cliente. Aps o a resposta do usurio, o programa deve perguntar o tamanho e os valores desse vetor. a A resposta do programa deve ser o vetor recebido, porm ordenado. A ordenao do nome e ca deve desconsiderar as diferenas entre maisculas e minsculas. c u u 2. Invente um vetor-exemplo de entrada para demonstrar que a ordenao atravs do mtodo ca e e de Seleo um mtodo instvel. Mostre os passos da execuo do algoritmo at que a ca e e a ca e estabilidade seja violada. Note que quanto menor for o vetor que voc inventar, mais rpido e a voc vai resolver a questo. [valor 1,0] e a 3. Existe alguma semelhana do HeapSort com a ordenao por Insero Direta? se sua resc ca ca posta for sim, explique qual. Se sua resposta for no, justique-a. [valor 1,0] a 4. Faa uma nova implementao do mtodo Shellsort considerando um forma diferente, da c ca e apresentada em sala de aula, para gerar os valores de h. Compare o mtodo implementado e por voc com o programa apresentado em sala de aula. Utilize um tamanho de vetor que e seja suciente para demonstrar a diferena de desempenho. [valor 2,0] c 5. Escreva um programa em C para remover o menor elemento do heap. Aps a remoo, a o ca estrutura de heap deve ser mantida. [valor 2,0] 6. Considere uma seqncia com um milho de elementos dispostos de forma ordenada, inverue a tida e desordenada. Preencha a tabela a seguir com os tempos gastos pelas implementaes co dos diferentes algoritmos de ordenao para estabelecer uma ordem ascendente para elemenca tos daquela seqncia. [valor 2,0] ue

Tempo gasto quando Invertida Desordenada Ordenada Bolha Insero ca Seleo ca ShellSort QuickSort HeapSort O trecho de cdigo a seguir sugere como o tempo gasto por cada implementao pode ser o ca calculado. #include "time.h" time_t tempo0, tempo1; time(&tempo0); /*obtem o tempo antes do inicio da fun~o */ ca ChamadaDaFuncao(); time(&tempo1); /*obtem o tempo antes do final da fun~o */ ca tempoDecorridoEmSegundo = difftime(tempo1, tempo0);

Você também pode gostar