Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2017, 23:14   #1
Alex077
Новичок
Джуниор
 
Регистрация: 31.07.2017
Сообщений: 1
По умолчанию Нужна помощь, пишу генетический алгоритм на с (не с++).

С си я не особо знаком, а с++ более менее понимаю. но задача стоит в том чтобы написать код на си, но из-за того что рефлекторно выписываю некоторые части кода с использованием си++, то получаю ошибки типа
а как исправить эти ошибки понятия не имею
(error: use of undeclared identifier 'cout'
cout << iter << " iterations" << endl; )
вот сам код

Код:
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

double func(double x)
{
  return sin(M_PI * x / 180) - 1 / x;
}
double mutation(double x0, double x1)  // мутация: генерация случайной величины
{
  const int NUM = 100000000;
  return fabs((double)((rand() * NUM) % (int)((x1 - x0)*NUM) + 1) / NUM) + x0;
}
double inversion(double x, double eps)  // инверсия: поиск в окрестностях точки
{
  static int sign = 0;
  sign++;
  sign %= 2;
  if (sign == 0) return x - eps;
  else return x + eps;
}
void crossover(double *x, double eps, double x0, double x1)  // кроссовер: среднее арифметическое
{
  int k = 99;
  for (int i = 0; i < 8; i++) 
    for (int j = i + 1; j < 8; j++) 
    {
      x[k] = (x[i] + x[j]) / 2;
      k--;
    }
  for (int i = 0; i < 8; i++) 
  {
    x[k] = inversion(x[i], eps); k--;
    x[k] = inversion(x[i], eps); k--;
  }
  for (int i = 8; i < k; i++)
    x[i] = mutation(x0, x1);
}
void sort(double *x, double *y)  // сортировка
{
  for (int i = 0; i < 100; i++)
    for (int j = i + 1; j < 100; j++) 
      if (fabs(y[j]) < fabs(y[i])) {
        double temp = y[i];
        y[i] = y[j];
        y[j] = temp;
        temp = x[i];
        x[i] = x[j];
        x[j] = temp;
      }
}
double genetic(double x0, double x1, double eps)  // поиск решения с использованием ГА
{
  double population[100];
  double f[100];
  int iter = 0;
  for (int i = 0; i < 100; i++)   // Формирование начальной популяции
  {
    population[i] = mutation(x0, x1);
    f[i] = func(population[i]);
  }
  sort(population, f);
  do {
    iter++;
    crossover(population, eps, x0, x1);
    for (int i = 0; i < 100; i++) 
      f[i] = func(population[i]);
    sort(population, f);
  } while (fabs(f[0]) > eps && iter<20000);
  cout << iter << " iterations" << endl;
  return population[0];
}
int main() 
{
  srand(time(NULL));
  cout << genetic(1.0, 10.0, 0.000001);
  sin.get();
  return 0;
}

Последний раз редактировалось Аватар; 31.07.2017 в 23:29.
Alex077 вне форума Ответить с цитированием
Старый 01.08.2017, 06:46   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

И гугл совсем ничего не выдал, как на С выводят что-нибудь на экран? И даже про printf смолчал?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь я начинающий ! Пишу вот такой код... Жанибек Помощь студентам 3 04.04.2015 04:03
Генетический алгоритм _SeregkA_ Помощь студентам 2 05.01.2012 20:26
Генетический алгоритм Sparky Помощь студентам 5 16.12.2011 20:32
Генетический Алгоритм rust09reg91 Общие вопросы Delphi 2 03.04.2011 16:03
Пишу Pacman. Нужна помощь. AngelOfDeath Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 07.10.2008 14:34