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

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

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

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


Репутация: 162
Сообщения: 2882
Откуда: понаехали тут
Зарегистрирован: 04.11.2002
2 all:
Не-а Нет Опять мимо. Нигде не стоит условий "если жо равно 0, то..." В общем, ниже полный листинг программы.

Компилятор: gnu minigw 3.2

//main
#include <iostream.h>
#include <stdlib.h>
void tab(float d,float y,float source,float end,float step);
int main()
{
float d, end, step;
float source;
for(char ans='y';ans=='y'Подмигиваю
{
cout << "Vvedite nizhnyuyu granicu otrezka ";
cin >> source;
cout << "\nVvedite verxnyuyu granicu otrezka ";
cin >> end;
cout <<"\nVvedite shag ";
cin >> step;
cout << "\nVvedite d ";
cin >> d;
char ans2='y';
for (float y=source;y<=end&&ans2=='y';y+=2*step)
{
tab(d,y,source,end,step);
cout << "\nPokazat' znacheniya dlya sledusjego y? y/n";
cin >> ans2;
}
cout <<"\nVy xotite vvesti novye parametry? y/n ";
cin >> ans;
}
system("pause");
}
//tab
#include <iostream.h>
double func(float x,float y,float d);
void tab(float d,float y,float source,float end,float step)
{
double f;
cout << "\ny=" <<y;
for (float x=source;x<=end;x=x+step)
{
f=func(x,y,d);
cout << "\tx=" << x << "\tf=" <<f <<endl;
}
}
//func
#include <math.h>
float minimum(float x,float y);
float maximum(float x,float y);
double func(float x,float y,float d)
{
float min, max;
double f;
if (x<0&&y<0)
{
max=maximum(x,y*y);
min=minimum(max,sqrt(fabs(x)));
min=minimum(min,sqrt(fabs(y))+d);
f=min+x*y;
}
else if (x>0&&y<0)
{
max=maximum(sin(x),cos(x+d));
f=max*x+fabs(y+x);
}
else
{
max=maximum(sin(x),cos(x+d));
f=max*y+x;
}
return f;
}
//minimum
float minimum(float x,float y)
{
float min;
min=(x>=y)?y:x; //использование здесь операции IF - требование задания
return min;
}
//maximum
float maximum(float x,float y)
{
float max;
if (x>=y)max=x;
else max=y;
return max;
}
_________________
All are equal. Of course, that doesn't stop some people from being stupid fools or jerks.
    Добавлено: 15:53 07-12-2003   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
Зато есть условия "меньше нуля", типа if (x<0&&y<0). Значение в точке должно быть по идее ноль, сравнивается оно с нулем, а по факту там -1.3877778e-16. И идет в это ветку естественно. Вариант - сравнивать не x < 0 , а x < 0 && fabs(x) > <погрешность>.
_________________
Конец света в конце тоннеля
    Добавлено: 12:52 08-12-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
Так, глянул по трезвяни...
Как правильно сказал Diff - ты проверяешь, к примеру, x<0.

Но дело в том, что уже при вводе исходных данных в прогу начинают накапливаться "погрешности" -
- ну не бывает float или double, ни long double, ни superpuperultralong double равным 0,1(0) - 0,1 с бесконечным количеством нулей.

И вот, когда ты вводишь свой step, он уже будет не 0,1, а, к примеру 0,1000000075762213. То же самое - с source, d, и end.

Потому то и -0,2+0,1+0,1 запросто может быть меньше 0, ну или больше 0.
Собственно, основной косяк будет в func, а не в tab, tab же может иногда не допечатать последний виток цикла.
    Добавлено: 15:30 08-12-2003   
Loki
 791 EGP


Репутация: 162
Сообщения: 2882
Откуда: понаехали тут
Зарегистрирован: 04.11.2002
Ндя, проверил на еще нескольких наборах данных - косяк с точностью определенно имеет место Совсем запутался... Бум приделывать сравнение с разностью...
_________________
All are equal. Of course, that doesn't stop some people from being stupid fools or jerks.
    Добавлено: 19:00 09-12-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
Loki :
Ндя, проверил на еще нескольких наборах данных - косяк с точностью определенно имеет место Совсем запутался... Бум приделывать сравнение с разностью...


Так, и только так. Это - по определнию работы с дробными числами.. В машине - двоичная система, нашау десятеричная - ей чужда...
    Добавлено: 20:18 09-12-2003   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
Це вообще веселый язык. Напрмер, вот этот код
int a[4] = {0, 1, 2, 3};
int i = 1;
a[a[++i]++] = a[a[--i]++];
printf("a= %d %d %d\n", a[0], a[1], a[2]);

работает тремя разными способами под тремя разными компиляторами - gcc 2.95, VC++ 7.01, Watcom 10.6. Других под рукой нет. Сейчас предложил двум программерам ответить, что эта прога напишет, они чуть не подрались...
_________________
Конец света в конце тоннеля
    Добавлено: 17:52 10-12-2003   
Pegasus
 1039 EGP


Репутация: 335
Сообщения: 7085
Откуда: НН
Зарегистрирован: 09.12.2002
Diff :
int a[4] = {0, 1, 2, 3};
int i = 1;
a[a[++i]++] = a[a[--i]++];
printf("a= %d %d %d\n", a[0], a[1], a[2]);

Подозрение.

0 2 2
_________________
There shall be wings!
    Добавлено: 17:58 10-12-2003   
Remint
 385 EGP


Рейтинг канала: 3(27)
Репутация: 84
Сообщения: 1785

Зарегистрирован: 12.05.2003
Цитата:
Це вообще веселый язык.

Потому что максимально привязан к железу, насклько это возможно
для языка высокого уровня, а дальше абстрагируй сам если
хочешь Подмигиваю, там где хочешь, и где это действительно нужно,
и где ради этого стоит жертвовать быстродействием.
_________________
Да пребудет с вами сила...
    Добавлено: 21:06 10-12-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
Pegasus :
Diff :
int a[4] = {0, 1, 2, 3};
int i = 1;
a[a[++i]++] = a[a[--i]++];
printf("a= %d %d %d\n", a[0], a[1], a[2]);

Подозрение.

0 2 2


BC3.1, BCC4.5 - оба напечатали:
a= 0 3 2

Ой, не могу!..
    Добавлено: 06:16 11-12-2003   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
Вариант VC++ 7.0 - 0 3 2
gcc 2.95 - 0 2 2 (к этому варианту пришли и те, кто решал сам)
Watcom C++ 10.6 - 1 1 2

2Remint: Привязкм к железу в этом примере я как-то не наблюдаю Улыбка.
_________________
Конец света в конце тоннеля
    Добавлено: 11:54 11-12-2003   
VRus
 647 EGP


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

gcc 2.95 - 0 2 2 (к этому варианту пришли и те, кто решал сам)


Можешь объяснить, как пришли к 0 2 2 ? Я вот, решая сам, пришел к варианту 0 3 2
Подозрение.
    Добавлено: 14:08 11-12-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
Гы, gcc - Линуксовый? Ну так какая ОС, такие и компиляторы...
BC++ и VC++ - рулят! Ой, не могу!..

Правильный вариант - все же 0 3 2 3, и будет i==1.. Улыбка
    Добавлено: 14:39 11-12-2003   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
2VRus: Объяснить не могу, я процесс решения наблюдал со стороны. В результате услышал очень много нового о происхождении, сексуальных наклонностях и ближайших родственниках решавших, а также цифири 0 2 2. Ответ зависит, подозреваю, от того, в каком порядке вычисляются индексы, rvalue и lvalue.
Что касается компиляторов, по моему опыту - gcc наиболее близко следует стандарту C++, вижул похуже, ну а ваткому клейма ставить негде, оно и понятно - проект-то закрыт давно... Хотя VC 7.10 aka 2003.NET подтянули к стандарту, как результат - улучшилась переносимость кода между VC и gcc.
_________________
Конец света в конце тоннеля
    Добавлено: 15:07 11-12-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
Diff :
Ответ зависит, подозреваю, от того, в каком порядке вычисляются индексы, rvalue и lvalue.
Что касается компиляторов, по моему опыту - gcc наиболее близко следует стандарту C++, вижул похуже, ну а ваткому клейма ставить негде, оно и понятно - проект-то закрыт давно... Хотя VC 7.10 aka 2003.NET подтянули к стандарту, как результат - улучшилась переносимость кода между VC и gcc.


Я выделил в твоем посте главное...
Так вот, если следовать стандарту ANSI C, то результат будет именно 0 3 2. В данном стандарте, также, как и в хелпе (к примеру BC) - ясно написано, что в первую очередь - ("[]"), что во вторую - ("++"). Что справа налево("++"), что слева направо("[]"). Если же в том же gcc будет в хелпе написано одно, а на деле другое - ооо, это кул.. Гы-гы
    Добавлено: 15:21 11-12-2003   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
Возможно. А где по стандарту сначала надо считать индексы - справа или слева? Все позабыл ужо...
Вот еще забавный пример. Месяц назад встал на эти грабли самолично, потом долго ругался.

#include <stdio.h>
void main()
{
const int s1 = 32;
int s2 = 32;
int r1 = 1 << s1;
int r2 = 1 << s2;
printf ("%d %d\n", r1, r2);
}

r1 и r2 оказываются не равны (VC & gcc). Ясен пень, shl сдвигать больше чем на 31 разряд не умеет, берутся младшие 5 бит cl, но забавно, что в случае с константой препроцессор соптимизировал и сдвинул по-иному, нежели компилятор.
_________________
Конец света в конце тоннеля
    Добавлено: 16:40 11-12-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
Про индексы - по стандарту - слева направо.. Но умножь еще на последовательность подсчета операторов в индексах.. Подмигиваю
хм, у меня получалось только 032 (по логике разбора компилятора - это правильнее, аль - по чел. логике - 111 - упс такого тут вообще не видел - а буду трезв - смогу обосновать.. Гы-гы )

Ну, насчет твоего теперишнего примера - дык... Как в том анехдоте - "А лом она может" - "бзззззззз" сказала японская лесопилка, и сломалась.. "Отож" - сказали русские мужыки, и пошли дальше валить лес топорами... Ой, не могу!..

Найти, как поиздеваться над компилятором - можно довольно лехко.. Сложнее знать - как издевацца над компилятором так, чтоб он тебя слушался Гы-гы
    Добавлено: 20:54 11-12-2003   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
VRus :

Ну, насчет твоего теперишнего примера - дык... Как в том анехдоте - "А лом она может"

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

VRus :

Найти, как поиздеваться над компилятором - можно довольно лехко.. Сложнее знать - как издевацца над компилятором так, чтоб он тебя слушался Гы-гы

В том-то и дело, что простые и очевидные на первый взгляд вещи иногда оказываются особо изощренными издевательствами. И наоборот. Где-то был у меня код, фрагмент которого
bool l = true;
if (l) cout << "true"; else cout << "false";
выводил ... правильно, "false".
Целый день помню, с этим чудом возился. И никто специально компилятор не мучал. Оно само.
_________________
Конец света в конце тоннеля
    Добавлено: 01:26 12-12-2003   
Remint
 385 EGP


Рейтинг канала: 3(27)
Репутация: 84
Сообщения: 1785

Зарегистрирован: 12.05.2003
Сегодня примерно пол часа не мог понять почему
следующий фрагмент не работал ожидаемым образом Ой, не могу!..

for (i = 0; i < 8; i++);
{
::SetRect(&rect, x + i * 14, y, x + 13 + i * 14, y + 11);
::ExtTextOut( hdc, 0, 0, ETO_OPAQUE, &rect, 0, 0, 0 );
};

Гы гы, отлаживаю значит и не могу понять почему у меня
idx при первом же проходе становиться равен 8, а не 0 Улыбка.

Правда у меня, при установленном разрешении, шрифте,
на моем мониторе, лишнюю ";", несколько тяжелее было
заметить Хы....
_________________
Да пребудет с вами сила...
    Добавлено: 15:14 16-12-2003   
VRus
 647 EGP


Рейтинг канала: 2(17)
Репутация: 247
Сообщения: 5276
Откуда: Москва
Зарегистрирован: 24.06.2001
Remint :
Сегодня примерно пол часа не мог понять почему
следующий фрагмент не работал ожидаемым образом Ой, не могу!..

for (idx = 0; idx < 8; i++);


Дык вот-вот... То перед else лишняя ";", то после for - и начинаешь материть C, исправляется - перестановкой строчек или просто набиранием куска кода заново - гы, типа полтергейст.. А все оказывается банальней и компилятор в этом не виноват.. Гы-гы

2 Remint:
А у тебя, к тому же в вышеприведенном коде бесконечный цикл будет (пока код в конфу переносил, еще одну ошибку сделал Подмигиваю ), прога вообще зависнет... Ой, не могу!..
    Добавлено: 15:36 16-12-2003   
Remint
 385 EGP


Рейтинг канала: 3(27)
Репутация: 84
Сообщения: 1785

Зарегистрирован: 12.05.2003
Ага, енто я править начал (с чувством безысходности Улыбка),
потом енту заразу заметил ( ; ) Хы..., кинул в конфу,
а потом уж все правильно сделал Улыбка.
P.S. Поправил я свой пост...
_________________
Да пребудет с вами сила...
    Добавлено: 13:48 17-12-2003   
Железный канал: «C, С++»
На страницу: Пред.  1, 2, 3, ... 35, 36, 37  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Вона-то, как вас потрепало-то... Что, Межгалактическая была??? (спросил OldMan)

  » C, С++ | страница 2
Каналы: Новости | 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