ネットワークエンジニアリング18級『C++プログラム設計II』実践作業1

27062 ワード


A.クラスの応用1
Time Limit: 1000 MS
Memory Limit: 32768 K
Total Submit: 162 (133 users)
Total Accepted: 136 (132 users)
Special Judge: No
Description
オブジェクト向けプログラム設計の手法を用いて,直方体の長さ,幅,高さから直方体の体積と表面積を求める.
Input
複数のテストデータ.1行目入力試験データのグループ数t(0
Output
各グループの出力データは2つで、それぞれ直方体の体積と表面積であり、データ間はスペースで区切られている.
Sample Input
67 5 64 6 85 9 41 10 15 4 510 7 7
Sample Output
214 210208 192202 18042 10130 100378 490
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
code:
#include
using namespace std;
class rectangle{
float length;
float width;
float height;
public:
rectangle(){};
rectangle(float l,float w,float h){
    length = l;
    width = w;
    height = h;
}
~rectangle(){};
void setDimension(float l,float w,float h){
length = l;
width = w;
height = h;
}
float getLength(){return length;}
float getWidth(){return width;}
float getHeight(){return height;}
float getVolum(){return length*width*height;}
float getArea(){return 2*(length*width+length*height+width*height);;}
};
int main(){
    int T;
    cin>>T;
    while(T--){
        int a,b,c;
        cin>>a>>b>>c;
        rectangle myrectangle(a,b,c);
        cout<" "<endl;
    }


return 0;
}

 
B.クラスの応用2
Time Limit: 1000 MS
Memory Limit: 32768 K
Total Submit: 166 (132 users)
Total Accepted: 135 (131 users)
Special Judge: No
Description
オブジェクト向けプログラム設計の手法を用いて,三角形の三辺で三角形の周長を求める.
Input
複数のテストデータ.1行目入力試験データのグループ数t(0
Output
各グループの出力データは1つです.入力された3辺が三角形を構成できる場合、出力周長;入力した3辺が三角形を構成できない場合は「error」を出力します.
Sample Input
21 10 15 4 5
Sample Output
error14
 
 
#include
using namespace std;
class triangle{
    int a,b,c;
    public:
    void set(int a, int b, int c){
    this->a = a;
    this->b = b;
    this->c = c;
    }
    bool istri(){
    return a+b>c && a+c>b && b+c>a;
    }
    int getl(){
        return a+b+c;
    }

};
 int main(){
    int a,b,c,N=0;
    triangle T;
    cin>>N;
    while(N--){
        cin >> a >> b >> c;
        T.set(a,b,c);
        if(T.istri()){
        cout < endl;
        }else{
            cout <<"error"<< endl;
         }
    }
}

 
 
C.クラスの応用3
Time Limit: 1000 MS
Memory Limit: 32768 K
Total Submit: 193 (127 users)
Total Accepted: 135 (127 users)
Special Judge: No
Description
オブジェクト向けプログラム設計の手法を用いて問題を解決する.江湖を歩くのは、脳力と武器に頼っている.脳瓜霊光、武器は平凡に負けたり愚かになったりすることは避けられないが、屠龍を握っている無名の世代、脳力と武器は四六の割合で一人の江湖の地位を決定する.Appleの新しい店がオープンした時、街のリングで武海選より昇進した選手がApple Xに勝った.試合前に選手名(長さが10以下の文字列)、脳力値(100以下の整数)、武器名(長さが10以下の文字列)、武器攻撃力(100以下の整数)を登録します.
Input
複数のテストデータ.1行目入力試験データのグループ数t(0
Output
2行毎の選手の入力に対して、試合結果を出力します.前者名win後者名現在者が後者に負けた場合、前者名lost後者名現在者と後者が勝負せず、前者名tie後者名が出力されます.
Sample Input
3Sunwk 100 Jingb 100Niumw 0 Bajs 100Tangsz 100 Chanzhang 0Honghe 80 Huolongqiang 60ZHUba 60 JCdp 60SHAwj 30 FTc 80
Sample Output
Sunwk win NiumwTangsz lost HongheZHUba tie SHAwj
Hint
Honghe 80 Huolongqiang 60:この人の江湖の能力は80*0.4+60*0.6=68です
 
 
#include
using namespace std;
class people{
    string name;
    int wind;
    string gun;
    int power;
    public:
    void set(string name,int wind, string gun, int power){
    this->name = name;
    this->wind = wind;
    this->gun = gun;
    this->power = power;
    }
    int getTolPower(){
        return wind*0.4+power*0.6;
    }
};
int main(){
    int t;
    cin>>t;
    people p1,p2;
    while(t--){
        string name,name2,gun;
        int wind,power;
        cin>>name>>wind>>gun>>power;
        p1.set(name,wind,gun,power);
        cin>>name2>>wind>>gun>>power;
        p2.set(name,wind,gun,power);
        if(p1.getTolPower()==p2.getTolPower()){
            cout<" tie "<< name2<<endl;
        }else if(p1.getTolPower()>p2.getTolPower()){
            cout<" win "<< name2<<endl;
        }else{
                cout<" lost "<< name2<<endl;
        }
    }
}

 
D.クラスの応用4
Time Limit: 1000 MS
Memory Limit: 32768 K
Total Submit: 160 (127 users)
Total Accepted: 128 (127 users)
Special Judge: No
Description
オブジェクト向けプログラム設計の手法を用いて問題を解決する.神魔の争いはずっと続いていた...、知恵兵器の威力を一体に集めた(知恵と兵器の威力の重み比4:6)神と兵器の威力だけによる魔の対決です.新しい時代に入ると、神のリング予選が行われます.現場登録登録は、神の名号(長さ10以下の文字列)、神の知恵値(100以下の整数)、神が兵器を使った名前を記録します(長さが10以下の文字列)および威力値(100以下の整数).魔は魔の名前(長さが10以下の文字列)、魔使用兵器の名前(長さが10以下の文字列)、および威力値(100以下の整数)を記録します.
Input
複数のテストデータ.1行目入力試験データのグループ数t(0
Output
神魔比武の入力は2行ごとに出力されます.神が悪魔を打ち負かす時、輸出することができます:神の名前winの悪魔の名前は神が悪魔に負けた時、輸出することができます:神の名前lostの悪魔の名前は神魔が勝負を分けない時、輸出することができます:神の名前tieの悪魔の名前
Sample Input
3Tangsz 100 Chanzhang 0Honghe Huolongqiang 60Sunwk 100 Jingb 100Niumw Bajs 100Zhubj 20 Jiucdp 80Xiaoy Pud 20
Sample Output
Tangsz lost HongheSunwk tie NiumwZhubj win Xiaoy
Hint
Tangsz 100 Chanzhang 0:この神の戦闘力は100*0.4+0*0.6=40 Honghe Huolongqiang 60:この魔の戦闘力は60
 
 
#include
#include
using namespace std;
class people{
    string name;
    int wind;
    string gun;
    int power;
    public:
    void set(string name,int wind, string gun, int power){
    this->name = name;
    if(wind!=0){
        this->wind = wind;
    }else{
        this->wind = 0;
    }
    this->gun = gun;
    this->power = power;
    }
    int getTolPower(){
        if(this->wind==0){
            return power;
        }
        return wind*0.4+power*0.6;
    }
};
int main(){
    int t;
    cin>>t;
    people p1,p2;
    while(t--){
        string name,name2,gun;
        int wind,power;
        cin>>name>>wind>>gun>>power;
        p1.set(name,wind,gun,power);
        cin>>name2>>gun>>power;
        p2.set(name2,0,gun,power);
        if(p1.getTolPower()==p2.getTolPower()){
            cout<" tie "<< name2<<endl;
        }else if(p1.getTolPower()>p2.getTolPower()){
            cout<" win "<< name2<<endl;
        }else{
                cout<" lost "<< name2<<endl;
        }
    }
}


 
 
 
E.クラスの応用5
Time Limit: 1000 MS
Memory Limit: 32768 K
Total Submit: 168 (120 users)
Total Accepted: 127 (120 users)
Special Judge: No
Description
オブジェクト向け設計手法を用いて問題を解決する.メイン関数main()の内容、入出力データに基づいて、クラスの設計を完了します.平面直角座標系に2点AとBを作成し、その座標をフォーマットで出力します.A、Bの2点座標のx方向とy方向のずれ量を与え、2点の座標を再び出力する.平面直角座標系に線分Lを作成し、線分の両端点の座標および線分長をフォーマットで出力します.平面直角座標系に線分L 1を作成し、線分の両端点のx方向とy方向のずれ量を与えて線分の新しい位置と新しい長さを求め、その線分の両端点の新しい座標と線分の長さをフォーマットで出力する.主関数は、int main(){int n,x 1,x 2,y 1,y 2;Point A,B(10,10);cout>x 1>>y 1;A.setP(x 1,y 1);B.setP(x 1,y 1);cout>x 1>>y 1>>>x 2>>y 2;Line L(x 1,y 1,x 2,y 2);L.getP();printf("%.2lf",L.dis();Line L 1(0,0,1,1)1,1,1,1,1);     cin>>x1>>y1>>x2>>y2;     L1.setL(x1,y1,x2,y2);     L1.getP();printf("%.2lf",L1.dis());     return 0;
Input
最初の行には、A、Bの2点座標のx方向とy方向のオフセット量が入力され、データはスペースで区切られます.2行目には、線分Lの両端点の座標x 1,y 1,x 2,y 2が入力され、データはスペースで区切られている.3行目には、線分L 1の両端点のx方向とy方向のずれ量が入力され、データはスペースで区切られている.
Output
第1、2行目は、点Aと点Bの座標(フォーマット)を出力する.第3、4行目は、平行移動後の点Aと点Bの座標(フォーマット)を出力する.第5行目は、線分Lの両端点の座標および長さ(フォーマット)を出力する.第6行目は、線分L 1の平行移動後の両端点の座標および長さ(フォーマット)を出力する.
Sample Input
5 50 0 10 101 1 5 5
Sample Output
PointA:[0,0]PointB:[10,10]PointA:[5,5]PointB:[15,15](0,0)--(10,10):14.14(1,1)--(6,6):7.07
 
 
 
#include
#include
#include
using namespace std;
class Point{
    int X,Y;
    public:
        Point(){
            X=0;
            Y=0; 
        }
        Point(int x,int y):X(x),Y(y){}
        int getX(){
            return X;
        }
        int getY(){
            return Y;
        }
        void setP(int x,int y){
            this->X+=x;
            this->Y+=y;
        }
};
class Line{
    int X1,Y1,X2,Y2;
    public:
        Line(){
            X2=1;
            Y2=1;
        }
        Line(int x1,int y1,int x2,int y2):X1(x1),Y1(y1),X2(x2),Y2(y2){}
        void setL(int x1,int y1,int x2,int y2){
                this->X1=x1;
            this->Y1=y1;
                this->X2+=x2;
            this->Y2+=y2;
        }
        int getP(){
            cout<<"("<","<")"<<"--"<<"("<","<")"<<endl;
        }
        float dis(){
            return sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1));
        }
};
int main()
 {
     int n,x1,x2,y1,y2;
     Point A,B(10,10);
     cout<<"PointA:["<","<"]
"; cout<<"PointB:["<","<"]
"; cin>>x1>>y1; A.setP(x1,y1); B.setP(x1,y1); cout<<"PointA:["<","<"]
"; cout<<"PointB:["<","<"]
"; cin>>x1>>y1>>x2>>y2; Line L(x1,y1,x2,y2); L.getP();printf("%.2lf
",L.dis()); Line L1(0,0,1,1); cin>>x1>>y1>>x2>>y2; L1.setL(x1,y1,x2,y2); L1.getP();printf("%.2lf
",L1.dis()); return 0; }