Вы находитесь на странице: 1из 13

Федеральное агентство железнодорожного транспорта

Омский государственный университет путей сообщения

Кафедра «Автоматика и системы управления»

ПРОГРАММА «БЫКИ И КОРОВЫ»


Пояснительная записка к курсовой работе
по дисциплине «Программирование»
ИНМВ.400000.000 ПЗ

Студентка группы 25м


____________ Горбова К. С.
«__»________2016 г.

Руководитель – преподаватель
кафедры АиСУ
___________ Александров А.В
«__»________2016 г.

Омск 2016
Реферат

УДК 681.3.06

Пояснительная записка к курсовой работе содержит 13 страниц,


5 рисунков, 1 источник, 1 приложение.
Цель курсовой работы – научиться реализовывать пошаговую игру и
отработать навыки программирования, полученные в ходе обучения.
Результатом курсовой работы является рабочая игра «Быки и коровы»
с интерфейсом командной строки.
Игра «Быки и коровы» разработана с помощью компилятора
«MinGW», исходный текст программы написан на C.
Пояснительная записка выполнена в текстовом редакторе Microsoft
Word 2010.

2
Содержание

Введение...................................................................................................................4
1 Проект «Быки и коровы».....................................................................................5
1.1 Правила игры.....................................................................................................5
1.2 Работа приложения............................................................................................5
1.3 Функция создания числа...................................................................................8
Заключение...............................................................................................................9
Библиографический список..................................................................................10
Приложение А........................................................................................................11

3
Введение

C (Си) является универсальным языком программирования высокого


уровня, который содержит команды низкого уровня, подобно языку
ассемблера. Программа на языке Си может быть скомпилирована в
машинные коды почти для всех типов процессоров. Удачное сочетание
лаконичности конструкций и богатства выразительных возможностей
позволило языку Си быстро распространиться и стать сегодня наиболее
популярным языком прикладного и системного программирования. Можно
даже сказать, что Си стал фундаментом, на котором строится современное
программирование.
Язык программирования C (Си) был создан в 1972 г. в фирме Bell
Laboratories Деннисом Ритчи (Dennis MacAlistair Ritchie) в атмосфере,
которую один из участников разработки определил как «благотворное
пренебрежение». Никто из руководителей компании не заказывал нового
языка.
Ритчи надеялся, что его новый язык пригодится для
программирования новой операционной системы «Юникс» (UNIX), работа
над которой тоже не входила в официальные планы компании. В результате
язык возник лишь как результат дружеского соревнования внутри небольшой
группы программистов лаборатории. «Не было ни проектов, ни
спецификаций, ни требований, вспоминал один из членов группы, почти все
родилось просто из обсуждений».
Название C (Си) появилось так же случайно, как и сам язык. Он
оказался преемником ранее созданного языка В (Би), написанного автором
UNIX Кеном Томпсоном (Ken Thompson). Язык Би отчасти основывался на
созданном в Кембриджском университете Мартином Ричардсом (Martin
Richards) языке BCPL, который в свою очередь был потомком Алгола-60.

4
1 Проект «Быки и коровы»

Разработанная программа реализует игровую ситуацию «Быки и


коровы» между компьютером и игроком. Компьютер загадывает любое
положительное четырехзначное число с разными цифрами, не содержащее
ноль, а игрок, в свою очередь, должен угадать это число.

Рисунок 1 – Игровой процесс

1.1 Правила игры


Быки и коровы – логическая игра, первоначально задуманная для
двух игроков, но с появлением компьютерных версий стал превалировать
вариант, когда один игрок отгадывает число, задуманное программой, то есть
играет в одиночку. Варианты игры могут зависеть от типа отгадываемой
последовательности – это могут быть числа, цвета, пиктограммы или слова. В
нашем случае – это числа.
Рассмотрим принцип игры «Быки и коровы». Игрок вводит четыре
числа, если цифра из введенного числа есть в загаданном, то эта ситуация
называется «корова». Если введенное число, есть в отгадываемом числе и
стоит в том же месте – это называется «Быки».
1.2 Работа приложения
После запуска программы, появляется игровое окно, в котором кратко
изложен принцип игры и само начало игры начинается с введения числа
пользователем с клавиатуры.

5
Рисунок 2 – Игровой процесс
После ввода числа пользователем компьютер начинает
трехступенчатую проверку на правильность ввода. В случае если введенное
число не соответствует требованиям, выводится сообщение об ошибке и
компьютер просит ввести число заново.
После проверки числа (в случае если оно введено корректно),
компьютер проверяет наличие соответствий, то есть сопоставляет введенное
число пользователем с загаданным компьютером. После проверки выдает
результат: «Б» или «Быки» и «К» или «Коровы».

Рисунок 3 – Ход игрока


После этого компьютер снова попросит ввести число. Игра
продолжается до тех пор, пока игрок не угадает число или же использует все
попытки. После использования всех попыток, а их пятнадцать, компьютер
выводит, какое число было задумано.
6
Рисунок 4 – Окончание игры
В случае победы или же проигрыша, компьютер предлагает сыграть
ещё, для этого нужно ввести для согласия «Y\y» или для отказа «N\n» и
нажать клавишу «ENTER».

Рисунок 5 – Начало новой игры

7
1.3 Функция создания числа
В данной программе в каждой новой игре генерируются разные числа,
для этого используется следующая функция:
void create_number()
{
int i=0, j;
char symbols[] = "123456789";

while(i<4)
{
srand(time(NULL));
j = rand()%9;
if(symbols[j] !=0)
{
number[i++] = symbols[j];
symbols[j]=0;
}
}
}
Листинг 1 – Функция создания числа
Из массива символов с помощью функции srand и цикла while
генерируются 4 случайных числа и записываются в переменную j.

8
Заключение

Для курсовой работы была разработана игра «Быки и коровы» с


интерфейсом командной строки. Главной задачей являлось изучение языка C
и отработка навыков программирования.
Программа была написана в текстовом редакторе «Notepad++». При
оформлении кода использовался стиль BSD (Олмана). Игра была разработана
при помощи компилятора «MinGW».

9
Библиографический список

1 Б. Керниган, Язык программирования C / Б. Керниган, Д. Ритчи. М.


Вильямс, 2009. 304 с.
2 А. Шень, Игры и стратегии с точки зрения математики, 2010. 278 с.
3 Т.Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн, Алгоритмы.
Построение и анализ, 2005. 1277 с.

10
Приложение А
(обязательное)
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

char number[5];
char guess[5];
int max_num_tries = 15, tries=0;

/* Функция для ввода числа пользователем */


void ask_number()
{
printf("\n Введите число, состоящее из четырёх цифр:
");
scanf("%s", &guess);
printf("\n Ввели: %s", guess);
}

/* Трехступенчатая функция для проверки введенного числа */


int proverka()
{
int q=0, w, i;

if(strlen(guess)!=4)
{
printf(" - Ошибка! Неверный ввод!");
return 0;
}
for(q=0;q<4;q++)
{
if(guess[q]<'1' || guess[q]>'9')
{
printf(" - Ошибка! Неверный ввод!");
return 0;
}
}
for(q=0;q<3;q++)
{
for(w=q+1;w<4;w++)
{
if(guess[q] == guess[w])
{
printf("\nЦифры в числе не должны
повторяться!");
return 0;
}
}
Листинг А.1, лист 1
11
}
return 1;
}

/* Функция создания числа компьютером */


void create_number()
{
int i=0, j;
char symbols[] = "123456789";

while(i<4)
{
srand(time(NULL));
j = rand()%9;
if(symbols[j] !=0)
{
number[i++] = symbols[j];
symbols[j]=0;
}
}
}

void ask_play_again()
{
char a;
printf("\nХотите сыграть ещё? [Y\\n] ");
scanf("%s", &a);
switch(a)
{
case 'y': start_game();
case 'Y': start_game();
case 'N': exit(0);
case 'n': exit(0);

}
}

/* Функция проверки на наличие быков и коров */


void search_bulls_cows()
{
int i, j;
int cows=0, bulls=0;

for(i=0;i<4;i++)
{
if(number[i] == guess[i]){bulls++; printf(" Б");}
else
{
for(j=0;j<4;j++)
if(number[i] == guess[j]){cows++;
Листинг A.1, лист 2
12
printf(" К");}
}
}

if(bulls==4)
{
printf(" Поздравляю! Вы угадали, использовав при
этом %i попыток", tries);
ask_play_again();
}
}

/* Функция начала игры */


int start_game()
{
int i=0;
number[4]=guess[4]=0;
printf("\n
********************************************** \n Компьютер
загадывает число из 4 цифр(от 1 до 9),\n Вы вводите число и
компьютер сообщает вам,\n какие из чисел стоят в правильном(быки
или Б)\n и в неправильном положении(коровы или К).\n Цифры в
числе не повторяются и оно не может содержать ноль.\n");
create_number(); // Создание числа
while(i<max_num_tries)
{
ask_number(); // Ввод числа пользователем
if(proverka()) search_bulls_cows(); // Проверка на
наличие быков и коров
i++;
tries++;
}
if(i==max_num_tries)
{
printf("\nИзвините, но Вы имеете только %i
попыток, число было %s", max_num_tries, number);
ask_play_again();
}
}

int main()
{
start_game();
}
Листинг А.1, лист 3

13