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

Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union)) - C++

Восстановить пароль Регистрация
 
DRUNY195
2 / 2 / 0
Регистрация: 04.04.2013
Сообщений: 247
12.06.2013, 11:21     Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union)) #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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
#include <clocale>
 
typedef struct stud 
{
    int *arr;
    int cnt;
    char name[BUFSIZ];
} stud_t;
 
int acc(stud_t st)
{
    int i, sum;
    
    for ( i = 0, sum = 0 ; i < st.cnt ; ++i )
        sum += st.arr[i];
    return sum;
}   
 
void mem_free(stud_t *f, stud_t *l)
{
    for ( ; f != l ; ++f )
        free(f->arr);
}       
 
int main(void)
{
    setlocale(0,"rus");
    stud_t *st;
    int cnt, i, j;
    
    printf ("Введите колличество = ");
    scanf ("%d", &cnt);
    
    if ( !(st = (stud_t *) malloc ( sizeof(stud_t) * cnt )) )
    {
        perror ("Ошибка памяти");
        exit(1);
    }
    
    for ( i = 0 ; i < cnt ; ++i )
    {
        printf ("Введите имя[%d]: ", i + 1 );
        scanf ("%s", st[i].name );
        printf ("Введите колличество[%d] баллов = ", i + 1 );
        scanf ("%d", &(st[i].cnt) );
        
        if ( !(st[i].arr = (int *) malloc (sizeof(int) * st[i].cnt )) )
        {
            perror ("Ошибка памяти");
            mem_free(st, &st[i]);
            exit(1);
        }
        for ( j = 0 ; j < st[i].cnt ; ++j )
            scanf ("%d", &(st[i].arr[j]));
    }   
        for ( i = 0 ; i < cnt ; ++i )
            printf ("Среднее %s \t\t = %.2lf\n", st[i].name, (double) acc(st[i]) / st[i].cnt); 
        mem_free(st, st + cnt);
        free(st);
        
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 11:21     Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union))
Посмотрите здесь:

C++ найти средний балл студента по заданной фамилии
C++ Переведите, Вычислить средний балл учеников класса, если известны оценки каждого ученика по математике, русскому языку и физике. Распечатать списо
Структуры и файлы (посчитать средний балл каждого студента и вывести фамилию студента с наибольшим баллом) C++
C++ 7.Дан список студентов. Общие поля: Ф.И.О., дата рождения, группа, средний балл. Если средний балл 4 и выше, то указать размер стипендии. Если средний
C++ Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
12.06.2013, 11:50     Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union)) #2
структура(struct) и объединение(union) это две абсолютно разные сущности, которые не взаимозаменяемы.
поэтому тема - бред
ты хоть одну книжку по С++ почитай.
DRUNY195
2 / 2 / 0
Регистрация: 04.04.2013
Сообщений: 247
12.06.2013, 11:53  [ТС]     Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union)) #3
0_о
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 <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <clocale>
#define N 255
 
struct bus_station
{
    int bus_number;
    int place_number;
    float price;
    union tratata 
    {
        int l_m;
        char area[N];
    } tra;
};
 
void main()
{
    setlocale(LC_ALL,"RUS");
    int number,i,sum(0);
    bus_station *st;
    printf("\n Введите количество автобусов: ");
    scanf("%d",&number);
    st=(bus_station*)calloc(number,sizeof(bus_station));
     if(st==NULL)
    {   
        puts("\n Нехватка памяти!!!");
        _getch();
        exit(0);
    }
 
        for (i=0;i<number;i++)
    {
        printf("\n Введите номер автобуса: ");
        scanf("%d",&st[i].bus_number);
        printf(" Введите количество мест в автобусе: ");
        scanf("%d",&st[i].place_number);
        printf(" Введите стоимость проезда: ");
        scanf("%f",&st[i].price);
    
        if (st[i].place_number >=15)
       {
        st[i].tra.l_m=st[i].place_number*0.05;
        printf(" Количество льготных мест: %d\n",st[i].tra.l_m);
        sum+=st[i].tra.l_m;
       }
        else 
        {
            printf(" Укажите список районов по которым проезжает маршрутка\n");
            gets_s(st[i].tra.area,N-1);
            gets_s(st[i].tra.area,N-1);
        }
    }
        if (sum==0)
            printf("\n Льготных мест нет.");
        else
            printf("\n Общее количество льготных мест на всех рейсах=%d",sum);
        
    free(st);
    printf("\n Нажмите любую клавишу...");
    _getch();
}
Вот моя другая рабочая прога
Я лучше промолчу

Добавлено через 58 секунд
Мне кажется что вы не имели с этим дела, так что ...
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
12.06.2013, 11:57     Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union)) #4
Цитата Сообщение от DRUNY195 Посмотреть сообщение
Мне кажется что вы не имели с этим дела, так что лучше помолчите
мне кажется, это ты понятия не имеешь, что такое union.
Если я не прав, давай скажи, что за бред у тебя написан: какую роль выполняет "union tratata" и вообще в чём отличие структур от union.
Ну же! Ты ж, ё-моё, считаешь, что это одно и тоже! Я уверен!
DRUNY195
2 / 2 / 0
Регистрация: 04.04.2013
Сообщений: 247
12.06.2013, 12:14  [ТС]     Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union)) #5
В структуре элементы располагаются в памяти последовательно друг за другом
В объединение позволяет хранить различные типы данных в одном и том пространстве памяти (но не одновременно)

Добавлено через 7 секунд
Объединения образуются во многом подобно структурам

Добавлено через 35 секунд
Объединение может хранить значение типа int, или double, или char. Структура с такими же полями способна хранить все типы одновременно
Объединения могут употребляться в структурах и массивах и наоборот. Способ обращения к члену объединения в структуре (или к члену структуры в объединении) полностью идентичен обращению к элементу вложенной структуры. Объединение можно инициализировать только данными того типа, который имеет его первый элемент.

Добавлено через 2 минуты
union tratata -объединения с дескриптором tratata

Добавлено через 5 минут
чем еще вы хотите поинтерисоваться?

Добавлено через 1 минуту
Надеюсь что кто нибудь ,всетаки даст мне нормальный ответ, который поможет мне переделать
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
12.06.2013, 12:42     Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union)) #6
это ты в своей тетрадке прочитал всё? А хоть один пример программы, где правильно употребляется union ты видел?
Нет, конечно, доля правды в твоей копипасте есть. Например про то, что объединение хранит данные в одном куске памяти. Но зачем это нужно в твоей программе? Ты же не ответил на вопрос, какую роль выполняет union в данном конкретном примере?
А я скажу какую.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    union tratata 
    {
        int l_m;
        char area[N];
    } tra;
///...
///...
 st[i].tra.l_m=st[i].place_number*0.05;
///...
       }
        else 
        {
            printf(" Укажите список районов по которым проезжает маршрутка\n");
            gets_s(st[i].tra.area,N-1);
}
в поле tra записывается либо строка, либо число. Причём обратно получить сохранённую строку будет почти невозможно, потому что в одних элементах массива эта строка затёрта числом, в других нет. В результате у тебя не массив, а полнейшая каша.
Короче говоря, то, что ты написал не может служить примером! Поищи нормальные примеры употребления union.

Вообще union употребляется относительно редко. По крайней мере реже, чем struct. Основное его применение сводится к выделению отдельных байтов из каких-нибудь переменных.
Например. Есть переменная int. Её размер 4 байта. Нужно вывести значения отдельных байтов этой переменной.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdio>
 
union test{
  unsigned char bytes[4];
  int x;
};
int main()
{
    union test item;
    item.x=-155;
    printf("%02x\n%02x\n%02x\n%02x\n", item.bytes[0],item.bytes[1],item.bytes[2],item.bytes[3]);
    return 0;
}
Здесь мы пользуемся тем, что все поля юниона наложены друг на друга. Мы записываем в одно из полей (х) значение целого четырёхбайтового числа, и в поле bytes[4] автоматом оказывается то же самое значение, только преобразованное к типу массива из 4х элементов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 18:16     Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union))
Еще ссылки по теме:

C++ Найти среднюю оценку каждого студента и выбрать человека, имеющего максимальный средний балл
C++ Подсчитать средний балл студента
C++ Вывести средний балл каждого студента и общий средний балл группы

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

Или воспользуйтесь поиском по форуму:
DRUNY195
2 / 2 / 0
Регистрация: 04.04.2013
Сообщений: 247
12.06.2013, 18:16  [ТС]     Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union)) #7
Под union мне сказал препод переделать, а я особо с этим не сталкивался

Добавлено через 8 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
структура(struct) и объединение(union) это две абсолютно разные сущности, которые не взаимозаменяемы.
поэтому тема - бред
А с первой прогой как, такое ощущение чтовы считаете что невозможно переделать эту прогу, я не говорю про совместное использоание struct и union, я толком и не понял чему ВЫ возмущены
Yandex
Объявления
12.06.2013, 18:16     Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union))
Ответ Создать тему
Опции темы

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