[Project] 계산기 만들기 ➂

JJOOEE__·2024년 6월 10일
0

Today I Learned....

목록 보기
6/19
post-thumbnail

🍎 누적계산과 초기화, 종료가 가능한 계산기 🍎

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

  • while문은 특정 조건이 만족하는 동안 내부로직을 계속해서 실행하는 반복문입니다.
  • 종결 조건을 정해주지 않으면 무한루프가 생길 위험성이 있습니다.
  • while문은 반복문의 각 패스가 시작할 때 조건을 평가합니다.
    
while 조건 {
    // 실행할 코드
}

여기서 조건은 불리언(Boolean) 값인 표현식입니다. while 루프는 이 조건이 참(True)일 때 계속해서 반복됩니다. 조건이 거짓(False)이 되면 루프가 종료됩니다.

  • break: break 문은 루프를 즉시 종료하고 루프 외부의 코드로 제어를 이동시킵니다.

  • continue: continue 문은 루프의 현재 반복을 중지하고 다음 반복으로 이동합니다.

 
profile
개발이 어려운 나를 위한... 개발노트

0개의 댓글