Ir ao conteúdo
  • Cadastre-se

Felippe Melo

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Reputação

2
  1. Olá Flávio, obrigado pela ajuda! Fiz as alterações que você comentou e realmente o erro não aparece mais. Só que agora estou com outro erro aparecendo no meu servidor, você sabe me dizer o que pode ser?
  2. Boa noite, Estou com dificuldade de realizar este exercício da linguagem C utilizando a biblioteca MPI. Preciso criar um programa para calcular a tangente do ângulo passado como parâmetro na execução do programa e testar com 4 e 8 processadores. O objetivo desta aplicação é utilizar as séries de Taylor para o cálculo do seno e do cosseno de um determinado ângulo, com o intuito de calcular a tangente deste ângulo. Esse é o formulário: Fórmula para o cálculo do seno é usada a fórmula infinita: Sen x = x1 – x3 + x5 – x7 + x9 – x11 + … 1! 3! 5! 7! 9! 11! (! = fatorial) Fórmula para o cálculo do cosseno é usada a fórmula infinita: Cos x = x0 – x2 + x4 – x6 + x8 – x10 + … 0! 2! 4! 6! 8! 10! Fórmula para o cálculo da tangente é usada a fórmula: Tan x = sen x cos x Desenvolvi este código para a solução do problema: #include "mpi.h" #include <stdio.h> #include <math.h> #include <stdlib.h> long fat(int num){ if(num == 0 || num ==1) return 1; else return num * fat(num-1); } int main( int argc, char *argv[]){ double ang_aux, graus, min, seg, ang, sen, cos, tg, tempoInicial, tempoFinal, soma_sen, soma_cos, PI=3.14; int n, myid, numprocesso, i; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocesso); MPI_Comm_rank(MPI_COMM_WORLD,&myid); if(myid==0){ printf("Cálculo das funções trigonométricas através do polinômio de Taylor de forma paralela \n"); graus = atoi(argv[1]); min = atoi(argv[2]); seg = atoi(argv[3]); n = atoi(argv[4]); ang_aux = (double) (graus + (min / 60.0) + (seg / 3600.0)); ang = (ang_aux * PI) / (180.0); printf("\nN=%d",n); printf("\nGraus: %.0lf Minutos: %.0lf Segundos: %.0lf", graus, min, seg); tempoInicial = MPI_Wtime(); } MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&ang, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); for (i = myid; i < n; i += numprocesso){ cos += (double) (pow(-1, i) * pow(ang, 2 * i)) / fat(2 * i) ; sen += (double) (pow(-1, i) * pow(ang, 2 * i + 1)) / fat(2 * i + 1); } MPI_Reduce(&sen, &soma_sen, 1, MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD); MPI_Reduce(&cos, &soma_cos, 1, MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD); tg = (soma_sen / soma_cos); if (myid == 0) { printf("\nSeno de %.1lf %.1lf %.1lf em %d iteracoes = %1.15lf\n\n", graus, min, seg, n, soma_sen); printf("Cosseno de %.1lf %.1lf %.1lf em %d iteracoes = %1.15lf\n\n", graus, min, seg, n, soma_cos); printf("Tangente de %.1lf %.1lf %.1lf em %d iteracoes = %1.15lf\n\n", graus, min, seg, n, tg); tempoFinal = MPI_Wtime(); printf("\nTempo inicial: %.5lf\n", fabs(tempoInicial)); printf("\nTempo final: %.5lf\n", fabs(tempoFinal)); printf("\nTempo decorrido: %.5lf\n", fabs(tempoFinal - tempoInicial)); } MPI_Finalize(); return 0; } O problema é que na hora da execução do programa no simulador na máquina virtual, eu recebo um erro, e não consigo executar o processo. Já tentei mudar várias coisas no código, mas este erro sempre persiste.
  3. @devair1010 Obrigado pela resposta. olhei a sua anotação e consegui entender onde estava errado no meu código. Valeu! @Flávio Pedroza Obrigado pela resposta!
  4. Olá, estou com uma dúvida nesta questão que necessita da utilização de struct. A minha dúvida é como juntar as duas estruturas e compara-las para que seja imprimido o nome e sobrenome junto com a nota. Outra dúvida é o meu ciclo for que não é inicializado. Escreva um programa que preencha, a partir do teclado, duas estruturas distintas do tipo vetor com os nomes e as notas (as notas têm de estar contidas no intervalo 0 ≤ nota ≤ 10) dos alunos, respectivamente, de uma turma de 100 alunos. Após, exteriorize somente os nomes dos alunos que obtiveram notas iguais ou maiores que 5 (cinco). #include <stdio.h> struct nome { char nome; char sobrenome; }; struct nota{ int nota; }; int main(void){ int i,j,h; struct nome aluno[2]; struct nota boletim[2]; for (i = 0; i < 2; ++i){ printf("Digite o nome do Aluno\n"); scanf("%s%s", &aluno[i].nome, &aluno[i].sobrenome); printf("Digite a nota do Aluno\n"); scanf("%i", &boletim[i].nota); } for (i = 0; i < 2; ++i){ if (boletim[i].nota >= 2){ printf("O Aluno %s %s tem foi aprovado com nota %i", aluno[i].nome, aluno[i].sobrenome, boletim[i].nota); } } system("pause"); return 0; }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...