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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.81
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
#1

Структуры: Списки студентов - C++

26.03.2011, 21:23. Просмотров 5280. Ответов 88
Метки нет (Все метки)

всем привет
вот такое задание мне дано:
Описать массив структур, содержащих информацию о результатах сессии: {фамилия; группа; дисциплина; оценка}. Распечатать фамилии студентов, не имеющих оценок ниже «хорошо».

делаю на Borland c++ 3.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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define cherta printf("-----------------------------------------------------------------\n")
 
 
struct card
       { struct card *list;
    char *f_name;
    char *group;
    char *dp;
    char *rating;
       }*list;
 
void main()
{clrscr();     struct card **list;
int i=1, N=1;
do{
   for(; i<=N; i++)
   {
    cherta;
    printf("Number karti: %d\n", i);
    printf("Firstname: ");
    gets(list[i]->f_name);
    printf("Number Group: ");
    gets(list[i]->group);
    printf("Dicsipline: ");
    gets(list[i]->dp);
    printf("Rating: ");
    gets(list[i]->rating);
    cherta;
    printf("Nazhmite ENTER esli hotite prodolzhit spisok ili ESC dlya vihoda\n");
    if(getch()==13) N++;
   }
  }while(getch()!=27);
 
  clrscr();
  printf("Spisok studentov u kotorih ocenki 'horosho' i 'otlocno':\n");
 for(i=1; i<=N; i++)
 {
  if(list[i]->rating=="horosho" && list[i]->rating=="otlochno" && list[i]->rating=="4" && list[i]->rating=="5")
   {
    printf("Firstname: %s", list[i]->f_name);
    printf("Number Group: %s", list[i]->group);
    printf("Dicsipline: %s", list[i]->dp);
    printf("Rating: %s", list[i]->rating);
    cherta;
   }
 }
 getch();
}
пояснте, что не так? почему он не хочет сравнивать? и что не так в моем коде?
жду советов, поравки и замечаний, хочу понять и научиться..
заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2011, 21:23     Структуры: Списки студентов
Посмотрите здесь:

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

Перевести L студентов с 1-й группы в другую (списки) - C++
Даны 2 списка, содержащих фамилии студентов 2-х групп. Перевести L студентов с 1-й группы в другую. Число пересчета-К. Для меня списки -...

Записи: Вывести списки студентов, упорядоченные по возрасту - C++
Описать и вывести массив, содержащий 10 записей следующей структуры: фамилия, возраст, № студенческого билета, средняя оценка за последнюю...

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

Список студентов (структуры) - C++
Вводится список студентов (Ф.И.О., номер группы, оценка). Найти номер группы, в которой у всех студентов вместе наибольший средний балл.

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

Структуры и односвязные списки - C++
Помогите с задачей. Заранее спасибо. &quot;Сформировать список из натуральных чисел. Заменить максимальные элементы списка числом...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
28.03.2011, 20:02  [ТС]     Структуры: Списки студентов #31
Цитата Сообщение от Deviaphan Посмотреть сообщение
Во первых, программа на С++, поэтому забудь про malloc/free. Только new/delete

Добавлено через 41 секунду
Во вторых, т.к. массив динамический, то омпилятор может и не знать его размер. Об этом ты должен заботиться сам.

Добавлено через 1 минуту
В третьих, CREATE_LIST и CREATE_LIST_SES используют РАЗНЫЕ list

Добавлено через 1 минуту
К тому же, не инициализированный.

И мне вообще не нравится, как ты объекты создаёшь, при объявлении структур.)
)))) еще и смешно тебе))
вот поясни пож-та мне
как сделать структуру list которая будет хранить фамилию, группу, структуру SES в которой будут хранится дисциплина и оценка
естественно обе струкутры массиивы
т.к. надо создавать большой список студентов и на каждого студента свой рейтинг и набор дисциплин

просто надо же сохранять все это в памяти, естественнно нужно запоминать и наращивать а потом ворошить и искать в этом промежутке то как же сделать е сли я буду делать какт ы говоришь ТО не будет фурычит в плане поиска внутри структуры
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.03.2011, 20:04     Структуры: Списки студентов #32
Сделай чтоб фурычило. Статический от динамического массивы различаются только способом создания/удаления. РАботает со статическим, будет и с динамическим. Думай.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
28.03.2011, 21:18  [ТС]     Структуры: Списки студентов #33
Цитата Сообщение от Deviaphan Посмотреть сообщение
Сделай чтоб фурычило. Статический от динамического массивы различаются только способом создания/удаления. РАботает со статическим, будет и с динамическим. Думай.
понимаешь проблема в том что НЕКУДА мне хранить нфу о том ск создано всего структур на этапе формирования списка ибо kist.N и тд обнуляется

Добавлено через 1 час 7 минут
Цитата Сообщение от Deviaphan Посмотреть сообщение
Сделай чтоб фурычило. Статический от динамического массивы различаются только способом создания/удаления. РАботает со статическим, будет и с динамическим. Думай.
сделал как и говорил ты, НО проблема возникла ОН ее н еудаляет т.е. delete[]=card и delete[]=session не работают он ошибку выдает
и после выхода из фнкции CREATE_LIST значение list[0].N = 0 хотя по идее должен хранить число больше 0 ибо столько скоь создал списков
кстати при помощи твоего NEW вместо мфддщс
он засоряет память а именно если в первом списке я исп неск раз Disc и Rat то во втором списке т.е. допустим создаю 2 фамилию и для него дисц и рат он засоряет ратинг а именно печатает каракули всесто Rating печатаут Rat 4 или 5 ведь написано что printf('Rating") так что скажешь?
вот попробуй на борланде 3,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
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define cherta printf("-----------------------------------------------------------------\n")
 
/************************************************************************
              STRUCTURS
***********************************************************************/
struct card
       {
    int N;
    char surname[50];
    char group[10];
    struct session *SES;
       };
 
struct session
       {
    int PR;
    char dp[50];
    char rating[20];
       };
/*************************************************************************
               FUNCIONS
**************************************************************************/
 
 
struct session *CREATE_LIST_SES(card *list,int i)
{   session *SES= new session[100];
int j=1;
 list[0].SES[0].PR=1;
// do{
 
  for(; j<=list[0].SES[0].PR; j++)
    {
 //    list[i].SES=(session*)malloc(sizeof(SES));
     printf("Dicsipline: ");
     scanf("%s",&list[i].SES[j].dp);
     printf("Rating: ");
     scanf("%s",&list[i].SES[j].rating);
     if(getch()==13) list[0].SES[0].PR++;
    }
 //  }while(getch()!=27);
 return SES;
}
 
 
 
struct card *CREATE_LIST()
{ card *list= new card[100] ;
 int i=1;
 list[0].N=1;
// do{
    for(; i<=list[0].N; i++)
    {
     cherta;
  //   list=(card*)malloc(sizeof(list));
     printf("Surname: ");
     scanf("%s",&list[i].surname);
     printf("Number Group: ");
     scanf("%s",&list[i].group);
     CREATE_LIST_SES(list,i);
     cherta;
     printf("Nazhmite ENTER esli hotite prodolzhit spisok ili 2 raza ESC dlya vihoda\n");
     if(getch()==13) list[0].N++;
    }
//   }while(getch()!=27);
 return list;
}
 
int CONTROL(card *list, int i)
{int x, x1=1, x2=1;
 for(int j=1; j<=list[0].SES[0].PR; j++)
  {
   char *ocenka[]={"horosho", "otlichno", "4", "5"};
   if(strcmp(list[i].SES[j].rating,ocenka[0])==0
      || strcmp(list[i].SES[j].rating,ocenka[1])==0
      || strcmp(list[i].SES[j].rating,ocenka[2])==0
      || strcmp(list[i].SES[j].rating,ocenka[3])==0) x1=1;
      else x2=0;
      x=x1*x2;
  }
 return x;
}
 
 
void PRINT_LIST(card *list, session *SES)
{
 for(int i=1; i<=(list[0].N); i++)
  {
   if(CONTROL(list,i)==1)
    {
     printf("Surname: %s\n", list[i].surname);
   //  printf("Number Group: %s\n", list[i].group);
   //  printf("Dicsipline: %s\n", list[i].dp);
   //  printf("Rating: %s\n", list[i].rating);
   //  cherta;
    }
  }
}
/***************************************************************************
               PROGRAMMA
****************************************************************************/
void main()
{ card *list; session *SES;
do{
 clrscr();
 printf("Vvedite spisok studentov:\n");
 CREATE_LIST();
 clrscr();
 printf("Spisok studentov y kotorix ocenki ne nizhe 'horosho':\n");
 cherta;
 PRINT_LIST(list, SES);
 printf("\nVvesti spisok snova? yes/no (AnyKey/ESC)"); //delete[]=card; delete[]=session;
 }while(getch()!=27);
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 06:19     Структуры: Списки студентов #34
Цитата Сообщение от eddilou Посмотреть сообщение
delete[]=card и delete[]=session не работают он ошибку выдает
И правильно делает. С какой стати ты = пишешь.)

Добавлено через 2 минуты
Цитата Сообщение от eddilou Посмотреть сообщение
хотя по идее должен хранить число больше 0
Нет. Ибо я уже сказал, у тебя ДВА объекта с именем list и мне не нравится, как ты создаёшь объекты.
Читай внимательнее.)
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 14:41  [ТС]     Структуры: Списки студентов #35
Цитата Сообщение от Deviaphan Посмотреть сообщение
И правильно делает. С какой стати ты = пишешь.)

Добавлено через 2 минуты

Нет. Ибо я уже сказал, у тебя ДВА объекта с именем list и мне не нравится, как ты создаёшь объекты.
Читай внимательнее.)
в каком месте пишу =?? а то там их много)))
ну направь меня в правильное русло, как надо создавать объекты?? как выделять память? как сделать чтоб он запоминал ... и откуда у меня два объекта с именем лист??
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 15:21     Структуры: Списки студентов #36
Цитата Сообщение от eddilou Посмотреть сообщение
delete[]=card и delete[]=session
Я же указал, в каком.)

Добавлено через 2 минуты
Цитата Сообщение от eddilou Посмотреть сообщение
и откуда у меня два объекта с именем лист??
строки 52 и 107.
Раньше по другому два объекта было.) Новый код я "не заметил".)
В строке 115 ты распечатываешь не инициализированные объекты.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 15:38  [ТС]     Структуры: Списки студентов #37
почему не иницализированный то? ведь я де передал структуру в функцию т.е. PRINT_LIST(card *list, session *SES)
зачем иницализировать второй раз внутри функции?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 16:05     Структуры: Списки студентов #38
Именно, ты передаёшь в функцию не инициализированные указатели.
Ещё раз посмотри на строки 52 и 107, а потом почитай про область видимости переменных.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 16:31  [ТС]     Структуры: Списки студентов #39
ну почему не иницилизированы то? я же их объявил, а затем иеницализирую в самих функциях, может прямо скажешь что я конкретно не так сдела, я же объявляю потом нгеважно какие значения они имеют до входа в функцию затем они инициализируются в функции самой ывделяю место и забиваю инфой ... я знаю про область видимости и глоб и внутр перемнных
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 16:42     Структуры: Списки студентов #40
Внимательно-внимательно посмотри на строку 52. И учти, что имена переменных ничего не значат. Две переменных с одинаковым именем, но в разных областях видимости - это РАЗНЫЕ переменные.
Поэтому посмотри код внимательнее.
В функцию Принт передаются не инициализированные переменные, соответственно печатается мусор.

Ладно, сжалюсь: в строке 111 должно быть
list = CREATE_LIST();

Но код я не смотрел, могут и ещё ошибки быть.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 16:49  [ТС]     Структуры: Списки студентов #41
Цитата Сообщение от Deviaphan Посмотреть сообщение
Внимательно-внимательно посмотри на строку 52. И учти, что имена переменных ничего не значат. Две переменных с одинаковым именем, но в разных областях видимости - это РАЗНЫЕ переменные.
Поэтому посмотри код внимательнее.
В функцию Принт передаются не инициализированные переменные, соответственно печатается мусор.

Ладно, сжалюсь: в строке 111 должно быть
list = CREATE_LIST();

Но код я не смотрел, могут и ещё ошибки быть.
спасибо но проблема возникает на этапе когда используется функция CREATE_LIST_SES
т.е. муссор появляется именно когда неск раз используешь эту функцию или когда создаешь имя след студента скажем так и снова вызыв эту функц неск раз он печатает вместо Rating пишет Rat4 или что то рода этого как быть тут то?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 17:08     Структуры: Списки студентов #42
Цитата Сообщение от eddilou Посмотреть сообщение
но проблема возникает на этапе когда используется функция CREATE_LIST_SES
Проблема абсолютно та же. Объект создаётся, инициализируется и, передаваясь из функции, оказывается в небытие и утекает с собой столь ценную память.
Как это исправить, Ваше домашнее задание.)
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 19:18  [ТС]     Структуры: Списки студентов #43
Цитата Сообщение от Deviaphan Посмотреть сообщение
Проблема абсолютно та же. Объект создаётся, инициализируется и, передаваясь из функции, оказывается в небытие и утекает с собой столь ценную память.
Как это исправить, Ваше домашнее задание.)
уже сижу 2 часа
эх.. я все перепробовал, и выделения больше места он фурычит норм а потом через неск циклов использования опять те же каракули пишет, и делал присвоение SES=CREATE_LIST_SES, одно и то же.... что то не понимаю что не так....
как освобождать с помощью delete так и не понял писал как вы писали ошибки выдает
все работает норм за исключением печатания каракуль точнее просто сбивается printf("rating: ")
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 19:31     Структуры: Списки студентов #44
Ну так приведи окончательный код, чтобы ошибки в нём указать, мне же не видно.)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2011, 19:42     Структуры: Списки студентов
Еще ссылки по теме:

Структуры данных: списки - C++
Для каждого файла в каталоге содержатся следующие сведения: • Имя файла; • Дата создания; • Количество обращений к файлу. ...

Структуры данных: списки - C++
Нужно сделать программу на с++ на тему &quot;структуры данных: списки&quot;, что именно можно придумать? языком владею слабо, сроки очень поджимают,...

Структуры. Вывести фамилии студентов. - C++
Вывести фамилии студентов, балл по определенному предмету которых превышает средний балл по предмету на 0.5 балла

Создание структуры Список студентов - C++
Нужна помощь. Есть в методичке пример создания Ведомости студентов. Код: #include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...

Динамические структуры данных. Списки - C++
Ребят, срочно нужна помощь, помогите пожалуйста, кто чем может! Задание: В деке задать слово. Определить, является ли оно...


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

Или воспользуйтесь поиском по форуму:
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 19:42  [ТС]     Структуры: Списки студентов #45
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define cherta printf("-----------------------------------------------------------------\n")
 
/************************************************************************
              STRUCTURS
***********************************************************************/
struct card
       {
    int N;
    char surname[50];
    char group[20];
    struct session *SES;
       };
 
struct session
       {
    int PR;
    char dp[50];
    char rating[20];
       };
/*************************************************************************
               FUNCIONS
**************************************************************************/
 
 
struct session *CREATE_LIST_SES(card *list, int i)
{   session *SES= new session[100];
int j=1;
 list[0].SES[0].PR=1;
  for(; j<=list[0].SES[0].PR; j++)
    {
    SES=(session*)malloc(sizeof(SES));
     printf("Dicsipline: ");
     scanf("%s",&list[i].SES[j].dp);
     printf("Rating: ");
     scanf("%s",&list[i].SES[j].rating);
     if(getch()==13) list[0].SES[0].PR++;
    }
 return SES;
}
 
 
 
struct card *CREATE_LIST()
{ card *list= new card[100] ;
 int i=1;      session* SES;
 list[0].N=1;
    for(; i<=list[0].N; i++)
    {
     cherta;
     printf("Surname: ");
     scanf("%s",&list[i].surname);
     printf("Number Group: ");
     scanf("%s",&list[i].group);
     SES=CREATE_LIST_SES(list, i);
     cherta;
     printf("Nazhmite ENTER esli hotite prodolzhit spisok ili ESC dlya vihoda\n");
     if(getch()==13) list[0].N++;
    }
 return list;
}
 
int CONTROL(card *list, int i)
{int x, x1=1, x2=1;
 for(int j=1; j<=list[0].SES[0].PR; j++)
  {
   char *ocenka[]={"horosho", "otlichno", "4", "5"};
   if(strcmp(list[i].SES[j].rating,ocenka[0])==0
      || strcmp(list[i].SES[j].rating,ocenka[1])==0
      || strcmp(list[i].SES[j].rating,ocenka[2])==0
      || strcmp(list[i].SES[j].rating,ocenka[3])==0) x1=1;
      else x2=0;
      x=x1*x2;
  }
 return x;
}
 
 
void PRINT_LIST(card *list, session *SES)
{
 for(int i=1; i<=(list[0].N); i++)
  {
   if(CONTROL(list,i)==list[0].SES[0].PR)
    {
     printf("Surname: %s\n", list[i].surname);
    }
  }
}
/***************************************************************************
               PROGRAMMA
****************************************************************************/
void main()
{ card *list; session *SES;
do
 {
  free(list->SES); free(list); // попытка неудачна и смешная наверно, проверено не фурычит и 0 реакции
  clrscr();
  printf("Vvedite spisok studentov:\n");
  list=CREATE_LIST();
  clrscr();
  printf("Spisok studentov y kotorix ocenki ne nizhe 'horosho':\n");
  cherta;
  PRINT_LIST(list, SES);
  printf("\nVvesti spisok snova? yes/no (AnyKey/ESC)");/// delete[]=card *list; delete[]=session *SES;
 }while(getch()!=27);
}
Yandex
Объявления
29.03.2011, 19:42     Структуры: Списки студентов
Ответ Создать тему
Опции темы

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