質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • C++

    4431questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

患者ファイル

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 445

reotantan

score 252

header fileは省略します。
このファイルでBMIが最も高い人の名前とその値を出力し、
BMI順に並べてほかのファイルに出力するという課題があります。
Compareなるものをつくってやろうとしましたが、結局誰が一番高かったのかというデータを保存しないといけません。
どういう風に名前を取り出したらいいでしょうか、また
BMI順に並べる方法も教えていただきたいです。



コード
/*
    Read patient data file (patient.dat) into an array of class objects. Calculate BMI (body mass index) of each patient and print on the screen.

    Check out try yourself part at the end of this code !!!
*/

#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>
#include <fstream>
#include"Patient.h"
#include<math.h>
using namespace std;


int main(){

    int num_patients = 4;
    Patient patients[num_patients];
    int bmi[10];
    int max=bmi[0];
    int patient_counter = 0;
    // Read file to objet
    string row, buffer;
    ifstream my_file ("patient.dat");
    if (my_file.is_open())
    {
        while ( getline (my_file,row) )
        {
            stringstream ss(row); // insert row into a stream
            ss >> buffer;
            patients[patient_counter].set_name(buffer);
            ss >> buffer;
            patients[patient_counter].set_height(buffer);
            ss >> buffer;
            patients[patient_counter].set_weight(buffer);
            patient_counter++;
        }
        my_file.close();
    }
    else cout << "Unable to open file";

    // print BMIs of people
    for(int i=0;i<num_patients;i++){
        cout << patients[i].get_name() << "  " << patients[i].bmi() << endl;
    }
//    
//    cout<<"the highest bmi "<<max<<endl;
//    cout<<The heaviest person is <<
    // Try yourself:
    // 0- Separate class interface, implementation, and driver program into files
    // 1- Find the person with max. BMI
    // 2- Sort people according to their BMIs and write to another file
    // 3- Use try, throw, catch for file I/O exceptions

}











コード/*
 * Patient.cpp
 *
 *  Created on: 2015/11/10
 *      Author: 礼央
 */


#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>
#include <fstream>
#include"Patient.h"
using namespace std;
void Patient::set_name(string name){
            this->name = name;
        }

        string Patient::get_name() const{
            return name;
        }

        void Patient::set_height(string height){
            this->height = atof(height.c_str());
        }

        void Patient::set_weight(string weight){
            this->weight = atof(weight.c_str());
        }

        double Patient::bmi(){
            return weight / (height*height);
        }
        int Patient::Compare(int a,int b,int c,int d){
        int max=a;
        if(b>a) max=b;
        if(c>b) max=c;
        if(d>c) max=d;
        }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

こんにちは。

どういう風に名前を取り出したらいいでしょうか、

名前の取出し方はPatientクラスの定義をよく見て下さい。既に関数が用意されているようですよ。

BMI順に並べる方法も教えていただきたいです。 
 
C++なら、この場合は標準ライブラリのstd::sort()を使うことができます。

ただ、使い方が結構難しいです。
ここをよく読んでみて下さい。
(私も良くお世話になるサイトです。丁寧なので分かりやすいです。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

わたしはDB屋なんで、テーブルからデータを読み込む時にSELECT文にORDER BY句を付けてsortしちゃいますが、
C++ sort
でググるといっぱい見つかりますので参考にされては?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • C++

    4431questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。