1 / 1 / 2
Регистрация: 11.03.2014
Сообщений: 489
1

Перевод из С# на PascalABC.NET

02.03.2016, 21:47. Показов 958. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!
Помогите пожалуйста перевести код с С# на PascalABC.NET
Вот код
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream>                 // для cout и т.п.
#include <vector>                   // для класса vector
#include <string>                   // для класса string
#include <algorithm>                    // для алгоритма сортировки
#include <time.h>                   // для случайных величин
#include <math.h>                   // для abs()
 
#define GA_POPSIZE      2048        // размер популяции
#define GA_MAXITER      16384       // максимальное число итераций
#define GA_ELITRATE     0.10f       // элитарность
#define GA_MUTATIONRATE 0.25f           // мутации
#define GA_MUTATION     RAND_MAX * GA_MUTATIONRATE
#define GA_TARGET       std::string("Hello world!")
 
using namespace std;                
 
struct ga_struct 
{
    string str;                     // строка
    unsigned int fitness;                   // пригодность
};
 
typedef vector<ga_struct> ga_vector;            // для краткости
 
void init_population(ga_vector &population,
                     ga_vector &buffer ) 
{
    int tsize = GA_TARGET.size();
 
    for (int i=0; i<GA_POPSIZE; i++) {
        ga_struct citizen;
        
        citizen.fitness = 0;
        citizen.str.erase();
 
        for (int j=0; j<tsize; j++)
            citizen.str += (rand() % 90) + 32;
 
        population.push_back(citizen);
    }
 
    buffer.resize(GA_POPSIZE);
}
 
void calc_fitness(ga_vector &population)
{
    string target = GA_TARGET;
    int tsize = target.size();
    unsigned int fitness;
 
    for (int i=0; i<GA_POPSIZE; i++) {
        fitness = 0;
        for (int j=0; j<tsize; j++) {
            fitness += abs(int(population[i].str[j] - target[j]));
        }
        
        population[i].fitness = fitness;
    }
}
 
bool fitness_sort(ga_struct x, ga_struct y) 
{ return (x.fitness < y.fitness); }
 
inline void sort_by_fitness(ga_vector &population)
{ sort(population.begin(), population.end(), fitness_sort); }
 
void elitism(ga_vector &population, 
                ga_vector &buffer, int esize )
{
    for (int i=0; i<esize; i++) {
        buffer[i].str = population[i].str;
        buffer[i].fitness = population[i].fitness;
    }
}
 
void mutate(ga_struct &member)
{
    int tsize = GA_TARGET.size();
    int ipos = rand() % tsize;
    int delta = (rand() % 90) + 32; 
 
    member.str[ipos] = ((member.str[ipos] + delta) % 122);
}
 
void mate(ga_vector &population, ga_vector &buffer)
{
    int esize = GA_POPSIZE * GA_ELITRATE;
    int tsize = GA_TARGET.size(), spos, i1, i2;
 
    elitism(population, buffer, esize);
 
    // Mate the rest
    for (int i=esize; i<GA_POPSIZE; i++) {
        i1 = rand() % (GA_POPSIZE / 2);
        i2 = rand() % (GA_POPSIZE / 2);
        spos = rand() % tsize;
 
        buffer[i].str = population[i1].str.substr(0, spos) + 
                        population[i2].str.substr(spos, esize - spos);
 
        if (rand() < GA_MUTATION) mutate(buffer[i]);
    }
}
 
inline void print_best(ga_vector &gav)
{ cout << "Best: " << gav[0].str << " (" << gav[0].fitness << ")" << endl; }
 
inline void swap(ga_vector *&population,
                 ga_vector *&buffer)
{ ga_vector *temp = population; population = buffer; buffer = temp; }
 
int main()
{
    srand(unsigned(time(NULL)));
 
    ga_vector pop_alpha, pop_beta;
    ga_vector *population, *buffer;
 
    init_population(pop_alpha, pop_beta);
    population = &pop_alpha;
    buffer = &pop_beta;
 
    for (int i=0; i<GA_MAXITER; i++) {
        calc_fitness(*population);      // вычисляем пригодность
        sort_by_fitness(*population);       // сортируем популяцию
        print_best(*population);        // выводим лучшую популяцию
 
        if ((*population)[0].fitness == 0) break;
 
        mate(*population, *buffer);     // спариваем популяции
        swap(population, buffer);       // очищаем буферы
    }
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2016, 21:47
Ответы с готовыми решениями:

Перевод с C++ на PascalABC.NET
Переведите, пожалуйста, на PascalABC.NET. Сам пробовал, но вылезает очень много ошибок. Делаю фикс...

Перевод с delphi на pascalABC.NET
function GetDesktopListViewHandle: THandle; var S: String; begin Result :=...

Перевод с Java на PascalABC.NET
Буду безгранично благодарен тому, кто сможет перевести код : class RSA { private final...

Перевод с Turbo Pascal на PascalABC.NET
господа, можете помочь? у меня тут программа написана на языке турбо паскаль. пожалуйста переводите...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
02.03.2016, 21:50 2

Не по теме:

Это не С#, если что. А С++

Лучше бы задание написать.
0
1 / 1 / 2
Регистрация: 11.03.2014
Сообщений: 489
02.03.2016, 21:57  [ТС] 3
Цитата Сообщение от volvo Посмотреть сообщение
Лучше бы задание написать.
Извините, перепутал
Требуется написать программу, реализующую ГА (генетический алгоритм) для подбора заданной строки (в нашем
случае — ”Hello, World!”). Хромосома задаётся строкой из 13-ти ASCII-символов. В
качестве фитнес-функции используйте расстояние Хемминга и максимальную
подпоследовательность.
0
1 / 1 / 2
Регистрация: 11.03.2014
Сообщений: 489
09.03.2016, 21:47  [ТС] 4
Цитата Сообщение от volvo Посмотреть сообщение
Лучше бы задание написать.
написал, помогите сделать пожалуйста!
0
1 / 1 / 2
Регистрация: 11.03.2014
Сообщений: 489
20.03.2016, 20:50  [ТС] 5
Кто нибудь может перевести?
0
20.03.2016, 20:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2016, 20:50
Помогаю со студенческими работами здесь

Перевод кода из Delphi в PascalABC.net
Кто может перевести этот код? Заранее спасибо procedure TForm10.Button7Click(Sender: TObject);...

Перевод из turbo Pascal в PascalABC.NET
Здраствуйте. Буду признателен, если поможете переделать программу, созданную в turbo Pascal, под...

В чем разница PascalABC.net и PascalABC
Скажите в чем разница PascalABC.net И PascalABC. Помню когда-то давно программы работающие в...

Установится ли PascalABC.NET на систему, где установлен только .NET 4.6.1?
Привет всем. Вопрос, собственно, озвучен выше. Конкретнее: есть компьютер со свежеустановленной...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru