Добавил:
Факультет ИКСС, группа ИКВТ-61 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB / WORK_9 / лаб_раб_9.docx
Скачиваний:
35
Добавлен:
20.02.2019
Размер:
252.12 Кб
Скачать

Как работает программа Euler.H?

Тело функции main() этой программы приведём здесь

#include <chessboard.h> //Заголовочный файл с прототипами функций

#include <fstream>

using namespace std;

int main(int argc, char** argv)

{

ofstream myfile;

myfile.open("C:/EulerApp/release/report.txt");

if(argc>=2)

{

printf("\nNumber Of Arguments Passed: %d",argc);

printf("\n----Following Are The Command Line Arguments Passed----");

for(int xCount=0;xCount<argc;xCount++)

printf("\nargv[%d]: %s",xCount,argv[xCount]);

}

srand(time(nullptr));

ChessBoard board;

short counter = 0;

double probability = 0;

long total = 0, successful = 0, upperLimit = 10000;

if ( argc >= 2 )

{

if (stoi(argv[7]) != 0)

{

upperLimit = stoi(argv[7]);

probability = 0;

}

else if (stod(argv[8]) != 0)

{

probability = stod(argv[8]);

upperLimit = 0;

}

}

int journeys[64] = {};

extern short cR, cC, fR, fC;

board.interact(argc, argv);

do

{

board.initializeBoard(); //Инициализация доски нулями

int accessibility[8][8] = { {2,3,4,4,4,4,3,2}, //Инициализация доски доступности

{3,4,6,6,6,6,4,3},

{4,6,8,8,8,8,6,4},

{4,6,8,8,8,8,6,4},

{4,6,8,8,8,8,6,4},

{4,6,8,8,8,8,6,4},

{3,4,6,6,6,6,4,3},

{2,3,4,4,4,4,3,2} };

if (cR == 9 || cC == 9) //Задал ли пользователь начальные условия?

{

do

{

board.setCurrentRow(rand()%8);

board.setCurrentColumn(rand()%8);

}

while (board.getCurrentRow() == fR && board.getCurrentColumn() == fC); //проверка на совпадение начала и конца

}

else //Если пользователь задал начальные условия, то утвердим их

{

board.setCurrentRow(cR);

board.setCurrentColumn(cC);

}

//Утвердим конечные условия. Можно было бы и раньше их утвердить

board.finalRow = fR;

board.finalColumn = fC;

board.setBoard(1); //Первый ход

board.setAccessibility( accessibility, board.getCurrentRow(), board.getCurrentColumn() ); //Модифицировать доску доступности

for (counter = 1; counter < 64; counter++) //Моделирование ходов циклом

{

if ( board.makePossibleMove( counter, board.getCurrentRow(), board.getCurrentColumn()) == false )

break; //Окончить цикл, если невозможно сделать легальный ход

board.setPosition (accessibility, counter); //Новый ход

}

journeys[counter - 1]++; //Запись количества путешествий каждой длины

if (counter == 64) //Если выполнено полное путешествие

{

successful++; //Счётчик успешных путешествий увеличивается

}

total++; //Всего путешествий

}

/*"Если выполнено неполное путешествие и количество путешествий меньше 1000

или если начальные условия не выполняются при том, что они заданы, то выполнить цикл ещё раз"*/

while ( (( (board.makePossibleMove(counter, board.getCurrentRow(), board.getCurrentColumn()) == false)

&& (counter < 64)&&(total < upperLimit) && upperLimit > 0 ) || (((double(successful)/total) < probability) && probability > 0))

|| !( (board.getCurrentRow() == board.finalRow &&

board.getCurrentColumn() == board.finalColumn)

|| (board.finalRow == 9 || board.finalColumn == 9) ));

cout << "\n\t\tDistribution:\n";

for (short k = 1, j = 0; k <= 64; k++) //Распределение путешествий коня каждой длины

{

cout << setw(12) << k;

if (k % 8 == 0)

{

cout << endl;

for (; j < k; j++)

cout << setw(12) << journeys[j];

cout << endl << endl;

}

}

cout << "\n\t\tFinal board:\n";

board.printBoard(); //Вывод доски на экран

if ( argc < 2 )

{

probability = double(successful)/total; //Вероятность маршрута

}

else if ( stoi(argv[8]) == 0)

probability = double(successful)/total;

cout << setprecision(15) << "Probability of success = " << probability << endl;

myfile << probability << endl;

cout << "Total number of tours = " << total << endl;

myfile << total << endl;

cout << "Routes = " << successful << endl;

myfile.close();

return 0;

}

Она получает аргументы из командной строки, а если их нет (значит пользователь вызвал программу явным образом) , - то программа работает в интерактивном режиме.

Таким образом достигнута расширяемость программы и универсальность её использования.

Выводы:

1. Qt Creator позволяет создавать универсальные шаблоны для разработки приложений. Универсальность достигается тем, что объектный код как бы работает только со средой Qt, а не с конкретной операционной системой.

2. В данной работе я научился работать с процессами в среде Qt, а также с файлами и строками.

3. Были получены навыки создания GUI для приложений.

Соседние файлы в папке WORK_9