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

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

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

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

06.05.2009, 21:05. Просмотров 665. Ответов 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;
 }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2009, 21:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сведения о студенте (C++):

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

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

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

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

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

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

6
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
07.05.2009, 08:20 #2
Попробуй вынести сортировку по дате в отдельный цикл.
0
Olk@
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 9
07.05.2009, 13:27  [ТС] #3
Я уже пробовала! Все равно не работает!
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
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) и сортировать уже по этому числу.
0
Olk@
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 9
07.05.2009, 19:03  [ТС] #5
первый вариант пробовала, но не получается (правда так и не поняла почему!!!). А вот второй не поняла! Это надо массив заводить?
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 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;
}
0
Olk@
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 9
07.05.2009, 20:28  [ТС] #7
спасибо! сейчас попробую!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2009, 20:28
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
07.05.2009, 20:28
Ответ Создать тему
Опции темы

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