Форум программистов, компьютерный форум 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() { ... 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 С++
Здравствуйте, подскажите где ошибка? Задание Даны действительные числа х, у . Если х, у отрицательные то каждое значение заменить его модулем; если отрицательное только одно из них, то оба...
C++ Запись текста в файл http://www.cyberforum.ru/cpp-beginners/thread439138.html
Нужно составить прогрумма которая создает файл и записывает в него текст. Программа не записывает в файл текст после пробела, помогите пожалуйста. char name; char text; cout<<"vvedite put' i im9...
C++ allocator std::map Подскажите вопрос, есть тестовое задание: Написать allocator для std::map, располагающий элементы контейнера последовательно в памяти. Подскажите где про это почитать и разъясните... подробнее

Показать сообщение отдельно
Ferrari F1
594 / 485 / 99
Регистрация: 27.01.2015
Сообщений: 2,876
Записей в блоге: 1
Завершенные тесты: 1
11.05.2015, 12:50
Глава 14


Номер 1

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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
template <class atype>
double gcd(atype* array, int size)
{
    double sum(0);
    for (int i(0); i < size; i++)
        sum += array[i];
    return sum / size;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    double array1[] = { 1, 2, 3, 4 };
    long array2[] = { 1, 2, 3, 4 };
    short array3[] = { 1, 2, 3, 4 };
    char array4[] = { 1, 2, 3, 4 };
    cout << gcd(array1, 4) << endl
        << gcd(array2, 4) << endl
        << gcd(array3, 4) << endl
        << gcd(array4, 4) << endl;
    system("pause");
    return 0;
}


Номер 2

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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
template <class type>
class queue
{
    enum { MAX = 10 };
    type st[MAX];
    int head, tail;
public:
    queue() : head(0), tail(0)
    {}
    void put(type var);
    void get();
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    queue<double> s1;
    s1.put(11.);
    s1.put(22.);
    s1.put(33.);
    s1.put(44.);
    s1.put(55.);
    s1.put(66.);
    cout.setf(ios::showpoint);
    cout << "1: "; s1.get();
    cout << "2: "; s1.get();
    cout << "3: "; s1.get();
    cout << "4: "; s1.get();
    cout << "5: "; s1.get();
    cout << "6: "; s1.get();
    system("pause");
    return 0;
}
 
template <class type>
void queue<type>::get()
{
    if (!tail)
        cout << "Очередь пуста." << endl;
    else
    {
        cout << st[head] << endl;
        for (int i(0); i <= tail; i++)
            st[i] = st[i + 1];
        tail--;
    }
}
 
template <class type>
void queue<type>::put(type var)
{
    if (tail == MAX)
        cout << "\nОчередь переполнена." << endl;
    else
    {
        st[tail++] = var;
    }
}


Номер 3

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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
template <class type>
class queue
{
    enum { MAX = 10 };
    type st[MAX];
    int head, tail;
public:
    class flow
    {};
    queue() : head(0), tail(0)
    {}
    void put(type var);
    void get();
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char ch;
    queue<double> s1;
    do
    {
        try
        {
            double temp;
            cout << "Положить(1) или взять(2) из очереди элемент? ";
            cin >> ch;
            switch (ch)
            {
            case '1':
                cout << "Введите элемент для вставки: ";
                cin >> temp;
                s1.put(temp);
                break;
            case '2':
                s1.get();
                break;
            default:
                cout << "Введена неверная цифра. ";
            }
            cout << "Повторить ввод? (1 - да, 0 - нет.) ";
            cin >> ch;
            system("cls");
        }
        catch (queue<double>::flow)
        {
            system("cls");
            cout << "Очередь пуста или переполнена." << endl;
        }
    } while (ch != '0');
    system("pause");
    return 0;
}
 
template <class type>
void queue<type>::get()
{
    if (!tail)
        throw flow();
    else
    {
        cout << st[head] << endl;
        for (int i(0); i <= tail; i++)
            st[i] = st[i + 1];
        tail--;
    }
}
 
template <class type>
void queue<type>::put(type var)
{
    if (tail == MAX)
        throw flow();
    else
    {
        st[tail++] = var;
    }
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
template <class atype>
void swaps(atype& a1, atype& a2)
{
    atype temp(a1);
    a1 = a2;
    a2 = temp;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    double a(1), b(2);
    cout << a << ' ' << b << endl;
    swaps(a, b);
    cout << a << ' ' << b << endl;
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
template <class atype, class btype>
atype amax(atype* arr, btype size)
{
    atype armax(0);
    for (btype i(0); i < size; i++)
        armax = arr[i] > armax ? arr[i] : armax;
    return armax;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    double array[] = { 1, 3, 5, 7, 9, 0, 2, 5, 9 };
    cout << amax(array, 9) << endl;
    system("pause");
    return 0;
}


Номер 6

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <process.h>
using namespace std;
 
const int LIMIT = 100;
 
template <class type>
class safearray
{
    type arr[LIMIT];
public:
    type& operator[](int n)
    {
        if (n < 0 || n >= LIMIT)
        {
            cout << "\nОшибочный индекс!"; exit(1);
        }
        return arr[n];
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    safearray<double> sa1;
    cout.setf(ios::showpoint);
    for (int j = 0; j < LIMIT; j++)
        sa1[j] = j * 10;
    for (int j = 0; j < LIMIT; j++)
    {
        double temp = sa1[j];
        cout << "Элемент " << j << " равен " << temp << endl;
    }
    cout.unsetf(ios::showpoint);
    safearray<int> sa2;
    for (int j = 0; j < LIMIT; j++)
        sa2[j] = j * 10;
    for (int j = 0; j < LIMIT; j++)
    {
        int temp = sa2[j];
        cout << "Элемент " << j << " равен " << temp << endl;
    }
    system("pause");
    return 0;
}


Номер 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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
template <class type>
class fraction
{
    type a, b;
public:
    fraction() : a(0), b(1)
    {}
    fraction(type c, type d) : a(c), b(d)
    {}
    fraction operator+(const fraction& t2) const
    {
        fraction tmp;
        tmp.a = a * t2.b + b * t2.a;
        tmp.b = b * t2.b;
        return tmp;
    }
 
    fraction operator-(const fraction& t2)
    {
        fraction tmp;
        tmp.a = a * t2.b - b * t2.a;
        tmp.b = b * t2.b;
        return tmp;
    }
 
    fraction operator*(const fraction& t2)
    {
        fraction tmp;
        tmp.a = a * t2.a;
        tmp.b = b * t2.b;
        return tmp;
    }
 
    fraction operator/(const fraction& t2)
    {
        fraction tmp;
        tmp.a = a * t2.b;
        tmp.b = b * t2.a;
        return tmp;
    }
 
    void lowterms(void)
    {
        type A(a), B(b), C;
        while (B)
        {
            C = A % B;
            A = B;
            B = C;
        }
        a /= abs(A);
        b /= abs(A);
    }
 
    void set()
    {
        cin >> a >> b;
    }
 
    void show() const
    {
        cout << a << '/' << b << endl;
    }
 
    bool operator==(const fraction& t1) const
    {
        return a == t1.a || b == t1.b ? 1 : 0;
    }
 
    bool operator!=(const fraction& t1) const
    {
        return a != t1.a && b != t1.b ? 1 : 0;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch = getche())
    {
        if (ch != 'z') cout << '\n' << endl;
        fraction<short> t1, t2, t3, zero;
        cout << "Введите первую дробь:" << endl;
        t1.set();
        cout << "Введите вторую дробь:" << endl;
        t2.set();
        if (t1 == zero)
        {
            cout << "Неверная дробь!" << endl;
            ch = 0;
        }
        else
        {
            cout << "Введите операцию:" << endl;
            cin >> ch;
        }
        switch (ch)
        {
        case '+':
            t3 = t1 + t2; t3.lowterms();
            cout << "Результат равен:\n"; t3.show();
            break;
        case '-':
            t3 = t1 - t2; t3.lowterms();
            cout << "Результат равен:\n"; t3.show();
            break;
        case '*':
            t3 = t1 * t2; t3.lowterms();
            cout << "Результат равен:\n"; t3.show();
            break;
        case '/':
            t3 = t1 / t2; t3.lowterms();
            cout << "Результат равен:\n"; t3.show();
            break;
        default: cout << "Ошибка!" << endl;
        }
        cout << "Повторить? (1 - да. 0 - нет.) ";
    }
    cout << '\n' << endl;
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
const int LIMIT = 10;
 
template <class type>
class safearray
{
    type arr[LIMIT];
public:
    class flow
    {};
    type& operator[](int n)
    {
        if (n < 0 || n >= LIMIT) throw flow();
        return arr[n];
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    safearray<double> sa1;
    cout.setf(ios::showpoint);
    try
    {
        for (int j = 0; j < 10; j++)
            sa1[j] = j * 10;
        for (int j = 0; j < 10; j++)
        {
            double temp = sa1[j];
            cout << "Элемент " << j << " равен " << temp << endl;
        }
    }
    catch (safearray<double>::flow)
    {
        cout << "Возникла ошибка!" << endl;
    }
    cout.unsetf(ios::showpoint);
    cout.put('\n');
    safearray<int> sa2;
    try
    {
        for (int j = 0; j < 10; j++)
            sa2[j] = j * 10;
        for (int j = 0; j < 10; j++)
        {
            int temp = sa2[j];
            cout << "Элемент " << j << " равен " << temp << endl;
        }
    }
    catch (safearray<int>::flow)
    {
        cout << "Возникла ошибка!" << endl;
    }
    cout.put('\n');
    system("pause");
    return 0;
}


Номер 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
const int LIMIT = 9;
 
template <class type>
class safearray
{
    type arr[LIMIT];
public:
    class flow
    {
    public:
        long pos;
        flow(long p) : pos(p)
        {}
    };
    type& operator[](int n)
    {
        if (n < 0 || n >= LIMIT) throw flow(n);
        return arr[n];
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    safearray<double> sa1;
    cout.setf(ios::showpoint);
    try
    {
        for (int j = 0; j < 10; j++)
            sa1[j] = j * 10;
        for (int j = 0; j < 10; j++)
        {
            double temp = sa1[j];
            cout << "Элемент " << j << " равен " << temp << endl;
        }
    }
    catch (safearray<double>::flow f)
    {
        cout << "Возникла ошибка!" << endl;
        cout << "Виновник - элемент с индексом: " << f.pos << endl;
    }
    cout.unsetf(ios::showpoint);
    cout.put('\n');
    safearray<int> sa2;
    try
    {
        for (int j = 0; j < 10; j++)
            sa2[j] = j * 10;
        for (int j = 0; j < 10; j++)
        {
            int temp = sa2[j];
            cout << "Элемент " << j << " равен " << temp << endl;
        }
    }
    catch (safearray<int>::flow g)
    {
        cout << "Возникла ошибка!" << endl;
        cout << "Виновник - элемент с индексом: " << g.pos << endl;
    }
    cout.put('\n');
    system("pause");
    return 0;
}


Номер 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
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
110
111
112
#include <iostream>
#include <iomanip>
#include <string>
#include <windows.h>
#include <cstdlib>
using namespace std;
 
int isFeet(string);
 
class Distance
{
private:
    int feet;
    float inches;
public:
    class exp
    {
    public:
        string error;
        exp(string e) : error(e)
        {}
    };
    Distance()
    {
        feet = 0; inches = 0.0;
    }
    Distance(int ft, float in)
    {
        if (in >= 12)
            throw exp("Дюймы должны быть между 0.0 и 11.99\n");
        feet = ft; inches = in;
    }
    void showdist()
    {
        cout << feet << "\'-" << inches << '\"';
    }
    void getdist();
};
 
void Distance::getdist()
{
    string instr;
    while (true)
    {
        cout << "\n\nВведите футы: ";
        cin.unsetf(ios::skipws);
        cin >> instr;
        if (isFeet(instr))
        {
            cin.ignore(10, '\n');
            feet = atoi(instr.c_str());
            break;
        }
        cin.ignore(10, '\n');
        throw exp("Футы должны быть целыми < 1000\n");
    }
    while (true)
    {
        cout << "Введите дюймы: ";
        cin.unsetf(ios::skipws);
        cin >> inches;
        if (inches >= 12.0 || inches < 0.0)
        {
            throw exp("Дюймы должны быть между 0.0 и 11.99\n");
        }
        if (cin.good())
        {
            cin.ignore(10, '\n');
            break;
        }
    }
}
 
int isFeet(string str)
{
    int slen = str.size();
    if (slen == 0 || slen > 5)
        return 0;
    for (int j = 0; j < slen; j++)
    if ((str[j] < '0' || str[j] > '9') && str[j] != '-')
        return 0;
    double n = atof(str.c_str());
    if (n <-999.0 || n > 999.0)
        return 0;
    return 1;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Distance d;
    char ans;
    do
    {
        try
        {
            d.getdist();
            cout << "\nРасстояние = ";
            d.showdist();
        }
        catch (Distance::exp str)
        {
            cout << str.error << endl;
        }
        cout << "\nЕще раз (y/n)? ";
        cin >> ans;
        cin.ignore(10, '\n');
    } while (ans != 'n');
    system("pause");
    return 0;
}


Номер 11

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
#include <iostream>
#include <iomanip>
#include <string>
#include <windows.h>
#include <cstdlib>
using namespace std;
 
class String
{
private:
    enum { SZ = 80 };
    char str[SZ];
public:
    class flow
    {};
    class con
    {};
    String()
    {
        strcpy(str, "");
    }
    String(char s[])
    {
        if (strlen(s) > 256) throw con();
        strcpy(str, s);
    }
    void display() const
    {
        cout << str;
    }
    String operator+(String ss) const
    {
        String temp;
        if (strlen(str) + strlen(ss.str) < SZ)
        {
            strcpy(temp.str, str);
            strcat(temp.str, ss.str);
        }
        else
        {
            throw flow();
        }
        return temp;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    try
    {
        String s1 = "\nС Рождеством! ";
        String s2 = "С Новым годом!";
        String s3;
        s1.display();
        s2.display();
        s3.display();
        s3 = s1 + s2;
        s3.display();
    }
    catch (String::flow)
    {
        cout << "Длинная инициализирующая строка!" << endl;
    }
    catch (String::con)
    {
        cout << "Переполнение строкового буфера!" << endl;
    }
    cout << endl;
    system("pause");
    return 0;
}


Номер 12

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
#include <iostream>
#include <fstream>
#include <iomanip>
#include <windows.h>
#include <process.h>
using namespace std;
 
const int MAX = 10;
int buff[MAX];
 
class dofile
{
    ofstream os;
    ifstream is;
    char* str;
public:
    class err
    {};
    dofile(char* s) : str(s)
    {}
    void write()
    {
        os.open(str, ios::trunc | ios::binary);
        if (!os) throw err();
        os.seekp(0, ios::beg);
        cout << "Идет запись...\n";
        os.write((char*)(buff), MAX * sizeof(int));
        if (!os) throw err();
        os.close();
    }
    void read()
    {
        is.open(str, ios::binary);
        if (!is) throw err();
        is.seekg(0, ios::beg);
        cout << "Идет чтение...\n";
        is.read((char*)(buff), MAX * sizeof(int));
        if (!is) throw err();
        is.close();
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (int j = 0; j < MAX; j++)
        buff[j] = j;
    try
    {
        dofile f1("data.txt");
        f1.write();
        f1.read();
    }
    catch (dofile::err)
    {
        cout << "Ошибка!" << endl;
    }
    for (int j = 0; j < MAX; j++)
    {
        cout << buff[j];
        cout.put(' ');
    }
    cout.put('\n');
    system("pause");
    return 0;
}


1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru