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

Объединение (union) "Ученик"

25.01.2015, 21:26. Показов 1607. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется информация об учениках младшей школы. Для всех учеников известны: фамилия, имя и класс. Для учеников 1-х классов дополнительно известна их скорость чтения (слов в минуту, тип short int). Для учеников 4-х классов известны баллы итоговой аттестации (единый муниципальный тест от 1 до 100 баллов, тип float). Для учеников 2-х и 3-х классов известны данные итоговой школьной контрольной по математике (оценки от 1 до 10 баллов, тип short int). Описать тип «ученик». Написать процедуру, позволяющую ввести с клавиатуры данные для одного ученика. Используя эту процедуру, ввести сведения об N учениках и сохранить их в бинарном файле. Распечатать на экране содержимое данного файла в виде таблицы.

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <fstream>
using namespace std;
 
union pupil
{
    char lastname[20], firstname[20];
    short int classnum;
    short int speed;
    float emt;
    short int controlmath;
};
pupil list[100];
fstream f;
 
int input()
{
    for (int i = 0; i < 1; i++)
    {
        cout << "Фамилия: "; cin >> list[i].lastname;
        f.write((char*)&list[i].lastname, sizeof(list[i].lastname));
        cout << "Имя: "; cin >> list[i].firstname;
        f.write((char*)&list[i].firstname, sizeof(list[i].firstname));
        cout << "Класс: "; cin >> list[i].classnum;
        f.write((char*)&list[i].classnum, sizeof(list[i].classnum));
        if (list[i].classnum == 1)
        {
            cout << "Скорость чтения (слов/мин): "; cin >> list[i].speed;
            f.write((char*)&list[i].speed, sizeof(list[i].speed));
            continue;
        }
        if (list[i].classnum == 4)
        {
            cout << "Баллы за итоговою аттестацию: "; cin >> list[i].emt;
            f.write((char*)&list[i].emt, sizeof(list[i].emt));
            continue;
        }
        if (list[i].classnum == 2 || 3)
        {
            cout << "Оценка за итоговую школьную контрольную работу по математике: "; cin >> list[i].controlmath;
            f.write((char*)&list[i].controlmath, sizeof(list[i].controlmath));
        }
    }
    return 0;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    struct
    {
        char lastname[20], firstname[20];
        short int classnum;
        short int speed;
        float emt;
        short int controlmath;
    }output[100];
    int n, i, k = 1;
    f.open("a.dat", ios::out | ios::binary);
    cout << "Введите N: "; cin >> n;
    for (i = 0; i < n; i++, k++)
    {
        cout << "Данные " << k << "-го ученика" << endl;
        input();
    }
    f.close();
    f.open("a.dat", ios::in | ios::binary);
    for (i = 0; i < n; i++)
    {
        f.read((char*)&output[i].lastname, sizeof(output[i].lastname));
        f.read((char*)&output[i].firstname, sizeof(output[i].firstname));
        f.read((char*)&output[i].classnum, sizeof(output[i].classnum));
        cout << output[i].lastname << " " << output[i].firstname << " " << output[i].classnum << " ";
        if (output[i].classnum == 1)
        {
            f.read((char*)&output[i].speed, sizeof(output[i].speed)); 
            cout << output[i].speed << endl;
            continue;
        }
        if (output[i].classnum == 4)
        {
            f.read((char*)&output[i].emt, sizeof(output[i].emt)); 
            cout << output[i].emt << endl;
            continue;
        }
        if (output[i].classnum == 2 || 3)
        {
            f.read((char*)&output[i].controlmath, sizeof(output[i].controlmath)); 
            cout << output[i].controlmath << endl;
        }
    }
}
почему вместо русских букв выводится этот бред? с англ такого нет
Миниатюры
Объединение (union) "Ученик"  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.01.2015, 21:26
Ответы с готовыми решениями:

Объединение union массив
Объявить объединения MyUn для хранения элементов типа, которых отмечены в табл. 1.(заполнил уже нужными элементами) Создать массив из 15...

Объединение (union), объяснить выведенное значение
Здравствуйте. При вызове обработчика выдаются значения переменных a,b,c, но когда я удаляю строку data.c = -3; вместо с выдается число...

Объединение нескольких массивов в одну область памяти Union и прямое обращение по имени
Нужно чтобы массив s пересекался в памяти с массивами u1,u2,u3 и чтобы к ним был прямой доступ по имени. Первое я реализовал: union ons {...

13
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.01.2015, 21:44
Зачем там union? Сделай структуру.
0
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 123
25.01.2015, 22:07  [ТС]
нужно, чтобы было именно объединение
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.01.2015, 22:13
Так не получится. В объединении ты только одно из полей можешь использовать одновременно, они же налагаются.
0
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 123
25.01.2015, 22:23  [ТС]
ну я считываю и тут же записываю. дело в том, что когда я ввожу, то в переменной сохраняется именно эта хрень. я через отладчик смотрел
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.01.2015, 22:27
Со строками без &:
C++
1
f.write(list[i].lastname, sizeof(list[i].lastname));
0
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 123
25.01.2015, 22:36  [ТС]
а в объединении как правильно описать строку?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.01.2015, 22:47
Ну строка сама по себе правильно описана.
0
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 123
25.01.2015, 23:02  [ТС]
типа char будет строкой?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.01.2015, 23:13
Массив char будет строкой.
0
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 123
26.01.2015, 07:17  [ТС]
не получается, то же самое выводит
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
26.01.2015, 10:51
igor_m, Дико подозреваю, что pupil должен быть структурой, а вот поля которые различаются в зависимости от класса - union.

C++
1
2
3
4
5
6
7
8
9
10
11
struct pupil
{
    char lastname[20], firstname[20];
    short int classnum;
    union 
    {
       short int speed;
       float emt;
       short int controlmath;
    };
};
0
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 123
26.01.2015, 13:42  [ТС]
да все равно русский не выводится
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.01.2015, 13:44
Актуальную версию покажи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2015, 13:44
Помогаю со студенческими работами здесь

Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union))
Дан список студентов. Общие поля: Ф.И.О., дата рождения, группа, средний балл. Вычислить средний балл оценок каждого студента и напечатать...

Union, объединение
Есть такое объединение: #define NF 30 #define NI 20 #define NL 5 #define NLINE 55 struct StudEnd { TCHAR fam; ...

Объединение таблиц union
Как объединить таблицы, что бы выводило категорию и разделы в ней? У меня только получилось, что выводит номер категории и разделы в...

Объединение таблиц без union
всем привет Table A Table B Table C inv_id inv_id Prise inv_id Price ...

Перечисление (enum) и объединение (union)
Добрый вечер! Написал вот программку из задания, но совершенно забыл про enum. Можно ли как-то его втулить не сильно перелопачивая код? ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru