Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import "fmt"
- /*
- Tipe bentukan struktur dengan atribut:
- title (string), year (integer), review (real), dan rating (real)
- */
- type Film struct {
- title string
- year int
- review float64
- rating float64
- }
- // Konstanta dengan nilai 10
- const NMAX int = 10
- // Tipe alias untuk array of tipe bentukan struktur dengan ukuran NMAX
- type tabFilm [NMAX]Film
- func main() {
- // Deklarasi variabel bertipe array of tipe bentukan struktur
- var data tabFilm
- // Deklarasi variabel bertipe integer untuk menampung banyaknya data film
- var n int
- // Pemanggilan prosedur baca data film
- bacaDataFilm(&data, &n)
- // Pemanggilan prosedur cetak data film
- fmt.Println("Data sebelum diurutkan:")
- cetakDataFilm(data, n)
- // Pemanggilan prosedur urut menurun film berdasarkan review.
- // Jika terdapat film dengan review yang sama, urutkan menurun berdasarkan rating
- // Pemanggilan prosedur cetak data film
- fmt.Println("\nData setelah diurutkan menurun berdasarkan review dan rating:")
- urutMenurun(&data, n)
- cetakDataFilm(data, n)
- // Pemanggilan prosedur urut menaik film berdasarkan year.
- // Jika terdapat film dengan year yang sama, urutkan menaik berdasarkan review
- // Pemanggilan prosedur cetak data film
- fmt.Println("\nData setelah diurutkan menaik berdasarkan year dan review:")
- urutMenaik(&data, n)
- cetakDataFilm(data, n)
- }
- func bacaDataFilm(A *tabFilm, n *int) {
- /*
- IS: Array A sebanyak n terdefinisi sembarang
- Proses: 1) Membaca n. Nilai n tidak boleh melebihi NMAX.
- 2) Membaca n data array A dengan atribut-atributnya.
- FS: Array A sebanyak n elemen berisi nilai
- */
- fmt.Scan(&*n)
- var inputData Film
- for x := 0; x < *n; x++ {
- fmt.Scan(&inputData.title, &inputData.year, &inputData.review, &inputData.rating)
- if x < NMAX {
- A[x] = inputData
- }
- }
- if *n > NMAX {
- *n = NMAX
- }
- }
- func cetakDataFilm(A tabFilm, n int) {
- /*
- IS: Terdefinisi array A sebanyak n elemen
- FS: Tercetak di layar data array A dengan format
- " Title Year Review Rating
- <title> <year> <review> <rating>
- ... ... ... ...."
- Gunakan format string dengan kolom 41, 6, 6, dan 6
- untuk masing-masing title, year, review, dan rating.
- */
- fmt.Printf("%41s %6s %6s %6s\n", "Title", "Year", "Review", "Rating")
- for x := 0; x < n; x++ {
- fmt.Printf("%41s %6d %6.2f %6.2f\n", A[x].title, A[x].year, A[x].review, A[x].rating)
- }
- }
- func urutMenaik(A *tabFilm, n int) {
- /*
- IS: Terdefinisi Array A sebanyak n elemen
- FS: Array A sebanyak n elemen terurut menaik berdasarkan
- tahun dengan menggunakan algoritma insertion sort.
- Jika terdapat year yang sama, urutkan menaik berdasarkan
- review-nya.
- */
- for x := 0; x < n; x++ {
- y := x
- for y > 0 {
- if A[y-1].year > A[y].year {
- temp := A[y-1]
- A[y-1] = A[y]
- A[y] = temp
- }
- if A[y-1].year == A[y].year {
- if A[y-1].review < A[y].review {
- temp := A[y-1]
- A[y-1] = A[y]
- A[y] = temp
- }
- }
- y--
- }
- }
- }
- func urutMenurun(A *tabFilm, n int) {
- /*
- IS: Terdefinisi Array A sebanyak n elemen
- FS: Array A sebanyak n elemen terurut menurun berdasarkan
- review-nya dengan menggunakan algoritma selection sort.
- Jika terdapat review yang sama, urutkan berdasarkan
- rating-nya.
- */
- for x := 0; x < n; x++ {
- idx := x
- for y := x; y < n; y++ {
- if A[y].review > A[idx].review {
- idx = y
- }
- if A[y].review == A[idx].review {
- if A[y].rating > A[idx].rating {
- idx = y
- }
- }
- }
- temp := A[x]
- A[x] = A[idx]
- A[idx] = temp
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement