Суббота, 09 Ноября 2024, 02:43

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

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

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
DestroyДата: Четверг, 09 Января 2014, 19:24 | Сообщение # 1161
постоянный участник
Сейчас нет на сайте
Цитата pelmenka ()
Кол-ва чисел или их значения?

да например вводишь первое число, это нижняя граница диапазона, вводишь второе - верхняя.

Цитата pelmenka ()
Что значит "дополнить нулями"? и т. д.

ну это значит если ты ввел отрицательное число значит остальные элементы строки автоматически принимают значение 0.

Цитата pelmenka ()
Чем разделять числа? Пробелом или чем-то еще?

где разделять? просто самым обычным способом вводишь массив
pelmenkaДата: Четверг, 09 Января 2014, 19:34 | Сообщение # 1162
Драгоценный Тунеядец
Сейчас нет на сайте
Цитата Destroy ()

да например вводишь первое число, это нижняя граница диапазона, вводишь второе - верхняя.

что означает это "да"? Это диапазон значения чисел?
Цитата Destroy ()
ну это значит если ты ввел отрицательное число значит остальные элементы строки автоматически принимают значение 0.

Заполнить нулями только не введенные или вообще все элементы кроме отрицательного?


Сталина в каждый дом!
DestroyДата: Четверг, 09 Января 2014, 19:43 | Сообщение # 1163
постоянный участник
Сейчас нет на сайте
Цитата pelmenka ()
Это диапазон значения чисел?

да диапазон значения чисел
Цитата pelmenka ()
Заполнить нулями только не введенные или вообще все элементы кроме отрицательного?

все элементы строки кроме отрицательного вот например:
1 2 3
-2 0 0
1 -2 0
pelmenkaДата: Четверг, 09 Января 2014, 19:46 | Сообщение # 1164
Драгоценный Тунеядец
Сейчас нет на сайте
Цитата Destroy ()
все элементы строки кроме отрицательного вот например:
1 2 3
-2 0 0
1 -2 0

Так у тебя в 3-ей строке отрицательный элемент вполне нормально соседствует с положительным. Точно все?


Сталина в каждый дом!
DestroyДата: Четверг, 09 Января 2014, 20:02 | Сообщение # 1165
постоянный участник
Сейчас нет на сайте
Цитата pelmenka ()
Так у тебя в 3-ей строке отрицательный элемент вполне нормально соседствует с положительным

вот смотри вначале я ввел 1, потом ввел -2, следовательно следующий элемент у меня автоматически стал равен 0
все точно
pelmenkaДата: Четверг, 09 Января 2014, 20:13 | Сообщение # 1166
Драгоценный Тунеядец
Сейчас нет на сайте
Цитата Destroy ()
все элементы строки кроме отрицательного вот например:

Цитата Destroy ()
вот смотри вначале я ввел 1, потом ввел -2, следовательно следующий элемент у меня автоматически стал равен 0
все точно

Так это же называется "заполнить нулями недостающие элементы, а не все" surprised


Сталина в каждый дом!
DestroyДата: Понедельник, 13 Января 2014, 19:19 | Сообщение # 1167
постоянный участник
Сейчас нет на сайте
Цитата pelmenka ()
все элементы строки кроме отрицательного вот например:

Ой действительно, я неправильно сформулировал. Должно быть так
Цитата pelmenka ()
все элементы строки после отрицательного вот например:

Добавлено (09.01.2014, 20:36)
---------------------------------------------

Цитата pelmenka ()
Так это же называется "заполнить нулями недостающие элементы

да да, точно

Добавлено (13.01.2014, 19:19)
---------------------------------------------
как на С (не С++) сделать массив строк? нельзя использовать string, только char. Используя динамический массив

-l33t-h4xx-Дата: Вторник, 14 Января 2014, 13:53 | Сообщение # 1168
участник
Сейчас нет на сайте
Цитата Destroy ()
как на С (не С++) сделать массив строк?

Ты что там, лабу сдать не можешь? Ай-ай-ай, лекции слушать надо было.

Тут штука тяжёлая: сперва следует выделить память под массив указателей (раз уж массив динамический), а потом каждому указателю выделить память под массив символов. Инициализировать строки придётся с помощью приблуд вроде strcpy.
Код

const int STR_NUM = 8;
const int STR_LEN = 32;

int i;
char **str;

str = (char**)malloc(sizeof(char*)*STR_NUM);

for (i = 0; i < STR_NUM; i++)
       str[i] = (char*)malloc(sizeof(char)*STR_LEN));


Как правильно задавать вопросы

Сообщение отредактировал -l33t-h4xx- - Вторник, 14 Января 2014, 13:56
DestroyДата: Вторник, 14 Января 2014, 17:09 | Сообщение # 1169
постоянный участник
Сейчас нет на сайте
а как выделять память если длинна каждого слова разная?

Добавлено (14.01.2014, 17:09)
---------------------------------------------
и как обратиться к конкретному символу конкретной строки?
например так str[i][j], где i - строка, j - столбец?

ArchidoДата: Вторник, 14 Января 2014, 17:21 | Сообщение # 1170
Сэнсэй
Сейчас нет на сайте
Цитата Destroy ()
а как выделять память если длинна каждого слова разная?

А в чем проблема? Можно для каждой указать конкретно сколько нужно, но проще забить на это и выделить под все строки одинаковое кол-во памяти с запасом, например в 256 символов на строку. С помощью strlen можно узнать длину каждой, главное наличие '\0' в конце самой строки.

Цитата Destroy ()
и как обратиться к конкретному символу конкретной строки? например так str[i][j], где i - строка, j - столбец?

Именно так. j - индекс символа i-той строки.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
DestroyДата: Вторник, 14 Января 2014, 19:11 | Сообщение # 1171
постоянный участник
Сейчас нет на сайте
Цитата Archido ()
главное наличие '\0' в конце самой строки.

а как так сделать, чтобы в конце строки '\0' добавлялся?

Добавлено (14.01.2014, 19:11)
---------------------------------------------
все понял.

теперь очередной вопрос:
если еще способы удаления элемента динамического массива, кроме как сдвигом?

kikas86Дата: Вторник, 14 Января 2014, 19:26 | Сообщение # 1172
постоянный участник
Сейчас нет на сайте
Всем привет.
Есть старая, добрая формула на проверку столкновения двух прямоугольников.
Код

private bool collision(double Px, double Py, double Pw, double Ph, double Bx, double By, double Bw, double Bh)
{
       return (((Bx < Px) && (Bx + Bw >= Px)) || ((Bx > Px) && (Bx <= Px + Pw))) && (((By < Py) && (By + Bh >= Py)) || ((By > Py) && (By <= Py + Ph)));
}

Подскажите пожалуйста, как сделать более конкретную обработку столкновений.
Проверить именно все стороны по отдельности.
Уже много вариантов перепробовал, но результата четкого нет, каждый раз недочеты с проверкой.


Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.

Сообщение отредактировал kikas86 - Вторник, 14 Января 2014, 19:26
pelmenkaДата: Вторник, 14 Января 2014, 20:27 | Сообщение # 1173
Драгоценный Тунеядец
Сейчас нет на сайте
Можно обрабатывать каждую сторону как прямоугольниик

Сталина в каждый дом!
ApatiДата: Вторник, 14 Января 2014, 20:35 | Сообщение # 1174
заслуженный участник
Сейчас нет на сайте
return (Px < Bx+Bw) && (Px+Pw > Bx) && (Py < By+Bh) && (Py+Ph > By);
kikas86Дата: Вторник, 14 Января 2014, 20:38 | Сообщение # 1175
постоянный участник
Сейчас нет на сайте
Цитата pelmenka ()
Можно обрабатывать каждую сторону как прямоугольниик

Как я понял, проверять так же , только брать одну например левую в 1 пиксель(ширина). И по принципу так же другие, верх 1 пиксель(высота только).
Надо будет и так попробовать, только если приложении будет слишком много объектов, этот вариант будет не оптимизированный =( По 4 проверки на 1 объект.
Все равно спасибо =)

Добавлено (14.01.2014, 20:38)
---------------------------------------------

Цитата Apati ()
return (Px < Bx+Bw) && (Px+Pw > Bx) && (Py < By+Bh) && (Py+Ph > By);

это же пересечение прямоугольников?


Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
ApatiДата: Вторник, 14 Января 2014, 21:01 | Сообщение # 1176
заслуженный участник
Сейчас нет на сайте
А, так тебе надо определять пересечение сторон прямоугольников?
return (((Px < Bx) && (Px+Pw > Bx)) || ((Px < Bx+Bw) && (Px+Pw > Bx+Bw))) && (((Py < By) && (Py+Ph > By)) || ((Py < By+Bh) && (Py+Ph > By+Bh)));
kikas86Дата: Вторник, 14 Января 2014, 21:25 | Сообщение # 1177
постоянный участник
Сейчас нет на сайте
Цитата Apati ()
А, так тебе надо определять пересечение сторон прямоугольников?
return (((Px < Bx) && (Px+Pw > Bx)) || ((Px < Bx+Bw) && (Px+Pw > Bx+Bw))) && (((Py < By) && (Py+Ph > By)) || ((Py < By+Bh) && (Py+Ph > By+Bh)));

У меня такая же формула, из нее не как же не вытащить с какой именно он столкнулся, или все же можно? оО


Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
ApatiДата: Вторник, 14 Января 2014, 21:40 | Сообщение # 1178
заслуженный участник
Сейчас нет на сайте
Так тебе надо определить какими именно сторонами столкнулись прямоугольники?
kikas86Дата: Вторник, 14 Января 2014, 21:49 | Сообщение # 1179
постоянный участник
Сейчас нет на сайте
Цитата Apati ()
Так тебе надо определить какими именно сторонами столкнулись прямоугольники?

Да.


Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
-l33t-h4xx-Дата: Среда, 15 Января 2014, 09:05 | Сообщение # 1180
участник
Сейчас нет на сайте
kikas86, в замечательной книжке Л. Аммерала "Принципы программирования в машинной графике" в главе 2.5 ("Отсечение линий") описан хороший способ определения положения точки относительно прямоугольника с помощью битовых масок. Я думаю, приспособить его под пересекающиеся прямоугольники не составит большого труда.
Книжка легко гуглится.


Как правильно задавать вопросы

Сообщение отредактировал -l33t-h4xx- - Среда, 15 Января 2014, 09:06
Поиск:

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