Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » C, С++ | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 37
На страницу: 1, 2, 3 ... 35, 36, 37  След.    Перейти:   Все страницы
Поиск в этой теме:
Железный канал: «C, С++»
Dimaxx
 981 EGP


Рейтинг канала: 8(868)
Репутация: 204
Сообщения: 5743
Откуда: Северодвинск
Зарегистрирован: 26.06.2002
Я не силен в Си, поэтому прошу помочь. Как проглотить следующие фрагменты на паскаль:

1) for (i = 1; i < F; i++)
if ((cmp = key[i] - text_buf[p + i]) != 0) break;


2) if ((match_length = i) >= F) break;

3) Переменной типа int приравнивается следующее - s = (s + 1) & (N - 1); Что означает "&"? "&&" знаю, а если один. "Переводчики" переводят как "and", но это неверно.

Последний раз редактировалось: Мамонт (13:35 29-05-2015), всего редактировалось 6 раз(а)
    Добавлено: 02:10 29-11-2003   
Rade
 430 EGP


Отрава
Репутация: 32
Сообщения: 2666
Откуда: Москва, Россия
Зарегистрирован: 08.02.2001
Эххх... Как же там было? Озадачен Гы-гы
Не помню, можно ли присваивать в условном операторе в паскале? Подозрение. Если можно, то скомбинируй, а пока так:

1) for (i = 1; i < F; i++)
if ((cmp = key[i] - text_buf[p + i]) != 0) break;


i:=1;
While i<F do
begin
cmp:=key[i] - text_buf[p + i]; // Гм, от комментариев по поводу того, что будет делать эта строка я воздержусь Гы-гы
If cmp <> 0 then break; // Не помню аналога для break. Здесь это просто выход выход из цикла, в исходнике из for, а здесь - из while. Goto? Ой, не могу!.. Как вариант i:=F;
i:=i+1;
end

2) if ((match_length = i) >= F) break;

match_length := i;
if match_length >= F break; // Опять goto? Немного того... Тут break передает управление вовне цикла или switch (он же case в паскале), ты не указал опредшествующие строки...

3) & в данном случае - побитное AND.
_________________
Ужин при свечах - завтрак при огнетушителях!!!
    Добавлено: 03:14 29-11-2003   
Star'ik
 325 EGP


Рейтинг канала: 3(48)
Репутация: 71
Сообщения: 1882
Откуда: Msk
Зарегистрирован: 29.04.2003
Dimaxx :
1) for (i = 1; i < F; i++)
if ((cmp = key[i] - text_buf[p + i]) != 0) break;



1:
For i:=1 to f do begin
cmp := key[i] - text_buf[p + i];
if cmp <> 0 then break
end;


Помоему так проще...
_________________
Все хорошее когда-нибудь кончается
    Добавлено: 14:05 29-11-2003   
Marauder (n/a)
 962 EGP


Репутация: 100
Сообщения: 9582
Откуда: Ад
Зарегистрирован: 07.02.2001
ПАСКАЛЬ маЗАДАЙ!
_________________
Профиль закрыт. У пилота кончились хитпойнты.
    Добавлено: 00:07 30-11-2003   
Dimaxx
 981 EGP


Рейтинг канала: 8(868)
Репутация: 204
Сообщения: 5743
Откуда: Северодвинск
Зарегистрирован: 26.06.2002
2 Marauder: Ты чо, старый!! Немного того... Офонарел! Ой, не могу!.. Сам ты маЗАДАЙ однобитный! Гы-гы
_________________
"Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс
    Добавлено: 01:34 30-11-2003   
Dimaxx
 981 EGP


Рейтинг канала: 8(868)
Репутация: 204
Сообщения: 5743
Откуда: Северодвинск
Зарегистрирован: 26.06.2002
... & в данном случае - побитное AND...

А что же тогда "&&"??
_________________
"Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс
    Добавлено: 01:35 30-11-2003   
Rade
 430 EGP


Отрава
Репутация: 32
Сообщения: 2666
Откуда: Москва, Россия
Зарегистрирован: 08.02.2001
&& - логическое AND (умножение). Результат: true/false Подмигиваю
А то - побитное AND. Результат: перемножение битов операндов. Ну там маску наложить или еще что... Гы-гы
_________________
Ужин при свечах - завтрак при огнетушителях!!!
    Добавлено: 02:21 30-11-2003   
Star'ik
 325 EGP


Рейтинг канала: 3(48)
Репутация: 71
Сообщения: 1882
Откуда: Msk
Зарегистрирован: 29.04.2003
10b & 111b = 10b
111b & 101b = 101b
итд...
true && false = false
true && true = true
итд...
_________________
Все хорошее когда-нибудь кончается
    Добавлено: 15:45 30-11-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
Dimaxx :
3) Переменной типа int приравнивается следующее - s = (s + 1) & (N - 1); Что означает "&"? "&&" знаю, а если один. "Переводчики" переводят как "and", но это неверно.


