import Foundation
var currentResult: Double = 0.0
var calculator = Calculator(currentResult: currentResult)
//print("첫 번째 숫자를 입력하세요 : ", terminator: "")
//if let input = readLine(), let num1 = Double(input){
while true {
print("1. 계산종료 2. 계산기 초기화 3.누적계산")
print("원하는 번호를 선택해 주세요", terminator: "")
if let option = readLine(), let choice = Int(option) {
switch choice {
case 1:
print("계산종료")
break
case 2:
print("첫 번째 숫자를 입력하세요 : ", terminator: "")
if let input = readLine(), let num1 = Double(input){
print("두 번째 숫자를 입력하세요 : ", terminator: "")
if let input2 = readLine(),let num2 = Double(input2) {
print("연산자를 선택하세요 (+, -, *, /) : ", terminator: "")
if let operation = readLine() {
switch operation {
case "+":
calculator.setOperation(Addition())
case "-":
calculator.setOperation(Subtraction())
case "*":
calculator.setOperation(Multiplication())
case "/":
calculator.setOperation(Division())
default:
print("Error: 지원되지 않는 연산자입니다.")
continue
}
currentResult = calculator.calculate(num1: num1, num2: num2)
let result = String(format: "%.2f", currentResult)
print("결과: \(result)")
} else {
print("Error: 연산자를 입력하세요.")
}
} else { print("Error: 두 번째 숫자를 입력하세요.")}
} else {print("Error: 첫 번째 숫자를 입력하세요.")}
case 3:
print("두 번째 숫자를 입력하세요 : ", terminator: "")
if let input2 = readLine(), let num2 = Double(input2) {
print("연산자를 선택하세요 (+, -, *, /) : ", terminator: "")
if let operation = readLine() {
switch operation {
case "+":
calculator.setOperation(Addition())
case "-":
calculator.setOperation(Subtraction())
case "*":
calculator.setOperation(Multiplication())
case "/":
calculator.setOperation(Division())
default:
print("Error: 지원되지 않는 연산자입니다.")
continue
}
currentResult = calculator.calculate(num1: currentResult, num2: num2)
let result = String(format: "%.2f", currentResult)
print("결과: \(result)")
} else {
print("Error: 연산자를 입력하세요.")
}
} else {
print("Error: 숫자를 입력하세요.")
}
default:
print("Error: 올바른 옵션을 선택하세요.")
}
// 사용자가 '1'을 선택하면 반복문을 종료합니다.
if choice == 1 {
break
}
} else {
print("Error: 숫자를 입력하세요.")
}
}
//Calculator 클래스
class Calculator {
var currentResult: Double
var operation: Operation?
init(currentResult: Double) {
self.currentResult = currentResult
}
func setOperation(_ operation: Operation) {
self.operation = operation
}
func calculate(num1: Double, num2: Double) -> Double {
guard let operation = operation else {
print("Error: 연산자가 설정되지 않았습니다.")
return 0.0
}
return operation.calculate(num1: num1, num2: num2)
}
}
class Operation {
func calculate(num1: Double, num2: Double) -> Double {
return 0.0 // 기본 연산은 0을 반환
}
}
class Addition: Operation {
override func calculate(num1: Double, num2: Double) -> Double {
return num1 + num2
}
}
class Subtraction: Operation {
override func calculate(num1: Double, num2: Double) -> Double {
return num1 - num2
}
}
class Multiplication: Operation {
override func calculate(num1: Double, num2: Double) -> Double {
return num1 * num2
}
}
class Division: Operation {
override func calculate(num1: Double, num2: Double) -> Double {
if num2 != 0 {
return num1 / num2
} else {
print("Error: 0으로 나눌 수 없습니다!")
return 0.0
}
}
}
while 조건 {
// 실행할 코드
}
여기서 조건은 불리언(Boolean) 값인 표현식입니다. while 루프는 이 조건이 참(True)일 때 계속해서 반복됩니다. 조건이 거짓(False)이 되면 루프가 종료됩니다.
break: break 문은 루프를 즉시 종료하고 루프 외부의 코드로 제어를 이동시킵니다.
continue: continue 문은 루프의 현재 반복을 중지하고 다음 반복으로 이동합니다.