Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для IrishaIrinaChe
29 / 29 / 3
Регистрация: 23.09.2010
Сообщений: 203

Криво чертит параболу(

30.11.2010, 18:40. Показов 1462. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, форумчане!
Проблема в следующем: при определённых параметрах(а1=3, b1=1) значение начального х1- число не целое. Почему -то именно при x1!=целому числу, в графике параболы не прочерчивается основание. ветви прочерчиваются, а основание-нет. Вот текст:

C++
1
2
3
4
5
6
7
8
9
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
float y1,x1;
int a1,b1;
 
int matrGraf1[3][200]; //матрицы, размером 2х200, для хранения координат
 
void ShowUrawn1(void)  //выводит текст уравнения графика 1
{
 AnsiString text;
 text = "y1 = + - sqrt(a1*x1+b)";
 FPC1->TextOutA(25, H1-20,  text);
}
 
//------------------------------------------------------------------------
 
void initGraf1(void)      //прорисовка графа
{
 a1=StrToInt(Form6->CSpinEdit1->Text);
 b1=StrToInt(Form6->CSpinEdit2->Text);
 
 if(a1!=0)
  x1=-b1/a1;
 else
  x1=-10;
 if((a1*x1+b1)<0)
  ShowMessage("График не работает с комплексными числами"); //окно с сообщением
 else
 {
   if((x1-int(x1))>=0.5)
           x1=int(x1)+1;
     else
           x1=int(x1);
  for(int i=0;i<200;i++)
   {
     y1=sqrt((a1*x1)+b1);
 
     matrGraf1[0][i]=W1/2+int(h*x1);
     matrGraf1[1][i]=H1/2-int(h*y1);
     matrGraf1[2][i]=H1/2-int(h*(-1)*y1);
     x1=x1+i*0.1;
   }
 }
}
 
//-----------------------------------------------------------------------
 
void showGraf1(int taim,int flag)
{
 FPC1->Pen->Width=4;                      // Устанавливаем ширину пера
 FPC1->Pen->Color=clRed;
 if(flag==1)
 FPC1->LineTo(matrGraf1[0][taim], matrGraf1[1][taim]);
 else
 FPC1->LineTo(matrGraf1[0][taim], matrGraf1[2][taim]);
 
 FPC1->Pen->Width=1;                      // Восстанавливаем ширину пера
 FPC1->Pen->Color=clBlack;
}
 
void __fastcall TForm6::Button1Click(TObject *Sender)    //пуск
{
if(Form6->PageControl1->TabIndex==0)  //какое окно активно
    {
     for(int i=0;i<200;i++)
             initGraf1();
     FPC1->MoveTo(matrGraf1[0][0], matrGraf1[1][0]);
     for(int i=1;i<200;i++)
             showGraf1(i,1);
     FPC1->MoveTo(matrGraf1[0][0], matrGraf1[2][0]);
     for(int i=1;i<200;i++)
             showGraf1(i,2);
     ShowUrawn1();
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2010, 18:40
Ответы с готовыми решениями:

Нарисовать параболу и кубическую параболу в JavaScript
Нарисовать параболу и кубическую параболу в системе координат 10х10 в JavaScript. Не знаю как сделать... Добавлено через 8 часов 27...

программа,которая чертит на экране ракету
помогите сделать программу,которая чертит на экране ракету. программу выполнять на Borland C

построить параболу
y2=1/8x найти фокус деректриссу и параметр

6
 Аватар для Питекантроп
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
01.12.2010, 00:42
Цитата Сообщение от IrishaIrinaChe Посмотреть сообщение
x1=-b1/a1;
Это первое, что увидел. При делении двух целых чисел результат округляется. Поэтому для получения числа нецелого следует писать
C++
1
x1=-1.*b1/a1;
Проверьте весь код на наличие таких ошибок
0
 Аватар для IrishaIrinaChe
29 / 29 / 3
Регистрация: 23.09.2010
Сообщений: 203
01.12.2010, 10:06  [ТС]
Питекантроп, если я пишу
Цитата Сообщение от Питекантроп Посмотреть сообщение
x1=-1.*b1/a1;
то при задании координат a=3,b=1 он выдаёт ошибку, хотя её там быть не должно. может, есть другие способы?
0
 Аватар для Питекантроп
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
01.12.2010, 15:46
Цитата Сообщение от IrishaIrinaChe Посмотреть сообщение
y1=sqrt((a1*x1)+b1);
В цикле каждый раз проверяйте подкоренное выражение положительное ли оно.

Цитата Сообщение от IrishaIrinaChe Посмотреть сообщение
x1=x1+i*0.1;
Это у вас в цикле. Если у вас шаг постоянный, то неправильно.
Нужно
C++
1
x1=i*0.1;
Или

C++
1
x1=x0+i*0.1; // x0 - начальное значение графика
1
 Аватар для IrishaIrinaChe
29 / 29 / 3
Регистрация: 23.09.2010
Сообщений: 203
01.12.2010, 17:09  [ТС]
я сделала как вы сказали. что-то изменилось,но не понятно что)
на данном этапе возникает две проблемы:
1. почему он таки-не может дорисовать основание параболы, если координата х-не целая.
2. почему он не чертит две ветви параболы, а только одну?
Вложения
Тип файла: rar First_mo_парабол.rar (590.4 Кб, 29 просмотров)
0
 Аватар для Питекантроп
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
01.12.2010, 23:31
я понял. В вашем выражении необходимо чертить как положительную сторону, так и отрицательну. Т.к. корень. Но вам лучше выразить х как функцию от у. В таком случае нужно будет пербирать у по нужному диапазону и считать х. Тогда не будет проверок на положительность и прочего гемороя.
Чтоб парабола не была ломаной, следует уменьшить шаг.
Цитата Сообщение от IrishaIrinaChe Посмотреть сообщение
y1=sqrt((a1*x1)+b1);
1
 Аватар для IrishaIrinaChe
29 / 29 / 3
Регистрация: 23.09.2010
Сообщений: 203
02.12.2010, 00:42  [ТС]
Питекантроп, мысль выразить х через у мне и в голову не пришла! спасибо вам огромное!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2010, 00:42
Помогаю со студенческими работами здесь

Построить параболу
Добрый вечер, программа все работает.. но только мне нужно чтобы рисовало не линию, а параболу. Уравнение вида axx+bx+c (квадратичная...

Нарисовать параболу
Задача состоит в том, чтобы нарисовать параболу которая состоит из линий, таких чтобы, если нарисовать квадрат со стороной 30 то линия...

нарисовать параболу (x^2)
Уважаемые умы этого форума, и просто хорошие люди! Напишите пожалуйста 2 программы. 1. нарисовать параболу (x^2) через procedure, и...

нарисовать параболу
Помогите нарисовать параболу в точке 0 0. Или хотя бы подтолкните на алгоритм написания такой программы. Буду очень благодарен! Параболу...

Построить параболу в эксель
Помогите пожалуйста построить график в эксель: построить параболу дана система уравнений x=a*cos(bt) y=c+cos(2bt).


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru