Вопрос-Ответ (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 все точно Так это же называется "заполнить нулями недостающие элементы, а не все"
Сталина в каждый дом!
|
|
| |
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 |
|
| |