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

Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Конвертер текстового файла http://www.cyberforum.ru/cpp-beginners/thread439174.html
Добрый день!!! Простите за наглость... Помогите пожалуйста написать программу-конвертер текстовых файлов из dos в windows и обратно. С командной строки должно вводится направление /d или /w. Я очень мало в этом понимаю. Заранее спасибо!!!
C++ Проблема с libmms - ошибка при компиляции. Здравствуйте. Уже который день не могу разобраться с упомянутой в заголовке библиотекой, а именно: пишу примерно такой тестовый код #include <iostream> #include <libmms/mms.h> int main() { mms_t *stream; char mms_link="mms://audio.rfn.ru/radiorus/audio/710/90.asf"; stream=mms_connect(0, 0, mms_link, 128); http://www.cyberforum.ru/cpp-beginners/thread439169.html
C++ Привет. Как можна найти с даного примера умножение элементов массива с четными номерами?
#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <iostream> using namespace std; int main(int argc, _TCHAR* argv)
C++ Начало DEV С++
Здравствуйте, подскажите где ошибка? Задание Даны действительные числа х, у . Если х, у отрицательные то каждое значение заменить его модулем; если отрицательное только одно из них, то оба значения увеличить на 0.5; если оба значения не отрицательные и ни одно из них не принадлежат отрезку , то оба значения уменьшить в 10 раз; в остальных случаях х, у оставить без изменения. Решение ...
C++ Запись текста в файл http://www.cyberforum.ru/cpp-beginners/thread439138.html
Нужно составить прогрумма которая создает файл и записывает в него текст. Программа не записывает в файл текст после пробела, помогите пожалуйста. char name; char text; cout<<"vvedite put' i im9 faila:\n"; cin>>name; ofstream out(name); cout<<"vvedite text:\n"; cin>>text; out<<text; out.close();
C++ allocator std::map Подскажите вопрос, есть тестовое задание: Написать allocator для std::map, располагающий элементы контейнера последовательно в памяти. Подскажите где про это почитать и разъясните по-возможности, что это вообще такое (std::map я вкурсе что это контейнер и как с ним работать) в ступор вводит allocator подробнее

Показать сообщение отдельно
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
12.04.2013, 20:08     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
Глава 8 Упражнение №5
Кликните здесь для просмотра всего текста
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
///////////////////////////////////////////////////////////////
class Time
{
private:
    int hrs;
    int min;
    int sec;
public:
    Time(): hrs(0), min(0), sec(0) {}
    Time(int(h), int(m), int(s)): hrs(h), min(m), sec(s) {}
    void show()const
    {
        cout <<"Время: ";
        if(hrs<10){cout <<"0";}
        cout <<hrs <<":";
        if(min<10){cout <<"0";}
        cout <<min <<":";
        if(sec<10){cout <<"0";}
        cout <<sec <<endl;}
    Time operator+(Time T2)const
    {
        int h=hrs+T2.hrs;
        int m=min+T2.min;
        if(m>=60) {h++; m-=60;}
        int s=sec+T2.sec;
        if(s>=60) {m++; s-=60;}
        return Time(h,m,s);
    }
    Time operator++()
    {
        ++hrs;
        ++min;
        if(min>=60){hrs++; min-=60;}
        ++sec;
        if(sec>=60){min++; sec-=60;}
        return Time(hrs,min,sec);
    }
    Time operator--()
    {
        --hrs;
        --min;
        if(min<0){hrs--; min+=60;}
        --sec;
        if(sec<0){min--; sec+=60;}
        return Time(hrs,min,sec);
    }
    Time operator++(int)
    {
        hrs++;
        min++;
        if(min>=60){hrs++; min-=60;}
        sec++;
        if(sec>=60){min++; sec-=60;}
        return Time(hrs,min,sec);
    }
    Time operator--(int)
    {
        hrs--;
        min--;
        if(min<0){hrs--; min+=60;}
        sec--;
        if(sec<0){min--; sec+=60;}
        return Time(hrs,min,sec);
    }
 
};
////////////////////////////////////////////////////////////////
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    const Time t1(10, 15, 45);
    const Time t2(1, 58, 22);
    Time t;
    t=t1+t2;
    t.show();
    ++t;
    t.show();
    t++;
    t.show();
    --t;
    t.show();
    t--;
    t.show();
    system("pause");
    return 0;
}


Добавлено через 3 минуты
Глава 8 Упражнение №6

не понятно было про умножения значений и использование типа float - все и без этого работает
Кликните здесь для просмотра всего текста
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
///////////////////////////////////////////////////////////////
class Time
{
private:
    int hrs;
    int min;
    int sec;
public:
    Time(): hrs(0), min(0), sec(0) {}
    Time(int(h), int(m), int(s)): hrs(h), min(m), sec(s) {}
    void show()const
    {
        cout <<"Время: ";
        if(hrs<10){cout <<"0";}
        cout <<hrs <<":";
        if(min<10){cout <<"0";}
        cout <<min <<":";
        if(sec<10){cout <<"0";}
        cout <<sec <<endl;}
    Time operator+(Time T2)const
    {
        int h=hrs+T2.hrs;
        int m=min+T2.min;
        if(m>=60) {h++; m-=60;}
        int s=sec+T2.sec;
        if(s>=60) {m++; s-=60;}
        return Time(h,m,s);
    }
    Time operator-(Time T2)const
    {
        int h=hrs-T2.hrs;
        int m=min-T2.min;
        if(m<0) {h--; m+=60;}
        int s=sec-T2.sec;
        if(s<0) {m--; s+=60;}
        return Time(h,m,s);
    }
    Time operator*(Time T2)const
    {
        int h=hrs*T2.hrs;
        int m=min*T2.min;
        if(m>=60) {h+=m/60; m%=60;}
        int s=sec*T2.sec;
        if(s>=60) {m+=s/60; s%=60;}
        return Time(h,m,s);
    }
    Time operator++()
    {
        ++hrs;
        ++min;
        if(min>=60){hrs++; min-=60;}
        ++sec;
        if(sec>=60){min++; sec-=60;}
        return Time(hrs,min,sec);
    }
    Time operator--()
    {
        --hrs;
        --min;
        if(min<0){hrs--; min+=60;}
        --sec;
        if(sec<0){min--; sec+=60;}
        return Time(hrs,min,sec);
    }
    Time operator++(int)
    {
        hrs++;
        min++;
        if(min>=60){hrs++; min-=60;}
        sec++;
        if(sec>=60){min++; sec-=60;}
        return Time(hrs,min,sec);
    }
    Time operator--(int)
    {
        hrs--;
        min--;
        if(min<0){hrs--; min+=60;}
        sec--;
        if(sec<0){min--; sec+=60;}
        return Time(hrs,min,sec);
    }
 
};
////////////////////////////////////////////////////////////////
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    const Time t1(10, 15, 45);
    const Time t2(1, 58, 22);
    Time t;
    t=t1+t2;
    t.show();
    ++t;
    t.show();
    t++;
    t.show();
    --t;
    t.show();
    t--;
    t.show();
    t=t1-t2;
    t.show();
    t=t1*t2;
    t.show();
    system("pause");
    return 0;
}


Добавлено через 2 минуты
Глава 8 Упражнение №7

не перегружал операции == и != -ибо не считаю нужным, с удовольствием посмотрю на реализацию перегрузки этих операторов в данном случае)

Кликните здесь для просмотра всего текста
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/////////////////////////////////////////////////////////////////
class fraction
{
private:
    int chsl;
    int znam;
public:
    fraction(): chsl(0), znam(0) {}
    fraction(int c, int z):chsl(c), znam(z)
    {}
    static char sl;
    void get(){
        cout <<"введите числитель и знаменатель: ";
        cin >>chsl >>sl >>znam;
        if((chsl==0)||(znam==0))exit(1);//хз зачем перегружать == и !=
    }
//---------------------OPER---------------------------------------------
    fraction operator+(fraction f2)
    {
        int ch=chsl*f2.znam+znam*f2.chsl;
        int zn=znam*f2.znam;
        lowterms(ch,zn);
        return fraction(ch,zn);
    }
    fraction operator-(fraction f2)
    {
        int ch=chsl*f2.znam-znam*f2.chsl;
        int zn=znam*f2.znam;
        lowterms(ch,zn);
        return fraction(ch,zn);
    }
    fraction operator*(fraction f2)
    {
        int ch=chsl*f2.chsl;
        int zn=znam*f2.znam;
        lowterms(ch,zn);
        return fraction(ch,zn);
    }
    fraction operator/(fraction f2)
    {
        int ch=chsl*f2.znam;
        int zn=znam*f2.chsl;
        lowterms(ch,zn);
        return fraction(ch,zn);
    }
//-----------------------------------------------------------------------
//====================сокращение дробей=============================================
    void lowterms(int &chsl, int &znam)
    {
        long tnum, tden, temp, gcd;
        tnum=labs(chsl);
        tden=labs(znam);
        while(tnum!=0)
        {
            if(tnum<tden){temp=tnum; tnum=tden; tden=temp;}
            tnum-=tden;
        }
        gcd=tden;
        chsl/=gcd;
        znam/=gcd;
    }
//====================END_OF_сокращение дробей)======================================
    void show()
    {cout <<"Ответ: " <<chsl <<sl <<znam <<endl;}
};
/////////////////////////////////////////////////////////////////
char fraction::sl='/';
//---------------------------------------------------------------
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    fraction f, f1, f2;
    static char ch;
    cout <<"Чтобы ввести первую дробь, "; f1.get();
    cout <<"Введите символ операции: "; cin >>ch;
    cout <<"Чтобы ввести вторую дробь, "; f2.get();
    switch(ch)
    {
    case '+': f=f1+f2;
        break;
    case '-': f=f1-f2;
        break;
    case '*': f=f1*f2;
        break;
    case '/': f=f1/f2;
        break;
    }
    f.show();
    system("pause");
    return 0;
}


Добавлено через 53 секунды
Глава 8 Упражнение №8
Кликните здесь для просмотра всего текста
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
static const int MAX=30;
//////////////////////////////////////////////////////////////////
class bMoney
{
private:
    long double money;
public:
    bMoney()
    {money=0.0;}
    explicit bMoney(long double m):money(m)//преобразование long double в bMoney
    {}
    operator long double()//преобразование bMoney в long double
    {return money;}
    void getmoney();
    void putmoney();
    double InD(char ch[]);
    bMoney operator+(bMoney m2)
    {return bMoney(money+m2.money);}
    bMoney operator-(bMoney m2)
    {return bMoney(money-m2.money);}
    bMoney operator*(long double cet)//цена за единицу времени, затраченного на изделие
    {return bMoney(money*cet);}
    long double operator/(bMoney m2)//общая цена, деленная на цену за изделие
    {return (money/m2.money);}
    bMoney operator/(long double cet)//общая цена, деленная на количество изделий
    {return bMoney(money/cet);}
};
//////////////////////////////////////////////////////////////////
void bMoney::getmoney()
{
    char gIN[MAX], gOUT[MAX];
    cout <<"Введите число: "; 
    cin >>gIN;
    int n=0, v=0;
    for(int j=0; j<strlen(gIN); j++){
        if((gIN[j]=='$')||(gIN[j]==',')){
            ++v;
            continue;
        }
        gOUT[n++]=gIN[j];
    }
    gOUT[strlen(gIN)-v]='\0';
    money=InD(gOUT);
}
//////////////////////////////////////////////////////////////////
double bMoney::InD(char ch[])
{
    double rez, rez1;
    int t, o, tt, bb;
    rez=0.0, rez1=0.0;
    o=0;
    const int n=strlen(ch);
    const int c=48;
    for(int p=0; p<n; p++){
            if(ch[p]=='.'){
                t=p-1;
                tt=n-(p+1)-1;
                bb=n-(p+1);
                break;
            }
            else t=p, tt=n-(p+1)-1, bb=n-(p+1);
    }
    for(int j=0; j<n; j++){
        if(t>=0){
            o=ch[j]-c;
            rez+=o*pow(10,t);
            t--;
        }else if(tt>=0){
            o=ch[j+1]-c;
            rez1+=o*pow(10,tt);
            tt--;
        }
    }
    rez1/=pow(10,bb);
    rez+=rez1;
    return rez;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    char ch='a';
    do{
        bMoney m, m1, m2;
        
        long double z=0, p=0;
        m1.getmoney();
        m2.getmoney();
        cout <<"Введите число с плавающей точкой: "; cin >>z;
        m=m1+m2;
        cout <<"Сумма " <<m1 <<" и " <<m2 <<" равна: " <<m <<endl;
        m=m1-m2;
        cout <<"Разность " <<m1 <<" и " <<m2 <<" равна: " <<m <<endl;
        m=m1*z;
        cout <<"Цена за единицу времени, затраченного на изделие (" <<m1 <<"*" <<z <<"): " <<m <<endl;
        p=m1/m2;
        cout <<"Общая цена, деленная на цену за изделие (" <<m1 <<"/" <<m2 <<"): " <<p <<endl;
        m=m1/z;
        cout <<"Общая цена, деленная на количество изделий (" <<m1 <<"/" <<z <<"): " <<m <<endl;
        cout <<"Еще раз?(y/n)";
        cin >>ch;
    }while(ch!='n');
    return 0;
}


Добавлено через 44 секунды
Глава 8 Упражнение №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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
const int LIMIT=100;
//////////////////////////////////////////////////////////////////
class safearray
{
private:
    int min;
    int max;
    int arr[LIMIT];
public:
    safearray()
    {min=0, max=0;}
    safearray(int mn, int mx):min(mn), max(mx)
    {}
    void getin(){
        cout <<"Введите min элемент массива: ";
        cin >>min;
        cout <<"Введите max элемент массива: ";
        cin >>max;
        int puk=max-min;
        if(puk>100)exit(1);
        //задаем значения элементов     
        for(int j=0; j<=puk; j++)
        arr[j]=j*10;//используем ф-ию слева от знака
        //показываем элементы
        for(int j=0; j<=puk; j++){
        int temp=arr[j];//используем ф-ию справа от знака
        cout <<"Элемент " <<j+min <<" равен " <<temp <<endl;
        }
    }
    //функция возвращает ссылку
    int& operator[](int n)
    {
        if(n<min||n>=max){
            cout <<"Ошибочный индекс!";
            exit(1);
        }
        return arr[n];
    }
};
/////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    safearray sa;
    sa.getin();
    system("pause");
    return 0;
}


Добавлено через 1 минуту
Глава 8 Упражнение №10
я не фанат математики- формулы перевода на вики нарыл, так что если что не так, прошу меня не винить, но все вроде нормально работает)

Кликните здесь для просмотра всего текста
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
const double Pi = 3.14159265;
 
//////////////////////////////////////////////////////////////////
class Polar
{
private:
    double radial_koord;
    double uglov_koord;
public:
    Polar()
    {radial_koord=0, uglov_koord=0;}
    Polar(double r, double u):radial_koord(r), uglov_koord(u)
    {}
    Polar operator+(Polar po2)
    {
        double x=radial_koord*cos(uglov_koord);//получаем декартовые X
        double y=radial_koord*sin(uglov_koord);//и Y для переменной вызвавшей операцию
        double x_po2=po2.radial_koord*cos(po2.uglov_koord);//и для
        double y_po2=po2.radial_koord*sin(po2.uglov_koord);//аргумента
        x+=x_po2;
        y+=y_po2;
        radial_koord=pow((x*x+y*y),0.5);//получение радиальной координаты
        if(x==0){//получение уголвой координаты в интервале [0,2Pi) [url]http://upload.wikimedia.org/math/2/8/3/283fba64830216114c262ae19b41d9b6.png[/url]
            if(y<0)uglov_koord=(3*Pi)/2;
            else if(y>0)uglov_koord=Pi/2;
            else if(y==0)uglov_koord=0;
        }else{
            uglov_koord=atan(y/x);
            if(x>0 && y<0)uglov_koord+=2*Pi;
            if(x<0)uglov_koord+=Pi;
        }
        return Polar(radial_koord, uglov_koord);
    }
    void show()
    {
        cout <<"Радиальная координата равна: " <<radial_koord;
        cout <<"\nУгловая координата равна: " <<uglov_koord <<endl;
    }
};
////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    Polar p, p1(10,15), p2(5,12);
    p=p1+p2;
    p.show();
    system("pause");
    return 0;
}
 
Текущее время: 18:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru