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

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

Восстановить пароль Регистрация
 
МихаилС
Сообщений: n/a
25.03.2013, 16:44     Создать структуру: студент #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++] Создать класс студент и классы бюджетный студент и коммерческий студент. C++
Создать структуру C++
C++ Работа с файлом (Создать структуру студент)
C++ Создайте файл Студент. Занесите в отдельный файл записи из файла Студент, добавив сведения о новых студентах
Создать расширенный класс СТУДЕНТ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ReasonX7
 Аватар для ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 146
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();
}
Yandex
Объявления
25.03.2013, 19:27     Создать структуру: студент
Ответ Создать тему
Опции темы

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