Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/42: Рейтинг темы: голосов - 42, средняя оценка - 4.52
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
1

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

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

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

делаю на 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();
}
пояснте, что не так? почему он не хочет сравнивать? и что не так в моем коде?
жду советов, поравки и замечаний, хочу понять и научиться..
заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2011, 21:23
Ответы с готовыми решениями:

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

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

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

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

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

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

Но код я не смотрел, могут и ещё ошибки быть.
спасибо но проблема возникает на этапе когда используется функция CREATE_LIST_SES
т.е. муссор появляется именно когда неск раз используешь эту функцию или когда создаешь имя след студента скажем так и снова вызыв эту функц неск раз он печатает вместо Rating пишет Rat4 или что то рода этого как быть тут то?
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 17:08 42
Цитата Сообщение от eddilou Посмотреть сообщение
но проблема возникает на этапе когда используется функция CREATE_LIST_SES
Проблема абсолютно та же. Объект создаётся, инициализируется и, передаваясь из функции, оказывается в небытие и утекает с собой столь ценную память.
Как это исправить, Ваше домашнее задание.)
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 19:18  [ТС] 43
Цитата Сообщение от Deviaphan Посмотреть сообщение
Проблема абсолютно та же. Объект создаётся, инициализируется и, передаваясь из функции, оказывается в небытие и утекает с собой столь ценную память.
Как это исправить, Ваше домашнее задание.)
уже сижу 2 часа
эх.. я все перепробовал, и выделения больше места он фурычит норм а потом через неск циклов использования опять те же каракули пишет, и делал присвоение SES=CREATE_LIST_SES, одно и то же.... что то не понимаю что не так....
как освобождать с помощью delete так и не понял писал как вы писали ошибки выдает
все работает норм за исключением печатания каракуль точнее просто сбивается printf("rating: ")
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 19:31 44
Ну так приведи окончательный код, чтобы ошибки в нём указать, мне же не видно.)
0
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);
}
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 20:06 46
Строка 36 это вообще что?

Добавлено через 52 секунды
Я же уже сказал, забей на malloc. Поди ещё и delete[] вызывал для того, что malloc-ом выделял?

Добавлено через 36 секунд
Слово struct при объявлении переменной не нужно.

Добавлено через 5 минут
51,52 - цикл выполняется только одну итерацию.

Добавлено через 58 секунд
Или нет.)
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 20:07  [ТС] 47
36 строк бред я ее забыл стереть и компилятор на нее не реагирует воть
насчет насчет делите я писал и как говорили delite[]=card компилятор ругается
насчет struct, о какой именно говорите, если о том где я пишу на 11 и 19 строчке то без них никак, а больше и нету поясните пож-та
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 20:11 48
ОТКУДА ты взял "delete[]=card"? Я же русским по белому написал "delete[] list;"!

Добавлено через 50 секунд
Цитата Сообщение от eddilou Посмотреть сообщение
насчет struct
Строка 16, 30, 48

Добавлено через 52 секунды
Цикл 52 лучше через while сделать. Слишком сложное условие, чтобы for использовать.
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 20:23  [ТС] 49
а как тогда буду наращивать i?? если через whaile
по-моему for тут проще некуда дабы наращиваем нажимая энтер если же не энтер то фор проверяет условия и выходит
насчет 16 строки, убрав структ компил ругается так что там без этого никак
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
30.03.2011, 06:03 50
У тебя слишком сложная логика для for. Именно с человеческой точки зрения. Т.е. всё управление циклом должно быть в его шапке, а у тебя не так. Это слишком сложно для for, лучше while. А наращивать i точно так же.) ++i.)
Цитата Сообщение от eddilou Посмотреть сообщение
убрав структ компил ругается
Он же допотопный, да ещё и Борланд...
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
30.03.2011, 18:04  [ТС] 51
Цитата Сообщение от Deviaphan Посмотреть сообщение
У тебя слишком сложная логика для for. Именно с человеческой точки зрения. Т.е. всё управление циклом должно быть в его шапке, а у тебя не так. Это слишком сложно для for, лучше while. А наращивать i точно так же.) ++i.)

Он же допотопный, да ещё и Борланд...
ну как я понимаю так да?
while(getch()!=27){}
или черехз do while можно
но суть не в этом ниче не измениться
проблема в том что не та к фурычит немного в чем проблема так и не понимаю
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.03.2011, 19:55  [ТС] 52
Deviaphan, что посоветуешь то насчет загрязнения printf??
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
31.03.2011, 20:08 53
printf не пользуюсь.)
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.03.2011, 21:34  [ТС] 54
а чем пользуешься или как переделать чтоб все ок было???
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 06:56 55
cin, cout
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
01.04.2011, 16:25  [ТС] 56
Цитата Сообщение от Deviaphan Посмотреть сообщение
cin, cout
и не ожете дать урок по использованию этой конструкции cin - cout чем лучше они от printf-scanf?
cin count - библиотека iostream.h?
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 17:00 57
Урок.)
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
void main()
{
    int a(0);
    cin >> a;
    cout << a;
}
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
01.04.2011, 18:14  [ТС] 58
Deviaphan, попробовал то что предложили, результат тот же самый
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 19:03 59
Цитата Сообщение от eddilou Посмотреть сообщение
что посоветуешь то насчет загрязнения printf
Я вообще не понял, о чём речь.)
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
01.04.2011, 19:16  [ТС] 60
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я вообще не понял, о чём речь.)
речь о том, почему загрязняется принтф "ратинг"
0
01.04.2011, 19:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2011, 19:16
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru