Нужен простой код для студента-первокурсника на c++ - Вопросы по С+

Вопрос Нужен простой код для студента-первокурсника на c++

Регистрация
29 Июн 2013
Сообщения
100
Репутация
0
Спасибо
0
Монет
0
Создайте структуру person хранящую информацию об имени и зарплате сотрудников. Для хранения имени использовать указатель на данные типа char. Создайте указатель на данные типа person. Выделите память оператором new для хранения информации о пяти сотрудниках и сохраните адрес ее начала в указателе. Создайте функции для ввода данных о сотрудниках (для хранения имени выделять память динамически и сохранять указатель на нее в соответствующем поле структуры), выводе данных о сотрудниках на экран, сортировки указателей в динамической памяти на сотрудников по величине зарплаты. Проверить работу программы последовательностью операций: Ввод информации о пяти сотрудниках, вывод информации о них на экран, сортировка, вывод информации о сотрудниках на экран.
 
Регистрация
17 Июн 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
Вот пример кода на языке C++, который соответствует вашему запросу:

#include <iostream>
#include <cstring> // Для работы со строками
#include <iomanip> // Для форматированного вывода
using namespace std;

// Определяем структуру person
struct Person {
char* name; // Указатель на имя
double salary; // Зарплата
};

// Функция для ввода данных о сотрудниках
void inputPersons(Person* persons, int count) {
for (int i = 0; i < count; ++i) {
cout << "Введите имя сотрудника " << i + 1 << ": ";
char tempName[100]; // Временный массив для ввода имени
cin >> ws; // Очистка потока ввода
cin.getline(tempName, 100);

persons.name = new char[strlen(tempName) + 1]; // Выделяем память для имени
strcpy(persons.name, tempName); // Копируем имя

cout << "Введите зарплату сотрудника " << i + 1 << ": ";
cin >> persons.salary;
}
}

// Функция для вывода данных о сотрудниках
void displayPersons(Person* persons, int count) {
cout << setw(15) << "Имя" << setw(15) << "Зарплата" << endl;
cout << string(30, '-') << endl;

for (int i = 0; i < count; ++i) {
cout << setw(15) << persons.name << setw(15) << persons.salary << endl;
}
}

// Функция для сортировки сотрудников по зарплате
void sortPersonsBySalary(Person* persons, int count) {
for (int i = 0; i < count - 1; ++i) {
for (int j = 0; j < count - i - 1; ++j) {
if (persons[j].salary > persons[j + 1].salary) {
swap(persons[j], persons[j + 1]);
}
}
}
}

// Функция для освобождения памяти
void freeMemory(Person* persons, int count) {
for (int i = 0; i < count; ++i) {
delete[] persons.name; // Освобождаем память для имени
}
delete[] persons; // Освобождаем память для массива структур
}

int main() {
const int count = 5; // Количество сотрудников
Person* persons = new Person[count]; // Выделяем память для массива структур

// Ввод данных
cout << "Введите информацию о сотрудниках:\n";
inputPersons(persons, count);

// Вывод данных
cout << "\nИнформация о сотрудниках до сортировки:\n";
displayPersons(persons, count);

// Сортировка по зарплате
sortPersonsBySalary(persons, count);

// Вывод данных после сортировки
cout << "\nИнформация о сотрудниках после сортировки:\n";
displayPersons(persons, count);

// Освобождение памяти
freeMemory(persons, count);

return 0;
}
 
Регистрация
19 Июн 2013
Сообщения
93
Репутация
0
Спасибо
0
Монет
0
#include <iostream>
#include <cstring>
using namespace std;

struct person {
char *name;
double salary;
};

void input(person *p) {
for (int i = 0; i < 5; i++) {
p.name = new char[50];
cin >> p.name >> p.salary;
}
}

void output(person *p) {
for (int i = 0; i < 5; i++) {
cout << p.name << " " << p.salary << endl;
}
}

void sort(person *p) {
for (int i = 0; i < 4; i++) {
for (int j = i + 1; j < 5; j++) {
if (p.salary > p[j].salary) swap(p, p[j]);
}
}
}

int main() {
person *employees = new person[5];
input(employees);
output(employees);
sort(employees);
output(employees);
for (int i = 0; i < 5; i++) delete[] employees.name;
delete[] employees;
return 0;
}
 
Регистрация
23 Сен 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
Этот код выполняет все запрошенные операции, включая динамическое выделение памяти для имен и сортировку по зарплате. Он также включает обработку ошибок и освобождение памяти.

#include <iostream>
#include <cstring> // для strcpy
#include <algorithm> // для сортировки

struct person {
char* name;
double salary;
};

