package mc.midsem.practice1
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.Button
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import mc.midsem.practice1.ui.theme.BinaryCalculatorTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
BinaryCalculatorTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
BinaryCalculator(
name = "Binary Calculator",
// modifier = Modifier.padding(innerPadding)
)
}
}
}
}
}
@Composable
fun BinaryCalculator(name: String, modifier: Modifier = Modifier) {
var input1 by remember { mutableStateOf("") }
var input2 by remember { mutableStateOf("") }
var result by remember { mutableStateOf("") }
var errorMessage by remember { mutableStateOf("") }
fun valid(input: String): Boolean {
val trimmedInput = input.trim()
return if (trimmedInput.all { it == '0' || it == '1' }) {
errorMessage = ""
true
} else {
errorMessage = "Invalid input: $input"
false
}
}
Column(
modifier = Modifier
.padding(16.dp)
.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
TextField(
value = input1,
onValueChange = { input1 = it },
label = { Text("Binary Input 1") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
Spacer(modifier = Modifier.height(16.dp))
TextField(
value = input2,
onValueChange = { input2 = it },
label = { Text("Binary Input 2") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = {if (valid(input1) && valid(input2)) result = addBinary(input1.trim(), input2.trim()) }) {
Text("Add")
}
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = {if (valid(input1) && valid(input2)) result = subtractBinary(input1.trim(), input2.trim()) }) {
Text("Subtract")
}
Spacer(modifier = Modifier.height(16.dp))
if (errorMessage.isNotEmpty()) {
Text(errorMessage)
} else {
Text("Result: $result")
}
}
}
fun addBinary(input1: String, input2: String): String {
val n1 = input1.toInt(2)
val n2 = input2.toInt(2)
val ans = n1 + n2
return Integer.toBinaryString(ans)
}
fun subtractBinary(input1: String, input2: String): String {
val n1 = input1.toInt(2)
val n2 = input2.toInt(2)
val ans = n1 - n2
return Integer.toBinaryString(ans)
}
-
Notifications
You must be signed in to change notification settings - Fork 0
SanyamBK/MC-Practice
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published