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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Zakat
6 / 6 / 0
Регистрация: 24.12.2012
Сообщений: 144
#1

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

09.05.2013, 00:14. Просмотров 1981. Ответов 20
Метки нет (Все метки)

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
#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;
    
    for( float X1=krayokruzhnostiX1; X1<krayokruzhnostiX2; X1=X1+0.001)
    {
        float Yokr1, Yokr2;
        float t, w, D;
        float n1=1;//типо a
        w=2*_y0;//типо b
        t=pow(X1-_x0, 2)+pow(_y0, 2)-pow(31, 2);// типо c
        D=w*w-4*n1*t;//дискриминант
        Yokr1=(-w+sqrt(D))/2*n1;//первый корень окружности
        Yokr2=(-w-sqrt(D))/2*n1;//второй корень окружности
        for(float X2=krayellipsaX1; X2<krayellipsaX2; X2=X2+0.001)
        {
            float znachenieellipsa=1;
            float Yell1, Yell2;
            float t1, w1, D1;
            float n2=1;//типо а
            w1=2*_y;//типо b
            t1=((pow(X2-_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;//второй корень эллипса
        }
        
        
    }
    printf("точки пересечения\n\t\X1=%0.3f, Y1=%0.3f\n\tX2=%0.3f, Y2=%0.3f", X1, Yokr1, X2, Yokr2);
    system("pause");
}
подскажите пожалуйста как выйти из этих циклов? ну и чтобы сообщение вывелось)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 00:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос как выйти из циклов (C++):

как выйти из программы - C++
при выполнении программы - выполняется выбранная операция, после чего при нажатии любой кнопки цикл повторяется... вопрос: Что нужно...

Как выйти из цикла while(); - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cctype&gt; #include &lt;string&gt; #include &lt;vector&gt; using namespace std; int main()...

do while - как выйти из цикла? - C++
Подскажите пожалуйста, а то я уже всю голову &quot;сломал&quot;, почему при вводе &quot;А&quot; цикл не прерывается??? #include &lt;iostream&gt; #include...

Как выйти из программы - C++
Написав щось подібне калькулятору. Але що написати щоб вийти з консолі?? буду вдячний. І ще наприклад для повернення в голову...

Как выйти из оператора if - C++
Пишу ИИ для крестиков-ноликов и вопрос в том, если исполниться одино условие как сделать так что бы другие не проверялись? break чето в...

Как выйти из функции - C++
Прошу прощения. Произошел сбой при записи. Напишите еще раз суть задачи. То получилось что-то вроде рекурсии, постоянно вызывается этот...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
09.05.2013, 00:19 #2
1) используя break можно выйти из одного цикла - соответственно нужна конструкция посложнее
2) можно нарочно нарушить условие X1<krayokruzhnostiX2 - но эт плохой тон
3) goto - выйдет из обоих циклов - но это очень плохой тон
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.05.2013, 00:26 #3
4) Выделить этот ужас в функцию и выйти из неё. Противники goto всё равно будут в ярости, но всё же меньше.
Zakat
6 / 6 / 0
Регистрация: 24.12.2012
Сообщений: 144
09.05.2013, 00:26  [ТС] #4
пробовал брейк, тогда возникает другая проблема в 59 строке X1, Yokr1, X2, Yokr2 "идентификатор не определен"
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 00:29 #5
Цитата Сообщение от Zakat Посмотреть сообщение
пробовал брейк, тогда возникает другая проблема в 59 строке X1, Yokr1, X2, Yokr2 "идентификатор не определен"
Вынесите объявление переменных за пределы цикла
Zakat
6 / 6 / 0
Регистрация: 24.12.2012
Сообщений: 144
09.05.2013, 00:34  [ТС] #6
Цитата Сообщение от metaluga145 Посмотреть сообщение
Вынесите объявление переменных за пределы цикла
тогда как быть с X1 и X2? они же в самом цикле идентифицированы
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 00:35 #7
Zakat, Форматирование кода : избавьтесь от констант в коде, это очень тяжело читать. вокруг =,-,+,&&,||,+= итп ставьте пробелы.
C++
1
 Yell2=(w1-sqrt(D1))/2*n2;//второй корень эллипса
все константы в коде вещественного типа пишите с .0 (2.0 * n2) иначе может быть косяк, скрытый от глаз.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 00:37 #8
Цитата Сообщение от Zakat Посмотреть сообщение
тогда как быть с X1 и X2? они же в самом цикле идентифицированы
ну Вы ж можете инициализировать их до цикла?
Zakat
6 / 6 / 0
Регистрация: 24.12.2012
Сообщений: 144
09.05.2013, 00:41  [ТС] #9
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
float Yell1, Yell2;
    float Yokr1, Yokr2;
    float X1, X2;
    for( float i1=krayokruzhnostiX1; i1<krayokruzhnostiX2; i1=i1+0.001)
    {
        float t, w, D;
        float n1=1;//типо a
        w=2*_y0;//типо b
        t=pow(i1-_x0, 2)+pow(_y0, 2)-pow(31, 2);// типо c
        D=w*w-4*n1*t;//дискриминант
        Yokr1=(-w+sqrt(D))/2*n1;//первый корень окружности
        Yokr2=(-w-sqrt(D))/2*n1;//второй корень окружности
        X1=i1;
        for(float i2=krayellipsaX1; i2<krayellipsaX2; i2=i2+0.001)
        {
            float znachenieellipsa=1;
            float t1, w1, D1;
            float n2=1;//типо а
            w1=2*_y;//типо b
            t1=((pow(i2-_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;//второй корень эллипса
            X2=i2;
            if(Yokr1==Yell1 && Yokr2==Yell2)break;
            
        }
        if(X1==krayokruzhnostiX2)break;
        
    }
    printf("точки пересечения\n\t\X1=%0.3f, Y1=%0.3f\n\tX2=%0.3f, Y2=%0.3f", X1, Yokr1, X2, Yokr2);
    system("pause");
}
если только так, но все равно ничего
ssXXss
266 / 188 / 10
Регистрация: 15.01.2011
Сообщений: 681
09.05.2013, 00:47 #10
названия переменных жесть, глаза режет,можно было проще записать:
C++
1
2
3
4
5
6
7
8
 // вместо
 //float krayokruzhnostiX1, krayokruzhnostiX2;
 //krayokruzhnostiX1=_x0-R;
 // krayokruzhnostiX2=_x0+R;
 // где то так
 float flX1 = _x0 - R; // край окружности flX1 равен чему то там
 float flX2 = _x0 + R; // край окружности flX2 равен чему то там
 ....
Zakat
6 / 6 / 0
Регистрация: 24.12.2012
Сообщений: 144
09.05.2013, 00:52  [ТС] #11
Цитата Сообщение от ssXXss Посмотреть сообщение
названия переменных жесть
я поработаю на этим... но можно по теме?
ssXXss
266 / 188 / 10
Регистрация: 15.01.2011
Сообщений: 681
09.05.2013, 01:10 #12
можно и по теме , но у меня в отладчике каша )) сразу и не разберешь что к чему.

Добавлено через 10 минут
у тебя не соблюдается условие в
C++
1
2
if( X1 == krayokruzhnostiX2 )
break;
X1 и krayokruzhnostiX2 не изменяют своих значений , они постоянны .

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
if(X1 != krayokruzhnostiX2)
{
    printf("X1 = %0.3f, krayokruzhnostiX2 =  %0.3f\n",X1, krayokruzhnostiX2);
}
else
{
    break;
}
воткни это и смотри как они изменяются с каждой итерацией.
Zakat
6 / 6 / 0
Регистрация: 24.12.2012
Сообщений: 144
09.05.2013, 01:23  [ТС] #13
X1 изменят свои значения...так и задумано... он проходит по кругу и показывает точки на окружности... но мне надо что бы когда в следующем цикле точки Yell1 = Yokr1 и Yell2 = Yokr2 совпали он показал их... совпавшие точки...
ssXXss
266 / 188 / 10
Регистрация: 15.01.2011
Сообщений: 681
09.05.2013, 01:33 #14
точно ,меняют .
Zakat
6 / 6 / 0
Регистрация: 24.12.2012
Сообщений: 144
09.05.2013, 01:36  [ТС] #15
хотя я сомневаюсь что Yell1 = Yokr1 и Yell2 = Yokr2 совпадут в одно время... значит теперь еще надо чтобы когда первый раз совпали их где-то запомнить, потом продолжить цикл чтобы найти вторые точки...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2013, 01:36
Привет! Вот еще темы с ответами:

Как выйти из условия if? - C++
Пользователю предлагается выбор, он должен ввести 1 или 2. Я хочу учесть и ситуацию, когда пользователь ошибся, и,чтобы не перезапускать...

Как выйти из цикла? Не получается - C++
Есть задача: Из-за высокой цены бензина водители озабочены затратами топлива своих автомобилей. Один водитель взял в рейс несколько...

Не пойму как из цикла выйти - C++
в учебнике такой пример. #include &lt;stdio.h&gt; main() { long nc; nc = 0; while ( getchar() != EOF)

Как досрочно выйти из программы - C++
Всем привет. Как досрочно выйти из программы: int main() { int b; setlocale(0,&quot;&quot;); cout&lt;&lt;&quot;Что вы хотите сделать? 1- блаблабла,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.05.2013, 01:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru