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

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

26.03.2011, 21:23. Показов 9993. Ответов 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();
}
пояснте, что не так? почему он не хочет сравнивать? и что не так в моем коде?
жду советов, поравки и замечаний, хочу понять и научиться..
заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Deviaphan Посмотреть сообщение
Внимательно-внимательно посмотри на строку 52. И учти, что имена переменных ничего не значат. Две переменных с одинаковым именем, но в разных областях видимости - это РАЗНЫЕ переменные.
Поэтому посмотри код внимательнее.
В функцию Принт передаются не инициализированные переменные, соответственно печатается мусор.

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

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

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

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

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

Добавлено через 58 секунд
Или нет.)
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 20:07  [ТС]
36 строк бред я ее забыл стереть и компилятор на нее не реагирует воть
насчет насчет делите я писал и как говорили delite[]=card компилятор ругается
насчет struct, о какой именно говорите, если о том где я пишу на 11 и 19 строчке то без них никак, а больше и нету поясните пож-та
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 20:11
ОТКУДА ты взял "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  [ТС]
а как тогда буду наращивать i?? если через whaile
по-моему for тут проще некуда дабы наращиваем нажимая энтер если же не энтер то фор проверяет условия и выходит
насчет 16 строки, убрав структ компил ругается так что там без этого никак
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
30.03.2011, 06:03
У тебя слишком сложная логика для for. Именно с человеческой точки зрения. Т.е. всё управление циклом должно быть в его шапке, а у тебя не так. Это слишком сложно для for, лучше while. А наращивать i точно так же.) ++i.)
Цитата Сообщение от eddilou Посмотреть сообщение
убрав структ компил ругается
Он же допотопный, да ещё и Борланд...
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
30.03.2011, 18:04  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
У тебя слишком сложная логика для for. Именно с человеческой точки зрения. Т.е. всё управление циклом должно быть в его шапке, а у тебя не так. Это слишком сложно для for, лучше while. А наращивать i точно так же.) ++i.)

Он же допотопный, да ещё и Борланд...
ну как я понимаю так да?
while(getch()!=27){}
или черехз do while можно
но суть не в этом ниче не измениться
проблема в том что не та к фурычит немного в чем проблема так и не понимаю
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.03.2011, 19:55  [ТС]
Deviaphan, что посоветуешь то насчет загрязнения printf??
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
31.03.2011, 20:08
printf не пользуюсь.)
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.03.2011, 21:34  [ТС]
а чем пользуешься или как переделать чтоб все ок было???
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 06:56
cin, cout
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
01.04.2011, 16:25  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
cin, cout
и не ожете дать урок по использованию этой конструкции cin - cout чем лучше они от printf-scanf?
cin count - библиотека iostream.h?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 17:00
Урок.)
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  [ТС]
Deviaphan, попробовал то что предложили, результат тот же самый
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 19:03
Цитата Сообщение от eddilou Посмотреть сообщение
что посоветуешь то насчет загрязнения printf
Я вообще не понял, о чём речь.)
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
01.04.2011, 19:16  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я вообще не понял, о чём речь.)
речь о том, почему загрязняется принтф "ратинг"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2011, 19:16

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru