google_master
Создатель
- Регистрация
- 26 Янв 2007
- Сообщения
- 49
- Реакции
- 14
- Автор темы
- #1
Нужны исходники цепей Маркова на с++ для генерации текста. Может есть у кого варианты какие-то?
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
//Файл, в котором лежит исходный текст
$source_text = 'text.txt';
//Наш словарь соответствия слова и идущих за ним слов
$dictionary = array();
function load()
{
global $dictionary,$source_text;
//Читаем исходный файл
$str = file_get_contents($source_text);
//Превращаем текст в одну строку
$str = preg_replace("#[\r\n]#","",$str);
//Выделяем все слова из строки (выражение в кавычках или в скобках считается одним словом)
preg_match_all("#((\"[^\"]+\")|(\([^\)]+\))|([^\(\)\"'\s]+))(\s+|\z)#",$str,$parts);
$words = $parts[1];
$count = count($words);
//Заполняем словарь
for( $i = 0; $i < $count; $i++ )
{
if( $i > 0 )
{
if( !in_array($words[$i],$dictionary[$prev_word]) )
$dictionary[$prev_word][] = $words[$i];
}
$prev_word = $words[$i];
if( empty($dictionary[$prev_word]) )
$dictionary[$prev_word] = array();
}
}
//Функция генерации текста. $count - количество генерируемых слов
function genText($count)
{
global $dictionary;
$words = array_keys($dictionary);
$word = $words[0];
$text ='';
for( $i = 0; $i < $count; $i++ )
{
$text .= ' '.$word;
//Следующее слово - случайное слово из тех, что идут в исходном тексте за текущим словом
$word = $dictionary[$word][rand(0,count($dictionary[$word])-1)];
}
return $text;
}
load();
echo genText(100);
а зачем цепи маркова, они уже выходят из моды, уже люди начали ориентироватся на другие алгоритмы генерации.Нужны исходники цепей Маркова на с++ для генерации текста. Может есть у кого варианты какие-то?
неуж-то сишник не разберет php код
PHP://Файл, в котором лежит исходный текст $source_text = 'text.txt'; //Наш словарь соответствия слова и идущих за ним слов $dictionary = array(); function load() { global $dictionary,$source_text; //Читаем исходный файл $str = file_get_contents($source_text); //Превращаем текст в одну строку $str = preg_replace("#[\r\n]#","",$str); //Выделяем все слова из строки (выражение в кавычках или в скобках считается одним словом) preg_match_all("#((\"[^\"]+\")|(\([^\)]+\))|([^\(\)\"'\s]+))(\s+|\z)#",$str,$parts); $words = $parts[1]; $count = count($words); //Заполняем словарь for( $i = 0; $i < $count; $i++ ) { if( $i > 0 ) { if( !in_array($words[$i],$dictionary[$prev_word]) ) $dictionary[$prev_word][] = $words[$i]; } $prev_word = $words[$i]; if( empty($dictionary[$prev_word]) ) $dictionary[$prev_word] = array(); } } //Функция генерации текста. $count - количество генерируемых слов function genText($count) { global $dictionary; $words = array_keys($dictionary); $word = $words[0]; $text =''; for( $i = 0; $i < $count; $i++ ) { $text .= ' '.$word; //Следующее слово - случайное слово из тех, что идут в исходном тексте за текущим словом $word = $dictionary[$word][rand(0,count($dictionary[$word])-1)]; } return $text; } load(); echo genText(100);
Добавлено через 6 минут
Для просмотра ссылки Войдиили Зарегистрируйся
15.3. Порождение текста
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include "windows.h"
#include "commctrl.h"
#include "resource.h"
#define DEF_IGNORE "@#^_;:\\|/<>~"
int mainproc(HWND hWnd, char **innames, int intotal, char *outname);
void SetPercentage(HWND hWnd, int total);
int wordcount(FILE *in, const char *clear);
void insert(const char *KeyAndWord, struct KeyEntry **StoreStruct);
//вставка ключа и слова в базу
char *randword(const char *Key, struct KeyEntry **StoreStruct);
//случайное слово из базы
void processfile(HWND hWnd, FILE *in, struct KeyEntry **WordStruct, struct KeyEntry **BonusWordStruct, const char *clear);
//создание базы на основе файла, clear - ненужные символы
void createdelirium(HWND hWnd, FILE *out, struct KeyEntry **WordStruct, struct KeyEntry **BonusWordStruct, const char *start, const int length);
//создание бреда из не более length слов
unsigned int strhash(const char *s);
//хеш строки, не более max_hash - лучше заменить на что-то более продвинутое или хватит и такого
struct StringListItem{
char *String;
struct StringListItem *Next;
};
struct KeyEntry{
char *Key;
struct KeyEntry *Another;
struct StringListItem *Word;
unsigned int NumberOfFollowers;
};
/*
Нам говорят "безумец" и "фантаст",
Но, выйдя из зависимости грустной,
C годами мозг мыслителя искусный
Мыслителя искусственно создаст.
Гете
*/
#include "chains.h"
const char blanks[] = "\n\r\t";
char punctuation[] = DEF_IGNORE;//все знаки препинания;
char keybonused[1024];
int max_hash = 32;//максимальное значение хеша
int hash_exp = 15;//показатель степени
int totalwords = 0;
int keywords = 2;
int max_length = 1000;
int key_bonus = 4;
int ranseed = 0;
bool tech = true;
unsigned int strhash(const char *s){
// (c) K&R
unsigned int hashval;
for (hashval = 0; *s != '\0'; s++)
hashval = *s + 31 * hashval;
return hashval % max_hash;
}
inline void SetPercentage(HWND hWnd, int current, int total){
static int prev = 0, prevtotal = 0;
const int smooth = 10; //В процентах, насколько гладко идет прогрессбар
if(total != prevtotal){
prev = 0;
prevtotal = total;
}
if ((current - prev) >= smooth * (total / 100))
SendMessage(hWnd, PBM_SETPOS, ((prev = current) * 100) / total, 0);
}
char *randword(const char *Key, struct KeyEntry **StoreStruct){
struct KeyEntry *KeyIns;
struct StringListItem *WordIns;
int randnum = 0;
if(StoreStruct[ strhash(Key)]){
for(KeyIns = StoreStruct[ strhash(Key)]; KeyIns && strcmp(KeyIns -> Key, Key); KeyIns = KeyIns -> Another);
if(!KeyIns || strcmp(KeyIns -> Key, Key)){
return NULL;
}
randnum = (KeyIns -> NumberOfFollowers) - (rand() % KeyIns -> NumberOfFollowers) - 1;
for(WordIns = KeyIns -> Word; randnum > 0; WordIns = WordIns -> Next) randnum--;
return WordIns -> String;
}
return NULL;
}
void insert(const char *KeyAndWord, struct KeyEntry **StoreStruct){
char Key[1024] = {0}, Word[1024];
struct KeyEntry *KeyIns;
bool init = false;
struct StringListItem *WordIns;
//разваливаю в ключ и слово
strncpy(Key, KeyAndWord, strrchr(KeyAndWord, ' ') - KeyAndWord);
strcpy(Word, strrchr(KeyAndWord, ' ') + 1);
if(StoreStruct[ strhash(Key)]){
KeyIns = StoreStruct[ strhash(Key)];
while(strcmp(KeyIns -> Key, Key)){
if(KeyIns ->Another) KeyIns = KeyIns ->Another;
else break;
}
if(strcmp(KeyIns -> Key, Key)){
KeyIns = (KeyIns -> Another = (struct KeyEntry*) malloc(sizeof( struct KeyEntry)));
init = true;
}
}
else{
//инициализируем
KeyIns = (StoreStruct[ strhash(Key)] = (struct KeyEntry*) malloc(sizeof( struct KeyEntry)));
init = true;
}
if(init){
strcpy(KeyIns -> Key = (char*) calloc(strlen(Key) + 1, sizeof(char)), Key);
KeyIns -> Another = NULL;
KeyIns -> Word = NULL;
KeyIns -> NumberOfFollowers = 0;
}
KeyIns -> NumberOfFollowers++;
//добавляю слово в KeyIns -> Word
WordIns = (struct StringListItem*) malloc(sizeof( struct StringListItem));
strcpy(WordIns -> String = (char*) calloc(strlen(Word) + 1, sizeof(char)), Word);
WordIns -> Next = KeyIns -> Word;
KeyIns -> Word = WordIns;
}
int wordcount(FILE *in, const char *clear){
char current, last = ' ';
int spaces = 0;
while ((current = fgetc(in)) && (!(feof(in)))){
if(strchr(clear, current)){
current = ' ';
}
if (!((current == ' ') && (last == ' '))){
if(current == ' ') spaces++;
}
last = current;
}
rewind(in);
return spaces;
}
void firstkey(FILE *in, char *Key, const char *clear){
char current, last = ' ';
int copied = 0, spaces = 0;
while ((current = fgetc(in)) && (!(feof(in)))){
if(strchr(clear, current)){
current = ' ';
}
if (!((current == ' ') && (last == ' '))){
if(current == ' ') spaces++;
if (spaces == keywords){
Key[copied] = '\0';
return;
}
Key[copied++] = current;
last = current;
}
}
}
void processfile(HWND hWnd, FILE *in, struct KeyEntry **WordStruct, struct KeyEntry **BonusWordStruct, const char *clear){
char NewWords[1024], current, last = ' ';
char *specialstart, *special;
int copied = 0, spaces = 0, total = 0, allwords = wordcount(in, clear);
while ((current = fgetc(in)) && (!(feof(in)))){
if(strchr(clear, current)){
current = ' ';
}
if (!((current == ' ') && (last == ' '))){
if(current == ' ') spaces++;
if (spaces == keywords + 1){
NewWords[copied] = '\0';
insert(NewWords, WordStruct);
//если последнее слово в NewWords входит в keybonused, добавить NewWords в BonusWordStruct
if( ((specialstart = strstr(keybonused, special = strrchr(NewWords, ' ') + 1)) != NULL)){
if( ((specialstart == keybonused) || (*(specialstart - 1) == ' ')) && ((*(specialstart + strlen(special) ) == ' ') || (*(specialstart + strlen(special) ) == '\0'))){
insert(NewWords, BonusWordStruct);
}
}
SetPercentage(hWnd, total++, allwords);
strcpy(NewWords, strchr(NewWords, ' ') + 1);
spaces = keywords; copied = strlen(NewWords);
}
NewWords[copied++] = current;
last = current;
}
}
rewind(in);
}
void clearstore(struct KeyEntry **StoreStruct){
struct KeyEntry *KI, *KIP = 0;
struct StringListItem *WI, *WIP = 0;
for(int i = 0; i < max_hash; i++){
for(KI = StoreStruct[ i]; KI; KI = (KIP = KI) -> Another){
free(KI -> Key);
free(KIP);
for(WI = KI -> Word; WI; WI = (WIP = WI) -> Next){
free(WI -> String);
free(WIP);
}
free(WI);
}
free(KI);
}
free(StoreStruct);
}
void createdelirium(HWND hWnd, FILE *out, struct KeyEntry **WordStruct, struct KeyEntry **BonusWordStruct, const char *start, const int length){
int i;
char Key[1024], *Word;
strcpy(Key, start);
fprintf(out, "%s ", Key);
for(i = 0; i <= length; i++){
SetPercentage(hWnd, i, length);
if(((rand() % 10) < key_bonus) && (Word = randword(Key, BonusWordStruct))){}
else if(!(Word = randword(Key, WordStruct))) return;
fprintf(out, "%s ", Word);
strcpy(Key, strchr(Key, ' ') + 1);
sprintf(Key, "%s %s", Key, Word);
}
}
int mainproc(HWND hWnd, char **innames, int intotal, char *outname){
hWnd = GetDlgItem(hWnd, IDC_PROGRESS);
long start = clock();
FILE *in, *out;
bool truerandom = false;
int i;
if( !(out = fopen(outname, "w"))){
return -1;//файлы кривые
}
if( intotal < 0){
fclose(out);
return -1;//файлы кривые
}
char FKey[1024] = {0};
if(truerandom = !ranseed) ranseed = time(NULL) % RAND_MAX;
srand(ranseed);
char *clear = (char*) malloc( strlen(blanks) + strlen(punctuation) + 1);
strcpy(clear, blanks);
strcat(clear, punctuation);
if(tech){
fprintf(out, "---===[Файл создан программой Delirium 1.8]===---\r\n");
fprintf(out, "Параметры программы:\r\n");
for(i = 0; i <= intotal; i++)
fprintf(out, "\tВходной файл %d: %s\r\n", i + 1, innames[i]);
fprintf(out, "\tВыходной файл: %s\r\n", outname);
fprintf(out, "Настройки эксперта:\r\n");
fprintf(out, "\tКоличество ключевых слов: %d\r\n", keywords);
fprintf(out, "\tПоказатель размера хеш-таблицы: %d\r\n", hash_exp);
fprintf(out, "\tСемя генератора случайных чисел: %d\r\n", ranseed);
fprintf(out, "\tУвеличить частоту слов: %s\r\n", keybonused);
fprintf(out, "\tБонус частоты слов: 0.%d\r\n", key_bonus);
fprintf(out, "\tИгнорируемые символы: %s\r\n", punctuation);
fprintf(out, "\tГенерировать текст не более %d слов\r\n", max_length);
fprintf(out, "---===[ Конец технической информации ]===---\r\n\r\n");
}
max_hash = int(pow(2, hash_exp));
struct KeyEntry **StringPairs = (struct KeyEntry**) calloc(max_hash, sizeof(struct KeyEntry**));
struct KeyEntry **BonusStringPairs = (struct KeyEntry**) calloc(max_hash, sizeof(struct KeyEntry**));
for(i = 0; i <= intotal; i++){
if( !(in = fopen(innames[i], "r"))){
fclose(out);
return -1;
}
if( i == 0) firstkey(in, FKey, clear);
rewind(in);
processfile(hWnd, in, StringPairs, BonusStringPairs, clear);
fclose(in);
}
//PostMessage(hWnd, PBM_SETRANGE, 0, MAKELPARAM(0, max_length - 1));
//PostMessage(hWnd, PBM_SETPOS, 0, 0);
createdelirium(hWnd, out, StringPairs, BonusStringPairs, FKey, max_length);
if(tech){
fprintf(out, "\r\n\r\n---===[Файл создан программой Delirium 1.8]===---\r\n");
fprintf(out, "\tВремя работы программы: %f секунд\r\n", float(clock() - start)/CLOCKS_PER_SEC);
fprintf(out, "---===[ Конец технической информации ]===---\r\n");
}
fflush(out);
fclose(out);
clearstore(StringPairs);
clearstore(BonusStringPairs);
if(truerandom) ranseed = 0;
return 0;//все тип-топ
}
и в чем проблема?
файл chains.h - объявление функций для работы с цепями
и файл chains.cpp реализация этих функцийPHP:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <math.h> #include "windows.h" #include "commctrl.h" #include "resource.h" #define DEF_IGNORE "@#^_;:\\|/<>~" int mainproc(HWND hWnd, char **innames, int intotal, char *outname); void SetPercentage(HWND hWnd, int total); int wordcount(FILE *in, const char *clear); void insert(const char *KeyAndWord, struct KeyEntry **StoreStruct); //вставка ключа и слова в базу char *randword(const char *Key, struct KeyEntry **StoreStruct); //случайное слово из базы void processfile(HWND hWnd, FILE *in, struct KeyEntry **WordStruct, struct KeyEntry **BonusWordStruct, const char *clear); //создание базы на основе файла, clear - ненужные символы void createdelirium(HWND hWnd, FILE *out, struct KeyEntry **WordStruct, struct KeyEntry **BonusWordStruct, const char *start, const int length); //создание бреда из не более length слов unsigned int strhash(const char *s); //хеш строки, не более max_hash - лучше заменить на что-то более продвинутое или хватит и такого struct StringListItem{ char *String; struct StringListItem *Next; }; struct KeyEntry{ char *Key; struct KeyEntry *Another; struct StringListItem *Word; unsigned int NumberOfFollowers; };
PHP:/* Нам говорят "безумец" и "фантаст", Но, выйдя из зависимости грустной, C годами мозг мыслителя искусный Мыслителя искусственно создаст. Гете */ #include "chains.h" const char blanks[] = "\n\r\t"; char punctuation[] = DEF_IGNORE;//все знаки препинания; char keybonused[1024]; int max_hash = 32;//максимальное значение хеша int hash_exp = 15;//показатель степени int totalwords = 0; int keywords = 2; int max_length = 1000; int key_bonus = 4; int ranseed = 0; bool tech = true; unsigned int strhash(const char *s){ // (c) K&R unsigned int hashval; for (hashval = 0; *s != '\0'; s++) hashval = *s + 31 * hashval; return hashval % max_hash; } inline void SetPercentage(HWND hWnd, int current, int total){ static int prev = 0, prevtotal = 0; const int smooth = 10; //В процентах, насколько гладко идет прогрессбар if(total != prevtotal){ prev = 0; prevtotal = total; } if ((current - prev) >= smooth * (total / 100)) SendMessage(hWnd, PBM_SETPOS, ((prev = current) * 100) / total, 0); } char *randword(const char *Key, struct KeyEntry **StoreStruct){ struct KeyEntry *KeyIns; struct StringListItem *WordIns; int randnum = 0; if(StoreStruct[ strhash(Key)]){ for(KeyIns = StoreStruct[ strhash(Key)]; KeyIns && strcmp(KeyIns -> Key, Key); KeyIns = KeyIns -> Another); if(!KeyIns || strcmp(KeyIns -> Key, Key)){ return NULL; } randnum = (KeyIns -> NumberOfFollowers) - (rand() % KeyIns -> NumberOfFollowers) - 1; for(WordIns = KeyIns -> Word; randnum > 0; WordIns = WordIns -> Next) randnum--; return WordIns -> String; } return NULL; } void insert(const char *KeyAndWord, struct KeyEntry **StoreStruct){ char Key[1024] = {0}, Word[1024]; struct KeyEntry *KeyIns; bool init = false; struct StringListItem *WordIns; //разваливаю в ключ и слово strncpy(Key, KeyAndWord, strrchr(KeyAndWord, ' ') - KeyAndWord); strcpy(Word, strrchr(KeyAndWord, ' ') + 1); if(StoreStruct[ strhash(Key)]){ KeyIns = StoreStruct[ strhash(Key)]; while(strcmp(KeyIns -> Key, Key)){ if(KeyIns ->Another) KeyIns = KeyIns ->Another; else break; } if(strcmp(KeyIns -> Key, Key)){ KeyIns = (KeyIns -> Another = (struct KeyEntry*) malloc(sizeof( struct KeyEntry))); init = true; } } else{ //инициализируем KeyIns = (StoreStruct[ strhash(Key)] = (struct KeyEntry*) malloc(sizeof( struct KeyEntry))); init = true; } if(init){ strcpy(KeyIns -> Key = (char*) calloc(strlen(Key) + 1, sizeof(char)), Key); KeyIns -> Another = NULL; KeyIns -> Word = NULL; KeyIns -> NumberOfFollowers = 0; } KeyIns -> NumberOfFollowers++; //добавляю слово в KeyIns -> Word WordIns = (struct StringListItem*) malloc(sizeof( struct StringListItem)); strcpy(WordIns -> String = (char*) calloc(strlen(Word) + 1, sizeof(char)), Word); WordIns -> Next = KeyIns -> Word; KeyIns -> Word = WordIns; } int wordcount(FILE *in, const char *clear){ char current, last = ' '; int spaces = 0; while ((current = fgetc(in)) && (!(feof(in)))){ if(strchr(clear, current)){ current = ' '; } if (!((current == ' ') && (last == ' '))){ if(current == ' ') spaces++; } last = current; } rewind(in); return spaces; } void firstkey(FILE *in, char *Key, const char *clear){ char current, last = ' '; int copied = 0, spaces = 0; while ((current = fgetc(in)) && (!(feof(in)))){ if(strchr(clear, current)){ current = ' '; } if (!((current == ' ') && (last == ' '))){ if(current == ' ') spaces++; if (spaces == keywords){ Key[copied] = '\0'; return; } Key[copied++] = current; last = current; } } } void processfile(HWND hWnd, FILE *in, struct KeyEntry **WordStruct, struct KeyEntry **BonusWordStruct, const char *clear){ char NewWords[1024], current, last = ' '; char *specialstart, *special; int copied = 0, spaces = 0, total = 0, allwords = wordcount(in, clear); while ((current = fgetc(in)) && (!(feof(in)))){ if(strchr(clear, current)){ current = ' '; } if (!((current == ' ') && (last == ' '))){ if(current == ' ') spaces++; if (spaces == keywords + 1){ NewWords[copied] = '\0'; insert(NewWords, WordStruct); //если последнее слово в NewWords входит в keybonused, добавить NewWords в BonusWordStruct if( ((specialstart = strstr(keybonused, special = strrchr(NewWords, ' ') + 1)) != NULL)){ if( ((specialstart == keybonused) || (*(specialstart - 1) == ' ')) && ((*(specialstart + strlen(special) ) == ' ') || (*(specialstart + strlen(special) ) == '\0'))){ insert(NewWords, BonusWordStruct); } } SetPercentage(hWnd, total++, allwords); strcpy(NewWords, strchr(NewWords, ' ') + 1); spaces = keywords; copied = strlen(NewWords); } NewWords[copied++] = current; last = current; } } rewind(in); } void clearstore(struct KeyEntry **StoreStruct){ struct KeyEntry *KI, *KIP = 0; struct StringListItem *WI, *WIP = 0; for(int i = 0; i < max_hash; i++){ for(KI = StoreStruct[ i]; KI; KI = (KIP = KI) -> Another){ free(KI -> Key); free(KIP); for(WI = KI -> Word; WI; WI = (WIP = WI) -> Next){ free(WI -> String); free(WIP); } free(WI); } free(KI); } free(StoreStruct); } void createdelirium(HWND hWnd, FILE *out, struct KeyEntry **WordStruct, struct KeyEntry **BonusWordStruct, const char *start, const int length){ int i; char Key[1024], *Word; strcpy(Key, start); fprintf(out, "%s ", Key); for(i = 0; i <= length; i++){ SetPercentage(hWnd, i, length); if(((rand() % 10) < key_bonus) && (Word = randword(Key, BonusWordStruct))){} else if(!(Word = randword(Key, WordStruct))) return; fprintf(out, "%s ", Word); strcpy(Key, strchr(Key, ' ') + 1); sprintf(Key, "%s %s", Key, Word); } } int mainproc(HWND hWnd, char **innames, int intotal, char *outname){ hWnd = GetDlgItem(hWnd, IDC_PROGRESS); long start = clock(); FILE *in, *out; bool truerandom = false; int i; if( !(out = fopen(outname, "w"))){ return -1;//файлы кривые } if( intotal < 0){ fclose(out); return -1;//файлы кривые } char FKey[1024] = {0}; if(truerandom = !ranseed) ranseed = time(NULL) % RAND_MAX; srand(ranseed); char *clear = (char*) malloc( strlen(blanks) + strlen(punctuation) + 1); strcpy(clear, blanks); strcat(clear, punctuation); if(tech){ fprintf(out, "---===[Файл создан программой Delirium 1.8]===---\r\n"); fprintf(out, "Параметры программы:\r\n"); for(i = 0; i <= intotal; i++) fprintf(out, "\tВходной файл %d: %s\r\n", i + 1, innames[i]); fprintf(out, "\tВыходной файл: %s\r\n", outname); fprintf(out, "Настройки эксперта:\r\n"); fprintf(out, "\tКоличество ключевых слов: %d\r\n", keywords); fprintf(out, "\tПоказатель размера хеш-таблицы: %d\r\n", hash_exp); fprintf(out, "\tСемя генератора случайных чисел: %d\r\n", ranseed); fprintf(out, "\tУвеличить частоту слов: %s\r\n", keybonused); fprintf(out, "\tБонус частоты слов: 0.%d\r\n", key_bonus); fprintf(out, "\tИгнорируемые символы: %s\r\n", punctuation); fprintf(out, "\tГенерировать текст не более %d слов\r\n", max_length); fprintf(out, "---===[ Конец технической информации ]===---\r\n\r\n"); } max_hash = int(pow(2, hash_exp)); struct KeyEntry **StringPairs = (struct KeyEntry**) calloc(max_hash, sizeof(struct KeyEntry**)); struct KeyEntry **BonusStringPairs = (struct KeyEntry**) calloc(max_hash, sizeof(struct KeyEntry**)); for(i = 0; i <= intotal; i++){ if( !(in = fopen(innames[i], "r"))){ fclose(out); return -1; } if( i == 0) firstkey(in, FKey, clear); rewind(in); processfile(hWnd, in, StringPairs, BonusStringPairs, clear); fclose(in); } //PostMessage(hWnd, PBM_SETRANGE, 0, MAKELPARAM(0, max_length - 1)); //PostMessage(hWnd, PBM_SETPOS, 0, 0); createdelirium(hWnd, out, StringPairs, BonusStringPairs, FKey, max_length); if(tech){ fprintf(out, "\r\n\r\n---===[Файл создан программой Delirium 1.8]===---\r\n"); fprintf(out, "\tВремя работы программы: %f секунд\r\n", float(clock() - start)/CLOCKS_PER_SEC); fprintf(out, "---===[ Конец технической информации ]===---\r\n"); } fflush(out); fclose(out); clearstore(StringPairs); clearstore(BonusStringPairs); if(truerandom) ranseed = 0; return 0;//все тип-топ }