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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lebron
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 25
#1

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

07.04.2013, 22:15. Просмотров 868. Ответов 5
Метки нет (Все метки)

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

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

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");
}
при выводе в выводе списка консоль, выводит чушь.
если надо, могу скинуть бинарный файл в котором хранятся записи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2013, 22:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка указателей в массиве (C++):

Массив указателей на массив строк и сортировка массива указателей - C++
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...

Сортировка указателей - C++
Добрый день. Нужно создать функцию, которая будет сортировать массив указателей по зарплате работников. Написал следующий код: ...

Сортировка массива указателей - C++
Всем доброго вечера Столкнулся я с проблемой примерно вот такого: типа у меня есть класс class tourism { friend tourism...

Сортировка динамического массива указателей - C++
Собственно я написал шаблон класса, а там нужно сделать сортировку выбором. Как это сделать с указателями я не знаю. Получилось вот...

Сортировка массива указателей на строки - C++
Приветствую. Есть задание: &quot;Напишите программу, которая вводит строки с клавиатуры с помощью cin&gt;&gt;...в объявленный Вами двухмерный...

Сортировка массива указателей на char - C++
Есть массив указателей на char-ы. Нужно отсортировать их по алфавиту. Прошу помочь как можно скорее, если это возможно.

5
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;
что это?
0
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;
что это?
Выделение памяти под элементы стуктуры и её заполнение
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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]; // Завязываем указатели на студентов
}
Потом уже читаем, сортируем и прочее.
1
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]; // Завязываем указатели на студентов
}
Потом уже читаем, сортируем и прочее.
можете показать саму сортировку?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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 );
0
09.04.2013, 10:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 10:59
Привет! Вот еще темы с ответами:

Сортировка элементов массивов указателей на char - C++
Ни как не получается отсортировать это. Помогите отладить прогу плиз int main() { _getch(); char *arrptrs = {&quot;g&quot;,&quot;e&quot;, ...

сортировка массива стуктур посредством указателей - C++
Доброго времени суток. Есть у меня 1 задачка: пытаюсь её решить: #include&lt;iostream&gt; #include&lt;fstream&gt; using namespace...

Простая сортировка выбором с использованием указателей - C++
Всем доброго времени суток! Прошу участников форума подсказать как доработать программу, чтобы ее работа была корректной. Нужно...

Разыменовывание воид указателей, хранящихся в массиве - C++
Всем привет. Ситуация такая. Мой компилятор умирает с segmentation fault когда я пытаюсь откомпилировать код в котором я объявляю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru