Skip to content
The Chat Archive
gpt-4-0314· OpenAI WildChat-4.8M (AI2)

Разработать программу, в которой будет организовано меню, выбор функций меню должно быть…

  1. User

    Разработать программу, в которой будет организовано меню, выбор функций меню должно быть организовано по функциональной клавише. Вся информация должна храниться в массиве структур, с возможностью их записи в файл. Организовать сортировку данных различными методами (быстрая, Шелла, Пузырьковая), вывод результатов сортировки должен быть в табличной форме.

  2. Assistant
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <fstream>
    
    using namespace std;
    
    struct Data {
        int id;
        string name;
        float value;
    
        void display() const {
            printf("%-5d %-20s %.2f\n", id, name.c_str(), value);
        }
    };
    
    // Сравнение двух структур по умолчанию
    bool compareDefault(const Data &a, const Data &b) {
        return a.id < b.id;
    }
    
    // Сортировка QuickSort
    void quickSort(vector<Data> &data, int low, int high, bool (*compare)(const Data &, const Data &) = compareDefault) {
        if (low < high) {
            int i = low;
            int j = high;
            Data pivot = data[(i + j) / 2];
    
            do {
                while (compare(data[i], pivot)) i++;
                while (compare(pivot, data[j])) j--;
    
                if (i <= j) {
                    swap(data[i], data[j]);
                    i++;
                    j--;
                }
            } while (i <= j);
    
            quickSort(data, low, j, compare);
            quickSort(data, i, high, compare);
        }
    }
    
    // Сортировка ShellSort
    void shellSort(vector<Data> &data, bool (*compare)(const Data &, const Data &) = compareDefault) {
        int n = data.size();
        for (int gap = n / 2; gap > 0; gap /= 2) {
            for (int i = gap; i < n; i++) {
                Data temp = data[i];
                int j;
                for (j = i; j >= gap && compare(temp, data[j - gap]); j -= gap) {
                    data[j] = data[j - gap];
                }
                data[j] = temp;
            }
        }
    }
    
    // Сортировка BubbleSort
    void bubbleSort(vector<Data> &data, bool (*compare)(const Data &, const Data &) = compareDefault) {
        int n = data.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (compare(data[j + 1], data[j])) {
                    swap(data[j], data[j + 1]);
                }
            }
        }
    }
    
    void saveToFile(const vector<Data> &data, const string &filename) {
        ofstream file(filename);
        if (file.is_open()) {
            for (const Data &item : data) {
                file << item.id << " " << item.name << " " << item.value << "\n";
            }
            file.close();
            cout << "Data saved to " << filename << endl;
        } else {
            cerr << "Unable to open file " << filename << endl;
        }
    }
    
    void displayData(const vector<Data> &data) {
        printf("%-5s %-20s %s\n", "ID", "NAME", "VALUE");
        for (const Data &item : data) {
            item.display();
        }
    }
    
    int main() {
        vector<Data> data = {
            {1, "Item 1", 3.4},
            {4, "Item 4", 0.5},
            {2, "Item 2", 2.1},
            {5, "Item 5", 5.5},
            {3, "Item 3", 1.1}
        };
    
        char choice;
    
        do {
            cout << "Menu:\n";
            cout << "1. QuickSort\n";
            cout << "2. ShellSort\n";
            cout << "3. Bubble Sort\n";
            cout << "4. Save to file\n";
            cout << "5. Display data\n";
            cout << "6. Exit\n";
            cout << "Choose an option: ";
            cin >> choice;
    
            switch (choice) {
                case '1':
                    quickSort(data, 0, data.size() - 1);
                    break;
                case '2':
                    shellSort(data);
                    break;
                case '3':
                    bubbleSort(data);
                    break;
                case '4':
                    saveToFile(data, "output.txt");
                    break;
                case '5':
                    displayData(data);
                    break;
                case '6':
                    break;
                default:
                    cout << "Invalid option. Please try again.\n";
                    break;
            }
        } while (choice != '6');
    
        return 0;
    }
    

    Данная программа создает массив структур типа Data с возможностью сортировки (быстрой сортировки, сортировка Шелла, пузырьковая сортировка), вывода данных и сохранения в файл. Меню выбора функций организовано с использованием функциональных клавиш.