https://www.ybmit.com/test_rec/grp_rec_cos_main.jsp?UnivGubun=G&UnivCode=IKG057&b_category=COS
https://drive.google.com/file/d/0B5VHKJjn9gCTeGZuZzF4cEtJLXM/view?usp=sharing
아시아그룹 - Programming Language
2017년 6월 7일 수요일
2017년 3월 27일 월요일
Section 03 프로그래밍 기본 개념 익히기
Step 01 스프라이트와 무대 설정하기
01>> 메인 화면에서 [만들기] 메뉴를 클릭해 새로운 프로젝트를 시작
02>>
1. 기본으로 설정되어 있는 'Sprite1(고양이)' 스프라이트 삭제
2. 스프라이트에 마우스 포인터를 올려놓은 후 마우스 오른쪽 버튼 클릭하면 삭제 선택가능
03>>
1. 새로운 프로젝트 불러오기
2. [스프라이트] 창의 [새로운 스프라이트] - [저장소에서 스프라이트 선택]을 클릭
04>> 스프라이트의 저장소의 외쪽 카테고리 창에서 '동물' 항목 선택
05>> 이번 프로젝트에 사용할 'Monkey2' 선택 후 확인 .
06>> 'Fox' 스프라이트도 같은 방법으로 선택
07>> [스프라이트] 창에서 새로 추가된 스프라이트 확인
08>>
1. [스프라이트 정보] 창에서 해당 스프라이트 이름 수정
2. 'Monkey2' -> '원숭이' 'Fox' -> '여우1'
09>> 툴바에서 축소 아이콘을 클릭 후 '원숭이' 및 '여우1' 축소
10>> [무대 정보] 창의 [저장소에서 배경 선택]을 클릭
11>>[자연] 항목 카테고리를 선택한 후 'forest' 배경을 선택 후 [확인]
12>> [실행] 창과 [무대 정보] 창에서 배경이 새로 등록된 것을 확인
Step 02 '원숭이' 스프라이트 움직이기
오른쪽 방향키를 사용하여 오른족으로 움직이기
01>>
1. '원숭이' 스프라이트를 선택 후 블록 모음에서 제어 카테고리 클릭
2. '만약 <> 라면' 을 드래그해서 [스크립트] 창에 옮겨 놓습니다.
02>>
1. 블록 모음에서 관찰 카테고리를 선택
2. '<스페이스> 키를 눌렀는가?' 를 드래그 하여 '만약<>라면' 의 조건 영역에 끼워 넣습니다.
3. '스페이스' 라고 써있는 부분의 오른족 삼각형을 클릭하여 [오른쪽 화살표] 선택
03>> 블록 모음에서 동작 카테고리를 선택한 후 'x좌표를 10 만큼 바꾸기' 를 드래그해서
'만약 <>라면' 의 실행 영역에 끼워 넣습니다.
04>> 블록 모음에서 제어 카테고리를 클릭하고 무한 반복하기 를 선택하여 조건문 전체를 감쌈
방향키를 사용해 자유자재로 이동시키기
01>> '만약<>라'면 에서 마우스 오른쪽 단추를 클릭하여 복사를 선택
02>>
1. 복사한 블록을 원래 있던 조건문 아래에 연결
2. '오른쪽 화살표'를 '왼쪽 화살표' 로 변경
3. 왼쪽 화살표를 눌렀을 때는 왼쪽으로 이동하도록 x좌료를 10 만큼 바구기의 숫자를 '10'에서 -10'으로 변경
03>> 같은 방식으로 위와 아래로도 움직일 수 있게 스크립트트 작성
역동적인 동작 연출하기
01>> 블록 모음에서 '무한 반복하기' 를 하나 더 생성
02>> 블록 모음에서 형태 카테고리를 클릭 후 '다음 모양으로 바꾸기' 를 드래그하여 '무한 반복하기' 의 실행 영역에 삼입
03>>
1. 블록 모음에 제어 카테고리 클릭 후 '1초 기다리기' 를 드래그하여 다음 모양으로 바꾸기 밑에 끼워 넣음
2. 1초 기다리기 안의 '1'은 '0.2' 로 변경
Step 03 '여우' 스프라이트 움직이기
01>>
1. [스프라이트] 창에서 '여우 1' 스프라이트 선택 후 블록 모음에서 제어 카테고리 클릭 후 '무한 반복하기' 를 드래그해서 [스크립트]창으로 가져옴.
2. 동작 카테고리를 클릭 후 ' 쪽 보기' 를 가져와 반복문의 실행 영역에 결합
3. '쪽 보기' 에서 선택사항을 클릭해 '원숭이'로 변경
02>>
1. '10만큼 움직이기' 를 ' 쪽 보기' 밑에 결합하고, 숫자를 '5'로 변경
2. '10만큼 움직이기' 의 숫자 '10'을 '5'로 변경
03>> '여우1' 스프라이트 복사하여 '여우2' 스프라이트 생성
04>> 여우 1과 여우2의 [스프라이트 정보] 창에서 회전 방식 [좌-우 회전] 으로 선택
Step 04 여우에게 잡혔을 때 원숭이가 반응하기
01>>
1. '원숭이' 스프라이트를 선택한 후
2. 제어 카테고리에서 '무한 반복하기' 와 '만약 <> 라면' 을 스크립트 창으로 가져와 결합
02>>
1. 연산 카테고리에서 논리 연산자인 '<> 또는 <>' 을 가져옴
2. 관찰 카테고리에서 '<>에 닿았는가?' 를 가져옴
3. 선택 사항을 '여우1'로 바꾼 후 블록을 드래그해서 '<> 또는 <>' 에 결합
03>>
1. '<>에 닿았는가?' 를 복사한 후 복사된 블록을 오른쪽 빈자리에 결합
2. 결합한 블록의 선택사항을 '여우2'로 변경
3. 결합된 전체 블록을 드래그하여 '만약 <> 라면' 의 조건 영역에 결합
04>>
1. 형태 카테고리에서 'ㅁ을 O초동안 말하기' 를 조건문의 실행 영역에 결합
2. 블록의 빈칸에 원숭이가 여우에게 붙잡혔을 때에 할 말의 내용을 적음
3. 블록의 빈칸에 숫자를 0.5로 변경
4. 제어 카테고리에서 '모두 멈추기'를 가져와 'ㅁ을 O초동안 말하기' 다음에 결합
Step 05 시작 설정과 스프라이트 위치 초기화
01>>
1. '원숭이' 스프라이트를 선택 후 이벤트 카테고리에서 'P 클릭했을 때' 를 드래그해
각각의 스크립트 맨 위에 결합
2. '여우1' 스프라이트와 '여우2'스프라이트도 선택하여 같은 방법으로 추가
02>>
1. '원숭이' 스프라이트를 드래그하여 원하는 시작위치로 이동
2. 동작 카테고리에서 'x: O y: O 이동하기'를 'P 클릭했을 때' 밑에 결합.
3. '여우1'과 '여우2' 스프라이트도 동일한 방식으로 위치 초기화
4. 정상 작동 확인.
학습정리
1. 조건문은 어떤 명제가 참인지 거짓인지에 따라 다음에 실행할 명령어가 달라지는 것을 의미합니다. '조건 영역'이 참이면 '실행 영역'이 실행되고, '조건 영역'이 거짓이면 '실행 영역'이 실행되지 않습니다.
2. 반복문은 조건을 만족하는 동안에 특정 영역을 반복 실행합니다. 만약 '조건 영역'이 '무한'이라면 '실행영역'은 계속해서 반복 실행됩니다.
3. [스프라이트 정보] 창에서는 스프라이트에 관한 정보들을 알아볼 수 있습니다.
모양: 선택한 스프라이트의 현재 모양을 표시합니다.
이름: 스프라이트의 이름을 나타냅니다.
위치 좌표: 스프라이트의 현재 위치에 해당하는 좌표값을 나타냅니다.
방향: 스프라이트의 움직임을 실행할 방향을 표시합니다.
회전방식: 스프라이트의 회전 방식을 나타냅니다. '회전하기'와 '왼쪽-오른쪽','회전하지 않기' 등 3가지 방식 중 하나를 선택할 수 있습니다.
프로젝트 페이즈 드래그 기능: 프로젝트 페이지에서 스프라이트를 드래그하여 이동하는 것이 가능한 지를 선택합니다.
보이기: 스프라이트가 실행 창에 보이도록 할 것인지 숨겨지도록 할 것인지를 선택합니다.
창 전환: [스프라이트]창으로 전환됩니다.
4. 프로젝트를 시작할 때마다 항상 같은 상태에서 시작하도록 하는 것을 '초기화 설정' 이라고 합니다.
퀴즈 및 실습 문제
01 '만약 <> 라면' 조건문의 조건 영역에 들어갈 수 있는 블록이 아닌 것은?( )
1) ' <에 닿았는가?>'
2) ' <ㅁ < ㅁ>'
3) ' <ㅁ 색에 닿았는가?>'
4) ' O 만큼 움직이기'
02 스프라이트의 회전 방식으로 옳지 않은 것은?( )
1) 회전하기
2) 왼쪽-오른쪽
3) 외쪽-아래쪽
4) 회전하지 않기
03 오른쪽 방향키를 눌렀을 때 스프라이트가 오른쪽으로 10만큼 이동하도록 만든 스크립트로 옳은 것은?
1)



4)

04 스프라이트와 무대에 관한 문항을 읽고 O, X로 답하시오.
1) [스프라이트] 창 - [스프라이트 파일 업로드하기] 를 클릭하면 기본 제공되는 배경을 무대에 추가할 수 있다. ( )
2) 축소 아이콘을 사용하여 무대에 사용된 배경의 크기를 줄일 수 있다. ( )
3) 스프라이트의 처음 시작하는 워ㅣ치를 정해주기 위해서는 x: O y: O 로 이동하기를 사용한다. ( )
01>> 메인 화면에서 [만들기] 메뉴를 클릭해 새로운 프로젝트를 시작
02>>
1. 기본으로 설정되어 있는 'Sprite1(고양이)' 스프라이트 삭제
2. 스프라이트에 마우스 포인터를 올려놓은 후 마우스 오른쪽 버튼 클릭하면 삭제 선택가능
03>>
1. 새로운 프로젝트 불러오기
2. [스프라이트] 창의 [새로운 스프라이트] - [저장소에서 스프라이트 선택]을 클릭
04>> 스프라이트의 저장소의 외쪽 카테고리 창에서 '동물' 항목 선택
05>> 이번 프로젝트에 사용할 'Monkey2' 선택 후 확인 .
06>> 'Fox' 스프라이트도 같은 방법으로 선택
07>> [스프라이트] 창에서 새로 추가된 스프라이트 확인
08>>
1. [스프라이트 정보] 창에서 해당 스프라이트 이름 수정
2. 'Monkey2' -> '원숭이' 'Fox' -> '여우1'
09>> 툴바에서 축소 아이콘을 클릭 후 '원숭이' 및 '여우1' 축소
10>> [무대 정보] 창의 [저장소에서 배경 선택]을 클릭
11>>[자연] 항목 카테고리를 선택한 후 'forest' 배경을 선택 후 [확인]
12>> [실행] 창과 [무대 정보] 창에서 배경이 새로 등록된 것을 확인
Step 02 '원숭이' 스프라이트 움직이기
오른쪽 방향키를 사용하여 오른족으로 움직이기
01>>
1. '원숭이' 스프라이트를 선택 후 블록 모음에서 제어 카테고리 클릭
2. '만약 <> 라면' 을 드래그해서 [스크립트] 창에 옮겨 놓습니다.
02>>
1. 블록 모음에서 관찰 카테고리를 선택
2. '<스페이스> 키를 눌렀는가?' 를 드래그 하여 '만약<>라면' 의 조건 영역에 끼워 넣습니다.
3. '스페이스' 라고 써있는 부분의 오른족 삼각형을 클릭하여 [오른쪽 화살표] 선택
03>> 블록 모음에서 동작 카테고리를 선택한 후 'x좌표를 10 만큼 바꾸기' 를 드래그해서
'만약 <>라면' 의 실행 영역에 끼워 넣습니다.
04>> 블록 모음에서 제어 카테고리를 클릭하고 무한 반복하기 를 선택하여 조건문 전체를 감쌈
방향키를 사용해 자유자재로 이동시키기
01>> '만약<>라'면 에서 마우스 오른쪽 단추를 클릭하여 복사를 선택
02>>
1. 복사한 블록을 원래 있던 조건문 아래에 연결
2. '오른쪽 화살표'를 '왼쪽 화살표' 로 변경
3. 왼쪽 화살표를 눌렀을 때는 왼쪽으로 이동하도록 x좌료를 10 만큼 바구기의 숫자를 '10'에서 -10'으로 변경
03>> 같은 방식으로 위와 아래로도 움직일 수 있게 스크립트트 작성
역동적인 동작 연출하기
01>> 블록 모음에서 '무한 반복하기' 를 하나 더 생성
02>> 블록 모음에서 형태 카테고리를 클릭 후 '다음 모양으로 바꾸기' 를 드래그하여 '무한 반복하기' 의 실행 영역에 삼입
03>>
1. 블록 모음에 제어 카테고리 클릭 후 '1초 기다리기' 를 드래그하여 다음 모양으로 바꾸기 밑에 끼워 넣음
2. 1초 기다리기 안의 '1'은 '0.2' 로 변경
Step 03 '여우' 스프라이트 움직이기
01>>
1. [스프라이트] 창에서 '여우 1' 스프라이트 선택 후 블록 모음에서 제어 카테고리 클릭 후 '무한 반복하기' 를 드래그해서 [스크립트]창으로 가져옴.
2. 동작 카테고리를 클릭 후 ' 쪽 보기' 를 가져와 반복문의 실행 영역에 결합
3. '쪽 보기' 에서 선택사항을 클릭해 '원숭이'로 변경
02>>
1. '10만큼 움직이기' 를 ' 쪽 보기' 밑에 결합하고, 숫자를 '5'로 변경
2. '10만큼 움직이기' 의 숫자 '10'을 '5'로 변경
03>> '여우1' 스프라이트 복사하여 '여우2' 스프라이트 생성
04>> 여우 1과 여우2의 [스프라이트 정보] 창에서 회전 방식 [좌-우 회전] 으로 선택
Step 04 여우에게 잡혔을 때 원숭이가 반응하기
01>>
1. '원숭이' 스프라이트를 선택한 후
2. 제어 카테고리에서 '무한 반복하기' 와 '만약 <> 라면' 을 스크립트 창으로 가져와 결합
02>>
1. 연산 카테고리에서 논리 연산자인 '<> 또는 <>' 을 가져옴
2. 관찰 카테고리에서 '<>에 닿았는가?' 를 가져옴
3. 선택 사항을 '여우1'로 바꾼 후 블록을 드래그해서 '<> 또는 <>' 에 결합
03>>
1. '<>에 닿았는가?' 를 복사한 후 복사된 블록을 오른쪽 빈자리에 결합
2. 결합한 블록의 선택사항을 '여우2'로 변경
3. 결합된 전체 블록을 드래그하여 '만약 <> 라면' 의 조건 영역에 결합
04>>
1. 형태 카테고리에서 'ㅁ을 O초동안 말하기' 를 조건문의 실행 영역에 결합
2. 블록의 빈칸에 원숭이가 여우에게 붙잡혔을 때에 할 말의 내용을 적음
3. 블록의 빈칸에 숫자를 0.5로 변경
4. 제어 카테고리에서 '모두 멈추기'를 가져와 'ㅁ을 O초동안 말하기' 다음에 결합
Step 05 시작 설정과 스프라이트 위치 초기화
01>>
1. '원숭이' 스프라이트를 선택 후 이벤트 카테고리에서 'P 클릭했을 때' 를 드래그해
각각의 스크립트 맨 위에 결합
2. '여우1' 스프라이트와 '여우2'스프라이트도 선택하여 같은 방법으로 추가
02>>
1. '원숭이' 스프라이트를 드래그하여 원하는 시작위치로 이동
2. 동작 카테고리에서 'x: O y: O 이동하기'를 'P 클릭했을 때' 밑에 결합.
3. '여우1'과 '여우2' 스프라이트도 동일한 방식으로 위치 초기화
4. 정상 작동 확인.
학습정리
1. 조건문은 어떤 명제가 참인지 거짓인지에 따라 다음에 실행할 명령어가 달라지는 것을 의미합니다. '조건 영역'이 참이면 '실행 영역'이 실행되고, '조건 영역'이 거짓이면 '실행 영역'이 실행되지 않습니다.
2. 반복문은 조건을 만족하는 동안에 특정 영역을 반복 실행합니다. 만약 '조건 영역'이 '무한'이라면 '실행영역'은 계속해서 반복 실행됩니다.
3. [스프라이트 정보] 창에서는 스프라이트에 관한 정보들을 알아볼 수 있습니다.
모양: 선택한 스프라이트의 현재 모양을 표시합니다.
이름: 스프라이트의 이름을 나타냅니다.
위치 좌표: 스프라이트의 현재 위치에 해당하는 좌표값을 나타냅니다.
방향: 스프라이트의 움직임을 실행할 방향을 표시합니다.
회전방식: 스프라이트의 회전 방식을 나타냅니다. '회전하기'와 '왼쪽-오른쪽','회전하지 않기' 등 3가지 방식 중 하나를 선택할 수 있습니다.
프로젝트 페이즈 드래그 기능: 프로젝트 페이지에서 스프라이트를 드래그하여 이동하는 것이 가능한 지를 선택합니다.
보이기: 스프라이트가 실행 창에 보이도록 할 것인지 숨겨지도록 할 것인지를 선택합니다.
창 전환: [스프라이트]창으로 전환됩니다.
4. 프로젝트를 시작할 때마다 항상 같은 상태에서 시작하도록 하는 것을 '초기화 설정' 이라고 합니다.
퀴즈 및 실습 문제
01 '만약 <> 라면' 조건문의 조건 영역에 들어갈 수 있는 블록이 아닌 것은?( )
1) ' <에 닿았는가?>'
2) ' <ㅁ < ㅁ>'
3) ' <ㅁ 색에 닿았는가?>'
4) ' O 만큼 움직이기'
02 스프라이트의 회전 방식으로 옳지 않은 것은?( )
1) 회전하기
2) 왼쪽-오른쪽
3) 외쪽-아래쪽
4) 회전하지 않기
03 오른쪽 방향키를 눌렀을 때 스프라이트가 오른쪽으로 10만큼 이동하도록 만든 스크립트로 옳은 것은?
1)
2)
3)
4)
04 스프라이트와 무대에 관한 문항을 읽고 O, X로 답하시오.
1) [스프라이트] 창 - [스프라이트 파일 업로드하기] 를 클릭하면 기본 제공되는 배경을 무대에 추가할 수 있다. ( )
2) 축소 아이콘을 사용하여 무대에 사용된 배경의 크기를 줄일 수 있다. ( )
3) 스프라이트의 처음 시작하는 워ㅣ치를 정해주기 위해서는 x: O y: O 로 이동하기를 사용한다. ( )
2017년 3월 22일 수요일
Section 02 스크래치 익숙해지기
Section 02 스크래치 익숙해지기
Step 01 스크래치 기본 용어 알아보기
01>>스크래치의 기본 개념
스프라이트, 무대, 스크립트
02>>스프라이트
무대 위에서 움직일 수 있는 객체. 무대 위에 존재하는 캐릭터 그림이나 글시, 도형 등
03>>하나의 프로젝트 안에 동시에 여러개의 스트라이트 사용 가능
04>>하나의 스프라이트는 2개 이상의 모양을 가질 수 있고 필요에 따라 변화 가능
05>>무대
스프라이트가 움직이는 공간
06>>무대도 여러 가지 배경을 가질 수 있고 필요에 따라 변화 가능
07>>스크립트
사전적 의미는 각본, 대본으로 스프라이트와 무대를 작동시키기 위한 명령어 모음
08>무대도 스크립트를 가지고 변화 가능
Step 02 [프로젝트] 창 인터페이스 알아보기
01>> 메인화면에서 [만들기] 메뉴를 클릭해서 프로젝트 창 만들기
02>>[실행] 창
프로젝트의 결과물 확인할 수 있는 공간
03>>[무대 정보] 창
현재 무대 상태 확인 및 새로운 무대를 불러오거나 작성
04>>[스프라이트] 창
현재 프로젝트에 사용되는 스프라이트들의 모양 확인 및 개체 선택, 새로운 스프라이트를 작성하거나 불러오기 가능
05>>[스크립트] 탭
10가지 카테고리로 구분된 블록 모음이 나옴
06>>[스크립트] 창
블록들의 결합 확인 및 현재 선택된 스프라이트의 상태 정보 확인
07>>[모양] 탭
스프라이트의 [모양 정보] 창과 '그림판'이 나타남. 그림판 활용하여 모양 변경 가능
08>>[소리] 탭
스프라이트에 등록된 소리를 확인할 수 있는 [소리 정보] 창과 편집 및 효과를 줄 수 있는 [소리 편집] 창이 나타남
09>>[메뉴] 바, [툴] 바
메뉴 바에서는 프로젝트 관련 각종 기능을 수행. 툴 바에는 스프라이트에 대한 각종 변경
Step 03 기본 블록 설명
01>>동작 블록
10 만큼 움직이기 - 지정한 값만큼 스프라이트가 이동합니다.
15 도 돌기 - 지정한 값만큼 스프라이트가 (반)시계 방향으로 회전합니다.
90 도 방향 보기 - 지정한 각도를 스프라이트가 바라봅니다.
쪽 보기 - 스프라이트가 마우스 포인터나 다른 스프라이트를 바라봅니다.
X: 0 Y:0 이동하기 - 지정된 x, y 좌표로 스프라이트가 이동합니다.
위치로 이동하기 - 마워스 포인터나 다른 스프라이트로 이동합니다.
1 초 동안 x: 0 y: 0 으로 움직이기 - 지정된 시간 동안 지정된 x, y 좌표로 스프라이트가 이동합니다.
x, y 좌표를 10 만큼 바꾸기 - 스프라이트의 x, y 좌표를 10만큼 증가
x, y 좌표를 0 로 정하기 - 스프라이트의 x, y 좌표를 지정한 값으로 변경
벽에 닿으면 튕기기 - 스프라이트의 벽에 닿으면 이동하던 방향을 바꿈
회전방식을 왼쪽 - 오른쪽로 정하기 - 회전방향을 변경
x, y 좌표 - 스프라이트의 현재 위치에 대한 x, y 좌표값을 담고 있음.
방향 - 스프라이트 현재 방향에 대한 각도 값을 담고 있습니다.
02>>형태 블록
Hello! 을 2초동안 말하기 - 입력한 문구를 지정한 시간동안 말풍선 표시
Hello! 말하기 - 입력한 문구를 말풍선에 표시합니다.
Hmm... 을 2초동안 생각하기 - 입력한 문구를 지정한 시간동안 생각풍선 표시
Hmm... 생각하기 - 입력한 문구를 생각풍선에 표시
보이기 - 스프라이트가 무대에 보이게 함
숨기기 - 스프라이트가 무대에 보이지 않게 함
모양을 costume2 로 바꾸기 - 스프라이트의 모양을 지정한 모양으로 변경
다음 모양으로 바꾸기 - 스프라이트의 모양탭에 등록된 다음 모양으로 변경
배경을 backdrop1 로 바꿔기 - 무대의 배경을 지정한 배경으로 변경
색깔 효과를 25 만큼 바꾸기 - 스프라이트의 그래픽 효과를 지정한 값만큼 변경
색깔 효과를 0 로 정하기 - 스프라이트의 그래픽 효과를 지정한 값으로 변경
그래픽 효과 지우기 - 그래픽 효과를 모두 지움
크기를 10 만큼 바꾸기 - 스프라이트 크기를 지정한 값만큼 변경
크기를 100 %로 정하기 - 스프라이트 크기를 백분율로 변경
맨 앞으로 나오기 - 겹친 스프라이트 중 맨 앞 으로 나오게 함
1 번째로 물러나기 - 스프라이트가 지정된 값만큼 뒤로 물러남
모양 번호 - 현재 스프라이트의 모양 번호를 담고 있음
배경 이름 - 현재 무대의 배경 이르을 담고 있음
크기 - 스프라이트의 현재 크기의 백분율 값을 담고 있습니다.
03>> 소리 블록
모든 소리 끄기 - 재생 중인 모든 소리 중지
1 번 타악기를 0.25 박자로 연주하기 - 지정한 번호의 타악기를 지정한 박자로 연주
0.25 박자 쉬기 - 지정한 박자만큼 소리의 재생 중지
60 번 음을 0.5 박자로 연주하기 - 지정한 번호의 음을 지정한 박자로 연주
1번 악기로 정하기 - 지정한 악기를 선택
음량을 -10 만큼 바꾸기
음량을 100 % 로 정하기
음량 - 현재의 음량 값을 담고 있음
빠르기를 20 만큼 바꾸기 - 템포를 지정한 수만큼 변경
빠르기를 60BPM 으로 정하기 - 템포를 지정한 BPM으로 변경
빠르기 - 현재의 템포 값을 담고 있음
04>> 펜 블록
지우기 - 실행 창에서 펜 그리기와 도장찍기 효과 지움
도장찍기 - 스프라이트의 현재 모양이 도장처럼 실행 창에 찍힘
펜 내리기 - 스프라이트가 펜이 되도록 지정
펜 올리기 - 펜 내리기 모드 종료
펜 색깔을 로 정하기 - 펜 색깔을 지정한 색으로 지정
펜 색깔을 0 만큼 바꾸기 - 펜 색깔을 지정한 수만큼 변경
펜 색깔을 0 로 정하기 - 펜 색깔을 지정한 수로 지정
펜 명암을 10 만큼 바꾸기 - 펜 농도를 지정한 수만큼 변경
펜 명암을 50 로 정하기 - 펜 농도를 지정한 수로 지정
펜 굵기를 1만큼 바꾸기 - 펜 굵기를 지정한 수만큼 변경
펜 굵기를 1 로 정하기 - 펜 굵기를 지정한 수로 지정
05>> 데이터 블록

변수 만들기 - 새로운 변수를 생성하니다.
N - 새로운 변수의 값을 담고 있음
N 을 0 로 정하기 - 변수를 지정한 수로 지정
N 을 1 만큼 바구기 - 변수를 지정한 수만큼 변경
N 변수 보이기 - 변수가 실행 창에 보이도록 설정
N 변수 숨기기 - 변수가 실행 창에 보이지 않도록 설정
리스트 만들기 0 새로운 리스트를 생성
L - 리트스의 모든 값을 담고 있음
thing 항목을 L 에 추가하기 - 입력한 항목을 리스트의 마지막 항목 다음 순서에 추가
1 번째 항목을 L에서 삭제 - 지정한 항목을 리스트에서 삭제
thing 을 1 번째 L 에 넣기 - 지정한 항목을 리스트의 지정한 순서에 추가. 추가된 아래 항목은 하나씩 뒤로 밀림
1 번째 L의 항목을 thing 로 바꾸기 - 지정한 순서의 항목을 지정한 내용으로 변경
1 번째 L 항목 - 리스트의 지정한 순서의 항목 값을 담고 있음
L 리스트의 항목 수 - 리스트 전체의 크기 값을 담고 있음
L 리스트에 thing 포함되었는가 - 리스트에 지정한 항목이 포함되었는지 체크
L 리스트 보이기 - 실행 창에 리스트가 보이도록 설정
L 리스트 숨기기 - 실행 창에 리스트가 보이지 않도록 설정
06>> 이벤트 블록
P 클릭했을 때 - 깃발을 클릭하면 아래 연결된 블록 실행
스페이스 키를 눌렀을 때 - 지정한 키를 누르면 아래 연결된 블록 실행
이 스프라이트를 클릭했을 때 - 해당 스프라이트를 클릭하면 아래 연결된 블록 실행
배경이 backdrop1 로 바뀌었을 때 - 무대가 지정한 배경으로 바뀌면 아래 연결된 블록 실행
음량 > 10 일 때 - 음량, 비디오, 타이머 값이 지정한 수보다 커지면 아래 연결된 블록 실행
message1 을 받았을 때 - 지정한 방송을 받으면 아래 연결된 블록 실행
message1 방송하기 - 지정한 내용을 방송하여 다른 스프라이트나 무대에 신호 보냄
message1 방송하고 기다리기 - 방송을 받은 스크립트가 모두 실행될 때까지 대기
07>> 제어 블록
1초 기다리기 - 지정한 시간만큼 일시 정지
10번 반복하기 - 지정한 수만큼 실행 영역(내부)에 있는 블록들을 실행
무한 반복하기 - 실행 영역(내부)에 있는 블록들을 무한 반복 실행
만약 <> 라면 - 조건 영역이 참이면 실행 영역에 있는 블록들을 실행
만약 <>라면 ~ 아니면 - 조건 영역이 참이면 위쪽 실행 영역의 있는 블록들을 실행하고 거짓이면 아래쪽 실행 영역에 있는 블록들을 실행
<> 까지 기다리기 - 조건 영역이 참이 될 때까지 블록의 실행이 일시 정지
<> 까지 반복하기 - 조건 영역이 참이 될 때까지 반복 실행
모두 멈추기 - 지정한 스크립의 실행을 중지
복제되었을 때 - 아래 연결된 블록이 복제된 스프라이트에 적용
나 자신 복제하기 - 지정한 스프라이트를 복제
이 복제본 삭제하기 - 복제된 스프라이트를 삭제
08>> 관찰 블록

~ 에 닿았는가? - 스프라이트가 지정한 대상에 닿았는지 체크
ㅁ 색에 닿았는가? - 스프라이트가 지정한 색에 닿았는지를 체크
ㅁ 색이 ㅁ 색에 닿았는가? - 지정한 첫 번째 색이 지정한 두 번째 색에 닿았는지를 체크
~ 까지 거리 - 스프라이트로부터 마운스 포인터 또는 다른 스프라이터까지의 거리 값을 담고 있음
What's your name? 묻고 기다리기 - 지정한 질문을 실행 창에 표시하여 답변을 입력 가능하게 함
대답 - 사용자가 입력한 답변의 값이 담겨 있음
스페이스 키를 눌렀는가? - 사용자가 특정키를 눌렀는지 체크
마우스를 클릭했는가? - 사용자가 마우스를 클릭했는지를 체크
마우스의 x, y 좌표 - 마우스의 x, y 좌표 값을 담고 있음
음량 - 컴퓨터 마이크에서 입력한 소리의 불륨 값을 담고 있습니다.
비디오 동작 에 대한 이 스프라이트 에서의 관찰값 - 스프라이트나 무대의 동작이나 방향 값을 담고 있음
비디오 켜기 - 웹캠의 비디오를 켜거나 끄니다.
비디오 투명도를 50 % 로 정하기 - 비디오 투명도를 지정한 백분율 값으로 변경
타이머 - 실행 중인 타이머의 값을 담고 있음
타이머 초기화 - 타이머를 0으로 초기화
x좌표 of 스프라이트1 - 지정한 대상(스프라이트, 무대)의 지정한 정보(x좌표, y좌표, 방향, 모양번호, 모양 이름, 크기, 음량 등)을 담고 있음.
현재 분 - 지정한 현재 시간 관련 정보 담고 있음
2000년 이후 경과일 - 2000년 이후 경과일 값을 담고 있습니다.
사용자이름
09>> 연산 블록

O + O - 지정한 두 수의 덧셈 결과 값을 담고 있음
O - O - 지정한 두 수의 뺄샘 결과 값을 담고 있음
O * O - 지정한 두 수의 곱셈 결과 값을 담고 있음
O / O - 지정한 두 수의 나눗셈 결과 값을 담고 있음
O 부터 O 사이의 난수 - 지정한 두 수의 사이에서 임의로 추출된 하나의 값을 담고 있음
ㅁ < ㅁ - 지정한 첫 번째 수가 지정한 두 번째 수보다 작은 지를 체크
ㅁ = ㅁ - 지정한 첫 번째 수가 지정한 두 번째 수와 같은 지를 체크
ㅁ > ㅁ - 지정한 첫 번째 수가 지정한 두 번째 수보다 큰 지를 체크
<> 그리고 <> - 앞과 뒤의 조건이 모두 참일 때 전체가 참이 됨
<> 또는 <> - 앞의 조건과 뒤의 조건 중 하나 이상이 참일 경우 참이 됨
<> 아니다 - 주어진 조건이 거짓일 때만 참이 됨
hello 와 World 결합하기 - 지정한 두 문자열을 결합한 값을 담고 있음
1 번재 글자 ( world ) - 지정한 문자열에서 지정한 순번의 문자를 담고 있음
world 의 길이 - 지정한 문자열의 길이 값을 담고 있음
O 나누기 O 의 나머지 - 지정한 첫 번재 수를 지정한 두번째 수로 나눈 나머지 값을 담고 있음
O 반올림 - 입력한 값의 반올림한 값을 담고 있음
제곱근 ( O ) - 입력한 값의 수학적 계산 값을 담고 있음
10>> 추가 블록
블록만들기 - 새로운 블록 만들기 기능을 활용하여 사용자 저의 함수를 생성
확장 프로그램 추가 - Pico Bord, LEGO WeDo 등 외부 하드웨 어 장치와 연동하여 사용할 수 있는 기능 제공
학습정리
1. 스프라이트는 무대 위에서 움직이는 객체를 의미하며, 무대 위에 존재하는 캐릭터나 문자, 도형 등이 모두 스프라이트가 될 수 있습니다.
2. 여러 개의 스프라이트가 동시에 존재할 수도 있으며, 하나의 스프라이트는 2개 이상의 모양을 가질 수 있습니다.
3. 무대는 스프라이트가 움직이는 공간으로 배경이라고도 하는데 무대도 여러 가지 모양을 가질 수 있습니다.
4. 스크립트는 스프라이트와 무대를 작동시키기 위한 명령어 모음입니다. 각 명령어를 의미하는 블록들을 결합하여 하나의 스크립트를 만듭니다.
- 동작은 이동이나 방향 전환 같이 스프라이트의 동작과 관련된 블록 모음이니다.
- 형태는 스프라이트의 모양, 크기, 말풍선 및 그래픽 효과 등을 변경할 수 있는 블록 모음입니다.
- 소리는 스프라이트의 소리와 효과음 등을 조정하고 설정하는 블록 모음입니다.
- 펜은 펜 기능을 활용하여 선 그리기, 색깔 바꾸기, 음영이나 굵기 바꾸기 등을 실행하는 블록 모음입니다.
- 데이터는 변수와 리스트를 생성하고, 생성한 변수와 리스트를 관리하는 블록 모음입니다.
- 이벤트는 스크립트의 실행 및 방송하기와 관련된 블록 모음입니다.
- 제어는 스프라이트, 마우스, 타이머, 음략, 시간 등의 상태를 체크할 수 있는 블록모음입니다.
- 연산은 산술연산, 관계연산, 논리 연산, 난수 등 연산과 과련된 기능을 수행하는 블록 모음이니다.
- 추가 블록은 '사용자 정의 함수'를 활용하거나 외부 기기와 연결 기능을 활용 할 수 있는 블록 모음입니다.
퀴즈 및 실습 문제
01. 스크래치에서 사용하는 핵심 용어가 아닌 것은?( )
1) 스프라이트
2) 케릭터
3) 무대
4) 스크립트
02. 스프라이트에 관한 설명 중 옳지 않은 것은?( )
1) 스프라이트의 크기는 툴바에서 변경할 수 있다.
2) 하나의 스프라이트는 하나의 모양을 가지고 있다.
3) 무대 위에서 움직일 수 있는 그림, 문자 등을 스프라이트라고 한다.
4) 스프라이트는 자신의 [스크립트] 창에 놓인 스크립트의 명령만을 따른다.
03. "방송하기"가 포함된 블록 카테고리로 옳은 것은?( )
1) 동작블록
2) 제어 블록
3) 추가 블록
4) 이벤트 블록
04. 스크래치의 블록에 관한 문항을 릭고 O, X로 답하시오.
1) <>까지 반복하기 조건 영역(육각 블록)이 참이면 실행 영역(내부) 블록들이 실행된다.( )
2) 무대에서는 ㅁ 말하기 블록을 사용할 수 없다. ( )
3) 1 부터 10 사이에 난수 블록은 프로그램에서 임의로 추출된 하나의 값을 담고 있다. ( )
Step 01 스크래치 기본 용어 알아보기
01>>스크래치의 기본 개념
스프라이트, 무대, 스크립트
02>>스프라이트
무대 위에서 움직일 수 있는 객체. 무대 위에 존재하는 캐릭터 그림이나 글시, 도형 등
03>>하나의 프로젝트 안에 동시에 여러개의 스트라이트 사용 가능
04>>하나의 스프라이트는 2개 이상의 모양을 가질 수 있고 필요에 따라 변화 가능
05>>무대
스프라이트가 움직이는 공간
06>>무대도 여러 가지 배경을 가질 수 있고 필요에 따라 변화 가능
07>>스크립트
사전적 의미는 각본, 대본으로 스프라이트와 무대를 작동시키기 위한 명령어 모음
08>무대도 스크립트를 가지고 변화 가능
Step 02 [프로젝트] 창 인터페이스 알아보기
01>> 메인화면에서 [만들기] 메뉴를 클릭해서 프로젝트 창 만들기
02>>[실행] 창
프로젝트의 결과물 확인할 수 있는 공간
03>>[무대 정보] 창
현재 무대 상태 확인 및 새로운 무대를 불러오거나 작성
04>>[스프라이트] 창
현재 프로젝트에 사용되는 스프라이트들의 모양 확인 및 개체 선택, 새로운 스프라이트를 작성하거나 불러오기 가능
05>>[스크립트] 탭
10가지 카테고리로 구분된 블록 모음이 나옴
06>>[스크립트] 창
블록들의 결합 확인 및 현재 선택된 스프라이트의 상태 정보 확인
07>>[모양] 탭
스프라이트의 [모양 정보] 창과 '그림판'이 나타남. 그림판 활용하여 모양 변경 가능
08>>[소리] 탭
스프라이트에 등록된 소리를 확인할 수 있는 [소리 정보] 창과 편집 및 효과를 줄 수 있는 [소리 편집] 창이 나타남
09>>[메뉴] 바, [툴] 바
메뉴 바에서는 프로젝트 관련 각종 기능을 수행. 툴 바에는 스프라이트에 대한 각종 변경
Step 03 기본 블록 설명
01>>동작 블록
10 만큼 움직이기 - 지정한 값만큼 스프라이트가 이동합니다.
15 도 돌기 - 지정한 값만큼 스프라이트가 (반)시계 방향으로 회전합니다.
90 도 방향 보기 - 지정한 각도를 스프라이트가 바라봅니다.
쪽 보기 - 스프라이트가 마우스 포인터나 다른 스프라이트를 바라봅니다.
X: 0 Y:0 이동하기 - 지정된 x, y 좌표로 스프라이트가 이동합니다.
위치로 이동하기 - 마워스 포인터나 다른 스프라이트로 이동합니다.
1 초 동안 x: 0 y: 0 으로 움직이기 - 지정된 시간 동안 지정된 x, y 좌표로 스프라이트가 이동합니다.
x, y 좌표를 10 만큼 바꾸기 - 스프라이트의 x, y 좌표를 10만큼 증가
x, y 좌표를 0 로 정하기 - 스프라이트의 x, y 좌표를 지정한 값으로 변경
벽에 닿으면 튕기기 - 스프라이트의 벽에 닿으면 이동하던 방향을 바꿈
회전방식을 왼쪽 - 오른쪽로 정하기 - 회전방향을 변경
x, y 좌표 - 스프라이트의 현재 위치에 대한 x, y 좌표값을 담고 있음.
방향 - 스프라이트 현재 방향에 대한 각도 값을 담고 있습니다.
02>>형태 블록
Hello! 을 2초동안 말하기 - 입력한 문구를 지정한 시간동안 말풍선 표시
Hello! 말하기 - 입력한 문구를 말풍선에 표시합니다.
Hmm... 을 2초동안 생각하기 - 입력한 문구를 지정한 시간동안 생각풍선 표시
Hmm... 생각하기 - 입력한 문구를 생각풍선에 표시
보이기 - 스프라이트가 무대에 보이게 함
숨기기 - 스프라이트가 무대에 보이지 않게 함
모양을 costume2 로 바꾸기 - 스프라이트의 모양을 지정한 모양으로 변경
다음 모양으로 바꾸기 - 스프라이트의 모양탭에 등록된 다음 모양으로 변경
배경을 backdrop1 로 바꿔기 - 무대의 배경을 지정한 배경으로 변경
색깔 효과를 25 만큼 바꾸기 - 스프라이트의 그래픽 효과를 지정한 값만큼 변경
색깔 효과를 0 로 정하기 - 스프라이트의 그래픽 효과를 지정한 값으로 변경
그래픽 효과 지우기 - 그래픽 효과를 모두 지움
크기를 10 만큼 바꾸기 - 스프라이트 크기를 지정한 값만큼 변경
크기를 100 %로 정하기 - 스프라이트 크기를 백분율로 변경
맨 앞으로 나오기 - 겹친 스프라이트 중 맨 앞 으로 나오게 함
1 번째로 물러나기 - 스프라이트가 지정된 값만큼 뒤로 물러남
모양 번호 - 현재 스프라이트의 모양 번호를 담고 있음
배경 이름 - 현재 무대의 배경 이르을 담고 있음
크기 - 스프라이트의 현재 크기의 백분율 값을 담고 있습니다.
03>> 소리 블록
pop 재생하기 - 지정한 소리를 재생. 재생 중인 상태로 다음 연결 블록 실행
pop 끝까지 재생 - 지정한 소리를 재생. 재생완료 후 다음 연결 블록 실행
모든 소리 끄기 - 재생 중인 모든 소리 중지
1 번 타악기를 0.25 박자로 연주하기 - 지정한 번호의 타악기를 지정한 박자로 연주
0.25 박자 쉬기 - 지정한 박자만큼 소리의 재생 중지
60 번 음을 0.5 박자로 연주하기 - 지정한 번호의 음을 지정한 박자로 연주
1번 악기로 정하기 - 지정한 악기를 선택
음량을 -10 만큼 바꾸기
음량을 100 % 로 정하기
음량 - 현재의 음량 값을 담고 있음
빠르기를 20 만큼 바꾸기 - 템포를 지정한 수만큼 변경
빠르기를 60BPM 으로 정하기 - 템포를 지정한 BPM으로 변경
빠르기 - 현재의 템포 값을 담고 있음
04>> 펜 블록
지우기 - 실행 창에서 펜 그리기와 도장찍기 효과 지움
도장찍기 - 스프라이트의 현재 모양이 도장처럼 실행 창에 찍힘
펜 내리기 - 스프라이트가 펜이 되도록 지정
펜 올리기 - 펜 내리기 모드 종료
펜 색깔을 로 정하기 - 펜 색깔을 지정한 색으로 지정
펜 색깔을 0 만큼 바꾸기 - 펜 색깔을 지정한 수만큼 변경
펜 색깔을 0 로 정하기 - 펜 색깔을 지정한 수로 지정
펜 명암을 10 만큼 바꾸기 - 펜 농도를 지정한 수만큼 변경
펜 명암을 50 로 정하기 - 펜 농도를 지정한 수로 지정
펜 굵기를 1만큼 바꾸기 - 펜 굵기를 지정한 수만큼 변경
펜 굵기를 1 로 정하기 - 펜 굵기를 지정한 수로 지정
05>> 데이터 블록

변수 만들기 - 새로운 변수를 생성하니다.
N - 새로운 변수의 값을 담고 있음
N 을 0 로 정하기 - 변수를 지정한 수로 지정
N 을 1 만큼 바구기 - 변수를 지정한 수만큼 변경
N 변수 보이기 - 변수가 실행 창에 보이도록 설정
N 변수 숨기기 - 변수가 실행 창에 보이지 않도록 설정
리스트 만들기 0 새로운 리스트를 생성
L - 리트스의 모든 값을 담고 있음
thing 항목을 L 에 추가하기 - 입력한 항목을 리스트의 마지막 항목 다음 순서에 추가
1 번째 항목을 L에서 삭제 - 지정한 항목을 리스트에서 삭제
thing 을 1 번째 L 에 넣기 - 지정한 항목을 리스트의 지정한 순서에 추가. 추가된 아래 항목은 하나씩 뒤로 밀림
1 번째 L의 항목을 thing 로 바꾸기 - 지정한 순서의 항목을 지정한 내용으로 변경
1 번째 L 항목 - 리스트의 지정한 순서의 항목 값을 담고 있음
L 리스트의 항목 수 - 리스트 전체의 크기 값을 담고 있음
L 리스트에 thing 포함되었는가 - 리스트에 지정한 항목이 포함되었는지 체크
L 리스트 보이기 - 실행 창에 리스트가 보이도록 설정
L 리스트 숨기기 - 실행 창에 리스트가 보이지 않도록 설정
06>> 이벤트 블록
P 클릭했을 때 - 깃발을 클릭하면 아래 연결된 블록 실행
스페이스 키를 눌렀을 때 - 지정한 키를 누르면 아래 연결된 블록 실행
이 스프라이트를 클릭했을 때 - 해당 스프라이트를 클릭하면 아래 연결된 블록 실행
배경이 backdrop1 로 바뀌었을 때 - 무대가 지정한 배경으로 바뀌면 아래 연결된 블록 실행
음량 > 10 일 때 - 음량, 비디오, 타이머 값이 지정한 수보다 커지면 아래 연결된 블록 실행
message1 을 받았을 때 - 지정한 방송을 받으면 아래 연결된 블록 실행
message1 방송하기 - 지정한 내용을 방송하여 다른 스프라이트나 무대에 신호 보냄
message1 방송하고 기다리기 - 방송을 받은 스크립트가 모두 실행될 때까지 대기
07>> 제어 블록
1초 기다리기 - 지정한 시간만큼 일시 정지
10번 반복하기 - 지정한 수만큼 실행 영역(내부)에 있는 블록들을 실행
무한 반복하기 - 실행 영역(내부)에 있는 블록들을 무한 반복 실행
만약 <> 라면 - 조건 영역이 참이면 실행 영역에 있는 블록들을 실행
만약 <>라면 ~ 아니면 - 조건 영역이 참이면 위쪽 실행 영역의 있는 블록들을 실행하고 거짓이면 아래쪽 실행 영역에 있는 블록들을 실행
<> 까지 기다리기 - 조건 영역이 참이 될 때까지 블록의 실행이 일시 정지
<> 까지 반복하기 - 조건 영역이 참이 될 때까지 반복 실행
모두 멈추기 - 지정한 스크립의 실행을 중지
복제되었을 때 - 아래 연결된 블록이 복제된 스프라이트에 적용
나 자신 복제하기 - 지정한 스프라이트를 복제
이 복제본 삭제하기 - 복제된 스프라이트를 삭제
08>> 관찰 블록

~ 에 닿았는가? - 스프라이트가 지정한 대상에 닿았는지 체크
ㅁ 색에 닿았는가? - 스프라이트가 지정한 색에 닿았는지를 체크
ㅁ 색이 ㅁ 색에 닿았는가? - 지정한 첫 번째 색이 지정한 두 번째 색에 닿았는지를 체크
~ 까지 거리 - 스프라이트로부터 마운스 포인터 또는 다른 스프라이터까지의 거리 값을 담고 있음
What's your name? 묻고 기다리기 - 지정한 질문을 실행 창에 표시하여 답변을 입력 가능하게 함
대답 - 사용자가 입력한 답변의 값이 담겨 있음
스페이스 키를 눌렀는가? - 사용자가 특정키를 눌렀는지 체크
마우스를 클릭했는가? - 사용자가 마우스를 클릭했는지를 체크
마우스의 x, y 좌표 - 마우스의 x, y 좌표 값을 담고 있음
음량 - 컴퓨터 마이크에서 입력한 소리의 불륨 값을 담고 있습니다.
비디오 동작 에 대한 이 스프라이트 에서의 관찰값 - 스프라이트나 무대의 동작이나 방향 값을 담고 있음
비디오 켜기 - 웹캠의 비디오를 켜거나 끄니다.
비디오 투명도를 50 % 로 정하기 - 비디오 투명도를 지정한 백분율 값으로 변경
타이머 - 실행 중인 타이머의 값을 담고 있음
타이머 초기화 - 타이머를 0으로 초기화
x좌표 of 스프라이트1 - 지정한 대상(스프라이트, 무대)의 지정한 정보(x좌표, y좌표, 방향, 모양번호, 모양 이름, 크기, 음량 등)을 담고 있음.
현재 분 - 지정한 현재 시간 관련 정보 담고 있음
2000년 이후 경과일 - 2000년 이후 경과일 값을 담고 있습니다.
사용자이름
09>> 연산 블록

O + O - 지정한 두 수의 덧셈 결과 값을 담고 있음
O - O - 지정한 두 수의 뺄샘 결과 값을 담고 있음
O * O - 지정한 두 수의 곱셈 결과 값을 담고 있음
O / O - 지정한 두 수의 나눗셈 결과 값을 담고 있음
O 부터 O 사이의 난수 - 지정한 두 수의 사이에서 임의로 추출된 하나의 값을 담고 있음
ㅁ < ㅁ - 지정한 첫 번째 수가 지정한 두 번째 수보다 작은 지를 체크
ㅁ = ㅁ - 지정한 첫 번째 수가 지정한 두 번째 수와 같은 지를 체크
ㅁ > ㅁ - 지정한 첫 번째 수가 지정한 두 번째 수보다 큰 지를 체크
<> 그리고 <> - 앞과 뒤의 조건이 모두 참일 때 전체가 참이 됨
<> 또는 <> - 앞의 조건과 뒤의 조건 중 하나 이상이 참일 경우 참이 됨
<> 아니다 - 주어진 조건이 거짓일 때만 참이 됨
hello 와 World 결합하기 - 지정한 두 문자열을 결합한 값을 담고 있음
1 번재 글자 ( world ) - 지정한 문자열에서 지정한 순번의 문자를 담고 있음
world 의 길이 - 지정한 문자열의 길이 값을 담고 있음
O 나누기 O 의 나머지 - 지정한 첫 번재 수를 지정한 두번째 수로 나눈 나머지 값을 담고 있음
O 반올림 - 입력한 값의 반올림한 값을 담고 있음
제곱근 ( O ) - 입력한 값의 수학적 계산 값을 담고 있음
10>> 추가 블록
블록만들기 - 새로운 블록 만들기 기능을 활용하여 사용자 저의 함수를 생성
확장 프로그램 추가 - Pico Bord, LEGO WeDo 등 외부 하드웨 어 장치와 연동하여 사용할 수 있는 기능 제공
학습정리
1. 스프라이트는 무대 위에서 움직이는 객체를 의미하며, 무대 위에 존재하는 캐릭터나 문자, 도형 등이 모두 스프라이트가 될 수 있습니다.
2. 여러 개의 스프라이트가 동시에 존재할 수도 있으며, 하나의 스프라이트는 2개 이상의 모양을 가질 수 있습니다.
3. 무대는 스프라이트가 움직이는 공간으로 배경이라고도 하는데 무대도 여러 가지 모양을 가질 수 있습니다.
4. 스크립트는 스프라이트와 무대를 작동시키기 위한 명령어 모음입니다. 각 명령어를 의미하는 블록들을 결합하여 하나의 스크립트를 만듭니다.
- 동작은 이동이나 방향 전환 같이 스프라이트의 동작과 관련된 블록 모음이니다.
- 형태는 스프라이트의 모양, 크기, 말풍선 및 그래픽 효과 등을 변경할 수 있는 블록 모음입니다.
- 소리는 스프라이트의 소리와 효과음 등을 조정하고 설정하는 블록 모음입니다.
- 펜은 펜 기능을 활용하여 선 그리기, 색깔 바꾸기, 음영이나 굵기 바꾸기 등을 실행하는 블록 모음입니다.
- 데이터는 변수와 리스트를 생성하고, 생성한 변수와 리스트를 관리하는 블록 모음입니다.
- 이벤트는 스크립트의 실행 및 방송하기와 관련된 블록 모음입니다.
- 제어는 스프라이트, 마우스, 타이머, 음략, 시간 등의 상태를 체크할 수 있는 블록모음입니다.
- 연산은 산술연산, 관계연산, 논리 연산, 난수 등 연산과 과련된 기능을 수행하는 블록 모음이니다.
- 추가 블록은 '사용자 정의 함수'를 활용하거나 외부 기기와 연결 기능을 활용 할 수 있는 블록 모음입니다.
퀴즈 및 실습 문제
01. 스크래치에서 사용하는 핵심 용어가 아닌 것은?( )
1) 스프라이트
2) 케릭터
3) 무대
4) 스크립트
02. 스프라이트에 관한 설명 중 옳지 않은 것은?( )
1) 스프라이트의 크기는 툴바에서 변경할 수 있다.
2) 하나의 스프라이트는 하나의 모양을 가지고 있다.
3) 무대 위에서 움직일 수 있는 그림, 문자 등을 스프라이트라고 한다.
4) 스프라이트는 자신의 [스크립트] 창에 놓인 스크립트의 명령만을 따른다.
03. "방송하기"가 포함된 블록 카테고리로 옳은 것은?( )
1) 동작블록
2) 제어 블록
3) 추가 블록
4) 이벤트 블록
04. 스크래치의 블록에 관한 문항을 릭고 O, X로 답하시오.
1) <>까지 반복하기 조건 영역(육각 블록)이 참이면 실행 영역(내부) 블록들이 실행된다.( )
2) 무대에서는 ㅁ 말하기 블록을 사용할 수 없다. ( )
3) 1 부터 10 사이에 난수 블록은 프로그램에서 임의로 추출된 하나의 값을 담고 있다. ( )
2017년 3월 20일 월요일
Section 01 스크래치 시작하기
Section 01 스크래치 시작하기
Step 01 소프트웨어와 프로그래밍
01>>소프트웨어란?
컴퓨터를 구성하는 한 요소로 하드웨어를 통해서 이루어지는 모든 정보.
02>>생활 속의 소프트웨어
정수기, TV, 전기밥솥, 냉장고, 엘레베이터 그외 자동차, 우주선, 알파고
3>>컴퓨터 프로그램
소프트웨어를 지칭하는 다른 말. 하드웨어를 움직이게 하기 위한 도구. 이를 만드는걸 프로그래밍 혹은 코딩이라 지칭. 소프트웨어를 제작하는 언어를 프로그래밍 언어라 함
4>>교육용 프로그래밍 언어(EPL)
이미지 언어 - 미취 학아동이나 초등학교 저학년 학생들을 위한 직관적 놀이
블록형 언어 - 블록들로 구성된 명령어를 결합하는 언어
중간 언어 - 전문언어와 유사한 문자 입력방식 언어
Step 02 알고리즘 이해하기
01>>알고리즘
어떤 문제를 해결하는 방법이나 절차
02>>알고리즘 표현하는 방법
자연어(일반 언어)도 가능하나 순서도가 가장 많이 쓰임. 기호를 사용하기 때문에 절차나 흐름을 이해하기 쉽고 명료하다는 장점이 있음.
03>> 알고리즘 기본 구조
순차, 조건, 반복를 중심으로 알고리즘이 설계됨.
04>> 알고리즘의 필요성
알고리즘 설계 없이 프로그램 작성 시 예상하지 못한 오류사항이나 예외사항이 발생 가능. 알고리즘의 종류에 따라 시간, 공간의 효율성에 큰 차이 보임. 좋은 알고리즘이란 최소한의 시간과 공간을 사용하는 결과물을 만들어내는 것.
Step 03 스크래치란?
01>>스크래치 개발
스크래치는 미국 MIT 미디어 랩에서 개발한 교육용 프로그래밍 언어. 누구나 쉽게 사용 가능
02>>스크래치 특징
블록형 언어로 복잡한 문법을 배우지 않고도 프로그래밍 가능.
03>>스크래치의 제공 언어 서비스
현재 약 50여개의 언어로 번역되었고 한국어 버전도 제공됨.
04>>사용 가능 지역
온라인 및 오프라인에서 모두 사용 가능. 게다가 온라인 웹에서는 전세계 여러 나라 사람들과 공유 가능.
Step 04 스크래치 회원가입하기
01>>스크래치 사이트
02>>스크래치 가입 메뉴 클릭
03>>스크래치 사용자 이름 입력
아이디 및 비밀번호 등록. 한글은 등록 불가. 잊지않기 위한 쉬운 아이디와 패스워드 권장


4. 토론하기 메뉴를 클릭하면 프로젝트 제작 등과 관련한 다양한 주제로 친구들과 의견 교환 가능. 언어별 분류에서 한국어 클릭하면 한국인 친구들 글만도 확인 가능.
5. 도움말 메뉴에서는 스크래치 관련 자료 확인 가능
스크래치 안내, 기초적인 사용법, 여러가지 소개 영상, 유용한 학습자료 안내
03>>개인 메뉴 영역
1. 메시지 메뉴를 클릭하면 친구들과 주고받은 메시지 혹은 자신은 공유한 프로젝트의 댓글, 자신이 활동하는 스튜디오의 알림 메시지 확인 가능.
2. 내 작업실 메뉴에서는 자신이 작업하고 저장해 놓은 여러가지 프로젝트 관리
3. 아이디 정보 메뉴
계정설정에서 자신의 비밀번호 및 이메일 변경 가능.
학습정리
1. 스프트웨어는 문서 작성 프로그램이나 게임 뿐만 아니라 우리 주변의 모든 곳에 존재하고 있습니다. 작은 가전제품부터 첨단 영역에까지 많ㅇ은 곳에 소프트웨어가 사용되고 있습니다.
2. 소프트웨어는 컴퓨터 프로그램이라고도 합니다. 따라서 소프트웨어는 인간의 언어가 아닌 컴퓨터가 알아들을 수 있는 컴퓨터의 언어로 만들어어져야 합니다.
3. 컴퓨터의 언어로 소프트웨어를 만드는 사람을 '프로그래머'라고 하며, 소프트웨어를 만드는 작업을 '프로그래밍'이라고 합니다. 그래서 이 프로그래밍에 사용되는 컴퓨터 언어를 '프로그래밍 언어'라고 합니다.
4. 학생들도 쉽게 배울 수 있는 프로그래밍 언어를 '교육용 프로그래밍 언어'라고 합니다. 교육용 프로그래밍 언어에는 직관적인 놀이를 통해 프로그래밍 개념을 습득할 수 있는 '이미지 언어'와 블록으로 구성된 명령어를 결합하여 프로그램을 만드는 '블록형 언어', 전문언어와 유사한 '중간 언어'가 있습니다.
5. 어떤 문제에 대한 해결 방법이나 절차를 '알고리즘'이라고 합니다.
6. 알고리즘을 표현하는 방법에는 자연어를 이용하는 방법, 의사코드를 이용하는 방법, 순서도를 활용하는 방법 등이 있습니다. 순서도를 활용하는 방법에서는 다양한 순서도 기호를 사용하여 문제를 해결하는 방법을 표현합니다.
7. 알고리즘의 기본구조에는 순차와 조건, 반복이 있습니다. 순차 구조는 하나의 방향으로 진행되는 것을 말하고, 조건 구조는 주어진 조건에 따라 실행 결과가 달라지는 것을 말하니다. 반복 구 조는 주어진 조건에 따라 특정 명령어를 반복해서 실행하는 것을 말합니다.
8. 스크래치는 미국 MIT 미디어 랩에서 개발한 교육용 프로그래밍 언어 입니다.
9. 스크래치는 블록형 언어로 누구나 쉽게 배울 수 있으며, 프로그래밍의 결과를 시각적으로 바로 확인할 수 있습니다. 온라인과 오프라인에서 무료로 즐길 수 있으며, 전세계 사람들이 만든 결과물을 공유할 수 있다는 장점이 있어서 초중등 소프트웨어 교육에 적합합니다.
퀴즈 및 실습 문제
01. 스크래치의 특성이 아닌 것은?( )
①블록 결합 방식으로 쉽게 배울 수 있다.
②프로그래밍의 결과물을 시각적으로 확인할 수 있다.
③만들어진 프로젝트를 온라인을 통해 공유할 수 있다.
④모바일 기기를 통해서도 이용할 수 있다.
02. 손서도에서 인쇄되는 n의 값으로 옳은 것은?( )
②12
③13
④14
03. 소프트웨어에 관한 설명 중 옳지 않은 것은?( )
①어떤 문제에 대한 해결 방법이나 절차를 알고리즘 이라고 한다.
②알집, 그림판, 게임 등 데스크탑 컴퓨터에서 쓰는 응용 프로그램만을 소프트웨어라고 한다.
③무인카, 드론, IoT 등의 발전으로 소프트웨어가 중심이 되는 사회로 점차 변화하고 있다.
④컴퓨터 언어를 이해하고 그것을 사용해 소프트웨어를 만드는 사람을 프로그래머라고 한다.
04. 스크래치의 특성에 관한 문항을 릭고 O, X로 답하시오.
①스크래치 오프라인 버전을 다운 받아 사용 가능하다.( )
②다른 사람이 만든 프로젝트를 내 마음대로 수정할 수 없다.( )
③프로젝트를 만들면서 자연스럽게 알고리즘 원리를 이해할 수 있다.( )
④스크래치 가입 시, 한글로 스크래치 사용자 이름(아이디)을 등록 가능하다.( )
Step 01 소프트웨어와 프로그래밍
01>>소프트웨어란?
컴퓨터를 구성하는 한 요소로 하드웨어를 통해서 이루어지는 모든 정보.
02>>생활 속의 소프트웨어
정수기, TV, 전기밥솥, 냉장고, 엘레베이터 그외 자동차, 우주선, 알파고
3>>컴퓨터 프로그램
소프트웨어를 지칭하는 다른 말. 하드웨어를 움직이게 하기 위한 도구. 이를 만드는걸 프로그래밍 혹은 코딩이라 지칭. 소프트웨어를 제작하는 언어를 프로그래밍 언어라 함
4>>교육용 프로그래밍 언어(EPL)
이미지 언어 - 미취 학아동이나 초등학교 저학년 학생들을 위한 직관적 놀이
블록형 언어 - 블록들로 구성된 명령어를 결합하는 언어
중간 언어 - 전문언어와 유사한 문자 입력방식 언어
Step 02 알고리즘 이해하기
01>>알고리즘
어떤 문제를 해결하는 방법이나 절차
02>>알고리즘 표현하는 방법
자연어(일반 언어)도 가능하나 순서도가 가장 많이 쓰임. 기호를 사용하기 때문에 절차나 흐름을 이해하기 쉽고 명료하다는 장점이 있음.
03>> 알고리즘 기본 구조
순차, 조건, 반복를 중심으로 알고리즘이 설계됨.
04>> 알고리즘의 필요성
알고리즘 설계 없이 프로그램 작성 시 예상하지 못한 오류사항이나 예외사항이 발생 가능. 알고리즘의 종류에 따라 시간, 공간의 효율성에 큰 차이 보임. 좋은 알고리즘이란 최소한의 시간과 공간을 사용하는 결과물을 만들어내는 것.
Step 03 스크래치란?
01>>스크래치 개발
스크래치는 미국 MIT 미디어 랩에서 개발한 교육용 프로그래밍 언어. 누구나 쉽게 사용 가능
02>>스크래치 특징
블록형 언어로 복잡한 문법을 배우지 않고도 프로그래밍 가능.
03>>스크래치의 제공 언어 서비스
현재 약 50여개의 언어로 번역되었고 한국어 버전도 제공됨.
04>>사용 가능 지역
온라인 및 오프라인에서 모두 사용 가능. 게다가 온라인 웹에서는 전세계 여러 나라 사람들과 공유 가능.
Step 04 스크래치 회원가입하기
01>>스크래치 사이트
https://scratch.mit.edu
02>>스크래치 가입 메뉴 클릭
03>>스크래치 사용자 이름 입력
아이디 및 비밀번호 등록. 한글은 등록 불가. 잊지않기 위한 쉬운 아이디와 패스워드 권장
04>>생년월일과 성별, 국가를 선택하고 이메일 주소 등록
국가 선택시 K위치에 'South Korea'로 등록되어있음.
05>>가입완료
"자 시작합시다!" 버튼 클릭하시면 자동 로그인되며 스크래치가 시작됨.
Step 05 스크래치 둘러보기
01>>스크래치 메인화면
1. 주요 기능 메뉴 영역: 만들기, 탐험가기 주요 기능 실행.
2. 검색창: 프로그램(프로젝트), 스튜디오(프로그램 모음)등을 검색
3. 개인 메뉴 영역: 메세지 확인 및 저장해 둔 프로젝트 확인
4. 주제별 분류 창: 주제별 인기있는 프로젝트나 스튜디오 확인.
02>>주요 기능 메뉴 영역
1. 만들기 메뉴에는 새로운 프로젝트 창이 생김

2. 탐험하기 메뉴에는 전 세계 사람이 만들어서 공유한 프로젝트 확인 가능

3. 탐험하기 메뉴에서 프로젝트를 클릭하면 해당 프로젝트의 실행창과 사용 설명 나옴
--다른 사람이 만든 프로젝트를 선택한 후 스크립트 확인 창에서 리믹스 버튼 클릭하면 수정가능.4. 토론하기 메뉴를 클릭하면 프로젝트 제작 등과 관련한 다양한 주제로 친구들과 의견 교환 가능. 언어별 분류에서 한국어 클릭하면 한국인 친구들 글만도 확인 가능.
5. 도움말 메뉴에서는 스크래치 관련 자료 확인 가능
스크래치 안내, 기초적인 사용법, 여러가지 소개 영상, 유용한 학습자료 안내
03>>개인 메뉴 영역
1. 메시지 메뉴를 클릭하면 친구들과 주고받은 메시지 혹은 자신은 공유한 프로젝트의 댓글, 자신이 활동하는 스튜디오의 알림 메시지 확인 가능.
2. 내 작업실 메뉴에서는 자신이 작업하고 저장해 놓은 여러가지 프로젝트 관리
3. 아이디 정보 메뉴
계정설정에서 자신의 비밀번호 및 이메일 변경 가능.
학습정리
1. 스프트웨어는 문서 작성 프로그램이나 게임 뿐만 아니라 우리 주변의 모든 곳에 존재하고 있습니다. 작은 가전제품부터 첨단 영역에까지 많ㅇ은 곳에 소프트웨어가 사용되고 있습니다.
2. 소프트웨어는 컴퓨터 프로그램이라고도 합니다. 따라서 소프트웨어는 인간의 언어가 아닌 컴퓨터가 알아들을 수 있는 컴퓨터의 언어로 만들어어져야 합니다.
3. 컴퓨터의 언어로 소프트웨어를 만드는 사람을 '프로그래머'라고 하며, 소프트웨어를 만드는 작업을 '프로그래밍'이라고 합니다. 그래서 이 프로그래밍에 사용되는 컴퓨터 언어를 '프로그래밍 언어'라고 합니다.
4. 학생들도 쉽게 배울 수 있는 프로그래밍 언어를 '교육용 프로그래밍 언어'라고 합니다. 교육용 프로그래밍 언어에는 직관적인 놀이를 통해 프로그래밍 개념을 습득할 수 있는 '이미지 언어'와 블록으로 구성된 명령어를 결합하여 프로그램을 만드는 '블록형 언어', 전문언어와 유사한 '중간 언어'가 있습니다.
5. 어떤 문제에 대한 해결 방법이나 절차를 '알고리즘'이라고 합니다.
6. 알고리즘을 표현하는 방법에는 자연어를 이용하는 방법, 의사코드를 이용하는 방법, 순서도를 활용하는 방법 등이 있습니다. 순서도를 활용하는 방법에서는 다양한 순서도 기호를 사용하여 문제를 해결하는 방법을 표현합니다.
7. 알고리즘의 기본구조에는 순차와 조건, 반복이 있습니다. 순차 구조는 하나의 방향으로 진행되는 것을 말하고, 조건 구조는 주어진 조건에 따라 실행 결과가 달라지는 것을 말하니다. 반복 구 조는 주어진 조건에 따라 특정 명령어를 반복해서 실행하는 것을 말합니다.
8. 스크래치는 미국 MIT 미디어 랩에서 개발한 교육용 프로그래밍 언어 입니다.
9. 스크래치는 블록형 언어로 누구나 쉽게 배울 수 있으며, 프로그래밍의 결과를 시각적으로 바로 확인할 수 있습니다. 온라인과 오프라인에서 무료로 즐길 수 있으며, 전세계 사람들이 만든 결과물을 공유할 수 있다는 장점이 있어서 초중등 소프트웨어 교육에 적합합니다.
퀴즈 및 실습 문제
01. 스크래치의 특성이 아닌 것은?( )
①블록 결합 방식으로 쉽게 배울 수 있다.
②프로그래밍의 결과물을 시각적으로 확인할 수 있다.
③만들어진 프로젝트를 온라인을 통해 공유할 수 있다.
④모바일 기기를 통해서도 이용할 수 있다.
02. 손서도에서 인쇄되는 n의 값으로 옳은 것은?( )
시작
n<-1
S<-3
n<-n+2
S<-S+n
s>50? 아니오
예
n을 인쇄
끝
①11②12
③13
④14
①어떤 문제에 대한 해결 방법이나 절차를 알고리즘 이라고 한다.
②알집, 그림판, 게임 등 데스크탑 컴퓨터에서 쓰는 응용 프로그램만을 소프트웨어라고 한다.
③무인카, 드론, IoT 등의 발전으로 소프트웨어가 중심이 되는 사회로 점차 변화하고 있다.
④컴퓨터 언어를 이해하고 그것을 사용해 소프트웨어를 만드는 사람을 프로그래머라고 한다.
04. 스크래치의 특성에 관한 문항을 릭고 O, X로 답하시오.
①스크래치 오프라인 버전을 다운 받아 사용 가능하다.( )
②다른 사람이 만든 프로젝트를 내 마음대로 수정할 수 없다.( )
③프로젝트를 만들면서 자연스럽게 알고리즘 원리를 이해할 수 있다.( )
④스크래치 가입 시, 한글로 스크래치 사용자 이름(아이디)을 등록 가능하다.( )
2017년 1월 5일 목요일
12. 예제 문제와 풀이
12. 예제 문제와 풀이
함수와 배열과 포인터, 그리고 지금까지 배운 내용을 토대로 예제 문제를 풀어봅니다.
1) 정사각형으로 출력
문제
입력받은 수를 정사각형으로 출력하세요.
정사각형의 크기는 4 * 4입니다.
이때 입력되는 수는 모두 1자리 또는 2자리 자연수이며 정사각형을 출력할 때 숫자를 %2d로 출력하세요.
예시
입력: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
답안 예시
#include <stdio.h>
int main(void)
{
int num[16];
int i = 0;
printf("입력: ");
for (i = 0; i < 16; i++)
{
scanf("%d", &num[i]);
}
for (i = 0; i < 16; i++)
{
if (i % 4 == 0)
{
printf("\n");
}
printf("%2d ", num[i]);
}
return 0;
}
쉽게 표현하고자 입력받는 for문과 출력하는 for문을 분리하였으나 사실 합쳐도 무방합니다.
#include <stdio.h>
int main(void)
{
int num[16];
int i = 0;
printf("입력: ");
for (i = 0; i < 16; i++)
{
scanf("%d", &num[i]);
if (i % 4 == 0)
{
printf("\n");
}
printf("%2d ", num[i]);
}
return 0;
}
2) 제곱근 구하기
문제
자연수의 제곱근을 구하는 함수 sqrtInteger(int num)을 만드세요.
이때, 함수의 결과값은 double로 합니다.
그리고 이 함수를 이용해 1부터 n까지 수의 제곱근을 출력하세요.
제곱근의 정확도는 0.01이내로 하며 출력도 소숫점 2자리까지 합니다. (%.2f로 출력합니다.)
예시
몇까지 계산할까요: 100
1의 제곱근: 1.00
(생략)
100의 제곱근: 10.00
답안 예시
#include <stdio.h>
double sqrtInteger(int num);
int main(void)
{
int max, i;
printf("몇까지 계산할까요: ");
scanf("%d", &max);
for (i = 1; i <= max; i++)
{
printf("%d의 제곱근: %.2f\n", i, sqrtInteger(i));
}
return 0;
}
double sqrtInteger(int num)
{
double temp = 1;
while (-0.01 > (temp * temp - num) || (temp * temp - num) > 0.01)
{
temp = 0.5 * (temp + num / temp);
}
return temp;
}
예시의 경우 제곱근을 뉴튼-랩슨법을 이용해서 구했지만 여러가지 방법이 가능합니다.
인터넷에 검색하거나 스스로 연구해서 제곱근을 특정 정확도 내로 구하는 법을 생각해보세요.
(참고) a의 n제곱근 구하기
#include <stdio.h>
double power(double a, int n)
{
if (a == 0) { return 0; }
int i = 0;
double ret = 1;
for (i = 0; i < n; i++)
{
ret *= a;
}
return ret;
}
double root(double a, int n, double precision)
{
double ret = 1;
while ((power(ret, n) - a) < -precision || (power(ret, n) - a) > precision)
{
ret = ret * (n - 1) / n + a / (n * power(ret, n - 1));
}
return ret;
}
int main()
{
int a, n;
scanf("%d %d", &a, &n);
printf("%.4f\n", root(a, n, 0.0001));
return 0;
}
3) 소수 출력하기
문제
1부터 입력받은 수 까지 소수를 모두 찾아 출력하는 프로그램을 만드세요.
주어진 자연수가 소수인지 검사하는 isPrime함수를 만들어 사용하세요.
그리고 소수를 몇 개 찾았는지도 출력하세요.
예시
어디까지 소수를 찾을까요: 20
소수: 2 3 5 7 11 13 17 19
총 8개의 소수를 찾았습니다!
답안 예시
bool isPrime(int num);
int main()
{
int i = 0, count = 0, max = 0;
printf("어디까지 소수를 찾을까요: ");
scanf("%d", &max);
printf("소수: ");
for (i = 2; i <= max; i++)
{
if (isPrime(i))
{
printf("%d ", i);
count++;
}
}
printf("\n");
printf("총 %d개의 소수를 찾았습니다!\n", count);
return 0;
}
bool isPrime(int num)
{
int i;
for (i = 2; i * i <= num; i++)
{
if (num % i == 0)
return false;
}
return true;
}
이 경우 1부터 루트n까지 검사하는 방법을 사용했는데, 수가 커지면 다른 방법들이 더 빠를 수 있습니다.
어떤 알고리즘들이 소수를 찾을 수 있는지 찾아보세요.
11. 배열과 포인터
11. 배열과 포인터
배열 = 포인터?
배열과 포인터는 본질적으로 같습니다.
배열은 포인터로 표현할 수 있고, 포인터도 배열로 표현할 수 있는데 표기법의 차이가 있을 뿐입니다.
때문에 JAVA등의 언어에서는 포인터를 사용하지 않고 배열만을 사용하도록 합니다.
그러면 프로그래머가 불필요한 주소값을 건드리지 않을 수 있고 또 배열이 있는데 굳이 포인터를 사용할 필요가 없다는 것이겠지요.
하지만 위험하긴해도 포인터는 유용하게 쓰이는 경우가 많으므로 이를 위해 C언어를 선호하는 사람도 많습니다.
1) 배열
배열의 사용법
배열은 일반적인 변수와 비슷한 형태로 선언하고 사용하는데 대괄호[]를 사용하는 점이 다릅니다.
먼저 다음과 같이 배열을 선언합니다.
int num[4];
그러면
num[0]
, num[1]
, num[2]
, num[3]
라는 4개의 num이 생성됩니다.
이때 1~4가 아니라 0~3으로 생성되는 이유는 C언어에서 자료형이 갖는 범위를 생각해보면 이해할 수 있습니다.
그리고 배열에
num[0] = 3
과 같이 일일이 값을 넣어도 되지만, 초기화 할 때 좀 더 편한 방법이 있습니다.int num[4] = {3, 1, 4, 5};
만약 모든 성분을 0으로 초기화 하고 싶다면 다음과 같은 생략 표현을 쓸 수 있습니다.
int num[4] = {0, };
배열을 선언하는 경우에 한해 다음과 같이 길이를 생략할 수 있습니다.
int num[] = {1, 2, 3, 4};
그러면 C언어가 알아서 num[4]라고 생각합니다.
배열을 사용하는 이유
그런데 어차피
num[2]
와 같이 사용할 바에 그냥 num2
로 선언하면 되는 것이 아닐까요?
물론 선언을 조금 더 짧게 할 수 있는 것도 장점이지만, 변수를 통해 접근할 수 있다는 장점이 있습니다.
예를 들어 배열에 저장된 값 중 양수의 개수를 세는 프로그램을 생각해봅시다.
int num[10] = {1, 3, 6, -3, 4, -1, 0, -5, -5, 7}
int i = 0, positive = 0;
for (i = 0; i < 10; i++)
{
if (num[i] > 0)
{
positive++;
}
}
printf("양수는 %d개입니다.\n", positive);
결과
양수는 5개입니다.
만약 이를 일일이 num1부터 num10까지 변수를 만들어 검사해야 한다면 소스코드를 읽을때도 복잡하고 수정하기도 까다롭습니다.
이렇듯 num[i]와 같은 접근에 배열이 유용하게 사용됩니다.
2) 포인터
주소연산자를 사용하는 방법으로 중급에서 진행.
10. 함수
10. 함수
함수의 개념
함수는 간단하게 2가지를 생각해볼 수 있습니다.
입력과 출력이 있는 경우와 어떠한 작업을 하는 경우입니다.
두 수의 합을 구해주거나 주어진 값의 제곱근을 구해주는 함수는 입력과 출력이 있는 경우이고
주어진 문장을 화면에 출력해주는 printf같은 경우는 작업을 하는 경우입니다.
1) 함수의 구조와 종류
입력과 출력이 있는 함수
함수는 다음의 구조를 갖습니다.
반환형 함수이름(매개변수)
{
내용
return 출력;
}
예를 들어 int형 정수 2개의 합을 int형 정수로 출력하는 함수 add를 만들어봅시다.
int add(int num1, int num2)
{
int sum = num1 + num2;
return sum;
}
맨 처음의
int
는 함수의 결과값을 의미하고, 괄호 안의 int
는 입력할 값을 의미합니다.
만약 add함수에 2.13같은 실수를 입력하면 오류가 발생합니다.
작업을 하는 경우
함수가 특별한 출력값을 낼 필요가 없다면 반환형을
void
로 설정하면 됩니다.
이 경우 함수는 어떠한 값도 돌려주지 않고 묵묵히 할 일을 합니다.
예를 들어 게임에서 데미지만큼 체력을 깎는 경우를 생각해봅시다.
void subHp(float damage)
{
playerHp -= damage;
}
약간씩 차이는 있겠지만 대략 위와 같은 형태일 것입니다.
2) 함수의 역할
함수를 사용하는 경우
함수는 주로 2가지 이유로 사용합니다.
주어진 입력에 따른 결과값이 필요할 때와 어떠한 행동을 요약할 때입니다.
예를 들어 제곱근을 구하는 과정을 필요할 때마다 매번 작성하는 것은 보기에도 좋지 않을 뿐더러 소스코드가 길어집니다.
하지만 이를 sqrt라는 하나의 함수로 만들면 간단하게 사용할 수 있어 프로그래머에게 매우 도움이 됩니다.
또는 매 프레임마다 또는 플레이어가 이동할때마다 플레이어의 상태를 화면에 출력해주어야 한다면, 코드를 난잡하게 붙여넣는 것 보다 showPlayerState와 같이 알아보기 쉬운 함수로 만들면 깔끔하고 수정하기도 편합니다.
만약 100군데에 저러한 코드를 복사해 넣었다면 한 번 코드를 수정할 때 100번씩 고쳐야 하니 끔찍하기 그지없습니다.
이처럼 코드를 알아보기 쉽게하고 수정하기 쉽게하는 것은 프로그램을 작성할 때 항시 지녀야 할 마음가짐입니다.
함수를 잘 사용하는 사람이 C언어를 잘하는 사람이라는 말이 있을 정도로 함수는 중요한 역할을 합니다.
예시
만약 앞의 예시에서 만들었던 구구단 출력을 함수로 표현하자면 다음과 같습니다.
#include <stdio.h>
void showDan(int num)
{
printf("=== %d단 ===\n", dan);
for (num = 1; num <= 9; num++)
{
printf("%d * %d = %d\n", dan, num, dan * num);
}
}
int main(void)
{
int dan = 1;
for (dan = 1; dan <= 9; dan++)
{
showDan(dan);
}
}
for문이 중첩되면 알아보기 힘들지만 이처럼 함수로 나타내면 1부터 9단을 출력한다는 것을 알아보기 더 쉽습니다.
3) 프로토타입
함수의 선언과 정의
함수를 사용하려면 2가지가 필요한데 바로 함수의 선언과 정의입니다.
선언은 이러한 입력과 출력을 가지는 함수가 존재한다는 것을 밝히는 부분이고
정의는 그 함수가 구체적으로 어떤 내용을 가지고 있다는 것을 밝히는 부분입니다.
예를 들어 두 정수의 합을 출력해주는 addInt라는 함수를 선언하려면
int addInt(int num1, int num2);
와 같이 작성하면 됩니다.
이렇게 선언과 정의를 분리하는 이유는 다음과 같은 소스코드에서 오류가 발생하기 때문입니다.
#include <stdio.h>
int main(void)
{
int dan = 1;
int num = 1;
for (dan = 1; dan <= 9; dan++)
{
showDan(dan);
}
}
void showDan(int num)
{
printf("=== %d단 ===\n", dan);
for (num = 1; num <= 9; num++)
{
printf("%d * %d = %d\n", dan, num, dan * num);
}
}
앞선 예시와의 차이점은 정의를 main보다 아래에서 했다는 점입니다.
C언어는 소스코드를 맨 위에서부터 읽어내려오는데 도중에 showDan이라는 알수 없는 단어를 만나자 오류가 나는 것입니다.
이를 방지하기 위해 C언어에게 미리 showDan이라는 함수가 대략 이렇게 생겼다는 것을 미리 알려주어야 합니다.
#include <stdio.h>
void showDan(int num);
int main(void)
{
int dan = 1;
int num = 1;
for (dan = 1; dan <= 9; dan++)
{
showDan(dan);
}
}
void showDan(int num)
{
printf("=== %d단 ===\n", dan);
for (num = 1; num <= 9; num++)
{
printf("%d * %d = %d\n", dan, num, dan * num);
}
}
이처럼 함수의 선언을 맨 위에 적어주고 정의를 아래에 하는 경우, 맨 위의 함수의 선언을 프로토타입이라고 합니다.
3) 프로토타입
함수의 선언과 정의
함수를 사용하려면 2가지가 필요한데 바로 함수의 선언과 정의입니다.
선언은 이러한 입력과 출력을 가지는 함수가 존재한다는 것을 밝히는 부분이고
정의는 그 함수가 구체적으로 어떤 내용을 가지고 있다는 것을 밝히는 부분입니다.
예를 들어 두 정수의 합을 출력해주는 addInt라는 함수를 선언하려면
int addInt(int num1, int num2);
와 같이 작성하면 됩니다.
이렇게 선언과 정의를 분리하는 이유는 다음과 같은 소스코드에서 오류가 발생하기 때문입니다.
#include <stdio.h>
int main(void)
{
int dan = 1;
int num = 1;
for (dan = 1; dan <= 9; dan++)
{
showDan(dan);
}
}
void showDan(int num)
{
printf("=== %d단 ===\n", dan);
for (num = 1; num <= 9; num++)
{
printf("%d * %d = %d\n", dan, num, dan * num);
}
}
앞선 예시와의 차이점은 정의를 main보다 아래에서 했다는 점입니다.
C언어는 소스코드를 맨 위에서부터 읽어내려오는데 도중에 showDan이라는 알수 없는 단어를 만나자 오류가 나는 것입니다.
이를 방지하기 위해 C언어에게 미리 showDan이라는 함수가 대략 이렇게 생겼다는 것을 미리 알려주어야 합니다.
#include <stdio.h>
void showDan(int num);
int main(void)
{
int dan = 1;
int num = 1;
for (dan = 1; dan <= 9; dan++)
{
showDan(dan);
}
}
void showDan(int num)
{
printf("=== %d단 ===\n", dan);
for (num = 1; num <= 9; num++)
{
printf("%d * %d = %d\n", dan, num, dan * num);
}
}
이처럼 함수의 선언을 맨 위에 적어주고 정의를 아래에 하는 경우, 맨 위의 함수의 선언을 프로토타입이라고 합니다.
피드 구독하기:
글 (Atom)