Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DRUNY195
2 / 2 / 0
Регистрация: 04.04.2013
Сообщений: 247
#1

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

12.06.2013, 11:21. Просмотров 877. Ответов 6
Метки нет (Все метки)

Дан список студентов. Общие поля: Ф.И.О., дата рождения, группа, средний балл. Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл.
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 11:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить средний балл оценок каждого студента и напечатать их фамилии и средний балл (объединение (union)) (C++):

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

Вывести средний балл каждого студента и общий средний балл группы - C++
Здравствуйте. Помогите понять, в чем ошибка. Программа не выводит нормально средний бал каждого студента по трем предметам и общий средний...

Вычислить средний балл в каждой группе студентов и определить, какая группа имеет наибольший средний балл - C++
две группы студентов (1-ая -13 человек, 2-ая - 8 человек) сдают экзамен по информатике. Написать программу, вычисляющую, средний балл в...

найти средний балл студента по заданной фамилии - C++
Первую часть задания сделал Осталось это &quot;найти средний балл студента с введенной фамилией&quot; #include &lt;stdio.h&gt; #include...

7.Дан список студентов. Общие поля: Ф.И.О., дата рождения, группа, средний балл. Если средний балл 4 и выше, то указать размер стипендии. Если средний - C++
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;clocale&gt; int main() { setlocale(0,&quot;Rus&quot;); static char res; int...

Структуры и файлы (посчитать средний балл каждого студента и вывести фамилию студента с наибольшим баллом) - C++
У меня есть структура и файл, в котором находятся фамилии и оценки учащихся, как мне посчитать средний балл каждого студента и вывести...

6
Kuzia domovenok
1955 / 1808 / 140
Регистрация: 25.03.2012
Сообщений: 6,265
Записей в блоге: 1
12.06.2013, 11:50 #2
структура(struct) и объединение(union) это две абсолютно разные сущности, которые не взаимозаменяемы.
поэтому тема - бред
ты хоть одну книжку по С++ почитай.
0
DRUNY195
2 / 2 / 0
Регистрация: 04.04.2013
Сообщений: 247
12.06.2013, 11:53  [ТС] #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 секунд
Мне кажется что вы не имели с этим дела, так что ...
0
Kuzia domovenok
1955 / 1808 / 140
Регистрация: 25.03.2012
Сообщений: 6,265
Записей в блоге: 1
12.06.2013, 11:57 #4
Цитата Сообщение от DRUNY195 Посмотреть сообщение
Мне кажется что вы не имели с этим дела, так что лучше помолчите
мне кажется, это ты понятия не имеешь, что такое union.
Если я не прав, давай скажи, что за бред у тебя написан: какую роль выполняет "union tratata" и вообще в чём отличие структур от union.
Ну же! Ты ж, ё-моё, считаешь, что это одно и тоже! Я уверен!
1
DRUNY195
2 / 2 / 0
Регистрация: 04.04.2013
Сообщений: 247
12.06.2013, 12:14  [ТС] #5
В структуре элементы располагаются в памяти последовательно друг за другом
В объединение позволяет хранить различные типы данных в одном и том пространстве памяти (но не одновременно)

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

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

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

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

Добавлено через 1 минуту
Надеюсь что кто нибудь ,всетаки даст мне нормальный ответ, который поможет мне переделать
0
Kuzia domovenok
1955 / 1808 / 140
Регистрация: 25.03.2012
Сообщений: 6,265
Записей в блоге: 1
12.06.2013, 12:42 #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х элементов.
0
DRUNY195
2 / 2 / 0
Регистрация: 04.04.2013
Сообщений: 247
12.06.2013, 18:16  [ТС] #7
Под union мне сказал препод переделать, а я особо с этим не сталкивался

Добавлено через 8 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
структура(struct) и объединение(union) это две абсолютно разные сущности, которые не взаимозаменяемы.
поэтому тема - бред
А с первой прогой как, такое ощущение чтовы считаете что невозможно переделать эту прогу, я не говорю про совместное использоание struct и union, я толком и не понял чему ВЫ возмущены
0
12.06.2013, 18:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 18:16
Привет! Вот еще темы с ответами:

Определить средний балл каждого студента по оценкам заданным массивом - C++
Оценки 5 студентов по 4 предметам представлены в виде массива. Написать программу, которая определит средний балл для каждого студента....

Найти среднюю оценку каждого студента и выбрать человека, имеющего максимальный средний балл - C++
для каждого из N студентов группы известны ФИО и оценки(в баллах) по четырем дисциплинам .Найти среднюю оценку каждого студента и выбрать...

Подсчитать средний балл студента - C++
Доброго времени суток, помогите исправить программу. Нужно подсчитать средний бал студента. Входные данные 4 vasya 5 petya 3 ...

Создать стек, информационными полями которого являются: фамилия и средний балл студента - C++
Помогите с задачей, пожалуйста Создать стек, информационными полями которого являются: фамилия и средний бал студента. Добавить в стек...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru