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

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

Войти
Регистрация
Восстановить пароль
 
МихаилС
Сообщений: n/a
#1

Создать структуру: студент - C++

25.03.2013, 16:44. Просмотров 1204. Ответов 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
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
 
struct student                          //Создание структуры, 
{                                       //
       char fam[20];                    //Фамилия char это буквенное обозначение. 
       char old[3];                     //Возраст
       char num[3];                     //Номер группы
       char ball[3];                    //Средний балл(не мяч)
} mas[100],temp;                              //массив со студентами, которые будут вноситься и временный массив для обработки первого
 
int main()
{
    int i,n,j;                         //переменные для циклов 
    FILE *fp;                            //функция запрашивает файл 
    fp = fopen("spisok.txt","r");        //открытие файла в программе
    printf("Kol-vo studentov: "); // n кол-во студентов
    scanf("%d",&n);                      // ссчитывается целочисл.знач. 
    printf("\n");
    for (i=0;i<n;i++) 
    {                                    //Цикл зля записи каждого студента в структуру массива mas
      fscanf(fp,"%s",mas[i].fam);        //
      fscanf(fp,"%s",mas[i].old);        // fp считывание с файла 
      fscanf(fp,"%s",mas[i].num);        //
      fscanf(fp,"%s",mas[i].ball);       //
    }
    for(i=0;i<n;i++)                                               //   
    {                                                              //
       for(j=0;j<n-i-1;j++)                                        //
       {                                                           //
           if(mas[j].fam[0]>mas[j+1].fam[0])                       // если буква одной фамилии больше буквы другой фамилии то меняем местами      Сортировка массива методом "пузырька"
           {                                                       //
              temp=mas[j]; mas[j]=mas[j+1]; mas[j+1]=temp;         //
           }                                                       //
        }                                                          //
    }                                                              //
    for (i=0;i<n;i++)                              //
    {                                              //
        printf("%s ",mas[i].fam);                  //
        printf("%s ",mas[i].old);                  //Вывод структуры массива со студентами
        printf("%s ",mas[i].num);                  //
        printf("%s ",mas[i].ball);                 //
        printf("\n");                              //
    }
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2013, 16:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать структуру: студент (C++):

Работа с файлом (Создать структуру студент) - C++
помогите пожалуйста сделать( у меня не получается( Создать структуру студент(Фамилия, возраст, номер группы, средний балл). Считать из...

Создать структуру "Студент": Ф.И.О. домашний адрес, группа, рейтинг. Организовать ввод, вывод, поиск - C++
Помогите, пожалуйста) На турбо С++. совсем не разбираюсь:help:

Создать класс "Студент" и классы "Бюджетный студент" и "Коммерческий студент" - C++
Доброго времени суток. Помогите с задачкой. Наследование. Создать класс студент и классы бюджетный студент и коммерческий студент.

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

Как создать структуру-список, поля которой — ссылка на такую же структуру - C++
Суть вопроса в том, как создать структуру-список, поля которой - ссылка на сл. элемент(такую же структуру) и ссылка на объект, относящийся...

Создать расширенный класс СТУДЕНТ - C++
Здраствуйте, есть довольно не малое задание, код которого почти полностью представлен ниже: Задание: 1. Создать класс СТУДЕНТ,...

1
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
25.03.2013, 19:27 #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
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
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
 
struct Student
{
    char surname[15];
    int age;
    char group[5];
    int mark;
};
 
void main()
{
    const int N = 20;
 
    FILE *f = fopen("file.txt", "r");
    int count_of_students;
    fscanf(f, "%i", &count_of_students);  // Кол-во студентов я вписал в файл, в первую строчку.
    Student students[N];
 
    for (int i = 0; i < count_of_students; i++)
    {
        fscanf(f, "%s", students[i].surname);
        fscanf(f, "%i", &students[i].age);
        fscanf(f, "%s", students[i].group);
        fscanf(f, "%i", &students[i].mark);
    }
 
    fclose(f);
 
    //===========================================================
 
        // Сортировка по группам.
    for (int i = 0; i < count_of_students; i++)
    {
        for (int j = 1; j < count_of_students; j++)
        {
            if (strcmp(students[j - 1].group, students[j].group) < 0)
            {
                Student tmp = students[j];
                students[j] = students[j];
                students[j] = tmp;
            }
        }
    }
 
    int middle_age[N], group_number = 0;  
    middle_age[0] = students[0].age;  // Инициализация среднего возраста для первой группы.
    for (int i = 1, k = 1; i < count_of_students; i++)
    {
        if (strcmp(students[i].group, students[i - 1].group) == 0)  // Если группа одна и та же:
        {
            middle_age[group_number] += students[i].age;   // приплюсовать возраст студента и 
            k++;                                                            // увеличить k.
        }
        else  // Если новая группа:
        {
            middle_age[group_number] /= k;         // Считаем средний возраст.
            k = 1;                                             // Сбиваем счетчик.
            group_number++;                           // Увеличиваем кол-во групп.
            middle_age[group_number] = students[i].age;   // Инициализация среднего возраста для следующей группы.
        }
    }
 
        // Вывод результата.
    printf("Group Age\n");
    for (int i = 0, k = 0; i < count_of_students && k <= group_number; i++)
    {
        if (strcmp(students[i + 1].group, students[i].group) != 0)  
        {
            printf("%s %i\n", students[i].group, middle_age[k]);
            k++;
        }
    }
    _getch();
}
Добавлено через 43 минуты
Нашел у себя пару ошибок. Вот поправленный код:
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 <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
 
struct Student
{
    char surname[15];
    int age;
    char group[5];
    int mark;
};
 
void main()
{
    const int N = 20;
 
    FILE *f = fopen("file.txt", "r");
    int count_of_students;
    fscanf(f, "%i", &count_of_students);
    Student students[N];
 
    for (int i = 0; i < count_of_students; i++)
    {
        fscanf(f, "%s", students[i].surname);
        fscanf(f, "%i", &students[i].age);
        fscanf(f, "%s", students[i].group);
        fscanf(f, "%i", &students[i].mark);
    }
 
    fclose(f);
 
    //===========================================================
 
    for (int i = 0; i < count_of_students; i++)
    {
        for (int j = 1; j < count_of_students; j++)
        {
            if (strcmp(students[j - 1].group, students[j].group) < 0)
            {
                Student tmp = students[j];
                students[j] = students[j - 1];
                students[j - 1] = tmp;
            }
        }
    }
 
    int middle_age[N], group_number = 0;
    middle_age[0] = students[0].age;
    for (int i = 1, k = 1; i <= count_of_students; i++)
    {
        if (strcmp(students[i].group, students[i - 1].group) == 0)
        {
            middle_age[group_number] += students[i].age;
            k++;
        }
        else
        {
            middle_age[group_number] /= k;
            k = 1;
            group_number++;
            middle_age[group_number] = students[i].age;
        }
    }
 
    printf("Group Age\n");
    for (int i = 0, k = 0; i < count_of_students && k <= group_number; i++)
    {
        if (strcmp(students[i + 1].group, students[i].group) != 0)
        {
            printf("%s %i\n", students[i].group, middle_age[k]);
            k++;
        }
    }
    _getch();
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2013, 19:27
Привет! Вот еще темы с ответами:

Создать базовый класс «Учащийся» и производные классы «Школьник» и «Студент» - C++
Создать базовый класс «Учащийся» и производные классы «Школьник» и «Студент». Создать массив объектов базового класса и заполнить этот...

Создайте файл Студент. Занесите в отдельный файл записи из файла Студент, добавив сведения о новых студентах - C++
Создайте файл Студент. Занесите в отдельный файл записи из файла Студент, добавив сведения о новых студентах Вид файла студент: ...

Создать структуру - C++
Нужна помощь! Не как не могу понять как описать /описывает обычный дроб/ Создать структуру, которая описывает обычный дробь....

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


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

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

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