|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.03.2017, 15:26 | #1 |
Пользователь
Регистрация: 30.11.2016
Сообщений: 23
|
Структуры данных.
Нород, добрый день! Помогите пожалуйста или направьте в нужном направлении ,есть задание которое нужно сделать в ближайшее время, выглядит оно следующим образом.
Реализовать программное приложение, позволяющее вводить, хранить и обрабатывать информацию для учета участников Олимпиады. Для обеспечения динамической работы с данными их следует программно организовать в виде односвязного списка, каждый отдельный элемент которого содержит информацию об одном участнике, включая: ФИО участника, страна, вид спорта, его дата рождения, рост, вес. Программа должна обеспечивать выполнение следующих операций: а) начальное формирование списка; б) добавление нового элемента списка; в) вывод всего списка на экран в виде таблицы; г) упорядочивание списка по полю «ФИО участника»; д) удаление элементов по значению первичного ключа; е) формирование отчета: итоговое количество участ¬ников по виду спорта, указанному пользователем. Выбор необходимой операции пользователем производится с помощью меню, выводимого на экран. Выполнение каждого пункта меню программно организовать в виде отдельной функции. Программа должна обеспечить запрос и ввод с клавиатуры необходимых входных данных, а также контроль возможных ошибок при вводе. Не могу сообразить каким образом его нужно реализовать, в виде динамических структур? Если да то как, у меня есть свои написанные структуры данных , которые выглядят следующим образом. #include <iostream> using namespace std; struct accounting { //учёт участников олимпиады char *surname; char *city; char *country; char *kind_of_sport; float Date_of_Birth; int growth; int the_weight; char *floor; }; int main(int argc, const char * argv[]) { accounting participant; participant.surname = "petrov"; //Фамилия участника - Петров participant.city = "ozersk"; // Город участника - Озёрск participant.country = "Russian"; //Страна участника - Россия participant.kind_of_sport = "Footboall"; //Вид спорта участника - Футбол participant.Date_of_Birth = 26; //Возраст участника - 26 лет. participant.growth = 182; // Рост участника - 182 см. participant.the_weight = 68; //Вес участника - 68 кг. participant.floor = "man"; //Пол участника - мужской. cout << "participant surname " << participant.surname <<"\n" << "participant city " << participant.city <<"\n" << "participant country " << participant.country <<"\n" << "kind_of_sport " << participant.kind_of_sport <<"\n" << "Date_of_Birth " << participant.Date_of_Birth <<"\n" << "growth " << participant.growth <<"\n" << "the_weight " << participant.the_weight <<"\n" << "floor " <<participant.floor <<endl; ;cin.get(); return 0; } Подскажите пожалуйста, что мне нужно добавить или изменить, для того что бы следовать в нужном направлении. Заранее спасибо! |
27.03.2017, 15:35 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Надо добавить указатель на следующего участника и реализовать добавление/удаление из списка.
Что-то типа: struct accounting* next; Насчет работы со списком, начните отсюда: https://en.wikipedia.org/wiki/Linked_list |
27.03.2017, 19:21 | #3 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Вот пример списка (проанализируй, список формируется и просто выводится на экран. Обрати внимание "как осуществляется передвижение по списку"):
0.jpg только я его вручную формирую, а тебе надо чтобы в цикле. Типо такого: Код:
___________________________________ ________________________ Хотя что я говорю? Тебе надо начинать с основ: 2.jpg Первый раз я прочитал - ничего не понял. Второй, третий - тоже... но постепенно (раз на 10-м вдумчивого вчитывания) я осознал смысл всех этих списков... Я думаю, что у тебя будет тоже самое. ___________________________________ ________________________ Ещё совет тебе - поищи на этом форуме информацию - ты не первый кто делает списки из экземпляров структуры. |
29.03.2017, 19:14 | #4 |
Пользователь
Регистрация: 30.11.2016
Сообщений: 23
|
Народ, спасибо за советы!
|
29.03.2017, 20:21 | #5 |
Пользователь
Регистрация: 30.11.2016
Сообщений: 23
|
Сделал все по вашему примеру, но, при выводе на экран вместо фамилий отображаются цифровые значения, код получился следующий.
#include <iostream> using namespace std; struct accounting { //учёт участников олимпиады char *surname; accounting *next; //ссылка на следующий элемент }; int main() { accounting participant; accounting *h1 = new accounting; h1 -> surname = "petrov"; //Фамилия участника - Петров accounting *h2 = new accounting; h2 -> surname = "Bazarov"; //Фамилия участника accounting *h3 = new accounting; h3 -> surname = "Dolekiy"; //Фамилия участника accounting *h4 = new accounting; h4 -> surname = "Basin"; //Фамилия участника h1->next = h2; //связь первого участника со вторым. h2->next = h3; //связь первого участника со вторым. h3->next = h4; //связь первого участника со вторым. h4->next = NULL; //4 не связан //Выводим на экран. accounting *vuvod = h1; while (vuvod !=NULL) { printf ("%d " , vuvod -> surname); vuvod = vuvod -> next; //переход к следующиму узлу. } int num; cin >> num; // что бы консоль не закрывалаьс. return 0; } вот скрин. Последний раз редактировалось pocheto; 29.03.2017 в 20:29. |
29.03.2017, 20:26 | #6 |
Пользователь
Регистрация: 30.11.2016
Сообщений: 23
|
[QUOTE=pocheto;1671994]Сделал все по вашему примеру, но, при выводе на экран вместо фамилий отображаются цифровые значения, код получился следующий.
#include <iostream> using namespace std; struct accounting { //учёт участников олимпиады char *surname; accounting *next; //ссылка на следующий элемент }; int main() { accounting participant; accounting *h1 = new accounting; h1 -> surname = "petrov"; //Фамилия участника - Петров accounting *h2 = new accounting; h2 -> surname = "Bazarov"; //Фамилия участника accounting *h3 = new accounting; h3 -> surname = "Dolekiy"; //Фамилия участника accounting *h4 = new accounting; h4 -> surname = "Basin"; //Фамилия участника h1->next = h2; //связь первого участника со вторым. h2->next = h3; //связь первого участника со вторым. h3->next = h4; //связь первого участника со вторым. h4->next = NULL; //4 не связан //Выводим на экран. accounting *vuvod = h1; while (vuvod !=NULL) { printf ("%d " , vuvod -> surname); vuvod = vuvod -> next; //переход к следующиму узлу. } int num; cin >> num; // что бы консоль не закрывалаьс. return 0; } вот скрин. |
29.03.2017, 20:43 | #7 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Из-за формата вывода:
Код:
Найди в интернете "все проценты" (%...,%...,%...), которые вообще используются в "printf"(чаще всего встречается таблицa), и их перебери все, пока не будет такое, как нужно(их всего-то около 20-ти штук.) p.s.: т.е., в поисковике вводишь "printf" и в первых 4-5 ссылак будет таблица формата вывода (одно из значений этой таблицы будет "%d"). |
29.03.2017, 23:39 | #8 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
В принципе, тебе можно выводить с помощью "cout"...
Это пример я взял от другой задачи, а там использовался не с++, а просто Си. |
30.03.2017, 08:14 | #10 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
И мне не понятно, что это такое у тебя:
Код:
___________________________________ _ А в чем ты программируешь? VisuaL STUDIA 2015? . Последний раз редактировалось ura_111; 30.03.2017 в 08:58. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Структуры данных на С. | art1es23 | Общие вопросы C/C++ | 3 | 05.11.2015 14:42 |
Динамические структуры данных, списковые структуры (надо разобраться что делает программа) | _4Alex4_ | Помощь студентам | 1 | 14.11.2012 07:39 |
Структуры данных | LimPIK49 | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 17.03.2012 00:07 |
Структуры данных | alex-soft | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 17.01.2012 19:10 |
Структуры данных | Shadow94 | Общие вопросы C/C++ | 8 | 22.04.2011 11:50 |