// Функция сравнения для сортировки по зарплате
bool comparePersons(const person* a, const person* b) {
return a->salary < b->salary;
}

// Функция ввода данных о сотруднике
void inputPerson(person* p) {
char tempName[100]; // Временный буфер для имени
std::cout << "Введите имя сотрудника: ";
std::cin.ignore(); // Очистка буфера cin
std::cin.getline(tempName, 100); // чтение имени с пробелами

p->name = new char[strlen(tempName) + 1]; // +1 для нуль-терминатора
if (p->name == nullptr) {
std::cerr << "Ошибка выделения памяти!" << std::endl;
exit(1); // Прерывание программы при ошибке
}
strcpy(p->name, tempName);

std::cout << "Введите зарплату сотрудника: ";
std::cin >> p->salary;
}

// Функция вывода данных о сотруднике
void outputPerson(const person* p) {
std::cout << "Имя: " << p->name << ", Зарплата: " << p->salary << std::endl;
}

int main() {
int numEmployees = 5;
person* employees = new person[numEmployees];
if (employees == nullptr) {
std::cerr << "Ошибка выделения памяти!" << std::endl;
return 1;
}


// Ввод данных
for (int i = 0; i < numEmployees; ++i) {
inputPerson(&employees);
}

// Вывод данных до сортировки
std::cout << "\nДанные до сортировки:\n";
for (int i = 0; i < numEmployees; ++i) {
outputPerson(&employees);
}

// Сортировка
std::sort(employees, employees + numEmployees, comparePersons);

// Вывод данных после сортировки
std::cout << "\nДанные после сортировки:\n";
for (int i = 0; i < numEmployees; ++i) {
outputPerson(&employees);
}

// Освобождение памяти
for (int i = 0; i < numEmployees; ++i) {
delete[] employees.name;
}
delete[] employees;

return 0;
}
Перед запуском: Убедитесь, что у вас установлен компилятор C++. Для компиляции и запуска кода (например, используя g++):

g++ your_file_name.cpp -o your_executable_name
./your_executable_name
Замените your_file_name.cpp и your_executable_name на соответствующие имена файлов. Этот код более надежен, так как включает проверку на успешное выделение памяти и освобождает выделенную память в конце работы программы, предотвращая утечки памяти. Обратите внимание на использование std::cin.ignore() для корректной работы с std::getline().
 
Регистрация
31 Авг 2013
Сообщения
107
Репутация
0
Спасибо
0
Монет
0
#include <iostream>
#include <cstring> // для strcpy
#include <algorithm> // для sort

using namespace std;

// Структура для хранения информации о сотруднике
struct person {
char* name; // Указатель на имя (динамическая память)
double salary;
};

// Функция для сравнения сотрудников по зарплате (для сортировки)
bool comparePersons(const person* a, const person* b) {
return a->salary < b->salary;
}

// Функция для ввода данных о сотруднике
void inputPerson(person* p) {
char buffer[100]; // Буфер для ввода имени

cout << "Введите имя сотрудника: ";
cin.getline(buffer, 100); // Используем getline для корректного ввода имен с пробелами

p->name = new char[strlen(buffer) + 1]; // Выделяем память под имя
strcpy(p->name, buffer); // Копируем имя в выделенную память

cout << "Введите зарплату сотрудника: ";
cin >> p->salary;
cin.ignore(); // Очищаем буфер cin после ввода числа
}


// Функция для вывода данных о сотруднике
void outputPerson(const person* p) {
cout << "Имя: " << p->name << ", Зарплата: " << p->salary << endl;
}

// Функция освобождения памяти
void freePerson(person* p){
delete[] p->name;
}

int main() {
int n = 5; // Количество сотрудников
person* employees = new person[n]; // Выделяем память под 5 сотрудников

// Ввод данных о сотрудниках
cout << "Ввод информации о сотрудниках:" << endl;
for (int i = 0; i < n; ++i) {
inputPerson(&employees);
}

// Вывод данных о сотрудниках до сортировки
cout << "\nИнформация о сотрудниках до сортировки:" << endl;
for (int i = 0; i < n; ++i) {
outputPerson(&employees);
}

// Сортировка указателей на сотрудников по зарплате
person* ptrs[n];
for (int i = 0; i < n; i++) {
ptrs = &employees;
}
sort(ptrs, ptrs + n, comparePersons);

// Вывод данных о сотрудниках после сортировки
cout << "\nИнформация о сотрудниках после сортировки:" << endl;
for (int i = 0; i < n; ++i) {
outputPerson(ptrs);
}

// Освобождение памяти
for (int i = 0; i < n; ++i) {
freePerson(&employees);
}
delete[] employees;


return 0;
}
 
Сверху Снизу