diff --git a/ASD_Task_4.cbp b/ASD_Task_4.cbp index 4951420..4c18bb7 100644 --- a/ASD_Task_4.cbp +++ b/ASD_Task_4.cbp @@ -35,6 +35,9 @@ + + + diff --git a/ASD_Task_4.depend b/ASD_Task_4.depend index a544662..05618d0 100644 --- a/ASD_Task_4.depend +++ b/ASD_Task_4.depend @@ -19,3 +19,23 @@ "player.h" +1583590871 source:c:\users\asus\documents\github\asd_task_4\main.cpp + "player.h" + "list.h" + + +1583490921 c:\users\asus\documents\github\asd_task_4\player.h + "list.h" + +1583590871 c:\users\asus\documents\github\asd_task_4\list.h + + + + +1583591031 source:c:\users\asus\documents\github\asd_task_4\player.cpp + "player.h" + + +1583581414 source:c:\users\asus\documents\github\asd_task_4\list.cpp + "list.h" + diff --git a/ASD_Task_4.layout b/ASD_Task_4.layout index 5ec49e7..ba99d9e 100644 --- a/ASD_Task_4.layout +++ b/ASD_Task_4.layout @@ -2,29 +2,29 @@ - + - + - + - + - + - + - + - + - + - + diff --git a/bin/Debug/ASD_Task_4.exe b/bin/Debug/ASD_Task_4.exe new file mode 100644 index 0000000..4b0ed98 Binary files /dev/null and b/bin/Debug/ASD_Task_4.exe differ diff --git a/list.cpp b/list.cpp index 847a957..4e37612 100644 --- a/list.cpp +++ b/list.cpp @@ -4,9 +4,7 @@ void createList(List &L) { /** * FS : first(L) diset Nil */ - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + first(L)=NULL; } address allocate(infotype x) { @@ -16,9 +14,10 @@ address allocate(infotype x) { */ address P = NULL; - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + P= new elmlist; + info(P)=x; + next(P)=NULL; + prev(P)=NULL; return P; } @@ -26,9 +25,7 @@ void deallocate(address &P) { /** * FS : menghapus elemen yang ditunjuk oleh P (delete) */ - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + delete P; } void insertFirst(List &L, address P) { @@ -36,9 +33,17 @@ void insertFirst(List &L, address P) { * IS : List L mungkin kosong * FS : elemen yang ditunjuk P menjadi elemen pertama pada List L */ - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + if (first(L)==NULL){ + first(L)=P; + next(P)=P; + prev(P)=P; + }else{ + next(P)=first(L); + prev(P)=prev(first(L)); + next(prev(first(L)))=P; + prev(first(L))=P; + first(L)=P; + } } void insertLast(List &L, address P) { @@ -46,9 +51,14 @@ void insertLast(List &L, address P) { * IS : List L mungkin kosong * FS : elemen yang ditunjuk P menjadi elemen terakhir pada List L */ - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + if (first(L)==NULL){ + insertFirst(L, P); + }else{ + next(P)=first(L); + prev(P)=prev(first(L)); + next(prev(first(L)))=P; + prev(first(L))=P; + } } address findElmByID(List L, infotype x) { @@ -59,9 +69,13 @@ address findElmByID(List L, infotype x) { */ address P = NULL; - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + P = first(L); + do { + P=next(P); + }while(P!=first(L) && info(P).ID != x.ID); + if (P==first(L) && info(P).ID != x.ID){ + return NULL; + } return P; } @@ -73,9 +87,13 @@ address findElmByName(List L, infotype x) { */ address P = NULL; - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + P = first(L); + do { + P=next(P); + }while(P!=first(L) && info(P).name != x.name); + if (P==first(L) && info(P).name != x.name){ + return NULL; + } return P; } @@ -84,9 +102,23 @@ void deleteFirst(List &L, address &P) { * IS : List L mungkin kosong * FS : elemen pertama di dalam List L dilepas dan disimpan/ditunjuk oleh P */ - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + P=first(L); + if (next(P)==first(L)){ + next(P)=NULL; + prev(P)=NULL; + }else if (prev(first(L))==next(first(L))){ + first(L)=next(P); + next(first(L))=first(L); + prev(first(L))=first(L); + next(P)=NULL; + prev(P)=NULL; + }else{ + first(L)=next(P); + next(prev(P))=first(L); + prev(first(L))=prev(P); + next(P)=NULL; + prev(P)=NULL; + } } void deleteLast(List &L, address &P) { @@ -94,9 +126,20 @@ void deleteLast(List &L, address &P) { * IS : List L mungkin kosong * FS : elemen tarakhir di dalam List L dilepas dan disimpan/ditunjuk oleh P */ - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + P=prev(first(L)); + if (P==first(L)){ + deleteFirst(L, P); + }else if(prev(first(L))==next(first(L))){ + next(first(L))=first(L); + prev(first(L))=first(L); + next(P)=NULL; + prev(P)=NULL; + }else{ + next(prev(P))=first(L); + prev(first(L))=prev(P); + next(P)=NULL; + prev(P)=NULL; + } } void insertAfter(List &L, address &Prec, address P) { @@ -105,9 +148,10 @@ void insertAfter(List &L, address &Prec, address P) { * FS : elemen yang ditunjuk P menjadi elemen di belakang elemen yang * ditunjuk pointer Prec */ - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + prev(next(Prec))=P; + next(P)=next(Prec); + next(Prec)=P; + prev(P)=Prec; } void deleteAfter(List &L, address &Prec, address &P) { @@ -116,8 +160,16 @@ void deleteAfter(List &L, address &Prec, address &P) { * FS : elemen yang berada di belakang elemen Prec dilepas * dan disimpan/ditunjuk oleh P */ - //------------- YOUR CODE HERE ------------- - - //---------------------------------------- + P=next(Prec); + if (P==first(L)){ + deleteFirst(L, P); + }else if (P==prev(first(L))){ + deleteLast(L, P); + }else{ + next(Prec)=next(P); + prev(next(P))=Prec; + next(P)=NULL; + prev(P)=NULL; + } } diff --git a/list.h b/list.h index 4468d0f..cca5f52 100644 --- a/list.h +++ b/list.h @@ -28,17 +28,13 @@ typedef struct elmlist *address; */ struct elmlist { - //------------- YOUR CODE HERE ----------- - - - //---------------------------------------- + infotype info; + address next; + address prev; }; struct List { - //------------- YOUR CODE HERE ----------- - - - //---------------------------------------- + address first; }; diff --git a/main.cpp b/main.cpp index a66a5c1..67e85e8 100644 --- a/main.cpp +++ b/main.cpp @@ -121,12 +121,8 @@ void runMenu(int menu) { break; case 2: // insert last music - //------------- YOUR CODE HERE ------------- - cout<<"UNDER MAIN TENIS"<>x.name; P = findElmByName(L, x); if(P != NULL){ cout<<"music found"<>x.ID; + P=findElmByID(L, x); + if(P!=NULL){ + cout<<"music found"<>x.name; + cin>>x.ID; deleteMusicByID(L, x); cout<<"press enter";getche(); break; diff --git a/obj/Debug/list.o b/obj/Debug/list.o new file mode 100644 index 0000000..840e324 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..d235777 Binary files /dev/null and b/obj/Debug/main.o differ diff --git a/obj/Debug/player.o b/obj/Debug/player.o new file mode 100644 index 0000000..577c5e7 Binary files /dev/null and b/obj/Debug/player.o differ diff --git a/player.cpp b/player.cpp index 31ef288..bc09659 100644 --- a/player.cpp +++ b/player.cpp @@ -42,11 +42,28 @@ void shuffleList(List &L) { * PR : mengacak isi (elemen) dari list L * FS : isi (elemen) dari list teracak */ - //------------- YOUR CODE HERE ------------- - - cout<<"UNDER MAIN TENIS"< 0) + { + P = first(L); + int j = randomInt(i); + while( j != 0) + { + P = next(P); + j--; + } + address Q = P; + deleteAfter(L, prev(P), Q); + insertFirst(L, Q); + i--; + } } void playRepeat(List &L, int n) { @@ -55,8 +72,15 @@ void playRepeat(List &L, int n) { * dari lagu pertama hingga terakhir sebanyak n kali */ //------------- YOUR CODE HERE ------------- - - cout<<"UNDER MAIN TENIS"<