728x90
안녕하세요.
미스터한이에요.
오늘은 대학 리포트 같은 내용을 물어보는 지인이 있어서 이렇게 글을 쓰게 되었습니다.
문제는 이렇게 되어있네요.
실습지시서 6. 도형 그리기 함수 만들기 이 프로그램 과제는 지난 프로그램 과제 4에서 다중 for문을 이용하여 작성한 정사각형, 직사각형, 삼각형, 역삼각형, 사다리꼴, 역사다리꼴 등의 도형 그리기 C 프로그램을 각각의 도형 그리기 함수들로 재작성하고 main() 함수에서는 예시한 것과 같이 이들 도형 함수를 단지 호출하는 문장으로 구성하여 가장 바람직한 C다운 프로그램을 구현하는 것이다. 단, 도형은 모니터 화면을 통해 출력하고 반드시 중첩된 for 반복문을 이용해야 한다. |
그리고 예제가 이렇게 되어 이렇게 되어있습니다.
(예제) 한변의 길이가 base인 직사각형 그리기
void square(int base)
{
int i, j;
for(i=0; i<base; i++)
for(j=0; j<base; j++)
printf("*");
printf("\n");
}
(예제) 높이가 hgt인 정삼각형 도형 그리기
void triangle(int hgt)
{
int i, j;
for(i=0; i<hgt; i++)
{
for(j=0; j<((hgt-1)-i); j++)
printf(" ");
for(j=0; j<=i; j++)
printf("*");
for(j=0; j<i; j++)
printf("*");
printf("\n");
}
}
다음으로 실질적인 문제가 이렇게 표현되어 있습니다.
<여러분의 미션> : 다음의 함수 원형의 도형 함수 만들기
1. 한변이 base인 정사각형
void square(int base);
2. 높이가 hgt인 정삼각형
void triangle(int hgt);
3. 가로가 garo 세로가 sero인 직사각형
void rect(int garo, int sero);
4. 높이가 hgt인 역삼각형
void rev_tri(int hgt);
5. 윗변 길이 up이고 높이 hgt인 사다리꼴
void poly(int up, int hgt);
6. 윗변 길이 up이고 높이 hgt인 역사다리꼴
void rev_poly(int up, int hgt);
(main() 함수 형태)
int main(void)
{
triangle(7);
square(5);
rect(16, 4);
poly(8, 6);
rev_poly(18, 5);
rev_tri(6);
rect(8, 10);
return 0;
}
1번과 2번은 이미 문제에서 답을 주고 있는 듯 하지만 그래도 차근차근 main함수에 있는 것들을 해보겠습니다.
#include <stdio.h>
void square(int base) {
int i, j;
for (i = 0; i < base; i++) {
for (j = 0; j < base; j++) {
printf("*");
}
printf("\n");
}
}
void triangle(int hgt) {
int i, j;
for (i = 0; i < hgt; i++) {
for (j = 0; j < (hgt - 1) - i; j++) {
printf(" ");
}
for (j = 0; j <= i; j++) {
printf("*");
}
for (j = 0; j < i; j++) {
printf("*");
}
printf("\n");
}
}
void rect(int garo, int sero) {
for (int j = 1; j <= sero; j++) {
for (int i = 1; i <= garo; i++) {
printf("*");
}
printf("\n");
}
}
void rev_tri(int hgt) {
int i, j;
for (i = hgt; i >= 1; --i) {
for (j = 1; j <= i; ++j) {
printf("* ");
}
printf("\n");
}
}
void poly(int up, int hgt) {
int i, j;
for (
i = 0;
i < hgt;
i++) {
for (
j = 0;
j < (hgt - 1) -
i;
j++) {
printf(" ");
}
for (
j = 0;
j <=
i;
j++) {
printf("*");
}
for (
j = 0;
j < up;
j++) {
printf("*");
}
for (
j = 0;
j < i;
j++) {
printf("*");
}
printf("\n");
}
}
void rev_poly(int up, int hgt) {
int i, j;
for (i = hgt; i >= 1; --i) {
for (j = 0; j <= (hgt - 1) - i; j++) {
printf(" ");
}
for (j = 0; j <= i; j++) {
printf("*");
}
for (j = 0; j < up; j++) {
printf("*");
}
for (j = 0; j < i; j++) {
printf("*");
}
printf("\n");
}
}
int main() {
triangle(7);
printf("\n");
square(5);
printf("\n");
rect(16, 4);
printf("\n");
poly(8, 6);
printf("\n");
rev_poly(18, 5);
printf("\n");
rev_tri(6);
printf("\n");
rect(8, 10);
return 0;
}
main() 함수의 메소드의 실행 결과가 붙어있어 구분하기 위해 한 줄씩 간격을 두었습니다.
위의 코드를 실행한 결과는 다음과 같습니다.
*
***
*****
*******
*********
***********
*************
*****
*****
*****
*****
*****
****************
****************
****************
****************
*********
***********
*************
***************
*****************
*******************
*****************************
***************************
*************************
***********************
*********************
* * * * * *
* * * * *
* * * *
* * *
* *
*
********
********
********
********
********
********
********
********
********
********
제대로 표현한지는 모르겠지만 일단 완료는 했네요.
비전공자 출신의 자바 개발자 입니다만 알고리즘에 한해서는 C언어 또한 큰 틀을 벗어나지 않는다는 사실을 알게 되었네요.
(물론 알고리즘이라기엔 부족한 면이 있지도 모르겠지만..)
처음 면접볼 때 한 면접관님의 이야기가 떠오르네요.
"언어는 도구일 뿐이다."
그 때는 면접관의 말이니 웃으며 지나갔지만 이번 계기로 어떤 이야기를 하고 싶은 지 조금 알게 되는 계기였습니다.
개발자 여러분들 모두 힘내시고
옛 추억을 떠올릴 수 있는 글이 되었으면 좋겠네요.
글을 읽어주셔서 감사합니다.
728x90
반응형
'Other' 카테고리의 다른 글
[Network] 프로토콜(Protocal)과 소켓(Socket) (0) | 2024.08.02 |
---|---|
Privacy Policy (2) | 2024.07.25 |