diff --git a/ASD_Task_4.depend b/ASD_Task_4.depend index a544662..dba1500 100644 --- a/ASD_Task_4.depend +++ b/ASD_Task_4.depend @@ -19,3 +19,23 @@ "player.h" +1582872441 source:c:\mingw\c++ program\asd_task_4\list.cpp + "list.h" + +1582637383 c:\mingw\c++ program\asd_task_4\list.h + + + + +1582871510 source:c:\mingw\c++ program\asd_task_4\main.cpp + "player.h" + "list.h" + + +1582628103 c:\mingw\c++ program\asd_task_4\player.h + "list.h" + +1582872225 source:c:\mingw\c++ program\asd_task_4\player.cpp + "player.h" + + diff --git a/ASD_Task_4.layout b/ASD_Task_4.layout index 5ec49e7..3fe69e2 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..6f6173f Binary files /dev/null and b/bin/Debug/ASD_Task_4.exe differ diff --git a/list.cpp b/list.cpp index 847a957..513df89 100644 --- a/list.cpp +++ b/list.cpp @@ -5,7 +5,7 @@ void createList(List &L) { * FS : first(L) diset Nil */ //------------- YOUR CODE HERE ------------- - + L.first = NULL; //---------------------------------------- } @@ -17,7 +17,12 @@ address allocate(infotype x) { address P = NULL; //------------- YOUR CODE HERE ------------- - + P = new elmlist; + P -> info.ID = x.ID; + P -> info.location = x.location; + P -> info.name = x.name; + P -> next = NULL; + P -> prev = NULL; //---------------------------------------- return P; } @@ -27,7 +32,7 @@ void deallocate(address &P) { * FS : menghapus elemen yang ditunjuk oleh P (delete) */ //------------- YOUR CODE HERE ------------- - + delete(P); //---------------------------------------- } @@ -37,7 +42,17 @@ void insertFirst(List &L, address P) { * FS : elemen yang ditunjuk P menjadi elemen pertama pada List L */ //------------- YOUR CODE HERE ------------- - + if (L.first == NULL) { + P -> next = P; + P -> prev = P; + L.first = P; + } else { + P -> next = L.first; + P -> prev = L.first -> prev; + L.first -> prev -> next = P; + L.first -> prev = P; + L.first = P; + } //---------------------------------------- } @@ -47,7 +62,14 @@ void insertLast(List &L, address P) { * FS : elemen yang ditunjuk P menjadi elemen terakhir pada List L */ //------------- YOUR CODE HERE ------------- - + if (L.first == NULL) { + insertFirst(L, P); + } else { + P -> next = L.first; + P -> prev = L.first -> prev; + L.first -> prev -> next = P; + L.first -> prev = P; + } //---------------------------------------- } @@ -60,7 +82,13 @@ address findElmByID(List L, infotype x) { address P = NULL; //------------- YOUR CODE HERE ------------- - + P = L.first; + do { + P = P -> next; + } while (P != L.first && P -> info.ID != x.ID); + if (P == L.first && P -> info.ID != x.ID) { + return NULL; + } //---------------------------------------- return P; } @@ -74,7 +102,13 @@ address findElmByName(List L, infotype x) { address P = NULL; //------------- YOUR CODE HERE ------------- - + P = L.first; + do { + P = P -> next; + } while (P != L.first && P -> info.name != x.name); + if (P == L.first && P -> info.name != x.name) { + return NULL; + } //---------------------------------------- return P; } @@ -85,7 +119,19 @@ void deleteFirst(List &L, address &P) { * FS : elemen pertama di dalam List L dilepas dan disimpan/ditunjuk oleh P */ //------------- YOUR CODE HERE ------------- - + if (L.first == NULL) { + P = L.first; + P -> next = NULL; + P -> prev = NULL; + L.first = NULL; + } else { + P = L.first; + L.first = P -> next; + L.first -> prev = P -> prev; + P -> prev -> next = L.first; + P -> next = NULL; + P -> prev = NULL; + } //---------------------------------------- } @@ -95,7 +141,15 @@ void deleteLast(List &L, address &P) { * FS : elemen tarakhir di dalam List L dilepas dan disimpan/ditunjuk oleh P */ //------------- YOUR CODE HERE ------------- - + if (L.first == NULL) { + deleteFirst(L, P); + } else { + P = L.first -> prev; + P -> prev -> next = L.first; + L.first -> prev = P -> prev; + P -> next = NULL; + P -> prev = NULL; + } //---------------------------------------- } @@ -106,7 +160,14 @@ void insertAfter(List &L, address &Prec, address P) { * ditunjuk pointer Prec */ //------------- YOUR CODE HERE ------------- - + if (L.first == NULL) { + insertFirst(L, P); + } else { + P -> next = Prec -> next; + P -> prev = Prec; + Prec -> next -> prev = P; + Prec -> next = P; + } //---------------------------------------- } @@ -117,7 +178,15 @@ void deleteAfter(List &L, address &Prec, address &P) { * dan disimpan/ditunjuk oleh P */ //------------- YOUR CODE HERE ------------- - + if (Prec -> next == L.first) { + deleteFirst(L, P); + } else { + P = Prec -> next; + P -> next -> prev = Prec; + Prec -> next = P -> next; + P -> next = NULL; + P -> prev = NULL; + } //---------------------------------------- } diff --git a/list.h b/list.h index 4468d0f..27f1843 100644 --- a/list.h +++ b/list.h @@ -29,14 +29,16 @@ 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..c28abd7 100644 --- a/main.cpp +++ b/main.cpp @@ -27,7 +27,7 @@ int main() { x.ID = index_ID++; x.location = "asset"; - x.name = "re.wav"; + x.name = "do'.wav"; P = allocate(x); insertLast(L,P); @@ -96,7 +96,8 @@ address inputMusic() { * YOU DON'T NEED TO MODIFY THIS */ cout<<"input music filename (.wav) : "; - cin>>x.name; + cin.get(); + getline(cin, x.name); cout<<"input music location "<>x.location; if(x.location=="-") { @@ -123,6 +124,8 @@ void runMenu(int menu) { // insert last music //------------- YOUR CODE HERE ------------- cout<<"UNDER MAIN TENIS"< prev; + playMusic(P); //---------------------------------------- break; case 6: @@ -154,6 +158,8 @@ void runMenu(int menu) { P = findElmByName(L, x); if(P != NULL){ cout<<"music found"<> x.ID; + P = findElmByID(L, x); + if(P != NULL){ + cout<<"music found"< prev; + playMusic(P); + } //---------------------------------------- break; case 11: @@ -202,7 +217,7 @@ void runMenu(int menu) { case 13: // delete music by ID cout<<"input music ID : "; - cin>>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..207d43b 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..a847aee 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..d7dd575 Binary files /dev/null and b/obj/Debug/player.o differ diff --git a/player.cpp b/player.cpp index 31ef288..b2fe7d2 100644 --- a/player.cpp +++ b/player.cpp @@ -1,7 +1,7 @@ #include "player.h" #include -int randomInt(int max_int) { +int randomInt(int max_int) { /** YOU DON'T NEED TO MODIFY THIS */ srand(time(NULL)); return (rand() % max_int) + 1; @@ -43,6 +43,24 @@ void shuffleList(List &L) { * FS : isi (elemen) dari list teracak */ //------------- YOUR CODE HERE ------------- + address P = L.first; + int jumlah = 0; + do { + P = P -> next; + jumlah++; + } while (P != L.first); + while (jumlah > 0) { + P = L.first; + int k = randomInt(jumlah); + while (k != 0) { + P = P -> next; + k--; + } + address Q = P; + deleteAfter(L, P -> prev, Q); + insertFirst(L, Q); + jumlah--; + } cout<<"UNDER MAIN TENIS"< next; + } while (P != L.first); + } cout<<"UNDER MAIN TENIS"< prev, P); + deallocate(P); + } + } cout<<"UNDER MAIN TENIS"<