示例#1
0
// divide o vetor entre os dois filhos
void Node::divide_v1(vector<int>& numbers)
{
  //printf("%d vai dividir %lu números\n", rank, numbers.size());
  // calcula o rank do filho à esquerda
  const int left_rank  = rank * 2 + 1;
  // calcula o rank do filho à direita
  const int right_rank = rank * 2 + 2;

  vector<int> resto(numbers.begin() + conquer_at + 1, numbers.end());
  

  // printf("%d pegou %lu números para si e sobraram %lu\n", rank, meu.size(), resto.size());

  // calcula a posição da metade do vetor
  const size_t half_size = resto.size() / 2;

  // cria dois vetores com cada metade do vetor original
  vector<int> left(resto.begin(), resto.begin() + half_size);
  vector<int> right(resto.begin() + half_size, resto.end());

  // printf("%d vai enviar %lu números para %d e %lu para %d\n", rank, left.size(), left_rank, right.size(), right_rank);

  // envia os vetores para os nodos filhos
  sendToNode(left_rank, left);
  sendToNode(right_rank, right);

  // espera um retorno dos nodos filhos
  receiveFromNode(left_rank, left);
  receiveFromNode(right_rank, right);

  // mescla os retornos dos nodos filhos no vetor original
  mergeVectors(left, right, resto);
}
示例#2
0
int main()
{
     int a,b,c,r;
     printf("Ingrese numero A ");
     scanf("%d",&a);
     printf("Ingrese numero B ");
     scanf("%d",&b);
     
     r = resto(a,b);
     c = cuociente(a,b);
     printf("%d : %d ==> Cuociente %d y resto %d\n",a,b,c,r);     
}
void cola :: desencolar (){
	resto();
}