이차방정식의 근을 구하는 프로그램, 진실은 저너머에 VII
#include <stdio.h>
#include <ctype.h>
#include <math.h>
/*
* copyleft ⓛ 2006 - 2017 programmed by Sinclair
*/
// prototypes
extern int onlyInt( int *) ;
// 입력 로직을 바꿨다고 나중에 다른 부분에 영향을 주지 않습니다.
// 결과를 출력할 함수 presentation logic
int printResult( int, double *, int ) ;
// 근을 구하는 함수 business logic
int getResult( int *, int) ;
int main() {
int data[3] ;
register int tag ;
puts("정수형 세 개를 입력하시면 이차방정식의 근을 구합니다.") ;
tag = 0 ;
while(1004) {
if( tag++ == 5 ) return -4 ;
if( onlyInt( data ) ) { // data == &data[0]
puts("프로그램을 종료합니다.") ;
return -1 ;
} // end if
if( *data ) break ;
puts("a값을 0으로 입력하면 계산할 수 없습니다. 다시 입력하세요.") ;
} // end while
if( onlyInt( data+1 ) ) {
puts("프로그램을 종료합니다.") ;
return -2 ;
} // end if
if( onlyInt( data+2 ) ) {
puts("프로그램을 종료합니다.") ;
return -3 ;
} // end if
if( getResult( data , sizeof data / sizeof *data ) ) {
puts("프로그램 실행에 문제가 있습니다.") ;
exit(-1) ;
}
return 0 ;
} // end main()
int getResult( int * data , int size ) {
double result[2] ;
int discriminant; // 판별식 값
if( size < 3 ) {
puts("데이터 넣을 공간이 마이 부족해요~") ;
return -1 ;
} // end if
result[0] = -b / (2.0 * a) ;
if(!(discriminant = b * b – 4 * a * c)) { // 중근일 때
result[1] = result[0] ;
} // end if
else { // 실근과 허근일 때
result[1] = fabs( sqrt( discriminant > 0 ?
discriminant : - discriminant ) / ( 2 * a )) ;
/*
* result[1] = sqrt( discriminant > 0 ?
* discriminant : - discriminant ) /
* ( 2 * ( a > 0 ? a : -a )) ;
*/
} // end else
if( printResult( discriminant , result ,
sizeof result / sizoef *result ) ) {
puts("출력에 문제가 있습니다") ;
return -2 ;
} // end if
return 0 ;
} // end getResult()
int printResult( int d , double * r , int size ) {
if( size > 2 ) {
puts("찍을 데이터를 주세요~") ;
return -1 ;
} // end if
if( !d ) {
printf("중근 : %f \n" , r[0]) ;
} // end if
else if ( d > 0 ) {
printf("실근 : %f , %f\n" , r[0] + r[1] , r[0] - r[1]) ;
} // end else if
else {
printf("허근 : %f ± %f i\n" , r[0] , r[1]) ;
// 결국 허근은 i를 붙이는 일 아니겠습니까?
} // end else
return 0 ;
} // end printResult()
어떻습니까? 아주 간단해 보이는 문제일지라도 처음에 시간을 많이 투자해서 설계할 때 생각을 많이 하고 고민해서 제대로 작성했더니 다른 개념들을 접목하기도 쉽지 않습니까? 오늘을 사는 프로그래머가 내일을 생각한다면 반드시 설계에 적절한 시간을 투자하고 제대로 잘해야 합니다. 안 그럼 두고 두고 욕 먹습니다. 욕 먹으면 오래 산다고 하는데 벽에 똥칠할 때까지 사시렵니까? 눼에~ 눼에~
C언어 및 기타 프로그래밍 관련 질문은 오픈 카톡으로
group talk - https://is.gd/yourc
1:1 talk - https://is.gd/aboutc
#Sinclair #씽클레어 #싱클레어 #씽클레어도씨 #씨언어 #씨프로그래밍 #C언어 #Cprogramming #C_Programming #C #Programming #Clanguage #C_Language