From bfa1f497a691dca461b13374f8f31491e3440bfa Mon Sep 17 00:00:00 2001 From: DaffaBarin Date: Sat, 7 Mar 2020 20:24:09 +0700 Subject: [PATCH 1/3] .h and .main --- player.cpp | 36 +++++++++++++++-- player.h | 115 ++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 129 insertions(+), 22 deletions(-) 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"< -#include "list.h" +int randomInt(int max_int) { + /** YOU DON'T NEED TO MODIFY THIS */ + srand(time(NULL)); + return (rand() % max_int) + 1; +} -/** YOU DON'T NEED TO MODIFY THESE **/ +void printInfo(List L) { + /** + * PR : menampilkan informasi ID, nama, dan lokasi file + * YOU DON'T NEED TO MODIFY THIS + */ -int randomInt(int); -// helper random for shuffle + address Q = first(L); + do { + cout<<"name : "< 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"< Date: Sat, 7 Mar 2020 20:26:11 +0700 Subject: [PATCH 2/3] final --- list.cpp | 92 ++++++++++++++++++++++++++++++++++++++++++++++++-------- list.h | 6 ++-- main.cpp | 29 +++++++++++++----- 3 files changed, 106 insertions(+), 21 deletions(-) diff --git a/list.cpp b/list.cpp index 847a957..3a9c34a 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,14 @@ 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; From ae2e94a796b7bbb580bb9b8267278051a4f449d7 Mon Sep 17 00:00:00 2001 From: DaffaBarin Date: Sat, 7 Mar 2020 20:28:49 +0700 Subject: [PATCH 3/3] commit --- obj/Debug/list.o | Bin 0 -> 42724 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 obj/Debug/list.o diff --git a/obj/Debug/list.o b/obj/Debug/list.o new file mode 100644 index 0000000000000000000000000000000000000000..20516d86d2aad4e0e0490ef72d9ba2c4e9b92d16 GIT binary patch literal 42724 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 literal 0 HcmV?d00001