// 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); }
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(); }