Você está na página 1de 11

#include <stdio.

h>
#define MAX_NUMBER_OF_LINES 257
#define MAXIMUM_LENGTH 50
FILE *input;
FILE *output;
int read_blood_type (char sequence[]);
int read_blood_type3 (char sequence[]);
int main(){
int n1, n2, n3, i;
char q, r, s, seq4[4],d, e, f, seq5[4], seq1[MAXIMUM_LENGTH],
seq2[MAXIMUM_LENGTH], seq3[MAXIMUM_LENGTH], a, b, c;
if((input = fopen("bloodtype.dat", "r")) == NULL){
printf("Error: cannot read the file bloodtype.dat\n");
return 1;
}
if((output = fopen("bloodtype.out", "w")) == NULL){
printf("Error: cannot write to file bloodtype.out\n");
return 1;
}
for(i = 0; i < MAX_NUMBER_OF_LINES ; i++){
n1 = read_blood_type(seq1);
a = seq1[n1 - 1];
n2 = read_blood_type(seq2);
// printf("length of seq2 should be %d\n", n);
b = seq2[n2 - 1];
n3 = read_blood_type3(seq3);
// printf("length of seq3 should be %d\n", n);
c = seq3[n3 - 1];

if(a == 'E' && b == 'N' && c == 'D'){


// printf("end sequence initiated\n");
return 1;
}
fprintf(output,"Case %d: ", i + 1);

if(a != 'E'){
if(seq1[n1 - 3] != 'A'){
q = seq1[n1 - 2];
r = seq1[n1 - 1];
s = ' ';
seq4[0] = q;
seq4[1] = r;
seq4[2] = s;
// printf("%s ", seq4);

}
else {// if( seq1[n1 - 3] == 'A'){
q = seq1[n1 - 3];
r = seq1[n1 - 2];
s = seq1[n1 - 1];
seq4[0] = q;
seq4[1] = r;
seq4[2] = s;
// printf("%s ", seq4);
}
}
if(c == '?'){ //find child
if(seq2[n2 - 3] != 'A'){
d = seq2[n2 - 2];
e = seq2[n2 - 1];
f = ' ';
seq5[0] = d;
seq5[1] = e;
seq5[2] = f;
// printf("%s ", seq5);
if(seq1[n1 - 2] == 'A'){
if(seq2[n2 - 2] == 'A' || seq2[n2 - 2] == 'O'){
if(seq2[n2 - 2] == 'A' || seq2[n2 - 2] == 'O'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] ==
'-'){
fprintf(output, "%s %s {A-, O-}\n",
seq4, seq5);}
else{
fprintf(output, "%s %s {A+, A-, O+,
O-}\n", seq4, seq5);
}
}
}
}
if(seq1[n1 - 2] == 'A' && seq2[n2 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {A-, B-, O-, AB-}\n",
seq4, seq5);}
else{
fprintf(output, "%s %s {A+, A-,B+, B-, O+, O-,
AB+, AB-}\n", seq4, seq5);
}
}
if(seq1[n1 - 3] != 'A' && seq1[n1 - 2] == 'B' &&
seq2[n2 - 2] == 'A'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {A-, B-, O-, AB-}\n",
seq4, seq5);}
else{
fprintf(output, "%s %s {A+, A-,B+, B-, O+, O-,
AB+, AB-}\n", seq4, seq5);
}
}
if(seq1[n1 - 3] != 'A' && seq1[n1 - 2] == 'B' &&
seq2[n2 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {B-, O-}\n", seq4, seq5);}
else{
fprintf(output, "%s %s {B+, B-, O+, O-}\n",
seq4, seq5);
}
}
if(seq1[n1 - 3] != 'A' && seq1[n1 - 2] == 'B' &&
seq2[n2 - 2] == 'O'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {B-, O-}\n", seq4, seq5);}
else{
fprintf(output, "%s %s {B+, B-, O+, O-}\n",
seq4, seq5);
}
}

if(seq1[n1 - 2] == 'O' && seq2[n2 - 2] == 'A'){


if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {A-, O-}\n", seq4, seq5);}
else{
fprintf(output, "%s %s {A+, A-, O+, O-}\n",
seq4, seq5);
}
}
if(seq1[n1 - 2] == 'O' && seq2[n2 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {B-, O-}\n", seq4, seq5);}
else{
fprintf(output, "%s %s {B+, B-, O+, O-}\n",
seq4, seq5);
}
}
if(seq1[n1 - 2] == 'O' && seq2[n2 - 2] == 'O'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {O-}\n", seq4, seq5);}
else{
fprintf(output, "%s %s {O+, O-}\n", seq4, seq5);
}
}
if(seq1[n1 - 3] == 'A' && seq1[n1 - 2] == 'B' &&
seq2[n2 - 2] == 'A'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {A-, B-, AB-}\n", seq4,
seq5);}
else{
fprintf(output, "%s %s {A+, A-, B+, B-, AB+,
AB-}\n", seq4, seq5);
}
}
if(seq1[n1 - 3] == 'A' && seq1[n1 - 2] == 'B' &&
seq2[n2 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {A-, B-, AB-}\n", seq4,
seq5);}
else{
fprintf(output, "%s %s {A+, A-, B+, B-, AB+,
AB-}\n", seq4, seq5);
}
}

if(seq1[n1 - 3] == 'A' && seq1[n1 - 2] == 'B' &&


seq2[n2 - 2] == 'O'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {A-, B-}\n", seq4, seq5);}
else{
fprintf(output, "%s %s {A+, A-, B+, B-}\n",
seq4, seq5);
}
}

}
else{// if( seq2[n2 - 3] == 'A'){
d = seq2[n2 - 3];
e = seq2[n2 - 2];
f = seq2[n2 - 1];
seq5[0] = d;
seq5[1] = e;
seq5[2] = f;
// printf("%s ", seq5);
if(seq1[n1 - 2] == 'A' && seq2[n2 - 3] == 'A' &&
seq2[n2 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {A-, B-, AB-}\n", seq4,
seq5);}
else{
fprintf(output, "%s %s {A+, A-,B+, B-, AB+,
AB-}\n", seq4, seq5);
}
}
if(seq1[n1 - 2] == 'B' && seq1[n1 - 3] != 'A' &&
seq2[n2 - 3] == 'A' && seq2[n2 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {A-, B-, AB-}\n", seq4,
seq5);}
else{
fprintf(output, "%s %s {A+, A-,B+, B-, AB+,
AB-}\n", seq4, seq5);
}
}
if(seq1[n1 - 2] == 'O' && seq2[n2 - 3] == 'A' &&
seq2[n2 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {A-, B-}\n", seq4, seq5);}
else{
fprintf(output, "%s %s {A+, A-,B+, B-}\n",
seq4, seq5);
}
}
if(seq1[n1 - 2] == 'B' && seq1[n1 - 3] == 'A' &&
seq2[n2 - 3] == 'A' && seq2[n2 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq2[n2 - 1] == '-'){
fprintf(output, "%s %s {A-, B-, AB-}\n", seq4,
seq5);}
else{
fprintf(output, "%s %s {A+, A-,B+, B-, AB+,
AB-}\n", seq4, seq5);
}
}

}// end of find child if statement

if(b == '?'){//find parent


// printf("%s ", seq6);

if(seq1[n1 - 2] == 'A' && seq3[n3 - 2] == 'A'){


if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, B+, O+, AB+}
A+\n", seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-, AB+, AB-} A+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-, AB+, AB-} A-\n", seq4);
}
}
}

if(seq1[n1 - 2] == 'A' && seq3[n3 - 3] != 'A' &&


seq3[n3 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {B+, AB+} B+\n", seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {B+, B-, AB+, AB-}
B+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {B+, B-, AB+, AB-}
B-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'A' && seq3[n3 - 2] == 'O'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, B+, O+} O+\n",
seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-} O+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-} O-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'A' && seq3[n3 - 3] == 'A' &&
seq3[n3 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {B+, AB+} AB+\n", seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {B+, B-, AB+, AB-}
AB+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {B+, B-, AB+, AB-}
AB-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'B' && seq1[n1 - 3] != 'A' &&
seq3[n3 - 2] == 'A'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, AB+} A+\n", seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, AB+, AB-}
A+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, AB+, AB-}
A-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'B' && seq1[n1 - 3] != 'A' &&
seq3[n3 - 2] == 'B' && seq3[n3 - 3] != 'A'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, B+, O+, AB+}
B+\n", seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-, AB+, AB-} B+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-, AB+, AB-} B-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'B' && seq1[n1 - 3] != 'A' &&
seq3[n3 - 2] == 'O'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, B+, O+} O+\n",
seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-} O+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-} O-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'B' && seq1[n1 - 3] != 'A' &&
seq3[n3 - 2] == 'B' && seq3[n3 - 3] == 'A'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, AB+} AB+\n", seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, AB+, AB-}
AB+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, AB+, AB-}
AB-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'B' && seq1[n1 - 3] == 'A' &&
seq3[n3 - 2] == 'B' && seq3[n3 - 3] == 'A'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, B+, AB+} AB+\n",
seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, B+, B-,
AB+, AB-} AB+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, B+, B-,
AB+, AB-} AB-\n", seq4);
}
}
}

if(seq1[n1 - 2] == 'B' && seq1[n1 - 3] == 'A' &&


seq3[n3 - 2] == 'B' && seq3[n3 - 3] != 'A'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, B+, O+, AB+}
B+\n", seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, O+, O-,
B+, B-, AB+, AB-} B+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-, AB+, AB-} B-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'B' && seq1[n1 - 3] == 'A' &&
seq3[n3 - 2] == 'A'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, B+, O+, AB+}
A+\n", seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, O+, O-,
B+, B-, AB+, AB-} A+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-, AB+, AB-} A-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'B' && seq1[n1 - 3] == 'A' &&
seq3[n3 - 2] == 'O'){
fprintf(output, "%s IMPOSSIBLE O+\n", seq4);
}
if(seq1[n1 - 2] == 'O' && seq3[n3 - 3] == 'A' &&
seq3[n3 - 2] == 'B'){
fprintf(output, "%s IMPOSSIBLE AB+\n", seq4);
}
if(seq1[n1 - 2] == 'O' && seq3[n3 - 3] != 'A' &&
seq3[n3 - 2] == 'B'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {B+, AB+} B+\n", seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {B+, B-, AB+, AB-}
B+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {B+, B-, AB+, AB-}
B-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'O' && seq3[n3 - 2] == 'A'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, AB+} A+\n", seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, AB+, AB-}
A+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, AB+, AB-}
A-\n", seq4);
}
}
}
if(seq1[n1 - 2] == 'O' && seq3[n3 - 2] == 'O'){
if(seq1[n1 - 1] == '-' && seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, B+, O+} O+\n",
seq4);}
else{
if(seq3[n3 - 1] == '+'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-} O+\n", seq4);
}
if(seq3[n3 - 1] == '-'){
fprintf(output, "%s {A+, A-, B+, B-,
O+, O-} O-\n", seq4);
}
}
}
}
//printf("seq1 is %s, seq2 is %s, seq3 is %s\n", seq1,
seq2, seq3);
///////// if(a != 'E'){
//// if(seq1[n1 - 3] == 'A'){
//// printf("%c%c%c ", seq1[n1 - 3],
seq1[n1 - 2], seq1[n1 - 1]);
//// }
///// else{ printf("%c%c ", seq1[n1 - 2], a);
//// }
////// }
/* printf("seq4 is %s ", seq4);
printf("seq5 is %s ", seq5);
printf("seq6 is %s \n", seq6);
// printf("a is %c, b is %c, c is %c\n", a, b, c);
printf("seq6[0] is %c ", seq6[0]);
printf("seq6[1] is %c ", seq6[1]);
printf("seq6[2] is %c ", seq6[2]);
printf("seq6[3] is %c \n\n", seq6[3]);*/
}//end of the for loop
// i = 1;
// while(print_line(sequence, i) != x){
// i = i + 1;
// }
// for( i = 0; i < 4; i++){
//// print_line(sequence, i);
//// print_line(sequence, i);
//// print_line(sequence, i);
//// print_line(sequence, i);
fclose(input);
fclose(output);
return 0;
}

int read_blood_type (char sequence[]){


int i = 0, n;
do fscanf(input, "%c", &sequence[i]);
while(sequence[i++] != ' ');
n = i - 1;
return n;
}
int read_blood_type3 (char sequence[]){
int i = 0, n;
do fscanf(input, "%c", &sequence[i]);
while(sequence[i++] != '\n');
n = i - 1;
return n;
}

Você também pode gostar