Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/47: Рейтинг темы: голосов - 47, средняя оценка - 4.89
4 / 4 / 1
Регистрация: 25.03.2015
Сообщений: 63

Объединение двух структур

02.10.2015, 18:40. Показов 8737. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В одной ведомости записана фамилия, имя и отчество студентов Вашей группы и год поступления в институт. Во второй - фамилия и оценки,которые он получил во время зимней сессии. Объединить эти сведения в одну и навести на печать фамилия, имя, отчество студента, год поступления в институт и оценки последней сессии.

Дабы вывести полную ведомость о студентах, я решил использовать функцию, которая проверяет фамилию из двух структур. Только вот не знаю как правильно её использовать, ли вообще так верно.

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
 
using namespace std;
 
struct student
{
    int year;
    char surname[20];
    char name[20];
    char lastname[20];
 
};
 
struct mark
{
    int mark1;
    int mark2;
    int mark3;
    char surname[20];
};
 
void Output(student *s, mark *m)
{
    for(int i(0);i<3;i++)
    {
        if(s->surname == m->surname)
        {
            cout << "Student - " << s->surname << s->name << s->lastname << ", year of entering: " << s->year << endl;
            cout << "Marks: " << m->mark1 << "," << m->mark2 << "," << m->mark3 << endl;
        }
    }
}
 
student first = {2014,"fSaA","fASa","Fasfasfa"};
student second = {2013,"Adsad","DSSsa","Adasdasda"};
student third = {2015,"Bvbcvb","Bvvbc","Bvcvccccc"};
 
mark first = {3,4,5,"fSaA"};
mark second = {2,2,3,"Adsad"};
mark third = {3,3,4,"Bvbcvb"};
 
void main()
{
    student first,second,third;
    mark first,second,third;
 
 
    Output(student,mark);
    system("pause");
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.10.2015, 18:40
Ответы с готовыми решениями:

Объявить объединение из двух структур и структуру из двух объединений
Объявить объединение из двух структур и структуру из двух объединений. Заполнить значениями, вывести на экран.

Объединение структур
Добрый вечер. Задание было создать три структуры ( студенты, группа, факультет. ). каждую из них заполнить определенным количеством...

Объединение структур данных
Есть такое задание : Объявите три структуры с элементами целого типа:очередь dmer ,вектор a_vec,и список a_list.Заполните список и вектор...

4
81 / 25 / 19
Регистрация: 27.10.2014
Сообщений: 420
02.10.2015, 19:42
Даже не знаю с чего начать...
1.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
void Output(student *s, mark *m)
{
    for(int i(0);i<3;i++)
    {
        if(s->surname == m->surname) //сравниваешь 2 массива char из 20 элементов
        {
            cout << "Student - " << s->surname << s->name << s->lastname << ", year of entering: " << s->year << endl;
            cout << "Marks: " << m->mark1 << "," << m->mark2 << "," << m->mark3 << endl;
        }
    }
}
В массивах char помимо записанного тобой будет храниться и всякий рандомный мусор, потому они равны никогда не будут. Как решение, предлагаю забыть про старые char массивы и использовать строки - string, и в функции сравнивать их. Вот так:
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
struct student
{
    int year;
    string surname;
    string name;
    string lastname;
 
};
 
struct mark
{
    int mark1;
    int mark2;
    int mark3;
    string surname;
};
 
void Output(student *s, mark *m)
{
    for (int i(0); i<3; i++)
    {
        if (s->surname == m->surname)
        {
            cout << "Student - " << s->surname << s->name << s->lastname << ", year of entering: " << s->year << endl;
            cout << "Marks: " << m->mark1 << "," << m->mark2 << "," << m->mark3 << endl;
        }
    }
}
0
202 / 138 / 88
Регистрация: 21.12.2014
Сообщений: 369
02.10.2015, 19:50
Вот вариант со сцеплением структур.

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <string>
 
using namespace std;
 
typedef struct student
{
    int year;
    std::string surname;
    std::string name;
    std::string lastname;
 
};
 
typedef struct mark
{
    int mark1;
    int mark2;
    int mark3;
    std::string surname;
};
 
 
typedef struct student_mark
{
    int mark1;
    int mark2;
    int mark3;
    int year;
    std::string surname;
    std::string name;
    std::string lastname;
};
 
 
 
student_mark combine (student & _student, mark & _mark)
{
    student_mark tmp;
 
    if (_student.surname == _mark.surname)
    {
        tmp.surname = _student.surname;
        tmp.name = _student.name;
        tmp.lastname = _student.lastname;
        tmp.year = _student.year;
 
        tmp.mark1 = _mark.mark1;
        tmp.mark2 = _mark.mark2;
        tmp.mark3 = _mark.mark3;
    }
 
    return tmp;
}
 
 
void Output (student_mark & sm)
{
    // Тут вывод
}
 
 
 
void main()
{
    student students[3] = {{2014,"fSaA","fASa","Fasfasfa"}, {2013,"Adsad","DSSsa","Adasdasda"}, {2015,"Bvbcvb","Bvvbc","Bvcvccccc"}};
    mark marks[3] = {{3,4,5,"fSaA"}, {2,2,3,"Adsad"}, {3,3,4,"Bvbcvb"}};
 
    for (int i = 0; i < 3; i++)
    {
        student_mark sm = combine (students[i], marks[i]);
        Output (sm);
    }
 
    system("pause");
}
0
81 / 25 / 19
Регистрация: 27.10.2014
Сообщений: 420
02.10.2015, 19:57
2.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
student first = {2014,"fSaA","fASa","Fasfasfa"};     //глобально объявляешь переменные типа student 
student second = {2013,"Adsad","DSSsa","Adasdasda"}; //first,second,third
student third = {2015,"Bvbcvb","Bvvbc","Bvcvccccc"};
 
mark first = {3,4,5,"fSaA"}; //тут ты их пытаешься еще раз объявить но другого типа
mark second = {2,2,3,"Adsad"};
mark third = {3,3,4,"Bvbcvb"};
 
void main()
{
    student first,second,third;  //в главной функции в третий раз пытаешься объявить этиже переменные
    mark first,second,third;      //и в четвертый раз
 
 
    Output(student,mark);      //пытаешься передать типы данных в функцию которая принимает аргументами
    system("pause");             //адреса переменных...
}
Правильно будет как то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    student first = { 2014, "fSaA", "fASa", "Fasfasfa" };
    student second = { 2013, "Adsad", "DSSsa", "Adasdasda" };
    student third = { 2015, "Bvbcvb", "Bvvbc", "Bvcvccccc" };
 
    mark m_first = { 3, 4, 5, "fSaA" };
    mark m_second = { 2, 2, 3, "Adsad" };
    mark m_third = { 3, 3, 4, "Bvbcvb" };
 
 
    Output(&first, &m_first);
    Output(&second, &m_second);
    Output(&third, &m_third);
 
    system("pause");    
    return 0;
}


Добавлено через 5 минут
По заданию нужно создавать 2 структуры и объединять? Можно создать одну структуру со вложенной другой
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
36
37
struct student
{
    int year;
    string surname;
    string name;
    string lastname;
    struct Mark
    {
        int mark1;
        int mark2;
        int mark3;
    }mark;
};
 
void Output(student *s)
{
        cout << "Student - " << s->surname << s->name << s->lastname << ", year of entering: " << s->year << endl;
        cout << "Marks: " << s->mark.mark1 << "," << s->mark.mark2 << "," << s->mark.mark3 << endl;
}
 
int main()
{
    student first = { 2014, "fSaA", "fASa", "Fasfasfa" };
    student second = { 2013, "Adsad", "DSSsa", "Adasdasda" };
    student third = { 2015, "Bvbcvb", "Bvvbc", "Bvcvccccc" };
 
    first.mark = { 3, 4, 5 };
    second.mark = { 2, 2, 3 };
    third.mark = { 3, 3, 4 };
 
    Output(&first);
    Output(&second);
    Output(&third);
 
    system("pause");    
    return 0;
}
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
02.10.2015, 20:54
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <cstring>
 
using namespace std;
 
const int N=50,   //В одной группе максимум 50 студентов
          MaxLen = 255; //Максимум символов в char[]
 
 
struct Student{
    char First_Name[MaxLen];
    char Last_Name[MaxLen];
    char Third_Name[MaxLen];
    int year;
};
 
struct Mark{
    char Last_Name[MaxLen];
    int mark1,mark2,mark3;
};
 
int main()
{
    Student MyBD[N]=
    {
        {"Petr","Alekseev","Dimitrievich",1985},
        {"Genadiy","Petrov","Ivanovich",1999},
        {"Andrey","Sidorov","Petrovich",1998}
    };
 
 
    Mark Marks[N]={
        {"Alekseev",3,5,4},
        {"Petrov",5,5,5},
        {"Sidorov",3,5,3}
    };
 
 
  /////////////////////////////////////////
  struct output{
    char First_Name[MaxLen];
    char Last_Name[MaxLen];
    char Third_Name[MaxLen];
    int year,mark1,mark2,mark3;
  };
  /////////////////////////////////////////
 
  output O[N];  //Структура конечная, объединенная.
 
 /*Сбор данных из двух структур*/
  for (int i=0;i<N;i++){
    strcpy(O[i].First_Name,MyBD[i].First_Name);
    strcpy(O[i].Last_Name,MyBD[i].Last_Name);
    strcpy(O[i].Third_Name,MyBD[i].Third_Name);
    O[i].year=MyBD[i].year;
    O[i].mark1 =  Marks[i].mark1;
    O[i].mark2 =  Marks[i].mark2;
    O[i].mark3 =  Marks[i].mark3;
  }
 
 /*Вывод на экран*/
  for (auto const &i: O) {
        if (i.mark1)  cout<<i.First_Name<<"  "<<i.Last_Name<<"  "<<i.Third_Name<<"\t"<<i.year<<"  "<<i.mark1<<","<<i.mark2<<","<<i.mark3<<"\n";
  }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.10.2015, 20:54
Помогаю со студенческими работами здесь

Определить объединение из двух полей. Первое поле - массив из двух байт, второе - слово
Определить объединение из двух полей. Первое поле - массив из двух байт, второе - слово. Ввести x в диапазоне от 1 до 15. Вычислить целое...

Определить объединение из двух полей Первое поле - массив из двух байт, второе - слово
Помогите написать программу( лучше с комментариями чтобы разобраться) Определить объединение из двух полей Первое поле - массив из двух...

Объединение двух массивов с структур в один массив Q
1) Создать структуру А содержащую поле-массив. 2) Создать класс В содержащий два поля-экземпляра выше созданной структуры. И поле...

Объединение массивов(структур)
Задача такая: Лыжные гонки проводятся отдельно для двух групп участников (в каждой группе не более 15 человек). Результаты соревнований...

Определить объединение двух полей. Первое поле – массив из двух байт, второе – слово
Помогите написать программу( лучше с комментариями чтобы разобраться) Определить объединение из двух полей Первое поле - массив из двух...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru