void addPoly(ListHead * A, ListHead * B, ListHead * C) { ListNode * pA = A -> head; ListNode * pB = B -> head; ListNode * pC = C -> head; //C 선형 리스트의 노드들을 가리키기위한 포인터 변수 선언; ListHead * temp; // 임시로 입력받을 선형리스트를 만들기위한 포인터 변수 선언; ListNode * pT; //임시로 입력받을 선형리스트의 노드들의 주소값을 받기 위한 포인터 변수; float mul; //밑을 곱한값을 저장하기위한 변수 float sum; int exMul; //곱을 할경우 지수가 더해지므로 저장하기위한 변수 for( ; pB != NULL; pB = pB -> link) // 리스트 B의 노드들을 리스트 A에 하나씩 곱해주기 위한 반복문 { temp = createLinkedList(); // 리스트 temp를 생성 pT = temp -> head; //포인터 변수 pT에 리스트 temp의 헤드노드의 주소값 저장 pA = A -> head; //리스트 A의 처음노드부터 다시 계산해야 하므로 head노드의 주소값으로 다시 초기화 해준다. while(pA && pB) { mul = pA -> coef * pB -> coef; // 밑을 곱해준다 exMul = pA -> expo + pB -> expo; // 지수를 더해준다 addLastNode(temp, mul, exMul); //리스트 temp에 밑과 지수를 넣어준다 pA = pA -> link; //리스트 A 에서 다음노드로 이동 } pT = temp -> head; //리스트 temp 의 처음노드부터 다시 연산하기위해 초기화 pC = C -> head; //리스트 C의 처음노드부터 다시 연산하기위해 초기화 while(pC && pT){ if(pC -> expo == pT->expo){ //리스트 C와 리스트 temp의 지수가 같으면 리스트 C의 현재 가리키고있는 노드에 다항식의 계산을 대입 sum = pC->coef + pT->coef; pC->coef = sum; pC->expo = pC->expo; pC = pC -> link; pT = pT->link; } else if(pC -> expo > pT -> expo){ //리스트 C의 지수가 더 크면 다음 노드로 이동 pC = pC->link; } else { //리스트 temp의 지수가 더크면 리스트 C에 새로운 노드를 추가하여 다항식 추가 addLastNode(C, pT->coef, pT->expo); pT=pT->link; } } for(; pC != NULL; pC = pC->link) addLastNode(C, pC->coef, pC->expo); for(; pT != NULL; pT = pT->link) addLastNode(C, pT->coef, pT->expo); free(temp); //임시적으로 사용하는 리스트 temp를 메모리에서 해제한다. } }
int main (void) { puts("\n 작성자 : 201121403 한대호"); ListHead *A, *B, *C; A = createLinkedList(); B = createLinkedList(); C = createLinkedList(); addLastNode(A, 4,3); addLastNode(A, 3,2); addLastNode(A, 5,1); printf("\n A(x) = "); printPoly(A); addLastNode(B, 3,4); addLastNode(B, 1,3); addLastNode(B, 2,1); addLastNode(B, 1,0); printf("\n B(x) = "); printPoly(B); addPoly(A, B, C); printf("\n C(x) = "); printPoly(C); getchar(); return 0; }
int main() { /***********************************OPENING OF THE FILES *********************************************************/ FILE *f; FILE *g; f=fopen("input.dat","r"); if (f==0) printf("error1"); g=fopen("output.dat","w"); if (g==0) printf("error2"); /**********************************CREATING THE LIST FOR THE SENTINELS*******************************************/ int N; fscanf(f,"%d",&N); int i; for (i=0;i<N;i++) { int data; fscanf(f,"%d",&data); addLastSentinel(data); } /***************************************************************************************************************** ***********************************READING THE REST OF THE DATA FROM THE FILE************************************/ int M; fscanf(f,"%d",&M); fscanf(f,"\n"); for (i=0;i<M;i++)//going on every line till the end of the file { char *line=(char*)malloc(1024*sizeof(char)); fgets(line,1024,f); char * tok; tok = strtok (line," "); char*s=(char*)malloc(20*sizeof(char)); strcpy(s,tok); ///INTRODUCING THE NAME OF THE COUNTRY IN THE LIST addLastHeader(s); ///INTRODUCING THE WAVES tok = strtok(NULL," "); while (tok != NULL) { int data; sscanf(tok,"%d",&data); addLifePoints(&headerTail,data); addLastNode(&(headerTail->head),&(headerTail->tail),data); tok = strtok (NULL, " "); } memset(line,0,1024); } /*************** PUTTING JIM-KONG nu AT THE END OF THE LIST OF SENTINELS **************************************/ addLastSentinel(1); /****************** COMPUTING THE STRONGEST AND WEAKEST COUNTRIES ************* WORKS!!!!! ********************/ char *strongest=(char*)malloc(20*sizeof(char)); char *weakest=(char*)malloc(20*sizeof(char)); strongest=strongestCountry(); weakest=weakestCountry(); /****************** COMPUTE IF ANY COUNTRY COULD HAVE DEFEATED THE TYRANT BY ITSELF. IF NOT, HOW MUCH AT MOST**/ int nrOfKilledSentinels, pointsLeft; int ok=mostSentinelsKilled(strongest,&nrOfKilledSentinels,&pointsLeft); /****************** SIMULATION OF THE WAR. OUTPUT: WAS THE TYRANT KILLED? IF SO, BY WHOM?*********************/ char *lastCountry=(char*)malloc(20*sizeof(char)); if (simulatingTheWar(&lastCountry)==0) { fprintf(g,"The tyrant was not killed\nTherefore, no country had the hitting blow!"); } else { fprintf(g,"The tyrant was killed!\n"); fprintf(g,"The last hit was done by: %s\n",lastCountry); } /****************** PRINTING THE REMAINING RESULTS (COMPUTED EARLIER AS IN THE WAR SIMULATION THE DATA WAS DESTROYED)*/ fprintf(g,"The strongest country was: %s\nThe weakest country was: %s\n",strongest,weakest); if (ok==1) { fprintf(g,"%s could have defeated all the sentinels by itself\n",strongest); } else { fprintf(g,"No country could have defeated all the sentinels.\n%s could have brought down the first %d sentinels and would have had chipped off %d life points from sentinel %d.\n",strongest,nrOfKilledSentinels,pointsLeft,nrOfKilledSentinels+1); } return 0; }