Advertisement
ChaeYuriya

Untitled

Jun 8th, 2024
573
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 3.57 KB | None | 0 0
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. /*
  6.     Tipe bentukan struktur dengan atribut:
  7.     title (string), year (integer), review (real), dan rating (real)
  8. */
  9. type Film struct {
  10.     title  string
  11.     year   int
  12.     review float64
  13.     rating float64
  14. }
  15.  
  16. // Konstanta dengan nilai 10
  17. const NMAX int = 10
  18.  
  19. // Tipe alias untuk array of tipe bentukan struktur dengan ukuran NMAX
  20. type tabFilm [NMAX]Film
  21.  
  22. func main() {
  23.     // Deklarasi variabel bertipe array of tipe bentukan struktur
  24.     var data tabFilm
  25.  
  26.     // Deklarasi variabel bertipe integer untuk menampung banyaknya data film
  27.     var n int
  28.  
  29.     // Pemanggilan prosedur baca data film
  30.     bacaDataFilm(&data, &n)
  31.  
  32.     // Pemanggilan prosedur cetak data film
  33.     fmt.Println("Data sebelum diurutkan:")
  34.     cetakDataFilm(data, n)
  35.  
  36.     // Pemanggilan prosedur urut menurun film berdasarkan review.
  37.     // Jika terdapat film dengan review yang sama, urutkan menurun berdasarkan rating
  38.  
  39.     // Pemanggilan prosedur cetak data film
  40.     fmt.Println("\nData setelah diurutkan menurun berdasarkan review dan rating:")
  41.     urutMenurun(&data, n)
  42.     cetakDataFilm(data, n)
  43.  
  44.     // Pemanggilan prosedur urut menaik film berdasarkan year.
  45.     // Jika terdapat film dengan year yang sama, urutkan menaik berdasarkan review
  46.  
  47.     // Pemanggilan prosedur cetak data film
  48.     fmt.Println("\nData setelah diurutkan menaik berdasarkan year dan review:")
  49.     urutMenaik(&data, n)
  50.     cetakDataFilm(data, n)
  51. }
  52.  
  53. func bacaDataFilm(A *tabFilm, n *int) {
  54.     /*
  55.         IS: Array A sebanyak n terdefinisi sembarang
  56.         Proses: 1) Membaca n. Nilai n tidak boleh melebihi NMAX.
  57.                 2) Membaca n data array A dengan atribut-atributnya.
  58.         FS: Array A sebanyak n elemen berisi nilai
  59.     */
  60.     fmt.Scan(&*n)
  61.     var inputData Film
  62.     for x := 0; x < *n; x++ {
  63.         fmt.Scan(&inputData.title, &inputData.year, &inputData.review, &inputData.rating)
  64.         if x < NMAX {
  65.             A[x] = inputData
  66.         }
  67.     }
  68.     if *n > NMAX {
  69.         *n = NMAX
  70.     }
  71. }
  72.  
  73. func cetakDataFilm(A tabFilm, n int) {
  74.     /*
  75.         IS: Terdefinisi array A sebanyak n elemen
  76.         FS: Tercetak di layar data array A dengan format
  77.             " Title     Year       Review    Rating
  78.              <title>   <year>     <review>   <rating>
  79.               ...     ...       ...          ...."
  80.               Gunakan format string dengan kolom 41, 6, 6, dan 6
  81.               untuk masing-masing title, year, review, dan rating.
  82.     */
  83.     fmt.Printf("%41s %6s %6s %6s\n", "Title", "Year", "Review", "Rating")
  84.     for x := 0; x < n; x++ {
  85.         fmt.Printf("%41s %6d %6.2f %6.2f\n", A[x].title, A[x].year, A[x].review, A[x].rating)
  86.     }
  87. }
  88.  
  89. func urutMenaik(A *tabFilm, n int) {
  90.     /*
  91.         IS: Terdefinisi Array A sebanyak n elemen
  92.         FS: Array A sebanyak n elemen terurut menaik berdasarkan
  93.             tahun dengan menggunakan algoritma insertion sort.
  94.             Jika terdapat year yang sama, urutkan menaik berdasarkan
  95.             review-nya.
  96.     */
  97.     for x := 0; x < n; x++ {
  98.         y := x
  99.         for y > 0 {
  100.             if A[y-1].year > A[y].year {
  101.                 temp := A[y-1]
  102.                 A[y-1] = A[y]
  103.                 A[y] = temp
  104.             }
  105.             if A[y-1].year == A[y].year {
  106.                 if A[y-1].review < A[y].review {
  107.                     temp := A[y-1]
  108.                     A[y-1] = A[y]
  109.                     A[y] = temp
  110.                 }
  111.             }
  112.             y--
  113.         }
  114.     }
  115. }
  116.  
  117. func urutMenurun(A *tabFilm, n int) {
  118.     /*
  119.         IS: Terdefinisi Array A sebanyak n elemen
  120.         FS: Array A sebanyak n elemen terurut menurun berdasarkan
  121.             review-nya dengan menggunakan algoritma selection sort.
  122.             Jika terdapat review yang sama, urutkan berdasarkan
  123.             rating-nya.
  124.     */
  125.     for x := 0; x < n; x++ {
  126.         idx := x
  127.         for y := x; y < n; y++ {
  128.             if A[y].review > A[idx].review {
  129.                 idx = y
  130.             }
  131.             if A[y].review == A[idx].review {
  132.                 if A[y].rating > A[idx].rating {
  133.                     idx = y
  134.                 }
  135.             }
  136.         }
  137.         temp := A[x]
  138.         A[x] = A[idx]
  139.         A[idx] = temp
  140.     }
  141. }
  142.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement