Програма перевірки логічного мислення

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    18,34 Кб
  • Опубликовано:
    2015-07-15
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Програма перевірки логічного мислення

ЗМІСТ

1. Вступ

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

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

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

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

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

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

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

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

Висновок

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

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

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

        
ВСТУП

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ідентифікатор

Тип

Діапазон

Пояснення

1

Minimax

int

0..255

Головна функція для алгоритму MiniMax

2

MinMove

int

0..255

Допоміжна функція для алгоритму

3

MaxMove

int

0..255

Допоміжна функція для алгоритму


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

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

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

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

Ідентифікатор

Тип

Диапазон

Пояснення

1

Symbol

char

0..255

Гральний символ

2

Move

int

0..100

3

Board

char

9

Гральне поле


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();

}

}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;

}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;

}

Похожие работы на - Програма перевірки логічного мислення

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!