Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120

функция qsort при сортировке массива структур

27.12.2012, 22:10. Показов 1755. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заголовочный файл:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define SIZE 7
void vvod();
void vyvod();
int compare (const void * a, const void * b);
struct book{
    char firma[22];
    char nazvanie_mikroprocesora[20];
    int chastota;
    float moshnostb;
}temp3;
Ввод:
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
41
42
43
44
45
46
47
48
49
50
51
52
#include "my.h"
void vvod(void){
    extern count;
    extern struct book a[SIZE];
    char choice;
    if (count!=0){
        while(1){
            printf("Sozdatb novyy ili dopisatb v staryy? (N - new, O - old): ");
            choice=toupper(getchar());
            if (choice=='N'){
                count=0;
            }
            if (choice!='N' && choice !='O'){
                while (getchar()!='\n')
                    continue;
                continue;
            }
            while(getchar()!='\n')
                continue;
            break;
        }
    }
    for (count=0; count<SIZE; count++){
        printf("Vvedite firmy %d ", count+1);
        scanf("%s",a[count].firma);
        while (getchar()!='\n')
            continue;
        printf("Vvedite nazvanie ");
        scanf("%s", a[count].nazvanie_mikroprocesora);
        while (getchar()!='\n')
            continue;
        printf("Vvedite chastoty ");
        scanf("%d", &a[count].chastota);
        while (getchar()!='\n')
            continue;
        printf("Vvedite moshnostb ");
        scanf("%f", &a[count].moshnostb);
        while (getchar()!='\n')
            continue;
        printf("Zakonchitb vvod?: y/n\t");
        if (toupper(getchar())=='Y'){
            count++;
            break;
        }
        else{
            while (getchar()!='\n')
                continue;
            continue;
        }
    }
    return;
}
Вывод:
C
1
2
3
4
5
6
7
8
9
10
11
12
#include "my.h"
void vyvod(void){
    extern int count;
    extern struct book a[SIZE];
    int i;
    printf("|Nomer| |        Firma       | |   Nazvanie proca   | | Chastota | | Moshnostb |\n");
    for (i=0; i<count; i++){
        printf("=============================================================================== \n");
        printf("%7d %22s %22s %12d %13.1f\n",i+1,a[i].firma,a[i].nazvanie_mikroprocesora,a[i].chastota,a[i].moshnostb);
    }
    return;
}
Меню:
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
#include "my.h"
struct book a[SIZE];
int count;
int main(void){
    int punkt;
    count=0;
    while(1){
        printf("Viberite punkt meny\n");
        printf("1 - Vvod   2 - Vyvod 3 - qsort\n");
        scanf("%d",&punkt);
        while (getchar()!='\n')
            continue;
        switch(punkt){
            case 1:
                vvod();
                break;
            case 2:
                vyvod();
                break;
 
            case 3:
                sort_qsort();
                break;
            default:
                printf("Nety takogo punkta\n");
                break;
        }
    }
    return 0;
}
qsort:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "my.h"
void sort_qsort(void){
    extern struct book a[7];
    extern int count;
    struct book temp3;
    qsort (a, 7, sizeof(temp3), compare);
    printf("\n\nKomanda vipolnena yspeshno\n\n");
    return;
}
int compare (const void * a, const void * b)
{
   return (*(int*)a).chastota - (*(int*)b).chastota;
}
Проблема с функцией встроенной сортировки подскажите пожалуйста как исправить
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.12.2012, 22:10
Ответы с готовыми решениями:

Функция qsort для сортировки массивов структур
В общем есть структура struct User { int id; char nickname; int karma; };

Qsort для массива структур
Да, знаю, что таких тем на форуме уже полно, как и кода, но смысл мне всё равно непонятен. Есть массив таких рёбер: struct edge{ int...

Отсортировать вектор структур по одной переменной через qsort
Есть вектора структур такого типа , нужно отсортировать через qsort эту структуру по точке point2 struct Mystruct { double...

7
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
27.12.2012, 22:44
Цитата Сообщение от melanu Посмотреть сообщение
(*(int*)a).chastota - (*(int*)b).chastota;
а зачем ты приводишь указатель void* к указателю на int???
приводи к struct book*

Добавлено через 1 минуту
Цитата Сообщение от melanu Посмотреть сообщение
extern int count;
* * extern struct book a[SIZE];
что-то я не уверен, что это сработает. Почему эти объявления внутри функции, а не снаружи?
0
138 / 130 / 59
Регистрация: 13.12.2012
Сообщений: 293
27.12.2012, 22:53
В menu.cpp функция sort_qsort() неизвестна, так как определена в другом файле. Нужно добавить ее в заголовочный файл
0
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
27.12.2012, 22:53  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а зачем ты приводишь указатель void* к указателю на int???
приводи к struct book*

Добавлено через 1 минуту

что-то я не уверен, что это сработает. Почему эти объявления внутри функции, а не снаружи?
#include "my.h"
void sort_qsort(void){
extern struct book a[SIZE];
extern int count;
extern struct book temp3;
qsort (a, SIZE, sizeof(temp3), compare);
printf("\n\nKomanda vipolnena yspeshno\n\n");
return;
}
int compare (const void * a, const void * b)
{
return (*(struct book*)a).chastota > (*(struct book*)b).chastota;
}

Компилируется без ошибки но сортировки не происходит
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
27.12.2012, 22:56
Цитата Сообщение от melanu Посмотреть сообщение
qsort (a, SIZE, sizeof(temp3), compare);
опять-таки, почему не sizeof(struct book) ?
Ой, впрочем ясно... отпал вопрос
0
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
27.12.2012, 23:26  [ТС]
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
В menu.cpp функция sort_qsort() неизвестна, так как определена в другом файле. Нужно добавить ее в заголовочный файл
спасибо мой косячёк, я его исправила уже после публикации.

Добавлено через 4 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
опять-таки, почему не sizeof(struct book) ?
Ой, впрочем ясно... отпал вопрос
Даже если так всёравно не хочет сортироваться(
#include "my.h"
extern struct book a[SIZE];
extern int count;
void sort_qsort(void){
qsort (a, SIZE, sizeof(struct book), compare);
printf("\n\nKomanda vipolnena yspeshno\n\n");
return;
}
int compare (const void * a, const void * b)
{
return (*(struct book*)a).chastota > (*(struct book*)b).chastota;
}

Добавлено через 25 минут
help me
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
27.12.2012, 23:37
Цитата Сообщение от melanu Посмотреть сообщение
int compare (const void * a, const void * b)
{
return (*(struct book*)a).chastota > (*(struct book*)b).chastota;
}
а почему минус заменил на "больше"?
В изначальной версии был минус. Ты хоть понимаешь, что натворил?
0 будет возвращаться даже когда меньше, а по логике работы в этом случае должно возвращаться -1
1
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
28.12.2012, 00:27  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а почему минус заменил на "больше"?
В изначальной версии был минус. Ты хоть понимаешь, что натворил?
0 будет возвращаться даже когда меньше, а по логике работы в этом случае должно возвращаться -1
при минусе всё обнуляется(

Добавлено через 32 минуты
фух наконецто крыса завелась в строке qsort (a, count, sizeof(struct book), compare); нужно было указывать не максимальное количество вводов структур, а количество введённых, т.е. count. всем спс за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.12.2012, 00:27
Помогаю со студенческими работами здесь

Использование массива индексов при сортировке
Задали задачку отсортировать обычный одномерный массив. Так же, нужно использовать массив индексов, чтобы показать, как отсортирован...

Анимация интерфейса при сортировке массива
Доброго времени суток! Подскажите, с помощью чего удобнее всего реализовать анимацию в интерфейсе при сортировке массива? Т.е. мне нужно...

Количество перестановок при сортировке массива
Как вывести число количества перестановок после сортировки массива, допустим выбору?

Ошибка при сортировке двумерного массива по возрастанию
По убыванию сортировка работает полноценно,а по возрастанию первое число НЕ понимаю откуда появляется :wall:. Помогите решить данную...

Синтаксические ошибки при сортировке массива пузырьком
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstdlib&gt; using namespace std; void main(int size,int nums) ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru