U E D R , A S I H C RSS

새싹교실/2015/의사양반/0403



1. 참여자 명단


의사 장용운 11학번 출석
환자 천준현 15학번 출석
최지혁 출석
박인서 출석

2. 수업

2.1. 진행

1. 장소 : 6층 학회실
2. 시간 : 15시 ~ 17시

2.2. 내용

6강. 맛있는 함수 만들기
  • 함수의 정체
    ○ 함수 호출 스택
    ○ 재귀 함수
  • 함수의 형태
    ○ 파라미터
    ○ return 키워드와 리턴값
    ○ 함수의 기능적 구분
  • 함수 정의하기
  • 변수의 스코프
    ○ 전역 변수
  • pre-declaration
  • main 함수에 파라미터 전달하기

☆추가
  • 2차원 배열 기초

실습
  • 온도 변환 함수 만들기
    ○ 손코딩
  • 재귀 함수로 Factorial 연산하기
  • Quick sort

3. 코드

3.1. 예제1


4. 숙제

1. 이 페이지에 후기 작성하기!
2. 오늘 공부한 개념 수업 페이지에 정리하기!
3. 테스트 예고 둘 중 하나 출제됨. 미리 알아보면 좋겠죠?
○ Breadth-First Search
○ Depth-First Search
4. 용어 조사하기
○ Stack
○ Queue
○ Tree
○ Set
○ Map
○ Linked List

5. 후기

  • 후기 작성 요령 : 후기는 F4(ThreeFs + Future Action Plan)에 맞게 작성해주세요.
    • Facts, Feelings, Findings, Future Action Plan. 즉, 사실, 느낀 점, 깨달은 점, 앞으로의 계획.

  • 오늘은 함수 만드는 법을 처음으로 배웠습니다. 이제 슬슬 내용들이 복잡해지는 것 같아 앞으로가 큰일인 것 같습니다. 하지만 열심히 공부하여 극복해내겠습니다. - 천준현

  • 함수와 관련된 내용을 배우고 실습했습니다. 함수를 열심히 해야겠다는 것을 느꼈습니다. 테스트가 곧 다가오니 열심히 공부해야 겠다고 생각하였습니다.-박인서



6. 숙제 제출

6.1. 천준현

별찍기 1번
#include <stdio.h>

int main(void){
	int i, j;
	char c;
	c = '*';
	
	for (i = 0; i < 5; i++){
		for (j = 0; j < 11; j++){			
			if (j <= i) printf("%c", c);
			else if (j < i + 6) printf(" ");
			else printf("%c", c);							
		}
		printf("\n");
	}
	return 0;
}


별찍기 2번
#include <stdio.h>

int main(void){
	int i, j;
	char c;
	c = '*';
	for (i = 0; i < 7; i++){
		if (i % 2 == 0) {
			for (j = 1; j < 18; j++){
				if (j % 4 == 1) printf("%c", c);
				else printf(" ");
			}
		}
		else {
			for (j = 1; j < 18; j++){
				if (j % 2 == 1) printf(" ");
				else printf("%c", c);
			}
		} printf("\n");
			
	}
	return 0;
}


별찍기 3번
#include <stdio.h>

int main(void){
	int i, j, a, b;
	char c;
	c = '*';
	a = 0;
	b = 3;
	for (i = 0; i < 9; i++){
		if (i < 5){
			for (j = 0; j < 9; j++){
				if (j <= a) printf("%c", c);				
				else if (j >= 8 - a) printf("%c", c);
				else printf(" ");								
			}
			a++;
		}
		else {
			for (j = 0; j < 9; j++){
				if (j > b){
					if (j < 8 - b) printf(" ");
					else printf("%c", c);
				}
				else printf("%c", c);
				
			}
			b--;
		} printf("\n");
	}
	return 0;
} 

#용어정리
 -Stack :
 스택(stack)은 모든 원소들의 삽입(insert)과 삭제(delete)가 리스트의 한쪽 끝에서만 수행되는 제한 조건을 가지는 선형 자료 구조(linear data structure)로서, 삽입과 삭제가 일어나는 리스트의 끝을 top이라 하고, 다른 한쪽 끝을 bottom이라 한다.
 -Queue :
 리스트의 한쪽 끝에서만 삽입과 삭제가 일어나는 스택과는 달리 리스트의 한쪽 끝에서는 원소들이 삭제되고 반대쪽 끝에서는 원소들의 삽입만 가능하게 만든 순서화된 리스트. 가장 먼저 리스트에 삽입된 원소가 가장 먼저 삭제되므로 선입 선출(先入先出)인 FIFO(first in first out) 리스트라고 한다.
 -Tree :
 나무가 하나의 뿌리(root)에서 줄기(trunk)가 나와 가지(branch)로 나누어지는 것처럼, 어떤 하나의 집합(레코드나 디렉토리 등)으로부터 하위 레벨(lower level)로 가지가 나오는 집합 관계를 갖는 계층 구조(hierarchic structure)를 말한다. 부분적으로도 결코 루트를 형성하는 경우는 없다. 따라서 처음에 가지가 나오기 시작되고 있는 집합으로부터 차례대로 「가지」를 더듬어가면 목적의 집합을 찾을 수 있다.
 -Set :
(1) 동사로서는 데이터 처리를 행하는 장치로 여러 가지 수치를 주거나 스위치를 ON, OFF시키거나 하여 지정된 상태로 하는 것. 주로 두 가지 값을 취하는 장치에 있어서 그 어느 쪽 상태를 지정하는 것. 리셋(reset)과 대비된다. 능동적인 상태와 비능동적인 상태의 두 가지 상태를 갖는 장치에서는 보통 능동적인 상태로 하는 의미를 갖는다. 예를 들면 셋업(set up)이란 장치나 시스템 등을 어떤 목적을 위해 동작시켰을 때 그것이 동작할 때까지의 준비를 행하여 동작 가능함을 표시한다. 셋업하기 위한 순서를 나타낸 표를 셋업 다이어그램(set up diagram), 셋업에 필요한 시간을 셋업 타임(set up time)이라 한다. 또 계수기(counter)나 레지스터(register)에 수치를 대입하거나 RAM(random access memory)의 하나하나의 메모리 셀(memory cell)에 전하(電荷)를 주거나 전하를 제어하거나 하여「0」과「1」어느 쪽이든 상태를 설정하고, 그것에 의해 정보를 축적하도록 하는 동작도 세트라고 한다.
(2) 명사로서는 하나 이상의 공통적인 성질을 갖는 것의 「집합」 이나 「모임」을 나타낸다. 이 세트가 더욱 작은 부분적인 집합으로 나누어질 때 이 부분 집합을 서브셋(subset)이라고 한다. 예를 들어 a, b, c…, z는 알파벳이라는 하나의 세트이다.
(3) 집합:주어진 하나 이상의 공통적인 성질을 갖는 유한 개 또는 무한 개의 어느 종류의 대상, 물건 또는 개념.
(4) 설정하다(변수에 대해서):변수에 값을 할당하는 것. 특히 파라미터에 값을 할당하는 것.
⑸ 세트하다(계수기를):① 계수기를 지정된 수에 대응하는 상태로 하는 것. ② 데이터 처리 기구 전체 또는 일부를 지정된 상태로 하는 것.
 -Map :
⑴ 데이터 처리에서 한조의 데이터 세트로부터 다른 데이터 세트로의 변환을 위한 관계를 밝히는 것. 또는 그 대응을 나타내기 위한 표.
⑵ 기억 장치 사용 방법을 명확히 한 리스트.
⑶ 다른 집합 중의 양 또는 값 사이에 정해진 대응을 갖는 값의 집합을 확정하는 것. 예를 들면, 수학적 함수를 평가하는 것. 즉, 직접 관계하는 독립 변수의 값에 대하여 종속 변수의 값을 확정하는 것이다.
 -Linked List :
 이것은 각 노드를 유용한 저장 공간에 그 위치에 상관없이 저장시키고, 각 노드의 관련성을 노드에 보관하여 1차원 배열 관계를 유지하도록 함으로써 중간 노드의 삽입, 제거를 손쉽게 할 수 있는 리스트로 각 노드는 링크(또는 포인터) 부분을 가지며, 그 노드와 관련 있는 다음 노드의 주소를 그 값으로 가진다. 다시 말하면 선형 리스트의 노드 배열이 어드레스와 일치하지 않고 기억 공간에 독립적으로 이루어진 리스트를 말한다.

6.2. 최지혁

<이론>

1. 함수
   반환형 이름(main) (인자, papameter argument)
   {
            함수 블록


           return 0; -> 함수 종료표시, 이 밑에 있는 코드는 실행되지 않는다
   }

2. 만들 수 있는 함수 종류
     ||인자 || o || o || x || x ||
     ||반환 || o || x || o || x ||

3. 함수 호출할 때
   무조건 (함수의 이름) 이 형태로 해야한다.

4. 함수 원형(prototype)
   다른 함수가 main 함수보다 아래 있을 경우 먼저 컴파일러에게 다른 함수가 있다는 걸 알리려 main 함수 위에
   다른 함수의 인자형, 이름 (data type) 정도를 적어준다.

5. 재귀함수
   마치 마트로슈카처럼 자기 함수 안에서 또 다시 자신을 호출하는 함수.

6. 반환의 강제성
   함수에서 정한 반환형과 실제 반환하려는 값의 data type이 불일치할 경우 함수에서 정한 반환형으로 강제적으로 형변환되어
   반환된다.
<숙제>
 *별찍기 1번
#include<stdio.h>
int main()
{
	int i;
	for (i = 0; i < 9; i++)
	{
		if ( i % 2 == 0)
		{
			int j = 4;
			for (int t = i/2 ;(j - t) < ( 15 - t); j ++)
			{
				if ( (j-t)/5 == 0 || (j-t)/5 == 2 )
				{
					printf("*");
				}
				else
				{
					printf(" ");
				}
			}
		}
		else
		{
			printf("\n");
		}
	}
	return 0;
}

 *별찍기 2번


#include<stdio.h>
int main()
{
	int i;
	int j = 1;

	for (i = 1; i < 14; i++)
		if (i % 2 == 1)
		{
			if (i % 4 == 1)
			{
				j = 1;
				for (; j <= 17; j++)
				{
					if (j % 4 == 1)
					{
						printf("*");
					}
					else
					{
						printf(" ");
					}
				}
			}
			else if (i % 4 == 3)
			{
				j = 1;
				for (; j <= 17; j++)
				{
					if (j % 2 == 0)
					{
						printf("*");
					}
					else
					{
						printf(" ");
					}
				}
			}
			else
			{
				break;
			}
		}
		else
		{
			printf(" \n");
		}
	return 0;
}

 *별찍기 3번
#include<stdio.h>
int main()
{
	for (int i = 0; i < 19; i++)
	{
		if (i % 2 == 0)
		{
			for (int j = 0; j < 9; j++)
			{
				if ( i<= 11 ) 
				{
					if (i / 2 > j || j >= 9 - i/2)
						printf("*");
					else
					    printf(" ");
				}
				else                        
				{
					if ( 8-j >= i/2 || j >= i/2 )
						printf("*");
					else
						printf(" ");
				}
			}
			printf("\n");
		}
		else 
		{
			printf("\n");
		}
	}
	return 0;
}

 *알파벳
#include<stdio.h>
int main()
{
	for (char i = 'A'; i < 'A' + 27; i++)
	{
		
		for (int t = 65; t < i ; t ++   )
		{
			printf("%c" , t);
		}
		printf("\n");
	}
	return 0;
} 
 <용어조사>
 1. stack :stack은 제한적으로 접근할 수 있는 나열 구조이다. 그 접근 방법은 언제나 목록의 끝에서만 일어난다. 끝먼저내기 목록(Pushdown list)이라고도 한다.
stack은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)으로 되어 있다. 자료를 넣는 것을 '밀어넣는다' 하여 푸시(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(pop)이라고 하는데, 이때 꺼내지는 자료는 가장 최근에 보관한 자료부터 나오게 된다

 2. queue :queue는 컴퓨터의 기본적인 자료 구조의 한가지로, 먼저 집어 넣은 데이터가 먼저 나오는 FIFO 구조로 저장하는 형식을 말한다

 3. tree :트리 구조(tree)란 그래프의 일종으로, 여러 노드(node, 연결선)가 한 노드를 가리킬 수 없는 구조이다. 간단하게는 회로가 없고, 서로 다른 두 노드를 잇는 길이 하나뿐인 그래프를 트리라고 부른다

 4. map :첫번째 뜻은 어떤 대상의 구조를 나타내는 표로서 도표 또는 리스트를 의미한다.
예를 들면, 메모리 맵(memory map)은 기억 영역 내 대상물의 배치를 보여 주는 도표이고, 기호 맵(symbol map)은 한 프로그램 내의 기호 이름과 기억 영역 주소의 결합 관계를 보여 주는 목록이다. 그리고 두번째 뜻은 하나의 값을 다른 값으로, 한 데이터 집합을 다른 데이터 집합으로 번역하는 것, 또는 2개의 데이터 집합 사이에 1 : 1의 대응 관계를 설정하는 것으로, 이때의 맵은 사상(寫像)한다는 의미이다.

 5. linked list :이것은 각 노드를 유용한 저장 공간에 그 위치에 상관없이 저장시키고, 각 노드의 관련성을 노드에 보관하여 1차원 배열 관계를 유지하도록 함으로써 중간 노드의 삽입, 제거를 손쉽게 할 수 있는 리스트로 각 노드는 링크(또는 포인터) 부분을 가지며, 그 노드와 관련 있는 다음 노드의 주소를 그 값으로 가진다. 다시 말하면 선형 리스트의 노드 배열이 어드레스와 일치하지 않고 기억 공간에 독립적으로 이루어진 리스트를 말한다

6.3. 박인서

  • 내용 정리

<함수 사용법>
int->리턴 타입,반환형 main->함수이름(main함수 부터 실행)(인자(parameter,argumet)-받을인자를 ,로 구분)
{
	return 0;->함수의 종료
}->함수 블록
<함수의 종류>
리턴X(void)
인자X(인자가 없어도 소괄호를 닫아야됨)
둘다X
모두O
<함수의 정의>
함수를 정의하려면 main함수 위에 하거나 main함수 아래에 할땐 따로 정의해야됨(prototype 정의)
  • 별찍기 & 알파벳찍기

<1번>
#include <stdio.h>

int main()
{
	int i,j;
	for(i=1;i<=5;i++)
	{
		for(j=0;j<i;j++) printf("*");
		for(j=0;j<5;j++) printf(" ");
		for(j=0;j<6-i;j++) printf("*");
		printf("\n");
	}
	return 0;
}
<2번>
#include <stdio.h>

int main()
{
	int i,j,k;
	for(i=1;i<=7;i++)
	{
		if(i%2==0)
		{
			for(j=0;j<8;j++)
			{
				printf(" ");
				printf("*");
			}
		}
		else
		{
			for(j=0;j<4;j++)
			{
				printf("*");
				for(k=0;k<3;k++) printf(" ");
			}
			printf("*");
		}
		printf("\n");
	}
	return 0;
}
<3번>
#include <stdio.h>

int main()
{
	int a=1,b=0,i,j;
	for(i=1;i<=9;i++)
	{
		if(a==5)
		{
			for(j=0;j<9;j++) printf("*");
			printf("\n");
			b=1;
		}
		else
		{
			for(j=0;j<a;j++) printf("*");
			for(j=0;j<9-(2*a);j++) printf(" ");
			for(j=0;j<a;j++) printf("*");
			printf("\n");
		}
		if(b==1) a--;
		else a++;
	}
	return 0;
}
<알파벳>
#include <stdio.h>

int main()
{
	char a,b;
	int aa,bb,i,j;
	scanf("%c%c",&a,&b);
	aa=(int)a;
	bb=(int)b;
	for(i=aa;i<=bb;i++)
	{
		for(j=aa;j<=i;j++)
		{
			printf("%c",(char)j);
		}
		printf("\n");
	}
	return 0;
}
  • 용어 정리
    ○ Stack : 나중에 들어간 데이터가 처음에 나오게되는(Last In First out) 선형 자료 구조
    ○ Queue : 처음에 들어간 데이터가 처음에 나오게되는(First In First out) 선형 자료 구조
    ○ Tree : 나무처럼 어떤 하나의 집합으로부터 하위 레벨로 가지가 나오는 집합 관계를 갖는 계층 구조로 사이클이 만들어지지 않음.
    ○ Set : 어떤 조건에 따라 결정되는 요소의 모임
    ○ Map : 집합 요소 사이의 대응을 붙인 것 혹은 대응표인 것을 말함.
    ○ Linked List : 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다.



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:58
Processing time 0.0203 sec