Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Получить системное время https://www.cyberforum.ru/ cpp-beginners/ thread202273.html
здравствуйте. как/с помощью какой функции можно полям своей структуры присвоить значения, соответствующих системным дате и времени?
Язык С.Программирование обработки структур данных. C++
Всем добрый вечер! народ это для меня сложновато заранее всем спасибо.emal.t.bekzat_ismail@mail.ru Тема:Программирование задач обработки структур данных. Цель лабораторной работы:получить навыки по обработке структур данных. Язык С (си) Даны характеристики обменных пунктов :название,курс покупки валюты , курс продажи валюты,адрес и телефон. Вывести адреса и названия обменных пунктов с...
C++ Одномерные массивы на Visual C++ 2008 : я новичек HELP Задача №1 Сформировать одномерный массив целых чисел, используя датчик случайных чисел и выполнить задание c использованием индексов: Условие: Удалить элементы, индексы которых кратны 3. Добавить после каждого отрицательного элемента массива элемент со значением | m+1|. Задание №2 Сформировать одномерный массив целых чисел, используя ввод данных с клавиатуры и выполнить задание: c... https://www.cyberforum.ru/ cpp-beginners/ thread202268.html C++ Три задачи на матрицы здавствуйте, помогите пожалуйстарешить пару задачек оч надо: 1) найти номер перого максимального элемента среди элементов, лежащего в диапазоне от а до в и расположенных правее первого положительного элемента 2)проверить, все ли строки матрицы содержат хотябы один нулевой элемент. Если нет то все отрицательные элементы матрицы заменить на нулевыею 3)дан массив а размерностью 30. Элементами... https://www.cyberforum.ru/ cpp-beginners/ thread202266.html
C++ Восьмимерка: поиск вектора в матрице
Дана матрица и вектор (могут быть любых размеров). Найти в матрице линейную последовательность элементов, совпадающих с элементами данного вектора, причем вектор может располагаться по любому из восьми направлений (по вертикалям, горизонталям, диагоналям). Сказали, что это аналогия какого-то известного ребуса. ПОМОГИТЕ или хотя бы натолкните на идею решения
C++ Как использовать rand()? генератор случайных чисел rand() подскажите пожелуста как работает ета штука. что означает %200, %200-100. какой принцип роботы https://www.cyberforum.ru/ cpp-beginners/ thread202256.html
C++ структуры https://www.cyberforum.ru/ cpp-beginners/ thread202243.html
вот нам на лекции дали эту прогу но когда вбиваю в ВС она не работает пытался разобраться не смог посмотрите пожалуйста и укажите на ошибки ) #include "stdafx.h" #include <stdio.h> #include <conio.h> #include <locale.h> #define MAXBOOKS 100 struct book { char title;
C++ ребят!!простейшая программа!!
определить возможность существования треугольника,используя формулу герона!! у меня только без герона получаетсяя((
C++ график функции https://www.cyberforum.ru/ cpp-beginners/ thread202227.html
вот код программы: #include <stdio.h> #include <conio.h> #include <math.h> float dlina(float a,int n,float h); void main() {clrscr(); float a,b,h,s; int n; printf("vvedite a,b,h:\n");
C++ Сортировка в структуре Опеределить группу здоровых школьников, используя сотношение "рост"-100="вес" Вывести на экран фамилию и имя самого маленького по росту и самого тяжелого. https://www.cyberforum.ru/ cpp-beginners/ thread202226.html
C++ Динамическое выделение памяти.
Доброго времени суток. Помогите, пожалуйста, решить задачу. Задача тривиальна - поиск и замена подстроки. Суть в чем: необходимо реализовать динамическое выделение памяти, то есть строка может быть довольно большой. Никак не разберусь с malloc. Итак, когда если я задам, например, строку (char s), то в тестах может встретиться строка большей длины. Как сделать так, чтобы этого не произошло.
C++ Расстояние между строками Добрый вечер! Напишите пожалуйста методы или алгоритмы (не код) нахождения расстояния между строками. Расстоянием между строками называется мера их схожести. Т.е чем меньше различия между строками, тем меньше между ними расстояние. Сравнить частоту вхождения символов, пар символов и т.д я догадался и сам, но может кто-то знает другие подходы? Добавлено через 1 час 2 минуты Нашёл все здесь \ https://www.cyberforum.ru/ cpp-beginners/ thread202222.html
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
06.12.2010, 06:21 0

крестик-нолик - функция пoбеды - C++ - Ответ 1173013

06.12.2010, 06:21. Показов 2668. Ответов 17
Метки (Все метки)

Ответ

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
#include <iostream>
#include <time.h>
#include <windows.h>
#include <math.h>
//#include <D:\\alex\\head-files\\mathem.h>
//#include <D:\\alex\\head-files\\kurs.h>
//#include <D:\\alex\\head-files\\factorial.h>
using namespace std;
const int n=3;  //матрица
//объявление функций
void inp(int x[][n]);//функция ввода
void out(int x[][n]);//функиця вывода матрицы
bool win(int x[][n]);//проверка на победу/проигрыш/ничью
void comp(int x[][n]);//функция интелекта компьютера
 
void main()
{
        int x[n][n]={0};        //инициализованная матрица
        while(true) //бесконечный цикл
{
                out(x); //вывод матрицы
        inp(x); //ввод крестика в матрицу
        if(win(x)==1)//если конец игры
        {
                                out(x);                 //вывод 
                                win(x);                 //выводит либо победителя                 
                break;                  //остановка цикла-игры
                                
        }
                else comp(x);   //если не конец игры,то ход компьютера
                                if(win(x)==1)
                                {
                                        out(x);                 //вывод
                                        win(x);                 //выводит либо победителя    
                                        break;                 //выводит либо победителя 
                                }
        }
}
 
void inp(int x[][n])
{
        int i=0,j=0;
loop: //цикл
        //вводим координаты-где будет Х
        cout<<"i=";
        cin>>i;
        cout<<"j=";
        cin>>j;
        if(x[i][j]==0)//если не занято то присвоить Х
        x[i][j]=1;
        else if(i>2 || j>2 || i<0 || j<0 || x[i][j]!=0)
        {
                cout<<"WRONG,TRY AGAIN"<<endl; //или же повторить ход сначала
                goto loop;
        }
}
void out(int x[][n]) //функция вывода матрицы
{
                system("cls");//заранее экран очищяется
        cout<<endl;
for(int i=0;i<1;i++)
{
                for(int m=0;m<n;m++)
                        cout<<"_____";
        cout<<endl;
}
for(i=0;i<n;i++)//
{
        for(int j=0;j<n;j++){
                
                        if(x[i][j]==1)
                cout<<"I"<<" X "<<"I";
                        else if(x[i][j]==2)
                                cout<<"I"<<" 0 "<<"I";
                        else if(x[i][j]==0)
                                cout<<"I"<<"   "<<"I";          
                }
        cout<<endl;
        for(int m=0;m<n;m++)
                        cout<<"_____";
        cout<<endl;
}
cout<<endl;     
}
 
bool win(int x[][n])//функция проверки игры
{
            for(int i = 0; i < n; i++)
        if(x[i][0] == x[i][1] && x[i][0] == x[i][2] && x[i][0]!=0)//Проверка i-ой линии
                {
                if(x[i][0]==1)cout<<"YOU WON!!!!!!"<<endl;
                else if(x[i][0]==2)cout<<"YOU LOSE!!!!!!"<<endl;
                return 1;
                }
     for( i = 0; i < n; i++)//
        if(x[0][i] == x[1][i] && x[0][i] == x[2][i] && x[0][i]!=0)//Проверка столбца
         {
                if(x[0][i]==1)cout<<"YOU WON!!!!!!"<<endl;
                else if(x[0][i]==2)cout<<"YOU LOSE!!!!!!"<<endl;
                return 1;
                }
     if(x[0][0] == x[1][1] && x[1][1] == x[2][2]  && x[0][0]!=0)//Проверка главной диагонали
                 {
                if(x[0][0]==1)cout<<"YOU WON!!!!!!"<<endl;
                else if(x[0][0]==2)cout<<"YOU LOSE!!!!!!"<<endl;
                return 1;
                }
     if(x[0][2] == x[1][1] && x[1][1] == x[2][0]  && x[0][2]!=0)//Проверка побочной диагонали
                {
                if(x[1][1]==1)cout<<"YOU WON!!!!!!"<<endl;
                else if(x[1][1]==2)cout<<"YOU LOSE!!!!!!"<<endl;
                return 1;
                } 
         int d=0;
         for( i=0;i<n;i++)//
                 for(int j=0;j<n;j++)
                         if(x[i][j]!=0)d++;//если данная ячейка не свободна то d++
                         if(d==9)//если d==9(то есть если нигде не пусто), то ничья
                         {
                                 cout<<"DRAW!!!!!!"<<endl;
                                 return 1;
                         }
        return 0;
}
 
void comp(int x[][n])//Ход компьютера. Если рядом с крестиком есть крестик,то рядом с другим крестиком написать 0
{
        int a=0,b=0, X, N;
        bool fl=true;
       for(int i=0; fl && i<n;i++)
       {
           X=0, N=0;
           for(int j=0;fl && j<n;j++)
           {
               if(x[i][j]==2) X++;
               if(x[i][j]==1) N++;
           }
           if(X==2 && N==0)
           {
               fl=false;
               for(int j=0; j<n; j++)
                   if(x[i][j]==0)
                       x[i][j]=2;
           }
       }
       for(i=0; fl && i<n;i++)//
       {
           X=0, N=0;
           for(int j=0;fl && j<n;j++)
           {
               if(x[j][i]==2) X++;
               if(x[j][i]==1) N++;
           }
           if(X==2 && N==0)
           {
               fl=false;
               for(int j=0; j<n; j++)
                   if(x[j][i]==0)
                       x[j][i]=2;
           }
       }
       X=0, N=0;
       for( i=0; fl && i<n;i++)//
       {
               if(x[i][i]==2) X++;
               if(x[i][i]==1) N++;
       }
       if(X==2 && N==0)
       {
           fl=false;
           for(int i=0; i<n; i++)
               if(x[i][i]==0)
                   x[i][i]=2;
       }
       X=0, N=0;
       for( i=0; fl && i<n;i++)//
       {
               if(x[2-i][i]==2) X++;
               if(x[2-i][i]==1) N++;
       }
       if(X==2 && N==0)
       {
           fl=false;
           for(int i=0; i<n; i++)
               if(x[2-i][i]==0)
                   x[2-i][i]=2;
       }
       //
        for( i=0; fl && i<n;i++)//
                for(int j=0;fl && j<n;j++)
                    if(x[i][j]==2)
                    {
                        if(i>0 && x[i-1][j]==0)
                        {
                            fl=false; x[i-1][j]=2;
                        }
                        else
                        if(j>0 && x[i][j-1]==0)
                        {
                            fl=false; x[i][j-1]=2;
                        }
                        else
                        if(i<2 && x[i+1][j]==0)
                        {
                            fl=false; x[i+1][j]=2;
                        }
                        else
                        if(j<2 && x[i][j+1]==0)
                        {
                            fl=false; x[i][j+1]=2;
                        }
                        else
                        if(i>0 && j>0 && x[i-1][j-1]==0)
                        {
                            fl=false; x[i-1][j-1]=2;
                        }
                        else
                        if(i>0 && j<2 && x[i-1][j+1]==0)
                        {
                            fl=false; x[i-1][j+1]=2;
                        }
                        else
                        if(i<2 && j<2 && x[i+1][j+1]==0)
                        {
                            fl=false; x[i+1][j+1]=2;
                        }
                        else
                        if(i<2 && j>0 && x[i+1][j-1]==0)
                        {
                            fl=false; x[i+1][j-1]=2;
                        }
                    }
         if(fl)
         {
             for(int i=0;i<n;i++)
                 for(int j=0;j<n;j++)
                 {                       
 rrand:          a=rand()%3;
                        b=rand()%3;
                                if(x[a][b]==0)x[a][b]=2;
                        else goto rrand;
                        i=n;
                                j=n;
                }
         }
}
Сейчас мозг (как Вы его называете), работает так: - сначало ищет в строках столбцах и диагоналях наличие 2-х ноликов и отсутствие крестиков. Если такие находятся, то ставит там недостающий нолик и получается выигрыш.
- если таких строк, столбцов или диагоналей нет, то ищет любой нолик и ставит рядом с ним на пустое место еще один ноль.
- если и таких не нашлось, то тогда используется rand().
Вроде получилось, то что Вы хотели, но нет пределу совершенства. На мой взгляд недостатки следующие:
- Например в одной строке стоят: самый левый нолик, самый правый крестик (посередине пусто). Эта программа запросто поставит на пустое место нолик (добавляя его уже стоящему) - хотя вариант все равно не выигрышный заранее.
- Также нет учета за действиями противника. Например ход нолика. Если крестикам осталось до выигрыша 1 ход, этот факт ноликом будет игнорироваться. И ставить нолик он будет к уже имеющемуся нолику, а не туда, где можно предотвратить выигрыш крестиков.
Если Вас устроит данный вариант, пожалуйста. Если что-нибудь хотите улучшить, пишите будем работать дальше.

Вернуться к обсуждению:
крестик-нолик - функция пoбеды C++
1
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2010, 06:21
Готовые ответы и решения:

крестик-нолик - функция победы
пишу игру крестики нолики. функция bool win(int x; порверят на каждом шагу наличие на победу. Как...

крестик-нолик-условие ничьи
как написать условие ничьи для игры крестики нолики? Если рассмотреть доску как матрицу,то я смог...

Интеллект компьютера в игре Крестик-Нолик
вот написал себе игру крестик нолик. Все нормально получилось. Просто вот не могу объяснить...

Игра крестики-нолик
Пишу игру крестики-нолики с хоть каким-то ИИ. Есть функция bot_attack и функция bot_def bool...

17
06.12.2010, 06:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2010, 06:21
Помогаю со студенческими работами здесь

Адаптировать нолик в корзине
Вот сайт с которым ковыряюсь: http://htmltestolivegrey.dtraduga.vh55.hosterby.com Справа вверху...

Как из еденички сделать нолик
здравствуйте. мне надо при происхождении события менять некоторое число. типа есть число х=0,...

Список, выводит лишний нолик
Задание таково: Внести значения, выбрать количество элементов которые должны вывестись на экран с...

Холодильник Privileg PNC 925942654-01, ошибка , высвечивает верхний нолик
Холодильник Privileg , PrivNr 4734 , PNC 925942654-01 высвечивает верхний нолик на индикаторе...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru