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

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

26.03.2011, 21:23. Показов 9424. Ответов 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
04.04.2011, 15:15  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Deviaphan Посмотреть сообщение
Вопрос только в том, чтобы убрать счётчик количества узлов из описания узла. Всё. Остальное без изменений.
хм.. понятненко н на этом хоть спс)))
как сделать чтоюб в одной структуре была фамилия гр дисц и оценка но чтоб массивы бы ли у дц и оценки ? это надо для каждой структуры выделять для чар место для массива типа чар?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
04.04.2011, 15:20
Можно создать массив дисциплин, групп и оценок.
В каждой группе хранить список индексов в массиве дисциплин (ведь у всех студентов в группе одни дисциплины)
В описании студента хранить индекс в массиве групп (автоматически становятся известны дисциплины)
Ну и оценки, это индексы в списке оценок.
Т.е. строковые описания будут выделены один раз для всех студентов.
Это называется "Реляционные БД".)
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
04.04.2011, 15:23  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Можно создать массив дисциплин, групп и оценок.
В каждой группе хранить список индексов в массиве дисциплин (ведь у всех студентов в группе одни дисциплины)
В описании студента хранить индекс в массиве групп (автоматически становятся известны дисциплины)
Ну и оценки, это индексы в списке оценок.
Т.е. строковые описания будут выделены один раз для всех студентов.
Это называется "Реляционные БД".)
мб напишешь на сишном языке а то не совсем понял, я понял но не понял програмную реализацию данного...
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
04.04.2011, 15:31
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
const char * rate[] = {"one", "two", "three", four, "five"};
const * group[] = {"gr1", "gr2" , "gr3"};
const char * disc[] = {"math", "rus", "eng"};
 
struct Group
{
     int name; / name = 1
     int * disc; // disc[0] = 1; disc[1] = 3;
};
 
struct Card
{
     int group; // = 1;
     char * name;
     ...
};
 
struct List
{
     Card * node;
     int N;
     int   PR;
};
 
Group groups[3];
// init groups
 
List list;
 строковое_имя_группы = groups[ list.node[1].group.name ];
 строковое_дисциплина = disc[ list.node[1].group.disc[...] ];
Вот как-то так.
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
04.04.2011, 15:46  [ТС]
строковое имя групппы и дисц это как? т.е. тому чему присвоим?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
04.04.2011, 16:05
Т.е. когда надо на печать вывести, например.
Это я показал, как получить индексированное значение.
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
04.04.2011, 16:22  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Т.е. когда надо на печать вывести, например.
Это я показал, как получить индексированное значение.
эх.. придется многое мпеделывать по сравнению с тем что я на коляпал тогда((
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
04.04.2011, 23:08
Ворнинги можно игнорировать. Массивы, видимо, придется выделить динамически.
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
 
typedef struct Card {
        int  surname;
        int  group;
        int  discipline;
        int  mark;
} Card;
 
void CardInit(struct Card *card, int surname_id, int group_id,
                                 int  discipline_id, int  mark) {
  card->surname = surname_id;
  card->group = group_id;
  card->discipline = discipline_id;
  card->mark = mark;
}
 
void CardPrint(struct Card *card, char *surnames[], char *groups[],
               char *disciplines[]) {
  printf("Surname: %s\nGroup: %s\nDiscipline: %s\nMark: %d\n-----\n",
         surnames[card->surname], groups[card->group],
         disciplines[card->discipline], card->mark);
}
 
typedef struct CardStatistics {
  int surname;
  int group;
  int is_good;
} CardStatistics;
 
void CardStatisticsInit(struct CardStatistics *card_statistics,
                        int surname_id, int group_id) {
    card_statistics->surname = surname_id;
    card_statistics->group = group_id;
    card_statistics->is_good = 1;
}
 
void CardStatisticsCorrect(
       struct CardStatistics card_statistics[],
       struct Card *card) {
  if (card->mark >= 4)
    return;
  size_t result = 0;
  while (!(card_statistics[result].surname == card->surname &&
         card_statistics[result].group == card->group))
    ++result;
  card_statistics[result].is_good = 0;
}
 
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  char *groups[] = { "101", "201", "301" };
  char *disciplines[] = { "math", "physics", "biology", "history" };
  char *surnames[] = { "Petrov", "Ivanov", "Sidorov", "Kuznetsov" };
  size_t group_count = sizeof(groups) / sizeof(*groups);
  size_t discipline_count = sizeof(disciplines) / sizeof(*disciplines);
  size_t surname_count = sizeof(surnames) / sizeof(*surnames);
 
  size_t card_array_size = group_count * discipline_count * surname_count;
  //struct Card cards[card_array_size];
  struct Card *cards = (struct Card*)malloc(sizeof(struct Card) *
                                            card_array_size);
 
  int group_id, discipline_id, surname_id, card_id = 0;
  for (surname_id = 0; surname_id < surname_count; ++surname_id)
    for (group_id = 0; group_id < group_count; ++group_id)
      for (discipline_id = 0; discipline_id < discipline_count; ++discipline_id)
        CardInit(&cards[card_id++], surname_id, group_id,
                 discipline_id, rand() % 3 + 3);
 
  for (card_id = 0; card_id < card_array_size; ++card_id)
    CardPrint(&cards[card_id], surnames, groups, disciplines);
 
  size_t card_statistics_size = group_count * surname_count;
  int card_statistics_id = 0;
  //struct CardStatistics card_statistics[card_statistics_size];
  struct CardStatistics *card_statistics = (struct CardStatistics*)
         malloc(sizeof(struct CardStatistics) * card_statistics_size);
  for (surname_id = 0; surname_id < surname_count; ++surname_id)
    for (group_id = 0; group_id < group_count; ++group_id)
      CardStatisticsInit(&card_statistics[card_statistics_id++],
                         surname_id, group_id);
 
  for (card_id = 0; card_id < card_array_size; ++card_id)
    CardStatisticsCorrect(card_statistics, &cards[card_id]);
 
  for (card_statistics_id = 0; card_statistics_id < card_statistics_size;
       ++card_statistics_id) {
    if (card_statistics[card_statistics_id].is_good)
      printf("Student %s of group %s has all marks good.\n",
             surnames[card_statistics[card_statistics_id].surname],
             groups[card_statistics[card_statistics_id].group]);
  }
 
  free(card_statistics);
  free(cards);
 
  return 0;
}
0
5 / 5 / 0
Регистрация: 04.04.2011
Сообщений: 37
05.04.2011, 11:07
Вот тебе прога, двунаправленный спикок структур, уберешь ссылку назад будет одноноправленнй, создается считывая данные из файла, при это сразу же сортируется по году рождения..
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
// AnketaNewSypper.cpp : Defines the entry point for the console application.
//
#include <fstream>
#include "StdAfx.h"
#include <iostream>
#include "stdafx.h"
#include <Windows.h>
#include <math.h>
#include <string.h>
#include <fstream>
using namespace std;
 
struct anketa {
            char *fam;
            unsigned int god;
            anketa *next;
            anketa *over;
};
anketa *first=NULL;
    
ifstream file1("file.txt");
 
  anketa *getData(){ //создание нового элемента списка, считывание его с клавиатуры
      
      anketa *a=new anketa;
          if(!file1.eof()){
          a->fam= new char [255];
          file1 >> a->fam;   
          }else{delete a;return NULL; }
      
      if(!file1.eof()){
          file1 >> a->god;
          }else{delete a; return NULL; }
     
    a->next=NULL;
    a->over=NULL;
    return a;
}
void createList1(){ //создает сортированный список по году, сортируется по ходу создания
    anketa *newEl; // создание нового элемента, считывание с клавиатуры,операция присваивания
    do{
  newEl=getData();
 
  if(newEl==NULL)break;
    if (!first) {first=newEl;}
    else {
         if (newEl->god<first->god) {
            newEl->next=first;
            first=newEl;
 
         }
         else { //вставка элемента
             anketa *curr=first;
             BOOL ins = FALSE;
             while (curr->next!=NULL) {
                 if (curr->next->god>newEl->god) {
                     newEl->next=curr->next;
                     curr->next=newEl;
                     newEl->over=curr;//sdgsg
                     ins = true;
                     break;
                 }
                 curr=curr->next;
             }
             if (!ins) {
                 curr->next = newEl;
                 newEl->over=curr;//sdgsg
             }
         }  
   }
 
    }while(true);
}
 
 
 
void show () {
    anketa *curr=first;
    cout<<"-------------------"<<endl;
    while (curr){
         cout <<curr->fam<<" "<<curr->god<<endl;
         curr=curr->next;
    }
}
 
void drop (){
    anketa *curr=first;
    anketa *delEl;
    while (curr) {
        delEl=curr;
        curr=curr->next;
        delete delEl;
    }
 
}
 
void main(){
 
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     int t;
     cout<<"1-для сортировки по дате, , 3 - для показа списка"<<endl;
     cin>>t;
     if(t==1){
     createList1();
     cin>>t;
     }
  
     if(t==3){
         show();
     }      
 
     drop ();
     file1.close();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2011, 11:07

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
89
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru