모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : computer_62272
    작성자 : galaxynote2
    추천 : 0
    조회수 : 7244
    IP : 203.253.***.142
    댓글 : 6개
    등록시간 : 2012/10/15 12:02:20
    http://todayhumor.com/?computer_62272 모바일
    c언어 분수계산...

     

    이렇게 분수 2개를 입력하면 분수계산기로 덧샘, 뺄셈, 곱샘, 나눗셈이 출력되게 해야 하는거예요..

     

    사칙연산은 각각 함수로 만들어야 하고, 음수 계산이 가능해야 한다.

    분모의 최대 공약수는 '유클리드 호제법'을 이용한다

    분수 표현방식은   분자/분모

    분수는 기약분수로 표현해야 한다. 분모에는 0이 입력될수 없다.

    부호는 분자가 가지고 있고, 분자에 0이 있으면 0/0 으로 출력

    이런 조건입니다. ㅠㅠㅠㅠ

     

     

     

    struct 사용안함

     

    #include <stdio.h>

    // 분수에서 분모와 분자 중 큰 값이 어떤 값인지 가지고 있는 데이터 타입
    typedef enum larger
    { DENOMINATOR,
     NUMERATOR }
    Larger;

    /////////////////// 함수정의(함수 프로토 타입)
    int findLCM(int m, int n);
    Larger checkFractionWhichIsLarger(int numerator, int denominator);
    void swapFirstIsLarger(int* num1, int* num2);

    void addFraction1(int f1n, int f1d, int f2n, int f2d, int* rn, int* rd);

    ////////////////////
    int main(void){
     int f1d, f1n; // 분수 1의 분모, 분자 denominator, numerator
     int f2d, f2n; // index 0 : 분모, 1: 분자
     int r1d, r1n;
     int r2[2];

     // 분수 두개 입력받기
     // 에러처리부분 - 분모가 0이면 다시 입력받도록 하기 : 추가하세요.
     printf("input fraction 1 : ");
     scanf("%d/%d", &f1n, &f1d); // 분자/분모

     printf("input fraction 2 : ");
     scanf("%d/%d", &f2n, &f2d); // 분자/분모

     // 기약분수 만들기
     makingIrreducible(&f1d, &f1n);
     makingIrreducible(&f2d, &f2n);

     // 사칙연산 하기
     addFraction1(f1n, f1d, f2n, f2d, &r1n, &r1d);
     printf(" add : %d/ %d\n", r1n,r1d);

     return 0;
    }

    /////////////////////////////////////////////
    //최대 공약수 구하기 : 유클리드 호제법
    /////////////////////////////////////////////
    //1071은 1029로 나누어 떨어지지 않기 때문에, 1071을 1029로 나눈 나머지를 구한다. => 42
    //1029는 42로 나누어 떨어지지 않기 때문에, 1029를 42로 나눈 나머지를 구한다. => 21
    //42은 21로 나누어 떨어진다.
    // 최대공약수는 21;
    int findGCD(int larger, int smaller){
     int remainder = 0;
     int devider = 0;

     if(0== smaller)
      return larger;

     while(1){
      remainder = larger % smaller;
      if(0 == remainder){
       return smaller;
      }else {
       larger = smaller;
       smaller = remainder;
      }
     }
    };

    /////////////////////////////
    // 최소공배수 구하기
    // 두 숫자 m,n
    // lcm = m * n / gcd
    ////////////////////////////
    int findLCM(int m, int n){
     int temp;
     
     if(n>m){
      temp = m;
      m = n;
      n = temp;
     }
     return (m * n) / findGCD(m,n);
    }
    /////////////////
    Larger checkFractionWhichIsLarger(int numerator, int denominator){
     Larger whichIsLarge = NUMERATOR;
     if( (denominator) > (numerator)){
      whichIsLarge = DENOMINATOR;
     }
     return whichIsLarge;
    }

    //////////////////////
    //큰 값을 첫번째 오도록 바꾸는 함수
    void swapFirstIsLarger(int* num1, int* num2){
     int temp;

    }
    /////////////////////// 곱하기/나누기 부호처리
    void checkMultipliResultSign(int *num1, int *num2){

    }
    /////////////////////////////
    // 기약분수로 만들기
    ////////////////////////////
    void makingIrreducible(int* numerator, int* denominator){
     Larger whichIsLarge;
     int larger, smaller;
     int gcd;

     // 분수와 분모중 큰 수 체크 & 가지고 있기
     
     // 두수의 최대 공약수 구하기

     // 두 수를 최대 공약수로 나누기

     // 체크되어있는 큰 수가 어떤 수인지에 따라 값 바꾸기
    }

    /////////////////////////////
    // 분수끼리 더하기
    void addFraction1(int f1n, int f1d, int f2n, int f2d, int* rn, int* rd){
     int gcd, lcm;

    }
    /////////////////////////////
    // 분수끼리 빼기
    /////////////////////////////
    // 함수 작성 g


    /////////////////////////////
    // 분수끼리 곱하기
    /////////////////////////////
    void multiplyFraction1(int f1n, int f1d, int f2n, int f2d, int* rn, int* rd){
     checkMultipliResultSign(&f1n, &f2n);
     *rd = f1d * f2d;
     *rn = f1n * f2n;
    }

    /////////////////////////////
    // 분수끼리 나누기
    /////////////////////////////
    void divideFraction1(int f1n, int f1d, int f2n, int f2d, int* rn, int* rd){

    }

     

     

     

     

    struct 사용

     

    #include <stdio.h>

    // 분수 타입 선언
    typedef struct fraction{
     int denominator; //분모
     int numerator; // 분자,부호는 분자가 가지고 있음.
    } Fraction;

    // 분수에서 분모와 분자 중 큰 값이 어떤 값인지 가지고 있는 데이터 타입
    typedef enum larger
    { DENOMINATOR,
     NUMERATOR }
    Larger;

    /////////////////// 함수정의(함수 프로토 타입)
    int findGCD(int , int);
    int findLCM(int, int );
    Larger checkFractionWhichIsLarger(Fraction f1);
    void swapFirstIsLarger(int*, int*);

    void multiplyFraction1(Fraction f1, Fraction f2, Fraction* result);
    Fraction multiplyFraction2(Fraction f1, Fraction f2);
    void divideFraction1(Fraction f1, Fraction f2, Fraction* result);
    Fraction divideFraction2(Fraction f1, Fraction f2);

    //////////////////// 
    int main(void){
     Fraction f1, f2, resultSolution1, resultSolution2;

     // 분수 두개 입력받기
     // 에러처리부분 - 분모가 0이면 다시 입력받도록 하기 : 추가하세요.
     printf("input fraction 1 : ");
     scanf("%d/%d", &f1.numerator, &f1.denominator); // 분모 분자

     printf("input fraction 2 : ");
     scanf("%d/%d", &f2.numerator, &f2.denominator); // 분모 분자

     // 기약분수 만들기
     makingIrreducible(&f1);
     makingIrreducible(&f2);

     // 사칙연산 하기
     addFraction1(f1, f2, &resultSolution1);
     printf(" add : %d/ %d\n", resultSolution1.numerator, resultSolution1.denominator);
     resultSolution2 = addFraction2(f1, f2);
     printf(" add : %d/ %d\n", resultSolution2.numerator, resultSolution2.denominator);

     return 0;
    }

    /////////////////////////////////////////////
    //최대 공약수 구하기 : 유클리드 호제법
    /////////////////////////////////////////////
    //1071은 1029로 나누어 떨어지지 않기 때문에, 1071을 1029로 나눈 나머지를 구한다. => 42
    //1029는 42로 나누어 떨어지지 않기 때문에, 1029를 42로 나눈 나머지를 구한다. => 21
    //42은 21로 나누어 떨어진다.
    // 최대공약수는 21;
    int findGCD(int larger, int smaller){
     int remainder = 0;
     int devider = 0;

     if(0== smaller)
      return larger;
     else if(0> smaller)
      smaller *= -1;

     while(1){
      remainder = larger % smaller;
      if(0 == remainder){
       return smaller;
      }else {
       larger = smaller;
       smaller = remainder;
      }
     }
    };

    /////////////////////////////
    // 최소공배수 구하기
    // 두 숫자 m,n
    // lcm = m * n / gcd
    ////////////////////////////
    int findLCM(int m, int n){
    //////////////최소공배수!
    }
    ///////////////// 분수에서 분자 분모중 큰 값 확인
    Larger checkFractionWhichIsLarger(Fraction f1){
     Larger whichIsLarge = NUMERATOR;
     if( (f1.denominator) > (f1.numerator)){
      whichIsLarge = DENOMINATOR;
     }
     return whichIsLarge;
    }

    //////////////////////
    void swapFirstIsLarger(int* num1, int* num2){
     int temp;
     if((*num2) > (*num1)){
      temp = *num1;
      *num1 = *num2;
      *num2 = temp;
     }
    }
    ////////////////////// 곱하기시 부호 처리
    void checkMultipliResultSign(Fraction* f1, Fraction* f2){
    /////////////// 곱하기시 부호처리
    }
    ///////////////////// 부호 처리 : 분모에 부호있을 경우 부호 옮기기
    // 함수 만드세요.

    ///////////////////// 결과가 0인이 체크
    void checkResultIsZero(Fraction * f){

    }
    /////////////////////////////
    // 기약분수로 만들기
    ////////////////////////////
    void makingIrreducible(Fraction *f1){
     Larger whichIsLarge;
     int larger, smaller;
     int gcd;

     // 분수와 분모중 큰 수 체크 & 가지고 있기
     whichIsLarge = checkFractionWhichIsLarger(*f1);
     larger = f1->denominator;
     smaller = f1->numerator;
     swapFirstIsLarger(&larger, &smaller);
     
     // 두수의 최대 공약수 구하기
     gcd = findGCD(larger, smaller);

     // 두 수를 최대 공약수로 나누기
     larger /= gcd;
     smaller /= gcd;

     // 체크되어있는 큰 수가 어떤 수인지에 따라 값 바꾸기
     if(whichIsLarge == NUMERATOR){
      f1->numerator = larger;
      f1->denominator = smaller;
     }else {
      f1->numerator = smaller;
      f1->denominator = larger;
     }
    }

    /////////////////////////////
    // 분수끼리 더하기
    /////////////////////////////
    // 방법1 : 포인터로 넘기기!
    void addFraction1(Fraction f1, Fraction f2, Fraction* result){
     int gcd, lcm;
     if(f1.denominator == f2.denominator){
      result->denominator = f1.denominator;
      result->numerator = f1.numerator + f2.numerator;
     }else{
     // 분모의 최대공약수와 최소공배수를 구함
     lcm = findLCM(f1.denominator, f2.denominator);
     gcd = findGCD(f1.denominator, f2.denominator);
     result->denominator = lcm;
     result->numerator = f1.numerator * (lcm / f1.denominator)
             + f2.numerator * (lcm / f2.denominator);
     }
    }

    // 방법2 : return value사용하기
    Fraction addFraction2(Fraction f1, Fraction f2){

    }


    /////////////////////////////
    // 분수끼리 빼기
    /////////////////////////////
    void substractFraction1(Fraction f1, Fraction f2, Fraction* result){

    }

    // 방법2 : return value사용하기
    Fraction substractFraction2(Fraction f1, Fraction f2){

    }

     

    /////////////////////////////
    // 분수끼리 곱하기
    /////////////////////////////
    void multiplyFraction1(Fraction f1, Fraction f2, Fraction* result){
     result->denominator = f1.denominator * f2.denominator;
     result->numerator = f1.numerator * f2.numerator;
     makingIrreducible(result);
    }

    // 방법2 : return value사용하기
    Fraction multiplyFraction2(Fraction f1, Fraction f2){
     Fraction result;
     result.denominator = f1.denominator * f2.denominator;
     result.numerator = f1.numerator * f2.numerator;
     makingIrreducible(&result);
     return result;
    }

    /////////////////////////////
    // 분수끼리 나누기
    /////////////////////////////
    void divideFraction1(Fraction f1, Fraction f2, Fraction* result){

    }

    // 방법2 : return value사용하기 : 함수 만들기

     

     

     

     

     

    너무 어려네요.... 어떻게 고쳐야 하나요?ㅠ struct도 모르겠고 return value도 모르겠고 다 모르겠습니다 ㅜ

     

    galaxynote2의 꼬릿말입니다
    친절하신 오유분들 도와주세요.

    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    371727
    그래픽카드 추천좀 해주세요 [15] 나나치 24/10/01 09:33 342 4
    371726
    롯데카드 장기무이자 할부인데 [9] 오뚜기신라면. 24/09/28 12:06 598 1
    371725
    SSD 발열 스로틀링을 잡으려면 어딜 손 봐야 하나요 [5] ㅗㅠㅑ 24/09/22 08:31 579 0
    371724
    2100년까지 사용가능한 desktop pc [2] 김원표wonpyo 24/09/21 02:01 865 1
    371722
    모니터 사망 질문드립니다. [2] 십갱이 24/09/17 13:18 734 1
    371721
    둠은 고전게임인데 프레임이 높아서 어색하네요 ㅋㅋ [1] Oh_My!_Girl 24/09/17 12:05 811 1
    371720
    윈11 시스템 팝업창? 의 글자가 커졌으면 좋겠습니다. [4] 본인삭제금지 이사 24/09/14 23:07 833 0
    371719
    안녕하세요. 중고로 피시 구매할려고 합니다. [6] 단단a 24/09/14 08:09 814 1
    371718
    캔버스 키캡 설치 완료! [9] NeoGenius 24/09/13 15:20 846 3
    371717
    노트북 SSD 업글 질문 드립니다. [10] 베오베금지본인삭제금지 MincePie 24/09/13 14:01 694 0
    371716
    히히히~ 키캡 와써요~ 뿌잉뿌잉 [5] NeoGenius 24/09/12 16:22 832 4
    371715
    컴퓨터가 이상해요. [8] 굥정과상식 24/09/11 22:56 965 3
    371714
    안녕하세요 놋북추천해주시고 가시면 정말 감사합니다 [21] 본인삭제금지 이니예스타 24/09/10 14:57 807 10
    371713
    PC 조립비를 쓴 까닭 [13] NeoGenius 24/09/09 13:11 1353 9
    371712
    Lossless Scaling 이거 신세계네요..근데 OTT는 안되나요? [7] 본인삭제금지 Oh_My!_Girl 24/09/06 02:54 934 2
    371711
    전기누전후 컴퓨터가 안켜져요 [6] 꽃님이^^* 24/09/02 22:18 943 5
    371710
    폰으로 핫스팟으로 노트북게임하는데요.... [11] 별일없이산다 24/09/02 21:26 859 1
    371709
    커스텀 키보드 완료 [10] NeoGenius 24/09/01 01:51 982 4
    371708
    무뽑기 해보았습니다! [8] 캐타 24/08/29 23:17 970 3
    371707
    요새 컴터 업글 할 이유가 없네요 [4] 혹스터언 24/08/29 00:56 1276 4
    371705
    견적 한번 보시고 잔소리 해주세요 [10] 비니랑민아링 24/08/27 15:52 892 4
    371704
    조립컴 맞추신 분들 [14] 영기영차 24/08/26 11:19 1131 2
    371703
    커스텀 키보드 창작글 NeoGenius 24/08/23 20:17 844 1
    371702
    Hynix의 'H'는 Hyundai의 'H' [1] ㅗㅠㅑ 24/08/23 14:20 937 1
    371701
    제 컴퓨터에 윈도우즈11을 설치할 수 있는지 봐 주세요. [7] 미께레 24/08/23 13:19 993 1
    371699
    데스크탑 8년차 업그레이드 고민중입니다. [17] 창작글 캐타 24/08/22 00:04 1150 5
    371698
    하드디스크 추가로 장착하려는데요... 도움!! ㅠㅠ [6] 햄즈 24/08/21 22:28 846 0
    371697
    현시점 컴퓨터 구매에 대해 의견 부탁드립니다. [11] 순한사자 24/08/21 21:22 851 0
    371696
    당근에서 파는 중고 PC 봐주세요! [6] grcrewjp 24/08/21 13:06 1141 1
    371694
    네트워크 보안설정 802.1xEAP 이건 뭐에요?? [1] 잠이가온다 24/08/16 10:18 886 0
    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