프로그래밍 공부

전체 글 700

카테고리 설명
프로그래밍 공부하는 블로그
  • 반복되는 제귀함수를 하나 더 살펴보자. 제귀함수를 사용하는 것 중에는 피보나치 수열이 있다. 이를 제귀함수로 바꾸어보자. 피보나치 수열이란, 0 ,1 ,1 , 2, 3, 5, 8, 13 이런식으로 전 수와 더해가며 나아가는 숫자 인데, 0, 1, 0+1, 1+1, 1+1+1, 1+1+1+1+1 이런식으로 전 수와 더하는 것을 피보나치 수열 이라고 한다. 이를 한번 코드로 만들어보자. 피보나치 수열을 출력한 코드이다. 이건 간단하게for문으로 반복시킨 코드이다. 이것을 제귀함수로 반복되게 만들 수 있는데, 밑과 같이 수정 할 수 있다. 이번에는 Array_sort를 찾아보자. 배열정렬인데, 배열을 내림차순, 오름차순으로 정렬해주는 것 을 이야기한다. 한번 알아보자. 배열정렬의 기본원리는 생각보다 엄청 간단..

  • int main에 대해 생각해보자. main문의 int문이 무엇일까? 바로 정수형을 이야기 한다. 이것은 변수의 자료형을 뜻하는데, int main 의 () 에 는 void가 생략되어 있는 것을 말한다. 코드에 반복되는 수가 2개가 있다. 뭔가 불편해보이지 않는가?. 이것을 하나의 코드줄로 압축하여 필요할때 가져와서 사용해보도록 하자. 이렇게 짜서 넣어놓으면 우리는 전달인자는 없고, 반환값은 있는 함수를 만들어서 제공해준 것 이다. 이렇게 사용하면 반복되는 코드를 계속해서 사용하지 않고 그때그때 필요한 것 을 가져와서 사용할 수 있게 되는 것 이다. 이번에는 전달인자를 받아오도록 해보자. 이렇게 짜서 작동시키면된다. 12줄에서 19줄 까지의 코드는 주석처리 된것과 그냥 들어간것의 결과가 같다. 출력해보면..

  • 무작위 난수 를 이야기한다. rand()를 사용하여 무작위의 수를 추출하여 출력할 수 있다. 이러한 rand를 사용하기 위해서는 표준 입출력을 가져오는 것 처럼 stdlib.h을 새로 호출해주어야 한다. 위와 같이 stdlib.h를 호출하면 난수 생성기를 사용할 준비가 되었다. 위와 같은 방식으로 %d에 rand()하여 랜덤한 수를 출력할 수 있다. 만약, 내가 여기서 범위를 제한하고 싶다고 하면, 이렇게 해주면 된다. 그러면 rand로 나타나게 되는 데이터가 생성되는데, 그 생성 데이터에 10으로 나눈 값의 나머지를 출력하게 되면, 1~10까지의 데이터가 무작위로 나타나게 되는 원리 이다. 여기서 내가 2~11까지로 제한하고 싶다고 한다면, 위와 같이 1을 더해서 출력해줄 수 있다. 그러나 실행 시 출..

  • 데이터는 각각의 변수 사이즈에 따라 저장된다. 그러나 일정 사이즈에 따라 저장되지 못하는 데이터 사이즈가 존재한다. 각 데이터 사이즈는 float과 int 등 여러가지 사이즈 에 따라 저장되는데, 각 변수의 사이즈에 따라 우선권 이 존재한다. 큰 변수는 작은 변수에 들어가지 못하지만, 작은변수는 큰 변수에 자동으로 변환되어 삽입되게 된다. 크게 중요한 것 은 아니지만, 각각의 bit단위에 따라 대용량 프로그램의 효율성이 달라질 수 있기 때문에 성능을 최대한 끌어올리고 싶다면 신경쓰는것 이 좋다. 이러한 것을 보고 계산식을 새워보자. 형변환이 이루어지지 않는 (flaot)을 빼고 계산하게 되면, 데이터의 정상적인 계산이 이루어지지않음을 알 수 있다. if문을 알아보자. 입력받은 변수의 조건이 부합하는지 검..

  • 연산자는 대입 연산자와 산술 연산자, 부호 연산자, 복합대입 연산자, 증감 연산자, 비교연산자 가 있다. 대입 연산자 : = 으로 우측에있는 데이터를 좌측에 넣어주는 역활을 한다. 산술 연산자 : +, -, *, /, % 로 좌측과 우측의 연산을 시도하는 연산자 이다. 부호 연산자 : 숫자의 음수 양수를 나타내는 +, -를 표시해주는 부호를 말한다. 복합 대입 연산자 : 연산기호를 줄여주는 역활을 한다. a = a+b를 쓸때 a+=b로 나타낼 수 있다. 두개의 결과는 같게 나오게 된다. 증감 연산자 : 1씩 더 늘려나가는것을 더 쉽게 쓰게 만들기위해 연산자를 간략하게 나타내는 것 이다. 비교 연산자 : 각각피 연산자의 크기를 비교해서 bool값으로 반환한다. 1은 참 0은 거짓을 나타낸다. 전체 코드의 ..

  • C언어 -> C++ 진행 예정 -> Direct X 작업 2D 작업과정 공부함. 6개월 후에 언리얼 엔진 -> Directx 3D 다루게 됨. 2D는 기반을 공부하는 과정이다. 기본 컴퓨터 구조 CPU (중앙처리장치) HDD (저장장치) - ( 비휘발성 저장장치 ) RAM (임의접근저장장치) - (휘발성 저장장치) 여기서 사람이 코드를 입력하고, 사람의 언어를 알아들을 수 없기 때문에 기계어를 넣어주어야함. 사람은 기계어를 알아들을 수 없기 때문에 컴퓨터 코드를 입력하여 번역하여 작업을 지시해주어야 한다. 사람 ----> 컴파일(어셈블리) ----> 컴퓨터 이러한 컴파일을 위한 플렛폼( 개발환경 ) [ 비주얼 스튜디오, 비주얼 코드 ] 사용한다. 우리는 비주얼스튜디오 를 사용하여 C 작업을 시작할 것 이..

작성일
2023. 3. 9. 19:40
작성자
WDmil
728x90

반복되는 제귀함수를 하나 더 살펴보자.

제귀함수를 사용하는 것 중에는 피보나치 수열이 있다. 이를 제귀함수로 바꾸어보자.

피보나치 수열이란, 0 ,1 ,1 , 2, 3, 5, 8, 13 이런식으로 전 수와 더해가며 나아가는 숫자 인데,

0, 1, 0+1, 1+1, 1+1+1, 1+1+1+1+1 이런식으로 전 수와 더하는 것을 피보나치 수열 이라고 한다.

이를 한번 코드로 만들어보자.

피보나치 수열을 출력한 코드이다. 이건 간단하게for문으로 반복시킨 코드이다. 이것을 제귀함수로 반복되게 만들 수 있는데, 밑과 같이 수정 할 수 있다.

파보나치 수열을 재귀함수로 수정한것 이다.


이번에는 Array_sort를 찾아보자. 배열정렬인데, 배열을 내림차순, 오름차순으로 정렬해주는 것 을 이야기한다.

한번 알아보자.

배열정렬의 기본원리는 생각보다 엄청 간단한데,

우선 버블정렬을 확인해보자.

46598 이라는 수가 있다고 하면 순서는

46598
64598
64598
64598
64598

순으로 들어간다.

이번에는 다른 방식으로 선택정렬 이라는걸 알아보자.  43615 라고 할때

43615
34615
34615
13465
13456

로 들어가게 된다.

차이는 간단한데, 첫번째는 바로 앞 수와 비교하고, 선택정렬은 가장 작은수가 무조건 앞에 들어가게 정렬한다는 것 이다.

무엇이 더 좋은지는 판단하기 힘든데, 이는 둘다 일장일단이 있기 때문이다.

 

둘다 비슷한 시간이 흐르지만, 입력된 값이 대부분 일정하게 정리되어 있다고 한다면, 첫번째 방법이 더 유용할 것 이고

중구난방으로 정리되어 있다면 두번째 방법이 더 유용할 것 이다.

한번 코드로 구현해보자.

버블과 셀렉션 코드를 구현한 예시 이다.
출력시 잘 되는 모습을 볼 수 있다.


이번에는 2차원 배열을 출력해보자.

2차원 배열을 선언하는것은 매우 쉽다.

int arr[3][5] 라고 입력했다고 가정해보자.

그렇다면 우리는

ㅁㅁㅁㅁㅁ
ㅁㅁㅁㅁㅁ
ㅁㅁㅁㅁㅁ

 

형태의 배열을 선언한것 과 같다.

여기서 3차원으로 넣는다고 하면,

int arr[3][5][7] 이런식으로 넣으면 된다. 아직까지는 사용하지 않는다.


이 배열에서 

ㅁㅁㅁㅁㅁ
ㅁㅁㅁㅁㅁ
ㅁㅁㅁㅇㅁ

이렇게 데이터를 입력한다고 가정해보자. 어찌 입력해야 할까?.

여기 위치는 2행 3열을 접근해야 한다.

순서는 0부터 시작하기 때문에 배열을 출력한다고 하면 이렇게 된다.

  0 1 2 3 4
0
1
2

위와 같은 형태로 배열의 주소가 정해진다.

 

행과 열은 형식이 있는데, 기본적으로 2차원배열은 행을 생략해서 적을 수 있다. 예시를보자.

위와 같은 방법으로 각각 작성할 수 있다.

이렇게 작성할 수 있다. 

이번에는 각각 선언한 배열을 접근해보자.

1차원배열은 for문 하나만 사용하면 되나, 2차원배열은 2중for문을 사용하여 각각 접근해줄 수 있다. 예시를 보자.

이번에는 전체 행, 열의 사이즈를 측정하고 출력해보자.

전에 사용하였던 sizeof로 나누어주면 쉽게 출력하여 보여줄 수 있다. 각각의 예시를 살펴보자.

예시와 함께 살펴보자, 각각 접근하여 출력하고 배열의 사이즈를 출력해보도록 하자.

728x90
작성일
2023. 3. 8. 18:51
작성자
WDmil
728x90

int main에 대해 생각해보자. main문의 int문이 무엇일까? 바로 정수형을 이야기 한다. 이것은 변수의 자료형을 뜻하는데,

int main 의 () 에 는 void가 생략되어 있는 것을 말한다.

 

위와 같은 코드를 살펴보자.

코드에 반복되는 수가 2개가 있다. 뭔가 불편해보이지 않는가?. 이것을 하나의 코드줄로 압축하여 필요할때 가져와서 사용해보도록 하자. 

단축된 코드

이렇게 짜서 넣어놓으면 우리는 전달인자는 없고, 반환값은 있는 함수를 만들어서 제공해준 것 이다. 이렇게 사용하면 반복되는 코드를 계속해서 사용하지 않고 그때그때 필요한 것 을 가져와서 사용할 수 있게 되는 것 이다.

이번에는 전달인자를 받아오도록 해보자.

이렇게 짜서 작동시키면된다. 12줄에서 19줄 까지의 코드는 주석처리 된것과 그냥 들어간것의 결과가 같다.

출력해보면 이렇게 동작한다.

이번에는 void 선언한 펑션을 출력해보자.

void 는 전달인자 는있지만, 반환값은 없는 경우 이다.

이번에는 전달인자와 반환값이 없는 경우를 보아보자.

test를 살펴보면 된다.  전달인자와 반환값이 둘다 없음으로 그냥 실행만 해주면 된다.

 

함수의 선언부와 정의부를 확인해보자.

왜 나누어지냐면, 복잡하기 때문에 그렇다. 코드가 몃만줄 정도가 되면 너무 많은 코드들로 인해 사용자가 인지하고 고치기가 어려워지기 때문에, 코드를 정리해줄 필요가 있는데, 메인문은 생각보다 바보같아서 자신의 위에 함수가 선언되지 않으면 인식하지 못한다. 우리는 이러한 함수의 이름을 메인문 위에 선언해주고 진짜 코드는 메인의 밑에 작성해주는 방법을 사용한다.

예시를 보자.

여기서 위쪽 34줄을 지우면 main문은 Compare가 있는지 없는지 알 수 없기 때문에 main문 안에 Compare를 선언해주어도 실행 할 수 없다. 언제나 컴퓨터 코드는 위에서 밑으로 내려가면서 실행되기 때문이다.


이번에는 제귀함수를 알아보자.

제귀함수란, 자기자신을 다시한번 호출하는 즉, for문을 사용하지 않고 자기자신을 계속 호출하게 만드는 함수이다.

이게 어떻게 가능한지 예시를 보고 살펴보도록 하자.

위와같이 제귀함수로 계속해서 자기자신을 호출하여 출력할 수 있을것 이다. 그러나, 종료조건이 들어가지 않아 무한반복하다가 갑자기 메모리초과로 종료되는 것을 볼 수 있다. 그럼으로 우리는 종료조건을 다시 설정해야한다. 설정해보자.

3번만 실행된다

이렇게 3번만 실행되는 것 을 볼 수 있다.

다른 예시를 보자. 이번에는 4!을 계산해보는 코드를 짜보자.

위와 같이 짜면 된다.


Array, 배열에 대해 알아보자.

우리가 만약 100개의 int변수를 사용해야 한다고 해보자. 우리가 100개의 변수를 전부다 선언해주어야 할 것 이다.

너무 피곤하고 귀찮은 작업이지 않은가, 그래서 다른방법으로 int변수를 100개 선언해줄 수 있을것이다.

이것을 배열 이라고 한다.

배열의 예시를 살펴보자.

배열의 선언방법

배열의 선언은 매우 간단하다. 위와 같이 int 에 변수명을 선언하고 [40]같이 괄호로 감싸면 된다. 만약 6번줄과 같이 썼다면, floor이라는 배열이 40칸 생성되었다는 것 이다.

 

이러한 배열을 생성해보고 접근해보고 출력해보자.

이렇게 접근과 출력이 가능하다.

define을 사용해서 정의한 문장으로 데이터를 정해주어도 좋고, 데이터 배열을 미리 선언한 펑션으로 가져와도 좋다.

생성된 배열의 크기는 각각의 배열 데이터 사이즈와 같다. 이것을 출력해서 확인해보자.

728x90
작성일
2023. 3. 3. 19:32
작성자
WDmil
728x90

무작위 난수 를 이야기한다. rand()를 사용하여 무작위의  수를 추출하여 출력할 수 있다.

이러한 rand를 사용하기 위해서는 표준 입출력을 가져오는 것 처럼 stdlib.h을 새로 호출해주어야 한다.

 

위와 같이 stdlib.h를 호출하면 난수 생성기를 사용할 준비가 되었다.

위와 같은 방식으로 %d에 rand()하여 랜덤한 수를 출력할 수 있다.  만약, 내가 여기서 범위를 제한하고 싶다고 하면,

이렇게 해주면 된다. 그러면  rand로 나타나게 되는 데이터가 생성되는데, 그 생성 데이터에 10으로 나눈 값의 나머지를 출력하게 되면, 1~10까지의 데이터가 무작위로 나타나게 되는 원리 이다. 여기서 내가 2~11까지로 제한하고 싶다고 한다면,

로 나타낼 수 있다.

위와 같이 1을 더해서 출력해줄 수 있다. 그러나 실행 시 출력값이 계속 똑같이 나오는걸 볼 수 있을것이다.

위와 같지는 않지만 출력할 때마다 같은 수가 나온다.

우리는 이러한 데이터의 고정을 해결하기 위해 srand()함수를 사용하여 랜덤한 시드를 다시 넣어서 출력해주어야 한다.

이러한 시드값은 시간값을 넣어서 계속 바꾸어줄 수 있을것이다. 이것을 어떻게 사용하는지 보면,

 

위쪽에 time.h를 선언한다.

time를 선언하면 사용할 수 있다. os에 time을 호출하여 시간값을 가져와준다.

그리고 맨 밑과 같이 선언해주면 된다./

srand에 들어갈 상수는 time이고 time에는 NULL을 넣어 한번 초기화 시켜준 후 시간값을 호출하게 된다. 그리고 시간은 언제나 흐르고 -가 될수 없기때문에 unsinged를 넣어서 범위값을 늘려주면된다.

출력해보자.

변수가 바뀌는걸 볼 수 있을것이다.


while문 무한반복문을 살펴보자.

while은 일정 조건하에 내부의 명령문을 무한으로 반복하여 수행시킬 수 있다. 사용법을 살펴보자.

생성은 이런식으로 만들어주면 된다.

우리의 HelloWorld를 계속 출력해주는 프로그램을 만들어보자.

이렇게 출력이 계속되는걸볼 수 있다. (bool은 C++기준에서 작성하기 때문에 bool을 쓰지않고 0 또는 1을 넣어주어도 된다.)

 

while 에서 간단한 이동을 할 수있는 코드를 작성해보자.

위와 같이 작성해주면 키 입력을 받아올 수 있다. 여기서 _getch();을 사용하기 위해서는.

를 넣어주어야 한다.

conio.h를 호출하여 코드에 넣어주어야 한다.


dowhile을 사용해보자. dowhile은 일반 while과 다르게 do를 넣어서 동작해주는 while문이다. whlie문과 다르게 do안에 있는 명령문을 일단 한번 실행 하고 종료하는 과정이 들어간다. while과 차이점은,

dowhile = 일단 한번 실행 후에 조건식을 판별하여 다시 반복할지 확인한다.

while = 조건에 맞지 않으면 실행을 하지 않는다.

 

잘 사용하지는 않지만 대표적인 dowhile문을 사용하는 프로그램을 작성해보자.

위와 같이 작성할 수 있다.

여기서 const 는 상수화 한다는 뜻 으로 다음에 secretCode를 변화시킬 수 없게 만들겠다 라는 뜻 이다. 이후에 변수 수정하는 ++ 나 --를 넣어도 수정되지 않고 오류가 출력되게 된다.

실행 예시


for문을 사용해보자. for문은 while과 다르게, 조건을 넣어서 일정구간만 반복하게 만드는 용도로 사용한다.

두가지 방법이 있다. 기본적으로 설정해서 일정 횟수만 반복하는방법과 while과 같이 무한루프로 돌리는 방법이 있다. 두가지 다 살펴보자.

이런 형태로 무한루프를 돌리거나, 일정 횟수 반복되게 만들 수 있다. 한번 실행해보자.

무한 루프 되는 모습을 볼 수 있다.

for문을 사용해서 일정 범위 값을 출력해보자.

각 변수를 2개를 조건으로 넣을 수 있고, for문에서 다른 조건을 넣어 줄 수 있다.

여기서 continue는 해당되는 조건이 왔을 때 continue 이후의 코드를 실행하지 않는다. 라는 명령문 이다.

알파벳으로 돌려서 확인할수 도 있다.

 

728x90
작성일
2023. 3. 2. 15:41
작성자
WDmil
728x90

데이터는 각각의 변수 사이즈에 따라 저장된다. 그러나 일정 사이즈에 따라 저장되지 못하는 데이터 사이즈가 존재한다.

각 데이터 사이즈는 float과 int 등 여러가지 사이즈 에 따라 저장되는데, 각 변수의 사이즈에 따라 우선권 이 존재한다.

 

큰 변수는 작은 변수에 들어가지 못하지만, 작은변수는 큰 변수에 자동으로 변환되어 삽입되게 된다.

이것과 같은 설명을 보면 알 수 있다.

크게 중요한 것 은 아니지만, 각각의 bit단위에 따라 대용량 프로그램의 효율성이 달라질 수 있기 때문에 성능을 최대한 끌어올리고 싶다면 신경쓰는것 이 좋다.


이러한 것을 보고 계산식을 새워보자.

각 형변환에 따른 flaot과 int의 계산방식을 볼 수 있다.

형변환이 이루어지지 않는 (flaot)을 빼고 계산하게 되면, 데이터의 정상적인 계산이 이루어지지않음을 알 수 있다.


if문을 알아보자.

입력받은 변수의 조건이 부합하는지 검사하고 부합한다면 해당되는 코드를 실행, 아니라면 넘기는 역할을 해주는 것 이 if문 이다. if문의 동작방식을 알아보자.

위와 같은 코드를 작성하였을 때, printf에 해당하는 문자열 중 5이기 때문에 %로 나누고 나머지값이 0이 아니기 때문에 홀수 라는 문자가 출력되었다.

 

우리는 여기서 다른 방법으로 데이터를 처리할 수 있다. else를 붙이는 것 인데, if문은 위 주석에 달아놓은 대로 위 조건에 대한 해당하지 않는 데이터를 출력하라고 시킬 수 있다. 예시를 보자.

위와같이 작성할 수 있을것 이다. 엄밀히 말하자면 위 코드 두개는 서로 다른 동작방식을 가지나 결과는 같음을 알 수 있다.

 

예시 코드를 한번 작성해보자.

게임에서 흔히 쓰이는 wasd 조작방식에 대한 입력리턴을 줄 수도 있을것 이다. 재미있게도 모든 게임의 입력의 리턴은 대체적으로 이런 방식의 리턴을 사용하게 된다. 코드가 더 길어지거나 할 수는 있어도 근본적인 원리는 같다

 


switch에 대해 확인해보자. switch는 if와 비슷하지만 엄연히 다른 방식으로 동작하는 연산이다.

기본적인 동작 사항을 살펴보자.

switch 작성방법

switch는 위와같은 방법으로 작성하면 되며, default는 예외명령 처리로, 그에 도달하기 전 까지 case는 무한히 생성해도 된다.

코드 예시를 한번 살펴보자.

코드의 예시이다. switch를 이용하여 게임 시작화면을 명령프롬프트를 사용하여 출력하는 코드 이다.

여기서 case 1을 살펴보면, 1을 입력하였을 때 case1 을 실행하고 밑으로 내려가면서 코드를 실행하게 된다.

printf의 문장을 출력해주고, break를 사용하여 switch문에서 나간 뒤 다음 코드를 실행하게 된다.

 

switch는 case에 해당하는 위치로 이동 한 후 그곳에부터 실행하여 밑으로 내려간다는 코드 이고 사이에 break를 넣어주는건 필요한 부분 까지 만 실행하게 하기 위해서 이다.


else if와 switch문을 섞어서 동작하게 만들 수 도 있을것이다. 다음 예시를 통해 살펴보도록 하자.

if로 조건을 달성하고 switch로 출력을 결정한다.
출력문을 확인하자.

위와 같은 출력이 나오는것 을 알 수 있다. 우리는 이러한 데이터 처리를 if로 하고 switch로 출력하는 조금 괴상한 방식이 될 수 있지만, 이러한 방식은 문자열을 통한 데이터 변환을 효과적으로 처리할 수 있을 것 이다.

728x90
작성일
2023. 2. 28. 15:53
작성자
WDmil
728x90

연산자는 대입 연산자와 산술 연산자, 부호 연산자, 복합대입 연산자, 증감 연산자, 비교연산자 가 있다.

대입 연산자 : = 으로 우측에있는 데이터를 좌측에 넣어주는 역활을 한다.

산술 연산자 : +, -, *, /, % 로 좌측과 우측의 연산을 시도하는 연산자 이다.

부호 연산자 : 숫자의 음수 양수를 나타내는 +, -를 표시해주는 부호를 말한다.

복합 대입 연산자 : 연산기호를 줄여주는 역활을 한다. a = a+b를 쓸때 a+=b로 나타낼 수 있다. 두개의 결과는 같게 나오게 된다.

증감 연산자 : 1씩 더 늘려나가는것을 더 쉽게 쓰게 만들기위해 연산자를 간략하게 나타내는 것 이다.

비교 연산자 : 각각피 연산자의 크기를 비교해서 bool값으로 반환한다. 1은 참 0은 거짓을 나타낸다.


전체 코드의 계산공식을 연산을 보자.

위와 같이 나타낼 수 있을것이다.


여기서 증감연산자가 잘 이해가 가지 않을 수 있는데

코드는 언제나 좌측부터 우측으로 읽는다는걸 생각하고 계산해보자.

a = ++b ; 를 보면  a에 넣는다. ++ 1을 더한 b를 이라고 생각하면 되고,

a = b++ 은 b를 a에 넣고 b에 1을 더한다 라고 생각하면 된다. 즉, a에 1을 더한 b를 넣느냐 , b를 넣고 1을 더하냐 차이일 것 이다.

각 값의 출력은 이렇게 나타나게 된다. 논리 연산자는 여기서 사용하여 나타내지 않았다. 비교연산자의 두개의 변수를 넣어야한다.

 

입력 변수를 여기서 넣지 말고 윈도우 프롬프트에서 대입을 시켜보도록 하자.

scanf 문을 넣어서 데이터를 입력 할 수 있다. 그러나 윈도우 보안정책이 업데이트 되면서 오류가 발생하는데 오류코드를 없애기 위해서는,

_CRT_SECURE_NO_WARNINGS

위와 같은 scanf 오류코드 무시 문을 삽입하면 된다.

10을 넣으면 10이 나오는걸 알 수 있다.

 

위 코드를 사용해서 간단한 예제 코드를 작성해보자.

위와 같은 코드 작성법을 사용하여 예시를 만들어낼 수 있을 것 이다.

여기서 pragma region 은 코드를 범위로 묶는것 이다. Attack이라는 이름으로 endregion 까지 묶어서 보기 편하게 정리할 수 있다.

 

다른 예시를 작성해보자. 이번에는 조건 연산자를 알아보자. 조건 연산자는 데이터의 if문과 같은 역할로 동작하게 되는데,.

이와 같이 grabRange >= distance ? catchenemy = true : catchenemy = false; 를 작성하여 참인지 거짓인지를 알아볼 수 있다.


자료형 = DataType을 이야기한다.

데이터 타입은 bit, byte 등을 확인할 수 있는데, 여기는 데이터 단위의 크기에 따른 표현 방법을 이야기 한다.

bit : 가장 작은 데이터 단위 이다. 2진수로 표현할 수 있는 가장 작은 데이터의 단위 이다.

byte : 1byte == 8bit

 

각 자료형은 

char, int, longlong, float, double, long double 가 있다. 각각 살펴보도록 하자.


char : 하나의 문자를 표현할 때 사용한다. 1byte의 저장공간을 차지하게 된다.

즉, '0'은 문자를 표현하고, 65는 아스키코드의 65번째 문자를 출력하라 라고 말할 수 있을것이다.



정수형, 데이터의 정수를 감당한다.int 는 약 -21억에서 21 억 사이의 숫자를 감당한다. 데이터의 기본 숫자를 이해하면 된다.


실수형, 데이터의 실수를 감당한다. 부동소수점방식과 고정소수점 방식이 있는데, 실수는 컴퓨터의 설계상 오차가 발생할 수 밖에 없기 때문에 데이터의 오차값을 감안하여 설계를 해야한다.

for문으로 1000번 더했으나, 소수점 밑이 남는것을 볼 수 있다.


논리형, 데이터의 True와 False 의 참과 거짓을 담당한다. 데이터는 1byte로 이루어져 있으며, 데이터의 값의 범위가 1과 0으로 두개만 나타낸다. 이러한 데이터의 범위로 참과 거짓을 효율적으로 나타낼 수 있다.

bool의 데이터 범위는 1과 0으로 볼 수 있다.

 

 

우리는 여기서 오버플로우와 언더플로우를 조심해야 하는데, 언더플로우는 데이터가 너무 내려가서 표시할 수 없는 데이터 값 까지 내려가게 되어 데이터의 표현방식을 나타낼 수 없어 가장 최고치로 다시 돌아가는것 을 이야기 하고,

오버플로우 는 데이터값의 위치가 더 올라갈 수 없어 그 위인 가장 아래값이 나타나게 된다.

 

즉, 여기서는 우리는 원 하나의 테두리를 생각해볼 수 있다. 모든 데이터의 위치는 원처럼 이어지게 되고, 가장 처음의 바로 밑은 가장 높은, 가장 높은 값의 바로 위는 가장 낮은 것을 생각하면 될 것 이다. 이러한 오버플로우를 경험해볼 수 있는 간단한 코드를 소개한다.

728x90
작성일
2023. 2. 27. 14:54
작성자
WDmil
728x90

C언어 -> C++ 진행 예정 -> Direct X 작업 2D 작업과정 공부함.

 

6개월 후에 언리얼 엔진 -> Directx 3D 다루게 됨.

 

2D는 기반을 공부하는 과정이다.


기본 컴퓨터 구조

CPU (중앙처리장치)

HDD (저장장치) - ( 비휘발성 저장장치 )

RAM (임의접근저장장치) - (휘발성 저장장치)

 

여기서 사람이 코드를 입력하고, 사람의 언어를 알아들을 수 없기 때문에 기계어를 넣어주어야함.

사람은 기계어를 알아들을 수 없기 때문에 컴퓨터 코드를 입력하여 번역하여 작업을 지시해주어야 한다.

사람 ----> 컴파일(어셈블리) ----> 컴퓨터

 

이러한 컴파일을 위한 플렛폼( 개발환경 ) [ 비주얼 스튜디오, 비주얼 코드 ] 사용한다.

우리는 비주얼스튜디오 를 사용하여 C 작업을 시작할 것 이다.

 


간단한 HelloWorld 를 출력하는 코드를 작성하는 것 부터 시작한다.

위와 같은 코드를 출력하게 되면 

이것과 같이 출력된다.

정리하면, int main문을 실행하고 return 0 을 돌려주면서 코드를 종료한다. 라는 뜻 이다.

만약 오류가 나온다면 디버그 콘솔에서 오류가 출력되어 오류가 나왔다고 알 수 있고, 밑 하단의

출력문에서 오류구문이 나와서 디버깅을 할 수 있다.


