
Решить в с++ Известны данные о росте 15-ти юношей класса, упорядоченные по убыванию. Нет ни одной
пары учеников, имеющих одинаковый рост. В начале учебного года в класс поступил новый ученик (известно, что его рост не совпадает с ростом ни одного из учеников класса, превышает рост самого низкого ученика и меньше роста самого высокого). Определить фамилию ученика, рост которого меньше всего отличается от роста "новенького". Ввод данных лучше делать с файла.

Ответы на вопрос

Файл с фамилиями и ростом прикреплён.
#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;
class People {
public:
string surname;
int height;
};
signed main() {
ifstream f;
People ppl[15];
int j = 0;
People newPpl;
try {
cout << "Input surname and height new people:\n";
cin >> newPpl.surname >> newPpl.height;
try {
f.open("guys.txt");
while (!f.eof()) {
f >> ppl[j].surname >> ppl[j].height;
j++;
}
}
catch (...) {
cout << "Error with file!";
}
int _minR = abs(newPpl.height - ppl[0].height);
string buff = ppl[0].surname;
for (int i = 0; i < 15; i++) {
if (abs(newPpl.height - ppl[i].height) < _minR) {
_minR = abs(newPpl.height - ppl[i].height);
buff = ppl[i].surname;
}
}
cout << endl << buff;
}
catch (...) {
cout << "Error in main programm!";
}
return 0;
}





Для решения данной задачи вам потребуется сначала считать данные из файла и затем выполнить несколько шагов для поиска ученика, чей рост меньше всего отличается от роста нового ученика. Вот C++ код, который решает эту задачу:
cpp#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
struct Student {
std::string name;
int height;
};
int main() {
std::ifstream inputFile("student_data.txt");
if (!inputFile.is_open()) {
std::cerr << "Ошибка открытия файла." << std::endl;
return 1;
}
// Чтение данных о 15 учениках из файла
std::vector<Student> students(15);
for (int i = 0; i < 15; i++) {
inputFile >> students[i].name >> students[i].height;
}
// Чтение данных о новом ученике
Student newStudent;
inputFile >> newStudent.name >> newStudent.height;
inputFile.close();
// Найдем ученика, рост которого меньше всего отличается от роста нового ученика
int minDifference = std::abs(students[0].height - newStudent.height);
std::string closestStudentName = students[0].name;
for (const Student& student : students) {
int difference = std::abs(student.height - newStudent.height);
if (difference < minDifference) {
minDifference = difference;
closestStudentName = student.name;
}
}
std::cout << "Фамилия ученика, рост которого меньше всего отличается от новенького: " << closestStudentName << std::endl;
return 0;
}
В этом коде предполагается, что данные о студентах находятся в файле "student_data.txt", где каждая строка содержит имя студента и его рост, разделенные пробелом. Данные нового ученика также находятся в этом файле после данных о 15 учениках. Код сначала считывает данные из файла, затем находит ученика с наименьшей разницей в росте относительно нового ученика и выводит его фамилию.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili