Logo Programming 학습목표 데이터종류를의미하는데이터타입에대해살펴본다. (LOGO의데이터타입 : 단어, 리스트, 배열 ) 값을저장하는공간인변수에대해살펴본다. 데이터관리하기에대해살펴본다. 2012. 5. 박남제 namjepark@jejunu.ac.kr
< 데이터타입 > - 단어 단어단어 (word) 는 1 개이상의문자들을나열한것, 123 같은수도단어 show hello 2
< 데이터타입 > - 단어 word 명령어 - 연결할인자가 3 개이상이면소괄호 (( )) 로묶음 < 입력 > word 단어 1 단어 2 (word 단어 1 단어 2 단어 3...) < 결과 > 단어 1, 단어 2 (, 단어 3...) 들을순서대로연결한단어를생성한다. show word "Java "Script show (word "jeju "national "university) 3 * commander 지우기명령어 : cleartext (ct)
< 데이터타입 > - 리스트 리스트리스트 (list) 는 0 개이상의멤버들을나열한데이터타입 [ ] 안에멤버들을나열하여표현하는데, 멤버의추가삭제가가능 show [one two three] Ex) [255 255 0], [one two three], [[1 3] 5 [7 [9]]], [] * print 와의차이점 : print 는대괄호 [] 로둘러싸지않고멤버만출력함 print [one two three] one two three 4
< 데이터타입 > - 리스트 list 명령어 - 인자를멤버로하는리스트를생성, 타입을그대로유지 < 입력 > list 멤버 1 멤버 2 (list 멤버 1 멤버 2 멤버 3...) < 결과 > 멤버 1, 멤버 2 (, 멤버 3...) 들을멤버로하는리스트를생성한다. show list "white "black Ex) show (list 4 "red [255 0 0]) [ 4 red [255 0 0] ] 5
< 데이터타입 > - 리스트 sentence 명령어 list 와는달리멤버들의타입을유지하지않고리스트를생성 < 입력 > sentence 멤버 1 멤버 2 se 멤버 1 멤버 2 (sentence 멤버 1 멤버 2 멤버 3...) (se 멤버 1 멤버 2 멤버 3...) < 결과 > 멤버 1, 멤버 2 (, 멤버 3...) 들을멤버로하는리스트를생성한다. show (sentence 4 "red [255 0 0]) [ 4 red 255 0 0 ] 6
< 데이터타입 > - 배열 - 멤버들을나열한데이터타입으로 {} 안에멤버들을나열하여표현함. - 리스트와는달리멤버의개수를변경할수없지만, 임의의멤버를다른값으로대체할수있음 show {[one three] 5 {7 9}} {[one three] 5 {7 9}} * 배열 (Array) - 동일한타입을가지는변수들의집합이다. - 언어에서제공하는가장기본적인자료구조형 ( 자료구조는방대한데이터를효율적으로관리하기위한것 ) * 배열의사용 - 여러개의변수를한번에선언가능하다 - 같은형의변수들을연속적으로쓸수있다. - 배열을통해문자열사용이가능하다. 7
< 자료유형표현방법 > Logo 에서는별도자료형을구분하는키워드를사용하지않고 자료의표현방법으로자료형을구분한다. 구분 NUMBER ( 숫자 ) 표현 1 ¼ 3.14 특징 NUMBER는정수, 유리수, 실수를포함한다. 구분 표현 LIST ( 리스트 ) [3 [7 a]] [3 [7 a] {a b c}] 특징 [ ] 괄호로구분한다. 숫자, 단어, 리스트, 배열을포함할수있다. ARRAY ( 배열 ) {1 2 3} {3 5 7 9} WORD ( 단어 ) OK 7 { } 괄호로구분한다. 큰따옴표 ( ) 로구분한다. 문자열이다. 숫자도문자열로다룰수있다. SENTENCE ( 문장 ) [3 7 a] TRUE FALSE 숫자, 단어, 리스트만담을수있는단순리스트이다. 즉, 문장안에는 [ ] 괄호를담을수없다. BOOLEAN ( 참거짓 ) Numberp, wordp, listp, arrayp 명령어가 TRUE 혹은 FALSE 를반환한다. 8
< 변수 > 데이터 상수 정해진값, 프로그램이실행되는동안변하지않는값 변수 프로그램이실행되는동안값을저장하는공간 ( 프로그램에서의데이터 ) 9
< 변수 > 변수선언하는 ( 생성하는 ) 명령어 make, 변수에저장된값을확인하는 thing < 입력 > make 변수이름값 < 입력 > thing 변수이름 < 결과 > ' 값 ' 을저장한 ' 변수이름 ' 변수를생성한다. < 결과 > ' 변수이름 ' 변수의값을의미한다. * thing " 을줄여서 : 를사용한다. 10
< 변수 > - 변수를사용하여정사각형그리기 make "length 100 make "angle 90 fd :length rt :angle fd :length rt :angle fd :length rt :angle fd :length 11
< 연습문제 > length 와 angle 변수를이용해서다음과같은정삼각형을그리는프로그램을작성하여라 12
< 변수 > 사용자로부터변수에저장될값입력받기 < 입력 > readword rw < 입력 > readchar rc < 입력 > readlist rl < 결과 > 사용자로부터한행의내용을단어로입력받는다. < 결과 > 사용자로부터한문자를단어로입력받는다. < 결과 > 사용자로부터한행의내용을리스트로입력받는다. 13
< 변수 > - 한변의길이를입력받아정삼각형그리기 show [input length of side] make "length readword fd :length rt 120 fd :length rt 120 fd :length 14
< 실습문제 > - readword 를이용해서펜색상과한변의길이를입력받고 이를적용하여정사각형을그리는프로그램을작성하여라. (ex. 실행결과는펜색상으로 4 를, 한변의길이로 100 을입력한경우임 ) 15
< 변수 > 배열을생성하는명령어 array < 입력 > array 크기 (array 크기초기인덱스 ) < 결과 > ' 크기 ' 개의멤버로구성된배열을생성한다. ' 초기인덱스 ' 는첫번째멤버의위치이고생략하면 1 이된다. make "myarray array 5 myarray 인덱스 1 2 3 4 5 make "myarray (array 5 0) myarray 인덱스 01 12 23 43 45 16
< 변수 > 배열에값을저장하는명령어 setitem < 입력 > setitem 인덱스배열값 make "myarray array 3 setitem 1 :myarray 100 setitem 2 :myarray 200 setitem 3 :myarray 300 < 결과 > ' 배열 ' 의 ' 인덱스 ' 에해당하는멤버에 ' 값 ' 을저장한다. 100 200 300 인덱스 1 2 3 Ex) 17
< 데이터타입판별명령어 > - 데이터타입판별하기 명령어 wordp 데이터 listp 데이터 arrayp 데이터 numberp 데이터 설명 ' 데이터 ' 가단어면 true, 그렇지않으면 false ' 데이터 ' 가리스트면 true, 그렇지않으면 false ' 데이터 ' 가배열이면 true, 그렇지않으면 false ' 데이터 ' 가수이면 true, 그렇지않으면 false Ex) 명령결과명령결과 show wordp "Hello true show listp "Hello false show wordp 357 true show arrayp {2 3 5} true show wordp [Hello] false show arrayp [1 3 5] false show listp [100 200] true show numberp 357 true 18
< 기타판별명령어 > 명령어 emptyp 데이터 설명 ' 데이터 ' 가비어있으면 true, 그렇지않으면 false ' 데이터 2' 가리스트나배열인경우 ' 데이터 1' 이 ' 데이터 2' 의멤버 memberp 데이터 1 데이터 2 에해당되면 true, 그렇지않으면 false ' 데이터 2' 가단어인경우에는 ' 데이터 1' 이 ' 데이터 2' 에포함된문 자면 true, 그렇지않으면 false equalp 데이터 1 데이터 2 ' 데이터 1' 과 ' 데이터 2' 가같으면 true, 그렇지않으면 false 배열인경우값이저장된객체가같아야서로같다고판정 Ex) 19
< 선택명령어 > 명령어 item 인덱스데이터 first 데이터 last 데이터 butfirst 데이터 butlast 데이터 설명 ' 데이터 ' 가단어면 ' 인덱스 ' 번째문자가결과 ' 데이터 ' 가리스트거나배열이면 ' 인덱스 ' 번째멤버가결과 ' 데이터 ' 가단어면첫번째문자가결과 ' 데이터 ' 가리스트면첫번째멤버가결과 ' 데이터 ' 가배열이면첫번째멤버의인덱스가결과 ' 데이터 ' 가단어면마지막문자가결과 ' 데이터 ' 가리스트면마지막멤버가결과 ' 데이터 ' 가단어면첫번째문자를제외한나머지문자 ' 데이터 ' 가리스트면첫번째멤버를제외한리스트 ' 데이터 ' 가단어면마지막문자를제외한나머지 ' 데이터 리스트면마지막멤버를제외한리스트 단어, 리스트, 배열 단어, 리스트 Ex) 명령결과명령결과 show item 3 Logo g show last Logo o show item 2 [10 20 30 40] 20 show last [10 20 30] 30 show first Logo L show butfirst Logo ogo show first [10 20 30] 10 Show butfirst [10 20 30] [20 30] show first {10 20 30} 1 Show butlast [10 20 30] [10 20] 20
< 예제 > 입력받은리스트에서첫번째멤버를제외한나머지리스트를 mylist에저장하는예제. 실행결과는 hi one two three 를입력했을경우의결과임. 21
< 리스트멤버추가명령어 > 명령어 fput 데이터리스트 lput 데이터리스트 설명 ' 데이터 ' 를 ' 리스트 ' 의첫번째멤버위치에추가한 리스트가결과 ' 데이터 ' 를 ' 리스트 ' 의마지막멤버위치에추가한 리스트가결과 Ex) * fput 과 lput 는임의의멤버를추가한리스트를결과로할뿐이지실제변수에저장된리스트를수정하지않는다. 22
< 리스트멤버추가명령어 연습예제 2> 만약리스트값으로하는변수에임의의멤버를첫번째멤버로삽입하려면.. - Make를이용해서변수를새롭게생성해야한다. make "mylist readlist 20 30 입력 make "data readword 10 입력 make "mylist fput :data :mylist show :mylist 리스트를저장한변수에임의의값을첫번째멤버로삽입 23
< 리스트멤버추가명령어 실습문제 > 리스트를저장한변수에임의의값을마지막멤버로삽입하는프로그램을 작성하여라. 단, 리스트와임의의값은입력받는다. make "mylist readlist 10 20 입력 make "data readword 30 입력 make "mylist lput :data :mylist show :mylist 24
< 데이터관리하기 - Stack / Queue 명령어, 개념 > * Stack - 데이터의삽입과삭제가한쪽방향에서만일어나는데이터구조 - 후입선출 (LIFO : Last-in First Out). 가장나중에삽입된데이터가가장먼저삭제되는방식 * Queue - 한쪽방향으로데이터가삽입되고, 반대방향으로데이터가삭제되는구조 - 선입선출 (FIFO : First-in First Out). 가장먼저삽입된데이터가가장먼저삭제되는방식 25
< 데이터관리하기 > - Stack 에데이터삽입 / 삭제 명령어 설명 push 스택이름데이터 ' 스택이름 ' 리스트에 ' 데이터 ' 를삽입 pop 스택이름 ' 스택이름 ' 리스트에서하나의데이터를삭제 삭제한데이터가결과 make "mystack [] push "mystack 10 push "mystack 20 push "mystack 30 show :mystack show pop "mystack show :mystack 26
< 데이터관리하기 > - Queue 에데이터삽입 / 삭제 명령어 queue 큐이름데이터 dequeue 큐이름 설명 ' 큐이름 ' 리스트에 ' 데이터 ' 를삽입 ' 큐이름 ' 리스트에서하나의데이터를삭제삭제한데이터가결과 make "myqueue [] queue "myqueue 10 queue "myqueue 20 queue "myqueue 30 show :myqueue show dequeue "myqueue show :myqueue 27
< 데이터관리하기 count 명령어 > < 입력 > count 데이터 < 결과 > ' 데이터 ' 가단어면문자의수 ' 데이터 ' 가리스트나배열이면멤버의수가결과 Ex) 명령결과명령결과 show count "Logo 4 show count {1 2 3} 3 show count [10 20 30] 3 show count {1 {2 3} 4} 3 28
< 데이터관리하기 문자와관련있는명령어 > 명령어 ascii 문자 char 수 설명 ' 문자 ' 에대한 ASCII 코드값이결과 ' 수 ' 에대한 ASCII 문자가결과, ' 수 ' 는 0~255 사이의수 lowercase 단어 ' 단어 ' 에있는영문대문자를소문자로변환한단어가결과 uppercase 단어 ' 단어 ' 에있는영문소문자를영문대문자로변환한단어가결과 Ex) 명령 결과 명령 결과 show ascii A 65 show lowercase Logo logo show char 100 d show uppercase Logo LOGO 29
< 데이터관리하기 데이터타입변환명령어 > 명령어 listtoarray 리스트 arraytolist 배열 설명 ' 리스트 ' 와동일한멤버를갖는배열이결과 ' 배열 ' 과동일한멤버를갖는리스트가결과 Ex) 명령결과명령결과 show listtoarray [1 3 5] {1 3 5} show arraytolist {one two} [one two] 30
http://infosec.jejunu.ac.kr 31