[1번 문제]
/*
예제 6.1.2를 응용하여 화살표키로 사각형의 크기를 조절하는 프로그램을 작성하시오
*/
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <conio.h>
#define X_MAX 40
#define Y_MAX 20
void draw_rectangle(int c, int r)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");
printf("%c%c", a, b[2]);
printf("\n");
}
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b)
{
switch (key)
{
case 72:
*y1 = *y1 - 1;
if (*y1 < 1)
*y1 = 1;
break;
case 75:
*x1 = *x1 - 1;
if (*x1 < 1)
*x1 = 1;
break;
case 77:
*x1 = *x1 + 1;
if (*x1 > x_b)
*x1 = x_b;
break;
case 80:
*y1 = *y1 + 1;
if (*y1 > y_b)
*y1 = y_b;
break;
default:
return;
}
}
int main(void)
{
char key;
int x = 10, y = 10;
printf("화살표키 ←, →로 직사각형의 가로 길이를 조절합니다\n");
printf("화살표키 ↑, ↓로 직사각형의 세로 길이를 조절합니다\n");
printf("준비가 되셨다면 키보드를 누르세요\n");
getch();
do
{
system("cls");
draw_rectangle(x, y);
key = getch();
move_arrow_key(key, &x, &y, X_MAX, Y_MAX);
} while (key != 27);
return 0;
}
[2번 문제]
/*
예제 3.2.4와 예제 6.2.1를 이용하여 화면상의 문자위치를 슬라이드바로 제어하는 프로그램을 작성하시오
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
void draw_horizontal_slide(int x, int y, int length, char *s);
void draw_vertical_slide(int x, int y, int length, char *s);
void draw_rectangle(int c, int r);
void draw_rectangle2(int c, int r, int y); //가로 슬라이드바를 위한 변형 사각형 함수
void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b);
void gotoxy(int x, int y);
int main(void)
{
char *slide = "■", key;
int x = 1, y = 1;
int h_slide_length, v_slide_length;
printf("슬라이드바 표시\n\n");
printf("수평 슬라이드바의 길이(최대 70)를\n");
printf("입력하고 Enter>");
scanf("%d", &h_slide_length);
printf("수직 슬라이드바의 길이(최대 19)를\n");
printf("입력하고 Enter>");
scanf("%d", &v_slide_length);
system("cls");
do
{
system("cls");
draw_vertical_slide(1, y, v_slide_length, slide);
draw_horizontal_slide(x, v_slide_length + 3, h_slide_length, slide);
gotoxy(x + 8, y+1);
printf("A");
key = getch();
move_arrow_key(key, &x, &y, h_slide_length, v_slide_length);
} while (key != 27);
return 0;
}
void draw_horizontal_slide(int x, int y, int length, char *s)
{
int real_length = length / 2;
gotoxy(6, y);
draw_rectangle2(real_length + 1, 1, y);
gotoxy(x + 7, y + 1);
printf("%s", s);
gotoxy(real_length * 2 + 12, y - 1);
printf("%2d", x);
}
void draw_vertical_slide(int x, int y, int length, char *s)
{
gotoxy(x, 1);
draw_rectangle(1, length);
gotoxy(x + 2, y + 1);
printf("%s", s);
gotoxy(x + 2, length + 3);
printf("%2d", y);
}
void draw_rectangle(int c, int r)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");
printf("%c%c", a, b[2]);
printf("\n");
}
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
void draw_rectangle2(int c, int r, int y)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
gotoxy(6, y + 1);
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");
printf("%c%c", a, b[2]);
printf("\n");
}
gotoxy(6, y + 2);
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b)
{
switch (key)
{
case 72:
*y1 = *y1 - 1;
if (*y1 < 1)
*y1 = 1;
break;
case 75:
*x1 = *x1 - 1;
if (*x1 < 1)
*x1 = 1;
break;
case 77:
*x1 = *x1 + 1;
if (*x1 > x_b)
*x1 = x_b;
break;
case 80:
*y1 = *y1 + 1;
if (*y1 > y_b)
*y1 = y_b;
break;
default:
return;
}
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
[3번 문제]
/*
예제 6.1.2를 응용하여 화면에 좌표의 위치를 다음과 같은 십자형식으로 표시하는 프로그램을 작성한다
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
void draw_horizontal_slide(int x, int y, int length, char *s);
void draw_vertical_slide(int x, int y, int length, char *s);
void draw_rectangle(int c, int r);
void draw_rectangle2(int c, int r, int y); //가로 슬라이드바를 위한 변형 사각형 함수
void draw_rectangle3(int c, int r); //슬라이드 바 안에 있는 사각형
void draw_line(int x, int y, int c, int r);
void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b);
void gotoxy(int x, int y);
int main(void)
{
char *slide = "■", key;
int x = 1, y = 1;
int h_slide_length, v_slide_length;
printf("슬라이드바 표시\n\n");
printf("수평 슬라이드바의 길이(최대 70)를\n");
printf("입력하고 Enter>");
scanf("%d", &h_slide_length);
printf("수직 슬라이드바의 길이(최대 19)를\n");
printf("입력하고 Enter>");
scanf("%d", &v_slide_length);
system("cls");
do
{
system("cls");
draw_vertical_slide(1, y, v_slide_length, slide);
draw_horizontal_slide(x, v_slide_length + 3, h_slide_length, slide);
gotoxy(8, 1);
draw_rectangle3(h_slide_length/2 + 1, v_slide_length);
draw_line(x, y, h_slide_length/2 +1, v_slide_length);
key = getch();
move_arrow_key(key, &x, &y, h_slide_length, v_slide_length);
} while (key != 27);
return 0;
}
void draw_horizontal_slide(int x, int y, int length, char *s)
{
int real_length = length / 2;
gotoxy(8, y);
draw_rectangle2(real_length + 1, 1, y);
gotoxy(x + 9, y + 1);
printf("%s", s);
gotoxy(real_length * 2 + 16, y + 2);
printf("%2d", x);
}
void draw_vertical_slide(int x, int y, int length, char *s)
{
gotoxy(x, 1);
draw_rectangle(1, length);
gotoxy(x + 2, y + 1);
printf("%s", s);
gotoxy(x + 2, length + 3);
printf("%2d", y);
}
void draw_rectangle(int c, int r)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");
printf("%c%c", a, b[2]);
printf("\n");
}
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
void draw_rectangle2(int c, int r, int y)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
gotoxy(8, y + 1);
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");
printf("%c%c", a, b[2]);
printf("\n");
}
gotoxy(8, y + 2);
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
void draw_rectangle3(int c, int r)
{
int i, j;
int count = 2;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r; i++)
{
gotoxy(8, count++);
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");
printf("%c%c", a, b[2]);
printf("\n");
}
gotoxy(8, count);
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
void draw_line(int x, int y, int c, int r)
{
int count1 = 0, count2 = 2;
for (int i = 0; i < c; i++)
{
gotoxy(10 + count1, y + 1);
printf("─");
count1 += 2;
}
for (int i = 0; i < r; i++)
{
gotoxy(x + 9, count2);
printf("│");
count2++;
}
gotoxy(x + 9, y + 1);
printf("┼");
gotoxy(1, 20);
}
void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b)
{
switch (key)
{
case 72:
*y1 = *y1 - 1;
if (*y1 < 1)
*y1 = 1;
break;
case 75:
*x1 = *x1 - 1;
if (*x1 < 1)
*x1 = 1;
break;
case 77:
*x1 = *x1 + 1;
if (*x1 > x_b)
*x1 = x_b;
break;
case 80:
*y1 = *y1 + 1;
if (*y1 > y_b)
*y1 = y_b;
break;
default:
return;
}
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
[4번 문제]
/*
문제 2를 응용하여 현재의 좌표를 원점으로 했을 경우 3사분면에 기호 ○를 채워서 표시하는 프로그램을 작성하시오
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
void draw_horizontal_slide(int x, int y, int length, char *s);
void draw_vertical_slide(int x, int y, int length, char *s);
void draw_rectangle(int c, int r);
void draw_rectangle2(int c, int r, int y); //가로 슬라이드바를 위한 변형 사각형 함수
void draw_rectangle3(int c, int r); //슬라이드 바 안에 있는 사각형
void draw_circle(int x, int y, int c, int r);
void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b);
void gotoxy(int x, int y);
int main(void)
{
char *slide = "■", key;
int x = 1, y = 1;
int h_slide_length, v_slide_length;
printf("슬라이드바 표시\n\n");
printf("수평 슬라이드바의 길이(최대 70)를\n");
printf("입력하고 Enter>");
scanf("%d", &h_slide_length);
printf("수직 슬라이드바의 길이(최대 19)를\n");
printf("입력하고 Enter>");
scanf("%d", &v_slide_length);
system("cls");
do
{
system("cls");
draw_vertical_slide(1, y, v_slide_length, slide);
draw_horizontal_slide(x, v_slide_length + 3, h_slide_length, slide);
gotoxy(8, 1);
draw_rectangle3(h_slide_length / 2 + 1, v_slide_length);
draw_circle(x, y, h_slide_length / 2 + 1, v_slide_length);
key = getch();
move_arrow_key(key, &x, &y, h_slide_length, v_slide_length);
} while (key != 27);
return 0;
}
void draw_horizontal_slide(int x, int y, int length, char *s)
{
int real_length = length / 2;
gotoxy(8, y);
draw_rectangle2(real_length + 1, 1, y);
gotoxy(x + 9, y + 1);
printf("%s", s);
gotoxy(real_length * 2 + 16, y + 2);
printf("%2d", x);
}
void draw_vertical_slide(int x, int y, int length, char *s)
{
gotoxy(x, 1);
draw_rectangle(1, length);
gotoxy(x + 2, y + 1);
printf("%s", s);
gotoxy(x + 2, length + 3);
printf("%2d", y);
}
void draw_rectangle(int c, int r)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");
printf("%c%c", a, b[2]);
printf("\n");
}
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
void draw_rectangle2(int c, int r, int y)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
gotoxy(8, y + 1);
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");
printf("%c%c", a, b[2]);
printf("\n");
}
gotoxy(8, y + 2);
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
void draw_rectangle3(int c, int r)
{
int i, j;
int count = 2;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r; i++)
{
gotoxy(8, count++);
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");
printf("%c%c", a, b[2]);
printf("\n");
}
gotoxy(8, count);
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
void draw_circle(int x, int y, int c, int r)
{
int a = 10;
int b = 2;
for (int i = a; i <= x + 9; i += 2)
{
for (int j = b; j <= y + 1; j += 1)
{
gotoxy(i, j);
printf("○");
}
}
gotoxy(1, 20);
}
void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b)
{
switch (key)
{
case 72:
*y1 = *y1 - 1;
if (*y1 < 1)
*y1 = 1;
break;
case 75:
*x1 = *x1 - 2;
if (*x1 < 1)
*x1 = 1;
break;
case 77:
*x1 = *x1 + 2;
if (*x1 > x_b)
*x1 = x_b;
break;
case 80:
*y1 = *y1 + 1;
if (*y1 > y_b)
*y1 = y_b;
break;
default:
return;
}
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 명품 C언어 프로젝트 안기수 저
'C > 명품 C언어 프로젝트(안기수 저)' 카테고리의 다른 글
명품 C언어 프로젝트 7.2.1장 개선과 확장 (0) | 2017.08.27 |
---|---|
명품 C언어 프로젝트 6.3장 연습문제 (0) | 2017.08.26 |
명품 C언어 프로젝트 6.1장 연습문제 (0) | 2017.08.21 |
명품 C언어 프로젝트 5.5장 연습문제 (0) | 2017.08.19 |
명품 C언어 프로젝트 5.4장 연습문제 (0) | 2017.08.12 |