위의 방법을 사용하여 출력문을 넣어보자.

HelloWorld 라는 문구를 출력하라는 printf라는 코드를 삽입하였다. 

위와 같은 Hello, World. 문구를 출력 해준다. 여기서 \n이 의미하는 것은, 줄바꿈 이다.


코드를 하나하나 정확하게 뜯어보자. 

#include <stdio.h> 라고 하는 것 은, stdio.h 라는 코드 뭉치를 이 코드 안에 컴파일 시켜라 라는 것 을 이야기한다.

이 코드문들은 농사를 짓기 위한 낫과 망치라고 말 할 수 있는것이다.


int main문은 코드 전체의 시작. 모든 코드는 main문으로부터 시작되고 끝나게 된다. 그럼으로 코드 본문을 이야기 한다.

이 코드 뭉치는 전체 코드의 작업 과정을 이야기해주는것 이다.

print문은 작업을 하는 main문안에 작성되어 있다. 즉, 여기서는 Hello, Wold!를 출력하라 라고 써져있다고 해석한다.

return 0; 는 위 main문이 종료되었을 때 0을 돌려준다는 말 이다. 반환값으로 메인함수가 종료될 때 main함수를 호출한 코드에 0을 돌려주는것을 말해준다.

\n은 줄바꿈 을 이야기 한다.


우리는 여기서 HelloWorld 말고도 숫자나 문자열을 넣어서 출력할 수 있다. 여기서 우리는 출력문을 조절할 수 있다.

출력문에서의 %d와 %s&nbsp; %f 와 같은 서식 지정자, 변환 지정자를 설정 하여 출력을 만들 수 있다.
위 코드를 출력하면 위와같은 출력문이 나오게 된다.

여기서 작성시 사용했던 \n같은 이스케이프 시퀸스는 각각 이와 같다.

이스케이프 시퀸스 의미
\a 경고(alert) ( 경고소리 울림 )
\n 줄바꿈(new line)
\t 수평 탭(horizontal tab)
\v 수직 탭(vertical tab)
\b 백스페이스(backspace)
\f 폼 피드(form feed)
\r 캐리지 리턴(carriage return)
\\ 백슬래시(\, backslash)
\' 작은 따옴표(', single quotes)
\" 큰 따옴표(",double quotes)
\ooo 8진수 숫자를 사용하여 ASCll 코드의 문자 표현
\xhh 16진수 숫자를 상요하여 ASCll 코드의 문자 표현

Format specifier 는 %d와 같은 문자열, 정수형, 실수형 등 의 데이터를 저장하고 표기하는데 사용한다.

포멧 시퀸스 의미
%s 문자열
%c 문자 1개
%d +-부호 있는 정수
%u +-부호 없는 정수
%f 실수
%0.3f 실수( 소수점 3자리까지 )
%X 16진수 대문자로
%x 16진수 소문자로
%02X 16진수 대문자로, 2자리 헥사에서, 앞의 빈칸 있으면 0으로 채움

변수와 실수의 차이점.[ 변수 와 실수 데이터 입력 ]

데이터 메모리 공간

Variable ( 변수 ) 

변할 수 있는 데이터 ( 데이터의 int a 등 a를 변수로 선언 ) 하여 데이터를 선언하여 데이터 저장공간을 어떠한 방식으로 사용한다고 선언하는 것을 이야기 합니다.

 

Constant(상수)

변하지 않는 데이터, 상수로서 데이터를 변조 참조할 수 없고 표시된 그대로의 데이터를 의미합니다.

디버깅 해보면 10과 11이 찍히는 것 을 알 수 있다.

우리는 여기서 정수를 외부가 아니라 선언 시에 초기화 할 수 있다.

int 선언 시에 20을 넣어준다.
이렇게 되면 20이 추가로 출력됨을 알 수 있다.


위와 같이 변수를 선언하지 않고 그대로 적어서 출력하게 되면

오류를 뿜뿜 함을 알 수 있다.


이것과 같이 a와 b를 저장해서 더해줄 수 있다. result라는 변수를 선언하고 변수에 변수간의 덧셈의 계산공식을 출력해보도록 하자.

각 변수를 선언하여 변수끼리 저장해주면 된다.
데이터 변수를 저장하고 사용할 수 없는 방법이 있다.
오류가 미쳐날뛰는걸 볼 수 있다.

 

728x90