Você está na página 1de 5

1. Faa um algoritmo recursivo para mostrar na tela nmeros de n a 1, sendo n um nmero inteiro maior que 1. 2.

Faa o algoritmo e implemente em linguagem C a Sequencia de Fibonacci de forma recursiva e outro no recursivo. Posteriormente, compare os tempos de execuo para sries grandes. 3. Implemente uma funo recursiva soma(n) que calcula o somatrio dos n primeiros nmeros inteiros. 4. Faa o algoritmo e implemente uma funo recursiva que recebe como parmetros um nmero real X e um inteiro N e retorna o valor de XN. 5. No exerccio anterior, acrescente para N podendo ser negativo. 6. Dada a funo X: function X(n,m: integer): integer; begin if (n=m) or (m=0) then x:=1; else x:= x(n-1,m)+x(n-1,m+1) end; a) qual o valor de x(5,3) ? b) quantas chamadas sero feitas na avaliao acima ? 7. Faa um algoritmo e implemente a Somar os elementos de um vetor. 8. Implementar em C um algoritmo para preencher recursivamente um vetor de inteiros de n posies com o valor 1. 9. Implementar em C um algoritmo para imprimir recursivamente o vetor de inteiros de n posies. 10. Considere a funo abaixo: int X(int a) { if ( a <= 0 ) return 0; else return a + X(a-1); } a. O que essa funo faz? b. Escreva uma funo no-recursiva que resolve o mesmo problema. 11. Verique o que as funes dos algoritmos abaixo imprimem e retornam: (i) func (int n) { if (n == 0) printf(fim); else { printf(n); func(n-1); } }

(ii) func (int n) { if (n == 0) printf(fim); else { func(n-1); printf(n); } } (iii) func (int n) { if (n == 0) printf(fim); else { printf(n); func(n-1); printf(n); } } 12. Determine o que a seguinte funo recursiva em C calcula. Escreva uma funo iterativa para atingir o mesmo objetivo. func (int n) { if (n == 0) return(0); return(n + func(n-1)); } 13. Utilizando a forma recursiva, faa uma funo que soma os valores de uma lista encadeada. 14. Escreva uma funo no recursiva para as seguintes funes: a) Function f (i: integer) : integer; begin if i > 1 then f := i + f(i-1) else f := 1 end; b) Function f ( i: integer) : integer; begin if i=0 then f := 0 else if i=1 then i:=1 else f := f(i-1)+f(i-2) end;

15. Implemente o mtodo de ordenao de insero, seleo e bubblesort. 16. Faa um programa em C que ordene um vetor do tipo Reg (sendo Reg a estrutura definida abaixo) utilizando o mtodo de troca (Insero), adotar como campo chave o NOME ou CPF. O usurio ir informar qual campo deve ser escolhido para ser ordenado. typedef struct Reg{ int CPF; char nome[25]; int idade; char sexo; }Reg; 17. Faa um programa em C que ordene uma Lista Dinmica Duplamente Encadeada definida pela estrutura abaixo, utilizando-se do mtodo de BUBBLE SORT. O campo chave CPF. typedef struct Lista { int dados; Lista *anterior; Lista *proximo; }Tipo_Lista; typedef struct Reg{ int CPF; char nome[25]; int idade; char sexo; }Reg; 18. Faa um programa em C que ordene uma Lista Dinmica Duplamente Encadeada definida pela estrutura abaixo, utilizando-se do mtodo de SELEO. O campo chave nome. typedef struct Lista { int dados; Lista *anterior; Lista *proximo; }Tipo_Lista; typedef struct Reg{ int CPF; char nome[25]; int idade; char sexo; }Reg; 19. Modifique os mtodos de ordenao do exerccio anterior de forma que eles realizem a ordenao de forma decrescente. 20. Modifique o cdigo do mtodo de ordenao por bolha para que ele transforme-se no mtodo de ordenao por pedra, ou seja, o elemento desce ao invs de subir no vetor ordenado. Ordem Crescente. 21. A funo em C implementa o algoritmo de ordenao por insero:

void ordena_insercao(int v[], int tam) { int j, k, aux; for(k=1; k<tam; k++) { aux = v[k]; for(j=k-1; j>=0 && v[j]>aux; j--) v[j+1] = v[j]; v[j+1] = aux ; } } Modifique o cdigo de forma a que a ordenao seja realizada por ordem decrescente. 22. Escreva uma verso recursiva do algoritmo de ordenao por seleo. 23. Escreva um algoritmo que l dois conjuntos de valores, com n e m elementos, respectivamente, e armazena cada conjunto em um vetor (vetores A e B). Aps, o algoritmo deve ordenar cada um dos vetores (em ordem crescente). Finalmente, o algoritmo deve construir um terceiro vetor R, formado pela unio dos dois vetores. Este vetor resultante tambm deve ser ordenado e no deve conter valores duplicados. Use subalgoritmos onde for conveniente. Para ordenao de vetores, use um dos mtodos vistos em aula. Identifique o mtodo usado!

24. Crie uma lista de contactos que dever conter um ndice de registro, o nome da pessoa, o nmero de telefone e o e-mail. Para tal, utilize a seguinte definio de estrutura: typedef struct { unsigned int id_registo; char nome[255]; unsigned long telefone; char email[255]; } TCONTACTO; Poder utilizar a seguinte inicializao, ou outra que entenda: TCONTACTO ListaContactos[] = { {9, "Murilo Santana", 912661234, "murilo@uesb.br"}, {6, "Eudes Silva", 919871234, "eudes@uesb.br "}, {5, "Alex Ferreira", 919726409, "alex@uesb.br "}, {7, "Claudia Ribeiro", 918741854, "claudia@uesb.br "}, {1, "Valeria Rosa", 914289844, " valeria@uesb.br "}, {6, "Agnaldo Lovato", 916429646, "agnaldo@uesb.br "} {3, "Thales DQE", 88775594, "thales@uesb.br "} {8, "Marcelo Ea", 87563781, "marcelo@uesb.br "} {4, "Antonio Vega", 88567893, "antonio@uesb.br "} {2, "Carlos Assis", 92739182, "carlos@uesb.br "} }; Crie subprogramas que sejam capazes de ordenar a lista, utilizando os algoritmos de Insero, seleo, bubblesort. O usurio ir definir se a ordenao por cdigo, nome, telefone ou e-mail. Imprima a ordenao definida pelo usurio.

25. Faa um teste de mesa com cada mtodo de ordenao (seleo, insero, booble), utilizando as seguintes sequncia de dados de entrada: (i) S1 = {5; 4; 6; 8; 3; 1} (ii) S2 = {11; 9; 7; 5; 3; 1} (iii) S2 = {43;12;8;0;44;7;3} 26. Crie e implemente em linguagem de programao C um algoritmo chamado find, este retorna o k-simo menor elemento dessa seqncia. Por exemplo: Suponha que os elementos S = {7; 1; 3; 10; 17; 2; 21; 9} estejam armazenados nessa ordem em um vetor e que desejamos obter o quinto maior elemento dessa seqncia. Ento, uma chamada como find(S,0,7,5), dever retornar o nmero 9, onde S o nome do vetor, 0 e 7 so, respectivamente, a menor e a maior posio do vetor e 5 indica que desejamos o quinto menor elemento. Obs.: Voc no deve ordenar a seqncia e depois tomar o k-simo elemento. 27. A mediana de um conjunto com um nmero mpar de elementos o valor central que se obtm aps ordenar o conjunto. A mediana de um conjunto com um nmero par de elementos a mdia aritmtica dos dois valores centrais que se obtm aps ordenar o conjunto. Por exemplo, para obter a mediana do conjunto de valores {1, 3, 4, 5, 4, 2}, considera-se o conjunto ordenado {1, 2, 3, 4, 4, 5}; os dois valores centrais so 3 e 4, pelo que a mediana 3.5. Escreva um programa para achar e imprimir a mediana de um conjunto de valores inteiros introduzidos pelo utilizador, at um mximo de 100 valores, possivelmente com valores repetidos, a. usando o mtodo de ordenao seleo; b. usando o mtodo de ordenao por insero; c. usando o mtodo de ordenao bubblesort; 28. Faa um programa que implemente o algoritmo de SELEO decrescente para o vetor = {4,8,2,3,7};