Você está na página 1de 7

8 LISTA DE EXERCCIOS FUNES Disciplina: PC-I Exerccio 1: Crie um programa que testa a funo y = floor(x + 0.

5) que fornece o valor numrico de x para o inteiro mais prximo e atribui o resultado a y. Para cada nmero processado, imprima o nmero original e o nmero arredondado. Exerccio 2: Criar um programa capaz de criar nmeros aleatrios que sejam pertencentes a cada um dos conjuntos descritos abaixo: (A) 2, 4, 6, 8, 10. (B) 3, 5, 7, 9, 11. (C) 6, 10, 14, 18, 22. Para cada um dos conjuntos crie uma funo especfica (criaConj1, criaConj2, criaConj3, respectivamente). Exerccio 3: Criar um programa que testa a funo integerPower(base, expoente) que retorna o valor de: baseexpoente. Por exemplo, integerPower(2,3) = 2*2*2. Suponha que expoente um inteiro positivo, diferente de zero e base seja um inteiro. A funo integerPower deve empregar um for ou um while para realizar o clculo descrito anteriormente. Exerccio 4: Escrever um programa que testa uma funo multiple que determina para um par de nmeros, se o segundo mltiplo do primeiro. A funo deve ter dois argumentos e retornar 1, se o segundo for mltiplo do primeiro, ou 0 caso contrrio. Exerccio 5: Escrever um programa que o usurio fornece um valor n e este passado para uma funo verificaNPar que imprime quais valores so pares de 1 at N. Para tanto, verificaNPar chama uma outra funo verificaPar que verifica se um nmero par (e se for retorna 1) ou no (neste caso retorna 0). Exerccio 6: Escrever um programa no qual o usurio fornece dois valores a e b e este passado para uma funo geraNum que gera um nmero aleatrio contido no intervalo [a, b]. Aps isso, uma funo adivinhaNum tal que requisita que o usurio adivinhe qual foi o nmero sorteado e deve tratar trs possveis situaes: (A) Se o nmero que o usurio forneceu maior do que aquele que foi sorteado, ento, a mensagem Nmero muito alto. Tente de Novo aparece e uma nova leitura deve ser realizada. (B) Se o nmero que o usurio forneceu menor do que aquele que foi sorteado, ento, a mensagem Nmero muito baixo. Tente de Novo aparece e uma nova leitura deve ser realizada.

(C) Se o nmero que o usurio forneceu igual aquele que foi sorteado, ento, a mensagem Acertou. Numero de tentativas: xxx aparece e programa pergunta se deseja continuar jogando ou no. Exerccio 7: Escrever um programa no qual o usurio fornece um valor n e ento uma funo fatorial fornece o valor de n Fatorial. Deve ser utilizado um for ou um while em Fatorial e a seguinte definio para encontrar o fatorial de n: n!= n * (n 1)! 0!= 1 Exerccio 8: Escrever um programa no qual o usurio fornece um valor n e ento uma funo Fibonacci fornece o n-simo termo da seqncia de Fibonacci. Voc deve utilizar um for ou um while em Fibonacci e a seguinte frmula para encontrar o n-simo termo da seqncia: F (n) = F (n 1) + F (n 2) F (1) = F (0) = 1 Exerccio 9: Escrever um programa no qual o usurio fornece um valor n e ento uma funo Padovana fornece o n-simo termo da seqncia Padovana. Voc deve utilizar um for ou um while em Padovana e a seguinte frmula para encontrar o n-simo termo da seqncia: P (n + 1) = P(n 1) + P(n 2) P (2) = P(1) = P(0) = 1 Exerccio 10: Escrever uma funo Min(a, b) que retorna o menor entre dois valores inteiros. Exerccio 11: Escrever uma funo Max(a, b) que retorna o maior entre dois valores inteiros. Exerccio 12: Escrever um programa no qual o usurio fornece um valor inteiro n e um caractere ch e uma funo quadrado(int n, char ch) desenha um quadrado com o caractere ch. Um exemplo de execuo dado a seguir: Digite n: 5 Digite ch: * ***** ***** ***** ***** *****

Exerccio 13: Escrever um programa no qual o usurio fornece um valor inteiro n e um caractere ch1 e outro caractere ch2 e uma funo meio(int n, char1 ch, char2 ch) desenha um quadrado cuja metade superior e a diagonal principal preenchida com o caractere ch1 e a metade inferior com o caractere ch2. Um exemplo de execuo dado a seguir: Digite n: 5 Digite ch1: * Dgite ch2: # ***** #**** ##*** ###** ####* Exerccio 14: Escrever um programa no qual o usurio fornece a hora com 3 argumentos inteiros (hora, minutos e segundos) e uma funo nSegundos fornece o nmero de segundos decorridos desde a meia-noite. Use esta funo para que fornecidas duas horas, o programa calcule o tempo em segundos decorrido entre uma e outra (em princpio o usurio no precisa se preocupar em saber qual hora ser subtrada de qual e o programa no deve fornecer um resultado negativo). Exerccio 15: Escrever um programa no qual o usurio fornece valores a e b e depois uma funo geraV preenche um vetor V de dimenso 10 com valores aleatrios contidos no intervalo [a, b]. Uma funo mostraV dever mostra os valores contidos em V. Depois uma funo minV fornece o menor valor contido em V, outra funo maxV fornece o maior valor contido em V e meanV fornece a mdia aritmtica dos elementos contidos em V. Finalmente uma funo histV fornece um histograma com 10 categorias (a primeira categoria contabiliza todos os valores no intervalo [a, (a+(b+a)/10)], por exemplo). Exerccio 16: Refazer o Exerccio 13, mas para uma matriz M de dimenso 10 x 10. Exerccio 17: Refazer os Exerccios 7, 8 e 9, utilizando funes recursivas. Exerccio 18: Construir um programa que utiliza uma funo recursiva somaN para calcular a soma de 1 at n. Exerccio 19: Construir um programa que utiliza uma funo recursiva para prodN calcular o produto de 1 at n. Exerccio 20: Construir um programa que utiliza uma funo recursiva verifPalid que verifica se uma string Paldroma ou no.

Exerccio 21: Jogo da Torre de Hani: Este jogo consiste em passar todos os discos do pino A para o pino C usando o pino B como auxiliar. A Figura 2 ilustra este jogo para 3 discos.

Figura 1: Ilustrao do objetivo do jogo da Torre de Hani. Para realizar a transferncia, porm, trs regras devem ser respeitadas: Um disco deve estar sempre em um dos trs pinos. Somente um disco pode ser movido de cada vez. Em nenhum estgio do jogo pode-se ter um disco maior colocado sobre um disco menor. Este problema pode ser resolvido atravs do uso da recurso. Para tanto uma funo void mover(int n, char a, char b, char c) que move n discos do pino A para o pino C usando o pino B como intermedirio deve ser implementada. O corpo desta funo deve seguir o ALGORITMO 2. ALGORITMO 2 (1) Mover os n-1 primeiros discos da pilha do pino A para o pino B. (2) Sobrar um disco no pino A que pode ser facilmente movido para o pino C. (3) Mover os n-1 primeiros discos do pino B para o pino C. interessante observar que o nmero mnimo de movimentos para conseguir transferir todos os discos do pino A para o pino C igual a 2n-1, sendo n o nmero de discos. Logo: Para solucionar um jogo com: 3 discos -> 2 -1 = 7 movimentos 7 discos -> 127 movimentos 15 discos-> 32767 movimentos Pede-se: Implemente e teste um programa que resolve o jogo da Torre de Hani. O problema da Torre de Hani foi proposto pelo matemtico francs E. Lucas, em 1883. Lucas elaborou para seu "invento" uma lenda curiosa sobre uma torre muito grande, a Torre de Brama, que foi criada no incio dos tempos, com trs hastes contendo 64 discos concntricos. O criador do universo tambm gerou uma comunidade de monges cuja nica atividade seria mover os discos da haste original ("A") para uma de destino ("C"). e estabeleceu que o mundo acabaria quando os monges terminassem sua tarefa. Supondo que cada movimento leve 1 segundo quanto tempo levaria para se resolver o jogo com 64 discos?

Exerccio 22: Crie um programa que realiza diversas operaes matriciais. Para tanto crie as funes descritas na Tabela 1. Nome da Funo geraV(a,b) Descrio

Gera valores aleatrios no intervalo [a, b] para um vetor de dimenso n. mostraV Mostra os elementos de um vetor de dimenso n. somaxt Soma cada elemento i de um vetor x pelo elemento i de um vetor t. subxt Subtrai cada elemento i de um vetor x pelo elemento i de um vetor t. multipxt Multiplica cada elemento i de um vetor x pelo elemento i de um vetor t. dividxt Divide cada elemento i de um vetor x pelo elemento i de um vetor t. prodintxt Calcula o produto interno entre dois vetores x e t. geraM(a,b) Gera valores aleatrios no intervalo [a, b] para uma matriz de dimenso m x n. mostraM Mostra os elementos de uma matriz de dimenso m x n. prodMx Calcula o produto de uma matriz A (m x n) por um vetor v (n x 1) e armazena em um vetor de dimenso s (m x 1). prodextxt Calcula o produto exterior de um vetor t de dimenso m por um vetor de dimenso n, formando uma matriz D (m x n). prodAB Calcula o produto de uma matriz A de dimenso m x p por uma matriz B de dimenso p x n, resultando em uma matriz C. Tabela 1: Operaes vetoriais e matrizes e suas respectivas funes. Para testar as funes da Tabela 1, o programa principal dever gerar valores aleatoriamente contidos em um intervalo [a,b] (os valores a e b so fornecidos pelo usurio) para duas matrizes A e B e para dois vetores v e t. Utilize as matrizes A de dimenso 8 x 6, B de dimenso 6 x 7 e os vetores v de dimenso 6 x 1 e t de dimenso 6 x 1 como variveis globais. Crie, tambm, uma matriz C de dimenso 8 x 7, D de dimenso 6 x 6, um vetor de s de dimenso 8 x 1, e um vetor r de dimenso 6 x 1 todos com elementos iguais a zero. Aps a gerao aleatria de A, B, v e t, teste suas funes sempre mostrando o resultado obtido (seja com as funo mostraV para vetores, seja com a funo mostraM para matrizes) aps chamar cada comando de clculo dado na Tabela 1 pela funo main().

Exerccio 23: A movimentao do centro de um Furaco monitorada via satlite e para tentar determinar o risco de que passe por alguma rea construda uma matriz que representa a posio atual do Furaco e quais so as reas prximas que podem ser atingidas tal como dado no Figura 2.

Figura 2: Representao da movimentao de um Furaco por uma matriz. Desenvolva um programa capaz de simular a movimentao do Furao. Para tanto, voc dever considerar que: (i) O movimento do Furaco segue uma matriz de probabilidades e tal que relaciona a probabilidade de movimentao do centro do Furaco para quadrantes adjacentes Tij, dado que o mesmo est no quadrante Tij. Existem 8 possveis movimentos dados na Tabela 2 e ilustrados na Figura 3. Movimento Significado 1 Noroeste 2 Norte 3 Nordeste 4 Centro-Leste 5 Centro-Oeste 6 Sudoeste 7 Sul 8 Sudeste Tabela 2: Movimentos possveis.

Figura 3: Movimentao Furao.

(ii) Os valores das probabilidades de movimentao so dadas na Tabela 3. Movimento Probabilidade(%) 1 35 2 25 3 15 4 20 5 0 6 0 7 5 8 0 Tabela 3: Probabilidades de movimentao do Furaco.

(iii) Realizar 10 simulaes de movimentao do centro do Furaco e mostrar um histograma com o nmero de simulaes que as reas destacadas na Figura 2 foram atingidas pelo Furaco. Para tanto, utilize as orientaes descritas no ALGORITMO 2. (iv) A cada incio de simulao o quadro inicial o da Figura 2. Uma simulao termina quando o Furao se move para uma regio fora da rea monitorada (supe-se que uma vez fora da rea monitorada o Furaco no volta mais). ALGORITMO 2 Incio // Varivel contadora do nmero de simulaes realizadas. simu = 1; // Vetor de inteiros que armazena quantas vezes as reas monitoradas // T11, T12, T21, T22, T32, T41, T42, T43 e T44 foram atingidas. varea[9] = {0}; // Matriz de caracteres para armazenar o mapa com a posio do Furaco. mapa[4][5] = {T,T,*,*,*,T,T,*,*,*,*,T,*,*,*,T,T,T,T,*}; // Lao para realizar 10 simulaes. Enquanto (simu <= 10) area = 1; // Funo que fornece a situao inicial (Figura 2) de uma simulao. iniciaMatriz(); // Lao para simular at o Furaco sair do mapa. Enquanto (area) // Funo que altera a matriz de posio do Furaco de acordo com // o resultado do movimento aleatrio de acordo com as probabilidades // da Tabela 3. movimentoFuracao(); // Funo que verifica se alguma rea monitorada (T11, T12, ...) foi // atingida. Se isto ocorreu, ento, fornece ndice correspondente a rea. // Caso contrrio, fornece valor -1 e nada faz. ind = areaAtingida(); Se (ind != -1) varea(ind)++; Fim se // Verifica se o Furaco no saiu do mapa, se no saiu, ento, devolve // o valor 1. Caso contrrio, devolve o valor -1 para area e para a simulao. area = verificaDentroMapa(); Fim Enquanto simu++; Fim Enquanto Fim

Você também pode gostar