Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

как выйти из циклов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Почему так? http://www.cyberforum.ru/cpp-beginners/thread859622.html
Я вот уже довольно много времени читаю книги и разные коды по программированию, но все так и не понял. Почему хорошие программисты используют запись std:: а не просто в начале написать using...
C++ Необходимо написать калькулятор(деление), чтобы при выводе показывало 30 знаков после запятой Необходимо написать калькулятор(деление), чтобы при выводе показывало 30 знаков после запятой. Типо 1/3 = 0,333333333333333333333333333334 P.S. Еще учитель просить использовать массив. Зачем? И... http://www.cyberforum.ru/cpp-beginners/thread859593.html
C++ поиск подстроки в строке
Всем доброго времени суток! Дано: две строки типа string, к примеру str1 = "HeLLo" и str2 = "hell" Вопрос: как найти из str1 подстроку str2 без учёта регистра? заранее спасибо
C++ Поиск и замена слов в файле txt
Как заменить и найти слова в файле txt на С++. То есть есть файл вот такой структуры AAA БББ BBB 111 222 ыыы
C++ Рекурсивная функция http://www.cyberforum.ru/cpp-beginners/thread859574.html
Походу что-то с массивами не то, когда ввожу слишком большое число (15+), то выбивает ошибку с кучами\стеками, которую я не понимаю. using namespace std; void rekursija(long long factorials, int...
C++ Перевод с pascal на c++ помогите перевести следующий текст с pascal на c++ uses crt; var mas: array of integer; i,a,b,min,max,r:integer; begin clrscr; randomize; for i:= 1 to 10 do begin подробнее

Показать сообщение отдельно
Zakat
6 / 6 / 0
Регистрация: 24.12.2012
Сообщений: 149
10.05.2013, 06:59  [ТС]
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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <Windows.h>
#include <iostream>
 
void main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);   
 
    float R = 31;
    float _x0, _y0;
    _x0 = 32 - R;
    float Dokr;
    Dokr = (-40) * (-40) - 4 * 1 * (-560);
    _y0=((-40) + sqrt(Dokr)) / 2;
    float krayokruzhnostiX1, krayokruzhnostiX2;
    krayokruzhnostiX1 = _x0 - R;
    krayokruzhnostiX2 = _x0 + R;
    
    float a = 31, b = 38;
    float _x, _y;
    float Dell;
    _y = b - 45;
    Dell = (-80) * (-80) - 4 * 1 * 671;
    _x = (-80 + sqrt(Dell)) / 2;
    float krayellipsaX1, krayellipsaX2;
    krayellipsaX1 = _x - a;
    krayellipsaX2 = _x + a;
    
    
    float Yell1, Yell2;
    float Yokr1, Yokr2;
    float X1, X2;
    float t, w, D;
 
        float n1 = 1;//типо a
        w = 2 * _y0;//типо b
        
        float znachenieellipsa = 1;
            float t1, w1, D1;
            float n2 = 1;//типо а
            w1 = 2 * _y;//типо b
 
    for( float i1 = krayokruzhnostiX1; i1 < krayellipsaX2; i1 = i1 + 0.001)
    {
        t = pow(i1 - _x0, 2) + pow(_y0, 2) - pow(R, 2);// типо c
        D = w * w - 4 * n1 * t;//дискриминант
        Yokr1 = (w + sqrt(D)) / 2 * n1;//первый корень окружности
        Yokr2 = (w - sqrt(D)) / 2 * n1;//второй корень окружности
        
        
        t1 = ((pow(i1 - _x, 2)) / (a * a) - znachenieellipsa) * (b * b) + (_y * _y);//типо с
        D1 = w1 * w1 - 4 * n2 * t1;//дискриминант 
        Yell1 = (w1 + sqrt(D1)) / 2 * n2;//первый корень эллипса
        Yell2 = (w1 - sqrt(D1)) / 2 * n2;//второй корень эллипса
 
        if( Yell1 != Yokr1)
        {
            printf("точки окружности от края окружности до края эллипса по X\n\tX=%0.3f \n\tY=%0.3f, Y1=%0.3f\n", i1, Yokr1, Yokr2);
            printf("точки эллипса от края окружности до края эллипса по X\n\tX=%0.3f \n\tY=%0.3f, Y1=%0.3f\n", i1, Yell1, Yell2);
        }
        else{break;}
        
    }
 
        printf("точки пересечения\n");
    system("pause");
}
посидел подумал вот что получилось. сделал все в 1 цикл. таки она считает точки! только сейчас не знаю как найти Yell1 == Yokr1

Добавлено через 8 минут
p.s на 70 строку не обращайте внимания... =)

Добавлено через 13 часов 6 минут
народ, нужна помощь... нужно сделать так чтобы ВСЕ числа считались с остатком до 0.001... понял почему такой косяк... возникает погрешность...

Добавлено через 1 час 12 минут
возник новый вопрос... как в формулах сказать компьютеру чтобы вычислял до трех знаков после запятой? например в строках 52 53 и 58 59, а то ведь там числа могу получаться очень длинные...

Добавлено через 2 часа 32 минуты
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <Windows.h>
#include <iostream>
#include <iomanip>
using namespace std;
 
void main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);   
 
    float R = 31.000;
    float _x0, _y0;
    _x0 = 32.000 - R;
    float Dokr;
    Dokr = (-40.000) * (-40.000) - 4.000 * 1.000 * (-560.000);
    _y0 = ((-40.000) + sqrt(Dokr)) / 2.000;
    float krayokruzhnostiX1, krayokruzhnostiX2;
    krayokruzhnostiX1 = _x0 - R;
    krayokruzhnostiX2 = _x0 + R;
    
    float a = 31.000, b = 38.000;
    float _x, _y;
    float Dell;
    _y = b - 45.000;
    Dell = (-80.000) * (-80.000) - 4.000 * 1.000 * 671.000;
    _x = (-80.000 + sqrt(Dell)) / 2.000;
    float krayellipsaX1, krayellipsaX2;
    krayellipsaX1 = _x - a;
    krayellipsaX2 = _x + a;
    
    
    float Yell1 = 0.000, Yell2 = 0.000;
    float Yokr1 = 0.000, Yokr2 = 0.000;
    float X1, X2;
    float t, w, D;
 
        float n1 = 1.000;//типо a
        w = 2.000 * _y0;//типо b
        
        float znachenieellipsa = 1.000;
            float t1, w1, D1;
            float n2 = 1.000;//типо а
            w1 = 2.000 * _y;//типо b
 
    for(float i1 = krayokruzhnostiX1; i1 <= 0; i1 = i1 + 0.000001)
    {       
        t = pow(i1 - _x0, 2.000) + pow(_y0, 2.000) - pow(R, 2.000);// типо c
        D = w * w - 4.000 * n1 * t;//дискриминант
        Yokr1 = (w + sqrt(D)) / 2.000 * n1;//первый корень окружности
        X1=i1;      
        
        t1 = ((pow(i1 - _x, 2.000)) / (a * a) - znachenieellipsa) * (b * b) + (_y * _y);//типо с
        D1 = w1 * w1 - 4 * n2 * t1;//дискриминант 
        Yell1 = (w1 + sqrt(D1)) / 2.000 * n2;//первый корень эллипса
                
        if(Yokr1 == Yell1)
            break;      
    }
    printf("X=%.3f Yokr=%.3f, Yell=%.3f\n", X1, Yokr1, Yell1);
 
    for(float i1 = 21; i1 <= krayellipsaX2; i1 = i1 + 0.000001)
    {       
        t = pow(i1 - _x0, 2.000) + pow(_y0, 2.000) - pow(R, 2.000);// типо c
        D = w * w - 4.000 * n1 * t;//дискриминант
        Yokr2 = (w - sqrt(D)) / 2.000 * n1;//второй корень окружности
        X2=i1;      
        
        t1 = ((pow(i1 - _x, 2.000)) / (a * a) - znachenieellipsa) * (b * b) + (_y * _y);//типо с
        D1 = w1 * w1 - 4 * n2 * t1;//дискриминант 
        Yell2 = (w1 - sqrt(D1)) / 2.000 * n2;//второй корень эллипса
 
        if(Yokr2 == Yell2)
            break;
        else
        {
        printf("X=%f Yokr=%f, Yell=%f\n", X2, Yokr2, Yell2);
        }
    }
        
    printf("X=%.3f Yokr=%.3f, Yell=%.3f\n", X2, Yokr2, Yell2);
        
    system("pause");
}
сделал два цикла, первый для первых точек, второй для вторых) в первом все нормально, можно сказать повезло... а вот со вторым циклом так не везет, проскакивает. количество итераций конечно много... но если можно подскажите как сделать чтобы сами значения при вычислении до трех знаков округлялись? поиск пробовал

Добавлено через 1 минуту
поиск пробовал, много интересного пишут, но я не могу понять как в мои выражения это вставить

Добавлено через 1 минуту
[IMG]http://s017.***********/i435/1305/2b/9e33add5876d.png[/IMG]
вот в этой точке проскакивает...

Добавлено через 16 минут
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <Windows.h>
#include <iostream>
#include <iomanip>
using namespace std;
 
void main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);   
 
    float R = 31.000;
    float _x0, _y0;
    _x0 = 32.000 - R;
    float Dokr;
    Dokr = (-40.000) * (-40.000) - 4.000 * 1.000 * (-560.000);
    _y0 = ((-40.000) + sqrt(Dokr)) / 2.000;
    float krayokruzhnostiX1, krayokruzhnostiX2;
    krayokruzhnostiX1 = _x0 - R;
    krayokruzhnostiX2 = _x0 + R;
    
    float a = 31.000, b = 38.000;
    float _x, _y;
    float Dell;
    _y = b - 45.000;
    Dell = (-80.000) * (-80.000) - 4.000 * 1.000 * 671.000;
    _x = (-80.000 + sqrt(Dell)) / 2.000;
    float krayellipsaX1, krayellipsaX2;
    krayellipsaX1 = _x - a;
    krayellipsaX2 = _x + a;
    
    
    float Yell1 = 0.000, Yell2 = 0.000;
    float Yokr1 = 0.000, Yokr2 = 0.000;
    float X1, X2;
    float t, w, D;
 
        float n1 = 1.000;//типо a
        w = 2.000 * _y0;//типо b
        
        float znachenieellipsa = 1.000;
            float t1, w1, D1;
            float n2 = 1.000;//типо а
            w1 = 2.000 * _y;//типо b
            printf("точки пересечения эллипса и окружности\n");
    for(float i1 = krayokruzhnostiX1; i1 <= 0; i1 = i1 + 0.00001)
    {       
        t = pow(i1 - _x0, 2.000) + pow(_y0, 2.000) - pow(R, 2.000);// типо c
        D = w * w - 4.000 * n1 * t;//дискриминант
        Yokr1 = (w + sqrt(D)) / 2.000 * n1;//первый корень окружности
        X1=i1;      
            float tpy1 = int(Yokr1 * 1000 + 0.5)/10000.0;
        t1 = ((pow(i1 - _x, 2.000)) / (a * a) - znachenieellipsa) * (b * b) + (_y * _y);//типо с
        D1 = w1 * w1 - 4 * n2 * t1;//дискриминант 
        Yell1 = (w1 + sqrt(D1)) / 2.000 * n2;//первый корень эллипса
            float tpy2 = int(Yell1 * 1000 + 0.5)/10000.0;
        if(Yokr1 == Yell1)
            break;      
    }
    printf("\tX1=%.3f\tY1=%.3f\n", X1, Yokr1);
 
    for(float i1 = 21; i1 <= krayellipsaX2; i1 = i1 + 0.0001)
    {       
        t = pow(i1 - _x0, 2.000) + pow(_y0, 2.000) - pow(R, 2.000);// типо c
        D = w * w - 4.000 * n1 * t;//дискриминант
        Yokr2 = (w - sqrt(D)) / 2.000 * n1;//второй корень окружности
        X2=i1;      
            float tpy1 = int(Yokr2 * 1000 + 0.5)/1000.0; 
        t1 = ((pow(i1 - _x, 2.000)) / (a * a) - znachenieellipsa) * (b * b) + (_y * _y);//типо с
        D1 = w1 * w1 - 4 * n2 * t1;//дискриминант 
        Yell2 = (w1 - sqrt(D1)) / 2.000 * n2;//второй корень эллипса
            float tpy2 = int(Yell2 * 1000 + 0.5)/1000.0;
        if(tpy1 == tpy2)
            break;
        else
        {
        //printf("X=%f Yokr=%f, Yell=%f\n", X2, tpy1, tpy2);
        }
    }
        
    printf("\tX2=%.3f\tY2=%.3f\n", X2, Yokr2);
        
    system("pause");
}
фух все разобрался и решил эту задачку))
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru