LABORATORY

Posted
Filed under 지나간 기억들/Computer

[adsense1]

교양수업인 컴퓨터 프로그래밍의 과제입니다..^^;;
마름모.. 정말 힘들었어요.. 그래서.. 마름모.. 다른거 참고하면서 했습니다.

===============
숙제 : 마름모를 찍어내야합니다.
조건 : 음수입력시, 짝수입력시, 출력하는 오류메시지를 따로 구성하세요..
===============

강평 1 : 비주얼 스튜디오 6.0 왜 자꾸 컴파일할때 죽을까요??_-;; 진짜로 죽여주길 바라는걸까요??
          이래서 리눅스에서 컴파일 하는걸 좋아합니다..
강평 2 : 만약, 한두번 에러검사후 음수를 넣어버리면 안되니까.. 제대로 된 수를 넣을때까지 계속 에러를 내뱉으라고 while문으로 돌렸습니다.. 착하죠?
강평 3 : 주석과 가독성이 중요하다고 합니다.. 그래서 주석처리도 좀 했구요..
강평 4 : 사용자 정의 함수에 (int n)처럼 넣으려니까 안되네요.. type이 먼저 지정되어 있다나.. 사실, 정수로 받은 n을 다시 정수 n으로 넣는것이잖아요?? 그래서 그냥 n을 입력했더니 잘 됩니다.^^;; 소스가 어떻건 간에. 프로그램이 제대로 돌아가기면 하면 되는것이니까요..
강평 5 : 여름방학때 C언어를 집중적으로 배워볼려구요.. 저의 꿈은, 수학계산프로그램을 만드는 겁니다. 제일 먼저 determinant를 구하는  것을 만들고 싶네요.. n by n과, n by m 두가지 경우가 있으니.. 복잡하겠군요..^^


====================================================

#include <stdio.h>
#include <math.h>
//마름모 찍기
//
//3이상의 수를 입력받아야 함.
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////

//----------------------------------------------------------------------별찍기 함수 시작.

int rhombus(int n)
{
 int i, j, tmp;
 tmp = n / 2;//높이 나누기 2값을 저장

 for(i=0; i<n; i++) //---------------------------전체 높이만큼 실행
  {
         for(j=0; j<n; j++)//-----------------각 줄마다 실행.
                {
                        if(j >= abs(tmp - i) && j < n - abs(tmp -i))
      {//--------------------------별표찍기 검산.
       //한 줄에서, 별표는, (전체줄수-1)/2의 값에 해당 줄 수를 뺀 값보다 큰곳, 전체줄수에서 (전체줄수-1)/2를 뺀 곳에 찍힌다.
       //위에서, n = 5이고, i = 0이라면, 첫번째 줄에서 별을 찍는것이며,
       //첫번째줄에서는 별이 제일 가운데 한개 찍혀야만 한다.
       //(5-1)/2 = 2이고, 별은 2보다 크거나 같거나, 5 - 2 = 3번째보다 작은곳에 찍힌다. 별은 2번째 줄에 찍히는데,
       //처음 시작을 0부터 했으므로, 별은 2 + 1인 3번째에 찍힌다.
       printf("*");
      }
                        else//--------------------------별표가 아닌곳은 전부 공백처리
      {
       printf(" ");
      }
                }
                printf("\n");//한줄이 끝나면 다음 줄로 바꾼다.
        }

        printf("\n");//모양이 이쁘게 하기 위해..

 //printf("%d \n", n); //코딩할때 숫자 보려고 쓴것..
 //printf("%d \n", tmp);//역시나 숫자 확인용..

  return 0;
}
//----------------------------------------별찍기 함수 끝
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////

//----------------------------------------------------------------------메인 함수 시작.
int main()
{
 int n;
 
 printf("마름모의 높이를 입력해 주세요. 높이는 1이상의 홀수입니다. :");
 scanf("%d", &n);//n : 입력받는 수
 
 while( n <= 1 || n % 2 == 0)//전체적으로 n이 1보다 작거나 같은경우, 혹은 n이 짝수인 모든 경우에 대해서 검산
 {
  if( n <= 1)//n이 1보다 작은경우
  {
   if( n = 0)//그중 n이 0으로 입력된 경우
   {
    printf("0이 입력될 수는 없습니다. 다시 입력해 주세요. :");
    scanf("%d", n);
   }
   if( n < 0)//n이 음수인 경우
   {
    printf("음수를 입력하셨습니다. 양수로 다시 입력해 주세요. :");
    scanf("%d", &n);
   }
   //////위의 경우의 수를 제외한 나머지. 여기서는 n = 1인경우 하나만 존재.
   printf("마름모의 높이는 1 보다 큰 양의 홀수입니다. 다시 입력해 주세요. :");
   scanf("%d", &n);
   
  }
  if( n > 1)//n이 1보다 클 경우. n이 짝수인지만 검산하면 된다.
  {
   if( n % 2 == 0)//n이 짝수인 경우를 검산.
   {
   
     printf("짝수를 입력하셨습니다. \n");
     printf("마름모의 높이는 홀수만 가능합니다. 다시 입력해 주세요. :");
     scanf("%d", &n);
   
   }
  }
 }
/////////////////////////////////////////////검산 완료
//----------------------------------------------------------------------별찍기 함수 도입.

 rhombus(n);//rhombus는 마름모라는 뜻.. 사용자 정의 함수 도입. int n으로 하지 않은 이유는, n이 정수형으로 선언되어 있음.
 //int n으로 하면 에러가 납니다.^ ^


 
 return 0;

}
       

2009/05/21 11:58 2009/05/21 11:58