Contents
1. 참여자 명단 ¶
학번 | 이름 |
06 | 김준석 |
12 | 한원표 |
12 | 용상훈 |
12 | 박도건 |
2. 수업진행 상황 ¶
이름 | 3/21 | 3/28 | 4/3,4보강 | 4/5 | 4/11 | 4/16 |
김준석 | O | O | O | O | O | O |
한원표 | O | O | O | X | O | X |
용상훈 | O | O | X | O | X | O |
박도건 | O | O | X | O | X | O |
4.2.1. 회고 ¶
- 한원표 : 새싹교실 첫 수업이었다. 박도건, 용상훈이라는 동기들과 같이 하게되었는데 앞으로 친해졌으면 좋곘다. 처음에는 새싹교실을 하는 이유와, 진행방식 등에 대해 선배님께 설명을 들었다. 그리고 wiwki에 가입해서 앞으로 우리가 새싹교실에서 배운것, 느낀것을 직접 편집할 수 있다는 것이 좋았다. 그 후에 Virtual Box라는 것으로. Hello World라는 프로그램을 짯는데 새로운 환경을 볼 수 있어서 좋았지만 한편으로는 처음보는 환경이라 어색한 감이 있었다. 그리고 어플 프로그램을 보여주셨는데. 친구들은 이해하는것 같은데 나만 잘 못하는 것 같았다.
- 용상훈 : 오늘 경험했던 일은 새싹교실은 "어떻게 된다"라고 설명하는 시간이었다. 처음에 새싹교실에 들어가면 무지 어색할 것 가았는데 그렇지 않았다. 컴퓨터 3대를 앞에두고 wiki에 한해서 처음 이야기를 들었다. 생소한것이어서 많이 신기하셨다. 그리고 버츄얼 박스 받고 리눅스 환경를 처음보았다. 재미있을것 같다. 그리고 가장 신기한 일은 고등학교 선배님인 박성현 선배님을 뵙는데 너무 신기 하였다. 먼저 인사를 드렸어야 했는데.. 인사드리고 전화번호도 알려드렸다. 신기한 하루였다.
- 박도건 : 캡스톤설계실(208-216)에서 김준석 선배님과, 한원표, 용상훈 동기들과 같이 3월 21일 PM6시에 gcc, Linux, android example, wiki작성법 등을 배웠다. 나랑 비슷해보이는 친구가 있어서 같이 프로젝트 할 수 있을것 같다.
- 김준석 :용상훈, 한원표, 박도건을 이끌고 새싹을 캡실에서 진행해보았다. 우리반의 징크스는 끝나지 않았다. 꼭 걸러내도 기본을 아는 친구들이 아무것도 모르는것처럼 들어와. 여튼, 그래도 새로 새싹을 가르칠수 있고 좀 알고 있는 학생들이 들어와서 좋다. 강의를 다음시간에 팍팍나가도 될것 같다. 2주차에 대해 코딩하는것이나 앞으로의 진로에 대해 물어보았고 현재 전체적인 진도나 수준을 간접적으로 알 수 있게 된것이 가장 큰 성과다.
4.3.2. 교육 내용 ¶
- 장소 시간 : 6층 PC실에서 6시에 실습을 해봄
새싹교실/2012/새싹교실강사교육/2주차
새싹교실/2011/무전취식/레벨4
- 2주차 유인물 교육
- 이소라 때리기 게임을 Linux gedit를 사용해 코딩을 시켜봄.
- 한글 띄어쓰기에 문제가 발견되고 코딩 띄어쓰기에 대한 중요성을 알지 못하는것을 알게됨 - 김준석
- 한글 띄어쓰기에 문제가 발견되고 코딩 띄어쓰기에 대한 중요성을 알지 못하는것을 알게됨 - 김준석
- 디버깅하는 방법을 앞에서 직접 보여줌. 몇번째 라인에 몇번쨰가 잘못된 라인이라고 나오죠? 이걸통해 원표와, 상훈이의 디버깅을 고쳐주었습니다. 띄어쓰기 잘하고 괄호 잘닫으라고.
- 예약어 -> 예약어는 C의 시스템에서 미리 선점해놓은 단어를 의미합니다. 이것을 변수명이나 함수명으로 쓰면 안됩니다.
- printf(), scanf()어떻게 쓰는지 알죠?
- int, char, float, long, double 변수는 무슨 표현을 위해 만들어졌는지 알려주었습니다. 정수, 문자, 실수. 알죠?
- #define 선언문의 사용법에 대해 알려주었습니다. #define으로 매크로를 선언해놓으면 편하게 선언 단어를 만들음으로 쓸수있지용? 그 응용에 대해서는 다음에 기회가 되면 알려주겠습니다.
- 헤더 파일들에는 뭐가 들어가는지 한번 알아보았습니다. math.h에는 수학에 관련된 함수. time.h에는 시간 제어에 관련됨 함수를 사용했죠 .srand(time(NULL))이 왜 쓰이는 지는 아직 안알려주었답니다.
- if문, switch()case: default:}, for, while문의 생김새와 존재 목적에 대해서 알려주었습니다. 말그대로 프로그램의 중복을 없애고 사용자의 흐름을 좀 더 편하게 코딩할수 있도록 만들어진 예약어들입니다. 아 switch case문에서 break를 안가르쳤네요
- 과제로 나오는 ACM 문제를 풀어보았습니다
4.3.3. 코 딩 ¶
- 한원표 - 세 정수 정렬하기
#include<stdio.h> int main() { int a,b,c,d; scanf("%d %d %d",&a,&b,&c); if(a>b) { d=b; b=a; a=d; } if(b>c) { d=c; c=b; b=d; } if(a>b) { d=b; b=a; a=d; } printf("%d %d %d",a,b,c); return 0; }
- 박도건 - 윤년구하기
#include <stdio.h> int main(void) { int num; printf("Input integer."); scanf("%d", &num); if(num % 400 == 0) printf("Leap"); else if((num % 4 == 0) || (num & 100 != 0)) printf("Leap"); else printf("Normal"); return 0; }
- 용상훈 - 세 정수 정렬하기
#include<stdio.h> int main() { int a,b,c; int d; scanf("%d %d %d",&a,&b,&c); if(a>b) { d=b; b=a; a=d; } if(b>c) { d=c; c=b; b=d; } if(a>b) { d=b; b=a; a=d; } if(a==b || a==c || b==c ) { printf("Impossible"); } else printf("%d %d %d",a,b,c); return 0; }
4.3.4. 2주차 과제 ¶
- 한원표 -윤년 판단하기
#include<stdio.h> int main(void) { unsigned int y; scanf("%u",&y); if(y%400==0) { printf("Leap\n"); return 0; } if(y%100==0) { printf("Normal\n"); return 0; } if(y%4==0){ printf("Leap\n"); } printf("Normal\n"); return 0; }
- 용상훈 - 윤년판단하기
#include<stdio.h> int main() { long long n; bool t = 0; scanf("%lld",&n); if(n%4==0) { t = 1; if(n%100 == 0) { t = 0; if(n%400 == 0) { t = 1; } } } if(t) { printf("Leap"); } else { printf("Normal"); } return 0; }
4.4.1. ICE breaking ¶
- 박도건 - 게임했습니다. 카트라이더 했습니다. 1주일 내내. 프로그래밍했습니다. map editor만드는거 굉장히 노가다에요. 빡쳐요. 학교수업은 선대가 매우 짜증나요. C는 할만해요. 교수님이 훅훅 지나가는데 전 상관없음. 나 좀 짱임. 고등학교 친구들과 만나서 막창고기 먹음. 돼지 되겠음.
- 용상훈 - 과제에 치여살음. 학교 짜증남. 고등학교 친구 살짝 만나고. 주말에는 MT를 빠지고 할머니 댁에 갔습니다. 참잘했어요. 그리고 가족들 외식했었음. 과제했음. 소설이나 자기계발서 읽는거 좋아해서 그거 읽고. 운동했습니다. 매일. 달리기. 웨이트도 하고 삽니다. 전 건강해 질꺼에요 뿌잉뿌잉 *^^*
- 김준석 - 아이패드 개발을 하는데 데드라인은 지났어. 그래서 교수님께 사과메일을 보냈어. 그리고 캡스톤 설계실에서 새로운 프로젝트를 제안을 받습니다. 원래 댄스스포츠 동아리를 하고 있는데 발레를 배우게 됬음. 수요일마다 운동과 건강 조교활동을 하고 있고 목요일은 교수님 애를 봐줌. 어제 지인중에 상당한 분이 있어서 밤새서 지켜주고 한빛 리더스에서 독후감쓰는거 했음. 휴학생인데 학교에 24시간 있고 영어학원 10시에 일어나는거 너무 힘듬. 난 아침에 못일어나~ 그리고 새싹 강사들 교육하는 거 4타임 너무 귀찮음=ㅂ= 강사가 못알아 먹어!!!! 뭐 여튼 원표도 와서 4시간 와서 배우고 갔음. 일주일이 부족함. 시간을 대출해줘!
4.4.3.1. 한원표 보강 수업(2012/4/3, 4/4) ¶
- 변수타입 - C언어는 고급언어이다. 왜냐. 사람이 쓰기 좋게 만들기때문이다. 편하게 만들어주는 것중 하나가 변수 타입이다. int는 정수, char는 문자, float는 실수. 참 편하지 않은가? 사람을 위해 만들어진것이다. 언제까지 0과 1로 대화할텐가?
- if문
int a = 5; if(a >3){ printf("a가 3보다 큽니다.\n"); } else printf("아니면 말고.\n");
- for문
for(1번,2번,4번){ 3번들; } for(i = 0;i<5;i++){ }
- while문
a = 5; while(a>3){ a--; } printf("%d",a);
- 연산자 집단
+-*/% ||&& != == <= >= ~^&| ++i i++
+-*/%
사칙연산 및 나머지
|| && 논리 연산 : ||는 한쪽만 참이어도 참을 뱉어냄 &&는 양쪽이 참이어야지 참을 뱉어냄
!= == <= >= 비교 연산자 : 설명 생략
~^&| 비트 연산자 : char 예제로 1byte -> 8bit ~은 0과 1을 바꾸는것 ^는 같으면 거짓 다르면 참 &는 양쪽이 1이어야지 1 |는 한쪽만 1이어도 1로 서로 계산함.
- 괄호 ()를 치면 우선순위가 바뀌는건 당연지사
- ++i 와 i++는 i = i +1;과 같지만 다른 명령문과 같이 실행될때 다른결과를 보여줍니다.
- 함수 : 사용자의 행동을 이름으로 추상화해서 계속 쓰는 반복을 줄여준다.
- 변수가 저장되는곳 : 변수는 메모리에 저장되는데 int는 4byte 저장공간에 저장된다 그리고 그것의 보관장소는 어떤 주소값(address)를 가진다.
- 포인터 : 포인터변수는 32bit 버전 컴파일러에서 4byte 64bit 버전 컴파일러에서 8byte의 크기를 가집니다. 어떤타입이든 말이죠 (void *), (int *), (float *) 모두 말이에요. int *a는 4byte를 할당받고 a에는 주소값(address)을 가지게 됩니다. 포인터 (*)를 붙이게 되면 그 해당 주소가 가르키는 값을 찾아가게 되죠. int형 값말이에요 그러니까 4byte만 찾아오겠죠?
- 함수가 사용될떄 C는 기본적으로 Call-by-value를 사용합니다. 항상 값복사를 통해 변수의 값들을 전달하죠.
- Call-by-value, Call-by-reference 예제
#include<stdio.h> void swap(int a, int b){ int temp; temp = a; a = b; b = temp; } void swap2(int *a, int *b){ int temp; temp = *a; *a = *b; *b = *temp; } int main(){ int i=3,j=5; swap(i,j); printf("%d %d\n",i,j); swap2(&i,&j); printf("%d %d\n",i,j); return 0; }
- 위와 같이 함수 추상화의 완성형은 Call-by-reference를 이용한 전달입니다. 잊지마세요!
- 함수의 추상화와 더불어 중요한건 함수의 목적에 따른 이름짓기(naming)입니다. 함수 이름을 보고 용도를 파악할 수 있어야되요!
- 배열(array)는 같은 타입을 한꺼번에 관리하게 해줍니다
int a[10];
이라하면 a는 int형 10개가 생겨있고 0~9까지의 인덱스(index)를 지니죠.
- a이름에는 첫번째 주소가 들어가있습니다.
scanf("%d",a);
는 이 배열의 첫번째a[0]
을 가리키게 되죠.
- 배열의
a[2]
는 이것과 같습니다*(a+2)
- a이름에는 첫번째 주소가 들어가있습니다.
- 구조체와 typedef
- 구조체는 사용자가 타입을 정의해서 변수처럼 쓸수 있게 만들어주는것 입니다!
- typedef는
typedef 정의할것 이름;
형식으로 정의하여 진짜 타입처럼 간단하게 쓰는겁니다.
- 구조체는 사용자가 타입을 정의해서 변수처럼 쓸수 있게 만들어주는것 입니다!
///typedef를 쓴경우 typedef struct _CALORIE{ char name[40]; float value; }CALORIE; CALORIE myfood; 이름과 실수형 값을 가진 CALORIE라는 타입을 만든 예제
- 구조체와 함수 - 구조체도 다른변수와 마찬가지로 Call-by-value와 Call-by-reference방식으로 넘기게 됩니다.
valuefunc(myfood); referencefunc(&myfood);
- 포인터와 함수와 구조체
- 구조체는 인스턴스가 주소값 참조형일때와 일반 선언시 다른 모양으로 부릅니다.
- 구조체는 인스턴스가 주소값 참조형일때와 일반 선언시 다른 모양으로 부릅니다.
CALORIE a; CALORIE *b = &a; scanf("%s, %f",a.name,&(a.value)); //a.name의 입력과 a.value의 입력이 다른것에 주의! 이건 배열과 일반변수와의 차이점에서 설명했습니다. printf("%s %.2f\n",a.name,a.value); //그냥 불러오기 printf("%s %.2f\n",b->name,b->value); //->참조형으로 불러오기
- 코드 분석
///pcal은 음식 40개가 들어갈수 있는 구조체 배열의 주소값을 넘겨받는다고 정의합시다. ///num은 음식이 들어가있는 갯수를 뜻합니다. float calcalc(CALORIE *pcal, int num){ char name[40]; float gram = 0; float totalcal = 0.0; int i; printf("-- 식품명 일람 -------------\n"); for(i = 0; i<num;i++) //갯수만큼 출력합니다 printf("%s\t", (pcal+i)->name); //이름을. 출력합니다 printf("\n----------------------------------------\n"); while(1){ printf("식품명(end를 입력하면 계산합니다.) : "); scanf("%s", name); if(strcmp(name, "end") == 0) break; printf("그램 수 : "); scanf("%f", & gram); for(i=0;i<num;i++){ if(strcmp(name, (pcal+i)->name) == 0){ totalcal += (pcal+i)->value * gram /100.0; break; } } } return totalcal; }
4.4.3.2. 박도건 용상훈 수업(2012/4/8) ¶
- 한원표 수업과 같음
- 둘다 잘알고 있어서 개념적인 부분을 설명하고 지나감
- 함수형 포인터 설명 - 함수의 이름에는 주소값을 가지고 있어서 포인터로 제어할 수 있다.
- 함수는 변수가 남아도 실행이 된다?
#include<stdio.h> int func(){ return 0; } int main(){ printf("%d\n",func(1,2,3,4)); return 0; }
- 박도건과 용상훈 멘붕하는거 봄
4.4.3.3. 박도건 자율 학습 ¶
- 게임을 만들때 이미지를 그린다. 200개가 넘는 그림을 어떻게 제어할 것인가를 논함.
- C++이라면 이미지를 그리는 객체를 Templete로 만들어서 paint()함수에 그래픽 *를 넘겨서 자기가 알아서 그리게하는것이 좋다. list에 넣고 for문만 돌리면 끝나니까
- C++이라면 이미지를 그리는 객체를 Templete로 만들어서 paint()함수에 그래픽 *를 넘겨서 자기가 알아서 그리게하는것이 좋다. list에 넣고 for문만 돌리면 끝나니까
- Thread에 간한 간단한 설명
- http://forum.falinux.com/zbxe/?document_srl=441104 를 참조하면 통신 프로그램을 짤 수 있을 것이다.
- http://forum.falinux.com/zbxe/?document_srl=441104 를 참조하면 통신 프로그램을 짤 수 있을 것이다.
4.5.1. 한원표 보강 ¶
- 파일 입출력이 왜 필요한가 설명함
- 운영 체제와 메모리(파일 포함)의 관계를 설명
- 운영체제는 파일 시스템을 관리합니다. 관련해서 이번에 가르쳐주는것은 *(포인터:Pointer)관련해서 FILE 구조를 메모리 참조를 통해서 하는것을 알려주게 되었습니다. 파일(File)은 메모리주소로부터 시작되고 운영체제를 이를 관리하기 때문에 C에서 지원하는 라이브러리를 통해 운영체제로 부터 파일을 관리하는 정보를 가진 FILE 구조체를 불러오게 됩니다. 그래서 우리는 *를 통해 주소값을 따라가서 FILE구조체로 그 정보를 얻어오게 되죠. Good Good!
- 기본 파일 구조체에는 대략 이런정보가 들어가게 됩니다. 파일 경로, 이름, 크기, 현재 얼마나 읽었는지. 자세한 사항은 http://winapi.co.kr/clec/cpp2/17-2-1.htm 에 들어가면 있답니다.
- 절대 경로와 상대경로. '절대 경로'는 운영체제 기준으로 운영체제가 젤 세부로 나눠주는 드라이브를 비유해서 설명해주었습니다. 운영체제 기준으로
C:\\Desktop\test.txt
를 같은 폴더 프로그램으로 불러와봅시다. 잘불러와지네요? 하지만C:\\Desktop\오리\test.txt
로 저 txt파일과 프로그램을 옮기면 실행이 될까요? 안되죠? 같은 폴더에 있는데도. 그럼 어떻게 해야할까요? 그래서 상대경로 라는것이 나왔습니다..\test.txt
면 같은 폴더에 있는 test파일을 찾고...\test.txt
는 바로 위 상위폴더를 찾습니다. 다른폴더는 어떻게 하나고요?.\오리\test.txt
로 설정하면되죠. 상대 경로는 해당 실행파일 기준으로 파일 위치를 추적 하는것이랍니다.
- 예제를 통해 파일 입출력 스트림을 표현해주었지요.
- stdin, stout. 표준 입출력을 지원해주는 스트림입니다. fprintf와 print가 똑같이 쓰일수 있는 예제를 보여주었죠.
- 운영체제는 파일 시스템을 관리합니다. 관련해서 이번에 가르쳐주는것은 *(포인터:Pointer)관련해서 FILE 구조를 메모리 참조를 통해서 하는것을 알려주게 되었습니다. 파일(File)은 메모리주소로부터 시작되고 운영체제를 이를 관리하기 때문에 C에서 지원하는 라이브러리를 통해 운영체제로 부터 파일을 관리하는 정보를 가진 FILE 구조체를 불러오게 됩니다. 그래서 우리는 *를 통해 주소값을 따라가서 FILE구조체로 그 정보를 얻어오게 되죠. Good Good!
#include <stdio.h> int main(){ int a; fprintf(stdout,"%d",5); printf("%d",5); fscanf(stdin,"%d",&a); scanf("%d",&a); return 0; }
- 리다이렉션 > 표시는 현재 출력을 다른곳으로 돌릴때 쓴다고 했죠. 현재 이 test.exe파일을 실행시키면 5를 출력한다고 합니다
윈도우의 CMD에서 이파일을 리다이렉션을 통해 test.txt로 출력을 시켜보겠습니다
test.exe > test.txt를 하면 test.txt 에는 5가 들어가게됩니다.
- 한원표 과제
Git을 공부해서 Repository를 만들고 Readme파일을 올려서 다음주에 보여주기.
4.5.2. 용상훈, 박도건 ¶
- 한원표와 같음.
- 두명의 목표에 대해 얘기함.
- 용상훈은 iOS개발을 해보고 싶다고함. 경험시켜주기 위해 고한종 조인.
- 뭐 배웠니? - 김준석
- 뭐 배웠니? - 김준석
- 박도건의 프로그램 봐줌.
- Scroll을 옮길때 백분률이 잘못되었는데 %를 써서 제대로 작동하지 않음
- 백분률 공식 (x/최대값) * 100 을 했는데 안됨. 원인은 int로 되어 0이 자꾸 리턴되서 그랬음. 그래서 (float)(x/최대값) * 100을 집어넣음.
- Scroll을 옮길때 백분률이 잘못되었는데 %를 써서 제대로 작동하지 않음
4.6.1. 박도건, 용상훈 참석 ¶
- 질문 : 용상훈 -> 제 인생에 대해 알고 싶어요. 자신감도 없는것 같고요.
- 답변 : 지금은 알수 없지만 많은것을 경험해 보았으면 좋겠습니다. 지금 이것이 아니라면 지금 달려나갈길에 대해 신경쓰고 자신감을 가졌으면 좋겠습니다. 순자의 성악설과 원효대사의 해골바가지를 예를 들면서 자신의 마음은 말그대로 마음먹기에 달렸다고 말했죠. 위선의 한자 정의는 僞善! 하지만 거짓 위(僞)는 단순히 자신의 악(惡)을 위해 속인다는 개념이 아닙니다. 사람이 사람을 위해 거짓을 행하며 사람의 마음으로 악(惡)을 다스려 선(善)에 넣는것을 말하게 됩니다. 위선을 단순히 거짓으로 생각하지 말란 얘기. 그래서 사람간의 예절이나 규율 법칙의 기반이 생기게 됬죠(이 얘기는 주제에서 벗어난 딴얘기 입니다). 몸이 먼저냐 마음이 먼저냐를 정하지 마세요. 우선 해보면 자연스럽게 따라오게 되기도한답니다. 필요하다면 Just do it! 하지만 이게 항상 옳은건 아니죠. 선택은 자유. 능력치의 오각형도 보여주었죠. 다른사람이 가지지 못한 장점을 당신은 가지고 있습니다. Whatever! 힘들때는 상담하는것도 좋고 시간을 죽여보는것도 한방법입니다. 항상 당신이 중요한거죠.
- 답변 : 지금은 알수 없지만 많은것을 경험해 보았으면 좋겠습니다. 지금 이것이 아니라면 지금 달려나갈길에 대해 신경쓰고 자신감을 가졌으면 좋겠습니다. 순자의 성악설과 원효대사의 해골바가지를 예를 들면서 자신의 마음은 말그대로 마음먹기에 달렸다고 말했죠. 위선의 한자 정의는 僞善! 하지만 거짓 위(僞)는 단순히 자신의 악(惡)을 위해 속인다는 개념이 아닙니다. 사람이 사람을 위해 거짓을 행하며 사람의 마음으로 악(惡)을 다스려 선(善)에 넣는것을 말하게 됩니다. 위선을 단순히 거짓으로 생각하지 말란 얘기. 그래서 사람간의 예절이나 규율 법칙의 기반이 생기게 됬죠(이 얘기는 주제에서 벗어난 딴얘기 입니다). 몸이 먼저냐 마음이 먼저냐를 정하지 마세요. 우선 해보면 자연스럽게 따라오게 되기도한답니다. 필요하다면 Just do it! 하지만 이게 항상 옳은건 아니죠. 선택은 자유. 능력치의 오각형도 보여주었죠. 다른사람이 가지지 못한 장점을 당신은 가지고 있습니다. Whatever! 힘들때는 상담하는것도 좋고 시간을 죽여보는것도 한방법입니다. 항상 당신이 중요한거죠.
- 질문 : 박도건 -> OOP란 무엇인가요?
- 답변 : 객체 지향 프로그래밍(Object Oriented Programming)입니다. 프로그래밍 설계 기법이죠. 전에도 얘기했듯이 프로그래밍 설계 기법은 프로그래머의 설계를 도와 코드의 반복을 줄이고 유지보수성을 늘리는데 있습니다. 하지만 생산성이 있는 프로그래머가 되고싶다면 API를 쓰고 알고리즘을 병행해서 공부해야 된다는것을 알리고 싶습니다. 그리고 단순히 Class를 쓰는것과는 다른기법입니다. 객체 지향적으로 설계된 C++이나 Java에서 Class를 쓰기때문에 Class를 쓰는것이 객체지향으로 알고있는 사람들이 많습니다. 그건... 아니죠. 절차지향 프로그래밍과 다른점은 차차 가르쳐 드리겠습니다. C에서 Class란 개념이 설계상으로 발전했는지 알려드렸습니다. 함수 포인터와 구조체였죠. 그게 원형입니다.
- 답변 : 객체 지향 프로그래밍(Object Oriented Programming)입니다. 프로그래밍 설계 기법이죠. 전에도 얘기했듯이 프로그래밍 설계 기법은 프로그래머의 설계를 도와 코드의 반복을 줄이고 유지보수성을 늘리는데 있습니다. 하지만 생산성이 있는 프로그래머가 되고싶다면 API를 쓰고 알고리즘을 병행해서 공부해야 된다는것을 알리고 싶습니다. 그리고 단순히 Class를 쓰는것과는 다른기법입니다. 객체 지향적으로 설계된 C++이나 Java에서 Class를 쓰기때문에 Class를 쓰는것이 객체지향으로 알고있는 사람들이 많습니다. 그건... 아니죠. 절차지향 프로그래밍과 다른점은 차차 가르쳐 드리겠습니다. C에서 Class란 개념이 설계상으로 발전했는지 알려드렸습니다. 함수 포인터와 구조체였죠. 그게 원형입니다.
- 질문 : 박도건, 용상훈 -> 저급 언어는 왜 필요한가요?
- 답변 : 플래시 프로그래머가 1억개가 넘는 배열을 선언하는 미친짓을 한다고 해봅시다. 이 사람이 1억개가 넘는 배열을 선언하고 돌리면 컴퓨터가 감당을 할수 있을까요? 이게 왜 뻗는지 이해를 못하죠? 여러분도 마찬가집니다. 지금 C는 저급언어에 조금 가까운 편이라 메모리 관리가 보이지만 스크립트만 개발해본 개발자나 방금 말한 플래시 프로그래머는 이해를 못하죠. 메모리의 효율적인 관리와 최적화를 위해 필요하다고 간단하게 요약할수 있겠네요.
- 답변 : 플래시 프로그래머가 1억개가 넘는 배열을 선언하는 미친짓을 한다고 해봅시다. 이 사람이 1억개가 넘는 배열을 선언하고 돌리면 컴퓨터가 감당을 할수 있을까요? 이게 왜 뻗는지 이해를 못하죠? 여러분도 마찬가집니다. 지금 C는 저급언어에 조금 가까운 편이라 메모리 관리가 보이지만 스크립트만 개발해본 개발자나 방금 말한 플래시 프로그래머는 이해를 못하죠. 메모리의 효율적인 관리와 최적화를 위해 필요하다고 간단하게 요약할수 있겠네요.
- 질문 : 박도건, 용상훈 -> 플래시 프로그램은 왜 쉬운가요?
- 답변 : Windows API를 써본다면 이해하겠지만 윈도우창 띄우는데 30줄이 넘는 코드가 필요하죠? 한줄로 보여드립니다. javascript에서 alert(5)를치면? 딱 뜨죠? 참~~ 쉽죠?
- 답변 : Windows API를 써본다면 이해하겠지만 윈도우창 띄우는데 30줄이 넘는 코드가 필요하죠? 한줄로 보여드립니다. javascript에서 alert(5)를치면? 딱 뜨죠? 참~~ 쉽죠?
- SVN을 설치시킴
- SVN 거북이를 이용하여 http://nforge.zeropage.org/svn/coordinateedit 에 코드를 올리는것을 올려놓음. 도건이 프로그램을 그곳에 올려놓고. 고쳐서 올려놓음. 받는건 숙제!!! 신남.
- SVN 거북이를 이용하여 http://nforge.zeropage.org/svn/coordinateedit 에 코드를 올리는것을 올려놓음. 도건이 프로그램을 그곳에 올려놓고. 고쳐서 올려놓음. 받는건 숙제!!! 신남.
- 박도건 프로그램 봐줌
- for문을 사용하여 이미지를 그리는데 for문안에서 for문을 탈출하는 조건으로 걸어놓음. 그래서 이미지 자체가 안그려짐.
- if문으로 이용하여 값이 0 밑으로 내려가면 0으로 초기화를 시키면 잘 그려짐. 이번에도 성공!
- for문을 사용하여 이미지를 그리는데 for문안에서 for문을 탈출하는 조건으로 걸어놓음. 그래서 이미지 자체가 안그려짐.
4.7.1. 수업 내용 ¶
- 타이머 -> http://dokeby.tistory.com/3
- 자바스크립트 이벤트 키 -> http://blog.daum.net/mysmkr/5753065
<html> <head> <script language = "javascript"> left = 10; function key(){ var image=document.getElementById("demo"); image.style.position="absolute"; alert(left); left += 1; image.style.left = left; //왜 이미지에서 left를 바로 뽑아내지 않냐면. left가 문자열로 인식되나 보기대문이다. //image.style.left=(left+1)+'px'; //var l=document.getElementById("demo").style.left += 1; } </script> </head> <body onKeyDown='key();'> <img src = "1.jpg" id="demo" top = 10 left = 10> </body> </html>
4.8.1. 수업내용 ¶
자바 <-> Objective - C? 고민중 자바 스크립트 -> - 자바를 배워도 되는것 같고. - 자바에서 Web View를 추천합니다. C공부를 심도있게하고싶다. -> Opensource 뒤지기 프로젝트 소스를 보면 안는데 손에 안익음 -> 다 외울 필요는 없다. 레퍼런스를 만들어라. 오늘 궁금한거 Sort 신난다. - Bubble Sort - Quick Sort를 배우고 싶다. 소스를 찾아서 짜보고 -> 다음시간에 가져와. #include<algorithm.h> quicksort( );
- Javascript 실행해보기
- 메모장으로 Html파일을 만듬 -> 안에 소스를 넣음
- 메모장으로 Html파일을 만듬 -> 안에 소스를 넣음
- Javascript 학습은 http://www.w3schools.com/js/default.asp 에서 해주세요.
<html> <body> <script type="text/javascript"> document.write("<p>My first paragraph</p>"); </script> </body> </html>
- 오픈소스 뒤지기
- GitHub : https://github.com
- Google Code : http://code.google.com/intl/ko-KR/
- GitHub : https://github.com
- SVN 툴 Tortoise : http://tortoisesvn.net/
- 소스 포지 : http://sourceforge.net/
4.9. 5월 31일 ¶
#include <stdio.h> #include <stdlib.h> #include <time.h> void main() { int i,j,Input; int temp; int count = 0; int a[10] = {0,}; srand(time(NULL)); printf("초기 데이터\n"); /* for(i=0;i<10;i++) { // 숫자 10개 랜덤 생성 a[i] = rand()%10+1; printf("%3d", a[i]); } */ do{ temp = rand()%10+1; for(i = 0;i<10;i++){ if(a[i] == temp){ temp = rand()%10+1; i = -1; } } a[count++] = temp; }while(count != 10); for(i = 0;i<10;i++) printf("%d ",a[i]); puts("\n---------------------------------"); /* for(i=0;i<10;i++) { for(j=0;j<9;j++) { if(a[j]>a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } }버블소트 */ /* for(i=0;i<10;i++) { for(j=i+1;j<10;j++) { if(a[i]>a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } }선택 소트 */ for(i=0;i<10;i++) { // 결과 출력 printf("%3d", a[i]); } puts(""); }
- 과제 : APM 깔아오기, 소트(버블, 선택) 5개짜리 배열 예제를 만들고 손으로 정렬해오기.
#include<stdio.h> int factorial(int n){ if(n == 1) return 1; return n * factorial(n-1); } int summary(int n){ if(n == 1) return 1; return n + summary(n-1); } int main(){ int i,j,sum = 0, fact =1; int input = 5; for(i = 1; i <= input;i++){ sum += i; fact *= i; } printf("sum : %d, fact : %d\n",sum,fact); sum = 0 ; fact =1; fact = factorial(input); sum = summary(input); printf("sum : %d, fact : %d\n",sum,fact); return 0; }
- 숙제 : 손으로 써오기.
4.10. 6월 1일 ¶
- 박도건 Part
- 복습
- 복습
<html> <head> <script language = "javascript"> left = 10; imagename = 1; function key(){ var image=document.getElementById("demo"); image.style.position="absolute"; if(imagename == 4){ imagename = 1; } alert(left); left += 1; image.src = imagename + '.jpg'; imagename = imagename + 1; image.style.left = left; //image.style.left=(left+1)+'px'; //var l=document.getElementById("demo").style.left += 1; } </script> </head> <body onKeyDown='key();'> <img src = "1.jpg" id="demo" top = 10 left = 10> </body> </html>
- 이미지 변경되는 기능 추가.
- Javascript게임은 Tiny Farm? 농장 게임을 만들도록 해보자.
- 우선 저장 기능 없는거 -> 우선 빼자. 서버 ??? 미쳤냐. 쿠키?? 아 힘들어. 패스
도건이의 작은 농장
-> 위에서 봐야함. - 우선 저장 기능 없는거 -> 우선 빼자. 서버 ??? 미쳤냐. 쿠키?? 아 힘들어. 패스
-> keyword : javascript image resize crop
-> http://charism.tistory.com/44
-> 이미지 레이어 : http://www.jsmadeeasy.com/javascripts/Images/img_layer/img_layer.htm
-> 시작을 합니다.
-> 작물을 키우는 공간이 5 by 5 좌표 설정
-> 누르면 작물이 생깁니다.
-> 대마, 양귀비, 마리화나
-> 작물들이 시간에 따라 자라납니다. => Timer를 이용.
-> 좌표를 클릭하면. jAVASCRIPT 객체가 생겨서 시간에 따라 이미지가 변해.
-> 투명도 예제 : http://findfun.tistory.com/348
-> 특정 색 투명처리 : http://jpjmjh.blogspot.kr/2010/02/ie6-png-투명처리-하기.html
4.11.1. 검사 ¶
- 숙제 미흡 => 앞으로 알고리즘 하면 손으로 배열이 변하는것을 써올것. 해온건 잘했음.
- APM 설치완료 => 블로그 보고. 사용법 익히기. APM_SETUP폴더에 htdocs폴더에 index.html 건들고 오기.
4.11.2. 수업 ¶
- prime 넘버 찾는 알고리즘 구하기.
//자바 코드 public class MyTest { /** * @param args */ public static void main(String[] args) { ///prime 넘버는 1과 자신을 제외하고 나눠지지 않는 수. int count = 0; boolean flag = false; for(int i = 2; i< 1000; i++){ flag = true; for(int j = 2; j<i; j++){ if( (i % j) == 0) flag = false; } if(flag == true){ System.out.println(i + "is prime Number!"); count++; } } System.out.println("Count : " + count); } }
4.11.3. 숙제 ¶
- APM_SETUP폴더에 htdocs폴더에 index.html을 하기. http://www.w3schools.com/js/default.asp 가서 javascript예제 index.html에 작성하고 돌아가는것 확인.