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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.89
Няффка
1 / 1 / 0
Регистрация: 13.11.2010
Сообщений: 11
#1

Как прервать работу функции? - C++

14.11.2010, 23:10. Просмотров 3561. Ответов 8
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dot CrossLine (const line &L, const line &P, dot&D)
{
    double z;
    z=Determin(L.A,L.B,P.A,P.B);
    if (fabs(z)<1e-12)
    {
        char S[]="Прямые не пересекаются";
        CharToOem(S,S);
        cout<<S<<"\n";
    }
    else 
    {
        D.X=Determin(-L.C,L.B,-P.C,P.B)/z;
        D.Y=Determin(L.A,-L.C,P.A,-P.C)/z;
    }
    return D;
}
Эта функция определяет пересеклились ли прямые и координаты их точки пересечения.
Как сделать так, что если прямые не пересеклись, программа перестала дальше расчитывать и вернулась бы на начало, тоесть к вводу данных.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
14.11.2010, 23:17     Как прервать работу функции? #2
Мб goto?
Няффка
1 / 1 / 0
Регистрация: 13.11.2010
Сообщений: 11
14.11.2010, 23:27  [ТС]     Как прервать работу функции? #3
goto не подходит. Это же не основная часть программы, а только описание одной из функций. Вроде нельзя же прыгать с одной функции в другую с помощью меток.
И это было первое что я попробывала когда писала код, компилятор выдает ошибку.
Somebody
2775 / 1589 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
14.11.2010, 23:54     Как прервать работу функции? #4
Можно сделать возвращаемое значение bool (всё равно точка пересечения сохраняется в D) - return true, если пересеклись, и false, если нет.
Jupiter
Каратель
Эксперт C++
6547 / 3967 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.11.2010, 23:57     Как прервать работу функции? #5
зациклить, do { } while в main(), пока ф-я не вернет true
Няффка
1 / 1 / 0
Регистрация: 13.11.2010
Сообщений: 11
15.11.2010, 00:26  [ТС]     Как прервать работу функции? #6
это будет примерно так?
C++
1
2
3
4
5
6
7
8
9
void main
{
бла бла бла
while (CrossLine(AB,BC,B)&&CrossLine(BC,CA,C)&&CrossLine(CA,AB,A))
{
дальше код программы если выражение истина.
}
 
}
а саму функцию переписала так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool CrossLine (const line &L, const line &P, dot&D)
{
    double z;
    z=Determin(L.A,L.B,P.A,P.B);
    if (fabs(z)<1e-12)
    {
        char S[]="Прямые не пересекаются";
        CharToOem(S,S);
        cout<<S<<"\n";
        return false;
    }
    else 
    {
        D.X=Determin(-L.C,L.B,-P.C,P.B)/z;
        D.Y=Determin(L.A,-L.C,P.A,-P.C)/z;
        return true;
            }
}
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.11.2010, 02:23     Как прервать работу функции? #7
это неправильно, у тебя же там строки
C++
1
D.X=Determin(-L.C,L.B,-P.C,P.B)/z;
какой false или true

кстати
C++
1
z=Determin(L.A,L.B,P.A,P.B);
тоже, z - double
Няффка
1 / 1 / 0
Регистрация: 13.11.2010
Сообщений: 11
15.11.2010, 08:44  [ТС]     Как прервать работу функции? #8
accept
C++
1
2
3
4
    
 
     D.X=Determin(-L.C,L.B,-P.C,P.B)/z;
     D.Y=Determin(L.A,-L.C,P.A,-P.C)/z;
эта часть кода расчитывает координаты точки пересечения, я так и не поняла про какие строки ты говоришь. А вообще хотела что бы функция CrossLine возвращала пересеклись ли прямые вообще. Вот поэтому true и false.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2010, 10:25     Как прервать работу функции?
Еще ссылки по теме:

Как правильно записывать условные операторы и как прервать проверку при достижении результата? C++
C++ Объясните работу функции
C++ Продемонстрировать работу стандартной функции
C++ Как корректно прервать цикл? (нюансы использования циклов, операторов ветвления и оператора break)
C++ Как прервать цикл используя условия ?

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.11.2010, 10:25     Как прервать работу функции? #9
а, это меня что-то проглючило, показалось, что функция рекурсивная

всё правильно - в функцию передаёшь D (лучше маленькой буквой её назвать), а возвращаешь результат работы функции
Yandex
Объявления
15.11.2010, 10:25     Как прервать работу функции?
Ответ Создать тему
Опции темы

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