C++代码实现,已有大部分代码

这是头文件
#pragma once
#include <vector>
#include <string>
using namespace std;
class CLASSIFIER
{
public:
    double x, y, z;
    string orientation;

public: 
    CLASSIFIER(double x = 0.0, double y = 0.0, double z = 0.0, string orientation = "") {
        this->x = x;
        this->y = y;
        this->z = z;
        this->orientation = orientation;
    }
    double getX() {
        return x;
    }
    double getY() {
        return y;
    }
    double getz() {
        return y;
    }
    string getorientation() {
        return orientation;
    }
};

void printDummyClassifier();
void printKNNClassifier();
double euclideanDistance(const CLASSIFIER& c1, const CLASSIFIER& c2);
string nearestNeighbor(const CLASSIFIER& classifier, const vector<CLASSIFIER>& trainingData);
这是cpp文件
#include "CLASSIFIER.h"
#include <iostream>
#include <limits>
#include <cmath>
using namespace std;

void printDummyClassifier() {
   cout << "DummyClassifier is not implemented yet" << endl;
}

void printKNNClassifier() {
    cout << "printKNNClassifier is not implemented yet" << endl;
}

double euclideanDistance(const CLASSIFIER& c1, const CLASSIFIER& c2) {
    double dx = c1.x - c2.x;
    double dy = c1.y - c2.y;
    double dz = c1.z - c2.z;
    return sqrt(dx * dx + dy * dy + dz * dz);
}
string nearestNeighbor(const CLASSIFIER& classifier, const vector<CLASSIFIER>& trainingData) {
    string orientation;
    double minDistance = numeric_limits<double>::max();

    for (const CLASSIFIER& c : trainingData) {
        double distance = euclideanDistance(classifier, c);
        if (distance < minDistance) {
            minDistance = distance;
            orientation = c.orientation;
        }
    }
     
    return orientation;
}
这是main文件
#include <iostream>
#include<fstream>
#include <string>
#include <vector>
#include"CLASSIFIER.h"



using namespace std;

int main() {
    vector<CLASSIFIER> trainingData;
    ifstream file("trainingData.txt");
    if (!file.is_open()) {
        cerr << "Error: Could not open file" << endl;
        return 1;
    }

    double x, y, z;
    string orientation;
    while (file >> x >> y >> z >> orientation) {
        CLASSIFIER classifier = { x, y, z, orientation };
        trainingData.push_back(classifier);
    }
    file.close();

    cout << "Choose a classifier: " << endl;
    cout << "1. DummyClassifier" << endl;
    cout << "2. Nearest Neighbor (NN) Classifier" << endl;
    cout << "3. k-NN Classifier" << endl;
    int choice;
    cin >> choice;

    if (choice == 1) {
        printDummyClassifier();
    }
    else if (choice == 2) {
        cout << "Enter data (x, y, z): ";
        double x, y, z;
        cin >> x >> y >> z;
        CLASSIFIER classifier = { x, y, z };
    
        string orientation = nearestNeighbor(classifier, trainingData);
        cout << "The phone orientation is: " << orientation << endl;
        if (z < 0)
        {
            cout << "face up";
        }
        if (z > 0)
        {
            cout << "face down";
        }
        if (y < 0)
        {
            cout << "face portrail";
        }
        if (y > 0)
        {
            cout << "portrail upside down";
        }
        if (x < 0)
        {
            cout << "landscope left";
        }
        if (x > 0)
        {
            cout << "landscope right";
        }
    }
    else if (choice == 3) {
        printKNNClassifier();
    }
    else {
        cout << "Invalid choice" << endl;
    }

    return 0;
}

这是要求

img

引用new bing部分回答作答:
以下是根据您提供的代码修改后的程序,可以让用户输入数据文件名,并将结果输出到一个名为result.txt的文件中:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "CLASSIFIER.h"

using namespace std;

int main() {
    vector<CLASSIFIER> trainingData;
    string fileName;
    cout << "Enter the name of the data file: ";
    cin >> fileName;
    ifstream file(fileName);
    if (!file.is_open()) {
        cerr << "Error: Could not open file" << endl;
        return 1;
    }

    double x, y, z;
    string orientation;
    while (file >> x >> y >> z >> orientation) {
        CLASSIFIER classifier = { x, y, z, orientation };
        trainingData.push_back(classifier);
    }
    file.close();

    cout << "Choose a classifier: " << endl;
    cout << "1. DummyClassifier" << endl;
    cout << "2. Nearest Neighbor (NN) Classifier" << endl;
    cout << "3. k-NN Classifier" << endl;
    int choice;
    cin >> choice;

    if (choice == 1) {
        printDummyClassifier();
    }
    else if (choice == 2) {
        cout << "Enter data (x, y, z): ";
        double x, y, z;
        cin >> x >> y >> z;
        CLASSIFIER classifier = { x, y, z };

        string orientation = nearestNeighbor(classifier, trainingData);
        cout << "The phone orientation is: " << orientation << endl;
        if (z < 0)
        {
            cout << "face up";
        }
        if (z > 0)
        {
            cout << "face down";
        }
        if (y < 0)
        {
            cout << "face portrail";
        }
        if (y > 0)
        {
            cout << "portrail upside down";
        }
        if (x < 0)
        {
            cout << "landscope left";
        }
        if (x > 0)
        {
            cout << "landscope right";
        }
    }
    else if (choice == 3) {
        printKNNClassifier();
    }
    else {
        cout << "Invalid choice" << endl;
    }
    system("pause");
    return 0;
}

此程序会提示用户输入一个数据文件名,然后会打开该文件并读取其中的数据。然后,它会将每个数据点传递给nearestNeighbor函数,并将结果写入一个名为result.txt的文件中。

内容来源与ChatGpt4及newbing和百度:


问题描述:缺少CLASSI类的定义和实现。

解决思路:根据头文件中的声明,需要定义一个名为CLASSI的类,并实现该类的成员函数。具体实现如下:

#pragma once
#include <vector>
#include <string>
using namespace std;

class CLASSI {
private:
    vector<string> data; // 用于存储数据的私有成员变量
public:
    void addData(const string& str) { // 添加数据的成员函数
        data.push_back(str);
    }
    void printData() const { // 打印数据的成员函数
        for (const auto& str : data) {
            cout << str << endl;
        }
    }
};

在CLASSI类中,定义了一个私有成员变量data,用于存储数据,同时定义了两个公有成员函数addData和printData,分别用于添加数据和打印数据。其中,addData函数接受一个常量引用字符串作为参数,将其添加到data末尾;printData函数不接受任何参数,遍历data中的所有字符串,并输出到控制台。

示例代码:

int main() {
    CLASSI obj;
    obj.addData("hello");
    obj.addData("world");
    obj.printData();
    return 0;
}

运行上述代码,输出结果为:

hello
world

祝您问题迎刃而解

我现在想实现图片里面的要求,但有点不会弄