Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
L1oN
1 / 1 / 1
Регистрация: 25.03.2015
Сообщений: 59
02.10.2015, 18:40     Объединение двух структур #1
В одной ведомости записана фамилия, имя и отчество студентов Вашей группы и год поступления в институт. Во второй - фамилия и оценки,которые он получил во время зимней сессии. Объединить эти сведения в одну и навести на печать фамилия, имя, отчество студента, год поступления в институт и оценки последней сессии.

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

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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2015, 18:40     Объединение двух структур
Посмотрите здесь:

Объединение структур данных C++
Объединение двух массивов C++
Объединение двух map C++
C++ Объединение двух массивов
C++ Объединение двух контейнеров
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriy007
65 / 10 / 2
Регистрация: 27.10.2014
Сообщений: 341
02.10.2015, 19:42     Объединение двух структур #2
Даже не знаю с чего начать...
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;
        }
    }
}
Redzep
170 / 106 / 42
Регистрация: 21.12.2014
Сообщений: 312
02.10.2015, 19:50     Объединение двух структур #3
Вот вариант со сцеплением структур.

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");
}
valeriy007
65 / 10 / 2
Регистрация: 27.10.2014
Сообщений: 341
02.10.2015, 19:57     Объединение двух структур #4
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;
}
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
02.10.2015, 20:54     Объединение двух структур #5
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";
  }
}
Yandex
Объявления
02.10.2015, 20:54     Объединение двух структур
Ответ Создать тему
Опции темы

Текущее время: 21:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru