라라리라

2023.08.20 / Step 10 [함수] - 코딩 32 일차 본문

코딩/2023 JavaScript Console

2023.08.20 / Step 10 [함수] - 코딩 32 일차

헤실 2023. 8. 20. 17:36

함수2_개념01_함수와변수.html

 

<script>

    /*
        [개념] 함수와 변수
            함수 밖에서 선언한 변수 a와
            함수의 매개변수인 a는 서로 다른 변수이다.
    */

    function check(a){
        // 전단될 값을 새로운 a에 10을 저장한것이다.
        // 여기서 a의 값을 20으로 변경해도 아래 변수 a에 대한 값은 변함없다.
        a = 20;
    }

    let a = 10;
    check(a);                       // a 의 값만 함수로 전달된 것이다.
    document.write(a + "<br>");     // 그대로 10이 출력된다.

    let b = 10;
    let c =  b;
    c = 20;
    document.write(b);
    /*
        변수b의 값은 변화가 있을까?
        여기서 b와 c는 서로 다른 변수이기 때문에
        c의 값을 바꿔도 b는 영향을 받지 않는다.

        여기서 b는 위의 함수 밖의 a와 같으면,
        여기서 c는 위의 함수 안의 a와 같다.
    */

</script>

 

 


함수2_개념02_함수와배열.html

 

<script>

    /*  
        [개념] 함수와 배열
            함수 안에서 배열의 값을 바꾸면 배열은 값이 변화된다.
            아까와 마찬가지로 함수 밖의 arr과 함수 안의 arr은
            서로 다른 변수인것은 맞지만, [1, 2, 3, 4]의 주소를 저장하고있는
            주소 변수이기 때문에 함수에서 값을 변경하면
            함수 밖에서 접근해도 같은 값이 된다.
    */

    function testArr(arr){
        arr[1] = 100;
    }

    let arr = [1, 2, 3, 4];  
    testArr(arr);
    document.write(arr + "<br>");

    let test1 = [1, 2, 3];
    let test2 = test1;
    test1[1] = 100;
    document.write(test2);
    /*
        일반 변수와 달리 배열은 주소를 공유하기 때문에
        주소를 복사한 다른 배열이 값을 변경하면
        원본도 함께 바뀐다.
    */

   

</script>

 

 


함수2_개념03_랜덤홀수.html

 

<script>

    /*  
        [문제]
            배열에 -100 ~ 100 사이의 랜덤 숫자를 4개 저장하고
            전부 홀수인지 검사하는 함수를 만드시오.
        [예시]
            -90,93,1,47
            전부 홀수가 아니다.
    */
   
    function random (arr){
        for(let i = 0 ; i < 4; i++){
        let r = Math.floor(Math.random() * 201) - 100;
        arr.push(r);
        document.write(arr[i] + " ");
        }
        document.write("<br>");
    }
    function check (arr){
        let check = false;
        for(let i = 0; i < arr.length; i++){
            if(arr[i] % 2 != 0){
                check = true;
                break;
            }
        }
        if(check == false) document.write("모두 홀수이다.<br>");
        else document.write("모두 홀수가 아니다<br>");
    }

    let arr = [];
   
    random(arr);
    check(arr);
   
   

</script>

 

 


함수2_개념04_랜덤복권.html

 

<script>

    /*  
        [문제]
            배열에 랜덤으로 1 또는 7을 7개 저장한다.
            단, 7은 딱 3개만 저장한다.
            7이 연속으로 3개면 당첨이다.
            당첨인지 꽝인지 출력해주는 함수를 만드시오.
        [예시]
            7,1,7,7,1,1,1
            꽝
            1,1,1,1,7,7,7
            당첨
    */

    function setlotto (arr){
        let c1 = 0;
        let c7 = 0;
        while(true){
            if(c1 == 4 && c7 == 3) break;
            let r = Math.floor(Math.random() * 2);
                if(r == 0 && c7 < 3){
                    c7 ++;
                    arr.push(7);
                }
                else if(r == 1 && c1 < 4){
                    c1 ++;
                    arr.push(1);
                }
        }
        document.write("lotto = " + arr + "<br>");
    }
    function checklotto (arr){
        let count = 0;
        let win = false;
        for(let i = 0; i < arr.length; i++){
            if(arr[i] == 7) count++;
            else if(arr[i] == 1) count = 0;
            if(count == 3){
                win = true;
                break;
            }
        }
        if(win == true)document.write("당첨<br>");
        else document.write("꽝<br>");
    }

    let arr = [];

    setlotto(arr);
    checklotto(arr);
   

</script>

 

 


함수2_개념05_그래프.html

 

<script>

    /*
      [문제]
          배열의 값을 그래프로 출력하려고한다.
          graph배열의 각각의 값만큼 *을 반복적으로 가로로 출력하고,
          다음 숫자는 줄을 바꿔서 출력하시오.
      [정답]
          31  : ***
          76  : *******
          54  : *****
          2   :
          100 : **********
          23  : **
   */

    function set (arr, result){
        for(let i = 0; i < arr.length; i++){
            result.push([]);
        }
    }
    function print (arr, result){
        for(let i = 0; i < arr.length; i++){
            let size = parseInt(arr[i] / 10);
            for(let j = 0; j < size; j++){
                result[i].push ("*");
            }
        }
    }
  let arr = [31, 76, 54, 2, 100, 23];
  let result = [];
 
  set(arr, result);
  print(arr, result);

  for(let i = 0; i < result.length; i++){
    document.write(arr[i] + " : ");
    document.write(result[i] + "<br>");
  }
 
 
</script>

 

 


함수2_개념06_정렬함수.html

 

<script>

    /*  
      [문제]    
          arr배열의 값을 오름차순으로 정렬해주는
          함수를 만드시오.
      [정답]
          arr = 23,234,1001,3234,32134
  */  

  function orm (arr){
    for(let i = 0; i < arr.length; i++){
        for(let j = i ; j < arr.length; j++){
            if(arr[i] > arr[j]){
                let temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
  }
 
  let arr = [1001, 3234, 23, 32134, 234];
 
  orm(arr);

  document.write("arr = " + arr + "<br>");

</script>

 

 


함수2_개념07_뒤집기.html

 

<script>

    /*
      [문제]
          오름차순으로 정렬한 후,
          이를 뒤집어 내림차순으로 변경해주는
          함수를 만드시오.
      [정답]
          23,234,1001,3234,32134
          32134,3234,1001,234,23
  */  


  function orm (arr){
    for(let i = 0; i < arr.length; i++){
        for(let j = i; j < arr.length; j++){
            if(arr[i] > arr[j]){
                let temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
  }
  function temp (arr){
    for(let i = 0; i < arr.length; i++){
        let max = 0;
        let maxid = 0;
        for(let j = i; j < arr.length; j++){
            if(arr[j] > arr[i]){
                let temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
  }

  let arr = [1001, 3234, 23, 32134, 234];

  orm(arr);
  document.write("arr = " + arr + "<br>");
  temp(arr);
  document.write("arr = " + arr + "<br>");

</script>

 

 


함수2_문제01_한줄.html

 

<script>

    /*
        [문제]
            아래배열 3개는 학생 점수 데이터이다
            이를 한 줄로 저장해주는 함수를 만드시오.
        [예시]
            data = [1001,"김철수",32,1002,"이만수",54,1003,"조영민",12];
    */

    function line (a, b, c, d){
        for(let i = 0; i < a.length; i++){
            d.push(a[i]);
            d.push(b[i]);
            d.push(c[i]);
        }
        document.write(d + "<br>");
    }

    let number = [1001, 1002, 1003];
    let name = ["김철수", "이만수", "조영민"];
    let score = [32, 54, 12];

    let data = [];
    line(number, name, score, data);
</script>

 

 


함수2_문제02_합20만들기.html

 

<script>

    /*
        [문제]
            아래 배열에 랜덤으로 1~10 사이의숫자 3개를 저장한다.
        [조건]
            단, 3개의 숫자의 합은 반드시 20이어야하며,
            똑같은 숫자는 없어야한다.
            위치는 상관없다.
            이 기능을 구현하는 함수를 만드시오.
        [예시1]
            1, 10, 9 (O)
        [예시2]
            9, 9, 2 (X)
       
    */

    function total20 (arr){
       while(true){
        let total = 0;
        for(let i = 0; i < arr.length; i++){
            let r = Math.floor(Math.random() * 10) + 1;
            arr[i] = r;
            total += r;
        }
        let check = false;
        for(let i = 0; i < arr.length; i++){
            let check2 = false;
            for(let j = 0; j < arr.length; j++){
                if(i != j && arr[i] == arr[j]) check2 = true;
            }
            if(check2 == true) check = true;
        }  
        if(check == false && total == 20) break;
        }
    }
    let arr = [0, 0, 0];
    total20(arr);
    document.write("arr = " + arr + "<br>");
</script>

 


함수2_문제03_가위바위보.html

 

<script>

    /*
        [문제]
            아래 배열은 철수와 민수의 가위바위보 데이터이다.
            왼쪽이 철수의 데이터이고 오른쪽이 민수의 데이터이다
            민수와 철수는 계단 50번째에서 게임을 시작했으며,
            아래의 규칙을따른다.
        [규칙]
            이기면 계단 5증가
            비기면 계단 1증가
            지면 계단 3감소
       
            철수의 변화하는 위치를 전부 pos 배열에 저장해주는
            함수를 만드시오.
        [정답]
            pos = 50,55,52,49,50,51,56
    */
    function temp (arr, pos){
       
        for(let i = 0; i < arr.length; i++){
            let index = pos[i];
            if(arr[i][0] == arr[i][1]) index ++;
            else if(arr[i][0] == "바위" && arr[i][1] == "가위") index += 5;
            else if(arr[i][0] == "가위" && arr[i][1] == "") index += 5;
            else if(arr[i][0] == "" && arr[i][1] == "바위") index += 5;
            else index -= 3;
            pos.push(index);
        }
       
    }

    let pos = [50];
    let arr = [
        ["바위", "가위"],
        ["바위",   ""],
        ["",   "가위"],
        ["가위", "가위"],
        ["바위", "바위"],
        ["",   "바위"]
    ];

    temp(arr, pos);
    document.write("pos = " + pos + "<br>");

</script>

 

 


함수2_문제04_택시.html

 

<script>

    /*
        [문제]
            현재 택시는 5, 5 위치에 있다.
            배열의 왼쪽 세로 줄은 속도를 뜻한다.
            배열의 오른쪽 세로 줄은 방향을 뜻한다.
            속도와 방향은 택시가 매번 이동한 내용을 기록한 것이다.
            6번 모두 이동한 후 택시의 위치를 구해주는 함수를 만드시오.
        [정답]
            {'y': 5, 'x': 5}
            {'y': 9, 'x': 5}
            {'y': 9, 'x': 9}
            {'y': 8, 'x': 9}
            {'y': 8, 'x': 4}
            {'y': 8, 'x': 0}
            {'y': 8, 'x': 2}
    */
    function curpos(taxi, pos){
        for(let i = 0; i < taxi.length; i++){
            document.write(JSON.stringify(pos) + "<br>");
            if(taxi[i][1] == "") pos[0]["y"] += taxi[i][0];
            else if(taxi[i][1] == "") pos[0]["x"] += taxi[i][0];
            else if(taxi[i][1] == "") pos[0]["y"] -= taxi[i][0];
            else if(taxi[i][1] == "") pos[0]["x"] -= taxi[i][0];
        }
        document.write(JSON.stringify(pos) + "<br>");
    }
    let taxi = [
        [4, ""],
        [4, ""],
        [1, ""],
        [5, ""],
        [4, ""],
        [2, ""]
    ];
    let pos = [
        {"y" : 5 , "x" : 5}
    ]
    curpos(taxi, pos);

</script>

 

 


함수2_문제05_학생관리.html

 

<script>

    /*
        [문제1]
            여학생들 점수 총합과 남학생들의 점수 총합을 비교하고
            점수가 더 큰쪽을 출력해주는 함수를 만드시오.
        [정답1]
            333
    */
    /*  
        [문제2]
            평균이 60점이상이면 합격이다.
            합격생들의 번호, 이름, 점수를 출력해주는 함수를 만드시오.
        [정답2]
            1003 김민정 64.5
            1005 오만석 64.5
    */
    /*
        [문제3]
            랜덤으로 학생의 이름을 전달하면
            그 학생의 번호 및 점수를 출력해주는 함수를 만드시오.
        [예시3]
            1003번 64, 65
    */
    /*  
        [문제4]
            국어점수가 수학점수 보다 큰 학생들의
            번호, 이름을 출력해주는 함수를 만드시오.
        [정답4]
            1002번 이영희
    */
    /*  
        [문제5]
            총점 1등의 번호, 이름을 출력해주는
            함수를 만드시오.
            단, 여러명이면 전부 출력하시오.
        [정답5]
            1003번 김민정
            1005번 오만석
    */

    //문제1
    function 총합(student, score){
        let total_M = 0;
        let total_L = 0;
        for(let i = 0; i < student.length; i++){
            let sum = score[i][1] + score[i][2];
            if(student[i][2] == "") total_M += sum;
            else if(student[i][2] == "") total_L += sum;
        }
        if(total_M > total_L) document.write(" 남 : " + total_M + "<br>");
        else document.write(" 여 : " + total_L + "<br>");
    }
   
    //문제2
    function 평균(student, score){
        for(let i = 0; i < score.length; i++){
            let avg = (score[i][1] + score[i][2])/ 2;
            if(avg >= 60){
                document.write(score[i][0] + "  " + student[i][1] + "  " + avg.toFixed(1) + "<br>");
            }
        }
        document.write("<br>");
    }
    //문제3
    function 이름 (student, score, name){
        for(let i = 0; i < student.length; i++){
        if(student[i][1] == name){
            document.write(student[i][0] + "" + " 국어 = " + score[i][1] + " 수학 = " + score[i][2] + "<br>");
        }    
        }
    }
    //문제4
    function 국어 (student, score){
        for(let i = 0; i < score.length; i++){
            if(score[i][1] > score[i][2]){
                document.write(student[i][0] + " " + student[i][1] + "<br>");
            }
        }
    }
    //문제5
    function 일등 (student, score){
        let max = 0;
        for(let i = 0; i < score.length; i++){
            let total = score[i][1] + score[i][2];
            if(total > max) max = total;
        }
        for(let i = 0; i < score.length; i++){
            let sum = score[i][1] + score[i][2];
            if(max == sum){
                document.write(student[i][0] + "" + student[i][1] + "<br>")
            }
        }
    }


    let student = [
        ["번호", "이름", "성별"],
        [1001, "이만수", ""],
        [1002, "이영희", ""],
        [1003, "김민정", ""],
        [1004, "이철민", ""],
        [1005, "오만석", ""],
        [1006, "최이슬", ""]
    ];
   
    let score = [
        ["번호", "국어", "수학"],
        [1001 , 10, 20],
        [1002 , 70, 30],
        [1003 , 64, 65],
        [1004 , 13, 87],
        [1005 , 49, 80],
        [1006 , 14, 90]
    ];

    총합(student, score);
    평균(student, score);
    let r = Math.floor(Math.random() * (student.length - 1)) + 1 ;
    document.write("r = " + r + " 학생이름 = " + student[r][1] + "<br>");
    이름(student, score, student[r][1]);
    국어(student, score);
    일등(student, score);
</script>