Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/389: Рейтинг темы: голосов - 389, средняя оценка - 4.90
ZarinZomanu4
9 / 9 / 0
Регистрация: 27.05.2013
Сообщений: 93
1

Решение всех задач из учебника Стивена Прата

23.03.2015, 12:20. Просмотров 78678. Ответов 211
Метки нет (Все метки)

Здравствуйте!Решил выложить свои решения задач книги С. Прата. Код ни в коем случае не претендует на звание эталонного, если есть замечания с радостью выслушаю и приму к сведению.

Глава 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
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
int main ()
{ 
    using namespace std;
    const int ArSize = 20;
    char Fname[ArSize];
    char Lname[ArSize];
    int age;
    char bit;
    //enum gradeW {A,B,C};
    cout<<"what is your first name "<<endl;
    cin.getline(Fname,ArSize);
    cout<<"what is your last name "<<endl;
    cin.getline(Lname,ArSize);
    cout<<"what letter grade do you deserve(A,B,C) "<<endl;
    cin>>bit;
    cout<<"what is your age "<<endl;
    cin>> age ;
    cin.get();
    cout<<"Name: "<<Lname<<" "<<Fname<<endl;
    cout<<"Age: "<<age<<endl;
    switch (bit)
        {case 'A':
            cout<<"Grade B "<<endl;
            break;
        case 'B':
            cout<<"Grade C"<<endl;
            break;
        case 'C':
            cout<<"Grade D"<<endl;
            break;
        default: cout<<"wrong"<<endl;}
    cin.get();
    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
#include <iostream>
#include <string>
int main ()
{ 
    using namespace std;
    string Fname;
    string Lname;
    int age;
    char bit;
    cout<<"what is your first name "<<endl;
    getline(cin,Fname);
    cout<<"what is your last name "<<endl;
    getline(cin,Lname);
    cout<<"what letter grade do you deserve(A,B,C) "<<endl;
    cin>>bit;
    cout<<"what is your age "<<endl;
    cin>> age ;
    cin.get();
    cout<<"Name: "<<Lname<<" "<<Fname<<endl;
    cout<<"Age: "<<age<<endl;
    switch (bit)
        {case 'A':
            cout<<"Grade B "<<endl;
            break;
        case 'B':
            cout<<"Grade C"<<endl;
            break;
        case 'C':
            cout<<"Grade D"<<endl;
            break;
        default: cout<<"dsfsfsfsfsd"<<endl;}
    cin.get();
    return 0;
  }

Задача №3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
//#include <string>
int main ()
{ 
    using namespace std;
    const int ArSize = 20;
    char Fname[ArSize];
    char Lname[ArSize];
    cout<<"Enter your first name "<<endl;
    cin.getline(Fname,ArSize);
    cout<<"Enter your last name "<<endl;
    cin.getline(Lname,ArSize);
    cout<<"Name: "<<Lname<<",  "<<Fname<<endl;
    cin.get();
    return 0;
  }

Задача №5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
struct CandyBar
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{ 
    using namespace std;
    CandyBar snack={"Mocha Much",2.3,350};
    cout<<"Struct )))) "<<snack.Name<<snack.netto<<"     "<<snack.Ccal<<endl;
    cin.get();
    return 0;
  }

Задача №6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
struct CandyBar
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{ 
    using namespace std;
    CandyBar snack[3]={
        {"Mocha Much",2.3,350},
        {"sfdsfsdf",2.45,435},
        {"bnderlogi", 2.12 , 777}};
 
    cout<<"Struct  "<<snack[2].Name<<"    "<<snack[2].netto<<"   "<<snack[0].Ccal<<endl;
    cin.get();
    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
#include <iostream>
struct Pizza
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{   using namespace std;
    Pizza Peper;
    cout<<"Enter Name:"<<endl;
    cin.getline (Peper.Name,20);
    cout<<"Enter diametr:"<<endl;
    cin>>Peper.netto;
    cout<<"Enter ves:"<<endl;
    cin>>Peper.Ccal;
    cout<<"Pizza: "<<Peper.Name<<endl<<"Diametr: "<<Peper.netto<<endl<<"Ves: "<<Peper.Ccal<<endl;
    cin.get();
    cin.get();
    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
#include <iostream>
#include <string>
struct Pizza
{
    std :: string Name ;
    double netto;
    int Ccal;
    };
int main ()
{   using namespace std;
    Pizza *pz =new Pizza;
    cout<<"Enter diametr:"<<endl;
    cin>>(*pz).netto;
    cout<<"Enter Name:"<<endl;
    cin>>(*pz).Name ;
    cout<<"Enter ves:"<<endl;
    cin>>(*pz).Ccal;
    cout<<"Pizza: "<<(*pz).Name<<endl;
    cout<<"Diametr: "<<(*pz).netto<<endl<<"Ves: "<<(*pz).Ccal<<endl;
    system ("pause");
    delete pz;
    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
#include <iostream>
#include <string>
struct CandyBar
    {
        std::string Name  ;
        double netto;
        int Ccal;
    };
void main ()
{ 
    using namespace std;
    CandyBar *bar= new CandyBar[3];
    bar[0].Name="Mocha Much";
    bar[0].netto=2.3;
    bar[0].Ccal=350;
    bar[1].Name="sfdsfsdf";
    bar[1].netto=2.45;
    bar[1].Ccal=435;
    bar[2].Name="bnderlogi";
    bar[2].netto=2.12;
    bar[2].Ccal=777;
    cout<<"Struct  "<<bar[0].Name<<"    "<<bar[0].netto<<"   "<<bar[0].Ccal<<endl;
    system("pause");
    delete bar;
          }

Задача №10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
int main ()
{ 
    using namespace std;
    int bar[3];
    cout<<"Vvedite rezyltat 1 "<<endl;
    cin>>bar[0];
    cout<<"Vvedite rezyltat 2 "<<endl;
    cin>>bar[1];
    cout<<"Vvedite rezyltat 3 "<<endl;
    cin>>bar[2];
    int Sr=(bar[0]+bar[1]+bar[2])/3;
    cout<<"Rezyltat  "<<bar[0]<<"    "<<bar[1]<<"   "<<bar[2]<<"  Srednee "<<Sr<<endl;
    system("pause");
}


Задачи из глав с 4 о 10, решенные gru74ik
8
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2015, 12:20
Ответы с готовыми решениями:

Пример с книги Стивена Прата (Язык программирования с++). Расхождение в ответе
В книге один ответ. У меня другой выходит (На русский перевод, не обращайте внимание) Сама...

Решение задач из учебника Томшина
Я являюсь студентом 1-го курса, и нам дали задачи по c# которые необходимо решить. Задачи взяты из...

Понятен материал учебника, но не получается самостоятельное решение задач
Здравствуйте. Читаю книжку Дейтелов, переписываю код, который дан в учебнике, потом читаю...

Нюансы синтаксиса: классы, список инициализации (неясная строка из учебника Стивена Праты)
Вот сам класс #ifndef TABTENN0_H_ #define TABTENN0_H_ #include &lt;string&gt; using std ::...

211
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
18.02.2016, 19:29 81
Kerry_Jr, пожалуй, твой вариант лучше

Добавлено через 5 минут
Цитата Сообщение от skales007 Посмотреть сообщение
Ну и по теме: о данной вещи " for (auto & elem : str) " не знал, в книжке пока не встречал.
Невнимательно читали. Про auto в главе 3 (стр. 126). Про цикл for основанный на диапазоне в главе 5 (стр. 239). Про ссылки - глава 8 (стр. 371).

Хотя, справедливости ради, соглашусь, совмещение всех этих возможностей обсуждается дальше - в главе 16 (стр. 903).
0
skales007
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
19.02.2016, 22:44 82
gru74ik, В Упражнении 6 главы 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
#include <iostream>
#include <cstring>
template <typename T>
T maxn(T* arr, int arr_size)
{
    T max = arr[0];
    for (int i = 1; i < arr_size; i++)
        if (arr[i] > max) max = arr[i];
    return max;
}
const char* maxn(const char* arr[], int arr_size);
 
 
int main()
{
    int arr_int[6] = {6, 23, 63, 23, 134, 94};
    double arr_double[4] = {2.54, 15.353, 1.324, 7.656};
    const char* arr_char[5] = {"Petya", "Vanya", "Stepan", "Georgiy", "Deniska"};
    std::cout << "Max value (int): " << maxn(arr_int, 6) << std::endl;
    std::cout << "Max value (double): " << maxn(arr_double, 4) << std::endl;
    std::cout << "The longest string: " << maxn(arr_char, 5) << std::endl;
    return 0;
}
 
const char* maxn(const char* arr[], int arr_size)
{
    int maxlen = 0;
    for(int i = 0; i < arr_size; i++)
    {
        if(strlen(arr[i]) > strlen(arr[maxlen]))
            maxlen = i;
    }
    return *(arr + maxlen);
}
Прошу сказать ошибки, либо просто замечания/поправки (сугубо на Ваш взгляд).
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
20.02.2016, 06:30 83
skales007, всё хорошо у Вас получилось, на мой взгляд. Я бы вставил несколько пустых строк для лучшей читаемости кода (после 2, 10, 18 и 21 строки), но это уже личные предпочтения в оформлении кода.
0
Zashibable
0 / 0 / 0
Регистрация: 05.01.2016
Сообщений: 16
20.02.2016, 18:57 84
Упражнение 9 из главы 5 выполнено неверно. Там сравнивается строка со словом для выхода из цикла. Не знаю как точно это решить(только учусь). Наверное как-то через указатели и массивы или же функции класса string.
0
Zashibable
0 / 0 / 0
Регистрация: 05.01.2016
Сообщений: 16
23.02.2016, 11:40 85
Вообщем в итоге решил я упражнение 9 к 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
#include <iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
    string str,str2,str3,str4,str5;
    string str1 = "done";
    int total;
    cout << "Enter words (enter word "done" to exit) ";
    getline(cin, str);
    for (int i = 0;(str2+str3+str4+str5)!= str1;i++)
    {
        str2 = str[i];
        str3 = str[i + 1];
        str4 = str[i + 2];
        str5 = str[i + 3];
        if(str[i]==' ')
        total++;
    }
    cout << "You entered " << total << " words." << endl;
    system("pause");
    return 0;
}
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
23.02.2016, 22:09 86
Цитата Сообщение от Zashibable Посмотреть сообщение
Получилось нечто
В точку. Получилось нечто. Нечто некрасивое, увы.

Вот, на мой взгляд, нормальный вариант:
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>
#include <string>
 
int main()
{
    std::string word;
 
    std::cout
    << "Please input words one by one "
    << "and press Enter after each.\n"
    << "To quit type 'exit':\n";
 
    getline( std::cin, word );
 
    int counter = 0;
    for ( ; word != "exit"; ++counter )
        getline( std::cin, word );
 
    std::cout
    << "\nYou have entered "
    << counter
    << " words and 'exit' to quit.\n";
 
    return 0;
}
Добавлено через 4 минуты
Ну или так с циклом while:

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>
#include <string>
 
int main()
{
    std::string word;
 
    std::cout
    << "Please input words one by one "
    << "and press Enter after each.\n"
    << "To quit type 'exit':\n";
 
    getline( std::cin, word );
 
    int counter = 0;
    while ( word != "exit" )
    {
        getline( std::cin, word );
        ++counter;
    }
 
    std::cout
    << "\nYou have entered "
    << counter
    << " words and 'exit' to quit.\n";
 
    return 0;
}
0
Zashibable
0 / 0 / 0
Регистрация: 05.01.2016
Сообщений: 16
23.02.2016, 22:36 87
gru74ik, Вы похоже не поняли в чем проблема. Приведенные выше программы не работают. Ибо например предложение "To quit type exit" никогда не будет равно "exit". Они работают если ввести просто слово "exit".
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
24.02.2016, 11:03 88
Zashibable, да, похоже, Вы правы. Кажется, я неправильно понял задание. Что не отменяет того факта, что Ваш код ужасен. Вечером после работы напишу свой вариант.
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
24.02.2016, 13:36 89
Цитата Сообщение от Zashibable Посмотреть сообщение
Приведенные выше программы не работают
Мои программы работают, в отличие от Вашей. Вы свой-то код компилировать пытались? Цифры в консоли видели какие получаются? Вот результат работы Вашего кода:
0
Миниатюры
Решение всех задач из учебника Стивена Прата  
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
24.02.2016, 13:42 90
Другой вопрос, что господин Прата крайне противоречиво сформулировал задание. С одной стороны, он просит, чтобы "слова вводились по одному за раз", что предполагает нажатие клавиши Enter после каждого слова. С другой, он показывает пример, как должен выглядеть вывод, в котором слова следуют друг за другом через пробел, и слово для выхода не заключительное, после него пользователь может ввести ещё произвольное количество слов, а значит нужен какой-то парсинг строки, разбиение её на слова, нахождение контрольного слова (done) и подсчёт всех слов в строке до done.
0
Zashibable
0 / 0 / 0
Регистрация: 05.01.2016
Сообщений: 16
24.02.2016, 22:41 91
Цитата Сообщение от gru74ik Посмотреть сообщение
Мои программы работают, в отличие от Вашей. Вы свой-то код компилировать пытались? Цифры в консоли видели какие получаются? Вот результат работы Вашего кода:
Миниатюры
Программа работает. Просто почему-то пропустился обратный слэш при копировании кода в 10 строке около слова done. Слэш и сейчас ставиться не хочет.
Поменял вот так.
C++
1
cout << "Enter words (enter word 'done' to exit) ";
Похоже форум кривой раз вы тоже в кавычки не ставите слово на выходе или нужно по-другому код выводить.
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
25.02.2016, 06:25 92
Цитата Сообщение от Zashibable Посмотреть сообщение
форум кривой
Форум не кривой. Это правило языка - в строковых литералах для отображения кавычек их необходимо экранировать обратным слэшем. Более подробно в Гугле по запросу управляющие последовательности в C++.
Причём, приведённый мной на скрине результат работы Вашего кода - это уже с экранированными кавычками (иначе код вовсе не компилируется).
0
Zashibable
0 / 0 / 0
Регистрация: 05.01.2016
Сообщений: 16
25.02.2016, 07:00 93
Цитата Сообщение от gru74ik Посмотреть сообщение
Форум не кривой. Это правило языка - в строковых литералах для отображения кавычек их необходимо экранировать обратным слэшем. Более подробно в Гугле по запросу управляющие последовательности в C++.
Причём, приведённый мной на скрине результат работы Вашего кода - это уже с экранированными кавычками (иначе код вовсе не компилируется).
Решение всех задач из учебника Стивена Прата

У меня работает.
Попробуйте вставить код с экранированными кавычками и посмотрим вставится ли он корректно
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
25.02.2016, 08:57 94
Zashibable, вот мой вариант с парсингом строки на предмет пробелов (предполагается, что пользователь будет вводить слова без знаков препинания, разделяя слова одним пробелом, как в примере Праты):
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
#include <iostream>
#include <string>
 
bool contains_exitword( const std::string & phrase, const std::string & exitword )
{
    std::size_t found = phrase.find( exitword );
    return found != std::string::npos;
}
 
size_t count_words_in_phrase( std::string & phrase )
{
    phrase = phrase + ' ';
 
    size_t count = 0;
 
    std::string temp = "";
    for ( size_t i = 0, ps = phrase.size(); i < ps; ++i )
    {
        if ( phrase[i] != ' ' )
        {
            temp = temp + phrase[i];
        }
        else
        {
            if ( temp != "done" )
            {
                ++count;
                temp = "";
            }
            else
            {
                break;
            }
        }
    }
 
    return count;
}
 
int main()
{
    std::string phrase;
    size_t total_count = 0;
 
    while ( !contains_exitword( phrase, "done" ) )
    {
        std::cout << "Enter words (to stop, type the word done):\n";
        getline( std::cin, phrase );
        total_count += count_words_in_phrase( phrase );
    }
 
    std::cout
    << "\nYou entered a total of "
    << total_count
    << " words.";
 
    return 0;
}
Скорее всего, можно как-то проще. Надо перечитать ещё раз 5 главу, потому как читал я её давненько.

Добавлено через 3 минуты
Цитата Сообщение от Zashibable Посмотреть сообщение
Попробуйте вставить код с экранированными кавычками и посмотрим вставится ли он корректно
Аааа... вот Вы о чём. Да, есть такой глюк.

Добавлено через 1 час 22 минуты
Цитата Сообщение от Zashibable Посмотреть сообщение
У меня работает.
А у меня Ваш пример не работает.

Попробуйте в своей программе сделать ввод в точности как в примере у Праты:
anteater birthday category dumpsterEnter
envy finagle geometry done for sureEnter
Попробуйте ещё такой ввод (он тоже укладывается в условие задачи):
anteater birthday category dumpster doneEnter
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
25.02.2016, 08:57 95
Цитата Сообщение от gru74ik Посмотреть сообщение
Скорее всего, можно как-то проще. Надо перечитать ещё раз 5 главу,
Да уж, ну я и намудрил. Вот что требовалось сделать:
Глава 5. Упражнение 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
#include <iostream>
#include <string>
 
int main()
{
    std::string str;
 
    int count = 0;
 
    std::cout << "Enter words (to stop, type the word done):\n";
    std::cin >> str;
 
    while (str != "done")
    {
        ++count;
        std::cin >> str;
    }
 
    std::cout
    << "\nYou entered a total of "
    << count
    << " words.";
 
    return 0;
}
0
skales007
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
06.03.2016, 12:34 96
Глава 9 Упражнение 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
#include <iostream>
#include "golf.h"
 
int ArSize = 5;
 
int main()
{
    golf players[5];
 
    setgolf(players[0], "Ann Birdfree", 24);
 
    int count = 1;
    while(count < ArSize && setgolf(players[count]) == 1) // присваиваем структуре имя игрока и его гандикап, одновременно проверяя кол-во игроков
        count++; // счетчик игроков ( <=5 )
 
    for(int i = 0; i < count; i++)
        showgolf(players[i]);       //выводим на экран имена игроков и их гандикап
 
    for(int i = 0; i < count; i++)
        handicap(players[i], i);    //вносим изменения
 
    std::cout << "\nAfter edit handicap: ";
 
    for(int i = 0; i < count; i++)
        showgolf(players[i]);       //снова выводим на экран имена игроков и их гандикап
 
    return 0;
}
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
#include <iostream>
#include "golf.h"
#include <cstring> // для strcpy()
 
void setgolf(golf &g, const char *name, int hc)
{
    strcpy(g.fullname, name);
    g.handicap = hc;
}
 
int setgolf(golf &g)
{
    using namespace std;
 
    char ch;
    int count = 0;
 
    cout << "Enter name (empty string for quit): ";
    while(cin.get(ch) && ch != '\n' && count < Len) // вводим строку, одновременно проверяя не нажата ли клавиша "Enter" и не закончился ли массив
    {
        g.fullname[count] = ch;     // копируем введенную строку в массив
        count++;                    // обновляем счетчик введенных символов
    }
 
    if(count != 0)
    {
        g.fullname[count++] = '\0'; // добавляем символ окончания строки для верного ее вывода на экран
        cout << "Enter handicap: ";
        cin >> g.handicap;
        cin.sync();                 // избавляемся от символа переноса строки
        return 1;
    }
    else return 0;
}
void handicap(golf &g, int hc)
{
    g.handicap = hc;
}
void showgolf(const golf &g)
{
    using namespace std;;
    cout << "\nFullname: " << g.fullname;
    cout << "\nHandicap: " << g.handicap << endl;
}


Глава 9 Упражнение 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
#include <iostream>
#include <string>
 
using std::cout;
using std::cin;
using std::string;
 
void strcount(const string);
 
int main()
{
    string input;
 
    getline(cin, input);
    while(input != "")
    {
        strcount(input);
        cout << "Enter a line: \n";
        getline(cin, input);
    }
    cout << "Bye!\n";
 
    return 0;
}
 
void strcount(const string str)
{
    int count = 0;
    static int total = 0;
 
    cout << str << " contains ";
 
    for(int i = 0; i < str.size(); i++)
    {
        if(str[i] != ' ')
            count++;
    }
    total += count;
    cout << count << " characters\n";
    cout << total << " characters\n";
}


Добавлено через 13 часов 56 минут
Глава 9 Упражнение 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
#include <iostream>
#include <cstring>
#include <new>
 
const int ArSize = 20;
const int BufSize = 100;
 
struct chaff
{
    char dross[ArSize];
    int slag;
};
void setchaff(chaff &obj, const char *dross, int slag);
void showchaff(chaff &obj);
 
char buffer[BufSize];
 
int main()
{
    ////////////////////BUFFER/////////////////////////
    chaff *mass = new (buffer) chaff [2];
    setchaff(mass[0], "Hello world!", 100);
    setchaff(mass[1], "Goodnight friend!", 200);
 
    showchaff(mass[0]);
    showchaff(mass[1]);
 
    ////////////////WITHOUT BUFFER//////////////////////
    chaff *arr = new chaff [2];
    setchaff(arr[0], "Hello world!", 100);
    setchaff(arr[1], "Goodnight friend!", 200);
 
    showchaff(arr[0]);
    showchaff(arr[1]);
 
    delete [] arr;
    return 0;
}
 
void setchaff(chaff &obj, const char *dross, int slag)
{
    strcpy(obj.dross, dross); // копируем строку в массив
    obj.slag = slag;
}
void showchaff(chaff &obj)
{
    std::cout << "dross: " << obj.dross;             //отображаем оба
    std::cout << "\nslag: " << obj.slag << std::endl;  //значения
}


Глава 9 Упражнение 4

В задании сказано минимальное значение присвоить массиву "sales[]" (мне это показалось странном), поэтому минимальное число продаж я все-таки присвоил переменной "min" структуры.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// header.h
namespace SALES
{
    const int QUARTERS = 4;
    struct Sales
    {
        double sales[QUARTERS];
        double average;
        double max;
        double min;
    };
 
    void setSales(Sales &s, const double ar[], int n = QUARTERS); // параметр по умолчанию "n"
    void setSales(Sales &s);
    void showSales(const Sales &s);
}
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
// sales.cpp
#include <iostream>
#include "header.h"
 
namespace SALES
{
    void setSales(Sales &s, const double ar[], int n)
    {
        double sum = 0;
        s.min = ar[0];
        s.max = ar[0];
 
        int i;
        for(i = 0; i < n; i++)  // присваиваем
        {
            s.sales[i] = ar[i]; // массиву структуры значения
            if(ar[i] > s.max)
                s.max = ar[i];  // максимальное значение
            if(ar[i] < s.min)
                s.min = ar[i];  // минимальное значение
            sum += ar[i];       // находим сумму всех значений
        }
        s.average = sum/i;      // находим и присваиваем срежнее значение
 
        for( ; i < QUARTERS; i++)
            s.sales[i] = 0;      // заполняем оставшиеся элементы нулями
    }
 
    void setSales(Sales &s)
    {
        for(int i = 0; i < QUARTERS; i++)
        {
            std::cout <<  (i+1) << ". Enter the number of sales for the quarter: ";
            std::cin >> s.sales[i];
        }
        std::cout << std::endl;
 
        s.min = s.sales[0];
        s.max = s.sales[0];
 
        double sum = 0;
        int i;
        for(i = 0; i < QUARTERS; i++)
        {
            if(s.sales[i] > s.max)
                s.max = s.sales[i];
            if(s.sales[i] < s.min)
                s.min = s.sales[i];
            sum += s.sales[i];
        }
        s.average = sum/i;
    }
    void showSales(const Sales &s)
    {
        std::cout << "Sales for each quarter: ";
        for(int i = 0; i < QUARTERS; i++)
            std::cout << s.sales[i] << ' ';
        std::cout << std::endl;
        std::cout << "Min sales: " << s.min << std::endl;
        std::cout << "Max sales: " << s.max << std::endl;
        std::cout << "Average sales: " << s.average << std::endl;
        std::cout << std::endl;
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// main.cpp
#include "header.h"
 
int main()
{
 
 
    SALES::Sales one, two;
    double ArSales[3] = {10, 20, 30};
 
    SALES::setSales(one, ArSales, 3);
    SALES::setSales(two);
 
    SALES::showSales(one);
    SALES::showSales(two);
 
    return 0;
}
0
Kail
1 / 1 / 0
Регистрация: 04.02.2011
Сообщений: 49
05.04.2016, 21:25 97
Королевство Нейтрония, где денежной единицей служит тварп, использует
следующую шкалу налогообложения:
первые 5 000 тварпов —
налог 0%
следующие 10 000 тварпов —
налог 10%
следующие 20 000 тварпов —
налог 15%
свыше 35 000 тварпов —
налог 20%
Например, если некто зарабатывает 38 000 тварпов, то он должен заплатить
налогов 5000 х 0,00 + 10000 х 0,10 + 20000 х 0,15 + 3000 х 0,20, или 4 600 тварпов.
Напишите программу, которая использует цикл для запроса доходов и выдачи
подлежащего к выплате налога. Цикл должен завершаться, когда пользователь
вводит отрицательное или нечисловое значение.
*/
Решили задачу Глава 6, упражнение 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 "stdafx.h"
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
    const double a = 1000;
    const double b = 3000;
    const double c = 0.2;
    double z;
    double x = 0;
    cout << "vvedi summu" << endl;
    while (cin >>z && z>=0)
    {
        if (z >= 10000)
        {
            x += a;
        }
        if (z >= 20000)
        {
            x += b;
        }
        if (z >= 35000)
        {
            x += (z - 35000)*c;
        }
        
        cout << "Nalog na summu = " << z << " raven " << x << endl;
        cin >> z;
    }
 
    return 0;
}
0
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
13.05.2016, 19:54 98
Глава 12. Задача 2


файл 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
// string1.h -- fixed and augmented string class definition
 
#define _CRT_SECURE_NO_WARNINGS
#ifndef STRING1_H_
#define STRING1_H_
#include <iostream>
using std::ostream;
using std::istream;
 
class String
{
private:
    char * str;             // pointer to string
    int len;                // length of string
    static int num_strings; // number of objects
    static const int CINLIM = 80;  // cin input limit
public:
// constructors and other methods
    String(const char * s); // constructor
    String();               // default constructor
    String(const String &); // copy constructor
    ~String();              // destructor
    int length () const { return len; }
// overloaded operator methods    
    String & operator=(const String &);
    String & operator=(const char *);
    char & operator[](int i);
    const char & operator[](int i) const;
// overloaded operator friends
    friend bool operator<(const String &st, const String &st2);
    friend bool operator>(const String &st1, const String &st2);
    friend bool operator==(const String &st, const String &st2);    
    friend ostream & operator<<(ostream & os, const String & st);
    friend String operator+(const char *a, const String & b);
    friend String operator+(const String &a, const String & b);
    friend istream & operator>>(istream & is, String & st);
    void stringup();
    void stringlow();
    int has(char a);
// static function
    static int HowMany();
};
#endif


Файл 2:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
// string1.cpp -- String class methods
#define _CRT_SECURE_NO_WARNINGS
#include <cstring>                 // string.h for some
#include "string1.h"       
#include <cctype>
using std::cin;
using std::cout;
 
// initializing static class member
 
int String::num_strings = 0;
 
// static method
int String::HowMany()
{
    return num_strings;
}
 
// class methods
String::String(const char * s)     // construct String from C string
{
    len = std::strlen(s);          // set size
    str = new char[len + 1];       // allot storage
    std::strcpy(str, s);           // initialize pointer
    num_strings++;                 // set object count
}
 
String::String()                   // default constructor
{
    len = 4;
    str = new char[1];
    str[0] = '\0';                 // default string
    num_strings++;
}
 
String::String(const String & st)
{
    num_strings++;             // handle static member update
    len = st.len;              // same length
    str = new char [len + 1];  // allot space
    std::strcpy(str, st.str);  // copy string to new location
}
 
String::~String()                     // necessary destructor
{
    --num_strings;                    // required
    delete [] str;                    // required
}
 
// overloaded operator methods    
 
    // assign a String to a String
String & String::operator=(const String & st)
{
    if (this == &st)
        return *this;
    delete [] str;
    len = st.len;
    str = new char[len + 1];
    std::strcpy(str, st.str);
    return *this;
}
 
    // assign a C string to a String
String & String::operator=(const char * s)
{
    delete [] str;
    len = std::strlen(s);
    str = new char[len + 1];
    std::strcpy(str, s);
    return *this;
}
 
    // read-write char access for non-const String
char & String::operator[](int i)
{
    return str[i];
}
 
    // read-only char access for const String
const char & String::operator[](int i) const
{
    return str[i];
}
 
// overloaded operator friends
 
bool operator<(const String &st1, const String &st2)
{
    return (std::strcmp(st1.str, st2.str) < 0);
}
 
bool operator>(const String &st1, const String &st2)
{
    return st2 < st1;
}
 
bool operator==(const String &st1, const String &st2)
{
    return (std::strcmp(st1.str, st2.str) == 0);
}
 
    // simple String output
ostream & operator<<(ostream & os, const String & st)
{
    os << st.str;
    return os; 
}
 
    // quick and dirty String input
istream & operator>>(istream & is, String & st)
{
    char temp[String::CINLIM];
    is.get(temp, String::CINLIM);
    if (is)
        st = temp;
    while (is && is.get() != '\n')
        continue;
    return is; 
}
 
String operator+(const char *a, const String & b)
{
    String temp;
    delete[] temp.str;
    temp.len = strlen(a) + b.len;
    temp.str = new char[temp.len + 1];
    strcat(strcpy(temp.str, a), b.str);
    return temp;
}
String operator+(const String &a, const String & b) 
{
    String temp;
    delete temp.str;
    temp.len = strlen(a.str) + strlen(b.str);
    temp.str = new char[temp.len + 1];
    strcat(strcpy(temp.str,a.str), b.str);
    return temp;
}
 
void String::stringup() {
    int i = 0;
    while (str[i] != '\0')
    {
        if (islower(str[i]))
            str[i] = toupper(str[i]);
        i++;
    }
}
 
int String::has(char a) {
    strlen(str);
    int b = 0;
    for (int i = 0; i < strlen(str); i++) {
        if (str[i] == a)
            b++;
        }   
    return b;
}
void String::stringlow() {
    int i = 0;
    while (str[i] != '\0')
    {
        if (isupper(str[i]))
            str[i] = tolower(str[i]);
        i++;
    }
}


Файл 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
#include <iostream>
using namespace std;
#include "string1.h"
int main() {
    String s1(" and I am a C++ student");
    String s2 = "Please enter your name: ";// ввод имени
    String s3;
    cout << s2;   // перегруженная операция <<
    cin >> s3;  // перегруженная операция >>
    s2 = "My name is " + s3;
    cout << s2 << ".\n";
    s2 = s2 + s1;
    
    s2.stringup(); // преобразование строки в верхний регистр
    
        cout << "The string \n" << s2 << "\ncontains " << s2.has('A')
        << " 'A' characters in it.\n";
    s1 = "red"; 
    String rgb[3] = { String(s1), String("green"), String("blue"), };
    cout << "Enter the name of a primary color for mixing light: "; // ввод цвета
    String ans;
    bool success = false;
    while (cin >> ans) {
        ans.stringlow(); // преобразование строки в нижний регистр
        for (int i = 0; i < 3; i++) {
            if (ans == rgb[i]) {            
                cout << "That's right! \n";
                success = true;
                break;
            }
        }
 
        if (success)
            break;
        else
            cout << "Try again!" << endl;
    }
        cout << "Bye!" << endl; 
        return 0;
 
}
1
lion12120
0 / 0 / 0
Регистрация: 17.05.2016
Сообщений: 1
17.05.2016, 20:11 99
а есть решение первой задачи 12 главы? выложите, пожалуйста
0
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
20.05.2016, 04:56 100
Глава 13. Задача 1
Файл 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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
 
class Cd {
    char perfomance[50];
    char label[20];
    int selections;
    double playtime;
public:
    Cd(char * s1, char *s2, int n, double x);
    Cd(const Cd &d);
    Cd();
    ~Cd() {};
    virtual void Report() const;
    Cd & operator= (const Cd & d);
};
class Classic : public Cd
{
    char nameSong[50];
public:
    Classic() { Cd::Cd(); nameSong[0] = '\0'; }
    Classic(char*name, char *p, char *l, int s, double pl);
    Classic(const char * n, const Cd & rs);
    void Report() const;
};


Файл 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
#include "test.h"
Cd::Cd(char * s1, char *s2, int n, double x) {
    strcpy(perfomance, s1);
    strcpy(label, s2);
    selections = n;
    playtime = x;
}
 
Cd::Cd(const Cd &d) {
    strcpy(perfomance, d.perfomance);
    strcpy(label, d.label);
    selections = d.selections;
    playtime = d.playtime;
}
Cd::Cd() {
    perfomance[0] = '\0';
    label[0] = '\0';
    selections = 0;
    playtime = 0;
}
void Cd::Report()const {
    using std::cout;
    using std::endl;
    cout << "perfomance: " << perfomance << endl;
    cout << "label: " << label << endl;
    cout << "selections: " << selections << endl;
    cout << "playtime: " << playtime << endl;
}
 
Cd & Cd::operator= (const Cd & d) {
    strcpy(perfomance, d.perfomance);
    strcpy(label, d.label);
    selections = d.selections;
    playtime = d.playtime;
    return *this;
}
 
Classic::Classic(char*name, char *p, char *l, int s, double pl) :Cd(p, l, s, pl) {
    strcpy(nameSong, name);
}
Classic::Classic(const char * n, const Cd & rs) :Cd(rs) {
    strcpy(nameSong, n);
}
void Classic:: Report() const {
    using std::cout;
    using std::endl;
    Cd::Report();
    cout << "Main Song: " << nameSong << endl;
}


Файл 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
#include <iostream>
using namespace std;
#include "test.h"
void Bravo(const Cd & disk);
int main() {
    Cd c1("Beatles", "Capitol", 14, 35.5);
    Classic c2 = Classic("Piano Sonata in B flat, Fantasia in C",
        "Alfred Brendel", "Philips", 2, 57.17);
    Cd *pcd = &c1;
    c1.Report();
    c2.Report();
    cout << "\nusing type cd* pointer to object:\n";
    pcd->Report();
    pcd = &c2;
    pcd->Report();
    cout << "\nCalling a function with a Cd reference argument:\n";
    Bravo(c1);
    Bravo(c2);
    
    cout << "\nTesting assignment: ";
    Classic copy;
    copy = c2;
    copy.Report();
    return 0;
}
void Bravo(const Cd & disk) {
    disk.Report();
}


Добавлено через 2 часа 15 минут
Глава 13. Задача 2.

Файл 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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
 
class Cd {
    char* perfomance;
    char* label;
    int selections;
    double playtime;
public:
    Cd(char * s1, char *s2, int n, double x);
    Cd(const Cd &d);
    Cd();
    ~Cd() {
        delete[] perfomance;
        delete[] label;
    };
    virtual void Report() const;
    Cd & operator= (const Cd & d);
};
class Classic : public Cd
{
    char *nameSong;
public:
    Classic() { Cd::Cd(); nameSong = new char[1]; nameSong[0] = '\0'; }
    ~Classic() { delete[] nameSong; }
    Classic(char*name, char *p, char *l, int s, double pl);
    Classic(const char * n, const Cd & rs);
    void Report() const;
    Classic & operator= (const Classic & d);
};


Файл 2:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "test.h"
Cd::Cd(char * s1, char *s2, int n, double x) {
    
    perfomance = new char[strlen(s1) + 1];
    strcpy(perfomance, s1);
    label = new char[strlen(s2) + 1];
    strcpy(label, s2);
    selections = n;
    playtime = x;
}
 
Cd::Cd(const Cd &d) {
    
    perfomance = new char[strlen(d.perfomance) + 1];
    strcpy(perfomance, d.perfomance);
    label = new char[strlen(d.label) + 1];
    strcpy(label, d.label);
    selections = d.selections;
    playtime = d.playtime;
}
Cd::Cd() {  
    perfomance = new char[1];
    perfomance[0] = '\0';
    label = new char[1];
    label[0] = '\0';
    selections = 0;
    playtime = 0;
}
void Cd::Report()const {
    using std::cout;
    using std::endl;
    cout << "perfomance: " << perfomance << endl;
    cout << "label: " << label << endl;
    cout << "selections: " << selections << endl;
    cout << "playtime: " << playtime << endl;
}
 
Cd & Cd::operator= (const Cd & d) {
    if (this == &d) return *this;
    delete[] perfomance;
    delete[] label;
    perfomance = new char[strlen(d.perfomance) + 1];
    strcpy(perfomance, d.perfomance);
    label = new char[strlen(d.label) + 1];
    strcpy(label, d.label);
    selections = d.selections;
    playtime = d.playtime;
    return *this;
}
Classic & Classic::operator= (const Classic & d) {
    Cd::operator=(d);
    delete[] nameSong;
    nameSong = new char[strlen(d.nameSong) + 1];
    strcpy(nameSong, d.nameSong);
    return *this;
}
Classic::Classic(char*name, char *p, char *l, int s, double pl) :Cd(p, l, s, pl) {
 
    nameSong = new char[strlen(name) + 1];
    strcpy(nameSong, name);
}
Classic::Classic(const char * n, const Cd & rs) :Cd(rs) {
    nameSong = new char[strlen(n) + 1];
    strcpy(nameSong, n);
}
void Classic:: Report() const {
    using std::cout;
    using std::endl;
    Cd::Report();
    cout << "Main Song: " << nameSong << endl;
}


Файл 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
#include <iostream>
using namespace std;
#include "test.h"
 
void Bravo(const Cd & disk);
int main() {
    
        Cd c1("Beatles", "Capitol", 14, 35.5);
        Classic c2 = Classic("Piano Sonata in B flat, Fantasia in C",
            "Alfred Brendel", "Philips", 2, 57.17);
        Cd *pcd = &c1;
        c1.Report();
        c2.Report();
        cout << "\nusing type cd* pointer to object:\n";
        pcd->Report();
        pcd = &c2;
        pcd->Report();
        cout << "\nCalling a function with a Cd reference argument:\n";
        Bravo(c1);
        Bravo(c2);
 
        cout << "\nTesting assignment:\n";
        Classic copy;
        copy = c2;
        copy.Report();
        
    return 0;
}
void Bravo(const Cd & disk) {
    disk.Report();
}


Добавлено через 6 часов 46 минут
Глава 13. Задача 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
24
25
26
27
28
29
30
31
32
33
34
35
36
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
 
using namespace std;
 
class Port {
private:
    char *brand;
    char style[20];
    int bottles;
public:
    
    Port(const char*br = "none", const char*st = "none", int b = 0);    
    Port(const Port &p );// конструктор копирования   
    virtual ~Port() { delete[] brand; }
    Port & operator=(const Port&p);
    Port & operator+=(int b); // добавляет b к bottles
    Port&operator-=(int b);
    int BottleCount() const { return bottles; }
    virtual void show() const;
    friend ostream & operator<<(ostream & os, const Port &p);
};
 
class VintagePort : public Port {
private :
    char *nickname;
    int year;
public:
    VintagePort();
    VintagePort(const char*br, int b, const char *nn, int y);
    VintagePort(const VintagePort&vp);
    ~VintagePort() { delete[] nickname; }
    VintagePort &operator=(const VintagePort &vp);
    void show() const;
    friend ostream & operator<<(ostream&os, const VintagePort &vp);
};


Файл 2:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "Port.h"
#include <iostream>
Port::Port(const char*br, const char*st, int b) {
    brand = new char[strlen(br) + 1];
    strcpy(brand, br);
    strcpy(style, st);
    bottles = b;
}
 
Port::Port(const Port &p) {
    brand = new char[strlen(p.brand) + 1];
    strcpy(brand, p.brand);
    strcpy(style, p.style);
    bottles = p.bottles;
 
}
 
Port & Port::operator=(const Port&p) {
    delete[] brand;
    brand = new char[strlen(p.brand) + 1];
    strcpy(brand, p.brand);
    strcpy(style, p.style);
    bottles = p.bottles;
    return *this;
}
Port & Port::operator+=(int b) {
    bottles += b;
    return *this;
}
Port&Port::operator-=(int b) {
    bottles -= b;
    return *this;
}
 
void Port::show()const {
    using std::cout;
    using std::endl;
    cout << "Brand: " << brand << endl;
    cout << "Style: " << style << endl;
    cout << "Bottles: " << bottles << endl;
}
ostream & operator<<(ostream & os, const Port &p) {
    os << "Brand: " << p.brand << " ";
    os << "Kind: " << p.style << " ";
    os << "Bottles: " << p.bottles;
    return os;
}
 
VintagePort::VintagePort()  {
    Port::Port();
    nickname = new char[1];
    nickname[0] = '\0';
    int year = 0;
}
 
void VintagePort::show() const {
    Port::show();
    std::cout << "nickname: " << nickname << std::endl;
    std::cout << "year: " << year << std::endl;
}
VintagePort::VintagePort(const char*br, int b, const char *nn, int y): Port(br,"Vintage",b) {
    nickname = new char[strlen(nn) + 1];
    strcpy(nickname, nn);
    year = y;
}
VintagePort::VintagePort(const VintagePort&vp) :Port(vp) {
    nickname = new char[strlen(vp.nickname) + 1];
    strcpy(nickname, vp.nickname);
    year = vp.year;
}
VintagePort &VintagePort::operator=(const VintagePort &vp) {
    if (this == &vp) return *this;
    Port::operator=(vp);
    delete[] nickname;
    nickname = new char[strlen(vp.nickname) + 1];
    strcpy(nickname, vp.nickname);
    year = vp.year;
}
0
20.05.2016, 04:56
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2016, 04:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вклады, простые и сложные проценты (вопрос из учебника С. Прата)
Изучаю книгу С. Прата. В главе 5 у него присутствует такая задача: Дафна сделала вклад на сумму...

Программа из учебника Прата. Структуры в многофайловом приложении. Исправить недочеты в коде
Посмотрите, пожалуйста, что где исправить. int fill()-для заполнения массива all-для вывода суммы...

Объясните решение задачи из учебника
Книга &quot;Курс теории вероятностей&quot; Б.В. Гнеденко, серия &quot;Классический университетский учебник&quot;, 2005...

читаю главу 10 книги стивена праты - "объекты и классы". автор во всех примерах поступает следуйщим образм: объявляет класс в одном фаиле...
...а реализует функции в другом - в том котором создаёт и ползуется объектом. у меня вопросс: а не...


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Опции темы

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