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

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

Войти
Регистрация
Восстановить пароль
 
Olk@
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 9
#1

Сведения о студенте - C++

06.05.2009, 21:05. Просмотров 660. Ответов 6
Метки нет (Все метки)

привет всем!
может кто то поможет найти ошибку в коде? задача такая: Сведения о студенте: фамилия (строка), курс, шифр группы (строка), адрес (строка), дата рождения. По текущей дате и сведениям о некотором количестве (не более N) студентов получить список студентов данной группы, отсортированных по возрастанию расстояний до их ближайших дней рождения. Если студентов данной группы нет, выдать соответствующее сообщение.
по месяцам сортирует, а по дням не хочет
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 <iostream>
#include <fstream>
#include <string.h>
using namespace std;
 
const int dfio=80, c=50;
 
struct date
{
        int d,m,g;
};
struct student
{
 char fio[dfio];
 int kurs;
 char grup[5];
 char adres[100];
 date dr;
};
 
ifstream fin;
ofstream fout;
 
 
// сортировка по дате
void sort(student st[], int u, date td) 
{int i, j;
for (i=u-1; u>0; u--)
  for (j=0; j<i; j++)  
  {int a, b;
   if (td.m>=st[j].dr.m) 
       a=abs(td.m-st[j].dr.m-12);
   else a=abs(td.m-st[j].dr.m);
    if (td.m>=st[j+1].dr.m)
        b=abs(td.m-st[j+1].dr.m-12);
    else b=abs(td.m-st[j+1].dr.m);
      if (a>b)
      swap(st[j],st[j+1]);
      for (int k=0; k<u; k++)
       if (st[k].dr.d>st[k+1].dr.d && st[k].dr.m==st[k+1].dr.m)
         swap(st[k],st[k+1]);
      
      }
}
 
 
 
int main()
{
     
    char gr[5];// номер группы
    cout << "gpuppu "<< endl;
    cin.getline(gr,5);
    
   date tdat; // текущая дата
   cout<<"Vvedite datu "<<endl;
   cin>>tdat.d >> tdat.m >> tdat.g;
    
 
  student st[c], b;
  int u=0;
  char rab[dfio];
 
  //открытие файла
  fin.open("dan.txt");
  if (!fin){cout<< "Oshibka"<<endl;
  return 1;}
 
 
//чтение из файла
  while (fin.getline(b.fio,dfio))
  {
      fin>>b.grup;
      fin>>b.kurs;
      fin>>b.adres;
      fin>>b.dr.d>>b.dr.m>>b.dr.g;
      fin.getline(rab,dfio);
      if (strcmp(b.grup,gr)==0)
        {
            st[u]=b;
            u++;
        }
  }
  //закрытие файла
  fin.close();
 
//открытие нового файла
 
 fout.open("Rez.txt");
  if(!fout){cout<< "Oshibka"<<endl;
  return 1;}
 
  if (u==0){fout<< "net studentov gruppi"<<endl;}
  else { sort(st,u,tdat);
         for (int i=0; i<u; i++)
         {//int a=abs(tdat.m-st[i].dr.m);
             fout << st[i].fio<< "  "<< st[i].dr.d<<" "<<st[i].dr.m <<" "<<st[i].dr.g <<endl;
         }
      }
 
  fout.close();
     return 0;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2009, 21:05     Сведения о студенте
Посмотрите здесь:

структура о студенте - C++
Описать структуру заданной информации о студенте : фамилия, номер группы, факультет, год поступления, год рождения. Оценить и...

Вывести информацию о студенте из списка структур - C++
Всем доброго времени суток! У меня есть структура, что-то типо: struct Decanat { char *name; int group; int kurs; int...

Создайте класс для хранения данных о студенте - C++
1. Создайте класс для хранения данных о студенте: фамилия, специальность, курс, успеваемость (массив из пяти элементов). В классе должны...

Структура Student, вывод информации о заданном студенте - C++
1. Описать запись с именем student содержащую следующие поля: 1) Фамилия и имя 2) Предмет 3) Оценка 2. Написать...

Создать массив записей размером N с информацией о студенте - C++
Создать массив записей размером N с информацией о студенте: ФИО (string), Пол (char), год рождения (Integer), стипендия (real), адрес....

Разработать класс для представления сведений о студенте - C++
Разработать класс для представления сведений о студентах: фамилия, группа, массив из четырёх оценок. Класс должен включать весь необходимый...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
07.05.2009, 08:20     Сведения о студенте #2
Попробуй вынести сортировку по дате в отдельный цикл.
Olk@
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 9
07.05.2009, 13:27  [ТС]     Сведения о студенте #3
Я уже пробовала! Все равно не работает!
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
07.05.2009, 14:52     Сведения о студенте #4
В смысле еще одну сортировку сделать, только по дате после сортировки по месяцу
C++
1
2
3
4
for (i=u-1; u>0; u--)
   for (int k=0; k<i; k++)
       if (st[k].dr.d>st[k+1].dr.d && st[k].dr.m==st[k+1].dr.m)
          swap(st[k],st[k+1]);
еще можно преобразовать <день.месяц> в <день в году>(т.е. 1 янв = 1, 31 дек = 365) и сортировать уже по этому числу.
Olk@
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 9
07.05.2009, 19:03  [ТС]     Сведения о студенте #5
первый вариант пробовала, но не получается (правда так и не поняла почему!!!). А вот второй не поняла! Это надо массив заводить?
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
07.05.2009, 19:24     Сведения о студенте #6
Цитата Сообщение от Olk@ Посмотреть сообщение
А вот второй не поняла! Это надо массив заводить?
Вот держи функцию (точнее две), которые будут высчитывать номер дня в году(точнее количество дней прошедших с начала года для какой-либо даты) с учетом високосности:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool IsLeapYear(int year)
{
  return !(year % 4) && (!(year % 400) || (year % 100));
}
 
int DayCount(const date& dt)
{
  const int day_in_month[] = {
    31, 28+IsLeapYear(dt.g), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  };
 
  int day_count = 0;
 
  for(int i = 0; i < dt.m - 1; ++i)
    day_count += day_in_month[i];
 
  return day_count + dt.d;
}
Использование:
C++
1
2
3
4
5
6
7
int main()
{
  date dt = {2, 12, 2008 };
  int day_number = DayCount(dt);
  ...
  return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2009, 20:28     Сведения о студенте
Еще ссылки по теме:

Переделать запись в файл информации о студенте через структуру - C++
Помогите пожалуйста немного отредактировать код. Преподаватель просит сделать с помощью структуры. Вот, что требуется: &quot;Используй...

Объявить и инициализировать структуру, позволяющую отобразить информацию о каждом студенте - C++
Еще нужна помощь в написании программы. Известна информация о группе студентов – фамилия, имя, год рождения, пол, рост. Объявить и...

Создайте класс Student, который будет содержать информацию о студенте - C++
Создайте класс Student, который будет содержать информацию о студенте. С помощью механизма наследования, реализуйте класс Aspirant...

Нет повести пичальнее на свете, чем повесть о студенте и сессии - C++
Добрый день всем. Вот вот у меня начнется курсовой проект по среде C++Builder 6 , и в этом проблема-я в основном на Delphi больше...


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

Или воспользуйтесь поиском по форуму:
Olk@
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 9
07.05.2009, 20:28  [ТС]     Сведения о студенте #7
спасибо! сейчас попробую!!!
Yandex
Объявления
07.05.2009, 20:28     Сведения о студенте
Ответ Создать тему
Опции темы

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