# 결정 내리기: 학생 성적 처리기 ## 학습 목표 이 과제에서는 이번 수업의 의사결정 개념을 연습하기 위해 서로 다른 성적 체계에서 학생 성적을 처리하는 프로그램을 만듭니다. `if...else` 문, 비교 연산자, 논리 연산자를 사용하여 어떤 학생들이 과목을 통과하는지 판단합니다. ## 도전 과제 최근 다른 기관과 합병한 학교에서 근무 중입니다. 이제 완전히 다른 두 성적 체계에서 학생 성적을 처리하고 어떤 학생이 합격인지 결정해야 합니다. 조건부 논리를 연습하기에 완벽한 기회입니다! ### 성적 체계 이해하기 #### 첫 번째 성적 체계 (숫자) - 성적은 1-5 사이의 숫자로 주어짐 - **합격 점수**: 3 이상 (3, 4, 또는 5) - **낙제 점수**: 3 미만 (1 또는 2) #### 두 번째 성적 체계 (문자 성적) - 성적은 문자로 표기: `A`, `A-`, `B`, `B-`, `C`, `C-` - **합격 점수**: `A`, `A-`, `B`, `B-`, `C`, `C-` (모든 나열된 성적은 합격) - **참고**: 이 체계에는 `D`나 `F`와 같은 낙제 성적은 포함되지 않음 ### 수행 과제 다음 배열 `allStudents` 가 모든 학생과 그들의 성적을 나타냅니다. 각 성적 체계에 따라 합격한 모든 학생을 포함하는 새 배열 `studentsWhoPass`를 만드세요. ```javascript let allStudents = [ 'A', // 학점 - 합격 'B-', // 학점 - 합격 1, // 숫자 점수 - 불합격 4, // 숫자 점수 - 합격 5, // 숫자 점수 - 합격 2 // 숫자 점수 - 불합격 ]; let studentsWhoPass = []; ``` ### 단계별 접근법 1. `allStudents` 배열의 각 성적을 **반복문으로 순회**합니다. 2. 성적 유형을 **확인**합니다 (숫자인가 아니면 문자열인가?). 3. 적절한 성적 체계 규칙을 **적용**합니다: - 숫자일 경우: 성적 >= 3 인지 확인 - 문자일 경우: 유효한 합격 문자 성적인지 확인 4. 합격한 성적을 `studentsWhoPass` 배열에 **추가**합니다. ### 유용한 코드 기법 이번 수업에서 다룬 JavaScript 개념을 사용하세요: - **typeof 연산자**: `typeof grade === 'number'` 로 숫자 성적인지 확인 - **비교 연산자**: 숫자 성적 비교할 때 `>=` 사용 - **논리 연산자**: 여러 문자 성적 조건을 확인할 때 `||` 사용 - **if...else 문**: 서로 다른 성적 체계 처리 - **배열 메서드**: 합격 성적을 새 배열에 추가할 때 `.push()` 사용 ### 예상 결과 프로그램을 실행하면 `studentsWhoPass` 배열에 `['A', 'B-', 4, 5]`가 포함되어야 합니다. **이 성적들이 합격하는 이유:** - `'A'`와 `'B-'`는 유효한 문자 성적이며 이 체계에서는 모두 합격 - `4`와 `5`는 숫자 성적이고 3 이상임 - `1`과 `2`는 숫자 성적이고 3 미만이므로 불합격 ## 솔루션 테스트하기 다양한 시나리오로 코드를 테스트하세요: ```javascript // 다양한 학점 조합으로 테스트하십시오 let testGrades1 = ['A-', 3, 'C', 1, 'B']; let testGrades2 = [5, 'A', 2, 'C-', 4]; // 유효한 학점의 모든 조합에서 작동해야 합니다 ``` ## 보너스 도전과제 기본 과제를 완료한 후 다음 확장 과제를 시도하세요: 1. **유효성 검사 추가**: 음수나 유효하지 않은 문자 성적 등 잘못된 성적 확인 2. **통계 계산**: 합격한 학생과 불합격한 학생 수 계산 3. **성적 변환**: 모든 성적을 하나의 숫자 체계로 변환 (예: A=5, B=4, C=3 등) ## 평가 기준 | 평가 기준 | 우수 (4) | 우수 수준 (3) | 발전 중 (2) | 초급 (1) | |----------|---------------|----------------|----------------|---------------| | **기능성** | 두 성적 체계 모두에서 합격 성적을 정확히 식별 | 사소한 문제나 예외는 있지만 작동 | 부분적으로 작동하나 논리 오류 있음 | 심각한 오류가 있거나 작동하지 않음 | | **코드 구조** | 깔끔하고 잘 조직된 코드, 적절한 if...else 논리 사용 | 적절한 조건문으로 좋은 구조 | 조직에 일부 문제 있으나 허용 가능 | 구조가 부실하고 논리 이해가 어려움 | | **개념 활용** | 비교 연산자, 논리 연산자, 조건문을 효과적으로 활용 | 수업 개념을 잘 사용하나 약간의 누락 있음 | 일부 개념 사용하나 주요 사항 누락 | 수업 개념 활용이 제한적임 | | **문제 해결** | 문제에 대한 명확한 이해와 우아한 해결 방법 제시 | 좋은 문제 해결 접근과 탄탄한 논리 | 적절하나 혼동이 일부 있음 | 접근이 불분명하고 이해 부족 | ## 제출 지침 1. 제공된 예제로 코드를 **철저히 테스트**하세요. 2. 특히 조건문에 대해 **논리를 설명하는 주석**을 추가하세요. 3. 출력 결과가 예상한 대로 `['A', 'B-', 4, 5]`와 일치하는지 **검증**하세요. 4. 빈 배열이나 예기치 않은 데이터 유형 같은 **경계 상황**도 고려하세요. > 💡 **전문가 팁**: 간단하게 시작하세요! 우선 기본 기능이 작동하도록 한 후에 더 복잡한 기능을 추가하세요. 이번 수업에서 배운 도구로 의사결정 로직을 연습하는 것이 목표입니다. --- **면책 조항**: 이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있으나 자동 번역에는 오류나 부정확성이 포함될 수 있음을 양지해 주시기 바랍니다. 원문 문서는 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우 전문 인력에 의한 번역을 권장합니다. 본 번역 사용으로 인한 오해나 잘못된 해석에 대해서는 당사가 책임지지 않습니다.