С++ Структуры для начинающих (обычные). Создание списка студентов

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

Некоторое время назад я с трудом понимал смысл обычных структур, но структуры играют важные роли в программировании и в изучении программирования. Структурам уделяется очень много внимания. Многие самые быстрые алгоритмы построены на динамических структурах. Чтобы научиться понимать динамические структуры следует научится понимать самые обычные структуры и нужно научиться выполнять простейшие операции обработки обычных структур.
Программирование является наукой, в которой имеет смысл идти от простого к сложному.
На этой странице я продемонстрирую подробный пример решения одной из более менее популярных задач на обычные структуры. Я создам список студентов. Пример ввода данных на картинке.

Структуры в C++ Список студентов

  • Внутри структуры можно объявлять переменные, которые будут относиться к той структуре, внутри которой они объявлены.
  • Внутри структуры можно описывать функции, которые будут принадлежать той структуре, внутри которой они объявлены
  • Если внутри структуры объявлена функция и внутри структуры имеются какие-то переменные, то внутри такой функции к этим переменным можно обращаться напрямую.

Благодаря таким возможностям, можно проще и быстрее выявлять возникающие ошибки, но это придет с опытом и со временем.
Если у вас будет много разных структур, то при описываемом подходе одинаковые названия методов внутри разных структур вас не запутают.

  • Если вы считываете строку и после строки считываете числовое значение, то тогда имеет смысл использовать cin.ignore. У меня в коде этот момент отображен более менее наглядно.

=======================
Если вы прочитали, потренировались, попробовали создать что-то похожее и у вас получилось, если вы поняли что все не так сложно, то переходим к следующему шагу. Следующий шаг — это ответ на вопрос: «И что мне с этим дальше делать». Дальше можно решать разнообразные задачи на обычные структуры.

Например вывести студентов, которые родились между 1990 и 2000 годом. Чтобы решить эту задачу, к коду который описан выше добавляется новая функция вовнутрь нужной структуры (у нас одна, но их может быть очень много) и эта функция описывается либо внутри, либо вне структуры. Я использую стиль написания вне структуры (как и в коде выше). Внутри этой функции выполняются проверки и если результаты проверки положительные — данные выводят, если нет, то не выводят. Звучит, наверное, понятно. Если вы решали задачи с массивами, то может быть решали похожую задачу, где нужно вывести элементы, которые принадлежат диапазону или диапазонам значений. Если вы не решали, то нужно порешать, потому как здесь тот же самый принцип. Проще понять простое чем сложное и на уже понятым однажды простом проще понять сложное, которое построено на этом простом.

  • Если вы внимательны, то должны были увидеть, что при таком стиле писания кода выводить элемент структуры можно с помощью уже описанной для вывода элемента функции структуры. Это возможно потому что сама функция show() выводит только один элемент.

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

Это делается следующим образом

Я специально избегаю разных проверок на недопустимый ввод данных, но хорошие программисты обязательно включат защиту от дурака. Просто некоторым тем, кто это читает и без этих проверок голову поломать придется, хотя жаль, что когда я вникал в суть, то так подробно никто не описывал.

Один из вопросов, который обязательно должен возникнуть — это вопрос сортировки данных структуры. Структуры можно строить по разному, поэтому при разных построениях структур реализация может выглядеть различно.
В показываемой мной реализации к элементам структуры следует обращаться как к элементам обычного массива. Если вы еще улавливаете ход мыслей, то видите, что это на самом деле так и понимаете о чем я говорю. Так как я обращаюсь со структурами как с обычным массивом, то и пример сортировки будет точно таким же как сортировка массива. Чтобы не осложнять жизнь новичкам, я выполню сортировку по году (не путайте год и дату рождения. Год — это только год)

Я не добавлял никаких методов, а просто дописал текст в тело главной программы. Этот текст — текст обычной сортировки массива.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Один комментарий: С++ Структуры для начинающих (обычные). Создание списка студентов

  • Gen говорит:

    В функции void Student::Show() //Функция показывает данные структуры на экране опечатка.В 61 строке вместо Date[0],Date[1],Date[2] должно быть Postup[0],Postup[1],Postup[2].
    И если можно вопрос.Как отсортировать по Family ? ❓

    Автор сайта отвечает:
    Вот мой пример по сортировке строк, который я когда-то описывал на сайт.
    http://ci-plus-plus-snachala.ru/?p=1142

    Чтобы выполнить сортировку по фамилиям, для начала имеет смысл разобраться в том примере.

    Спасибо!

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Солидной компании на постоянную работу требуется девушка приятной внешности со знанием Linux, программирование встраиваемых микроконтроллеров на C/C++/ASM, знание Linux - установка и настройка (сеть, графика, установка драйверов); C , Python, технологии ООП, GTK (желательно PyGTK) или Qt, SQL и XML - базовые знания; понимание многопоточности и синхронизации потоков.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок