# 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;
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);
};        

#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;
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;
}
}

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