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

Длина перпендикуляра из точки к отрезку - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамически создать массив http://www.cyberforum.ru/cpp-beginners/thread775830.html
Все чуть посложнее, чем кажется. Goat, Wolf, Cowboy - производные классы от Animal. Динамически создаем массивы из Goat и Wolf. Cowboy - только один. Затем, поскольку у них у всех есть виртуальные функции, которые мне надо использовать, я создаю массив указателей на тип Animal. cout<<"How many goats? "; // Сколько коз в стаде cin>>numberOfGoats; Goat *ptrGoats = new Goat; cout<<"How...
C++ Не могу найти ошибку! Вобщем вот программа. #include <iostream.h> #include <math.h> #include <iomanip.h> #include <conio.h> int main () { const int max = 500; http://www.cyberforum.ru/cpp-beginners/thread775826.html
C++ Выбор контейнера
Есть два варианта. Первый: map <pair <int,int>, int> my_map; map <pair <int,int>, int>::iterator p; p = my_map.find(make_pair(100,150)); Второй:
C++ Перегрузка операторов -> <-
Здравствуйте в столь позднее время.. Какова особеность перегрузки операторов -> и . ? Что возвращают ? Если можно ссылки на стандарт...Заранее спасибо.
C++ Объекты класса http://www.cyberforum.ru/cpp-beginners/thread775804.html
Приветствую вас) Подскажите пожалуйста какая структура у класса и его объектов в c++bilder К примеру создание класса и 3-х объектов внутри. Мучаюсь уже сутки и не могу понять...а нормальной литературы найти не получается( Заранее спасибо!
C++ Ошибка с статическими членами класса Доброго времени суток, форумчане! Недавно пришлось вернуться с С# на С++ и я тут же заметил что я все забыл( Итак по сути: Есть определение класса: static class control { public: static double u0; подробнее

Показать сообщение отдельно
СПП
25 / 25 / 2
Регистрация: 15.12.2012
Сообщений: 71
01.02.2013, 06:58     Длина перпендикуляра из точки к отрезку
Я сделал программу с упором на С++, так как неизучал С
Я не смог портестить ваш вариант, так как мой компилятор не находит fopen, fscanf, fprintf

у меня работает, тока вывод в файл output.txt странный
у меня выводит не 2.0000 а 2.23607
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
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <clocale>
#include <cmath>
 
#define     iFILE       "input.txt"
#define     oFILE       "output.txt"
 
class Point {
    public:     double x;
    public:     double y;
};
 
int main(){setlocale(LC_ALL,"Rus");
    std::ifstream inp;inp.open(iFILE);
        while(!inp.is_open()){
            std::cout << "Файл не найден." << std::endl;
        system("pause");
        return 0;
        }
        Point A,B,C;
        inp >> A.x >> A.y >> B.x >> B.y >> C.x >> C.y;
        std::ofstream ofs;ofs.open(oFILE);
            if( A.y<C.y && A.y>B.y  ||  // если А находится между С и Б
                A.y<B.y && A.y>C.y){    // если А находится между Б и С
                    double AB = sqrt(pow(B.x-A.x    ,2.0)+pow(B.y-A.y   ,2.0)); // ищем растояниие между точками А и Б
                    double CB = sqrt(pow(C.x-B.x    ,2.0)+pow(C.y-B.y   ,2.0)); // ищем растояниие между точками С и Б
                    double Bh = (1/2)*CB;                                       // ищем катит, будем искать "высоту = перпендикуляр" по теореме Пифагора
                    double Ah = sqrt(pow(AB ,2.0)-pow(Bh  ,2.0));               // <- перепендикуляр
            ofs << Ah;
            }
            else 
                ofs << -1;
        ofs.close();
    inp.close();
system("pause");
return 0;
}
Добавлено через 14 часов 1 минуту
Попровил немножко код, теперь получается всё как надо
выводит 2.0000, с 4 фиксированными знаками после запятой
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
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <clocale>
#include <cmath>
#include <iomanip>
 
#define     iFILE       "input.txt"
#define     oFILE       "output.txt"
 
class Point {
    public:     double x;
    public:     double y;
};
 
int main(){setlocale(LC_ALL,"Rus");
    std::ifstream inp;inp.open(iFILE);
        while(!inp.is_open()){
            std::cout << "Файл не найден." << std::endl;
        system("pause");
        return 0;
        }
        Point A,B,C;
        inp >> A.x >> A.y >> B.x >> B.y >> C.x >> C.y;
        std::ofstream ofs;ofs.open(oFILE);
            if( A.y<C.y && A.y>B.y  ||      // если А находится между С и Б
                A.y<B.y && A.y>C.y){        // если А находится между Б и С
                    double AB = sqrt(pow(C.x-A.x    ,2.0)+pow(C.y-A.y   ,2.0)); // ищем растояниие между точками А и Б
                    double AC = sqrt(pow(C.x-A.x    ,2.0)+pow(C.y-A.y   ,2.0)); // ищем растояниие между точками А и С
                    double CB = sqrt(pow(C.x-B.x    ,2.0)+pow(C.y-B.y   ,2.0)); // ищем растояниие между точками С и Б
                    // полупериметр и площадь
                    double p = (AB+AC+CB)/2;
                    double S = sqrt(p*(p-AB)*(p-AC)*(p-CB));
                    // площадь треуголника S = 1/2Ah - Где A-основание треугольник, h-высота
                    // вырожаем высоту (h),  h = (2*S)/A
                    double Ah = (2*S)/CB;
            ofs << std::fixed << std::setprecision(4) << Ah;
            }
            else if(A.y==C.y && A.y>B.y ||  // если А находится на = с С и > Б
                    A.y==B.y && A.y>C.y){   // если А находится на = с Б и > С
                        double Ah = sqrt(pow(C.x-A.x    ,2.0)+pow(C.y-A.y   ,2.0));
                ofs << std::fixed << std::setprecision(4) << Ah;
                }
            else 
                ofs << -1;
        ofs.close();
    inp.close();
system("pause");
return 0;
}
чтобы вывести 4 знака после запятой нужно использовать библиотеку
C++
1
#include <iomanip>
и в std::cout или как у меня ofs
деать так
C++
1
/*ofs*/ << std::fixed << std::setprecision(4) << /*Ah;*/
 
Текущее время: 09:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru