Lista 6 - PDII - 08/1 Prof. Andréa Maria Pedrosa Valli 1. Escrever um procedimento que calcule o valor aproximado de π através da série S =1− 1 1 1 + 3 − 3 + ···, 33 5 7 sendo π = (32 × S)1/3 . Deverá ser fornecido ao procedimento o número de termos da série para o cálculo de π. Escrever um algoritmo que, fornecendo ao procedimento, sucessivamente, o número de termos (1, 2, 3, · · · , N ), imprima em um arquivo o valor aproximado de π e o número de termos utilizado. O valor de N deverá ser lido. 2. Escrever uma função que calcule a distância entre dois pontos de um plano, sendo fornecido as suas coordenadas x1 , y1 e x2 , y2 . Faça uma função que calcule a área do triângulo em função de seus lados, a, b, c, p area = p(p − a)(p − b)(p − c) onde p = (a + b + c)/2 é o semiperı́metro do triângulo. Utlizando as funções acima, escrever um algoritmo que leia de um arquivo 10 conjuntos de pontos do plano, x1 , y1 , x2 , y2 e x3 , y3 , cada um em uma linha, e determine as áreas dos triângulos formados por estes pontos. Imprimir, para cada conjunto de pontos, as coordenadas lidas e a sua área. 3. Faça um algoritmo para resolver o sistema Ax = b, x1 b1 a11 a12 , x= , b= A= x2 b2 a21 a22 usando a regra de Cramer: b1 a12 b2 a22 x1 = det A a11 b1 a21 b2 , x2 = det A Para isto, organize o seu algoritmo da seguinte forma: • faça um procedimento para leitura dos dados de entrada; • faça uma função “determinante” que entre com os coeficientes de uma matriz 2x2 (a11 , a12 , a21 , a22 ) e calcule o seu determinante; • faça um procedimento que entre com a matriz A e o vetor b, saia com a solução do sistema usando a regra de Cramer, caso exista, ou com uma variável (lógica ou inteira) que indique que a solução não existe (det A = 0). Utilize para o cálculo dos determinantes em x1 e x2 a função “determinante”; • faça um procedimento de saı́da dos resultados: a solução do sistema, se existir, ou a mensagem “solução impossı́vel”, caso contrário. 4. Faça um algoritmo para ler um vetor de N componentes (N ≤ 30). Após a leitura, ler um número real e pesquisar no vetor qual a componente que está mais próxima do número real lido (desconsidere empate). Imprimir a componente encontrada. Observações: • a leitura do vetor deve ser feita através de um procedimento. • a pesquisa da componente que mais se aproxima do número real lido deve ser feita através de uma função que retorne o valor da componente encontrada. 5. Um curso de pós-graduação em veterinária selecionou, através de análise de currı́culo e entrevista, 20 alunos para o curso. Ao iniciar o curso, foi explicado que o aluno que, na primeira prova ficasse abaixo da média da turma, seria desligado. Faça um algoritmo para ler os nomes e as notas dos alunos da turma e retirar os alunos que ficarem abaixo da média da turma. Imprimir os alunos que permaneceram na turma. Exemplo: turma = (Márcio Cláudio Carlota Maria Marcos Luı́s) notas = (10 7 9 8 6 8) média = 8 turma = (Márcio Carlota Maria Luı́s) Faça: • um procedimento para leitura dos dados de entrada; • uma função para calcular a média da turma; • uma função para procurar os alunos que estão abaixo da média da turma; • um procedimento para exclusão; • um procedimento para impressão. 6. Faça um algoritmo para verificar se uma matriz quadrada de ordem n (n ≤ 20) é diagonalmente dominante, ou seja, se a seguinte condição é satisfeita: |aii | > n X |aij |, i = 1, 2, ...n j=1,j6=i Para isso, faça um procedimento que entre com a ordem da matriz, a matriz e saia com uma variável lógica com valor verdadeiro, se a condição é satisfeita e, um valor falso, caso contrário. Escreva na tela uma mensagem que indique se a matriz é diagonalmente dominante ou não. 7. Escrever um procedimento que determine o conjunto interseção entre dois conjuntos A e B de caracteres. Escrever um procedimento que determine o conjunto união entre os mesmos conjuntos A e B. Escrever um algoritmo que leia 50 pares de conjuntos de 100 caracteres cada um, determine e escreva a interseção e a união desses conjuntos, utilizando os procedimentos anteriormente definidos. 8. Ao iniciar o curso foi explicado que os alunos repetentes que tirarem nota acima da média na primeira prova poderão ser matriculados na turma. Faça um algoritmo que forneça, para uma turma de 45 alunos, os nomes e as notas (organizadas em ordem decrescente), os nomes e as notas dos 5 alunos repetentes e inclua na turma os alunos repententes que tiraram nota maior que a média. Saia com a nova turma (nomes e notas) e com a média. Faça: • uma função para calcular a média da turma; • uma função para procurar os alunos repententes que ficaram acima da média da turma; • um procedimento para incluir os repetentes na turma, mantendo a ordem decrescente das notas. 9. Faça um algoritmo para dividir sucessivamente, k vezes, um segmento AB do plano ao meio até que fique menor que 0.00001. Para isto, construa os seguintes subalgoritmos: • uma função que calcule p a distância entre dois pontos no plano, fornecendo as suas coordenadas (dist = (x2 − x1 )2 + (y2 − y1 )2 ). • um procedimento que entre com as coordenadas de dois pontos no plano e saia com as coordenadas do ponto médio e com a distância entre um dos pontos ao ponto médio. Utilize a função distância implementada. O seu algoritmo deve ler as coordenadas de dois pontos do plano e sair com o número de vezes que intervalo foi dividido, k, o ponto médio final e o tamanho final do intervalo.