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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.81
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
26.03.2011, 21:23     Структуры: Списки студентов #1
всем привет
вот такое задание мне дано:
Описать массив структур, содержащих информацию о результатах сессии: {фамилия; группа; дисциплина; оценка}. Распечатать фамилии студентов, не имеющих оценок ниже «хорошо».

делаю на 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();
}
пояснте, что не так? почему он не хочет сравнивать? и что не так в моем коде?
жду советов, поравки и замечаний, хочу понять и научиться..
заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
04.04.2011, 15:15  [ТС]     Структуры: Списки студентов #81
Цитата Сообщение от Deviaphan Посмотреть сообщение
Вопрос только в том, чтобы убрать счётчик количества узлов из описания узла. Всё. Остальное без изменений.
хм.. понятненко н на этом хоть спс)))
как сделать чтоюб в одной структуре была фамилия гр дисц и оценка но чтоб массивы бы ли у дц и оценки ? это надо для каждой структуры выделять для чар место для массива типа чар?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.04.2011, 15:20     Структуры: Списки студентов #82
Можно создать массив дисциплин, групп и оценок.
В каждой группе хранить список индексов в массиве дисциплин (ведь у всех студентов в группе одни дисциплины)
В описании студента хранить индекс в массиве групп (автоматически становятся известны дисциплины)
Ну и оценки, это индексы в списке оценок.
Т.е. строковые описания будут выделены один раз для всех студентов.
Это называется "Реляционные БД".)
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
04.04.2011, 15:23  [ТС]     Структуры: Списки студентов #83
Цитата Сообщение от Deviaphan Посмотреть сообщение
Можно создать массив дисциплин, групп и оценок.
В каждой группе хранить список индексов в массиве дисциплин (ведь у всех студентов в группе одни дисциплины)
В описании студента хранить индекс в массиве групп (автоматически становятся известны дисциплины)
Ну и оценки, это индексы в списке оценок.
Т.е. строковые описания будут выделены один раз для всех студентов.
Это называется "Реляционные БД".)
мб напишешь на сишном языке а то не совсем понял, я понял но не понял програмную реализацию данного...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.04.2011, 15:31     Структуры: Списки студентов #84
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[...] ];
Вот как-то так.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
04.04.2011, 15:46  [ТС]     Структуры: Списки студентов #85
строковое имя групппы и дисц это как? т.е. тому чему присвоим?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.04.2011, 16:05     Структуры: Списки студентов #86
Т.е. когда надо на печать вывести, например.
Это я показал, как получить индексированное значение.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
04.04.2011, 16:22  [ТС]     Структуры: Списки студентов #87
Цитата Сообщение от Deviaphan Посмотреть сообщение
Т.е. когда надо на печать вывести, например.
Это я показал, как получить индексированное значение.
эх.. придется многое мпеделывать по сравнению с тем что я на коляпал тогда((
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
04.04.2011, 23:08     Структуры: Списки студентов #88
Ворнинги можно игнорировать. Массивы, видимо, придется выделить динамически.
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2011, 11:07     Структуры: Списки студентов
Еще ссылки по теме:

C++ Создание структуры Список студентов
Перевести L студентов с 1-й группы в другую (списки) C++
C++ Список студентов (структуры)

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

Или воспользуйтесь поиском по форуму:
sav241
5 / 5 / 0
Регистрация: 04.04.2011
Сообщений: 37
05.04.2011, 11:07     Структуры: Списки студентов #89
Вот тебе прога, двунаправленный спикок структур, уберешь ссылку назад будет одноноправленнй, создается считывая данные из файла, при это сразу же сортируется по году рождения..
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();
}
Yandex
Объявления
05.04.2011, 11:07     Структуры: Списки студентов
Ответ Создать тему
Опции темы

Текущее время: 04:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru