Форум программистов, компьютерный форум CyberForum.ru

Нужна оценка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Циклический алгоритм http://www.cyberforum.ru/cpp-beginners/thread231810.html
Люди помогите разобраться сижу и не могу на первой фото вставлен пример решения задачи, на втором фото то что нужно мне сделать ..помогите сделать и разобраться очень прошу.. спасибо всем..
C++ двойная буферизация можете помочь мне нужен простой пример двойной буферизации а то уже второй день не могу разобраться...и если можно прокоментированый код. Буду очень благодарен!!! Добавлено через 22 часа 10 минут ник то не знает что такое двойная буферизация??? http://www.cyberforum.ru/cpp-beginners/thread231804.html
Цикл while C++
Написал код, если Х изначально взять двойку, то программа пишет, что она не является степенью двойки. Как это иправить ? Она же вроде как является степенью =) #include <iostream> int main(){ setlocale(LC_ALL,"Russian"); double x;
C++ Необходимо изменить программу в C++
Здравствуйте. Собственно есть программа, которая минимизирует модель методом сопряженных направлений Пауэлла. Код: #include <iostream.h> //Метод сопряженных направлений #include <math.h> #include <conio.h> double f(double x1,double x2) { return 4*(x1-5)*(x1-5)+(x2-6)*(x2-6);} int main(){ double E=0.1, min, var, t;
C++ Как посчитать количество элементов в массиве и распечатать его? http://www.cyberforum.ru/cpp-beginners/thread231771.html
Как посчитать кол-во элементов в массиве и распечатать его? В символьных строках, вроде как strlen, а с цифрами как? Вроде как надо использовать sizeof, но как он работает я не понимаю.
C++ Аргументы по умолчанию (что не так ?) #include "stdafx.h" #include "sys.h" #include <iostream> using namespace std; int box ( int lenght = 1, int width = 1, int height = 1); int main () { sys(); cout << "Значение по умолчанию: " << box(); подробнее

Показать сообщение отдельно
%user_name%
0 / 0 / 0
Регистрация: 20.01.2011
Сообщений: 4

Нужна оценка - C++

20.01.2011, 19:42. Просмотров 817. Ответов 14
Метки (Все метки)

Всем доброго времени суток.
Чуть меньше недели назад начал изучать С++ и сегодня написал таки некое подобие программы.

Суть просьбы: нужна чья-нибудь проверка на явный быдлокод/неудачные моменты; хотелось бы услышать мнение от всех, кто пишет больше моего. Сорсы, разумеется, прикреплены.
Буду рад любой критике в свой адрес.

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
// Игра в крестики-нолики.
#include <iostream>
#include <conio.h>
 
using namespace std;
 
// Класс для создания ячеек поля. 
// value - значение: -1 "нолик", 1 "крестик", 0 пусто; prior - приоритет ячейки.
class Cell 
{
    public:
        int getValue () { return value; }
        void setValue ( int val ) { value = val; } 
        int getPrior () { return prior; }
        void setPrior ( int pr ) { prior = pr; }
    private:
        int value, prior;
};
 
void CreateField ( Cell **pField );
int SetPriority ( Cell **pField );
int CheckResultFromLastStep ( Cell **pField );
void Crossing ( Cell **pField );
void Zeroing ( Cell **pField );
 
 
int main()
{
    enum Cycle { UWin, CWin, CycCont, CycBreak };
    int fCycle, fCycle0, UserSc=0, CompSc=0;
    do
    {
        Cell **Field = new Cell*[3]; // Создание массива 3х3.
        for ( int i=0; i<3; i++ )
        {
            Field[i] = new Cell[3];
        }
        CreateField ( &*Field ); // Установка первоначальных значений и приоритетов.
        fCycle=2;
        fCycle0=2;
        while( fCycle==CycCont && fCycle0==CycCont )
        {
            system ("cls");
            cout << "Welcome to Tic-Tac-Toe                                    ";
            cout << "You " << UserSc << " - " << CompSc << " Comp \n\n";
            for ( int i=0; i<3; i++ ) //Вывод поля.
            {
                for ( int j=0; j<3; j++ )
                {
                    if ( Field[i][j].getValue () == 1 )
                        cout << "X ";
                    if ( Field[i][j].getValue () == -1 )
                        cout << "Y ";
                    if ( Field[i][j].getValue () == 0 )
                        cout << "_ ";
                }
                cout << endl;
            }
            cout << endl;
            Crossing ( &*Field ); // Ввод "крестика", изменение значения ячейки и ее приоритета.
            fCycle = SetPriority ( &*Field ); // Поиск наилучшей ячейки для следующего хода ИИ (по приоритету), проверка на выйгрыш пользователя.
            if (fCycle == CycCont)
            {
                Zeroing ( &*Field ); // Ввод "нолика", изменение значения ячейки и ее приоритета.
                fCycle0 = CheckResultFromLastStep ( &*Field ); // Проверка результатов после последнего действия ИИ, переустановка приоритета.
            }
        }
        for (int i=0; i<3; i++) // Удаление массива.
            delete Field[i];
        delete [] Field;
 
        cout << "\n\n";
        if ( fCycle==UWin )
        {
            cout << "You won!!1 \n\n";
            UserSc++;
        }
        if ( fCycle0==CWin )
        {
            cout << "Computer won! \n\n";
            CompSc++;
        }
        if ( fCycle==CycBreak )
        {
            cout << "Nobody won.. \n\n";
        }
        getch();
    } while ( true );
    getch();
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Установка значения всех клеток на "0" (пустые) и установка приоритета на 3 для угловых, 4 - центральной, 1 - остальных.
void CreateField ( Cell **pField )
{
    for ( int i=0; i<3; i++ )
        for ( int j=0; j<3; j++ )
        {
            pField[i][j].setValue(0);
            pField[i][j].setPrior(1);
        }
    pField[1][1].setPrior(4);
    pField[0][0].setPrior(3);
    pField[0][2].setPrior(3);
    pField[2][0].setPrior(3);
    pField[2][2].setPrior(3);
}
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
// Установка приоритета в случае заполнения пользователем 2-х рядомстоящих клеток.
int SetPriority ( Cell **pField )
{
    int fNoWinner=0, fUser;
    for ( int i=0; i<3; i++ ) // Определение элементов (крестиков и ноликов) по строкам и столбцам.
    {
        fUser=0;
        for ( int j=0; j<3; j++ ) // Поиск элементов по строкам.
            if ( pField[i][j].getValue()==1 )
                fUser++;
        if ( fUser==3 ) // Определение победил ли игрок.
            return 0;
        if ( fUser==2 ) // Есть ли строки/столбцы, в которых пользователю осталось заполнить одну ячейку.
            for ( int j=0; j<3; j++ ) // Если есть - находим эту ячейку и присваиваем ей повышенный приоритет.
                if ( pField[i][j].getValue()==0 )
                    pField[i][j].setPrior(10);
    }
//------------------------------------------------------------------------------------
    for ( int j=0; j<3; j++ ) // Определение элементов (крестиков и ноликов) по строкам и столбцам.
    {
        fUser=0;
        for ( int i=0; i<3; i++ ) // Поиск элементов по столбцам.
            if ( pField[i][j].getValue()==1 )
                fUser++;
        if ( fUser==3 ) // Определение победил ли игрок.
            return 0;
        if ( fUser==2 ) // Есть ли строки/столбцы, в которых пользователю осталось заполнить одну ячейку.
            for ( int i=0; i<3; i++ ) // Если есть - находим эту ячейку и присваиваем ей повышенный приоритет.
                if ( pField[i][j].getValue()==0 )
                    pField[i][j].setPrior(10);
    }
//------------------------------------------------------------------------------------
    fUser=0;
    for ( int i=0; i<3; i++ ) // Определение элементов на диагоналях.
        for ( int j=0; j<3; j++ ) // Определение элементов на главной диагонали.
            if ( i==j && pField[i][j].getValue()==1 )
                fUser++;
    if ( fUser==3 ) // Определение победил ли игрок.
        return 0;
    if ( fUser==2 ) // Осталось ли пользователю заполнить одну ячейку на диагонали.
        for ( int i=0; i<3; i++ ) // Если такая ячейка есть - находим ее и присваиваем ей повышенный приоритет.
            for ( int j=0; j<3; j++ )
                if ( pField[i][j].getValue()==0 && i==j )
                    pField[i][j].setPrior(10);
//------------------------------------------------------------------------------------
    fUser=0;
    for ( int i=0; i<3; i++ ) // Определение элементов на диагоналях.
        for ( int j=0; j<3; j++ ) // Определение элементов на побочной диагонали диагонали.
            if ( i+j==2 && pField[i][j].getValue()==1 )
                fUser++;
    if ( fUser==3 ) // Определение победил ли игрок.
        return 0;
    if ( fUser==2 ) // Осталось ли пользователю заполнить одну ячейку на диагонали.
        for ( int i=0; i<3; i++ ) // Если такая ячейка есть - находим ее и присваиваем ей повышенный приоритет.
            for ( int j=0; j<3; j++ )
                if ( pField[i][j].getValue()==0 && i+j==2 )
                    pField[i][j].setPrior(10);
//------------------------------------------------------------------------------------
    for ( int i=0; i<3; i++ ) // Проверка на заполненность всего поля.
        for ( int j=0; j<3; j++ )
            if ( pField[i][j].getPrior()==-1 )
                fNoWinner++;
    if ( fNoWinner==9 )
        return 3;
    else
        return 2;
}
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
// Проверка результатов после последнего действия ИИ.
int CheckResultFromLastStep ( Cell **pField )
{
    int fNoWinner=0, fComp;
    for ( int i=0; i<3; i++ ) // Определение элементов (крестиков и ноликов) по строкам и столбцам.
    {
        fComp=0;
        for ( int j=0; j<3; j++ ) // Поиск элементов по строкам.
            if ( pField[i][j].getValue()==-1 )
                fComp++;
        if ( fComp==3 ) // Победил ли ИИ.
            return 1; 
        if ( fComp==2 ) // Есть ли строки/столбцы, в которых ИИ осталось заполнить одну ячейку.
            for ( int j=0; j<3; j++ ) // Если есть - находим эту ячейку и присваиваем ей повышенный приоритет.
                if ( pField[i][j].getValue()==0 )
                    pField[i][j].setPrior(12);
    }
//------------------------------------------------------------------------------------
    for ( int j=0; j<3; j++ ) // Определение элементов (крестиков и ноликов) по строкам и столбцам.
    {
        fComp=0;
        for ( int i=0; i<3; i++ ) // Поиск элементов по столбцам.
            if ( pField[i][j].getValue()==-1 )
                fComp++;
        if ( fComp==3 ) // Победил ли ИИ.
            return 1; 
        if ( fComp==2 ) // Есть ли строки/столбцы, в которых ИИ осталось заполнить одну ячейку.
            for ( int i=0; i<3; i++ ) // Если есть - находим эту ячейку и присваиваем ей повышенный приоритет.
                if ( pField[i][j].getValue()==0 )
                    pField[i][j].setPrior(12);
    }
//------------------------------------------------------------------------------------
    fComp=0;
    for ( int i=0; i<3; i++ ) // Определение элементов на диагоналях.
        for ( int j=0; j<3; j++ ) // Определение элементов на главной диагонали.
            if ( i==j && pField[i][j].getValue()==-1 )
                fComp++;
    if ( fComp==3 ) // Победил ли ИИ.
        return 1; 
    if ( fComp==2 ) // Осталось ли ИИ заполнить одну ячейку на диагонали.
        for ( int i=0; i<3; i++ ) // Если такая ячейка есть - находим ее и присваиваем ей повышенный приоритет.     
            for ( int j=0; j<3; j++ ) 
                if ( pField[i][j].getValue()==0 && i==j )
                    pField[i][j].setPrior(12);
//------------------------------------------------------------------------------------
    fComp=0;
    for ( int i=0; i<3; i++ ) // Определение элементов на диагоналях.
        for ( int j=0; j<3; j++ ) // Определение элементов на побочной диагонали диагонали.
            if ( i+j==2 && pField[i][j].getValue()==-1 )
                fComp++;
    if ( fComp==3 ) // Победил ли ИИ.
        return 1; 
    if ( fComp==2 ) // Осталось ли ИИ заполнить одну ячейку на диагонали.
        for ( int i=0; i<3; i++ ) // Если такая ячейка есть - находим ее и присваиваем ей повышенный приоритет.     
            for ( int j=0; j<3; j++ ) 
                if ( pField[i][j].getValue()==0 && i+j==2 )
                    pField[i][j].setPrior(12);
//------------------------------------------------------------------------------------
    return 2;
}
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
// Ввод координат для хода пользователя; перерасчет значений и приоритета для хода ИИ.
void Crossing ( Cell **pField )
{
    bool fl=0;
    int X,Y;
    while ( fl==0 ) // Ввод, изменение значения ячейки и ее приоритета.
    {
        cout << "Enter coords X: ";
        cin >> X;
        X--;
        cout << "Enter coords Y: ";
        cin >> Y;
        Y--;
        if ( X<=2 && Y<=2 )
            if ( pField[X][Y].getValue() == 0 )
            {
                fl=1;
                pField[X][Y].setValue(1);
                pField[X][Y].setPrior(-1);
            }
            else
                cout << "Incorrect coords" << endl;
        else
            cout << "Incorrect coords" << endl;
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Нахождение наибольшего приоритета, ход компьютера.           
void Zeroing ( Cell **pField )
{
    int max=0, X=0, Y=0;
    for ( int i=0; i<3; i++ ) // Поиск максимального значения приоритета с запоминанием индексов.
        for ( int j=0; j<3; j++ )
            if ( max<pField[i][j].getPrior() )
            {
                max = pField[i][j].getPrior();
                X = i;
                Y = j;
            }
    pField[X][Y].setValue(-1);
    pField[X][Y].setPrior(-1);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru