- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
setlocale(0,"Russian");
cout<<"Пишиш без a,b,c,приклад: 2 5 -12 або натиснеш на Enter и пишеш вниз,"<<endl;
cout<<"ПИШИ:"<<endl;
float D;
int repetare=0;
int a;
int b;
int c;
int x1;
int x2;
repetare;
{
while(repetare<100)
{
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
cout<<"c=";
cin>>c;
D=(b^2-(4*a*c))*(-1);
x1=(b-sqrt(D))/(2*a);
x2=(b+sqrt(D))/(2*a);
if (D>0)
{
cout<<"D="<<D<<endl;
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
cout<<"Имеет два кореня"<<endl;
}
if (D<0)
{
cout<<"D="<<D<<endl;
cout<<"Не имеет кореней"<<endl;
}
if(D=0)
{
cout<<"D="<<D<<endl;
cout<<"x1="<<x1<<endl;
cout<<"Имеет один корень"<<endl;
}
repetare++;
}
}
getche();
return 0;
}
С одного из сайтов игроделов. Просто оставлю это здесь
pelmenka 16.08.2013 23:48 # +4
Lowezar 17.08.2013 00:44 # +4
О мархуз, з лаби якого селюка ви це чудовисько витягнули...
Dummy00001 17.08.2013 01:14 # +8
> getche();
дай чо?
roman-kashitsyn 17.08.2013 08:37 # +4
bormand 17.08.2013 11:03 # +9
guest 17.08.2013 01:24 # +3
-1 потому что иначе ошибку выдавало?
bormand 17.08.2013 06:43 # +4
Да ну? Где тут рашен?
> if(D=0)
facepalm.png
> D=(b^2-(4*a*c))*(-1);
> x1=(b-sqrt(D))/(2*a);
Сначала считаем корни, потом проверяем D>0, круто, че. Из-за этого походу и -1.
1024-- 17.08.2013 13:38 # +3
> считаем корни
Или это инты-не инты, или удачи считающим.
bormand 17.08.2013 15:35 # +5
bormand 17.08.2013 18:29 # +3
pelmenka 17.08.2013 19:02 # +1
bormand 17.08.2013 19:10 # +4
anonimb84a2f6fd141 17.08.2013 22:28 # +6
kegdan 18.08.2013 15:01 # +3
bormand 17.08.2013 18:47 # +2
Попробовать подобрать такие значения, чтобы совпали иксы, насрав на некорректность дискриминанта? Но так не интересно ;(
Еще вариант приходит в голову - как-то сыграть на округлении к нулю, когда делят на 2*a.
bormand 17.08.2013 18:59 # +3
pelmenka 17.08.2013 19:10 # −2
1024-- 17.08.2013 19:49 # +3
1. Вероятность правильного решения с помощью этого кода падает с ростом (или ростом различия) a,b,c.
2. Вероятность получения правильного ответа для уравнения с 2 корнями крайне мала и скорее всего недостижима.
3. Для a,b,c из [-10; 10] решение работает правильно в 2% случаев.
Экспериментальная установка:
Некоторые результаты:
OK -10 -2 -10 => -396 []
OK -10 -2 -9 => -356 []
OK -10 -2 -8 => -316 []
OK -10 -2 -7 => -276 []
OK -10 -2 -6 => -236 []
OK -10 -2 -5 => -196 []
OK -10 -2 -4 => -156 []
OK -10 -2 -3 => -116 []
OK -10 -2 -2 => -76 []
OK -10 -2 -1 => -36 []
OK -9 -2 -10 => -356 []
OK -9 -2 -9 => -320 []
OK -9 -2 -8 => -284 []
OK -9 -2 -7 => -248 []
OK -9 -2 -6 => -212 []
OK -9 -2 -5 => -176 []
OK -9 -2 -4 => -140 []
OK -9 -2 -3 => -104 []
OK -9 -2 -2 => -68 []
...
OK 10 -2 8 => -316 []
OK 10 -2 9 => -356 []
OK 10 -2 10 => -396 []
success: 2.1379980563654035 %
bormand 17.08.2013 19:59 # +1
Отсюда: -2 + 4*a*c = -4*a*c, 8*a*c = 2, a*c = 1/4
Т.е. при b=0 или a и c должно быть дробным, что в коде автора недопустимо ;(
А задачи с одним корнем нет смысла подбирать из-за if (D=0), которое всегда false.
P.S. Если поменять int на float, то по идее прокатит что-нибудь типа a=1/8, b=0, c=2. Если поставить минусы перед b - дофига решений, например a=1, b=5, c=4.
1024-- 17.08.2013 20:33 # 0
Мне же хочется посмотреть, что получается и продолжать лениться.
В итоге думающие люди достигают просветления, а у меня лишь получается чуть упрощённый вариант, который по-прежнему делает полный перебор :(
Qwertiy 17.08.2013 23:47 # 0
bormand 18.08.2013 05:58 # 0
kegdan 18.08.2013 15:03 # +2
Бросить каку
Это крайняя степень извращения - тестировать черным ящиком, когда тест белым показал, что автору нужна эфтаназия
Int 18.08.2013 00:23 # 0
pelmenka 18.08.2013 00:38 # 0
Написал.
bormand 18.08.2013 06:01 # +1
kegdan 18.08.2013 15:10 # +1
anonimb84a2f6fd141 18.08.2013 17:07 # −3
kegdan 18.08.2013 14:59 # +1
int repetare=0;
int a;
int b;
int c;
int x1;
int x2;
Мне кажется, или это называется - извиняйте, парни, я на плюсах первый день, так то я всегда на делфи писал...
bormand 18.08.2013 17:14 # 0
А вообще, если я описываю переменную с инициализацией - то я тоже посвящаю ей отдельную строку. Без инициализации да, сваливаю в кучу.
pelmenka 18.08.2013 17:31 # 0
bormand 18.08.2013 17:40 # 0
kegdan 19.08.2013 06:39 # 0
bormand 19.08.2013 07:18 # 0
kegdan 19.08.2013 08:47 # 0
ну так и нужно. Это повышает читаемость кода.
> Если нет - то группирую по смыслу(!)
Еще один несомненный плюс
Между
float a, b, c;
и
float a;
float b;
float c;
есть разница - о ней я и говорил.
Вообще не люблю Дельфийское объявление переменных - в начале, да без инициализации...
bormand 19.08.2013 11:26 # 0
Дельфины утверждают, что в нем переменные быстрее ищутся (конечно же если писать в блокноте, в нормальной IDE есть хоткеи для перехода на описание)...
kegdan 19.08.2013 11:59 # 0
В делфи(да и в паскале) это сделано для упрощение компиляции, как я понимаю(в смысле сам код не может содержать описания переменной, и когда просматривается код, все переменные уже известны)
vistefan 19.08.2013 13:50 # 0
bormand 19.08.2013 15:10 # 0
Но с нормальным оптимайзером вся эта рукотворная псевдооптимизация бесполезна. Он все равно знает, в какой момент переменная начинает работу, и до какого момента она нужна. И если у переменных области действия не пересекаются - сам положит их в один регистр\ячейку памяти.
vistefan 19.08.2013 15:50 # 0
Вы так говорите, как будто это что-то плохое.
> с нормальным оптимайзером
Не подскажешь тонкости относительно паскалеоптимайзеров? Например FPC годен в том, про что ты говоришь? Или, может быть, GPC?
А то Тарас к бабке уехал, спросить не у кого.
> эта рукотворная псевдооптимизация бесполезна
Если при этом не создаются неудобства из за одинакового имени переменной для разных нужд, то почему бы и нет, ведь сущностей меньше, декларации короче.
bormand 19.08.2013 22:46 # 0
Одноименные переменные мешают? Да не мешают они. В большинстве случаев, когда хочется запилить одинаковое имя переменной, оно будет внутри цикла или ифа. А там оно никому не мешает, и сразу понятно, что она нужна только внутри данного блока.
> FPC, GPC
gcc годен :) А так - я думаю все паскалекомпиляторы уже давно умеют в нормальную оптимизацию. Даже делфи 7 должна уметь, поскольку при отладке оптимизнутой сборки пишет "variable optimized out" в точках, где переменная не юзается.
kegdan 20.08.2013 02:40 # 0
Поcему в кошерных языках есть перекрытие переменных и scope
>Даже делфи 7
На сколько я видел, паскалелюбы молятся на борланд. Может не туда смотрел)
bormand 20.08.2013 10:44 # +1
Но делфи 7 это же и есть борланд :) Или ты про досовский BP?
kegdan 20.08.2013 10:55 # −1
Не, я про то, что паскалелюбы сейчас только на делфи и пишут.
guest 20.08.2013 11:07 # +1
bormand 20.08.2013 11:15 # 0
Это как пассивный курильщик? Сам не юзаю, но от соседей по ГК дым достается?
> Всегда читал ник пользователя bormand, как borland
Ну собственно так этот ник и был придуман. Переделал первое пришедшее на ум слово, когда регался.
P.S. Еще можно прочитать как borrnand, по аналогии с .pom файлами, которые многие читают как .porn.
vistefan 20.08.2013 11:21 # +3
Борман же Штирлицевский, просто конспирация.
guest 20.08.2013 11:48 # 0
guest 20.08.2013 11:49 # 0
bormand 20.08.2013 11:53 # +1
Вы так говорите, как будто borland это что-то плохое.
kegdan 20.08.2013 11:42 # −1
bormand, Вы таки сделали дельфинопластику?
kegdan 19.08.2013 18:05 # 0
Скорее всего так же, но с оптимизацией.
Кстати, нежелание обьявлять >9000 переменных ведет к тому, что создается много небольших функций вместо богофункций, что тоже неплохо
bormand 19.08.2013 22:49 # 0
Железобетонно выделяется блок памяти != каждая переменная имеет свой слот в этом блоке. Если часть переменных окажутся в одном слоте (если они не юзаются одновременно), а часть вообще уйдут в регистры, то ничего в этой схеме не испортится ;) Кроме дебаггера. Но дебаггер и оптимизация это отдельная история.
govnor 07.10.2013 17:52 # 0
Два одинаковых корня.
1024-- 07.10.2013 18:10 # 0
> Два одинаковых корня.
При a != 0 будет два корня, только не все к этому морально готовы.
Как и к некоторым другим случаям.
bormand 07.10.2013 18:52 # 0