Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Градусы - Минуты - Секунды


Автор: Клявас® 26.6.2006, 01:23
Мне вот задали ещё одну программку написать на С++.

Угол определён в градусах, минутах и секундах.
Найти двойной угол. Действие проделать дважды.

Т.е., получается, допустим, если угол: 
13°,  39 минут и 27 секунд, 

то двойной угол будет:

27°, 18 минут и 54 секунды ?!

Просто я впервые сталкиваюсь, чтобы угол измерялся в минутах и секундах.
Расскажите пожалуйста, если не трудно, правильно ли я расчитываю?! 

Автор: Void 26.6.2006, 01:39
1 градус = 60 угловых минут
1 угловая минута = 60 угловых секунд

Посчитал верно. 

Автор: Prehistorik 26.6.2006, 08:43
Либо делать 60-ти ричную арифметику (а точнее только операцию х2) либо сначала в секунды всё, потом множим на два, потом обратно разбиваем на мин и градусы.

P.S.: первый способ чуть-чуть интереснее... но это ИМХО...

P.P.S: а при чем здесь С/С++??? smile  

Автор: MAKCim 26.6.2006, 09:45
Код

angle calculate(const angle& p_angle)
{
    angle angle_=p_angle;
    angle_.minutes*=2;
    (angle_.degree*=2)+=angle_.minutes/60;
    angle_.minutes%=60;
    angle_.seconds*=2;
    angle_.minutes+=angle_.seconds/60;
    angle_.seconds%=60;
}
 

Автор: Клявас® 26.6.2006, 20:44
Не знаю, я вот вчера пробовал писать, просто у нас задание заключается в том, чтобы создать класс для помещения определённых данных и нужных методов. Написать метод класса для ввода данных из клавиатуры. Написать метод конструктора без и с аргементами.

Код

#include <iostream>
using namespace std;

class Kampas{
protected: 
    int l,m,s,k,dv;
public:
        Kampas(): l(0),m(0),s(0),k(0),dv(0){}
        Kampas(int a): l(0),m(0),s(0),k(0),dv(a){}
    void showKampas(){
        cout<<"Jusu kampas yra: "<<l<<" laipsniu, " <<m<<" minutes ir "<<s<<" sekundes" <<endl;
    }
    void getKampas(){
            cout<<"Iveskite kampo laipsnius: "<<endl;
            cin>>l;
            cout<<"Iveskite kampo minutes: "<<endl;
            cin>>m;
            cout<<"Iveskite kampo sekundes: "<<endl;
            cin>>s;
    }
};
//

int main(){
    Kampas i;
        i.getKampas();
        i.showKampas();
        double dv1=0,dv2=0,dv3=0;
        dv1=g1+g1();
        dv1=g1+g1;
        dv2=g2+g2;
        dv3=g3+g3;
        if (m>59){
            if (s>59){
            m=m+1;
            s=s-59;
            }
        }

    cout<<"Dvigubas kampas yra: "<<dv1<<" laipsniu"<<endl;
    cout<<"Dvigubas kampas yra: "<<dv2<<" minuciu"<<endl;;
    cout<<"Dvigubas kampas yra: "<<dv3<<" sekundes"<<endl;
    return 0;
}

 

Автор: MAKCim 26.6.2006, 20:59
Цитата

чтобы создать класс для помещения определённых данных и нужных методов.

неправильный у тебя класс 

Автор: Клявас® 26.6.2006, 21:09
а как правильный сделать?  smile  

Автор: Клявас® 27.6.2006, 15:31
Если кому-то ещё нужен правильный ответ, кроме меня:
 smile 

Код


#include <iostream>
using namespace std;

class Kampas{
protected:
    int L, M, S, dv1, dv2, dv3;
public:
    Kampas(): L(0), M(0), S(0), dv1(0), dv2(0), dv3(0){}
    Kampas(int l, int m, int s): L(l), M(m), S(s), dv1(0), dv2(0), dv3(0){}
    void showKampas(){
        cout<<"Kampo dydis: "<<L<<"  laipsniu, "<<M<<"  minuciu, "<<S<<"  sekundziu!"<<endl;
    }
    void getKampas(){
        cout<<"Iveskite laipsnius: "<<endl;
        cin>>L;
        do{
            cout<<"Iveskite minutes: "<<endl;
            cin>>M;
            if(M>59){
                cout<<"Blogai ivedete duomenis, iveskite dar karta!"<<endl;
            }
        }while(M>59);
        do{
            cout<<"Iveskite sekundes: "<<endl;
            cin>>S;
            if(S>59){
                cout<<"Blogai ivedete duomenis, iveskite dar karta!"<<endl;
            }
        }while(S>59);
    }
    void showDvKampas(){
        cout<<"Dvigubo kampo dydis yra: "<<dv1<<"  laipsniu ,"<<dv2<<"  minuciu ,"<<dv3<<"  sekundziu!"<<endl;
    }
    void getDvKampas(){
        dv1=L+L;
        dv2=M+M;
        dv3=S+S;
        if(dv3>59){
            dv3=dv3-60;
            dv2++;
        }
        if(dv2>59){
            dv2=dv2-60;
            dv1++;
        }
    }
};
int main(){
    Kampas a;
    a.getKampas();
    a.showKampas();
    a.getDvKampas();
    a.showDvKampas();
    return 0;
}



 

Автор: Xenon 27.6.2006, 15:58
Клявас®, Ты народ не пугай литовским. Я-то понимаю, а они-то не в курсе, что kampas-Угол  smile  
PS. И почему у тебя Protected, а не private ... Не наследуется же класс smile 

Автор: Клявас® 27.6.2006, 20:57
Цитата(XenonSk @ 27.6.2006,  15:58)
Клявас®, Ты народ не пугай литовским. Я-то понимаю, а они-то не в курсе, что kampas-Угол  smile  
PS. И почему у тебя Protected, а не private ... Не наследуется же класс smile

Прикол в том, что лень было комментарии править  smile 
Насчёт наследования класса - не совсем понимаю.  smile  

Автор: MAKCim 27.6.2006, 21:07
Цитата

Насчёт наследования класса - не совсем понимаю.

Поля M, L, S ... лучше делать private-полями
тем более если класс в дальнейшем не наследуется 

Автор: Xenon 27.6.2006, 21:43
Поля и методы protected доступны потомкам класса, а private доступны только самому классу smile
Если видешь protected, сразу в голове мысль "класс наследуется" - с толку в твоем случае сбивает smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)