- 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;
}
С одного из сайтов игроделов. Просто оставлю это здесь
О мархуз, з лаби якого селюка ви це чудовисько витягнули...
> getche();
дай чо?
-1 потому что иначе ошибку выдавало?
Да ну? Где тут рашен?
> if(D=0)
facepalm.png
> D=(b^2-(4*a*c))*(-1);
> x1=(b-sqrt(D))/(2*a);
Сначала считаем корни, потом проверяем D>0, круто, че. Из-за этого походу и -1.
> считаем корни
Или это инты-не инты, или удачи считающим.
Попробовать подобрать такие значения, чтобы совпали иксы, насрав на некорректность дискриминанта? Но так не интересно ;(
Еще вариант приходит в голову - как-то сыграть на округлении к нулю, когда делят на 2*a.
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 %
Отсюда: -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.
Мне же хочется посмотреть, что получается и продолжать лениться.
В итоге думающие люди достигают просветления, а у меня лишь получается чуть упрощённый вариант, который по-прежнему делает полный перебор :(
Бросить каку
Это крайняя степень извращения - тестировать черным ящиком, когда тест белым показал, что автору нужна эфтаназия
Написал.
int repetare=0;
int a;
int b;
int c;
int x1;
int x2;
Мне кажется, или это называется - извиняйте, парни, я на плюсах первый день, так то я всегда на делфи писал...
А вообще, если я описываю переменную с инициализацией - то я тоже посвящаю ей отдельную строку. Без инициализации да, сваливаю в кучу.
ну так и нужно. Это повышает читаемость кода.
> Если нет - то группирую по смыслу(!)
Еще один несомненный плюс
Между
float a, b, c;
и
float a;
float b;
float c;
есть разница - о ней я и говорил.
Вообще не люблю Дельфийское объявление переменных - в начале, да без инициализации...
Дельфины утверждают, что в нем переменные быстрее ищутся (конечно же если писать в блокноте, в нормальной IDE есть хоткеи для перехода на описание)...
В делфи(да и в паскале) это сделано для упрощение компиляции, как я понимаю(в смысле сам код не может содержать описания переменной, и когда просматривается код, все переменные уже известны)
Но с нормальным оптимайзером вся эта рукотворная псевдооптимизация бесполезна. Он все равно знает, в какой момент переменная начинает работу, и до какого момента она нужна. И если у переменных области действия не пересекаются - сам положит их в один регистр\ячейку памяти.
Вы так говорите, как будто это что-то плохое.
> с нормальным оптимайзером
Не подскажешь тонкости относительно паскалеоптимайзеров? Например FPC годен в том, про что ты говоришь? Или, может быть, GPC?
А то Тарас к бабке уехал, спросить не у кого.
> эта рукотворная псевдооптимизация бесполезна
Если при этом не создаются неудобства из за одинакового имени переменной для разных нужд, то почему бы и нет, ведь сущностей меньше, декларации короче.
Одноименные переменные мешают? Да не мешают они. В большинстве случаев, когда хочется запилить одинаковое имя переменной, оно будет внутри цикла или ифа. А там оно никому не мешает, и сразу понятно, что она нужна только внутри данного блока.
> FPC, GPC
gcc годен :) А так - я думаю все паскалекомпиляторы уже давно умеют в нормальную оптимизацию. Даже делфи 7 должна уметь, поскольку при отладке оптимизнутой сборки пишет "variable optimized out" в точках, где переменная не юзается.
Поcему в кошерных языках есть перекрытие переменных и scope
>Даже делфи 7
На сколько я видел, паскалелюбы молятся на борланд. Может не туда смотрел)
Но делфи 7 это же и есть борланд :) Или ты про досовский BP?
Не, я про то, что паскалелюбы сейчас только на делфи и пишут.
Это как пассивный курильщик? Сам не юзаю, но от соседей по ГК дым достается?
> Всегда читал ник пользователя bormand, как borland
Ну собственно так этот ник и был придуман. Переделал первое пришедшее на ум слово, когда регался.
P.S. Еще можно прочитать как borrnand, по аналогии с .pom файлами, которые многие читают как .porn.
Борман же Штирлицевский, просто конспирация.
Вы так говорите, как будто borland это что-то плохое.
bormand, Вы таки сделали дельфинопластику?
Скорее всего так же, но с оптимизацией.
Кстати, нежелание обьявлять >9000 переменных ведет к тому, что создается много небольших функций вместо богофункций, что тоже неплохо
Железобетонно выделяется блок памяти != каждая переменная имеет свой слот в этом блоке. Если часть переменных окажутся в одном слоте (если они не юзаются одновременно), а часть вообще уйдут в регистры, то ничего в этой схеме не испортится ;) Кроме дебаггера. Но дебаггер и оптимизация это отдельная история.
Два одинаковых корня.
> Два одинаковых корня.
При a != 0 будет два корня, только не все к этому морально готовы.
Как и к некоторым другим случаям.