- 제출방법 : 작성한 코드를 ‘hw3.scala’라는 이름으로 저장한 후 아래 출력 화면을 캡쳐한 이미지와 함께 압축하여 ‘학번_hw3.zip’ 로 저장하세요. 압축된 파일을 Uclass 과제 게시판에 업로드하면 됩니다.
- 제출기한 : 5월 20일 월요일 11:59pm
과제 진행 시 어려운 점이 있으면 Ed Discussion 게시판을 이용해 질문하세요. 게시판을 통해 하기 어려운 질문이라면 아래 TA 이메일을 통해 문의하시기 바랍니다.
조교: Aditi(diwakarmzu@gmail.com)
모든 문제는 배정문을 사용하지말고 자기호출 함수로 작성하세요.
- 정수 $n$을 입력받아 $1$부터 $n$까지의 합을 구하는 함수 sum을 작성하세요.
// 입력 n은 0보다 큰 정수라고 가정합니다.
def sum(n: Int): Int = {
// 자기호출 함수를 사용하여 계산합니다.
}
println("** p1 **")
println(sum(100))
출력 예시:
- 숫자 $n$을 입력 받아 $n!$을 계산하는 팩토리얼 함수를 작성하세요.
// 입력 n은 0보다 큰 정수라고 가정합니다.
def fac(n: Int): Int = {
// n이 1이면 1로 출력합니다
// 그렇지 않으면 재귀함수를 사용하여 계산합니다.
}
println("** p2 **")
println(fac(9))
출력 예시:
- 피보나치 숫자를 출력하는 함수를 작성하세요. **
// 입력 n은 0보다 큰 정수라고 가정합니다.
def fib(n: Int): Int = n match {
// n 이 1 또는 2면 1을 출력합니다.
// n이 3 이상인 경우에는
}
println("** p3 **")
println(fib(10))
출력 예시:
- 최대 공약수를 계산하는 함수를 작성하세요. 유클리드 호제법을 이용하여 작성하세요.
// 입력 m과 n은 0 이상이고 m+n은 0보다 크다고 가정합니다.
def gcd(n: Int, m: Int): Int = {
// 작은 값과 큰 값을 먼저 출력합니다.
// 유클리드 호제법을 사용하여 자기호출 함수로 계산하세요
}
println("** p4 **")
println(gcd(15,20))
출력 예시:
- 정수 리스트에서 가장 큰 값을 찾아내는 함수를 작성하세요. List의 isEmpty와 drop()을 사용하세요.
// 입력 list는 List(3, 4, 14, 7, 2)와 같은 형태의 정수 리스트라고 가정합니다.
def max(list: List[Int]): Int = {
// 정수 리스트에서 가장 큰 값을 반환하는 자기호출 함수를 작성하세요.
// 빈 리스트를 입력받으면 0을 반환하세요.
// 그렇지 않다면..
}
println("** p5 **")
println(max(x))
출력 예시:
Hint: Scala에서는 아래와 같이 트리 자료구조를 정의하고 사용할 수 있습니다.
sealed trait Tree[Int]
case class Leaf[Int](elem: Int) extends Tree[Int]
case class Node[Int](elem: Int, left: Tree[Int], right: Tree[Int]) extends Tree[Int]
val tree = Node(7, Node(3, Leaf(1), Leaf(2)), Leaf(4))
- 자기호출 함수를 사용하여 트리에 존재하는 모든 정수 노드 값의 총합을 구하는 함수를 만들어보세요.
def sum_tree( t: Tree[Int]): Int = {
//재귀함수를 이용하여 트리의 합을 구하세요.
}
출력 예시(위의 트리를 입력으로 사용했을 때):
- 자기호출 함수를 사용하여 트리의 깊이을 구하는 함수를 만들어보세요.
def depth(t: Tree[Int]): Int ={
//재귀함수를 이용하여 트리의 깊이를 구하세요.
}
출력 예시(위의 트리를 입력으로 사용했을 때):
- 자기호출 함수를 사용하여 이진 검색(binary search)을 통해 정수 $x$를 이진 트리 $t$로부터 검색하고 정수 $x$가 존재하면 true, 존재하지 않으면 false를 반환하는 함수를 만들어보세요.
def bin_search(t: Tree[Int], x: Int):Boolean = {
// 재귀함수를 이용하여 이진 검색을 수행합니다.
}
출력 예시(위의 트리와 정수 3을 입력으로 사용했을 때):
- 자기호출 함수를 사용하여 곱하기, 더하기, 뺴기, 나누기, 나머지 연산자로 구성된산술식을 계산하는 함수를 만들어보세요.
def interp(exp: Exp[Int]): Int = {
// 재귀함수를 사용하여 함수를 작성하세요.
}
[입출력 예]
입력 예시:
val exp = ADD(SUB(INT(100), INT(10)), MUL(INT(2), INT(8)))
출력 예시:
- 자기호출 함수를 사용하여 논리식을 계산하는 함수를 만들어보세요. 논리식에는 논리 연산자 AND, OR, NEGATION, IMPLICATION가 사용될 수 있으며 각각의 논리 연산자에 대한 진리표(truth table)는 여기를 참고하세요.
작성할 함수:
def formula(fma: Bool): Boolean = fma match {
// 재귀함수를 사용하여 Neg, Or, And, Imply 논리 연산자로 구성된 논리식을 계산하는 함수를 만드세요
}
[입출력 예]
입력 예시:
val fma = Imply(And(True, Or(True, False)), False)
출력 예시: