Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/41: Рейтинг темы: голосов - 41, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 38

Реализовать сортировку массива структур типа "Сотрудник" по убыванию стажа

24.12.2016, 22:25. Показов 8445. Ответов 37

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!

Задача: Информация о сотрудниках предприятия содержит ФИО, номер отдела, должность, дату начала работы. Вывести список сотрудников заданного отдела в порядке убывания стажа.
Как сделать, чтобы выводились ИМЕНА по убыванию стажа (возрастанию даты)????
Поиск нужного результата не дал.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <cstdlib>
#include <string.h>
 
using namespace std;
struct worker
{      char surname[20];
       char name[15];
       char patronym[20];
       int department;
       char post[20];
       struct DATE
       {int day;
       int month;
        int year;
        }D;
 
   system("chcp 1251");
     cout<<"Фамилия: \n";
     cin>>(s->surname);
     cout<<"Имя: \n";
     cin>>(s->name);
     cout<<"Отчество: \n";
     cin>>(s->patronym);
     cout<<"Номер отдела: \n";
     cin>>(s->department);
     cout<<"Занимаемая должность:\n";
     cin>>(s->post);
     cout<<"День: \n";
     cin>>(s->D.day);
     cout<<"Месяц: \n";
     cin>>(s->D.month);
     cout<<"Год: \n";
     cin>>(s->D.year);
};
А что дальше?

Добавлено через 2 минуты
Был похожий код, но он не работал.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2016, 22:25
Ответы с готовыми решениями:

Реализовать сортировку и поиск данных в массиве структур типа School
Описать структуру с именем SCHOOL, что содержит следующие поля: NAME - фамилия и имя ученика, GROUP - номер класса, SUBJECT -...

Реализовать сортировку и поиск данных в массиве структур типа School
Описать структуру с именем SCHOOL, что содержит следующие поля: NAME - фамилия и имя ученика, GROUP - номер класса, SUBJECT -...

Реализовать сортировку массива структур
В общем, есть массив структур(список студентов, их группа и оценки) и нужно реализовать сортировку этого массива по номеру группы....

37
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
11.01.2017, 18:03
Студворк — интернет-сервис помощи студентам
подсказка
= и == в языке программирования C++ - разные операции.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
12.01.2017, 07:04
markusha, ну как, удалось Вам раскрыть секрет роботов-убийц?

That's why.

Специально для новичков у нас в разделе имеются прикреплённые темы. В одной из них как раз обсуждается заданный Вами вопрос.


0
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 38
14.01.2017, 22:58  [ТС]
Я подозревал, что суть именно в разницы операция "==" и "=". Но не понимал, в чём существенная разница.

Добавлено через 1 час 17 минут
Признаться, не до конца понял.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
14.01.2017, 23:57
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

markusha, оператор = - это оператор присваивания (assignment operator). Он используется для присваивания значения переменной:
C++
1
2
3
4
int scale = 7;          // присвоить целочисленной переменной значение 7
double radius = 2.5;    // присвоить переменной с плавающей точкой значение 2.5
char ch = 'a';          // присвоить символьной переменной значение 'a'
bool flag = false;      // присвоить логической переменной значение false
Оператор == - это оператор сравнения (comparison operator). Они бывают следующие:
< - меньше
> - больше
<= - меньше или равно
>= - больше или равно
== - равно
!= - не равно

Таким образом, если мы хотим задать условие в операторе выбора if else, то нам следует использовать именно один из операторов сравнения. Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::cout << "Enter any integer: "; // приглашение пользователю ввести любое целое число
int number; // объявление целочисленной переменной по имени number
std::cin >> number; // ввод значения для переменной number пользователем с клавиатуры
 
if ( number == 777 ) // если значения переменной number равно числу 777
{ // вывести на консоль эту фразу:
    std::cout << "You are lucky!";
}
else // иначе
{ // вывести на консоль эту фразу:
    std::cout << "You are failed. The number is wrong.";
}
Что происходит в условии оператора if? Что бы там ни находилось, будет приведено к типу bool, а переменные этого типа могут принимать значение либо true (истина) либо false (ложь). Если (в переводе с английского "if" - если) в условии ифа истина - выполнится его тело1, то есть, в нашем случае, на консоль выведется сообщение You are lucky!. В противном случае (иначе - а именно так и переводится английское слово "else"), выполнится тело ветки else,то есть, в нашем случае, на консоль выведется сообщение You are failed. The number is wrong.

Но что произойдёт, если мы вдруг перепутаем оператор сравнения с оператором присваивания? То есть, напишем вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::cout << "Enter any integer: "; // приглашение пользователю ввести любое целое число
int number; // объявление целочисленной переменной по имени number
std::cin >> number; // ввод значения для переменной number пользователем с клавиатуры
 
if ( number = 777 ) // если 777 - истина
{ // вывести на консоль эту фразу:
    std::cout << "You are lucky!";
}
else // иначе
{ // вывести на консоль эту фразу:
    std::cout << "You are failed. The number is wrong.";
}
С точки зрения компилятора такая запись не считается ошибкой. Что же произойдёт? Теперь не важно, какое число ввёл пользователь. Поскольку, в условии ифа (условие - это то, что в круглых скобках, то есть, в нашем случае выражение number = 777) всегда будет истина. Рассмотрим пошагово последовательность действий:
  1. выведется приглашение пользователю ввести целое число (фраза Enter any integer: )
  2. пользователь введёт какое-то число, которое будет сохранено в переменной number
  3. в условии ифа переменной number будет присвоено значение 777, которое затрёт число, до этого введённое пользователем
  4. будет выполнена приведение к логическому типу выражения number = 777, оно будет true
  5. будет выполнена проверка условия (а оно - true)
  6. будет выполнен вход в ветку if
  7. будут выполнены все инструкции в теле ветки if (выведется фраза You are lucky!)
  8. ветка else будет проигнорирована, поскольку уже была выполнена ветка if
Таким образом, из-за такой, казалось бы, "маленькой" ошибки, всегда будет выполняться только ветка if, чего бы там пользователь не вводил. Ведь не важно, что он ввёл - всё равно введённое им значение будет затёрто присвоением числа 777. Вот именно так роботы, которые должны были быть любезными с людьми, вдруг "неожиданно" стали методично убивать их, хотя их создатели "никогда не программировали их делать это".

Чему нас учит данный пример? То, что Вы имели ввиду, когда писали Ваш код, может оказаться вовсе не тем, что Вы получите после того, как Ваш код будет скомпилирован и выполнен тупой жестянкой, делающей ровно то, что ей велели. Компьютер, в сущности, просто бездумная послушная машина. Он не умеет читать мысли или угадывать Ваши намерения.
Именно эту ситуацию описывает классический компьютерный афоризм: Garbage In, Garbage Out (дословно "мусор на входе - мусор и на выходе", или "каков запрос, таков ответ").

___________________
1Тело - то, что между фигурными скобками.
0
15.01.2017, 00:03

Не по теме:

markusha, обновите страницу, я там в текст внёс некоторые исправления.

0
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 38
15.01.2017, 00:05  [ТС]
Спасибо, изучаю. Так можно вообще в универ не ходить, я, по-моему, на форуме большему учусь)) Ещё раз огромное студенческое спасибо!
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
15.01.2017, 00:16
markusha, и ещё один нюанс про тип bool:
Миниатюры
Реализовать сортировку массива структур типа "Сотрудник" по убыванию стажа  
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
15.01.2017, 00:34
markusha, картинка в предыдущем сообщении - цитата из замечательной книги Стивена Праты "Язык программирования С++. Лекции и упражнения" (2012, 6-е издание).

Добавлено через 17 минут
markusha, то есть, написать так:
C++
1
2
3
4
if ( number = 777 ) // если 777 - истина
{ // вывести на консоль эту фразу:
    std::cout << "You are lucky!";
}
всё равно, что написать так:
C++
1
2
3
4
if ( 777 ) // если 777 - истина
{ // вывести на консоль эту фразу:
    std::cout << "You are lucky!";
}
и то же самое, что написать так:
C++
1
2
3
4
if ( true ) // если... а, впрочем, никаких "если" - компьютер, выполняй ветку if!
{ // вывести на консоль эту фразу:
    std::cout << "You are lucky!";
}
0
 Аватар для zarko97
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
26.02.2017, 01:29
gru74ik, а если взять в руки пылесос? ))
C++
1
2
3
4
bool operator<(const Date& e)
{
    return std::tie(year_, moth_, day_) < std::tie(e.year_, e.moth_, e.day_) 
}
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.02.2017, 08:01
zarko97, красиво. Благодарю за подсказку.
0
26.02.2017, 08:10

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
подсказка
= и == в языке программирования C++ - разные операции.
Умеете повеселить)) :D

Я про SPOILER, если что)

0
 Аватар для zarko97
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
26.02.2017, 11:55
gru74ik, можно ещё
C++
1
std::lexicographical_compare
юзать
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.02.2017, 20:25
Цитата Сообщение от zarko97 Посмотреть сообщение
а если взять в руки пылесос? ))
C++
1
2
3
4
bool operator<(const Date& e)
{
    return std::tie(year_, moth_, day_) < std::tie(e.year_, e.moth_, e.day_) 
}
Решил посмотреть видосы с конференции C++Russia начала прошлого года. Прям синхронистичность какая-то! Карл Густав Юнг в действии! Докладчик как раз рассказывает про аналогичный случай и предлагает использовать std::tie, попутно объясняя, чего он делает, рассказывает про альтернативы, их плюсы и минусы, в общем, на мой взгляд, очень неплохой доклад, я не пожалел часа времени, потраченного на просмотр (из недостатков отмечу только тот досадный факт, что ребят из аудитории, которые отвечают на вопросы докладчика, или слышно очень плохо или не слышно вовсе).

Видос про "пылесос"



.
1
-80 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 812
26.02.2017, 20:39
C++
1
if(a=0)
в этой строке ошибка
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.02.2017, 20:45
gogaloh, в теме довольно полно (с ссылками, иллюстрациями, аллегориями, подробнейшими объяснениями) было рассказано в чём именно ошибка. И тут появляетесь Вы со своим:
Цитата Сообщение от gogaloh Посмотреть сообщение
C++
1
if(a=0)
в этой строке ошибка
Изображения
 
1
 Аватар для zarko97
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
26.02.2017, 21:50
gru74ik, веселенький доклад
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
26.02.2017, 21:51
zarko97, тебе тоже понравилось? ))
0
 Аватар для zarko97
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
26.02.2017, 22:00
gru74ik, я пока до конца не досмотрел ))

Добавлено через 46 секунд
gru74ik, а этот прием я на стековерфлоу подглядел...у кого уже не помню

Добавлено через 1 минуту
gru74ik, чет ссылка не рабочая...
C++ CoreHard Winter 2017: Михаил Матросов. Повседневный С++: алгоритмы и итераторы
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2017, 22:00

Реализовать сортировку массива подсчётом (по убыванию)
Реализовать сортировку подсчётом (в порядке убывания значений) для вещественного массива arr размером n, элементы которого - случайные...

Реализовать сортировку массива структур по заданному полю
Помогите правильно отсортировать структуры по среднему балу и записать их в файл структура: struct student { char name; int...

Реализовать сортировку массива структур по заданному полю и функцию поиска данных в этом массиве
Создать массив, элементами которого являются структуры – список стартовой пятерки баскетбольной команды (фамилия, рост, амплуа...

Реализовать сортировку пузырьком массива из 100 элементов типа int
Реализовать сортировку пузырьком массива из 100 элементов типа int., используя методы и циклы. Массив должен быть случайно заполнен на...

Реализовать сортировку массива объектов пользовательского типа по заданному полю (структуры)
Есть перечень студентов, прибывших в лагерь по форме: ФИО, факультет, номер отряда. Упорядочить перечень по номерам отрядов, внутри отряда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Салют, шампанское, овации! :drink:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru