U E D R , A S I H C RSS

새싹교실/2014/속도위반/0516 (rev. 1.25)

새싹교실/2014/속도위반/0516


1. 진행사항

2. 과제

  • 1. 행렬 A를 입력받아 A^T(transpose)를 출력하는 프로그램을 만드시오.
    • 기본적으로 행렬 A는 5X5 행렬.
    • 처음 실행시 행렬의 크기도 입력받게 해서 만들어 본다면 상을 줄게요.
  • 2. Tic-Tac-Toe 게임
    • 3X3 행렬에서 먼저 한 줄을 본인의 말로 완성하면 이기는 게임
    • 기본적으로 rand함수를 이용해 컴퓨터의 말의 위치를 선택
    • 컴퓨터에 AI를 내장한다면 상을 줄게요.

2.1. 유재범

1번 코드

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

int arr;
int array[1000][1000] = {'\0', };

void Array(int);
void Change(int);

int main(void)
{
	int count=0, select;
	
	while(1)
	{
		if(count==0)
		{
			Array(5);
			count++;
		}
		else
		{
			printf("몇 개의 이차원 배열을 transpose하시겠습니까?");
			scanf("%d", &arr);
			Array(arr);
			count++;
		}
		printf("더 하시겠습니까? (Yes : 1, No : 2)");
		scanf("%d", &select);
		if(select==1)
			continue;
		else
			break;
	}
	return 0;
}

void Array(int arr)
{
	int i=0, j=0;
	

	for(i=0; i!=arr; i++)
	{
		for(j=0; j!=arr; j++)
			array[i][j] = (arr*i) + j+1;
	}

	for(i=0; i!=arr; i++)
	{
		for(j=0; j!=arr; j++)
			printf("%5d", array[i][j]);
		printf("\n");
	}
	printf("\n\n\n");

	Change(arr);
}

void Change(int arr)
{
	int save, i, j;
	for(i=0; i!=arr; i++)
	{
		for(j=0; j!=arr; j++)
			array[j][i] = (j*arr)+i+1;
	}

	for(i=0; i!=arr; i++)
	{
		for(j=0; j!=arr; j++)
			printf("%5d", array[j][i]);
		printf("\n");
	}
	printf("\n\n\n\n\n\n");
}

2번 코드


  • 1번은 카운트를 받아 처음에는 5개가 출력되고 그 다음에는 사용자가 원하는대로 출력하게 설정하였습니다.
    ㅋㅋ재범 11이상 입력하니 깨지네-우진
    필요 없어 어차피 10이면 최대 1024야. 그나저나 내 코드를 왜 돌려보고 있냐?
    깨지는거 생각해보니 %5d정도면 되지 않냐?
  • 2번도 빠른 시일 내에 올리겠습니다.

2.2. 오영은

미완성. 일단 올려놓고 나중에 고칠게요.


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

int trans[5][5]={0, };
int num1=0, num2=0;


int main()
{
     printf("   1   2   3   4   5   \n");
     printf(" ┌─┬─┬─┬─┬─┐\n");
     printf("1│  │★│  │  │  │\n");
     printf(" ├─┼─┼─┼─┼─┤\n");
     printf("2│  │  │  │  │  │\n");
     printf(" ├─┼─┼─┼─┼─┤\n");
     printf("3│  │  │  │  │  │\n");
     printf(" ├─┼─┼─┼─┼─┤\n");
     printf("4│  │  │  │  │  │\n");
     printf(" ├─┼─┼─┼─┼─┤\n");
     printf("5│  │  │  │  │  │\n");
     printf(" └─┴─┴─┴─┴─┘\n\n");
	 printf("표의 ★는 (1,2)좌표를 나타내는 것입니다.\n\n");




	for(num1=0;num1<5;num1++)
	{
		for(num2=0;num2<5;num2++)
		{
			 printf("(%d,%d)의 숫자를 입력하세요.\n", num1+1, num2+1);
	         scanf("%d", &trans[num1][num2]);
		}

	}
	system("pause");
	system("cls");

	 printf("   1   2   3   4   5   \n");
     printf(" ┌─┬─┬─┬─┬─┐\n1│");
	  for(num2=0;num2<5;num2++)
		 {
			 num1=0;
             printf("%2d│", trans[num1][num2]);
	     }
			
	 
	 for(num1=1;num1<5;num1++)
	 {
	 	if(num2=4)
			{
				printf("\n ├─┼─┼─┼─┼─┤\n%d│", num1+1);
				
			}
		 for(num2=0;num2<5;num2++)
		 {
             printf("%2d│", trans[num1][num2]);
		 }
	 }
      printf("\n └─┴─┴─┴─┴─┘\n\n");


	  printf("           ↓\n\n");


	   printf("   1   2   3   4   5   \n");
     printf(" ┌─┬─┬─┬─┬─┐\n1│");
	  for(num2=0;num2<5;num2++)
		 {
			 num1=0;
             printf("%2d│", trans[num2][num1]);
	     }
			
	 
	 for(num1=1;num1<5;num1++)
	 {
	 	if(num2=4)
			{
				printf("\n ├─┼─┼─┼─┼─┤\n%d│", num1+1);
				
			}
		 for(num2=0;num2<5;num2++)
		 {
             printf("%2d│", trans[num2][num1]);
		 }
	 }
      printf("\n └─┴─┴─┴─┴─┘\n\n\n");


	 system("pause");

    return 0;
}









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


char trans[3][3]={0, };
int num1=0, num2=0, com1=0, com2=0, times=0;
void gotoxy(int x, int y)
{
     COORD Cur;
     Cur.X=x;
     Cur.Y=y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur);
}

char ttt();


int main()
{

printf("Tic-Tac-Toe 게임\n\n");
printf("   1   2   3  \n");
printf(" ┌─┬─┬─┐\n");
printf("1│  │★│  │\n");
printf(" ├─┼─┼─┤\n");
printf("2│  │  │  │\n");
printf(" ├─┼─┼─┤\n");
printf("3│  │  │  │\n");
printf(" └─┴─┴─┘\n");
printf("표의 ★는 (1,2)좌표를 나타내는 것입니다.\n\n");
system("pause");
system("cls");



printf("   1   2   3  \n");
printf(" ┌─┬─┬─┐\n");
printf("1│%2c│%2c│%2c│\n", trans[0][0], trans[0][1], trans[0][2]);
printf(" ├─┼─┼─┤\n");
printf("2│%2c│%2c│%2c│\n", trans[1][0], trans[1][1], trans[1][2]);
printf(" ├─┼─┼─┤\n");
printf("3│%2c│%2c│%2c│\n", trans[2][0], trans[2][1], trans[2][2]);
printf(" └─┴─┴─┘\n\n");


printf("원하시는 좌표를 입력하세요. : ( , )");
gotoxy(31,9);
scanf("%d", &num1);
gotoxy(33,9);
scanf("%d", &num2);

while(times<9)
{
ttt();
}



system("pause");
}

char ttt()
{

	if(trans[1][0]=='O' && trans[2][0]=='O' && trans[0][0]=='O')
{
printf("플레이어가 이김");
return 0;
}
if(trans[1][1]=='O' && trans[2][1]=='O' && trans[0][1]=='O')
{
printf("플레이어가 이김");
return 0;
}
if(trans[1][2]=='O' && trans[2][2]=='O' && trans[0][2]=='O')
{
printf("플레이어가 이김");
return 0;
}
if(trans[1][1]=='O' && trans[2][2]=='O' && trans[0][0]=='O')
{
printf("플레이어가 이김\n");
return 0;
}

if(trans[1][0]=='X' && trans[2][0]=='X' && trans[0][0]=='X')
{
printf("컴퓨터가 이김\n");
return 0;
}
if(trans[1][1]=='X' && trans[2][1]=='X' && trans[0][1]=='X')
{
printf("컴퓨터가 이김\n");
return 0;
}
if(trans[1][2]=='X' && trans[2][2]=='X' && trans[0][2]=='X')
{
printf("컴퓨터가 이김\n");
return 0;
}
if(trans[1][1]=='X' && trans[2][2]=='X' && trans[0][0]=='X')
{
printf("컴퓨터가 이김\n");
return 0;
}


trans[num1-1][num2-1]='O';
times++;

srand((unsigned)time(NULL));
com1=rand()%3;
com2=rand()%3;
printf("%d %d\n",com1,com2);
if(trans[com1][com2]!='/0')
{
	while(trans[com1][com2]!=0)
		{
			com1=rand()%3;
            com2=rand()%3;
	    }
	trans[com1][com2]='X';
}
else
	trans[com1][com2]='X';
times++;

system("cls");
printf("   1   2   3  \n");
printf(" ┌─┬─┬─┐\n");
printf("1│%2c│%2c│%2c│\n", trans[0][0], trans[0][1], trans[0][2]);
printf(" ├─┼─┼─┤\n");
printf("2│%2c│%2c│%2c│\n", trans[1][0], trans[1][1], trans[1][2]);
printf(" ├─┼─┼─┤\n");
printf("3│%2c│%2c│%2c│\n", trans[2][0], trans[2][1], trans[2][2]);
printf(" └─┴─┴─┘\n\n");
printf("원하시는 좌표를 입력하세요. : ( , )");
gotoxy(31,9);
scanf("%d", &num1);
gotoxy(33,9);
scanf("%d", &num2);
}






2.3. 장우진

1번 코드


#include <stdio.h>

int main()
{
	int number[5][10];
	int i=0,j;
	for(i=0;i<50;i++) number[0][i]=i;

	printf("한자리 숫자를 아래와 같은 형태로 입력해 주세요.\n");
	printf("o o o o o\no o o o o\no o o o o\no o o o o\no o o o o\n");
	printf("\n");
	for(i=0;i<5;i++) scanf("%d %d %d %d %d",&number[i][0],&number[i][1],&number[i][2],&number[i][3],&number[i][4]);
	printf("\n\n");
	printf("    │\n    │ transpose\n    ▼\n\n");
	for(i=0;i<5;i++) 
	{
		for(j=0;j<5;j++) printf("%2d",number[j][i]);
		printf("\n");
	}
	printf("\n");
	return 0;


1번코드 특별과제


#include <stdio.h>

int main()
{
	int number[100][100];
	int i=0,j;
	int matrix_size;
	for(i=0;i<10000;i++) number[0][i]=i;
	printf("n*n행렬의 크기(행&열의 갯수)를 입력해주세요. : ");
	scanf("%d",&matrix_size);
	printf("한자리 숫자를 %d*%d형태의 행렬로 입력해주세요.\n",matrix_size,matrix_size);
	printf("\n");
	
	for(i=0;i<matrix_size;i++)
	{
		for(j=0;j<matrix_size;j++)
		{
			scanf("%d",&number[i][j]);//행렬의 크기만큼 입력받도록
		}
	}
	
	printf("\n\n");
	for(i=0;i<=matrix_size/2;i++) printf(" ");
	printf("│\n");
	for(i=0;i<=matrix_size/2;i++) printf(" ");
	printf("│ transpose\n");
	for(i=0;i<=matrix_size/2;i++) printf(" ");
	printf("▼\n\n");
	for(i=0;i<matrix_size;i++) 
	{
		for(j=0;j<matrix_size;j++) printf("%2d",number[j][i]);
		printf("\n");
	}
	printf("\n");
	return 0;
}


2번 코드-A.I.포함

#include <stdio.h>
#include <Windows.h>
#include <time.h>

void UserTurn();
void ComputerTurn_Easy();
void ComputerTurn_Hard();

int o_x[3][3];

int main()
{
	int i,finish_game,mode_select,turn_select,total_count=0;
	for(i=0;i<9;i++) o_x[0][i]=0;
	
	while(1)
	{
		printf("tic-tac-toe\n");
		printf("모드를 선택해주세요.(쉬움 : 1,어려움 : 2) : ");
		scanf("%d",&mode_select);
		printf("어느쪽이 먼저 시작하시겠습니까?(1. 당신,2. 컴퓨터) : ");
		scanf("%d",&turn_select);
		if(mode_select==1) printf("쉬움을 선택하셨습니다.\n");
		else if(mode_select==2) printf("어려움을 선택하셨습니다.\n");
		else
		{
			printf("이상한 선택을 하셨습니다.\n3초후 게임이 꺼집니다.\n");
			Sleep(3000);
			return 0;
		}

		if(turn_select==1) printf("먼저 시작합니다.\n");
		else if(turn_select==2) printf("컴퓨터가 먼저 시작합니다.\n");
		else
		{
			printf("이상한 선택을 하셨습니다.\n3초후 게임이 꺼집니다.\n");
			Sleep(3000);
			return 0;
		}
		printf("3초후에 게임 시작합니다.\n");
		printf("3\n");
		Sleep(1000);
		printf("2\n");
		Sleep(1000);
		printf("1\n");
		Sleep(1000);
		printf("start~!");

		system("cls");
		printf("┌─┬─┬─┐\n");
		printf("│%c │%c │%c │\n",o_x[0][0],o_x[0][1],o_x[0][2]);
		printf("├─┼─┼─┤\n");
		printf("│%c │%c │%c │\n",o_x[1][0],o_x[1][1],o_x[1][2]);
		printf("├─┼─┼─┤\n");
		printf("│%c │%c │%c │\n",o_x[2][0],o_x[2][1],o_x[2][2]);
		printf("└─┴─┴─┘\n");
		while(1)//게임 한판
		{
			printf("tic-tac-toe\n");
			if(turn_select==1) 
			{
				UserTurn();
				total_count++;
				turn_select=2;
			}

			system("cls");
			printf("┌─┬─┬─┐\n");
			printf("│%c │%c │%c │\n",o_x[0][0],o_x[0][1],o_x[0][2]);
			printf("├─┼─┼─┤\n");
			printf("│%c │%c │%c │\n",o_x[1][0],o_x[1][1],o_x[1][2]);
			printf("├─┼─┼─┤\n");
			printf("│%c │%c │%c │\n",o_x[2][0],o_x[2][1],o_x[2][2]);
			printf("└─┴─┴─┘\n");
			if((o_x[0][0]=='o'&&o_x[0][1]=='o'&&o_x[0][2]=='o')||(o_x[1][0]=='o'&&o_x[1][1]=='o'&&o_x[1][2]=='o')||(o_x[2][0]=='o'&&o_x[2][1]=='o'&&o_x[2][2]=='o')||(o_x[0][0]=='o'&&o_x[1][0]=='o'&&o_x[2][0]=='o')||(o_x[0][1]=='o'&&o_x[1][1]=='o'&&o_x[2][1]=='o')||(o_x[0][2]=='o'&&o_x[1][2]=='o'&&o_x[2][2]=='o')||(o_x[0][0]=='o'&&o_x[1][1]=='o'&&o_x[2][2]=='o')||(o_x[2][0]=='o'&&o_x[1][1]=='o'&&o_x[0][2]=='o'))
			{
				printf("당신이 이겼습니다. 축하드립니다.\n");
				break;
			}
			else if(total_count==9)
			{
				printf("무승부입니다. 수고하셨습니다.\n");
				break;
			}
			
			if(turn_select==2)
			{
				if(mode_select==1) ComputerTurn_Easy();
				else if(mode_select==2) ComputerTurn_Hard();
				total_count++;
				turn_select=1;
			}
 			system("cls");
			printf("┌─┬─┬─┐\n");
			printf("│%c │%c │%c │\n",o_x[0][0],o_x[0][1],o_x[0][2]);
			printf("├─┼─┼─┤\n");
			printf("│%c │%c │%c │\n",o_x[1][0],o_x[1][1],o_x[1][2]);
			printf("├─┼─┼─┤\n");
			printf("│%c │%c │%c │\n",o_x[2][0],o_x[2][1],o_x[2][2]);
			printf("└─┴─┴─┘\n");
			if((o_x[0][0]=='x'&&o_x[0][1]=='x'&&o_x[0][2]=='x')||(o_x[1][0]=='x'&&o_x[1][1]=='x'&&o_x[1][2]=='x')||(o_x[2][0]=='x'&&o_x[2][1]=='x'&&o_x[2][2]=='x')||(o_x[0][0]=='x'&&o_x[1][0]=='x'&&o_x[2][0]=='x')||(o_x[0][1]=='x'&&o_x[1][1]=='x'&&o_x[2][1]=='x')||(o_x[0][2]=='x'&&o_x[1][2]=='x'&&o_x[2][2]=='x')||(o_x[0][0]=='x'&&o_x[1][1]=='x'&&o_x[2][2]=='x')||(o_x[2][0]=='x'&&o_x[1][1]=='x'&&o_x[0][2]=='x'))
			{
				printf("컴퓨터가 당신을 이겼습니다. 분발하시기바랍니다.\n");
				break;
			}
			else if(total_count==9)
			{
				printf("무승부입니다. 수고하셨습니다.\n");
				break;
			}
		}
		printf("게임을 계속 하시려면 1,그만두시려면 0을 입력하시기 바랍니다. : ");
		scanf("%d",&finish_game);
		if(finish_game==1) 
		{
			system("cls");
			for(i=0;i<9;i++) o_x[0][i]=0;
			total_count=0;	
			turn_select=0;
		}
		else break;
		turn_select=0;
	}
	printf("게임을 종료합니다.\n");
	Sleep(2000);

	return 0;
}


void UserTurn()
{
	int row_number,column_number,select_check;

	printf("당신의 차례입니다. 행과 열을 선택해주세요.\n");
	printf("행을 선택해주세요.(1~3행) : ");
	scanf("%d",&row_number);
	printf("열을 선택해주세요.(1~3열) : ");
	scanf("%d",&column_number);
	printf("선택하신곳이 %d행 %d열이 맞습니까?\n맞으면 1, 틀리면 0을 선택해주세요. : ",row_number,column_number);
	scanf("%d",&select_check);
	row_number-=1;
	column_number-=1;
	if(select_check==1)
	{
		if(o_x[row_number][column_number]=='x'||o_x[row_number][column_number]=='o')
		{
			printf("빈 공간이 아닙니다. 다시선택해주세요\n");
			UserTurn();
		}
		else o_x[row_number][column_number]='o';
	}
	else if(select_check==0) UserTurn();
}	

void ComputerTurn_Easy()
{
	int row_number,column_number;
	srand(time(NULL));
	row_number=rand();
	column_number=rand();
	row_number%=3;
	column_number%=3;
	Sleep(1);
	if(o_x[row_number][column_number]=='x'||o_x[row_number][column_number]=='o') ComputerTurn_Easy();
	else o_x[row_number][column_number]='x';
}

void ComputerTurn_Hard()
{
	int i,j,select_check,loop_out=1;
	select_check=0;
	
	if(o_x[1][1]==0) o_x[1][1]='x';
	else
	{
		for(i=0;i<3;i++) 
		{
			if(loop_out==0) break;
			for(j=0;j<3;j++)
			{
				if(o_x[i][j]=='x'&&o_x[(i+1)%3][j]=='x')//열
				{
					if(o_x[(i+2)%3][j]==0) o_x[(i+2)%3][j]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
				else if(o_x[i][j]=='x'&&o_x[i][(j+1)%3]=='x')//행
				{
					if(o_x[i][(j+2)%3]==0) o_x[i][(j+2)%3]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
				else if(o_x[i][j]=='x'&&o_x[(i+1)%3][(j+1)%3]=='x')//대각선
				{
					if(o_x[(i+2)%3][(j+2)%3]==0) o_x[(i+2)%3][(j+2)%3]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
				else if(o_x[i][j]=='o'&&o_x[(i+1)%3][j]=='o')//열
				{
					if(o_x[(i+2)%3][j]==0) o_x[(i+2)%3][j]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
				else if(o_x[i][j]=='o'&&o_x[i][(j+1)%3]=='o')//행
				{
					if(o_x[i][(j+2)%3]==0) o_x[i][(j+2)%3]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
				else if(o_x[i][j]=='o'&&o_x[(i+1)%3][(j+1)%3]=='o')//대각선
				{
					if(o_x[(i+2)%3][(j+2)%3]==0) o_x[(i+2)%3][(j+2)%3]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
			}
		}
		if(select_check==0)//아무것도 아닐때
		{
			ComputerTurn_Easy();
		}
	}
}

2.4. 문태현


3. 후기

  • 아무 생각 없이 두번째 코드를 짰는데 뭔 문제점이 7개나 튀어나와... 코드 밀기도 힘들고. NXT 하고 과제 하고 어쩌고 하면 시간이 빠듯하다 ㅠㅠ 유재범
    • 그런 당신을 위해 다음주는 휴강. - 최다인

도위반
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:53
Processing time 0.0875 sec