Регистрация не е нужна, освен при създаване на тема в "Задача на седмицата".

Структури

Структури

Мнениеот Гост » 17 Яну 2025, 18:49

Да се напише на езика C++ приложение, включващо следните части:
1. Дефиниция на типа на структури, които описват килими с правоъгълна форма чрез
три полета съответно за название на модела, за дължина и за широчина. За такава
структури да се дефинират подходящи функции за извеждане на екрана и за въвеждане
от клавиатурата с контрол, че:
— числовите полета ще бъдат със стойност от 50 сантиметра до 11 метра;
— названието на модела започва с голяма буква от кирилица, завършва с малка
българска буква, а между първия и последния знакове може да има само малки
български букви и интервали.
2. Дефиниция на функция за въвеждане на масив от структури от горния вид с
описания в точка 1 контрол.
3. Дефиниция на функция за намиране на средното аритметично на диагоналите на
килимите, описани от елементите на масив от структури от горния вид. Масивът да се
получава от функцията чрез параметри.
4. Дефиниция на функция за извеждане на екрана на данните за килимите, описани
от елементите на масив от структури от горния вид, в които названието на модела
съдържа даден подниз поне на две различни места. Масивът и поднизът да се получават
от функцията чрез параметри.
5. Дефиниция на функция за извеждане на екрана на данните за килимите, описани
от елементите на масив от структури от горния вид, в които названието на модела
съдържа даден подниз и площта на килима (в геометричен смисъл) е максимална, в
сравнение с площите на всички килими, описани от елементи на масива. Масивът и
поднизът да се получават от функцията чрез параметри.
6. Функция main, в която:
— има декларация и въвеждане чрез функцията от точка 2 на някакъв масив от
структури горния вид структури от горния вид;
— извежда се резултатът, връщан от функцията от точка 3, извикана за въведения
масив;
— въвежда се подниз и се извиква функцията от точки 4 за въведените масив и
подниз;
— извиква се функцията от точка 5 за въведените масив и подниз.
Гост
 

Re: Структури

Мнениеот Гост » 17 Яну 2025, 19:14

Код: Избери целия код
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <regex>

struct Carpet {
    std::string model;
    double length;
    double width;
};

bool isValidModel(const std::string& model) {
    std::regex modelRegex("^[\u0410-\u042f][\u0430-\u044f ]*[\u0430-\u044f]$");
    return std::regex_match(model, modelRegex);
}

bool isValidDimensions(double value) {
    return value >= 0.5 && value <= 11.0;
}

void inputCarpet(Carpet& carpet) {
    do {
        std::cout << "\nEnter model name: ";
        std::getline(std::cin, carpet.model);
        if (!isValidModel(carpet.model)) {
            std::cout << "Invalid model name. It must start with a capital Cyrillic letter, end with a small Cyrillic letter, and contain only small Cyrillic letters and spaces in between.\n";
        }
    } while (!isValidModel(carpet.model));

    do {
        std::cout << "Enter length (in meters): ";
        std::cin >> carpet.length;
        if (!isValidDimensions(carpet.length)) {
            std::cout << "Invalid length. It must be between 0.5 and 11.0 meters.\n";
        }
    } while (!isValidDimensions(carpet.length));

    do {
        std::cout << "Enter width (in meters): ";
        std::cin >> carpet.width;
        if (!isValidDimensions(carpet.width)) {
            std::cout << "Invalid width. It must be between 0.5 and 11.0 meters.\n";
        }
    } while (!isValidDimensions(carpet.width));
    std::cin.ignore(); // Clear newline character from input buffer
}

void displayCarpet(const Carpet& carpet) {
    std::cout << "Model: " << carpet.model
              << ", Length: " << carpet.length << " m"
              << ", Width: " << carpet.width << " m\n";
}

void inputCarpets(std::vector<Carpet>& carpets) {
    int n;
    std::cout << "Enter the number of carpets: ";
    std::cin >> n;
    std::cin.ignore(); // Clear newline character from input buffer

    carpets.resize(n);
    for (int i = 0; i < n; ++i) {
        std::cout << "\nCarpet " << i + 1 << ":";
        inputCarpet(carpets[i]);
    }
}

double calculateAverageDiagonal(const std::vector<Carpet>& carpets) {
    double totalDiagonal = 0;
    for (const auto& carpet : carpets) {
        totalDiagonal += std::sqrt(carpet.length * carpet.length + carpet.width * carpet.width);
    }
    return carpets.empty() ? 0 : totalDiagonal / carpets.size();
}

void displayCarpetsWithSubstring(const std::vector<Carpet>& carpets, const std::string& substring) {
    for (const auto& carpet : carpets) {
        size_t firstOccurrence = carpet.model.find(substring);
        size_t secondOccurrence = carpet.model.find(substring, firstOccurrence + 1);
        if (firstOccurrence != std::string::npos && secondOccurrence != std::string::npos) {
            displayCarpet(carpet);
        }
    }
}

void displayCarpetWithMaxAreaAndSubstring(const std::vector<Carpet>& carpets, const std::string& substring) {
    const Carpet* maxCarpet = nullptr;
    double maxArea = 0;

    for (const auto& carpet : carpets) {
        if (carpet.model.find(substring) != std::string::npos) {
            double area = carpet.length * carpet.width;
            if (area > maxArea) {
                maxArea = area;
                maxCarpet = &carpet;
            }
        }
    }

    if (maxCarpet) {
        displayCarpet(*maxCarpet);
    } else {
        std::cout << "No carpets found with the given substring.\n";
    }
}

int main() {
    std::vector<Carpet> carpets;
    inputCarpets(carpets);

    double averageDiagonal = calculateAverageDiagonal(carpets);
    std::cout << "\nAverage diagonal of carpets: " << averageDiagonal << " m\n";

    std::string substring;
    std::cout << "\nEnter a substring to search for: ";
    std::getline(std::cin, substring);

    std::cout << "\nCarpets with the substring appearing at least twice in the model name:\n";
    displayCarpetsWithSubstring(carpets, substring);

    std::cout << "\nCarpet with the substring and maximum area:\n";
    displayCarpetWithMaxAreaAndSubstring(carpets, substring);

    return 0;
}
Гост
 


Назад към C, C++



Кой е на линия

Регистрирани потребители: Google [Bot]

Форум за математика(архив)