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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Кузьма
0 / 0 / 0
Регистрация: 22.12.2008
Сообщений: 16
#1

Сформировать список студентов института - C++

22.12.2008, 22:26. Просмотров 1317. Ответов 7
Метки нет (Все метки)

Сформировать список студентов института: факультет, группа, ФИО, домашний адрес, месяц и год рождения. Написать программу определения месяца, в котором родилось максимальное количе¬ство студентов в вашей группе; перевода студентов в другую группу; студентов, родившихся в заданном месяце; студентов заданного года рождения.

Если можно напишите пожалуйста фрагмент программы которая создает такой список(с комментами если можно)!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2008, 22:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сформировать список студентов института (C++):

Сформировать список студентов - C++
Сформировать список студентов, в котором студентки-отличницы расположены по алфавиту. Список выдать на экран. Студенток-отличниц при выводе...

Вывести в новый файл список студентов, удалив из него студентов окончивших школу в текущем году - C++
На основе данных входного файла составить список студентов группы, включив следующие данные: ФИО, год рождения, домашний адрес, какую...

Вывести в новый файл список студентов, удалив из него студентов окончивших школу в текущем году. - C++
На основе данных входного файла составить список студентов группы, включив следующие данные: ФИО, год рождения, домашний адрес, какую школу...

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

Упорядочить список студентов по среднему баллу и вывести весь список - C++
форумчане,выдает ошибку :( столько маюсь с задачей уже #include <vcl.h> #include <stdio.h> #pragma hdrstop /*Упорядочить список...

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

7
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.12.2008, 23:52 #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
#include <stdio.h>
 
#define MAXNAME  512
#define nstudents()  sizeof ourgrp / sizeof ourgrp[0]
 
enum {
    JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
};
 
typedef struct {
    char fcl[MAXNAME];
    unsigned grp;
    char fio[MAXNAME];
    char adr[MAXNAME];
    unsigned mnth;
    unsigned yr;
} Student;
 
/* формирует список студентов института, одна группа */
main()
{
    Student ourgrp[] = {
        { "facultet",
           211,
          "Rizhova Kat'ka",
          "ul. Lenina h. 218 fl. 35",
           AUG,
           1985 },
        
        { "facultet",
           211,
          "Sinicina vtorogodnica",
          "3 obshaga",
           FEB,
           1984 }
        
        /* и т.д. после последней запятую не ставить */
    };
 
    /* количество студентов */
    printf("%d\n", nstudents());
    
    /* количество студентов родившихся в определённом месяце */
    int i, n;
    
    for (i = 0, n = 0; i < nstudents(); i++)
        if (ourgrp[i].mnth == FEB)
            n++;
    printf("birth in february %d\n", n);
    
    return 0;
}
здесь просто массив студентов одной группы
0
Кузьма
0 / 0 / 0
Регистрация: 22.12.2008
Сообщений: 16
23.12.2008, 00:07  [ТС] #3
Я понял это!ТАк я могу делать!Если не трудно то можно сделать не одну группу о много!И использовать calloc и указатели!

Добавлено через 1 минуту 8 секунд
Вот у меня готовый код для структуры не динамической !
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
#include<conio.h>
#include<stdio.h>
#include <stdlib.h>
#include<dos.h>
       int i;
struct list
{
    char fac1[5];
       /*    char grup1 [5];
    char FIO1[15];
    char adres1 [15];
    char god1 [15];
    char mec1 [15];*/
    list *next;
}list1; list *first=0, *cur=0;
 
int IsEmpty()
{
    return first==NULL;
}
 
void GoToPrev()
{
    if(IsEmpty())
    {
        printf("\nSpicok pust");
        getch();
    return;
    }
    if(cur==first)
    return;
    list *tmp;
    tmp=new list;
    tmp=first;
    while(tmp->next!=cur)
    tmp=tmp->next;
    cur=tmp;
}
 
 
void AddFirst(char fac[5])
{
    list *tmp,*p;
    //tmp=new list;
       tmp=(list*)calloc(1,sizeof(list));
    tmp->fac1[5]=fac[5];
    tmp->next=first;
    first=cur=tmp;
}
 
void AddAfterCur(char fac)
{
       /*    if(IsEmpty())
    {
    AddFirst(char fac[5]);
        return;
    }*/
    list *tmp;
    tmp=new list;
    tmp->fac1[5]=fac;
    tmp->next=cur->next;
    cur->next=tmp;
    cur=tmp;
}
 
int IsEnd()
{
    return cur->next==NULL;
}
 
void Move()
{
    if(IsEnd())
    {
        printf("\nDoctognyt koets spiska");
        getch();
        return;
    }
    cur=cur->next;
}
 
void GoToFirst()
{
    cur=first;
}
 
char GetElem()
{
    return cur->fac1[5];
}
 
void DeleteFirst()
{
    list *tmp;
    tmp =new list;
    tmp=first->next;
    delete first;
    first=tmp;
}
 
void DeleteCur()
{
    if(IsEmpty())
    {
        printf("\nSpisok pust. Delete unreal");
        getch();
        return;
    }
    list *tmp;
    tmp=new list;
    if(cur==first)
    {
        DeleteFirst();
        return;
    }
    else
    {
        tmp=cur;
        GoToPrev();
        cur->next=tmp->next;
        delete tmp;
    }
}
 
void Print()
{
    if(IsEmpty())
    return;
    list *tmp;
    tmp=first;
    do
    {
        printf(" %s  ",tmp->fac1);
        tmp=tmp->next;
    }
    while(tmp!=NULL);
}
 
main()
{
    first=NULL;
    cur->next=NULL;
    cur=first;
 
             char fac[5];
            char grup [5];
            char FIO [15];
            char adres [15];
            char god [15];
            char mec [15];
    char a;
    do
    {
        delay(1000);
        clrscr();
        int val;
        Print();
        printf("\nChoose and put :\n\t0 - Return na pred element;\n\t1 - Add elementa v nachalo;\n\
    2 - Add elementa posle tekychego;\n\t3 - View element;\n\
    4 - Delete tekychego elementa;\n\t5 - Goto following element:\n\
    6 - Goto na nachalo spiska;\n\t7 - Revizion dostizenya kontsa spiska;\n\
    8 - Revizion unfull spiska;\n\t\n\
    Esc - EXIT\n");
        a=getch();
        switch (a)
        {
            case '1':
                printf("\nVvedite dannie o studente :\nFacultet: ");
                scanf("%s",fac[5]);
                AddFirst(fac);
            break;
            case '2':
                printf("\nVvedite znacenie:\n");
                scanf("%i",&val);
                AddAfterCur(val);
            break;
            case '3':
                if(IsEmpty())
                    printf("\nSpisok unfull");
                else
                    printf("\nZnachenie tekychego elementa pavno %i",GetElem());
                getch();
            break;
            case '4':
                DeleteCur();
            break;
            case '5':
                Move();
            break;
            case '6':
                GoToFirst();
            break;
            case '7':
                if(IsEnd())
                    printf("\nDostignyt konets spiska");
                else
                    printf("\nKonets spiska undostignyt");
                getch();
            break;
            case '8':
                if(IsEmpty())
                    printf("\nSpisok unfull");
                else
                    printf("\n V spiske est elementu");
                getch();
            break;
            /*case '9':
                MaxData(q);
            break; */
            case '0':
                GoToPrev();
            break;
        }
    }
    while (a!=27);
    return 0;
}
Добавлено через 57 секунд
Можно его переделать под мое условие!Если необходимо знать какие функции что делают я напишу!
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.12.2008, 02:34 #4
список обязательно чтобы можно было добавлять студентов динамически по ходу и работать с тем что есть на данный момент, иначе можно всё на массиве структур сделать (перевод в другую группу имеется в виду не изменить поле, а убрать структуру вообще)
0
Кузьма
0 / 0 / 0
Регистрация: 22.12.2008
Сообщений: 16
23.12.2008, 09:04  [ТС] #5
ДА!Нужен список в котором выделяется память(CALLOC) по каждый элемент!
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.12.2008, 10:34 #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
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
93
94
95
96
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXNAME    512
#define NSTUDENTS  3
 
enum {
    JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
};
 
typedef struct grpnode {
    char fcl[MAXNAME];
    unsigned grp;
    char fio[MAXNAME];
    char adr[MAXNAME];
    unsigned mnth;
    unsigned yr;
    struct grpnode *next;
} Student, *Studptr;
 
Studptr addstud(Studptr, Studptr), studalloc(void);
 
/* формирует список студентов института, одна группа */
main()
{
    Studptr ourgrp = NULL, p;
    Student tmp;
    int i;
    
    for (i = 0; i < NSTUDENTS; i++) {
        printf("Enter\n");
        printf("faculty: ");
        scanf("%s", tmp.fcl);
        printf("group: ");
        scanf("%d", &tmp.grp);
        printf("initials: ");
        scanf(" %[^\n]", tmp.fio);
        printf("address: ");
        scanf(" %[^\n]", tmp.adr);
        printf("birth(month): ");
        scanf("%d", &tmp.mnth);
        printf("birth(year): ");
        scanf("%d", &tmp.yr);
        tmp.next = NULL;
        ourgrp = addstud(ourgrp, &tmp);
        putchar('\n');
    }
    for (i = 0, p = ourgrp; i < NSTUDENTS; p = p->next, i++) {
        if (p->mnth != FEB)
            continue;
        printf("%d:\n", i+1);
        printf("%s\n", p->fcl);
        printf("%d\n", p->grp);
        printf("%s\n", p->fio);
        printf("%s\n", p->adr);
        printf("%d\n", p->mnth);
        printf("%d\n", p->yr);
        putchar('\n');
    }
    return 0;
}
 
Studptr addstud(Studptr p, Studptr s)
{
    Studptr tmp;
    
    if (p == NULL) {
        if ((p = studalloc()) != NULL) {
            strcpy(p->fcl,s->fcl);
            p->grp = s->grp;
            strcpy(p->fio, s->fio);
            strcpy(p->adr, s->adr);
            p->mnth = s->mnth;
            p->yr = s->yr;
            p->next = s->next;
        }    
    } else {
        if ((tmp = studalloc()) != NULL) {
            strcpy(tmp->fcl, s->fcl);
            tmp->grp = s->grp;
            strcpy(tmp->fio, s->fio);
            strcpy(tmp->adr, s->adr);
            tmp->mnth = s->mnth;
            tmp->yr = s->yr;
            tmp->next = p;
        }
        p = tmp;
    }    
    return p;
}
 
Studptr studalloc(void)
{
    return (Studptr) malloc(sizeof(Student));
}
там ещё функция освобождения списка в комплекте, вставки элемента (поступил новый студент), удаления (перевод кого-то в другую группу), остальное делается просто через счётчики
0
Кузьма
0 / 0 / 0
Регистрация: 22.12.2008
Сообщений: 16
23.12.2008, 21:02  [ТС] #7
Спасиба огромное !Код просто супер!Я разобрался!Тебе респект!
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.12.2008, 22:40 #8
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXNAME    512
#define NSTUDENTS  3
 
enum {
    JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
};
 
typedef struct grpnode {
    char fcl[MAXNAME];
    unsigned grp;
    char fio[MAXNAME];
    char adr[MAXNAME];
    unsigned mnth;
    unsigned yr;
    struct grpnode *next;
} Student, *Studptr;
 
Studptr addstud(Studptr, Studptr), studalloc(void), freestud(Studptr);
 
/* формирует список студентов института, одна группа */
main()
{
    Studptr ourgrp = NULL, p;
    Student tmp;
    int i;
    
    for (i = 0; i < NSTUDENTS; i++) {
        printf("Enter\n");
        printf("faculty: ");
        scanf("%s", tmp.fcl);
        printf("group: ");
        scanf("%d", &tmp.grp);
        printf("initials: ");
        scanf(" %[^\n]", tmp.fio);
        printf("address: ");
        scanf(" %[^\n]", tmp.adr);
        printf("birth(month): ");
        scanf("%d", &tmp.mnth);
        printf("birth(year): ");
        scanf("%d", &tmp.yr);
        tmp.next = NULL;
        ourgrp = addstud(ourgrp, &tmp);
        putchar('\n');
    }
    for (i = 0, p = ourgrp; i < NSTUDENTS; p = p->next, i++) {
        if (p->mnth != FEB)
            continue;
        printf("%d:\n", i+1);
        printf("%s\n", p->fcl);
        printf("%d\n", p->grp);
        printf("%s\n", p->fio);
        printf("%s\n", p->adr);
        printf("%d\n", p->mnth);
        printf("%d\n", p->yr);
        putchar('\n');
    }
    ourgrp = freestud(ourgrp);
    return 0;
}
 
/* addstud:  добавляет студента в список */
Studptr addstud(Studptr p, Studptr s)
{
    Studptr tmp;
    
    if (p == NULL) {
        if ((p = studalloc()) != NULL) {
            strcpy(p->fcl,s->fcl);
            p->grp = s->grp;
            strcpy(p->fio, s->fio);
            strcpy(p->adr, s->adr);
            p->mnth = s->mnth;
            p->yr = s->yr;
            p->next = s->next;
        }    
    } else {
        if ((tmp = studalloc()) != NULL) {
            strcpy(tmp->fcl, s->fcl);
            tmp->grp = s->grp;
            strcpy(tmp->fio, s->fio);
            strcpy(tmp->adr, s->adr);
            tmp->mnth = s->mnth;
            tmp->yr = s->yr;
            tmp->next = p;
        }
        p = tmp;
    }    
    return p;
}
 
/* studalloc:  выделяет память под студента */
Studptr studalloc(void)
{
    return (Studptr) malloc(sizeof(Student));
}
 
/* freestud:  освобождает список из памяти */
Studptr freestud(Studptr p)
{
    Studptr q;
    
    while (p != NULL) {
        q = p;
        p = p->next;
        free(q);
    }
    return p;    
}
дополнил функцией освобождения, коменты к функциям
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2008, 22:40
Привет! Вот еще темы с ответами:

Создать список студентов с оценками по нескольким дисциплинам. Отсортировать список по убыванию среднего балла. Имеющих двойки удалить из списка. - C++
Помогите сделать лабу задание:Создать список студентов с оценками по нескольким дисциплинам. Отсортировать список по убыванию среднего...

Связный список (Используя структуру описания даты, построить связный список студентов, сформированный в алфавитном порядке) - C++
Здраствуйте! Помогите пожалуйста найти косяк. Выводится только первая строчка из списка студентов. Вот такая задачка : Программа...

Сформировать список из 10 книг, используя динамическую структуру данных односвязный список - C++
друзья спасайте Сформировать список из 10 книг, используя динамическую структуру данных односвязный список С++

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


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
23.12.2008, 22:40
Ответ Создать тему
Опции темы

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