-
Notifications
You must be signed in to change notification settings - Fork 0
/
Matroid.c
139 lines (116 loc) · 3.61 KB
/
Matroid.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "Matroid.h"
bool isPair(int pCurrentElement){
return pCurrentElement % 2 == 0;
}
void functionIsPair(Matroid pMatroid[], int matroidQuantity){
#pragma omp parallel for
for(int currentMatroid = 0; currentMatroid < matroidQuantity; currentMatroid++){
int length = (int)( sizeof(pMatroid[currentMatroid].setS) / sizeof(pMatroid[currentMatroid].setS[0]) );
int pairQuantity = 0;
#pragma omp parallel for
for(int currentNumber = 0; currentNumber < length; currentNumber++){
int number = pMatroid[currentMatroid].setS[currentNumber];
if(isPair(number)){
pMatroid[currentMatroid].setI[pairQuantity++] = number;
printf("%d ",number);
}
}
printf("\n");
}
printf("FIN PAR \n");
}
bool isOdd(int pCurrentElement){
return pCurrentElement % 2 == 1;
}
void functionIsOdd(Matroid pMatroid[], int matroidQuantity){
#pragma omp parallel for
for(int currentMatroid=0; currentMatroid < matroidQuantity; currentMatroid++){
int length = (int)( sizeof(pMatroid->setS) / sizeof(pMatroid->setS[0]) );
int oddQuantity = 0;
#pragma omp parallel for
for(int currentNumber = 0; currentNumber < length; currentNumber++){
int number = pMatroid[currentMatroid].setS[currentNumber];
if(isOdd(number)){
pMatroid[currentMatroid].setI[oddQuantity++] = number;
printf("%d ",number);
}
}
printf("\n");
}
printf("FIN Impar \n");
}
bool isBig(int pCurrentElement){
return pCurrentElement > 100;
}
void functionBig(Matroid *pMatroid[], int matroidQuantity){
#pragma omp parallel for
for(int currentMatroid=0; currentMatroid < matroidQuantity; currentMatroid++){
int length = (int)( sizeof(pMatroid[currentMatroid]->setS) / sizeof(pMatroid[currentMatroid]->setS[0]) );
int bigQuantity = 0;
#pragma omp parallel for
for(int currentNumber = 0; currentNumber < length; currentNumber++){
int number = pMatroid[currentMatroid]->setS[currentNumber];
if(isBig(number)){
pMatroid[currentMatroid]->setI[bigQuantity++] = number;
printf("%d ",number);
}
}
printf("\n");
}
printf("FIN Mayor \n");
}
int* interseccion(int numeros1[], int numeros2[]) {
int lengthNumeros1 = (int)( sizeof(&numeros1) / sizeof(&numeros1[0]) );
int lengthNumeros2 = (int)( sizeof(&numeros2) / sizeof(&numeros2[0]) );
int max = lengthNumeros1;
if(lengthNumeros2 > max){
max = lengthNumeros2;
}
//printf("Max: %i \n", max);
int interAux[max];
int index = 0;
#pragma omp parallel for
for(int i=0; i < lengthNumeros1; i++){
for(int j=0; j < lengthNumeros2; j++){
if(numeros1[i] == numeros2[j]){
interAux[index++] = numeros1[i];
}
}
}
if(index==0){
int *j = numeros1;
return j;
}
int interseccion[index];
for(int u=0; u < index; u++){
interseccion[u] = interAux[u];
}
int *i = interseccion;
return i;
}
int interseccionQ(int numeros1[], int numeros2[]) {
int lengthNumeros1 = (int)( sizeof(&numeros1) / sizeof(&numeros1[0]) );
int lengthNumeros2 = (int)( sizeof(&numeros2) / sizeof(&numeros2[0]) );
int max= lengthNumeros1 ^ ((lengthNumeros1 ^ lengthNumeros2) & -(lengthNumeros1 < lengthNumeros2));
int interAux[max];
int index = 0;
#pragma omp parallel for
for(int i=0; i < lengthNumeros1; i++){
for(int j=0; j < lengthNumeros2; j++){
if(numeros1[i] == numeros2[j]){
interAux[index++] = numeros1[i];
}
}
}
return index-1;
}
void calculateIntersection(Matroid *pMatroid[], int matroidQuantity){
int setsI[matroidQuantity][10];
int *intersection = pMatroid[0]->setI;
for(int index=0; index<matroidQuantity; index++){
intersection = interseccion(intersection, pMatroid[index]->setI);
}
for(int i=0; i<1; i++){
printf("%i \n",intersection[i]);
}
}