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

Пример из книги "Как программировать на С++" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Объясните как Блок схему составить для цикла for http://www.cyberforum.ru/cpp-beginners/thread423368.html
ipMatr(); for(opMatr(),k=0;k<=n;k++) //прямой ход метода Гаусса; {for(aa=fabs(a),i=k,j=k+1;j<=n;j++)//поиск макс. ел-та; if(fabs(a)>aa){i=j;aa=fabs(a);}; if(aa<0) {printf("Система не имеет единственного решения!!!"); getch(); }
C++ Проектирование интерфейса: передача результата по цепочке // Main.h class Main () { public : Main() {} ~Main() {} vector<int> set(vector<int> &vec); vector<int> get() { // http://www.cyberforum.ru/cpp-beginners/thread423365.html
Немного теории C++
Доброго дня, форумчане! Пишу курсач на тему Системы программирования. Препод сказал, что у меня нет информации о видах систем программирования. Гугл по такому запросу ничего подходящего не выдает. Прошу помощи, объясните кто-нибудь, что именно я должен написать о видах систем или ссылку на ресурс с такой информацией
C++ Как правильно выделить память под структуру?
имеются структуры struct ship { struct point first; struct point last; }; struct point { int x;
C++ Недоработанное программа http://www.cyberforum.ru/cpp-beginners/thread423322.html
// 11.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> #include <ctype.h> int digitssum(const char * s) { return ( *s ) ? ( isdigit(*s) ) ? *s - '0' + digitssum(s+1) : digitssum(s+1) : 0;}
C++ Нужно превести задачу с Delphi на С++ const n=10; type Segments=record a,b:Integer; end; var ArrayOfSegments:array of Segments; i,j,count,Point,MaxPos:Byte; Begin подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.01.2012, 14:49     Пример из книги "Как программировать на С++"
Капитан Техно, по сути эти две функции - это предикаты, т.е. функции, определяющие истинность/ложность некоего утверждения. В данном случае функция ascending проверяет, не больше ли первый её параметр второго. В случае, если это так, она возвращает истину, иначе ложь. Вторая функция проверяет, меньше ли первый её параметр второго. Таким образом, сортировка происходит не по явному условию, а по значению функции-предиката. Т.е. в программу вносится гибкость. Не будь этих функций-предикатов, нам пришлось бы писать две функции сортировки:
C++
1
2
3
4
5
6
7
8
9
void ascending_bubble(int *work, const int size)
{
    void swap(int *, int *)
 
    for(int pass = 1, pass < size; pass++)
        for(int count = 0; count < size - 1; count++)
            if(work[count + 1] < work[count]))
                swap(&work[count], &work[count + 1]);
}
и
C++
1
2
3
4
5
6
7
8
9
void descending_bubble(int *work, const int size)
{
    void swap(int *, int *)
 
    for(int pass = 1, pass < size; pass++)
        for(int count = 0; count < size - 1; count++)
            if(work[count + 1] > work[count]))
                swap(&work[count], &work[count + 1]);
}
Т.е. просто подставив тело соответствующего предиката в само условие обмена. А так мы просто передаём указатель на функцию, проверяющую условие обмена, в функцию сортировки. Получается, что если у нас появится гипотетический третий вариант обмена, мы должны не заново написать функцию сортировки, а просто дописать один-единственный предикат для этого случая.
 
Текущее время: 04:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru