U E D R , A S I H C RSS

새싹교실/2015/의사양반/0501 (rev. 1.13)

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



1. 참여자 명단


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

2. 수업

2.1. 진행

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

2.2. 내용

10강. 저 그냥 나갈게요 + Dynamic Memory Allocation
  • const
  • 포인터 연산
  • 배열과 포인터
  • 다차원 배열
  • 프로그램 스택 구조와 힙
  • malloc과 free

실습
  • 포인터 연산 확인하기
  • Average Calculator
  • Forgetfulness of Santa Claus

3. 코드

3.1. 예제1


4. 숙제

1. 이 페이지에 후기 작성하기!
2. 오늘 공부한 개념 수업 페이지에 정리하기!
3. Forgetfulness of Santa Claus 완성하기

Forgetfulness of Santa Claus
산타 클로스는 10개의 집에 100개의 선물을 나누어줘야 한다.
10개의 집은 일렬로 나열돼 있으며, 산타는 현재 굴뚝에서 옆집 굴뚝으로 점프할 수 있다.
산타는 한 번에 하나의 굴뚝을 점프할 수 있으며, 선물을 전부 나눠주고 끝났다고 생각되면 퇴근한다.
퇴근한 산타는 선물을 잘못 나누어주었다는 사실을 깨닫는다.
올바른 선물 갯수를 종이에 적은 산타는 선물을 회수하여 올바르게 분배하기 위해 다시 출발한다.
선물의 분배는 갯수만 맞으면 완료된 것으로 간주한다.
올바른 분배가 완료된 산타는 정말로 퇴근한다.

5. 후기

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

  • 산타클로스 죽이러 가겠습니다. 고로 5월 6일 수업은 참여하지 못할 것 같네요. 그럼 20000 - 천준현

  • 저 그냥 나갈래요. 역시 포인터는 어렵군요.. 어려운 만큼 앞으로 더욱 공부를 열심히 하여야겠다고 생각하였습니다. - 박인서



6. 숙제 제출

6.1. 천준현


6.2. 최지혁

1.

2.

3. 

#include<stdio.h>
#pragma warning (disable : 4996)

int main(void)
{
	int direction;//방향 : 오른쪽으로 한칸 가려면 1, 왼쪽으로 한칸 가려면 -1
	int i = 0; // 현위치
	int house[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };// 집: 차례대로 10채
	int arr[10]; // 줄 선물 할당 수
	int present = 100; // 선물 수: 100개
	int paper[10] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 };//원래 줘야할 선물 수
	int num = 0;

	for (; (house[0] != -1) || (house[1] != -1) || (house[2] != -1) || (house[3] != -1) || (house[4] != -1) || (house[5] != -1) || (house[6] != -1) || (house[7] != -1) || (house[8] != -1) || (house[9] != -1);)
	{
		for (; present != 0;)
		{
		

			printf("현재 위치는 %d번째 집입니다. \n", i + 1);
			printf("오른쪽에 있는 다음 칸으로 이동하려면 1을, 왼쪽에 있는  다음 칸 이동하려면 -1을, 계속 여기 있으려면 0을 눌러 enter키를 눌러주세요. \n(만약 틀려서 수정할 곳이 1번 째 집이 아니면 +1을 눌러주세요) \n");

			

			scanf("%d", &direction); //어디로 갈지 방향 지정

			


			if (i == 0 && direction == -1) // 0이나 9에서 넘어갈 경우에 대한 대비
				i = 9;
			else if (i == 9 && direction == 1)
				i = 0;
			else
				i += direction;



			for (; house[i] == -1;)
			{
				i += direction;
			}

		
			
			printf("%d번째 집입니다. 지금 가지고 있는 선물은 %d개입니다. 얼마나 주시겠습니까? \n", i + 1, present); // 현재 위치한 집에 선물 할당
			scanf("%d", &arr[i]);
			house[i] += arr[i]; // 현재 집에 있는 선물의 총 개수
			present -= arr[i]; //남은 선물 수
			printf("현재 %d번째 집에는 %d개의 선물이 있습니다. \n", i + 1, house[i]);
			printf("남은 선물 수: %d \n \n \n", present);

			if (present < 0) //선물이 모자랄 경우
			{
				printf("주기 위한 선물이 모자랍니다. 이전 상태로 복구합니다. \n \n \n");
				house[i] -= arr[i];
				present += arr[i];
			}
		}

		printf("각 집에 할당된 선물의 수가 맞는지 확인하겠습니다. \n");
		
		for (; num < 10;)
			if (paper[num] == house[num])
			{
				house[num] = -1; num ++; //1번째 집
			}
			else
			{
				switch (house[num])
				{
				case -1:
					{
						num ++;
						break;
					}
				default:
					{
						printf("%d번째 집에는 줘야할 선물 수와 가진 선물 수가 다릅니다. \n", num + 1);

						present += house[num];
						house[num] = 0;

						num++;
					}
				
				}
			}

		i = 0;
		num = 0;

		printf("\n\n\n");
	}
	printf("모든 집에 각각 알맞은 수의 선물을 보냈습니다. \n");

	return 0;
}

6.3. 박인서

const : 상수를 선언할 때 쓰임, 오른쪽의 데이터타입 수식

포인터 연산 데이터타입의 크기만큼 더하고 빼진다

배열->포인터 변수, 값을 바꿀수 X ex) int a 10; a=3;(X)

a i<=>*(a+i)

2차원 배열

arr[][];

arr 0->포인터

arr+1->arr 0에서 arr 1로 넘어간다!

차원이 올라가면 올라갈수록 점점.... 발암!

프로그램 스택 구조와 힙

Static Memory Allocation : 시스템 상에서 메모리의 공간을 알아서 만들고 없앰

Dynamic Memory Allocation : 사용자가 메모리를 직접 할당

malloc 함수 : void*->원하는 데이터타입 malloc(정수->byte수)

free 함수 : malloc을 이용해 할당한 메모리 공간이 사라짐 free(정수->byte수), free를 안쓰면 memory leak 메모리가 펑!



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