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

Вопрос по Visual Studio 2008 - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Реализовать двунаправленный список в духе списка из STL http://www.cyberforum.ru/cpp-beginners/thread241382.html
Все-таки видимо у меня всегда останутся с этим проблемы. Само определение скидывать не буду, я пытаюсь сделать, что-то вроде STL-ного списка. Спросить хочу только одно. void push_back(const T& el) { Node* tmp=new Node(el); if(empty()) { head=tmp;
C++ порядок в выражении a.x < b.x || a.x == b.x && a.y < b.y как это понять: как (a.x < b.x || a.x == b.x) && a.y < b.y или a.x < b.x || (a.x == b.x && a.y < b.y) Можно ли это заменить a.x <= b.x && a.y < b.y ? http://www.cyberforum.ru/cpp-beginners/thread241378.html
Перегрузка операторов >>, << C++
Помогите перегрузить операторы ввода и вывода в классе Time. (Я совсем-совсем новичек...)Заранее всем спасибо.class Time { friend ostream &operator<<(ostream &, const Time &); friend istream &operator>>(istream& , Time &); private: int hour; int minute; public: Time(int hour = 0, int minute = 0, int second = 0 ); void setTime(int, int, int);
меню сортировок C++
Первый case работает хорошо.а два последних не хотят... #include<iostream> #include<ctime> using namespace std; void main() { srand(time(0)); setlocale(0,"rus"); cout<<" Вариант a - для сортировки вставкой \n"; cout<<" Вариант b - для сортировки выбором \n";
C++ птички http://www.cyberforum.ru/cpp-beginners/thread241353.html
на дереве сидит n(0<n<1000000)птичек .они по очереди поют натуральные цифра,начиная 1-го.во время каждой следующей песни улетает то количество птичек,какое число они поют.если количество оставшихся птичек меньше того числа которого должны птички спет ,песня начинается сначала. сколько времени продлится песня птичек,если нато что спет одну цифру нужно одна секунда и улетают они мгновенно ?
C++ Поскорее бы. Точно условие не помню но суть в том что вводится с клавы логическое выражение. например А и Б и (В или С) только или, и и остальные условия тоже буквы. Надо решить выражение. Это на стэки и строки по моему. Просьба объяснить текст который напишите. Ну хоть написать какая буква что означает. И надо примитивно. по крайней мере желательно) Программа на С++!!!!!! подробнее

Показать сообщение отдельно
4ance
1 / 1 / 0
Регистрация: 02.11.2010
Сообщений: 78
11.02.2011, 21:15  [ТС]     Вопрос по Visual Studio 2008
Цитата Сообщение от silent_1991 Посмотреть сообщение
4ance, а чисто теоретически данная программа может столько выполняться? Может там зациклилось чего, а вы ждёте.
Там идёт последовательность действий 17!(факториал) раз.
Программу тестировал вдоль и поперёк на малых значениях ( до 5! включительно ) - работает, зацикливания нет, так что в этом я уверен. Могу кинуть код, но в нём долго разбираться - да и не за чем.

Утром попытался запустить её для значений 6!, она дебажилась больше минуты - вырубил( лень ждать было), поставил сразу на максимум - просто для интереса сколько времени займёт это. Вот сижу до сих пор

Хотя функцию, которая выполняется 3,5 х 10^34 раз (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
int UnichtojenieFigury( int *x, int *y, int Ocherednost )
{
    cout << "Ocherednost = " << Ocherednost << endl;
    cout << "*( x + Ocherednost ) = " << *( x + Ocherednost ) << endl;
    cout << "*( y + Ocherednost ) = " << *( y + Ocherednost ) << endl;
    cout << "*( x + Ocherednost + 1 ) = " << *( x + Ocherednost + 1 ) << endl;
    cout << "*( y + Ocherednost + 1) = " << *( y + Ocherednost + 1 ) << endl;
 
    int Doska[ 8 ][ 8 ];     // Шахматное поле
    int Queue[ 2 ][ 64 ];    // Очередь [ 2 ] - для координат х и у, [ 64 ] - 64 поля на доске
    int i, j;                // Переменные для цикла for
    int a, b;                // Координаты х и у для Queue[][]
    int Start;               // Метка начала очереди
    int Last;                // Метка конца очереди
 
    for ( i = 0; i < 8; i++ )
        for ( j = 0; j < 8; j++ )
            Doska[ i ][ j ] = -1;        // Заполняет матрицу значением -1                         
 
    Doska[ *( x + Ocherednost ) ][ *( y + Ocherednost ) ] = 0;        // Клетка начала пути
 
    cout << "Doska[ *( x + Ocherednost ) ][ *( y + Ocherednost ) ] = " << Doska[ *( x + Ocherednost ) ][ *( y + Ocherednost ) ] << endl;
    cout << "Doska[ *( x + Ocherednost + 1 ) ][ *( y + Ocherednost + 1 ) ] = " << Doska[ *( x + Ocherednost + 1 ) ][ *( y + Ocherednost + 1 ) ] << endl;
 
    Queue[ 0 ][ 0 ] = *( x + Ocherednost );        // Заносит в очередь координату Х начальной клетки
    Queue[ 1 ][ 0 ] = *( y + Ocherednost );        // Заносит в очередь координату Y начальной клетки
    Start = 0;                    // Начальная позиция левого указателя
    Last = 1;                    // Начальная позиция правого указателя
 
    // Запускаем цикл, который продолжает работу до тех пор,
    // пока очередь не пуста или искомый конечный элемент не помечен
    while ( ( Start != Last ) && ( Doska[ *( x + Ocherednost + 1 ) ][ *( y + Ocherednost + 1 ) ] == -1 ) )
    {
        a = Queue[ 0 ][ Start ];    // Запоминает координату Х текущей клетки
        b = Queue[ 1 ][ Start ];    // Запоминает координату Y текущей клетки
 
        /* Следующие 8 операторов if перебирают все возможные ходы коня,
        предусматривая возможность выхода за пределы поля, и если клетка, в которую можно пойти, 
        не помечена, то ее координаты заносятся в очередь,
        а она сама помечается увеличенной на единицу меткой клетки,
        из которой мы попали в текущую */ 
 
        if ( ( Doska[ a + 2 ][ b - 1 ] == -1 ) && ( a + 2 < 8 ) && ( b - 1 < 8 ) && ( a + 2 >= 0 ) && ( b - 1 >= 0 ) )
        {
            Queue[ 0 ][ Last ] = a + 2;
            Queue[ 1 ][ Last ] = b - 1;
            Last++;
            Doska[ a + 2 ][ b - 1 ] = Doska[ a ][ b ] + 1;
        }
        if ( ( Doska[ a + 2 ][ b + 1 ] == -1 ) && ( a + 2 < 8 ) && ( b + 1 < 8 ) && ( a + 2 >= 0 ) && ( b + 1 >= 0 ) )
        {
            Queue[ 0 ][ Last ] = a + 2;
            Queue[ 1 ][ Last ] = b + 1;
            Last++;
            Doska[ a + 2 ][ b + 1 ] = Doska[ a ][ b ] + 1;
        }
        if ( ( Doska[ a - 2 ][ b + 1 ] == -1 ) && ( a - 2 < 8 ) && ( b + 1 < 8 ) && ( a - 2 >= 0 ) && ( b + 1 >= 0 ) )
        {
            Queue[ 0 ][ Last ] = a - 2;
            Queue[ 1 ][ Last ] = b + 1;
            Last++;
            Doska[ a - 2 ][ b + 1 ] = Doska[ a ][ b ] + 1;
        }
        if ( ( Doska[ a - 2 ][ b - 1 ] == -1 ) && ( a - 2 < 8 ) && ( b - 1 < 8 ) && ( a - 2 >= 0 ) && ( b - 1 >= 0 ) )
        {
            Queue[ 0 ][ Last ] = a - 2;
            Queue[ 1 ][ Last ] = b - 1;
            Last++;
            Doska[ a - 2 ][ b - 1 ] = Doska[ a ][ b ] + 1;
        }
        if ( ( Doska[ a - 1 ][ b + 2 ] == -1 ) && ( a - 1 < 8 ) && ( b + 2 < 8 ) && ( a - 1 >= 0 ) && ( b + 2 >= 0 ) )
        {
            Queue[ 0 ][ Last ] = a - 1;
            Queue[ 1 ][ Last ] = b + 2;
            Last++;
            Doska[ a - 1 ][ b + 2 ] = Doska[ a ][ b ] + 1;
        }
        if ( ( Doska[ a + 1 ][ b + 2 ] == -1 ) && ( a + 1 < 8 ) && ( b + 2 < 8 ) && ( a + 1 >= 0 ) && ( b + 2 >= 0 ) )
        {
            Queue[ 0 ][ Last ] = a + 1;
            Queue[ 1 ][ Last ] = b + 2;
            Last++;
            Doska[ a + 1 ][ b + 2 ] = Doska[ a ][ b ] + 1;
        }
        if ( ( Doska[ a + 1 ][ b - 2 ] == -1 ) && ( a + 1 < 8 ) && ( b - 2 < 8 ) && ( a + 1 >= 0 ) && ( b - 2 >= 0 ) )
        {
            Queue[ 0 ][ Last ] = a + 1;
            Queue[ 1 ][ Last ] = b - 2;
            Last++;
            Doska[ a + 1 ][ b - 2 ] = Doska[ a ][ b ] + 1;
        }
        if ( ( Doska[ a - 1 ][ b - 2 ] == -1 ) && ( a - 1 < 8 ) && ( b - 2 < 8 ) && ( a - 1 >= 0 ) && ( b - 2 >= 0 ) )
        {
            Queue[ 0 ][ Last ] = a - 1;
            Queue[ 1 ][ Last ] = b - 2;
            Last++;
            Doska[ a - 1 ][ b - 2 ] = Doska[ a ][ b ] + 1;
        }
        Start++;    // Удаляет первый элемент из очереди
    }
 
    cout << "Проделанная работа в функции:\n\n";
    for ( i = 0; i < 8; i++ )
    {
        for ( j = 0; j < 8; j++ )
        {      
            printf( "%3d ",  Doska[ i ][ j ] );
        }
        cout << '\n' << endl;
    } 
    cout << '\n' << endl;
 
    return Doska[ *( x + Ocherednost + 1 ) ][ *( y + Ocherednost + 1 ) ];  // Возвращает минимальное количество шагов, требуемое до достижения следующей цели
}
 
Текущее время: 11:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru