Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 3

Подскажите)

08.09.2010, 11:15. Показов 947. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include "main.h"
 
int Cycle;
 
#define MakeEven( _num ) ( _num & 0xFE )
#define Rand( _num ) (_num ? rand( ) % _num : 0)
#define EvenRand( _num ) ( Rand( _num ) & 0xFE )
#define EvenMax( _num ) ( _num & 0xFE ) 
#define EvenAverage( _num ) ( ( EvenMax( _num ) / 2 ) & 0xFE )  
#define OddRand( _num ) ( Rand( _num ) | 0x01 )
#define Randomize( ) ( srand( ( unsigned ) time( NULL ) ) )
 
inline int OddBetween( int N1, int N2 )
    {  int T;  return ( T = OddRand( N2 ) ) > N1 ? T : OddBetween( N1, N2 );  }
inline int EvenBetween(int N1, int N2)
    {  int T;  return ( T = EvenRand( N2 ) ) > N1 ? T : EvenBetween( N1, N2);  }
inline int GetDirection( int width )
    {  
    int Z = Rand( 4 );
    return ( Z == 0 ? -1 : Z == 1 ? 1 : Z == 2 ? width : -width );  }
int GetRandom( int width, int height, int *x )
    {
        int Row, Col;
        Row = EvenBetween( 0, height );
        Col = EvenBetween( 0, width );
        *x = width * Row + Col;
        if( ( *x % width ) % 2 != 0 )
            GetRandom( width, height, x );
        return Cycle--;
    }
 
 
void Labirint::GenLabirint( )
    {
        std::string StrBuffer;
        std::stringstream sstrBuff;
        
        system( "cls" );
        std::cout << "\nЗАДАНИЕ РАЗМЕРА ЛАБИРИНТА\n[цифра или 'Q' для перехода в меню]\n\n";
        
        bool IsInput = true;
        while( IsInput )
            {
                StrBuffer = "";
                std::cout << "   ВЫСОТА:\t\t";  std::cin >> StrBuffer;
                if( CheckInput( StrBuffer ) )
                    {
                        if( StrBuffer == "q" || StrBuffer == "Q" )
                            {  IsInput = false; continue;  }
                        else
                            {  sstrBuff.clear( );  sstrBuff << StrBuffer;  sstrBuff >> Height;  Height = MakeEven( Height );  }
                    }
                else continue;
                
                StrBuffer = "";
                std::cout << "   ШИРИНА:\t\t";  std::cin >> StrBuffer;
                if( CheckInput( StrBuffer ) )
                    {
                        if( StrBuffer == "q" || StrBuffer == "Q" )
                            {  IsInput = false; continue;  }
                        else
                            {  sstrBuff.clear( );  sstrBuff << StrBuffer;  sstrBuff >> Width;  Width = MakeEven( Width );  }
                    }
                else continue;
                    
                StrBuffer = "";
                std::cout << "   КОЛИЧЕСТВО СТЕН:\t";  std::cin >> StrBuffer;
                if( CheckInput( StrBuffer ) )
                    {
                        if( StrBuffer == "q" || StrBuffer == "Q" )
                            {  IsInput = false; continue;  }
                        else
                            {  sstrBuff.clear( );  sstrBuff << StrBuffer;  sstrBuff >> WallNum;    }
                    }
                else continue;
                
                if( Height == 0 || Width == 0 )
                    { std::cout << "ОШИБКА:  Неверно заданы размеры лабиринта, повторите ввод\n\n"; continue; }
                WallNum = WallNum == 0 ? 70 : WallNum;
                
                Height++;  Width++;
                ArrSize = Height * Width;
                ARRAY = new unsigned char [ ArrSize ] ( );
                
                CreateBorder( );
                CreateDoors( );
                Randomize( );       // Инициализация рандома
                
                int X = 0, Z = 0;
                Cycle += ArrSize + ArrSize / 2;
                while( GetRandom( Width, Height, &X ) > 0 )
                    {
                        if( ARRAY[ X ] == 1 ) continue;
                        Z = GetDirection( Width );
                        do  // Здесь мы строим стену
                            {               
                                if( ARRAY[ X ] == 0 ) ARRAY[ X ] = 1; 
                                X += Z; 
                                if( Rand( 100 ) > WallNum ) break;   
                            }
                        while( ARRAY[ X ] == 0 );
                    }               
                IsInput = false;
                IsGenerated = true;
            }
 
        Display( );
        std::cout << "\n";
        system( "pause" );
    }
 
 
void Labirint::CreateBorder( )
    {
        unsigned char *TempArr = ARRAY;
        for( TempArr; TempArr - ARRAY < ArrSize; TempArr++ )
            {
                if( ( TempArr - ARRAY ) < Width ||                      // Определение первой строки
                     ( TempArr - ARRAY ) % Width == 0 ||                    // Определение левой стороны
                     ( TempArr - ARRAY ) % Width == Width - 1 ||        // Определение правой стороны
                     ( TempArr - ARRAY ) > Width * ( Height - 1 ) ) // Определение нижней границы
                      *TempArr = 1;
            }
    }
 
void Labirint::CreateDoors( )
    {
        int T;
      do { T = OddBetween( 0, Width ); }  while( T == 0 || T == Width );
      ARRAY[ T ] = 0xAA;    // вход
      do { T = OddBetween( ArrSize - Width, ArrSize ); }  while( T == ArrSize || ARRAY[ T ] == 0 );
      ARRAY[ T ] = 0xFF;    // выход
    }
обьясните турику что тут сначало деляется для чего define что такое int Cycle и так далее))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.09.2010, 11:15
Ответы с готовыми решениями:

подскажите что делать при вводимых данных 10 25 и 5 20 программа работает не правильно должна выводить 135 подскажите что делать
Вывод В выходной файл выведите одно число - сколько ударов сделали часы за этот отрезок времени.

подскажите
приветствую народ, подскажите что делать. вообщем учусь за границей (в чехии если быть точным) на программиста, из-за фокусов с языком,...

Подскажите
Подскажите сайтик с подробным описоним библиотек и их операторов.И ссылку или тему форума о классах.

7
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
08.09.2010, 11:37
Цитата Сообщение от GLEB011 Посмотреть сообщение
для чего define
Прочитайте эту ссылку.

Цитата Сообщение от GLEB011 Посмотреть сообщение
int Cycle
Глобайльная переменаая.


Цитата Сообщение от GLEB011 Посмотреть сообщение
и так далее
Прочитайте что нибудь по C++, чтобы всё стало понятно.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
08.09.2010, 12:02
Да, в двух словах тут не объяснишь)
0
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 3
08.09.2010, 12:09  [ТС]
ясненько спасибо)
0
 Аватар для Mencey
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 445
08.09.2010, 12:19
Первые 12 строчек опишу.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Подключает файл "main.h"
#include "main.h"  
 
// Глобальная переменная т.е. эта переменная видна везде где есть её объявления(Cycle с английского переводится как цикл)
int Cycle;  
 
// ???
#define MakeEven( _num ) ( _num & 0xFE ) 
// Генерирует "случайное" число в диапозоне от 0 до _num
#define Rand( _num ) (_num ? rand( ) % _num : 0)  
// ???
#define EvenRand( _num ) ( Rand( _num ) & 0xFE ) 
// ???
#define EvenMax( _num ) ( _num & 0xFE ) 
 // ???
#define EvenAverage( _num ) ( ( EvenMax( _num ) / 2 ) & 0xFE ) 
// Как мне кажется этот макрос генерирует не чётное "случайное" число от 1 до _num  
#define OddRand( _num ) ( Rand( _num ) | 0x01 ) 
// Инициализация датчика случайных чисел
#define Randomize( ) ( srand( ( unsigned ) time( NULL ) ) )
1
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.09.2010, 12:20
GLEB011,

Не по теме:

это я вашу тему перенес, все вам правильно говорил Johny_D

0
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 3
08.09.2010, 17:07  [ТС]
Mencey спасибо большое=)

Добавлено через 4 часа 31 минуту
люди ну помогите полностью по програме в каком коде используется в какой переходит типы данных функции помогите пожалуста
0
Заблокирован
08.09.2010, 17:40
Mencey,
дополнил ваши комментарии
C++
1
2
3
4
5
6
7
8
9
10
11
// макрос записывает в младший двоичный разряд числа ноль(число полюбому становится четным) :
#define MakeEven( _num ) ( _num & 0xFE ) 
// генерирует четное "случайное" число, при этом использует описанный [I]Mencey[/I] макрос(число в диапазоне от нуля до num) :
#define EvenRand( _num ) ( Rand( _num ) & 0xFE ) 
// абсолютно такой же как MakeEven, понятия не имею зачем автор этого творения дублирует код:
#define EvenMax( _num ) ( _num & 0xFE ) 
 // у числа последний разряд становится равным нулю(число стало четным), затем оно делится на 2, затем из результата отнимают единицу, если он нечетный. Поидее EvenMax можно было и не вызывать, т.к. при делении по умолчанию число округляется вниз и единица в младшем разряде не влияет на результат деления на 2. 
#define EvenAverage( _num ) ( ( EvenMax( _num ) / 2 ) & 0xFE ) 
// Как мне кажется этот макрос генерирует не чётное "случайное" число от 1 до _num  
//верно, макрос записывает 1 в младший разряд числа, полученного от Rand, поэтому результат полюбому становится нечетным
#define OddRand( _num ) ( Rand( _num ) | 0x01 )
Добавлено через 12 минут
C++
1
2
3
inline int OddBetween( int N1, int N2 )
        {  int T;  return ( T = OddRand( N2 ) ) > N1 ? T : OddBetween( N1, N2 );  }
//inline это рекомендация компилятору подставить код функции в каждую точку ее вызова, но т.к. она рекурсивная то я сомневаюсь что компилятор таки сделает ее встроеной. Функция генерирует нечетное случайное число в диапазоне от N1 до N2 и работает через задний проход, ИМХо автор сего творенья специально писал быдлокод, т.к. случайно так небывает. Вобщем Функция требует генерировать число в диапазоне от 0 до N2 до тех пор пока оно не окажется больше N1(надо заметить что это не всегда возможно) прощегенерировать число в диапазоне от нуля до N2-N1 и прибавить его к N1 - Результат тотже, но потребляет меньше памяти, работает быстрее и снижает вероятность ошибки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.09.2010, 17:40
Помогаю со студенческими работами здесь

Подскажите
У мя есть функция , допустим MyFunc() в ней выполняются некоторые действия, также реализован какой либо цикл где вызывается эта функция...

Подскажите
Вот начал изучать с++ с 0. Столкнулся с проблемой уже в самом начале...подскажите плиз что не так... #include &lt;iostream.h&gt; ...

Подскажите
В ручную знаю как расчитать... А вот программу... подскажите

подскажите по строкам в С++
задание вот такое: Даны две строки, состоящие из слов, разделѐнных одним или несколькими пробелами. Из слов этих строк сформировать новую...

Подскажите, пожалуйста.
Существует - ли способ давать переменным типа char русские буквы так, чтобы они корректно потом выводились на экран/в файл?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru