수업끄적끄적_7MONTH/JavaScript

12/12 수업 (29일차)

개미의 베짱이 2023. 12. 12. 17:43

** 삼항연산자 **

: if else 문을 삼항 연산자를 이용해 간단히 표현가능

문법)표현식?반환값1:반환값2;

 

** switch 문 **

문법)switch (조건값){

case1: 조건 값이 값1일 떄 실행하고자 하는 실행문;

break;

case2: 조건 값이 값2일 떄 실행하고자 하는 실행문;

break;

...

dufault:

{ 조건값이 어떠한 case절에도 해당하지 않을 때 실행하고자 하는 실행문; }

 

- default 절의 위치가 반드시 switch 문의 맨 마지막일 필요는 없음

 

** 문제 1212 **

        /*
        문제)과목 점수를 입력을 받아 학점을 출력하는 프로그램
             과목점수는 0~100점 이며, 범위가 초과되면 "0~100점 사이 값을 입력하세요." 라고 화면에 출력.
             (화면에 출력 document.write 사용)
             과목점수가 정상 입력되었을 경우.
             90~100 : A, 80~89 : B, 70~79 : C, 60~69 : D, 나머지 : F 로 학점(grade)를 구하고
             A인 경우 "잘했습니다."
             B인경우 "잘했습니다."
             C인 경우 "조금만 노력하면 잘 할수 있습니다."
             D인 경우 "좀 더 노력하세요"
             F인 경우 "많이 노력하기 바랍니다."
        입력예)과목점수를 입력하세요.
               85
        출려계)잘했습니다.
               당신의 학점은 B입니다. (단, B는 <b>태그 이용)
        단, 출력은 document.write로 사용.
        */

* 소스 *

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>학점 환산 프로그램</title>
</head>
<body>
    <script>
        var score = parseInt(prompt("점수를 입력하세요."));
        var grade="";

        if(score < 0 && 100 < score){
        document.write("0~100점 사이 값을 입력하세요.");
        }

        else{
            if(score >= 90){
            grade = "A";
            document.write("아주 잘했습니다.<br />");
            }
            else if(score >= 80){
                grade = "B";
                document.write("잘했습니다.<br />");
            }
            else if(score >= 70){
                grade = "C";
                document.write("조금만 노력하면 잘 할수 있습니다.<br />");
            }
            else if(score >= 60){
                grade = "D";
                document.write("좀 더 노력하세요<br />"); 
            }
            else{
                grade = "F";
                document.write("많이 노력하기 바랍니다.<br />"); 
            }
            document.write("당신의 점수는 <b>" + grade + "</b>입니다.");
        }

    </script>
    
</body>
</html>

** 1212_2 예제 (switch문 오늘 요일 출력) **

 

** 1212_2  문제 1 (커피 주문) **

        /*
        문제)커피를 주문하는 과정 중 어떤 커피를 주문 할 지 입력을 받은 후 출력하는 프로그램
        입력예)무슨 커피 드릴까요?
               아이스아메리카노
        출력예)아이스아메리카노 1500월 입니다.
        단, 아이스아메리카노(icecoffee) : 1500
            카페라떼 : 4500
            바닐라라떼 : 5500
            나머지는 '000은(는) 없습니다.'
            출력시 금액이 있는 경우가 정상적인 경우로 판다.
        */   

 

* 1212_2  문제 2 (요일별 영업) *

        /*
        문제)요일을 입력받아 정상영업인지 휴무일인지 알려주는 스크립트 구현.
             입력은 prompt()함수 사용.
             월화수목금은 정상영업, 토일은 휴무라고 출력
        입력예)요일을 입력하세요.
               화
        출력예)화요일은 정상영업
        단, 출력을 switch문에서 처리.
            ...요일은 정상영업 / ...요일은 휴무 / ...은 요일이 아닙니다.
        */

 

 

** 1212_2  문제 3 (성적) **

        /*
        문제)성적 A~F 값을 입력 받아 출력.
        입력예)성적을 입력하세요.
               a
        출력예)아주 잘했습니다.
        단, 성적입력은 A,B,C,F에 대해서만 처리하며 성적은 무조건 대문자로 처리하게 함.
            (대문자 변환 함수 : 변수명.toUpperCase())
            입력변수 grade 한개만 사용하여 처리.
            A : 아주 잘했습니다., B : 좋은 점수군요., C : 조금 더 노력하세요. , F : 다음 학기 수강하세요.
            나머지 : 알 수 없는 학점입니다.
            메세지 출력은 alert으로 처리.
        */

 

* 소스 1212_2 *

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>제어문(switch)</title>
</head>
<body>
    <script>
        var day;
        var week = new Date().getDay();     //0(일요일)~6(토요일)
        /*
        switch(week){
            case 0:
                day = "일요일";
                break;
            case 1:
                day = "월요일"; break;
            case 2:
                day = "화요일";
                break;
            case 3:
                day = "수요일";
                break;
            case 4:
                day = "목요일";
                break;
            case 5:
                day = "금요일";
                break;
            case 6:
                day = "토요일";
                break;
            default:
                day = "없는 요일";
            }
        document.write("<h1>오늘은 <b>" + day + "</b>입니다.<h1");
        */


        /* 1
        문제)커피를 주문하는 과정 중 어떤 커피를 주문 할 지 입력을 받은 후 출력하는 프로그램
        입력예)무슨 커피 드릴까요?
               아이스아메리카노
        출력예)아이스아메리카노 1500월 입니다.
        단, 아이스아메리카노(icecoffee) : 1500
            카페라떼 : 4500
            바닐라라떼 : 5500
            나머지는 '000은(는) 없습니다.'
            출력시 금액이 있는 경우가 정상적인 경우로 판다.
        
        
        var type = prompt("무슨 커피 드릴까요?");
        var price="";       
        //var price="" 초기값을 세팅하지 않으면 if(price != undefined) 또는 0으로 세팅 후 (price != 0)으로 가능

        switch(type){
            case ("아이스아메리카노"):
            case ("icecoffee"):
                price = 1500;
                break;
            case "카페라떼":
                price = 4500;
                break;
            case "바닐라라떼":
                price = 5500;
                break;
            default:
                document.write(type + "은(는) 없습니다.");
        }
        
        if(price != ""){document.write(type + " " + price + "원 입니다.");}
        */


        /* 2
        문제)요일을 입력받아 정상영업인지 휴무일인지 알려주는 스크립트 구현.
             입력은 prompt()함수 사용.
             월화수목금은 정상영업, 토일은 휴무라고 출력
        입력예)요일을 입력하세요.
               화
        출력예)화요일은 정상영업
        단, 출력을 switch문에서 처리.
            ...요일은 정상영업 / ...요일은 휴무 / ...은 요일이 아닙니다.
        
        
        var day = prompt("요일을 입력하세요.");

        switch(day){
            case '월':
            case '화':
            case '수':
            case '목':
            case '금':
                document.write(day + "요일은 정상영업");
                break;
            case '토':
            case '일':day
                document.write(day + "요일은 휴무");
                break;
            default:
                document.write(day + "은 요일이 아닙니다.");
        }
        */

        /* 3
        문제)성적 A~F 값을 입력 받아 출력.
        입력예)성적을 입력하세요.
               a
        출력예)아주 잘했습니다.
        단, 성적입력은 A,B,C,F에 대해서만 처리하며 성적은 무조건 대문자로 처리하게 함.
            (대문자 변환 함수 : 변수명.toUpperCase())
            입력변수 grade 한개만 사용하여 처리.
            A : 아주 잘했습니다., B : 좋은 점수군요., C : 조금 더 노력하세요. , F : 다음 학기 수강하세요.
            나머지 : 알 수 없는 학점입니다.
            메세지 출력은 alert으로 처리.
        */

        var grade = prompt("성적을 입력하세요.");
        grade = grade.toUpperCase();   //var grade = prompt("성적을 입력하세요.").toUpperCase();

        switch(grade){
            case 'A':
                alert("아주 잘했습니다.");
                break;
            case 'B':
                alert("좋은 점수군요.");
                break;
            case 'C':
                alert("조금 더 노력하세요.");
                break;
            case 'F':
                alert("다음 학기 수강하세요");
                break;
            default:
                alert("알 수 없는 학점입니다.");
        }


    </script>
</body>
</html>

** 1212_3 문제 (숫자 맞추기 게임)**

* <head>에 함수 정의 해보기 *

<body>
    <h1>숫자 맞추기 게임</h1>
    이 게임은 컴퓨터가 생성한 숫자를 맞추는 게임입니다. 숫자는 1부터 100사이에 있습니다.<br />
    숫자 : <input type="text" id="user" size="5" />
    <input type="button" value="확인" onclick="guess()" /><br />
    추측 횟수 : 
    <input type="text" id="guesses" size="5">
    힌트 : <input type="text" id="result" size="16" />
</body>

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>숫자 맞추기 게임</title>
    <script>
        /*
        입력값이 낮을 경우는 '낮습니다.', 높을 경우는 '높습니다.', 맞은 경우는 '성공입니다.'
        */
        var computerNumber = 53;
        var nGuessess = 0;
        var cnt = 0;
        //myNumber = document.getElementById("user").value; 
        //-> 헤드가 먼저 실행되기 때문에 document.getElementById("user").value 아직 없다. 따라서 바디 안의 무언가 가지고오려면 함수 안에서 하는 것이 좋다.

        function guess(){
            if(cnt==1){nGuessess=0; cnt=0;}
            
            var result = "";
            myNumber = document.getElementById("user").value;
            nGuessess++; //어떤 경우든 시도는 한 것이기에 확인버튼 누를 시 증가하도록 후 맨 아래에 값 대입
            
            
            if(myNumber < computerNumber){
                result = myNumber + "보다 높습니다..";
                alert("틀렸습니다.");
                document.getElementById("user").value = "";
                document.getElementById("user").focus();

            }
            else if(myNumber > computerNumber){
                result = myNumber + "보다 낮습니다..";
                document.getElementById("user").focus();
                alert("틀렸습니다.");
                document.getElementById("user").value = "";
                document.getElementById("user").focus();
            }
            else if(myNumber == computerNumber){
                result = "성공입니다!";
                cnt=1;
            }
            else{
                document.getElementById("result").value = '숫자를 입력하세요';
                alert("숫자를 입력하세요.");
                document.getElementById("user").value = "";
                document.getElementById("user").focus();
            }
            
            document.getElementById("guesses").value = nGuessess;
            document.getElementById("result").value = result;
        }
    </script>
</head>
<body>
    <h1>숫자 맞추기 게임</h1>
    이 게임은 컴퓨터가 생성한 숫자를 맞추는 게임입니다. 숫자는 1부터 100사이에 있습니다.<br />
    숫자 : <input type="text" id="user" size="5" />
    <input type="button" value="확인" onclick="guess()" /><br />
    추측 횟수 : 
    <input type="text" id="guesses" size="5">
    힌트 : <input type="text" id="result" size="16" />
</body>
</html>

 


* 반복문 : 같은 명령을 일정횟수만큼 반복하여 수행하도록 제어하는 실행문

while 문 

do / while 문

for문

for / in 문

for / of 문

 

cf) 하나의 태그에 열고닫고 <br /> <input />

 


** 문제 1212_5 (구구단표 작성해보기) **

 


** 문제 1212_6 (prompt / innerHTML 두가지로 구구단 출력해보자) **

       /*
        문제) 구구단을 작은 수와 큰 수 순서로 입력받아 구구단 출력하는 프로그램
        입력예)시작단을 입력하세요.2
               끝단을 입력하세요.3
        출력예)2단
               2 * 1 =2
               ...
               2 * 9 = 18

               3단
               3 * 1 = 3
               ...
               3 * 9 = 27
        단, 입력받은 값은 숫자로 변환함.
            1. prompt 사용하여 구구단출력
            2. html imput=text에서 입력받아 버튼 클릭시 구구단 출력
               시작단 : num1 , 끝단 : num2 버튼 클릭시 호출함수는 gugu()
               <p id="tab"></p> : 이부분에 구구단 출력
        */

* 방법1

 

* 방법 2

 

→방법2 <head> 

<script> 속 함수

 

 

 

 

 

 

 

 

 

* 소스

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>반복제어문</title>
    <script>
        /*
        문제) 구구단을 작은 수와 큰 수 순서로 입력받아 구구단 출력하는 프로그램
        입력예)시작단을 입력하세요.2
               끝단을 입력하세요.3
        출력예)2단
               2 * 1 =2
               ...
               2 * 9 = 18

               3단
               3 * 1 = 3
               ...
               3 * 9 = 27
        단, 입력받은 값은 숫자로 변환함.
            1. prompt 사용하여 구구단출력
            2. html imput=text에서 입력받아 버튼 클릭시 구구단 출력
               시작단 : num1 , 끝단 : num2 버튼 클릭시 호출함수는 gugu()
               <p id="tab"></p> : 이부분에 구구단 출력
        */
        function gugu(){
            var i,j;
            var result = "";    //누적하려면 초기값 세팅해줘야한다.

            var n1 = document.getElementById("num1").value;
            var n2 = document.getElementById("num2").value;

            for(i = n1; i<=n2 ; i++){
                result += "<br />" + i + "단<br />";
                for(j=1 ; j<10 ; j++){
                    result += i + ' * ' + j + " = " + i*j + "<br />"
                }
            }

            /*
            //위의 포문과 같은 방법
            for(i=n1 ; i<=n2 ; i++){
                document.getElementById("tab").innerHTML += "<br ?>" + i + "단<br />";
                for(j=1 ; j<10 ;j++){
                    document.getElementById("tab").innerHTML += i + ' * ' + j + " = " + i*j + "<br />";
                }
            }
            */
            
            // document.getElementById("tab").innerHTML = result;
        }
    </script>
</head>
<body>
    
    <!-- 방법1. -->

    <!-- <script>
        num1 = parseInt(prompt("시작단을 입력하세요."));
        num2 = parseInt(prompt("끝단을 입력하세요."));
        var i,j;

        for(i = num1; i<=num2 ; i++){
            document.write("<br />" + i + "단<br />");
            for(j=1 ; j<10 ; j++){
                document.write(i + ' * ' + j + " = " + (i*j) + "<br />");
            }
        }

    </script> -->

    <!-- 방법2 -->

    시작단을 입력하세요. <input type="text"  name="num1" id="num1" size="3" >&nbsp;   
    끝단을 입력하세요. <input type="text" name="num2" id="num2" size="3">

    <input type="button" name="chk" onclick="gugu()" value="확인" /><br />

    <p id="tab">여기에 innerHTML을 이용해 구구단출력을 해요(덮어쓰기)</p>
</body>
</html>

** 문제 1212_7 (3의 배수를 제외한 숫자 출력_continue / continue사용 x) **

/* 1212_7
문제) for문을ㅣ용하여 1~100까지 출력하며 3의 배수는제외하고출력하는 스크립트 작성(continue문 사용)
출력예)1 2 4 5 7 8 10 11 ..... 100
*/

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>반복제어문</title>
</head>
<body>
    <script>
        /* 1
        문제) for문을ㅣ용하여 1~100까지 출력하며 3의 배수는제외하고출력하는 스크립트 작성(continue문 사용)
        출력예)1 2 4 5 7 8 10 11 ..... 100
        */
        var i;
        // for(i = 1 ; i <= 100 ; i++){
        //     if(i%3==0){
        //         continue;
        //     }
        //     document.write(i+"&nbsp");
        // }

        //위와 동일한 결과로 continue 사용하지 않고 결과 출력
        for(i=1 ; i < 100 ; i++){
            if(i%3==0){
                document.write(i+" ");
            }
        }
    </script>
    <br /><br />

    <h1>for/ in 문</h1>
    <script>
        var arr = [3,4,5];

        for(var i = 0 ; i < arr.length ; i++){
            document.write(arr[i] + " ");
        }

        document.write("<br /><br />");

        for(var i in arr){
            document.write(arr[i] + " ");
        }

        /* 2
        문제)구구단을 출력하는 스크립코드 작성.
             시작단과 끝단을 prompt로 입력받아 작은단에서부터 큰단을 출력하는 스크립트 작성.
             단, 시작단 입력 변수는 num1, 끝단 입력 변수는 num2 로 하되 작은단부터 출력을 위해
             변수는 num1부터 num2까지 출력(작은단에서 큰단으로 출력)
        입력예)시작단을 입력하세요.
               5
               끝단을 입력하세요.
               3
        출력예)3단
               3 * 1 = 3
               ...
               3 * 9 = 29

               5단
               5 * 1 = 5
               ...
               5 * 9 = 45
        */
        document.write("<br /><br />");
        var num1,num2,tmp;
        var i,j;

        num1 = parseInt(prompt("시작단을 입력하세요.", "숫자로 입력하세요"));
        num2 = parseInt(prompt("끝단을 입력하세요.", "숫자로 입력하세요"));

        if(num1 > num2){
            tmp = num1;
            num1 = num2;
            num2 = tmp;
        }
        for(i=num1 ; i<=num2 ; i++){
            document.write("<b>" + i + "단 </b><br />");
            for(j=1 ; j<=9 ; j++){
                document.write(i + " * " + j + " = " + (i*j) + "<br />");
            }
            document.write("<br />");
        }
    </script>
</body>
</html>

 




 

** for / in 문 **

- 해당 객체의 열거할 수 있는 모든 프로퍼티는 순회할 수 있도록 해줌.

문법 ) for(변수 in 객체){

                 객체의 열거할 수 있는 모든 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문;      }

 

 


** 문제 1212_7 (구구단출력) **

 

 

 

 

 

 

 

 

 

 

 

 

https://ofcourse.kr/