Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: Red Planet
Дата сообщения: 05.02.2011 20:09

Цитата:
Попробуйте ещё третий вариант: 90.0/7

Так получается double.

Еще вопрос. Делаю консольное приложение, где будет много писаться функций.

Объявления поместить перед main(), а определения после?
Подключить другой cpp, в котором написать определения всех функций?

В этом случае не работает генератор случайных вещественных чисел. Говорит, что не знает функций rand, srand и переменных time, NULL, RAND_MAX. Почему?


Генератор.

Цитата:
void rand_nums (double *A, int n, double left, double right) {
    unsigned int some;
    double R, r;
    long int L;
    L=(long)time(NULL); //Системное время.
    some =(unsigned)L; //Приведение типов.
    srand(some); //Задание исходного случайного числа для rand().

    for (int i=0; i<n; ++i) {
        //Случайное число из интервала [0,1].
        r=(float)rand()/RAND_MAX;

        //Формирование случайного числа из заданного интервала.
        R=left+(right-left)*r;
        A[i]=R;
    } //for.
} //rand_nums.

Автор: KChernov
Дата сообщения: 05.02.2011 21:00
AndreySmirnoff

Цитата:
на алглибе представлена программа со своими библиотеками, а надо стандартными средствами сделать...

Так там вроде пишут про исходники. Что мешает выдрать?


Цитата:
я в программировании разбираюсь как свинья в апельсинах...

Что у вас за заведение такое, что программировать не учат, а такие курсовики дают?

Red Planet

Цитата:
Еще вопрос. Делаю консольное приложение, где будет много писаться функций.
Объявления поместить перед main(), а определения после?
Подключить другой cpp, в котором написать определения всех функций?

Если много - почему бы не использовать стандартный подход с файлами заголовков (*.h)?
То есть когда все определения даются в *.h файлах (и они же и подключаются где надо), а реализация в cpp.
Хотя конечно всегда возможны варианты - можно хоть в 1 файле всё сделать и пустить main() последним (и без хидеров).

Добавлено:

Цитата:
В этом случае не работает генератор случайных вещественных чисел. Говорит, что не знает функций rand, srand и переменных time, NULL, RAND_MAX. Почему?

Так это же штатная либа - её надо подключить (причём везде, где она используется).
Автор: AndreySmirnoff
Дата сообщения: 06.02.2011 15:27
KChernov
московский государственный институт электроники и математики
Автор: Taran2ul
Дата сообщения: 07.02.2011 13:08
Уважаемые гуру, помогите разобраться с этим
Ссылка
Автор: KChernov
Дата сообщения: 07.02.2011 13:21
Taran2ul
Так вроде и для VS 6.0 можно настроить нужную страницу для консоли.
По крайней мере и в фортрановской теме, и по крайней мере в одной из С-шных про это уже писали.

Добавлено:
Вот в этой же теме нашёл ссылку.
Автор: Abs62
Дата сообщения: 07.02.2011 17:56
Taran2ul

Код: char* Rus(const char* text);
char bufRus[256];
char* Rus(const char* text)
{
CharToOem(text, bufRus);
return bufRus;
}
Автор: Qraizer
Дата сообщения: 08.02.2011 06:17

Цитата:
Похоже, что вся строка вывода рассматривается как одно выражение, без точек следования.
Их там и нет. Точнее, есть - перед вызовом Rus() и после возврата из неё - но вычисление операндов выражения неопределён. Поэтому вызовы Rus() и выполнения << выполняются в неопределённом порядке. Формально компилятор может выполнять все вызовы Rus() в обратном порядке, а затем выполнить все << в прямом.
Автор: Taran2ul
Дата сообщения: 08.02.2011 13:41
Qraizer
поправить можно ?
Автор: KChernov
Дата сообщения: 08.02.2011 14:42
Taran2ul

Цитата:
поправить можно ?

Вы модифицированный вариант функции по ссылке (на следующей странице) пробовали? Тоже не работает?
Автор: Taran2ul
Дата сообщения: 08.02.2011 17:51
KChernov
еще нет. просто возможности пока нет, и думал еще вариантов подсобрать, чтоб потом проверить скопом.
Автор: Red Planet
Дата сообщения: 08.02.2011 19:23
Здравствуйте! Скажите, как сделать так, чтобы проект, созданный на ERS 2010 запускался на компьютерах, где данная IDE не установлена?
Убрал галочку с "Build with runtime packages", поставил Release вместо Debug, на Dynamic RTL стоит значение True, поставить False нельзя - там просто нет такого варианта.
Автор: ValidolX
Дата сообщения: 08.02.2011 21:47

Цитата:
ERS 2010

?
Автор: KF121
Дата сообщения: 08.02.2011 23:06

Цитата:
Dynamic RTL стоит значение True, поставить False нельзя - там просто нет такого варианта.

Все там есть, смотрите внимательно


Цитата:
ERS 2010

Embarcadero Rad Studio
Автор: juvaforza
Дата сообщения: 08.02.2011 23:08
ValidolX
Наверное, имеется в виду аббревиатура от Embarcadero RAD Studio. А точнее, C++ Builder.
Автор: Qraizer
Дата сообщения: 09.02.2011 04:50

Цитата:
поправить можно ?
Конечно. Нужно, чтобы Rus() возвращала r-value значение. Тогда каждый независимый вызов будет возвращать независимое от других вызовов значение.
Увы, с указателями такой номер не так прост. Я бы советовал смотреть в STL, там много вкусного. А для разминки попробуй простой велосипед прокси:
Код: class str_value
{
const char* str;

public:
explicit str_value(const char* s): str(strcpy(new char[strlen(s)+1], s)) {}
str_value(const str_value& s): str(strcpy(new char[strlen(s.str)+1], s.str)) {}
str_value& operator=(const char* s)
{
char* new_str = strcpy(new char[strlen(s)+1], s);

delete[] str;
str = new_str;
return *this;
}
str_value& operator=(const str_value& s)
{
return *this = s.str;
}
~str_value() { delete[] str; }

template <typename Ch, typename Tr>
friend std::basic_ostream<Ch, Tr>& operator<<(std::basic_ostream<Ch, Tr>& os, const str_value& s)
{
return os << s.str;
}
};

str_value Rus(const char* text)
{
char bufRus[256];

CharToOem(text, bufRus);
return str_value(bufRus);
}
Автор: Taran2ul
Дата сообщения: 09.02.2011 13:32
Qraizer

Я в С++ недели три. С классами вообще не знаком. Это в начале проекта вписать или это тело самого класса?
Автор: Qraizer
Дата сообщения: 09.02.2011 15:55
Функцию Rus() - вместо своей, класс str_value - куда угодно, но перед первым его использованием, проще всего - прямо перед Rus(), как у меня.

Добавлено:
Ну точно, забыл строчечку "return *this;" в str_value::operator=(const char*). Taran2ul, обнови код.
Автор: kotlomoy
Дата сообщения: 09.02.2011 20:07
В Visual Studio не компилируется следующая строка:


Код: template <class T> struct ColElement<T>* ElementHandler<T>::addElement(T* id)
{
...
}
Автор: ValidolX
Дата сообщения: 09.02.2011 20:39
kotlomoy

напишите что вы хотите написать

код вырван из контекста
Автор: kotlomoy
Дата сообщения: 09.02.2011 21:29
ValidolX
Я хочу скомпилировать эту строку.

Писать ничего пока не хочу, это исходник XMoto. В gcc собирается, в студии - нет.

ЗЫ. Проблема с шаблонной функцией, которая возвращает указатель на шаблонную структуру.
ЗЫЫ.Код.

Collision.h:

Код: template<class T> struct ColElement {
T* id;
/* in order to remove efficiently an element from the grid,
we need to know in which cells it is */
/* if gridCells.size() == 0, then it means that the element is not in
the level boundaries (moved out by a script for example) */
std::vector<int> gridCells;
/* as an element can be in more than one cell,
we need to tell if an element has already be visited
*/
int curCheck;
};

template<class T> class ElementHandler {
public:

typedef struct {
std::vector<struct ColElement<T>*> ColElements;
} GridCell;

/* The element must have a method getAABB() */
struct ColElement<T>* addElement(T* id);
void removeElement(T* id);
void moveElement(T* id);
void moveElement(struct ColElement<T>* pColElem);
std::vector<T*>& getElementsNearPosition(AABB& BBox);


ElementHandler(){
m_pGrid = NULL;
m_bDebugFlag = false;
m_curCheck = 0;
reset();
}
void reset();
void setDims(Vector2f min, Vector2f max,
         int gridWidth, int gridHeight,
         float Xoffset=1.0, float Yoffset=1.0);

void setDebug(bool b) {
m_bDebugFlag = b;
}
std::vector<T*>& getCheckedElements() {
return m_CheckedElements;
}

private:
std::vector<struct ColElement<T>*> m_ColElements;
/* level dimensions */
Vector2f m_min, m_max;
/* grid dimensions */
int m_gridWidth, m_gridHeight;
/* grid for the elements */
GridCell* m_pGrid;

/* The current checking pass */
int m_curCheck;

bool m_bDebugFlag;
std::vector<T*> m_CheckedElements;

// the vector returned by getElementsNearPosition
std::vector<T*> m_returnedElements;

/* helpers */
struct ColElement<T>* _getColElement(T* id);
void _addColElementInCells(struct ColElement<T>* pColElem);
struct ColElement<T>* _getAndRemoveColElement(T* id);
void _removeColElementFromCells(struct ColElement<T>* pColElem);

// precalculated values
float m_widthDivisor;
float m_heightDivisor;
};
Автор: Qraizer
Дата сообщения: 10.02.2011 00:15
Хм... попробуй убери слово struct перед ColElement<T>*
Автор: Red Planet
Дата сообщения: 10.02.2011 20:29

Цитата:
Цитата:
Dynamic RTL стоит значение True, поставить False нельзя - там просто нет такого варианта.

Все там есть, смотрите внимательно


Ну зачем бы я спрашивал, если бы оно было и если бы все работало? Даю скриншот в доказательство. Может для того чтобы появилось false, нужно предварительно еще что-то изменить?






Автор: KF121
Дата сообщения: 10.02.2011 21:38
а ниже false, этот фолс именно из выпадающего списка, и сливается с тем фолсом для следующей опции(сам попался, когда Вам полез проверять). в общем кликните 2 раза true, и появится false


обратите внимание на цвет false с 1 и с 2
Автор: kotlomoy
Дата сообщения: 10.02.2011 21:53
Qraizer
Помогло, спасибо!
Автор: Aleksandr N
Дата сообщения: 11.02.2011 16:50
Наверняка здесь найдутся люди знающие С++ и Delphi. Простая задача, помогите перевести код из C++ в Delphi (Pascal) выделенный жирным:

IsEOF: Integer; = 0 или 1

return isEOF ? S_FALSE : S_OK;
...


все Int64
(что чему присваивается?)
rtMediaStart = rtMediaStop = m_rtStart = rtStart;
...

Head: Cardinal;
Lsf: Integer;

if( head & (1<<20) )
{
lsf = (head & (1<<19)) ? 0x0 : 0x1;
mpeg25 = 0;
}
else
{
lsf = 1;
mpeg25 = 1;
}
...

Nch, Mode: Integer;

nch = (mode == MPG_MD_MONO) ? 1 : 2;
...


for(i=0;;i++)
...

Спасибо.
Автор: akaGM
Дата сообщения: 11.02.2011 17:25
Aleksandr N
нужна доп информация о переменных/константах, кот. используются

1)
IsEOF: Integer; = 0 или 1
if IsEOF > 0 then
myFunc := S_FALSE
else
myFunc := S_OK

или
myFunc := integer(IsEOF <> 0)
тут надо знать как ты из функции возвращаешь значение и какая она int или boolean


2)
rtMediaStart := rtStart;
rtMediaStop := rtStart;
m_rtStart := rtStart;;


3)
if ( (head and ((1 shl 19) > 0)) > 0 ) then
lsf := 0
else
lsf := 1;


4)
if (mode = MPG_MD_MONO) then
nch := 1
else
nch := 2;


5)
i := 0;
while true do begin
...
// выход по условию определишь сам
if (...) then break;
inc(i);
end;
Автор: Aleksandr N
Дата сообщения: 11.02.2011 17:49
akaGM
Спасибо, я понял. Этого достаточно, без определения дополнительных переменных. Теперь осталось только проверить общую работу.
Если не работает, обращусь к здешним жителям для проверки маааааленького модуля, надеюсь не откажут...
Автор: akaGM
Дата сообщения: 11.02.2011 19:33
Aleksandr N
не за что

на будущее...

сишный тернарник

res = (condition) ? 1 : 0
// condition -- любая переменная или выражение, принимающее/возвращающее целые значения
можно расскрыть как
if condition then // или if (condition > 0) then
res := 1
else
res := 0

но на паскале красивее будет

res := integer(condition) // integer(condition > 0)
или
res := condition
если res -- булева
:)
Автор: Qraizer
Дата сообщения: 12.02.2011 06:16
На С ещё красивее:
Код: res = !!(condition);
Автор: akaGM
Дата сообщения: 12.02.2011 08:28
Qraizer
фраза
Цитата:
но на паскале красивее будет
с помощью выразительных средств форума должна читаться как
но на паскале [pause] красивее будет
имелось в виду написанное выше на _паскале же_...
жаль что ты прочитал её как
но на паскале красивее [pause] будет

кто б спорил, что Си выразительнее... со своими "плящущими человечками" /(С) мой/
одно
2b | !2b
чего стоит...
Шекспир горько рыдает в уголке...


Цитата:
Первое "> 0" лишнее, там битовый and.
И кстати, почему ">"?

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

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.