Тьфу, блин, написал наоборот, про "&&" Гы-гы
Ладно - написанное раньше не считается... Улыбка

Пишем заново:

s:=(s+1) and (N-1);
Улыбка
    Добавлено: 19:31 30-11-2003   
Loki
 791 EGP


Репутация: 162
Сообщения: 2882
Откуда: понаехали тут
Зарегистрирован: 04.11.2002
Собсно имеется: некая прога которая должна вывести юзеру значения некой(дико замудренной) функции от двух переменных. Прога должна взять значение одной переменной(y) и сохраняя его постоянным просчитать значение функции изменяя вторую переменную(x) на заданном отрезке с заданным шагом. Потом взять следующий y из того же отрезка, но с двойным шагом и для него повторить все те же действия.
Собсно суть трабла:
При определенном наборе параметров(при шаге 0.1, отрезок подобран так чтобы в него входил 0) мы наблюдаем интересную картину.
Идет n-ый виток цикла, текущее значение х=-0.1, шаг стоит 0.1, следующее значение должно быть, очевидно, 0. Однако, оно вовсе не 0, а что-нибудь вроде -1.3877778e-16 Ух ты!.. Есесно дальше программа идет не по той ветке(формула по которой вычисляется функция зависит от того положительны x и y или отрицательны) и знач. функции получается тоже хз какое. Тем не менее на следующем витке, когда к -1.3877778e-16 должно прибавится 0.1 мы получаем снова нормальное значение x=0.1. Вот такая вот байда... Задница В дебаггере видно, что проблема появляется именно при прибавлении шага(причем, чтобы проблема возникла шаг должен быть именно 0.1, при, например, 0.5 даже если функция проходит через 0 никаких проблем не возникает), т.е. перед x+=step; х был -0.1, после x+=step; стал -1.3877778e-16(или что-нибудь вроде этого)
Листинг функции:
long double func(double x,double y,double d);
void tab(double d,double y,double source,double end,double step)
{
double x=source; //source - начало отрезка, end - конец отрезка
long double f;
cout << "\ny=" <<y;
char ans='y';
for (;x<=end;)
{
f=func(x,y,d); //d - свободный член функции
cout << "\tx=" << x << "\tf=" <<f <<endl;
x+=step;
}
}
_________________
All are equal. Of course, that doesn't stop some people from being stupid fools or jerks.
    Добавлено: 03:39 05-12-2003   
ДДМ
 99 EGP


Репутация: 4
Сообщения: 104
Откуда: Земля, Россия
Зарегистрирован: 16.04.2002
Подозрение.
Хмм...
C++ это еще та Задница .
Однажды получил при компилляции, что две строки листинга, работающие с разными переменными, не работают, пока не поменял их местами. Не помню какие именно, но что-то типа
с=a+b;
d=e-f; - не работало, Совсем запутался...

d=e-f;
c=a+b; - все ОК Вау!

По мне так это глюк компиллятора в обоих случаях.
А в твоем случае "поможет" округление до 14 знака после запятой.
Математически неправильно, но ...

P.S.: Я знаю, как это противоестественно для "сишного" программера, но попровуй еще заменить x+=step на x=x+step. Рыдания. Тоже где-то помогло однажды...
_________________
Мы способны дотянуться до Звёзд, не считая, что это сон...
    Добавлено: 07:58 05-12-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
Loki :

Листинг функции:
long double func(double x,double y,double d);
void tab(double d,double y,double source,double end,double step)
{
double x=source; //source - начало отрезка, end - конец отрезка
long double f;
cout << "\ny=" <<y;
char ans='y';
for (;x<=end;)
{
f=func(x,y,d); //d - свободный член функции
cout << "\tx=" << x << "\tf=" <<f <<endl;
x+=step;
}
}


Бррр... Ужас!

В-нулевых: сделай функцию func и переменные, которые она использует для вычисления результата-одного типа!!! Или double, или long double. Ктож тебе дал право так спокойненько конвертить из одного типа в другой с погрешностью в 0 ?

Если не поможет (а долно помочь Подмигиваю ):
Во-первых, привел бы ты листинг функции func. Во-вторых, лучше бы привел полный листинг проги (ну или в приват).

Далее, уже просто по коду придирки. Зачем тебе ans?
for пишется так:

double x;
...
for (x=source; x<=and; x+=step)
{
f=func(x,y,d); //d - свободный член функции
cout << "\tx=" << x << "\tf=" <<f <<endl;
}
проще и понятней. Улыбка
    Добавлено: 09:11 05-12-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
ДДМ :

C++ это еще та Задница .

Нет.

Цитата:

Однажды получил при компилляции, что две строки листинга, работающие с разными переменными, не работают, пока не поменял их местами. Не помню какие именно, но что-то типа
с=a+b;
d=e-f; - не работало, Совсем запутался...

d=e-f;
c=a+b; - все ОК Вау!

По мне так это глюк компиллятора в обоих случаях.

Не поверю, пока не приведешь доказательство.

Цитата:

P.S.: Я знаю, как это противоестественно для "сишного" программера, но попровуй еще заменить x+=step на x=x+step. Рыдания. Тоже где-то помогло однажды...

Аналогично - не поверю, пока не приведешь доказательство.
Улыбка
    Добавлено: 09:16 05-12-2003   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
2 VRus: Я и не в такое поверю. Улыбка Зависит от глючности компилятора. От watcom 10.6 под QNX я как-то получил роскошное сообщение:
Cannot convert types for initialisation
Source type is "const unsigned char*"
Target type is "const unsigned char*"

Тоже никто не верил, что такое бывает...

2 Loki: Результат вычислений с плавающей точкой опасно сравнивать с константой (не только с нулем). Потому что вылезают подобные сопли. Хотя ты это уже видимо, понял. Улыбка
_________________
Конец света в конце тоннеля
    Добавлено: 16:56 05-12-2003   
ASKirilL
 1220 EGP


Собака Павлова
Рейтинг канала: 3(27)
Репутация: 302
Сообщения: 8209
Откуда: Москва
Зарегистрирован: 21.03.2003
Для любых чисел с плавающей запятой при сравнении работает только один алгоритм..
1.посчитать разницу между числом с плавующей запятой и число с каким сравниваешь.
2.Сравнить эту разницу с малым значением(типа 0.00000001)
2.а.Если разница меньше -значит числа равны
2.б.Если нет- значит числа разные.
Больше никак числа с плавующей запятой сравнивать нельзя....
Ибо на то они и числа с плавующей запятой....
_________________
Павлов - собака.
    Добавлено: 17:18 05-12-2003   
Pegasus
 1039 EGP


Репутация: 335
Сообщения: 7085
Откуда: НН
Зарегистрирован: 09.12.2002
Насчёт 0.1 и 0.5:
0.5 представляется в машинном виде точно (ибо степень двойки), 0.1 - уже с округлением.

Регулярный метод решения проблем сравнения с константами - сравнивать модуль разности с машинной точностью.
Хотя в каждом конкретном случае находится решение проще Подмигиваю
_________________
There shall be wings!
    Добавлено: 17:21 05-12-2003   
Loki
 791 EGP


Репутация: 162
Сообщения: 2882
Откуда: понаехали тут
Зарегистрирован: 04.11.2002
VRus :
Если не поможет (а долно помочь Подмигиваю )

Не помогло.
Листинг всей проги в привате в том виде в котором она была сегодня успешно сдана(про волшебное 0.1 я умолчал Я не при чем... )
VRus :

Зачем тебе ans?

Гы. Забыл потереть когда копи-пастил Хы...
_________________
All are equal. Of course, that doesn't stop some people from being stupid fools or jerks.
    Добавлено: 22:01 05-12-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
Loki :
VRus :
Если не поможет (а долно помочь Подмигиваю )

Не помогло.
Листинг всей проги в привате в том виде в котором она была сегодня успешно сдана(про волшебное 0.1 я умолчал Я не при чем... )


Йоу... Хы...
Глянул листинг, но тока одним глазком - Гы-гы - двумя уж не получаецца - седня ж суббота.. Люблю выпить:laugh:

О чем это я? Да, у тебя в функции - и корни, и синусы с косинусами - фсе, точно нуля, так же как и единицы - не получицца никогда, следовательно и сравнивать так нельзя.... Один из выходов Pegasus уже описал...

Да, для прикола, можешь сравнить, cos(x)*cos(x)+sin(x)*sin(x)==1 .. Вродь по математике 1 должно получиться? А в машине - фиг вам, как правило... Улыбка

А насчет преобразования типов -
тож можно попробовать
double x, z;
float y;

x=1/3;
y=1/3;
(z=x-y) ? {cout << "Фигня, однако"} : {cout << "Оба-на, ноль получился Улыбка " };

Фразу про ноль ты вряд ли увидишь.. Подмигиваю
    Добавлено: 19:55 06-12-2003   
ASKirilL
 1220 EGP


Собака Павлова
Рейтинг канала: 3(27)
Репутация: 302
Сообщения: 8209
Откуда: Москва
Зарегистрирован: 21.03.2003
Общий смысл всего сказанного :
Cравнивать можно толлько их разницу с мелким числом...
_________________
Павлов - собака.
    Добавлено: 20:02 06-12-2003   
Razorblade
 685 EGP


Волк-одиночка
Репутация: 176
Сообщения: 2316
Откуда: Воронеж
Зарегистрирован: 21.12.2001
2Loki: Скинь сырцы + инфу по компилятору (производитель, версия, патчи)
_________________
"Thor God Of Thunder
Let Me Die With A Sword In My Hand" Manowar
    Добавлено: 05:35 07-12-2003   
Железный канал: «C, С++»
На страницу: 1, 2, 3 ... 35, 36, 37  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Дуч это не "кто", Дуч это процесс! (заметил Leshik)

  » C, С++ | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18