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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 621, средняя оценка - 4.99
Kimel
15 / 15 / 0
Регистрация: 01.02.2012
Сообщений: 182
01.02.2012, 17:47     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #1
Хотя я и начинающий с++-шник. Хочу помочь другим людям. Здесь я буду выкладывать всё что мне удалось решить. В моих решениях будет много хедеров, делал я это в Dev C++. Ос Win 7 64 bit.

Начнём со второй главы:
Упражнение 1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
 
using namespace std;
 
int main()
{
   setlocale(0,"Rus");
   float gallons, cufeet;
 
   cout << "Введите количество галоннов: \n";
   cin >> gallons;
   cufeet = gallons / 7.481;
   cout << "Еквивалент в футах = " << cufeet << endl;
    
   return 0;
}

Упражнение 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main()
{
   setlocale(0,"Rus");
   
    cout << 1990 << setw(8) << 135 << endl
           << 1991 << setw(8) << 7290 << endl 
           << 1992 << setw(8) << 11300 << endl
           << 1993 << setw(8) << 16200 << endl;
  
   return 0;
}

Упражнение 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    int var = 10;
 
    cout << var << endl;      
    var *= 2;                 
    cout << var-- << endl;    
    cout << var << endl;      
    return 0;
}

Упражнение 4
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    cout<<"\nУ лукоморья дуб срубили\nКота на мясо порубили \nА по неведанным дорожкам\nШагали черти в босоножках\n"; 
    return 0;
}

Упражнение 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream> 
#include <ctype.h>
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    char ch;
    cin >> ch;
    cout << islower(ch);  // При вводе строчной буквы будет 2 при прописной 0. Но есть нюанс, поддерживаються только англ буквы 
    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
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
 
    float a,b,c,d,f;
    cout << "Введите кол-во доларов"<<endl;
    cin >> f;
    b=f/1.487;
    c=f/0.172;
    a=f/0.584;
    d=f/0.00955;
    cout << f <<"доларов = "<< b<<" фунтов стерлинга"<<endl;
    cout << f <<"доларов = "<< c<<" франков"<<endl;
    cout << f <<"доларов = "<< a<<" немецких марок"<<endl;
    cout << f <<"доларов = "<< d<<" японских йен"<<endl;
    return 0;
}

Упражнение 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    double f,c;
    cout << "Введите количество градусов по Цельсию"<<endl;
    cin >> c;
    f=c*1.8+32;
    cout <<setprecision(3)<< f << " градусов по Фаренгейту "<< endl; // Регуляция кол-во символов после запятой
    return 0;
}

Упражнение 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    long pop1=2425785, pop2=47, pop3=9761;       
 
    cout << setfill('.') <<setw(8) << "LOCATION" << setw(12) // Обратите внимание на одинарные кавычки
           << "POPULATION" << endl
           <<setw(8) << "Portcity" << setw(12) << pop1 << endl
           << setw(8) << "Hightown" << setw(12) << pop2 << endl
           << setw(8) << "Lowville" << setw(12) << pop3 << endl;
    return 0;
}

Упражнение 9

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    char dummychar;
    double a,b,c,d,e,f;
    cout << "Введите а и b"<< endl;
    cin >>a>>dummychar>>b;
    cout << "Введите c и d"<<endl;
    cin >>c>>dummychar>>d;
    cout <<(b*c)+(d*a)<<dummychar<<(b*d)<<endl;
 
    return 0;
}

Упражнение 10 (Намучился с этой задачей)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    float a,b,c,f;
    cout << "Введите количество фунтов"<<endl;
    cin >> a;
    cout << "Введите количество шиллингов"<<endl;
    cin >> b;
    cout << "Введите количество пенсов"<<endl;
    cin >> c;
    f = a+(b+c/12)/20;
    cout << "Количество фунтов = " << f << endl;
    return 0;
}

Упражнение 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main() 
{
     setlocale(0,"Rus");
     cout << setiosflags(ios::left) <<setw(15) << "Фамилия"<< setw(15)<< "Имя"<<setw(15) << "Адресс"<<setw(15)<< "Город"<<endl
            <<setw(15)<< "Иванов"<<setw(15)<<"Петя"<<setw(15)<<"Кленовая 16"<<setw(10)<<"Москва"<<endl
            <<setw(15)<< "Иванов"<<setw(15)<<"Петя"<<setw(15)<<"Кленовая 16"<<setw(10)<<"Москва"<<endl
            <<setw(15)<< "Иванов"<<setw(15)<<"Петя"<<setw(15)<<"Кленовая 16"<<setw(10)<<"Москва"<<endl;
    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
#include <iostream> 
 
using namespace std;
 
int main() 
{
setlocale(0,"Rus");
float a,b,z;
int c,k;
cout << "Введите кол-во футов " << endl;
cin >> a;
c = static_cast<int>(a);
b = a - c;
b *= 20;
k = static_cast<int>(b);
z = b - k;
z = z*12;
z = static_cast<int>(z);
k = static_cast<int>(k);
cout << c <<"."<< k <<"."<< z << endl;
return 0;
}
Это конец второй главы, третюю сделаю позже если будет нужна
 Комментарий модератора 
Пост обновлен по просьбе ТС
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2012, 17:47     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
Посмотрите здесь:

Объектно-ориентированное программирование C++
C++ Объектно-ориентированное программирование
C++ Объектно ориентированное программирование
Ищу ответы на задания из книги Лафоре Р. "Объектно-ориентированное программирование в С++" 4 издание. C++
C++ Объектно-ориентированное программирование C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dicros
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 63
18.01.2015, 06:16     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #161
Цитата Сообщение от Recrut_rf Посмотреть сообщение
поменять кое какие цифры. Вот правильный вариант:
Ты прав как-то не обратил на этот ньюанс внимание.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Иван89
2 / 2 / 2
Регистрация: 07.02.2014
Сообщений: 47
23.01.2015, 13:46     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #162
Доброго времени суток. В программировании только начал разбираться. Попробовал решить 12 задачу из 2 главы и вот что получилось. Правильно ли я все сделал?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    float sh, p, f;
    float newp;
    cout << "Введите число десятичных фунтов: ";
    cin >> newp;
    f = static_cast<int>(newp);
    sh = static_cast<int>((newp*240-f*240)/12);
    p = static_cast<int>((newp * 240 - f * 240)- sh*12);
    cout << "Эквивалентная сумма в старой форме записи: " << "J"<< f << "." << sh << "." << p << endl;
    system("pause");
    return 0;
}
dicros
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 63
23.01.2015, 15:28     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #163
Цитата Сообщение от Иван89 Посмотреть сообщение
Доброго времени суток. В программировании только начал разбираться. Попробовал решить 12 задачу из 2 главы и вот что получилось. Правильно ли я все сделал?
Я сам тока начинаю поэтому не факт что я буду прав. Но на мой взгляд как это понял я то вот эти строчки никчему
static_cast<int>(newp)

т.е предположим что в переменной news хранится число 10.23 (оно имеет тип float)
затем вы его явно преобразовываете в int, а это значит откусываете остаток от целой части и у вас получается число 10. Затем вы это же число 10 переводите обратно в тип float, значит у вас уже туда попадет целое число без остатка.

P.S повторюсь это лишь мое мнение, возможно я и не прав(сам еще только учусь)))
Иван89
2 / 2 / 2
Регистрация: 07.02.2014
Сообщений: 47
23.01.2015, 18:26     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #164
тут newp остается без изменений. изменяются только переменные p,f,sh. Хотя я пробовал их изначально задавать в типе int, и все так же работало. И можно было обойтись без этих строчек static_cast<int>(newp)
Recrut_rf
6 / 6 / 0
Регистрация: 14.10.2014
Сообщений: 44
Завершенные тесты: 2
23.01.2015, 21:36     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #165
Цитата Сообщение от dicros Посмотреть сообщение
вот эти строчки никчему
static_cast<int>(newp)
Задание подразумевает оттачивание навыков явного преобразования типов, что в нём кстати и изложено. Поэтому этот оператор нужен. И да - я сам тоже начинающий.
dicros
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 63
23.01.2015, 22:40     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #166
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Задание подразумевает оттачивание навыков явного преобразования типов, что в нём кстати и изложено. Поэтому этот оператор нужен
Согласен но я имел ввиду другое когда писал что в нем нет смысла. Обрати внимание на пример из учебника и пример приведенный тут, они разные...

В учебнике
Код
float decpounds;
int pounds;

pounds=static_cast<int>(decpounds)
В приведенном примере:
Код
float sh;
float newp;

newp=static_cast<int>(sh);
В учебнике ладно они там тип float явно преобразуют в тип int и присваивают его переменной (также типа int)

Но в приведенном примере тип float явно преобразуется в тип int а затем снова преобразуется в тип float но уже не явно(т.к у float приоритет выше чем у int). Поэтому я и написал что в этом нет смысла.
Иван89
2 / 2 / 2
Регистрация: 07.02.2014
Сообщений: 47
24.01.2015, 10:12     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #167
Глава 3 задание 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
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    float c, f, e;
    cout << "Нажмите 1 для перевода шкалы Цельсия в шкалу Фаренгейта\n2 для перевода шкалы Фаренгейта в шкалу Цельсия: ";
    cin >> e;
    if (e == 1)
    {
        cout << "Введите температуру по Цельсию: ";
        cin >> c;
        f = c*9 / 5 + 32;
        cout << "Значение по Фаренгейту: " << f << endl;
    }
    else
    {
        cout << "Введите температуру по Фаренгейту: ";
        cin >> f;
        c = (5*f-160)/9;
        cout << "Значение по Цельсию: " << c << endl;
    }
    system("pause");
    return 0;
}
Recrut_rf
6 / 6 / 0
Регистрация: 14.10.2014
Сообщений: 44
Завершенные тесты: 2
24.01.2015, 18:00     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #168
Цитата Сообщение от dicros Посмотреть сообщение
Но в приведенном примере тип float явно преобразуется в тип int а затем снова преобразуется в тип float но уже не явно(т.к у float приоритет выше чем у int). Поэтому я и написал что в этом нет смысла.
В общем я протестил его прогу со static_cast и без. Получил следующие результаты:

Данный вариант работает вроде как правильно -
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
 setlocale(LC_ALL, "rus");
 float sh, p, f;
 float newp;
 cout << "Введите число десятичных фунтов: ";
 cin >> newp;
 f = static_cast<int>(newp);
 sh = static_cast<int>((newp*240-f*240)/12);
 p = static_cast<int>((newp * 240 - f * 240)- sh*12);
 cout << "Эквивалентная сумма в старой форме записи: " << "J"<< f << "." << sh << "." << p << endl;
 system("pause");
 return 0;
}[/quote]


А если убрать static_cast - то результат будет уже неверным. У него строчка
Цитата Сообщение от Иван89 Посмотреть сообщение
float sh, p, f;
всё портит. Т. е. получается, что в его коде все числа изначально вещественные. И результат выполнения проги тоже будет вещественное число. Вот его код без явного преобразования -
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    float sh, p, f;
    float newp;
    cout << "Ââåäèòå ÷èñëî äåñÿòè÷Г*ûõ ГґГіГ*òîâ: ";
    cin >> newp;
    f = newp;
    sh =(newp*240-f*240)/12;
    p = (newp * 240 - f * 240)- sh*12;
    cout << "ГќГЄГўГЁГўГ*ëåГ*ГІГ*Г*Гї ñóììГ* Гў Г±ГІГ*ðîé ôîðìå Г§Г*ГЇГЁГ±ГЁ: " << "J"<< f << "." << sh << "." << p << endl;
    system("pause");
    return 0;
}


Я тупо взял - "убрал лишнее" и посмотрел что будет. Иван89 собственно сам мог бы так поступить. Я например частенько так делаю. К тому же здесь уже вроде как представлены возможные решения всех задач (правда могут быть мелкие косяки но куда ж без них). И да Иван89 задание нужно читать внимательнее там ведь есть пример операторов.

А вот если бы он использовал тип int sh, p, f; вместо float sh, p, f; тогда да - static_cast не нужен только ответ опять будет неверен.

Добавлено через 13 минут
Цитата Сообщение от Recrut_rf Посмотреть сообщение
А вот если бы он использовал тип int sh, p, f; вместо float sh, p, f; тогда да - static_cast не нужен только ответ опять будет неверен.
Ошибся - всё там верно
Окончательный исправленный вариант:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    int sh, p, f;  // вместо float sh, p, f
    float newp;
    cout << "Введите число десятичных фунтов: ";
    cin >> newp;
    f = newp;
    sh =(newp*240-f*240)/12;    
    p = (newp * 240 - f * 240)- sh*12;
    cout << "Эквивалентная сумма в старой форме записи: " << "J"<< f << "." << sh << "." << p << endl;
    system("pause");
    return 0;
}


Добавлено через 20 минут
Цитата Сообщение от Иван89 Посмотреть сообщение
Глава 3 задание 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
#include <iostream>
#include <locale> // для setlocale()
#include <iomanip>
using namespace std;
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
int main()
 {
    setlocale (LC_ALL, "rus");
    float t;
    char ch;
    cout << "Нажмите 1 для перевода шкалы Цельсия в шкалу Фаренгейта.\n"
    << "2 для перевода шкалы Фаренгейта в шкалу Цельсия\n";
    cin >> ch;
    if (ch=='1')
    {
        cout << "Введите температуру по Цельсию:\n";
        cin >> t;
        cout << "Температура по Фаренгейту равна:" << (9.0/5.0)*t + 32.0;
    }
    if (ch=='2')
    {
        cout << "Введите температуру по Фаренгейту:\n";
        cin >> t;
        cout <<"Температура по Цельсию равна:" << 5.0/9.0*(t - 32.0);
        
    }
    system("pause");
    return 0;
}
Иван89
2 / 2 / 2
Регистрация: 07.02.2014
Сообщений: 47
25.01.2015, 17:13     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #169
Recrut_rf, сорри)) я забыл приписать что менял float на int если без преобразования типов). В этом случае у меня все работало

Добавлено через 1 минуту
Цитата Сообщение от Recrut_rf Посмотреть сообщение
я использовал только две переменные:
А обязательно переменной ch ставить тип char?

Добавлено через 3 часа 45 минут
Глава 3 задание 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
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    setlocale (LC_ALL, "rus");
    float a, b;
    char op;
    do
    {
        cout << "Введите первый операнд, операцию и второй операнд: ";
        cin >> a >> op >> b;
        switch (op)
        {
        case '+':
            cout << "Результат равен: " << a + b << endl;
            break;
        case '-':
            cout << "Результат равен: " << a - b << endl;
            break;
        case '*':
            cout << "Результат равен: " << a*b << endl;
            break;
        case '/':
            cout << "Результат равен: " << a / b << endl;
            break;
        default:
            break;
        }
        cout << "Выполнить ещё одну операцию (y/n)? ";
        cin >> op;
    } while (op != 'n');
    system("pause");
    return 0;
}
Recrut_rf
6 / 6 / 0
Регистрация: 14.10.2014
Сообщений: 44
Завершенные тесты: 2
25.01.2015, 18:05     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #170
Цитата Сообщение от Иван89 Посмотреть сообщение
А обязательно переменной ch ставить тип char?
Да нет, можно написать например int ch. Только тогда 1 и 2 нужно писать без ' ' (
Цитата Сообщение от Recrut_rf Посмотреть сообщение
(ch==1)
)
Можно и другие цифровые типы использовать float там или double, long double и т. д. Но если по "умному" писать код - то я думаю - в данном случае нужно использовать тип char или unsigned char. Объяснение простое - банальная экономия памяти. Для char требуется всего 1 байт. Для остальных больше.
Иван89
2 / 2 / 2
Регистрация: 07.02.2014
Сообщений: 47
25.01.2015, 19:30     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #171
3 глава 6 задание:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    int a=1;
    while (a != 0)
    {
        cout << "Введите число: ";
        cin >> a;
        if (a == 0)
            break;
        else
        for (int b = a - 1; b >= 1; b--)
            a = a*b;
        cout << "Факториал равен: " << a << endl;
    }
    system("pause");
    return 0;
}
Добавлено через 4 минуты
Цитата Сообщение от Иван89 Посмотреть сообщение
int a=1;
Числа только здесь будут не большие

Добавлено через 25 минут
Глава 3 задание 7. Как то так. Немного исправил для русского языка. Правда только до 20 лет работает)))
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
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    float vkl, prc;
    int year;
    cout << "Введите начальный вклад: ";
    cin >> vkl;
    cout << "Введите число лет: ";
    cin >> year;
    cout << "Введите процентную ставку: ";
    cin >> prc;
    for (int x = 1; x <= year; x++)
        {
            vkl = (vkl / 100 * prc) + vkl;
        }
    if (year == 1)
        cout << "Через " << year << " год вы получите " << vkl << " доллара." << endl;
    else 
    if (year==2 || year==3 || year==4)
        cout << "Через " << year << " года вы получите " << vkl << " доллара." << endl;
    else
    if (year>=5)
        cout << "Через " << year << " лет вы получите " << vkl << " доллара." << endl;
    system("pause");
    return 0;
}
Ferrari F1
Нарушитель
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
27.01.2015, 18:45     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #172
Сообщение будет редактироваться по мере решения задач.

Глава 2

Номер 1

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    float temp;
    cout << "Введите число галлонов:" << endl;
    cin >> temp;
    cout << "Аналогичный объем в куб. футах равен:\n"
         << temp / 7.481 << endl;
    system("pause");
    return 0;
}


Номер 2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << 1990 << setw(8) << 135 << '\n'
         << 1991 << setw(8) << 7290 << '\n'
         << 1992 << setw(8) << 11300 << '\n'
         << 1993 << setw(8) << 16200 << endl;
    system("pause");
    return 0;
}


Номер 3

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    unsigned __int16 temp(10);
    cout << temp << endl;
    temp *= 2;
    cout << temp << endl;
    cout << --temp << endl;
    system("pause");
    return 0;
}


Номер 4

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Муха села на варенье.\nВот и все стихотворение." << endl;
    system("pause");
    return 0;
}


Номер 5

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите символ: ";
    char ch; cin >> ch;
    cout << islower(ch) << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    float temp;
    cout << "Введите сумму в \x24: ";
    cin >> temp;
    cout << "Аналогичная сумма в фунтах стерлингов: " << temp / 1.487 << endl
         << "Аналогичная сумма во франках: " << temp * 0.172 << endl
         << "Аналогичная сумма в немецких марках: " << temp * 0.584 << endl
         << "Аналогичная сумма в японских йенах: " << temp * 0.00955 << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите температуру в градусах по Цельсию:" << endl;
    float temp;
    cin >> temp;
    cout << "Аналогичная температура в градусах по Фаренгейту равна:\n"
         << temp * 9 / 5 + 32 << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    unsigned __int32 pop1(8425785), pop2(47), pop3(9761);
    cout << setw(9) << "Город" << setfill('.') << setw(12) << "Население" << setfill(' ') << endl;
    cout << setw(9) << "Москва" << setfill('.') << setw(12) << pop1 << setfill(' ') << endl;
    cout << setw(9) << "Киров" << setfill('.') << setw(12) << pop2 << setfill(' ') << endl;
    cout << setw(9) << "Угрюмовка" << setfill('.') << setw(12) << pop3 << setfill(' ') << endl;
    system("pause");
    return 0;
}


Номер 9

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    __int32 a, b, c, d;
    cout << "Введите первую дробь: "; cin >> a >> b;
    cout << "Введите вторую дробь: "; cin >> c >> d;
    cout << "Сумма равна: " << a * d + b * c << '/' << b * d << endl;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    unsigned __int16 f, s, p;
    cout << "Введите количество фунтов: "; cin >> f;
    cout << "Введите количество шиллингов: "; cin >> s;
    cout << "Введите количество пенсов: "; cin >> p;
    p = ((s * 12 + p) / 2.4 - int((s * 12 + p) / 2.4) >= 0.5) ? (s * 12 + p) / 2.4 + 1 : (s * 12 + p) / 2.4;
    cout << "Десятичных фунтов: " << f << '.' << p << endl;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << setiosflags(ios::left)
         << setw(10) << "Фамилия" << setw(10) << "Имя"
         << setw(15) << "Адрес" << "Город\n";
    cout << "---------------------------------------------------\n";
    cout << setw(10) << "Петров" << setw(10) << "Василий"
         << setw(15) << "Кленовая 16" << "Санкт-Петербург\n";
    cout << setw(10) << "Иванов" << setw(10) << "Сергей"
         << setw(15) << "Осиновая 3" << "Находка\n";
    cout << setw(10) << "Сидоров" << setw(10) << "Иван"
         << setw(15) << "Березовая 21" << "Калининград\n";
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите число десятичных фунтов: ";
    float temp;
    cin >> temp;
    cout << "Эквивалентная сумма в старой форме записи: " << int(temp) << '.'
         << int((temp - int(temp)) * 100 * 2.4) / 12 << '.'
         << int((temp - int(temp)) * 100 * 2.4) % 12 << endl;
    system("pause");
    return 0;
}



Добавлено через 12 минут
Глава 3

Номер 1

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите число, таблицу умножения которого вы хотите просмотреть.\n";
    unsigned __int16 n; cin >> n;
    for (unsigned __int32 i(1), temp(n); i <= 20; cout << endl, i++)
        for (unsigned __int16 j(1); j <= 10; j++, temp += n)
            cout << setw(6) << temp;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Нажмите 1 для перевода шкалы Цельсия в шкалу Фаренгейта,\n"
         << "2 для перевода шкалы Фаренгейта в шкалу Цельсия: ";
    switch (getche() - 48)
    {
        float temp;
    case 1:
        cout << "\n\nВведите температуру по Цельсию:" << endl;
        cin >> temp;
        cout << "Температура по Фаренгейту равна: " << 1.8 * temp + 32 << endl;
        break;
    case 2:
        cout << "\n\nВведите температуру по Фаренгейту:" << endl;
        cin >> temp;
        cout << "Температура по Цельсию равна: " << (temp - 32) / 1.8 << endl;
        break;
    default: cout << "\n\nВведена неверная цифра." << endl;
    }
    system("pause");
    return 0;
}


Номер 3

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    unsigned __int32 num(0);
    cout << "Введите число: ";
    for (char ch; (ch = getche()) != '\r';)
        num = num*10 + (ch - 48);
    cout << "\nВы ввели число: " << num << endl;
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch=getche())
    {
        if (ch != 'z') cout << endl;
        cout << "Введите первый операнд, операцию и второй операнд:" << endl;
        __int32 a, b; cin >> a >> ch >> b;
        switch (ch)
        {
        case '+': cout << "Результат равен:\n" << a + b << endl; break;
        case '-': cout << "Результат равен:\n" << a - b << endl; break;
        case '*': cout << "Результат равен:\n" << a * b << endl; break;
        case '/': cout << "Результат равен:\n" << float (a) / b << endl; break;
        default: cout << "Такой операции не существует." << endl;
        }
        cout << "Повторить? (1 - да. 0 - нет.) ";
    }
    cout << 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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (unsigned __int16 i(1); i <= 20; i++)
    {
        cout << setw(41 - 2 * i);
        for (unsigned __int16 j(1); j <= 2 * i - 1; cout << endl, j++)
            cout << 'x';
    }
    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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    unsigned __int64 sum(1);
    cout << "Введите число, факториал которого вы хотите вычислить: ";
    for (char ch(getche()); ch != '0'; sum = 1, ch = getche())
    {
        for (unsigned __int16 i(1); i <= ch - 48; i++)
            sum *= i;
        cout << "\nФакториал числа " << ch << " равен: " << sum << endl;
        cout << "Введите число, факториал которого вы хотите вычислить: ";
    }
    cout << 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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите начальный вклад: ";
    float n; cin >> n;
    cout << "Введите число лет: ";
    unsigned __int16 m; cin >> m;
    cout << "Введите процентную ставку: ";
    float c; cin >> c;
    for (int i(1); i <= m; i++)
        n += n / 100 * c;
    cout << "Через " << m << " лет вы получите " << 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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    unsigned __int32 a, b, c, d, e, f;
    for (char ch('z'); ch != '0'; ch = getche())
    {
        if (ch != 'z') cout << endl;
        cout << "Введите первую сумму: ";
        cin >> a >> b >> c;
        cout << "Введите вторую сумму: ";
        cin >> d >> e >> f;
        if (c + f < 12) c += f; else
        {
            b += (c + f) / 12;
            c = (c + f) % 12;
        }
        if (b + e < 20) b += e; else
        {
            a += (b + e) / 20;
            b = (b + e) % 20;
        }
        cout << "Всего " << a + d << ' ' << b << ' ' << c
            << "\nПовторить? (1 - да. 0 - нет.) ";
    }
    cout << endl;
    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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите число гостей и стульев: ";
    unsigned __int16 n, m;
    cin >> n >> m;
    unsigned __int32 sum(1);
    for (int i(1); i <= m; i++, n--)
        sum *= n;
    cout << "Число возможных рассадок гостей за столом равно: " << sum << endl;
    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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите начальный вклад: ";
    float n; cin >> n;
    cout << "Введите желаемую сумму: ";
    float m; cin >> m;
    cout << "Введите процентную ставку: ";
    float c; cin >> c;
    unsigned __int16 j(0);
    for (; n < m; j++)
        n += n / 100 * c;
    cout << "Вы получите " << m << " доллар(а,ов) через " << j << " лет." << endl;
    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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch = getche())
    {
        unsigned __int32 a, b, c;
        if (ch != 'z') cout << endl;
        cout << "Введите первую сумму и операцию: ";
        cin >> a >> b >> c >> ch;
        switch (ch)
        {
            unsigned __int32 d, e, f;
            float temp;
        case '+':
            cout << "Введите вторую сумму: ";
            cin >> d >> e >> f;
            if (c + f < 12) c += f; else
            {
                b += (c + f) / 12;
                c = (c + f) % 12;
            }
            if (b + e < 20) b += e; else
            {
                a += (b + e) / 20;
                b += (b + e) % 20;
            }
            a += d;
            cout << "Результат равен: " << a << ' ' << b << ' ' << c << endl;
            break;
        case '-':
            cout << "Введите вторую сумму: ";
            cin >> d >> e >> f;
            if (c >= f) c -= f; else
            {
                c += 12 - f;
                b--;
            }
            if (b >= e) b -= e; else
            {
                b += 20 - e;
                a--;
            }
            a -= d;
            cout << "Результат равен: " << a << ' ' << b << ' ' << c << endl;
            break;
        case '*':
            cout << "На какое число хотите умножить?: ";
            cin >> temp;
            c = (c + 12 * (b + a * 20)) * temp;
            a = c / 240;
            b = (c - a * 240) / 12;
            c -= a * 240 + b * 12;
            cout << "Результат равен: " << a << ' ' << b << ' ' << c << endl;
            break;
        default: cout << "Такой операции не существует." << endl;
        }
        cout << "Повторить? (1 - да. 0 - нет.) ";
    }
    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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch = getche())
    {
        if (ch != 'z') cout << endl;
        __int32 a, b, c, d;
        cout << "Введите первую дробь, операцию и вторую дробь:" << endl;
        cin >> a >> b >> ch >> c >> d;
        switch (ch)
        {
        case '+': cout << "Результат равен:\n" << a * d + b * c << '/' << b * d << endl; break;
        case '-': cout << "Результат равен:\n" << a * d - b * c << '/' << b * d << endl; break;
        case '*': cout << "Результат равен:\n" << a * c << '/' << b * d << endl; break;
        case '/': cout << "Результат равен:\n" << a * d << '/' << b * c << endl; break;
        default: cout << "Такой операции не существует." << endl;
        }
        cout << "Повторить? (1 - да. 0 - нет.) ";
    }
    cout << endl;
    system("pause");
    return 0;
}

Ferrari F1
Нарушитель
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
27.01.2015, 18:57     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #173
Извиняюсь за 5-ое задание в 3-ей главе, вот верное решение:
Номер 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (unsigned __int16 i(1); i <= 20; cout << endl, i++)
    {
        cout << setw(41 - 2 * i);
        for (unsigned __int16 j(1); j <= 2 * i - 1; j++)
            cout << 'x';
    }
    system("pause");
    return 0;
}
Scythian
 Аватар для Scythian
58 / 58 / 8
Регистрация: 01.01.2010
Сообщений: 222
31.01.2015, 22:51     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #174
Ув. форумчане. Нужна помощь.. Ниже привел задание из книги. Его решение в теме есть. Но мне кажется что оно неверное. Собственно не совсем мне ясно со статической компонентой. Исходя из задания нужно писать нечто вроде
C++
1
static fstream FILE;
и с этим дальше работать. Или же все-таки имеется ввиду
C++
1
2
 static person*arr[];
static int ptP;
Подскажите как верно?
Задание
Кликните здесь для просмотра всего текста
Другим подходом к добавлению файлового потока к объекту является
превращение самого этого потока в статическую компоненту объекта. Для
чего это делается? Ну, часто бывает проще представить себе поток свя-
занным с классом в целом, а не с отдельными его объектами. К тому же,
гораздо правильнее открывать поток только один раз для записи и чтения
всего, что нужно. Например, мы открываем файл и начинаем последова-
тельное чтение. Функция чтения всякий раз возвращает данные для сле-
дующего объекта. Указатель файла сдвигается при этом автоматически,
так как между чтениями файл мы не закрываем.
Перепишите программы из упражнений 4 и 6 таким образом, чтобы ис-
пользовать объект fstream в качестве статической компоненты класса name.
Функционирование программы должно сохраниться. Напишите статиче-
скую функцию для открытия потока и еще одну — для сбрасывания фай-
лового указателя и установки его на начало файла. Эту же функцию мож-
но использовать для чтения всего файла.
Ferrari F1
Нарушитель
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
01.02.2015, 14:29     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #175
Глава 4


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
struct phone
{
    unsigned __int16 code, station, user;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    phone t1, t2 = {212, 767, 8900};
    cout << "Введите код города, номер станции и номер абонента:" << endl;
    cin >> t1.code >> t1.station >> t1.user;
    cout << "Мой номер: (" << t2.code << ") " << t2.station << '-' << t2.user << endl;
    cout << "Ваш номер: (" << t1.code << ") " << t1.station << '-' << t1.user << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
struct point
{
    unsigned __int16 x,y;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    point p1, p2, p3;
    cout << "Введите координаты точки p1: ";
    cin >> p1.x >> p1.y;
    cout << "Введите координаты точки p2: ";
    cin >> p2.x >> p2.y;
    cout << "Координаты точки p1 + p2 равны: " << p1.x + p2.x << '.' << p1.y + p2.y << endl;
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
struct Distance
{
    int feet;
    float inches;
};
 
struct Volume
{
    Distance length, width, height;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Volume room = { {13, 6.5}, {10, 0.0}, {3, 1.4} };
    float l = room.length.feet + room.length.inches / 12;
    float w = room.width.feet + room.width.inches / 12;
    float h = room.height.feet + room.height.inches / 12;
    cout << "Объем комнаты равен " << l * w * h << " квадратным футам." << endl;
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
struct employee
{
    unsigned __int16 number;
    float salary;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    employee s1, s2, s3;
    cout << "Введите номер и размер оклада 1-ого сотрудника:" << endl;
    cin >> s1.number >> s1.salary;
    cout << "Введите номер и размер оклада 2-ого сотрудника:" << endl;
    cin >> s2.number >> s2.salary;
    cout << "Введите номер и размер оклада 3-его сотрудника:" << endl;
    cin >> s3.number >> s3.salary; cout << endl;
    cout << setw(5) << '№' << setw(10) << "Оклад" << endl;
    for (unsigned __int16 i(1); i <= 15; i++)
        cout << '-'; cout << endl;
    cout << setw(5) << s1.number << setw(10) << s1.salary << endl;
    cout << setw(5) << s2.number << setw(10) << s2.salary << endl;
    cout << setw(5) << s3.number << setw(10) << s3.salary << endl << 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>
#include <ctype.h>
using namespace std;
 
struct date
{
    unsigned __int16 day, month, year;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    date temp;
    cout << "Введите день, месяц и год в формате ДД/ММ/ГГГГ:" << endl;
    cin >> temp.day >> temp.month >> temp.year;
    cout << "Была введена следующая дата:" << endl;
    cout << temp.day << '/' << temp.month << '/' << temp.year << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
#include <conio.h>
using namespace std;
 
enum etype { laborer, secretary, manager, accountant, executive, researcher };
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    etype title;
    cout << "Список должностей: laborer, secretary, manager\n"
         << setw(53) << "accountant, executive, researcher." << endl;
    cout << "\nВведите первую букву должности: ";
    switch (getche())
    {
    case 'l': title = laborer; break;
    case 's': title = secretary; break;
    case 'm': title = manager; break;
    case 'a': title = accountant; break;
    case 'e': title = executive; break;
    case 'r': title = researcher; break;
    }
    cout << endl << endl;
    switch (title)
    {
    case laborer: cout << "Полное название должности: laborer" << endl;
        break;
    case secretary: cout << "Полное название должности: secretary" << endl;
        break;
    case manager: cout << "Полное название должности: manager" << endl;
        break;
    case accountant: cout << "Полное название должности: accountant" << endl;
        break;
    case executive: cout << "Полное название должности: executive" << endl;
        break;
    case researcher: cout << "Полное название должности: researcher" << endl;
        break;
    }
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
#include <conio.h>
using namespace std;
 
enum etype { laborer, secretary, manager, accountant, executive, researcher };
 
struct date
{
    unsigned __int16 day, month, year;
};
 
struct employee
{
    unsigned __int16 number;
    float salary;
    etype title;
    date set;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    employee s1, s2, s3;
    char ch1, ch2, ch3;
    cout << "Введите номер и размер оклада 1-ого сотрудника, а также\n"
         << "первую букву должности и дату принятия его на работу:" << endl;
    cin >> s1.number >> s1.salary >> ch1 >> s1.set.day >> s1.set.month >> s1.set.year;
    cout << "Введите номер и размер оклада 2-ого сотрудника, а также\n"
         << "первую букву должности и дату принятия его на работу:" << endl;
    cin >> s2.number >> s2.salary >> ch2 >> s2.set.day >> s2.set.month >> s2.set.year;
    cout << "Введите номер и размер оклада 3-его сотрудника, а также\n"
         << "первую букву должности и дату принятия его на работу:" << endl;
    cin >> s3.number >> s3.salary >> ch3 >> s3.set.day >> s3.set.month >> s3.set.year;
    cout << endl;
    cout << setw(3) << '№' << setw(8) << "Оклад" << setw(12) << "Должность" << setw(16) << "Дата принятия" << endl;
    for (int i(1); i <= 39; i++)
        cout << '-'; cout << endl;
    cout << setw(3) << s1.number << setw(8) << s1.salary << setw(12);
    switch (ch1)
    {
    case 'l': s1.title = laborer; break;
    case 's': s1.title = secretary; break;
    case 'm': s1.title = manager; break;
    case 'a': s1.title = accountant; break;
    case 'e': s1.title = executive; break;
    case 'r': s1.title = researcher; break;
    }
    switch (s1.title)
    {
    case laborer: cout << "laborer";
        break;
    case secretary: cout << "secretary";
        break;
    case manager: cout << "manager";
        break;
    case accountant: cout << "accountant";
        break;
    case executive: cout << "executive";
        break;
    case researcher: cout << "researcher";
        break;
    }
    cout << setw(8) << s1.set.day << '/' << s1.set.month << '/' << s1.set.year << endl;
    cout << setw(3) << s2.number << setw(8) << s2.salary << setw(12);
    switch (ch2)
    {
    case 'l': s2.title = laborer; break;
    case 's': s2.title = secretary; break;
    case 'm': s2.title = manager; break;
    case 'a': s2.title = accountant; break;
    case 'e': s2.title = executive; break;
    case 'r': s2.title = researcher; break;
    }
    switch (s2.title)
    {
    case laborer: cout << "laborer";
        break;
    case secretary: cout << "secretary";
        break;
    case manager: cout << "manager";
        break;
    case accountant: cout << "accountant";
        break;
    case executive: cout << "executive";
        break;
    case researcher: cout << "researcher";
        break;
    }
    cout << setw(8) << s2.set.day << '/' << s2.set.month << '/' << s2.set.year << endl;
    cout << setw(3) << s3.number << setw(8) << s3.salary << setw(12);
    switch (ch3)
    {
    case 'l': s3.title = laborer; break;
    case 's': s3.title = secretary; break;
    case 'm': s3.title = manager; break;
    case 'a': s3.title = accountant; break;
    case 'e': s3.title = executive; break;
    case 'r': s3.title = researcher; break;
    }
    switch (s3.title)
    {
    case laborer: cout << "laborer";
        break;
    case secretary: cout << "secretary";
        break;
    case manager: cout << "manager";
        break;
    case accountant: cout << "accountant";
        break;
    case executive: cout << "executive";
        break;
    case researcher: cout << "researcher";
        break;
    }
    cout << setw(8) << s3.set.day << '/' << s3.set.month << '/' << s3.set.year << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
using namespace std;
 
struct fraction
{
    unsigned __int32 a, b;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    fraction t1, t2;
    cout << "Введите первую дробь: ";
    cin >> t1.a >> t1.b;
    cout << "Введите вторую дробь: ";
    cin >> t2.a >> t2.b;
    cout << "Сумма равна: " << t1.a * t2.b + t1.b * t2.a << '/' << t1.b * t2.b << endl;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <fstream>
using namespace std;
 
struct Time
{
    unsigned __int16 hours, minutes, seconds;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Time t1;
    cout << "Введите часы, минуты и секунды." << endl;
    cin >> t1.hours >> t1.minutes >> t1.seconds;
    cout << "Количество секунд в введенном времени равно:\n"
         << t1.hours * 3600 + t1.minutes * 60 + t1.seconds << endl;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <fstream>
using namespace std;
 
struct sterling
{
    unsigned __int16 pounds, shillings, pence;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    sterling st1;
    cout << "Введите значение суммы в десятичных фунтах:" << endl;
    double temp; cin >> temp;
    st1.pounds = temp;
    st1.shillings = (temp - st1.pounds) * 20;
    st1.pence = int((temp - st1.pounds) * 240) % 12;
    cout << st1.pounds << ' ' << st1.shillings << ' ' << st1.pence << endl;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <fstream>
using namespace std;
 
struct Time
{
    unsigned __int16 h, m, s;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Time t;
    cout << "Введите значение 1-го времени:" << endl;
    cin >> t.h >> t.m >> t.s;
    unsigned __int32 tmp(t.h * 3600 + t.m * 60 + t.s);
    cout << "Введите значение 2-го времени:" << endl;
    cin >> t.h >> t.m >> t.s;
    tmp += t.h * 3600 + t.m * 60 + t.s;
    t.s = tmp % 60; tmp -= t.s;
    t.m = tmp / 60 % 60; tmp -= t.m * 60;
    t.h = (tmp / 3600 < 13) ? tmp / 3600 : tmp / 3600 % 12;
    cout << t.h << ' ' << t.m << ' ' << t.s << 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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
 
struct fraction
{
    __int32 a, b;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch = getche())
    {
        if (ch != 'z') cout << endl;
        fraction t1, t2;
        cout << "Введите первую дробь, операцию и вторую дробь:" << endl;
        cin >> t1.a >> t1.b >> ch >> t2.a >> t2.b;
        switch (ch)
        {
        case '+': cout << "Результат равен:\n" << t1.a * t2.b + t1.b * t2.a << '/' << t1.b * t2.b << endl; break;
        case '-': cout << "Результат равен:\n" << t1.a * t2.b - t1.b * t2.a << '/' << t1.b * t2.b << endl; break;
        case '*': cout << "Результат равен:\n" << t1.a * t2.a << '/' << t1.b * t2.b << endl; break;
        case '/': cout << "Результат равен:\n" << t1.a * t2.b << '/' << t1.b * t2.a << endl; break;
        default: cout << "Такой операции не существует." << endl;
        }
        cout << "Повторить? (1 - да. 0 - нет.) ";
    }
    cout << endl;
    system("pause");
    return 0;
}


dicros
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 63
01.02.2015, 23:41     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #176
Цитата Сообщение от Kins Посмотреть сообщение
Глава 5 Упражнение №9
#include "stdafx.h"
#include <iostream>
#include <clocale>
using namespace std;
////////////////////////////////////////////////////////////////
struct Time
{
int hrs;
int min;
int sec;
};
////////////////////////////////////////////////////////////////
void swap(Time&, Time&);
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "");
Time t1, t2;
cout <<"Введите первое значение времени по типу чч мм сс: ";
cin >>t1.hrs >>t1.min >>t1.sec;
cout <<"Введите второе значение времени по типу чч мм сс: "; *
cin >>t2.hrs >>t2.min >>t2.sec;
swap(t1, t2);
cout <<"После обмена значений. Первое время: " <<t1.hrs <<':' <<t1.min <<":" <<t1.sec
<<" второе: " <<t2.hrs <<":" <<t2.min <<":" <<t2.sec <<endl;
system("pause");
return 0;
}
void swap(Time& t1, Time& t2)
{
Time t;
t.hrs=t1.hrs; t1.hrs=t2.hrs; t2.hrs=t.hrs;
t.min=t1.min; t1.min=t2.min; t2.min=t.min;
t.sec=t1.sec; t1.sec=t2.sec; t2.sec=t.sec;
}
Зачем такие сложности это же структура ее можно присваивать другой структуре совершенно спокойно.
Вместо:
C++
1
2
3
4
5
6
7
void swap(Time& t1, Time& t2)
{
 Time t;
 t.hrs=t1.hrs; t1.hrs=t2.hrs; t2.hrs=t.hrs;
t.min=t1.min; t1.min=t2.min; t2.min=t.min;
 t.sec=t1.sec; t1.sec=t2.sec; t2.sec=t.sec;
}
Можно просто написать:
C++
1
2
3
4
5
6
void swap(time& t1, time& t2)
{
    time t3 = t1;
    t1 = t2;
    t2 = t3;
}
Ferrari F1
Нарушитель
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
03.02.2015, 18:59     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #177
Глава 5


Номер 1

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
 
inline float circarea(const float& rad)
{
    return rad * rad * 3.1415;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите значение радиуса круга:" << endl;
    float rad; cin >> rad;
    cout << "Площадь круга равна: " << circarea(rad) << 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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
 
double power(double n, unsigned __int16 p = 2)
{
    switch (p)
    {
    case 0:
        return 1; break;
    default:
        for (double i(1), j(n); i < p; i++)
            n *= j;
    }
    return n;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите число и степень:" << endl;
    double n; unsigned __int16 p; cin >> n >> p;
    cout << "Результат равен: " << power(n, p) << endl;
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
 
void zeroSmaller(__int32& a, __int32& b)
{
    if (a < b)
        a = 0;
    else if (a > b)
        b = 0;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите 2 целых числа: ";
    __int32 a, b; cin >> a >> b; zeroSmaller(a, b);
    cout << a << ' ' << b << endl;
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
 
struct Distance
{
    unsigned __int32 feet;
    float inches;
};
 
Distance func(const Distance& a, const Distance& b)
{
    if (a.feet > b.feet)
        return a;
    else if (a.feet < b.feet)
        return b;
    else if (a.inches > b.inches)
        return a;
    else if (a.inches < b.inches)
        return b;
    return a;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Distance a, b, c;
    cout << "Введите длину №1:" << endl;
    cin >> a.feet >> a.inches;
    cout << "Введите длину №2:" << endl;
    cin >> b.feet >> b.inches;
    c = func(a, b);
    cout << "Наибольшая длина равна:\n"
         << c.feet << ' ' << c.inches << 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
24
25
26
27
#include <iostream>
#include <iomanip>
#include <cmath>
#include <conio.h>
#include <windows.h>
using namespace std;
 
inline unsigned __int32 hms_to_secs(const unsigned __int16& h, const unsigned __int16& m, const unsigned __int16& s)
{
    return h * 3600 + m * 60 + s;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != 0; ch = getche())
    {
        if (ch != 'z') cout << "\n\n";
        cout << "Введите часы, минуты и секунды:" << endl;
        unsigned __int16 h, m, s; cin >> h >> m >> s;
        cout << "Результат в секундах равен : " << hms_to_secs(h, m, s)
             << "\nПовторить? (1 - да. 0 - нет.) ";
    }
    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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <conio.h>
#include <windows.h>
using namespace std;
 
struct Time
{
    unsigned __int16 h, m, s;
};
 
inline unsigned __int32 time_to_secs(const Time& tmp)
{
    return tmp.h * 3600 + tmp.m * 60 + tmp.s;
}
 
inline Time secs_to_time(unsigned __int32 tmp)
{
    Time temp;
    temp.s = tmp % 60; tmp -= temp.s;
    temp.m = tmp / 60 % 60; tmp -= temp.m * 60;
    temp.h = (tmp / 3600 < 13) ? tmp / 3600 : tmp / 3600 % 12;
    return temp;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Time t1;
    cout << "Введите часы, минуты и секунды:" << endl;
    cin >> t1.h >> t1.m >> t1.s;
    unsigned __int32 temp(time_to_secs(t1));
    t1 = secs_to_time(temp);
    cout << "\nВы ввели:\n"
         << t1.h << ' ' << t1.m << ' ' << t1.s << '\n' << 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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
 
double power(double n, unsigned __int16 p = 2)
{
    switch (p)
    {
    case 0:
        return 1; break;
    default:
        for (double i(1), j(n); i < p; i++)
            n *= j;
    }
    return n;
}
 
double power(char n, unsigned __int16 p = 2)
{
    double temp(n - '0');
    switch (p)
    {
    case 0:
        return 1; break;
    default:
        for (double i(1); i < p; i++)
            temp *= n - '0';
        return temp;
    }
}
 
double power(__int16 n, unsigned __int16 p = 2)
{
    double temp(n);
    switch (p)
    {
    case 0:
        return 1; break;
    default:
        for (double i(1); i < p; i++)
            temp *= n;
        return temp;
    }
}
 
double power(__int32 n, unsigned __int16 p = 2)
{
    double temp(n);
    switch (p)
    {
    case 0:
        return 1; break;
    default:
        for (double i(1); i < p; i++)
            temp *= n;
        return temp;
    }
}
 
double power(float n, unsigned __int16 p = 2)
{
    double temp(n);
    switch (p)
    {
    case 0:
        return 1; break;
    default:
        for (double i(1); i < p; i++)
            temp *= n;
        return temp;
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char ch('2');
    __int16 a(2), st; __int32 b(2);
    float c(2); double d(2);
    cout << "Введите степень числа: "; cin >> st;
    cout << "\nChar = " << power(ch, st) << endl;
    cout << "Short = " << power(a, st) << endl;
    cout << "Long = " << power(b, st) << endl;
    cout << "Float = " << power(c, st) << endl;
    cout << "Double = " << power(d, st) << '\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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
 
void swap(__int32& a, __int32& b)
{
    __int32 tmp(a);
    a = b;
    b = tmp;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите 2 целых числа:" << endl;
    __int32 a, b; cin >> a >> b;
    swap(a, b);
    cout << a << ' ' << b << endl;
    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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
 
struct Time
{
    unsigned __int16 h, m, s;
};
 
void swap(Time& a, Time& b)
{
    Time tmp(a);
    a = b;
    b = tmp;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Time a, b;
    cout << "Введите 1-ое время:" << endl;
    cin >> a.h >> a.m >> a.s;
    cout << "Введите 2-ое время:" << endl;
    cin >> b.h >> b.m >> b.s;
    swap(a, b);
    cout << '\n' << a.h << ' ' << a.m << ' ' << a.s << endl;
    cout << b.h << ' ' << b.m << ' ' << b.s << '\n' <<endl;
    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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
#include <conio.h>
using namespace std;
 
void func()
{
    static unsigned __int16 count;
    cout << ++count << " раз(а).";
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch=getch())
    {
        if (ch != 'z') cout << '\n' << endl;
        cout << "Функция была вызвана "; func();
        cout << "\nПовторить? (1 - да. 0 - нет.) ";
    }
    cout << endl;
    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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
#include <conio.h>
using namespace std;
 
struct sterling
{
    unsigned __int16 pounds, shillings, pence;
};
 
sterling func1(void)
{
    static __int16 count;
    sterling tmp;
    cout << "Введите сумму №" << ++count << " в фунтах, шиллингах и пенсах." << endl;
    cin >> tmp.pounds >> tmp.shillings >> tmp.pence;
    return tmp;
}
 
sterling func2(const sterling& a, const sterling& b)
{
    sterling tmp = { 0, 0, 0 };
    if (a.pence + b.pence < 12)
        tmp.pence = a.pence + b.pence;
    else
    {
        tmp.shillings = (a.pence + b.pence) / 12;
        tmp.pence = (a.pence + b.pence) % 12;
    }
    if (tmp.shillings + a.shillings + b.shillings < 20)
        tmp.shillings += a.shillings + b.shillings;
    else
    {
        tmp.pounds = (tmp.shillings + a.shillings + b.shillings) / 20;
        tmp.shillings = (tmp.shillings + a.shillings + b.shillings) % 20;
    }
    tmp.pounds += a.pounds + b.pounds;
    return tmp;
}
 
inline void func3(const sterling& tmp)
{
    cout << "Результат равен:" << endl;
    cout << tmp.pounds << ' ' << tmp.shillings << ' ' << tmp.pence << endl;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    sterling t1, t2;
    t1 = func1(); t2 = func1();
    t1 = func2(t1, t2);
    func3(t1);
    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
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
#include <conio.h>
using namespace std;
 
struct fraction
{
    __int32 a, b;
};
 
fraction fadd(const fraction& t1, const fraction& t2)
{
    fraction tmp;
    tmp.a = t1.a * t2.b + t1.b * t2.a;
    tmp.b = t1.b * t2.b;
    return tmp;
}
 
fraction fsub(const fraction& t1, const fraction& t2)
{
    fraction tmp;
    tmp.a = t1.a * t2.b - t1.b * t2.a;
    tmp.b = t1.b * t2.b;
    return tmp;
}
 
fraction fmul(const fraction& t1, const fraction& t2)
{
    fraction tmp;
    tmp.a = t1.a * t2.a;
    tmp.b = t1.b * t2.b;
    return tmp;
}
 
fraction fdiv(const fraction& t1, const fraction& t2)
{
    fraction tmp;
    tmp.a = t1.a * t2.b;
    tmp.b = t1.b * t2.a;
    return tmp;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch = getche())
    {
        if (ch != 'z') cout << '\n' << endl;
        fraction t1, t2;
        cout << "Введите первую дробь, операцию и вторую дробь:" << endl;
        cin >> t1.a >> t1.b >> ch >> t2.a >> t2.b;
        switch (ch)
        {
        case '+':
            t1 = fadd(t1, t2);
            cout << "Результат равен:\n" << t1.a << '/' << t1.b << endl;
            break;
        case '-':
            t1 = fsub(t1, t2);
            cout << "Результат равен:\n" << t1.a << '/' << t1.b << endl;
            break;
        case '*':
            t1 = fmul(t1, t2);
            cout << "Результат равен:\n" << t1.a << '/' << t1.b << endl;
            break;
        case '/':
            t1 = fdiv(t1, t2);
            cout << "Результат равен:\n" << t1.a << '/' << t1.b << endl;
            break;
        default: cout << "Такой операции не существует." << endl;
        }
        cout << "Повторить? (1 - да. 0 - нет.) ";
    }
    cout << '\n' << endl;
    system("pause");
    return 0;
}


Ferrari F1
Нарушитель
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
05.02.2015, 14:56     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #178
Глава 6


Номер 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
#include <conio.h>
using namespace std;
 
class Int
{
    __int16 a;
public:
    Int() : a(0)
    {}
    Int(const __int16& tmp) : a(tmp)
    {}
    inline void show(void) const;
    inline void set(void);
    inline Int add(const Int& tmp) const;
};
 
inline Int Int::add(const Int& tmp) const
{
    Int temp(a + tmp.a);
    return temp;
}
 
inline void Int::set(void)
{
    cout << "Введите значение поля:" << endl;
    cin >> a;
}
 
inline void Int::show(void) const
{
    cout << a << endl;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Int a(5), b(6), c;
    a.show(); b.show();
    c = a.add(b); c.show();
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
#include <conio.h>
using namespace std;
 
class tollBooth
{
    unsigned __int32 cars;
    double money;
public:
    tollBooth() : cars(0), money(0)
    {}
    tollBooth(const unsigned __int32& c, const double& m) : cars(c), money(m)
    {}
    void payingCar()
    {
        cars++;
        money += 0.5;
    }
    void nopayCar()
    {
        cars++;
    }
    void display() const
    {
        cout << cars << ' ' << money << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    tollBooth t1;
    for (char ch('z'); ch != 27;)
    {
        cout << "Проехать машине? (1 - да. 0 - нет.) ";
        switch (ch = getche())
        {
        case '1': t1.payingCar();
            break;
        case '0': t1.nopayCar();
            break;
        }
        cout << endl;
    }
    t1.display();
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class Time
{
    unsigned __int16 h, m, s;
public:
    Time() : h(0), m(0), s(0)
    {}
    inline Time(const unsigned __int16&, const unsigned __int16&, const unsigned __int16&);
    void show() const
    {
        cout << h << ':' << m << ':' << s << endl;
    }
    void add(const Time& t1, const Time& t2)
    {
        if (t1.s + t2.s < 60)
            s = t1.s + t2.s;
        else
        {
            m = (t1.s + t2.s) / 60;
            s = (t1.s + t2.s) % 60;
        }
        if (m + t1.m + t2.m < 60)
            m += t1.m + t2.m;
        else
        {
            h = (m + t1.m + t2.m) / 60;
            m = (m + t1.m + t2.m) % 60;
        }
        if (h + t1.h + t2.h < 12)
            h += t1.h + t2.h;
        else
            h = (h + t1.h + t2.h) % 12;
    }
};
 
inline Time::Time (const unsigned __int16& a, const unsigned __int16& b, const unsigned __int16& c) : h(a), m(b), s(c)
{}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Time t1(6, 34, 25), t2(7, 25, 35), t3;
    t1.show(); t2.show(); t3.show();
    t3.add(t1, t2); t3.show();
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class employee
{
    unsigned __int16 number;
    float salary;
public:
    employee() : number(0), salary(0)
    {}
    void show() const
    {
        cout << number << ' ' << salary << endl;
    }
    void set()
    {
        cout << "Введите номер и оклад сотрудника:" << endl;
        cin >> number >> salary;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    employee t1, t2, t3;
    t1.set(); t2.set(); t3.set(); cout << endl;
    t1.show(); t2.show(); t3.show();
    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
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class date
{
    __int16 day, month, year;
public:
    date() : day(0), month(0), year(0)
    {}
    void getdate()
    {
        cout << "Введите день, месяц и год:" << endl;
        cin >> day >> month >> year;
    }
    void showdate() const
    {
        cout << day << '/' << month << '/' << year << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    date t1;
    t1.getdate();
    t1.showdate();
    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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class employee
{
    enum etype { laborer, secretary, manager, accountant, executive, researcher };
    class date
    {
    public:
        __int16 day, month, year;
    };
    unsigned __int16 number;
    float salary;
    etype job;
    date data;
public:
    void getemploy()
    {
        cout << "Введите номер сотрудника, его оклад, первую букву должности"
             << ",\nа также дату принятия его на работу:" << endl;
        char ch;
        cin >> number >> salary >> ch
            >> data.day >> data.month >> data.year;
        switch (ch)
        {
        case 'l': job = laborer; break;
        case 's': job = secretary; break;
        case 'm': job = manager; break;
        case 'a': job = accountant; break;
        case 'e': job = executive; break;
        case 'r': job = researcher; break;
        }
    }
    void putemploy() const
    {
        cout << number << ' ' << salary << ' ';
        switch (job)
        {
        case laborer: cout << "laborer"; break;
        case secretary: cout << "secretary"; break;
        case manager: cout << "manager"; break;
        case accountant: cout << "accountant"; break;
        case executive: cout << "executive"; break;
        case researcher: cout << "researcher"; break;
        }
        cout << ' ' << data.day << '/' << data.month << '/' << data.year << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    employee t1, t2, t3;
    t1.getemploy(); t2.getemploy(); t3.getemploy();
    cout << endl;
    t1.putemploy(); t2.putemploy(); t3.putemploy();
    cout << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class angle
{
    __int16 a;
    float b;
    char ch;
public:
    angle(const __int16& c, const float& d, const char& e) : a(c), b(d), ch(e)
    {}
    void set()
    {
        cout << "Введите координаты точки (градусы, минуты и направление.)"
             << endl;
        cin >> a >> b >> ch;
    }
    void show() const
    {
        cout << a << '\"' << b << '\'' << ch << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    angle t1(179, 59.9F, 'E'), t2(0, 0, 'A'); t1.show();
    do
    {
        cout << endl;
        t2.set();
        t2.show();
        cout << "Повторить? (1 - да. 0 - нет.) ";
    } while (getche() != '0');
    cout << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class someshit
{
    static __int16 count;
    __int16 xcount;
public:
    someshit() : xcount(++count)
    {}
    void show(void) const
    {
        cout << "Порядковый номер объекта: " << xcount << endl;
    }
};
 
__int16 someshit::count(0);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    someshit t1, t2, t3;
    t1.show(); t2.show(); t3.show();
    cout << endl;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class fraction
{
    __int32 a, b;
public:
    void set()
    {
        cout << "Введите числитель и знаменатель дроби: " << endl;
        cin >> a >> b;
    }
    void show() const
    {
        cout << a << '/' << b << endl;
    }
    void add(const fraction& tmp) const
    {
        cout << "Сумма дробей равна:\n"
            << a * tmp.b + b * tmp.a << '/' << b * tmp.b << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    fraction d1, d2;
    do
    {
        cout << endl;
        d1.set(); d2.set();
        d1.add(d2);
        cout << "Повторить? (1 - да. 0 - нет.) ";
    } while (getche() != '0');
    cout << endl;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class ship
{
    class angle
    {
    public:
        __int16 a;
        float b;
        char ch;
    };
    static __int16 count;
    __int16 number;
    angle dolg, shir;
public:
    ship() : number(++count)
    {}
    void set(void)
    {
        cout << "Введите координаты корабля №" << number << endl;
        cin >> dolg.a >> dolg.b >> dolg.ch
            >> shir.a >> shir.b >> shir.ch;
    }
    void show(void) const
    {
        cout << number << ' ' << dolg.a << ' ' << dolg.b << ' ' << dolg.ch
             << ' ' << shir.a << ' ' << shir.b << ' ' << shir.ch << endl;
    }
};
 
__int16 ship::count(0);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ship t1, t2, t3;
    t1.set(); t2.set(); t3.set();
    cout << endl;
    t1.show(); t2.show(); t3.show();
    cout << endl;
    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
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 <windows.h>
#include <conio.h>
using namespace std;
 
class fraction
{
    __int32 a, b;
public:
    fraction() : a(0), b(0)
    {}
 
    fraction(__int32 c, __int32 d) : a(c), b(d)
    {}
 
    fraction fadd(const fraction& t1, const fraction& t2)
    {
        fraction tmp;
        tmp.a = t1.a * t2.b + t1.b * t2.a;
        tmp.b = t1.b * t2.b;
        return tmp;
    }
 
    fraction fsub(const fraction& t1, const fraction& t2)
    {
        fraction tmp;
        tmp.a = t1.a * t2.b - t1.b * t2.a;
        tmp.b = t1.b * t2.b;
        return tmp;
    }
 
    fraction fmul(const fraction& t1, const fraction& t2)
    {
        fraction tmp;
        tmp.a = t1.a * t2.a;
        tmp.b = t1.b * t2.b;
        return tmp;
    }
 
    fraction fdiv(const fraction& t1, const fraction& t2)
    {
        fraction tmp;
        tmp.a = t1.a * t2.b;
        tmp.b = t1.b * t2.a;
        return tmp;
    }
 
    void nod(void)
    {
        __int16 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;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch = getche())
    {
        if (ch != 'z') cout << '\n' << endl;
        fraction t1, t2, t3;
        cout << "Введите первую дробь:" << endl;
        t1.set();
        cout << "Введите вторую дробь:" << endl;
        t2.set();
        cout << "Введите операцию:" << endl;
        cin >> ch;
        switch (ch)
        {
        case '+':
            t3 = t1.fadd(t1, t2); t3.nod();
            cout << "Результат равен:\n"; t3.show();
            break;
        case '-':
            t3 = t1.fsub(t1, t2); t3.nod();
            cout << "Результат равен:\n"; t3.show();
            break;
        case '*':
            t3 = t1.fmul(t1, t2); t3.nod();
            cout << "Результат равен:\n"; t3.show();
            break;
        case '/':
            t3 = t1.fdiv(t1, t2); t3.nod();
            cout << "Результат равен:\n"; t3.show();
            break;
        default: cout << "Такой операции не существует." << endl;
        }
        cout << "Повторить? (1 - да. 0 - нет.) ";
    }
    cout << '\n' << 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
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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class fraction
{
    __int32 a, b;
public:
    fraction(void) : a(1), b(1)
    {}
    fraction(__int32 c, __int32 d) : a(c), b(d)
    {}
    fraction fmul(const fraction& t1, const fraction& t2) const
    {
        fraction tmp = { t1.a * t2.a, t1.b * t2.b };
        tmp.gcd();
        return tmp;
    }
    void gcd(void)
    {
        __int16 A(a), B(b), C;
        while (B)
        {
            C = A % B;
            A = B;
            B = C;
        }
        a /= abs(A);
        b /= abs(A);
    }
    __int32 outznam(void) const
    {
        return b;
    }
    void setznam(void)
    {
        cout << "Введите знаменатель дроби: ";
        cin >> b;
        cout << endl;
    }
    void show(void) const
    {
        cout << a << "/" << b;
    }
    void setfrac(const __int32& c, const __int32& d)
    {
        a = c;
        b = d;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    fraction t1, temp;
    t1.setznam();
    temp = t1;
    for (int i(1); i < t1.outznam(); i++)
    {
        if (i == 1)
            cout << setw(9);
        else
            cout << setw(7);
        temp.setfrac(i, t1.outznam());
        temp.gcd();
        temp.show();
    }
    cout << endl;
    for (int i(1); i < t1.outznam(); i++)
    {
        for (int j(1); j <= 10; j++)
            cout << '-';
    }
    cout << endl;
    temp = t1;
    for (int i(1), count(t1.outznam()); i < count; i++)
    {
        t1.setfrac(i, count);
        t1.gcd();
        cout << setw(2); t1.show(); cout << setw(5);
        for (int j(1); j < count; j++)
        {
            temp = temp.fmul(temp, t1);
            temp.show();
            temp.setfrac(j + 1, count);
            cout << setw(6);
        }
        temp.setfrac(1, count);
        cout << endl;
    }
    cout << endl;
    system("pause");
    return 0;
}




Извиняюсь за кривое форматирование в последнем задании, ибо писал программу из последних сил. Доделывать лень.
Ferrari F1
Нарушитель
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
07.02.2015, 23:41     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #179
Глава 7


Номер 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>
#include <conio.h>
#include <cstring>
using namespace std;
 
void reversit(char str[])
{
    for (int i(0); i < strlen(str) / 2; i++)
    {
        char tmp(str[i]);
        str[i] = str[strlen(str) - 1 - i];
        str[strlen(str) - 1 - i] = tmp;
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char str[80];
    cout << "Введите строку:" << endl;
    cin.get(str, 80);
    reversit(str);
    cout << str << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <string>
using namespace std;
 
class employee
{
    unsigned __int32 number;
    string name;
public:
    void getdata(void)
    {
        cout << "Введите номер и имя служащего:" << endl;
        cin >> number >> name;
    }
    void putdata(void)
    {
        cout << number << ' ' << name << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const unsigned __int32 MAX(3);
    employee arr[MAX];
    for (int i(0); i < MAX; i++)
    {
        arr[i].getdata();
    }
    cout << endl;
    for (int i(0); i < MAX; i++)
    {
        arr[i].putdata();
    }
    cout << endl;
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <string>
using namespace std;
 
class Distance
{
    __int32 feet;
    float inches;
public:
    Distance() : feet(0), inches(0)
    {}
    void set(void)
    {
        cout << "Введите футы и дюймы:" << endl;
        cin >> feet >> inches;
    }
    void show(void) const
    {
        cout << feet << '.' << inches << endl;
    }
    void add(const Distance& tmp)
    {
        inches += tmp.feet * 12 + tmp.inches;
    }
    void div_dist(const int& divisor)
    {
        inches /= divisor;
        feet = inches / 12;
        inches -= feet * 12;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int MAX(3);
    Distance arr[MAX], tmp;
    for (int i(0); i < MAX; i++)
    {
        arr[i].set();
    }
    for (int i(0); i < MAX; i++)
    {
        tmp.add(arr[i]);
    }
    tmp.div_dist(MAX);
    cout << "Среднее значение равно: "; tmp.show(); cout << endl;
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
__int32 maxint(const __int32 [], const __int32&);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int MAX(5);
    __int32 arr[MAX];
    cout << "Введите числа-элементы массива:" << endl;
    for (int i(0); i < MAX; i++)
    {
        cout << i + 1 << " число: ";
        cin >> arr[i];
    }
    cout << "\nНаибольший элемент расположен в " << maxint(arr, MAX)
         << " ячейке массива.\nЕго значение равно: "
         << arr[maxint(arr, MAX)] << '\n' << endl;
    system("pause");
    return 0;
}
 
__int32 maxint(const __int32 arr[], const __int32& num)
{
    __int32 tmp;
    for (int i(0), mx(i); i < num; i++)
    {
        if (arr[i] > mx)
        {
            mx = arr[i];
            tmp = i;
        }
    }
    return tmp;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class fraction
{
    __int32 a, b;
public:
    fraction() : a(0), b(1)
    {}
    void set()
    {cin >> a >> b;}
    void add(const fraction& tmp)
    {
        a = a * tmp.b + b * tmp.a;
        b = b * tmp.b;
    }
    void end(const __int32& count)
    {
        b *= count;
        __int32 A(a), B(b), C;
        while (B)
        {
            C = A % B;
            A = B;
            B = C;
        }
        a /= abs(A);
        b /= abs(A);
    }
    void show() const
    {
        cout << a << '/' << b << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int MAX(2);
    fraction arr[MAX], tmp;
    cout << "Введите дроби:" << endl;
    for (int i(0); i < MAX; i++)
    {
        arr[i].set();
        tmp.add(arr[i]);
    }
    cout << "\nСреднее значение массива дробей равно:" << endl;
    tmp.end(MAX); tmp.show(); cout << 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
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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <cstdlib>
#include <ctime>
using namespace std;
 
enum Suit { clubs, diamonds, hearts, spades };
const int jack = 11;
const int queen = 12;
const int king = 13;
const int ace = 14;
 
class card
{
private:
    int number;
    Suit suit;
public:
    card()
    { }
    void set(int n, Suit s)
    {
        suit = s; number = n;
    }
    void display();
};
 
void card::display()
{
    if (number >= 2 && number <= 10)
        cout << number;
    else
    {
        switch (number)
        {
        case jack: cout << 'J'; break;
        case queen: cout << 'Q'; break;
        case king: cout << 'K'; break;
        case ace: cout << 'A'; break;
        }
    }
    switch (suit)
    {
    case clubs: cout << static_cast<char>(5); break;
    case diamonds: cout << static_cast<char>(4); break;
    case hearts: cout << static_cast<char>(3); break;
    case spades: cout << static_cast<char>(6); break;
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    card deck[52];
    int j;
    for (j = 0; j < 52; j++)
    {
        int num = (j % 13) + 2;
        Suit su = Suit(j / 13);
        deck[j].set(num, su);
    }
    srand(time(0));
    for (j = 0; j < 52; j++)
    {
        int k = rand() % 52;
        card temp = deck[j];
        deck[j] = deck[k];
        deck[k] = temp;
    }
    for (j = 0; j < 52; j++)
    {
        switch (j)
        {
        case 0: cout << "1-ый игрок:\n"; break;
        case 13: cout << "\n2-ой игрок:\n"; break;
        case 26: cout << "\n3-ий игрок:\n"; break;
        case 39: cout << "\n4-ый игрок:\n"; break;
        }
        deck[j].display();
        cout << " ";
        if (!((j + 1) % 13))
            cout << endl;
    }
    cout << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <string>
#include <cstring>
using namespace std;
 
const __int16 MAX(80);
 
class money
{
    char arr[MAX];
public:
    money()
    {
        arr[0] = 0;
    }
    void show() const
    {
        cout << arr << endl;
    }
    long double mstold(char temp[])
    {
        for (unsigned int i(0), j(0); i < strlen(temp); i++)
        {
            switch (temp[i])
            {
            case '0':
                arr[j] = temp[i]; j++;
                break;
            case '1':
                arr[j] = temp[i]; j++;
                break;
            case '2':
                arr[j] = temp[i]; j++;
                break;
            case '3':
                arr[j] = temp[i]; j++;
                break;
            case '4':
                arr[j] = temp[i]; j++;
                break;
            case '5':
                arr[j] = temp[i]; j++;
                break;
            case '6':
                arr[j] = temp[i]; j++;
                break;
            case '7':
                arr[j] = temp[i]; j++;
                break;
            case '8':
                arr[j] = temp[i]; j++;
                break;
            case '9':
                arr[j] = temp[i]; j++;
                break;
            case '.':
                arr[j] = temp[i]; j++;
                break;
            }
            if (!(strlen(temp) - i - 1))
                arr[j] = 0;
        }
        return stold(arr);
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    money tmp; char ch[MAX];
    cout << "Введите денежную строку:" << endl;
    cin.get(ch, MAX);
    cout << "\nДенежная строка в формате long double:\n"
         << fixed << setprecision(3) << tmp.mstold(ch) << '\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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class safearay
{
    static const long MAX = 80;
    long limit[MAX];
public:
    void putel(const long& tmp2, const long& tmp1)
    {
        if (tmp1 < 0 || tmp1 >= MAX)
            cout << "Неверный индекс массива." << endl;
        else
            limit[tmp1] = tmp2;
    }
    long getel(const long& tmp1)
    {
        if (tmp1 < 0 || tmp1 >= MAX)
        {
            cout << "\nНеверный индекс массива." << endl;
            return 0;
        }
        else
            return limit[tmp1];
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    safearay t1;
    for (long i(1), j, k; i < 2; i++)
    {
        cout << "Введите элемент и его индекс:" << endl;
        cin >> j >> k;
        t1.putel(j, k);
    }
    for (long i(1), j; i < 2; i++)
    {
        cout << "\nВведите индекс элемента:" << endl;
        cin >> j;
        cout << t1.getel(j) << '\n' << endl;
    }
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class queue
{
    enum { MAX = 10 };
    int st[MAX];
    int head, tail;
public:
    queue() : head(0), tail(0)
    {}
    void put(int var)
    {
        if (tail == MAX)
            cout << "\nОчередь переполнена." << endl;
        else
        {
            st[tail++] = var;
        }
    }
    void get()
    {
        if (!tail)
            cout << "Очередь пуста." << endl;
        else
        {
            cout << st[head] << endl;
            for (int i(0); i <= tail; i++)
                st[i] = st[i + 1];
            tail--;
        }
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    queue s1;
    s1.put(11);
    s1.put(22);
    cout << "1: "; s1.get();
    cout << "2: "; s1.get();
    s1.put(33);
    s1.put(44);
    s1.put(55);
    s1.put(66);
    cout << "3: "; s1.get();
    cout << "4: "; s1.get();
    cout << "5: "; s1.get();
    cout << "6: "; s1.get();
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <process.h>
using namespace std;
 
class matrix
{
    static const long MAX = 80;
    long limit[MAX][MAX];
    __int16 i, j;
public:
    matrix() : i(MAX), j(MAX)
    {}
    matrix(int n, int k) : i(n), j(k)
    {}
    void putel(const long& tmp1, const long& tmp2, const long& tmp3)
    {
        if (tmp1 < 0 || tmp1 >= i || tmp2 < 0 || tmp2 >= j)
        {
            cout << "Неверный индекс массива.\n" << endl;
            system("pause");
            exit(0);
        }
        else
            limit[tmp1][tmp2] = tmp3;
    }
    void getel(const long& tmp1, const long& tmp2)
    {
        if (tmp1 < 0 || tmp1 >= i || tmp2 < 0 || tmp2 >= j)
            cout << "\nНеверный индекс массива." << endl;
        else
            cout << '\n' << limit[tmp1][tmp2] << '\n' << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите желаемую размерность матрицы:" << endl;
    __int16 k, l, m; cin >> k >> l;
    matrix m1(k, l);
    cout << "Введите координаты ячейки в матрице и ее значение:" << endl;
    cin >> k >> l >> m; m1.putel(k, l, m);
    cout << "Введите координаты ячейки для вывода ее содержимого:" << endl;
    cin >> k >> l; m1.getel(k, l);
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <sstream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
 
class money
{
    static const __int16 MAX = 80;
    char arr[MAX];
public:
    money()
    {arr[0] = 0;}
    void ldtoms(long double& tmp)
    {
        stringstream ss;
        ss << fixed << setprecision(3) << tmp;
        ss >> arr;
        char tmp1[MAX], tmp2[MAX]; int count(0);
        for (int i(0); arr[i] != 0; i++)
        {
            if (arr[i] != '.') count = i; else break;
        }
        for (int i(0); i <= count; i++)
        {
            tmp1[i] = arr[i];
            if (!(count - i)) tmp1[i + 1] = 0;
        }
        for (int i(count + 1), j(0); arr[i] != 0; i++, j++)
        {
            tmp2[j] = arr[i];
            if (!(strlen(arr) - 1 - i)) tmp2[j + 1] = 0;
        }
        string tmp3(tmp1), tmp4(tmp2);
        reverse(tmp3.begin(), tmp3.end());
        for (int i(0); i <= count; i++)
            if (!((i + 1) % 4)) tmp3.insert(i, " ");
        reverse(tmp3.begin(), tmp3.end());
        tmp3.insert(0, "$ ");
        cout << "\nЭквивалентное число в строковом формате:\n" << tmp3 + tmp4 << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    money t1;
    long double tmp;
    cout << "Введите число:" << endl;
    cin >> tmp; t1.ldtoms(tmp);
    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
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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <sstream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
 
class bMoney
{
    static const __int16 MAX = 80;
    char arr[MAX];
    long double money;
public:
    bMoney() : money(0)
    {
        arr[0] = 0;
    }
    void ldtoms(long double& tmp)
    {
        stringstream ss;
        ss << fixed << setprecision(3) << tmp;
        ss >> arr;
        char tmp1[MAX], tmp2[MAX]; int count(0);
        for (int i(0); arr[i] != 0; i++)
        {
            if (arr[i] != '.') count = i; else break;
        }
        for (int i(0); i <= count; i++)
        {
            tmp1[i] = arr[i];
            if (!(count - i)) tmp1[i + 1] = 0;
        }
        for (int i(count + 1), j(0); arr[i] != 0; i++, j++)
        {
            tmp2[j] = arr[i];
            if (!(strlen(arr) - 1 - i)) tmp2[j + 1] = 0;
        }
        string tmp3(tmp1), tmp4(tmp2);
        reverse(tmp3.begin(), tmp3.end());
        for (int i(0); i <= count; i++)
        if (!((i + 1) % 4)) tmp3.insert(i, " ");
        reverse(tmp3.begin(), tmp3.end());
        tmp3.insert(0, "$ ");
        cout << "\nДенежная сумма в строковом формате:\n" << tmp3 + tmp4 << '\n' << endl;
    }
    void mstold(char temp[])
    {
        for (unsigned int i(0), j(0); i < strlen(temp); i++)
        {
            switch (temp[i])
            {
            case '0':
                arr[j] = temp[i]; j++;
                break;
            case '1':
                arr[j] = temp[i]; j++;
                break;
            case '2':
                arr[j] = temp[i]; j++;
                break;
            case '3':
                arr[j] = temp[i]; j++;
                break;
            case '4':
                arr[j] = temp[i]; j++;
                break;
            case '5':
                arr[j] = temp[i]; j++;
                break;
            case '6':
                arr[j] = temp[i]; j++;
                break;
            case '7':
                arr[j] = temp[i]; j++;
                break;
            case '8':
                arr[j] = temp[i]; j++;
                break;
            case '9':
                arr[j] = temp[i]; j++;
                break;
            case '.':
                arr[j] = temp[i]; j++;
                break;
            }
            if (!(strlen(temp) - i - 1))
                arr[j] = 0;
        }
        cin.clear();
        cin.sync();
        money = stold(arr);
    }
    void madd(const bMoney& tmp) const
    {
        bMoney temp1;
        long double temp2(money + tmp.money);
        temp1.ldtoms(temp2);
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch = getche())
    {
        const __int16 MAX(80);
        bMoney t1, t2;
        char tmp1[MAX], tmp2[MAX];
        if (ch != 'z') cout << '\n' << endl;
        cout << "Введите 1-ую денежную строку:" << endl;
        cin.get(tmp1, MAX);
        t1.mstold(tmp1);
        cout << "\nВведите 2-ую денежную строку:" << endl;
        cin.get(tmp2, MAX);
        t2.mstold(tmp2);
        t1.madd(t2);
        cout << "Повторить? (1 - да. 0 - нет.) ";
    }
    cout << '\n' << endl;
    system("pause");
    return 0;
}


MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2015, 14:59     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
Еще ссылки по теме:

Объектно-ориентированное программирование C++
Разобраться в примерх к книге Лафоре "Обьектно-ориентированое программирование в С++" C++
C++ Объектно-ориентированное приложение: "Эмулятор банкомата"

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

Или воспользуйтесь поиском по форуму:
Ferrari F1
Нарушитель
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
14.02.2015, 14:59     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #180
Разместил не все номера, т.к. стоит ограничение на кол-во напечатанных символов.

Глава 8


Номер 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
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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
class Distance
{
private:
    int feet;
    float inches;
public:
    Distance() : feet(0), inches(0.0)
    { }
    Distance(int ft, float in) : feet(ft), inches(in)
    { }
    void getdist()
    {
        cout << "\nВведите футы: "; cin >> feet;
        cout << "Введите дюймы: "; cin >> inches;
    }
    void showdist()
    {
        cout << feet << "\'-" << inches << '\"';
    }
    Distance operator-(Distance) const;
};
 
Distance Distance::operator-(Distance d2) const
{
    __int32 ft(0);
    float in(0);
    if (inches > d2.inches)
        in = inches - d2.inches;
    else
    {
        in = inches - d2.inches + 12;
        ft = -1;
    }
    ft += feet - d2.feet;
    return Distance(ft, in);
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Distance dist1, dist3, dist4;
    dist1.getdist();
    Distance dist2(5, 5.0);
    dist3 = dist1 - dist2;
    cout << "dist1 = "; dist1.showdist(); cout << endl;
    cout << "dist2 = "; dist2.showdist(); cout << endl;
    cout << "dist3 = "; dist3.showdist(); cout << 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
#include <iostream>
#include <iomanip>
#include <process.h>
#include <windows.h>
#include <cstring>
using namespace std;
 
class String
{
private:
    enum { SZ = 80 };
    char str[SZ];
public:
    String()
    {
        strcpy(str, "");
    }
    String(char s[])
    {
        strcpy(str, s);
    }
    void display() const
    {
        cout << str;
    }
    String operator+=(const String ss)
    {
        String temp;
        if (strlen(str) + strlen(ss.str) < SZ)
        {
            strcpy(temp.str, str);
            strcat(temp.str, ss.str);
        }
        else
        {
            cout << "\nПереполнение!";
            exit(1);
        }
        strcpy(str, temp.str);
        return temp;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    String s1 = "\nС Рождеством! ";
    String s2 = "С Новым годом!";
    String s3;
    s3 += s1;
    s3 += s2;
    s3.display();
    cout << endl;
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <process.h>
#include <windows.h>
#include <cstring>
using namespace std;
 
class Time
{
    unsigned __int16 h, m, s;
public:
    Time() : h(0), m(0), s(0)
    {}
    inline Time(const unsigned __int16&, const unsigned __int16&, const unsigned __int16&);
    void show() const
    {
        cout << h << ':' << m << ':' << s << endl;
    }
    Time operator+(const Time& t2) const
    {
        Time temp;
        if (s + t2.s < 60)
            temp.s = s + t2.s;
        else
        {
            temp.m = (s + t2.s) / 60;
            temp.s = (s + t2.s) % 60;
        }
        if (temp.m + m + t2.m < 60)
            temp.m += m + t2.m;
        else
        {
            temp.h = (temp.m + m + t2.m) / 60;
            temp.m = (temp.m + m + t2.m) % 60;
        }
        if (temp.h + h + t2.h < 12)
            temp.h += h + t2.h;
        else
            temp.h = (temp.h + h + t2.h) % 12;
        return temp;
    }
};
 
inline Time::Time(const unsigned __int16& a, const unsigned __int16& b, const unsigned __int16& c) : h(a), m(b), s(c)
{}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Time t1(6, 34, 25), t2(7, 25, 35), t3;
    t1.show(); t2.show();
    t3 = t1 + t2;
    t3.show();
    system("pause");
    return 0;
}


Номер 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
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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <process.h>
using namespace std;
 
class Int
{
    __int32 a;
public:
    Int() : a(0)
    {}
    Int(const __int32& tmp) : a(tmp)
    {}
    inline void show(void) const;
    inline void set(void);
    Int operator+(const Int& t1)
    {
        double z(2147483648);
        if (double(a) + double(t1.a) < -z || double(a) + double(t1.a) > z)
        {
            cout << "Переполнение!" << endl;
            system("pause");
            exit(1);
        }
        return Int(a + t1.a);
    }
    Int operator-(const Int& t1)
    {
        double z(2147483648);
        if (double(a) - double(t1.a) < -z || double(a) - double(t1.a) > z)
        {
            cout << "Переполнение!" << endl;
            system("pause");
            exit(1);
        }
        return Int(a - t1.a);
    }
    Int operator*(const Int& t1)
    {
        double z(2147483648);
        if (double(a) * double(t1.a) < -z || double(a) * double(t1.a) > z)
        {
            cout << "Переполнение!" << endl;
            system("pause");
            exit(1);
        }
        return Int(a * t1.a);
    }
    Int operator/(const Int& t1)
    {
        double z(2147483648);
        if (double(a) / double(t1.a) < -z || double(a) / double(t1.a) > z)
        {
            cout << "Переполнение!" << endl;
            system("pause");
            exit(1);
        }
        return Int(a / t1.a);
    }
};
 
inline void Int::set(void)
{
    cout << "Введите значение поля:" << endl;
    cin >> a;
}
 
inline void Int::show(void) const
{
    cout << a << endl;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Int a, b, c;
    a.set(); b.set();
    c = a + b; c.show();
    c = a - b; c.show();
    c = a * b; c.show();
    c = a / b; c.show();
    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
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
#include <iostream>
#include <iomanip>
#include <process.h>
#include <windows.h>
#include <cstring>
using namespace std;
 
class Time
{
    unsigned __int16 h, m, s;
public:
    Time() : h(0), m(0), s(0)
    {}
    inline Time(const unsigned __int16&, const unsigned __int16&, const unsigned __int16&);
    void show() const
    {
        cout << h << ':' << m << ':' << s << endl;
    }
    Time operator++()
    {
        return Time(h, h, ++s);
    }
    Time operator++(int)
    {
        return Time(h, h, s++);
    }
    Time operator--()
    {
        return Time(h, h, --s);
    }
    Time operator--(int)
    {
        return Time(h, h, s--);
    }
    Time operator+(const Time& t2) const
    {
        Time temp;
        if (s + t2.s < 60)
            temp.s = s + t2.s;
        else
        {
            temp.m = (s + t2.s) / 60;
            temp.s = (s + t2.s) % 60;
        }
        if (temp.m + m + t2.m < 60)
            temp.m += m + t2.m;
        else
        {
            temp.h = (temp.m + m + t2.m) / 60;
            temp.m = (temp.m + m + t2.m) % 60;
        }
        if (temp.h + h + t2.h < 12)
            temp.h += h + t2.h;
        else
            temp.h = (temp.h + h + t2.h) % 12;
        return temp;
    }
};
 
inline Time::Time(const unsigned __int16& a, const unsigned __int16& b, const unsigned __int16& c) : h(a), m(b), s(c)
{}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Time t1(6, 34, 25), t2(7, 25, 35), t3;
    t1.show(); t2.show();
    t3 = t1 + t2;
    t3.show();
    ++t3;
    t3.show();
    --t3;
    t3.show();
    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
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
#include <iostream>
#include <iomanip>
#include <process.h>
#include <windows.h>
#include <cstring>
using namespace std;
 
class Time
{
    unsigned __int16 h, m, s;
public:
    Time() : h(0), m(0), s(0)
    {}
    inline Time(const unsigned __int16&, const unsigned __int16&, const unsigned __int16&);
    void show() const
    {
        cout << h << ':' << m << ':' << s << endl;
    }
    Time operator++()
    {
        return Time(h, m, ++s);
    }
    Time operator++(int)
    {
        return Time(h, m, s++);
    }
    Time operator--()
    {
        return Time(h, m, --s);
    }
    Time operator--(int)
    {
        return Time(h, m, s--);
    }
    Time operator+(const Time& t2) const
    {
        Time temp;
        if (s + t2.s < 60)
            temp.s = s + t2.s;
        else
        {
            temp.m = (s + t2.s) / 60;
            temp.s = (s + t2.s) % 60;
        }
        if (temp.m + m + t2.m < 60)
            temp.m += m + t2.m;
        else
        {
            temp.h = (temp.m + m + t2.m) / 60;
            temp.m = (temp.m + m + t2.m) % 60;
        }
        if (temp.h + h + t2.h < 12)
            temp.h += h + t2.h;
        else
            temp.h = (temp.h + h + t2.h) % 12;
        return temp;
    }
    Time operator-(const Time& t2)
    {
        Time temp;
        if (s - t2.s >= 0)
            temp.s = s - t2.s;
        else
        {
            temp.s = s - t2.s + 60;
            temp.m--;
        }
        if (m - t2.m >= 0)
            temp.m += m - t2.m;
        else
        {
            temp.m = m - t2.m + 60;
            temp.h--;
        }
        temp.h += h - t2.h;
        return temp;
    }
    Time operator*(const float& tmp1)
    {
        __int32 tmp = int(tmp1 * (s + 60 * m + 3600 * h));
        s = tmp % 60; tmp -= s;
        m = tmp / 60 % 60; tmp -= m;
        h = tmp % 12;
        return Time(h, m, s);
    }
};
 
inline Time::Time(const unsigned __int16& a, const unsigned __int16& b, const unsigned __int16& c) : h(a), m(b), s(c)
{}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Time t1(1, 30, 20), t2(7, 25, 35), t3;
    t1.show(); t2.show();
    t3 = t1 + t2;
    t3.show();
    ++t3;
    t3.show();
    --t3;
    t3.show();
    t3 = t3 - t2;
    t3.show();
    Time t4(12, 0, 0);
    t4 = t3 * 2.1;
    t4.show();
    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
130
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
using namespace std;
 
class fraction
{
    __int32 a, b;
public:
    fraction() : a(0), b(0)
    {}
 
    fraction(__int32 c, __int32 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)
    {
        __int16 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 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
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <sstream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
 
class bMoney
{
    static const __int16 MAX = 80;
    char arr[MAX];
    long double money;
public:
    bMoney() : money(0)
    {
        arr[0] = 0;
    }
    explicit bMoney(const long double& tmp) : money(tmp)
    {}
    void ldtoms(long double& tmp)
    {
        stringstream ss;
        ss << fixed << setprecision(3) << tmp;
        ss >> arr;
        char tmp1[MAX], tmp2[MAX]; int count(0);
        for (int i(0); arr[i] != 0; i++)
        {
            if (arr[i] != '.') count = i; else break;
        }
        for (int i(0); i <= count; i++)
        {
            tmp1[i] = arr[i];
            if (!(count - i)) tmp1[i + 1] = 0;
        }
        for (int i(count + 1), j(0); arr[i] != 0; i++, j++)
        {
            tmp2[j] = arr[i];
            if (!(strlen(arr) - 1 - i)) tmp2[j + 1] = 0;
        }
        string tmp3(tmp1), tmp4(tmp2);
        reverse(tmp3.begin(), tmp3.end());
        for (int i(0); i <= count; i++)
        if (!((i + 1) % 4)) tmp3.insert(i, " ");
        reverse(tmp3.begin(), tmp3.end());
        tmp3.insert(0, "$ ");
        cout << "\nДенежная сумма в строковом формате:\n" << tmp3 + tmp4 << '\n' << endl;
    }
 
    void operator+(const bMoney& tmp1) const
    {
        bMoney tmp;
        long double tmp2(money + tmp1.money);
        tmp.ldtoms(tmp2);
    }
 
    void operator-(const bMoney& tmp1) const
    {
        bMoney tmp;
        long double tmp2(money - tmp1.money);
        tmp.ldtoms(tmp2);
    }
 
    void operator*(const long double& tmp1) const
    {
        bMoney tmp;
        long double tmp2(money * tmp1);
        tmp.ldtoms(tmp2);
    }
 
    void operator/(const bMoney& tmp1) const
    {
        bMoney tmp;
        long double tmp2(money / tmp1.money);
        tmp.ldtoms(tmp2);
    }
 
    void operator/(const long double& tmp1) const
    {
        bMoney tmp;
        long double tmp2(money / tmp1);
        tmp.ldtoms(tmp2);
    }
 
    void mstold(char temp[])
    {
        for (unsigned int i(0), j(0); i < strlen(temp); i++)
        {
            switch (temp[i])
            {
            case '0':
                arr[j] = temp[i]; j++;
                break;
            case '1':
                arr[j] = temp[i]; j++;
                break;
            case '2':
                arr[j] = temp[i]; j++;
                break;
            case '3':
                arr[j] = temp[i]; j++;
                break;
            case '4':
                arr[j] = temp[i]; j++;
                break;
            case '5':
                arr[j] = temp[i]; j++;
                break;
            case '6':
                arr[j] = temp[i]; j++;
                break;
            case '7':
                arr[j] = temp[i]; j++;
                break;
            case '8':
                arr[j] = temp[i]; j++;
                break;
            case '9':
                arr[j] = temp[i]; j++;
                break;
            case '.':
                arr[j] = temp[i]; j++;
                break;
            }
            if (!(strlen(temp) - i - 1))
                arr[j] = 0;
        }
        cin.clear();
        cin.sync();
        money = stold(arr);
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch = getche())
    {
        const __int16 MAX(80);
        bMoney t1, t2;
        char tmp1[MAX], tmp2[MAX];
        if (ch != 'z') cout << '\n' << endl;
        cout << "Введите 1-ую денежную строку:" << endl;
        cin.get(tmp1, MAX);
        t1.mstold(tmp1);
        cout << "\nВведите 2-ую денежную строку:" << endl;
        cin.get(tmp2, MAX);
        t2.mstold(tmp2);
        cout << "\nВведите вещественное число:" << endl;
        long double temp123; cin >> temp123;
        cout << "\nbMoney = bMoney + bMoney";
        t1 + t2;
        cout << "bMoney = bMoney - bMoney";
        t1 - t2;
        cout << "bМоnеу = bMoney * long double";
        t1 * temp123;
        cout << "long double = bMoney / bMoney";
        t1 / t2;
        cout << "bMoney = bMoney / long double";
        t1 / temp123;
        cout << "Повторить? (1 - да. 0 - нет.) ";
    }
    cout << '\n' << endl;
    system("pause");
    return 0;
}


Yandex
Объявления
14.02.2015, 14:59     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
Ответ Создать тему
Опции темы

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