commit 1a2306ba55f70557a47bafe2c6c1bfbe963c32ad Author: 202310715038 NUR YUDHA MAULANA <202310715038@mhs.ubharajaya.ac.id> Date: Fri Oct 31 15:00:33 2025 +0700 Upload files to "/" Tugas 3 Kalkulator diff --git a/MainActivity.kt b/MainActivity.kt new file mode 100644 index 0000000..666b5dc --- /dev/null +++ b/MainActivity.kt @@ -0,0 +1,97 @@ +package com.example.selectionsort + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.example.selectionsort.ui.theme.SelectionSortTheme + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContent { + SelectionSortTheme { + Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> + SelectionSortScreen(modifier = Modifier.padding(innerPadding)) + } + } + } + } +} + +@Composable +fun SelectionSortScreen(modifier: Modifier = Modifier) { + // Daftar angka acak 10 elemen antara 10–99 + val numbers = remember { (10..99).shuffled().take(10) } + + // Proses Selection Sort + val sortedNumbers = remember { + numbers.toMutableList().apply { + for (i in 0 until size - 1) { + var minIndex = i + for (j in i + 1 until size) { + if (this[j] < this[minIndex]) { + minIndex = j + } + } + if (minIndex != i) { + val temp = this[i] + this[i] = this[minIndex] + this[minIndex] = temp + } + } + } + } + + Column( + modifier = modifier + .padding(16.dp) + .verticalScroll(rememberScrollState()) + ) { + Text( + text = "🔢 Daftar Angka Sebelum Diurutkan:", + style = MaterialTheme.typography.titleMedium + ) + Text(text = numbers.joinToString(", ")) + + Text(text = "") + Text( + text = "✅ Hasil Setelah Diurutkan (Selection Sort):", + style = MaterialTheme.typography.titleMedium + ) + Text(text = sortedNumbers.joinToString(", ")) + + Text(text = "") + Text( + text = "🧠 Cara Kerja Selection Sort:", + style = MaterialTheme.typography.titleMedium + ) + Text( + text = "Algoritma ini mencari nilai terkecil dari bagian data yang belum diurutkan, " + + "lalu menukarnya dengan posisi paling depan. Langkah ini diulang terus " + + "hingga seluruh data terurut dari yang terkecil ke terbesar." + ) + } +} + +@Preview(showBackground = true) +@Composable +fun SelectionSortScreenPreview() { + SelectionSortTheme { + SelectionSortScreen() + } +}