C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Реализация методов, подскажите
Daredevil
Отправлено: 22.06.2004, 11:24


Ученик-кочегар

Группа: Участник
Сообщений: 22



Подскажите, где взять коды методов 1) дитохомии 2) Ньютона 3) секущих 4) золотого сечения 5) последовательных минимумов
+ сортировки 1) очередь 2) вставками 3) пузырьковая
+ рекурсия (!!!!!!) ( и вообще можно поподробнее про это, а то мне вообще непонятно что это)

Только пожалуйста, коды на С (!!!!!!) а не на С++. В интернете есть только на С++, что очень плохо, т.к. мне надо на С!!!
Прошу откликнитесь!!!!
Valdemar
Отправлено: 22.06.2004, 12:24


Мастер участка

Группа: Участник
Сообщений: 433



А чем вас не устраивает код на С++?
Я не думаю, что агоритмы, которые вам нужны и реализованные на С++, трудно перевести на чистый С. Может они написаны с использованием шаблонов? Но тогда просто удалите шаблоны и реализуйте алгоритмы для конкретных типов.
И посмотрите (если еще не видели) сайт http://algolist.manual.ru
Lazy
Отправлено: 22.06.2004, 14:50


Ученик-кочегар

Группа: Участник
Сообщений: 12



замечу еще, что добрая половина методов с этого сайта, написанных якобы на С++, на самом деле на 95% чистый С. и только 5% экзотики от С++, типа
cout << "Результат: "<< a;
которая к реализации метода не имеет никакого отношения и легко заменятся на сишные конструкции (ну, конечно, при хотя бы минимальном знании языка)
Lazy
Отправлено: 22.06.2004, 14:51


Ученик-кочегар

Группа: Участник
Сообщений: 12



ну а если чего-то останется непонятное, после прочтения сайта, то уточните поподробнее — что именно.
Daredevil
Отправлено: 23.06.2004, 12:31


Ученик-кочегар

Группа: Участник
Сообщений: 22



не устраивает С++, т.к. мы его не проходили, я его даже в глаза не видел
Очень прошу, пожалуйста, подкорректируйте эти коды и напишите как они будут выгдлядеть в С!!!! Я вас очень прошу!!! ПОЖАЛУЙСТА!!!!
Valdemar
Отправлено: 23.06.2004, 13:44


Мастер участка

Группа: Участник
Сообщений: 433



C++, грубо говоря, это тот-же С, только с добавленными новыми возможностями. Поэтому ваши алгоритмы, реализованные на С++, будут лишь незначительно отличаться от чистого С.
Вот пример функции сортировки методом вставок (взята с http://algolist.manual.ru)
на С++
CODE
template<class T>
void insertSort(T a[], long size) {
 T x;
 long i, j;

 for ( i=0; i < size; i++) {  // цикл проходов, i — номер прохода
   x = a[i];
 
// поиск места элемента в готовой последовательности
   for ( j=i-1; j>=0 && a[j] > x; j--)
     a[j+1] = a[j];   // сдвигаем элемент направо, пока не дошли

// место найдено, вставить элемент
   a[j+1] = x;
 }
}


на С, вместо использования шаблонов сделана сортировка только целых чисел
CODE
void insertSort(int a[], long size) {
 int x;
 long i, j;

 for ( i=0; i < size; i++) {  // цикл проходов, i — номер прохода
   x = a[i];
 
// поиск места элемента в готовой последовательности
   for ( j=i-1; j>=0 && a[j] > x; j--)
     a[j+1] = a[j];   // сдвигаем элемент направо, пока не дошли

// место найдено, вставить элемент
   a[j+1] = x;
 }
}

Как видите различия минимальные, почти не заметны.
Father
  Отправлено: 23.06.2004, 15:25


Ученик-кочегар

Группа: Участник
Сообщений: 17



QUOTE (Daredevil @ 22/06/2004, 12:26)
Подскажите, где взять коды методов

Что касается численных методов, то я давно в Инете нашел 100килобайтный архивчик. Могу прислать на мыло, если надо. Вот содержание Readme.txt из него:"
--------------------------------------------------------------------------------
БИБЛИОТЕКА СОДЕРЖИТ ПРОЦЕДУРЫ, РЕАЛИЗУЮЩИЕ СЛЕДУЮЩИЕ МЕТОДЫ
--------------------------------------------------------------------------------
MONOD:
• метод равномерного разбиения;
• метод случайного поиска;
• методы исключения интервалов:
- метод половинного деления;
- метод золотого сечения;
- метод Фибоначчи;
• методы полиномиальной аппроксимации:
- метод квадратичной аппроксимации;
- метод кубичной аппроксимации;
• методы с использованием производных:
- метод Ньютона-Рафсона;
- метод средней точки;
- метод секущих.
MULTID:
- метод покоординатного спуска;
- метод Хука-Дживса;
- метод поиска по симплексу;
- симплексный метод Нелдера-Мида;
- градиентный метод Коши (наискорейшего спуска).
MULTIDR:
- метод штрафных функций;
- метод комплексов.


--------------------------------------------------------------------------------
ИСПОЛЬЗОВАНИЕ БИБЛИОТЕКИ
--------------------------------------------------------------------------------
Все выше перечисленные методы реализованы на алгоритмическом языке C. Для компиляции функций библиотеки были использованы компиляторы Borland C++ 3.1 и Watcom C/C++ 11.0.
Для использования библиотеки в программу необходимо включить один из заголовочных файлов, содержащих прототипы функций. Для использования функций одномерной оптимизации нужна директива компиляции #include "monod.h"; для функций многомерной оптимизации — директива #include "multid.h"; для функций многомерной оптимизации с ограничениями — директива #include "multidr.h".
При компиляции программы необходимо указать пути к заголовочным файлам и библиотекам и библиотеки, которые надо подключать при компоновке. В результате компиляции и компоновки получаем исполняемый файл (с расширением *.exe), который и используется для нахождения оптимума.

При использовании компилятора Borland, запускаемого из командной строки, надо пользоваться следующей командой
bcc -I -L ,

где
includepath  — путь к заголовочным файлам,
librarypath  — путь к библиотекам,
c_program  — программа на языке C,
library  — подключаемая библиотека.

При использовании оболочки Borland надо провести следующие действия:
1.В главном меню выбрать пункт Options\Directories: и в строке ввода Include Directories добавить путь к заголовочным файлам библиотеки после символа ';'.
2.Создать проект, для чего в главном меню выбрать пункт Project\Open project: и в строке Open Project File ввести название проекта. В результате появится окно Project.
3.В главном меню выбрать пункт Project\Add item: и в появившемся диалоговом окне указать файл, содержащем программу, использующую библиотеку оптимизации.
4.С помощью пункта Project\Add item: указать все необходимые для программы библиотеки.

При использовании компилятора Watcom надо пользоваться следующей командой

wcl386 -i= -"libp " ,

где
includepath  — путь к заголовочным файлам,
librarypath  — путь к библиотекам,
c_program  — программа на языке C,
library  — подключаемая библиотека.


--------------------------------------------------------------------------------

Пример 1.
Необходимо найти минимум функции f(x,y)=8x2+4xy + 5y2 . Проведем вычисления методом Коши.
Программа будет иметь вид:
Примечание

/* Программа, которая использует функцию вычисления оптимума методом Коши */
#include
#include "multid.h" //подключение библиотеки (описание прототипов
функций)
double f(double *); // целевая функция
double df1(double *); // первая частная производная по x
double df2(double *); // первая частная производная по y

double (*df[2])(double *) = { df1, df2};
double xs[2] = { 10., 10.}; v// начальная точка поиска
double xr[2]; // результат вычислений
long ks;
/*Основная программа*/
void main()
{
if( GradCauchy( f, df, xs, xr, 2, 0.1, 1e-5, 10000, &ks) )
printf("f(%g,%g)=%g %ld шагов \n", xr[0], xr[1], f(xr), ks);
else
printf("Минимум не найден за %ld шагов \n", ks);
printf("\n");
}
/*Вычисление функции*/
double f(double *x)
{
return 8*x[0]*x[0] + 4*x[0]*x[1] + 5*x[1]*x[1];
}
v/*Вычисление первой частной производной*/
double df1(double *x)
{
return 16*x[0] + 4*x[1];
}
/*Вычисление второй частной производной*/
double df2(double *x)
{
return 4*x[0] + 10*x[1];
}



Если программа имеет название main.c, заголовочный файл находится в каталоге include\ , а библиотеки monod.lib и multid.lib в каталоге library\, то откомпилировать программу можно командой
bcc -Iinclude\ -Llibrary\ main.c monod.lib multid.lib

В результате компиляции получим файл main.exe. В дальнейшем можно использовать этот файл для нахождения оптимума данной функции выбранным методом.
--------------------------------------------------------------------------------

При возникновении проблем с работой библиотеки оращайтесь к нам по e-mail:
luda@ssu.sumy.ua в теме письма укажите "Don't work!"
Valdemar
Отправлено: 23.06.2004, 15:52


Мастер участка

Группа: Участник
Сообщений: 433



Father, вышлите, пожалуйста, библиотеку на адрес s-v-a@bk.ru. Заранее спасибо.
Nick
Отправлено: 24.06.2004, 08:12


Машинист паровоза

Группа: Участник
Сообщений: 247



Очень интересно.
Тоже
Father, вышлите, пожалуйста, библиотеку на адрес soltami@yandex.ru. Заранее спасибо.
Asher
  Отправлено: 24.06.2004, 08:19


Мастер участка

Группа: Модератор
Сообщений: 550



Может тогда пусть в UpLoads выложит? cool.gif
Георгий
Отправлено: 24.06.2004, 11:29


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



QUOTE
Может тогда пусть в UpLoads выложит?
трезвая мысль! налейте ему ещё smile.gifя бы тоже посмотрел что это за библиотека
Father
  Отправлено: 25.06.2004, 08:39


Ученик-кочегар

Группа: Участник
Сообщений: 17



Вот тут.
А это homepage.

Отредактировано Father — 25/06/2004, 09:49
Daredevil
Отправлено: 26.06.2004, 14:37


Ученик-кочегар

Группа: Участник
Сообщений: 22



а сортировки разные не знаете где взять?? ( вставками, шейкер)
плизз!!!

Вернуться в Вопросы программирования в C++Builder