/*Desenvolver um programa em OpenMP que popule aleatoriamente um vetor de 10.000 registros de números
inteiros, de maneira paralela. Após, paralelamente, crie através de sections três regiões (uma para cada
thread) para: a) efetuar a soma de todos os elementos do vetor; b) encontrar o maior valor do vetor e sua
respectiva posição de armazenamento; c) contar a quantidade de números múltiplos de 7 armazenados no
vetor.*/
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
int main() {
int i, j, k;
//int soma, maior, multiplos7, posicao;
int **V, **soma, **maior, **multiplos7;
tamanho = 10;
//Aloca o vetor
V = malloc(tamanho*sizeof(int *));
soma = malloc(linhas*sizeof(int *));
maior = malloc(linhas*sizeof(int *));
multiplos7 = malloc(linhas*sizeof(int *));
//Região paralela que atribui valores as matrizes A e B
#pragma omp parallel shared(V, i, tamanho)
{
#pragma omp for
for (i = 0; i < tamanho; i++) {
V[i] = i+1;
}
}
#pragma omp parallel shared(V, tamanho, soma, maior, posicao, multiplos7) private (i, j, k)
{
#pragma omp sections
{
//1ª região com section
#pragma omp section
{
for (int i = 0; i<tamanho; i++){
soma = soma + V[i];
}
printf("soma: %i\n", soma);
}
//2ª região com section
#pragma omp section
{
int maior = v[0];
for (int j = 0; j< tamanho; j++){
if (maior > v[j]){
maior = v[j];
posicao = j;
}
}
printf("maior: %i\n", maior);
printf("posicao do maior: %i\n", posicao);
}
//3ª região com section
#pragma omp section
{
multiplos7 = 0;
for (int k = 0; k< tamanho; k++){
if (v[k]%7==0){
multiplos7 = multiplos7 + 1;
}
}
printf("Quantidade de multiplos de 7: %i\n", multiplos7);
}
}
}
//desaloca
free(V);
free(soma);
free(maior);
free(multiplos7);
return(0);
}