c++实验4 类 2(有点复杂,注释写不过来)

#include<iostream>
#include<vector>
#include"fraction.h"
using namespace std;
int main()
{
    int k,m,n;
    char q;
    Fraction a;
    Fraction b(3,1);  
    Fraction c(5);
    cout<<"make sure of the number of the fraction:";
    cin>>k;    
    cout<<endl;
    vector<Fraction> p(k);
    for(int i=0;i<k;i++){
        cout<<"set top and bottom:";
        cin>>m>>n;
        if(n!=0){
            p[i].gettb(m,n);
            p[i].legal();
        }
        else{
            cout<<"wrong value";
            return 0;
        } 
    }
    cout<<"choose two out of them from 1 to k:\n";
    cin>>m>>n;
    Fraction l;
    cout<<"please decide add,compare,mutiply,subtract,divide,output:(A,C,M,S,D,O)\n";
    while(cin>>q){
    switch(q){
        case 'A':l=p[m-1]+p[n-1];l.puttb();break;
        case 'S':l=p[m-1]-p[n-1];l.puttb();break;
        case 'D':l=p[m-1]/p[n-1];l.puttb();break;
        case 'M':l=p[m-1]*p[n-1];l.puttb();break;
        case 'C':
        {
            if(compare(p[m-1],p[n-1])>0){
                cout<<"the bigger one is:";
                p[m-1].puttb();
            }        
            else if(compare(p[m-1],p[n-1])<0){
                cout<<"the bigger one is:";
                p[n-1].puttb();
            }
            else 
                cout<<"they are equal"<<endl;
                break;
        }
        case 'O':cout<<p[m-1].val()<<" "<<p[n-1].val()<<endl;break;
    }
    }
    return 0;
}
#include<iostream>
#include<cstdio>
#include"fraction.h"
#include<cmath>
int _gcd_(int a,int b)
{
    int max,min,k;
    max=a>b?a:b;
    min=a>b?b:a;
    if(min!=0){
        while(min!=0)
        {
            k=max%min;
            max=min;
            min=k;
        }
    return max;    
    }
    else
    return 1;    
} 
using namespace std;
Fraction::Fraction(){
    top=0;
    bottom=1;
} 
Fraction::Fraction(int a,int b){   
    top=a;
    if(b!=0) bottom=b;
    else cout<<"wrong value b";
}
void Fraction::gettb(int a,int b){
    top=a;
    bottom=b;
}
void Fraction::puttb(){
    cout<<top<<"/"<<bottom<<endl;
}
void Fraction::legal(){
    if(top<0&&bottom<0){
            top=-top;
            bottom=-bottom;
    }
    if(top>0&&bottom<0){
            top=-top;
            bottom=-bottom;
    }
    int k;
    k=_gcd_(abs(top),abs(bottom));
    top=top/k;// gcc 编译器 可以用 _gcd_(a,b) 
    bottom=bottom/k;    
}
Fraction Fraction::operator+(const Fraction &a)
{
    Fraction b;
    b.top=top*a.bottom+a.top*bottom;
    b.bottom=a.bottom*bottom;
    b.legal();
    return b;
}
Fraction Fraction::operator-(const Fraction &a)
{
    Fraction b;
    b.top=top*a.bottom-a.top*bottom;
    b.bottom=a.bottom*b.bottom;
    b.legal();
    return b;
}
Fraction Fraction::operator/(const Fraction &a)
{
    Fraction b;
    b.top=top*a.bottom;
    b.bottom=bottom*a.top;
    b.legal();
    return b;
}
Fraction Fraction::operator*(const Fraction &a)
{
    Fraction b;
    b.top=top*a.top;
    b.bottom=bottom*a.bottom;
    b.legal();
    return b;
}
double Fraction::val()
{
    double k;
    k=double(top)/bottom;
    return k;
}
int compare(Fraction &a,Fraction &b)
{
    double t;
    t=(a-b).val();
    if(t>0)return 1;
    else if(t<0)return -1;
    else return 0;
}
class Fraction{
    private:
        int top;
        int bottom;
    public:
        Fraction();                            
        Fraction(int a,int b=1);    
        void gettb(int a,int b);
        void puttb();
        void legal();
        double val();
        Fraction operator+(const Fraction &a);
        Fraction operator-(const Fraction &a);
        Fraction operator/(const Fraction &a);
        Fraction operator*(const Fraction &a);
        friend int compare(Fraction &a,Fraction &b);    
};        

上面是对Fraction的实现

#include <iostream>
#include "graph.h"
using namespace std;


int main() {
    Graph graph1('*',5), graph2('$',7) ;  // 定义Graph类对象graph1, graph2 
    graph1.draw(); // 通过对象graph1调用公共接口draw()在屏幕上绘制图形 
    graph2.draw(); // 通过对象graph2调用公共接口draw()在屏幕上绘制图形
    char ch;int n;
    cout<<"reset symbol:";
    cin>>ch;
    cout<<"and your size:";
    cin>>n;
    graph1.getype(ch,n);
    graph1.draw();
    return 0; 
} 
#ifndef GRAPH_H
#define GRAPH_H

// 类Graph的声明 
class Graph {
    public:
        Graph(char ch, int n);   // 带有参数的构造函数 
        void draw();     // 绘制图形 
        void getype(char ch,int n);
    private:
        char symbol;
        int size;
};


#end// 类graph的实现
 
#include "graph.h" 
#include <iostream>
using namespace std;

// 带参数的构造函数的实现 
Graph::Graph(char ch, int n): symbol(ch), size(n) {
}
void Graph::getype(char ch,int n)
{
    symbol=ch;size=n;    
}
// 成员函数draw()的实现
// 功能:绘制size行,显示字符为symbol的指定图形样式 
//       size和symbol是类Graph的私有成员数据 
void Graph::draw() {
    // 补足代码,实现「实验4.pdf」文档中展示的图形样式 
    for(int i=0;i<size;i++)
    {
        for(int j=0;j<2*size-1;j++)        
        {                                
            if(j>=size-1-i&&j<size+i)    
            cout<<symbol;               
            else                       
            cout<<" ";                   
        }                                
        cout<<endl;                        
    }                                     
}

以上是对类graph的实现

posted @ 2018-04-23 22:44 tacore 阅读(...) 评论(...) 编辑 收藏