CodeSarang.Com
Home | All categories Join | Login | 검색   

 

공학용계산기 소스

등록자 : a99jsh (정상혁), 2008-09-09
글수정 | 글삭제


--- 간단한 공학용 계산기 소스입니다.---- #include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #define pi 3.14159265358979323846 int ErrorCheck(char *kim, int jung); /******************Error Check 2진수 ,16진수*****************************/ /* 에러 체크를 하기위해서 만든 함수 */ /************************************************************************/ int ErrorCheck(char *kim, int jung) { int it = 0, i; while(kim[it] != '\0') it++; for(i = 0; i < it; i++) { switch(jung) { case 2: switch(kim[i]) { case '0': break; case '1': break; default: return 0; } break; case 16: switch(kim[i]) { case '0': break; case '1': break; case '2': break; case '3': break; case '4': break; case '5': break; case '6': break; case '7': break; case '8': break; case '9': break; case 'a': break; case 'A': break; case 'b': break; case 'B': break; case 'c': break; case 'C': break; case 'd': break; case 'D': break; case 'e': break; case 'E': break; case 'f': break; case 'F': break; default: return 0; } break; } } return 1; } /***********************평균, 분산 ,표준편차 구하기******************/ /* 17번문제를 풀기위해서 만들어준 함수 */ /******************************합계**********************************/ float ssum(float jumsu[10]) { int num; float sum=0; for(num=0;num<10;num++) { sum =sum + jumsu[num]; //합계를 구한다. } return sum; } /***************************평균***************************************/ float aavg(float sum) { float avg; return (avg = sum/10);// 평균 값 } /********************************분산**********************************/ float ddis(float jumsu[10]) { int num; float dis,sum=0,avg; for(num = 0; num < 10 ; num++) { sum = sum +jumsu[num]; } avg = (sum/10); for(num=0, dis=0; num<10; num++) { dis = dis + pow((jumsu[num]-avg),2);//분산 값 } dis= dis/10; return dis; } /**************************표준편차************************************/ float ddev(float i) { float dev; dev = (sqrt(i));//dev에 i의 제곱근을 넣는다.(표준편차) return dev; } /*********************************************************************/ /***************비트이동하여 값구하기*****************************/ /* 16번 문제 */ /* *오른쪽 쉬프트* */ int bit_move1( int x, int y ) { return (x >> y); } /********************왼쪽 쉬프트***********************************/ int bit_move2( int x, int y ) { return (x << y); } /**************10진수를 16진수로 변환하기 **************************/ /* 8번 문제 */ char *itoh(unsigned deci, char *hexa) { int n, i, j; for(n = 0; deci; n++) { hexa[n] = (deci % 16) + '0'; if(hexa[n] > '9') hexa[n] += 7; deci /= 16; } if(n == 0) hexa[n++] = '0'; hexa[n] = '\0'; // 널문자 // 스트링 뒤집기 for(i = 0, j = n - 1; i < j; i++, j--) { char ch; ch = hexa[i]; hexa[i] = hexa[j]; hexa[j] = ch; } return hexa; } /**************16진수를 10진수로 변환하기 **************************/ /* 11번 문제 */ int htoi(char *hexa) { int count=0,decimal=0; while(hexa[count] != EOF) { if(hexa[count]>='0' && hexa[count]<='9') { decimal *= 16; decimal += hexa[count]-'0'; } else if(hexa[count]>='A' && hexa[count]<='F') { decimal *= 16; decimal += hexa[count]-'A'+10; } else if(hexa[count]>='a' && hexa[count]<='f') { decimal *= 16; decimal += hexa[count]-'a'+10; } else break; count++; } return decimal; } /***************2진수를 10진수로*********************************/ /* 13번 문제 */ int btod(char *strB) { int lResult=0,i=0; while(strB[i]=='1' || strB[i]=='0') { lResult<<=1; lResult+=(strB[i]-'0'); i++; } return lResult; } /****************16진수를 2진수로**********************************/ /* 10번 문제 */ char *htob(char *hexa) { int dec; char bin[100]; dec=htoi(hexa); itoa(dec, bin, 2); return bin; } /****************************2진수를 16진수로**********************/ /* 14번 문제 */ char *btoh(char *bin) { int dec; char hexa[100]; dec=btod(bin); itoh(dec, hexa); return hexa; } /*************************log,ln값 구하기************************/ /* 5,6번 문제 */ double log(double x); double log10(double x); double llog( double i) { return (log(i)); } double llog10(double i) { return (log10(i)); } /*******************************10진수를 2진수로 변환 ************/ /* 7번 문제 */ char *PrintBin(int in) { char bin[100]; itoa(in, bin, 2); return bin; } /****************************제곱근 구하기*******************************/ /* 4번 문제 */ double pow(double x,double y); double ppow(double i,double j) { return pow(i,j); } /****************************************삼각함수 구하기*******************/ /* 1,2,3번 문제 */ double sin(double x); double tan(double x); double cos(double x); double ssin( double i ) { return (sin(i*pi/180)); } double ccos( double i ) { return (cos(i*pi/180)); } double ttan( double i ) { return (tan(i*pi/180)); } /******************************16진수의 사칙연산************************************************/ // 12번 문제 /************ 덧셈 ***********************/ char *sumhexa1(char *hexa1, char *hexa2) { int sum; char hexasum[100]; sum=htoi(hexa1)+htoi(hexa2); itoh(sum,hexasum); return hexasum; } /************ 뺄셈**************************/ char *sumhexa2(char *hexa1, char *hexa2) { int sum; char hexasum[100]; sum=htoi(hexa1)-htoi(hexa2); itoh(sum,hexasum); return hexasum; } /***************곱셈 *********************/ char *sumhexa3(char *hexa1, char *hexa2) { int sum; char hexasum[100]; sum=htoi(hexa1)*htoi(hexa2); itoh(sum,hexasum); return hexasum; } /****************나눗셈********************/ char *sumhexa4(char *hexa1, char *hexa2) { int sum; char hexasum[100]; sum=htoi(hexa1)/htoi(hexa2); itoh(sum,hexasum); return hexasum; } /******************************2진수의 사칙연산*************************************************/ //15번 /****************덧셈*********************/ char *sumbin1(char *bin1, char *bin2) { int sum; sum=btod(bin1)+btod(bin2); return PrintBin(sum); } /*************뺄샘***********************/ char *sumbin2(char *bin1, char *bin2) { int sum; sum=btod(bin1)-btod(bin2); return PrintBin(sum); } /*************곱셈************************/ char *sumbin3(char *bin1, char *bin2) { int sum; sum=btod(bin1)*btod(bin2); return PrintBin(sum); } /**************나눗셈*********************/ char *sumbin4(char *bin1, char *bin2) { int sum; sum=btod(bin1)/btod(bin2); return PrintBin(sum); } /********************************************메인함수**********************************************/ main() { int k, h, c, in,d,deci,x, n, p, result,count, total, num, st_number[10]; double a,w,g; char strB[80]={0,},hexa[100],hexa2[100],u,e; long lResult=0,i=0; float jumsu[10], sum, avg ,dis , dev; printf("*****상혁이의공학용계산기****** \n"); printf("* 1, sin 의 값 구하기. * \n"); printf("* 2, cos 의 값 구하기. * \n"); printf("* 3, tan 의 값 구하기. * \n"); printf("* 4, x^y승수구하기. * \n"); printf("* 5, ln 의 값 구하기. * \n"); printf("* 6, log 의 값 구하기. * \n"); printf("* 7, 10진수를 2진수로 바꾸기. * \n"); printf("* 8, 10진수를 16진수로 바꾸기. * \n"); printf("* 9, 10진수의 사칙연산(구현 X). * \n"); printf("*10, 16진수를 2진수로 바꾸기. * \n"); printf("*11, 16진수를 10진수로 바꾸기. * \n"); printf("*12, 16진수의 사칙연산. * \n"); printf("*13, 2진수를 10진수로 바꾸기. * \n"); printf("*14, 2진수를 16진수로 바꾸기. * \n"); printf("*15, 2진수의 사칙연산. * \n"); printf("*16, 비트이동하여 값구하기. * \n"); printf("*17, 평균,분산,표준편차 구하기. * \n"); printf("*18, 종료 * \n"); printf("********************************* \n"); printf("구하고자하는 위의 번호를 치세요.\n"); scanf("%d",&k); fflush(stdin); // TEST switch(k) { case 1: printf("1번을 선택하셨습니다.\n"); printf("sin"); scanf("%lf",&a); /* if(fabs(a) > 1000000) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; }*/ fflush(stdin); w = ssin(a); printf("sin%lf = %lf\n",a,w); break; case 2: printf("2번을 선택하셨습니다.\n"); printf("cos"); scanf("%lf",&a); /* if(fabs(a) > 1000000) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; }*/ fflush(stdin); w = ccos(a); printf("cos%lf = %lf\n",a,w); break; case 3: printf("3번을 선택하셨습니다.\n"); printf("tan"); scanf("%lf",&a); /* if(fabs(a) > 1000000) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; }*/ fflush(stdin); w = ttan(a); printf("tan%lf = %lf\n",a,w); break; case 4: printf("4번을 선택하셨습니다.\n"); printf("실수와 그승수 값을 입력하세요(예:x^y):\n"); scanf("%lf^%lf",&a,&w); fflush(stdin); g = ppow(a,w); printf("%lf^%lf = %lf \n",a,w,g); break; case 5: printf("5번을 선택하셨습니다.\n"); printf("ln"); scanf("%lf",&a); /* if(fabs(a) > 1000000) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; }*/ fflush(stdin); w=llog(a); printf("%lf\n",w); break; case 6: printf("6번을 선택하셨습니다.\n"); printf("log"); scanf("%lf",&a); /* if(fabs(a) > 1000000) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; }*/ fflush(stdin); w=llog10(a); printf("%lf\n",w); break; case 7: printf("7번을 선택하셨습니다.\n"); printf("2진수로 바꿀 10진수를 입력하세요: "); scanf("%d",&in); fflush(stdin); printf("2진수의 값은 %s 입니다. \n", PrintBin(in)); break; case 8: printf("8번을 선택하셨습니다.\n"); printf("16진수로 바꿀 10진수를 입력하세요 : "); scanf("%d",&in); fflush(stdin); itoh(in, hexa); printf("16진수의 값은 %s 입니다. \n", hexa); break; case 9: printf("9번을 선택하셨습니다.\n"); printf("10진수 사칙연산은 계산하지 않았습니다.\n"); break; case 10: printf("10번을 선택하셨습니다.\n"); printf("2진수로 바꿀 16진수를 입력하세요:"); gets(hexa); if(ErrorCheck(hexa, 16) == 0) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; } fflush(stdin); printf("2진수의 값은 %s 입니다. \n",htob(hexa)); break; case 11: printf("11번을 선택하셨습니다.\n"); printf("10진수로 바꿀 16진수를 입력하세요 : "); gets(hexa); if(ErrorCheck(hexa, 16) == 0) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; } fflush(stdin); printf("10진수의 값은 %d 입니다.\n",htoi(hexa)); break; case 12: printf("12번을 선택하셨습니다.\n"); printf("16진수를 입력하세요 : "); gets(hexa); if(ErrorCheck(hexa, 16) == 0) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; } fflush(stdin); printf("16진수를 입력하세요 : "); gets(hexa2); if(ErrorCheck(hexa2, 16) == 0) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; } fflush(stdin); printf(" %s + %s = %s 입니다.\n",hexa,hexa2,sumhexa1(hexa, hexa2)); printf(" %s - %s = %s 입니다.\n",hexa,hexa2,sumhexa2(hexa, hexa2)); printf(" %s × %s = %s 입니다.\n",hexa,hexa2,sumhexa3(hexa, hexa2)); printf(" %s ÷ %s = %s 입니다.\n",hexa,hexa2,sumhexa4(hexa, hexa2)); break; case 13: printf("13번을 선택하셨습니다.\n"); printf("10진수로 바꿀 2진수를 입력하세요:"); gets(strB); if(ErrorCheck(strB, 2) == 0) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; } fflush(stdin); printf("10진수의 값은 %d 입니다. \n",btod(strB)); break; case 14: printf("14번을 선택하셨습니다.\n"); printf("16진수로 바꿀 2진수를 입력하세요:"); gets(strB); if(ErrorCheck(strB, 2) == 0) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; } fflush(stdin); printf("16진수의 값은 %s 입니다. \n",btoh(strB)); break; case 15: printf("12번을 선택하셨습니다.\n"); printf("2진수를 입력하세요 : "); gets(hexa); if(ErrorCheck(hexa, 2) == 0) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; } fflush(stdin); printf("2진수를 입력하세요 : "); gets(hexa2); if(ErrorCheck(hexa2, 2) == 0) { printf("잘못입력하셨습니다..\n아무키나 누르면 다시 메뉴로 갑니다"); e = getche(); break; } fflush(stdin); printf(" %s + %s = %s 입니다.\n",hexa,hexa2,sumbin1(hexa, hexa2)); printf(" %s - %s = %s 입니다.\n",hexa,hexa2,sumbin2(hexa, hexa2)); printf(" %s × %s = %s 입니다.\n",hexa,hexa2,sumbin3(hexa, hexa2)); printf(" %s ÷ %s = %s 입니다.\n",hexa,hexa2,sumbin4(hexa, hexa2)); break; case 16: printf("16번을 선택하셨습니다.\n"); printf("오른쪽으로 쉬프트시킬려면 1, 왼쪽으로 쉬프트시킬려면 2를 누르세요:"); scanf("%d",&p); fflush(stdin); switch(p) { case 1: printf( "1번을 선택하셨습니다.\n"); printf( "정수를 입력하세요: " ); scanf( "%d", &x ); fflush(stdin); printf( "쉬프트시킬 칸수를 입력하세요 : " ); scanf( "%d", &n ); fflush(stdin); result = bit_move1( x , n ); printf( "입력한 %d 값이 %d 만큼 오른쪽으로 쉬프트되어 %d의 결과값이 나왔습니다.\n", x, n, result ); break; case 2: printf( "2번을 선택하셨습니다.\n "); printf( "정수를 입력하세요: " ); scanf( "%d", &x ); fflush(stdin); printf( "쉬프트시킬 칸수를 입력하세요 : " ); scanf( "%d", &n ); fflush(stdin); result = bit_move2( x , n ); printf( "입력한 %d 값이 %d 만큼 왼쪽으로 쉬프트되어 %d의 결과값이 나왔습니다.\n", x, n, result ); break; } break; case 17: printf("17번을 선택하셨습니다.\n"); printf("점수 10개를 입력하세요.\n"); for(num = 0; num < 10; num++) { printf("%d번째 점수입력=>",num+1); scanf("%f", &jumsu[num]); fflush(stdin); } sum = ssum(jumsu); printf("합계는 %f 입니다.\n",sum); avg = aavg(sum); printf("평균은 %f 입니다.\n",avg); dis = ddis(jumsu); printf("분산은 %f 입니다.\n",dis); dev = ddev(dis); printf("표준편차는 %f 입니다.\n",dev); break; case 18: printf("18번을 선택하셨습니다.\n"); printf("종료합니다.\n "); exit(0); default: printf("번호선택이 잘못되었습니다.\n"); break; } return main(); } -----------예전에 만들어논거 올립니다..;;-----



글수정 | 글삭제
http://codesarang.com. mail to cpueblocpueblo.com