Example #1
0
File: 5.c Project: Daehoho/study
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를 메모리에서 해제한다.
	}
}
Example #2
0
File: 5.c Project: Daehoho/study
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;
}
Example #3
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;
}