Flashsale Mua Sắm Trực Tuyến Giảm Giá

Giảm giá 42% dịch vụ Cloud Server cho anh em Vn-Zoom

Cài đặt thảo luận về Windows 10 ở Vn-Zoom
Khuyến Mại FlashSale

Vn-Zoom phiên bản beta

Kích hoạt Windows , Office miễn phí





Vn-Zoom Việt Nam Phiên bản Beta

  1. #1

    Default Help !!! Linked list in c++

    Exercise 1: Assume that a railway train has N railroad cars attached together such as: car1,car2,car3,...,carN.
    • Each car carries a number of passengers (int type) and has a name (char type). Both variables are user-defined values.
    • If there is any cars that don’t have any passengers, they should be removed from the train.
    • It is possible to add new cars into the train.
    • A function is available to display all cars’ information or the length of the train.
    1
    Implement a program in C using Linked List to manage the train and test all functions.

    Exercise 2: Suppose that a polynomial function a0 + a1x + a2x2 + ... + anxn Using Linked Lists, we would like to improve the computation of this function. The declaration of each node should be as following:
    • a value stands for a constant of each term ai (i = 0,..,n)
    • a degree indicates the degree of each term
    • a pointer points to the next term
    Implement and test the program in C using Linked List to manage this polynomial function:
    • add new terms, verify that the old term exists, if in the case, return the addition between the old and new ones i.e given the polynomial function a0x0 + a1x1, a new term is added into the function then the final term should be atotal 0 = anew 0 + a0
    • remove a term from the function
    • enter a value for x then calculate the whole function
    • display the whole function in the screen



  2. #2
    Tham gia
    Jan 2011
    Bài
    1.618
    Cảm ơn
    0
    Điểm
    645/542 bài viết

    Default

    buồn quá đào mộ chơi, box để lâu quá cũng nổi mốc hết trơn rồi, bài 1 nhiều cái còn mơ hồ quá nên tui làm bài 2, ở đây tui dùng kiểu integer hết
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <conio.h>
    
    typedef struct TERM
    {
    	int value;
    	int degree;
    } Term;
    
    typedef struct NODE
    {
    	struct TERM term;
    	struct NODE *next;
    } Node;
    
    các term được sắp xếp theo thứ tự degree tăng dần, thêm 1 term cũng giống
    như thêm 1 phần tử vào mảng đã được sắp xếp, ngoại trừ phải kiểm tra term
    trùng degree thôi
    int addTerm(struct NODE **first, struct TERM *t)
    {
    	if ((*first) == NULL)
    	{
    		(*first) = (struct NODE *)malloc(sizeof(struct NODE));
    		(*first)->term = *t;
    		(*first)->next = NULL;
    
    		return 1;
    	}
    
    	struct NODE *cur = (*first);
    	struct NODE *prev = NULL;
    
    	while (cur != NULL)
    	{
    		nếu trùng degree thì cứ cộng value, không cần add term mới
    		if (cur->term.degree == t->degree)
    		{
    			cur->term.value += t->value;
    			return 0;
    		}
    
    		if (cur->term.degree > t->degree)
    			break;
    
    		prev = cur;
    		cur = cur->next;
    	}
    
    	struct NODE *node = (struct NODE *)malloc(sizeof(struct NODE));
    	node->term = *t;
    	node->next = cur;
    	prev->next = node;
    
    	return 1;
    }
    
    khử term theo degree
    int removeTerm(struct NODE **first, int degree)
    {
    	if ((*first) == NULL)
    		return 0;
    
    	struct NODE *cur = (*first);
    	struct NODE *prev = NULL;
    
    	while (cur != NULL)
    	{
    		if (cur->term.degree == degree)
    		{
    			if (prev == NULL)
    			{
    				trường hợp term cần khử nằm ngay đầu danh sách
    				free(*first);
    				(*first) = NULL;
    				return 1;
    			}
    
    			prev->next = cur->next;
    			free(cur);
    			return 1;
    		}
    
    		prev = cur;
    		cur = cur->next;
    	}
    
    	return 0;
    }
    
    void displayFunction(struct NODE *first)
    {
    	if (first == NULL)
    	{
    		printf("0");
    		return;
    	}
    
    	if (first->term.value < 0)
    		printf("- ");
    	printf("%dx^%x", labs(first->term.value), first->term.degree);
    
    	struct NODE *cur = first->next;
    
    	while (cur != NULL)
    	{
    		if (cur->term.value > 0)
    			printf(" + ");
    		else if (cur->term.value < 0)
    			printf(" - ");
    
    		printf("%dx^%x", labs(cur->term.value), cur->term.degree);
    
    		cur = cur->next;
    	}
    
    	printf("\n");
    }
    
    long long calculateFunction(struct NODE *first, int x)
    {
    	if (first == NULL)
    		return 0;
    
    	long long potential = x;
    	int degree = 1;
    	long long s = 0;
    
    	struct NODE *cur = first;
    
    	while (cur != NULL)
    	{
    		if (cur->term.degree == 0)
    			s += cur->term.value;
    		else
    		{
    			tính x^n, dùng cách này thay cho hàm pow
    			while (degree < cur->term.degree)
    			{
    				potential *= x;
    				degree++;
    			}
    
    			s += cur->term.value * potential;
    		}
    
    		cur = cur->next;
    	}
    
    	return s;
    }
    
    xóa tấc cả term
    void resetFunction(struct NODE **first)
    {
    	struct NODE *cur;
    
    	while (*first != NULL)
    	{
    		cur = (*first);
    		(*first) = (*first)->next;
    		free(cur);
    	}
    }
    
    void main()
    {
    	struct NODE *first = NULL;
    	int c, l = 1;
    
    	while (l)
    	{
    		system("cls");
    		printf("f(x) = ");
    		displayFunction(first);
    
    		printf("\n\nChoose one option:\n");
    		printf("1. Add term\n");
    		printf("2. Remove term\n");
    		printf("3. Reset function\n");
    		printf("4. Calculate function\n");
    		printf("5. Exit\n");
    		printf("input: ");
    		fflush(stdin);
    		scanf("%d", &c);
    
    		switch (c)
    		{
    			case 1:
    			{
    				struct TERM t;
    				printf("Input terms, a negative degree will stop\n");
    				fflush(stdin);
    				while (1)
    				{
    					nhập giá trị degree < 0 để dừng
    					printf("degree: ");
    					scanf("%d", &t.degree);
    					if (t.degree < 0)
    						break;
    
    					giá trị value phải khác 0 thì mới add vô danh sách
    					printf("value: ");
    					scanf("%d", &t.value);
    					if (t.value != 0)
    						addTerm(&first, &t);
    				}
    
    				displayFunction(first);
    			}
    				break;
    
    			case 2:
    			{
    				int degree;
    				printf("\nInput degree of term to remove: \n");
    				fflush(stdin);
    				scanf("%d", &degree);
    
    				if (removeTerm(&first, degree) == 1)
    					printf("done\n");
    				else
    					printf("term with degree %d not exists\n", degree);
    			}
    				break;
    
    			case 3:
    				resetFunction(&first);
    				break;
    
    			case 4:
    			{
    				int x;
    				printf("input x: ");
    				fflush(stdin);
    				scanf("%d", &x);
    
    				printf("\nresult: %lli\n", calculateFunction(first, x));
    			}
    				break;
    
    			case 5:
    				l = 0;
    				break;
    		}
    
    		getch();
    	}
    
    	resetFunction(&first);
    }
    đã test bằng borland c và VS 2017





  3. Flashsale Mua Sắm Trực Tuyến Giảm Giá
  4. Khuyến Mại FlashSale

 

 


Flashsale Mua Sắm Trực Tuyến Giảm Giá
  • Khuyến Mại FlashSale

  • Tag của Đề tài này

    Quyền sử dụng

    • Bạn có thể gửi chủ đề mới
    • Bạn có thể gửi trả lời
    • Bạn không thể gửi file đính kèm
    • Bạn có thể tự sửa bài viết của mình
    •