Программа "Автомастерская"

 

ЗМІСТ


1. Вступ

2. Технічні характеристики

2.1Постановка задачі

2.2Визначення структури вхідних даних

.3Визначення структури вихідних даних

2.4Визначення вимог до технічних засобів

.5Вибір мови програмування

.6Опис алгоритму рішення задачі

.7Виконання програми

Висновок

Список використаних джерел

Додаток А. Схема алгоритму програми

Додаток Б. Лістинг програми


ВСТУП


Програмування багате і різноманітне. Адже здається немає такої сфери людської діяльності, де не можна було б з користю застосувати обчислювальну машину для оцінки, інформаційно-довідкового обслуговування, планування, моделювання і т. п.

І це різноманіття завдань переходить в різноманіття програм, які повинні розробляти програмісти.

Вони намагаються впоратися з цим різноманіттям, "уклавши" його в проблемно-орієнтовані мови програмування. Мови вбирають у себе специфічні риси конкретних сфер програмування --- характерні структури даних, принципи організації типових процесів, відповідну термінологію --- і таким чином роблять сам процес програмування більш універсальним.

Одночасно вони звільняють програмістів від необхідності деталізувати програми до рівня занадто дрібних машинних команд і навіть від необхідності знати особливості конкретних обчислювальних машин.

Більше того, операційні системи покликані перетворити обчислювальні машини з предмета постійного занепокоєння в "істоти", які самі дбають про програміста і готові надавати всілякі послуги йому і його програмі.

В моїй курсовій роботі я розробив програму перевірки логічного мислення людини.

Я написав свою програму на мові програмування С тому що це одна з кращих мов програмування. Ця мова програмування дає програмісту ефективність та надійність, а також програми написані на цій мові виконуються практично з такою ж швидкістю як і програми написані на мові низького рівня.


2. ТЕХНІЧНІ ХАРАКТЕРИСТИКИ


.1 Постановка задачі


Програма перевірки логічного мислення людини полягає у написанні програми, яка виводить на екран монітору гральне поле, та символи Х та О на ньому, за допомогою яких користувач намагається обіграти компютер.

Розробка Програми перевірки логічного мислення людини потрібна для того, щоб перевіряти логічне мислення людини.

Програма повинна вміти:

Розташовувати гральне поле 3х3 на екрані;

Виводити на гральне поле символи Х та О у бажаному місці.

Програма повинна складатися з єдиного програмного модуля. Усі данні які виводить ця програма зберігаються у середовищі операційної системи.


2.2 Визначення структури вхідних даних


Структура вхідних даних показана в таблиці 2.1.


Таблиця 2.1 - Структура вхідних даних

№ІдентифікаторТипДіапазонПояснення1Minimaxint0..255Головна функція для алгоритму MiniMax2MinMoveint0..255Допоміжна функція для алгоритму3MaxMoveint0..255Допоміжна функція для алгоритму

.3 Визначення структури вихідних даних


Результатом роботи програми є моделювання координатного переміщення.

Структура вихідних даних наведена у таблиці 2.2.

Таблица 2.2 - Структура вихідних даних

№ІдентифікаторТипДиапазонПояснення1Symbolchar0..255Гральний символ2Moveint0..100Змінна переміщення символу3Boardchar9Гральне поле

2.4 Визначення вимог до технічних засобів


Програма „Статистика використання клавіатури" була розроблена на компютері такої конфігурації:

Amd Athlon II X2 250 Processor;

Память 4 Гбайт;

Жорсткий диск 250 Гбайт;

Кольоровий монітор;

Операційна система Windows 8.1.

Для нормального функціонування Програми перевірки логічного мислення людини необхідний мінімальний набір технічних і програмних засобів :

Персональний компютер сумісний з IBM PC/XT;

дискова операційна система DOS версією 5 і вище.

вмонтований накопичувач на магнітному диску загальним обємом не менше 10 Мбайт;

монітор кольоровий;

кількість вільної оперативної памяті не менше 900 Кбайт;

накопичувач для резервного копіювання інформації;


.5 Вибір мови програмування


Програма моделювання координатного переміщення написана на мові високого рівня C++ . Я вибрав цю мову, так як вона є дуже ефективною при написані програм які передбачають працювати на низькому рівні з апаратурою компютера та при компіляції генерується дуже ефективний код.++ має слідуючі можливості і особливості:

має простий синтаксис;

легкість реалізації на більшості сучасних ЕОМ;

підтримує різні парадигми програмування;

потужна мова, що містить засоби створення ефективних програм практично будь-якого призначення, від низькорівневих утиліт і драйверів до складних програмних комплексів самого різного призначення;

можливий доступ до тисячі раніше написаних програм;

гнучкість і надійність;

простота і ясність конструкцій;

можливість роботи на низькому рівні з пам'яттю, адресами, портами;

Недоліками мови С++ є:

погана підтримка модульності;

деякі перетворення типів не інтуїтивні;

препроцесор С ++ дуже примітивний;

мова C + + є складною для вивчення.

С++ в даний час вважається основною мовою, яка використовується для розроблення комерційних програмних продуктів.

Дякуючи своїй ефективності, простоті вона швидко отримала поширення у всьому світі. В наш час майже всі обчислювальні машини можуть працювати на цій мові. Тексти програм на цій мові легко перевіряються на правильність. Створена спеціально для навчання програмуванню мова стала успішною і відразу привернула увагу провідних спеціалістів. За короткий час мова С++ отримала широку популярність у всьому світі, тепер є на всіх машинах, починаючи з самих скромних мікрокомп'ютерів - до найбільших супер-ЕОМ, і практично для всіх операційних систем. Велика кількість програмістів використовує саме цю мову при розробці різного виду проектів. Очевидно, ця мова буде зберігати перше місце ще не один рік, при цьому як і раніше розвиваючись і вдосконалюючись.


2.6 Опис алгоритму рішення задачі


Програма моделювання координатного переміщення працює по такому алгоритму:

Завантаження Меню.

Після завантаження меню у ньому присутні три умови.

При виборі першої умови користувач починає гру з комп'ютером.

При виборі другої умови користувач починає гру з іншим користувачем.

При виборі третьої умови програма завершується.

Перевірка рахунку.

Імя переможця відображається на головному екрані.

логічний моделювання алгоритм програма

2.7 Виконання програми


Програма перевірки логічного мислення працює так: спочатку для запуску програми необхідно запустити виконавчий exe-файл.

Після того як зявиться робоче вікно програми користувач повинен обрати одну з трьох умов. Для зупинення роботи програми користувач повинен обрати "Вихід". Після того як користувач натисне "Грати з компютером" починається гра з компютером.

Якщо користувач обере "Грати з іншим користувачем" то починається гра з іншим користувачем. Після закінчення гри на робочому вікні зявиться імя переможця. Для того щоб вийти із програми треба у меню обрати "Вихід".

ВИСНОВОК


В даній курсовій роботі розроблена Програма перевірки логічного мислення.

В результаті розробки проекту я здобув навички роботи у середовищі програмування С++. Розширив свої знання про структуру внутрішніх даних компютера, а також багато дізнався про методи роботи з операційною системою за допомогою мови високого рівня С++. Відчув різницю між прикладним та системним програмуванням.


СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ


1. Тихомиров Ю.С., Громов Ю.Ю. Мова програмування С ++, спец. вид. / Kyiv, 2007.

. Програмування на мові високого рівня / Т.А. Павловська. - СПб .: Питер, 2009.

. Давидов В. Г. Програмування та основи алгоритмізації. Учеб. посібник / Давидов В. Г. - М .: Вища школа, 2003.



ДОДАТОК А


Схема алгоритму програми


ДОДАТОК Б


Лістинг програми


#include <windows.h>

#include <iostream>

#include <string>

#include <ctime>

#include <list>const int INFINITY = 1000000;enum {START, PLAYING, QUIT, OWIN, XWIN, DRAW} state;enum {REGULAR, PROGRESSIVE} display_mode;struct {::string name;symbol;move;game_win;draw_num;selected;win;

} player;display_board();seed_random_generator();get_move();display_result();select_game_type();get_player_symbol();get_player_name();reset_player_name();find_winner();reset_winner();update_board();update_screen();verify_move();reset_state();reset_board();initialise_player_move();display_intro();display_game_progress();update_game();setup_game_screen();wrong_symbol();wrong_selection();game_over();free_square();generate_moves(char _board[9], std::list<int> &move_list);check_game_state(char board[9]);evaluate_position(char _board[9], player _player);MiniMax(char _board[9], player _player);MinMove(char _board[9], player _player);MaxMove(char _board[9], player _player);player player1, player2, current_player; //std::string game_type;std::string prev_game_type;char board[9] = {0};char cSymbol;int nMove;main() {_random_generator();_game_screen();_intro();_game_type();(state != QUIT) {_player_name();_player_symbol();(state != QUIT) {(state == PLAYING) {_player_move();_move();_game();

}(game_over()) {_winner();_result();_game_statistic();_state();_board();_intro();

}_game_type();

}

}0;

}select_game_type() {::cout << " 1 - Igrat protiv computera." << std::endl;::cout << " 2 - Igrat protiv drugogo igroka." << std::endl;::cout << " 3 - Exit" << std::endl;::cout << "\nselection: ";choice;::cin >> choice;(!std::cin.good()) {::cout << "tol'ko integer'" << std::endl;_screen();

}(choice) {1:_type = "human vs computer";;2:_type = "human vs human";;3:= QUIT;;:::cout << "Nepravel'nui vibor'." << std::endl;_screen();

}(choice > 0 && choice < 3) {(prev_game_type != "" && game_type != prev_game_type) {_game_statistic();_player_name();_player_name();_player_symbol();

}(game_type.length() > 0) {_game_type = game_type;

}

}

}get_player_name() {::cin.sync();(game_type == "human vs computer") {::cout << "\nVvedite vashe imya: ";::getline(std::cin, player1.name);(player1.name.length() == 0) {_player_name();

}.name = "computer";

} else if(game_type == "human vs human") {(player1.name.length() == 0) {::cout << "\aIgrok 1, vvedite vashe imya: ";::getline(std::cin, player1.name);

}(player2.name.length() == 0) {::cout << "Igrok 2, vvedite vashe imya: ";::getline(std::cin, player2.name);

}

} else if(game_type == "computer vs computer") {.name = "computer player1";.name = "computer player2";

}

}reset_player_name() {.name.erase();.name.erase();

}get_player_symbol() {(game_type == "human vs computer") {selection = rand() % 2;(selection == 0) {() % 2 == 0 ? player2.symbol = 'X' : player2.symbol = 'O';= player2.symbol;.selected = 1;::cout << player2.name << " budet igrat'' \'" << player2.symbol << "\'" << std::endl;

} else if(selection == 1) {::cout << player1.name << " viberite vash simvol (X, O): ";::cin >> player1.symbol;.symbol = toupper(player1.symbol);= player1.symbol;.selected = 1;

}

} else if(game_type == "human vs human") {sel = rand() % 2;::string player_name = "";(sel == 0) {_name = player1.name;.selected = 1;

} else if(sel == 1) {_name = player2.name;.selected = 1;

}::cout << "\n" << player_name << " viberite vash simvol (X, O): ";(sel == 0) {::cin >> player1.symbol;.symbol = toupper(player1.symbol);= player1.symbol;

} else {::cin >> player2.symbol;.symbol = toupper(player2.symbol);= player2.symbol;

}

} else if(game_type == "computer vs computer") {::string player_name;sel = rand() % 2;(sel == 0) {() % 2 == 0 ? player1.symbol = 'X' : player1.symbol = 'O';_name = player1.name;.selected = 1;= player1.symbol;

} if(sel == 1) {() % 2 == 0 ? player2.symbol = 'X' : player2.symbol = 'O';_name = player2.name;.selected = 1;= player2.symbol;

}::cout << player_name << " budet igrat'' \'" << cSymbol << "\'" << std::endl;

}(!std::cin.good() || wrong_symbol()) {::cout << "tol'ko X ili O!'" << std::endl;("pause");_player_symbol();

}(!player2.selected) {.symbol == 'X' ? player2.symbol = 'O' : player2.symbol = 'X';.symbol == 'O' ? player2.symbol = 'X' : player2.symbol = 'O';

} else if(!player1.selected) {.symbol == 'X' ? player1.symbol = 'O' : player1.symbol = 'X';.symbol == 'O' ? player1.symbol = 'X' : player1.symbol = 'O';

}= PLAYING;

}get_move() {::cin.sync();(game_type == "human vs human") {(player1.selected) {::cout << player1.name << " vvedite vash hod (1 - 9): ";::cin >> player1.move;= player1.move;= player1.symbol;.selected = 0;.selected = 1;_player = player1;

} else if(player2.selected) {::cout << player2.name << " vvedite vash hod (1 - 9): ";::cin >> player2.move;= player2.move;= player2.symbol;.selected = 1;.selected = 0;_player = player2;

}

} else if(game_type == "human vs computer") {(player1.selected) {::cout << "\n" << player1.name << " vvedite vash hod (1 - 9): ";::cin >> player1.move;(!std::cin.good()) {::cin.clear();::cin.sync();

}= player1.move;= player1.symbol;_player = player1;.selected = 0;.selected = 1;(1000);

} else if(player2.selected) {.move = MiniMax(board, player2);= player2.move;= player2.symbol;_player = player2;.selected = 1;.selected = 0;_state();(1500);

}

} else if(game_type == "computer vs computer") {(player1.selected) {.move = MiniMax(board, player1);= player1.move;= player1.symbol;_player = player1;.selected = 0;.selected = 1;_state();(2500);

} else if(player2.selected) {.move = MiniMax(board, player2);= player2.move;= player2.symbol;_player = player2;.selected = 1;.selected = 0;_state();(2500);

}

}_move();(game_over()) {;

}

}set_game_statistic() {(state == START) {.game_win = 0;.draw_num = 0;.win = 0;.game_win = 0;.draw_num = 0;.win = 0;

} else if(state == XWIN || state == OWIN) {(player1.win) {.game_win++;.win = 0;

} else if(player2.win) {.game_win++;.win = 0;

}

} else if(state == DRAW) {.draw_num++;.draw_num++;

}

}reset_game_statistic() {.game_win = 0;.draw_num = 0;.win = 0;.game_win = 0;.draw_num = 0;.win = 0;.selected = 0;.selected = 0;

}display_game_statistic() {(state != START) {::cout << "\ngame statistic" << std::endl;::cout << "==============" << std::endl;::cout << player1.name << " has won " << player1.game_win << " game(s)." << std::endl;::cout << player2.name << " has won " << player2.game_win << " game(s)." << std::endl;::cout << player1.draw_num << " game(s) ended with a draw." << std::endl;

}

}find_winner() {(state == XWIN && player1.symbol == 'X') {.win = 1;

} else if(state == OWIN && player1.symbol == 'O') {.win = 1;

} else if(state == XWIN && player2.symbol == 'X') {.win = 1;

} else if(state == OWIN && player2.symbol == 'O') {.win = 1;

}

}reset_winner() {.win = 0;.win = 0;

}wrong_symbol() {(cSymbol != 'X' && cSymbol != 'O');

}wrong_selection() {!(nMove > 0 && nMove < 10);

}initialise_player_move() {.move = -1;.move = -1;

}game_over() {(state == XWIN || state == OWIN || state == DRAW);

}reset_state() {= PLAYING;

}reset_board() {(int i = 0; i < 9; ++i) {[i] = 0;

}

}update_board() {(state == PLAYING) {(player1.move != -1 && player2.move == -1) {[player1.move - 1] = player1.symbol;

} else if(player2.move != -1) {[player2.move - 1] = player2.symbol;

}

}

}display_result() {(player1.win) {::cout << player1.name << " pobedil!" << std::endl;

} else if(player2.win) {::cout << player2.name << " pobedil!" << std::endl;

} else if(player1.win == 0 && player2.win == 0) {::cout << "nichya!" << std::endl;

}("pause");("cls");

}update_game() {_board();_game_progress();_game_state(board);

}free_square() {(player1.move != -1 && player2.move == -1) {board[player1.move - 1] == 0;

} else if(player2.move != -1) {board[player2.move - 1] == 0;

}0;

}display_board() {::cout << std::endl;::cout << " " << board[0] << " | " << board[1] << " | " << board[2] << std::endl;::cout << "-----------" << std::endl;::cout << " " << board[3] << " | " << board[4] << " | " << board[5] << std::endl;::cout << "-----------" << std::endl;::cout << " " << board[6] << " | " << board[7] << " | " << board[8] << std::endl;::cout << std::endl;::cin.sync();

}display_game_progress() {(display_mode == PROGRESSIVE) {("cls");_intro();

}::cout << "\npole posle hoda " << current_player.name << std::endl;_board();

}verify_move() {(wrong_selection() || !free_square()) {::cout << "nepravelnui hod." << std::endl;(player2.move == -1) {.selected = 1;.selected = 0;

} else {.selected = 0;.selected = 1;

}("pause");(game_type == "human vs computer") {.selected = 1;.selected = 0;

}_move();

}

}seed_random_generator() {((unsigned) time(NULL));

}display_intro() {::cout << "\n/////////////////////////////////////////" << std::endl;::cout << " Krestiki-Noliki " << std::endl;::cout << "/////////////////////////////////////////" << std::endl;

}setup_game_screen() {("mode con: cols=99 lines=300");

}update_screen() {("pause");("cls");::cin.clear();::cin.sync();_intro();_game_type();

}check_game_state(char board[9]) {((board[0] == cSymbol && board[1] == cSymbol && board[2] == cSymbol) ||

(board[3] == cSymbol && board[4] == cSymbol && board[5] == cSymbol) ||

(board[6] == cSymbol && board[7] == cSymbol && board[8] == cSymbol) ||

(board[0] == cSymbol && board[3] == cSymbol && board[6] == cSymbol) ||

(board[1] == cSymbol && board[4] == cSymbol && board[7] == cSymbol) ||

(board[2] == cSymbol && board[5] == cSymbol && board[8] == cSymbol) ||

(board[0] == cSymbol && board[4] == cSymbol && board[8] == cSymbol) ||

(board[2] == cSymbol && board[4] == cSymbol && board[6] == cSymbol))

{(cSymbol == 'X') {= XWIN;

} else if(cSymbol == 'O') {= OWIN;

}

}{= DRAW;(int i = 0; i < 9; ++i) {(board[i] == 0) {= PLAYING;;

}

}

}

}generate_moves(char _board[9], std::list<int> &move_list) {(int i = 0; i < 9; ++i) {(_board[i] == 0) {_list.push_back(i);

}

}

}evaluate_position(char _board[9], player _player) {_game_state(_board);(game_over()) {((state == XWIN && _player.symbol == 'X') ||

(state == OWIN && _player.symbol == 'O')) {+INFINITY;

} else if((state == XWIN && _player.symbol == 'O') ||

(state == OWIN && _player.symbol == 'X')) {-INFINITY;

} else if(state == DRAW) {0;

}

}-1;

}MiniMax(char _board[9], player _player) {best_val = -INFINITY, index = 0;::list<int> move_list;best_moves[9] = {0};_moves(_board, move_list);(!move_list.empty()) {

_board[move_list.front()] = _player.symbol;= _player.symbol;val = MinMove(_board, _player);(val > best_val) {_val = val;= 0;_moves[index] = move_list.front() + 1;

} else if(val == best_val) {_moves[++index] = move_list.front() + 1;

}

_board[move_list.front()] = 0;_list.pop_front();

}(index > 0) {= rand() % index;

}best_moves[index];

}MinMove(char _board[9], player _player) {pos_value = evaluate_position(_board, _player);(pos_value != -1) {pos_value;

}best_val = +INFINITY;::list<int> move_list;_moves(_board, move_list);(!move_list.empty()) {

_player.symbol == 'X' ? cSymbol = 'O' : cSymbol = 'X';

_board[move_list.front()] = cSymbol;val = MaxMove(_board, _player);(val < best_val) {_val = val;

}

_board[move_list.front()] = 0;_list.pop_front();

}best_val;

}MaxMove(char _board[9], player _player) {pos_value = evaluate_position(_board, _player);(pos_value != -1) {pos_value;

}best_val = -INFINITY;::list<int> move_list;_moves(_board, move_list);(!move_list.empty()) {

_player.symbol == 'X' ? cSymbol = 'X' : cSymbol = 'O';

_board[move_list.front()] = cSymbol;val = MinMove(_board, _player);(val > best_val) {_val = val;

}

_board[move_list.front()] = 0;_list.pop_front();

}best_val;

}



ЗМІСТ 1. Вступ 2. Технічні характеристики 2.1Постановка задачі 2.2Визначення структури вхідних даних .3Визначення структури вихідних даних

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