diff --git a/ASD_Task_3.depend b/ASD_Task_3.depend index 831bfcc..502f3fc 100644 --- a/ASD_Task_3.depend +++ b/ASD_Task_3.depend @@ -52,3 +52,28 @@ "operation.h" "my_data.h" +1582295937 source:d:\asd task\asd_task_3\list.cpp + "list.h" + "my_data.h" + +1582297858 d:\asd task\asd_task_3\list.h + + "my_data.h" + +1582295937 d:\asd task\asd_task_3\my_data.h + + +1582297773 source:d:\asd task\asd_task_3\operation.cpp + "list.h" + "operation.h" + "my_data.h" + +1582291682 d:\asd task\asd_task_3\operation.h + "list.h" + +1582297961 source:d:\asd task\asd_task_3\main.cpp + + "list.h" + "operation.h" + "my_data.h" + diff --git a/bin/Debug/ASD_Task_3.exe b/bin/Debug/ASD_Task_3.exe new file mode 100644 index 0000000..b932530 Binary files /dev/null and b/bin/Debug/ASD_Task_3.exe differ diff --git a/list.cpp b/list.cpp index fe0655c..ae1dbec 100644 --- a/list.cpp +++ b/list.cpp @@ -5,11 +5,8 @@ void createList(List &L) { /** * FS : set first(L) and last(L) with Null */ - //-------------your code here------------- - your code here - - - //---------------------------------------- + first(L) = NULL; + last(L) = NULL; } address allocate(infotype x) { @@ -18,11 +15,14 @@ address allocate(infotype x) { */ address P; - //-------------your code here------------- - your code here - + P = new elmlist; + info(P).ID = x.ID; + info(P).name = x.name; + info(P).rank = x.rank; + info(P).score = x.score; + next(P) = NULL; + prev(P) = NULL; - //---------------------------------------- return P; } @@ -30,11 +30,7 @@ void deallocate(address &P) { /** * FS : delete element pointed by P */ - //-------------your code here------------- - your code here - - - //---------------------------------------- + delete P; } void insertFirst(List &L, address P) { @@ -42,11 +38,14 @@ void insertFirst(List &L, address P) { * IS : List L may be empty * FS : element pointed by P became the first element in List L */ - //-------------your code here------------- - your code here - - - //---------------------------------------- + if (first(L) != NULL){ + next(P) = first(L); + prev(first(L)) = P; + first(L) = P; + } else { + first(L) = P; + last(L) = P; + } } void insertLast(List &L, address P) { @@ -54,11 +53,9 @@ void insertLast(List &L, address P) { * IS : List L may be empty * FS : element pointed by P became the last element in List L */ - //-------------your code here------------- - your code here - - - //---------------------------------------- + next(last(L)) = P; + prev(P) = last(L); + last(L) = P; } address findElm(List L, infotype x) { @@ -69,11 +66,11 @@ address findElm(List L, infotype x) { */ address P; - //-------------your code here------------- - your code here + P = first(L); + while (P != NULL && info(P).ID != x.ID){ + P = next(P); + } - - //---------------------------------------- return P; } @@ -82,12 +79,17 @@ void deleteFirst(List &L, address &P) { * IS : List L may be empty * FS : first element in List L is removed and is pointed by P */ - //-------------your code here------------- - your code here - - - //---------------------------------------- + if(first(L) == last(L)){ + P = first(L); + first(L) = NULL; + last(L) = NULL; + } else if (first(L) != NULL){ + P = first(L); + first(L) = next(P); + next(P) = NULL; + prev(first(L)) = NULL; + } } void deleteLast(List &L, address &P) { @@ -95,12 +97,16 @@ void deleteLast(List &L, address &P) { * IS : List L may be empty * FS : last element in List L is removed and is pointed by P */ - //-------------your code here------------- - your code here - - - - //---------------------------------------- + if (last(L) != NULL){ + P = last(L); + last(L) = prev(P); + prev(P) = NULL; + next(last(L)) = NULL; + } else if (first(L) == last(L)){ + P = first(L); + first(L) = NULL; + last(L) = NULL; + } } void printInfo(List L) { @@ -108,11 +114,13 @@ void printInfo(List L) { * FS : view info of all element inside List L, * call the view_data function from my_data.h to print the info */ - //-------------your code here------------- - your code here - - //---------------------------------------- + address P = first(L); + while (P != NULL){ + view_data(info(P)); + P = next(P); + } + cout< * -* Type List : < -* first : address -* last : address +* Type List : < +* first : address +* last : address * > * **/ @@ -36,16 +36,14 @@ typedef mytype infotype; typedef struct elmlist *address; struct elmlist{ - //------------- your code here ----------- - - //---------------------------------------- + infotype info; + address next; + address prev; }; struct List{ - //------------- your code here ----------- - - - //---------------------------------------- + address first; + address last; }; diff --git a/main.cpp b/main.cpp index 9e0b483..e7d536e 100644 --- a/main.cpp +++ b/main.cpp @@ -51,10 +51,50 @@ void mainMenu() { case 1: X = create_data(); P = allocate(X); - insertFirst(L,P) + if (findElm(L, info(P)) == NULL) { + insertFirst(L, P); + } + break; + case 2: + printInfo(L); + break; + case 3: + cout << "Input ID: "; + cin >> X.ID; + P = findElm(L, X); + if (P != NULL) { + view_data(info(P)); + } else { + cout << "Not Found\n"; + } + break; + case 4: + cout << "Input ID: "; + cin >> X.ID; + P = findElm(L, X); + if (P != NULL) { + edit_data(info(P)); + } else { + cout << "Not Found\n"; + } + break; + case 5: + cout << "Input ID: "; + cin >> X.ID; + if (findElm(L, X) != NULL) { + deletebyID(L, X.ID); + } else { + cout << "Not Found" << endl; + } + break; + case 6: + savePassedMember(L, L_passed); + break; + case 7: + printInfo(L_passed); + break; + default: break; } } while(true); - - //---------------------------------------- } diff --git a/my_data.cpp b/my_data.cpp index 68b9d77..4504506 100644 --- a/my_data.cpp +++ b/my_data.cpp @@ -1,10 +1,10 @@ - + #include "my_data.h" /** - CLASS : - NAME : - STUDENT ID : + CLASS : IF-43-05 + NAME : Reyhan Fadhlurohman Arrafi + STUDENT ID : 1301190356 **/ mytype create_data() { @@ -13,14 +13,14 @@ mytype create_data() { and assign the value of new data */ mytype d; - // =========================== - // YOUR CODE HERE - your code here - - - - - // =========================== + cout<<"Input ID : "; + cin>>d.ID; + cout<<"Input Nama : "; + cin>>d.name; + cout<<"Input Ranking : "; + cin>>d.rank; + cout<<"Input Score : "; + cin>>d.score; return d; } @@ -30,14 +30,7 @@ void view_data(mytype d) { it will be called when print_info function is invoked */ - // =========================== - // YOUR CODE HERE - your code here - - - - - // =========================== + cout<>d.name; + cout<<"Input Pergantian Rank : "; + cin>>d.rank; + cout<<"Input Pergantian Score : "; + cin>>d.score; } diff --git a/my_data.h b/my_data.h index 2937b48..8ae7c86 100644 --- a/my_data.h +++ b/my_data.h @@ -5,9 +5,9 @@ using namespace std; /** - CLASS : - NAME : - STUDENT ID : + CLASS : IF-43-05 + NAME : Reyhan Fadhlurohman Arrafi + STUDENT ID : 1301190356 **/ struct mytype { @@ -18,17 +18,15 @@ struct mytype { - integer rank - float score */ - //================================================= - // YOUR CODE STARTS HERE - your code here - - // YOUR CODE ENDS HERE - //================================================= + int ID; + string name; + int rank; + float score; }; mytype create_data(); void view_data(mytype d); -void edit_data(mytype &d); +void edit_data(mytype &d); #endif // MY_DATA_H_INCLUDED diff --git a/obj/Debug/list.o b/obj/Debug/list.o new file mode 100644 index 0000000..7b7ebaa Binary files /dev/null and b/obj/Debug/list.o differ diff --git a/obj/Debug/main.o b/obj/Debug/main.o new file mode 100644 index 0000000..5343cd6 Binary files /dev/null and b/obj/Debug/main.o differ diff --git a/obj/Debug/my_data.o b/obj/Debug/my_data.o new file mode 100644 index 0000000..d138625 Binary files /dev/null and b/obj/Debug/my_data.o differ diff --git a/obj/Debug/operation.o b/obj/Debug/operation.o new file mode 100644 index 0000000..1d66d80 Binary files /dev/null and b/obj/Debug/operation.o differ diff --git a/operation.cpp b/operation.cpp index c2dc0b0..2c76534 100644 --- a/operation.cpp +++ b/operation.cpp @@ -1,7 +1,7 @@ #include "list.h" #include "operation.h" #include "my_data.h" - + void insertAndSort(List &L, infotype x) { /** @@ -13,11 +13,17 @@ void insertAndSort(List &L, infotype x) { * FS : elements in List L sorted by ID, P is inside List L */ - //-------------your code here------------- - your code here - - - //---------------------------------------- + address P,Q; + P = first(L); + if (P == NULL || info(P).ID > x.ID) { + insertFirst(L, allocate(x)); + } else if (findElm(L, x) == NULL) { + while (P != NULL && info(P).ID < x.ID) { + Q = P; + P = next(P); + } + insertAfter(L, Q, allocate(x)); + } } @@ -28,11 +34,17 @@ void deletebyID(List &L, int id_x) { */ address Prec, P; - //-------------your code here------------- - your code here - - - //---------------------------------------- + P = first(L); + if (P == first(L) && id_x == info(P).ID) { + deleteFirst(L, P); + } else { + while (P != NULL) { + if (id_x == info(P).ID && first(L) != last(L)) { + deleteAfter(L, prev(P), P); + } + P = next(P); + } + } } @@ -42,9 +54,20 @@ void savePassedMember(List &L, List &L2){ * FS : any element with score greater than 80 is moved to L2 */ address P; - //-------------your code here------------- - your code here - - - //---------------------------------------- + P = first(L); + address Q = P; + while (Q != NULL) { + P = Q; + if (info(P).score > 80) { + insertAndSort(L2, info(P)); + Q = next(Q); + if (prev(P) == NULL) { + deleteFirst(L, P); + } else { + deleteAfter(L, prev(P), P); + } + } else { + Q = next(Q); + } + } }