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

Переделать функцию c указателем на int, на функцию с указателем на void - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вывести на экран геометрическую фигуру, заполняя ее символом * http://www.cyberforum.ru/cpp-beginners/thread790341.html
помогите, пожалуйста. Разработать программу, которая выводит на экран геометрическую фигуру, заполняя ее символом *. размер фигуры определяется при вводе. Заполненный равнобедренный треугольник. Основание - n, высота n/2+1 (n-нечетное) Треугольник этот повернут высотой вниз, то есть перевернут. Заранее спасибо.
C++ Вычислить значение произведения Помогите реализовать программу на с++ с использованием оператора for Нужно решить пример! p=a*(a-n)(a-2n)(a-3n)*...*(a-n*n) проще говоря число скобок зависит от числа n n=7 число скобок таких 7!!! http://www.cyberforum.ru/cpp-beginners/thread790333.html
C++ Как в программе сделать чтобы результат мог быть не целым ?
#include <iostream.h> int pop(int* first,int* last) { int sum=0; for(; first!=last; ++first) sum+= *first; return sum; } int main()
Найти среднее арифметическое наибольшего и наименьшего значений в двумерном массиве C++
Данная действительная матрица размера 6х9. Найти среднее арифметическое наибольшего и наименьшего значений ее элементов. Добавлено через 7 минут Данная действительная матрица размера 6х9. Найти среднее арифметическое наибольшего и наименьшего значений ее элементов. #include<iostream> #include <Windows.h> #include <time.h> using namespace std;
C++ Вывод на экран имени переменной(имени файла, и тд.) http://www.cyberforum.ru/cpp-beginners/thread790303.html
Здрасти. Недалече столкнулся с проблемой: надо сравнить два файла по признаку количества содержащихся в них символов и вернуть тот что содержит наименьшее кол-во. Моя функция вовращать то возвращает. Но вот как в дальнейшем использовать имя возвращаемого файла для вывода на экран (произвести не вывод содержимого файла, а именно его ИМЯ). Может есть какая нибудь хитрая функция которая получает в...
C++ Передача двумерного массива в функцию по ссылке Требуется написать функцию, которая выделяет память для одномерного и двумерного динамического массива. Для первого варианта вопросов вроде бы нет. Не получается сделать для двумерного. Помогите поправить программу #include <iostream> #include <iomanip> using namespace std; inline void init (double &arr, int arr_len); inline void init (double &arr_A, int arr_len1, int arr_len2); подробнее

Показать сообщение отдельно
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
19.02.2013, 21:38     Переделать функцию c указателем на int, на функцию с указателем на void
Есть рабочий код qsort для int:
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
void qsort(int *base, int n)
{
    // Прекратить если количество элементов меньше либо равно единице.
    if (n <= 1)
        return;
 
    int mid_val = base[n/2]; // Запомним цетральное значение
    int left = 0;
    int right = n-1;
 
    while (left < right)
    {
        while (base[left] < mid_val)
            ++left;
        while (base[right] > mid_val)
            --right;
 
        if (left < right)
        {
            int tmp = base[left];
            base[left] = base[right];
            base[right] = tmp;
            ++left;
            --right;
        } 
        else if (left == right) // пропустим одинаковые элементы
        {
            ++left;
            --right;
        }
    }
 
    qsort(base, right + 1);
    qsort(base + left, n - left);
}
Пытаюсь переделать его на void но знаний не хватает:
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
typedef int (*PTF)(const void*, const void*);
 
void qsort(void *base, size_t n, size_t sz, PTF cmp)
{
    // Прекратить если количество элементов меньше либо равно единице.
    if (n <= 1)
        return;
 
    char* bm = static_cast<char*>(base) + (n/2)*sz;
    char* bl = static_cast<char*>(base);
    char* br = static_cast<char*>(base) + (n-1)*sz;
 
    while (bl < br)
    {
        while (cmp(bm, bl) > 0)
            bl += sz;
        while (cmp(bm, br) < 0)
            br -= sz;
 
        if (bl < br)
        {
            for (int i = 0; i < int(sz); ++i)
            {
                char temp = bl[i];
                bl[i] = br[i];
                br[i] = temp;
            }
            bl += sz;
            br -= sz;
        } 
        else if (bl == br) // пропустим одинаковые элементы.
        {
            bl += sz;
            br -= sz;
        }
    }
 
    qsort(base, (size_t)br/sz + 1, sz, cmp); // ЧУВСТВУЮ ЧТО ПРОБЛЕМА ЗДЕСЬ
    qsort(base + (size_t)bl/sz, n - (size_t)bl/sz, sz, cmp); // И ЗДЕСЬ
}
 
int comp(const void* i, const void* j)
{
    return *static_cast<const int*>(i) - 
        *static_cast<const int*>(j);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru