Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > С++ исправить ошибки в структуре STUDENT


Автор: Kseni1995 12.5.2014, 15:37
Уважаемые программисты, проверьте пожалуйста этот код, вроде все правильно но не выводит сортировку. А еще большая просьба: может вы предложите более простой вариант решения задачи!
 Задание такое:
описать структуру с именем STUDENT, содержащую следующие поля:
а)фамилия и имя(строка 15 символов),
б) год рождения(целое неотриц. число),
в)номер группы( число целое или строка из 3 символов),
г)оценки за сессию по 4 предметам( массив из 4 типа float)
В этой программе, реализовать следующие функции:1)вывести список студентов, фамилии которых начинаются на букву В, с указанием года их рождения; список вывести в упорядоченном по возрасту виде(начиная со старшего). 
Код

#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
struct STUDENT // структура STUDENT
{ 
  string name;
  int year;
  int group; 
  static const int mark_size=4;
  float marks[mark_size];
  STUDENT();
  STUDENT(const STUDENT &rhs);
  void input(){
     cout << "Введите фамилию студента " << endl; 
     cin >>name;
     cout<<" Год рождения "<<endl;
     cin>> year;
     cout << "Введите номер группы " << endl; 
     cin >> group; 
     cout << "Введите "<< mark_size <<" оценки " << endl; 
     for (int i = 0; i < mark_size; i++) 
     cin >> marks[i];
  }

 void output(){
  cout << "Фамилия " << name<<endl;
  cout<< "Год " << year << endl;
  cout << "Группа " << group<< endl; 
  cout <<" Oценки " << endl; 
  for (int i = 0; i < mark_size; i++) 
  cout << marks[i]<<" "; 
  cout << endl <<"_______________" << endl;
 }
};

STUDENT::STUDENT(){
 name="";
 year=0;
 group=0;
 for(int i=0; i<mark_size; ++i)marks[i]=0;
}

STUDENT::STUDENT(const STUDENT &rhs){
 name=rhs.name;
 year=rhs.year;
 group=rhs.group;
 for(int i=0; i<mark_size; ++i)marks[i]=rhs.marks[i];
}

int main (){
SetConsoleCP (1251); SetConsoleOutputCP (1251);
const int students_size = 6; // количество студентов
STUDENT student[students_size];//было students))
for (int i = 0; i < students_size; i++) 
 student[i].input(); //
cout<<"Введено:"<<endl<<endl;
for (int i = 0; i < students_size; i++)
 student[i].output();
int count_of_B = 0;
for (int i = 0; i < students_size; i++)
if(student[i].name.c_str()[0] == 'В') count_of_B ++ ;

STUDENT *students = new STUDENT[count_of_B];

int ind =0;
for (int i = 0; i < students_size; i++)
if(student[i].name.c_str()[0] == 'В') students[ind ++ ] = student[i]; 

//дальше имя students нам уже подходит а вот размер
//переписываем ниже все students_size на count_of_B)) 
for (int i=0; i<count_of_B-1; i++) {
 for (int j=0; j<(count_of_B-i); j++) {
  if ( students[j].year > students[j+1].year) {//
 STUDENT Temp = students[j];//
  students[j] = students[j+1];
  students[j+1] = Temp;
  }
 }
}

cout<<"Сортировано:"<<endl<<endl;
for (int i = 0; i < count_of_B; i++)
 students[i].output(); 
system("pause");
return 0;
}



Спасибо заранее!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)