Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2017, 15:26   #1
pocheto
Пользователь
 
Регистрация: 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;
}

Подскажите пожалуйста, что мне нужно добавить или изменить, для того что бы следовать в нужном направлении.
Заранее спасибо!
pocheto вне форума Ответить с цитированием
Старый 27.03.2017, 15:35   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Надо добавить указатель на следующего участника и реализовать добавление/удаление из списка.
Что-то типа:
struct accounting* next;

Насчет работы со списком, начните отсюда:
https://en.wikipedia.org/wiki/Linked_list
waleri вне форума Ответить с цитированием
Старый 27.03.2017, 19:21   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вот пример списка (проанализируй, список формируется и просто выводится на экран. Обрати внимание "как осуществляется передвижение по списку"):

0.jpg

только я его вручную формирую, а тебе надо чтобы в цикле. Типо такого:
Код:
Сколько вводить элементов - 6
for(i=6)
.......
......
И это будет твой пункт а) начальное формирование списка;
___________________________________ ________________________

Хотя что я говорю?
Тебе надо начинать с основ:

2.jpg

Первый раз я прочитал - ничего не понял. Второй, третий - тоже... но постепенно (раз на 10-м вдумчивого вчитывания) я осознал смысл всех этих списков... Я думаю, что у тебя будет тоже самое.
___________________________________ ________________________

Ещё совет тебе - поищи на этом форуме информацию - ты не первый кто делает списки из экземпляров структуры.
ura_111 вне форума Ответить с цитированием
Старый 29.03.2017, 19:14   #4
pocheto
Пользователь
 
Регистрация: 30.11.2016
Сообщений: 23
По умолчанию

Народ, спасибо за советы!
pocheto вне форума Ответить с цитированием
Старый 29.03.2017, 20:21   #5
pocheto
Пользователь
 
Регистрация: 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;
}

вот скрин.
Изображения
Тип файла: png 55.png (37.1 Кб, 121 просмотров)

Последний раз редактировалось pocheto; 29.03.2017 в 20:29.
pocheto вне форума Ответить с цитированием
Старый 29.03.2017, 20:26   #6
pocheto
Пользователь
 
Регистрация: 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;
}

вот скрин.
Изображения
Тип файла: png 55.png (37.1 Кб, 116 просмотров)
pocheto вне форума Ответить с цитированием
Старый 29.03.2017, 20:43   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Из-за формата вывода:
Код:
%d
это для чисел.
Найди в интернете "все проценты" (%...,%...,%...), которые вообще используются в "printf"(чаще всего встречается таблицa), и их перебери все, пока не будет такое, как нужно(их всего-то около 20-ти штук.)

p.s.: т.е., в поисковике вводишь "printf" и в первых 4-5 ссылак будет таблица формата вывода (одно из значений этой таблицы будет "%d").
ura_111 вне форума Ответить с цитированием
Старый 29.03.2017, 23:39   #8
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

В принципе, тебе можно выводить с помощью "cout"...
Это пример я взял от другой задачи, а там использовался не с++, а просто Си.
ura_111 вне форума Ответить с цитированием
Старый 30.03.2017, 07:48   #9
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вот, вроде забацал (сопоставь каждое слово программы):

0.jpg
ura_111 вне форума Ответить с цитированием
Старый 30.03.2017, 08:14   #10
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

И мне не понятно, что это такое у тебя:
Код:
accounting participant;
статический экземпляр структуры "accounting", но в том то и дело, что статический. Т.е. его, в процессе работы программы, не удалить (он останется в памяти до закрытия всей программы). В отличие от "h1-h4",- раз там используется "new" (создать динамически), то и можно использовать "delete" (динамически удалить) экземпляр структуры-списка.

___________________________________ _
А в чем ты программируешь?
VisuaL STUDIA 2015?
.

Последний раз редактировалось ura_111; 30.03.2017 в 08:58.
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структуры данных на С. 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