Пожалуйста, помогите с заданием...

Здравствуйте! Есть задание, и вот в чём его суть:

В некотором классе, есть n учеников. Каждый ученик имеет свою фамилию и рейтинг успеваемости. Нужно написать программу, которая считывает(со стандартного устройства ввода, тобиш с клавиатуры) кол-во учеников, информацию о каждом ученике(фамилию, рейтинг), а затем сортирует по убыванию учеников.Ну и естественно, выводит всё на экран.

Вот мой код для решения данной задачи:

#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

class student
{
    protected:
        char name[100];
        int rating;
    public:
        void get_data()
        {
            cout << "Фамилия:";
            cin.get( name, 100 );
            cin.ignore();
            char *buff = new char[100];
            int i;
            for( i = 0; name[i] != 0; i++ )
                buff[i] = name[i];
            buff[i] = 0;
            OemToCharBuff ( buff, name, 100 );
            delete []buff;
            cout << "Сумма:"; cin >> rating;
        }
        void put_data() const
        {
            cout << "Фамилия: " << name << endl;
            cout << "Сумма: " << rating << endl;
        }
        bool operator<( student s )
        {
            return ( rating < s.rating )? true : false;
        }
};

int main()
{
    setlocale (0 ,"" );
    cout << "Количество учащихся:";
    int k; cin >> k;
    student *students = new student[k];
    for ( int i = 0; i < k; i++ )
        students[i]->get_data();
    for ( int i = 0; i < k; i++ )
        for ( int j = 0; j < k; j++ )
        {
            if ( students[i] < students[j] )
            {
                student *temp = new student;
                *temp = students[i];
                students[i] = students[j];
                students[j] = *temp;
                delete temp; 
            }
        }

    for ( int i = 0; i < k; i++ )
    {
        students[i]->put_data();
    }   
    delete []students;
    cout << "Всё.Нажмите любую клавишу..." << endl;
    getch();
    return 0;
}

Компилятор выводит ошибку
base operand of '->' has non-pointer type 'student'
это к строке students[i]->get_data();

Пожалуйста, подскажите, в чём дело?

В строке student *students = new student[k]; создаётся массив из объектов student. И обращаться к этим объектам надо не через указатель, а непосредственно. Поэтому правильно будет

    for ( int i = 0; i < k; i++ )
        students[i].get_data();

и дальше

    for ( int i = 0; i < k; i++ )
    {
        students[i].put_data();
    }   

В сортировке совершенно не обязательно динамически создавать и уничтожать временный объект. Достаточно в функции main() просто объявить переменную: student temp; и использовать её для временного хранения (соответственно без оператора разыменования).

Жил, вам нужно написать код, для поиска НОД по алгоритму Евклида?

У меня программа закрывается сразу после выполнения, что делать? ( system(«pause»);getch(); getchar(); не помогают!)

Жыл, про алгоритм Евклида достаточно доходчиво написано в Википедии.

Ты программку для начала напиши, а потом за помощью обращайся. А то, глядишь, и помощь не потребуется...

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.