Задача С++

Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

PaaQ писал(а): for ( float x=-13;x<13;x=x+0,1)
r=-(w*x+2)/e*q*x*x;

for (float y=-13;y<13;y=y+0,1);
t=q*((e*y+2)/w)*((e*y+2)/w)/y;
Где проверка деления на ноль? А судя по коду, ноль в знаменателе будет обязательно.
PaaQ
Сообщения: 22
Зарегистрирован: 04 янв 2008, 21:55

WinMain писал(а):Где проверка деления на ноль? А судя по коду, ноль в знаменателе будет обязательно.
я исправил на интервал сначало от 0,1 до 26 делал.
patrick87
Сообщения: 13
Зарегистрирован: 29 янв 2008, 19:42

немножко исправил...выложу код и поясню что не получается по-прежнему
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int main()
{
float a,p,q;
cout<<"Vvedite a:";
cin>>a;
cout<<"Vvedite p:";
cin>>p;
cout<<"Vvedite q:";
cin>>q;
//q*a*(x*x)+p*x+2=0 условие пересечения, найдем дискриминант D
{
double d,x,y,x1,x2,y1,y2;

d=(p*(x*x)-4*(q*a*(x*x))*2);
if d<0
cout<<"ne peresekaytsya";
{
if d=0 //прямая касается параболы
x=-p/(2*a*q); //находим координаты точки
y=(p*p)/3*(a*a)*(q*q); //находим координаты точки
if (х>=-13 && x<=13 && y<=13 && y>=-13)
cout<<"pr9ma9 kasaets9 parabolbI"<<endl;
{
if d>0 //есть две точки пересечения, находим их
x1=-p+(sqrt(d))/2*q*a;
x2=-p-(sqrt(d))/2*q*a;
y1=a*(x1*x1);
y2=a*(x2*x2);

if (х1 >= -13 && x2 <= 13 && y1<=13 && y2>=-13)

cout<<"Perese4enie v kvadrate"<<endl;
}
}
}
return 0;
Если прямая и парабола пересекаются, то a*x^2=-(p*x+2)/q;или q*a*x^2+p*x+2=0. Решаем это квадратное уравнение.
1.Если D(дискриминант)<0, то прямая и парабола не пересекаются.
2.Если D=0, прямая касается параболы. x=-p/(2*a*q); y=p^2/(3*a^2*q^2). Определям, входит ли данная точка в заданный прямоугольник.
3.Усли D>0, есть две точки пересечения. Решаем уравнение, находим х1 и х2, потом у1 и у2, определяем, входят ли данные точки в заданный прямоугольник.

Сделал. Ошибки. начал искать...нашел, глупо полагать что это решится D=(p*(x*x)-4*(q*a*(x*x))*2); если значение х неизвестно..вот тут возникла основная проблема...как найти икс? )))
patrick87
Сообщения: 13
Зарегистрирован: 29 янв 2008, 19:42

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
double x,y,D;
float a,p,q;
cout<<"Vvedite a:";
cin>>a;
cout<<"Vvedite p:";
cin>>p;
cout<<"Vvedite q:";
cin>>q;
D=(p*p)-(4*(q*a)*2);
cout<<"D: "<<D<<endl;
{
if (D<0) //не пересекаются
cout<<"ne peresekaytsya"<<endl;
}
{
if (D==0) //прямая касается параболы, находим одну точку
x=-p/2*a*q;
y=p*p/3*(a*a)*(q*q);
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
}
{
if (x>=-13 && x<=13 && y<=13 && y>=-13)
cout<<"to4ka v kvadrate";
else cout<<"ne v kvadrate";
}
{
double x1,x2,y1,y2;
if (D>0) //есть две точки пересечения
x1=-p+sqrt(D)/2*q*a;
x2=-p-sqrt(D)/2*q*a;
y1=a*(x1*x1);
y2=a*(x2*x2);
cout<<"(x1;y1)"<<x1<<y1<<'/n';
cout<<"(x2;y2)"<<x2<<y2<<'/n';
{
if (x1 >= -13 && x2 <= 13 && y1<=13 && y2>=-13)
cout<<"Perese4enie v kvadrate"<<endl;
}
}
return 0;
}
помогите исправить плз
drummer
Сообщения: 61
Зарегистрирован: 13 янв 2008, 18:43

вместо
x=-p/2*a*q;
надо

Код: Выделить всё

x=-p/(2*a*q);
Аналогично вместо
x1=-p+sqrt(D)/2*q*a;
x2=-p-sqrt(D)/2*q*a;
надо

Код: Выделить всё

x1=(-p+sqrt(D))/(2*q*a);
x2=(-p-sqrt(D))/(2*q*a);
Ответить