Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка строк в файле, предоставляется структура данных 
:(
    Опции темы
lnahopeless
Дата 14.1.2017, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.1.2017

Репутация: нет
Всего: нет



Имеется текстовый файл со списком студентов, их курсом и оценками.

Petrov P.P. 2 4.7
Sidorov S.S. 1 3.9
Smirnova A.A. 3 5.0
Mironova M.M. 1 4.0
Pavlov D.D. 3 4.6
Filatova R.R. 2 4.2
Semevov G.G. 4 4.8
Orlova O.O. 3 3.9
Sokolova K.K. 1 4.6
Volkova V.V. 1 5.0
Alekseeva A.A. 3 4.8

В качестве задания предоставляется структура данных. Для данной структуры необходимо написать программу, в которой заданная по условию структура является информационным полем класса, в котором определены следующие методы:
1. Чтение из файла
2. Вывод на экран
3. Сортировка записей по определенному полю.

Первое и второе задания я выполнила, а сортировка не получается (хочу отсортировать студентов в алфавитном порядке).

Код

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string.h>
#include <iomanip>
 
using namespace std;
 
const int L = 21;
const int N = 100;
 
struct student
{
    char name[L];
    int kurs;
    float rating;
};
 
class massiv
{
    student x[N];
    int n;
 
public:
    massiv() { n = 0; }
    massiv(massiv &z);
    
    void inputFileStudent();
    void outputStudent();
    void SortirovkaStudent();
};
void massiv::inputFileStudent()
{
    ifstream fin;
    char file[L];
    char iniz[5];
 
    n = 0;
 
    cout << "Name file? ";
    cin >> file;
    fin.open(file);
    if (fin.fail()) cout << "Error" << endl;
    do
    {
        fin >> x[n].name >> iniz >> x[n].kurs >> x[n].rating;
        strcat_s(x[n].name, " ");
        strcat_s(x[n].name, iniz);
 
        n++;
    } while (fin.good());
    n--;
    fin.close();
    cout << "file read" << endl;
    _getch();
}
 
 
void massiv::outputStudent()
{
    int i;
    cout << left;
    for (i = 0; i < n; i++)
 
        cout << setw(3) << i + 1 << setw(20) << x[i].name << setw(20) << x[i].kurs << setw(20) << x[i].rating << endl;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    massiv a;
    int j;
    while (1)
    {
 
        cout << "1 Vvod students iz file" << endl;
        cout << "2 Vivod students na ecran" << endl;
        cout << "3 Sortirovka students" << endl;
                cout << "4 End" << endl;
        cout << "Vibor pozicii: ";
        cin >> j;
        switch (j)
        {
        case 1: a.inputFileStudent(); break;
        case 2: a.outputStudent(); break;
        case 3: a.SortirovkaStudent(); break;
        case 4: cout << "rabota zavershena"; exit(0);
        default: cout << "Error" << endl;
            _getch();
 
        }
    }
    return 0;
}

PM MAIL   Вверх
Olej
Дата 16.1.2017, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 30.11.2016

Репутация: нет
Всего: нет



Цитата(lnahopeless @ 14.1.2017,  18:45)
Код

class massiv
{
    student x[N];
    int n;
...


Очень плохо!

Сделайте хотя бы так:
Код

#include <vector>
...
class massiv : protected vector<student> {
... 

Ещё лучше (с учётом последующей сортировки):
Код

#include <list>
...
class massiv : protected list<student> {
... 


Добавлено @ 20:49
Цитата(lnahopeless @ 14.1.2017,  18:45)
Первое и второе задания я выполнила, а сортировка не получается (хочу отсортировать студентов в алфавитном порядке).

Код

struct student
{
    char name[L];
    int kurs;
    float rating;
};
 
class massiv
{
    student x[N];
    int n;
... 
int _tmain(int argc, _TCHAR* argv[])
{
    massiv a;
...
}

Для сортировки можете использовать готовые алгоритмы быстрой сортировки из библиотек STL  
Код

#include <algorithm> 

bool less( student& f, student& s ) {
   return f.name < s.name;
}
...
    massiv a;
    sort( a, a + N, less );
...
}


Это сообщение отредактировал(а) Olej - 16.1.2017, 20:49
PM MAIL   Вверх
vol4ek
Дата 16.1.2017, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



а если преподу не понравится сортировка STL то вот пример
Код

#include <iostream>

#define N  5    /* максимальное количество строк */
using namespace std;

int main()
{  
    int i, j;
    char words[N][30], cur[30];
    cout<<"Your words:\n";
    for(i=0;i<N;i++)
        cin.getline(words[i],30);
    for(i=0;i<N-1;i++)
        for(j=i+1;j<N;j++)
           if(strcmp(words[i],words[j])>0)
               {
                   strcpy(cur,words[i]);
                   strcpy(words[i],words[j]);
                   strcpy(words[j],cur);
               }
    cout<<"Results:\n";
    for(i=0;i<N;i++)
    cout<<words[i]<<"\n";
    cin.sync(); cin.get();

    return 0;
}

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1151 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.