728x90
#include <stdio.h>
int main(void)
{
// 다차원 배열 multidimentional array
int arr4[3][3][3]; // 배열 3개 인데, 행이 3, 열이 3임
// □□□ // □□□ // □□□
// □□□ // □□□ // □□□
// □□□ // □□□ // □□□
int arr2[2][5]= {
{1,2,3,4,5},
{1,2,3,4,5}
}; // 위에서 만든 모형과 비슷한 것을 확인할 수 있다.
int arr3[4][2]= {{1, 2}, {1, 2},{1, 2}, {1, 2}};
int arr4[3][3][3]= {
{
{1,2,3},
{1,2,3},
{1,2,3}},
{{1,2,3},
{1,2,3},
{1,2,3}},
{{1,2,3},
{1,2,3},
{1,2,3}}}
;
return 0;
}
3차원 배열은 이런 방식으로 나간다. 3차원도 이렇게 어려운데 차원이 증가할 수록 더 어려워질 것 같다.
2차원 배열 접근하기
#include <stdio.h>
int main(void){
int arr3[4][2]={
{1,2},
{1,2},
{1,2},
{1,2}
};
for (int i=0; i<4; i++){
for (int j=0; j<2; j++)
{
printf("2차원 배열 (%d %d)의 값: %d\n", i, j, arr3[i][j]);
}
printf("\n");
}
}
끝에 숫자만 보고 매우 헷갈려다 강사랑 왜 같은 타이핑을 햇는데 왜 난 다른 결과가 나올까 햇는데 첫번째 출력에서
\n을 하지 않음...
3차원 배열 접근하기
#include <stdio.h>
int main(void){
int arr[3][3][3]={
{ {1,2,3},
{1,2,3},
{1,2,3}},
{
{1,2,3},
{1,2,3},
{1,2,3}},
{
{1,2,3},
{1,2,3},
{1,2,3}
}
};
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++)
{
for (int k=0; k<3; k++)
{
printf("3차원 배열 (%d,%d,%d)의 값은: %d\n", i, j, k, arr[i][j][k]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
같은 방식으로 k만 덧붙여주면 된다.
빨리 c#으로 넘어가고 싶다...
#include <stdio.h>
int main(void){
int arr[3][3][3]={
{ {1,2,3},
{4,5,6},
{7,8,9}},
{
{11,12,13},
{14,15,16},
{17,18,19}},
{
{21,22,23},
{24,25,26},
{27,28,29}
}
};
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++)
{
for (int k=0; k<3; k++)
{
printf("3차원 배열 (%d,%d,%d)의 값은: %d\n", i, j, k, arr[i][j][k]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
// 다차원 배열 프로젝트
동물뒤집기 프로젝트 미완성
#include <stdio.h>
#include <time.h>
int arrayAnimal[4][5]; // 동물 배열을 만들어준다. 카드지도라고 보면 된다. (20장카드)
char * strAnimal[10]; // 동물들 이름, string 배열로 만든다. 10개의 공간을 만드는데 거기에 들어가는 데이터들이
// character포인터 형이다.
char * cPtr="테스트"; // character포인터는 이 테스트라는 글자가 메모리 공간상에 만들어진다.
/*어떤 메모리 공간속에 그 동물 이름이 저장된 주소가 있는데, 그 주소를 가지고 있는 것
얘는 바로바로 쉽게 접근할 수 있다.*/
void initAnimalArray();
void initAnimalName();
int getEmptyPosition();
int conv_pos_x(int x);
int conv_pos_y(int y)
int main(void){
srand(time(NULL)); // 카드를 랜덤으로 뽑을 거니까
initAnimalArray(); // 동물 배열 만들기
initAnimalName();// 동물들 이름
shuffleAnimal();//동물을 맵에 섞어본다.
return 0;
}
void initAnimalArray()
{
for(int i=0;i<4; i++)
{
for(int j=0;j<5; j++)
{
arrayAnimal[i][j]=-1;
}
}
}
void initAnimalName()
{
strAnimal[0]="원숭이";
strAnimal[1]="하마";
strAnimal[2]="강아지";
strAnimal[3]="고양이";
strAnimal[4]="돼지";
strAnimal[5]="코끼리";
strAnimal[6]="기린";
strAnimal[7]="낙타";
strAnimal[8]="타조";
strAnimal[]9="호랑이";
}
void shuffleAnimal(){
// 역할: 우리가 만들 지도에다가 어떻게 이 동물들을 집어넣을지 배치할지를 정한다.
for(int i=0; i<10; i++)
{
for (int j=0; j<2; j++)
{
int pos=getEmptyPosition(); // 비어있는 위치를 반환해줘
int x= conv_pos_x(pos);
int y= conv_pos_y(pos);
arrayAnimal[x][y]=i;
//위에서 어떤 값을 반환했을텐데 반환을 햇다하면 반환한 값을 x, y로 변경을 해줘야한다.
/*이렇게 우리가 가져온 빈공간의 좌표를 우리가 convert해서 한 번 조정을 해서
x,y좌표를 구했으면 우리가 만든 지도(arraynimal)에 i라는 값을 집어넣으면 된다.
i는 0부터 10보다 작을때까지니까, 10마리 포지션과 같게 된다.*/
}
}}
// 좌표에서 빈 공간 찾기
/*앞에서 x, y를 했는데, 왜 아래에서 random position만 보내고 getemptypostion를 호출하느냐???
반복작업을 줄이기 위해서 정수형 자료 말고, 포인트라는 구조체 등등을 사용할 수 있다.
우리가 아직 안배워서 int로 넘긴다.*/
int getEmptyPosition()
{
// □□□□□ 0 1 2 3 4 -> 얘들을 5로 나누면 몫은 0
// □□□□□ 5 6 7 8 9 -> 얘들을 5로 나누면 몫은 1
// □□□□□ 10 11 12 13 14 -> 얘들을 5로 나누면 몫은 2
// □□□□□ 15 16 17 18 19 -> 얘들을 5로 나누면 몫은 3
while(1){
int randPos=rand()%20; // 20개 공간이니까 20개 공간에서 한 개가 나와야한다. (0~19사이 숫자반환)
/*만약 19가 나왔으면??
19는 실제로 3,4좌표에 있는 숫자이다. 그래야 좌표에 접근을 할 수 있다.
그래서 우리가 19라는 값을 조정해서 ?, ?이라고 바꾸는 작업을 해야한다.*/
int x=conv_pos_x(randPos);
int y=conv_pos_y(randPos);
// 이렇게 조정을 하면 이제 3,4 위치를 알게 되었으니까
if (arrayAnimal[x][y]==-1)
{
//초기화할떄 -1로 지정했기 떄문에 만약 -1이 나올경우 이는 비어있음을 의미한다.
//만약 -1이 아니라면 비어있지 않은 것이므로 또 다시 좌표를 찾고, 비었는지 확인
return randPos;
}
//무한 루프를 돌면서
}
return 0;
}
int conv_pos_x(int x)
{
/*역할: 랜덤으로 받은 값을 xy좌표로 바꾸어 주는 것
만약 19였다고 하면 3,4로 바꿔야한다. 19를 5로 나눠보는 것은 어떨까????*/
return x/5;
}
int conv_pos_y(int x)
{
}
/* 의도: 우리가 동물이 4x5이런 형태로 카드가 만들어질텐데 10마리의 동물이 한 쌍씩 만들어진 상태
여기서 할려는 동작은 일단 이 맵에서 비어있는 위치를 랜덤으로 두개의 공간을 찾는다.
그러고 그 두 공간에 같은 동물의 이름을 집어넣는다. 이렇게 10번의 작업을 하고나면
한 번할떄마다 두 번씩 동물이름이 들어가야 하니까 10x2=20번 해서 끝나게 된다.
이렇게 해서 맵에다가 랜덤으로 동물을 배치를 한다.
그렇게 하기 위해서 10x2를 위해 이중for문을 만들었다. */
/* 프로젝트 설명
10마리의 서로 다른 동물(각 카드 2장씩)
사용자로부터 두 개의 입력값을 받아서 같은 동물을 찾으면 카드를 뒤집은 상태로 두고 틀리면 원상복귀
모든 동물쌍을 찾으면 게임 종료
총 실패횟수 알려주기
*/
'C언어 공부' 카테고리의 다른 글
구조체 (0) | 2023.07.24 |
---|---|
다차원배열 (0) | 2023.07.24 |
포인터2 (0) | 2023.07.18 |
C언어 포인터 다시 공부 (0) | 2023.07.17 |
VSCode에서 c언어 시작하기1 (0) | 2023.07.17 |