Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2019, 15:50   #1
FoiZ
Новичок
Джуниор
 
Регистрация: 24.04.2019
Сообщений: 2
По умолчанию Сортировка.

Вводятся :имя , год рождения , средний балл и номер класса(7б,9г...). Нужно отсортировать по году рождения или по среднему баллу. Создать возможность вывода на экран всех учеников данного класса(допустим всех учеников 6а ). Вывод учеников по классу я оставил в втором кейсе. Сортировка по году и среднему баллу - 2 и 3 кейсы. Помогите дописать код , чтоб появилась возможность выводить список учеников класса.
Код:
  #include <iostream>
#include <conio.h>
using namespace std;
struct student
{
	char *name;
	int year;
	double sb;
};
void Init(student a[],int length)
{
	for (int i(0);i<length;i++)
	{
		cout<<i+1<<":\n";
		cout << "Введите имя студента: ";
		a[i].name =new char[40];
		cin.get();
		cin.getline (a[i].name,40);
		cout<<"Введите год рождения: ";
		while (!(cin>>a[i].year) || a[i].year <1900 || a[i].year > 2019)
		{
			cout << "Ошибка ввода ! Введите корректные данные!\n\n";
			cout<<"Введите год рождения: ";
		}
		cout <<"Введите средний балл: ";
		while(!(cin >> a [i].sb) || a[i].sb <0.0 )
		{
			cout << "Ошибка ввода ! Введите корректные данные!\n\n";
			cout<<"Введите средний балл: ";
		}
		cout <<endl;
	}
	cout<<"1.Перезаписать данные"<<endl;
		cout<<"2.Отсортировать"<<endl;
		cout<<"3.Отсортировать по дате"<<endl;
		cout<<"4.Отсортировать по с.б."<<endl;
		cout<<"5.Отмена"<<endl;
}
void ShowStudent( const student a[],int length)
{
	for (int i(0);i<length;i++)
	{
		cout<<i+1<<"Студент:\n";
		cout<<"Имя:"<<a[i].name<<endl;
		cout <<"Год рождения:"<<a[i].year<<endl;
		cout<<"Средний балл:" <<a[i].sb<<endl;
		cout <<"=====================";
		cout<<endl;
		
	}
	    cout<<"1.Перезаписать данные"<<endl;
		cout<<"2.Вывести список класса"<<endl;
		cout<<"3.Отсортировать по дате"<<endl;
		cout<<"4.Отсортировать по с.б."<<endl;
		cout<<"5.Отмена"<<endl;
}
void  Jop(student a[],int length)//сортировка по дате
{
	
  int step = length / 2;
  while (step > 0)
  {
    for (int i = 0; i < length- step; i++)
    {
      int j = i;
      while (j >= 0 && a[j].year > a[j + step].year)
      {
        int temp = a[j].year;
        a[j].year = a[j + step].year;
        a[j + step].year = temp;
        j--;
      }
    }
    step = step / 2;
  }
  for (int e = 0; e <1; e++)
  {
for (int i(0);i<length;i++)
	{
		cout<<i+1<<"Студент:\n";
		cout<<"Имя:"<<a[i].name<<endl;
		cout <<"Год рождения:"<<a[i].year<<endl;
		cout<<"Средний балл:" <<a[i].sb<<endl;
		cout <<"=====================";
		cout<<endl;
	}	
	}
	    cout<<"1.Перезаписать данные"<<endl;
		cout<<"2.Вывести список класса"<<endl;
		cout<<"3.Отсортировать по дате"<<endl;
		cout<<"4.Отсортировать по с.б."<<endl;
		cout<<"5.Отмена"<<endl;
}
	void Serb(student a[],int length)// сортировка по с.б.
	{
			
  int step = length / 2;
  while (step > 0)
  {
    for (int i = 0; i < length- step; i++)
    {
      int j = i;
      while (j >= 0 && a[j].sb > a[j + step].sb)
      {
        int temp = a[j].sb;
        a[j].sb = a[j + step].sb;
        a[j + step].sb = temp;
        j--;
      }
    }
    step = step / 2;
  }
  for (int e = 0; e <1; e++)
  {
	
	for (int i(0);i<length;i++)
	{
		cout<<i+1<<"Студент:\n";
		cout<<"Имя:"<<a[i].name<<endl;
		cout <<"Год рождения:"<<a[i].year<<endl;
		cout<<"Средний балл:" <<a[i].sb<<endl;
		cout <<"=====================";
		cout<<endl;
	}	
	}
	    cout<<"1.Перезаписать данные"<<endl;
		cout<<"2.Вывести список класса"<<endl;
		cout<<"3.Отсортировать по дате"<<endl;
		cout<<"4.Отсортировать по с.б."<<endl;
		cout<<"5.Отмена"<<endl;
}
void Free(student a[], int length)
{
	for (int i(0); i<length;i++)
	{
		delete [] a[i].name;
	}
}
void menu(){ }
int main()
{
	setlocale (LC_ALL, "rus");
	cout <<"Студенты\n\n";
	int n;
	cout<< "Введите количество студентов:";
	cin>>n;
	cout << " Нажмите 1"<<endl;
	student *st = new student[n];
	char c;
	do
	{
		menu();
		cin>>c;
		switch (c)
		{
			case '1' : system("cls"); Init(st,n); break;
			case '2' : system("cls"); ShowStudent(st,n);break;
			case '3' : system("cls"); Jop(st,n);break;
			case '4' : system("cls"); Serb(st,n) ;break;
			case '5' : break;
			default: cout<<"Неверный пункт меню!\n\n";
		}
	}
	while (c != '5');
	
	Free(st,n);
	delete [] st;
	return 0;
}
FoiZ вне форума Ответить с цитированием
Старый 24.04.2019, 15:52   #2
FoiZ
Новичок
Джуниор
 
Регистрация: 24.04.2019
Сообщений: 2
По умолчанию

Ещё при сортировки по году или среднему баллу меняются местами только объекты , которые сортируются. Помогите решить и эту проблему .
FoiZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Быстрая сортировка(сортировка хаора) с++ LustHunter Помощь студентам 3 07.10.2011 19:37
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32