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

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

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

Шаблонные функции и указатели на функции - C++

25.04.2012, 17:54. Просмотров 813. Ответов 2
Метки нет (Все метки)

Помогите доделать и исправить...
Задание:
1. Создать структуру Прямоугольник, с полями Высота и Ширина. Создать массив объектов типа Прямоугольник из 10
элементов и иницилизировать его случайными числами в диапазоне (1,10). Вывести значение на экран. Отсортировать
массив стандартной функцией qsort (отдельно по ширине, по высоте и по площади прямоугольника). Для этого потребуется
написать три разные функции сравнения двух элементов типа Прямоугольник, каждая из которых имеет свое имя и соответсвует
следующему прототипу:
int имя_функции(const void *el1, const void *el2);


вот, что я написал
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <string>
 
#define ARR_SIZE 10
 
struct rectangle  
{
    unsigned int height;
    unsigned int width;
 
    bool operator < (const Rectangle &sg) // bool vozvras4aemyj tip &sg - ssylka
    {
        return (this->width < sg.width); 
    }
};
 
int height_comparator(const void *el1, const void *el2) // dva argumenta ne znaem kakie 
{
    rectangle *r1 = (rectangle *)el1; // ukazatelj na rectangle = k obwemu slu4aju
    rectangle *r2 = (rectangle *)el2; 
    if(r1->height < r2->height)     // sravnievaem goda, vozras4aem komparatorom int
    {
        return -1;              // < to -1   >to 1     =to 0
    }
    else if(r1->height > r2->height)
    {
        return 1;
    }
    return 0;
};
 
int width_comparator(const void *el1, const void *el2) 
{
    rectangle *r1 = (rectangle *)el1; 
    rectangle *r2 = (rectangle *)el2; 
    if(r1->width < r2->width)       
    {
        return -1;              
    }
    else if(r1->width > r2->width)
    {
        return 1;
    }
    return 0;
};
 
int area_comparator(const void *el1, const void *el2)  
{
    rectangle *r1 = (rectangle *)el1; 
    rectangle *r2 = (rectangle *)el2; 
    
    
    if(r1->width < r2->width)       
    {
        return -1;              
    }
    else if(r1->width > r2->width)
    {
        return 1;
    }
    return 0;
};
 
 
 
 
 
void rectangle_singleout(rectangle *item) // item - ukazatelj , funkcija dlja vyvoda (kak vyvoditj)
{
    std::cout << "Height: " << item->height << std::endl;
    std::cout << "Width: " << item->width << std::endl;
    std::cout << std::endl;
};
 
void rectangle_print(rectangle *arr) // pe4atj vseh elementov massvia rectangle        (chto vyvoditj)
{ 
    for (int i = 0; i < ARR_SIZE; i++)
    {
        rectangle_singleout(&arr[i]); // aress i-togo elementa massiva
    }
    std::cout << "-----------------------------------------------" << std::endl;
    std::cout << std::endl;
};
 
 
void rectangle_fill(Person *arr)  // inicializacija , 10 raz shirina, visota ... zapolnenije strukt Rectangle 10 sluch chislami 1-10
{
    for (int i = 0; i < ARR_SIZE; i++)
    {
        std::cout << "[" << i << "]: " << std::endl;
        std::cout << "Height: "; std::cin >> arr[i].height = rand() % 10 + 1; std::cout << std::endl;
        std::cout << "Width: "; std::cin >> arr[i].width = rand() % 10 + 1; std::cout << std::endl;
    }
};
 
 
rectangle_fill(&rectangle[0]); // zapolnenie massiva , adress nulevogo elementa
rectangle_print(&rectangle[0]); // pe4atj massiva
qsort((void *)rectangle, ARR_SIZE, sizeof(rectangle[0]), height_comparator); // sortirovka po visote
rectangle_print(&rectangle[0]); //pechatj massiva                                    
 
qsort((void *)rectangle, ARR_SIZE, sizeof(rectangle[0]), width_comparator); // sortirovka po shirine
rectangle_print(&rectangle[0]); //pechatj massiva
Добавлено через 11 часов 8 минут
Подскажите, как сделать сортировку по площади в рамках задания. Я понимаю, как считается площадь прямоугольника, но вот как все это реализовать не очень понимаю?

Добавлено через 5 часов 28 минут
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2012, 17:54     Шаблонные функции и указатели на функции
Посмотрите здесь:

C++ Шаблонные функции
Шаблонные функции C++
C++ Шаблонные функции
C++ Шаблонные функции
Шаблонные функции C++
C++ Шаблонные функции
Шаблонные функции C++
C++ шаблонные функции
Шаблонные функции C++
Шаблонные функции в C++ C++
Шаблонные указатели на функции и их генерация C++
C++ Шаблонные функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
25.04.2012, 17:54     Шаблонные функции и указатели на функции #2
jvov, Внимание, вопрос! Где функция main?
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
25.04.2012, 18:18  [ТС]     Шаблонные функции и указатели на функции #3
Цитата Сообщение от ForEveR Посмотреть сообщение
jvov, Внимание, вопрос! Где функция main?
Почему-то весь кода целиком не скопировал.

Добавлено через 6 минут
Как думаете так можно сортировать по площади?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int area_comparator(const void *el1, const void *el2)  
{
    int ereaEl1;
    int ereaEl2;
    rectangle *r1 = (rectangle *)el1; 
    rectangle *r2 = (rectangle *)el2; 
    ereaEl1= r1->height * r1->width;
    ereaEl2=r2->height * r2->width;
    if(ereaEl1 < ereaEl2)       
    {
        return -1;              
    }
    else if(ereaEl1 > ereaEl1)
    {
        return 1;
    }
    return 0;
};
Добавлено через 13 минут
Цитата Сообщение от jvov Посмотреть сообщение
Почему-то весь кода целиком не скопировал.

Добавлено через 6 минут
Как думаете так можно сортировать по площади?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int area_comparator(const void *el1, const void *el2)  
{
    int ereaEl1;
    int ereaEl2;
    rectangle *r1 = (rectangle *)el1; 
    rectangle *r2 = (rectangle *)el2; 
    ereaEl1= r1->height * r1->width;
    ereaEl2=r2->height * r2->width;
    if(ereaEl1 < ereaEl2)       
    {
        return -1;              
    }
    else if(ereaEl1 > ereaEl1)
    {
        return 1;
    }
    return 0;
};

в этой функции ругается на равно, не могу понять почему так нельзя заполнить структуру-
C++
1
2
3
4
5
6
7
8
9
void rectangle_fill(Rectangle *arr)  // inicializacija , 10 raz shirina, visota ... zapolnenije strukt Rectangle 10 sluch chislami 1-10
{
    for (int i = 0; i < ARR_SIZE; i++)
    {
        std::cout << "[" << i << "]: " << std::endl;
        std::cout << "Height: "; std::cin >> arr[i].height = rand() % 10 + 1; //std::cout << std::endl;
        std::cout << "Width: "; std::cin >> arr[i].width = rand() % 10 + 1; //std::cout << std::endl;
    }
};
Yandex
Объявления
25.04.2012, 18:18     Шаблонные функции и указатели на функции
Ответ Создать тему
Опции темы

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