Суббота, 16 Ноября 2024, 01:50

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-Ответ (C++)
KornivalДата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1
The Witcher
Сейчас нет на сайте
Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
GavolotДата: Среда, 25 Июля 2012, 13:33 | Сообщение # 601
Последователь Тени
Сейчас нет на сайте
Так-с ну я пока сидел и страдал фигней решал задачу, я подумал, а создам-ка я функцию, которая будет сама мне выделать память под двумерный массив:

Code

//Функция создания двумерного массива
char** createArr(char** arr, int x)
{
     arr = new char*[x];
     for (int i = 0; i<sizeX; i++)
     arr[i] = new char[x];
}

Но потом я столкнулся с тем, а как же мне быть в этой ситуации с работой над копиями данных))) Просто на обычные значения или простой массив есть простая штука взятие адреса или параметр как указатель, а как можно будет сделать что-то на вроде этой функции, чтобы она под него выделила память) Тут смысл не в том, что я хочу облегчить себе жизнь не выделяя память самому в будущем, а просто вдруг мне такое понадобится где-то еще =)


В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.
НохчиДата: Пятница, 27 Июля 2012, 00:49 | Сообщение # 602
заслуженный участник
Сейчас нет на сайте
Я ничего не понял cool

Многие вопросы по Windows отпадут, если посмотреть тут
GavolotДата: Пятница, 27 Июля 2012, 05:21 | Сообщение # 603
Последователь Тени
Сейчас нет на сайте
Quote
Я ничего не понял

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

Добавлено (27.07.2012, 05:21)
---------------------------------------------
Нохчи, Для создания такого рода функции я нашел другой выход, создал макрос)))


В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.
ApatiДата: Пятница, 27 Июля 2012, 07:04 | Сообщение # 604
заслуженный участник
Сейчас нет на сайте
Gavolot, ты под веществами? Если хочешь чтобы тебе помогли - формулируй вопрос так, как это принято на этой планете, а не так, как это делаешь ты.
ArchidoДата: Пятница, 27 Июля 2012, 07:55 | Сообщение # 605
Сэнсэй
Сейчас нет на сайте
Да уж, таки мощно вышло, я ни в #601, ни в #603 нефига не понял tongue

Gavolot
Можешь выложить сюда код, что вообще там у тебя происходит? Даже если уже разобрался(в таком случаем - просто из любопытства)


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
GavolotДата: Пятница, 27 Июля 2012, 15:02 | Сообщение # 606
Последователь Тени
Сейчас нет на сайте
Так Земляне, сейчас я вам объясню.

Я хотел в тот момент функцию при вызове, которой, создавался бы двумерный массив, которым я мог бы потом легко пользоваться.
Т.е. мне просто было любопытно сделать функцию, в которой я как бы и не вижу, как этот массив создается)
Но вместо функции я решил сделать макрос, результаты были даже лучше:
Code
#define createArr(ARR, y, x, type)     type** ARR = new type*[y]; for (int t = 0; t<y; t++) ARR[t] = new type[x];

Получилось очень даже интересно =)


В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.
ArchidoДата: Пятница, 27 Июля 2012, 15:31 | Сообщение # 607
Сэнсэй
Сейчас нет на сайте
Вот терь ясно, что ты имел в виду smile

Без макросов подобное можно сделать с помощью шаблонов (как вариант):
Code

template <class Type> Type** CreateArray(int x, int y) {
       Type** Array = new Type*[x];   
       for (int i = 0; i < x; i++)   
       Array[i] = new Type[y];   

       return Array;
   }
       
...

char** NewArray = CreateArray <char> (10, 10);


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Пятница, 27 Июля 2012, 15:36
GavolotДата: Пятница, 27 Июля 2012, 15:44 | Сообщение # 608
Последователь Тени
Сейчас нет на сайте
Archido, Но макрос тоже свое отрабатывает))) Но за вариант +, потому-что макрос не всегда удобно.

В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.
MrAkakuyДата: Пятница, 27 Июля 2012, 18:33 | Сообщение # 609
участник
Сейчас нет на сайте
Уважаемые знатоки си-подобных языков.
Проблема.. хотя назвать это проблемой тоже нельзя. Прошу объяснить, каким образом происходит следующее. Для начала код:

Все работает и счетчик тоже. В чем проблема: на моем основном компе (работаю на две машины) стоит win7 professional x32, а железо и дрова не важны. Фпс - 60. Ровно 60. Ни больше ни меньше. Ровно 60. На моем нетбуке стоит win7 начальная x32. Запускаю, фпс - от 600 до 800. Скачками. Код один, библиотеки одинаковые (переносил с основного на бук). Комп мощнее бука раз в 3-5. Но на компе 60, а на буке 600-800. Может кто нибудь объяснит, каким образом такое происходит?





Сообщение отредактировал MrAkakuy - Пятница, 27 Июля 2012, 18:36
ArchidoДата: Пятница, 27 Июля 2012, 18:51 | Сообщение # 610
Сэнсэй
Сейчас нет на сайте
Это VSync. Попробуй после инициализации OpenGL (лучше перед главным циклом) сделать "glfwSwapInterval(0);"

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
DemeronДата: Пятница, 27 Июля 2012, 18:53 | Сообщение # 611
User created in C++
Сейчас нет на сайте
MrAkakuy, ну если ровно 60, то скорее всего включена вертикальная синхронизация.
MrAkakuyДата: Пятница, 27 Июля 2012, 18:56 | Сообщение # 612
участник
Сейчас нет на сайте
Archido, спасибо огромное лови + up . Раз уж на то пошло, может подскажите, как сделать контроль фпс? Я юзал гугль, пробовал писать сам, но никак не могу написать код, вычисляющий нужное время для glfwSleep().


ArchidoДата: Пятница, 27 Июля 2012, 19:11 | Сообщение # 613
Сэнсэй
Сейчас нет на сайте
Ну, Sleep обычно не для этого используют. Вот тут есть код как примерно ограничитель делается, так и ты попробуй над своим циклом поработать.

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
MrAkakuyДата: Пятница, 27 Июля 2012, 19:17 | Сообщение # 614
участник
Сейчас нет на сайте
Спасибо! Плюс через неделю поставлю повторный biggrin


justfolerДата: Понедельник, 30 Июля 2012, 16:57 | Сообщение # 615
почетный гость
Сейчас нет на сайте
Недавно начал учить C++ и столкнулся с проблемой. Хочу сделать консольную версию морского боя. Вот код:
Code

char field[9][9]; //двумерный массив поля
int x,y; // переменная столбика и строки
int new_i=0; //переменная-счетчик для однопалубных кораблей
srand(time(NULL));
     for (x=0;x<=9;x++)
             {
                      for (y=0;y<=9;y++)
                           {
                    field[x][y]='.';
                             
                    for (new_i=0;new_i<=3;new_i++)
                    {
                    field[rand()%9][rand()%9]='$'; //тут должны отображаться однопалубные корабли
                    }
                    cout<<"[ "<<field[x][y]<<" ] "; //вывод сетки поля на экран
                           }
          cout<<"\n";
              }

Проблема заключается в том, что постоянно генерируется разное количество кораблей, хотя переменная new_i приняла значение, при котором цикл не выполняется.
goldsphereДата: Понедельник, 30 Июля 2012, 17:25 | Сообщение # 616
заслуженный участник
Сейчас нет на сайте
у меня всё работает, каждый раз генерируется 4 корабля.

FinderX - Android Аркада
ArchidoДата: Понедельник, 30 Июля 2012, 17:29 | Сообщение # 617
Сэнсэй
Сейчас нет на сайте
justfoler
Ну, мне сразу бросается в глаза выход за границы массива. Т.е. у тебя два цикла проходят от 0 до 9, по 10 элементов, а у тебя массив 9х9.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Lord_ZeonДата: Понедельник, 30 Июля 2012, 17:32 | Сообщение # 618
частый гость
Сейчас нет на сайте
justfoler,
Потому что у тебя цикл генерации однопалубных кораблей вложен в цикл отрисовки карты, каждый цикл по x, y рисуется карта, и также генерируются корабли, так как цикл сокращается, уже в сгенерированных местах карты появляются корабли, и они не могут быть перезаписаны. Иначе говоря цикл создания кораблей проходит каждый раз как рисуется часть карты, всего получается 400 раз.


Сообщение отредактировал Lord_Zeon - Понедельник, 30 Июля 2012, 17:38
justfolerДата: Понедельник, 30 Июля 2012, 17:41 | Сообщение # 619
почетный гость
Сейчас нет на сайте
goldsphere, три раза запускал программу. Вот результат:

Добавлено (30.07.2012, 17:41)
---------------------------------------------
Lord_Zeon, но во вложеном цыкле всего 4 повтора. Переменная new_i достигает значения 3 и в следующий раз цикл не должен выполняться. Разве не так?

Lord_ZeonДата: Понедельник, 30 Июля 2012, 17:42 | Сообщение # 620
частый гость
Сейчас нет на сайте
justfoler,
for (new_i=0;new_i<=3;new_i++)
Каждый раз при входе в цикл переменная new_i инициализируется значением 0.
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг