Scala 프로그래밍 과제 2

   

  • 제출방법 : 작성한 코드를 ‘hw2.scala’라는 이름으로 저장한 후 아래 출력 화면을 캡쳐한 이미지와 함께 압축하여 ‘학번_hw2.zip’ 로 저장하세요. 압축된 파일을 이루리 과제 게시판에 업로드하면 됩니다.
  • 제출기한 : 4월 12일 일요일 11:59pm

       

과제 진행 시 어려운 점이 있으면 이루리 게시판을 이용해 질문하세요. 게시판을 통해 하기 어려운 질문이라면 아래 조교님들의 이메일을 통해 문의하시기 바랍니다.

   

조교: 문선아(moonsun5319@kangwon.ac.kr), 박환용(201714153@kangwon.ac.kr)

   


  1. $1$부터 $n$까지의 합을 구하는 함수 sum을 만들어보겠습니다. 함수는 아래와 같은 공식을 사용합니다.
\[n (n+1) / 2\]
def sum(n: Int): Int = {
    // n이 0보다 작거나 같으면 출력값은 0이 됩니다.
    // n이 0보다 크면 공식으로 계산합니다.
}
println("** p1 **")
println(sum(-10))
println(sum(100))
  • 1번의 출력은 다음과 같습니다.

title

   


  1. 반지름이 $r$인 원의 넓이를 구하는 함수 circle을 만들어보겠습니다. 함수는 아래와 같은 공식을 사용합니다.
\[3.14 r^2\]
def circle(r: Double): Double = {
	// r이 0.0보다 작거나 같으면 원의 넓이는 0이 됩니다.
    // r이 0.0보다 크면 공식을 사용하여 계산합니다.
}
println("** p2 **")
println(circle(-10.1))
println(circle(4.2))
  • 2번의 출력은 다음과 같습니다.

title

   


  1. 입력한 문자열 앞에 “Hello “를 삽입하는 함수 concat을 만들어보겠습니다. Hello 다음에 공백문자가 있음을 주의해주세요.
def concat(name: String): String = {
    // "Hello " 를 삽입합니다.
}
println("** p3 **")
println(concat("Bob!"))
println(concat("Alice!"))
  • 3번의 출력은 다음과 같습니다.

title

   


  1. 논리연산자 xor을 구하는 함수 xor을 만들어보겠습니다. xor은 두 연산자 중 하나만 true일 경우 true가 됩니다.
A B xor
0 0 0
0 1 1
1 0 1
1 1 0
def xor(x: Boolean, y: Boolean) : Boolean = {
  // 위의 표와 같은 조건을 사용하여
  // x,y의 입력에 따라 출력값을 정해줍니다.
}
println("** p4 **")
println(xor(true,true))
println(xor(true,false))
println(xor(false,true))
println(xor(false,false))
  • 4번의 출력은 다음과 같습니다.

title

   


  1. 세 정수를 변의 길이로 가지는 삼각형이 존재하는지 확인하는 함수 triangle을 만들어보겠습니다. 세 변이 주어졌을 때 삼각형이 존재하는 조건은 아래와 같습니다. (단, c는 가장 긴 변이 됩니다.)
\[a+b > c\]
def triangle(x: Int, y:Int, z:Int) : Boolean = {
  // 세 변 중에 하나라도 0보다 작거나 같으면 삼각형은 존재하지 않습니다.
  // 세 변이 모두 0보다 크면 위의 조건을 사용하여 삼각형이 존재하는지 확인해줍니다.
}
println("** p5 **")
println(triangle(-3,3,1))
println(triangle(3,4,5))
println(triangle(100,1,2))
  • 5번의 출력은 다음과 같습니다.

title

   


  1. 두 정수의 합이나 차를 구하는 함수인 int_if_then_else를 만들어보겠습니다. true인 경우는 두 정수의 합을, false인 경우는 두 정수의 차를 출력하도록 합니다.
def int_if_then_else(b: Boolean, x: Int, y: Int) : Int = {
  // b가 true이면 두 수의 합을
  // b가 false이면 두 수의 차를 구합니다.
}
println("** p6 **")
println(int_if_then_else(true, 2, 100))
println(int_if_then_else((100<2), 2, -2))
  • 6번의 출력은 다음과 같습니다.

p6

   


  1. 임의의 2차 함수에 대하여 두 정수를 대입했을때의 합을 구하는 함수인 sum_of_fun_val을 만들어보겠습니다. (순서대로 a,b,c,d,e를 입력합니다.)
  • 함수 $f(x)=ax^2+bx+c$에 대해, $f(d) + f(e)$를 계산하면 됩니다.
def sum_of_fun_val(a:Int, b:Int, c:Int, d:Int, e:Int): Int = {
  // f(d) + f(e) 를 구해줍니다.
}
println("** p7 **")
println(sum_of_fun_val(1,2,1,3,4))
println(sum_of_fun_val(1,-3,-1,200,123))
  • 7번의 출력은 다음과 같습니다.

p7

   


  1. 임의의 2차 함수에 대하여 정수를 3번 적용한 값을 계산하는 comp3 함수를 만들어보겠습니다. (순서대로 a,b,c,d를 입력합니다.)
    • 함수 $f(x)=ax^2+bx+c$에 대하여 $f(f(f(d)))$를 구하면 됩니다.
def comp3(a:Int, b:Int, c:Int, d:Int): Int = {
  // f(f(f(d)))를 구해줍니다.
}
println("** p8 **")
println(comp3(1,1,1,1))
println(comp3(1,-2,1,3))
  • 8번의 출력은 다음과 같습니다.

p8

   


  1. 두 번 반복하는 문자열을 출력하는 함수 string2를 만들어보겠습니다. a를 입력하면 aa가 출력됩니다.
def string2(s: String): String = {
	// 입력한 문자열 s를 두 번 반복하는 값을 구해줍니다.      
}
println("** p9 **")
println(string2("hi"))
println(string2("abcde"))
  • 9번의 출력은 다음과 같습니다.

title

   


  1. 256번 반복하는 문자열을 계산하는 함수 string256을 만들어보겠습니다.
  • 방법 1 : StringBuilder를 사용합니다. (참고: StringBuilder를 사용하지 않고 일반 String 변수만을 사용해도 됩니다.)
def string256(s: String): StringBuilder = {
  // StringBuilder를 사용하여 구합니다.
}
println("방법 1")
println(string256("a"))
  • 방법 2 : 9번 문제의 string2를 사용합니다.
def string256_use_string2(s: String): String = {
  // string2를 호출하여 구합니다.  
}
println("** p10 **")
println("방법 2")
println(string256_use_string2("a"))
  • 10번의 출력은 다음과 같습니다.

title