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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.89
Няффка
1 / 1 / 0
Регистрация: 13.11.2010
Сообщений: 11
14.11.2010, 23:10     как прервать работу функции??? #1
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
2838 / 1775 / 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
2769 / 1582 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
14.11.2010, 23:54     как прервать работу функции??? #4
Можно сделать возвращаемое значение bool (всё равно точка пересечения сохраняется в D) - return true, если пересеклись, и false, если нет.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 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
4837 / 3236 / 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++ Объясните работу функции

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

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

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

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