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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2018, 14:41   #1
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
По умолчанию Правильно записать вложенные структуры

Здравствуйте, мое задание звучало так: создать массив структур. Каждая структура состоит из следующих элементов:факультет и студент. Для факультета задать его название, курс и массив групп. Для студента задать его фамилию и массив экз. оценок...
Там дальше идет о записи в файл, редактировании, сортировке и тд, но меня интересует сама конструкция этого массива. Сначала я сделал без массива курсов, к которым будут относиться группы и это вышло вот так:
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <conio.h>
#include <stdlib.h>
#include <fstream>
#include <cstring>
using namespace std;
//////////////////////////////////////////////////////////////////////////////////////////////   
//Структуры
struct student {
    char lastname[20];
    int marks[15];
};
struct group {
    char name[10];
    student students[30];
};
struct faculty {
    char name[30];
    int course;
    group groups[20];
};
//////////////////////////////////////////////////////////////////////////////////////////////   
//Прототипы
 
void enterdata(faculty**);
 
//////////////////////////////////////////////////////////////////////////////////////////////     
//Функции
 
int main() {
    faculty **Faculty = new faculty*[10];
    for (int i = 0; i < 10; i++) {
        Faculty[i] = new faculty;
    }
    enterdata(Faculty);
    system("pause");
    return 0;
}
void enterdata(faculty **Faculty) {
    int i = 0,j,k,m;
    char key, key1, key2;
    do
    {
        system("cls");
        cout << "Enter name of faculty: ";
        cin >> Faculty[i]->name;
        cout << "Enter the course: ";
        cin >> Faculty[i]->course;
        j = 0;
        do
        {
            system("cls");
            cout << "| Faculty: " << Faculty[i]->name << " | Course: " << Faculty[i]->course << " |\n";
            cout << "Enter name of group: ";
            cin >> Faculty[i]->groups[j].name;
            k = 0;
            do
            {
                system("cls");
                m = 0;
                cout << "| Faculty: " << Faculty[i]->name << " | Course: " << Faculty[i]->course << "| Group: " << Faculty[i]->groups[j].name << " |" << " No. " << k+1 << " |\n";
                cout << "Enter student's last name: ";
                cin >> Faculty[i]->groups[j].students[k].lastname;
                cout << "Enter student's exam marks (enter \"111\" to stop):\n ";
                int ch = 0;
                while (ch != 111 && m < 15) {
                    cin >> ch;
                    if (ch > -1 && ch < 101) {
                        Faculty[i]->groups[j].students[k].marks[m] = ch;
                        m++;
                    }
                }
                k++;
                cout << "\nDo you want to continue entering students?(y - yes, any other button to stop): ";
                key2 = _getch();
            } while (key2 == 'Y' || key2 == 'y' || key2 == 'н' || key2 == 'Н');
            j++;
            cout << "\nDo you want to continue entering groups?(y - yes, any other button to stop): ";
            key1 = _getch();
        } while (key1 == 'Y' || key1 == 'y' || key1 == 'н' || key1 == 'Н');
        i++;
        cout << "\nDo you want to continue entering faculties?(y - yes, any other button to stop): ";
        key = _getch();
    } while (key == 'Y' || key == 'y' || key == 'н' || key == 'Н');
    system("cls");
}
Но после этого я прочитал доп. задание (определить факультет и курс с макс. количеством отличников) и мне кажется что надо всё-таки сделать массив курсов, за которыми будут привязаны группы со студентами. Как это легче сделать? Я не уверен, что надо добавить еще одну вложенную структуру с курсами и в нее перенести структуру групп, ведь тогда придется делать тройной указатель на массив Faculty и все переделывать?
alexboliam вне форума Ответить с цитированием
Старый 12.03.2018, 15:45   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Может, уже пора вытащить сиську изо рта и юзать ООП? Инкапсуляция, полиморфизм и всё такое?
Вместо структур - иерархия классов, с внутренними методами сохранения/загрузки, а?

А то я смотрю на твой исходник и мне курить хочется. Хотя бросил 4 года назад.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.03.2018, 20:19   #3
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Может, уже пора вытащить сиську изо рта и юзать ООП? Инкапсуляция, полиморфизм и всё такое?
Вместо структур - иерархия классов, с внутренними методами сохранения/загрузки, а?

А то я смотрю на твой исходник и мне курить хочется. Хотя бросил 4 года назад.
Цитата:
Сообщение от min@y™ Посмотреть сообщение
Может, уже пора вытащить сиську изо рта и юзать ООП? Инкапсуляция, полиморфизм и всё такое?
Вместо структур - иерархия классов, с внутренними методами сохранения/загрузки, а?

А то я смотрю на твой исходник и мне курить хочется. Хотя бросил 4 года назад.
Была бы моя воля, то да. Но в универе решили что лучшей идеей будет изучать ООП в 3 семестре,а во втором структуры и работу с данными.

Последний раз редактировалось alexboliam; 12.03.2018 в 20:22.
alexboliam вне форума Ответить с цитированием
Старый 12.03.2018, 20:42   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от alexboliam Посмотреть сообщение
Была бы моя воля, то да. Но в универе решили что лучшей идеей будет изучать ООП в 3 семестре,а во втором структуры и работу с данными.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.03.2018, 22:56   #5
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от alexboliam Посмотреть сообщение
Была бы моя воля, то да. Но в универе решили что лучшей идеей будет изучать ООП в 3 семестре,а во втором структуры и работу с данными.
Ну оставьте им слово struct. В С++ там разница с class только в видимости по умолчанию. И сделайте, как правильно.
alexzk вне форума Ответить с цитированием
Старый 13.03.2018, 05:30   #6
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Ну оставьте им слово struct. В С++ там разница с class только в видимости по умолчанию. И сделайте, как правильно.
В ООП я не сильно разбираюсь ещё, но вот за ночь сделал эту программу со структурами.
alexboliam вне форума Ответить с цитированием
Старый 13.03.2018, 06:33   #7
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от alexboliam Посмотреть сообщение
В ООП я не сильно разбираюсь ещё, но вот за ночь сделал эту программу со структурами.
..ну там ..чепуха вобщем) с первых строк

Код:
faculty **Faculty = new faculty*[10];
Вы же понимаете, что это массив УКАЗАТЕЛЕЙ НА УКАЗАТЕЛИ? Там нет структур, их еще каждую нада снова сделать new в такой записи (которая тоже избыточна и нафиг нада, но раз начали...).

А где delete ? Причем опять же, сначала каждую из 10 delete лично, а потом весь блок в спец. записи:

delete [] Faculty; //так делается удаление массива, в нашем случае - массив указателей на указатели.


Попробуйте почитать std::array. Его специально внесли в стандарт, т.к. люди слишком часто чепуху пишут + к нему можно применить <algorithm> - все оттуда.
alexzk вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильно записать условие conflictogen PHP 8 22.05.2015 20:07
Как правильно записать условие С++ Валера1984 Помощь студентам 1 25.02.2014 16:33
Как правильно записать условие выборки данных из структуры (нападающих из основного состава команды) ( на C ) Валера1984 Помощь студентам 7 15.02.2014 13:34
С++ вложенные структуры Bumbuk Помощь студентам 2 18.06.2010 21:51
вложенные структуры в С++ серг Помощь студентам 3 21.12.2009 17:29