TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Verificador de Números Mutuamente Amigos - multithread - OpenMP

Por:   •  4/4/2016  •  Trabalho acadêmico  •  840 Palavras (4 Páginas)  •  640 Visualizações

Página 1 de 4

Trabalho 3

Números Mutuamente Amigos

Programação Concorrente

INE 5410

Giovanni Rotta

14103948

Este trabalho tem como objetivo  praticar ferramentas e métodos de sincronização de códigos, aplicando os conceitos visto em sala de aula, realizando dois programas usando técnicas diferentes, a fim de identificar a melhoria de desempenho que a programação paralela nos proporciona em alguns casos.

Para este trabalho usamos a linguagem C e para a solução paralela utilizamos o OpenMP.

O terceiro trabalho da disciplina de Programação Concorrente consiste em implementar uma solução sequencial e paralela para um programa capaz de identificar números mutuamente amigos em uma determinada faixa de números. Dois números a e b são mutuamente amigos se a razão entre a soma de todos os divisores do número a e o número a é igual a razão entre a soma de todos os divisores do número b e o número b.

A solução sequencial e paralela deverão encontrar todos os pares de números inteiros mutuamente amigos entre dois números escolhidos, máx e min.

Solução do Problema.

Primeiramente foi definida a função main, em seus parametros estão os argumentos usado na hora de executar o código, número max, número min e no caso da solução paralela, número de threads, todos estes atributos setam um variável global, utilizada na maioria das funções do código.

Nesta função além de setar as variaveis global, é criado um array bidimensional e também as funções de achar razão e compararVetores, ambas pedem o array para salvar e ler os dados manipulados.

[pic 1]

Resolvi começar achando a razão de cada número, com este valor em mãos eu poderia depois compara-los e achar quais são mutuamente amigos.
Porém para conseguir esta razão eu precisaria da soma dos divisores e também do número em si, então criei primeiramente uma função de achar a soma dos divisores.

A soma dos divisores de um número é  essencial para se achar números mutuamente amigos, números divisores de outro  são todos os números cujo a divisão pelo outro resulta em zero, e a soma destes números é usada para compor a razão a ser comparada, a fim de se achar os números mutuamente amigos.

Para isso foi cirado um metodo acharSoma, que contêm o parametro número, deste número é retirado e somado todos os seus divisores, esta função retorna o valor final da soma.

[pic 2]

.

Com este valor em mãos eu posso agora obter a razão esperada, porém como vou comparar os números que compõem a razão e não o resultado (pois pode existir o mesmo resultado para diferentes razões) preciso fazer o mdc dos números que compõem esta razão, desta maneira posso comparar as razões diretamente.

A função de MDC foi retirada do enunciado do trabalho, feito pelo professor.

[pic 3]

Já temos o suficiente para conseguir fazer a comparação, primeiramente salvaremos os dados recebidos em um array bidimensional sendo que o dividendo da razão será salvo na primeira coluna e o divisor na segunda.

Um loop é usado para percorrer os números dentro da faixa Max e Min escolhidas e salva-los no array.

[pic 4]

Com o array completo é possível agora compará-lo, e para isso fiz a função de compararVetores, cujo recebe o mesmo array, para poder averiguar os números mutuamente amigos.

[pic 5]

...

Baixar como (para membros premium)  txt (5.7 Kb)   pdf (460.8 Kb)   docx (269.4 Kb)  
Continuar por mais 3 páginas »
Disponível apenas no TrabalhosGratuitos.com