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

Сортировка указателей в массиве - C++

Восстановить пароль Регистрация
 
Lebron
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 25
07.04.2013, 22:15     Сортировка указателей в массиве #1
Выполните сортировку данных по алфавиту (по фамилии) - причем сортировать потребуется только указатели в массиве.

Выведите отсортированнный массив.

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
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#define STRLEN 20
using namespace std;
struct STUDENT
{char fio[30];
 int group;
 int usp[5];
};
struct STUDENT** arr;
struct STUDENT* tmp;
int main() {
    int i; 
    int size=50;
    arr=new struct STUDENT*[size]; 
    arr[0]=new struct STUDENT[size]; 
    for (i=0; i<size; i++) arr[i] = arr[0]+i; 
    FILE* f;
    if((f = fopen("6.dat", "rb+")) == NULL) 
{ printf("Oshibka pri otkrytii fajla.\n"); exit(1); }
    for (i=0; i<size; i++) 
    fread(arr[0]+i, sizeof(struct STUDENT), size, f);
    fclose(f);
    for (i=0; i<size; i++) 
        for (int j=0; j<size-i-1; j++)
            if ( (arr[j]->fio[0])>(arr[j+1]->fio[0]) ){
                tmp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tmp;
            
            }
for ( i=0; i<size; i++) {
    cout << "Otsortirovannii spisok: " << arr[i]->fio << endl;
    
}
delete[] arr[0];
delete[] arr;
system("PAUSE>NULL");
}
при выводе в выводе списка консоль, выводит чушь.
если надо, могу скинуть бинарный файл в котором хранятся записи.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
07.04.2013, 23:12     Сортировка указателей в массиве #2
C++
1
2
    arr[0]=new struct STUDENT[size]; 
    for (i=0; i<size; i++) arr[i] = arr[0]+i;
что это?
Lebron
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 25
08.04.2013, 01:09  [ТС]     Сортировка указателей в массиве #3
Цитата Сообщение от Venzo Посмотреть сообщение
C++
1
2
    arr[0]=new struct STUDENT[size]; 
    for (i=0; i<size; i++) arr[i] = arr[0]+i;
что это?
Выделение памяти под элементы стуктуры и её заполнение
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.04.2013, 17:32     Сортировка указателей в массиве #4
Цитата Сообщение от Venzo Посмотреть сообщение
что это?
Такая вот "хитрая" арифметика указателей
Lebron, для сортировки массива указателей, нужно иметь еще массив данных, на которые эти указатели указывают.
C++
1
2
3
4
5
6
STUDENT* arrStud = new STUDENT[size]; // массив студентов
STUDENT** arrPtr = new STUDENT*[size]; // массив указателей
for( int i=0; i<size; ++i )
{
   arrPtr[i] = &arrStud[i]; // Завязываем указатели на студентов
}
Потом уже читаем, сортируем и прочее.
Lebron
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 25
08.04.2013, 23:35  [ТС]     Сортировка указателей в массиве #5
Цитата Сообщение от Tulosba Посмотреть сообщение
Такая вот "хитрая" арифметика указателей
Lebron, для сортировки массива указателей, нужно иметь еще массив данных, на которые эти указатели указывают.
C++
1
2
3
4
5
6
STUDENT* arrStud = new STUDENT[size]; // массив студентов
STUDENT** arrPtr = new STUDENT*[size]; // массив указателей
for( int i=0; i<size; ++i )
{
   arrPtr[i] = &arrStud[i]; // Завязываем указатели на студентов
}
Потом уже читаем, сортируем и прочее.
можете показать саму сортировку?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.04.2013, 10:59     Сортировка указателей в массиве #6
Цитата Сообщение от Lebron Посмотреть сообщение
можете показать саму сортировку?
C++
1
2
3
4
5
6
7
8
// Определяем функцию сравнения
int cmp( const STUDENT* a, const STUDENT* b )
{
   return strcmp( a->fio, b->fio );
}
 
// используем стандартную функцию сортировки
std::sort( arrPtr, arrPtr+size, cmp );
Yandex
Объявления
09.04.2013, 10:59     Сортировка указателей в массиве
Ответ Создать тему
Опции темы

Текущее время: 06:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru